From 03151f30b03113dcc72972972495c7735b5afb66 Mon Sep 17 00:00:00 2001
From: cjl <276999030@qq.com>
Date: Thu, 03 Aug 2023 10:23:57 +0800
Subject: [PATCH] feat:空气质量报告
---
screen-common/src/main/java/com/moral/util/DateUtils.java | 8 +
screen-api/src/main/java/com/moral/api/dto/SysTestDTO.java | 47 ++++++
screen-api/src/main/java/com/moral/api/service/SysTestService.java | 3
screen-api/src/main/resources/word/空气质量周报.docx | 0
screen-api/src/main/java/com/moral/api/controller/SysTestController.java | 184 +++++++++++++++++++++++--
screen-api/src/main/java/com/moral/api/entity/SysTest.java | 3
screen-api/src/main/java/com/moral/api/service/impl/SysTestServiceImpl.java | 132 ++++++++++++++++++
7 files changed, 353 insertions(+), 24 deletions(-)
diff --git a/screen-api/src/main/java/com/moral/api/controller/SysTestController.java b/screen-api/src/main/java/com/moral/api/controller/SysTestController.java
index 36f131a..8071454 100644
--- a/screen-api/src/main/java/com/moral/api/controller/SysTestController.java
+++ b/screen-api/src/main/java/com/moral/api/controller/SysTestController.java
@@ -1,6 +1,10 @@
package com.moral.api.controller;
import cn.afterturn.easypoi.word.WordExportUtil;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.ExcelWriter;
+import com.alibaba.excel.write.metadata.WriteSheet;
+import com.moral.api.dto.SysTestDTO;
import com.moral.api.entity.SysTest;
import com.moral.api.service.SysTestService;
import com.moral.util.DateUtils;
@@ -17,6 +21,7 @@
import javax.servlet.http.HttpServletResponse;
import java.io.File;
+import java.io.FileOutputStream;
import java.io.OutputStream;
import java.lang.reflect.Field;
import java.net.URLEncoder;
@@ -40,23 +45,82 @@
@GetMapping("resultWord")
- public void adresultWordd(HttpServletResponse response,String time) {
- List<SysTest> listAll = sysTestService.listAll(time,"2022-06-22",null);
+ public void adresultWordd(HttpServletResponse response,String time,String endTime) {
+ // for(int i = 495;i<1095;i++){
+ List<SysTest> listAll = sysTestService.listAll(time,endTime,null);
+ if(CollectionUtils.isEmpty(listAll)){
+ return;
+ }
+ /* Date endTime =listAll.get(0).getTime();
+ String endTimeStr = DateUtils.dateToDateString(endTime,DateUtils.yyyyMMdd_EN);
+ String fileName = "������������������.docx";
+ Map<String,Object> map = resultMap(listAll);
+ downloadWord(fileName, map, response,"������������������"+endTimeStr+".docx");*/
+ // time = DateUtils.dateToDateString(DateUtils.addDays(endTime,1),DateUtils.yyyy_MM_dd_EN);
+ // }
+ }
+
+ @GetMapping("excelM")
+ public void excelM(HttpServletResponse response,String time,String endTime) {
+ // for(int i = 495;i<1095;i++){
+ String ks = "2020-06-01";
+ Date ksDate = DateUtils.convertDate(ks);
+ List<SysTest> result = new ArrayList<>();
+ for(int i = 0;i<37;i++){
+ Date jsDate = DateUtils.getLastDayOfCurrMonth(ksDate);
+ List<SysTest> listAll = sysTestService.listAllAvg(DateUtils.dateToDateString(ksDate,DateUtils.yyyy_MM_dd_EN),DateUtils.dateToDateString(jsDate,DateUtils.yyyy_MM_dd_EN),null);
+ System.out.println("���������"+DateUtils.dateToDateString(ksDate,DateUtils.yyyy_MM_dd_EN));
+ System.out.println("���������"+DateUtils.dateToDateString(jsDate,DateUtils.yyyy_MM_dd_EN));
+ ksDate = DateUtils.addMonths(ksDate,1);
+ result.addAll(listAll);
+ }
+
+ if(CollectionUtils.isEmpty(result)){
+ return;
+ }
+ String path = "D:\\���������������������.xls";
+ WriteSheet build = EasyExcel.writerSheet("������������").head(SysTestDTO.class).build();
+ // ������ easyexcel ��������������������� ������ ������������������������excel������������������������������execl������������������������java���������������������
+ ExcelWriter excelWriter = EasyExcel.write(path, SysTestDTO.class).build();
+ excelWriter.write(result, build);
+ excelWriter.finish();
+ }
+
+ @GetMapping("excelDay")
+ public void excelDay(HttpServletResponse response,String time,String endTime) {
+
+ List<SysTest> listAll = sysTestService.listAll(time,endTime,null);
+
if(CollectionUtils.isEmpty(listAll)){
return;
}
- Date endTime =listAll.get(0).getTime();
- String endTimeStr = DateUtils.dateToDateString(endTime,DateUtils.yyyyMMdd_EN);
- String fileName = "������������������.docx";
- Map<String,Object> map = resultMap(listAll);
+ String path = "D:\\���������������������.xls";
+ WriteSheet build = EasyExcel.writerSheet("������������").head(SysTestDTO.class).build();
+ // ������ easyexcel ��������������������� ������ ������������������������excel������������������������������execl������������������������java���������������������
+ ExcelWriter excelWriter = EasyExcel.write(path, SysTestDTO.class).build();
+ excelWriter.write(listAll, build);
+ excelWriter.finish();
+ }
- //���������map
- // Map result = JSON.parseObject(JSON.toJSONString(entity), Map.class);
- // Map<String, Object> result = EasyPoiUtil.entityToMap(entity);
- downloadWord(fileName, map, response,"������������������"+endTimeStr+".docx");
-
-
-
+ @GetMapping("resultWordWeek")
+ public void resultWordWeek(HttpServletResponse response) {
+ String ks = "2020-06-22";
+ Date ksDate = DateUtils.convertDate(ks);
+ for(int i = 0;i<157;i++){
+ Date jsDate = DateUtils.addDays(ksDate,6);
+ String time = DateUtils.dateToDateString(ksDate,DateUtils.yyyy_MM_dd_EN);
+ String endTime = DateUtils.dateToDateString(jsDate,DateUtils.yyyy_MM_dd_EN);
+ List<SysTest> listAll = sysTestService.listAllAvg(time,endTime,null);
+ if(CollectionUtils.isEmpty(listAll)){
+ return;
+ }
+ String fileName = "������������������.docx";
+ String time1 = DateUtils.dateToDateString(ksDate,"yyyy.MM.dd");
+ String endTime1= DateUtils.dateToDateString(jsDate,"yyyy.MM.dd");
+ Map<String,Object> map = resultWeekMap(listAll,i+1,time1+"-"+endTime1);
+ downloadWord(fileName, map, response,"������������������"+time+".docx");
+ ksDate = DateUtils.addDays(ksDate,7);
+ }
}
@@ -64,15 +128,14 @@
String path = getPath(fileName);//��������� resources������
try {
//������������������
-
+ OutputStream out = new FileOutputStream("E:\\home\\week\\" + newFileName);
File rootFile = new File(ResourceUtils.getURL("classpath:").getPath());
File file= new File(rootFile, path);
-
XWPFDocument word = WordExportUtil.exportWord07(file.getPath(), params);
response.setCharacterEncoding("utf-8");
response.setContentType("multipart/form-data");
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(newFileName, "utf-8"));
- OutputStream out = response.getOutputStream();
+ //OutputStream out = response.getOutputStream();
word.write(out);
out.flush();
out.close();
@@ -146,11 +209,39 @@
resultMap.put(name+"S", StringUtils.isNotEmpty(s.getSu())?s.getSu():"--");
}
- String bodyName = stringButterStr(listAll);
+ //������
+ String bodyName = stringButterStr(listAll);
+
resultMap.put("������������",bodyName);
return resultMap;
}
-
+ private Map<String,Object> resultWeekMap(List<SysTest> listAll,int week,String weekTime){
+ Map<String,Object> resultMap = new HashMap<>();
+ resultMap.put("���",week);
+ resultMap.put("������",weekTime);
+ String name = "���";
+ for(SysTest s : listAll){
+ if(s.getName().contains("���")){
+ name = "���";
+ }else if(s.getName().contains("���")){
+ name = "���";
+ }else {
+ name = "���";
+ }
+ resultMap.put(name+"AQI", StringUtils.isNotEmpty(s.getAqi())?s.getAqi():"--");
+ resultMap.put(name+"PM10", StringUtils.isNotEmpty(s.getPm10())?s.getPm10():"--");
+ resultMap.put(name+"PM2", StringUtils.isNotEmpty(s.getPm25())?s.getPm25():"--");
+ resultMap.put(name+"SO2", StringUtils.isNotEmpty(s.getSo2())?s.getSo2():"--");
+ resultMap.put(name+"NO2", StringUtils.isNotEmpty(s.getNo2())?s.getNo2():"--");
+ resultMap.put(name+"CO", StringUtils.isNotEmpty(s.getCo())?s.getCo():"--");
+ resultMap.put(name+"O3", StringUtils.isNotEmpty(s.getO3())?s.getO3():"--");
+ resultMap.put(name+"TV", StringUtils.isNotEmpty(s.getVoc())?s.getVoc():"--");
+ resultMap.put(name+"S", StringUtils.isNotEmpty(s.getSu())?s.getSu():"--");
+ }
+ String bodyName = stringButterStrWeek(listAll);
+ resultMap.put("������������",bodyName);
+ return resultMap;
+ }
private String stringButterStr(List<SysTest> listAll){
// 0 ������1 ������ 2���������3���������
@@ -279,7 +370,41 @@
}
-
+ private String stringButterStrWeek(List<SysTest> listAll){
+ StringBuffer stringBuffer = new StringBuffer();
+ SysTest result0 = listAll.get(0);
+ SysTest result1 = listAll.get(1);
+ SysTest result2 = listAll.get(2);
+ Map<String,String> pm10 = nameCode(result0.getName(),result1.getName(),result2.getName(),result0.getPm10(),result1.getPm10(),result2.getPm10());
+ Map<String,String> pm25 = nameCode(result0.getName(),result1.getName(),result2.getName(),result0.getPm25(),result1.getPm25(),result2.getPm25());
+ Map<String,String> so = nameCode(result0.getName(),result1.getName(),result2.getName(),result0.getSo2(),result1.getSo2(),result2.getSo2());
+ Map<String,String> no = nameCode(result0.getName(),result1.getName(),result2.getName(),result0.getNo2(),result1.getNo2(),result2.getNo2());
+ Map<String,String> co = nameCode(result0.getName(),result1.getName(),result2.getName(),result0.getCo(),result1.getCo(),result2.getCo());
+ Map<String,String> o3 = nameCode(result0.getName(),result1.getName(),result2.getName(),result0.getO3(),result1.getO3(),result2.getO3());
+ if(pm10.isEmpty()&& pm25.isEmpty()&&so.isEmpty()&& no.isEmpty()&& co.isEmpty()&& o3.isEmpty()){
+ return stringBuffer.toString();
+ }
+ stringBuffer.append("���������");
+ if(!pm10.isEmpty()){
+ stringBuffer.append("PM10���������������"+pm10.get("high")+"������������������"+pm10.get("low")+"���");
+ }
+ if(!pm25.isEmpty()){
+ stringBuffer.append("PM2.5���������������"+pm25.get("high")+"������������������"+pm25.get("low")+"���");
+ }
+ if(!so.isEmpty()){
+ stringBuffer.append("SO2���������������"+so.get("high")+"������������������"+so.get("low")+"���");
+ }
+ if(!no.isEmpty()){
+ stringBuffer.append("NO2���������������"+no.get("high")+"������������������"+no.get("low")+"���");
+ }
+ if(!co.isEmpty()){
+ stringBuffer.append("CO���������������"+co.get("high")+"������������������"+co.get("low")+"���");
+ }
+ if(!o3.isEmpty()){
+ stringBuffer.append("O3���������������"+o3.get("high")+"������������������"+o3.get("low")+"���");
+ }
+ return stringBuffer.toString();
+ }
private Map<String,String> nameCode(String name1,String name2,String name3,String nums1,String nums2,String nums3){
double num1 = StringUtils.isNotEmpty(nums1)?Double.parseDouble(nums1):0;
double num2 = StringUtils.isNotEmpty(nums2)?Double.parseDouble(nums2):0;
@@ -339,7 +464,28 @@
}
+ public static void main(String[] args) {
+ /*String ks = "2020-06-01";
+ Date ksDate = DateUtils.convertDate(ks);
+ for(int i = 0;i<37;i++){
+ Date jsDate = DateUtils.getLastDayOfCurrMonth(ksDate);
+ System.out.println("���������"+DateUtils.dateToDateString(ksDate,DateUtils.yyyy_MM_dd_EN));
+ System.out.println("���������"+DateUtils.dateToDateString(jsDate,DateUtils.yyyy_MM_dd_EN));
+ ksDate = DateUtils.addMonths(ksDate,1);
+ }*/
+ String ks = "2020-06-22";
+ Date ksDate = DateUtils.convertDate(ks);
+ for(int i = 0;i<157;i++){
+ Date jsDate = DateUtils.addDays(ksDate,6);
+ System.out.println("���������"+DateUtils.dateToDateString(ksDate,DateUtils.yyyy_MM_dd_EN));
+ System.out.println("���������"+DateUtils.dateToDateString(jsDate,DateUtils.yyyy_MM_dd_EN));
+ ksDate = DateUtils.addDays(ksDate,7);
+ }
+
+
+ }
+
}
diff --git a/screen-api/src/main/java/com/moral/api/dto/SysTestDTO.java b/screen-api/src/main/java/com/moral/api/dto/SysTestDTO.java
new file mode 100644
index 0000000..61f2023
--- /dev/null
+++ b/screen-api/src/main/java/com/moral/api/dto/SysTestDTO.java
@@ -0,0 +1,47 @@
+package com.moral.api.dto;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.baomidou.mybatisplus.annotation.TableField;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+
+/**
+ * @ClassName SysTestDTO
+ * @Description TODO
+ * @Author @lizijie
+ * @Date 2023-08-02 17:22
+ * @Version 1.0
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class SysTestDTO {
+ private static final long serialVersionUID = 1L;
+ /*@ExcelProperty("������")
+ private String mon;*/
+ @ExcelProperty("������")
+ private String name;
+/*
+ private String mac;*//**/
+ @ExcelProperty("������")
+ private Date time;
+ @ExcelProperty("PM10")
+ private String pm10;
+ @ExcelProperty("PM2.5")
+ private String pm25;
+ @ExcelProperty("SO2")
+ private String so2;
+ @ExcelProperty("NO2")
+ private String no2;
+ @ExcelProperty("CO")
+ private String co;
+ @ExcelProperty("O3")
+ private String o3;
+ @ExcelProperty("TVOC")
+ private String voc;
+ @ExcelProperty("AQI")
+ private String aqi;
+ @ExcelProperty("������")
+ private String su;
+}
diff --git a/screen-api/src/main/java/com/moral/api/entity/SysTest.java b/screen-api/src/main/java/com/moral/api/entity/SysTest.java
index b8b4590..3f2ee0e 100644
--- a/screen-api/src/main/java/com/moral/api/entity/SysTest.java
+++ b/screen-api/src/main/java/com/moral/api/entity/SysTest.java
@@ -49,4 +49,7 @@
@TableField(exist = false)
private String su;
+ @TableField(exist = false)
+ private String mon;
+
}
diff --git a/screen-api/src/main/java/com/moral/api/service/SysTestService.java b/screen-api/src/main/java/com/moral/api/service/SysTestService.java
index c6ea4db..f78549e 100644
--- a/screen-api/src/main/java/com/moral/api/service/SysTestService.java
+++ b/screen-api/src/main/java/com/moral/api/service/SysTestService.java
@@ -16,4 +16,7 @@
public interface SysTestService extends IService<SysTest> {
List<SysTest> listAll(String startTime,String endTime ,String mac);
+
+
+ List<SysTest> listAllAvg(String startTime,String endTime ,String mac);
}
diff --git a/screen-api/src/main/java/com/moral/api/service/impl/SysTestServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/SysTestServiceImpl.java
index 31e1e8c..c3dc5a8 100644
--- a/screen-api/src/main/java/com/moral/api/service/impl/SysTestServiceImpl.java
+++ b/screen-api/src/main/java/com/moral/api/service/impl/SysTestServiceImpl.java
@@ -8,11 +8,12 @@
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.moral.api.utils.AqiUtils;
import com.moral.util.DateUtils;
+import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Service;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.stream.Collectors;
/**
* <p>
@@ -28,8 +29,11 @@
@Override
public List<SysTest> listAll(String startTime,String endTime, String mac) {
QueryWrapper<SysTest> queryWrapper = new QueryWrapper<>();
- // queryWrapper.between(!StringUtils.isEmpty(startTime)&&!StringUtils.isEmpty(endTime),"time",startTime,endTime);
- queryWrapper.eq(!StringUtils.isEmpty(startTime),"time", DateUtils.convertDate(startTime));
+ if(!StringUtils.isEmpty(startTime)&&!StringUtils.isEmpty(endTime)){
+ queryWrapper.between(!StringUtils.isEmpty(startTime)&&!StringUtils.isEmpty(endTime),"time",DateUtils.convertDate(startTime),DateUtils.convertDate(endTime));
+ }else if(!StringUtils.isEmpty(startTime)){
+ queryWrapper.eq(!StringUtils.isEmpty(startTime),"time", DateUtils.convertDate(startTime));
+ }
queryWrapper.eq(!StringUtils.isEmpty(mac),"mac",mac);
queryWrapper.orderByAsc("time","mac");
List<SysTest> listAll = this.baseMapper.selectList(queryWrapper);
@@ -47,4 +51,122 @@
}
return listAll;
}
+
+ @Override
+ public List<SysTest> listAllAvg(String startTime, String endTime, String mac) {
+ Date time = DateUtils.convertDate(startTime);
+ QueryWrapper<SysTest> queryWrapper = new QueryWrapper<>();
+ if(!StringUtils.isEmpty(startTime)&&!StringUtils.isEmpty(endTime)){
+ queryWrapper.between(!StringUtils.isEmpty(startTime)&&!StringUtils.isEmpty(endTime),"time",DateUtils.convertDate(startTime),DateUtils.convertDate(endTime));
+ }else if(!StringUtils.isEmpty(startTime)){
+ queryWrapper.eq(!StringUtils.isEmpty(startTime),"time", DateUtils.convertDate(startTime));
+ }
+ queryWrapper.eq(!StringUtils.isEmpty(mac),"mac",mac);
+ queryWrapper.orderByAsc("time","mac");
+ List<SysTest> listAll = this.baseMapper.selectList(queryWrapper);
+ return resultList(listAll,time);
+ }
+
+ private List<SysTest> resultList(List<SysTest> listAll,Date time){
+ List<SysTest> list = new ArrayList<>();
+ if(CollectionUtils.isEmpty(listAll)) {
+ return list;
+ }
+ String mon = DateUtils.dateToDateString(time,DateUtils.yyyy_MM_EN);
+ List<String> nameList = new ArrayList<>();
+ Map<String, ArrayList<Double>> map = new HashMap<>();
+ for(SysTest s : listAll) {
+ if(nameList.size()<4 && !nameList.contains(s.getName())){
+ nameList.add(s.getName());
+ SysTest sysTest = new SysTest();
+ sysTest.setName(s.getName());
+ sysTest.setMon(mon);
+ list.add(sysTest);
+ }
+ String pm10 = s.getName()+"_pm10";
+ ArrayList<Double> pm10D = Objects.nonNull(map.get(pm10))?map.get(pm10):new ArrayList<>();
+ pm10D.add(Double.parseDouble(s.getPm10()));
+ map.put(pm10,pm10D);
+
+ String pm25 = s.getName()+"_pm25";
+ ArrayList<Double> pm25D = Objects.nonNull(map.get(pm25))?map.get(pm25):new ArrayList<>();
+ pm25D.add(Double.parseDouble(s.getPm25()));
+ map.put(pm25,pm25D);
+
+ String o2 = s.getName()+"_o2";
+ ArrayList<Double> o2D = Objects.nonNull(map.get(o2))?map.get(o2):new ArrayList<>();
+ o2D.add(Double.parseDouble(s.getSo2()));
+ map.put(o2,o2D);
+
+ String no = s.getName()+"_no";
+ ArrayList<Double> noD = Objects.nonNull(map.get(no))?map.get(no):new ArrayList<>();
+ noD.add(Double.parseDouble(s.getNo2()));
+ map.put(no,noD);
+
+ String co = s.getName()+"_co";
+ ArrayList<Double> coD = Objects.nonNull(map.get(co))?map.get(co):new ArrayList<>();
+ coD.add(Double.parseDouble(s.getCo()));
+ map.put(co,coD);
+
+ String o3 = s.getName()+"_o3";
+ ArrayList<Double> o3D = Objects.nonNull(map.get(o3))?map.get(o3):new ArrayList<>();
+ o3D.add(Double.parseDouble(s.getO3()));
+ map.put(o3,o3D);
+
+ String tv = s.getName()+"_tv";
+ ArrayList<Double> tvD = Objects.nonNull(map.get(tv))?map.get(tv):new ArrayList<>();
+ tvD.add(Double.parseDouble(s.getVoc()));
+ map.put(tv,tvD);
+ }
+ for(SysTest s : list){
+ String name = s.getName();
+ if(map.containsKey(name+"_pm10")){
+ Double ListAvg = map.get(name+"_pm10").stream().collect(Collectors.averagingDouble(Double::doubleValue));
+ double rsAvg = new BigDecimal(ListAvg).setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue();
+ s.setPm10(String.valueOf(rsAvg));
+ }
+ if(map.containsKey(name+"_pm25")){
+ Double ListAvg = map.get(name+"_pm25").stream().collect(Collectors.averagingDouble(Double::doubleValue));
+ double rsAvg = new BigDecimal(ListAvg).setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue();
+ s.setPm25(String.valueOf(rsAvg));
+ }
+ if(map.containsKey(name+"_o2")){
+ Double ListAvg = map.get(name+"_o2").stream().collect(Collectors.averagingDouble(Double::doubleValue));
+ double rsAvg = new BigDecimal(ListAvg).setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue();
+ s.setSo2(String.valueOf(rsAvg));
+ }
+ if(map.containsKey(name+"_no")){
+ Double ListAvg = map.get(name+"_no").stream().collect(Collectors.averagingDouble(Double::doubleValue));
+ double rsAvg = new BigDecimal(ListAvg).setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue();
+ s.setNo2(String.valueOf(rsAvg));
+ }
+ if(map.containsKey(name+"_tv")){
+ Double ListAvg = map.get(name+"_tv").stream().collect(Collectors.averagingDouble(Double::doubleValue));
+ double rsAvg = new BigDecimal(ListAvg).setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue();
+ s.setVoc(String.valueOf(rsAvg));
+ }
+ if(map.containsKey(name+"_co")){
+ double rsAvg = percentile(map.get(name+"_co"),95d);
+ s.setCo(String.valueOf(rsAvg));
+ }
+
+ if(map.containsKey(name+"_o3")){
+ double rsAvg = percentile(map.get(name+"_o3"),90d);
+ s.setO3(String.valueOf(rsAvg));
+ }
+ }
+ return list;
+ }
+
+ private Double percentile(List<Double> date,double num){
+ Collections.sort(date);
+ double position = (num / 100) * (date.size() - 1);
+ int index = (int) position;
+ // ���������������������������������
+ double fraction = position - index;
+
+ // ������������������
+ double percentileValue = date.get(index) + fraction * (date.get(index + 1) - date.get(index));
+ return new BigDecimal(percentileValue).setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue();
+ }
}
diff --git "a/screen-api/src/main/resources/word/\347\251\272\346\260\224\350\264\250\351\207\217\345\221\250\346\212\245.docx" "b/screen-api/src/main/resources/word/\347\251\272\346\260\224\350\264\250\351\207\217\345\221\250\346\212\245.docx"
new file mode 100644
index 0000000..5a97ee9
--- /dev/null
+++ "b/screen-api/src/main/resources/word/\347\251\272\346\260\224\350\264\250\351\207\217\345\221\250\346\212\245.docx"
Binary files differ
diff --git a/screen-common/src/main/java/com/moral/util/DateUtils.java b/screen-common/src/main/java/com/moral/util/DateUtils.java
index 2de5766..b86ee1c 100644
--- a/screen-common/src/main/java/com/moral/util/DateUtils.java
+++ b/screen-common/src/main/java/com/moral/util/DateUtils.java
@@ -1064,6 +1064,14 @@
return getDate(dateToDateString(cal.getTime(), yyyy_MM_dd_EN));
}
+ public static Date getLastDayOfCurrMonth(Date time) {
+ Calendar cal = Calendar.getInstance();
+ cal.setTime(time);
+ cal.add(Calendar.MONTH, 1);
+ cal.set(Calendar.DAY_OF_MONTH, 0);
+ return getDate(dateToDateString(cal.getTime(), yyyy_MM_dd_EN));
+ }
+
/**
* ���������������������������������������������������
*
--
Gitblit v1.8.0