ClubPortraitService.java 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773
  1. package com.caimei.modules.user.service;
  2. import com.caimei.modules.order.entity.NewOrder;
  3. import com.caimei.modules.user.dao.CmPortraitDao;
  4. import com.caimei.modules.user.entity.*;
  5. import com.caimei.utils.MathUtil;
  6. import com.thinkgem.jeesite.common.utils.ObjectUtils;
  7. import com.thinkgem.jeesite.common.utils.StringUtils;
  8. import org.springframework.beans.factory.annotation.Autowired;
  9. import org.springframework.stereotype.Service;
  10. import javax.annotation.Resource;
  11. import java.text.NumberFormat;
  12. import java.text.ParseException;
  13. import java.text.SimpleDateFormat;
  14. import java.util.*;
  15. import java.util.stream.Collectors;
  16. /**
  17. * Description
  18. *
  19. * @author : Charles
  20. * @date : 2023/2/15
  21. */
  22. @Service
  23. public class ClubPortraitService {
  24. @Resource
  25. private CmPortraitDao cmPortraitDao;
  26. /**
  27. * 查询画像资料总数
  28. *
  29. * @param cmPortrait
  30. * @return
  31. */
  32. public CmPortrait dataTotal(CmPortrait cmPortrait) {
  33. CmPortrait cmPortraits = cmPortraitDao.selTotal(cmPortrait);
  34. return cmPortraits;
  35. }
  36. public ClubStatistics clubData(Integer clubID) {
  37. SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
  38. ClubStatistics clubStatistics = cmPortraitDao.selClubData(clubID);
  39. if (clubStatistics != null) {
  40. String type = "";
  41. if (StringUtils.isNotBlank(clubStatistics.getFirstClubType())) {
  42. type += clubStatistics.getFirstClubType();
  43. }
  44. if (StringUtils.isNotBlank(clubStatistics.getClassify())) {
  45. type += "-" + clubStatistics.getClassify();
  46. }
  47. clubStatistics.setClubType(type);
  48. setClubNum(clubStatistics);
  49. // 设置机构信息
  50. CmClubRemarks clubRemarksInfo = cmPortraitDao.getClubRemarksInfo(clubID);
  51. if (null != clubRemarksInfo) {
  52. clubStatistics.setCustomerSource(clubRemarksInfo.getCustomerSource() != null ? clubRemarksInfo.getCustomerSource() : 4);
  53. clubStatistics.setGroupAddition(clubRemarksInfo.getGroupAddition() != null ? clubRemarksInfo.getGroupAddition() : 1);
  54. clubStatistics.setMobileReach(1);
  55. if (null != clubRemarksInfo.getCommunicationMethods() && clubRemarksInfo.getCommunicationMethods().contains("1")) {
  56. clubStatistics.setMobileReach(0);
  57. }
  58. clubStatistics.setWxReach(1);
  59. if (null != clubRemarksInfo.getCommunicationMethods() && clubRemarksInfo.getCommunicationMethods().contains("2")) {
  60. clubStatistics.setWxReach(0);
  61. }
  62. clubStatistics.setSex(clubRemarksInfo.getCustomerGender() != null ? clubRemarksInfo.getGroupAddition() : null);
  63. clubStatistics.setAge(StringUtils.isNotBlank(clubRemarksInfo.getCustomerAge()) ? clubRemarksInfo.getCustomerAge() : null);
  64. clubStatistics.setFillTime(dateFormat.format(clubRemarksInfo.getAddTime()));
  65. try {
  66. clubStatistics.setFirstTime(StringUtils.isNotBlank(clubRemarksInfo.getFirstTime()) ? dateFormat.format(dateFormat.parse(clubRemarksInfo.getFirstTime())) : null);
  67. clubStatistics.setRecentlyTime(StringUtils.isNotBlank(clubRemarksInfo.getRecentlyTime()) ? dateFormat.format(dateFormat.parse(clubRemarksInfo.getRecentlyTime())) : null);
  68. } catch (ParseException e) {
  69. e.printStackTrace();
  70. }
  71. }
  72. }
  73. return clubStatistics;
  74. }
  75. public Map<String, Object> getDemand(Integer clubId, Integer dataType, String demandStart, String demandEnd) {
  76. SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
  77. Date date = new Date();
  78. String endTime = "";
  79. Calendar calendar = Calendar.getInstance();
  80. calendar.setTime(date);
  81. calendar.add(Calendar.DAY_OF_MONTH, -1);
  82. Date time = calendar.getTime();
  83. calendar.setTime(time);
  84. boolean expty = ObjectUtils.isEmpty(demandStart) && ObjectUtils.isEmpty(demandEnd);
  85. if (expty) {
  86. endTime = dateFormat.format(time);
  87. Date start = null;
  88. String startTime = "";
  89. demandEnd = endTime;
  90. // 日期参数为 日
  91. if (1 == dataType) {
  92. demandStart = endTime;
  93. }
  94. if (2 == dataType) {
  95. calendar.setTime(time);
  96. calendar.add(Calendar.MONTH, -1);
  97. start = calendar.getTime();
  98. startTime = dateFormat.format(start);
  99. demandStart = startTime;
  100. }
  101. if (3 == dataType) {
  102. calendar.setTime(time);
  103. calendar.add(Calendar.MONTH, -6);
  104. start = calendar.getTime();
  105. startTime = dateFormat.format(start);
  106. demandStart = startTime;
  107. }
  108. if (4 == dataType) {
  109. calendar.setTime(time);
  110. calendar.add(Calendar.YEAR, -1);
  111. start = calendar.getTime();
  112. startTime = dateFormat.format(start);
  113. demandStart = startTime;
  114. }
  115. }
  116. List<String> demandList = new ArrayList<>();
  117. // 咨询记录
  118. List<String> clubRemarks = cmPortraitDao.getClubRemarks(clubId, demandStart, demandEnd);
  119. if (clubRemarks.size() > 0) {
  120. for (String clubRemark : clubRemarks) {
  121. if (clubRemark.contains(",")) {
  122. String[] split = clubRemark.split(",");
  123. for (String s : split) {
  124. if (StringUtils.isNotBlank(s)) {
  125. demandList.add(s);
  126. }
  127. }
  128. } else {
  129. if (StringUtils.isNotBlank(clubRemark)) {
  130. demandList.add(clubRemark);
  131. }
  132. }
  133. }
  134. }
  135. // 访问记录
  136. List<CmBehaviorRecord> clubBehaviors = cmPortraitDao.getClubBehavior(clubId, demandStart, demandEnd);
  137. if (clubBehaviors.size() > 0) {
  138. for (CmBehaviorRecord clubBehavior : clubBehaviors) {
  139. if (clubBehavior.getPageLabel().contains(",")) {
  140. String[] split = clubBehavior.getPageLabel().split(",");
  141. for (String s : split) {
  142. if (StringUtils.isNotBlank(s)) {
  143. s = s + "(" + clubBehavior.getPageType() + ")";
  144. demandList.add(s);
  145. }
  146. }
  147. } else {
  148. if (StringUtils.isNotBlank(clubBehavior.getPageLabel())) {
  149. String types = clubBehavior.getPageLabel() + "(" + clubBehavior.getPageType() + ")";
  150. demandList.add(types);
  151. }
  152. }
  153. }
  154. }
  155. // 排序
  156. List<String> demandString = new ArrayList<>();
  157. List<Integer> demandInteger = new ArrayList<>();
  158. for (String s : demandList) {
  159. if (!demandString.contains(s)) {
  160. demandString.add(s);
  161. int size = demandList.stream().filter(dem -> dem.equals(s)).collect(Collectors.toList()).size();
  162. demandInteger.add(size);
  163. }
  164. }
  165. demandList.clear();
  166. for (int i = 0; i <= demandInteger.size()-1; i++) {
  167. int item = i;
  168. Integer num = demandInteger.get(i);
  169. for (int k = i; k <= demandInteger.size()-1; k++) {
  170. if (num < demandInteger.get(k)) {
  171. item = k;
  172. }
  173. }
  174. if (!demandList.contains(demandString.get(item)) && demandList.size() <= 10) {
  175. demandList.add(demandString.get(item));
  176. }
  177. }
  178. Map<String, Object> map = new HashMap<>();
  179. map.put("startTime", demandStart);
  180. map.put("endTime", demandEnd);
  181. map.put("demandList", demandList);
  182. return map;
  183. }
  184. /**
  185. * 查询机构画像数据
  186. *
  187. * @param cmPortrait
  188. * @return
  189. */
  190. public CmPortrait dataList(CmPortrait cmPortrait) {
  191. SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
  192. Date date = new Date();
  193. String endTime = "";
  194. Calendar calendar = Calendar.getInstance();
  195. calendar.setTime(date);
  196. calendar.add(Calendar.DAY_OF_MONTH, -1);
  197. Date time = calendar.getTime();
  198. endTime = dateFormat.format(time);
  199. String time1 = "";
  200. String time2 = "";
  201. boolean expty = ObjectUtils.isEmpty(cmPortrait.getStartTime()) && ObjectUtils.isEmpty(cmPortrait.getEndTime());
  202. if (expty) {
  203. Date start = null;
  204. String startTime = "";
  205. cmPortrait.setEndTime(endTime);
  206. // 日期参数为 日
  207. if (1 == cmPortrait.getDateType() || 1 == cmPortrait.getDateType()) {
  208. // cmPortrait.setAccessDate(endTime);
  209. cmPortrait.setStartTime(endTime);
  210. // cmPortrait.setEndTime(endTime);
  211. }
  212. if (2 == cmPortrait.getDateType()) {
  213. // cmPortrait.setEndTime(endTime);
  214. calendar.setTime(time);
  215. calendar.add(Calendar.MONTH, -1);
  216. start = calendar.getTime();
  217. startTime = dateFormat.format(start);
  218. cmPortrait.setStartTime(startTime);
  219. }
  220. if (3 == cmPortrait.getDateType()) {
  221. // cmPortrait.setEndTime(endTime);
  222. calendar.setTime(time);
  223. calendar.add(Calendar.MONTH, -6);
  224. start = calendar.getTime();
  225. startTime = dateFormat.format(start);
  226. cmPortrait.setStartTime(startTime);
  227. }
  228. if (4 == cmPortrait.getDateType()) {
  229. // cmPortrait.setEndTime(endTime);
  230. calendar.setTime(time);
  231. calendar.add(Calendar.YEAR, -1);
  232. start = calendar.getTime();
  233. startTime = dateFormat.format(start);
  234. cmPortrait.setStartTime(startTime);
  235. }
  236. } else {
  237. time1 = cmPortrait.getStartTime();
  238. time2 = cmPortrait.getEndTime();
  239. }
  240. // 机构订单
  241. if (0 == cmPortrait.getType() || 4 == cmPortrait.getType()) {
  242. if ((0 == cmPortrait.getDateType() || 1 == cmPortrait.getDateType()) && expty) {
  243. cmPortrait.setEndTime(dateFormat.format(date));
  244. }
  245. if (cmPortrait.getEndTime().equals(endTime)) {
  246. cmPortrait.setEndTime(dateFormat.format(date));
  247. }
  248. int ordinary = 0, secondHand = 0, rebate = 0, partialRefund = 0, total = 0; //, fullRefund = 0, closed = 0
  249. double orderScopeTotalFee = 0.0;
  250. ArrayList<OrderPortrait> orderPortraits = new ArrayList<>();
  251. OrderPortrait orderPortrait = new OrderPortrait();
  252. List<NewOrder> orderList = cmPortraitDao.selOrderList(cmPortrait);
  253. int length = orderList.size();
  254. NumberFormat instance = NumberFormat.getInstance();
  255. instance.setMaximumFractionDigits(2);
  256. if (length != 0) {
  257. for (NewOrder order : orderList) {
  258. // 普通订单
  259. if (("0".equals(order.getSecondHandOrderFlag()) || StringUtils.isEmpty(order.getSecondHandOrderFlag()))
  260. && (!"1".equals(order.getRebateFlag()) || "".equals(order.getRebateFlag()) || StringUtils.isEmpty(order.getRebateFlag()))
  261. && (!"2".equals(order.getRefundType()) || "".equals(order.getRefundType()) || StringUtils.isEmpty(order.getRefundType()))
  262. && !"4".equals(order.getStatus())) {
  263. ordinary++;
  264. }
  265. // 二手订单
  266. if ("1".equals(order.getSecondHandOrderFlag()) && !"1".equals(order.getRebateFlag())
  267. && (!"2".equals(order.getRefundType())) && !"4".equals(order.getStatus())) {
  268. secondHand++;
  269. }
  270. // 返佣订单
  271. /*if ("1".equals(order.getRebateFlag()) &&
  272. (!"2".equals(order.getRefundType()) || StringUtils.isEmpty(order.getRefundType())) && !"4".equals(order.getStatus())) {
  273. rebate++;
  274. }*/
  275. // 部分退款
  276. /*if ("1".equals(order.getRefundType()) && !"4".equals(order.getStatus())) {
  277. partialRefund++;
  278. }*/
  279. // 全部退款
  280. /*if ("2".equals(order.getRefundType()) && !"6".equals(order.getStatus())) {
  281. fullRefund++;
  282. }
  283. // 已关闭
  284. if ("6".equals(order.getStatus()) || StringUtils.isEmpty(order.getStatus())) {
  285. closed++;
  286. }*/
  287. orderScopeTotalFee += order.getPayTotalFee();
  288. }
  289. /*cmPortrait.setOrderTotalAmount(orderList.get(0).getTotalMoney());
  290. cmPortrait.setOrderTotal(orderList.get(0).getNumbers());*/
  291. cmPortrait.setOrderTotal(length);
  292. // 当前单位订单总额
  293. cmPortrait.setOrderScopeTotalFee(Double.valueOf(String.format("%.2f", orderScopeTotalFee)));
  294. orderPortrait.setValue(ordinary);
  295. if (ordinary != 0) {
  296. orderPortrait.setName("普通订单 【" + instance.format((float) ordinary / (float) length * 100) + "%】 【" + ordinary + "个】");
  297. } else {
  298. orderPortrait.setName("普通订单 【 0 %】 【" + ordinary + "个】");
  299. }
  300. orderPortraits.add(orderPortrait);
  301. orderPortrait = new OrderPortrait();
  302. orderPortrait.setValue(secondHand);
  303. if (secondHand != 0) {
  304. orderPortrait.setName("二手订单 【" + instance.format((float) secondHand / (float) length * 100) + "%】 【" + secondHand + "个】");
  305. } else {
  306. orderPortrait.setName("二手订单 【 0 %】 【" + secondHand + "个】");
  307. }
  308. orderPortraits.add(orderPortrait);
  309. /*orderPortrait = new OrderPortrait();
  310. orderPortrait.setValue(rebate);
  311. if (rebate != 0) {
  312. orderPortrait.setName("返佣订单 【" + instance.format((float) rebate / (float) length * 100) + "%】 【" + rebate + "个】");
  313. } else {
  314. orderPortrait.setName("返佣订单 【 0 %】 【" + rebate + "个】");
  315. }
  316. orderPortraits.add(orderPortrait);*/
  317. /*orderPortrait = new OrderPortrait();
  318. orderPortrait.setValue(partialRefund);
  319. if (partialRefund != 0) {
  320. orderPortrait.setName("部分退款订单 【" + instance.format((float) partialRefund / (float) length * 100) + "%】 【" + partialRefund + "个】");
  321. } else {
  322. orderPortrait.setName("部分退款订单 【 0 %】 【" + partialRefund + "个】");
  323. }
  324. orderPortraits.add(orderPortrait);*/
  325. /*orderPortrait = new OrderPortrait();
  326. orderPortrait.setValue(fullRefund);
  327. if (fullRefund != 0) {
  328. orderPortrait.setName("全部退款订单 【" + instance.format((float)fullRefund / (float) length * 100) + "%】 【" + fullRefund + "个】");
  329. } else {
  330. orderPortrait.setName("全部退款订单 【 0 %】 【" + fullRefund + "个】");
  331. }
  332. orderPortraits.add(orderPortrait);
  333. orderPortrait = new OrderPortrait();
  334. orderPortrait.setValue(closed);
  335. if (closed != 0) {
  336. orderPortrait.setName("已关闭订单 【" + instance.format((float)closed / (float) length * 100) + "%】 【" + closed + "个】");
  337. } else {
  338. orderPortrait.setName("已关闭订单 【 0 %】 【" + closed + "个】");
  339. }
  340. orderPortraits.add(orderPortrait);*/
  341. cmPortrait.setOrderPortrait(orderPortraits);
  342. }
  343. // 总量
  344. total = ordinary + secondHand + rebate + partialRefund; // + fullRefund + closed
  345. cmPortrait.setOrderScopeNum(total);
  346. calendar.setTime(date);
  347. calendar.add(Calendar.DAY_OF_MONTH, -1);
  348. time = calendar.getTime();
  349. endTime = dateFormat.format(time);
  350. cmPortrait.setEndTime(endTime);
  351. }
  352. // 搜索关键词
  353. if (1 == cmPortrait.getType() || 4 == cmPortrait.getType()) {
  354. List<CmBehaviorRecord> behaviorRecordList = cmPortraitDao.selBehaviorList(cmPortrait);
  355. int keywordsTotal = 0;
  356. ArrayList<Integer> integers = new ArrayList<>();
  357. ArrayList<String> strings = new ArrayList<>();
  358. if (behaviorRecordList.size() != 0) {
  359. for (CmBehaviorRecord record : behaviorRecordList) {
  360. keywordsTotal += record.getNumber();
  361. integers.add(record.getNumber());
  362. if (!ObjectUtils.isEmpty(record.getPageLabel())) {
  363. strings.add(record.getPageLabel());
  364. } else {
  365. strings.add("未知");
  366. }
  367. cmPortrait.setTotalkeywords(behaviorRecordList.get(0).getNumbers());
  368. cmPortrait.setBehaviorValue(integers);
  369. cmPortrait.setBehaviorType(strings);
  370. }
  371. }
  372. cmPortrait.setKeyWordsScopeNum(keywordsTotal);
  373. }
  374. // 咨询记录
  375. if (2 == cmPortrait.getType() || 4 == cmPortrait.getType()) {
  376. if ((0 == cmPortrait.getDateType() || 1 == cmPortrait.getDateType()) && expty) {
  377. cmPortrait.setEndTime(dateFormat.format(date));
  378. }
  379. if (cmPortrait.getEndTime().equals(endTime)) {
  380. cmPortrait.setEndTime(dateFormat.format(date));
  381. }
  382. List<CmClubRemarks> remarksList = cmPortraitDao.selRemarksList(cmPortrait);
  383. // int remarksTotal = 0;
  384. ArrayList<Integer> integers = new ArrayList<>();
  385. ArrayList<String> strings = new ArrayList<>();
  386. ArrayList<String> strRemark = new ArrayList<>();
  387. ArrayList<String> remarkAll = new ArrayList<>();
  388. int number = 0;
  389. if (remarksList.size() != 0) {
  390. for (CmClubRemarks remarks : remarksList) {
  391. String[] split = remarks.getRemarks().split(",");
  392. for (String str : split) {
  393. if (!strRemark.contains(str)) {
  394. strRemark.add(str);
  395. }
  396. remarkAll.add(str);
  397. }
  398. }
  399. for (String str : strRemark) {
  400. for (int i = 0; i < remarkAll.size(); i++) {
  401. if (str.equals(remarkAll.get(i))) {
  402. number++;
  403. }
  404. }
  405. integers.add(number);
  406. // remarksTotal += number;
  407. if (!ObjectUtils.isEmpty(str)) {
  408. strings.add(str);
  409. } else {
  410. strings.add("未知");
  411. }
  412. number = 0;
  413. }
  414. // 数组根据出现次数排序
  415. int temp = 0;
  416. String strTemp = "";
  417. for (int i = 0; i < integers.size() - 1; i++) {
  418. for (int k = 0; k < integers.size() - 1 - i; k++) {
  419. if (integers.get(k) > integers.get(k + 1)) {
  420. temp = integers.get(k);
  421. integers.set(k, integers.get(k + 1));
  422. integers.set(k + 1, temp);
  423. strTemp = strings.get(k);
  424. strings.set(k, strings.get(k + 1));
  425. strings.set(k + 1, strTemp);
  426. }
  427. }
  428. }
  429. // cmPortrait.setRemarksTotal(remarksList.get(0).getNumbers());
  430. cmPortrait.setRemarksValue(integers);
  431. cmPortrait.setRemarksType(strings);
  432. }
  433. cmPortrait.setRemarksScopeNum(remarksList.size());
  434. calendar.setTime(date);
  435. calendar.add(Calendar.DAY_OF_MONTH, -1);
  436. time = calendar.getTime();
  437. endTime = dateFormat.format(time);
  438. cmPortrait.setEndTime(endTime);
  439. }
  440. // 访问记录
  441. if (3 == cmPortrait.getType() || 4 == cmPortrait.getType()) {
  442. List<CmBehaviorRecord> pageTypeList = cmPortraitDao.selBehaviorPageTypeList(cmPortrait);
  443. ArrayList<Integer> integers = new ArrayList<>();
  444. ArrayList<String> strings = new ArrayList<>();
  445. if (pageTypeList.size() != 0) {
  446. for (CmBehaviorRecord record : pageTypeList) {
  447. integers.add(record.getNumbers());
  448. strings.add(record.getPageLabel());
  449. }
  450. cmPortrait.setPageTypeValue(integers);
  451. cmPortrait.setPageType(strings);
  452. cmPortrait.setVisitNum(pageTypeList.size());
  453. }
  454. }
  455. if (!expty) {
  456. cmPortrait.setStartTime(time1);
  457. if ((0 == cmPortrait.getDateType() || 1 == cmPortrait.getDateType()) && ObjectUtils.isEmpty(cmPortrait.getStartTime())) {
  458. cmPortrait.setStartTime(time2);
  459. }
  460. cmPortrait.setEndTime(time2);
  461. }
  462. return cmPortrait;
  463. }
  464. /**
  465. * 协销列表
  466. * @return
  467. */
  468. public List<Server> getSerList() {
  469. List<Server> serviceInfo = cmPortraitDao.getServiceInfo();
  470. return serviceInfo;
  471. }
  472. /**
  473. * 机构-协销画像
  474. * @param clubSales
  475. */
  476. public CmClubSales clubSales(CmClubSales clubSales) {
  477. SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
  478. Date date = new Date();
  479. String endTime = "";
  480. String startTime = "";
  481. Calendar calendar = Calendar.getInstance();
  482. calendar.setTime(date);
  483. calendar.add(Calendar.DAY_OF_MONTH, -1);
  484. Date time = calendar.getTime();
  485. endTime = dateFormat.format(time);
  486. String time1 = "";
  487. String time2 = "";
  488. boolean expty = ObjectUtils.isEmpty(clubSales.getStartTime()) && ObjectUtils.isEmpty(clubSales.getEndTime());
  489. if (expty) {
  490. Date start = null;
  491. clubSales.setEndTime(endTime);
  492. // 日期参数为 日
  493. if (1 == clubSales.getDateType()) {
  494. clubSales.setStartTime(endTime);
  495. }
  496. if (2 == clubSales.getDateType()) {
  497. calendar.setTime(time);
  498. calendar.add(Calendar.MONTH, -1);
  499. start = calendar.getTime();
  500. startTime = dateFormat.format(start);
  501. clubSales.setStartTime(startTime);
  502. }
  503. if (3 == clubSales.getDateType()) {
  504. calendar.setTime(time);
  505. calendar.add(Calendar.MONTH, -6);
  506. start = calendar.getTime();
  507. startTime = dateFormat.format(start);
  508. clubSales.setStartTime(startTime);
  509. }
  510. if (4 == clubSales.getDateType()) {
  511. calendar.setTime(time);
  512. calendar.add(Calendar.YEAR, -1);
  513. start = calendar.getTime();
  514. startTime = dateFormat.format(start);
  515. clubSales.setStartTime(startTime);
  516. }
  517. } else {
  518. time1 = clubSales.getStartTime();
  519. time2 = clubSales.getEndTime();
  520. }
  521. try {
  522. clubSales.setStartTime(clubSales.getStartTime() + " 00:00:00");
  523. clubSales.setEndTime(clubSales.getEndTime() + " 23:59:59");
  524. } catch (Exception e) {
  525. e.printStackTrace();
  526. }
  527. // 新注册机构
  528. if (0 == clubSales.getType() || 3 == clubSales.getType()) {
  529. if ((0 == clubSales.getDateType() || 1 == clubSales.getDateType()) && expty) {
  530. clubSales.setEndTime(dateFormat.format(date));
  531. }
  532. if (clubSales.getEndTime().equals(endTime)) {
  533. clubSales.setEndTime(dateFormat.format(date));
  534. }
  535. int spClub = 0, unSpClub = 0;
  536. ArrayList<OrderPortrait> orderPortraits = new ArrayList<>();
  537. OrderPortrait orderPortrait = new OrderPortrait();
  538. List<clubData> clubList = cmPortraitDao.getNewClubInfo(clubSales);
  539. int length = clubList.size();
  540. NumberFormat instance = NumberFormat.getInstance();
  541. instance.setMaximumFractionDigits(2);
  542. if (length != 0) {
  543. for (clubData club : clubList) {
  544. if ( null == club.getSpID() || 1342 == club.getSpID()) {
  545. // 未分配协销结构与
  546. spClub++;
  547. } else {
  548. // 已分配协销机构
  549. unSpClub++;
  550. }
  551. }
  552. clubSales.setTotal(length);
  553. orderPortrait.setValue(spClub);
  554. if (spClub != 0) {
  555. orderPortrait.setName("已分配协销 " + instance.format((float) spClub / (float) length * 100) + "% " + spClub + "个");
  556. } else {
  557. orderPortrait.setName("已分配协销 0 % " + spClub + "个");
  558. }
  559. orderPortraits.add(orderPortrait);
  560. orderPortrait = new OrderPortrait();
  561. orderPortrait.setValue(unSpClub);
  562. if (unSpClub != 0) {
  563. orderPortrait.setName("未分配协销 " + instance.format((float) unSpClub / (float) length * 100) + "% " + unSpClub + "个");
  564. } else {
  565. orderPortrait.setName("未分配协销 0 % " + unSpClub + "个");
  566. }
  567. orderPortraits.add(orderPortrait);
  568. clubSales.setPortrait(orderPortraits);
  569. }
  570. calendar.setTime(date);
  571. calendar.add(Calendar.DAY_OF_MONTH, -1);
  572. time = calendar.getTime();
  573. endTime = dateFormat.format(time);
  574. clubSales.setEndTime(endTime);
  575. }
  576. // 机构咨询记录
  577. if (1 == clubSales.getType() || 3 == clubSales.getType()) {
  578. // 机构咨询记录
  579. List<clubData> clubRemark = cmPortraitDao.getClubRemark(clubSales);
  580. // 游客咨询记录
  581. List<clubData> clubVisitorRemark = cmPortraitDao.getClubVisitorRemark(clubSales);
  582. // 新注册机构
  583. List<Integer> clubIdList = cmPortraitDao.getNewClubId(clubSales);
  584. int total = 0;
  585. // 组装数据
  586. ArrayList<OrderPortrait> orderPortraits = new ArrayList<>();
  587. OrderPortrait orderPortrait = new OrderPortrait();
  588. Integer clubRemarkNumber = 0;
  589. Integer touristRemarkNumber = 0;
  590. if (clubRemark.size() != 0) {
  591. // 组转内圈数据
  592. // 填写过机构数、咨询记录数
  593. int fillClub = 0, fillRemark = 0 ;
  594. // 未填写过机构数、咨询记录数
  595. int unFillClub = 0;
  596. for (clubData remark : clubRemark) {
  597. total += remark.getNumber();
  598. clubRemarkNumber += remark.getNumber();
  599. for (Integer clubId : clubIdList) {
  600. if (clubRemark.contains(clubId)) {
  601. fillClub ++;
  602. fillRemark += remark.getNumber();
  603. }
  604. }
  605. }
  606. orderPortrait.setValue(fillClub);
  607. if (fillClub != 0) {
  608. orderPortrait.setName("新注册机构--填写机构 " + fillRemark + "条 " + fillClub + "个");
  609. } else {
  610. orderPortrait.setName("新注册机构--填写机构 0条 " + fillClub + "个");
  611. }
  612. orderPortraits.add(orderPortrait);
  613. orderPortrait = new OrderPortrait();
  614. orderPortrait.setValue(unFillClub);
  615. unFillClub = clubIdList.size() - fillClub;
  616. if (unFillClub != 0) {
  617. orderPortrait.setName("新注册机构--未填写机构 0条 " + unFillClub + "个");
  618. } else {
  619. orderPortrait.setName("新注册机构--未填写机构 0条 " + unFillClub + "个");
  620. }
  621. orderPortraits.add(orderPortrait);
  622. clubSales.setInternalPortrait(orderPortraits);
  623. orderPortraits = new ArrayList<>();
  624. orderPortrait = new OrderPortrait();
  625. }
  626. if (clubVisitorRemark.size() != 0) {
  627. for (clubData tourist : clubVisitorRemark) {
  628. total += tourist.getNumber();
  629. touristRemarkNumber += tourist.getNumber();
  630. }
  631. }
  632. // 外圈数据
  633. clubSales.setRemarkTotal(total);
  634. orderPortrait.setValue(clubRemarkNumber);
  635. if (clubRemark.size() != 0) {
  636. orderPortrait.setName("已填写机构 " + clubRemarkNumber + "条 " + clubRemark.size() + "个");
  637. } else {
  638. orderPortrait.setName("已填写机构 0条 " + clubRemark.size() + "个");
  639. }
  640. orderPortraits.add(orderPortrait);
  641. orderPortrait = new OrderPortrait();
  642. orderPortrait.setValue(touristRemarkNumber);
  643. if (clubVisitorRemark.size() != 0) {
  644. orderPortrait.setName("已填写游客 " + touristRemarkNumber + "条 " + clubVisitorRemark.size() + "个");
  645. } else {
  646. orderPortrait.setName("已填写游客 0条 " + clubVisitorRemark.size() + "个");
  647. }
  648. orderPortraits.add(orderPortrait);
  649. clubSales.setPortrait(orderPortraits);
  650. }
  651. // 机构活跃
  652. if (2 == clubSales.getType() || 3 == clubSales.getType()) {
  653. if (expty) {
  654. // 默认前一周
  655. calendar.setTime(date);
  656. Date activeStartTime = calendar.getTime();
  657. endTime = dateFormat.format(activeStartTime);
  658. calendar.add(Calendar.DAY_OF_MONTH, -7);
  659. Date activeEndTime = calendar.getTime();
  660. startTime = dateFormat.format(activeEndTime);
  661. clubSales.setStartTime(startTime);
  662. clubSales.setEndTime(endTime);
  663. }
  664. // 查询时间--图表 x 轴数据
  665. List<String> activeDateList = cmPortraitDao.getActiveDate(clubSales.getStartTime(), clubSales.getEndTime());
  666. ArrayList<String> names = new ArrayList<>();
  667. // 活跃数据
  668. ArrayList<Integer> active = new ArrayList<>();
  669. // 不活跃数据
  670. ArrayList<Integer> unActive = new ArrayList<>();
  671. for (String activeDate : activeDateList) {
  672. names.add(activeDate);
  673. // 该天用户活跃数据
  674. List<clubData> activeInfo = cmPortraitDao.getActiveInfo(activeDate, clubSales.getSpID());
  675. Integer activeNumber = 0;
  676. Integer unActiveNumber = 0;
  677. if (null != activeInfo && activeInfo.size() > 0) {
  678. // 活跃数据
  679. List<clubData> activeClubList = activeInfo.stream().filter(ac -> ac.getActiveStatus().equals(0)).collect(Collectors.toList());
  680. if (null != activeClubList && activeClubList.size() > 0) {
  681. activeNumber = activeClubList.get(0).getNumber();
  682. }
  683. // 不活跃数据
  684. List<clubData> unActiveClubList = activeInfo.stream().filter(ac -> ac.getActiveStatus().equals(1)).collect(Collectors.toList());
  685. if (null != unActiveClubList && unActiveClubList.size() > 0) {
  686. unActiveNumber = unActiveClubList.get(0).getNumber();
  687. }
  688. }
  689. active.add(activeNumber);
  690. unActive.add(unActiveNumber);
  691. }
  692. clubSales.setNames(names);
  693. clubSales.setValues(active);
  694. clubSales.setValues1(unActive);
  695. }
  696. if (!expty && 2 != clubSales.getType()) {
  697. clubSales.setStartTime(time1);
  698. clubSales.setEndTime(time2);
  699. }
  700. return clubSales;
  701. }
  702. /**
  703. * 设置机构资料完整度
  704. * @param clubStatistics
  705. */
  706. public void setClubNum(ClubStatistics clubStatistics) {
  707. Integer number = 0;
  708. if (null != clubStatistics) {
  709. // 计算资料完整度
  710. if (StringUtils.isNotBlank(clubStatistics.getName())) {
  711. number += 10;
  712. }
  713. if (StringUtils.isNotBlank(clubStatistics.getLinkMan())) {
  714. number += 10;
  715. }
  716. if (StringUtils.isNotBlank(clubStatistics.getContractMobile())) {
  717. number += 10;
  718. }
  719. if (StringUtils.isNotBlank(clubStatistics.getLinkManIdentity())) {
  720. number += 10;
  721. }
  722. if (StringUtils.isNotBlank(clubStatistics.getAddress())) {
  723. number += 10;
  724. }
  725. if (StringUtils.isNotBlank(clubStatistics.getBusinessLicenseImage())) {
  726. number += 10;
  727. }
  728. if (StringUtils.isNotBlank(clubStatistics.getUserIdentity())) {
  729. number += 10;
  730. }
  731. if (StringUtils.isNotBlank(clubStatistics.getSname())) {
  732. number += 3;
  733. }
  734. if (StringUtils.isNotBlank(clubStatistics.getContractEmail())) {
  735. number += 5;
  736. }
  737. if (StringUtils.isNotBlank(clubStatistics.getContractPhone())) {
  738. number += 4;
  739. }
  740. if (StringUtils.isNotBlank(clubStatistics.getFax())) {
  741. number += 3;
  742. }
  743. if (StringUtils.isNotBlank(clubStatistics.getHeadpic())) {
  744. number += 5;
  745. }
  746. if (StringUtils.isNotBlank(clubStatistics.getSocialCreditCode())) {
  747. number += 5;
  748. }
  749. if (StringUtils.isNotBlank(clubStatistics.getInfo())) {
  750. number += 5;
  751. }
  752. }
  753. clubStatistics.setNumber(number);
  754. clubStatistics.setClubDataIntegrity(number + "%");
  755. }
  756. }