CustomerApiController.java 97 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984
  1. package com.dgtis.data.api;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONArray;
  4. import com.alibaba.fastjson.JSONObject;
  5. import com.dgtis.common.core.utils.DateUtils;
  6. import com.dgtis.common.core.utils.StringUtils;
  7. import com.dgtis.common.core.utils.poi.CsvUtil;
  8. import com.dgtis.common.core.utils.poi.ExcelUtil;
  9. import com.dgtis.common.core.web.domain.AjaxResult;
  10. import com.dgtis.common.security.utils.SecurityUtils;
  11. import com.dgtis.data.domain.Customer;
  12. import com.dgtis.data.service.ISysUserService;
  13. import com.dgtis.data.util.AddressResolutionUtil;
  14. import com.dgtis.system.api.domain.SysUser;
  15. import com.mysql.cj.x.protobuf.MysqlxDatatypes;
  16. import org.apache.http.HttpEntity;
  17. import org.apache.http.entity.ContentType;
  18. import org.apache.http.nio.entity.NStringEntity;
  19. import org.apache.http.util.EntityUtils;
  20. import org.elasticsearch.client.Request;
  21. import org.elasticsearch.client.Response;
  22. import org.elasticsearch.client.RestClient;
  23. import org.slf4j.Logger;
  24. import org.slf4j.LoggerFactory;
  25. import org.springframework.beans.factory.annotation.Autowired;
  26. import org.springframework.beans.factory.annotation.Value;
  27. import org.springframework.stereotype.Controller;
  28. import org.springframework.web.bind.annotation.*;
  29. import javax.servlet.http.HttpServletRequest;
  30. import javax.servlet.http.HttpServletResponse;
  31. import java.io.IOException;
  32. import java.text.DecimalFormat;
  33. import java.text.ParseException;
  34. import java.text.SimpleDateFormat;
  35. import java.util.*;
  36. /**
  37. * @description:客户信息列表api
  38. * @author:qxm
  39. * @date:2021/1/22 10:24
  40. */
  41. @Controller
  42. @RequestMapping("/customer")
  43. public class CustomerApiController {
  44. /**
  45. * SHOW_ALL_LABLES 不分渠道展示所有标签 总部团险展示所有标签
  46. * HIDE_CHANNELS_LABLES 有不同渠道保单情况下 分渠道标签全不显示 仅显示公共标签 , 总部团险展示所有标签
  47. * SHOW_DISTINGUISH_CHANNELS_LABLES 分渠道展示标签, 总部团险展示所有标签
  48. */
  49. @Value("${dgtis.show-label-code}")
  50. private String showLabelCode = "SHOW_ALL_LABLES";
  51. private static Logger logger = LoggerFactory.getLogger(CustomerApiController.class);
  52. @Autowired
  53. private RestClient restClient;
  54. @Autowired
  55. private ISysUserService userService;
  56. @GetMapping("/getCustomerList")
  57. @ResponseBody
  58. public AjaxResult getCustomerList(@RequestParam(defaultValue = "1") int pageNum,@RequestParam(defaultValue = "10") int pageSize,
  59. String education,//学历
  60. String policybelong,//业绩归属
  61. String payS,String payE, //年缴费区间
  62. String fadate,//投保年份
  63. String productname,//险种类别
  64. String insuredAmountS,String insuredAmountE,//保额区间
  65. String ageS,String ageE,//年龄区间
  66. String gender,//性别
  67. String sobirth,//省份
  68. String NOVPolicy,//保单件数
  69. String custtype,//客户类型 投保人
  70. String SCustID,// 核心客户号
  71. String custclass,//客户等级
  72. String participantsDateS,String participantsDateE,//参与方时间
  73. String PIncomeS,String PIncomeE,//年收入区间
  74. String Insured,//投保对象
  75. String lp,//理赔
  76. String yx,//有效
  77. String gzgw,//关注官微
  78. String zcgw,//注册官微
  79. String name,//客户姓名
  80. String idcard,//客户证件号码
  81. String mobile//客户手机号
  82. ) {
  83. try {
  84. logger.info("进客户列表时间:"+DateUtils.getTime());
  85. JSONObject jsonObject = getCustomerListData((pageNum - 1) * 10, pageSize, true, null,
  86. education,//学历
  87. policybelong,//业绩归属
  88. payS, payE, //年缴费区间
  89. fadate,//投保年份
  90. productname,//险种类别
  91. insuredAmountS, insuredAmountE,//保额区间
  92. ageS, ageE,//年龄区间
  93. gender,//性别
  94. sobirth,//省份
  95. NOVPolicy,//保单件数
  96. custtype,//客户类型 投保人
  97. SCustID,// 核心客户号
  98. custclass,//客户等级
  99. participantsDateS, participantsDateE,//参与方时间
  100. PIncomeS, PIncomeE,//年收入区间
  101. Insured,//投保对象
  102. lp,//理赔
  103. yx,//有效
  104. gzgw,//关注官微
  105. zcgw,//注册官微
  106. name,//客户姓名
  107. idcard,//客户证件号码
  108. mobile//客户手机号
  109. );
  110. JSONObject hitsobject = (JSONObject) jsonObject.get("hits");
  111. JSONArray array = JSON.parseArray(hitsobject.get("hits").toString());
  112. List listMap = new ArrayList<>();
  113. Map map = new HashMap();
  114. for (int i = 0; i <array.size() ; i++) {
  115. JSONObject json = (JSONObject)array.get(i);
  116. Map mp = getSource(json);
  117. listMap.add(mp);
  118. }
  119. long total = hitsobject.getLong("total");
  120. map.put("list",listMap);
  121. map.put("total",total);
  122. logger.info("出客户列表时间:"+DateUtils.getTime());
  123. return AjaxResult.success(map);
  124. } catch (Exception e) {
  125. logger.info("列表报错时间:"+DateUtils.getTime());
  126. e.printStackTrace();
  127. return AjaxResult.error();
  128. }
  129. }
  130. /**
  131. * 将hit._source转换成map形式,并在map中添加id字段
  132. * @param hit hit JSONObject
  133. * @return
  134. */
  135. private Map getSource(JSONObject hit) {
  136. String idKey = "indid";
  137. Map mp = JSON.parseObject(hit.getString("_source"), Map.class);
  138. if (mp.containsKey(idKey)) {
  139. // 查shanglifeecif.customerno_salecom_relation表id是indid
  140. mp.put("id", mp.get(idKey));
  141. } else {
  142. // 查shanglifeecif.individual表id是_id
  143. mp.put("id", hit.getString("_id"));
  144. }
  145. Object birthday = mp.get("birthday");
  146. if(birthday != null){
  147. try {
  148. mp.put("age",DateUtils.getAge(DateUtils.dateTime(DateUtils.YYYY_MM_DD, birthday.toString())));
  149. } catch (Exception e) {
  150. logger.warn(String.format("Failed to calendar age, birthday is [%s], birthday and age reset to empty.", birthday));
  151. mp.put("birthda", "");
  152. mp.put("age", "");
  153. }
  154. }else{
  155. mp.put("birthday", "");
  156. mp.put("age","");
  157. }
  158. return mp;
  159. }
  160. @GetMapping("/getCustomerById")
  161. @ResponseBody
  162. public AjaxResult getCustomerById(String id) {
  163. // 获取索引的别名,字段,创建时间http://10.32.2.231:9200/shanglifeecif.individual/default_type_/1
  164. try {
  165. Long userId = SecurityUtils.getUserId();
  166. SysUser sysUser = userService.selectUserById(userId);
  167. String deptCode = "";
  168. // “上海人寿”部门编号开发环境是null,生产环境是0。不是上海人寿部门的才分渠道
  169. if(StringUtils.isNotEmpty( sysUser.getDept().getDeptCode()) && ! "0".equals(sysUser.getDept().getDeptCode())){
  170. deptCode = sysUser.getDept().getDeptCode();
  171. }
  172. logger.info("进客户详情时间:"+DateUtils.getTime());
  173. Map<String, String> paramMap = new HashMap<String, String>();
  174. paramMap.put("pretty", "true");
  175. Request scriptRequest = new Request("GET", "/shanglifeecif.individual/default_type_/"+id+"?pretty=true");
  176. Response response = restClient.performRequest(scriptRequest);
  177. String result = EntityUtils.toString(response.getEntity());
  178. Map map = new HashMap();
  179. JSONObject jsonObject = JSON.parseObject(result);
  180. JSONObject source = JSON.parseObject(jsonObject.getString("_source"));
  181. String indid = jsonObject.getString("_id");
  182. String custtype = source.getString("custtype");
  183. String scustid = source.getString("scustid");
  184. Map mpInfo = getLables(jsonObject, deptCode);
  185. map.put("custInfo",mpInfo);
  186. Map query =new HashMap();
  187. query.put("indid1",indid);
  188. // 2022/5/13 陆光晨 关系信息分渠道查询
  189. String lpqSearch = "indid1:"+ scustid;
  190. if( StringUtils.isNotEmpty(deptCode)){
  191. lpqSearch += "%20AND%20salecom:"+deptCode;
  192. }
  193. scriptRequest = new Request("GET", "/shanglifeecif.indrelationship/_search?pretty=true&q="+ lpqSearch);
  194. response = restClient.performRequest(scriptRequest);
  195. result = EntityUtils.toString(response.getEntity());
  196. jsonObject = JSON.parseObject(result);
  197. JSONObject hitsobject = (JSONObject) jsonObject.get("hits");
  198. JSONArray array = JSON.parseArray(hitsobject.get("hits").toString());
  199. Set<Map<String, String>> relationship = new HashSet<>();
  200. for (int i = 0; i <array.size() ; i++) {
  201. JSONObject json = (JSONObject)array.get(i);
  202. JSONObject shipSource = JSON.parseObject(json.getString("_source"));
  203. if (shipSource.containsKey("rstype")
  204. && shipSource.containsKey("indid1")
  205. && shipSource.containsKey("name1")
  206. && shipSource.containsKey("role1")
  207. && shipSource.containsKey("indid2")
  208. && shipSource.containsKey("name2")
  209. && shipSource.containsKey("role2")) {
  210. Map<String, String> mp = new HashMap<>(8);
  211. mp.put("rstype", shipSource.getString("rstype"));
  212. mp.put("indid1", shipSource.getString("indid1"));
  213. mp.put("name1", shipSource.getString("name1"));
  214. mp.put("role1", shipSource.getString("role1"));
  215. mp.put("indid2", shipSource.getString("indid2"));
  216. mp.put("name2", shipSource.getString("name2"));
  217. mp.put("role2", shipSource.getString("role2"));
  218. relationship.add(mp);
  219. }
  220. }
  221. map.put("relationship",relationship);
  222. query =new HashMap();
  223. query.put("applicantid",indid);
  224. //理赔查询
  225. lpqSearch = "lpscutid:"+scustid;
  226. if( StringUtils.isNotEmpty(deptCode)){
  227. lpqSearch = "(lpscutid:"+scustid+"%20AND%20salecom:"+deptCode+")";
  228. }
  229. scriptRequest = new Request("GET", "/shanglifeecif.insuranceclaimthread/_search?size=100&pretty=true&q="+lpqSearch);
  230. response = restClient.performRequest(scriptRequest);
  231. result = EntityUtils.toString(response.getEntity());
  232. jsonObject = JSON.parseObject(result);
  233. hitsobject = (JSONObject) jsonObject.get("hits");
  234. array = JSON.parseArray(hitsobject.get("hits").toString());
  235. List insuranceclaimthread = new ArrayList<>();
  236. for (int i = 0; i <array.size() ; i++) {
  237. JSONObject json = (JSONObject)array.get(i);
  238. Map mp = new HashMap();
  239. mp.put("id",json.getString("_id"));
  240. mp.putAll(JSON.parseObject(json.getString("_source"),Map.class));
  241. insuranceclaimthread.add(mp);
  242. }
  243. map.put("insuranceclaimthread",insuranceclaimthread);
  244. //合约信息
  245. logger.info("合约信息 投保人被保人类型:"+custtype);
  246. // if(custtype.trim().indexOf("被保人")!=-1){
  247. // String qSearch = "insuredscustid:"+scustid;
  248. // if( StringUtils.isNotEmpty(deptCode)){
  249. // qSearch = "(insuredscustid:"+scustid+"%20AND%20policybelong:"+deptCode+")";
  250. // }
  251. // scriptRequest = new Request("GET", "/shanglifeecif.insurancearrangement/_search?size=100&pretty=true&sort=padate:asc&q="+qSearch);
  252. // }else{
  253. // String qSearch = "applicantscustid:"+scustid;
  254. // if( StringUtils.isNotEmpty(deptCode)){
  255. // qSearch = "(applicantscustid:"+scustid+"%20AND%20policybelong:"+deptCode+")";
  256. // }
  257. // scriptRequest = new Request("GET", "/shanglifeecif.insurancearrangement/_search?size=100&pretty=true&sort=padate:asc&q="+qSearch);
  258. // }
  259. //20230426曹老师要求合约查询保险人和被保险人 都查询出合约列表
  260. String qSearch = "(applicantscustid:"+scustid+"%20OR%20insuredscustid:"+scustid+")";
  261. if( StringUtils.isNotEmpty(deptCode)){
  262. qSearch = "(applicantscustid:"+scustid+"%20OR%20insuredscustid:"+scustid+")"+"%20AND%20policybelong:"+deptCode+"";
  263. }
  264. scriptRequest = new Request("GET", "/shanglifeecif.insurancearrangement/_search?size=100&pretty=true&sort=padate:asc&q="+qSearch);
  265. logger.info("合约信息请求参数"+scriptRequest.getEndpoint());
  266. response = restClient.performRequest(scriptRequest);
  267. result = EntityUtils.toString(response.getEntity());
  268. jsonObject = JSON.parseObject(result);
  269. hitsobject = (JSONObject) jsonObject.get("hits");
  270. array = JSON.parseArray(hitsobject.get("hits").toString());
  271. List insurancearrangement = new ArrayList<>();
  272. for (int i = 0; i <array.size() ; i++) {
  273. JSONObject json = (JSONObject)array.get(i);
  274. Map mp = new HashMap();
  275. mp.put("id",json.getString("_id"));
  276. mp.putAll(JSON.parseObject(json.getString("_source"),Map.class));
  277. insurancearrangement.add(mp);
  278. }
  279. map.put("insurancearrangement",insurancearrangement);
  280. //接触信息添加渠道条件
  281. //接触信息
  282. String jcqSearch = "partyid:"+scustid;
  283. if( StringUtils.isNotEmpty(deptCode)){
  284. jcqSearch = "(partyid:"+scustid+"%20AND%20salecom:"+deptCode+")";
  285. }
  286. scriptRequest = new Request("GET", "/shanglifeecif.partytimeline/_search?size=100&pretty=true&sort=sdate:asc&q="+jcqSearch);
  287. logger.info("接触信息请求参数:",scriptRequest.getEndpoint());
  288. response = restClient.performRequest(scriptRequest);
  289. result = EntityUtils.toString(response.getEntity());
  290. jsonObject = JSON.parseObject(result);
  291. hitsobject = (JSONObject) jsonObject.get("hits");
  292. array = JSON.parseArray(hitsobject.get("hits").toString());
  293. List partytimeline = new ArrayList<>();
  294. for (int i = 0; i <array.size() ; i++) {
  295. JSONObject json = (JSONObject)array.get(i);
  296. Map mp = new HashMap();
  297. mp.put("id",json.getString("_id"));
  298. mp.putAll(JSON.parseObject(json.getString("_source"),Map.class));
  299. partytimeline.add(mp);
  300. }
  301. map.put("partytimeline",partytimeline);
  302. logger.info(scriptRequest.getEndpoint());
  303. logger.info("出客户详情时间:"+DateUtils.getTime());
  304. return AjaxResult.success(map);
  305. } catch (Exception e) {
  306. logger.info("客户详情报错时间:"+DateUtils.getTime());
  307. e.printStackTrace();
  308. return AjaxResult.error();
  309. }
  310. }
  311. @GetMapping("/getCustomerOverViewById")
  312. @ResponseBody
  313. public AjaxResult getCustomerOverViewById(String id) {
  314. Long userId = SecurityUtils.getUserId();
  315. SysUser sysUser = userService.selectUserById(userId);
  316. String deptCode = null;
  317. // “上海人寿” 部门编号开发环境是null,生产环境是0。不是上海人寿部门的才分渠道
  318. if (StringUtils.isNotEmpty(sysUser.getDept().getDeptCode()) && ! "0".equals(sysUser.getDept().getDeptCode())) {
  319. deptCode = sysUser.getDept().getDeptCode();
  320. }
  321. // 获取索引的别名,字段,创建时间http://10.32.2.231:9200/shanglifeecif.individual/default_type_/1
  322. try {
  323. logger.info("进客户概览时间:"+DateUtils.getTime());
  324. Request scriptRequest = new Request("GET", "/shanglifeecif.individual/default_type_/"+id+"?pretty=true");
  325. Response response = restClient.performRequest(scriptRequest);
  326. String result = EntityUtils.toString(response.getEntity());
  327. Map map = new HashMap();
  328. JSONObject jsonObject = JSON.parseObject(result);
  329. JSONObject source = JSON.parseObject(jsonObject.getString("_source"));
  330. String scustid = source.getString("scustid");
  331. Map mpInfo = getLables(jsonObject, deptCode);
  332. String jcqSearch = "applicantscustid:"+scustid;
  333. if( StringUtils.isNotEmpty(deptCode)){
  334. jcqSearch = "(applicantscustid:"+scustid+"%20AND%20policybelong:"+deptCode+")";
  335. }
  336. scriptRequest = new Request("GET", "/shanglifeecif.insurancearrangement/_search?size=100&pretty=true&sort=padate:asc&q="+jcqSearch);
  337. logger.info("insurancearrangement",scriptRequest.getEndpoint());
  338. response = restClient.performRequest(scriptRequest);
  339. result = EntityUtils.toString(response.getEntity());
  340. jsonObject = JSON.parseObject(result);
  341. JSONObject hitsobject = (JSONObject) jsonObject.get("hits");
  342. JSONArray array = JSON.parseArray(hitsobject.get("hits").toString());
  343. DecimalFormat df = new DecimalFormat("######0.0");//保留两位小数改为保留一位小数
  344. double prem = 0;//标准保费
  345. double sumprem = 0;//累计保费
  346. double handedinprem = 0;//已交保费
  347. //概览投保时间和保费折线图
  348. Map expectedData = new HashMap();
  349. String[] edata = new String[]{"0","0","0","0","0","0","0","0","0","0","0","0"};
  350. expectedData.put("name","");
  351. Map actaulData = new HashMap();
  352. String[] adata = new String[]{"0","0","0","0","0","0","0","0","0","0","0","0"};
  353. actaulData.put("name","");
  354. List xaxisData = new ArrayList();
  355. xaxisData.add("1");
  356. xaxisData.add("2");
  357. xaxisData.add("3");
  358. xaxisData.add("4");
  359. xaxisData.add("5");
  360. xaxisData.add("6");
  361. xaxisData.add("7");
  362. xaxisData.add("8");
  363. xaxisData.add("9");
  364. xaxisData.add("10");
  365. xaxisData.add("11");
  366. xaxisData.add("12");
  367. long insureDay = 0;//投保时长
  368. int guaranteeDay = 0;//享受保障天数
  369. Map<String,Object> majorCategorie = new HashMap();
  370. Map mpremMap = new HashMap();
  371. int firstDate = 1;//定义第一次长期险获取
  372. Date date = new Date();
  373. Calendar cal = Calendar.getInstance();
  374. cal.setTime(date);
  375. cal.add(Calendar.YEAR, 1);
  376. Date nextYearTime = cal.getTime();
  377. String currentDateTime = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD,date);
  378. String currentYear = DateUtils.parseDateToStr(DateUtils.YYYY,date);
  379. Set<String> noivpolicyset= new HashSet<>();//失效保单
  380. Set<String> novpolicyset= new HashSet<>();//有效保单
  381. //获取最近年份
  382. logger.info("getCustomerOverViewById",array.toJSONString());
  383. List<PolicyDate> policyDates = new ArrayList<>();
  384. final String contno = "policyno";
  385. final String startDate = "pindate";
  386. final String endDate = "pmdate";
  387. final String padateKey = "padate";
  388. final String agrmntageKey = "agrmntage";
  389. final String policystate = "policystate";
  390. for (int i = 0; i <array.size() ; i++) {
  391. JSONObject json = (JSONObject)array.get(i);
  392. JSONObject _source = (JSONObject) json.get("_source");
  393. if (_source.containsKey(contno)
  394. && _source.containsKey(startDate)
  395. && _source.containsKey(endDate)
  396. && _source.containsKey(padateKey)
  397. && _source.containsKey(agrmntageKey)
  398. && _source.containsKey(policystate)) {
  399. try {
  400. policyDates.add(new PolicyDate(
  401. _source.getString(contno)
  402. , _source.getDate(startDate)
  403. , _source.getDate(endDate)
  404. , _source.getDate(padateKey)
  405. , _source.getString(policystate)
  406. , _source.getInteger(agrmntageKey)));
  407. } catch (Exception e) {
  408. logger.warn(String.format(
  409. "Failed to instance PolicyDate, %s: [%s], %s: [%s], %s: [%s], %s: [%s], %s: [%s], %s: [%s]"
  410. , contno, _source.get(contno)
  411. , startDate, _source.get(startDate)
  412. , endDate, _source.get(endDate)
  413. , padateKey, _source.get(padateKey)
  414. , policystate, _source.get(policystate)
  415. , agrmntageKey, _source.get(agrmntageKey)));
  416. }
  417. } else {
  418. logger.info(String.format("Failed to instance PolicyDate, must be '%s', '%s', '%s', '%s', '%s', '%s', _source: [%s]"
  419. , contno, startDate, endDate, padateKey, policystate, agrmntageKey, _source.toJSONString()));
  420. }
  421. Date padate = _source.getDate("padate");
  422. if(i==0){
  423. insureDay = DateUtils.getDateDifDay(new Date(),padate);
  424. }
  425. if("有效".equals(_source.getString("policystate"))){
  426. novpolicyset.add(_source.getString("policyno"));
  427. if(_source.containsKey("sumprem")){
  428. sumprem+=_source.getDouble("sumprem");
  429. }
  430. /* 2022/5/31 start 陆光晨 享受保障天数放在后面计算
  431. Integer agrmntage = _source.getInteger("agrmntage");
  432. //短期险
  433. if(agrmntage<180){
  434. Date pindate = _source.getDate("pindate");//起保日期
  435. Date pmdate = _source.getDate("pmdate");//终保日期
  436. guaranteeDay+=DateUtils.getDateDifDay(pmdate,pindate);
  437. }else{
  438. //获取第一次长期险的投保日期,使用当前日期减去投保日期获取保障天数
  439. if(firstDate==1){
  440. guaranteeDay+=DateUtils.getDateDifDay(new Date(),padate);
  441. firstDate++;
  442. }
  443. }
  444. 2022/5/31 end 陆光晨 享受保障天数放在后面计算
  445. */
  446. if(_source.containsKey("prem")){
  447. //计算年缴保费过滤掉缴费方式趸缴的
  448. if(!"趸缴".equals(_source.getString("payment"))){
  449. String norenewal = _source.getString("norenewal")==null?"":_source.getString("norenewal").trim();//续保次数
  450. String payendyear = _source.getString("payendyear")==null?"":_source.getString("payendyear").trim();//缴费年期
  451. //String currentPadateStr = DateUtils.parseDateToStr(currentYear+"-MM-dd",padate);
  452. if(_source.containsKey("npdate")){
  453. Date npdate = _source.getDate("npdate");
  454. String npDateStr = DateUtils.parseDateToStr("yyyy-MM-dd", npdate);
  455. String npDateStrYear = DateUtils.parseDateToStr("yyyy", npdate);
  456. //缴费期限和缴费次数不一样 或者 当年缴费期限和缴费次数一样时
  457. if(!norenewal.equals(payendyear) || (norenewal.equals(payendyear) && (Integer.parseInt(npDateStrYear)-1)==Integer.parseInt(currentYear))){
  458. prem+=_source.getDouble("prem");
  459. if(norenewal.equals(payendyear) && nextYearTime.getTime()>npdate.getTime() && Integer.parseInt(npDateStrYear)>Integer.parseInt(currentYear)){
  460. handedinprem+=_source.getDouble("prem");
  461. }
  462. }
  463. if(!norenewal.equals(payendyear) && npDateStr.compareTo(currentDateTime)>0 && !npDateStrYear.equals(currentYear)){
  464. handedinprem+=_source.getDouble("prem");
  465. }
  466. }
  467. String m = DateUtils.parseDateToStr("M", padate);
  468. if(mpremMap.containsKey(m)){
  469. double tprem = Double.parseDouble(mpremMap.get(m).toString());
  470. tprem+=_source.getDouble("prem");
  471. mpremMap.put(m,df.format(tprem));
  472. edata[Integer.parseInt(m)-1] = df.format(tprem);
  473. adata[Integer.parseInt(m)-1] = df.format(tprem);
  474. }else{
  475. mpremMap.put(m,df.format(_source.getDouble("prem")));
  476. edata[Integer.parseInt(m)-1] = df.format(_source.getDouble("prem"));
  477. adata[Integer.parseInt(m)-1] = df.format(_source.getDouble("prem"));
  478. }
  479. }else{
  480. if("趸缴".equals(_source.getString("payment")) && currentYear.equals(DateUtils.parseDateToStr("yyyy",padate))){
  481. prem+=_source.getDouble("prem");
  482. handedinprem+=_source.getDouble("prem");
  483. }
  484. }
  485. }
  486. String risk_categories_name = _source.getString("risk_categories_name");
  487. if(majorCategorie.containsKey(risk_categories_name)){
  488. double risk = Double.parseDouble(majorCategorie.get(risk_categories_name).toString());
  489. if(_source.containsKey("risk")){
  490. risk += _source.getDouble("risk");
  491. }
  492. majorCategorie.put(risk_categories_name,risk);
  493. }else{
  494. if(_source.containsKey("risk") && StringUtils.isNotEmpty(risk_categories_name)){
  495. majorCategorie.put(risk_categories_name,_source.getDouble("risk"));
  496. }
  497. }
  498. }else{
  499. //客户的所有保单缴费期满且承保期限已满正常终止的客户,需要加上累计保费
  500. if("终止".equals(_source.getString("policystate"))){
  501. String norenewal = _source.getString("norenewal")==null?"":_source.getString("norenewal").trim();//续保次数
  502. String payendyear = _source.getString("payendyear")==null?"":_source.getString("payendyear").trim();//缴费年期
  503. Date pmdate = _source.getDate("pmdate");//终保日期
  504. /*
  505. 2022/5/13 陆光晨 一期测试环境测试时测试老师要求不计算终止状态的保单,因为页面上显示的是“有效保单累计保费”所以只统计有效的就好
  506. if(norenewal.equals(payendyear) && currentDateTime.compareTo(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD,pmdate))>0){
  507. if(_source.containsKey("sumprem")){
  508. sumprem+=_source.getDouble("sumprem");
  509. }
  510. }
  511. */
  512. Integer agrmntage = _source.getInteger("agrmntage");
  513. /*
  514. 2022/5/18 start 陆光晨 根据测试曹老师的要求,终止状态的保单计算保障天数是不需要控制短期险
  515. 缺陷描述:一期测试,使用健康险权限用户登录时,查看客户号1000573488的客户概览页,有一个终止状态的长期保单(正常到期)但享受保障天数是0
  516. 测试老师认为终止状态的保单也要算进保障天数中,不管是长期险还是短期险
  517. */
  518. //短期险
  519. // if(agrmntage<180){
  520. /* 2022/5/31 start 陆光晨 享受保障天数放在后面计算
  521. Date pindate = _source.getDate("pindate");//起保日期
  522. guaranteeDay+=DateUtils.getDateDifDay(pmdate,pindate);
  523. 2022/5/31 end 陆光晨 享受保障天数放在后面计算 */
  524. // }
  525. // 2022/5/18 end 陆光晨 根据测试曹老师的要求,终止状态的保单计算保障天数是不需要控制短期险
  526. }
  527. if (_source.getString("policystate") != null) {
  528. noivpolicyset.add(_source.getString("policyno"));
  529. }
  530. }
  531. }
  532. mpInfo.put("noivpolicy",noivpolicyset.size());
  533. mpInfo.put("novpolicy",novpolicyset.size());
  534. expectedData.put("data",edata);
  535. actaulData.put("data",adata);
  536. Map lineBarChartData = new HashMap();
  537. lineBarChartData.put("expectedData",expectedData);
  538. lineBarChartData.put("actaulData",actaulData);
  539. lineBarChartData.put("xaxisData",xaxisData);
  540. map.put("lineBarChartData",lineBarChartData);
  541. //查询理赔信息
  542. String lpqSearch = "lpscutid:"+scustid;
  543. if( StringUtils.isNotEmpty(deptCode)){
  544. lpqSearch = "(lpscutid:"+scustid+"%20AND%20salecom:"+deptCode+")";
  545. }
  546. scriptRequest = new Request("GET", "/shanglifeecif.insuranceclaimthread/_search?size=100&pretty=true&q="+lpqSearch);
  547. response = restClient.performRequest(scriptRequest);
  548. result = EntityUtils.toString(response.getEntity());
  549. jsonObject = JSON.parseObject(result);
  550. hitsobject = (JSONObject) jsonObject.get("hits");
  551. array = JSON.parseArray(hitsobject.get("hits").toString());
  552. Map insuranceclaimthread = new HashMap();
  553. List insuranceclaimthreads = new ArrayList<>();
  554. double claimAmount = 0;//理赔总金额
  555. Set<String> claimTypeSet = new HashSet<>();//理赔类型
  556. for (int i = 0; i <array.size() ; i++) {
  557. JSONObject json = (JSONObject)array.get(i);
  558. JSONObject claimSource = JSON.parseObject(json.getString("_source"));
  559. if(claimSource.containsKey("ccamt")){
  560. claimAmount+=claimSource.getDouble("ccamt");
  561. }
  562. claimTypeSet.add(claimSource.getString("accidenttype"));
  563. insuranceclaimthreads.add(claimSource);
  564. }
  565. insuranceclaimthread.put("isClaim",insuranceclaimthreads.size()>0?"是":"否");
  566. insuranceclaimthread.put("claimAmount",df.format(claimAmount));
  567. insuranceclaimthread.put("claimType",String.join(",",claimTypeSet));
  568. map.put("insuranceclaimthread",insuranceclaimthread);
  569. mpInfo.put("prem",df.format(prem));//年缴保费/应交保费
  570. mpInfo.put("sumprem",df.format(sumprem));//累计保费
  571. mpInfo.put("handedinprem",df.format(handedinprem));//已交保费
  572. mpInfo.put("insureDay",(insureDay/365) +"年"+(insureDay%365)+"天");
  573. //保障天数需要加上退保之前的天数
  574. String tbcustomerinfoSearch = "scustid:"+scustid;
  575. if( StringUtils.isNotEmpty(deptCode)){
  576. tbcustomerinfoSearch = "(scustid:"+scustid+"%20AND%20salecom:"+deptCode+")";
  577. }
  578. scriptRequest = new Request("GET", "/shanglifeecif.tbcustomerinfo/_search?pretty=true&sort=sdate:asc&size=100&q="+tbcustomerinfoSearch);
  579. response = restClient.performRequest(scriptRequest);
  580. result = EntityUtils.toString(response.getEntity());
  581. jsonObject = JSON.parseObject(result);
  582. hitsobject = (JSONObject) jsonObject.get("hits");
  583. array = JSON.parseArray(hitsobject.get("hits").toString());
  584. List<PolicyDate> cancelPolicyDates = new ArrayList<>();
  585. Date fSdate = null;//最终起始日期,分段的
  586. Date fEdate = null;//最终结束日期,分段的
  587. for (int i = 0; i <array.size() ; i++) {
  588. JSONObject json = (JSONObject)array.get(i);
  589. JSONObject tbSource = JSON.parseObject(json.getString("_source"));
  590. if (tbSource.containsKey("contno") && tbSource.containsKey("sdate") && tbSource.containsKey("edate")) {
  591. try {
  592. cancelPolicyDates.add(new PolicyDate(tbSource.getString("contno"), tbSource.getDate("sdate"), tbSource.getDate("edate")));
  593. } catch (Exception e) {
  594. logger.warn(String.format(
  595. "Failed to instance PolicyDate, contno: [%s], sdate: [%s], edate: [%s]"
  596. , tbSource.get("contno"), tbSource.get("sdate"), tbSource.get("edate")));
  597. }
  598. } else {
  599. logger.info("Failed to instance PolicyDate, must be 'contno', 'sdate', 'edate', _source: "+ tbSource.toJSONString());
  600. }
  601. /** 2022/5/31 start 陆光晨 享受保障天数放在后面计算
  602. * 获取该退报客户的所有保单信息,计算天数退保天数加上有效保单的天数
  603. if(tbSource.containsKey("sdate") && tbSource.containsKey("edate")){
  604. Date sdate = tbSource.getDate("sdate");
  605. Date edate = tbSource.getDate("edate");
  606. //获取第一条数据赋值给最后计算的开始和结束日期
  607. if(i==0){
  608. fSdate = sdate;
  609. fEdate = edate;
  610. }
  611. //
  612. // 逻辑梳理
  613. // 下一张保单的开始日期小于等于当前的结束日期 ,最终开始日期按照上一张保单的开始日期
  614. // 下一张保单的开始日期大于当前的结束日期 ,需要计算第一部分的保障天数依次循环
  615. //
  616. if(i>0){
  617. if(sdate.getTime()<=fEdate.getTime()){
  618. //保单结束日期在最终结束日期之后,需要把保单结束日期赋值给最终结束日期
  619. if(edate.getTime()>fEdate.getTime()){
  620. fEdate = edate;
  621. }
  622. }else{
  623. //保单的开始日期在结束日期之后,需要先计算前一段的日期差值加到保障天数
  624. if(i!=array.size()){
  625. guaranteeDay+=DateUtils.getDateDifDay(fEdate,fSdate);
  626. fSdate = sdate;
  627. fEdate = edate;
  628. }
  629. }
  630. if(i==(array.size()-1)){
  631. guaranteeDay+=DateUtils.getDateDifDay(fEdate,fSdate);
  632. }
  633. }
  634. }
  635. 2022/5/31 end 陆光晨 享受保障天数放在后面计算 */
  636. }
  637. guaranteeDay = guaranteeDay(policyDates, cancelPolicyDates); // 计算享受保障天数
  638. mpInfo.put("guaranteeDay",guaranteeDay>insureDay?insureDay+"天":guaranteeDay+"天");
  639. map.put("custInfo",mpInfo);
  640. //险种数据准备
  641. Map riskMap = new HashMap();
  642. riskMap.put("人寿保险","0");
  643. riskMap.put("新型寿险","0");
  644. riskMap.put("意外伤害保险","0");
  645. riskMap.put("医疗险","0");
  646. riskMap.put("重疾保险","0");
  647. riskMap.put("年金保险","0");
  648. for(String key : majorCategorie.keySet()){
  649. if(riskMap.containsKey(key)){
  650. riskMap.put(key,majorCategorie.get(key));
  651. }
  652. }
  653. map.put("majorCategorie",riskMap);
  654. logger.info("出客户概览时间:"+DateUtils.getTime());
  655. return AjaxResult.success(map);
  656. } catch (Exception e) {
  657. logger.info("客户概览报错时间:"+DateUtils.getTime());
  658. e.printStackTrace();
  659. return AjaxResult.error();
  660. }
  661. }
  662. @GetMapping("/export")
  663. public void export(HttpServletResponse response, HttpServletRequest request,
  664. String education,//学历
  665. String policybelong,//业绩归属
  666. String payS,String payE, //年缴费区间
  667. String fadate,//投保年份
  668. String productname,//险种类别
  669. String insuredAmountS,String insuredAmountE,//保额区间
  670. String ageS,String ageE,//年龄区间
  671. String gender,//性别
  672. String sobirth,//省份
  673. String NOVPolicy,//保单件数
  674. String custtype,//客户类型 投保人
  675. String SCustID,// 核心客户号
  676. String custclass,//客户等级
  677. String participantsDateS,String participantsDateE,//参与方时间
  678. String PIncomeS,String PIncomeE,//年收入区间
  679. String Insured,//投保对象
  680. String lp,//理赔
  681. String yx,//有效
  682. String gzgw,//关注官微
  683. String zcgw,//注册官微
  684. String name,//客户姓名
  685. String idcard,//客户证件号码
  686. String mobile//客户手机号
  687. ) {
  688. try{
  689. logger.info("导出进时间:"+DateUtils.getTime());
  690. JSONObject jsonObject = getCustomerListData(0, 10000, false, "5m",
  691. education,//学历
  692. policybelong,//业绩归属
  693. payS, payE, //年缴费区间
  694. fadate,//投保年份
  695. productname,//险种类别
  696. insuredAmountS, insuredAmountE,//保额区间
  697. ageS, ageE,//年龄区间
  698. gender,//性别
  699. sobirth,//省份
  700. NOVPolicy,//保单件数
  701. custtype,//客户类型 投保人
  702. SCustID,// 核心客户号
  703. custclass,//客户等级
  704. participantsDateS, participantsDateE,//参与方时间
  705. PIncomeS, PIncomeE,//年收入区间
  706. Insured,//投保对象
  707. lp,//理赔
  708. yx,//有效
  709. gzgw,//关注官微
  710. zcgw,//注册官微
  711. name,//客户姓名
  712. idcard,//客户证件号码
  713. mobile//客户手机号
  714. );
  715. JSONObject hitsobject = (JSONObject) jsonObject.get("hits");
  716. JSONArray array = JSON.parseArray(hitsobject.get("hits").toString());
  717. List<Customer> customers = new ArrayList<Customer>();
  718. String scroll_id = jsonObject.getString("_scroll_id");
  719. HttpEntity entity = new NStringEntity("{\n" +
  720. " \"scroll_id\": \""+scroll_id+"\",\n" +
  721. " \"scroll\": \"5m\"\n" +
  722. "}", ContentType.APPLICATION_JSON);
  723. while (array.size() != 0) {
  724. // 这里填写你的业务逻辑,即对每一条数据的处理
  725. for (int i = 0; i <array.size() ; i++) {
  726. JSONObject json = (JSONObject)array.get(i);
  727. Map mp = getSource(json);
  728. Customer customer = new Customer();
  729. JSONObject jsonOb = JSON.parseObject(json.getString("_source"));
  730. customer.setScustId("\t"+jsonOb.getString("scustid"));
  731. customer.setCustId(jsonOb.getString("custid"));
  732. customer.setName(jsonOb.getString("name"));
  733. customer.setSex("0".equals(jsonOb.getString("gender"))?"男":"女");
  734. customer.setCustType(jsonOb.getString("custtype"));
  735. customer.setEducation(jsonOb.getString("education"));
  736. customer.setVaild(StringUtils.isEmpty(jsonOb.getString("label91"))?"有效":"无效");
  737. customer.setpIncome(jsonOb.getString("pincome"));
  738. customer.setNum(jsonOb.getString("label25"));
  739. String ral = jsonOb.getString("ral");
  740. if(StringUtils.isNotBlank(ral)){
  741. List<Map> list = AddressResolutionUtil.addressResolution(ral);
  742. if(list!=null && list.size()>0){
  743. customer.setProvince(list.get(0).get("province").toString());
  744. }
  745. }
  746. if(mp.containsKey("birthday")){
  747. String birthday = jsonOb.getString("birthday");
  748. mp.put("birthday", birthday);
  749. mp.put("age",DateUtils.getAge(DateUtils.dateTime(DateUtils.YYYY_MM_DD,birthday)));
  750. customer.setBirthDay("\t"+birthday);
  751. customer.setAge(DateUtils.getAge(DateUtils.dateTime(DateUtils.YYYY_MM_DD,birthday)));
  752. }
  753. //String regex = "(\\w{4})(\\w+)(\\w{0})";
  754. if(mp.containsKey("idcard")){
  755. customer.setIdType("身份证");
  756. String idCard = jsonOb.getString("idcard");
  757. //customer.setIdCard("\t"+jsonOb.getString("idcard").replaceAll(regex, "$1****$3"));
  758. if(idCard.length()>6){
  759. customer.setIdCard("\t"+idCard.replaceAll(idCard.substring(idCard.length()-6), "******"));
  760. }else{
  761. customer.setIdCard("\t"+"******");
  762. }
  763. }else if(mp.containsKey("passport")){
  764. customer.setIdType("护照");
  765. String passport = jsonOb.getString("passport");
  766. //customer.setIdCard("\t"+jsonOb.getString("passport").replaceAll(regex, "$1****$3"));
  767. if(passport.length()>6){
  768. customer.setIdCard("\t"+passport.replaceAll(passport.substring(passport.length()-6), "******"));
  769. }else{
  770. customer.setIdCard("\t"+"******");
  771. }
  772. }else if(mp.containsKey("dlicense")){
  773. customer.setIdType("驾驶证");
  774. String dlicense = jsonOb.getString("dlicense");
  775. //customer.setIdCard("\t"+jsonOb.getString("dlicense").replaceAll(regex, "$1****$3"));
  776. if(dlicense.length()>6){
  777. customer.setIdCard("\t"+dlicense.replaceAll(dlicense.substring(dlicense.length()-6), "******"));
  778. }else{
  779. customer.setIdCard("\t"+"******");
  780. }
  781. }else if(mp.containsKey("otheridnumber")){
  782. customer.setIdType("其它证件类型");
  783. String otheridnumber = jsonOb.getString("otheridnumber");
  784. //customer.setIdCard("\t"+jsonOb.getString("otheridnumber").replaceAll(regex, "$1****$3"));
  785. if(otheridnumber.length()>6){
  786. customer.setIdCard("\t"+otheridnumber.replaceAll(otheridnumber.substring(otheridnumber.length()-6), "******"));
  787. }else{
  788. customer.setIdCard("\t"+"******");
  789. }
  790. }
  791. if(mp.containsKey("custclass")){
  792. String custclazz = jsonOb.getString("custclass");
  793. switch (custclazz){
  794. case "1":
  795. customer.setCustClass("钻石");
  796. break;
  797. case "2":
  798. customer.setCustClass("白金");
  799. break;
  800. case "3":
  801. customer.setCustClass("黄金");
  802. break;
  803. case "4":
  804. customer.setCustClass("普通");
  805. break;
  806. default:
  807. customer.setCustClass("无");
  808. }
  809. }else{
  810. customer.setCustClass("无");
  811. }
  812. customers.add(customer);
  813. }
  814. // 继续向后查询
  815. Request scriptRequest = new Request("GET", "/_search/scroll");
  816. scriptRequest.setEntity(entity);
  817. Response responseData = restClient.performRequest(scriptRequest);
  818. String result = EntityUtils.toString(responseData.getEntity());
  819. jsonObject = JSON.parseObject(result);
  820. hitsobject = (JSONObject) jsonObject.get("hits");
  821. array = JSON.parseArray(hitsobject.get("hits").toString());
  822. }
  823. Map<String, String> header = new LinkedHashMap<>();
  824. header.put("scustId", "核心客户号");
  825. header.put("custId", "客户号");
  826. header.put("name", "姓名");
  827. header.put("idType", "证件类型");
  828. header.put("idCard", "证件号码");
  829. header.put("sex", "性别");
  830. header.put("age", "年龄");
  831. header.put("birthDay", "出生日期");
  832. header.put("custClass", "客户等级");
  833. header.put("custType", "客户类型");
  834. header.put("province", "省份");
  835. header.put("education", "学历");
  836. header.put("vaild", "是否有效客户");
  837. /*header.put("policyBelong", "业绩归属");*/
  838. header.put("pIncome", "年收入(万)");
  839. header.put("num", "保单件数");
  840. CsvUtil.export(request, response, "customer", header, customers);
  841. logger.info("导出出时间:"+DateUtils.getTime());
  842. }catch (Exception e){
  843. logger.info("导出出错:"+DateUtils.getTime());
  844. e.printStackTrace();
  845. }
  846. }
  847. /**
  848. * 导出四要素疑似相同指姓名、性别、证件类型、手机号一致
  849. * @param response
  850. * @param request
  851. */
  852. @GetMapping("/exportSameZero")
  853. public void exportSameZero(HttpServletResponse response, HttpServletRequest request)
  854. {
  855. logger.info("导出四要素进时间:"+DateUtils.getTime());
  856. try{
  857. Request scriptRequest = new Request("GET", "/shanglifeecif.samecustomer/_search?sort=name:asc&q=sametype:0&size=10000&scroll=5m");
  858. Response responseData = restClient.performRequest(scriptRequest);
  859. String result = EntityUtils.toString(responseData.getEntity());
  860. JSONObject jsonObject = JSON.parseObject(result);
  861. JSONObject hitsobject = (JSONObject) jsonObject.get("hits");
  862. JSONArray array = JSON.parseArray(hitsobject.get("hits").toString());
  863. List<Customer> customers = new ArrayList<Customer>();
  864. String scroll_id = jsonObject.getString("_scroll_id");
  865. HttpEntity entity = new NStringEntity("{\n" +
  866. " \"scroll_id\": \""+scroll_id+"\",\n" +
  867. " \"scroll\": \"5m\"\n" +
  868. "}", ContentType.APPLICATION_JSON);
  869. while (array.size() != 0) {
  870. // 这里填写你的业务逻辑,即对每一条数据的处理
  871. for (int i = 0; i <array.size() ; i++) {
  872. JSONObject json = (JSONObject)array.get(i);
  873. Map mp = new HashMap();
  874. Customer customer = new Customer();
  875. json.getString("_source");
  876. mp.put("id",json.getString("_id"));
  877. JSONObject jsonOb = JSON.parseObject(json.getString("_source"));
  878. mp.putAll(JSON.parseObject(json.getString("_source"),Map.class));
  879. customer.setScustId("\t"+jsonOb.getString("scustid"));
  880. customer.setName(jsonOb.getString("name"));
  881. customer.setSex("0".equals(jsonOb.getString("gender"))?"男":"女");
  882. if(mp.containsKey("birthday")){
  883. String birthday = jsonOb.getString("birthday");
  884. mp.put("birthday", birthday);
  885. customer.setBirthDay("\t"+birthday);
  886. customer.setAge(DateUtils.getAge(DateUtils.dateTime(DateUtils.YYYY_MM_DD,jsonOb.getString("birthday"))));
  887. }
  888. if(mp.containsKey("idcard")){
  889. customer.setIdType("身份证");
  890. // customer.setIdCard("\t"+jsonOb.getString("idcard"));
  891. String idcard = jsonOb.getString("idcard");
  892. if(idcard.length()>6){
  893. customer.setIdCard("\t"+idcard.replaceAll(idcard.substring(idcard.length()-6), "******"));
  894. }else{
  895. customer.setIdCard("\t"+"******");
  896. }
  897. }else if(mp.containsKey("passport")){
  898. customer.setIdType("护照");
  899. // customer.setIdCard("\t"+jsonOb.getString("passport"));
  900. String passport = jsonOb.getString("passport");
  901. if(passport.length()>6){
  902. customer.setIdCard("\t"+passport.replaceAll(passport.substring(passport.length()-6), "******"));
  903. }else{
  904. customer.setIdCard("\t"+"******");
  905. }
  906. }else if(mp.containsKey("dlicense")){
  907. customer.setIdType("驾驶证");
  908. // customer.setIdCard("\t"+jsonOb.getString("dlicense"));
  909. String dlicense = jsonOb.getString("dlicense");
  910. if(dlicense.length()>6){
  911. customer.setIdCard("\t"+dlicense.replaceAll(dlicense.substring(dlicense.length()-6), "******"));
  912. }else{
  913. customer.setIdCard("\t"+"******");
  914. }
  915. }else if(mp.containsKey("otheridnumber")){
  916. customer.setIdType("其它证件类型");
  917. // customer.setIdCard("\t"+jsonOb.getString("otheridnumber"));
  918. String otheridnumber = jsonOb.getString("otheridnumber");
  919. if(otheridnumber.length()>6){
  920. customer.setIdCard("\t"+otheridnumber.replaceAll(otheridnumber.substring(otheridnumber.length()-6), "******"));
  921. }else{
  922. customer.setIdCard("\t"+"******");
  923. }
  924. }
  925. customers.add(customer);
  926. }
  927. // 继续向后查询
  928. scriptRequest = new Request("GET", "/_search/scroll");
  929. scriptRequest.setEntity(entity);
  930. responseData = restClient.performRequest(scriptRequest);
  931. result = EntityUtils.toString(responseData.getEntity());
  932. jsonObject = JSON.parseObject(result);
  933. hitsobject = (JSONObject) jsonObject.get("hits");
  934. array = JSON.parseArray(hitsobject.get("hits").toString());
  935. }
  936. Map<String, String> header = new LinkedHashMap<>();
  937. header.put("scustId", "核心客户号");
  938. header.put("name", "姓名");
  939. header.put("idType", "证件类型");
  940. header.put("idCard", "证件号码");
  941. header.put("sex", "性别");
  942. header.put("birthDay", "出生日期");
  943. CsvUtil.export(request, response, "customer", header, customers);
  944. logger.info("导出四要素出时间:"+DateUtils.getTime());
  945. }catch (Exception e){
  946. logger.info("导出四要素出错:"+DateUtils.getTime());
  947. e.printStackTrace();
  948. }
  949. }
  950. /**
  951. * 导出三要素疑似相同指姓名、性别、出生日期一致
  952. * @param response
  953. * @param request
  954. */
  955. @GetMapping("/exportSameOne")
  956. public void exportSameOne(HttpServletResponse response, HttpServletRequest request)
  957. {
  958. logger.info("导出三要素进时间:"+DateUtils.getTime());
  959. try{
  960. Request scriptRequest = new Request("GET", "/shanglifeecif.samecustomer/_search?sort=name:asc,gender:asc,birthday:asc&q=sametype:1&size=10000&scroll=5m");
  961. Response responseData = restClient.performRequest(scriptRequest);
  962. String result = EntityUtils.toString(responseData.getEntity());
  963. JSONObject jsonObject = JSON.parseObject(result);
  964. JSONObject hitsobject = (JSONObject) jsonObject.get("hits");
  965. JSONArray array = JSON.parseArray(hitsobject.get("hits").toString());
  966. List<Customer> customers = new ArrayList<Customer>();
  967. String scroll_id = jsonObject.getString("_scroll_id");
  968. HttpEntity entity = new NStringEntity("{\n" +
  969. " \"scroll_id\": \""+scroll_id+"\",\n" +
  970. " \"scroll\": \"5m\"\n" +
  971. "}", ContentType.APPLICATION_JSON);
  972. while (array.size() != 0) {
  973. // 这里填写你的业务逻辑,即对每一条数据的处理
  974. for (int i = 0; i <array.size() ; i++) {
  975. JSONObject json = (JSONObject)array.get(i);
  976. Map mp = new HashMap();
  977. Customer customer = new Customer();
  978. json.getString("_source");
  979. mp.put("id",json.getString("_id"));
  980. JSONObject jsonOb = JSON.parseObject(json.getString("_source"));
  981. mp.putAll(JSON.parseObject(json.getString("_source"),Map.class));
  982. customer.setScustId("\t"+jsonOb.getString("scustid"));
  983. customer.setName(jsonOb.getString("name"));
  984. customer.setSex("0".equals(jsonOb.getString("gender"))?"男":"女");
  985. if(mp.containsKey("birthday")){
  986. String birthday = jsonOb.getString("birthday");
  987. mp.put("birthday", birthday);
  988. customer.setBirthDay(birthday);
  989. customer.setAge(DateUtils.getAge(DateUtils.dateTime(DateUtils.YYYY_MM_DD,jsonOb.getString("birthday"))));
  990. }
  991. if(mp.containsKey("idcard")){
  992. customer.setIdType("身份证");
  993. // customer.setIdCard("\t"+jsonOb.getString("idcard"));
  994. String idcard = jsonOb.getString("idcard");
  995. if(idcard.length()>6){
  996. customer.setIdCard("\t"+idcard.replaceAll(idcard.substring(idcard.length()-6), "******"));
  997. }else{
  998. customer.setIdCard("\t"+"******");
  999. }
  1000. }else if(mp.containsKey("passport")){
  1001. customer.setIdType("护照");
  1002. // customer.setIdCard("\t"+jsonOb.getString("passport"));
  1003. String passport = jsonOb.getString("passport");
  1004. if(passport.length()>6){
  1005. customer.setIdCard("\t"+passport.replaceAll(passport.substring(passport.length()-6), "******"));
  1006. }else{
  1007. customer.setIdCard("\t"+"******");
  1008. }
  1009. }else if(mp.containsKey("dlicense")){
  1010. customer.setIdType("驾驶证");
  1011. // customer.setIdCard("\t"+jsonOb.getString("dlicense"));
  1012. String dlicense = jsonOb.getString("dlicense");
  1013. if(dlicense.length()>6){
  1014. customer.setIdCard("\t"+dlicense.replaceAll(dlicense.substring(dlicense.length()-6), "******"));
  1015. }else{
  1016. customer.setIdCard("\t"+"******");
  1017. }
  1018. }else if(mp.containsKey("otheridnumber")){
  1019. customer.setIdType("其它证件类型");
  1020. // customer.setIdCard("\t"+jsonOb.getString("otheridnumber"));
  1021. String otheridnumber = jsonOb.getString("otheridnumber");
  1022. if(otheridnumber.length()>6){
  1023. customer.setIdCard("\t"+otheridnumber.replaceAll(otheridnumber.substring(otheridnumber.length()-6), "******"));
  1024. }else{
  1025. customer.setIdCard("\t"+"******");
  1026. }
  1027. }
  1028. customers.add(customer);
  1029. }
  1030. // 继续向后查询
  1031. scriptRequest = new Request("GET", "/_search/scroll");
  1032. scriptRequest.setEntity(entity);
  1033. responseData = restClient.performRequest(scriptRequest);
  1034. result = EntityUtils.toString(responseData.getEntity());
  1035. jsonObject = JSON.parseObject(result);
  1036. hitsobject = (JSONObject) jsonObject.get("hits");
  1037. array = JSON.parseArray(hitsobject.get("hits").toString());
  1038. }
  1039. Map<String, String> header = new LinkedHashMap<>();
  1040. header.put("scustId", "核心客户号");
  1041. header.put("name", "姓名");
  1042. header.put("idType", "证件类型");
  1043. header.put("idCard", "证件号码");
  1044. header.put("sex", "性别");
  1045. header.put("birthDay", "出生日期");
  1046. CsvUtil.export(request, response, "customer", header, customers);
  1047. logger.info("导出三要素出时间:"+DateUtils.getTime());
  1048. }catch (Exception e){
  1049. logger.info("导出三要素出错:"+DateUtils.getTime());
  1050. e.printStackTrace();
  1051. }
  1052. }
  1053. /**
  1054. * 导出两要素疑似相同指姓名、证件号码一致
  1055. * @param response
  1056. * @param request
  1057. */
  1058. @GetMapping("/exportSameTwo")
  1059. public void exportSameTwo(HttpServletResponse response, HttpServletRequest request)
  1060. {
  1061. logger.info("导出两要素进时间:"+DateUtils.getTime());
  1062. try{
  1063. Request scriptRequest = new Request("GET", "/shanglifeecif.samecustomer/_search?sort=name:asc&q=sametype:2&size=10000&scroll=5m");
  1064. Response responseData = restClient.performRequest(scriptRequest);
  1065. String result = EntityUtils.toString(responseData.getEntity());
  1066. JSONObject jsonObject = JSON.parseObject(result);
  1067. JSONObject hitsobject = (JSONObject) jsonObject.get("hits");
  1068. JSONArray array = JSON.parseArray(hitsobject.get("hits").toString());
  1069. List<Customer> customers = new ArrayList<Customer>();
  1070. String scroll_id = jsonObject.getString("_scroll_id");
  1071. HttpEntity entity = new NStringEntity("{\n" +
  1072. " \"scroll_id\": \""+scroll_id+"\",\n" +
  1073. " \"scroll\": \"5m\"\n" +
  1074. "}", ContentType.APPLICATION_JSON);
  1075. while (array.size() != 0) {
  1076. // 这里填写你的业务逻辑,即对每一条数据的处理
  1077. for (int i = 0; i <array.size() ; i++) {
  1078. JSONObject json = (JSONObject)array.get(i);
  1079. Map mp = new HashMap();
  1080. Customer customer = new Customer();
  1081. json.getString("_source");
  1082. mp.put("id",json.getString("_id"));
  1083. JSONObject jsonOb = JSON.parseObject(json.getString("_source"));
  1084. mp.putAll(JSON.parseObject(json.getString("_source"),Map.class));
  1085. customer.setScustId("\t"+jsonOb.getString("scustid"));
  1086. customer.setName(jsonOb.getString("name"));
  1087. customer.setSex("0".equals(jsonOb.getString("gender"))?"男":"女");
  1088. if(mp.containsKey("birthday")){
  1089. String birthday = jsonOb.getString("birthday");
  1090. mp.put("birthday", birthday);
  1091. customer.setBirthDay("\t"+birthday);
  1092. customer.setAge(DateUtils.getAge(DateUtils.dateTime(DateUtils.YYYY_MM_DD,jsonOb.getString("birthday"))));
  1093. }
  1094. if(mp.containsKey("idcard")){
  1095. customer.setIdType("身份证");
  1096. // customer.setIdCard("\t"+jsonOb.getString("idcard"));
  1097. String idcard = jsonOb.getString("idcard");
  1098. if(idcard.length()>6){
  1099. customer.setIdCard("\t"+idcard.replaceAll(idcard.substring(idcard.length()-6), "******"));
  1100. }else{
  1101. customer.setIdCard("\t"+"******");
  1102. }
  1103. }else if(mp.containsKey("passport")){
  1104. customer.setIdType("护照");
  1105. // customer.setIdCard("\t"+jsonOb.getString("passport"));
  1106. String passport = jsonOb.getString("passport");
  1107. if(passport.length()>6){
  1108. customer.setIdCard("\t"+passport.replaceAll(passport.substring(passport.length()-6), "******"));
  1109. }else{
  1110. customer.setIdCard("\t"+"******");
  1111. }
  1112. }else if(mp.containsKey("dlicense")){
  1113. customer.setIdType("驾驶证");
  1114. // customer.setIdCard("\t"+jsonOb.getString("dlicense"));
  1115. String dlicense = jsonOb.getString("dlicense");
  1116. if(dlicense.length()>6){
  1117. customer.setIdCard("\t"+dlicense.replaceAll(dlicense.substring(dlicense.length()-6), "******"));
  1118. }else{
  1119. customer.setIdCard("\t"+"******");
  1120. }
  1121. }else if(mp.containsKey("otheridnumber")){
  1122. customer.setIdType("其它证件类型");
  1123. // customer.setIdCard("\t"+jsonOb.getString("otheridnumber"));
  1124. String otheridnumber = jsonOb.getString("otheridnumber");
  1125. if(otheridnumber.length()>6){
  1126. customer.setIdCard("\t"+otheridnumber.replaceAll(otheridnumber.substring(otheridnumber.length()-6), "******"));
  1127. }else{
  1128. customer.setIdCard("\t"+"******");
  1129. }
  1130. }
  1131. customers.add(customer);
  1132. }
  1133. // 继续向后查询
  1134. scriptRequest = new Request("GET", "/_search/scroll");
  1135. scriptRequest.setEntity(entity);
  1136. responseData = restClient.performRequest(scriptRequest);
  1137. result = EntityUtils.toString(responseData.getEntity());
  1138. jsonObject = JSON.parseObject(result);
  1139. hitsobject = (JSONObject) jsonObject.get("hits");
  1140. array = JSON.parseArray(hitsobject.get("hits").toString());
  1141. }
  1142. Map<String, String> header = new LinkedHashMap<>();
  1143. header.put("scustId", "核心客户号");
  1144. header.put("name", "姓名");
  1145. header.put("idType", "证件类型");
  1146. header.put("idCard", "证件号码");
  1147. header.put("sex", "性别");
  1148. header.put("birthDay", "出生日期");
  1149. CsvUtil.export(request, response, "customer", header, customers);
  1150. logger.info("导出两要素出时间:"+DateUtils.getTime());
  1151. }catch (Exception e){
  1152. logger.info("导出两要素出错:"+DateUtils.getTime());
  1153. e.printStackTrace();
  1154. }
  1155. }
  1156. /**
  1157. * 导出数据清洗数据
  1158. * @param response
  1159. * @param request
  1160. */
  1161. @GetMapping("/dataCleaning")
  1162. public void dataCleaning(HttpServletResponse response, HttpServletRequest request,String sameType)
  1163. {
  1164. logger.info("导出数据清洗进时间:"+DateUtils.getTime());
  1165. try{
  1166. Request scriptRequest = new Request("GET", "/shanglifeecif.samecustomer/_search?sort=name:asc&q=sametype:"+sameType+"&size=10000&scroll=5m");
  1167. Response responseData = restClient.performRequest(scriptRequest);
  1168. String result = EntityUtils.toString(responseData.getEntity());
  1169. JSONObject jsonObject = JSON.parseObject(result);
  1170. JSONObject hitsobject = (JSONObject) jsonObject.get("hits");
  1171. JSONArray array = JSON.parseArray(hitsobject.get("hits").toString());
  1172. List<Customer> customers = new ArrayList<Customer>();
  1173. String scroll_id = jsonObject.getString("_scroll_id");
  1174. HttpEntity entity = new NStringEntity("{\n" +
  1175. " \"scroll_id\": \""+scroll_id+"\",\n" +
  1176. " \"scroll\": \"5m\"\n" +
  1177. "}", ContentType.APPLICATION_JSON);
  1178. while (array.size() != 0) {
  1179. // 这里填写你的业务逻辑,即对每一条数据的处理
  1180. for (int i = 0; i <array.size() ; i++) {
  1181. JSONObject json = (JSONObject)array.get(i);
  1182. Map mp = new HashMap();
  1183. Customer customer = new Customer();
  1184. json.getString("_source");
  1185. mp.put("id",json.getString("_id"));
  1186. JSONObject jsonOb = JSON.parseObject(json.getString("_source"));
  1187. mp.putAll(JSON.parseObject(json.getString("_source"),Map.class));
  1188. customer.setScustId("\t"+jsonOb.getString("scustid"));
  1189. customer.setName(jsonOb.getString("name"));
  1190. customer.setSex("0".equals(jsonOb.getString("gender"))?"男":"女");
  1191. if(mp.containsKey("birthday")){
  1192. String birthday = jsonOb.getString("birthday");
  1193. mp.put("birthday", birthday);
  1194. customer.setBirthDay("\t"+birthday);
  1195. customer.setAge(DateUtils.getAge(DateUtils.dateTime(DateUtils.YYYY_MM_DD,jsonOb.getString("birthday"))));
  1196. }
  1197. if(mp.containsKey("idcard")){
  1198. customer.setIdType("身份证");
  1199. // customer.setIdCard("\t"+jsonOb.getString("idcard"));
  1200. String idcard = jsonOb.getString("idcard");
  1201. if(idcard.length()>6){
  1202. customer.setIdCard("\t"+idcard.replaceAll(idcard.substring(idcard.length()-6), "******"));
  1203. }else{
  1204. customer.setIdCard("\t"+"******");
  1205. }
  1206. }else if(mp.containsKey("passport")){
  1207. customer.setIdType("护照");
  1208. // customer.setIdCard("\t"+jsonOb.getString("passport"));
  1209. String passport = jsonOb.getString("passport");
  1210. if(passport.length()>6){
  1211. customer.setIdCard("\t"+passport.replaceAll(passport.substring(passport.length()-6), "******"));
  1212. }else{
  1213. customer.setIdCard("\t"+"******");
  1214. }
  1215. }else if(mp.containsKey("dlicense")){
  1216. customer.setIdType("驾驶证");
  1217. // customer.setIdCard("\t"+jsonOb.getString("dlicense"));
  1218. String dlicense = jsonOb.getString("dlicense");
  1219. if(dlicense.length()>6){
  1220. customer.setIdCard("\t"+dlicense.replaceAll(dlicense.substring(dlicense.length()-6), "******"));
  1221. }else{
  1222. customer.setIdCard("\t"+"******");
  1223. }
  1224. }else if(mp.containsKey("otheridnumber")){
  1225. customer.setIdType("其它证件类型");
  1226. // customer.setIdCard("\t"+jsonOb.getString("otheridnumber"));
  1227. String otheridnumber = jsonOb.getString("otheridnumber");
  1228. if(otheridnumber.length()>6){
  1229. customer.setIdCard("\t"+otheridnumber.replaceAll(otheridnumber.substring(otheridnumber.length()-6), "******"));
  1230. }else{
  1231. customer.setIdCard("\t"+"******");
  1232. }
  1233. }
  1234. customer.setZipCode("\t"+jsonOb.getString("zipcode"));
  1235. customer.setMobile("\t"+jsonOb.getString("mobile"));
  1236. customer.setEmail("\t"+jsonOb.getString("email"));
  1237. customer.setPinDate(jsonOb.getString("pindate"));
  1238. customer.setAgentName(jsonOb.getString("agentname"));
  1239. customer.setSalecomName(jsonOb.getString("salecomname"));
  1240. customers.add(customer);
  1241. }
  1242. // 继续向后查询
  1243. scriptRequest = new Request("GET", "/_search/scroll");
  1244. scriptRequest.setEntity(entity);
  1245. responseData = restClient.performRequest(scriptRequest);
  1246. result = EntityUtils.toString(responseData.getEntity());
  1247. jsonObject = JSON.parseObject(result);
  1248. hitsobject = (JSONObject) jsonObject.get("hits");
  1249. array = JSON.parseArray(hitsobject.get("hits").toString());
  1250. }
  1251. Map<String, String> header = new LinkedHashMap<>();
  1252. header.put("scustId", "核心客户号");
  1253. header.put("name", "姓名");
  1254. header.put("idType", "证件类型");
  1255. header.put("idCard", "证件号码");
  1256. header.put("sex", "性别");
  1257. header.put("birthDay", "出生日期");
  1258. if("8".equals(sameType) || "16".equals(sameType)){
  1259. header.put("mobile", "手机号码");
  1260. }else if("9".equals(sameType)){
  1261. header.put("zipCode", "邮政编码");
  1262. }else if("12".equals(sameType)){
  1263. header.put("degree", "学历");
  1264. }else if("14".equals(sameType)){
  1265. header.put("email", "邮箱");
  1266. }else if("15".equals(sameType)){
  1267. header.put("pinDate", "起保日期");
  1268. }else if("18".equals(sameType)){
  1269. header.put("agentName", "业务员名称");
  1270. }else if("19".equals(sameType)){
  1271. header.put("salecomName", "业绩归属");
  1272. }
  1273. CsvUtil.export(request, response, "customer", header, customers);
  1274. logger.info("导出数据清洗出时间:"+DateUtils.getTime());
  1275. }catch (Exception e){
  1276. logger.info("导出数据清洗出错:"+DateUtils.getTime());
  1277. e.printStackTrace();
  1278. }
  1279. }
  1280. public Map getLables(JSONObject jsonObject,String deptCode ) throws Exception {
  1281. Map mpInfo = new HashMap();
  1282. JSONObject source = JSON.parseObject(jsonObject.getString("_source"));
  1283. String indid = jsonObject.getString("_id");
  1284. mpInfo.put("id",indid);
  1285. String salecom = source.getString("salecom"); // 可能会得到用逗号分割的多个标签
  1286. if (salecom == null) {
  1287. salecom = "";
  1288. }
  1289. String[] salecoms = salecom.split(",");
  1290. Arrays.sort(salecoms);
  1291. Map<String, Object> sourceMap = JSON.parseObject(jsonObject.getString("_source"), Map.class);
  1292. if (StringUtils.isEmpty(deptCode)||showLabelCode.equals("SHOW_ALL_LABLES")) {
  1293. // 根渠道,也就是上海人寿,也是admin用户所属的渠道,返回jsonObject中的所有标签(公共标签 + 渠道标签)
  1294. mpInfo.putAll(sourceMap);
  1295. } else if (Arrays.binarySearch(salecoms, deptCode) >= 0) {
  1296. // 登录用户的渠道与客户渠道一致,返回jsonObject中的公共标签 + shanglifeecif.customerno_salecom_relation表中的渠道标签
  1297. mpInfo.putAll(getPublicLabels(sourceMap));
  1298. if(showLabelCode.equals("SHOW_DISTINGUISH_CHANNELS_LABLES")){
  1299. mpInfo.putAll(getSalecomLabels(source.getString("scustid"), deptCode));
  1300. }
  1301. } else {
  1302. // 未找到渠道,不返回渠道标签
  1303. logger.info(String.format("登录渠道和客户所属渠道不匹配,不返回渠道标签,登录渠道 [%s],客户所属渠道 [%s]", deptCode, salecom));
  1304. }
  1305. if(mpInfo.containsKey("birthday")){
  1306. mpInfo.put("birthday", source.getString("birthday"));
  1307. mpInfo.put("age",DateUtils.getAge(DateUtils.dateTime(DateUtils.YYYY_MM_DD,source.getString("birthday"))));
  1308. }else{
  1309. mpInfo.put("birthday","");
  1310. mpInfo.put("age","");
  1311. }
  1312. return mpInfo;
  1313. }
  1314. /**
  1315. * 只返回公共标签(以label开头和不以label开头的公共标签都会返回)
  1316. * @param source 包含所有标签的map
  1317. * @return 只包含公共标签的map
  1318. */
  1319. private Map<String, Object> getPublicLabels(Map<String, Object> source) {
  1320. Map<String, Object> rst = new HashMap<>();
  1321. // 一般公共标签的key不以label开头,但也有一部分公共标签是以label开头的,将以label开头的公共标签Key存入list后续使用
  1322. List<String> publicLabels =getpublicLabels();
  1323. for (Map.Entry<String, Object> entry : source.entrySet()){
  1324. String key = entry.getKey();
  1325. logger.info("getPublicLabels------>"+key);
  1326. if(key.startsWith("label")){
  1327. if(publicLabels.contains(key)){
  1328. // 以label开头的公共标签
  1329. logger.info("以label开头的公共标签------>"+key);
  1330. rst.put(key,entry.getValue());
  1331. }else{
  1332. logger.info("分渠道标签------>"+key);
  1333. }
  1334. }else{
  1335. // 不以label开头的公共标签
  1336. rst.put(key,entry.getValue());
  1337. }
  1338. }
  1339. return rst;
  1340. }
  1341. /**
  1342. * 从ES表shanglifeecif.customerno_salecom_relation中获得指定客户指定渠道的渠道标签
  1343. * @param customerno 客户号
  1344. * @param salecom 渠道号
  1345. * @return 指定客户指定渠道的所有渠道标签
  1346. */
  1347. public Map<String, Object> getSalecomLabels(String customerno, String salecom) throws IOException {
  1348. Map<String, Object> rst = new HashMap<>();
  1349. String q = "scustid:"+ customerno +"%20AND%20salecom:"+ salecom;
  1350. Request scriptRequest = new Request("GET", "/shanglifeecif.customerno_salecom_relation/_search?pretty=true&q="+ q);
  1351. Response response = restClient.performRequest(scriptRequest);
  1352. String result = EntityUtils.toString(response.getEntity());
  1353. JSONObject jsonObject = JSON.parseObject(result);
  1354. JSONObject hitsobject = (JSONObject) jsonObject.get("hits");
  1355. JSONArray array = JSON.parseArray(hitsobject.get("hits").toString());
  1356. List<String> publicLabels = getpublicLabels();
  1357. for (int i = 0; i <array.size() ; i++) {
  1358. JSONObject json = (JSONObject)array.get(i);
  1359. Map<String, Object> source = JSON.parseObject(json.getString("_source"), Map.class);
  1360. for (Map.Entry<String, Object> entry : source.entrySet()){
  1361. String key = entry.getKey();
  1362. if(key.startsWith("label")&&!publicLabels.contains(key)){
  1363. logger.info("分渠道标签添加--->"+key+"__"+entry.getValue());
  1364. rst.put(key, entry.getValue());
  1365. }
  1366. }
  1367. }
  1368. return rst;
  1369. }
  1370. public JSONObject getCustomerListData(int pageNum, int pageSize, boolean isPretty, String scroll,
  1371. String education,//学历
  1372. String policybelong,//业绩归属
  1373. String payS,String payE, //年缴费区间
  1374. String fadate,//投保年份
  1375. String productname,//险种类别
  1376. String insuredAmountS,String insuredAmountE,//保额区间
  1377. String ageS,String ageE,//年龄区间
  1378. String gender,//性别
  1379. String sobirth,//省份
  1380. String NOVPolicy,//保单件数
  1381. String custtype,//客户类型 投保人
  1382. String SCustID,// 核心客户号
  1383. String custclass,//客户等级
  1384. String participantsDateS,String participantsDateE,//参与方时间
  1385. String PIncomeS,String PIncomeE,//年收入区间
  1386. String Insured,//投保对象
  1387. String lp,//理赔
  1388. String yx,//有效
  1389. String gzgw,//关注官微
  1390. String zcgw,//注册官微
  1391. String name,//客户姓名
  1392. String idcard,//客户证件号码
  1393. String mobile//客户手机号
  1394. ) throws IOException {
  1395. //模糊查询渠道
  1396. Long userId = SecurityUtils.getUserId();
  1397. SysUser sysUser = userService.selectUserById(userId);
  1398. String deptCode = null;
  1399. // “上海人寿”部门编号开发环境是null,生产环境是0。不是上海人寿部门的才分渠道
  1400. if (StringUtils.isNotEmpty(sysUser.getDept().getDeptCode()) && ! "0".equals(sysUser.getDept().getDeptCode())) {
  1401. deptCode = sysUser.getDept().getDeptCode();
  1402. }
  1403. /*Long userId = SecurityUtils.getUserId();
  1404. SysUser sysUser = userService.selectUserById(userId);
  1405. String deptCode = sysUser.getDept().getDeptCode();*/
  1406. //2.如果没有客户信息以外的查询条件,只需要查询客户信息
  1407. // 获取索引的别名,字段,创建时间
  1408. String beginBirthDay = "";
  1409. String endBirthDay = "";
  1410. if(StringUtils.isNotEmpty(ageS)){
  1411. String year = DateUtils.getYYYY();
  1412. int bYear = Integer.parseInt(year)-Integer.parseInt(ageS);
  1413. endBirthDay = bYear+"-"+DateUtils.getMMDD();
  1414. }
  1415. if(StringUtils.isNotEmpty(ageE)){
  1416. String year = DateUtils.getYYYY();
  1417. int bYear = Integer.parseInt(year)-Integer.parseInt(ageE);
  1418. beginBirthDay = bYear+"-"+DateUtils.getMMDD();
  1419. }
  1420. //拼装查询条件
  1421. StringBuilder builder =new StringBuilder();
  1422. builder.append("{");
  1423. builder.append("\"query\":{");//query开始
  1424. builder.append("\"bool\":{");//boot开始
  1425. builder.append("\"must\":[");//must开始
  1426. //业绩归属字段
  1427. // if(StringUtils.isNotEmpty(deptCode)){
  1428. // builder.append("{\"prefix\":{\"salecom\":\""+deptCode+"\"}},");
  1429. // }else if(StringUtils.isNotEmpty(policybelong)){
  1430. // builder.append("{\"prefix\":{\"salecom\":\""+policybelong+"\"}},");
  1431. // }
  1432. // 渠道不为空的话按渠道筛选
  1433. if(StringUtils.isNotEmpty(deptCode)){
  1434. builder.append("{\"wildcard\":{\"salecom\":\"*"+deptCode+"*\"}},");
  1435. }else if(StringUtils.isNotEmpty(policybelong)){
  1436. builder.append("{\"wildcard\":{\"salecom\":\"*"+policybelong+"*\"}},");
  1437. }
  1438. //客户姓名
  1439. if(StringUtils.isNotEmpty(name)){
  1440. builder.append("{\"wildcard\":{\"name\":\"*"+name+"*\"}},");
  1441. }
  1442. //客户手机
  1443. if(StringUtils.isNotEmpty(mobile)){
  1444. builder.append("{\"wildcard\":{\"pmphone\":\"*"+mobile+"*\"}},");
  1445. }
  1446. //投保年份
  1447. if(StringUtils.isNotEmpty(fadate)){
  1448. builder.append("{\"wildcard\":{\"fadate\":\"*"+fadate+"*\"}},");
  1449. }
  1450. if(StringUtils.isNotEmpty(gender)){
  1451. builder.append("{\"prefix\":{\"gender\":"+gender+"}},");
  1452. }
  1453. if(StringUtils.isNotEmpty(NOVPolicy)){
  1454. builder.append("{\"prefix\":{\"label25\":\""+NOVPolicy+"\"}},");
  1455. }
  1456. if(StringUtils.isNotEmpty(custclass)){
  1457. builder.append("{\"term\":{\"custclass\":\""+custclass+"\"}},");
  1458. }
  1459. if(StringUtils.isNotEmpty(sobirth)){
  1460. builder.append("{\"wildcard\":{\"sobirth\":\"*"+sobirth+"*\"}},");//模糊匹配
  1461. }
  1462. if(StringUtils.isNotEmpty(SCustID)){
  1463. builder.append("{\"wildcard\":{\"scustid\":\"*"+SCustID+"*\"}},");//模糊匹配
  1464. }
  1465. if(StringUtils.isNotEmpty(custtype)){
  1466. builder.append("{\"wildcard\":{\"custtype\":\"*"+custtype+"*\"}},");
  1467. }
  1468. if(StringUtils.isNotEmpty(beginBirthDay) && StringUtils.isNotEmpty(endBirthDay)){
  1469. builder.append("{\"range\":{\"birthday\":{\"gte\":\""+beginBirthDay+"\",\"lte\":\""+endBirthDay+"\"}}},");
  1470. }else{
  1471. if(StringUtils.isNotEmpty(beginBirthDay)){
  1472. builder.append("{\"range\":{\"birthday\":{\"gte\":\""+beginBirthDay+"\"}}},");
  1473. }
  1474. if(StringUtils.isNotEmpty(endBirthDay)){
  1475. builder.append("{\"range\":{\"birthday\":{\"lte\":\""+endBirthDay+"\"}}},");
  1476. }
  1477. }
  1478. if(StringUtils.isNotEmpty(participantsDateS) && StringUtils.isNotEmpty(participantsDateE)){
  1479. builder.append("{\"range\":{\"fadate\":{\"gte\":\""+participantsDateS+"\",\"lte\":\""+participantsDateE+"\"}}},");
  1480. }else{
  1481. if(StringUtils.isNotEmpty(participantsDateS)){
  1482. builder.append("{\"range\":{\"fadate\":{\"gte\":\""+participantsDateS+"\"}}},");
  1483. }
  1484. if(StringUtils.isNotEmpty(participantsDateE)){
  1485. builder.append("{\"range\":{\"fadate\":{\"lte\":\""+participantsDateE+"\"}}},");
  1486. }
  1487. }
  1488. if(StringUtils.isNotEmpty(PIncomeS) && StringUtils.isNotEmpty(PIncomeE)){
  1489. builder.append("{\"range\":{\"pincome\":{\"gte\":\""+PIncomeS+"\",\"lte\":\""+PIncomeE+"\"}}},");
  1490. }else{
  1491. if(StringUtils.isNotEmpty(PIncomeS)){
  1492. builder.append("{\"range\":{\"pincome\":{\"gte\":\""+PIncomeS+"\"}}},");
  1493. }
  1494. if(StringUtils.isNotEmpty(PIncomeE)){
  1495. builder.append("{\"range\":{\"pincome\":{\"lte\":\""+PIncomeE+"\"}}},");
  1496. }
  1497. }
  1498. if(StringUtils.isNotEmpty(yx)){
  1499. if (yx.equals("0")){
  1500. builder.append("{\"range\":{\"novpolicy\":{\"gt\":\""+yx+"\"}}},");
  1501. }else
  1502. {
  1503. builder.append("{\"prefix\":{\"label91\":\"失效客户\"}},");
  1504. }
  1505. }
  1506. if(StringUtils.isNotEmpty(education)){
  1507. String[] edus = education.split("&");
  1508. builder.append("{\"terms\":{\"education\":[");
  1509. for (String edu:edus) {
  1510. builder.append("\""+edu+"\",");
  1511. }
  1512. builder.delete(builder.length()-1,builder.length());
  1513. builder.append ("]}},");
  1514. }
  1515. if(StringUtils.isNotEmpty(gzgw) && "0".equals(gzgw)){
  1516. builder.append("{\"prefix\":{\"label73\":\"关注官微\"}},");
  1517. }
  1518. if(StringUtils.isNotEmpty(zcgw) && "0".equals(zcgw)){
  1519. builder.append("{\"prefix\":{\"label74\":\"注册官微\"}},");
  1520. }
  1521. if(StringUtils.isNotEmpty(lp) && "0".equals(lp)){
  1522. builder.append("{\"prefix\":{\"label57\":\"最近一次理赔类型\"}},");
  1523. }
  1524. if(StringUtils.isNotEmpty(gender) || StringUtils.isNotEmpty(NOVPolicy) || StringUtils.isNotEmpty(custtype)
  1525. || StringUtils.isNotEmpty(custclass) || StringUtils.isNotEmpty(sobirth) || StringUtils.isNotEmpty(SCustID)
  1526. || StringUtils.isNotEmpty(beginBirthDay) || StringUtils.isNotEmpty(endBirthDay) || StringUtils.isNotEmpty(education)
  1527. || StringUtils.isNotEmpty(PIncomeS) || StringUtils.isNotEmpty(PIncomeE) || (StringUtils.isNotEmpty(gzgw) && "0".equals(gzgw))
  1528. || (StringUtils.isNotEmpty(zcgw) && "0".equals(zcgw)) || StringUtils.isNotEmpty(yx)
  1529. || (StringUtils.isNotEmpty(lp) && "0".equals(lp)) || /*StringUtils.isNotEmpty(deptCode) ||*/
  1530. StringUtils.isNotEmpty(participantsDateS) || StringUtils.isNotEmpty(participantsDateE) ||
  1531. StringUtils.isNotEmpty(policybelong) || StringUtils.isNotEmpty(name) || StringUtils.isNotEmpty(mobile)
  1532. || StringUtils.isNotEmpty(fadate) || StringUtils.isNotEmpty(deptCode)){
  1533. builder.delete(builder.length()-1,builder.length());
  1534. }
  1535. builder.append("],");//must结束
  1536. builder.append("\"must_not\":[");//must_not
  1537. if(StringUtils.isNotEmpty(gzgw) && "1".equals(gzgw)){
  1538. builder.append("{\"prefix\":{\"label73\":\"关注官微\"}},");
  1539. }
  1540. if(StringUtils.isNotEmpty(zcgw) && "1".equals(zcgw)){
  1541. builder.append("{\"prefix\":{\"label74\":\"注册官微\"}},");
  1542. }
  1543. if(StringUtils.isNotEmpty(lp) && "1".equals(lp)){
  1544. builder.append("{\"prefix\":{\"label57\":\"最近一次理赔类型\"}},");
  1545. }
  1546. if(
  1547. (StringUtils.isNotEmpty(gzgw) && "1".equals(gzgw))
  1548. || (StringUtils.isNotEmpty(zcgw) && "1".equals(zcgw))
  1549. || (StringUtils.isNotEmpty(lp) && "1".equals(lp))
  1550. ){
  1551. builder.delete(builder.length()-1,builder.length());
  1552. }
  1553. builder.append("],");
  1554. builder.append("\"should\":[");
  1555. //客户证件号码
  1556. if(StringUtils.isNotEmpty(idcard)){
  1557. builder.append("{\"wildcard\":{\"idcard\":\"*"+idcard+"*\"}},");
  1558. builder.append("{\"wildcard\":{\"passport\":\"*"+idcard+"*\"}},");
  1559. builder.append("{\"wildcard\":{\"dlicense\":\"*"+idcard+"*\"}},");
  1560. builder.append("{\"wildcard\":{\"otheridnumber\":\"*"+idcard+"*\"}},");
  1561. builder.delete(builder.length()-1,builder.length());
  1562. }
  1563. builder.append("]");//should
  1564. builder.append("}");//boot结束
  1565. builder.append("},");//query结束
  1566. builder.append("\"from\":"+ pageNum +",");//第几页
  1567. builder.append("\"size\":"+ pageSize +",");//查询几个
  1568. builder.append("\"sort\":[{\"scustid\":{\"order\":\"asc\"}}],");//排序
  1569. builder.append("\"aggs\":{}");//
  1570. builder.append("}");
  1571. logger.info(builder.toString());
  1572. HttpEntity entity = new NStringEntity(builder.toString(), ContentType.APPLICATION_JSON);
  1573. String url;
  1574. /*
  1575. shanglifeecif.individual表中的渠道标签字段值是不分渠道的(也就是全渠道计算),所以像admin这种没有渠道的用户查这个表
  1576. shanglifeecif.customerno_salecom_relation表中渠道标签字段值是分渠道计算的,所以登录用户有渠道时查这个表
  1577. */
  1578. boolean hasDeptCode; // 登录用户是否有渠道 true:有渠道,false:无渠道
  1579. if(StringUtils.isEmpty(deptCode)){
  1580. // 像admin这种无渠道用户
  1581. logger.info("deptCode is empty, search shanglifeecif.individual");
  1582. url = "/shanglifeecif.individual/_search?";
  1583. hasDeptCode = false;
  1584. } else {
  1585. // 有渠道用户
  1586. logger.info(String.format("deptCode is [%s], search shanglifeecif.customerno_salecom_relation", deptCode));
  1587. url = "/shanglifeecif.customerno_salecom_relation/_search?";
  1588. hasDeptCode = true;
  1589. }
  1590. url += isPretty ? "pretty=true" : "pretty=false";
  1591. url += StringUtils.isEmpty(scroll) ? "" : "&scroll="+ scroll;
  1592. Request scriptRequest = new Request("GET", url);
  1593. scriptRequest.setEntity(entity);
  1594. Response response = restClient.performRequest(scriptRequest);
  1595. String result = EntityUtils.toString(response.getEntity());
  1596. JSONObject jsonObject = JSON.parseObject(result);
  1597. return jsonObject;
  1598. }
  1599. /**
  1600. * 计算享受保障天数,所有保单已享受到保障的天数合计(会忽略掉重叠天数),退保的只计算退保前享受到的保障天数
  1601. * @param policyDates 所有保单集合
  1602. * @param cancelPolicyDates 退保保单集合
  1603. * @return
  1604. */
  1605. public int guaranteeDay(List<PolicyDate> policyDates, List<PolicyDate> cancelPolicyDates) {
  1606. modifyDate(policyDates, cancelPolicyDates);
  1607. dateOrder(policyDates);
  1608. List<PolicyDate> merged = dateMerge(policyDates);
  1609. int day = 0;
  1610. if (merged == null || merged.isEmpty()) {
  1611. return day;
  1612. }
  1613. for (PolicyDate i : merged) {
  1614. day += DateUtils.getDateDifDay(i.getEndDate(), i.getStartDate());
  1615. }
  1616. return day;
  1617. }
  1618. /**
  1619. *
  1620. * @param policyDates 所有保单数据
  1621. * @param cancelPolicyDates 退保数据
  1622. */
  1623. public void modifyDate(List<PolicyDate> policyDates, List<PolicyDate> cancelPolicyDates) {
  1624. Calendar c = Calendar.getInstance();
  1625. c.set(Calendar.HOUR_OF_DAY, 0);
  1626. c.set(Calendar.MINUTE, 0);
  1627. c.set(Calendar.SECOND, 0);
  1628. c.set(Calendar.MILLISECOND, 0);
  1629. Date currentDate = c.getTime(); // 当前日期0时(也就是只要当前日期年月日,不要时分秒)
  1630. boolean searchedLongPolicy = false; // 是否找到了第一个有效状态长期险,默认没找到
  1631. List<PolicyDate> removePolicyDates = new ArrayList<>(); //待删除的policyDate
  1632. for (PolicyDate i : policyDates) {
  1633. // 有效状态保单,计算所有短期险 + 第一个长期险
  1634. if ("有效".equals(i.getPolicystate())) {
  1635. if (searchedLongPolicy) {
  1636. // 由于只有第一个有效状态长期险参与计算,所以后续的有效状态长期险都可以标记为不计算
  1637. logger.info("不参与计算,非第一个有效状态长期险, policyDate: "+ i);
  1638. removePolicyDates.add(i);
  1639. } else if (i.getAgrmntage() >= 180) {
  1640. searchedLongPolicy = true;
  1641. logger.info("找到第一个有效状态长期险, policyDate: "+ i);
  1642. i.setStartDate(i.getPadate());
  1643. i.setEndDate(currentDate);
  1644. }
  1645. }
  1646. // 如果该保单已退保,则将开始和结束日期改为退保数据的开始和结束日期
  1647. for (PolicyDate j : cancelPolicyDates) {
  1648. if (i.getContno().equals(j.getContno())) {
  1649. i.setStartDate(j.getStartDate());
  1650. i.setEndDate(j.getEndDate());
  1651. }
  1652. }
  1653. // 如果结束日期大于当前日期,则修改结束日期为当前日期
  1654. if (i.getEndDate().after(currentDate)) {
  1655. i.setEndDate(currentDate);
  1656. }
  1657. }
  1658. policyDates.removeAll(removePolicyDates);
  1659. }
  1660. public void dateOrder(List<PolicyDate> policyDates) {
  1661. Collections.sort(policyDates, new Comparator<PolicyDate>() {
  1662. @Override
  1663. public int compare(PolicyDate o1, PolicyDate o2) {
  1664. int start = o1.getStartDate().compareTo(o2.getStartDate());
  1665. if (start == 0) {
  1666. return o1.getEndDate().compareTo(o2.getEndDate());
  1667. }
  1668. return start;
  1669. }
  1670. });
  1671. }
  1672. public List<PolicyDate> dateMerge(List<PolicyDate> policyDates) {
  1673. List<PolicyDate> rst = new ArrayList<>();
  1674. rst.add(policyDates.get(0));
  1675. for (int i = 1, j = 0; i < policyDates.size(); i++) {
  1676. PolicyDate ip = policyDates.get(i);
  1677. PolicyDate jp = rst.get(j);
  1678. int isje = ip.getStartDate().compareTo(jp.getEndDate());
  1679. if (isje <= 0) {
  1680. // next start 在 last end之前,要判断next end位置
  1681. int ieje = ip.getEndDate().compareTo(jp.getEndDate());
  1682. if (ieje <= 0) {
  1683. //nothing 说明下一个时间范围包含在上一个时间范围内,不做任何操作
  1684. } else {
  1685. // 说明下一个结束时间在上一个结束时间之后,更新结束时间
  1686. jp.setEndDate(ip.getEndDate());
  1687. }
  1688. } else {
  1689. // 下一个开始时间在上一个结束时间之后,说明这又是一个新的时间范围,加入rst
  1690. rst.add(ip);
  1691. j++;
  1692. }
  1693. }
  1694. return rst;
  1695. }
  1696. /**
  1697. * 保单日期类
  1698. */
  1699. public static class PolicyDate {
  1700. /** 保单号 */
  1701. private String contno;
  1702. /** 起保日期 */
  1703. private Date startDate;
  1704. /** 终保日期 */
  1705. private Date endDate;
  1706. /** 投保日期 */
  1707. private Date padate;
  1708. /** 保单状态 */
  1709. private String policystate;
  1710. /** 保险期限 */
  1711. private int agrmntage;
  1712. public PolicyDate(String contno, Date startDate, Date endDate) {
  1713. this.contno = contno;
  1714. this.startDate = startDate;
  1715. this.endDate = endDate;
  1716. }
  1717. public PolicyDate(String contno, Date startDate, Date endDate, Date padate, String policystate, int agrmntage) {
  1718. this.contno = contno;
  1719. this.startDate = startDate;
  1720. this.endDate = endDate;
  1721. this.padate = padate;
  1722. this.policystate = policystate;
  1723. this.agrmntage = agrmntage;
  1724. }
  1725. public String getContno() {
  1726. return contno;
  1727. }
  1728. public void setContno(String contno) {
  1729. this.contno = contno;
  1730. }
  1731. public Date getStartDate() {
  1732. return startDate;
  1733. }
  1734. public void setStartDate(Date startDate) {
  1735. this.startDate = startDate;
  1736. }
  1737. public Date getEndDate() {
  1738. return endDate;
  1739. }
  1740. public void setEndDate(Date endDate) {
  1741. this.endDate = endDate;
  1742. }
  1743. public Date getPadate() {
  1744. return padate;
  1745. }
  1746. public void setPadate(Date padate) {
  1747. this.padate = padate;
  1748. }
  1749. public String getPolicystate() {
  1750. return policystate;
  1751. }
  1752. public void setPolicystate(String policystate) {
  1753. this.policystate = policystate;
  1754. }
  1755. public int getAgrmntage() {
  1756. return agrmntage;
  1757. }
  1758. public void setAgrmntage(int agrmntage) {
  1759. this.agrmntage = agrmntage;
  1760. }
  1761. @Override
  1762. public String toString() {
  1763. final StringBuilder sb = new StringBuilder("PolicyDate{");
  1764. sb.append("contno='").append(contno).append('\'');
  1765. sb.append(", startDate=").append(startDate);
  1766. sb.append(", endDate=").append(endDate);
  1767. sb.append(", padate=").append(padate);
  1768. sb.append(", policystate='").append(policystate).append('\'');
  1769. sb.append(", agrmntage=").append(agrmntage);
  1770. sb.append('}');
  1771. return sb.toString();
  1772. }
  1773. }
  1774. //公共标签
  1775. private List<String> getpublicLabels(){
  1776. List<String> publicLabels = new ArrayList<>(); // 存放以label开头的公共标签key
  1777. publicLabels.add("label1");
  1778. publicLabels.add("label2");
  1779. publicLabels.add("label3");
  1780. publicLabels.add("label4");
  1781. publicLabels.add("label9");
  1782. publicLabels.add("label10");
  1783. publicLabels.add("label21");
  1784. publicLabels.add("label67");
  1785. publicLabels.add("label69");
  1786. publicLabels.add("label70");
  1787. publicLabels.add("label71");
  1788. publicLabels.add("label74");
  1789. publicLabels.add("label77");
  1790. publicLabels.add("label80");
  1791. publicLabels.add("label96");
  1792. publicLabels.add("label97");
  1793. publicLabels.add("label100");
  1794. publicLabels.add("label101");
  1795. publicLabels.add("label103");
  1796. publicLabels.add("label104");
  1797. publicLabels.add("label105");
  1798. publicLabels.add("label106");
  1799. return publicLabels;
  1800. }
  1801. }