ClubPortraitService.java 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294
  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.CmBehaviorRecord;
  5. import com.caimei.modules.user.entity.CmClubRemarks;
  6. import com.caimei.modules.user.entity.CmPortrait;
  7. import com.caimei.modules.user.entity.OrderPortrait;
  8. import com.thinkgem.jeesite.common.utils.ObjectUtils;
  9. import com.thinkgem.jeesite.common.utils.StringUtils;
  10. import org.springframework.beans.factory.annotation.Autowired;
  11. import org.springframework.stereotype.Service;
  12. import java.text.NumberFormat;
  13. import java.text.SimpleDateFormat;
  14. import java.util.ArrayList;
  15. import java.util.Calendar;
  16. import java.util.Date;
  17. import java.util.List;
  18. /**
  19. * Description
  20. *
  21. * @author : Charles
  22. * @date : 2023/2/15
  23. */
  24. @Service
  25. public class ClubPortraitService {
  26. @Autowired private CmPortraitDao cmPortraitDao;
  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. /**
  37. * 查询机构画像数据
  38. * @param cmPortrait
  39. * @return
  40. */
  41. public CmPortrait dataList(CmPortrait cmPortrait) {
  42. SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
  43. Date date = new Date();
  44. String endTime = "";
  45. Calendar calendar = Calendar.getInstance();
  46. calendar.setTime(date);
  47. calendar.add(Calendar.DAY_OF_MONTH, -1);
  48. Date time = calendar.getTime();
  49. endTime = dateFormat.format(time);
  50. String time1 = "";
  51. String time2 = "";
  52. boolean expty = ObjectUtils.isEmpty(cmPortrait.getStartTime()) && ObjectUtils.isEmpty(cmPortrait.getEndTime());
  53. if (expty) {
  54. Date start = null;
  55. String startTime = "";
  56. String format = dateFormat.format(date);
  57. cmPortrait.setEndTime(endTime);
  58. // 日期参数为 日
  59. if (0 == cmPortrait.getDateType() || 1 == cmPortrait.getDateType()) {
  60. cmPortrait.setAccessDate(endTime);
  61. cmPortrait.setStartTime(endTime);
  62. // cmPortrait.setEndTime(endTime);
  63. }
  64. if (2 == cmPortrait.getDateType()) {
  65. // cmPortrait.setEndTime(endTime);
  66. calendar.setTime(time);
  67. calendar.add(Calendar.MONTH, -1);
  68. start = calendar.getTime();
  69. startTime = dateFormat.format(start);
  70. cmPortrait.setStartTime(startTime);
  71. }
  72. if (3 == cmPortrait.getDateType()) {
  73. // cmPortrait.setEndTime(endTime);
  74. calendar.setTime(time);
  75. calendar.add(Calendar.MONTH, -6);
  76. start = calendar.getTime();
  77. startTime = dateFormat.format(start);
  78. cmPortrait.setStartTime(startTime);
  79. }
  80. if (4 == cmPortrait.getDateType()) {
  81. // cmPortrait.setEndTime(endTime);
  82. calendar.setTime(time);
  83. calendar.add(Calendar.YEAR, -1);
  84. start = calendar.getTime();
  85. startTime = dateFormat.format(start);
  86. cmPortrait.setStartTime(startTime);
  87. }
  88. } else {
  89. time1 = cmPortrait.getStartTime();
  90. time2 = cmPortrait.getEndTime();
  91. }
  92. // 机构订单
  93. if (0 == cmPortrait.getType() || 4 == cmPortrait.getType()) {
  94. if ((0 == cmPortrait.getDateType() || 1 == cmPortrait.getDateType()) && expty) {
  95. cmPortrait.setEndTime(dateFormat.format(date));
  96. }
  97. if (cmPortrait.getEndTime().equals(endTime)) {
  98. cmPortrait.setEndTime(dateFormat.format(date));
  99. }
  100. int ordinary = 0, secondHand = 0, rebate = 0, partialRefund = 0, fullRefund = 0, closed = 0;
  101. ArrayList<OrderPortrait> orderPortraits = new ArrayList<>();
  102. OrderPortrait orderPortrait = new OrderPortrait();
  103. List<NewOrder> orderList = cmPortraitDao.selOrderList(cmPortrait);
  104. int length = orderList.size();
  105. NumberFormat instance = NumberFormat.getInstance();
  106. instance.setMaximumFractionDigits(2);
  107. if (length != 0) {
  108. for (NewOrder order : orderList) {
  109. // 普通订单
  110. if (("0".equals(order.getSecondHandOrderFlag()) || StringUtils.isEmpty(order.getSecondHandOrderFlag()))
  111. && (!"1".equals(order.getRebateFlag()) || "".equals(order.getRebateFlag()) || StringUtils.isEmpty(order.getRebateFlag()))
  112. && ((!"1".equals(order.getRefundType()) && !"2".equals(order.getRefundType())) || "".equals(order.getRefundType()) || StringUtils.isEmpty(order.getRefundType()))
  113. && !"6".equals(order.getStatus())) {
  114. ordinary++;
  115. }
  116. // 二手订单
  117. if ("1".equals(order.getSecondHandOrderFlag()) && !"1".equals(order.getRebateFlag())
  118. && (!"1".equals(order.getRefundType()) && !"2".equals(order.getRefundType())) && !"6".equals(order.getStatus())) {
  119. secondHand++;
  120. }
  121. // 返佣订单
  122. if ("1".equals(order.getRebateFlag()) &&
  123. (!"1".equals(order.getRefundType()) && !"2".equals(order.getRefundType()) || StringUtils.isEmpty(order.getRefundType())) && !"6".equals(order.getStatus())) {
  124. rebate++;
  125. }
  126. // 部分退款
  127. if ("1".equals(order.getRefundType()) && !"6".equals(order.getStatus())) {
  128. partialRefund++;
  129. }
  130. // 全部退款
  131. if ("2".equals(order.getRefundType()) && !"6".equals(order.getStatus())) {
  132. fullRefund++;
  133. }
  134. // 已关闭
  135. if ("6".equals(order.getStatus()) || StringUtils.isEmpty(order.getStatus())) {
  136. closed++;
  137. }
  138. }
  139. /*cmPortrait.setOrderTotalAmount(orderList.get(0).getTotalMoney());
  140. cmPortrait.setOrderTotal(orderList.get(0).getNumbers());*/
  141. cmPortrait.setOrderTotal(length);
  142. orderPortrait.setValue(ordinary);
  143. if (ordinary != 0) {
  144. orderPortrait.setName("普通订单 【" + instance.format((float)ordinary / (float) length * 100) + "%】 【" + ordinary + "个】");
  145. } else {
  146. orderPortrait.setName("普通订单 【 0 %】 【" + ordinary + "个】");
  147. }
  148. orderPortraits.add(orderPortrait);
  149. orderPortrait = new OrderPortrait();
  150. orderPortrait.setValue(secondHand);
  151. if (secondHand != 0) {
  152. orderPortrait.setName("二手订单 【" + instance.format((float)secondHand / (float) length * 100) + "%】 【" + secondHand + "个】");
  153. } else {
  154. orderPortrait.setName("二手订单 【 0 %】 【" + secondHand + "个】");
  155. }
  156. orderPortraits.add(orderPortrait);
  157. orderPortrait = new OrderPortrait();
  158. orderPortrait.setValue(rebate);
  159. if (rebate != 0) {
  160. orderPortrait.setName("返佣订单 【" + instance.format((float)rebate / (float) length * 100) + "%】 【" + rebate + "个】");
  161. } else {
  162. orderPortrait.setName("返佣订单 【 0 %】 【" + rebate + "个】");
  163. }
  164. orderPortraits.add(orderPortrait);
  165. orderPortrait = new OrderPortrait();
  166. orderPortrait.setValue(partialRefund);
  167. if (partialRefund != 0) {
  168. orderPortrait.setName("部分退款订单 【" + instance.format((float)partialRefund / (float) length * 100) + "%】 【" + partialRefund + "个】");
  169. } else {
  170. orderPortrait.setName("部分退款订单 【 0 %】 【" + partialRefund + "个】");
  171. }
  172. orderPortraits.add(orderPortrait);
  173. orderPortrait = new OrderPortrait();
  174. orderPortrait.setValue(fullRefund);
  175. if (fullRefund != 0) {
  176. orderPortrait.setName("全部退款订单 【" + instance.format((float)fullRefund / (float) length * 100) + "%】 【" + fullRefund + "个】");
  177. } else {
  178. orderPortrait.setName("全部退款订单 【 0 %】 【" + fullRefund + "个】");
  179. }
  180. orderPortraits.add(orderPortrait);
  181. orderPortrait = new OrderPortrait();
  182. orderPortrait.setValue(closed);
  183. if (closed != 0) {
  184. orderPortrait.setName("已关闭订单 【" + instance.format((float)closed / (float) length * 100) + "%】 【" + closed + "个】");
  185. } else {
  186. orderPortrait.setName("已关闭订单 【 0 %】 【" + closed + "个】");
  187. }
  188. orderPortraits.add(orderPortrait);
  189. cmPortrait.setOrderPortrait(orderPortraits);
  190. }
  191. calendar.setTime(date);
  192. calendar.add(Calendar.DAY_OF_MONTH, -1);
  193. time = calendar.getTime();
  194. endTime = dateFormat.format(time);
  195. cmPortrait.setEndTime(endTime);
  196. }
  197. // 搜索关键词
  198. if (1 == cmPortrait.getType() || 4 == cmPortrait.getType()) {
  199. List<CmBehaviorRecord> behaviorRecordList = cmPortraitDao.selBehaviorList(cmPortrait);
  200. ArrayList<Integer> integers = new ArrayList<>();
  201. ArrayList<String> strings = new ArrayList<>();
  202. if (behaviorRecordList.size() != 0) {
  203. for (CmBehaviorRecord record : behaviorRecordList) {
  204. integers.add(record.getNumber());
  205. if (!ObjectUtils.isEmpty(record.getPageLabel())) {
  206. strings.add(record.getPageLabel());
  207. } else {
  208. strings.add("未知");
  209. }
  210. cmPortrait.setTotalkeywords(behaviorRecordList.get(0).getNumbers());
  211. cmPortrait.setBehaviorValue(integers);
  212. cmPortrait.setBehaviorType(strings);
  213. }
  214. }
  215. }
  216. // 咨询记录
  217. if (2 == cmPortrait.getType() || 4 == cmPortrait.getType()) {
  218. if ((0 == cmPortrait.getDateType() || 1 == cmPortrait.getDateType()) && expty) {
  219. cmPortrait.setEndTime(dateFormat.format(date));
  220. }
  221. if (cmPortrait.getEndTime().equals(endTime)) {
  222. cmPortrait.setEndTime(dateFormat.format(date));
  223. }
  224. List<CmClubRemarks> remarksList = cmPortraitDao.selRemarksList(cmPortrait);
  225. ArrayList<Integer> integers = new ArrayList<>();
  226. ArrayList<String> strings = new ArrayList<>();
  227. ArrayList<String> strRemark = new ArrayList<>();
  228. int number = 0;
  229. if (remarksList.size() != 0) {
  230. for (CmClubRemarks remarks: remarksList) {
  231. String[] split = remarks.getRemarks().split(",");
  232. for (String str : split) {
  233. if (!strRemark.contains(str)) {
  234. strRemark.add(str);
  235. }
  236. }
  237. }
  238. for (String str : strRemark) {
  239. for (CmClubRemarks remarks: remarksList) {
  240. if (remarks.getRemarks().contains(str)) {
  241. number++;
  242. }
  243. }
  244. integers.add(number);
  245. if (!ObjectUtils.isEmpty(str)) {
  246. strings.add(str);
  247. } else {
  248. strings.add("未知");
  249. }
  250. number = 0;
  251. }
  252. cmPortrait.setRemarksTotal(remarksList.get(0).getNumbers());
  253. cmPortrait.setRemarksValue(integers);
  254. cmPortrait.setRemarksType(strings);
  255. }
  256. calendar.setTime(date);
  257. calendar.add(Calendar.DAY_OF_MONTH, -1);
  258. time = calendar.getTime();
  259. endTime = dateFormat.format(time);
  260. cmPortrait.setEndTime(endTime);
  261. }
  262. // 访问记录
  263. if (3 == cmPortrait.getType() || 4 == cmPortrait.getType()) {
  264. List<CmBehaviorRecord> pageTypeList = cmPortraitDao.selBehaviorPageTypeList(cmPortrait);
  265. ArrayList<Integer> integers = new ArrayList<>();
  266. ArrayList<String> strings = new ArrayList<>();
  267. if (pageTypeList.size() != 0) {
  268. for(CmBehaviorRecord record : pageTypeList) {
  269. integers.add(record.getNumbers());
  270. strings.add(record.getPageLabel());
  271. }
  272. cmPortrait.setPageTypeValue(integers);
  273. cmPortrait.setPageType(strings);
  274. }
  275. }
  276. if (!expty) {
  277. cmPortrait.setStartTime(time1);
  278. if ((0 == cmPortrait.getDateType() || 1 == cmPortrait.getDateType()) && ObjectUtils.isEmpty(cmPortrait.getStartTime())) {
  279. cmPortrait.setStartTime(time2);
  280. }
  281. cmPortrait.setEndTime(time2);
  282. }
  283. return cmPortrait;
  284. }
  285. }