Selaa lähdekoodia

1.下月投保单接口完成。

tomatozq 5 vuotta sitten
vanhempi
commit
78348cd78a
16 muutettua tiedostoa jossa 533 lisäystä ja 563 poistoa
  1. 3 0
      picc-common/src/main/java/com/jpsoft/picc/modules/business/dao/ApplicationPolicyDAO.java
  2. 2 0
      picc-common/src/main/java/com/jpsoft/picc/modules/business/dao/InsurancePolicyDAO.java
  3. 2 0
      picc-common/src/main/java/com/jpsoft/picc/modules/business/dao/InsurancePolicyMemberDAO.java
  4. 20 0
      picc-common/src/main/java/com/jpsoft/picc/modules/business/entity/InsurancePolicy.java
  5. 3 0
      picc-common/src/main/java/com/jpsoft/picc/modules/business/service/ApplicationPolicyService.java
  6. 2 0
      picc-common/src/main/java/com/jpsoft/picc/modules/business/service/InsurancePolicyService.java
  7. 6 0
      picc-common/src/main/java/com/jpsoft/picc/modules/business/service/impl/ApplicationPolicyServiceImpl.java
  8. 5 0
      picc-common/src/main/java/com/jpsoft/picc/modules/business/service/impl/InsurancePolicyMemberServiceImpl.java
  9. 9 0
      picc-common/src/main/java/com/jpsoft/picc/modules/business/service/impl/InsurancePolicyServiceImpl.java
  10. 7 0
      picc-common/src/main/resources/mapper/business/ApplicationPolicy.xml
  11. 48 1
      picc-common/src/main/resources/mapper/business/InsurancePolicy.xml
  12. 5 0
      picc-common/src/main/resources/mapper/business/InsurancePolicyMember.xml
  13. 0 339
      picc-enterprise-server/src/main/java/com/jpsoft/picc/modules/auth/controller/ApplicationPolicyController.java
  14. 30 21
      picc-enterprise-server/src/main/java/com/jpsoft/picc/modules/auth/controller/InsuranceApplicationController.java
  15. 363 169
      picc-enterprise-server/src/main/java/com/jpsoft/picc/modules/auth/controller/InsurancePolicyController.java
  16. 28 33
      picc-enterprise-server/src/main/java/com/jpsoft/picc/modules/auth/controller/InsurancePolicyUserController.java

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

@@ -1,6 +1,7 @@
 package com.jpsoft.picc.modules.business.dao;
 
 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.common.dto.Sort;
 import org.springframework.stereotype.Repository;
@@ -27,4 +28,6 @@ public interface ApplicationPolicyDAO {
     List<ApplicationPolicy> findByApplicationId(String applicationId);
 
     List<InsurancePolicy> findPolicyByApplicationId(String applicationId);
+
+    List<InsuranceApplication> findApplicationByPolicyId(String policyId);
 }

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

@@ -24,4 +24,6 @@ public interface InsurancePolicyDAO {
     List<InsurancePolicy> search(Map<String, Object> searchParams, List<Sort> sortList);
 
     long countByApplicationIdAndEffectiveDate(String applicationId, String effectiveDate);
+
+    void nextMonthPageList(Map<String, Object> searchParams, List<Sort> sortList);
 }

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

@@ -24,4 +24,6 @@ public interface InsurancePolicyMemberDAO {
     List<InsurancePolicyMember> search(Map<String, Object> searchParams, List<Sort> sortList);
 
     long countByPolicyIdAndJobsId(String policyId, String jobsId);
+
+    List<InsurancePolicyMember> findByPolicyId(String policyId);
 }

+ 20 - 0
picc-common/src/main/java/com/jpsoft/picc/modules/business/entity/InsurancePolicy.java

@@ -16,6 +16,10 @@ import io.swagger.annotations.ApiModel;
 public class InsurancePolicy {
     @ApiModelProperty(value = "编号")
     private String id;
+    @ApiModelProperty(value = "险种名称")
+    private String definitionName;
+    @ApiModelProperty(value = "保险种类")
+    private String definitionId;
     @ApiModelProperty(value = "状态:待制单50/待出单60/已出单70")
     private String status;
     @ApiModelProperty(value = "流程审核状态:正常/回退等")
@@ -325,4 +329,20 @@ public class InsurancePolicy {
     public void setUpdateTime(Date updateTime){
         this.updateTime = updateTime;
     }
+
+    public String getDefinitionName() {
+        return definitionName;
+    }
+
+    public void setDefinitionName(String definitionName) {
+        this.definitionName = definitionName;
+    }
+
+    public String getDefinitionId() {
+        return definitionId;
+    }
+
+    public void setDefinitionId(String definitionId) {
+        this.definitionId = definitionId;
+    }
 }

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

@@ -2,6 +2,7 @@ package com.jpsoft.picc.modules.business.service;
 
 import com.github.pagehelper.Page;
 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.common.dto.Sort;
 
@@ -26,4 +27,6 @@ public interface ApplicationPolicyService {
     List<ApplicationPolicy> findByApplicationId(String applicationId);
 
     Page<InsurancePolicy> findPolicyByApplicationId(String applicationId, int pageIndex, int pageSize);
+
+    List<InsuranceApplication> findApplicationByPolicyId(String policyId);
 }

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

@@ -23,4 +23,6 @@ public interface InsurancePolicyService {
     Page<InsurancePolicy> pageSearch(Map<String, Object> searchParams, int pageNum, int pageSize, List<Sort> sortList);
 
     boolean existByApplicationIdAndEffectiveDate(String applicationId, String effectiveDate);
+
+    Page<InsurancePolicy> nextMonthPageList(Map<String, Object> searchParams, int pageIndex, int pageSize, List<Sort> sortList);
 }

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

@@ -4,6 +4,7 @@ import com.github.pagehelper.Page;
 import com.github.pagehelper.PageHelper;
 import com.jpsoft.picc.modules.business.dao.ApplicationPolicyDAO;
 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.common.dto.Sort;
@@ -82,4 +83,9 @@ public class ApplicationPolicyServiceImpl implements ApplicationPolicyService {
 
         return page;
     }
+
+    @Override
+    public List<InsuranceApplication> findApplicationByPolicyId(String policyId) {
+        return applicationPolicyDAO.findApplicationByPolicyId(policyId);
+    }
 }

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

@@ -72,4 +72,9 @@ public class InsurancePolicyMemberServiceImpl implements InsurancePolicyMemberSe
     public long countByPolicyIdAndJobsId(String policyId, String jobsId) {
         return insurancePolicyMemberDAO.countByPolicyIdAndJobsId(policyId,jobsId);
     }
+
+    @Override
+    public List<InsurancePolicyMember> findByPolicyId(String policyId) {
+        return insurancePolicyMemberDAO.findByPolicyId(policyId);
+    }
 }

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

@@ -74,4 +74,13 @@ public class InsurancePolicyServiceImpl implements InsurancePolicyService {
 
         return count>0;
     }
+
+    @Override
+    public Page<InsurancePolicy> nextMonthPageList(Map<String, Object> searchParams, int pageNumber, int pageSize, List<Sort> sortList) {
+        Page<InsurancePolicy> page = PageHelper.startPage(pageNumber, pageSize).doSelectPage(() -> {
+            insurancePolicyDAO.nextMonthPageList(searchParams, sortList);
+        });
+
+        return page;
+    }
 }

+ 7 - 0
picc-common/src/main/resources/mapper/business/ApplicationPolicy.xml

@@ -78,4 +78,11 @@
 		and b.del_flag=0
 		order by b.create_time asc
 	</select>
+	<select id="findApplicationByPolicyId" resultMap="com.jpsoft.picc.modules.business.dao.InsuranceApplicationDAO.InsuranceApplicationMap">
+		SELECT b.* FROM business_application_policy a,business_insurance_application b
+		where a.policy_id=#{0}
+		and a.application_id = b.id_
+		and b.del_flag=0
+		order by b.create_time asc
+	</select>
 </mapper>

+ 48 - 1
picc-common/src/main/resources/mapper/business/InsurancePolicy.xml

@@ -5,6 +5,8 @@
 <mapper namespace="com.jpsoft.picc.modules.business.dao.InsurancePolicyDAO">
     <resultMap id="InsurancePolicyMap" type="com.jpsoft.picc.modules.business.entity.InsurancePolicy">
         <id property="id" column="id_" />
+        <result property="definitionId" column="definition_id"/>
+        <result property="definitionName" column="definition_name"/>
         <result property="status" column="status_" />
         <result property="processStatus" column="process_status" />
         <result property="insuranceFee" column="insurance_fee" />
@@ -33,10 +35,13 @@
         -->
         <![CDATA[
 		insert into business_insurance_policy
-	    (id_,status_,process_status,insurance_fee,start_time,end_time,number_,account_bank,issuing_bank,singl_number,transfer_time,agent_id,insurance_policy_file,no_,effective_date,del_flag,create_by,create_time,update_by,update_time)
+	    (id_,definition_id,status_,process_status,insurance_fee,start_time,end_time,
+	    number_,account_bank,issuing_bank,singl_number,transfer_time,
+	    agent_id,insurance_policy_file,no_,effective_date,del_flag,create_by,create_time,update_by,update_time)
 		values
 		(
             #{id,jdbcType=VARCHAR}
+            ,#{definitionId,jdbcType=VARCHAR}
             ,#{status,jdbcType=VARCHAR}
             ,#{processStatus,jdbcType=VARCHAR}
             ,#{insuranceFee,jdbcType= NUMERIC }
@@ -68,6 +73,9 @@
             <if test="status!=null">
                 status_=#{status,jdbcType=VARCHAR},
             </if>
+            <if test="definitionId!=null">
+                definition_id=#{definitionId,jdbcType=VARCHAR},
+            </if>
             <if test="processStatus!=null">
                 process_status=#{processStatus,jdbcType=VARCHAR},
             </if>
@@ -165,4 +173,43 @@
         and b.application_id = #{applicationId}
         and a.effective_date = #{effectiveDate}
     </select>
+
+    <select id="nextMonthPageList" parameterType="hashmap" resultMap="InsurancePolicyMap">
+        <![CDATA[
+            select * from (
+                SELECT a.*,b.name_ as definition_name
+                FROM business_insurance_policy a left join base_insurance_definition b
+                on a.definition_id = b.id_
+			) as t
+		]]>
+        <where>
+            del_flag=0
+            <if test="searchParams.companyId != null">
+                and id_ in(
+                    select b.policy_id from business_insurance_application a,business_application_policy b
+                    where a.id_=b.application_id
+                    and a.company_id = #{searchParams.companyId}
+                )
+            </if>
+            <if test="searchParams.status != null">
+                and status_ = #{searchParams.status}
+            </if>
+            <if test="searchParams.definitionId != null">
+                and definition_id = #{searchParams.definitionId}
+            </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>
 </mapper>

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

@@ -112,4 +112,9 @@
 		where t1.del_flag=0 and t1.policy_id=#{policyId}
 		and t1.member_id=t2.id_ and t2.jobs_id = #{jobsId}
 	</select>
+	<select id="findByPolicyId" resultMap="InsurancePolicyMemberMap">
+		select * from business_insurance_policy_member
+		where del_flag = false and policy_id=#{0}
+		order by create_time asc
+	</select>
 </mapper>

+ 0 - 339
picc-enterprise-server/src/main/java/com/jpsoft/picc/modules/auth/controller/ApplicationPolicyController.java

@@ -1,339 +0,0 @@
-package com.jpsoft.picc.modules.auth.controller;
-
-import com.github.pagehelper.Page;
-import com.jpsoft.picc.modules.auth.dto.AcceptInsuranceDTO;
-import com.jpsoft.picc.modules.auth.dto.InsuranceApplicationDTO;
-import com.jpsoft.picc.modules.auth.dto.InsuranceJobsDTO;
-import com.jpsoft.picc.modules.base.entity.*;
-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.InsuranceApplication;
-import com.jpsoft.picc.modules.business.entity.InsurancePolicy;
-import com.jpsoft.picc.modules.business.entity.InsurancePolicyMember;
-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.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 io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.StringUtils;
-import org.jasig.cas.client.authentication.AttributePrincipal;
-import org.joda.time.DateTime;
-import org.joda.time.Interval;
-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.*;
-
-@Slf4j
-@Api(description="投保历史查询")
-@RestController
-@RequestMapping("/auth/applicationPolicy")
-public class ApplicationPolicyController {
-    @Autowired
-    private InsuranceApplicationService insuranceApplicationService;
-
-    @Autowired
-    private ApplicationPolicyService applicationPolicyService;
-
-    @Autowired
-    private InsurancePolicyService insurancePolicyService;
-
-    @Autowired
-    private InsuranceJobsService insuranceJobsService;
-
-    @Autowired
-    private InsuranceDefinitionService insuranceDefinitionService;
-
-    @Autowired
-    private InsuranceDefinitionLimitService insuranceDefinitionLimitService;
-
-    @Autowired
-    private JobsService jobsService;
-
-    @Autowired
-    private InsurancePolicyMemberService insurancePolicyMemberService;
-
-    @PostMapping(value="historyList")
-    @ApiOperation(value = "投保历史查看")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "applicationId",value = "参保单编号", required = true, paramType = "form"),
-    })
-    public MessageResult<Map> historyList(String applicationId,
-                                          @RequestParam(value="pageIndex",defaultValue="1") int pageIndex,
-                                          @RequestParam(value="pageSize",defaultValue="20") int pageSize){
-        MessageResult<Map> messageResult = new MessageResult<>();
-    
-        try {
-            //todo
-            Page<InsurancePolicy> page = applicationPolicyService.findPolicyByApplicationId(applicationId,pageIndex,pageSize);
-
-            Map dataMap = PojoUtils.pageWrapper(page);
-
-            InsuranceApplication insuranceApplication = insuranceApplicationService.get(applicationId);
-
-            List<Map> mapList = new ArrayList<>();
-
-            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
-
-            Date now = new Date();
-
-            for (InsurancePolicy policy : page.getResult()) {
-                Map<String,Object> map = new HashMap<>();
-
-                map.put("applicationId",applicationId);
-                map.put("policyId",policy.getId());
-                map.put("startTime",sdf.format(policy.getStartTime()));
-                map.put("endTime",sdf.format(policy.getEndTime()));
-                map.put("definitionName",insuranceApplication.getDefinitionName());
-
-                if (now.before(policy.getStartTime())){
-                    map.put("status","未生效");
-                }
-                else if(now.after(policy.getEndTime())){
-                    map.put("status","已过期");
-                }
-                else{
-                    map.put("status","保障中");
-                }
-
-                mapList.add(map);
-            }
-
-            dataMap.put("data",mapList);
-
-            messageResult.setData(dataMap);
-            messageResult.setResult(true);
-        }
-        catch (Exception ex){
-            messageResult.setResult(false);
-            messageResult.setMessage(ex.getMessage());
-        }
-        
-        return messageResult;
-    }
-
-    @ApiOperation(value="获取投保信息")
-    @RequestMapping(value = "insureDetail",method = RequestMethod.GET)
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "applicationId",value = "投保编号", required = true, paramType = "query",dataType = "String")
-    })
-    public MessageResult<InsuranceApplicationDTO> insureDetail(String applicationId,
-                                                               HttpServletRequest request){
-        MessageResult<InsuranceApplicationDTO> msgResult = new MessageResult<>();
-
-        InsuranceApplicationDTO insuranceApplicationDTO = new InsuranceApplicationDTO();
-
-        try {
-            InsuranceApplication insuranceApplication = null;
-
-            if (StringUtils.isNotEmpty(applicationId)) {
-                insuranceApplication = insuranceApplicationService.get(applicationId);
-            }
-
-            if (insuranceApplication != null) {
-                PojoUtils.map(insuranceApplication, insuranceApplicationDTO);
-                insuranceApplicationDTO.setApplicationId(insuranceApplication.getId());
-
-                DateTime endTime = new DateTime(insuranceApplication.getEndTime());
-                DateTime startTime = new DateTime(insuranceApplication.getStartTime());
-                Interval interval = new Interval(startTime, endTime);
-
-                insuranceApplicationDTO.setMonthNumber(interval.toPeriod().getMonths());
-            }
-
-            msgResult.setData(insuranceApplicationDTO);
-
-            msgResult.setResult(true);
-        }
-        catch(Exception ex){
-            log.error(ex.getMessage(),ex);
-
-            msgResult.setResult(false);
-            msgResult.setMessage(ex.getMessage());
-        }
-
-        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({
-            @ApiImplicitParam(name = "applicationId",value = "投保单ID", required = true,paramType = "query",dataType = "String"),
-            @ApiImplicitParam(name = "policyId",value = "每月投保单ID", required = true,paramType = "query",dataType = "String"),
-    })
-    public MessageResult<AcceptInsuranceDTO> acceptDetail(@RequestParam(value="applicationId",defaultValue="") String applicationId,
-                                                          @RequestParam(value="policyId",defaultValue="") String policyId){
-        MessageResult<AcceptInsuranceDTO> msgResult = new MessageResult<>();
-        AcceptInsuranceDTO acceptInsuranceDTO = new AcceptInsuranceDTO();
-
-        try {
-            //投保单
-            InsuranceApplication insuranceApplication = insuranceApplicationService.get(applicationId);
-
-            //险种
-            InsuranceDefinition insuranceDefinition = insuranceDefinitionService.get(insuranceApplication.getDefinitionId());
-
-            //险种名称
-            acceptInsuranceDTO.setInsuranceDefName(insuranceDefinition.getName());
-
-            //险种关联限额
-            List<InsuranceDefinitionLimit> insuranceDefinitionLimits = insuranceDefinitionLimitService.findByDefinitionId(insuranceApplication.getDefinitionId());
-
-            acceptInsuranceDTO.setInsuranceDefLimitList(insuranceDefinitionLimits);
-
-            //关联岗位
-            List<InsuranceJobs> InsuranceJobsList = findByDefinitionId(insuranceApplication.getDefinitionId());
-
-            DateTime endTime = new DateTime(insuranceApplication.getEndTime());
-            acceptInsuranceDTO.setEndTime(insuranceApplication.getEndTime());
-
-            DateTime startTime = new DateTime(insuranceApplication.getStartTime());
-            acceptInsuranceDTO.setStartTime(insuranceApplication.getStartTime());
-
-            Interval interval = new Interval(startTime, endTime);
-
-            //投保总月份
-            int months = interval.toPeriod().getMonths();
-
-            BigDecimal totalAmount = new BigDecimal(0);
-            int totalNumber = 0;
-
-            List<InsuranceJobsDTO> insuranceJobsList = new ArrayList<>();
-
-            //查询不同岗位,参保费用
-            for(InsuranceJobs insuranceJobs : InsuranceJobsList){
-                Jobs jobs = jobsService.get(insuranceJobs.getJobsId());
-
-                InsuranceJobsDTO insuranceJobsDTO = new InsuranceJobsDTO();
-
-                insuranceJobsDTO.setJobs(jobs);
-
-                long memberCount = insurancePolicyMemberService.countByPolicyIdAndJobsId(policyId,insuranceJobs.getJobsId());
-
-                insuranceJobsDTO.setCharges(insuranceJobs.getCharges());
-                insuranceJobsDTO.setChargesY(insuranceJobs.getCharges().multiply(new BigDecimal(12)));
-                insuranceJobsDTO.setNumber(Long.valueOf(memberCount).intValue());
-
-                insuranceJobsDTO.setMoney(insuranceJobsDTO.getCharges()
-                        .multiply(new BigDecimal(months))
-                        .multiply(new BigDecimal(insuranceJobsDTO.getNumber())));
-
-                totalAmount = totalAmount.add(insuranceJobsDTO.getMoney());
-                totalNumber += memberCount;
-
-                insuranceJobsList.add(insuranceJobsDTO);
-            }
-
-            acceptInsuranceDTO.setInsuranceJobsList(insuranceJobsList);
-            acceptInsuranceDTO.setTotalAmount(totalAmount);
-
-            msgResult.setData(acceptInsuranceDTO);
-        }
-        catch(Exception ex){
-            log.error(ex.getMessage(),ex);
-
-            msgResult.setResult(false);
-            msgResult.setMessage(ex.getMessage());
-        }
-
-        return msgResult;
-    }
-
-    @PostMapping(value="生成下月投保单")
-    @ApiOperation(value = "generateNextMonthPolicy")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "applicationId",value = "投保单编号", required = true, paramType = "form"),
-            @ApiImplicitParam(name = "policyId",value = "本月投保单编号", required = true, paramType = "form"),
-    })
-    public MessageResult<String> generateNextMonthPolicy(
-                                    String applicationId,String policyId,
-                                    HttpServletRequest request){
-        MessageResult<String> messageResult = new MessageResult<>();
-        AttributePrincipal principal = (AttributePrincipal) request.getUserPrincipal();
-
-        try {
-            //添加下月投保单
-            InsurancePolicy srcPolicy = insurancePolicyService.get(policyId);
-            InsurancePolicy destPolicy = new InsurancePolicy();
-
-            PojoUtils.map(srcPolicy,destPolicy);
-
-            DateTime startTime = new DateTime(srcPolicy.getEndTime()).plusDays(1);
-
-            destPolicy.setStartTime(startTime.toDate());
-            destPolicy.setEndTime(startTime.plusMonths(1).toDate());
-
-            destPolicy.setEffectiveDate(startTime.toString("yyyyMM"));
-
-            boolean exist = insurancePolicyService.existByApplicationIdAndEffectiveDate(applicationId,destPolicy.getEffectiveDate());
-
-            if (exist){
-                throw new Exception(destPolicy.getEffectiveDate() + "投保单已存在!");
-            }
-
-            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());
-
-            insurancePolicyService.insert(destPolicy);
-
-            //关联投保单及每月投保单
-            ApplicationPolicy applicationPolicy = new ApplicationPolicy();
-            applicationPolicy.setId(UUID.randomUUID().toString());
-            applicationPolicy.setApplicationId(applicationId);
-            applicationPolicy.setPolicyId(policyId);
-
-            applicationPolicyService.insert(applicationPolicy);
-
-            //关联参保人员
-            List<InsurancePolicyMember> memberList = insurancePolicyMemberService.findByPolicyId(policyId);
-
-            for (InsurancePolicyMember srcMember : memberList) {
-                InsurancePolicyMember destMember = new InsurancePolicyMember();
-
-                destMember.setId(UUID.randomUUID().toString());
-                destMember.setMemberId(srcMember.getMemberId());
-                destMember.setDelFlag(false);
-                destMember.setCreateBy(principal.getName());
-                destMember.setCreateTime(new Date());
-                destMember.setStatus(srcMember.getStatus());
-
-                insurancePolicyMemberService.insert(destMember);
-            }
-        }
-        catch (Exception ex){
-            messageResult.setResult(false);
-            messageResult.setMessage(ex.getMessage());
-        }
-
-        return messageResult;
-    }
-}

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

@@ -93,35 +93,43 @@ public class InsuranceApplicationController {
 
         MessageResult<Map> msgResult = new MessageResult<>();
 
-        Map<String,Object> searchParams = new HashMap<>();
+        try {
+            Map<String, Object> searchParams = new HashMap<>();
 
-        List<Sort> sortList = new ArrayList<>();
-        sortList.add(new Sort("create_time","desc"));
+            List<Sort> sortList = new ArrayList<>();
+            sortList.add(new Sort("create_time", "desc"));
 
-        if (StringUtils.isNotEmpty(company.getId())) {
-            searchParams.put("companyId",company.getId());
-        }
+            if (StringUtils.isNotEmpty(company.getId())) {
+                searchParams.put("companyId", company.getId());
+            }
 
-        if (StringUtils.isNotEmpty(definitionId)) {
-            searchParams.put("definitionId",definitionId);
-        }
+            if (StringUtils.isNotEmpty(definitionId)) {
+                searchParams.put("definitionId", definitionId);
+            }
 
-        if (StringUtils.isNotEmpty(status)) {
-            searchParams.put("status",status);
-        }
+            if (StringUtils.isNotEmpty(status)) {
+                searchParams.put("status", status);
+            }
 
-        if (startTime!=null) {
-            searchParams.put("startTime",startTime);
-        }
+            if (startTime != null) {
+                searchParams.put("startTime", startTime);
+            }
 
-        if (endTime!=null) {
-            searchParams.put("endTime",endTime);
-        }
+            if (endTime != null) {
+                searchParams.put("endTime", endTime);
+            }
+
+            Page<InsuranceApplication> page = insuranceApplicationService.pageSearch(searchParams, pageIndex, pageSize, sortList);
 
-        Page<InsuranceApplication> page = insuranceApplicationService.pageSearch(searchParams,pageIndex,pageSize,sortList);
+            msgResult.setData(PojoUtils.pageWrapper(page));
+            msgResult.setResult(true);
+        }
+        catch(Exception ex){
+            logger.error(ex.getMessage(),ex);
 
-        msgResult.setResult(true);
-        msgResult.setData(PojoUtils.pageWrapper(page));
+            msgResult.setResult(false);
+            msgResult.setMessage(ex.getMessage());
+        }
 
         return msgResult;
     }
@@ -358,6 +366,7 @@ public class InsuranceApplicationController {
             //更新每月投保单
             InsurancePolicy insurancePolicy = insurancePolicyService.get(policyId);
 
+            insurancePolicy.setDefinitionId(insuranceApplication.getDefinitionId());
             insurancePolicy.setInsuranceFee(totalAmount);
             insurancePolicy.setNumber(totalNumber);
             insurancePolicy.setNo(1); //首月

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

@@ -1,8 +1,11 @@
 package com.jpsoft.picc.modules.auth.controller;
 
 import com.github.pagehelper.Page;
-import com.jpsoft.picc.modules.base.entity.Company;
-import com.jpsoft.picc.modules.base.service.CompanyService;
+import com.jpsoft.picc.modules.auth.dto.AcceptInsuranceDTO;
+import com.jpsoft.picc.modules.auth.dto.InsuranceApplicationDTO;
+import com.jpsoft.picc.modules.auth.dto.InsuranceJobsDTO;
+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.constant.PolicyStatus;
@@ -13,21 +16,26 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.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.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+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.*;
 
-@Api(description="每月投保单")
+@Slf4j
+@Api(description="下月投保单")
 @RestController
 @RequestMapping("/auth/insurancePolicy")
 public class InsurancePolicyController {
@@ -51,63 +59,17 @@ public class InsurancePolicyController {
     @Autowired
     private ApplicationPolicyService applicationPolicyService;
 
-    @ApiOperation(value="每月投保单列表")
-    @RequestMapping(value = "pageList",method = RequestMethod.POST)
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "applicationId",value = "投保申请ID", required = true, paramType = "form",dataType = "String")
-    })
-    public MessageResult<Map> pageList(
-            @RequestParam(value="applicationId",defaultValue="") String applicationId,
-            @RequestParam(value="pageIndex",defaultValue="1") int pageIndex,
-            @RequestParam(value="pageSize",defaultValue="20") int pageSize){
-        MessageResult<Map> msgResult = new MessageResult<>();
-
-        Map<String,Object> searchParams = new HashMap<>();
-        searchParams.put("delFlag",false);
-
-        List<Sort> sortList = new ArrayList<>();
-        sortList.add(new Sort("id_","asc"));
-
-        if (StringUtils.isNotEmpty(applicationId)) {
-            searchParams.put("applicationId",applicationId);
-        }
-
-        Page<InsurancePolicy> page = insurancePolicyService.pageSearch(searchParams,pageIndex,pageSize,sortList);
-
-        msgResult.setResult(true);
-        msgResult.setData(PojoUtils.pageWrapper(page));
-
-        return msgResult;
-    }
-
-    @ApiOperation(value="每月投保单详情")
-    @RequestMapping(value = "detail",method = RequestMethod.POST)
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "id",value = "编号", required = true, paramType = "form",dataType = "String")
-    })
-    public MessageResult<InsurancePolicy> detail(@RequestParam(value="id",defaultValue="") String id){
-        MessageResult<InsurancePolicy> msgResult = new MessageResult<>();
-
-        try {
-            InsurancePolicy insurancePolicy = insurancePolicyService.get(id);
+    @Autowired
+    private InsuranceJobsService insuranceJobsService;
 
-            if (insurancePolicy != null) {
-                msgResult.setResult(true);
-                msgResult.setData(insurancePolicy);
-            } else {
-                msgResult.setResult(false);
-                msgResult.setMessage("数据库不存在该记录!");
-            }
-        }
-        catch(Exception ex){
-            logger.error(ex.getMessage(),ex);
+    @Autowired
+    private InsuranceDefinitionLimitService insuranceDefinitionLimitService;
 
-            msgResult.setResult(false);
-            msgResult.setMessage(ex.getMessage());
-        }
+    @Autowired
+    private InsuranceDefinitionService insuranceDefinitionService;
 
-        return msgResult;
-    }
+    @Autowired
+    private JobsService jobsService;
 
     @ApiOperation(value="查看附件")
     @RequestMapping(value = "attachmentList",method = RequestMethod.POST)
@@ -138,35 +100,6 @@ public class InsurancePolicyController {
         return msgResult;
     }
 
-    @ApiOperation(value="投保历史记录")
-    @RequestMapping(value = "historyPageList",method = RequestMethod.POST)
-    public MessageResult<Map> historyPageList(
-            @RequestParam(value="pageIndex",defaultValue="1") int pageIndex,
-            @RequestParam(value="pageSize",defaultValue="20") int pageSize,
-            HttpServletRequest request){
-        AttributePrincipal principal = (AttributePrincipal) request.getUserPrincipal();
-        Company company = companyService.findByCreateBy(principal.getName());
-
-        MessageResult<Map> msgResult = new MessageResult<>();
-
-        Map<String,Object> searchParams = new HashMap<>();
-        searchParams.put("status",String.valueOf(PolicyStatus.SendOutPolicy.getValue()));
-
-        List<Sort> sortList = new ArrayList<>();
-        sortList.add(new Sort("id_","asc"));
-
-        if (StringUtils.isNotEmpty(company.getId())) {
-            searchParams.put("companyId",company.getId());
-        }
-
-        Page<InsuranceApplication> page = insuranceApplicationService.pageSearch(searchParams,pageIndex,pageSize,sortList);
-
-        msgResult.setResult(true);
-        msgResult.setData(PojoUtils.pageWrapper(page));
-
-        return msgResult;
-    }
-
     @ApiOperation(value="查看退回理由")
     @RequestMapping(value = "backReason",method = RequestMethod.POST)
     @ApiImplicitParams({
@@ -179,7 +112,7 @@ public class InsurancePolicyController {
         searchParams.put("policyId",policyId);
 
         List<Sort> sortList = new ArrayList<>();
-        sortList.add(new Sort("id_","asc"));
+        sortList.add(new Sort("create_time","desc"));
 
         Page<InsurancePolicyRecord> page = insurancePolicyRecordService.pageSearch(searchParams,1,100,sortList);
 
@@ -189,9 +122,75 @@ public class InsurancePolicyController {
         return msgResult;
     }
 
-    @ApiOperation(value="下月投保单查询")
-    @RequestMapping(value = "nextMonthList",method = RequestMethod.POST)
-    public MessageResult<Map> nextMonthList(
+    @PostMapping(value="historyList")
+    @ApiOperation(value = "根据投保单号查询每月投保单")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "applicationId",value = "参保单编号", required = true, paramType = "form"),
+    })
+    public MessageResult<Map> historyList(String applicationId,
+                                          @RequestParam(value="pageIndex",defaultValue="1") int pageIndex,
+                                          @RequestParam(value="pageSize",defaultValue="20") int pageSize){
+        MessageResult<Map> messageResult = new MessageResult<>();
+
+        try {
+            //todo
+            Page<InsurancePolicy> page = applicationPolicyService.findPolicyByApplicationId(applicationId,pageIndex,pageSize);
+
+            Map dataMap = PojoUtils.pageWrapper(page);
+
+            List<Map> mapList = new ArrayList<>();
+
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+
+            Date now = new Date();
+
+            for (InsurancePolicy policy : page.getResult()) {
+                Map<String,Object> map = new HashMap<>();
+
+                map.put("applicationId",applicationId);
+                map.put("policyId",policy.getId());
+                map.put("startTime",sdf.format(policy.getStartTime()));
+                map.put("endTime",sdf.format(policy.getEndTime()));
+                map.put("definitionName",policy.getDefinitionName());
+
+                if (now.before(policy.getStartTime())){
+                    map.put("status","未生效");
+                }
+                else if(now.after(policy.getEndTime())){
+                    map.put("status","已过期");
+                }
+                else{
+                    map.put("status","保障中");
+                }
+
+                mapList.add(map);
+            }
+
+            dataMap.put("data",mapList);
+
+            messageResult.setData(dataMap);
+            messageResult.setResult(true);
+        }
+        catch (Exception ex){
+            messageResult.setResult(false);
+            messageResult.setMessage(ex.getMessage());
+        }
+
+        return messageResult;
+    }
+
+    @ApiOperation(value="下月投保单分页查询")
+    @RequestMapping(value = "pageList",method = RequestMethod.POST)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "status",value = "状态:待调整10/已退回15/待初审20/待复审30/待制单50/待出单60/已出单70", required = true, paramType = "form",dataType = "String"),
+            @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> pageList(
+            String status,String definitionId,
+            @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,
             HttpServletRequest request){
@@ -199,90 +198,54 @@ public class InsurancePolicyController {
         Company company = companyService.findByCreateBy(principal.getName());
 
         MessageResult<Map> msgResult = new MessageResult<>();
-        List<String> policyIds = new ArrayList<>();
 
-        List<Sort> sortList = new ArrayList<>();
-        sortList.add(new Sort("id_","asc"));
-
-        Map<String,Object> searchParamsInsuranceApplication = new HashMap<>();
-        searchParamsInsuranceApplication.put("status",String.valueOf(PolicyStatus.SendOutPolicy.getValue()));
-        searchParamsInsuranceApplication.put("companyId",company.getId());
-        Page<InsuranceApplication> pageInsuranceApplication = insuranceApplicationService.pageSearch(searchParamsInsuranceApplication,1,1000,sortList);
-        for(InsuranceApplication insuranceApplication : pageInsuranceApplication.getResult()){
-            Map<String,Object> searchParamsInsurancePolicy = new HashMap<>();
-            searchParamsInsurancePolicy.put("applicationId",insuranceApplication.getId());
-            searchParamsInsurancePolicy.put("status",String.valueOf(PolicyStatus.SendOutPolicy.getValue()));
-            Page<InsurancePolicy> pageInsurancePolicy = insurancePolicyService.pageSearch(searchParamsInsurancePolicy,1,1000,sortList);
-            for(InsurancePolicy insurancePolicy : pageInsurancePolicy.getResult()){
-                SimpleDateFormat sdf = new SimpleDateFormat("yyyyMM");
-                Calendar allEnd = Calendar.getInstance();
-                allEnd.setTime(insuranceApplication.getEndTime());
-                Calendar startTime = Calendar.getInstance();
-                startTime.setTime(insurancePolicy.getStartTime());
-                startTime.add(Calendar.MONTH,1);
-                Calendar endTime = Calendar.getInstance();
-                endTime.setTime(insurancePolicy.getEndTime());
-                endTime.add(Calendar.MONTH,1);
-                if(endTime.before(allEnd)){
-                    //增加每月投保单
-                    InsurancePolicy newInsurancePolicy = new InsurancePolicy();
-                    newInsurancePolicy.setId(UUID.randomUUID().toString());
-                    newInsurancePolicy.setInsuranceFee(insurancePolicy.getInsuranceFee());
-                    newInsurancePolicy.setStartTime(startTime.getTime());
-                    newInsurancePolicy.setEndTime(endTime.getTime());
-                    newInsurancePolicy.setNumber(insurancePolicy.getNumber());
-                    newInsurancePolicy.setNo(insurancePolicy.getNo()+1);
-                    newInsurancePolicy.setEffectiveDate(sdf.format(startTime));
-                    newInsurancePolicy.setDelFlag(false);
-                    newInsurancePolicy.setCreateBy(principal.getName());
-                    newInsurancePolicy.setCreateTime(new Date());
-                    insurancePolicyService.insert(newInsurancePolicy);
-
-                    //增加投保单与每月投保单关联
-                    ApplicationPolicy newApplicationPolicy = new ApplicationPolicy();
-                    newApplicationPolicy.setId(UUID.randomUUID().toString());
-                    newApplicationPolicy.setApplicationId(insuranceApplication.getId());
-                    newApplicationPolicy.setPolicyId(newInsurancePolicy.getId());
-                    applicationPolicyService.insert(newApplicationPolicy);
-
-                    //增加花名册
-                    Map<String,Object> searchParamsInsurancePolicyMember = new HashMap<>();
-                    searchParamsInsurancePolicyMember.put("policyId",insurancePolicy.getId());
-                    Page<InsurancePolicyMember> pageInsurancePolicyMember = insurancePolicyMemberService.pageSearch(searchParamsInsurancePolicyMember,1,1000,sortList);
-                    for(InsurancePolicyMember insurancePolicyMember : pageInsurancePolicyMember.getResult()){
-                        InsurancePolicyMember newinsurancePolicyMember = new InsurancePolicyMember();
-                        newinsurancePolicyMember.setId(UUID.randomUUID().toString());
-                        newinsurancePolicyMember.setPolicyId(newInsurancePolicy.getId());
-                        newinsurancePolicyMember.setMemberId(insurancePolicyMember.getMemberId());
-                        newinsurancePolicyMember.setDelFlag(false);
-                        newinsurancePolicyMember.setCreateBy(principal.getName());
-                        newinsurancePolicyMember.setCreateTime(new Date());
-                        insurancePolicyMemberService.insert(newinsurancePolicyMember);
-                    }
-
-                    //记录投保单ID
-                    policyIds.add(newInsurancePolicy.getId());
-                }
+        try {
+            Map<String, Object> searchParams = new HashMap<>();
+
+            List<Sort> sortList = new ArrayList<>();
+            sortList.add(new Sort("create_time", "desc"));
+
+            if (StringUtils.isNotEmpty(company.getId())) {
+                searchParams.put("companyId", company.getId());
             }
-        }
 
-        //按ID重新读取每月投保单
-        Map<String,Object> searchParamsInsurancePolicy = new HashMap<>();
-        searchParamsInsurancePolicy.put("ids",policyIds);
-        Page<InsurancePolicy> pageInsurancePolicy = insurancePolicyService.pageSearch(searchParamsInsurancePolicy,1,1000,sortList);
+            if (StringUtils.isNotEmpty(definitionId)) {
+                searchParams.put("definitionId", definitionId);
+            }
 
-        msgResult.setResult(true);
-        msgResult.setData(PojoUtils.pageWrapper(pageInsurancePolicy));
+            if (StringUtils.isNotEmpty(status)) {
+                searchParams.put("status", status);
+            }
+
+            if (startTime != null) {
+                searchParams.put("startTime", startTime);
+            }
+
+            if (endTime != null) {
+                searchParams.put("endTime", endTime);
+            }
+
+            Page<InsurancePolicy> page = insurancePolicyService.nextMonthPageList(searchParams, pageIndex, pageSize,sortList);
+
+            msgResult.setData(PojoUtils.pageWrapper(page));
+            msgResult.setResult(true);
+        }
+        catch(Exception ex){
+            logger.error(ex.getMessage(),ex);
+
+            msgResult.setResult(false);
+            msgResult.setMessage(ex.getMessage());
+        }
 
         return msgResult;
     }
 
-    @ApiOperation(value="显示参保人员列表")
-    @RequestMapping(value = "pageListPolicyMember",method = RequestMethod.POST)
+    @ApiOperation(value="显示下月参保人员列表")
+    @RequestMapping(value = "memberPageList",method = RequestMethod.POST)
     @ApiImplicitParams({
             @ApiImplicitParam(name = "policyId",value = "每月投保单编号", required = true, paramType = "form",dataType = "String")
     })
-    public MessageResult<Map> pageListPolicyMember(
+    public MessageResult<Map> memberPageList(
             @RequestParam(value="policyId",defaultValue="") String policyId,
             @RequestParam(value="pageIndex",defaultValue="1") int pageIndex,
             @RequestParam(value="pageSize",defaultValue="20") int pageSize){
@@ -301,7 +264,7 @@ public class InsurancePolicyController {
         return msgResult;
     }
 
-    @ApiOperation(value="提交花名册")
+    @ApiOperation(value="提交下月花名册")
     @RequestMapping(value = "submitRoster",method = RequestMethod.POST)
     @ApiImplicitParams({
             @ApiImplicitParam(name = "policyId",value = "每月投保单编号", required = true, paramType = "form",dataType = "String")
@@ -314,7 +277,7 @@ public class InsurancePolicyController {
         try {
             InsurancePolicy insurancePolicy = insurancePolicyService.get(policyId);
 
-            insurancePolicy.setStatus(String.valueOf(PolicyStatus.PendingMakePolicy.getValue()));
+            insurancePolicy.setStatus(String.valueOf(PolicyStatus.PendingTrial.getValue()));
             insurancePolicy.setUpdateBy(principal.getName());
             insurancePolicy.setUpdateTime(new Date());
 
@@ -331,4 +294,235 @@ public class InsurancePolicyController {
 
         return msgResult;
     }
+
+
+    @ApiOperation(value="获取投保信息")
+    @RequestMapping(value = "insureDetail",method = RequestMethod.GET)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "policyId",value = "每月投保编号", required = true, paramType = "query",dataType = "String")
+    })
+    public MessageResult<InsuranceApplicationDTO> insureDetail(String policyId,
+                                                               HttpServletRequest request){
+        MessageResult<InsuranceApplicationDTO> msgResult = new MessageResult<>();
+
+        InsuranceApplicationDTO insuranceApplicationDTO = new InsuranceApplicationDTO();
+
+        try {
+            InsuranceApplication insuranceApplication = null;
+
+            List<InsuranceApplication> appList = applicationPolicyService.findApplicationByPolicyId(policyId);
+
+            if(appList.size()>0){
+                insuranceApplication = appList.get(0);
+            }
+
+            if (insuranceApplication != null) {
+                PojoUtils.map(insuranceApplication, insuranceApplicationDTO);
+                insuranceApplicationDTO.setApplicationId(insuranceApplication.getId());
+
+                DateTime endTime = new DateTime(insuranceApplication.getEndTime());
+                DateTime startTime = new DateTime(insuranceApplication.getStartTime());
+                Interval interval = new Interval(startTime, endTime);
+
+                insuranceApplicationDTO.setMonthNumber(interval.toPeriod().getMonths());
+            }
+
+            msgResult.setData(insuranceApplicationDTO);
+
+            msgResult.setResult(true);
+        }
+        catch(Exception ex){
+            log.error(ex.getMessage(),ex);
+
+            msgResult.setResult(false);
+            msgResult.setMessage(ex.getMessage());
+        }
+
+        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({
+            @ApiImplicitParam(name = "policyId",value = "每月投保单ID", required = true,paramType = "query",dataType = "String"),
+    })
+    public MessageResult<AcceptInsuranceDTO> acceptDetail(String policyId){
+        MessageResult<AcceptInsuranceDTO> msgResult = new MessageResult<>();
+        AcceptInsuranceDTO acceptInsuranceDTO = new AcceptInsuranceDTO();
+
+        try {
+            //投保单
+            InsuranceApplication insuranceApplication = null;
+
+            List<InsuranceApplication> appList = applicationPolicyService.findApplicationByPolicyId(policyId);
+
+            if(appList.size()>0){
+                insuranceApplication = appList.get(0);
+            }
+
+            //险种
+            InsuranceDefinition insuranceDefinition = insuranceDefinitionService.get(insuranceApplication.getDefinitionId());
+
+            //险种名称
+            acceptInsuranceDTO.setInsuranceDefName(insuranceDefinition.getName());
+
+            //险种关联限额
+            List<InsuranceDefinitionLimit> insuranceDefinitionLimits = insuranceDefinitionLimitService.findByDefinitionId(insuranceApplication.getDefinitionId());
+
+            acceptInsuranceDTO.setInsuranceDefLimitList(insuranceDefinitionLimits);
+
+            //关联岗位
+            List<InsuranceJobs> InsuranceJobsList = findByDefinitionId(insuranceApplication.getDefinitionId());
+
+            DateTime endTime = new DateTime(insuranceApplication.getEndTime());
+            acceptInsuranceDTO.setEndTime(insuranceApplication.getEndTime());
+
+            DateTime startTime = new DateTime(insuranceApplication.getStartTime());
+            acceptInsuranceDTO.setStartTime(insuranceApplication.getStartTime());
+
+            Interval interval = new Interval(startTime, endTime);
+
+            //投保总月份
+            int months = interval.toPeriod().getMonths();
+
+            BigDecimal totalAmount = new BigDecimal(0);
+            int totalNumber = 0;
+
+            List<InsuranceJobsDTO> insuranceJobsList = new ArrayList<>();
+
+            //查询不同岗位,参保费用
+            for(InsuranceJobs insuranceJobs : InsuranceJobsList){
+                Jobs jobs = jobsService.get(insuranceJobs.getJobsId());
+
+                InsuranceJobsDTO insuranceJobsDTO = new InsuranceJobsDTO();
+
+                insuranceJobsDTO.setJobs(jobs);
+
+                long memberCount = insurancePolicyMemberService.countByPolicyIdAndJobsId(policyId,insuranceJobs.getJobsId());
+
+                insuranceJobsDTO.setCharges(insuranceJobs.getCharges());
+                insuranceJobsDTO.setChargesY(insuranceJobs.getCharges().multiply(new BigDecimal(12)));
+                insuranceJobsDTO.setNumber(Long.valueOf(memberCount).intValue());
+
+                insuranceJobsDTO.setMoney(insuranceJobsDTO.getCharges()
+                        .multiply(new BigDecimal(months))
+                        .multiply(new BigDecimal(insuranceJobsDTO.getNumber())));
+
+                totalAmount = totalAmount.add(insuranceJobsDTO.getMoney());
+                totalNumber += memberCount;
+
+                insuranceJobsList.add(insuranceJobsDTO);
+            }
+
+            acceptInsuranceDTO.setInsuranceJobsList(insuranceJobsList);
+            acceptInsuranceDTO.setTotalAmount(totalAmount);
+
+            msgResult.setData(acceptInsuranceDTO);
+            msgResult.setResult(true);
+        }
+        catch(Exception ex){
+            log.error(ex.getMessage(),ex);
+
+            msgResult.setResult(false);
+            msgResult.setMessage(ex.getMessage());
+        }
+
+        return msgResult;
+    }
+
+    @PostMapping(value="generateNextMonthPolicy")
+    @ApiOperation(value = "生成下月投保单")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "applicationId",value = "投保单编号", required = true, paramType = "form"),
+            @ApiImplicitParam(name = "policyId",value = "本月投保单编号", required = true, paramType = "form"),
+    })
+    public MessageResult<String> generateNextMonthPolicy(
+            String applicationId,String policyId,
+            HttpServletRequest request){
+        MessageResult<String> messageResult = new MessageResult<>();
+        AttributePrincipal principal = (AttributePrincipal) request.getUserPrincipal();
+
+        try {
+            generatePolicyInTrans(applicationId, policyId, principal);
+            messageResult.setResult(true);
+        }
+        catch (Exception ex){
+            messageResult.setResult(false);
+            messageResult.setMessage(ex.getMessage());
+        }
+
+        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()).plusDays(1);
+
+        destPolicy.setStartTime(startTime.toDate());
+        destPolicy.setEndTime(startTime.plusMonths(1).toDate());
+
+        destPolicy.setEffectiveDate(startTime.toString("yyyyMM"));
+
+        boolean exist = insurancePolicyService.existByApplicationIdAndEffectiveDate(applicationId,destPolicy.getEffectiveDate());
+
+        if (exist){
+            throw new Exception(destPolicy.getEffectiveDate() + "投保单已存在!");
+        }
+
+        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());
+
+        insurancePolicyService.insert(destPolicy);
+
+        //关联投保单及每月投保单
+        ApplicationPolicy applicationPolicy = new ApplicationPolicy();
+        applicationPolicy.setId(UUID.randomUUID().toString());
+        applicationPolicy.setApplicationId(applicationId);
+        applicationPolicy.setPolicyId(destPolicy.getId());
+
+        applicationPolicyService.insert(applicationPolicy);
+
+        //关联参保人员
+        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(principal.getName());
+            destMember.setCreateTime(new Date());
+            destMember.setStatus(srcMember.getStatus());
+
+            insurancePolicyMemberService.insert(destMember);
+        }
+    }
 }

+ 28 - 33
picc-enterprise-server/src/main/java/com/jpsoft/picc/modules/auth/controller/InsurancePolicyUserController.java

@@ -61,8 +61,8 @@ public class InsurancePolicyUserController {
     @ApiOperation(value="读取每月参保人员分页列表")
     @RequestMapping(value = "pageList",method = RequestMethod.POST)
     @ApiImplicitParams({
-            @ApiImplicitParam(name = "applicationId",value = "投保单编号,首次投保用", required = false, paramType = "form",dataType = "String"),
-            @ApiImplicitParam(name = "policyId",value = "每月投保单编号", required = true, paramType = "form",dataType = "String")
+            @ApiImplicitParam(name = "applicationId",value = "投保单编号(首次投保用)", required = false, paramType = "form",dataType = "String"),
+            @ApiImplicitParam(name = "policyId",value = "每月投保单编号(不传policyId则查首月)", required = false, paramType = "form",dataType = "String")
     })
     public MessageResult<Map> pageList(
             @RequestParam(value="applicationId",defaultValue="") String applicationId,
@@ -101,6 +101,9 @@ public class InsurancePolicyUserController {
                     applicationPolicyService.insert(applicationPolicy);
                 }
             }
+            else if(StringUtils.isEmpty(policyId)){
+                policyId = relatePolicyList.get(0).getPolicyId(); //不传policyId则查首月
+            }
         }
 
         List<Sort> sortList = new ArrayList<>();
@@ -162,21 +165,23 @@ public class InsurancePolicyUserController {
             String[] memberIdArr = memberIds.split(",");
 
             for(String memberId : memberIdArr) {
-                InsurancePolicyMember insurancePolicyMember = new InsurancePolicyMember();
+                if(StringUtils.isNotEmpty(memberId) && companyMemberService.exist(memberId)) {
+                    InsurancePolicyMember insurancePolicyMember = new InsurancePolicyMember();
 
-                insurancePolicyMember.setId(UUID.randomUUID().toString());
-                insurancePolicyMember.setPolicyId(policyId);
-                insurancePolicyMember.setMemberId(memberId);
-                insurancePolicyMember.setStatus("0");
+                    insurancePolicyMember.setId(UUID.randomUUID().toString());
+                    insurancePolicyMember.setPolicyId(policyId);
+                    insurancePolicyMember.setMemberId(memberId);
+                    insurancePolicyMember.setStatus("0");
 
-                insurancePolicyMember.setDelFlag(false);
-                insurancePolicyMember.setCreateBy(principal.getName());
-                insurancePolicyMember.setCreateTime(new Date());
+                    insurancePolicyMember.setDelFlag(false);
+                    insurancePolicyMember.setCreateBy(principal.getName());
+                    insurancePolicyMember.setCreateTime(new Date());
 
-                Integer count = insurancePolicyMemberService.insert(insurancePolicyMember);
+                    Integer count = insurancePolicyMemberService.insert(insurancePolicyMember);
 
-                if(count > 0){
-                    affectCount++;
+                    if (count > 0) {
+                        affectCount++;
+                    }
                 }
             }
 
@@ -328,11 +333,11 @@ public class InsurancePolicyUserController {
     @ApiOperation(value="替换参保人员")
     @PostMapping("replace")
     @ApiImplicitParams({
-            @ApiImplicitParam(name = "ids",value = "被替换的条目Id,用,分隔", required = true, paramType = "form",dataType = "String"),
-            @ApiImplicitParam(name = "memberIds",value = "替换的企业用户ID,用,分隔", required = true, paramType = "form",dataType = "String"),
+            @ApiImplicitParam(name = "policyMemberId",value = "参保人员主键", required = true, paramType = "form",dataType = "String"),
+            @ApiImplicitParam(name = "srcMemberId",value = "被替换的企业人员编号", required = true, paramType = "form",dataType = "String"),
+            @ApiImplicitParam(name = "destMemberId",value = "替换企业人员编号", required = true, paramType = "form",dataType = "String"),
     })
-    public MessageResult<String> replace(@RequestParam(value="ids",defaultValue="") String ids,
-                                     @RequestParam(value="memberIds",defaultValue="") String memberIds,
+    public MessageResult<String> replace(String policyMemberId,String srcMemberId,String destMemberId,
                                      HttpServletRequest request){
         AttributePrincipal principal = (AttributePrincipal) request.getUserPrincipal();
         Company company = companyService.findByCreateBy(principal.getName());
@@ -340,24 +345,14 @@ public class InsurancePolicyUserController {
         MessageResult<String> msgResult = new MessageResult<>();
 
         try {
-            int affectCount = 0;
-            String[] arrayId = ids.split(",");
-            String[] arrayMemberId = memberIds.split(",");
-
-            for(int i=0;i<arrayId.length;i++) {
-                InsurancePolicyMember insurancePolicyMember = insurancePolicyMemberService.get(arrayId[i]);
+            InsurancePolicyMember insurancePolicyMember = insurancePolicyMemberService.get(policyMemberId);
 
-                insurancePolicyMember.setReplaceMemberId(insurancePolicyMember.getMemberId());
-                insurancePolicyMember.setMemberId(arrayMemberId[i]);
-                insurancePolicyMember.setUpdateBy(principal.getName());
-                insurancePolicyMember.setUpdateTime(new Date());
-
-                Integer count = insurancePolicyMemberService.update(insurancePolicyMember);
+            insurancePolicyMember.setReplaceMemberId(srcMemberId);
+            insurancePolicyMember.setMemberId(destMemberId);
+            insurancePolicyMember.setUpdateBy(principal.getName());
+            insurancePolicyMember.setUpdateTime(new Date());
 
-                if(count > 0){
-                    affectCount++;
-                }
-            }
+            Integer affectCount = insurancePolicyMemberService.update(insurancePolicyMember);
 
             if (affectCount > 0) {
                 msgResult.setResult(true);