zhengqiang 5 лет назад
Родитель
Сommit
095dc91b09

+ 2 - 3
common/src/main/java/com/jpsoft/smart/modules/common/utils/WechatMessageUtil.java

@@ -414,7 +414,7 @@ public class WechatMessageUtil {
 		return ret;
 	}
 
-	public static boolean sendUnmeasureAlarmInfo(String openId,String companyName,String message,String appId,String appSecret) {
+	public static boolean sendUnmeasureAlarmInfo(String openId,String companyName,String message,String url,String appId,String appSecret) {
 		String templateId = "Mg9Ldk_kaoHAUwXFHEatrGugTlOz3yrMmMk7VoBca4M";
 
 		JSONObject sendData = new JSONObject();
@@ -440,9 +440,8 @@ public class WechatMessageUtil {
 		sendData.put("keyword2", keyword2);
 		sendData.put("remark", remark);
 
-
 		//w8Zk_VQMFIEVSIBPZid7zSrvHmBdrgnqF76u8PLCZEs cs
-		boolean ret = sendTemplate(sendData, appId,appSecret,templateId,openId, "");
+		boolean ret = sendTemplate(sendData, appId,appSecret,templateId,openId, url);
 
 		return ret;
 	}

+ 4 - 2
common/src/main/resources/mapper/base/PersonDeviceLog.xml

@@ -166,7 +166,8 @@
     </select>
     <select id="queryUnAttendanceList" resultMap="com.jpsoft.smart.modules.base.dao.PersonInfoDAO.PersonInfoMap">
         <![CDATA[
-        select a.* from base_person_info a,base_company_info b
+        select a.*,b.name_ as company_name
+        from base_person_info a,base_company_info b
         where a.company_id=b.id_ and b.code_ like #{companyCode}
         and a.del_flag=0
         and a.id_ not in (
@@ -178,7 +179,8 @@
     </select>
     <select id="queryAttendanceList" resultMap="com.jpsoft.smart.modules.base.dao.PersonInfoDAO.PersonInfoMap">
         <![CDATA[
-        select a.* from base_person_info a,base_company_info b
+        select a.*,b.name_ as company_name
+        from base_person_info a,base_company_info b
         where a.company_id=b.id_
         and b.code_ like #{companyCode}
         and a.del_flag=0

+ 9 - 1
web/src/main/java/com/jpsoft/smart/modules/base/controller/AlarmConfigController.java

@@ -4,10 +4,12 @@ import com.github.pagehelper.Page;
 import com.jpsoft.smart.modules.base.entity.AlarmConfig;
 import com.jpsoft.smart.modules.base.entity.CompanyInfo;
 import com.jpsoft.smart.modules.base.entity.OwnerInfo;
+import com.jpsoft.smart.modules.base.entity.PersonInfo;
 import com.jpsoft.smart.modules.base.service.AlarmConfigService;
 import com.jpsoft.smart.modules.base.service.AlarmConfigService;
 import com.jpsoft.smart.modules.base.service.CompanyInfoService;
 import com.jpsoft.smart.modules.base.service.OwnerInfoService;
+import com.jpsoft.smart.modules.business.entity.WorkAttendance;
 import com.jpsoft.smart.modules.common.dto.MessageResult;
 import com.jpsoft.smart.modules.common.dto.Sort;
 import com.jpsoft.smart.modules.common.utils.PojoUtils;
@@ -16,13 +18,20 @@ import com.jpsoft.smart.modules.sys.entity.User;
 import com.jpsoft.smart.modules.sys.service.UserService;
 import com.jpsoft.smart.modules.wechat.entity.AccessControl;
 import com.jpsoft.smart.modules.wechat.service.IAccessControlService;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.lang3.StringUtils;
+import org.joda.time.DateTime;
+import org.joda.time.Days;
+import org.joda.time.Months;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.format.annotation.DateTimeFormat;
 import org.springframework.web.bind.annotation.*;
 
+import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -257,5 +266,4 @@ public class AlarmConfigController {
 
         return msgResult;
     }
-
 }

+ 44 - 0
web/src/main/java/com/jpsoft/smart/modules/base/controller/WarningPusherController.java

@@ -2,7 +2,9 @@ package com.jpsoft.smart.modules.base.controller;
 
 import cn.hutool.json.JSONObject;
 import com.github.pagehelper.Page;
+import com.jpsoft.smart.modules.base.entity.AlarmConfig;
 import com.jpsoft.smart.modules.base.entity.CompanyInfo;
+import com.jpsoft.smart.modules.base.service.AlarmConfigService;
 import com.jpsoft.smart.modules.base.service.CompanyInfoService;
 import com.jpsoft.smart.modules.common.utils.PojoUtils;
 import com.jpsoft.smart.modules.common.dto.Sort;
@@ -12,6 +14,7 @@ import com.jpsoft.smart.modules.base.service.WarningPusherService;
 import com.jpsoft.smart.modules.common.utils.WeixinUtil;
 import com.jpsoft.smart.modules.sys.entity.User;
 import com.jpsoft.smart.modules.sys.service.UserService;
+import com.jpsoft.smart.schduled.UnmeasureTemperatureAlarmTask;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -25,9 +28,11 @@ import org.apache.http.entity.StringEntity;
 import org.apache.http.impl.client.CloseableHttpClient;
 import org.apache.http.impl.client.HttpClientBuilder;
 import org.apache.http.util.EntityUtils;
+import org.joda.time.DateTime;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.format.annotation.DateTimeFormat;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
@@ -52,6 +57,12 @@ public class WarningPusherController {
     @Autowired
     private CompanyInfoService companyInfoService;
 
+    @Autowired
+    private UnmeasureTemperatureAlarmTask unmeasureTemperatureAlarmTask;
+
+    @Autowired
+    private AlarmConfigService alarmConfigService;
+
     @ApiOperation(value="创建空记录")
     @GetMapping("create")
     public MessageResult<WarningPusher> create(){
@@ -311,5 +322,38 @@ public class WarningPusherController {
     }
 
 
+    @ApiOperation(value="通知监管人")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name="alarmConfigId",value = "考勤配置编号",required = true,paramType = "form"),
+            @ApiImplicitParam(name = "startDate",value = "开始时间", required = true,paramType="form"),
+            @ApiImplicitParam(name = "endDate",value = "截止时间", required = true,paramType="form"),
+            @ApiImplicitParam(name = "subject",value = "subject", required = false,paramType="form")
+    })
+    @RequestMapping(value = "noticeManager",method = RequestMethod.POST)
+    public MessageResult<String> noticeManager(
+            String alarmConfigId,
+            @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm") Date startDate,
+            @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm") Date endDate,
+            @RequestAttribute String subject){
+
+        //当前用户ID
+        System.out.println(subject);
+
+        MessageResult<String> msgResult = new MessageResult<>();
+
+        try {
+            AlarmConfig alarmConfig = alarmConfigService.get(alarmConfigId);
+
+            unmeasureTemperatureAlarmTask.noticeManager(alarmConfig,new DateTime(startDate),new DateTime(endDate));
 
+            msgResult.setResult(true);
+        }
+        catch (Exception ex){
+            msgResult.setResult(false);
+            msgResult.setMessage(ex.getMessage());
+            logger.error(ex.getMessage(),ex);
+        }
+
+        return msgResult;
+    }
 }

+ 116 - 9
web/src/main/java/com/jpsoft/smart/schduled/UnmeasureTemperatureAlarmTask.java

@@ -1,21 +1,30 @@
 package com.jpsoft.smart.schduled;
 
+import com.jpsoft.smart.config.OSSConfig;
 import com.jpsoft.smart.config.WxConfig;
 import com.jpsoft.smart.modules.base.entity.*;
 import com.jpsoft.smart.modules.base.service.*;
 import com.jpsoft.smart.modules.business.entity.WorkAttendance;
 import com.jpsoft.smart.modules.business.service.WorkAttendanceService;
+import com.jpsoft.smart.modules.common.utils.OSSUtil;
 import com.jpsoft.smart.modules.common.utils.WechatMessageUtil;
 import com.sun.corba.se.spi.orbutil.threadpool.Work;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.ss.usermodel.WorkbookFactory;
 import org.joda.time.DateTime;
 import org.joda.time.Days;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.io.ClassPathResource;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.Date;
@@ -37,6 +46,9 @@ public class UnmeasureTemperatureAlarmTask {
     @Autowired
     private CompanyInfoService companyInfoService;
 
+    @Autowired
+    private CompanyPositionService companyPositionService;
+
     @Autowired
     private WorkAttendanceService workAttendanceService;
 
@@ -46,6 +58,9 @@ public class UnmeasureTemperatureAlarmTask {
     @Autowired
     private WxConfig wxConfig;
 
+    @Autowired
+    private OSSConfig ossConfig;
+
     public int batchUpdate(String companyId,Date startDate,Date endDate) throws Exception {
         DateTime dt1 = new DateTime(startDate);
         DateTime dt2 = new DateTime(endDate);
@@ -302,14 +317,15 @@ public class UnmeasureTemperatureAlarmTask {
             && StringUtils.isNotEmpty(personInfo.getOpenId())) {
                 String message = "尊敬的" + personInfo.getName();
 
-                if (alarmConfig.getClassifier()!=null && alarmConfig.getClassifier().equals(1)){
-                    message += ",请在" + startTime.toString("HH:mm") + "至" + attendanceTime.toString("HH:mm") + "时间内测量体温!";
-                }
-                else{
-                    message += ",请在" + attendanceTime.toString("HH:mm") + "至" + endTime.toString("HH:mm") + "时间内测量体温!";
-                }
+//                if (alarmConfig.getClassifier()!=null && alarmConfig.getClassifier().equals(1)){
+//                    message += ",请在" + startTime.toString("HH:mm") + "至" + attendanceTime.toString("HH:mm") + "时间内在单位(校园)内任意打卡点打卡及测温!";
+//                }
+//                else{
+//                    message += ",请在" + attendanceTime.toString("HH:mm") + "至" + endTime.toString("HH:mm") + "时间内在单位(校园)内任意打卡点打卡及测温!";
+//                }
+                message +=",请抓紧时间在单位(校园)内任意打卡点打卡和测温!";
 
-                WechatMessageUtil.sendUnmeasureAlarmInfo(personInfo.getOpenId(), companyInfo.getName(), message, wxConfig.getAppId(), wxConfig.getAppSecret());
+                WechatMessageUtil.sendUnmeasureAlarmInfo(personInfo.getOpenId(), companyInfo.getName(), message,"", wxConfig.getAppId(), wxConfig.getAppSecret());
             }
         }
     }
@@ -354,16 +370,107 @@ public class UnmeasureTemperatureAlarmTask {
             && pusher.getMissingNoticeEnabled()!=null && pusher.getMissingNoticeEnabled()) {
                 String message = "尊敬的" + pusher.getName()
                         + ",当天时段" + startTime.toString("HH:mm") + "至" + endTime.toString("HH:mm")
-                        + ",有" + total + "人未测量体温。名单如下:" + sb.toString();
+                        + ",有" + total + "人未测量体温,具体名单请点击下方链接查看。";
+
+                //todo 生成未测量人员名单
+
+                String url = "";
+
+                try {
+                   url = createUnMeasureReport(companyInfo, unmeasuredList, startTime, endTime);
+                }
+                catch (Exception ex){
+                    log.error(ex.getMessage(),ex);
+                }
 
                 WechatMessageUtil.sendUnmeasureAlarmInfo(
                         pusher.getOpenId(),
                         companyInfo.getName(),
-                        message, wxConfig.getAppId(), wxConfig.getAppSecret());
+                        message,
+                        url,
+                        wxConfig.getAppId(), wxConfig.getAppSecret());
             }
         }
     }
 
+    private String createUnMeasureReport(CompanyInfo companyInfo, List<PersonInfo> unmeasuredList, DateTime startTime, DateTime endTime) throws Exception{
+            ClassPathResource resource = new ClassPathResource("static/unMeasureReport.xlsx");
+
+            Workbook wb = WorkbookFactory.create(resource.getInputStream());
+
+            Sheet sheet = wb.getSheetAt(0);
+
+            Row row1 = sheet.getRow(0);
+            Row row2 = sheet.getRow(1);
+            Row row3 = sheet.getRow(2);
+
+            String title = row1.getCell(0).getStringCellValue();
+            String subTitle = row2.getCell(0).getStringCellValue();
+
+            row1.getCell(0).setCellValue(String.format(title, startTime.toString("HH:mm"), endTime.toString("HH:mm")));
+            row2.getCell(0).setCellValue(String.format(subTitle, DateTime.now().toString("yyyy-MM-dd HH:mm")));
+
+            //显示扩展字段
+            List<CompanyPosition> companyPositions = companyPositionService.findByCompanyId(companyInfo.getId());
+
+            if (companyPositions.size()>0){
+                CompanyPosition companyPosition = companyPositions.get(0);
+
+                if(StringUtils.isNotEmpty(companyPosition.getPosition1Name())) {
+                    row3.createCell(2).setCellValue(companyPosition.getPosition1Name());
+                }
+
+                if(StringUtils.isNotEmpty(companyPosition.getPosition2Name())) {
+                    row3.createCell(3).setCellValue(companyPosition.getPosition2Name());
+                }
+
+                if(StringUtils.isNotEmpty(companyPosition.getPosition3Name())) {
+                    row3.createCell(4).setCellValue(companyPosition.getPosition3Name());
+                }
+
+                if(StringUtils.isNotEmpty(companyPosition.getPosition4Name())) {
+                    row3.createCell(5).setCellValue(companyPosition.getPosition4Name());
+                }
+
+                if(StringUtils.isNotEmpty(companyPosition.getPosition5Name())) {
+                    row3.createCell(6).setCellValue(companyPosition.getPosition5Name());
+                }
+            }
+
+            int rowIndex = 3;
+
+            for (PersonInfo personInfo : unmeasuredList) {
+                Row row = sheet.createRow(rowIndex);
+                row.createCell(0).setCellValue(rowIndex-2);
+                row.createCell(1).setCellValue(personInfo.getCompanyName());
+                row.createCell(2).setCellValue(personInfo.getName());
+                row.createCell(3).setCellValue(personInfo.getPosition1());
+                row.createCell(4).setCellValue(personInfo.getPosition2());
+                row.createCell(5).setCellValue(personInfo.getPosition3());
+                row.createCell(6).setCellValue(personInfo.getPosition4());
+                row.createCell(7).setCellValue(personInfo.getPosition4());
+
+                rowIndex++;
+            }
+
+            //todo 将wb保存到oss
+            ByteArrayOutputStream output = new ByteArrayOutputStream();
+            wb.write(output);
+
+            byte[] buffer = output.toByteArray();
+            ByteArrayInputStream input = new ByteArrayInputStream(buffer);
+
+            String fileName = "未测温统计表.xlsx";
+
+            String downloadUrl = OSSUtil.upload(ossConfig,"unmeasuredReport",fileName,input);
+
+            wb.write(output);
+            wb.close();
+            output.close();
+
+            return downloadUrl;
+    }
+
     public static void main(String[] args) {
         Boolean result = null;
 

BIN
web/src/main/resources/static/unMeasureReport.xlsx