CustomerApiController.java 85 KB

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