28 changed files with 2894 additions and 791 deletions
@ -0,0 +1,28 @@ |
|||
package com.wmeimob.bjyy.controller; |
|||
|
|||
import com.wmeimob.bjyy.model.MentalTest; |
|||
import com.wmeimob.bjyy.service.MentalService; |
|||
import com.wmeimob.bjyy.util.DateUtil; |
|||
import com.wmeimob.bjyy.util.UploadFileUtil_Servlet3; |
|||
import lombok.extern.log4j.Log4j; |
|||
import org.springframework.web.bind.annotation.RequestMapping; |
|||
import org.springframework.web.bind.annotation.RestController; |
|||
|
|||
import javax.annotation.Resource; |
|||
import javax.servlet.http.HttpServletResponse; |
|||
|
|||
@Log4j |
|||
@RestController |
|||
@RequestMapping("/practice") |
|||
public class DownloadController { |
|||
@Resource |
|||
private MentalService mentalService; |
|||
|
|||
@RequestMapping("download") |
|||
public void download(HttpServletResponse response, String testId) throws Exception { |
|||
log.info("下载:{}" + testId); |
|||
MentalTest test = mentalService.getMentalTestById(testId); |
|||
UploadFileUtil_Servlet3.download(response, test.getPdfUrl(), |
|||
"脑益宝—老年脑健康认知训练方案" + DateUtil.format(test.getTestAt(), DateUtil.yyyyMMddDot) + ".pdf"); |
|||
} |
|||
} |
|||
File diff suppressed because it is too large
@ -0,0 +1,61 @@ |
|||
.gearDate {font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;font-size: 10px;background-color: rgba(0, 0, 0, 0.2);display: block;position: absolute;position: fixed;top: 0;left: 0;width: 100%;height: 100%;z-index: 2018917;overflow: hidden;-webkit-animation-fill-mode: both;animation-fill-mode: both;-webkit-transform: translateZ(0);} |
|||
.date_ctrl {vertical-align: middle;background-color: #F0F0F0;color: #363837;margin: 0;height: auto;width: 100%;max-width: 600px;position: absolute;left: 0;right:0;bottom: 0;z-index: 9902;overflow: hidden;margin:0 auto;-webkit-transform: translateY(0);transform: translateY(0);-ms-transform: translateY(0);-moz-transform: translateY(0);} |
|||
.slideInUp {animation: slideInUp .3s ease-in;-webkit-animation: slideInUp .3s ease-in;-ms-animation: slideInUp .3s ease-in;-moz-animation: slideInUp .3s ease-in} |
|||
@-webkit-keyframes slideInUp { |
|||
0% {-webkit-transform: translateY(100%);transform: translateY(100%);-moz-transform: translateY(100%);-ms-transform: translateY(100%);-o-transform: translateY(100%)} |
|||
100% {-webkit-transform: translateY(0);transform: translateY(0);-moz-transform: translateY(0);-o-transform: translateY(0);-ms-transform: translateY(0)} |
|||
} |
|||
@keyframes slideInUp { |
|||
0% {-webkit-transform: translateY(100%);transform: translateY(100%);-moz-transform: translateY(100%);-ms-transform: translateY(100%);-o-transform: translateY(100%)} |
|||
100% {-webkit-transform: translateY(0);transform: translateY(0);-moz-transform: translateY(0);-o-transform: translateY(0);-ms-transform: translateY(0)} |
|||
} |
|||
@-moz-keyframes slideInUp { |
|||
0% {-webkit-transform: translateY(100%);transform: translateY(100%);-moz-transform: translateY(100%);-ms-transform: translateY(100%);-o-transform: translateY(100%)} |
|||
100% {-webkit-transform: translateY(0);transform: translateY(0);-moz-transform: translateY(0);-o-transform: translateY(0);-ms-transform: translateY(0)} |
|||
} |
|||
@-ms-keyframes slideInUp { |
|||
0% {-webkit-transform: translateY(100%);transform: translateY(100%);-moz-transform: translateY(100%);-ms-transform: translateY(100%);-o-transform: translateY(100%)} |
|||
100% {-webkit-transform: translateY(0);transform: translateY(0);-moz-transform: translateY(0);-o-transform: translateY(0);-ms-transform: translateY(0)} |
|||
} |
|||
.date_roll {position: relative;width: 100%;height: auto;overflow: hidden;font-weight: bold;background-color: transparent;-webkit-mask: -webkit-gradient(linear, 0% 50%, 0% 100%, from(#debb47), to(rgba(36, 142, 36, 0)));-webkit-mask: -webkit-linear-gradient(top, #debb47 50%, rgba(36, 142, 36, 0));} |
|||
.date_roll>div{font-size: 1.6em;height: 10em;float: left;background-color: transparent;position: relative;overflow: hidden;width: 33.33%;} |
|||
.date_roll_more>div{width: 25%;} |
|||
.date_roll_minut>div{width: 20%;} |
|||
.date_roll_mask {padding:0 1em;-webkit-mask: -webkit-gradient(linear, 0% 40%, 0% 0%, from(#debb47), to(rgba(36, 142, 36, 0)));-webkit-mask: -webkit-linear-gradient(bottom, #debb47 50%, rgba(36, 142, 36, 0));} |
|||
.date_grid {position: relative;top: 4em;width: 100%;height: 2em;margin: 0;box-sizing: border-box;z-index: 0;background-color: #E8E8E8;border-top: 1px solid #d4d4d4;border-bottom: 1px solid #d4d4d4;} |
|||
.date_grid>div {color: #000;position: absolute;right: 0;top: 0;font-size: .8em;line-height: 2.5em} |
|||
|
|||
.date_info_box{color: #363837;font-size: 1.8em;text-align: center;padding: .6em 0;text-align: center;border-bottom: 1px solid #d4d4d4;font-weight: 700;} |
|||
.date_class_box{text-align: center;padding:1em 2em;} |
|||
.date_class{display: inline-block;font-size: 1.4em;width:20%;padding:.2em 0;text-align: center;color: #809be6;border:1px solid #809be6;cursor: pointer;} |
|||
.date_class_box .date_class:first-child{border-top-left-radius: .2em;border-bottom-left-radius: .2em} |
|||
.date_class_box .date_class:last-child{border-top-right-radius: .2em;border-bottom-right-radius: .2em} |
|||
.date_class_box .active{background-color: #809be6;color: #fff} |
|||
/* .date_btn_box {overflow: hidden;position: relative;border-top:1px solid #d4d4d4;margin-top:1em;} |
|||
.date_btn {color: #000;font-size: 1.6em;line-height: 1em;text-align: center;padding: .8em 1em;cursor: pointer;float: left;width: 49.9%;box-sizing: border-box;} */ |
|||
.lcalendar_cancel{float:left !important;} |
|||
.lcalendar_finish{float:right !important;} |
|||
.date_btn.lcalendar_cancel{border-right:1px solid #d4d4d4;} |
|||
.gear {float: left;position: absolute;z-index: 9902;width: 5.5em;margin-top: -6em;cursor: pointer;padding:2em 0;} |
|||
.date_roll>div .gear {width: 100%;color:#000;} |
|||
.tooth {height: 2em;line-height: 2em;text-align: center;overflow: hidden;} |
|||
|
|||
.date_roll_more>div{width: 20%;} |
|||
.date_roll_more>div:nth-of-type(4),.date_roll_more>div:nth-of-type(1){width: 30%;} |
|||
.date_btn_box {overflow: hidden;position: relative;border-top:1px solid #d4d4d4;} |
|||
.date_btn {color: #000;font-size: 1.6em;line-height: 1em;text-align: center;padding: .8em 1em;cursor: pointer;float: left;width: 49.9%;box-sizing: border-box;} |
|||
.date_class_box{display: flex;align-items: center;justify-content: space-evenly;border-bottom: 1px solid #ccc;} |
|||
.date_class_box>div:nth-of-type(2){flex:1} |
|||
.date_class_box .date_btn{font-size: 1.4em;line-height: 1em;text-align: center;width: 2em;float: left;padding:0;border: none;height: 100%;} |
|||
|
|||
/* |
|||
'<div class="date_btn_box">' + |
|||
'<div class="date_btn lcalendar_cancel">取消</div>' + |
|||
'<div class="date_btn lcalendar_finish">确定</div>' + |
|||
'</div>' + */ |
|||
|
|||
@media screen and (min-width: 800px) { |
|||
body { |
|||
background-color:lightblue; |
|||
} |
|||
} |
|||
@ -0,0 +1,233 @@ |
|||
/**用法 |
|||
* Lunar.toSolar(2016, 6, 3); 农历转化公历 |
|||
* Lunar.toLunar(2016, 7, 6); 公历转化农历 |
|||
*/ |
|||
function Lunar (){ |
|||
this.MIN_YEAR = 1891, |
|||
this.MAX_YEAR = 2100, |
|||
this.lunarInfo = [ |
|||
[0,2,9, 21936], [6,1,30, 9656], [0,2,17, 9584], [0,2,6, 21168], [5,1,26,43344], [0,2,13,59728], |
|||
[0,2,2, 27296], [3,1,22,44368], [0,2,10,43856], [8,1,30,19304], [0,2,19,19168], [0,2,8, 42352], |
|||
[5,1,29,21096], [0,2,16,53856], [0,2,4, 55632], [4,1,25,27304], [0,2,13,22176], [0,2,2, 39632], |
|||
[2,1,22,19176], [0,2,10,19168], [6,1,30,42200], [0,2,18,42192], [0,2,6, 53840], [5,1,26,54568], |
|||
[0,2,14,46400], [0,2,3, 54944], [2,1,23,38608], [0,2,11,38320], [7,2,1, 18872], [0,2,20,18800], |
|||
[0,2,8, 42160], [5,1,28,45656], [0,2,16,27216], [0,2,5, 27968], [4,1,24,44456], [0,2,13,11104], |
|||
[0,2,2, 38256], [2,1,23,18808], [0,2,10,18800], [6,1,30,25776], [0,2,17,54432], [0,2,6, 59984], |
|||
[5,1,26,27976], [0,2,14,23248], [0,2,4, 11104], [3,1,24,37744], [0,2,11,37600], [7,1,31,51560], |
|||
[0,2,19,51536], [0,2,8, 54432], [6,1,27,55888], [0,2,15,46416], [0,2,5, 22176], [4,1,25,43736], |
|||
[0,2,13, 9680], [0,2,2, 37584], [2,1,22,51544], [0,2,10,43344], [7,1,29,46248], [0,2,17,27808], |
|||
[0,2,6, 46416], [5,1,27,21928], [0,2,14,19872], [0,2,3, 42416], [3,1,24,21176], [0,2,12,21168], |
|||
[8,1,31,43344], [0,2,18,59728], [0,2,8, 27296], [6,1,28,44368], [0,2,15,43856], [0,2,5, 19296], |
|||
[4,1,25,42352], [0,2,13,42352], [0,2,2, 21088], [3,1,21,59696], [0,2,9, 55632], [7,1,30,23208], |
|||
[0,2,17,22176], [0,2,6, 38608], [5,1,27,19176], [0,2,15,19152], [0,2,3, 42192], [4,1,23,53864], |
|||
[0,2,11,53840], [8,1,31,54568], [0,2,18,46400], [0,2,7, 46752], [6,1,28,38608], [0,2,16,38320], |
|||
[0,2,5, 18864], [4,1,25,42168], [0,2,13,42160], [10,2,2,45656], [0,2,20,27216], [0,2,9, 27968], |
|||
[6,1,29,44448], [0,2,17,43872], [0,2,6, 38256], [5,1,27,18808], [0,2,15,18800], [0,2,4, 25776], |
|||
[3,1,23,27216], [0,2,10,59984], [8,1,31,27432], [0,2,19,23232], [0,2,7, 43872], [5,1,28,37736], |
|||
[0,2,16,37600], [0,2,5, 51552], [4,1,24,54440], [0,2,12,54432], [0,2,1, 55888], [2,1,22,23208], |
|||
[0,2,9, 22176], [7,1,29,43736], [0,2,18, 9680], [0,2,7, 37584], [5,1,26,51544], [0,2,14,43344], |
|||
[0,2,3, 46240], [4,1,23,46416], [0,2,10,44368], [9,1,31,21928], [0,2,19,19360], [0,2,8, 42416], |
|||
[6,1,28,21176], [0,2,16,21168], [0,2,5, 43312], [4,1,25,29864], [0,2,12,27296], [0,2,1, 44368], |
|||
[2,1,22,19880], [0,2,10,19296], [6,1,29,42352], [0,2,17,42208], [0,2,6, 53856], [5,1,26,59696], |
|||
[0,2,13,54576], [0,2,3, 23200], [3,1,23,27472], [0,2,11,38608], [11,1,31,19176],[0,2,19,19152], |
|||
[0,2,8, 42192], [6,1,28,53848], [0,2,15,53840], [0,2,4, 54560], [5,1,24,55968], [0,2,12,46496], |
|||
[0,2,1, 22224], [2,1,22,19160], [0,2,10,18864], [7,1,30,42168], [0,2,17,42160], [0,2,6, 43600], |
|||
[5,1,26,46376], [0,2,14,27936], [0,2,2, 44448], [3,1,23,21936], [0,2,11,37744], [8,2,1, 18808], |
|||
[0,2,19,18800], [0,2,8, 25776], [6,1,28,27216], [0,2,15,59984], [0,2,4, 27424], [4,1,24,43872], |
|||
[0,2,12,43744], [0,2,2, 37600], [3,1,21,51568], [0,2,9, 51552], [7,1,29,54440], [0,2,17,54432], |
|||
[0,2,5, 55888], [5,1,26,23208], [0,2,14,22176], [0,2,3, 42704], [4,1,23,21224], [0,2,11,21200], |
|||
[8,1,31,43352], [0,2,19,43344], [0,2,7, 46240], [6,1,27,46416], [0,2,15,44368], [0,2,5, 21920], |
|||
[4,1,24,42448], [0,2,12,42416], [0,2,2, 21168], [3,1,22,43320], [0,2,9, 26928], [7,1,29,29336], |
|||
[0,2,17,27296], [0,2,6, 44368], [5,1,26,19880], [0,2,14,19296], [0,2,3, 42352], [4,1,24,21104], |
|||
[0,2,10,53856], [8,1,30,59696], [0,2,18,54560], [0,2,7, 55968], [6,1,27,27472], [0,2,15,22224], |
|||
[0,2,5, 19168], [4,1,25,42216], [0,2,12,42192], [0,2,1, 53584], [2,1,21,55592], [0,2,9, 54560] |
|||
] |
|||
|
|||
}; |
|||
//是否闰年
|
|||
Lunar.prototype.isLeapYear = function(year) { |
|||
return ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)); |
|||
} |
|||
//天干地支年
|
|||
Lunar.prototype.lunarYear = function(year) { |
|||
var gan = ['庚', '辛', '壬', '癸', '甲', '乙', '丙', '丁', '戊', '己'], |
|||
zhi = ['申', '酉', '戌', '亥', '子', '丑', '寅', '卯', '辰', '巳', '午', '未'], |
|||
str = year.toString().split(""); |
|||
// console.log("天干地支"+str[3]+'--'+(year % 12))
|
|||
return gan[str[3]] + zhi[year % 12]; |
|||
}, |
|||
//生肖年
|
|||
Lunar.prototype.zodiacYear = function(year) { |
|||
var zodiac = ['猴', '鸡', '狗', '猪', '鼠', '牛', '虎', '兔', '龙', '蛇', '马', '羊']; |
|||
return zodiac[year % 12]; |
|||
} |
|||
//公历月份天数
|
|||
//@param year 阳历-年
|
|||
//@param month 阳历-月
|
|||
Lunar.prototype.solarMonthDays = function(year, month) { |
|||
var FebDays = this.isLeapYear(year) ? 29 : 28; |
|||
var monthHash = ['', 31, FebDays, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; |
|||
return monthHash[month]; |
|||
} |
|||
//农历月份天数
|
|||
Lunar.prototype.lunarMonthDays = function(year, month) { |
|||
var monthData = this.lunarMonths(year); |
|||
return monthData[month - 1]; |
|||
} |
|||
//农历月份天数数组
|
|||
Lunar.prototype.lunarMonths = function(year) { |
|||
var yearData = this.lunarInfo[year - this.MIN_YEAR]; |
|||
var leapMonth = yearData[0]; |
|||
var bit = (+yearData[3]).toString(2); |
|||
var months = []; |
|||
for (var i = 0; i < bit.length; i++) { |
|||
months[i] = bit.substr(i, 1); |
|||
} |
|||
|
|||
for (var k = 0, len = 16 - months.length; k < len; k++) { |
|||
months.unshift('0'); |
|||
} |
|||
|
|||
months = months.slice(0, (leapMonth == 0 ? 12 : 13)); |
|||
for (var i = 0; i < months.length; i++) { |
|||
months[i] = +months[i] + 29; |
|||
} |
|||
return months; |
|||
} |
|||
//农历每年的天数
|
|||
//@param year 农历年份
|
|||
Lunar.prototype.lunarYearDays = function(year) { |
|||
var monthArray = this.lunarYearMonths(year); |
|||
var len = monthArray.length; |
|||
return (monthArray[len-1] == 0 ? monthArray[len-2] : monthArray[len-1]); |
|||
} |
|||
//
|
|||
Lunar.prototype.lunarYearMonths = function(year) { |
|||
var monthData = this.lunarMonths(year); |
|||
var res = []; |
|||
var temp = 0; |
|||
var yearData = this.lunarInfo[year - this.MIN_YEAR]; |
|||
var len = (yearData[0] == 0 ? 12 : 13); |
|||
for (var i = 0; i < len; i++) { |
|||
temp = 0; |
|||
for (j = 0; j <= i; j++) { |
|||
temp += monthData[j]; |
|||
} |
|||
res.push(temp); |
|||
} |
|||
return res; |
|||
} |
|||
//获取闰月
|
|||
//@param year 农历年份
|
|||
Lunar.prototype.leapMonth=function(year){ |
|||
var yearData = this.lunarInfo[year - this.MIN_YEAR]; |
|||
return yearData[0]; |
|||
} |
|||
//计算农历日期与正月初一相隔的天数
|
|||
Lunar.prototype.betweenLunarDays = function(year, month, day) { |
|||
var yearMonth = this.lunarMonths(year); |
|||
var res = 0; |
|||
for (var i = 1; i < month; i++) { |
|||
res += yearMonth[i-1]; |
|||
} |
|||
res += day - 1; |
|||
return res; |
|||
}, |
|||
//计算2个阳历日期之间的天数
|
|||
//@param year 阳历年
|
|||
//@param month
|
|||
//@param day
|
|||
//@param l_month 阴历正月对应的阳历月份
|
|||
//@param l_day 阴历初一对应的阳历天
|
|||
Lunar.prototype.betweenSolarDays = function(year, month, day, l_month, l_day) { |
|||
var time1 = new Date(year +"-"+ month +"-"+ day).getTime(), |
|||
time2 = new Date(year +"-"+ l_month +"-"+ l_day).getTime(); |
|||
return Math.ceil((time1-time2)/24/3600/1000); |
|||
}, |
|||
//根据距离正月初一的天数计算阴历日期
|
|||
//@param year 阳历年
|
|||
//@param between 天数
|
|||
Lunar.prototype.lunarByBetween = function(year, between) { |
|||
var lunarArray = [], yearMonth = [], t = 0, e = 0, leapMonth = 0, m = ''; |
|||
if (between == 0) { |
|||
t = 1; |
|||
e = 1; |
|||
m = '正月'; |
|||
} else { |
|||
year = between > 0 ? year : (year - 1); |
|||
yearMonth = this.lunarYearMonths(year); |
|||
leapMonth = this.leapMonth(year); |
|||
between = between > 0 ? between : (this.lunarYearDays(year) + between); |
|||
for (var i = 0; i < 13; i++) { |
|||
if (between == yearMonth[i]) { |
|||
t = i + 2; |
|||
e = 1; |
|||
break; |
|||
} else if (between < yearMonth[i]) { |
|||
t = i + 1; |
|||
e = between - ((yearMonth[i-1]) ? yearMonth[i-1] : 0) + 1; |
|||
break; |
|||
} |
|||
} |
|||
|
|||
m = (leapMonth != 0 && t == leapMonth + 1) |
|||
? ('闰'. this.chineseMonth(t-1)) |
|||
: this.chineseMonth(((leapMonth != 0 && leapMonth + 1 < t) ? (t - 1) : t)); |
|||
} |
|||
lunarArray.push(year, t, e); //年 月 日
|
|||
lunarArray.push(this.lunarYear(year), |
|||
this.zodiacYear(year), |
|||
m, |
|||
this.chineseNumber(e)); //天干地支年 生肖年 月份 日
|
|||
lunarArray.push(leapMonth); //闰几月
|
|||
return lunarArray; |
|||
}, |
|||
//中文月份
|
|||
Lunar.prototype.chineseMonth = function(month,num) { |
|||
var monthHash = ['', '正月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '冬月', '腊月']; |
|||
if(num){ |
|||
var txt = monthHash[num] |
|||
monthHash.splice(num+1,0,"闰"+txt) |
|||
} |
|||
return monthHash[month]; |
|||
}, |
|||
//中文日期
|
|||
Lunar.prototype.chineseNumber = function(num) { |
|||
var dateHash = ['', '一', '二', '三', '四', '五', '六', '七', '八', '九', '十']; |
|||
if (num <= 10) { |
|||
res = '初'+ dateHash[num]; |
|||
} else if (num > 10 && num < 20) { |
|||
res = '十'+ dateHash[num-10]; |
|||
} else if (num == 20) { |
|||
res = "二十"; |
|||
} else if (num > 20 && num < 30) { |
|||
res = "廿"+ dateHash[num-20]; |
|||
} else if (num == 30) { |
|||
res = "三十"; |
|||
} |
|||
return res; |
|||
}, |
|||
//转换农历
|
|||
Lunar.prototype.toLunar = function(year, month, day) { |
|||
var yearData = this.lunarInfo[year - this.MIN_YEAR]; |
|||
if (year == this.MIN_YEAR && month <= 2 && day <= 9) { |
|||
return [1891, 1, 1, '辛卯', '兔', '正月', '初一']; |
|||
} |
|||
return this.lunarByBetween(year, this.betweenSolarDays(year, month, day, yearData[1], yearData[2])); |
|||
}, |
|||
//转换公历
|
|||
//@param year 阴历-年
|
|||
//@param month 阴历-月,闰月处理:例如如果当年闰五月,那么第二个五月就传六月,相当于阴历有13个月
|
|||
//@param date 阴历-日
|
|||
Lunar.prototype.toSolar = function(year, month, day) { |
|||
var yearData = this.lunarInfo[year - this.MIN_YEAR]; |
|||
var between = this.betweenLunarDays(year, month, day); |
|||
var ms = new Date(year +"-" + yearData[1] +"-"+ yearData[2]).getTime(); |
|||
var s = ms + between * 24 * 60 * 60 * 1000; |
|||
var d = new Date(); |
|||
d.setTime(s); |
|||
year = d.getFullYear(); |
|||
month = d.getMonth() + 1; |
|||
day = d.getDate(); |
|||
return [year, month, day]; |
|||
} |
|||
File diff suppressed because it is too large
Loading…
Reference in new issue