packagecom.dawn.question.api.wechat.dao;importcom.fasterxml.jackson.core.JsonGenerator;importcom.fasterxml.jackson.databind.MappingJsonFactory;importjava.io.StringWriter;import java.util.*;/*** Author: cg
* Date: 2020/7/1 17:24
* Content:*/
public classSignDataTableModel {private static String[] parsePatterns = {"yyyy-MM-dd","yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM", "yyyy/MM/dd","yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM", "yyyy.MM.dd","yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"};//第几天
privateInteger day;//是否签到(1:已签到,0:未签到)
privateInteger isSign;//是否是今天(1:是,0:否)
privateInteger isToday;//月份
privateInteger month;//月份字符串(month+"月")
privateString monthStr;publicDate parseDate(String str) {if (str == null) {return null;
}try{returnorg.apache.commons.lang.time.DateUtils.parseDate(str, parsePatterns);
}catch(java.text.ParseException e) {
e.printStackTrace();
}return null;
}publicInteger getWeekDayNumber(String dateStr) {
Date date=parseDate(dateStr);
Calendar calendar=Calendar.getInstance();if(date != null){
calendar.setTime(date);
}int w = calendar.get(Calendar.DAY_OF_WEEK) - 1;returnw;
}public Integer getMonthOneWeek(intdayNumber) {
Calendar cal=Calendar.getInstance();
cal.setTime(newDate());
String oneDay= cal.get(Calendar.YEAR) + "-" + (cal.get(Calendar.MONTH) + 1) + "-"+dayNumber+"";//1号日期
int index =getWeekDayNumber(oneDay);if(index==0){
index=7;
}returnindex;
}/*** 获取的当月最后一天是几号*/
publicInteger getMonthLastDay() {
Calendar cal=Calendar.getInstance();
cal.setTime(newDate());int year =cal.get(Calendar.YEAR);int month = cal.get(Calendar.MONTH)+1;
String beforeMonthLastStr= year+"-"+(month+1)+"-"+"01"; //上个月日期
cal.setTime(parseDate(beforeMonthLastStr));
cal.set(Calendar.DAY_OF_MONTH,0);returncal.get(Calendar.DAY_OF_MONTH);
}/*** 获取的当月最后一天是星期几*/
publicInteger getMonthLastWeekNumber() {
Calendar cal=Calendar.getInstance();
cal.setTime(newDate());int lastDay = getMonthLastDay();//本月最后一天是几号
String lastDayStr = cal.get(Calendar.YEAR) + "-" + (cal.get(Calendar.MONTH) + 1) + "-"+lastDay+"";//1号日期
int index =getWeekDayNumber(lastDayStr);if(index==0){
index=7;
}returnindex;
}/*** 获取的上月最后一天是几号*/
publicInteger getBeforeMonthLastDay() {
Calendar cal=Calendar.getInstance();int year =cal.get(Calendar.YEAR);int month = cal.get(Calendar.MONTH)+1;if (month==12){
month=0;
year=year+1;
}
String beforeMonthLastStr= year+"-"+(month)+"-"+"01"; //上个月日期
cal.setTime(parseDate(beforeMonthLastStr));
cal.set(Calendar.DAY_OF_MONTH,0);returncal.get(Calendar.DAY_OF_MONTH);
}publicString toJson(Object object) {
MappingJsonFactory f= newMappingJsonFactory();
StringWriter sw= newStringWriter();try{
JsonGenerator generator=f.createGenerator(sw);
generator.writeObject(object);
generator.close();
}catch(Exception e) {return "";
}returnsw.toString();
}public static voidmain(String[] args) {/*组装日历数据*/
//headMap(year:'2019', month:'四月', days:[dataMap(rowIndex:0,data:[]) ])
Map headMap = newHashMap();
Calendar cal=Calendar.getInstance();
headMap.put("year", cal.get(Calendar.YEAR));
headMap.put("month", (cal.get(Calendar.MONTH) + 1) + "月");
SignDataTableModel tableModel= newSignDataTableModel();
List monthDataList = new ArrayList<>();int monthOneWeek = tableModel.getMonthOneWeek(1);//本月1号是星期几(1-7)
int lastDay = tableModel.getMonthLastDay();//本月最后一天是几号
int monthLastWeek = tableModel.getMonthLastWeekNumber();//本月最后一天是星期几(1-7)
int beforeMonthLastDay = tableModel.getBeforeMonthLastDay();//上个月最后一天是几号
int beforeDay = beforeMonthLastDay-monthOneWeek+2;int nextDay = 1;int index = 1;int totalCount = lastDay+monthOneWeek-1+(7-monthLastWeek);//日历表总天数
int beforeMonth =cal.get(Calendar.MONTH);if(beforeMonth==0){
beforeMonth=12;
}int nextMonth = cal.get(Calendar.MONTH)+2;if(nextMonth==13){
nextMonth=1;
}for (int i=0;i
tableModel= newSignDataTableModel();
tableModel.setIsToday(0);
tableModel.setIsSign(0);if(beforeDay<=beforeMonthLastDay){
tableModel.setDay(beforeDay);
tableModel.setMonth(beforeMonth);
tableModel.setMonthStr(beforeMonth+"月");
beforeDay++;
}else{
tableModel.setDay(index);if (index==cal.get(Calendar.DATE)){
tableModel.setIsToday(1);
}
tableModel.setMonth(cal.get(Calendar.MONTH)+1);
tableModel.setMonthStr((cal.get(Calendar.MONTH)+1)+"月");
index++;
}if(index-1>lastDay && 7-monthLastWeek>0){
tableModel.setDay(nextDay);
tableModel.setMonth(nextMonth);
tableModel.setMonthStr(nextMonth+"月");
nextDay++;
}
monthDataList.add(tableModel);
}//日历表的签到数据
int toDay = monthDataList.get(0).getDay();int endDay = monthDataList.get(monthDataList.size()-1).getDay();int year =cal.get(Calendar.YEAR);int month = cal.get(Calendar.MONTH)+1;
String beforeMonthStr=beforeMonth+"";
String nextMonthStr=nextMonth+"";if(beforeMonth<10){
beforeMonthStr="0"+beforeMonthStr;
}if(nextMonth<10){
nextMonthStr="0"+nextMonthStr;
}
String monthStr= month+"";if(month<10){
monthStr="0"+monthStr;
}
String statTime= year+"-"+monthStr+"-"+toDay;
String endTime= year+"-"+monthStr+"-"+endDay;if(toDay>1){
statTime=year+"-"+beforeMonthStr+"-"+toDay;if(beforeMonth==12){
statTime=(year-1)+"-"+beforeMonthStr+"-"+toDay;
}
}if(endDay<=7){
endTime=year+"-"+nextMonthStr+"-0"+endDay;if(nextMonth==1){
endTime=(year+1)+"-"+nextMonthStr+"-0"+endDay;
}
}
List rowDataList = new ArrayList<>();
Map rowMap;
List rowMaps = newArrayList();int i=0;int rowNumber=0;for(SignDataTableModel signDataTableModel : monthDataList) {
i++;
rowDataList.add(signDataTableModel);if(i%7==0){
rowNumber++;
rowMap= newLinkedHashMap();
rowMap.put("rowIndex",rowNumber);
rowMap.put("data",rowDataList);
rowMaps.add(rowMap);
rowDataList= new ArrayList<>();
}
}
headMap.put("days",rowMaps);
System.out.println(tableModel.toJson(headMap));
}publicInteger getDay() {returnday;
}public voidsetDay(Integer day) {this.day =day;
}publicInteger getIsSign() {returnisSign;
}public voidsetIsSign(Integer isSign) {this.isSign =isSign;
}publicInteger getIsToday() {returnisToday;
}public voidsetIsToday(Integer isToday) {this.isToday =isToday;
}publicInteger getMonth() {returnmonth;
}public voidsetMonth(Integer month) {this.month =month;
}publicString getMonthStr() {returnmonthStr;
}public voidsetMonthStr(String monthStr) {this.monthStr =monthStr;
}
}