Просмотр исходного кода

1.下月投保单生效前n天通知客户登录系统查看。
2.下月投保单生效前前1天自动审批。
3.增加被保险人列表下载功能。

zhengqiang 5 лет назад
Родитель
Сommit
4676f6304c

+ 100 - 4
picc-admin-server/src/main/java/com/jpsoft/picc/modules/base/controller/AttachmentController.java

@@ -1,6 +1,8 @@
 package com.jpsoft.picc.modules.base.controller;
 
 import cn.hutool.core.io.FileUtil;
+import com.itextpdf.text.BaseColor;
+import com.itextpdf.text.Element;
 import com.jpsoft.picc.modules.base.entity.Company;
 import com.jpsoft.picc.modules.base.entity.CompanyMember;
 import com.jpsoft.picc.modules.base.entity.InsuranceDefinitionLimit;
@@ -17,16 +19,22 @@ import com.jpsoft.picc.modules.business.service.InsurancePolicyService;
 import com.jpsoft.picc.modules.common.config.OSSConfig;
 import com.jpsoft.picc.modules.common.config.PdfConfig;
 import com.jpsoft.picc.modules.common.dto.MessageResult;
-import com.jpsoft.picc.modules.common.utils.ItextPDFUtil;
-import com.jpsoft.picc.modules.common.utils.OSSUtil;
-import com.jpsoft.picc.modules.common.utils.VelocityHelper;
-import com.jpsoft.picc.modules.common.utils.Watermark;
+import com.jpsoft.picc.modules.common.utils.*;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.hssf.usermodel.HSSFCell;
+import org.apache.poi.hssf.usermodel.HSSFRow;
+import org.apache.poi.hssf.usermodel.HSSFSheet;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.ss.usermodel.Cell;
+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.util.StringUtil;
 import org.joda.time.DateTime;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpHeaders;
@@ -281,6 +289,85 @@ public class AttachmentController {
         return entity;
     }
 
+    @ApiOperation(value="被保险人列表")
+    @RequestMapping(value = "/pub/attachment/downloadPolicyMemberXls",method = RequestMethod.GET)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name="policyId",value = "每月投保单ID",required = true,paramType = "query")
+    })
+    public ResponseEntity downloadPolicyMemberXls(String policyId){
+        ResponseEntity entity;
+
+        try {
+            HttpHeaders headers = new HttpHeaders();
+            headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
+
+            //设置编码  为了解决中文名称乱码问题
+            String fileName = "被保险人列表.xls";
+            String downloadFileName = new String(fileName.getBytes("UTF-8"), "iso-8859-1");
+
+            //将编码加到http头信息中
+            headers.setContentDispositionFormData("attachment", downloadFileName);
+
+            Workbook workbook = new HSSFWorkbook();
+            Sheet sheet = workbook.createSheet();
+
+            //表头
+            Row rowTitle = sheet.createRow(0);
+
+            Cell cellTitle1 = rowTitle.createCell(0);
+            cellTitle1.setCellValue("序号");
+
+            Cell cellTitle2 = rowTitle.createCell(1);
+            cellTitle2.setCellValue("姓名");
+
+            Cell cellTitle3 = rowTitle.createCell(2);
+            cellTitle3.setCellValue("证件类型");
+
+            Cell cellTitle4 = rowTitle.createCell(3);
+            cellTitle4.setCellValue("证件号码");
+
+            Cell cellTitle5 = rowTitle.createCell(4);
+            cellTitle5.setCellValue("性别");
+
+            Cell cellTitle6 = rowTitle.createCell(5);
+            cellTitle6.setCellValue("年龄");
+
+            Cell cellTitle7 = rowTitle.createCell(6);
+            cellTitle7.setCellValue("岗位/工种");
+
+            Cell cellTitle8 = rowTitle.createCell(7);
+            cellTitle8.setCellValue("健康情况");
+
+            List<InsurancePolicyMember> memberList = insurancePolicyMemberService.findByPolicyId(policyId);
+
+
+            for (int i =0;i<memberList.size();i++){
+                InsurancePolicyMember member = memberList.get(i);
+
+                Row row = sheet.createRow(i+1);
+                row.createCell(0).setCellValue(String.valueOf(i+1));
+                row.createCell(1).setCellValue(member.getCompanyMember().getName());
+                row.createCell(2).setCellValue(member.getCompanyMember().getCardTypeN());
+                row.createCell(3).setCellValue(member.getCompanyMember().getCardNo());
+                row.createCell(4).setCellValue(member.getCompanyMember().getSex() ? "男" : "女");
+                row.createCell(5).setCellValue(member.getCompanyMember().getAge());
+                row.createCell(6).setCellValue(member.getCompanyMember().getJobName());
+                row.createCell(7).setCellValue(member.getCompanyMember().getHealthStatus());
+             }
+
+            ByteArrayOutputStream output = new ByteArrayOutputStream();
+            workbook.write(output);
+
+            entity = new ResponseEntity<>(output.toByteArray(), headers, HttpStatus.OK);
+        }
+        catch (Exception ex){
+            log.error(ex.getMessage(),ex);
+            entity = new ResponseEntity<String>(ex.getMessage(),HttpStatus.OK);
+        }
+
+        return entity;
+    }
+
     @ApiOperation(value="身份证附件打包下载")
     @RequestMapping(value = "/pub/attachment/downloadIdCardZip",method = RequestMethod.GET)
     @ApiImplicitParams({
@@ -390,6 +477,15 @@ public class AttachmentController {
                 fileList.add(fileMap);
             }
 
+            //人员名单.xls
+            if(StringUtils.isNotEmpty(policyId)){
+                Map<String,String> fileMap = new HashMap<>();
+                fileMap.put("fileUrl",basePath + "pub/attachment/downloadPolicyMemberXls?policyId=" + policyId);
+                fileMap.put("fileName", "投保人列表.xls");
+
+                fileList.add(fileMap);
+            }
+
             //身份证
             List<InsurancePolicyMember> policyMemberList = insurancePolicyMemberService.findByPolicyId(policyId);
 

+ 36 - 31
picc-admin-server/src/main/java/com/jpsoft/picc/scheduled/FissionWantedTask.java

@@ -7,6 +7,7 @@ import com.jpsoft.picc.modules.base.service.TemplateMessageService;
 import com.jpsoft.picc.modules.business.entity.InsuranceApplication;
 import com.jpsoft.picc.modules.business.entity.InsurancePolicy;
 import com.jpsoft.picc.modules.business.entity.InsurancePolicyMember;
+import com.jpsoft.picc.modules.business.service.InsuranceApplicationService;
 import com.jpsoft.picc.modules.business.service.InsurancePolicyMemberService;
 import com.jpsoft.picc.modules.business.service.InsurancePolicyService;
 import com.jpsoft.picc.modules.common.constant.PolicyStatus;
@@ -44,8 +45,11 @@ public class FissionWantedTask {
     @Autowired
     private TemplateMessageService templateMessageService;
 
-    //每5分钟执行一次
-    @Scheduled(cron="0 0/5 * * * ?")
+    @Autowired
+    private InsuranceApplicationService insuranceApplicationService;
+
+    //每天10点执行一次
+    @Scheduled(cron="0 0 10 * * ?")
     public void staticCronTask() {
         editInsurancePolicy();
     }
@@ -61,6 +65,8 @@ public class FissionWantedTask {
 
             InsuranceDefinition insuranceDefinition = insuranceDefinitionService.get(insurancePolicy.getDefinitionId());
 
+            InsuranceApplication insuranceApplication = insuranceApplicationService.get(insurancePolicy.getLatestApplicationId());
+
             if (StringUtils.isEmpty(insuranceDefinition.getCutOffTime())) {
                 continue;
             }
@@ -71,41 +77,40 @@ public class FissionWantedTask {
 
             int days = Days.daysBetween(DateTime.now(),startTime).getDays();
 
-            if (days>limit + 1){
-                continue;
-            }
-
-            List<InsurancePolicyMember> insurancePolicyMemberList = insurancePolicyMemberService.findByPolicyId(id);
-
-            boolean isUnChecked = false;
+            if (days==limit){
+                //提前n天通知投保人提交保单
+                templateMessageService.sendTemplateMessage(insurancePolicy.getId(), PolicyStatus.Draft, PolicyStatus.NotifyInAdvance);
 
-            for (InsurancePolicyMember insurancePolicyMember:insurancePolicyMemberList) {
-                String memberStatus = insurancePolicyMember.getStatus();
-                //花名册人员是否为已复核状态
-                if(!("2").equals(memberStatus)){
-                    isUnChecked = true;
-                    break;
+                if(insuranceApplication!=null) {
+                    log.warn(String.format("提前%s天通知投保人【%s】提交保单", days, insuranceApplication.getInsuredName()));
                 }
             }
+            else if (days==1){
+                //提前一天自动提交
+                List<InsurancePolicyMember> insurancePolicyMemberList = insurancePolicyMemberService.findByPolicyId(id);
+
+                boolean isUnChecked = false;
+
+                for (InsurancePolicyMember insurancePolicyMember:insurancePolicyMemberList) {
+                    String memberStatus = insurancePolicyMember.getStatus();
+                    //花名册人员是否为已复核状态
+                    if(!("2").equals(memberStatus)){
+                        isUnChecked = true;
+                        break;
+                    }
+                }
 
-            String srcPolicyStatus = insurancePolicy.getStatus();
-            String destPolicyStatus;
+                String destPolicyStatus;
 
-            if(isUnChecked){
-                //下月投保有未审核人员则转人才超市核准
-                destPolicyStatus = PolicyStatus.PendingTrial.getValue() + "";
-            }
-            else{
-                //下月投保都已审核人员则转待制单
-                destPolicyStatus = PolicyStatus.PendingMakePolicy.getValue() + "";
-            }
+                if(isUnChecked){
+                    //下月投保有未审核人员则转人才超市核准
+                    destPolicyStatus = PolicyStatus.PendingTrial.getValue() + "";
+                }
+                else{
+                    //下月投保都已审核人员则转待制单
+                    destPolicyStatus = PolicyStatus.PendingMakePolicy.getValue() + "";
+                }
 
-            if (days==limit + 1){
-                //提前一天通知投保人
-                templateMessageService.sendTemplateMessage(insurancePolicy.getId(),
-                        PolicyStatus.valueOf(srcPolicyStatus),PolicyStatus.NotifyInAdvance);
-            }
-            else {
                 insurancePolicy.setStatus(destPolicyStatus);
                 insurancePolicyService.update(insurancePolicy);
                 affectCount++;

+ 2 - 2
picc-admin-server/src/main/resources/application-dev.yml

@@ -1,8 +1,8 @@
 spring:
   datasource:
-    url: jdbc:log4jdbc:mysql://127.0.0.1:3306/picc?autoReconnect=true&characterEncoding=utf8&serverTimezone=GMT%2B8
+    url: jdbc:log4jdbc:mysql://192.168.33.20:3306/picc?autoReconnect=true&characterEncoding=utf8&serverTimezone=GMT%2B8
     username: root
-    password: root
+    password: jpsoft2016
   devtools:
     add-properties: false
     restart:

+ 5 - 1
picc-admin-server/src/main/resources/logback-spring.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <configuration>
-    <include resource="org/springframework/boot/logging/logback/base.xml"/>
     <!--
+    <include resource="org/springframework/boot/logging/logback/base.xml"/>
     官方文档指明,需要使用<springProperty>,才可使用application.properties(或application.yml)中的值
     -->
     <springProperty scope="context" name="loggerLevel" source="logger.level"/>
@@ -36,6 +36,10 @@
     直接用maven的变量是@...@,用spring的变量是${...}
     -->
     <springProfile name="dev">
+        <root level="INFO">
+            <appender-ref ref="STDOUT" />
+        </root>
+
         <!--root的level不能用变量-->
         <logger name="jdbc" additivity="false" level="WARN">
             <appender-ref ref="STDOUT" />

+ 4 - 0
picc-common/pom.xml

@@ -105,5 +105,9 @@
             <artifactId>spring-web</artifactId>
             <scope>compile</scope>
         </dependency>
+        <dependency>
+            <groupId>joda-time</groupId>
+            <artifactId>joda-time</artifactId>
+        </dependency>
     </dependencies>
 </project>

+ 7 - 2
picc-common/src/main/java/com/jpsoft/picc/modules/base/service/impl/TemplateMessageServiceImpl.java

@@ -4,8 +4,6 @@ import java.security.Policy;
 import java.text.SimpleDateFormat;
 import java.util.*;
 import javax.annotation.Resource;
-
-import cn.hutool.core.date.DateTime;
 import cn.hutool.json.JSONObject;
 import com.jpsoft.picc.modules.base.dao.CompanyDAO;
 import com.jpsoft.picc.modules.base.dao.CompanyUserDAO;
@@ -27,6 +25,8 @@ import com.jpsoft.picc.modules.sys.entity.User;
 import com.jpsoft.picc.modules.sys.service.UserService;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
+import org.joda.time.DateTime;
+import org.joda.time.Days;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
@@ -214,6 +214,11 @@ public class TemplateMessageServiceImpl implements TemplateMessageService {
 			}
 		}
 
+		if (destPolicyStatus == PolicyStatus.NotifyInAdvance){
+			int days = Days.daysBetween(DateTime.now(),new DateTime(insurancePolicy.getStartTime())).getDays();
+			contentVars.put("days",days);
+		}
+
 		content = VelocityHelper.format(content,contentVars);
 
 		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");