| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984 |
- 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.CsvUtil;
- 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 com.dgtis.data.service.ISysUserService;
- import com.dgtis.data.util.AddressResolutionUtil;
- import com.dgtis.system.api.domain.SysUser;
- import com.mysql.cj.x.protobuf.MysqlxDatatypes;
- 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.beans.factory.annotation.Value;
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.*;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import java.io.IOException;
- import java.text.DecimalFormat;
- import java.text.ParseException;
- import java.text.SimpleDateFormat;
- import java.util.*;
- /**
- * @description:客户信息列表api
- * @author:qxm
- * @date:2021/1/22 10:24
- */
- @Controller
- @RequestMapping("/customer")
- public class CustomerApiController {
- /**
- * SHOW_ALL_LABLES 不分渠道展示所有标签 总部团险展示所有标签
- * HIDE_CHANNELS_LABLES 有不同渠道保单情况下 分渠道标签全不显示 仅显示公共标签 , 总部团险展示所有标签
- * SHOW_DISTINGUISH_CHANNELS_LABLES 分渠道展示标签, 总部团险展示所有标签
- */
- @Value("${dgtis.show-label-code}")
- private String showLabelCode = "SHOW_ALL_LABLES";
- private static Logger logger = LoggerFactory.getLogger(CustomerApiController.class);
- @Autowired
- private RestClient restClient;
- @Autowired
- private ISysUserService userService;
- @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,//注册官微
- String name,//客户姓名
- String idcard,//客户证件号码
- String mobile//客户手机号
- ) {
- try {
- logger.info("进客户列表时间:"+DateUtils.getTime());
- JSONObject jsonObject = getCustomerListData((pageNum - 1) * 10, pageSize, true, null,
- education,//学历
- policybelong,//业绩归属
- payS, payE, //年缴费区间
- fadate,//投保年份
- productname,//险种类别
- insuredAmountS, insuredAmountE,//保额区间
- ageS, ageE,//年龄区间
- gender,//性别
- sobirth,//省份
- NOVPolicy,//保单件数
- custtype,//客户类型 投保人
- SCustID,// 核心客户号
- custclass,//客户等级
- participantsDateS, participantsDateE,//参与方时间
- PIncomeS, PIncomeE,//年收入区间
- Insured,//投保对象
- lp,//理赔
- yx,//有效
- gzgw,//关注官微
- zcgw,//注册官微
- name,//客户姓名
- idcard,//客户证件号码
- mobile//客户手机号
- );
- 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 <array.size() ; i++) {
- JSONObject json = (JSONObject)array.get(i);
- Map mp = getSource(json);
- listMap.add(mp);
- }
- long total = hitsobject.getLong("total");
- map.put("list",listMap);
- map.put("total",total);
- logger.info("出客户列表时间:"+DateUtils.getTime());
- return AjaxResult.success(map);
- } catch (Exception e) {
- logger.info("列表报错时间:"+DateUtils.getTime());
- e.printStackTrace();
- return AjaxResult.error();
- }
- }
- /**
- * 将hit._source转换成map形式,并在map中添加id字段
- * @param hit hit JSONObject
- * @return
- */
- private Map getSource(JSONObject hit) {
- String idKey = "indid";
- Map mp = JSON.parseObject(hit.getString("_source"), Map.class);
- if (mp.containsKey(idKey)) {
- // 查shanglifeecif.customerno_salecom_relation表id是indid
- mp.put("id", mp.get(idKey));
- } else {
- // 查shanglifeecif.individual表id是_id
- mp.put("id", hit.getString("_id"));
- }
- Object birthday = mp.get("birthday");
- if(birthday != null){
- try {
- mp.put("age",DateUtils.getAge(DateUtils.dateTime(DateUtils.YYYY_MM_DD, birthday.toString())));
- } catch (Exception e) {
- logger.warn(String.format("Failed to calendar age, birthday is [%s], birthday and age reset to empty.", birthday));
- mp.put("birthda", "");
- mp.put("age", "");
- }
- }else{
- mp.put("birthday", "");
- mp.put("age","");
- }
- return mp;
- }
- @GetMapping("/getCustomerById")
- @ResponseBody
- public AjaxResult getCustomerById(String id) {
- // 获取索引的别名,字段,创建时间http://10.32.2.231:9200/shanglifeecif.individual/default_type_/1
- try {
- Long userId = SecurityUtils.getUserId();
- SysUser sysUser = userService.selectUserById(userId);
- String deptCode = "";
- // “上海人寿”部门编号开发环境是null,生产环境是0。不是上海人寿部门的才分渠道
- if(StringUtils.isNotEmpty( sysUser.getDept().getDeptCode()) && ! "0".equals(sysUser.getDept().getDeptCode())){
- deptCode = sysUser.getDept().getDeptCode();
- }
- logger.info("进客户详情时间:"+DateUtils.getTime());
- Map<String, String> paramMap = new HashMap<String, String>();
- 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);
- JSONObject source = JSON.parseObject(jsonObject.getString("_source"));
- String indid = jsonObject.getString("_id");
- String custtype = source.getString("custtype");
- String scustid = source.getString("scustid");
- Map mpInfo = getLables(jsonObject, deptCode);
- map.put("custInfo",mpInfo);
- Map query =new HashMap();
- query.put("indid1",indid);
- // 2022/5/13 陆光晨 关系信息分渠道查询
- String lpqSearch = "indid1:"+ scustid;
- if( StringUtils.isNotEmpty(deptCode)){
- lpqSearch += "%20AND%20salecom:"+deptCode;
- }
- scriptRequest = new Request("GET", "/shanglifeecif.indrelationship/_search?pretty=true&q="+ lpqSearch);
- 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());
- Set<Map<String, String>> relationship = new HashSet<>();
- for (int i = 0; i <array.size() ; i++) {
- JSONObject json = (JSONObject)array.get(i);
- JSONObject shipSource = JSON.parseObject(json.getString("_source"));
- if (shipSource.containsKey("rstype")
- && shipSource.containsKey("indid1")
- && shipSource.containsKey("name1")
- && shipSource.containsKey("role1")
- && shipSource.containsKey("indid2")
- && shipSource.containsKey("name2")
- && shipSource.containsKey("role2")) {
- Map<String, String> mp = new HashMap<>(8);
- mp.put("rstype", shipSource.getString("rstype"));
- mp.put("indid1", shipSource.getString("indid1"));
- mp.put("name1", shipSource.getString("name1"));
- mp.put("role1", shipSource.getString("role1"));
- mp.put("indid2", shipSource.getString("indid2"));
- mp.put("name2", shipSource.getString("name2"));
- mp.put("role2", shipSource.getString("role2"));
- relationship.add(mp);
- }
- }
- map.put("relationship",relationship);
- query =new HashMap();
- query.put("applicantid",indid);
- //理赔查询
- lpqSearch = "lpscutid:"+scustid;
- if( StringUtils.isNotEmpty(deptCode)){
- lpqSearch = "(lpscutid:"+scustid+"%20AND%20salecom:"+deptCode+")";
- }
- scriptRequest = new Request("GET", "/shanglifeecif.insuranceclaimthread/_search?size=100&pretty=true&q="+lpqSearch);
- 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());
- List insuranceclaimthread = new ArrayList<>();
- for (int i = 0; i <array.size() ; i++) {
- JSONObject json = (JSONObject)array.get(i);
- Map mp = new HashMap();
- mp.put("id",json.getString("_id"));
- mp.putAll(JSON.parseObject(json.getString("_source"),Map.class));
- insuranceclaimthread.add(mp);
- }
- map.put("insuranceclaimthread",insuranceclaimthread);
- //合约信息
- logger.info("合约信息 投保人被保人类型:"+custtype);
- // if(custtype.trim().indexOf("被保人")!=-1){
- // String qSearch = "insuredscustid:"+scustid;
- // if( StringUtils.isNotEmpty(deptCode)){
- // qSearch = "(insuredscustid:"+scustid+"%20AND%20policybelong:"+deptCode+")";
- // }
- // scriptRequest = new Request("GET", "/shanglifeecif.insurancearrangement/_search?size=100&pretty=true&sort=padate:asc&q="+qSearch);
- // }else{
- // String qSearch = "applicantscustid:"+scustid;
- // if( StringUtils.isNotEmpty(deptCode)){
- // qSearch = "(applicantscustid:"+scustid+"%20AND%20policybelong:"+deptCode+")";
- // }
- // scriptRequest = new Request("GET", "/shanglifeecif.insurancearrangement/_search?size=100&pretty=true&sort=padate:asc&q="+qSearch);
- // }
- //20230426曹老师要求合约查询保险人和被保险人 都查询出合约列表
- String qSearch = "(applicantscustid:"+scustid+"%20OR%20insuredscustid:"+scustid+")";
- if( StringUtils.isNotEmpty(deptCode)){
- qSearch = "(applicantscustid:"+scustid+"%20OR%20insuredscustid:"+scustid+")"+"%20AND%20policybelong:"+deptCode+"";
- }
- scriptRequest = new Request("GET", "/shanglifeecif.insurancearrangement/_search?size=100&pretty=true&sort=padate:asc&q="+qSearch);
- logger.info("合约信息请求参数"+scriptRequest.getEndpoint());
- 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());
- List insurancearrangement = new ArrayList<>();
- for (int i = 0; i <array.size() ; i++) {
- JSONObject json = (JSONObject)array.get(i);
- Map mp = new HashMap();
- mp.put("id",json.getString("_id"));
- mp.putAll(JSON.parseObject(json.getString("_source"),Map.class));
- insurancearrangement.add(mp);
- }
- map.put("insurancearrangement",insurancearrangement);
- //接触信息添加渠道条件
- //接触信息
- String jcqSearch = "partyid:"+scustid;
- if( StringUtils.isNotEmpty(deptCode)){
- jcqSearch = "(partyid:"+scustid+"%20AND%20salecom:"+deptCode+")";
- }
- scriptRequest = new Request("GET", "/shanglifeecif.partytimeline/_search?size=100&pretty=true&sort=sdate:asc&q="+jcqSearch);
- logger.info("接触信息请求参数:",scriptRequest.getEndpoint());
- 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());
- List partytimeline = new ArrayList<>();
- for (int i = 0; i <array.size() ; i++) {
- JSONObject json = (JSONObject)array.get(i);
- Map mp = new HashMap();
- mp.put("id",json.getString("_id"));
- mp.putAll(JSON.parseObject(json.getString("_source"),Map.class));
- partytimeline.add(mp);
- }
- map.put("partytimeline",partytimeline);
- logger.info(scriptRequest.getEndpoint());
- logger.info("出客户详情时间:"+DateUtils.getTime());
- return AjaxResult.success(map);
- } catch (Exception e) {
- logger.info("客户详情报错时间:"+DateUtils.getTime());
- e.printStackTrace();
- return AjaxResult.error();
- }
- }
- @GetMapping("/getCustomerOverViewById")
- @ResponseBody
- public AjaxResult getCustomerOverViewById(String id) {
- Long userId = SecurityUtils.getUserId();
- SysUser sysUser = userService.selectUserById(userId);
- String deptCode = null;
- // “上海人寿” 部门编号开发环境是null,生产环境是0。不是上海人寿部门的才分渠道
- if (StringUtils.isNotEmpty(sysUser.getDept().getDeptCode()) && ! "0".equals(sysUser.getDept().getDeptCode())) {
- deptCode = sysUser.getDept().getDeptCode();
- }
- // 获取索引的别名,字段,创建时间http://10.32.2.231:9200/shanglifeecif.individual/default_type_/1
- try {
- logger.info("进客户概览时间:"+DateUtils.getTime());
- 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);
- JSONObject source = JSON.parseObject(jsonObject.getString("_source"));
- String scustid = source.getString("scustid");
- Map mpInfo = getLables(jsonObject, deptCode);
- String jcqSearch = "applicantscustid:"+scustid;
- if( StringUtils.isNotEmpty(deptCode)){
- jcqSearch = "(applicantscustid:"+scustid+"%20AND%20policybelong:"+deptCode+")";
- }
- scriptRequest = new Request("GET", "/shanglifeecif.insurancearrangement/_search?size=100&pretty=true&sort=padate:asc&q="+jcqSearch);
- logger.info("insurancearrangement",scriptRequest.getEndpoint());
- 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.0");//保留两位小数改为保留一位小数
- double prem = 0;//标准保费
- double sumprem = 0;//累计保费
- double handedinprem = 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<String,Object> majorCategorie = new HashMap();
- Map mpremMap = new HashMap();
- int firstDate = 1;//定义第一次长期险获取
- Date date = new Date();
- Calendar cal = Calendar.getInstance();
- cal.setTime(date);
- cal.add(Calendar.YEAR, 1);
- Date nextYearTime = cal.getTime();
- String currentDateTime = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD,date);
- String currentYear = DateUtils.parseDateToStr(DateUtils.YYYY,date);
- Set<String> noivpolicyset= new HashSet<>();//失效保单
- Set<String> novpolicyset= new HashSet<>();//有效保单
- //获取最近年份
- logger.info("getCustomerOverViewById",array.toJSONString());
- List<PolicyDate> policyDates = new ArrayList<>();
- final String contno = "policyno";
- final String startDate = "pindate";
- final String endDate = "pmdate";
- final String padateKey = "padate";
- final String agrmntageKey = "agrmntage";
- final String policystate = "policystate";
- for (int i = 0; i <array.size() ; i++) {
- JSONObject json = (JSONObject)array.get(i);
- JSONObject _source = (JSONObject) json.get("_source");
- if (_source.containsKey(contno)
- && _source.containsKey(startDate)
- && _source.containsKey(endDate)
- && _source.containsKey(padateKey)
- && _source.containsKey(agrmntageKey)
- && _source.containsKey(policystate)) {
- try {
- policyDates.add(new PolicyDate(
- _source.getString(contno)
- , _source.getDate(startDate)
- , _source.getDate(endDate)
- , _source.getDate(padateKey)
- , _source.getString(policystate)
- , _source.getInteger(agrmntageKey)));
- } catch (Exception e) {
- logger.warn(String.format(
- "Failed to instance PolicyDate, %s: [%s], %s: [%s], %s: [%s], %s: [%s], %s: [%s], %s: [%s]"
- , contno, _source.get(contno)
- , startDate, _source.get(startDate)
- , endDate, _source.get(endDate)
- , padateKey, _source.get(padateKey)
- , policystate, _source.get(policystate)
- , agrmntageKey, _source.get(agrmntageKey)));
- }
- } else {
- logger.info(String.format("Failed to instance PolicyDate, must be '%s', '%s', '%s', '%s', '%s', '%s', _source: [%s]"
- , contno, startDate, endDate, padateKey, policystate, agrmntageKey, _source.toJSONString()));
- }
- Date padate = _source.getDate("padate");
- if(i==0){
- insureDay = DateUtils.getDateDifDay(new Date(),padate);
- }
- if("有效".equals(_source.getString("policystate"))){
- novpolicyset.add(_source.getString("policyno"));
- if(_source.containsKey("sumprem")){
- sumprem+=_source.getDouble("sumprem");
- }
- /* 2022/5/31 start 陆光晨 享受保障天数放在后面计算
- Integer agrmntage = _source.getInteger("agrmntage");
- //短期险
- if(agrmntage<180){
- Date pindate = _source.getDate("pindate");//起保日期
- Date pmdate = _source.getDate("pmdate");//终保日期
- guaranteeDay+=DateUtils.getDateDifDay(pmdate,pindate);
- }else{
- //获取第一次长期险的投保日期,使用当前日期减去投保日期获取保障天数
- if(firstDate==1){
- guaranteeDay+=DateUtils.getDateDifDay(new Date(),padate);
- firstDate++;
- }
- }
- 2022/5/31 end 陆光晨 享受保障天数放在后面计算
- */
- if(_source.containsKey("prem")){
- //计算年缴保费过滤掉缴费方式趸缴的
- if(!"趸缴".equals(_source.getString("payment"))){
- String norenewal = _source.getString("norenewal")==null?"":_source.getString("norenewal").trim();//续保次数
- String payendyear = _source.getString("payendyear")==null?"":_source.getString("payendyear").trim();//缴费年期
- //String currentPadateStr = DateUtils.parseDateToStr(currentYear+"-MM-dd",padate);
- if(_source.containsKey("npdate")){
- Date npdate = _source.getDate("npdate");
- String npDateStr = DateUtils.parseDateToStr("yyyy-MM-dd", npdate);
- String npDateStrYear = DateUtils.parseDateToStr("yyyy", npdate);
- //缴费期限和缴费次数不一样 或者 当年缴费期限和缴费次数一样时
- if(!norenewal.equals(payendyear) || (norenewal.equals(payendyear) && (Integer.parseInt(npDateStrYear)-1)==Integer.parseInt(currentYear))){
- prem+=_source.getDouble("prem");
- if(norenewal.equals(payendyear) && nextYearTime.getTime()>npdate.getTime() && Integer.parseInt(npDateStrYear)>Integer.parseInt(currentYear)){
- handedinprem+=_source.getDouble("prem");
- }
- }
- if(!norenewal.equals(payendyear) && npDateStr.compareTo(currentDateTime)>0 && !npDateStrYear.equals(currentYear)){
- handedinprem+=_source.getDouble("prem");
- }
- }
- String m = DateUtils.parseDateToStr("M", padate);
- if(mpremMap.containsKey(m)){
- double tprem = Double.parseDouble(mpremMap.get(m).toString());
- tprem+=_source.getDouble("prem");
- mpremMap.put(m,df.format(tprem));
- edata[Integer.parseInt(m)-1] = df.format(tprem);
- adata[Integer.parseInt(m)-1] = df.format(tprem);
- }else{
- mpremMap.put(m,df.format(_source.getDouble("prem")));
- edata[Integer.parseInt(m)-1] = df.format(_source.getDouble("prem"));
- adata[Integer.parseInt(m)-1] = df.format(_source.getDouble("prem"));
- }
- }else{
- if("趸缴".equals(_source.getString("payment")) && currentYear.equals(DateUtils.parseDateToStr("yyyy",padate))){
- prem+=_source.getDouble("prem");
- handedinprem+=_source.getDouble("prem");
- }
- }
- }
- String risk_categories_name = _source.getString("risk_categories_name");
- if(majorCategorie.containsKey(risk_categories_name)){
- double risk = Double.parseDouble(majorCategorie.get(risk_categories_name).toString());
- if(_source.containsKey("risk")){
- risk += _source.getDouble("risk");
- }
- majorCategorie.put(risk_categories_name,risk);
- }else{
- if(_source.containsKey("risk") && StringUtils.isNotEmpty(risk_categories_name)){
- majorCategorie.put(risk_categories_name,_source.getDouble("risk"));
- }
- }
- }else{
- //客户的所有保单缴费期满且承保期限已满正常终止的客户,需要加上累计保费
- if("终止".equals(_source.getString("policystate"))){
- String norenewal = _source.getString("norenewal")==null?"":_source.getString("norenewal").trim();//续保次数
- String payendyear = _source.getString("payendyear")==null?"":_source.getString("payendyear").trim();//缴费年期
- Date pmdate = _source.getDate("pmdate");//终保日期
- /*
- 2022/5/13 陆光晨 一期测试环境测试时测试老师要求不计算终止状态的保单,因为页面上显示的是“有效保单累计保费”所以只统计有效的就好
- if(norenewal.equals(payendyear) && currentDateTime.compareTo(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD,pmdate))>0){
- if(_source.containsKey("sumprem")){
- sumprem+=_source.getDouble("sumprem");
- }
- }
- */
- Integer agrmntage = _source.getInteger("agrmntage");
- /*
- 2022/5/18 start 陆光晨 根据测试曹老师的要求,终止状态的保单计算保障天数是不需要控制短期险
- 缺陷描述:一期测试,使用健康险权限用户登录时,查看客户号1000573488的客户概览页,有一个终止状态的长期保单(正常到期)但享受保障天数是0
- 测试老师认为终止状态的保单也要算进保障天数中,不管是长期险还是短期险
- */
- //短期险
- // if(agrmntage<180){
- /* 2022/5/31 start 陆光晨 享受保障天数放在后面计算
- Date pindate = _source.getDate("pindate");//起保日期
- guaranteeDay+=DateUtils.getDateDifDay(pmdate,pindate);
- 2022/5/31 end 陆光晨 享受保障天数放在后面计算 */
- // }
- // 2022/5/18 end 陆光晨 根据测试曹老师的要求,终止状态的保单计算保障天数是不需要控制短期险
- }
- if (_source.getString("policystate") != null) {
- noivpolicyset.add(_source.getString("policyno"));
- }
- }
- }
- mpInfo.put("noivpolicy",noivpolicyset.size());
- mpInfo.put("novpolicy",novpolicyset.size());
- expectedData.put("data",edata);
- actaulData.put("data",adata);
- Map lineBarChartData = new HashMap();
- lineBarChartData.put("expectedData",expectedData);
- lineBarChartData.put("actaulData",actaulData);
- lineBarChartData.put("xaxisData",xaxisData);
- map.put("lineBarChartData",lineBarChartData);
- //查询理赔信息
- String lpqSearch = "lpscutid:"+scustid;
- if( StringUtils.isNotEmpty(deptCode)){
- lpqSearch = "(lpscutid:"+scustid+"%20AND%20salecom:"+deptCode+")";
- }
- scriptRequest = new Request("GET", "/shanglifeecif.insuranceclaimthread/_search?size=100&pretty=true&q="+lpqSearch);
- 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());
- Map insuranceclaimthread = new HashMap();
- List insuranceclaimthreads = new ArrayList<>();
- double claimAmount = 0;//理赔总金额
- Set<String> claimTypeSet = new HashSet<>();//理赔类型
- for (int i = 0; i <array.size() ; i++) {
- JSONObject json = (JSONObject)array.get(i);
- JSONObject claimSource = JSON.parseObject(json.getString("_source"));
- if(claimSource.containsKey("ccamt")){
- claimAmount+=claimSource.getDouble("ccamt");
- }
- claimTypeSet.add(claimSource.getString("accidenttype"));
- insuranceclaimthreads.add(claimSource);
- }
- insuranceclaimthread.put("isClaim",insuranceclaimthreads.size()>0?"是":"否");
- insuranceclaimthread.put("claimAmount",df.format(claimAmount));
- insuranceclaimthread.put("claimType",String.join(",",claimTypeSet));
- map.put("insuranceclaimthread",insuranceclaimthread);
- mpInfo.put("prem",df.format(prem));//年缴保费/应交保费
- mpInfo.put("sumprem",df.format(sumprem));//累计保费
- mpInfo.put("handedinprem",df.format(handedinprem));//已交保费
- mpInfo.put("insureDay",(insureDay/365) +"年"+(insureDay%365)+"天");
- //保障天数需要加上退保之前的天数
- String tbcustomerinfoSearch = "scustid:"+scustid;
- if( StringUtils.isNotEmpty(deptCode)){
- tbcustomerinfoSearch = "(scustid:"+scustid+"%20AND%20salecom:"+deptCode+")";
- }
- scriptRequest = new Request("GET", "/shanglifeecif.tbcustomerinfo/_search?pretty=true&sort=sdate:asc&size=100&q="+tbcustomerinfoSearch);
- 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());
- List<PolicyDate> cancelPolicyDates = new ArrayList<>();
- 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("contno") && tbSource.containsKey("sdate") && tbSource.containsKey("edate")) {
- try {
- cancelPolicyDates.add(new PolicyDate(tbSource.getString("contno"), tbSource.getDate("sdate"), tbSource.getDate("edate")));
- } catch (Exception e) {
- logger.warn(String.format(
- "Failed to instance PolicyDate, contno: [%s], sdate: [%s], edate: [%s]"
- , tbSource.get("contno"), tbSource.get("sdate"), tbSource.get("edate")));
- }
- } else {
- logger.info("Failed to instance PolicyDate, must be 'contno', 'sdate', 'edate', _source: "+ tbSource.toJSONString());
- }
- /** 2022/5/31 start 陆光晨 享受保障天数放在后面计算
- * 获取该退报客户的所有保单信息,计算天数退保天数加上有效保单的天数
- 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);
- }
- }
- }
- 2022/5/31 end 陆光晨 享受保障天数放在后面计算 */
- }
- guaranteeDay = guaranteeDay(policyDates, cancelPolicyDates); // 计算享受保障天数
- mpInfo.put("guaranteeDay",guaranteeDay>insureDay?insureDay+"天":guaranteeDay+"天");
- map.put("custInfo",mpInfo);
- //险种数据准备
- Map riskMap = new HashMap();
- riskMap.put("人寿保险","0");
- riskMap.put("新型寿险","0");
- riskMap.put("意外伤害保险","0");
- riskMap.put("医疗险","0");
- riskMap.put("重疾保险","0");
- riskMap.put("年金保险","0");
- for(String key : majorCategorie.keySet()){
- if(riskMap.containsKey(key)){
- riskMap.put(key,majorCategorie.get(key));
- }
- }
- map.put("majorCategorie",riskMap);
- logger.info("出客户概览时间:"+DateUtils.getTime());
- return AjaxResult.success(map);
- } catch (Exception e) {
- logger.info("客户概览报错时间:"+DateUtils.getTime());
- e.printStackTrace();
- return AjaxResult.error();
- }
- }
- @GetMapping("/export")
- public void export(HttpServletResponse response, HttpServletRequest request,
- 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,//注册官微
- String name,//客户姓名
- String idcard,//客户证件号码
- String mobile//客户手机号
- ) {
- try{
- logger.info("导出进时间:"+DateUtils.getTime());
- JSONObject jsonObject = getCustomerListData(0, 10000, false, "5m",
- education,//学历
- policybelong,//业绩归属
- payS, payE, //年缴费区间
- fadate,//投保年份
- productname,//险种类别
- insuredAmountS, insuredAmountE,//保额区间
- ageS, ageE,//年龄区间
- gender,//性别
- sobirth,//省份
- NOVPolicy,//保单件数
- custtype,//客户类型 投保人
- SCustID,// 核心客户号
- custclass,//客户等级
- participantsDateS, participantsDateE,//参与方时间
- PIncomeS, PIncomeE,//年收入区间
- Insured,//投保对象
- lp,//理赔
- yx,//有效
- gzgw,//关注官微
- zcgw,//注册官微
- name,//客户姓名
- idcard,//客户证件号码
- mobile//客户手机号
- );
- JSONObject hitsobject = (JSONObject) jsonObject.get("hits");
- JSONArray array = JSON.parseArray(hitsobject.get("hits").toString());
- List<Customer> customers = new ArrayList<Customer>();
- String scroll_id = jsonObject.getString("_scroll_id");
- HttpEntity entity = new NStringEntity("{\n" +
- " \"scroll_id\": \""+scroll_id+"\",\n" +
- " \"scroll\": \"5m\"\n" +
- "}", ContentType.APPLICATION_JSON);
- while (array.size() != 0) {
- // 这里填写你的业务逻辑,即对每一条数据的处理
- for (int i = 0; i <array.size() ; i++) {
- JSONObject json = (JSONObject)array.get(i);
- Map mp = getSource(json);
- Customer customer = new Customer();
- JSONObject jsonOb = JSON.parseObject(json.getString("_source"));
- customer.setScustId("\t"+jsonOb.getString("scustid"));
- customer.setCustId(jsonOb.getString("custid"));
- customer.setName(jsonOb.getString("name"));
- customer.setSex("0".equals(jsonOb.getString("gender"))?"男":"女");
- customer.setCustType(jsonOb.getString("custtype"));
- customer.setEducation(jsonOb.getString("education"));
- customer.setVaild(StringUtils.isEmpty(jsonOb.getString("label91"))?"有效":"无效");
- customer.setpIncome(jsonOb.getString("pincome"));
- customer.setNum(jsonOb.getString("label25"));
- String ral = jsonOb.getString("ral");
- if(StringUtils.isNotBlank(ral)){
- List<Map> list = AddressResolutionUtil.addressResolution(ral);
- if(list!=null && list.size()>0){
- customer.setProvince(list.get(0).get("province").toString());
- }
- }
- if(mp.containsKey("birthday")){
- String birthday = jsonOb.getString("birthday");
- mp.put("birthday", birthday);
- mp.put("age",DateUtils.getAge(DateUtils.dateTime(DateUtils.YYYY_MM_DD,birthday)));
- customer.setBirthDay("\t"+birthday);
- customer.setAge(DateUtils.getAge(DateUtils.dateTime(DateUtils.YYYY_MM_DD,birthday)));
- }
- //String regex = "(\\w{4})(\\w+)(\\w{0})";
- if(mp.containsKey("idcard")){
- customer.setIdType("身份证");
- String idCard = jsonOb.getString("idcard");
- //customer.setIdCard("\t"+jsonOb.getString("idcard").replaceAll(regex, "$1****$3"));
- if(idCard.length()>6){
- customer.setIdCard("\t"+idCard.replaceAll(idCard.substring(idCard.length()-6), "******"));
- }else{
- customer.setIdCard("\t"+"******");
- }
- }else if(mp.containsKey("passport")){
- customer.setIdType("护照");
- String passport = jsonOb.getString("passport");
- //customer.setIdCard("\t"+jsonOb.getString("passport").replaceAll(regex, "$1****$3"));
- if(passport.length()>6){
- customer.setIdCard("\t"+passport.replaceAll(passport.substring(passport.length()-6), "******"));
- }else{
- customer.setIdCard("\t"+"******");
- }
- }else if(mp.containsKey("dlicense")){
- customer.setIdType("驾驶证");
- String dlicense = jsonOb.getString("dlicense");
- //customer.setIdCard("\t"+jsonOb.getString("dlicense").replaceAll(regex, "$1****$3"));
- if(dlicense.length()>6){
- customer.setIdCard("\t"+dlicense.replaceAll(dlicense.substring(dlicense.length()-6), "******"));
- }else{
- customer.setIdCard("\t"+"******");
- }
- }else if(mp.containsKey("otheridnumber")){
- customer.setIdType("其它证件类型");
- String otheridnumber = jsonOb.getString("otheridnumber");
- //customer.setIdCard("\t"+jsonOb.getString("otheridnumber").replaceAll(regex, "$1****$3"));
- if(otheridnumber.length()>6){
- customer.setIdCard("\t"+otheridnumber.replaceAll(otheridnumber.substring(otheridnumber.length()-6), "******"));
- }else{
- customer.setIdCard("\t"+"******");
- }
- }
- if(mp.containsKey("custclass")){
- String custclazz = jsonOb.getString("custclass");
- switch (custclazz){
- case "1":
- customer.setCustClass("钻石");
- break;
- case "2":
- customer.setCustClass("白金");
- break;
- case "3":
- customer.setCustClass("黄金");
- break;
- case "4":
- customer.setCustClass("普通");
- break;
- default:
- customer.setCustClass("无");
- }
- }else{
- customer.setCustClass("无");
- }
- customers.add(customer);
- }
- // 继续向后查询
- Request scriptRequest = new Request("GET", "/_search/scroll");
- scriptRequest.setEntity(entity);
- Response responseData = restClient.performRequest(scriptRequest);
- String result = EntityUtils.toString(responseData.getEntity());
- jsonObject = JSON.parseObject(result);
- hitsobject = (JSONObject) jsonObject.get("hits");
- array = JSON.parseArray(hitsobject.get("hits").toString());
- }
- Map<String, String> header = new LinkedHashMap<>();
- header.put("scustId", "核心客户号");
- header.put("custId", "客户号");
- header.put("name", "姓名");
- header.put("idType", "证件类型");
- header.put("idCard", "证件号码");
- header.put("sex", "性别");
- header.put("age", "年龄");
- header.put("birthDay", "出生日期");
- header.put("custClass", "客户等级");
- header.put("custType", "客户类型");
- header.put("province", "省份");
- header.put("education", "学历");
- header.put("vaild", "是否有效客户");
- /*header.put("policyBelong", "业绩归属");*/
- header.put("pIncome", "年收入(万)");
- header.put("num", "保单件数");
- CsvUtil.export(request, response, "customer", header, customers);
- logger.info("导出出时间:"+DateUtils.getTime());
- }catch (Exception e){
- logger.info("导出出错:"+DateUtils.getTime());
- e.printStackTrace();
- }
- }
- /**
- * 导出四要素疑似相同指姓名、性别、证件类型、手机号一致
- * @param response
- * @param request
- */
- @GetMapping("/exportSameZero")
- public void exportSameZero(HttpServletResponse response, HttpServletRequest request)
- {
- logger.info("导出四要素进时间:"+DateUtils.getTime());
- try{
- Request scriptRequest = new Request("GET", "/shanglifeecif.samecustomer/_search?sort=name:asc&q=sametype:0&size=10000&scroll=5m");
- 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<Customer> customers = new ArrayList<Customer>();
- String scroll_id = jsonObject.getString("_scroll_id");
- HttpEntity entity = new NStringEntity("{\n" +
- " \"scroll_id\": \""+scroll_id+"\",\n" +
- " \"scroll\": \"5m\"\n" +
- "}", ContentType.APPLICATION_JSON);
- while (array.size() != 0) {
- // 这里填写你的业务逻辑,即对每一条数据的处理
- for (int i = 0; i <array.size() ; i++) {
- JSONObject json = (JSONObject)array.get(i);
- Map mp = new HashMap();
- Customer customer = new Customer();
- json.getString("_source");
- mp.put("id",json.getString("_id"));
- JSONObject jsonOb = JSON.parseObject(json.getString("_source"));
- mp.putAll(JSON.parseObject(json.getString("_source"),Map.class));
- customer.setScustId("\t"+jsonOb.getString("scustid"));
- customer.setName(jsonOb.getString("name"));
- customer.setSex("0".equals(jsonOb.getString("gender"))?"男":"女");
- if(mp.containsKey("birthday")){
- String birthday = jsonOb.getString("birthday");
- mp.put("birthday", birthday);
- customer.setBirthDay("\t"+birthday);
- customer.setAge(DateUtils.getAge(DateUtils.dateTime(DateUtils.YYYY_MM_DD,jsonOb.getString("birthday"))));
- }
- if(mp.containsKey("idcard")){
- customer.setIdType("身份证");
- // customer.setIdCard("\t"+jsonOb.getString("idcard"));
- String idcard = jsonOb.getString("idcard");
- if(idcard.length()>6){
- customer.setIdCard("\t"+idcard.replaceAll(idcard.substring(idcard.length()-6), "******"));
- }else{
- customer.setIdCard("\t"+"******");
- }
- }else if(mp.containsKey("passport")){
- customer.setIdType("护照");
- // customer.setIdCard("\t"+jsonOb.getString("passport"));
- String passport = jsonOb.getString("passport");
- if(passport.length()>6){
- customer.setIdCard("\t"+passport.replaceAll(passport.substring(passport.length()-6), "******"));
- }else{
- customer.setIdCard("\t"+"******");
- }
- }else if(mp.containsKey("dlicense")){
- customer.setIdType("驾驶证");
- // customer.setIdCard("\t"+jsonOb.getString("dlicense"));
- String dlicense = jsonOb.getString("dlicense");
- if(dlicense.length()>6){
- customer.setIdCard("\t"+dlicense.replaceAll(dlicense.substring(dlicense.length()-6), "******"));
- }else{
- customer.setIdCard("\t"+"******");
- }
- }else if(mp.containsKey("otheridnumber")){
- customer.setIdType("其它证件类型");
- // customer.setIdCard("\t"+jsonOb.getString("otheridnumber"));
- String otheridnumber = jsonOb.getString("otheridnumber");
- if(otheridnumber.length()>6){
- customer.setIdCard("\t"+otheridnumber.replaceAll(otheridnumber.substring(otheridnumber.length()-6), "******"));
- }else{
- customer.setIdCard("\t"+"******");
- }
- }
- customers.add(customer);
- }
- // 继续向后查询
- scriptRequest = new Request("GET", "/_search/scroll");
- scriptRequest.setEntity(entity);
- responseData = restClient.performRequest(scriptRequest);
- result = EntityUtils.toString(responseData.getEntity());
- jsonObject = JSON.parseObject(result);
- hitsobject = (JSONObject) jsonObject.get("hits");
- array = JSON.parseArray(hitsobject.get("hits").toString());
- }
- Map<String, String> header = new LinkedHashMap<>();
- header.put("scustId", "核心客户号");
- header.put("name", "姓名");
- header.put("idType", "证件类型");
- header.put("idCard", "证件号码");
- header.put("sex", "性别");
- header.put("birthDay", "出生日期");
- CsvUtil.export(request, response, "customer", header, customers);
- logger.info("导出四要素出时间:"+DateUtils.getTime());
- }catch (Exception e){
- logger.info("导出四要素出错:"+DateUtils.getTime());
- e.printStackTrace();
- }
- }
- /**
- * 导出三要素疑似相同指姓名、性别、出生日期一致
- * @param response
- * @param request
- */
- @GetMapping("/exportSameOne")
- public void exportSameOne(HttpServletResponse response, HttpServletRequest request)
- {
- logger.info("导出三要素进时间:"+DateUtils.getTime());
- try{
- Request scriptRequest = new Request("GET", "/shanglifeecif.samecustomer/_search?sort=name:asc,gender:asc,birthday:asc&q=sametype:1&size=10000&scroll=5m");
- 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<Customer> customers = new ArrayList<Customer>();
- String scroll_id = jsonObject.getString("_scroll_id");
- HttpEntity entity = new NStringEntity("{\n" +
- " \"scroll_id\": \""+scroll_id+"\",\n" +
- " \"scroll\": \"5m\"\n" +
- "}", ContentType.APPLICATION_JSON);
- while (array.size() != 0) {
- // 这里填写你的业务逻辑,即对每一条数据的处理
- for (int i = 0; i <array.size() ; i++) {
- JSONObject json = (JSONObject)array.get(i);
- Map mp = new HashMap();
- Customer customer = new Customer();
- json.getString("_source");
- mp.put("id",json.getString("_id"));
- JSONObject jsonOb = JSON.parseObject(json.getString("_source"));
- mp.putAll(JSON.parseObject(json.getString("_source"),Map.class));
- customer.setScustId("\t"+jsonOb.getString("scustid"));
- customer.setName(jsonOb.getString("name"));
- customer.setSex("0".equals(jsonOb.getString("gender"))?"男":"女");
- if(mp.containsKey("birthday")){
- String birthday = jsonOb.getString("birthday");
- mp.put("birthday", birthday);
- customer.setBirthDay(birthday);
- customer.setAge(DateUtils.getAge(DateUtils.dateTime(DateUtils.YYYY_MM_DD,jsonOb.getString("birthday"))));
- }
- if(mp.containsKey("idcard")){
- customer.setIdType("身份证");
- // customer.setIdCard("\t"+jsonOb.getString("idcard"));
- String idcard = jsonOb.getString("idcard");
- if(idcard.length()>6){
- customer.setIdCard("\t"+idcard.replaceAll(idcard.substring(idcard.length()-6), "******"));
- }else{
- customer.setIdCard("\t"+"******");
- }
- }else if(mp.containsKey("passport")){
- customer.setIdType("护照");
- // customer.setIdCard("\t"+jsonOb.getString("passport"));
- String passport = jsonOb.getString("passport");
- if(passport.length()>6){
- customer.setIdCard("\t"+passport.replaceAll(passport.substring(passport.length()-6), "******"));
- }else{
- customer.setIdCard("\t"+"******");
- }
- }else if(mp.containsKey("dlicense")){
- customer.setIdType("驾驶证");
- // customer.setIdCard("\t"+jsonOb.getString("dlicense"));
- String dlicense = jsonOb.getString("dlicense");
- if(dlicense.length()>6){
- customer.setIdCard("\t"+dlicense.replaceAll(dlicense.substring(dlicense.length()-6), "******"));
- }else{
- customer.setIdCard("\t"+"******");
- }
- }else if(mp.containsKey("otheridnumber")){
- customer.setIdType("其它证件类型");
- // customer.setIdCard("\t"+jsonOb.getString("otheridnumber"));
- String otheridnumber = jsonOb.getString("otheridnumber");
- if(otheridnumber.length()>6){
- customer.setIdCard("\t"+otheridnumber.replaceAll(otheridnumber.substring(otheridnumber.length()-6), "******"));
- }else{
- customer.setIdCard("\t"+"******");
- }
- }
- customers.add(customer);
- }
- // 继续向后查询
- scriptRequest = new Request("GET", "/_search/scroll");
- scriptRequest.setEntity(entity);
- responseData = restClient.performRequest(scriptRequest);
- result = EntityUtils.toString(responseData.getEntity());
- jsonObject = JSON.parseObject(result);
- hitsobject = (JSONObject) jsonObject.get("hits");
- array = JSON.parseArray(hitsobject.get("hits").toString());
- }
- Map<String, String> header = new LinkedHashMap<>();
- header.put("scustId", "核心客户号");
- header.put("name", "姓名");
- header.put("idType", "证件类型");
- header.put("idCard", "证件号码");
- header.put("sex", "性别");
- header.put("birthDay", "出生日期");
- CsvUtil.export(request, response, "customer", header, customers);
- logger.info("导出三要素出时间:"+DateUtils.getTime());
- }catch (Exception e){
- logger.info("导出三要素出错:"+DateUtils.getTime());
- e.printStackTrace();
- }
- }
- /**
- * 导出两要素疑似相同指姓名、证件号码一致
- * @param response
- * @param request
- */
- @GetMapping("/exportSameTwo")
- public void exportSameTwo(HttpServletResponse response, HttpServletRequest request)
- {
- logger.info("导出两要素进时间:"+DateUtils.getTime());
- try{
- Request scriptRequest = new Request("GET", "/shanglifeecif.samecustomer/_search?sort=name:asc&q=sametype:2&size=10000&scroll=5m");
- 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<Customer> customers = new ArrayList<Customer>();
- String scroll_id = jsonObject.getString("_scroll_id");
- HttpEntity entity = new NStringEntity("{\n" +
- " \"scroll_id\": \""+scroll_id+"\",\n" +
- " \"scroll\": \"5m\"\n" +
- "}", ContentType.APPLICATION_JSON);
- while (array.size() != 0) {
- // 这里填写你的业务逻辑,即对每一条数据的处理
- for (int i = 0; i <array.size() ; i++) {
- JSONObject json = (JSONObject)array.get(i);
- Map mp = new HashMap();
- Customer customer = new Customer();
- json.getString("_source");
- mp.put("id",json.getString("_id"));
- JSONObject jsonOb = JSON.parseObject(json.getString("_source"));
- mp.putAll(JSON.parseObject(json.getString("_source"),Map.class));
- customer.setScustId("\t"+jsonOb.getString("scustid"));
- customer.setName(jsonOb.getString("name"));
- customer.setSex("0".equals(jsonOb.getString("gender"))?"男":"女");
- if(mp.containsKey("birthday")){
- String birthday = jsonOb.getString("birthday");
- mp.put("birthday", birthday);
- customer.setBirthDay("\t"+birthday);
- customer.setAge(DateUtils.getAge(DateUtils.dateTime(DateUtils.YYYY_MM_DD,jsonOb.getString("birthday"))));
- }
- if(mp.containsKey("idcard")){
- customer.setIdType("身份证");
- // customer.setIdCard("\t"+jsonOb.getString("idcard"));
- String idcard = jsonOb.getString("idcard");
- if(idcard.length()>6){
- customer.setIdCard("\t"+idcard.replaceAll(idcard.substring(idcard.length()-6), "******"));
- }else{
- customer.setIdCard("\t"+"******");
- }
- }else if(mp.containsKey("passport")){
- customer.setIdType("护照");
- // customer.setIdCard("\t"+jsonOb.getString("passport"));
- String passport = jsonOb.getString("passport");
- if(passport.length()>6){
- customer.setIdCard("\t"+passport.replaceAll(passport.substring(passport.length()-6), "******"));
- }else{
- customer.setIdCard("\t"+"******");
- }
- }else if(mp.containsKey("dlicense")){
- customer.setIdType("驾驶证");
- // customer.setIdCard("\t"+jsonOb.getString("dlicense"));
- String dlicense = jsonOb.getString("dlicense");
- if(dlicense.length()>6){
- customer.setIdCard("\t"+dlicense.replaceAll(dlicense.substring(dlicense.length()-6), "******"));
- }else{
- customer.setIdCard("\t"+"******");
- }
- }else if(mp.containsKey("otheridnumber")){
- customer.setIdType("其它证件类型");
- // customer.setIdCard("\t"+jsonOb.getString("otheridnumber"));
- String otheridnumber = jsonOb.getString("otheridnumber");
- if(otheridnumber.length()>6){
- customer.setIdCard("\t"+otheridnumber.replaceAll(otheridnumber.substring(otheridnumber.length()-6), "******"));
- }else{
- customer.setIdCard("\t"+"******");
- }
- }
- customers.add(customer);
- }
- // 继续向后查询
- scriptRequest = new Request("GET", "/_search/scroll");
- scriptRequest.setEntity(entity);
- responseData = restClient.performRequest(scriptRequest);
- result = EntityUtils.toString(responseData.getEntity());
- jsonObject = JSON.parseObject(result);
- hitsobject = (JSONObject) jsonObject.get("hits");
- array = JSON.parseArray(hitsobject.get("hits").toString());
- }
- Map<String, String> header = new LinkedHashMap<>();
- header.put("scustId", "核心客户号");
- header.put("name", "姓名");
- header.put("idType", "证件类型");
- header.put("idCard", "证件号码");
- header.put("sex", "性别");
- header.put("birthDay", "出生日期");
- CsvUtil.export(request, response, "customer", header, customers);
- logger.info("导出两要素出时间:"+DateUtils.getTime());
- }catch (Exception e){
- logger.info("导出两要素出错:"+DateUtils.getTime());
- e.printStackTrace();
- }
- }
- /**
- * 导出数据清洗数据
- * @param response
- * @param request
- */
- @GetMapping("/dataCleaning")
- public void dataCleaning(HttpServletResponse response, HttpServletRequest request,String sameType)
- {
- logger.info("导出数据清洗进时间:"+DateUtils.getTime());
- try{
- Request scriptRequest = new Request("GET", "/shanglifeecif.samecustomer/_search?sort=name:asc&q=sametype:"+sameType+"&size=10000&scroll=5m");
- 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<Customer> customers = new ArrayList<Customer>();
- String scroll_id = jsonObject.getString("_scroll_id");
- HttpEntity entity = new NStringEntity("{\n" +
- " \"scroll_id\": \""+scroll_id+"\",\n" +
- " \"scroll\": \"5m\"\n" +
- "}", ContentType.APPLICATION_JSON);
- while (array.size() != 0) {
- // 这里填写你的业务逻辑,即对每一条数据的处理
- for (int i = 0; i <array.size() ; i++) {
- JSONObject json = (JSONObject)array.get(i);
- Map mp = new HashMap();
- Customer customer = new Customer();
- json.getString("_source");
- mp.put("id",json.getString("_id"));
- JSONObject jsonOb = JSON.parseObject(json.getString("_source"));
- mp.putAll(JSON.parseObject(json.getString("_source"),Map.class));
- customer.setScustId("\t"+jsonOb.getString("scustid"));
- customer.setName(jsonOb.getString("name"));
- customer.setSex("0".equals(jsonOb.getString("gender"))?"男":"女");
- if(mp.containsKey("birthday")){
- String birthday = jsonOb.getString("birthday");
- mp.put("birthday", birthday);
- customer.setBirthDay("\t"+birthday);
- customer.setAge(DateUtils.getAge(DateUtils.dateTime(DateUtils.YYYY_MM_DD,jsonOb.getString("birthday"))));
- }
- if(mp.containsKey("idcard")){
- customer.setIdType("身份证");
- // customer.setIdCard("\t"+jsonOb.getString("idcard"));
- String idcard = jsonOb.getString("idcard");
- if(idcard.length()>6){
- customer.setIdCard("\t"+idcard.replaceAll(idcard.substring(idcard.length()-6), "******"));
- }else{
- customer.setIdCard("\t"+"******");
- }
- }else if(mp.containsKey("passport")){
- customer.setIdType("护照");
- // customer.setIdCard("\t"+jsonOb.getString("passport"));
- String passport = jsonOb.getString("passport");
- if(passport.length()>6){
- customer.setIdCard("\t"+passport.replaceAll(passport.substring(passport.length()-6), "******"));
- }else{
- customer.setIdCard("\t"+"******");
- }
- }else if(mp.containsKey("dlicense")){
- customer.setIdType("驾驶证");
- // customer.setIdCard("\t"+jsonOb.getString("dlicense"));
- String dlicense = jsonOb.getString("dlicense");
- if(dlicense.length()>6){
- customer.setIdCard("\t"+dlicense.replaceAll(dlicense.substring(dlicense.length()-6), "******"));
- }else{
- customer.setIdCard("\t"+"******");
- }
- }else if(mp.containsKey("otheridnumber")){
- customer.setIdType("其它证件类型");
- // customer.setIdCard("\t"+jsonOb.getString("otheridnumber"));
- String otheridnumber = jsonOb.getString("otheridnumber");
- if(otheridnumber.length()>6){
- customer.setIdCard("\t"+otheridnumber.replaceAll(otheridnumber.substring(otheridnumber.length()-6), "******"));
- }else{
- customer.setIdCard("\t"+"******");
- }
- }
- customer.setZipCode("\t"+jsonOb.getString("zipcode"));
- customer.setMobile("\t"+jsonOb.getString("mobile"));
- customer.setEmail("\t"+jsonOb.getString("email"));
- customer.setPinDate(jsonOb.getString("pindate"));
- customer.setAgentName(jsonOb.getString("agentname"));
- customer.setSalecomName(jsonOb.getString("salecomname"));
- customers.add(customer);
- }
- // 继续向后查询
- scriptRequest = new Request("GET", "/_search/scroll");
- scriptRequest.setEntity(entity);
- responseData = restClient.performRequest(scriptRequest);
- result = EntityUtils.toString(responseData.getEntity());
- jsonObject = JSON.parseObject(result);
- hitsobject = (JSONObject) jsonObject.get("hits");
- array = JSON.parseArray(hitsobject.get("hits").toString());
- }
- Map<String, String> header = new LinkedHashMap<>();
- header.put("scustId", "核心客户号");
- header.put("name", "姓名");
- header.put("idType", "证件类型");
- header.put("idCard", "证件号码");
- header.put("sex", "性别");
- header.put("birthDay", "出生日期");
- if("8".equals(sameType) || "16".equals(sameType)){
- header.put("mobile", "手机号码");
- }else if("9".equals(sameType)){
- header.put("zipCode", "邮政编码");
- }else if("12".equals(sameType)){
- header.put("degree", "学历");
- }else if("14".equals(sameType)){
- header.put("email", "邮箱");
- }else if("15".equals(sameType)){
- header.put("pinDate", "起保日期");
- }else if("18".equals(sameType)){
- header.put("agentName", "业务员名称");
- }else if("19".equals(sameType)){
- header.put("salecomName", "业绩归属");
- }
- CsvUtil.export(request, response, "customer", header, customers);
- logger.info("导出数据清洗出时间:"+DateUtils.getTime());
- }catch (Exception e){
- logger.info("导出数据清洗出错:"+DateUtils.getTime());
- e.printStackTrace();
- }
- }
- public Map getLables(JSONObject jsonObject,String deptCode ) throws Exception {
- Map mpInfo = new HashMap();
- JSONObject source = JSON.parseObject(jsonObject.getString("_source"));
- String indid = jsonObject.getString("_id");
- mpInfo.put("id",indid);
- String salecom = source.getString("salecom"); // 可能会得到用逗号分割的多个标签
- if (salecom == null) {
- salecom = "";
- }
- String[] salecoms = salecom.split(",");
- Arrays.sort(salecoms);
- Map<String, Object> sourceMap = JSON.parseObject(jsonObject.getString("_source"), Map.class);
- if (StringUtils.isEmpty(deptCode)||showLabelCode.equals("SHOW_ALL_LABLES")) {
- // 根渠道,也就是上海人寿,也是admin用户所属的渠道,返回jsonObject中的所有标签(公共标签 + 渠道标签)
- mpInfo.putAll(sourceMap);
- } else if (Arrays.binarySearch(salecoms, deptCode) >= 0) {
- // 登录用户的渠道与客户渠道一致,返回jsonObject中的公共标签 + shanglifeecif.customerno_salecom_relation表中的渠道标签
- mpInfo.putAll(getPublicLabels(sourceMap));
- if(showLabelCode.equals("SHOW_DISTINGUISH_CHANNELS_LABLES")){
- mpInfo.putAll(getSalecomLabels(source.getString("scustid"), deptCode));
- }
- } else {
- // 未找到渠道,不返回渠道标签
- logger.info(String.format("登录渠道和客户所属渠道不匹配,不返回渠道标签,登录渠道 [%s],客户所属渠道 [%s]", deptCode, salecom));
- }
- if(mpInfo.containsKey("birthday")){
- mpInfo.put("birthday", source.getString("birthday"));
- mpInfo.put("age",DateUtils.getAge(DateUtils.dateTime(DateUtils.YYYY_MM_DD,source.getString("birthday"))));
- }else{
- mpInfo.put("birthday","");
- mpInfo.put("age","");
- }
- return mpInfo;
- }
- /**
- * 只返回公共标签(以label开头和不以label开头的公共标签都会返回)
- * @param source 包含所有标签的map
- * @return 只包含公共标签的map
- */
- private Map<String, Object> getPublicLabels(Map<String, Object> source) {
- Map<String, Object> rst = new HashMap<>();
- // 一般公共标签的key不以label开头,但也有一部分公共标签是以label开头的,将以label开头的公共标签Key存入list后续使用
- List<String> publicLabels =getpublicLabels();
- for (Map.Entry<String, Object> entry : source.entrySet()){
- String key = entry.getKey();
- logger.info("getPublicLabels------>"+key);
- if(key.startsWith("label")){
- if(publicLabels.contains(key)){
- // 以label开头的公共标签
- logger.info("以label开头的公共标签------>"+key);
- rst.put(key,entry.getValue());
- }else{
- logger.info("分渠道标签------>"+key);
- }
- }else{
- // 不以label开头的公共标签
- rst.put(key,entry.getValue());
- }
- }
- return rst;
- }
- /**
- * 从ES表shanglifeecif.customerno_salecom_relation中获得指定客户指定渠道的渠道标签
- * @param customerno 客户号
- * @param salecom 渠道号
- * @return 指定客户指定渠道的所有渠道标签
- */
- public Map<String, Object> getSalecomLabels(String customerno, String salecom) throws IOException {
- Map<String, Object> rst = new HashMap<>();
- String q = "scustid:"+ customerno +"%20AND%20salecom:"+ salecom;
- Request scriptRequest = new Request("GET", "/shanglifeecif.customerno_salecom_relation/_search?pretty=true&q="+ q);
- Response response = restClient.performRequest(scriptRequest);
- 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<String> publicLabels = getpublicLabels();
- for (int i = 0; i <array.size() ; i++) {
- JSONObject json = (JSONObject)array.get(i);
- Map<String, Object> source = JSON.parseObject(json.getString("_source"), Map.class);
- for (Map.Entry<String, Object> entry : source.entrySet()){
- String key = entry.getKey();
- if(key.startsWith("label")&&!publicLabels.contains(key)){
- logger.info("分渠道标签添加--->"+key+"__"+entry.getValue());
- rst.put(key, entry.getValue());
- }
- }
- }
- return rst;
- }
- public JSONObject getCustomerListData(int pageNum, int pageSize, boolean isPretty, String scroll,
- 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,//注册官微
- String name,//客户姓名
- String idcard,//客户证件号码
- String mobile//客户手机号
- ) throws IOException {
- //模糊查询渠道
- Long userId = SecurityUtils.getUserId();
- SysUser sysUser = userService.selectUserById(userId);
- String deptCode = null;
- // “上海人寿”部门编号开发环境是null,生产环境是0。不是上海人寿部门的才分渠道
- if (StringUtils.isNotEmpty(sysUser.getDept().getDeptCode()) && ! "0".equals(sysUser.getDept().getDeptCode())) {
- deptCode = sysUser.getDept().getDeptCode();
- }
- /*Long userId = SecurityUtils.getUserId();
- SysUser sysUser = userService.selectUserById(userId);
- String deptCode = sysUser.getDept().getDeptCode();*/
- //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\":{\"salecom\":\""+deptCode+"\"}},");
- // }else if(StringUtils.isNotEmpty(policybelong)){
- // builder.append("{\"prefix\":{\"salecom\":\""+policybelong+"\"}},");
- // }
- // 渠道不为空的话按渠道筛选
- if(StringUtils.isNotEmpty(deptCode)){
- builder.append("{\"wildcard\":{\"salecom\":\"*"+deptCode+"*\"}},");
- }else if(StringUtils.isNotEmpty(policybelong)){
- builder.append("{\"wildcard\":{\"salecom\":\"*"+policybelong+"*\"}},");
- }
- //客户姓名
- if(StringUtils.isNotEmpty(name)){
- builder.append("{\"wildcard\":{\"name\":\"*"+name+"*\"}},");
- }
- //客户手机
- if(StringUtils.isNotEmpty(mobile)){
- builder.append("{\"wildcard\":{\"pmphone\":\"*"+mobile+"*\"}},");
- }
- //投保年份
- if(StringUtils.isNotEmpty(fadate)){
- builder.append("{\"wildcard\":{\"fadate\":\"*"+fadate+"*\"}},");
- }
- 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(participantsDateS) && StringUtils.isNotEmpty(participantsDateE)){
- builder.append("{\"range\":{\"fadate\":{\"gte\":\""+participantsDateS+"\",\"lte\":\""+participantsDateE+"\"}}},");
- }else{
- if(StringUtils.isNotEmpty(participantsDateS)){
- builder.append("{\"range\":{\"fadate\":{\"gte\":\""+participantsDateS+"\"}}},");
- }
- if(StringUtils.isNotEmpty(participantsDateE)){
- builder.append("{\"range\":{\"fadate\":{\"lte\":\""+participantsDateE+"\"}}},");
- }
- }
- 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(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) ||*/
- StringUtils.isNotEmpty(participantsDateS) || StringUtils.isNotEmpty(participantsDateE) ||
- StringUtils.isNotEmpty(policybelong) || StringUtils.isNotEmpty(name) || StringUtils.isNotEmpty(mobile)
- || StringUtils.isNotEmpty(fadate) || StringUtils.isNotEmpty(deptCode)){
- 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\":[");
- //客户证件号码
- if(StringUtils.isNotEmpty(idcard)){
- builder.append("{\"wildcard\":{\"idcard\":\"*"+idcard+"*\"}},");
- builder.append("{\"wildcard\":{\"passport\":\"*"+idcard+"*\"}},");
- builder.append("{\"wildcard\":{\"dlicense\":\"*"+idcard+"*\"}},");
- builder.append("{\"wildcard\":{\"otheridnumber\":\"*"+idcard+"*\"}},");
- builder.delete(builder.length()-1,builder.length());
- }
- builder.append("]");//should
- builder.append("}");//boot结束
- builder.append("},");//query结束
- builder.append("\"from\":"+ pageNum +",");//第几页
- builder.append("\"size\":"+ pageSize +",");//查询几个
- builder.append("\"sort\":[{\"scustid\":{\"order\":\"asc\"}}],");//排序
- builder.append("\"aggs\":{}");//
- builder.append("}");
- logger.info(builder.toString());
- HttpEntity entity = new NStringEntity(builder.toString(), ContentType.APPLICATION_JSON);
- String url;
- /*
- shanglifeecif.individual表中的渠道标签字段值是不分渠道的(也就是全渠道计算),所以像admin这种没有渠道的用户查这个表
- shanglifeecif.customerno_salecom_relation表中渠道标签字段值是分渠道计算的,所以登录用户有渠道时查这个表
- */
- boolean hasDeptCode; // 登录用户是否有渠道 true:有渠道,false:无渠道
- if(StringUtils.isEmpty(deptCode)){
- // 像admin这种无渠道用户
- logger.info("deptCode is empty, search shanglifeecif.individual");
- url = "/shanglifeecif.individual/_search?";
- hasDeptCode = false;
- } else {
- // 有渠道用户
- logger.info(String.format("deptCode is [%s], search shanglifeecif.customerno_salecom_relation", deptCode));
- url = "/shanglifeecif.customerno_salecom_relation/_search?";
- hasDeptCode = true;
- }
- url += isPretty ? "pretty=true" : "pretty=false";
- url += StringUtils.isEmpty(scroll) ? "" : "&scroll="+ scroll;
- Request scriptRequest = new Request("GET", url);
- scriptRequest.setEntity(entity);
- Response response = restClient.performRequest(scriptRequest);
- String result = EntityUtils.toString(response.getEntity());
- JSONObject jsonObject = JSON.parseObject(result);
- return jsonObject;
- }
- /**
- * 计算享受保障天数,所有保单已享受到保障的天数合计(会忽略掉重叠天数),退保的只计算退保前享受到的保障天数
- * @param policyDates 所有保单集合
- * @param cancelPolicyDates 退保保单集合
- * @return
- */
- public int guaranteeDay(List<PolicyDate> policyDates, List<PolicyDate> cancelPolicyDates) {
- modifyDate(policyDates, cancelPolicyDates);
- dateOrder(policyDates);
- List<PolicyDate> merged = dateMerge(policyDates);
- int day = 0;
- if (merged == null || merged.isEmpty()) {
- return day;
- }
- for (PolicyDate i : merged) {
- day += DateUtils.getDateDifDay(i.getEndDate(), i.getStartDate());
- }
- return day;
- }
- /**
- *
- * @param policyDates 所有保单数据
- * @param cancelPolicyDates 退保数据
- */
- public void modifyDate(List<PolicyDate> policyDates, List<PolicyDate> cancelPolicyDates) {
- Calendar c = Calendar.getInstance();
- c.set(Calendar.HOUR_OF_DAY, 0);
- c.set(Calendar.MINUTE, 0);
- c.set(Calendar.SECOND, 0);
- c.set(Calendar.MILLISECOND, 0);
- Date currentDate = c.getTime(); // 当前日期0时(也就是只要当前日期年月日,不要时分秒)
- boolean searchedLongPolicy = false; // 是否找到了第一个有效状态长期险,默认没找到
- List<PolicyDate> removePolicyDates = new ArrayList<>(); //待删除的policyDate
- for (PolicyDate i : policyDates) {
- // 有效状态保单,计算所有短期险 + 第一个长期险
- if ("有效".equals(i.getPolicystate())) {
- if (searchedLongPolicy) {
- // 由于只有第一个有效状态长期险参与计算,所以后续的有效状态长期险都可以标记为不计算
- logger.info("不参与计算,非第一个有效状态长期险, policyDate: "+ i);
- removePolicyDates.add(i);
- } else if (i.getAgrmntage() >= 180) {
- searchedLongPolicy = true;
- logger.info("找到第一个有效状态长期险, policyDate: "+ i);
- i.setStartDate(i.getPadate());
- i.setEndDate(currentDate);
- }
- }
- // 如果该保单已退保,则将开始和结束日期改为退保数据的开始和结束日期
- for (PolicyDate j : cancelPolicyDates) {
- if (i.getContno().equals(j.getContno())) {
- i.setStartDate(j.getStartDate());
- i.setEndDate(j.getEndDate());
- }
- }
- // 如果结束日期大于当前日期,则修改结束日期为当前日期
- if (i.getEndDate().after(currentDate)) {
- i.setEndDate(currentDate);
- }
- }
- policyDates.removeAll(removePolicyDates);
- }
- public void dateOrder(List<PolicyDate> policyDates) {
- Collections.sort(policyDates, new Comparator<PolicyDate>() {
- @Override
- public int compare(PolicyDate o1, PolicyDate o2) {
- int start = o1.getStartDate().compareTo(o2.getStartDate());
- if (start == 0) {
- return o1.getEndDate().compareTo(o2.getEndDate());
- }
- return start;
- }
- });
- }
- public List<PolicyDate> dateMerge(List<PolicyDate> policyDates) {
- List<PolicyDate> rst = new ArrayList<>();
- rst.add(policyDates.get(0));
- for (int i = 1, j = 0; i < policyDates.size(); i++) {
- PolicyDate ip = policyDates.get(i);
- PolicyDate jp = rst.get(j);
- int isje = ip.getStartDate().compareTo(jp.getEndDate());
- if (isje <= 0) {
- // next start 在 last end之前,要判断next end位置
- int ieje = ip.getEndDate().compareTo(jp.getEndDate());
- if (ieje <= 0) {
- //nothing 说明下一个时间范围包含在上一个时间范围内,不做任何操作
- } else {
- // 说明下一个结束时间在上一个结束时间之后,更新结束时间
- jp.setEndDate(ip.getEndDate());
- }
- } else {
- // 下一个开始时间在上一个结束时间之后,说明这又是一个新的时间范围,加入rst
- rst.add(ip);
- j++;
- }
- }
- return rst;
- }
- /**
- * 保单日期类
- */
- public static class PolicyDate {
- /** 保单号 */
- private String contno;
- /** 起保日期 */
- private Date startDate;
- /** 终保日期 */
- private Date endDate;
- /** 投保日期 */
- private Date padate;
- /** 保单状态 */
- private String policystate;
- /** 保险期限 */
- private int agrmntage;
- public PolicyDate(String contno, Date startDate, Date endDate) {
- this.contno = contno;
- this.startDate = startDate;
- this.endDate = endDate;
- }
- public PolicyDate(String contno, Date startDate, Date endDate, Date padate, String policystate, int agrmntage) {
- this.contno = contno;
- this.startDate = startDate;
- this.endDate = endDate;
- this.padate = padate;
- this.policystate = policystate;
- this.agrmntage = agrmntage;
- }
- public String getContno() {
- return contno;
- }
- public void setContno(String contno) {
- this.contno = contno;
- }
- public Date getStartDate() {
- return startDate;
- }
- public void setStartDate(Date startDate) {
- this.startDate = startDate;
- }
- public Date getEndDate() {
- return endDate;
- }
- public void setEndDate(Date endDate) {
- this.endDate = endDate;
- }
- public Date getPadate() {
- return padate;
- }
- public void setPadate(Date padate) {
- this.padate = padate;
- }
- public String getPolicystate() {
- return policystate;
- }
- public void setPolicystate(String policystate) {
- this.policystate = policystate;
- }
- public int getAgrmntage() {
- return agrmntage;
- }
- public void setAgrmntage(int agrmntage) {
- this.agrmntage = agrmntage;
- }
- @Override
- public String toString() {
- final StringBuilder sb = new StringBuilder("PolicyDate{");
- sb.append("contno='").append(contno).append('\'');
- sb.append(", startDate=").append(startDate);
- sb.append(", endDate=").append(endDate);
- sb.append(", padate=").append(padate);
- sb.append(", policystate='").append(policystate).append('\'');
- sb.append(", agrmntage=").append(agrmntage);
- sb.append('}');
- return sb.toString();
- }
- }
- //公共标签
- private List<String> getpublicLabels(){
- List<String> publicLabels = new ArrayList<>(); // 存放以label开头的公共标签key
- publicLabels.add("label1");
- publicLabels.add("label2");
- publicLabels.add("label3");
- publicLabels.add("label4");
- publicLabels.add("label9");
- publicLabels.add("label10");
- publicLabels.add("label21");
- publicLabels.add("label67");
- publicLabels.add("label69");
- publicLabels.add("label70");
- publicLabels.add("label71");
- publicLabels.add("label74");
- publicLabels.add("label77");
- publicLabels.add("label80");
- publicLabels.add("label96");
- publicLabels.add("label97");
- publicLabels.add("label100");
- publicLabels.add("label101");
- publicLabels.add("label103");
- publicLabels.add("label104");
- publicLabels.add("label105");
- publicLabels.add("label106");
- return publicLabels;
- }
- }
|