Jelajahi Sumber

Merge remote-tracking branch 'origin/master'

yanliming 5 tahun lalu
induk
melakukan
59efa45a9b
39 mengubah file dengan 1077 tambahan dan 716 penghapusan
  1. 6 4
      picc-admin-server/src/main/java/com/jpsoft/picc/modules/base/controller/AttachmentController.java
  2. 2 1
      picc-admin-server/src/main/java/com/jpsoft/picc/modules/base/controller/InsuranceDefinitionLimitController.java
  3. 1 1
      picc-admin-server/src/main/java/com/jpsoft/picc/modules/base/controller/InsuranceJobsController.java
  4. 1 1
      picc-admin-server/src/main/java/com/jpsoft/picc/modules/base/controller/JobsController.java
  5. 15 4
      picc-admin-server/src/main/java/com/jpsoft/picc/modules/business/controller/ApplicationPolicyController.java
  6. 8 41
      picc-admin-server/src/main/java/com/jpsoft/picc/modules/business/controller/InsuranceApplicationController.java
  7. 301 119
      picc-admin-server/src/main/java/com/jpsoft/picc/modules/business/controller/InsurancePolicyController.java
  8. 10 0
      picc-admin-server/src/main/java/com/jpsoft/picc/modules/sys/controller/ApiController.java
  9. 4 0
      picc-admin-server/src/test/java/com/jpsoft/picc/test/CompanyTest.java
  10. 1 1
      picc-admin-server/src/test/java/com/jpsoft/picc/test/NewApiTest.java
  11. 45 0
      picc-admin-server/src/test/java/com/jpsoft/picc/test/PolicyTest.java
  12. 1 1
      picc-common/src/main/java/com/jpsoft/picc/modules/base/dao/InsuranceJobsDAO.java
  13. 10 1
      picc-common/src/main/java/com/jpsoft/picc/modules/base/entity/InsuranceDefinitionLimit.java
  14. 11 0
      picc-common/src/main/java/com/jpsoft/picc/modules/base/entity/Jobs.java
  15. 1 1
      picc-common/src/main/java/com/jpsoft/picc/modules/base/service/InsuranceJobsService.java
  16. 2 2
      picc-common/src/main/java/com/jpsoft/picc/modules/base/service/impl/InsuranceJobsServiceImpl.java
  17. 1 3
      picc-common/src/main/java/com/jpsoft/picc/modules/business/dao/ApplicationPolicyDAO.java
  18. 4 0
      picc-common/src/main/java/com/jpsoft/picc/modules/business/dao/InsurancePolicyDAO.java
  19. 2 0
      picc-common/src/main/java/com/jpsoft/picc/modules/business/dao/InsurancePolicyMemberDAO.java
  20. 13 29
      picc-common/src/main/java/com/jpsoft/picc/modules/business/entity/InsuranceApplication.java
  21. 11 29
      picc-common/src/main/java/com/jpsoft/picc/modules/business/entity/InsurancePolicy.java
  22. 17 1
      picc-common/src/main/java/com/jpsoft/picc/modules/business/entity/InsurancePolicyMember.java
  23. 1 3
      picc-common/src/main/java/com/jpsoft/picc/modules/business/service/ApplicationPolicyService.java
  24. 2 0
      picc-common/src/main/java/com/jpsoft/picc/modules/business/service/InsurancePolicyMemberService.java
  25. 4 0
      picc-common/src/main/java/com/jpsoft/picc/modules/business/service/InsurancePolicyService.java
  26. 1 7
      picc-common/src/main/java/com/jpsoft/picc/modules/business/service/impl/ApplicationPolicyServiceImpl.java
  27. 7 0
      picc-common/src/main/java/com/jpsoft/picc/modules/business/service/impl/InsurancePolicyMemberServiceImpl.java
  28. 7 0
      picc-common/src/main/java/com/jpsoft/picc/modules/business/service/impl/InsurancePolicyServiceImpl.java
  29. 10 0
      picc-common/src/main/java/com/jpsoft/picc/modules/common/constant/PolicyStatus.java
  30. 122 114
      picc-common/src/main/resources/mapper/base/InsuranceDefinitionLimit.xml
  31. 91 87
      picc-common/src/main/resources/mapper/base/InsuranceJobs.xml
  32. 90 86
      picc-common/src/main/resources/mapper/base/Jobs.xml
  33. 41 24
      picc-common/src/main/resources/mapper/business/ApplicationPolicy.xml
  34. 13 0
      picc-common/src/main/resources/mapper/business/InsurancePolicy.xml
  35. 4 0
      picc-common/src/main/resources/mapper/business/InsurancePolicyMember.xml
  36. 95 22
      picc-enterprise-server/src/main/java/com/jpsoft/picc/modules/auth/controller/InsuranceApplicationController.java
  37. 79 127
      picc-enterprise-server/src/main/java/com/jpsoft/picc/modules/auth/controller/InsurancePolicyController.java
  38. 18 0
      picc-enterprise-server/src/main/java/com/jpsoft/picc/modules/pub/controller/PayController.java
  39. 25 7
      picc-enterprise-server/src/main/java/com/jpsoft/picc/modules/pub/controller/UserController.java

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

@@ -289,11 +289,13 @@ public class AttachmentController {
                 Company company = companyService.get(insuranceApplication.getCompanyId());
                 String url = company.getUsccFiles();
 
-                Map<String,String> fileMap = new HashMap<>();
-                fileMap.put("fileUrl", url);
-                fileMap.put("fileName", "营业执照" + url.substring(url.lastIndexOf(".")));
+                if(StringUtils.isNotEmpty(url)) {
+                    Map<String, String> fileMap = new HashMap<>();
+                    fileMap.put("fileUrl", url);
+                    fileMap.put("fileName", "营业执照" + url.substring(url.lastIndexOf(".")));
 
-                fileList.add(fileMap);
+                    fileList.add(fileMap);
+                }
             }
 
             //电子投保文件

+ 2 - 1
picc-admin-server/src/main/java/com/jpsoft/picc/modules/base/controller/InsuranceDefinitionLimitController.java

@@ -213,7 +213,8 @@ public class InsuranceDefinitionLimitController {
         Map<String,Object> searchParams = new HashMap<>();
 
         List<Sort> sortList = new ArrayList<>();
-        sortList.add(new Sort("create_time","desc"));
+        sortList.add(new Sort("definition_id","asc"));
+        sortList.add(new Sort("sort_no","asc"));
 
         if (StringUtils.isNotEmpty(name)) {
             searchParams.put("name","%" + name + "%");

+ 1 - 1
picc-admin-server/src/main/java/com/jpsoft/picc/modules/base/controller/InsuranceJobsController.java

@@ -245,7 +245,7 @@ public class InsuranceJobsController {
 
         MessageResult<List<InsuranceJobs>> msgResult = new MessageResult<>();
 
-        List<InsuranceJobs> list = insuranceJobsService.listByDefinitionId(definitionId);
+        List<InsuranceJobs> list = insuranceJobsService.findByDefinitionId(definitionId);
 
         msgResult.setResult(true);
         msgResult.setData(list);

+ 1 - 1
picc-admin-server/src/main/java/com/jpsoft/picc/modules/base/controller/JobsController.java

@@ -207,7 +207,7 @@ public class JobsController {
         Map<String,Object> searchParams = new HashMap<>();
 
         List<Sort> sortList = new ArrayList<>();
-        sortList.add(new Sort("create_time","desc"));
+        sortList.add(new Sort("sort_no","asc"));
 
         if (StringUtils.isNotEmpty(name)) {
             searchParams.put("name","%" + name + "%");

+ 15 - 4
picc-admin-server/src/main/java/com/jpsoft/picc/modules/business/controller/ApplicationPolicyController.java

@@ -14,6 +14,7 @@ import org.apache.commons.lang3.StringUtils;
 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;
@@ -76,12 +77,14 @@ public class ApplicationPolicyController {
     @ApiOperation(value="第一次投保除外的每月投保单列表")
     @RequestMapping(value = "otherPageList",method = RequestMethod.POST)
     @ApiImplicitParams({
-            @ApiImplicitParam(name="applicationId",value = "投保单ID",required = true,paramType = "query"),
+            @ApiImplicitParam(name="definitionId",value = "险种编号",required = true,paramType = "query"),
             @ApiImplicitParam(name="status",value = "状态",paramType = "query"),
             @ApiImplicitParam(name="userType",value = "用户类型(0为人才超市,1为PICC)",paramType = "query")
     })
     public MessageResult<Map> otherPageList(
-            String applicationId,String status,String userType,
+            String definitionId,String status,String userType,
+            @DateTimeFormat(pattern = "yyyy-MM-dd") Date startTime,
+            @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime,
             @RequestParam(value="pageIndex",defaultValue="1") int pageIndex,
             @RequestParam(value="pageSize",defaultValue="20") int pageSize,
             @RequestAttribute String subject){
@@ -96,8 +99,8 @@ public class ApplicationPolicyController {
         List<Sort> sortList = new ArrayList<>();
         sortList.add(new Sort("create_time","desc"));
 
-        if (StringUtils.isNotEmpty(applicationId)) {
-            searchParams.put("applicationId",applicationId);
+        if (StringUtils.isNotEmpty(definitionId)) {
+            searchParams.put("definitionId",definitionId);
         }
 
         if (StringUtils.isNotEmpty(status)) {
@@ -110,6 +113,14 @@ public class ApplicationPolicyController {
             }
         }
 
+        if (startTime != null) {
+            searchParams.put("startTime", startTime);
+        }
+
+        if (endTime != null) {
+            searchParams.put("endTime", endTime);
+        }
+
         Page<ApplicationPolicy> page = applicationPolicyService.otherSearch(searchParams,pageIndex,pageSize,sortList);
 
         msgResult.setResult(true);

+ 8 - 41
picc-admin-server/src/main/java/com/jpsoft/picc/modules/business/controller/InsuranceApplicationController.java

@@ -4,12 +4,10 @@ import com.github.pagehelper.Page;
 import com.jpsoft.picc.modules.base.entity.InsuranceDefinition;
 import com.jpsoft.picc.modules.base.entity.InsuranceDefinitionLimit;
 import com.jpsoft.picc.modules.base.entity.InsuranceJobs;
-import com.jpsoft.picc.modules.base.entity.Jobs;
 import com.jpsoft.picc.modules.base.service.InsuranceDefinitionLimitService;
 import com.jpsoft.picc.modules.base.service.InsuranceDefinitionService;
 import com.jpsoft.picc.modules.base.service.InsuranceJobsService;
 import com.jpsoft.picc.modules.base.service.JobsService;
-import com.jpsoft.picc.modules.business.entity.ApplicationPolicy;
 import com.jpsoft.picc.modules.business.entity.InsurancePolicy;
 import com.jpsoft.picc.modules.business.service.ApplicationPolicyService;
 import com.jpsoft.picc.modules.business.service.InsurancePolicyMemberService;
@@ -26,16 +24,13 @@ 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.Interval;
 import org.joda.time.Months;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
-import javax.servlet.http.HttpServletRequest;
 import java.math.BigDecimal;
-import java.text.SimpleDateFormat;
 import java.util.*;
 
 @RestController
@@ -138,41 +133,23 @@ public class InsuranceApplicationController {
         return msgResult;
     }
 
-
     @ApiOperation(value="获取投保信息")
     @PostMapping("insureDetail")
     @ApiImplicitParams({
-            @ApiImplicitParam(name="id",value = "投保信息ID",required = true,paramType = "query"),
-            @ApiImplicitParam(name="no",value = "投保份数(比如:第几份)",required = true,paramType = "query"),
+            @ApiImplicitParam(name="applicationId",value = "投保信息ID",required = true,paramType = "query")
     })
-    public MessageResult<InsuranceApplication> insureDetail(String id,String no){
+    public MessageResult<InsuranceApplication> insureDetail(String applicationId){
         MessageResult<InsuranceApplication> msgResult = new MessageResult<>();
 
         try {
+            InsuranceApplication insuranceApplication = insuranceApplicationService.get(applicationId);
 
-            InsuranceApplication insuranceApplication = insuranceApplicationService.get(id);
-
-            List<InsurancePolicy> list = new ArrayList<InsurancePolicy>();
-
-            int index = 0;
-
-            if(StringUtils.isNotEmpty(no)){
-                index = Integer.parseInt(no);
-            }
-
-            if(index==1){
-                list = applicationPolicyService.findFirstPolicyByApplicationId(id);
-            }
-            else{
-                list = applicationPolicyService.findNewPolicyByApplicationId(id);
-            }
-
+            if (insuranceApplication != null) {
+                InsurancePolicy insurancePolicy = applicationPolicyService.findFirstPolicyByApplicationId(applicationId);
 
-            if(list.size()>0){
-                insuranceApplication.setInsurancePolicy(list.get(0));
-            }
+                //首月投保
+                insuranceApplication.setInsurancePolicy(insurancePolicy);
 
-            if (insuranceApplication != null) {
                 msgResult.setResult(true);
                 msgResult.setData(insuranceApplication);
             } else {
@@ -390,7 +367,7 @@ public class InsuranceApplicationController {
 
         map.put("insuranceDefinitionLimitList",mapList);
 
-        List<InsuranceJobs> InsuranceJobsList = findByDefinitionId(insuranceApplication.getDefinitionId());
+        List<InsuranceJobs> InsuranceJobsList = insuranceJobsService.findByDefinitionId(insuranceApplication.getDefinitionId());
 
         List<Map<String,Object>> mapList1 = new ArrayList<Map<String,Object>>();
 
@@ -434,14 +411,4 @@ public class InsuranceApplicationController {
         return msgResult;
 
     }
-
-    private List<InsuranceJobs> findByDefinitionId(String definitionId){
-        Map<String,Object> searchParams = new HashMap<>();
-        searchParams.put("definitionId",definitionId);
-        List<Sort> sortList = new ArrayList<>();
-        sortList.add(new Sort("create_time","asc"));
-        Page<InsuranceJobs> insuranceJobsPage = insuranceJobsService.pageSearch(searchParams,1,100,sortList);
-
-        return insuranceJobsPage.getResult();
-    }
 }

+ 301 - 119
picc-admin-server/src/main/java/com/jpsoft/picc/modules/business/controller/InsurancePolicyController.java

@@ -1,25 +1,16 @@
 package com.jpsoft.picc.modules.business.controller;
 
-import cn.hutool.core.io.FileUtil;
-import cn.hutool.json.JSON;
 import cn.hutool.json.JSONObject;
 import com.github.pagehelper.Page;
-import com.jpsoft.picc.modules.base.entity.Company;
-import com.jpsoft.picc.modules.base.entity.CompanyUser;
-import com.jpsoft.picc.modules.base.entity.InsuranceAgent;
-import com.jpsoft.picc.modules.base.entity.InsuranceDefinitionLimit;
-import com.jpsoft.picc.modules.base.service.CompanyService;
-import com.jpsoft.picc.modules.base.service.CompanyUserService;
-import com.jpsoft.picc.modules.base.service.InsuranceAgentService;
-import com.jpsoft.picc.modules.base.service.InsuranceDefinitionLimitService;
+import com.jpsoft.picc.modules.base.entity.*;
+import com.jpsoft.picc.modules.base.service.*;
 import com.jpsoft.picc.modules.business.entity.*;
 import com.jpsoft.picc.modules.business.service.*;
-import com.jpsoft.picc.modules.common.config.PdfConfig;
 import com.jpsoft.picc.modules.common.config.WeixinConfig;
 import com.jpsoft.picc.modules.common.constant.PolicyStatus;
 import com.jpsoft.picc.modules.common.dto.MessageResult;
 import com.jpsoft.picc.modules.common.dto.Sort;
-import com.jpsoft.picc.modules.common.utils.ItextPDFUtil;
+import com.jpsoft.picc.modules.common.utils.NumberToCN;
 import com.jpsoft.picc.modules.common.utils.PojoUtils;
 import com.jpsoft.picc.modules.common.utils.WeixinUtil;
 import io.swagger.annotations.Api;
@@ -28,21 +19,18 @@ 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.Months;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.MediaType;
-import org.springframework.http.ResponseEntity;
+import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.interceptor.TransactionAspectSupport;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
-import java.io.File;
-import java.security.Policy;
+import java.math.BigDecimal;
 import java.util.*;
-import java.util.concurrent.Executor;
 
 @RestController
 @RequestMapping("/insurancePolicy")
@@ -80,6 +68,12 @@ public class InsurancePolicyController {
     @Autowired
     private WeixinConfig weixinConfig;
 
+    @Autowired
+    private InsuranceJobsService insuranceJobsService;
+
+    @Autowired
+    private InsuranceDefinitionService insuranceDefinitionService;
+
     @ApiOperation(value="创建空记录")
     @GetMapping("create")
     public MessageResult<InsurancePolicy> create(){
@@ -325,11 +319,13 @@ public class InsurancePolicyController {
 
             String url = company.getUsccFiles();
 
-            file1.put("index","1");
-            file1.put("name", "营业执照" + url.substring(url.lastIndexOf(".")));
-            file1.put("url", url);
+            if(StringUtils.isNotEmpty(url)) {
+                file1.put("index", "1");
+                file1.put("name", "营业执照" + url.substring(url.lastIndexOf(".")));
+                file1.put("url", url);
 
-            fileList.add(file1);
+                fileList.add(file1);
+            }
 
             Map<String,Object> file2 = new HashMap<>();
             file2.put("index","2");
@@ -397,7 +393,7 @@ public class InsurancePolicyController {
 
             int affectCount = approval(applicationId, policyId, processStatus, opinion, policyStatus.getValue() + "", subject);
 
-            if (affectCount > 0) {
+            if (processStatus.equals("正常")) {
                 //修改花名册人员状态为初审
                 check(policyId, "1", subject);
             }
@@ -482,7 +478,7 @@ public class InsurancePolicyController {
 
             int affectCount = approval(applicationId, policyId, processStatus, opinion, policyStatus.getValue() + "", subject);
 
-            if (affectCount > 0) {
+            if (processStatus.equals("正常")) {
                 //修改花名册人员状态为初审
                 check(policyId, "2", subject);
             }
@@ -505,6 +501,7 @@ public class InsurancePolicyController {
 
     @ApiOperation(value="PICC出单")
     @RequestMapping(value = "issued",method = RequestMethod.POST)
+    @Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRED)
     @ApiImplicitParams({
             @ApiImplicitParam(name="applicationId",value = "投保单ID",required = true,paramType = "query"),
             @ApiImplicitParam(name="policyId",value = "每月投保单ID",required = true,paramType = "query"),
@@ -519,7 +516,6 @@ public class InsurancePolicyController {
         MessageResult<Integer> msgResult = new MessageResult<>();
 
         try {
-//        String status ="";
             PolicyStatus policyStatus;
 
             if (processStatus.equals("正常")) {
@@ -538,32 +534,23 @@ public class InsurancePolicyController {
                 insurancePolicyService.update(insurancePolicy);
             }
 
-            int affectCount = approval(applicationId, policyId, processStatus, opinion, policyStatus.getValue() + "", subject);
-
-            boolean flag = false;
-            String msg = "";
-
-            if (affectCount > 0) {
-                if (processStatus.equals("正常")) {
-                    //生成下月投保单
-                    generatePolicyInTrans(applicationId, policyId, subject);
-
-                    //发送微信通知
-                    sendWeixinMessage(applicationId, policyStatus);
-                }
+            //todo 审批并生成下月投保单
+            approveAndGenPolicyInTrans(applicationId, policyId,processStatus,opinion,policyStatus,subject);
 
-                flag = true;
-            }
+            //发送微信通知
+            sendWeixinMessage(applicationId, policyStatus);
 
-            msgResult.setResult(flag);
-            msgResult.setData(affectCount);
-            msgResult.setMessage(msg);
+            msgResult.setResult(true);
         }
         catch (Exception ex) {
             logger.error(ex.getMessage(),ex);
 
             msgResult.setResult(false);
             msgResult.setMessage(ex.getMessage());
+
+            //在实际开发中,我们往往需要在方法中进行异常的捕获,从而对异常进行判断,为客户端返回提示信息。
+            //但是此时由于异常的被捕获,导致事务的回滚没有被触发,导致事务的失败。
+            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
         }
 
         return msgResult;
@@ -670,64 +657,62 @@ public class InsurancePolicyController {
         return msgResult;
     }
 
-    private Integer approval(String applicationId,String id,String processStatus,String opinion,String status,String subject){
-
+    private Integer approval(String applicationId,String policyId,String processStatus,String opinion,String status,String subject){
         int affectCount = 0;
 
         InsuranceApplication insuranceApplication = insuranceApplicationService.get(applicationId);
+        InsurancePolicy insurancePolicy = insurancePolicyService.get(policyId);
 
-        List<InsurancePolicy> insurancePolicyList = applicationPolicyService.findNewPolicyByApplicationId(applicationId);
-
-        if(insurancePolicyList.size()>0){
-            int no = insurancePolicyList.get(0).getNo();
-
-            //如果每月投保单为第一份,就修改投保单状态
-            if(no == 1){
-                insuranceApplication.setStatus(status);
-                insuranceApplicationService.update(insuranceApplication);
-            }
-
-            InsurancePolicy insurancePolicy = insurancePolicyService.get(id);
-
-            insurancePolicy.setProcessStatus(processStatus);
-            insurancePolicy.setStatus(status);
-            insurancePolicy.setUpdateBy(subject);
-            insurancePolicy.setUpdateTime(new Date());
-
-            int affectCount1 = insurancePolicyService.update(insurancePolicy);
+        String curStatus = insurancePolicy.getStatus();
 
-            if(affectCount1 > 0){
-                InsurancePolicyRecord insurancePolicyRecord = new InsurancePolicyRecord();
-                insurancePolicyRecord.setPolicyId(insurancePolicy.getId());
-                insurancePolicyRecord.setStatus(status);
-                insurancePolicyRecord.setOpinion(opinion);
-                insurancePolicyRecord.setProcessStatus(processStatus);
-                insurancePolicyRecord.setId(UUID.randomUUID().toString());
-                insurancePolicyRecord.setDelFlag(false);
-                insurancePolicyRecord.setCreateBy(subject);
-                insurancePolicyRecord.setCreateTime(new Date());
+        //首月投保单
+        if(insurancePolicy.getNo().equals(1)){
+            insuranceApplication.setStatus(status);
+            insuranceApplicationService.update(insuranceApplication);
+        }
 
-                affectCount = insurancePolicyRecordService.insert(insurancePolicyRecord);
-            }
+        insurancePolicy.setProcessStatus(processStatus);
+        insurancePolicy.setStatus(status);
+        insurancePolicy.setUpdateBy(subject);
+        insurancePolicy.setUpdateTime(new Date());
+
+        int affectCount1 = insurancePolicyService.update(insurancePolicy);
+
+        if(affectCount1 > 0){
+            InsurancePolicyRecord insurancePolicyRecord = new InsurancePolicyRecord();
+            insurancePolicyRecord.setPolicyId(insurancePolicy.getId());
+            insurancePolicyRecord.setStatus(curStatus);
+            insurancePolicyRecord.setOpinion(opinion);
+            insurancePolicyRecord.setProcessStatus(processStatus);
+            insurancePolicyRecord.setId(UUID.randomUUID().toString());
+            insurancePolicyRecord.setDelFlag(false);
+            insurancePolicyRecord.setCreateBy(subject);
+            insurancePolicyRecord.setCreateTime(new Date());
+
+            affectCount = insurancePolicyRecordService.insert(insurancePolicyRecord);
         }
 
         return affectCount;
     }
 
+    private void approveAndGenPolicyInTrans(String applicationId, String policyId,String processStatus,
+                                       String opinion,PolicyStatus policyStatus,
+                                       String subject) throws Exception {
+        approval(applicationId, policyId, processStatus, opinion, policyStatus.getValue() + "", subject);
 
+        if (!processStatus.equals("正常")) {
+            return;
+        }
 
-
-
-    @Transactional(rollbackFor = Exception.class)
-    private void generatePolicyInTrans(String applicationId, String policyId, String subject) throws Exception {
-        //添加下月投保单
+        //修改本月投保单状态为已出单
         InsurancePolicy srcPolicy = insurancePolicyService.get(policyId);
-        srcPolicy.setStatus(PolicyStatus.SendOutPolicy.getValue() + "");
-        srcPolicy.setUpdateTime(new Date());
 
         InsuranceApplication insuranceApplication = insuranceApplicationService.get(applicationId);
 
-        insurancePolicyService.update(srcPolicy);
+        //如果是最后一个月则不再生成投保单
+        if(!srcPolicy.getEndTime().before(insuranceApplication.getEndTime())) {
+            return;
+        }
 
         InsurancePolicy destPolicy = new InsurancePolicy();
 
@@ -741,57 +726,132 @@ public class InsurancePolicyController {
         //下月状态为待初审
         destPolicy.setStatus(PolicyStatus.PendingTrial.getValue() + "");
 
-        //已经过期则不生成下月投保单
-        if (destPolicy.getEndTime().after(insuranceApplication.getEndTime())){
-            return;
-        }
-
         destPolicy.setEffectiveDate(startTime.toString("yyyyMM"));
 
-        boolean exist = insurancePolicyService.existByApplicationIdAndEffectiveDate(applicationId,destPolicy.getEffectiveDate());
+        //todo 相同企业、相同险种、截止时间相同 是否已经有下月参保记录(状态为草稿)
+        InsurancePolicy nextMonthPolicy = insurancePolicyService.findNextMonthPolicy(
+                insuranceApplication.getCompanyId(),
+                destPolicy.getDefinitionId(),
+                insuranceApplication.getEndTime(),
+                destPolicy.getEffectiveDate(),
+                PolicyStatus.Draft.getValue() + "");
+
+        if(nextMonthPolicy==null) {
+            //todo 如果没有则新建一条下月投保记录
+            destPolicy.setNo(srcPolicy.getNo() + 1);
+            destPolicy.setId(UUID.randomUUID().toString());
+            destPolicy.setStatus(PolicyStatus.Draft.getValue() + "");
+            destPolicy.setCreateBy(subject);
+            destPolicy.setCreateTime(new Date());
+            destPolicy.setUpdateBy(subject);
+            destPolicy.setUpdateTime(new Date());
+
+            insurancePolicyService.insert(destPolicy);
+
+            //关联投保单及每月投保单
+            ApplicationPolicy applicationPolicy = new ApplicationPolicy();
+            applicationPolicy.setId(UUID.randomUUID().toString());
+            applicationPolicy.setApplicationId(applicationId);
+            applicationPolicy.setPolicyId(destPolicy.getId());
+
+            applicationPolicyService.insert(applicationPolicy);
+
+            //todo 关联参保人员
+            List<InsurancePolicyMember> memberList = insurancePolicyMemberService.findByPolicyId(policyId);
+
+            for (InsurancePolicyMember srcMember : memberList) {
+                InsurancePolicyMember destMember = new InsurancePolicyMember();
+
+                destMember.setId(UUID.randomUUID().toString());
+                destMember.setPolicyId(destPolicy.getId());
+                destMember.setMemberId(srcMember.getMemberId());
+                destMember.setDelFlag(false);
+                destMember.setCreateBy(subject);
+                destMember.setCreateTime(new Date());
+                destMember.setStatus(srcMember.getStatus());
+
+                insurancePolicyMemberService.insert(destMember);
+            }
 
-        if (exist){
-            throw new Exception(destPolicy.getEffectiveDate() + "投保单已存在!");
+            updatePolicyNumAndAmount(destPolicy,subject);
         }
+        else{
+            //todo 如果有则判断关联当前投保单的下月投保记录是否存在
+            boolean exist = insurancePolicyService.existByApplicationIdAndEffectiveDate(applicationId, destPolicy.getEffectiveDate());
 
-        destPolicy.setNo(srcPolicy.getNo()+1);
-        destPolicy.setId(UUID.randomUUID().toString());
-        destPolicy.setStatus(PolicyStatus.Draft.getValue() + "");
-        destPolicy.setCreateBy(subject);
-        destPolicy.setCreateTime(new Date());
-        destPolicy.setUpdateBy(subject);
-        destPolicy.setUpdateTime(new Date());
+            if (!exist) {
+                //todo 如果关联当前投保单的下月投保单不存在,但关联当前企业、相同险种的投保单存在则合并
 
-        insurancePolicyService.insert(destPolicy);
+                //关联投保单及下月投保单
+                ApplicationPolicy applicationPolicy = new ApplicationPolicy();
+                applicationPolicy.setId(UUID.randomUUID().toString());
+                applicationPolicy.setApplicationId(applicationId);
 
-        //关联投保单及每月投保单
-        ApplicationPolicy applicationPolicy = new ApplicationPolicy();
-        applicationPolicy.setId(UUID.randomUUID().toString());
-        applicationPolicy.setApplicationId(applicationId);
-        applicationPolicy.setPolicyId(destPolicy.getId());
+                //下月投保单已存在(创建时间)<当前投保单创建时间,所以排序要按照start_time
+                applicationPolicy.setPolicyId(nextMonthPolicy.getId());
 
-        applicationPolicyService.insert(applicationPolicy);
+                applicationPolicyService.insert(applicationPolicy);
 
-        //关联参保人员
-        List<InsurancePolicyMember> memberList = insurancePolicyMemberService.findByPolicyId(policyId);
+                //todo 关联参保人员
+                List<InsurancePolicyMember> memberList = insurancePolicyMemberService.findByPolicyId(policyId);
 
-        for (InsurancePolicyMember srcMember : memberList) {
-            InsurancePolicyMember destMember = new InsurancePolicyMember();
+                for (InsurancePolicyMember srcMember : memberList) {
+                    //人员不重复
+                    if (!insurancePolicyMemberService.exist(nextMonthPolicy.getId(),srcMember.getMemberId())) {
+                        InsurancePolicyMember destMember = new InsurancePolicyMember();
 
-            destMember.setId(UUID.randomUUID().toString());
-            destMember.setPolicyId(destPolicy.getId());
-            destMember.setMemberId(srcMember.getMemberId());
-            destMember.setDelFlag(false);
-            destMember.setCreateBy(subject);
-            destMember.setCreateTime(new Date());
-            destMember.setStatus(srcMember.getStatus());
+                        destMember.setId(UUID.randomUUID().toString());
+                        destMember.setPolicyId(nextMonthPolicy.getId());
+                        destMember.setMemberId(srcMember.getMemberId());
+                        destMember.setDelFlag(false);
+                        destMember.setCreateBy(subject);
+                        destMember.setCreateTime(new Date());
+                        destMember.setStatus(srcMember.getStatus());
 
-            insurancePolicyMemberService.insert(destMember);
+                        insurancePolicyMemberService.insert(destMember);
+                    }
+                }
+
+                updatePolicyNumAndAmount(nextMonthPolicy,subject);
+            }
+            else{
+                throw new Exception(destPolicy.getEffectiveDate() + "投保单已存在!");
+            }
         }
     }
 
+    /**
+     * 更新下月投保单的费用和人数
+     * @param insurancePolicy
+     * @param subject
+     */
+    private void updatePolicyNumAndAmount(InsurancePolicy insurancePolicy,String subject) {
+        List<InsuranceJobs> InsuranceJobsList = insuranceJobsService.findByDefinitionId(insurancePolicy.getDefinitionId());
+
+        int months = 1;
+
+        BigDecimal totalAmount = new BigDecimal(0);
+        long totalNumber = 0;
+
+        for (InsuranceJobs insuranceJobs:InsuranceJobsList) {
+            long count = insurancePolicyMemberService.countByPolicyIdAndJobsId(insurancePolicy.getId(),insuranceJobs.getJobsId());
+            BigDecimal money = insuranceJobs.getCharges().multiply(new BigDecimal(months)).multiply(new BigDecimal(count));
+            totalAmount = totalAmount.add(money);
+            totalNumber += count;
+        }
+
+        //更新下月投保单的参保人数和参保费用
+        insurancePolicy.setInsuranceFee(totalAmount);
+        insurancePolicy.setNumber((int)totalNumber);
+        insurancePolicy.setUpdateTime(new Date());
+        insurancePolicy.setUpdateBy(subject);
+
+        insurancePolicyService.update(insurancePolicy);
+    }
+
     private void check(String policyId,String status,String subject){
         List<InsurancePolicyMember> insurancePolicyMemberList = insurancePolicyMemberService.findByPolicyId(policyId);
+
         for (InsurancePolicyMember insurancePolicyMember:insurancePolicyMemberList) {
             String statusMember = insurancePolicyMember.getStatus();
             if(StringUtils.isEmpty(statusMember)||statusMember.equals("0")){
@@ -808,4 +868,126 @@ public class InsurancePolicyController {
             }
         }
     }
+
+
+    @ApiOperation(value="获取投保信息")
+    @PostMapping("insureDetail")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name="policyId",value = "下月投保单ID",required = true,paramType = "query")
+    })
+    public MessageResult<InsuranceApplication> insureDetail(String policyId){
+        MessageResult<InsuranceApplication> msgResult = new MessageResult<>();
+
+        try {
+            InsurancePolicy insurancePolicy = insurancePolicyService.get(policyId);
+
+            if (insurancePolicy != null) {
+                List<InsuranceApplication> applicationList = applicationPolicyService.findApplicationByPolicyId(policyId);
+
+                //首月投保
+                InsuranceApplication insuranceApplication = applicationList.get(0);
+
+                insuranceApplication.setInsurancePolicy(insurancePolicy);
+
+                msgResult.setResult(true);
+                msgResult.setData(insuranceApplication);
+            } else {
+                msgResult.setResult(false);
+                msgResult.setMessage("数据库不存在该记录!");
+            }
+        }
+        catch(Exception ex){
+            logger.error(ex.getMessage(),ex);
+
+            msgResult.setResult(false);
+            msgResult.setMessage(ex.getMessage());
+        }
+
+        return msgResult;
+    }
+
+
+    @ApiOperation(value="获取承保信息")
+    @RequestMapping(value = "acceptDetail",method = RequestMethod.POST)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name="policyId",value = "每月投保单ID",required = true,paramType = "query")
+    })
+    public MessageResult<Map> acceptDetail(String policyId){
+
+        MessageResult<Map> msgResult = new MessageResult<>();
+
+        Map<String,Object> map = new HashMap<String,Object>();
+
+        //每月投保单
+        InsurancePolicy insurancePolicy = insurancePolicyService.get(policyId);
+
+        //险种
+        InsuranceDefinition insuranceDefinition = insuranceDefinitionService.get(insurancePolicy.getDefinitionId());
+
+        String definitionId = insuranceDefinition.getId();
+
+        map.put("id",insuranceDefinition.getId());
+        map.put("name",insuranceDefinition.getName());
+
+        List<InsuranceDefinitionLimit> insuranceDefinitionLimitList = insuranceDefinitionLimitService.findByDefinitionId(definitionId);
+
+        List<Map<String,Object>> mapList = new ArrayList<Map<String,Object>>();
+
+        for(InsuranceDefinitionLimit  insuranceDefinitionLimit:insuranceDefinitionLimitList){
+            Map<String,Object> map1 = new HashMap<String,Object>();
+            map1.put("id",insuranceDefinitionLimit.getId());
+            map1.put("name",insuranceDefinitionLimit.getName());
+            map1.put("limit",insuranceDefinitionLimit.getLimit());
+            map1.put("unit",insuranceDefinitionLimit.getUnit());
+            mapList.add(map1);
+        }
+
+        map.put("insuranceDefinitionLimitList",mapList);
+
+        List<InsuranceJobs> InsuranceJobsList = insuranceJobsService.findByDefinitionId(insurancePolicy.getDefinitionId());
+
+        List<Map<String,Object>> mapList1 = new ArrayList<Map<String,Object>>();
+
+        DateTime startTime = new DateTime(insurancePolicy.getStartTime());
+        map.put("startTime",startTime.toString("yyyy-MM-dd"));
+
+        DateTime endTime = new DateTime(insurancePolicy.getEndTime());
+        map.put("endTime",endTime.toString("yyyy-MM-dd"));
+
+        //月份
+        int months = 1;
+
+        BigDecimal totalAmount = new BigDecimal(0);
+
+        for (InsuranceJobs insuranceJobs:InsuranceJobsList) {
+            Map<String,Object> map1 = new HashMap<String,Object>();
+            String jobId = insuranceJobs.getJobsId();
+            map1.put("id",jobId);
+            map1.put("name",insuranceJobs.getJobs().getName());
+            map1.put("content",insuranceJobs.getJobs().getContent());
+            map1.put("charges",insuranceJobs.getCharges());
+            map1.put("chargesY",insuranceJobs.getCharges().multiply(new BigDecimal(12)));
+            long memberCount = insurancePolicyMemberService.countByPolicyIdAndJobsId(policyId,insuranceJobs.getJobsId());
+            long number = Long.valueOf(memberCount).intValue();
+            map1.put("number",number);
+            BigDecimal money = insuranceJobs.getCharges().multiply(new BigDecimal(months)).multiply(new BigDecimal(number));
+            map1.put("money",money);
+
+            totalAmount = totalAmount.add(money);
+            mapList1.add(map1);
+        }
+
+        map.put("totalAmount",totalAmount);
+
+        String cnMontrayUnit = NumberToCN.number2CNMontrayUnit(totalAmount);
+        map.put("cnMontrayUnit",cnMontrayUnit);
+
+        map.put("jobsList",mapList1);
+
+        msgResult.setResult(true);
+        msgResult.setData(map);
+
+        return msgResult;
+
+    }
 }

+ 10 - 0
picc-admin-server/src/main/java/com/jpsoft/picc/modules/sys/controller/ApiController.java

@@ -3,12 +3,15 @@ package com.jpsoft.picc.modules.sys.controller;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.http.ResponseEntity;
+import org.springframework.http.converter.HttpMessageConverter;
+import org.springframework.http.converter.StringHttpMessageConverter;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.client.RestTemplate;
 
 import javax.servlet.http.HttpServletRequest;
+import java.nio.charset.Charset;
 
 @RestController
 @RequestMapping("/sys/api")
@@ -19,6 +22,13 @@ public class ApiController {
     public ResponseEntity<String> selectAll(HttpServletRequest request){
         RestTemplate restTemplate = new RestTemplate();
 
+        for (HttpMessageConverter<?> httpMessageConverter : restTemplate.getMessageConverters()) {
+            if(httpMessageConverter instanceof StringHttpMessageConverter) {
+                ((StringHttpMessageConverter) httpMessageConverter).setDefaultCharset(Charset.forName("UTF-8"));
+                break;
+            }
+        }
+
         String path = request.getContextPath();
         String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
 

+ 4 - 0
picc-admin-server/src/test/java/com/jpsoft/picc/test/CompanyTest.java

@@ -35,4 +35,8 @@ public class CompanyTest {
 
         companyService.insert(company);
     }
+
+    private void testParamOutput(String name,Integer age){
+        System.out.println("testParamOutput " + "name = [" + name + "], age = [" + age + "]");
+    }
 }

+ 1 - 1
picc-admin-server/src/test/java/com/jpsoft/picc/test/NewApiTest.java

@@ -47,6 +47,6 @@ public class NewApiTest {
 
     @Test
     public void testEnum(){
-        System.out.println(PolicyStatus.Draft.getValue());
+        System.out.println(Integer.valueOf("郑强"));
     }
 }

+ 45 - 0
picc-admin-server/src/test/java/com/jpsoft/picc/test/PolicyTest.java

@@ -0,0 +1,45 @@
+package com.jpsoft.picc.test;
+
+import com.jpsoft.picc.modules.business.entity.InsurancePolicy;
+import com.jpsoft.picc.modules.business.service.InsurancePolicyService;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.annotation.Rollback;
+import org.springframework.test.context.junit4.SpringRunner;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.interceptor.TransactionAspectSupport;
+
+import java.lang.reflect.Executable;
+import java.util.Date;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest
+public class PolicyTest {
+    @Autowired
+    private InsurancePolicyService insurancePolicyService;
+
+    @Transactional(rollbackFor=Exception.class,propagation=Propagation.REQUIRED)
+    public void transactionMethod(){
+        InsurancePolicy policy = insurancePolicyService.get("78e7de89-d903-41e5-9b5d-73205baed84a");
+        policy.setStatus("70");
+        insurancePolicyService.update(policy);
+
+        insurancePolicyService.findNextMonthPolicy("1", "2", new Date(), "3", "4");
+    }
+
+    @Test
+    @Transactional(rollbackFor=Exception.class,propagation=Propagation.REQUIRED)
+    public void test1(){
+        try {
+            transactionMethod();
+        }catch (Exception ex){
+            //在实际开发中,我们往往需要在方法中进行异常的捕获,从而对异常进行判断,为客户端返回提示信息。
+            //但是此时由于异常的被捕获,导致事务的回滚没有被触发,导致事务的失败。
+            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+            System.out.println(ex.getMessage());
+        }
+    }
+}

+ 1 - 1
picc-common/src/main/java/com/jpsoft/picc/modules/base/dao/InsuranceJobsDAO.java

@@ -14,7 +14,7 @@ public interface InsuranceJobsDAO {
 	InsuranceJobs get(String id);
 	int delete(String id);
 	List<InsuranceJobs> list();
-	List<InsuranceJobs> listByDefinitionId(String definitionId);
+	List<InsuranceJobs> findByDefinitionId(String definitionId);
 	List<InsuranceJobs> findByDefinitionIdAndJobId(String definitionId, String jobId);
 	List<InsuranceJobs> search(Map<String, Object> searchParams, List<Sort> sortList);
 }

+ 10 - 1
picc-common/src/main/java/com/jpsoft/picc/modules/base/entity/InsuranceDefinitionLimit.java

@@ -38,7 +38,8 @@ public class InsuranceDefinitionLimit {
 	private String updateBy;
     @ApiModelProperty(value = "修改时间")
 	private Date updateTime;
-
+	@ApiModelProperty(value = "序号")
+	private Integer sortNo;
 
     /**
 	 *获取编号
@@ -209,4 +210,12 @@ public class InsuranceDefinitionLimit {
 	public void setUpdateTime(Date updateTime){
 		this.updateTime = updateTime;
 	}
+
+	public Integer getSortNo() {
+		return sortNo;
+	}
+
+	public void setSortNo(Integer sortNo) {
+		this.sortNo = sortNo;
+	}
 }

+ 11 - 0
picc-common/src/main/java/com/jpsoft/picc/modules/base/entity/Jobs.java

@@ -34,6 +34,9 @@ public class Jobs {
 	private String updateBy;
     @ApiModelProperty(value = "修改时间")
 	private Date updateTime;
+	@ApiModelProperty(value = "序号")
+	private Integer sortNo;
+
     /**
 	 *获取编号
 	 */
@@ -161,4 +164,12 @@ public class Jobs {
 		this.updateTime = updateTime;
 	}
 
+
+	public Integer getSortNo() {
+		return sortNo;
+	}
+
+	public void setSortNo(Integer sortNo) {
+		this.sortNo = sortNo;
+	}
 }

+ 1 - 1
picc-common/src/main/java/com/jpsoft/picc/modules/base/service/InsuranceJobsService.java

@@ -13,7 +13,7 @@ public interface InsuranceJobsService {
 	int update(InsuranceJobs model);
 	int delete(String id);
 	List<InsuranceJobs> list();
-	List<InsuranceJobs> listByDefinitionId(String definitionId);
+	List<InsuranceJobs> findByDefinitionId(String definitionId);
 	List<InsuranceJobs> findByDefinitionIdAndJobId(String definitionId, String jobId);
 	Page<InsuranceJobs> pageSearch(Map<String, Object> searchParams, int pageNum, int pageSize, List<Sort> sortList);
 }

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

@@ -60,8 +60,8 @@ public class InsuranceJobsServiceImpl implements InsuranceJobsService {
 	}
 
 	@Override
-	public List<InsuranceJobs> listByDefinitionId(String definitionId){
-		return insuranceJobsDAO.listByDefinitionId(definitionId);
+	public List<InsuranceJobs> findByDefinitionId(String definitionId){
+		return insuranceJobsDAO.findByDefinitionId(definitionId);
 	}
 
 	@Override

+ 1 - 3
picc-common/src/main/java/com/jpsoft/picc/modules/business/dao/ApplicationPolicyDAO.java

@@ -35,7 +35,5 @@ public interface ApplicationPolicyDAO {
 
     List<InsuranceApplication> findApplicationByPolicyId(String policyId);
 
-    List<InsurancePolicy> findNewPolicyByApplicationId(String applicationId);
-
-    List<InsurancePolicy> findFirstPolicyByApplicationId(String applicationId);
+    InsurancePolicy findFirstPolicyByApplicationId(String applicationId);
 }

+ 4 - 0
picc-common/src/main/java/com/jpsoft/picc/modules/business/dao/InsurancePolicyDAO.java

@@ -1,9 +1,11 @@
 package com.jpsoft.picc.modules.business.dao;
 
+import cn.hutool.core.date.DateTime;
 import com.jpsoft.picc.modules.business.entity.InsurancePolicy;
 import com.jpsoft.picc.modules.common.dto.Sort;
 import org.springframework.stereotype.Repository;
 
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
@@ -26,4 +28,6 @@ public interface InsurancePolicyDAO {
     long countByApplicationIdAndEffectiveDate(String applicationId, String effectiveDate);
 
     List<InsurancePolicy> nextMonthPageList(Map<String, Object> searchParams, List<Sort> sortList);
+
+    InsurancePolicy findNextMonthPolicy(String companyId, String definitionId, Date endTime, String effectiveDate, String status);
 }

+ 2 - 0
picc-common/src/main/java/com/jpsoft/picc/modules/business/dao/InsurancePolicyMemberDAO.java

@@ -26,4 +26,6 @@ public interface InsurancePolicyMemberDAO {
     long countByPolicyIdAndJobsId(String policyId, String jobsId);
 
     List<InsurancePolicyMember> findByPolicyId(String policyId);
+
+    int countByPolicyIdAndMemberId(String policyId, String memberId);
 }

+ 13 - 29
picc-common/src/main/java/com/jpsoft/picc/modules/business/entity/InsuranceApplication.java

@@ -6,6 +6,7 @@ import java.text.SimpleDateFormat;
 import java.math.BigDecimal;
 
 import com.jpsoft.picc.modules.common.constant.PolicyStatus;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.format.annotation.DateTimeFormat;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModelProperty;
@@ -436,33 +437,19 @@ public class InsuranceApplication {
 	 */
 	public String getStatusN() {
 		String statusN = "";
-		if(status.equals("10")){
-			statusN = PolicyStatus.Draft.getText();
-		}
-		else if(status.equals("15")){
-			statusN = PolicyStatus.Back.getText();
-		}
-		else if(status.equals("20")){
-			statusN = PolicyStatus.PendingTrial.getText();
-		}
-		else if(status.equals("30")){
-			statusN = PolicyStatus.PendingRetrial.getText();
-		}
-		else if(status.equals("40")){
-			statusN = PolicyStatus.PendingPay.getText();
-		}
-		else if(status.equals("50")){
-			statusN = PolicyStatus.PendingMakePolicy.getText();
-		}
-		else if(status.equals("60")){
-			statusN = PolicyStatus.PendingOutPolicy.getText();
-		}
-		else if(status.equals("70")){
-			statusN = PolicyStatus.SendOutPolicy.getText();
-		}
-		else{
-			statusN = PolicyStatus.Expired.getText();
+
+		if(StringUtils.isNotEmpty(status)) {
+			try {
+				PolicyStatus policyStatus = PolicyStatus.valueOf(Integer.valueOf(status));
+
+				if (policyStatus != null) {
+					statusN = policyStatus.getText();
+				}
+			}catch (Exception ex){
+				System.out.println(ex.getMessage());
+			}
 		}
+
 		return statusN;
 	}
 
@@ -478,7 +465,4 @@ public class InsuranceApplication {
 	public void setInsurancePolicy(InsurancePolicy insurancePolicy) {
 		this.insurancePolicy = insurancePolicy;
 	}
-
-
-
 }

+ 11 - 29
picc-common/src/main/java/com/jpsoft/picc/modules/business/entity/InsurancePolicy.java

@@ -376,36 +376,18 @@ public class InsurancePolicy {
     public String getStatusN() {
         String statusN = "";
 
-        if(StringUtils.isEmpty(status)){
-            statusN = "";
-        }
-        else if(status.equals("10")){
-            statusN = PolicyStatus.Draft.getText();
-        }
-        else if(status.equals("15")){
-            statusN = PolicyStatus.Back.getText();
-        }
-        else if(status.equals("20")){
-            statusN = PolicyStatus.PendingTrial.getText();
-        }
-        else if(status.equals("30")){
-            statusN = PolicyStatus.PendingRetrial.getText();
-        }
-        else if(status.equals("40")){
-            statusN = PolicyStatus.PendingPay.getText();
-        }
-        else if(status.equals("50")){
-            statusN = PolicyStatus.PendingMakePolicy.getText();
-        }
-        else if(status.equals("60")){
-            statusN = PolicyStatus.PendingOutPolicy.getText();
-        }
-        else if(status.equals("70")){
-            statusN = PolicyStatus.SendOutPolicy.getText();
-        }
-        else{
-            statusN = PolicyStatus.Expired.getText();
+        if(StringUtils.isNotEmpty(status)) {
+            try {
+                PolicyStatus policyStatus = PolicyStatus.valueOf(Integer.valueOf(status));
+
+                if (policyStatus != null) {
+                    statusN = policyStatus.getText();
+                }
+            }catch (Exception ex){
+                System.out.println(ex.getMessage());
+            }
         }
+
         return statusN;
     }
 

+ 17 - 1
picc-common/src/main/java/com/jpsoft/picc/modules/business/entity/InsurancePolicyMember.java

@@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonFormat;
 import com.jpsoft.picc.modules.base.entity.CompanyMember;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.format.annotation.DateTimeFormat;
 
 import java.util.Date;
@@ -72,7 +73,7 @@ public class InsurancePolicyMember {
     }
 
     /**
-     * 获取审核状态
+     * 获取审核状态(0-未审核,1-已初审,2-已复审)
      */
     @ApiModelProperty(value = "审核状态")
     public String getStatus() {
@@ -86,6 +87,21 @@ public class InsurancePolicyMember {
         this.status = status;
     }
 
+    public String getStatusN(){
+        String text = "";
+        if(StringUtils.isEmpty(this.status) || "0".equals(this.status)){
+            text = "未审核";
+        }
+        else if("1".equals(this.status)){
+            text = "已初审";
+        }
+        else if("2".equals(this.status)){
+            text = "已复审";
+        }
+
+        return text;
+    }
+
     /**
      * 获取是否为增补
      */

+ 1 - 3
picc-common/src/main/java/com/jpsoft/picc/modules/business/service/ApplicationPolicyService.java

@@ -34,7 +34,5 @@ public interface ApplicationPolicyService {
 
     List<InsuranceApplication> findApplicationByPolicyId(String policyId);
 
-    List<InsurancePolicy> findNewPolicyByApplicationId(String applicationId);
-
-    List<InsurancePolicy> findFirstPolicyByApplicationId(String applicationId);
+    InsurancePolicy findFirstPolicyByApplicationId(String applicationId);
 }

+ 2 - 0
picc-common/src/main/java/com/jpsoft/picc/modules/business/service/InsurancePolicyMemberService.java

@@ -25,4 +25,6 @@ public interface InsurancePolicyMemberService {
     long countByPolicyIdAndJobsId(String policyId, String jobsId);
 
     List<InsurancePolicyMember> findByPolicyId(String policyId);
+
+    boolean exist(String policyId, String memberId);
 }

+ 4 - 0
picc-common/src/main/java/com/jpsoft/picc/modules/business/service/InsurancePolicyService.java

@@ -1,9 +1,11 @@
 package com.jpsoft.picc.modules.business.service;
 
+import cn.hutool.core.date.DateTime;
 import com.github.pagehelper.Page;
 import com.jpsoft.picc.modules.business.entity.InsurancePolicy;
 import com.jpsoft.picc.modules.common.dto.Sort;
 
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
@@ -25,4 +27,6 @@ public interface InsurancePolicyService {
     boolean existByApplicationIdAndEffectiveDate(String applicationId, String effectiveDate);
 
     Page<InsurancePolicy> nextMonthPageList(Map<String, Object> searchParams, int pageIndex, int pageSize, List<Sort> sortList);
+
+    InsurancePolicy findNextMonthPolicy(String companyId, String definitionId, Date endTime, String effectiveDate, String status);
 }

+ 1 - 7
picc-common/src/main/java/com/jpsoft/picc/modules/business/service/impl/ApplicationPolicyServiceImpl.java

@@ -103,14 +103,8 @@ public class ApplicationPolicyServiceImpl implements ApplicationPolicyService {
         return applicationPolicyDAO.findApplicationByPolicyId(policyId);
     }
 
-
-    @Override
-    public List<InsurancePolicy> findNewPolicyByApplicationId(String applicationId){
-        return applicationPolicyDAO.findNewPolicyByApplicationId(applicationId);
-    }
-
     @Override
-    public List<InsurancePolicy> findFirstPolicyByApplicationId(String applicationId){
+    public InsurancePolicy findFirstPolicyByApplicationId(String applicationId){
         return applicationPolicyDAO.findFirstPolicyByApplicationId(applicationId);
     }
 }

+ 7 - 0
picc-common/src/main/java/com/jpsoft/picc/modules/business/service/impl/InsurancePolicyMemberServiceImpl.java

@@ -77,4 +77,11 @@ public class InsurancePolicyMemberServiceImpl implements InsurancePolicyMemberSe
     public List<InsurancePolicyMember> findByPolicyId(String policyId) {
         return insurancePolicyMemberDAO.findByPolicyId(policyId);
     }
+
+    @Override
+    public boolean exist(String policyId, String memberId) {
+        int count = insurancePolicyMemberDAO.countByPolicyIdAndMemberId(policyId,memberId);
+
+        return count>0;
+    }
 }

+ 7 - 0
picc-common/src/main/java/com/jpsoft/picc/modules/business/service/impl/InsurancePolicyServiceImpl.java

@@ -1,5 +1,6 @@
 package com.jpsoft.picc.modules.business.service.impl;
 
+import cn.hutool.core.date.DateTime;
 import com.github.pagehelper.Page;
 import com.github.pagehelper.PageHelper;
 import com.jpsoft.picc.modules.business.dao.InsurancePolicyDAO;
@@ -10,6 +11,7 @@ import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
@@ -83,4 +85,9 @@ public class InsurancePolicyServiceImpl implements InsurancePolicyService {
 
         return page;
     }
+
+    @Override
+    public InsurancePolicy findNextMonthPolicy(String companyId, String definitionId, Date endTime, String effectiveDate, String status) {
+        return insurancePolicyDAO.findNextMonthPolicy(companyId,definitionId,endTime, effectiveDate,status);
+    }
 }

+ 10 - 0
picc-common/src/main/java/com/jpsoft/picc/modules/common/constant/PolicyStatus.java

@@ -22,6 +22,16 @@ public enum PolicyStatus {
         this.value = value;
     }
 
+    public static PolicyStatus valueOf(int value){
+        for (PolicyStatus policyStatus : PolicyStatus.values()) {
+            if (policyStatus.getValue()==value){
+                return policyStatus;
+            }
+        }
+
+        return null;
+    }
+
     public int getValue() {
         return value;
     }

+ 122 - 114
picc-common/src/main/resources/mapper/base/InsuranceDefinitionLimit.xml

@@ -1,125 +1,133 @@
 <?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <!-- namespace必须指向DAO接口 -->
 <mapper namespace="com.jpsoft.picc.modules.base.dao.InsuranceDefinitionLimitDAO">
-	<resultMap id="InsuranceDefinitionLimitMap" type="com.jpsoft.picc.modules.base.entity.InsuranceDefinitionLimit">
-		<id property="id" column="id_" />
-			<result property="definitionId" column="definition_id" />
-			<result property="name" column="name_" />
-			<result property="limit" column="limit_" />
-			<result property="unit" column="unit_" />
-			<result property="status" column="status_" />
-			<result property="delFlag" column="del_flag" />
-			<result property="createBy" column="create_by" />
-			<result property="createTime" column="create_time" />
-			<result property="updateBy" column="update_by" />
-			<result property="updateTime" column="update_time" />
-			<association property="definition" column="definition_id" select="com.jpsoft.picc.modules.base.dao.InsuranceDefinitionDAO.get"></association>
-	</resultMap>
-	<resultMap id="InsuranceDefinitionLimitSimpleMap" type="com.jpsoft.picc.modules.base.entity.InsuranceDefinitionLimit">
-		<id property="id" column="id_" />
-		<result property="definitionId" column="definition_id" />
-		<result property="name" column="name_" />
-		<result property="limit" column="limit_" />
-		<result property="unit" column="unit_" />
-		<result property="status" column="status_" />
-		<result property="delFlag" column="del_flag" />
-		<result property="createBy" column="create_by" />
-		<result property="createTime" column="create_time" />
-		<result property="updateBy" column="update_by" />
-		<result property="updateTime" column="update_time" />
-	</resultMap>
-	<insert id="insert" parameterType="com.jpsoft.picc.modules.base.entity.InsuranceDefinitionLimit">
-	<!--
-	<selectKey resultType="java.lang.String" order="BEFORE" keyProperty="id">
-		select sys_guid() from dual
-	</selectKey>
-	-->
-	<![CDATA[
+    <resultMap id="InsuranceDefinitionLimitMap" type="com.jpsoft.picc.modules.base.entity.InsuranceDefinitionLimit">
+        <id property="id" column="id_"/>
+        <result property="definitionId" column="definition_id"/>
+        <result property="name" column="name_"/>
+        <result property="limit" column="limit_"/>
+        <result property="unit" column="unit_"/>
+        <result property="status" column="status_"/>
+        <result property="delFlag" column="del_flag"/>
+        <result property="createBy" column="create_by"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateBy" column="update_by"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="sortNo" column="sort_no"/>
+        <association property="definition" column="definition_id"
+                     select="com.jpsoft.picc.modules.base.dao.InsuranceDefinitionDAO.get"></association>
+    </resultMap>
+    <resultMap id="InsuranceDefinitionLimitSimpleMap"
+               type="com.jpsoft.picc.modules.base.entity.InsuranceDefinitionLimit">
+        <id property="id" column="id_"/>
+        <result property="definitionId" column="definition_id"/>
+        <result property="name" column="name_"/>
+        <result property="limit" column="limit_"/>
+        <result property="unit" column="unit_"/>
+        <result property="status" column="status_"/>
+        <result property="delFlag" column="del_flag"/>
+        <result property="createBy" column="create_by"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateBy" column="update_by"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="sortNo" column="sort_no"/>
+    </resultMap>
+    <insert id="insert" parameterType="com.jpsoft.picc.modules.base.entity.InsuranceDefinitionLimit">
+        <!--
+        <selectKey resultType="java.lang.String" order="BEFORE" keyProperty="id">
+            select sys_guid() from dual
+        </selectKey>
+        -->
+        <![CDATA[
 		insert into base_insurance_definition_limit
-	    (id_,definition_id,name_,limit_,unit_,status_,del_flag,create_by,create_time,update_by,update_time)
+	    (id_,definition_id,name_,limit_,unit_,status_,del_flag,create_by,create_time,update_by,update_time,sort_no)
 		values
 		(
-#{id,jdbcType=VARCHAR}
-,#{definitionId,jdbcType=VARCHAR}
-,#{name,jdbcType=VARCHAR}
-,#{limit,jdbcType=VARCHAR}
-,#{unit,jdbcType=VARCHAR}
-,#{status,jdbcType=VARCHAR}
-,#{delFlag,jdbcType= NUMERIC }
-,#{createBy,jdbcType=VARCHAR}
-,#{createTime,jdbcType= TIMESTAMP }
-,#{updateBy,jdbcType=VARCHAR}
-,#{updateTime,jdbcType= TIMESTAMP }
+            #{id,jdbcType=VARCHAR}
+            ,#{definitionId,jdbcType=VARCHAR}
+            ,#{name,jdbcType=VARCHAR}
+            ,#{limit,jdbcType=VARCHAR}
+            ,#{unit,jdbcType=VARCHAR}
+            ,#{status,jdbcType=VARCHAR}
+            ,#{delFlag,jdbcType= NUMERIC }
+            ,#{createBy,jdbcType=VARCHAR}
+            ,#{createTime,jdbcType= TIMESTAMP }
+            ,#{updateBy,jdbcType=VARCHAR}
+            ,#{updateTime,jdbcType= TIMESTAMP }
+			,#{sortNo,jdbcType= NUMERIC }
 		)
 	]]>
-	</insert>
-	<delete id="delete" parameterType="string">
-		delete from base_insurance_definition_limit where id_=#{id,jdbcType=VARCHAR}
-	</delete>
-	<update id="update" parameterType="com.jpsoft.picc.modules.base.entity.InsuranceDefinitionLimit">
-		update base_insurance_definition_limit
-		<set>
-				<if test="definitionId!=null">
-		definition_id=#{definitionId,jdbcType=VARCHAR},
-		</if>
-				<if test="name!=null">
-		name_=#{name,jdbcType=VARCHAR},
-		</if>
-				<if test="limit!=null">
-		limit_=#{limit,jdbcType=VARCHAR},
-		</if>
-				<if test="unit!=null">
-		unit_=#{unit,jdbcType=VARCHAR},
-		</if>
-				<if test="status!=null">
-		status_=#{status,jdbcType=VARCHAR},
-		</if>
-				<if test="delFlag!=null">
-		del_flag=#{delFlag,jdbcType= NUMERIC },
-		</if>
-				<if test="createBy!=null">
-		create_by=#{createBy,jdbcType=VARCHAR},
-		</if>
-				<if test="createTime!=null">
-		create_time=#{createTime,jdbcType= TIMESTAMP },
-		</if>
-				<if test="updateBy!=null">
-		update_by=#{updateBy,jdbcType=VARCHAR},
-		</if>
-				<if test="updateTime!=null">
-		update_time=#{updateTime,jdbcType= TIMESTAMP },
-		</if>
-		</set>
-	where id_=#{id}
-	</update>
-	<select id="get" parameterType="string" resultMap="InsuranceDefinitionLimitMap">
-		select 
-id_,definition_id,name_,limit_,unit_,status_,del_flag,create_by,create_time,update_by,update_time		from base_insurance_definition_limit where id_=#{0}
-	</select>
-	<select id="exist" parameterType="string" resultType="int">
-		select count(*) from base_insurance_definition_limit where id_=#{0}
-	</select>
-	<select id="list" resultMap="InsuranceDefinitionLimitMap">
-		select * from base_insurance_definition_limit where del_flag=false
-	</select>
-	<select id="findByDefinitionId" parameterType="string" resultMap="InsuranceDefinitionLimitSimpleMap">
-		select * from base_insurance_definition_limit where definition_id=#{0} and del_flag=0
-		order by create_time asc
-	</select>
-	<select id="search" parameterType="hashmap" resultMap="InsuranceDefinitionLimitMap">
-		<![CDATA[
+    </insert>
+    <delete id="delete" parameterType="string">
+        delete from base_insurance_definition_limit where id_=#{id,jdbcType=VARCHAR}
+    </delete>
+    <update id="update" parameterType="com.jpsoft.picc.modules.base.entity.InsuranceDefinitionLimit">
+        update base_insurance_definition_limit
+        <set>
+            <if test="definitionId!=null">
+                definition_id=#{definitionId,jdbcType=VARCHAR},
+            </if>
+            <if test="name!=null">
+                name_=#{name,jdbcType=VARCHAR},
+            </if>
+            <if test="limit!=null">
+                limit_=#{limit,jdbcType=VARCHAR},
+            </if>
+            <if test="unit!=null">
+                unit_=#{unit,jdbcType=VARCHAR},
+            </if>
+            <if test="status!=null">
+                status_=#{status,jdbcType=VARCHAR},
+            </if>
+            <if test="delFlag!=null">
+                del_flag=#{delFlag,jdbcType= NUMERIC },
+            </if>
+            <if test="createBy!=null">
+                create_by=#{createBy,jdbcType=VARCHAR},
+            </if>
+            <if test="createTime!=null">
+                create_time=#{createTime,jdbcType= TIMESTAMP },
+            </if>
+            <if test="updateBy!=null">
+                update_by=#{updateBy,jdbcType=VARCHAR},
+            </if>
+            <if test="updateTime!=null">
+                update_time=#{updateTime,jdbcType= TIMESTAMP },
+            </if>
+            <if test="sortNo!=null">
+                sort_no=#{sortNo,jdbcType= NUMERIC },
+            </if>
+        </set>
+        where id_=#{id}
+    </update>
+    <select id="get" parameterType="string" resultMap="InsuranceDefinitionLimitMap">
+        select * from
+        base_insurance_definition_limit where id_=#{0}
+    </select>
+    <select id="exist" parameterType="string" resultType="int">
+        select count(*) from base_insurance_definition_limit where id_=#{0}
+    </select>
+    <select id="list" resultMap="InsuranceDefinitionLimitMap">
+        select * from base_insurance_definition_limit where del_flag=false
+    </select>
+    <select id="findByDefinitionId" parameterType="string" resultMap="InsuranceDefinitionLimitSimpleMap">
+        select * from base_insurance_definition_limit
+        where definition_id=#{0} and del_flag=0 order by sort_no asc
+    </select>
+    <select id="search" parameterType="hashmap" resultMap="InsuranceDefinitionLimitMap">
+        <![CDATA[
 			select * from base_insurance_definition_limit
 		]]>
-		<where>
-			and del_flag = false
-			<if test="searchParams.name != null">
-				and name_ like #{searchParams.name}
-			</if>
-		</where>
-		<foreach item="sort" collection="sortList"  open="order by" separator=",">
-	        ${sort.name} ${sort.order}
-	 	</foreach>
-	</select>
+        <where>
+            and del_flag = false
+            <if test="searchParams.name != null">
+                and name_ like #{searchParams.name}
+            </if>
+        </where>
+        <foreach item="sort" collection="sortList" open="order by" separator=",">
+            ${sort.name} ${sort.order}
+        </foreach>
+    </select>
 </mapper>

+ 91 - 87
picc-common/src/main/resources/mapper/base/InsuranceJobs.xml

@@ -1,28 +1,30 @@
 <?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <!-- namespace必须指向DAO接口 -->
 <mapper namespace="com.jpsoft.picc.modules.base.dao.InsuranceJobsDAO">
-	<resultMap id="InsuranceJobsMap" type="com.jpsoft.picc.modules.base.entity.InsuranceJobs">
-		<id property="id" column="id_" />
-			<result property="jobsId" column="jobs_id" />
-			<result property="definitionId" column="definition_id" />
-			<result property="charges" column="charges_" />
-			<result property="delFlag" column="del_flag" />
-			<result property="createBy" column="create_by" />
-			<result property="createTime" column="create_time" />
-			<result property="updateBy" column="update_by" />
-			<result property="updateTime" column="update_time" />
-			<association property="definition" column="definition_id" select="com.jpsoft.picc.modules.base.dao.InsuranceDefinitionDAO.get"></association>
-			<association property="jobs" column="jobs_id" select="com.jpsoft.picc.modules.base.dao.JobsDAO.get"></association>
-			</resultMap>
-	<insert id="insert" parameterType="com.jpsoft.picc.modules.base.entity.InsuranceJobs">
-	<!--
-	<selectKey resultType="java.lang.String" order="BEFORE" keyProperty="id">
-		select sys_guid() from dual
-	</selectKey>
-	-->
-	<![CDATA[
+    <resultMap id="InsuranceJobsMap" type="com.jpsoft.picc.modules.base.entity.InsuranceJobs">
+        <id property="id" column="id_"/>
+        <result property="jobsId" column="jobs_id"/>
+        <result property="definitionId" column="definition_id"/>
+        <result property="charges" column="charges_"/>
+        <result property="delFlag" column="del_flag"/>
+        <result property="createBy" column="create_by"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateBy" column="update_by"/>
+        <result property="updateTime" column="update_time"/>
+        <association property="definition" column="definition_id"
+                     select="com.jpsoft.picc.modules.base.dao.InsuranceDefinitionDAO.get"></association>
+        <association property="jobs" column="jobs_id"
+                     select="com.jpsoft.picc.modules.base.dao.JobsDAO.get"></association>
+    </resultMap>
+    <insert id="insert" parameterType="com.jpsoft.picc.modules.base.entity.InsuranceJobs">
+        <!--
+        <selectKey resultType="java.lang.String" order="BEFORE" keyProperty="id">
+            select sys_guid() from dual
+        </selectKey>
+        -->
+        <![CDATA[
 		insert into base_insurance_jobs
 	    (id_,jobs_id,definition_id,charges_,del_flag,create_by,create_time,update_by,update_time)
 		values
@@ -38,71 +40,73 @@
 ,#{updateTime,jdbcType= TIMESTAMP }
 		)
 	]]>
-	</insert>
-	<delete id="delete" parameterType="string">
-		delete from base_insurance_jobs where id_=#{id,jdbcType=VARCHAR}
-	</delete>
-	<update id="update" parameterType="com.jpsoft.picc.modules.base.entity.InsuranceJobs">
-		update base_insurance_jobs
-		<set>
-				<if test="jobsId!=null">
-		jobs_id=#{jobsId,jdbcType=VARCHAR},
-		</if>
-				<if test="definitionId!=null">
-		definition_id=#{definitionId,jdbcType=VARCHAR},
-		</if>
-				<if test="charges!=null">
-		charges_=#{charges,jdbcType= NUMERIC },
-		</if>
-				<if test="delFlag!=null">
-		del_flag=#{delFlag,jdbcType= NUMERIC },
-		</if>
-				<if test="createBy!=null">
-		create_by=#{createBy,jdbcType=VARCHAR},
-		</if>
-				<if test="createTime!=null">
-		create_time=#{createTime,jdbcType= TIMESTAMP },
-		</if>
-				<if test="updateBy!=null">
-		update_by=#{updateBy,jdbcType=VARCHAR},
-		</if>
-				<if test="updateTime!=null">
-		update_time=#{updateTime,jdbcType= TIMESTAMP },
-		</if>
-		</set>
-	where id_=#{id}
-	</update>
-	<select id="get" parameterType="string" resultMap="InsuranceJobsMap">
-		select 
-id_,jobs_id,definition_id,charges_,del_flag,create_by,create_time,update_by,update_time		from base_insurance_jobs where id_=#{0}
-	</select>
-	<select id="exist" parameterType="string" resultType="int">
-		select count(*) from base_insurance_jobs where id_=#{0}
-	</select>
-	<select id="list" resultMap="InsuranceJobsMap">
-	select * from base_insurance_jobs where del_flag = false
-	</select>
-	<select id="listByDefinitionId" parameterType="string" resultMap="InsuranceJobsMap">
-		select * from base_insurance_jobs where definition_id=#{0} and del_flag = false
-	</select>
-	<select id="findByDefinitionIdAndJobId" parameterType="string" resultMap="InsuranceJobsMap">
-		select * from base_insurance_jobs where definition_id=#{definitionId,jdbcType=VARCHAR} and jobs_id=#{jobId,jdbcType=VARCHAR} and del_flag = false
-	</select>
-	<select id="search" parameterType="hashmap" resultMap="InsuranceJobsMap">
-		<![CDATA[
+    </insert>
+    <delete id="delete" parameterType="string">
+        delete from base_insurance_jobs where id_=#{id,jdbcType=VARCHAR}
+    </delete>
+    <update id="update" parameterType="com.jpsoft.picc.modules.base.entity.InsuranceJobs">
+        update base_insurance_jobs
+        <set>
+            <if test="jobsId!=null">
+                jobs_id=#{jobsId,jdbcType=VARCHAR},
+            </if>
+            <if test="definitionId!=null">
+                definition_id=#{definitionId,jdbcType=VARCHAR},
+            </if>
+            <if test="charges!=null">
+                charges_=#{charges,jdbcType= NUMERIC },
+            </if>
+            <if test="delFlag!=null">
+                del_flag=#{delFlag,jdbcType= NUMERIC },
+            </if>
+            <if test="createBy!=null">
+                create_by=#{createBy,jdbcType=VARCHAR},
+            </if>
+            <if test="createTime!=null">
+                create_time=#{createTime,jdbcType= TIMESTAMP },
+            </if>
+            <if test="updateBy!=null">
+                update_by=#{updateBy,jdbcType=VARCHAR},
+            </if>
+            <if test="updateTime!=null">
+                update_time=#{updateTime,jdbcType= TIMESTAMP },
+            </if>
+        </set>
+        where id_=#{id}
+    </update>
+    <select id="get" parameterType="string" resultMap="InsuranceJobsMap">
+        select * from base_insurance_jobs where id_=#{0}
+    </select>
+    <select id="exist" parameterType="string" resultType="int">
+        select count(*) from base_insurance_jobs where id_=#{0}
+    </select>
+    <select id="list" resultMap="InsuranceJobsMap">
+        select * from base_insurance_jobs where del_flag = false
+    </select>
+    <select id="findByDefinitionId" parameterType="string" resultMap="InsuranceJobsMap">
+        select * from base_insurance_jobs a,base_jobs b where
+        a.definition_id=#{0} and a.del_flag = false and a.jobs_id = b.id_
+        order by b.sort_no asc
+    </select>
+    <select id="findByDefinitionIdAndJobId" parameterType="string" resultMap="InsuranceJobsMap">
+        select * from base_insurance_jobs where definition_id=#{definitionId,jdbcType=VARCHAR} and
+        jobs_id=#{jobId,jdbcType=VARCHAR} and del_flag = false
+    </select>
+    <select id="search" parameterType="hashmap" resultMap="InsuranceJobsMap">
+        <![CDATA[
 			select * from base_insurance_jobs
 		]]>
-		<where>
-			and del_flag = false
-			<if test="searchParams.jobsId != null">
-				and jobs_id = #{searchParams.jobsId}
-			</if>
-			<if test="searchParams.definitionId != null">
-				and definition_id = #{searchParams.definitionId}
-			</if>
-		</where>
-		<foreach item="sort" collection="sortList"  open="order by" separator=",">
-	        ${sort.name} ${sort.order}
-	 	</foreach>
-	</select>
+        <where>
+            and del_flag = false
+            <if test="searchParams.jobsId != null">
+                and jobs_id = #{searchParams.jobsId}
+            </if>
+            <if test="searchParams.definitionId != null">
+                and definition_id = #{searchParams.definitionId}
+            </if>
+        </where>
+        <foreach item="sort" collection="sortList" open="order by" separator=",">
+            ${sort.name} ${sort.order}
+        </foreach>
+    </select>
 </mapper>

+ 90 - 86
picc-common/src/main/resources/mapper/base/Jobs.xml

@@ -1,97 +1,101 @@
 <?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
-"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <!-- namespace必须指向DAO接口 -->
 <mapper namespace="com.jpsoft.picc.modules.base.dao.JobsDAO">
-	<resultMap id="JobsMap" type="com.jpsoft.picc.modules.base.entity.Jobs">
-			<id property="id" column="id_" />
-			<result property="name" column="name_" />
-			<result property="content" column="content_" />
-			<result property="status" column="status_" />
-			<result property="delFlag" column="del_flag" />
-			<result property="createBy" column="create_by" />
-			<result property="createTime" column="create_time" />
-			<result property="updateBy" column="update_by" />
-			<result property="updateTime" column="update_time" />
-			</resultMap>
-	<insert id="insert" parameterType="com.jpsoft.picc.modules.base.entity.Jobs">
-	<!--
-	<selectKey resultType="java.lang.String" order="BEFORE" keyProperty="id">
-		select sys_guid() from dual
-	</selectKey>
-	-->
-	<![CDATA[
+    <resultMap id="JobsMap" type="com.jpsoft.picc.modules.base.entity.Jobs">
+        <id property="id" column="id_"/>
+        <result property="name" column="name_"/>
+        <result property="content" column="content_"/>
+        <result property="status" column="status_"/>
+        <result property="delFlag" column="del_flag"/>
+        <result property="createBy" column="create_by"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateBy" column="update_by"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="sortNo" column="sort_no"/>
+    </resultMap>
+    <insert id="insert" parameterType="com.jpsoft.picc.modules.base.entity.Jobs">
+        <!--
+        <selectKey resultType="java.lang.String" order="BEFORE" keyProperty="id">
+            select sys_guid() from dual
+        </selectKey>
+        -->
+        <![CDATA[
 		insert into base_jobs
-	    (id_,name_,content_,status_,del_flag,create_by,create_time,update_by,update_time)
+	    (id_,name_,content_,status_,del_flag,create_by,create_time,update_by,update_time,sort_no)
 		values
 		(
-#{id,jdbcType=VARCHAR}
-,#{name,jdbcType=VARCHAR}
-,#{content,jdbcType=VARCHAR}
-,#{status,jdbcType=VARCHAR}
-,#{delFlag,jdbcType= NUMERIC }
-,#{createBy,jdbcType=VARCHAR}
-,#{createTime,jdbcType= TIMESTAMP }
-,#{updateBy,jdbcType=VARCHAR}
-,#{updateTime,jdbcType= TIMESTAMP }
+			#{id,jdbcType=VARCHAR}
+			,#{name,jdbcType=VARCHAR}
+			,#{content,jdbcType=VARCHAR}
+			,#{status,jdbcType=VARCHAR}
+			,#{delFlag,jdbcType= NUMERIC }
+			,#{createBy,jdbcType=VARCHAR}
+			,#{createTime,jdbcType= TIMESTAMP }
+			,#{updateBy,jdbcType=VARCHAR}
+			,#{updateTime,jdbcType= TIMESTAMP }
+			,#{sortNo,jdbcType= NUMERIC }
 		)
 	]]>
-	</insert>
-	<delete id="delete" parameterType="string">
-		delete from base_jobs where id_=#{id,jdbcType=VARCHAR}
-	</delete>
-	<update id="update" parameterType="com.jpsoft.picc.modules.base.entity.Jobs">
-		update base_jobs
-		<set>
-				<if test="name!=null">
-		name_=#{name,jdbcType=VARCHAR},
-		</if>
-				<if test="content!=null">
-		content_=#{content,jdbcType=VARCHAR},
-		</if>
-				<if test="status!=null">
-		status_=#{status,jdbcType=VARCHAR},
-		</if>
-				<if test="delFlag!=null">
-		del_flag=#{delFlag,jdbcType= NUMERIC },
-		</if>
-				<if test="createBy!=null">
-		create_by=#{createBy,jdbcType=VARCHAR},
-		</if>
-				<if test="createTime!=null">
-		create_time=#{createTime,jdbcType= TIMESTAMP },
-		</if>
-				<if test="updateBy!=null">
-		update_by=#{updateBy,jdbcType=VARCHAR},
-		</if>
-				<if test="updateTime!=null">
-		update_time=#{updateTime,jdbcType= TIMESTAMP },
-		</if>
-		</set>
-	where id_=#{id}
-	</update>
-	<select id="get" parameterType="string" resultMap="JobsMap">
-		select 
-id_,name_,content_,status_,del_flag,create_by,create_time,update_by,update_time		from base_jobs where id_=#{0}
-	</select>
-	<select id="exist" parameterType="string" resultType="int">
-		select count(*) from base_jobs where id_=#{0}
-	</select>
-	<select id="list" resultMap="JobsMap">
-		select * from base_jobs where del_flag = 0
-	</select>
-	<select id="search" parameterType="hashmap" resultMap="JobsMap">
-		<![CDATA[
+    </insert>
+    <delete id="delete" parameterType="string">
+        delete from base_jobs where id_=#{id,jdbcType=VARCHAR}
+    </delete>
+    <update id="update" parameterType="com.jpsoft.picc.modules.base.entity.Jobs">
+        update base_jobs
+        <set>
+            <if test="name!=null">
+                name_=#{name,jdbcType=VARCHAR},
+            </if>
+            <if test="content!=null">
+                content_=#{content,jdbcType=VARCHAR},
+            </if>
+            <if test="status!=null">
+                status_=#{status,jdbcType=VARCHAR},
+            </if>
+            <if test="delFlag!=null">
+                del_flag=#{delFlag,jdbcType= NUMERIC },
+            </if>
+            <if test="createBy!=null">
+                create_by=#{createBy,jdbcType=VARCHAR},
+            </if>
+            <if test="createTime!=null">
+                create_time=#{createTime,jdbcType= TIMESTAMP },
+            </if>
+            <if test="updateBy!=null">
+                update_by=#{updateBy,jdbcType=VARCHAR},
+            </if>
+            <if test="updateTime!=null">
+                update_time=#{updateTime,jdbcType= TIMESTAMP },
+            </if>
+            <if test="sortNo!=null">
+                sort_no=#{sortNo,jdbcType= NUMERIC },
+            </if>
+        </set>
+        where id_=#{id}
+    </update>
+    <select id="get" parameterType="string" resultMap="JobsMap">
+        select * from base_jobs where id_=#{0}
+    </select>
+    <select id="exist" parameterType="string" resultType="int">
+        select count(*) from base_jobs where id_=#{0}
+    </select>
+    <select id="list" resultMap="JobsMap">
+        select * from base_jobs where del_flag = 0
+    </select>
+    <select id="search" parameterType="hashmap" resultMap="JobsMap">
+        <![CDATA[
 			select * from base_jobs
 		]]>
-		<where>
-			and del_flag = false
-			<if test="searchParams.name != null">
-				and name_ like #{searchParams.name}
-			</if>
-		</where>
-		<foreach item="sort" collection="sortList"  open="order by" separator=",">
-	        ${sort.name} ${sort.order}
-	 	</foreach>
-	</select>
+        <where>
+            and del_flag = false
+            <if test="searchParams.name != null">
+                and name_ like #{searchParams.name}
+            </if>
+        </where>
+        <foreach item="sort" collection="sortList" open="order by" separator=",">
+            ${sort.name} ${sort.order}
+        </foreach>
+    </select>
 </mapper>

+ 41 - 24
picc-common/src/main/resources/mapper/business/ApplicationPolicy.xml

@@ -5,11 +5,16 @@
 <mapper namespace="com.jpsoft.picc.modules.business.dao.ApplicationPolicyDAO">
 	<resultMap id="ApplicationPolicyMap" type="com.jpsoft.picc.modules.business.entity.ApplicationPolicy">
 		<id property="id" column="id_" />
-			<result property="applicationId" column="application_id" />
-			<result property="policyId" column="policy_id" />
-			<association property="policy" column="policy_id" select="com.jpsoft.picc.modules.business.dao.InsurancePolicyDAO.get"></association>
-			<association property="application" column="application_id" select="com.jpsoft.picc.modules.business.dao.InsuranceApplicationDAO.get"></association>
-			</resultMap>
+		<result property="applicationId" column="application_id" />
+		<result property="policyId" column="policy_id" />
+		<association property="policy" column="policy_id" select="com.jpsoft.picc.modules.business.dao.InsurancePolicyDAO.get"></association>
+		<association property="application" column="application_id" select="com.jpsoft.picc.modules.business.dao.InsuranceApplicationDAO.get"></association>
+	</resultMap>
+	<resultMap id="ApplicationPolicySimpleMap" type="com.jpsoft.picc.modules.business.entity.ApplicationPolicy">
+		<id property="id" column="id_" />
+		<result property="applicationId" column="application_id" />
+		<result property="policyId" column="policy_id" />
+	</resultMap>
 	<insert id="insert" parameterType="com.jpsoft.picc.modules.business.entity.ApplicationPolicy">
 	<!--
 	<selectKey resultType="java.lang.String" order="BEFORE" keyProperty="id">
@@ -21,9 +26,9 @@
 	    (id_,application_id,policy_id)
 		values
 		(
-#{id,jdbcType=VARCHAR}
-,#{applicationId,jdbcType=VARCHAR}
-,#{policyId,jdbcType=VARCHAR}
+			#{id,jdbcType=VARCHAR}
+			,#{applicationId,jdbcType=VARCHAR}
+			,#{policyId,jdbcType=VARCHAR}
 		)
 	]]>
 	</insert>
@@ -72,29 +77,48 @@
 	</select>
 	<select id="otherSearch" parameterType="hashmap" resultMap="ApplicationPolicyMap">
 		<![CDATA[
-			SELECT a.* FROM business_application_policy a LEFT JOIN business_insurance_policy b ON a.policy_id = b.id_
+			SELECT
+			a.id_ as policy_id,
+			(
+				select b.application_id from
+				business_application_policy b,business_insurance_application c
+			 	where b.policy_id = a.id_  and b.application_id = c.id_
+			 	order by c.create_time desc limit 1
+			 ) as application_id
+			from business_insurance_policy a
 		]]>
 		<where>
-			and b.del_flag = false and b.no_ > 1
-			<if test="searchParams.applicationId != null">
-				and a.application_id = #{searchParams.applicationId}
+			and del_flag = false and no_ > 1
+			<if test="searchParams.definitionId != null">
+				and definition_id = #{searchParams.definitionId}
 			</if>
 			<if test="searchParams.status != null">
-				and b.status_ = #{searchParams.status}
+				and status_ = #{searchParams.status}
 			</if>
 			<if test="searchParams.userType != null">
 				and (status_='30' or status_='60' or status_='70')
 			</if>
+			<if test="searchParams.startTime != null">
+				<![CDATA[
+				and start_time >= #{searchParams.startTime}
+				]]>
+			</if>
+			<if test="searchParams.endTime != null">
+				<![CDATA[
+				and start_time <= #{searchParams.endTime}
+				]]>
+			</if>
 		</where>
 		<foreach item="sort" collection="sortList"  open="order by" separator=",">
 			${sort.name} ${sort.order}
 		</foreach>
 	</select>
-    <select id="findByApplicationId" resultMap="ApplicationPolicyMap">
+	<!--考虑下月投保单合并的情况,如果下月投保单已存在则创建时间小于当前投保单创建时间,所以要用start_time-->
+    <select id="findByApplicationId" resultMap="ApplicationPolicySimpleMap">
 		SELECT a.* FROM business_application_policy a LEFT JOIN business_insurance_policy b ON a.policy_id = b.id_
 		where a.application_id=#{0}
 		and b.del_flag=0
-		order by b.create_time asc
+		order by b.start_time asc
 	</select>
     <select id="findPolicyByApplicationId" resultMap="com.jpsoft.picc.modules.business.dao.InsurancePolicyDAO.InsurancePolicyMap">
 		SELECT b.*,c.name_ as definition_name FROM business_application_policy a
@@ -102,21 +126,14 @@
 		left join base_insurance_definition c on b.definition_id = c.id_
 		where a.application_id=#{0}
 		and b.del_flag=0
-		order by b.create_time asc
-	</select>
-	<select id="findNewPolicyByApplicationId" resultMap="com.jpsoft.picc.modules.business.dao.InsurancePolicyDAO.InsurancePolicyMap">
-		SELECT b.* FROM business_application_policy a,business_insurance_policy b
-		where a.application_id=#{0}
-		and a.policy_id = b.id_
-		and b.del_flag=0
-		order by b.no_ desc
+		order by b.start_time asc
 	</select>
 	<select id="findFirstPolicyByApplicationId" resultMap="com.jpsoft.picc.modules.business.dao.InsurancePolicyDAO.InsurancePolicyMap">
 		SELECT b.* FROM business_application_policy a,business_insurance_policy b
 		where a.application_id=#{0}
 		and a.policy_id = b.id_
 		and b.del_flag=0 and no_ = 1
-		order by b.create_time asc
+		order by b.create_time asc limit 1
 	</select>
 	<select id="findApplicationByPolicyId" resultMap="com.jpsoft.picc.modules.business.dao.InsuranceApplicationDAO.InsuranceApplicationMap">
 		SELECT b.* FROM business_application_policy a,business_insurance_application b

+ 13 - 0
picc-common/src/main/resources/mapper/business/InsurancePolicy.xml

@@ -213,4 +213,17 @@
             ${sort.name} ${sort.order}
         </foreach>
     </select>
+    <select id="findNextMonthPolicy" resultMap="InsurancePolicyMap">
+        SELECT a.*
+        FROM business_insurance_policy a
+        inner join business_application_policy c on a.id_ = c.policy_id
+        inner join business_insurance_application d on c.application_id = d.id_
+        where d.definition_id = #{definitionId}
+        and d.company_id = #{companyId}
+        and d.end_time = #{endTime}
+        and a.effective_date=#{effectiveDate}
+        and a.status_ = #{status}
+        order by a.create_time asc
+        limit 1
+    </select>
 </mapper>

+ 4 - 0
picc-common/src/main/resources/mapper/business/InsurancePolicyMember.xml

@@ -117,4 +117,8 @@
 		where del_flag = false and policy_id=#{policyId}
 		order by create_time asc
 	</select>
+    <select id="countByPolicyIdAndMemberId" resultType="java.lang.Integer">
+		select count(*) from business_insurance_policy_member
+		where del_flag=0 and policy_id=#{policyId} and member_id=#{memberId}
+	</select>
 </mapper>

+ 95 - 22
picc-enterprise-server/src/main/java/com/jpsoft/picc/modules/auth/controller/InsuranceApplicationController.java

@@ -9,10 +9,8 @@ import com.jpsoft.picc.modules.base.service.*;
 import com.jpsoft.picc.modules.business.entity.ApplicationPolicy;
 import com.jpsoft.picc.modules.business.entity.InsuranceApplication;
 import com.jpsoft.picc.modules.business.entity.InsurancePolicy;
-import com.jpsoft.picc.modules.business.service.ApplicationPolicyService;
-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.business.entity.InsurancePolicyRecord;
+import com.jpsoft.picc.modules.business.service.*;
 import com.jpsoft.picc.config.JpCloudConfig;
 import com.jpsoft.picc.modules.common.constant.PolicyStatus;
 import com.jpsoft.picc.modules.common.dto.MessageResult;
@@ -77,6 +75,9 @@ public class InsuranceApplicationController {
     @Autowired
     private TransactionRecordService transactionRecordService;
 
+    @Autowired
+    private InsurancePolicyRecordService insurancePolicyRecordService;
+
     @ApiOperation(value="投保单列表")
     @RequestMapping(value = "pageList",method = RequestMethod.POST)
     @ApiImplicitParams({
@@ -226,16 +227,6 @@ public class InsuranceApplicationController {
         return msgResult;
     }
 
-    private List<InsuranceJobs> findByDefinitionId(String definitionId){
-        Map<String,Object> searchParams = new HashMap<>();
-        searchParams.put("definitionId",definitionId);
-        List<Sort> sortList = new ArrayList<>();
-        sortList.add(new Sort("create_time","asc"));
-        Page<InsuranceJobs> insuranceJobsPage = insuranceJobsService.pageSearch(searchParams,1,100,sortList);
-
-        return insuranceJobsPage.getResult();
-    }
-
     @ApiOperation(value="第三步,获取承保信息")
     @RequestMapping(value = "acceptDetail",method = RequestMethod.GET)
     @ApiImplicitParams({
@@ -263,7 +254,7 @@ public class InsuranceApplicationController {
             acceptInsuranceDTO.setInsuranceDefLimitList(insuranceDefinitionLimits);
 
             //关联岗位
-            List<InsuranceJobs> InsuranceJobsList = findByDefinitionId(insuranceApplication.getDefinitionId());
+            List<InsuranceJobs> InsuranceJobsList = insuranceJobsService.findByDefinitionId(insuranceApplication.getDefinitionId());
 
             DateTime endTime = new DateTime(insuranceApplication.getEndTime());
             acceptInsuranceDTO.setEndTime(insuranceApplication.getEndTime());
@@ -344,21 +335,20 @@ public class InsuranceApplicationController {
             BigDecimal totalAmount = new BigDecimal(0);
             int totalNumber = 0;
 
-            List<InsuranceJobs> InsuranceJobsList = findByDefinitionId(insuranceApplication.getDefinitionId());
+            List<InsuranceJobs> InsuranceJobsList = insuranceJobsService.findByDefinitionId(insuranceApplication.getDefinitionId());
 
             //查询不同岗位,参保费用
             for(InsuranceJobs insuranceJobs : InsuranceJobsList){
                 long memberCount = insurancePolicyMemberService.countByPolicyIdAndJobsId(policyId,insuranceJobs.getJobsId());
 
                 BigDecimal amount = insuranceJobs.getCharges()
-                                    .multiply(new BigDecimal(months))
                                     .multiply(new BigDecimal(memberCount));
 
                 totalAmount = totalAmount.add(amount);
                 totalNumber += memberCount;
             }
 
-            insuranceApplication.setInsuranceFee(totalAmount);
+            insuranceApplication.setInsuranceFee(totalAmount.multiply(new BigDecimal(months)));
             insuranceApplication.setInsuredNumber(totalNumber);
             insuranceApplication.setStatus(String.valueOf(PolicyStatus.PendingTrial.getValue()));
             insuranceApplication.setUpdateBy(principal.getName());
@@ -498,18 +488,42 @@ public class InsuranceApplicationController {
     }
 
     @PostMapping(value="changeStatus")
-    @ApiOperation(value = "修改投保单状态(测试用)")
+    @ApiOperation(value = "修改投保单状态")
     @ApiImplicitParams({
             @ApiImplicitParam(name = "applicationId",value = "投保单编号", required = true, paramType = "form"),
             @ApiImplicitParam(name = "status",value = "状态:草稿10/已退回15/待初审20/待复审30/待缴费40/待制单50/待出单60/已出单70/已过期100", required = true, paramType = "form"),
     })
-    public MessageResult<String> changeStatus(String applicationId,String status){
+    public MessageResult<String> changeStatus(String applicationId,Integer status,HttpServletRequest request){
+        AttributePrincipal principal = (AttributePrincipal) request.getUserPrincipal();
+
         MessageResult<String> messageResult = new MessageResult<>();
 
         try {
-            //todo
+            PolicyStatus destStatus = PolicyStatus.valueOf(status);
+
+            if (destStatus==null){
+                throw new Exception("状态:" + status + "不存在!");
+            }
+
+            //todo 修改投保单状态
             InsuranceApplication insuranceApplication = insuranceApplicationService.get(applicationId);
-            insuranceApplication.setStatus(status);
+            InsurancePolicy insurancePolicy = applicationPolicyService.findFirstPolicyByApplicationId(applicationId);
+
+            if(insurancePolicy!=null) {
+                //记录状态变更
+                InsurancePolicyRecord insurancePolicyRecord = new InsurancePolicyRecord();
+                insurancePolicyRecord.setPolicyId(insurancePolicy.getId());
+                insurancePolicyRecord.setStatus(status + "");
+                insurancePolicyRecord.setProcessStatus("正常");
+                insurancePolicyRecord.setOpinion("状态由" + insuranceApplication.getStatusN() + "变更为" + destStatus.getText());
+                insurancePolicyRecord.setId(UUID.randomUUID().toString());
+                insurancePolicyRecord.setDelFlag(false);
+                insurancePolicyRecord.setCreateBy(principal.getName());
+                insurancePolicyRecord.setCreateTime(new Date());
+                insurancePolicyRecordService.insert(insurancePolicyRecord);
+            }
+
+            insuranceApplication.setStatus(status + "");
             insuranceApplication.setUpdateTime(new Date());
 
             insuranceApplicationService.update(insuranceApplication);
@@ -606,4 +620,63 @@ public class InsuranceApplicationController {
 
         return msgResult;
     }
+
+    @ApiOperation(value="投保单状态分类数量")
+    @RequestMapping(value = "statusCount",method = RequestMethod.POST)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "definitionId",value = "险种编号", required = false, paramType = "form",dataType = "String"),
+            @ApiImplicitParam(name = "startTime",value = "起始时间", required = false, paramType = "form",dataType = "String"),
+            @ApiImplicitParam(name = "endTime",value = "结束时间", required = false, paramType = "form",dataType = "String"),
+    })
+    public MessageResult<Map> statusCount(String definitionId,
+                                          @DateTimeFormat(pattern = "yyyy-MM-dd") Date startTime,
+                                          @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime,
+                                          HttpServletRequest request){
+        AttributePrincipal principal = (AttributePrincipal) request.getUserPrincipal();
+        Company company = companyService.findByCreateBy(principal.getName());
+
+        MessageResult<Map> msgResult = new MessageResult<>();
+        Map<String, Object> dataMap = new HashMap<>();
+
+        try {
+            Map<String, Object> searchParams = new HashMap<>();
+
+            List<Sort> sortList = new ArrayList<>();
+            sortList.add(new Sort("create_time", "desc"));
+
+            if (company!=null && StringUtils.isNotEmpty(company.getId())) {
+                searchParams.put("companyId", company.getId());
+            }
+
+            if (StringUtils.isNotEmpty(definitionId)) {
+                searchParams.put("definitionId", definitionId);
+            }
+
+            if (startTime != null) {
+                searchParams.put("startTime", startTime);
+            }
+
+            if (endTime != null) {
+                searchParams.put("endTime", endTime);
+            }
+
+            for(PolicyStatus policyStatus : PolicyStatus.values()){
+                searchParams.put("status", policyStatus.getValue() + "");
+                Page<InsuranceApplication> page = insuranceApplicationService.pageSearch(searchParams, 1, 1, sortList);
+
+                dataMap.put(policyStatus.getValue() + "", page.getTotal());
+            }
+
+            msgResult.setData(dataMap);
+            msgResult.setResult(true);
+        }
+        catch(Exception ex){
+            log.error(ex.getMessage(),ex);
+
+            msgResult.setResult(false);
+            msgResult.setMessage(ex.getMessage());
+        }
+
+        return msgResult;
+    }
 }

+ 79 - 127
picc-enterprise-server/src/main/java/com/jpsoft/picc/modules/auth/controller/InsurancePolicyController.java

@@ -1,7 +1,6 @@
 package com.jpsoft.picc.modules.auth.controller;
 
 import com.github.pagehelper.Page;
-import com.jpsoft.picc.config.CasConfig;
 import com.jpsoft.picc.modules.auth.dto.AcceptInsuranceDTO;
 import com.jpsoft.picc.modules.auth.dto.InsuranceApplicationDTO;
 import com.jpsoft.picc.modules.auth.dto.InsuranceJobsDTO;
@@ -14,7 +13,6 @@ import com.jpsoft.picc.modules.common.constant.PolicyStatus;
 import com.jpsoft.picc.modules.common.dto.MessageResult;
 import com.jpsoft.picc.modules.common.dto.Sort;
 import com.jpsoft.picc.modules.common.utils.PojoUtils;
-import com.jpsoft.picc.modules.common.utils.SignUtil;
 import com.jpsoft.picc.modules.sys.entity.User;
 import com.jpsoft.picc.modules.sys.service.UserService;
 import io.swagger.annotations.Api;
@@ -26,17 +24,13 @@ import org.apache.commons.lang3.StringUtils;
 import org.jasig.cas.client.authentication.AttributePrincipal;
 import org.joda.time.DateTime;
 import org.joda.time.Interval;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.joda.time.Months;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.format.annotation.DateTimeFormat;
-import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
 import java.math.BigDecimal;
-import java.security.Policy;
 import java.text.SimpleDateFormat;
 import java.util.*;
 
@@ -107,11 +101,13 @@ public class InsurancePolicyController {
 
             String url = company.getUsccFiles();
 
-            map1.put("type","营业执照");
-            map1.put("title", "营业执照" + url.substring(url.lastIndexOf(".")));
-            map1.put("url", url);
+            if(StringUtils.isNotEmpty(url)) {
+                map1.put("type", "营业执照");
+                map1.put("title", "营业执照" + url.substring(url.lastIndexOf(".")));
+                map1.put("url", url);
 
-            mapList.add(map1);
+                mapList.add(map1);
+            }
 
             Map<String,String> map2 = new HashMap<>();
             map2.put("type","身份证");
@@ -347,12 +343,14 @@ public class InsurancePolicyController {
     @ApiImplicitParams({
             @ApiImplicitParam(name = "policyId",value = "每月投保编号", required = true, paramType = "query",dataType = "String")
     })
-    public MessageResult<InsuranceApplicationDTO> insureDetail(String policyId,
-                                                               HttpServletRequest request){
+    public MessageResult<InsuranceApplicationDTO> insureDetail(String policyId){
         MessageResult<InsuranceApplicationDTO> msgResult = new MessageResult<>();
 
         InsuranceApplicationDTO insuranceApplicationDTO = new InsuranceApplicationDTO();
 
+        InsurancePolicy insurancePolicy = insurancePolicyService.get(policyId);
+        insuranceApplicationDTO.setInsuredNumber(insurancePolicy.getNumber());
+
         try {
             InsuranceApplication insuranceApplication = null;
 
@@ -368,9 +366,8 @@ public class InsurancePolicyController {
 
                 DateTime endTime = new DateTime(insuranceApplication.getEndTime());
                 DateTime startTime = new DateTime(insuranceApplication.getStartTime());
-                Interval interval = new Interval(startTime, endTime);
 
-                insuranceApplicationDTO.setMonthNumber(interval.toPeriod().getMonths());
+                insuranceApplicationDTO.setMonthNumber(Months.monthsBetween(startTime, endTime).getMonths());
             }
 
             msgResult.setData(insuranceApplicationDTO);
@@ -387,16 +384,6 @@ public class InsurancePolicyController {
         return msgResult;
     }
 
-    private List<InsuranceJobs> findByDefinitionId(String definitionId){
-        Map<String,Object> searchParams = new HashMap<>();
-        searchParams.put("definitionId",definitionId);
-        List<Sort> sortList = new ArrayList<>();
-        sortList.add(new Sort("create_time","asc"));
-        Page<InsuranceJobs> insuranceJobsPage = insuranceJobsService.pageSearch(searchParams,1,100,sortList);
-
-        return insuranceJobsPage.getResult();
-    }
-
     @ApiOperation(value="获取承保信息")
     @RequestMapping(value = "acceptDetail",method = RequestMethod.GET)
     @ApiImplicitParams({
@@ -407,39 +394,33 @@ public class InsurancePolicyController {
         AcceptInsuranceDTO acceptInsuranceDTO = new AcceptInsuranceDTO();
 
         try {
-            //投保单
-            InsuranceApplication insuranceApplication = null;
-
-            List<InsuranceApplication> appList = applicationPolicyService.findApplicationByPolicyId(policyId);
-
-            if(appList.size()>0){
-                insuranceApplication = appList.get(0);
-            }
+            //每月投保单
+            InsurancePolicy insurancePolicy = insurancePolicyService.get(policyId);
 
             //险种
-            InsuranceDefinition insuranceDefinition = insuranceDefinitionService.get(insuranceApplication.getDefinitionId());
+            InsuranceDefinition insuranceDefinition = insuranceDefinitionService.get(insurancePolicy.getDefinitionId());
 
             //险种名称
             acceptInsuranceDTO.setInsuranceDefName(insuranceDefinition.getName());
 
             //险种关联限额
-            List<InsuranceDefinitionLimit> insuranceDefinitionLimits = insuranceDefinitionLimitService.findByDefinitionId(insuranceApplication.getDefinitionId());
+            List<InsuranceDefinitionLimit> insuranceDefinitionLimits = insuranceDefinitionLimitService.findByDefinitionId(insuranceDefinition.getId());
 
             acceptInsuranceDTO.setInsuranceDefLimitList(insuranceDefinitionLimits);
 
             //关联岗位
-            List<InsuranceJobs> InsuranceJobsList = findByDefinitionId(insuranceApplication.getDefinitionId());
-
-            DateTime endTime = new DateTime(insuranceApplication.getEndTime());
-            acceptInsuranceDTO.setEndTime(insuranceApplication.getEndTime());
+            List<InsuranceJobs> InsuranceJobsList = insuranceJobsService.findByDefinitionId(insuranceDefinition.getId());
 
-            DateTime startTime = new DateTime(insuranceApplication.getStartTime());
-            acceptInsuranceDTO.setStartTime(insuranceApplication.getStartTime());
+            //todo 查看每月投保记录时显示当前月
+            DateTime endTime = new DateTime(insurancePolicy.getEndTime());
+            acceptInsuranceDTO.setEndTime(insurancePolicy.getEndTime());
 
-            Interval interval = new Interval(startTime, endTime);
+            DateTime startTime = new DateTime(insurancePolicy.getStartTime());
+            acceptInsuranceDTO.setStartTime(insurancePolicy.getStartTime());
 
             //投保总月份
-            int months = interval.toPeriod().getMonths();
+//            int months = Months.monthsBetween(startTime, endTime).getMonths();
+            int months = 1;
 
             BigDecimal totalAmount = new BigDecimal(0);
             int totalNumber = 0;
@@ -486,20 +467,23 @@ public class InsurancePolicyController {
         return msgResult;
     }
 
-    @PostMapping(value="generateNextMonthPolicy")
-    @ApiOperation(value = "生成下月投保单(测试用)")
+    @PostMapping(value="changeStatus")
+    @ApiOperation(value = "修改投保单状态(测试用)")
     @ApiImplicitParams({
-            @ApiImplicitParam(name = "applicationId",value = "投保单编号", required = true, paramType = "form"),
-            @ApiImplicitParam(name = "policyId",value = "本月投保单编号", required = true, paramType = "form"),
+            @ApiImplicitParam(name = "policyId",value = "投保单编号", required = true, paramType = "form"),
+            @ApiImplicitParam(name = "status",value = "状态:草稿10/已退回15/待初审20/待复审30/待缴费40/待制单50/待出单60/已出单70/已过期100", required = true, paramType = "form"),
     })
-    public MessageResult<String> generateNextMonthPolicy(
-            String applicationId,String policyId,
-            HttpServletRequest request){
+    public MessageResult<String> changeStatus(String policyId,String status){
         MessageResult<String> messageResult = new MessageResult<>();
-        AttributePrincipal principal = (AttributePrincipal) request.getUserPrincipal();
 
         try {
-            generatePolicyInTrans(applicationId, policyId, principal);
+            //todo
+            InsurancePolicy insurancePolicy = insurancePolicyService.get(policyId);
+            insurancePolicy.setStatus(status);
+            insurancePolicy.setUpdateTime(new Date());
+
+            insurancePolicyService.update(insurancePolicy);
+
             messageResult.setResult(true);
         }
         catch (Exception ex){
@@ -510,94 +494,62 @@ public class InsurancePolicyController {
         return messageResult;
     }
 
-    @Transactional(rollbackFor = Exception.class)
-    private void generatePolicyInTrans(String applicationId, String policyId, AttributePrincipal principal) throws Exception {
-        //添加下月投保单
-        InsurancePolicy srcPolicy = insurancePolicyService.get(policyId);
-        srcPolicy.setStatus(PolicyStatus.SendOutPolicy.getValue() + "");
-        srcPolicy.setUpdateTime(new Date());
-
-        insurancePolicyService.update(srcPolicy);
-
-        InsurancePolicy destPolicy = new InsurancePolicy();
-
-        PojoUtils.map(srcPolicy,destPolicy);
-
-        DateTime startTime = new DateTime(srcPolicy.getEndTime());
-
-        destPolicy.setStartTime(startTime.toDate());
-        destPolicy.setEndTime(startTime.plusMonths(1).toDate());
-
-        destPolicy.setEffectiveDate(startTime.toString("yyyyMM"));
+    @ApiOperation(value="下月投保单状态分类数量")
+    @RequestMapping(value = "statusCount",method = RequestMethod.POST)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "definitionId",value = "险种编号", required = false, paramType = "form",dataType = "String"),
+            @ApiImplicitParam(name = "startTime",value = "起始时间", required = false, paramType = "form",dataType = "String"),
+            @ApiImplicitParam(name = "endTime",value = "结束时间", required = false, paramType = "form",dataType = "String"),
+    })
+    public MessageResult<Map> statusCount(String definitionId,
+                                       @DateTimeFormat(pattern = "yyyy-MM-dd") Date startTime,
+                                       @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime,
+                                       HttpServletRequest request){
+        MessageResult<Map> msgResult = new MessageResult<>();
+        Map<String, Object> dataMap = new HashMap<>();
 
-        boolean exist = insurancePolicyService.existByApplicationIdAndEffectiveDate(applicationId,destPolicy.getEffectiveDate());
+        try {
+            AttributePrincipal principal = (AttributePrincipal) request.getUserPrincipal();
+            Company company = companyService.findByCreateBy(principal.getName());
 
-        if (exist){
-            throw new Exception(destPolicy.getEffectiveDate() + "投保单已存在!");
-        }
+            Map<String, Object> searchParams = new HashMap<>();
 
-        destPolicy.setNo(srcPolicy.getNo()+1);
-        destPolicy.setId(UUID.randomUUID().toString());
-        destPolicy.setStatus(PolicyStatus.Draft.getValue() + "");
-        destPolicy.setCreateBy(principal.getName());
-        destPolicy.setCreateTime(new Date());
-        destPolicy.setUpdateBy(principal.getName());
-        destPolicy.setUpdateTime(new Date());
+            List<Sort> sortList = new ArrayList<>();
+            sortList.add(new Sort("create_time", "desc"));
 
-        insurancePolicyService.insert(destPolicy);
+            if (StringUtils.isNotEmpty(company.getId())) {
+                searchParams.put("companyId", company.getId());
+            }
 
-        //关联投保单及每月投保单
-        ApplicationPolicy applicationPolicy = new ApplicationPolicy();
-        applicationPolicy.setId(UUID.randomUUID().toString());
-        applicationPolicy.setApplicationId(applicationId);
-        applicationPolicy.setPolicyId(destPolicy.getId());
+            if (StringUtils.isNotEmpty(definitionId)) {
+                searchParams.put("definitionId", definitionId);
+            }
 
-        applicationPolicyService.insert(applicationPolicy);
+            if (startTime != null) {
+                searchParams.put("startTime", startTime);
+            }
 
-        //关联参保人员
-        List<InsurancePolicyMember> memberList = insurancePolicyMemberService.findByPolicyId(policyId);
+            if (endTime != null) {
+                searchParams.put("endTime", endTime);
+            }
 
-        for (InsurancePolicyMember srcMember : memberList) {
-            InsurancePolicyMember destMember = new InsurancePolicyMember();
+            for(PolicyStatus policyStatus : PolicyStatus.values()) {
+                searchParams.put("status", policyStatus.getValue() + "");
+                Page<InsurancePolicy> page = insurancePolicyService.nextMonthPageList(searchParams, 1, 1000, sortList);
 
-            destMember.setId(UUID.randomUUID().toString());
-            destMember.setPolicyId(destPolicy.getId());
-            destMember.setMemberId(srcMember.getMemberId());
-            destMember.setDelFlag(false);
-            destMember.setCreateBy(principal.getName());
-            destMember.setCreateTime(new Date());
-            destMember.setStatus(srcMember.getStatus());
+                dataMap.put(policyStatus.getValue() + "", page.getTotal());
+            }
 
-            insurancePolicyMemberService.insert(destMember);
+            msgResult.setData(dataMap);
+            msgResult.setResult(true);
         }
-    }
-
-
-
-    @PostMapping(value="changeStatus")
-    @ApiOperation(value = "修改投保单状态(测试用)")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "policyId",value = "投保单编号", required = true, paramType = "form"),
-            @ApiImplicitParam(name = "status",value = "状态:草稿10/已退回15/待初审20/待复审30/待缴费40/待制单50/待出单60/已出单70/已过期100", required = true, paramType = "form"),
-    })
-    public MessageResult<String> changeStatus(String policyId,String status){
-        MessageResult<String> messageResult = new MessageResult<>();
-
-        try {
-            //todo
-            InsurancePolicy insurancePolicy = insurancePolicyService.get(policyId);
-            insurancePolicy.setStatus(status);
-            insurancePolicy.setUpdateTime(new Date());
-
-            insurancePolicyService.update(insurancePolicy);
+        catch(Exception ex){
+            log.error(ex.getMessage(),ex);
 
-            messageResult.setResult(true);
-        }
-        catch (Exception ex){
-            messageResult.setResult(false);
-            messageResult.setMessage(ex.getMessage());
+            msgResult.setResult(false);
+            msgResult.setMessage(ex.getMessage());
         }
 
-        return messageResult;
+        return msgResult;
     }
 }

+ 18 - 0
picc-enterprise-server/src/main/java/com/jpsoft/picc/modules/pub/controller/PayController.java

@@ -6,7 +6,10 @@ import com.jpsoft.picc.modules.base.entity.TransactionRecord;
 import com.jpsoft.picc.modules.base.service.CompanyService;
 import com.jpsoft.picc.modules.base.service.TransactionRecordService;
 import com.jpsoft.picc.modules.business.entity.InsuranceApplication;
+import com.jpsoft.picc.modules.business.entity.InsurancePolicy;
+import com.jpsoft.picc.modules.business.service.ApplicationPolicyService;
 import com.jpsoft.picc.modules.business.service.InsuranceApplicationService;
+import com.jpsoft.picc.modules.business.service.InsurancePolicyService;
 import com.jpsoft.picc.modules.common.constant.PolicyStatus;
 import com.jpsoft.picc.modules.common.dto.MessageResult;
 import com.jpsoft.picc.modules.common.utils.SignUtil;
@@ -45,6 +48,12 @@ public class PayController {
     @Autowired
     private InsuranceApplicationService insuranceApplicationService;
 
+    @Autowired
+    private ApplicationPolicyService applicationPolicyService;
+
+    @Autowired
+    private InsurancePolicyService insurancePolicyService;
+
     @Autowired
     private CompanyService companyService;
 
@@ -92,6 +101,15 @@ public class PayController {
                         insuranceApplicationService.update(insuranceApplication);
                     }
 
+                    InsurancePolicy insurancePolicy = applicationPolicyService.findFirstPolicyByApplicationId(insuranceApplication.getId());
+
+                    if (insurancePolicy!=null){
+                        insurancePolicy.setStatus(PolicyStatus.PendingMakePolicy.getValue() + "");
+                        insurancePolicy.setUpdateTime(new Date());
+
+                        insurancePolicyService.update(insurancePolicy);
+                    }
+
                     body.put("orderNo", orderNo);
                     body.put("backStatus", "回调成功");
                     body.put("backTime", new Date().getTime()/1000);

+ 25 - 7
picc-enterprise-server/src/main/java/com/jpsoft/picc/modules/pub/controller/UserController.java

@@ -19,12 +19,15 @@ import org.apache.commons.httpclient.methods.GetMethod;
 import org.apache.commons.httpclient.methods.PostMethod;
 import org.apache.commons.lang3.StringUtils;
 import org.jasig.cas.client.authentication.AttributePrincipal;
+import org.jasig.cas.client.util.AbstractCasFilter;
 import org.jsoup.Jsoup;
 import org.jsoup.nodes.Document;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.ValueOperations;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpSession;
@@ -362,20 +365,35 @@ public class UserController {
     @GetMapping("/logout")
     @ResponseBody
     @ApiOperation(value="退出")
-    public MessageResult<String> logout(HttpSession session){
+    public MessageResult<String> logout(HttpSession session,HttpServletRequest request,HttpServletResponse response){
         MessageResult<String> msgResult = new MessageResult<>();
 
         String tgt = (String)session.getAttribute("tgt");
         String casServerTicketUrl = casConfig.getServerUrlPrefix() + "/v1/tickets";
 
-        HttpClient client = new HttpClient();
-        DeleteMethod del = new DeleteMethod(casServerTicketUrl + "/" + tgt);
-
         try {
-//            client.executeMethod(del);
-//            String html = del.getResponseBodyAsString();
+//            if(StringUtils.isNotEmpty(tgt)) {
+//                HttpClient client = new HttpClient();
+//                DeleteMethod del = new DeleteMethod(casServerTicketUrl + "/" + tgt);
+//
+//                client.executeMethod(del);
+//                String html = del.getResponseBodyAsString();
+//
+//                System.out.println(html);
+//            }
+
+            session.removeAttribute(AbstractCasFilter.CONST_CAS_ASSERTION);
+            session.invalidate();
+
+            String service = casConfig.getClientHostUrl() + request.getContextPath() + "/portal/";
+
+            msgResult.setData(casConfig.getServerUrlPrefix() + "/logout?service=" + URLEncoder.encode(service,"UTF-8"));
+//            Cookie[] cookies = request.getCookies();
 //
-//            System.out.println(html);
+//            for (Cookie cookie : cookies) {
+//                cookie.setMaxAge(0);
+//                response.addCookie(cookie);
+//            }
 
             msgResult.setResult(true);
         } catch (Exception e) {