소스 검색

保障天数计算逻辑修改

kouchengxing 3 년 전
부모
커밋
ba95e3fa69
1개의 변경된 파일40개의 추가작업 그리고 3개의 파일을 삭제
  1. 40 3
      dgtis-modules/dgtis-modules-data/src/main/java/com/dgtis/data/api/CustomerApiController.java

+ 40 - 3
dgtis-modules/dgtis-modules-data/src/main/java/com/dgtis/data/api/CustomerApiController.java

@@ -652,17 +652,54 @@ public class CustomerApiController {
             mpInfo.put("handedinprem",df.format(handedinprem));//已交保费
             mpInfo.put("insureDay",(insureDay/365) +"年"+(insureDay%365)+"天");
             //保障天数需要加上退保之前的天数
-            scriptRequest = new Request("GET", "/shanglifeecif.surrenderprotectiontemp/_search?pretty=true&q=scustid:"+scustid);
+            scriptRequest = new Request("GET", "/shanglifeecif.tbcustomerinfo/_search?pretty=true&sort=sdate:asc&size=100&q=scustid:"+scustid);
             response = restClient.performRequest(scriptRequest);
             result = EntityUtils.toString(response.getEntity());
             jsonObject = JSON.parseObject(result);
             hitsobject = (JSONObject) jsonObject.get("hits");
             array = JSON.parseArray(hitsobject.get("hits").toString());
+            Date fSdate = null;//最终起始日期,分段的
+            Date fEdate = null;//最终结束日期,分段的
             for (int i = 0; i <array.size() ; i++) {
                 JSONObject json = (JSONObject)array.get(i);
                 JSONObject tbSource = JSON.parseObject(json.getString("_source"));
-                if(tbSource.containsKey("tbday")){
-                    guaranteeDay+=tbSource.getInteger("tbday");
+                /**
+                 * 获取该退报客户的所有保单信息,计算天数退保天数加上有效保单的天数
+                 */
+                if(tbSource.containsKey("sdate") && tbSource.containsKey("edate")){
+                    Date sdate = tbSource.getDate("sdate");
+                    Date edate = tbSource.getDate("edate");
+                    //获取第一条数据赋值给最后计算的开始和结束日期
+                    if(i==0){
+                        fSdate = sdate;
+                        fEdate = edate;
+                    }
+
+                    /**
+                     * 逻辑梳理
+                     * 下一张保单的开始日期小于等于当前的结束日期 ,最终开始日期按照上一张保单的开始日期
+                     * 下一张保单的开始日期大于当前的结束日期 ,需要计算第一部分的保障天数依次循环
+                     */
+                    if(i>0){
+                        if(sdate.getTime()<=fEdate.getTime()){
+                            //保单结束日期在最终结束日期之后,需要把保单结束日期赋值给最终结束日期
+                            if(edate.getTime()>fEdate.getTime()){
+                                fEdate = edate;
+                            }
+
+                        }else{
+                            //保单的开始日期在结束日期之后,需要先计算前一段的日期差值加到保障天数
+                            if(i!=array.size()){
+                                guaranteeDay+=DateUtils.getDateDifDay(fEdate,fSdate);
+                                fSdate = sdate;
+                                fEdate = edate;
+                            }
+                        }
+                        if(i==(array.size()-1)){
+                            guaranteeDay+=DateUtils.getDateDifDay(fEdate,fSdate);
+                        }
+                    }
+
                 }
             }