package com.dgtis.data.api; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.dgtis.common.core.utils.DateUtils; import com.dgtis.common.core.utils.StringUtils; import com.dgtis.common.core.utils.poi.ExcelUtil; import com.dgtis.common.core.web.domain.AjaxResult; import com.dgtis.common.security.utils.SecurityUtils; import com.dgtis.data.domain.Customer; import org.apache.http.HttpEntity; import org.apache.http.entity.ContentType; import org.apache.http.nio.entity.NStringEntity; import org.apache.http.util.EntityUtils; import org.elasticsearch.client.Request; import org.elasticsearch.client.Response; import org.elasticsearch.client.RestClient; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.text.DecimalFormat; import java.util.*; /** * @description:客户信息列表api * @author:qxm * @date:2021/1/22 10:24 */ @Controller @RequestMapping("/customer") public class CustomerApiController { private static Logger logger = LoggerFactory.getLogger(CustomerApiController.class); @Autowired private RestClient restClient; @GetMapping("/getCustomerList") @ResponseBody public AjaxResult getCustomerList(@RequestParam(defaultValue = "1") int pageNum,@RequestParam(defaultValue = "10") int pageSize, String education,//学历 String policybelong,//业绩归属 String payS,String payE, //年缴费区间 String fadate,//投保年份 String productname,//险种类别 String insuredAmountS,String insuredAmountE,//保额区间 String ageS,String ageE,//年龄区间 String gender,//性别 String sobirth,//省份 String NOVPolicy,//保单件数 String custtype,//客户类型 投保人 String SCustID,// 核心客户号 String custclass,//客户等级 String participantsDateS,String participantsDateE,//参与方时间 String PIncomeS,String PIncomeE,//年收入区间 String Insured,//投保对象 String lp,//理赔 String yx,//有效 String gzgw,//关注官微 String zcgw//注册官微 ) { try { logger.info("进客户列表时间:"+DateUtils.getTime()); Long userId = SecurityUtils.getUserId(); /*SysUser sysUser = userService.selectUserById(userId); String deptCode = sysUser.getDept().getDeptCode();*/ //1.如果存在保单信息的查询条件,需要先查询保单信息然后通过保单关联出客户信息 //处理保单查询条件 List customerIds = new ArrayList(); if(StringUtils.isNotEmpty(policybelong) || StringUtils.isNotEmpty(payS) || StringUtils.isNotEmpty(payE) || StringUtils.isNotEmpty(insuredAmountS) || StringUtils.isNotEmpty(insuredAmountE) || StringUtils.isNotEmpty(productname) || StringUtils.isNotEmpty(fadate)){ customerIds = queryInsurancearrangement(policybelong,payS,payE,fadate,productname,insuredAmountS,insuredAmountE); } //2.如果没有客户信息以外的查询条件,只需要查询客户信息 // 获取索引的别名,字段,创建时间 String beginBirthDay = ""; String endBirthDay = ""; if(StringUtils.isNotEmpty(ageS)){ String year = DateUtils.getYYYY(); int bYear = Integer.parseInt(year)-Integer.parseInt(ageS); endBirthDay = bYear+"-"+DateUtils.getMMDD(); } if(StringUtils.isNotEmpty(ageE)){ String year = DateUtils.getYYYY(); int bYear = Integer.parseInt(year)-Integer.parseInt(ageE); beginBirthDay = bYear+"-"+DateUtils.getMMDD(); } //拼装查询条件 StringBuilder builder =new StringBuilder(); builder.append("{"); builder.append("\"query\":{");//query开始 builder.append("\"bool\":{");//boot开始 builder.append("\"must\":[");//must开始 //业绩归属字段 /*if(StringUtils.isNotEmpty(deptCode)){ builder.append("{\"prefix\":{\"policybelong\":"+deptCode+"}},"); }*/ if(StringUtils.isNotEmpty(gender)){ builder.append("{\"prefix\":{\"gender\":"+gender+"}},"); } if(StringUtils.isNotEmpty(NOVPolicy)){ builder.append("{\"prefix\":{\"label25\":\""+NOVPolicy+"\"}},"); } if(StringUtils.isNotEmpty(custclass)){ builder.append("{\"term\":{\"custclass\":\""+custclass+"\"}},"); } if(StringUtils.isNotEmpty(sobirth)){ builder.append("{\"wildcard\":{\"sobirth\":\"*"+sobirth+"*\"}},");//模糊匹配 } if(StringUtils.isNotEmpty(SCustID)){ builder.append("{\"wildcard\":{\"scustid\":\"*"+SCustID+"*\"}},");//模糊匹配 } if(StringUtils.isNotEmpty(custtype)){ builder.append("{\"wildcard\":{\"custtype\":\"*"+custtype+"*\"}},"); } if(StringUtils.isNotEmpty(beginBirthDay) && StringUtils.isNotEmpty(endBirthDay)){ builder.append("{\"range\":{\"birthday\":{\"gte\":\""+beginBirthDay+"\",\"lte\":\""+endBirthDay+"\"}}},"); }else{ if(StringUtils.isNotEmpty(beginBirthDay)){ builder.append("{\"range\":{\"birthday\":{\"gte\":\""+beginBirthDay+"\"}}},"); } if(StringUtils.isNotEmpty(endBirthDay)){ builder.append("{\"range\":{\"birthday\":{\"lte\":\""+endBirthDay+"\"}}},"); } } if(StringUtils.isNotEmpty(PIncomeS) && StringUtils.isNotEmpty(PIncomeE)){ builder.append("{\"range\":{\"pincome\":{\"gte\":\""+PIncomeS+"\",\"lte\":\""+PIncomeE+"\"}}},"); }else{ if(StringUtils.isNotEmpty(PIncomeS)){ builder.append("{\"range\":{\"pincome\":{\"gte\":\""+PIncomeS+"\"}}},"); } if(StringUtils.isNotEmpty(PIncomeE)){ builder.append("{\"range\":{\"pincome\":{\"lte\":\""+PIncomeE+"\"}}},"); } } if(StringUtils.isNotEmpty(yx)){ if (yx.equals("0")){ builder.append("{\"range\":{\"novpolicy\":{\"gt\":\""+yx+"\"}}},"); }else { builder.append("{\"prefix\":{\"label91\":\"失效客户\"}},"); } } if(StringUtils.isNotEmpty(education)){ String[] edus = education.split("&"); builder.append("{\"terms\":{\"education\":["); for (String edu:edus) { builder.append("\""+edu+"\","); } builder.delete(builder.length()-1,builder.length()); builder.append ("]}},"); } if(customerIds.size()>0){ builder.append("{\"terms\":{\"scustid\":["); for (String id:customerIds) { builder.append("\""+id+"\","); } builder.delete(builder.length()-1,builder.length()); builder.append ("]}},"); } if(StringUtils.isNotEmpty(gzgw) && "0".equals(gzgw)){ builder.append("{\"prefix\":{\"label73\":\"关注官微\"}},"); } if(StringUtils.isNotEmpty(zcgw) && "0".equals(zcgw)){ builder.append("{\"prefix\":{\"label74\":\"注册官微\"}},"); } if(StringUtils.isNotEmpty(lp) && "0".equals(lp)){ builder.append("{\"prefix\":{\"label57\":\"最近一次理赔类型\"}},"); } if(StringUtils.isNotEmpty(gender) || StringUtils.isNotEmpty(NOVPolicy) || StringUtils.isNotEmpty(custtype) || StringUtils.isNotEmpty(custclass) || StringUtils.isNotEmpty(sobirth) || StringUtils.isNotEmpty(SCustID) || StringUtils.isNotEmpty(beginBirthDay) || StringUtils.isNotEmpty(endBirthDay) || StringUtils.isNotEmpty(education) || StringUtils.isNotEmpty(PIncomeS) || StringUtils.isNotEmpty(PIncomeE) || (StringUtils.isNotEmpty(gzgw) && "0".equals(gzgw)) || (StringUtils.isNotEmpty(zcgw) && "0".equals(zcgw)) || StringUtils.isNotEmpty(yx) || (StringUtils.isNotEmpty(lp) && "0".equals(lp) || //StringUtils.isNotEmpty(deptCode) || customerIds.size()>0)){ builder.delete(builder.length()-1,builder.length()); } builder.append("],");//must结束 builder.append("\"must_not\":[");//must_not if(StringUtils.isNotEmpty(gzgw) && "1".equals(gzgw)){ builder.append("{\"prefix\":{\"label73\":\"关注官微\"}},"); } if(StringUtils.isNotEmpty(zcgw) && "1".equals(zcgw)){ builder.append("{\"prefix\":{\"label74\":\"注册官微\"}},"); } if(StringUtils.isNotEmpty(lp) && "1".equals(lp)){ builder.append("{\"prefix\":{\"label57\":\"最近一次理赔类型\"}},"); } if( (StringUtils.isNotEmpty(gzgw) && "1".equals(gzgw)) || (StringUtils.isNotEmpty(zcgw) && "1".equals(zcgw)) || (StringUtils.isNotEmpty(lp) && "1".equals(lp)) ){ builder.delete(builder.length()-1,builder.length()); } builder.append("],"); builder.append("\"should\":[]");//should builder.append("}");//boot结束 builder.append("},");//query结束 builder.append("\"from\":"+((pageNum-1)*10)+",");//第几页 builder.append("\"size\":"+pageSize+",");//查询几个 builder.append("\"sort\":[{\"created_time\":{\"order\":\"desc\"}}],");//排序 builder.append("\"aggs\":{}");// builder.append("}"); HttpEntity entity = new NStringEntity(builder.toString(), ContentType.APPLICATION_JSON); Request scriptRequest = new Request("GET", "/shanglifeecif.individual/_search?pretty=true&sort=scustid:asc"); // Request scriptRequest = new Request("GET", "/shanglifeecif.individual/_search?q=%22{%22query%22:{%22bool%22:{%22must%22:[],%22must_not%22:[],%22should%22:[]}},%22from%22:11,%22size%22:10,%22sort%22:[{%22created_time%22:{%22order%22:%22desc%22}}],%22aggs%22:{}}%22"); scriptRequest.setEntity(entity); Response response = restClient.performRequest(scriptRequest); // Response response= restClient.performRequest("GET", "/shanglifeecif.individual/_search",Collections.emptyMap(),entity); String result = EntityUtils.toString(response.getEntity()); JSONObject jsonObject = JSON.parseObject(result); JSONObject hitsobject = (JSONObject) jsonObject.get("hits"); JSONArray array = JSON.parseArray(hitsobject.get("hits").toString()); List listMap = new ArrayList<>(); Map map = new HashMap(); for (int i = 0; i customerIds = new ArrayList(); //拼装查询条件 StringBuilder builder =new StringBuilder(); builder.append("{"); builder.append("\"query\": {");//query开始 builder.append("\"bool\": {");//boot开始 builder.append("\"must\": [");//must开始 if(StringUtils.isNotEmpty(policybelong)){ builder.append("{\"prefix\": { \"policybelong\": \""+policybelong+"\"}},"); } if(StringUtils.isNotEmpty(fadate)){ builder.append("{\"prefix\": { \"padate\": \""+fadate+"\"}},"); } if(StringUtils.isNotEmpty(productname)){ builder.append("{\"prefix\": { \"risk_categories\": \""+productname+"\"}},"); } if(StringUtils.isNotEmpty(payS) && StringUtils.isNotEmpty(payE)){ builder.append("{\"range\":{\"prem\":{\"gt\":\""+payS+"\",\"lt\":\""+payE+"\"}}},"); }else{ if(StringUtils.isNotEmpty(payS)){ builder.append("{\"range\":{\"prem\":{\"gt\":\""+payS+"\"}}},"); } if(StringUtils.isNotEmpty(payE)){ builder.append("{\"range\":{\"prem\":{\"lt\":\""+payE+"\"}}},"); } } if(StringUtils.isNotEmpty(insuredAmountS) && StringUtils.isNotEmpty(insuredAmountE)){ builder.append("{\"range\":{\"Risk\":{\"gt\":\""+insuredAmountS+"\",\"lt\":\""+insuredAmountE+"\"}}},"); }else{ if(StringUtils.isNotEmpty(payS)){ builder.append("{\"range\":{\"Risk\":{\"gt\":\""+insuredAmountS+"\"}}},"); } if(StringUtils.isNotEmpty(payE)){ builder.append("{\"range\":{\"Risk\":{\"lt\":\""+insuredAmountE+"\"}}},"); } } if(StringUtils.isNotEmpty(policybelong) || StringUtils.isNotEmpty(payS) || StringUtils.isNotEmpty(payE) || StringUtils.isNotEmpty(insuredAmountS) || StringUtils.isNotEmpty(insuredAmountE) || StringUtils.isNotEmpty(productname) || StringUtils.isNotEmpty(fadate) ){ builder.delete(builder.length()-1,builder.length()); } builder.append("],");//must结束 builder.append("\"must_not\": [ ],");//must_not builder.append("\"should\": [ ]");//should builder.append("}");//boot结束 builder.append("},");//query结束 //builder.append("\"from\": "+pageNum+",");//第几页 builder.append("\"size\": 1000,");//查询几个 //builder.append(" \"sort\": [{\"created_time\":{\"order\":\"desc\"}}],");//排序 builder.append(" \"aggs\": {}");// builder.append("}"); HttpEntity entity = new NStringEntity(builder.toString(), ContentType.APPLICATION_JSON); Request scriptRequest = new Request("GET", "/shanglifeecif.insurancearrangement/_search?scroll=1m"); scriptRequest.setEntity(entity); Response response = restClient.performRequest(scriptRequest); // Response response= restClient.performRequest("GET", "/shanglifeecif.insurancearrangement/_search?scroll=1m",Collections.emptyMap(),entity); String result = EntityUtils.toString(response.getEntity()); JSONObject jsonObject = JSON.parseObject(result); JSONObject hitsobject = (JSONObject) jsonObject.get("hits"); JSONArray hitsList = JSON.parseArray(hitsobject.get("hits").toString()); String scroll_id = jsonObject.getString("_scroll_id"); JSONObject obj = new JSONObject(); obj.put("scroll_id",scroll_id); obj.put("scroll","1m"); if (hitsList.size() != 0) { // 这里填写你的业务逻辑,即对每一条数据的处理 for (int i = 0; i customerIds = new ArrayList(); //拼装查询条件 StringBuilder builder =new StringBuilder(); builder.append("{"); builder.append("\"query\": {");//query开始 builder.append("\"bool\": {");//boot开始 builder.append("\"must\": [");//must开始 builder.append("],");//must结束 builder.append("\"must_not\": [ ],");//must_not builder.append("\"should\": [ ]");//should builder.append("}");//boot结束 builder.append("},");//query结束 //builder.append("\"from\": "+pageNum+",");//第几页 builder.append("\"size\": 1000,");//查询几个 //builder.append(" \"sort\": [{\"created_time\":{\"order\":\"desc\"}}],");//排序 builder.append(" \"aggs\": {}");// builder.append("}"); HttpEntity entity = new NStringEntity(builder.toString(), ContentType.APPLICATION_JSON); Request scriptRequest = new Request("GET", "/shanglifeecif.insuranceclaimthread/_search?scroll=1m"); scriptRequest.setEntity(entity); Response response = restClient.performRequest(scriptRequest); // Response response= restClient.performRequest("GET", "/shanglifeecif.insurancearrangement/_search?scroll=1m",Collections.emptyMap(),entity); String result = EntityUtils.toString(response.getEntity()); JSONObject jsonObject = JSON.parseObject(result); JSONObject hitsobject = (JSONObject) jsonObject.get("hits"); JSONArray hitsList = JSON.parseArray(hitsobject.get("hits").toString()); String scroll_id = jsonObject.getString("_scroll_id"); JSONObject obj = new JSONObject(); obj.put("scroll_id",scroll_id); obj.put("scroll","1m"); if (hitsList.size() != 0) { // 这里填写你的业务逻辑,即对每一条数据的处理 for (int i = 0; i paramMap = new HashMap(); paramMap.put("pretty", "true"); Request scriptRequest = new Request("GET", "/shanglifeecif.individual/default_type_/"+id+"?pretty=true"); Response response = restClient.performRequest(scriptRequest); // Response response = restClient.performRequest("GET", "/shanglifeecif.individual/default_type_/"+id, paramMap); String result = EntityUtils.toString(response.getEntity()); Map map = new HashMap(); JSONObject jsonObject = JSON.parseObject(result); Map mpInfo = new HashMap(); String indid = jsonObject.getString("_id"); mpInfo.put("id",indid); JSONObject source = JSON.parseObject(jsonObject.getString("_source")); String scustid = source.getString("scustid"); mpInfo.putAll(JSON.parseObject(jsonObject.getString("_source"),Map.class)); //mpInfo.put("birthday",DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss",JSON.parseObject(jsonObject.getString("_source")).getDate("birthday"))); if(mpInfo.containsKey("birthday")){ mpInfo.put("birthday", source.getString("birthday").substring(0,10)); mpInfo.put("age",DateUtils.getAge(DateUtils.dateTime(DateUtils.YYYY_MM_DD_HH_MM_SS,source.getString("birthday")))); }else{ mpInfo.put("birthday",""); mpInfo.put("age",""); } map.put("custInfo",mpInfo); Map query =new HashMap(); query.put("indid1",indid); scriptRequest = new Request("GET", "/shanglifeecif.indrelationship/_search?pretty=true&q=indid1:"+indid); response = restClient.performRequest(scriptRequest); result = EntityUtils.toString(response.getEntity()); jsonObject = JSON.parseObject(result); JSONObject hitsobject = (JSONObject) jsonObject.get("hits"); JSONArray array = JSON.parseArray(hitsobject.get("hits").toString()); List relationship = new ArrayList<>(); for (int i = 0; i emptyMap(),entity); result = EntityUtils.toString(response.getEntity()); jsonObject = JSON.parseObject(result); hitsobject = (JSONObject) jsonObject.get("hits"); array = JSON.parseArray(hitsobject.get("hits").toString()); List insuranceclaimthread = new ArrayList<>(); for (int i = 0; i (); for (int i = 0; i (); for (int i = 0; i paramMap = new HashMap(); paramMap.put("pretty", "true"); Request scriptRequest = new Request("GET", "shanglifeecif.individual/default_type_/"+id+"?pretty=true"); Response response = restClient.performRequest(scriptRequest); String result = EntityUtils.toString(response.getEntity()); Map map = new HashMap(); JSONObject jsonObject = JSON.parseObject(result); Map mpInfo = new HashMap(); String indid = jsonObject.getString("_id"); mpInfo.put("id",indid); JSONObject source = JSON.parseObject(jsonObject.getString("_source")); String scustid = source.getString("scustid"); mpInfo.putAll(JSON.parseObject(jsonObject.getString("_source"),Map.class)); if(mpInfo.containsKey("birthday")){ mpInfo.put("birthday", source.getString("birthday").substring(0,10)); mpInfo.put("age",DateUtils.getAge(DateUtils.dateTime(DateUtils.YYYY_MM_DD_HH_MM_SS,source.getString("birthday")))); }else{ mpInfo.put("birthday",""); mpInfo.put("age",""); } scriptRequest = new Request("GET", "/shanglifeecif.insurancearrangement/_search?pretty=true&sort=padate:asc&q=applicantscustid:"+scustid); response = restClient.performRequest(scriptRequest); result = EntityUtils.toString(response.getEntity()); jsonObject = JSON.parseObject(result); JSONObject hitsobject = (JSONObject) jsonObject.get("hits"); JSONArray array = JSON.parseArray(hitsobject.get("hits").toString()); DecimalFormat df = new DecimalFormat("######0.00");//保留两位小数 double prem = 0;//标准保费 //概览投保时间和保费折线图 Map expectedData = new HashMap(); String[] edata = new String[]{"0","0","0","0","0","0","0","0","0","0","0","0"}; expectedData.put("name",""); Map actaulData = new HashMap(); String[] adata = new String[]{"0","0","0","0","0","0","0","0","0","0","0","0"}; actaulData.put("name",""); List xaxisData = new ArrayList(); xaxisData.add("1"); xaxisData.add("2"); xaxisData.add("3"); xaxisData.add("4"); xaxisData.add("5"); xaxisData.add("6"); xaxisData.add("7"); xaxisData.add("8"); xaxisData.add("9"); xaxisData.add("10"); xaxisData.add("11"); xaxisData.add("12"); long insureDay = 0;//投保时长 int guaranteeDay = 0;//享受保障天数 Map majorCategorie = new HashMap(); Map mpremMap = new HashMap(); for (int i = 0; i (); double claimAmount = 0;//理赔总金额 String claimType = "";//理赔类型 for (int i = 0; i 0?"是":"否"); insuranceclaimthread.put("claimAmount",df.format(claimAmount)); insuranceclaimthread.put("claimType",claimType); map.put("insuranceclaimthread",insuranceclaimthread); mpInfo.put("prem",df.format(prem)); mpInfo.put("insureDay",insureDay); mpInfo.put("guaranteeDay",guaranteeDay>insureDay?insureDay:guaranteeDay); map.put("custInfo",mpInfo); map.put("majorCategorie",majorCategorie); logger.info("出客户概览时间:"+DateUtils.getTime()); return AjaxResult.success(map); } catch (Exception e) { logger.info("客户概览报错时间:"+DateUtils.getTime()); e.printStackTrace(); return AjaxResult.error(); } } @PostMapping("/export") public void export(HttpServletResponse response) throws Exception { //拼装查询条件 StringBuilder builder =new StringBuilder(); builder.append("{"); builder.append("\"query\":{");//query开始 builder.append("\"bool\":{");//boot开始 builder.append("\"must\":[");//must开始 //业绩归属字段 /*if(StringUtils.isNotEmpty(deptCode)){ builder.append("{\"prefix\":{\"policybelong\":"+deptCode+"}},"); }*/ builder.append("],");//must结束 builder.append("\"must_not\":[");//must_not builder.append("],"); builder.append("\"should\":[]");//should builder.append("}");//boot结束 builder.append("},");//query结束 // builder.append("\"from\":"+((pageNum-1)*10)+",");//第几页 //builder.append("\"size\":"+100+",");//查询几个 builder.append("\"sort\":[{\"scustid\":{\"order\":\"asc\"}}],");//排序 builder.append("\"aggs\":{}");// builder.append("}"); HttpEntity entity = new NStringEntity(builder.toString(), ContentType.APPLICATION_JSON); Request scriptRequest = new Request("GET", "/shanglifeecif.individual/_search?size=1000&pretty=true"); scriptRequest.setEntity(entity); Response responseData = restClient.performRequest(scriptRequest); String result = EntityUtils.toString(responseData.getEntity()); JSONObject jsonObject = JSON.parseObject(result); JSONObject hitsobject = (JSONObject) jsonObject.get("hits"); JSONArray array = JSON.parseArray(hitsobject.get("hits").toString()); List customers = new ArrayList(); for (int i = 0; i util = new ExcelUtil(Customer.class); util.exportExcel(response, customers, "客户数据"); } }