AdminStatisticsServiceImpl.java 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436
  1. package com.goafanti.admin.service.impl;
  2. import com.goafanti.admin.bo.*;
  3. import com.goafanti.admin.service.AdminStatisticsService;
  4. import com.goafanti.common.constant.AFTConstants;
  5. import com.goafanti.common.dao.*;
  6. import com.goafanti.common.model.Admin;
  7. import com.goafanti.common.model.AdminUserCount;
  8. import com.goafanti.common.model.SalesTeam;
  9. import com.goafanti.common.utils.DateUtils;
  10. import com.goafanti.core.shiro.token.TokenManager;
  11. import org.springframework.stereotype.Service;
  12. import javax.annotation.Resource;
  13. import java.math.BigDecimal;
  14. import java.util.*;
  15. @Service
  16. public class AdminStatisticsServiceImpl implements AdminStatisticsService {
  17. @Resource
  18. private AdminMapper adminMapper;
  19. @Resource
  20. private PublicReleaseMapper publicReleaseMapper;
  21. @Resource
  22. private FinanceCountMapper financeCountMapper;
  23. @Resource
  24. private CallLogMapper callLogMapper;
  25. @Resource
  26. private SalesTeamMapper salesTeamMapper;
  27. @Override
  28. public Object info( String startTime, String endTime) {
  29. String aid=TokenManager.getAdminId();
  30. endTime=endTime+" 23:59:59";
  31. AdminStatisticsBo adminStatisticsBo = adminMapper.adminStatisticsInfo(aid);
  32. if (adminStatisticsBo==null)adminStatisticsBo=new AdminStatisticsBo();
  33. if (adminStatisticsBo.getReceivables()==null) adminStatisticsBo.setReceivables(new BigDecimal(0));
  34. AdminStatisticsBo asb = adminMapper.adminStatisticsInfoByTime(aid, startTime, endTime);
  35. if (asb==null) {
  36. adminStatisticsBo.setRangePrivateSum(0);
  37. adminStatisticsBo.setRangeSignSum(0);
  38. adminStatisticsBo.setRangeChannelSum(0);
  39. adminStatisticsBo.setRangeFollowSum(0);
  40. adminStatisticsBo.setRangeOrderSum(0);
  41. }else {
  42. adminStatisticsBo.setRangePrivateSum(asb.getRangePrivateSum());
  43. adminStatisticsBo.setRangeSignSum(asb.getRangeSignSum());
  44. adminStatisticsBo.setRangeChannelSum(asb.getRangeChannelSum());
  45. adminStatisticsBo.setRangeFollowSum(asb.getRangeFollowSum());
  46. adminStatisticsBo.setRangeOrderSum(asb.getRangeOrderSum());
  47. }
  48. Integer rangePublicReleaseSum=adminMapper.adminStatisticsPublicReleaseByAidAndTime(aid, startTime, endTime);
  49. if (rangePublicReleaseSum==null)rangePublicReleaseSum=0;
  50. adminStatisticsBo.setRangePublicReleaseSum(rangePublicReleaseSum);
  51. BigDecimal rangeReceivables=adminMapper.addAdminContactsRangeReceivables(aid,startTime,endTime);
  52. adminStatisticsBo.setRangeReceivables(rangeReceivables);
  53. //添加外呼数据
  54. AdminStatisticsBo as=callLogMapper.selectAdminCallSum(aid,startTime,endTime);
  55. if (as !=null){
  56. if (as.getCallSum()!=null)adminStatisticsBo.setCallSum(as.getCallSum());
  57. if (as.getCallDurationSum()!=null)adminStatisticsBo.setCallDurationSum(as.getCallDurationSum());
  58. }else {
  59. adminStatisticsBo.setCallSum(0);
  60. adminStatisticsBo.setCallDurationSum(BigDecimal.ZERO);
  61. }
  62. //添加销售团队数据
  63. statisticsSalesTeam(adminStatisticsBo,aid,startTime,endTime);
  64. return adminStatisticsBo;
  65. }
  66. private void statisticsSalesTeam(AdminStatisticsBo res,String aid ,String startTime,String endTime) {
  67. List<String> list =new ArrayList<>();
  68. List<SalesTeam> salesTeams = salesTeamMapper.queryByAid(aid);
  69. //如果不是团队负责人,所有数据都为null
  70. if (salesTeams.isEmpty()){
  71. res.setTeamPeopleSum(null);
  72. res.setTeamCallSum(null);
  73. res.setTeamCallDurationSum(null);
  74. return;
  75. }
  76. //先获取顶层再迭代获取每一层
  77. for (SalesTeam e : salesTeams) {
  78. List<Admin> admins = adminMapper.queryByTeamId(e.getId());
  79. admins.stream().forEach(e1 -> {
  80. list.add(e1.getId());
  81. });
  82. addSonSalesTeam(list,e);
  83. }
  84. Set<String> set = new HashSet<>(list);
  85. int teamCallSum=0;
  86. BigDecimal teamCallDurationSum=BigDecimal.ZERO;
  87. for (String s : set) {
  88. AdminStatisticsBo as=callLogMapper.selectAdminCallSum(s,startTime,endTime);
  89. if (as != null) {
  90. if (as.getCallSum()!= null) teamCallSum = teamCallSum + as.getCallSum();
  91. if (as.getCallDurationSum()!= null) teamCallDurationSum = teamCallDurationSum.add(as.getCallDurationSum());
  92. }
  93. }
  94. res.setTeamPeopleSum(set.size());
  95. res.setTeamCallSum(teamCallSum);
  96. res.setTeamCallDurationSum(teamCallDurationSum);
  97. }
  98. /**
  99. *
  100. * @param list
  101. * @param res
  102. */
  103. private void addSonSalesTeam(List<String> list, SalesTeam res) {
  104. List<SalesTeam> salesTeams = salesTeamMapper.queryBySuperId(res.getId());
  105. if (!salesTeams.isEmpty()){
  106. for (SalesTeam e : salesTeams) {
  107. List<Admin> admins = adminMapper.queryByTeamId(e.getId());
  108. admins.stream().forEach(e1 -> {
  109. list.add(e1.getId());
  110. });
  111. addSonSalesTeam(list,e);
  112. }
  113. }
  114. }
  115. @Override
  116. // @Cacheable(value = "adminStatisticeLists#300", key = "'key:'+#aid")
  117. public Object lists(String aid) {
  118. //获取当月的列表
  119. Map<String,Object> map=new HashMap<>();
  120. Days days = new Days();
  121. List<String> thisMonth = getThisMonth(days);
  122. List<AdminUserCount> userList = adminMapper.thisMonthUser(days.firstDay,days.endDay, aid);
  123. List<Integer> signList=new ArrayList<>();
  124. List<Integer> privateList=new ArrayList<>();
  125. List<Integer> channelList=new ArrayList<>();
  126. List<Integer> userFollowList=new ArrayList<>();
  127. List<Integer> orderList=new ArrayList<>();
  128. List<Integer> publicReleaseList=new ArrayList<>();
  129. int signCount=0,privateCount=0,channelCount=0,followCount=0,orderCount=0,publicReleaseCount=0;
  130. for (String dates : thisMonth) {
  131. boolean flag=true;
  132. for (AdminUserCount e : userList) {
  133. String formatDate = DateUtils.formatDate(e.getDateTime(), AFTConstants.YYYYMMDD);
  134. if (dates.equals(formatDate)){
  135. signCount=signCount+e.getSignCount();
  136. int newSign=signCount;
  137. signList.add(newSign);
  138. privateCount=privateCount+e.getPrivateCount();
  139. int newPrivate=privateCount;
  140. privateList.add(newPrivate);
  141. channelCount=channelCount+e.getChannelCount();
  142. int newChannel=channelCount;
  143. channelList.add(newChannel);
  144. followCount=followCount+e.getFollowCount();
  145. int newFollow=followCount;
  146. userFollowList.add(newFollow);
  147. orderCount=orderCount+e.getOrderCount();
  148. int newOrder=orderCount;
  149. orderList.add(newOrder);
  150. publicReleaseCount=publicReleaseCount+e.getPublicReleaseCount();
  151. int newPublicRelease=publicReleaseCount;
  152. publicReleaseList.add(newPublicRelease);
  153. flag=false;
  154. }
  155. }
  156. if (flag){
  157. signList.add(signCount);
  158. privateList.add(privateCount);
  159. channelList.add(channelCount);
  160. userFollowList.add(followCount);
  161. orderList.add(orderCount);
  162. publicReleaseList.add(publicReleaseCount);
  163. }
  164. }
  165. map.put("dates",thisMonth);
  166. map.put("signList",signList);
  167. map.put("privateList",privateList);
  168. map.put("channelList",channelList);
  169. //跟进数
  170. map.put("userFollowList",userFollowList);
  171. //订单数
  172. map.put("orderList",orderList);
  173. //公出企业数
  174. map.put("publicReleaseList",publicReleaseList);
  175. return map;
  176. }
  177. @Override
  178. public Object consultantInfo(String startTime, String endTime) {
  179. String aid=TokenManager.getAdminId();
  180. endTime=endTime+" 23:59:59";
  181. Integer shiroType=2;
  182. if(TokenManager.hasRole(AFTConstants.TECH)){
  183. shiroType=0;
  184. }else if(TokenManager.hasRole(AFTConstants.TECH_MANAGER)){
  185. shiroType=1;
  186. }
  187. ConsultantStatisticsBo res = adminMapper.consultantStatisticsInfo(aid,shiroType);
  188. if (res == null) res=new ConsultantStatisticsBo();
  189. if (res.getCountPublicRelease()==null)res.setCountPublicRelease(0);
  190. if (res.getOrderPayment()==null)res.setOrderPayment(0);
  191. ConsultantStatisticsBo asb = adminMapper.consultantStatisticsInfoByTime(aid, startTime, endTime);
  192. if (asb!=null){
  193. res.setRangeProjectCount(asb.getProjectCount());
  194. res.setRangeInProgress(asb.getInProgress());
  195. res.setRangeNotStarted(asb.getNotStarted());
  196. res.setRangeComplete(asb.getComplete());
  197. res.setRangeStop(asb.getStop());
  198. res.setRangeCountPublicRelease(asb.getCountPublicRelease());
  199. res.setRangeCountAssist(asb.getCountAssist());
  200. }
  201. return res;
  202. }
  203. @Override
  204. public Object consultantLists(String aid) {
  205. //获取当月的列表
  206. Map<String,Object> map=new LinkedHashMap<>();
  207. Days days = new Days();
  208. List<String> thisMonth = getThisMonth(days);
  209. List<ConsultantUserCount> list = adminMapper.consultantthisMonthUser(days.firstDay,days.endDay, aid);
  210. List<Integer> projectCountList =new ArrayList<>();
  211. List<Integer> inProgressList =new ArrayList<>();
  212. List<Integer> notStartedList =new ArrayList<>();
  213. List<Integer> completeList =new ArrayList<>();
  214. List<Integer> stopList =new ArrayList<>();
  215. List<Integer> publicReleaseCountList =new ArrayList<>();
  216. List<Integer> assistCountList =new ArrayList<>();
  217. int projectCount=0,inProgressCount=0,notStartedCount=0,completeCount=0,stopCount=0,publicReleaseCount=0,
  218. assistCount=0;
  219. for (String dates : thisMonth) {
  220. for (ConsultantUserCount e : list) {
  221. if (e.getDates().equals(dates)){
  222. projectCount=projectCount+e.getProjectCount();
  223. inProgressCount=inProgressCount+e.getInProgress();
  224. notStartedCount=notStartedCount+e.getNotStarted();
  225. completeCount=completeCount+e.getComplete();
  226. stopCount=stopCount+e.getStop();
  227. publicReleaseCount=publicReleaseCount+e.getCountPublicRelease();
  228. assistCount=assistCount+e.getCountAssist();
  229. }
  230. }
  231. projectCountList.add(projectCount);
  232. inProgressList.add(inProgressCount);
  233. notStartedList.add(notStartedCount);
  234. completeList.add(completeCount);
  235. stopList.add(stopCount);
  236. publicReleaseCountList.add(publicReleaseCount);
  237. assistCountList.add(assistCount);
  238. }
  239. map.put("dates",thisMonth);
  240. map.put("projectCountList",projectCountList);
  241. map.put("inProgressList",inProgressList);
  242. map.put("notStartedList",notStartedList);
  243. map.put("completeList",completeList);
  244. map.put("stopList",stopList);
  245. map.put("publicReleaseCountList",publicReleaseCountList);
  246. map.put("assistCountList",assistCountList);
  247. return map;
  248. }
  249. @Override
  250. public Object financeInfo(String startTime, String endTime) {
  251. String aid = TokenManager.getAdminId();
  252. OutFinanceCount financeCount=adminMapper.financeInfo(aid, startTime, endTime);
  253. if (financeCount==null)financeCount= new OutFinanceCount();
  254. String endDate =endTime+" 23:59:59";
  255. Integer rangePublicCount = publicReleaseMapper.selectCountByaidAndDate(aid, startTime, endDate);
  256. if (rangePublicCount==null) rangePublicCount=0;
  257. financeCount.setRangePublicCount(rangePublicCount);
  258. BigDecimal rangeReceivables=adminMapper.selectFinanceReceivablesCount(aid,startTime,endDate);
  259. if (rangeReceivables==null)rangeReceivables=new BigDecimal(0);
  260. financeCount.setRangeReceivables(rangeReceivables);
  261. OutFinanceCount outFinanceCount = adminMapper.selectFinanceChangeCount(aid);
  262. if (outFinanceCount==null) outFinanceCount= new OutFinanceCount();
  263. if (outFinanceCount.getChangeCount()==null)outFinanceCount.setChangeCount(0);
  264. if (outFinanceCount.getChangeInvoiceCount()==null)outFinanceCount.setChangeInvoiceCount(0);
  265. financeCount.setChangeCount(outFinanceCount.getChangeCount());
  266. financeCount.setChangeInvoiceCount(outFinanceCount.getChangeInvoiceCount());
  267. return financeCount;
  268. }
  269. @Override
  270. public Object financeLists(String aid) {
  271. //获取当月的列表
  272. Map<String,Object> map=new LinkedHashMap<>();
  273. Days days = new Days();
  274. List<String> thisMonth = getThisMonth(days);
  275. List<Integer> orderList=new ArrayList<>();
  276. List<Integer> expenseList=new ArrayList<>();
  277. List<Integer> invoiceList=new ArrayList<>();
  278. List<Integer> memberList=new ArrayList<>();
  279. List<Integer> paymentList=new ArrayList<>();
  280. List<Integer> publicList=new ArrayList<>();
  281. List<OutFinanceCount> financeCounts = financeCountMapper.financeLists(aid, days.firstDay, days.endDay+" 23:59:59");
  282. List<OutFinanceCount> pList = publicReleaseMapper.selectByaidAndDate(aid, days.firstDay, days.endDay + " 23:59:59");
  283. int orderCount=0,expenseCount=0, invoiceCount=0,memberCount=0,paymentCount=0,publicCount=0;
  284. for (String e : thisMonth) {
  285. for (OutFinanceCount f : financeCounts) {
  286. if (e.equals(f.getDates())){
  287. orderCount+=f.getOrderCount();
  288. expenseCount+=f.getExpenseCount();
  289. invoiceCount+=f.getInvoiceCount();
  290. memberCount+=f.getMemberCount();
  291. paymentCount+=f.getPaymentCount();
  292. }
  293. }
  294. for (OutFinanceCount p : pList) {
  295. if (e.equals(p.getDates())){
  296. publicCount+=p.getPublicCount();
  297. }
  298. }
  299. orderList.add(orderCount);
  300. expenseList.add(expenseCount);
  301. invoiceList.add(invoiceCount);
  302. memberList.add(memberCount);
  303. paymentList.add(paymentCount);
  304. publicList.add(publicCount);
  305. }
  306. map.put("dates",thisMonth);
  307. map.put("orderList",orderList);
  308. map.put("expenseList",expenseList);
  309. map.put("invoiceList",invoiceList);
  310. map.put("memberList",memberList);
  311. map.put("paymentList",paymentList);
  312. map.put("publicList",publicList);
  313. return map;
  314. }
  315. @Override
  316. public Object salesTeam(String startTime, String endTime) {
  317. List<SalesTeamBo> resList=new ArrayList<>();
  318. List<SalesTeam> salesTeams = salesTeamMapper.queryByAid(TokenManager.getAdminId());
  319. //如果不是团队负责人,所有数据都为null
  320. if (!salesTeams.isEmpty()){
  321. //先获取顶层再迭代获取每一层
  322. for (SalesTeam e : salesTeams) {
  323. SalesTeamBo salesTeamBo = new SalesTeamBo(e);
  324. int teamCallSum=0;
  325. BigDecimal teamCallDurationSum=BigDecimal.ZERO;
  326. List<Admin> admins = adminMapper.queryByTeamId(e.getId());
  327. for (Admin e2 : admins) {
  328. AdminStatisticsBo as=callLogMapper.selectAdminCallSum(e2.getId(),startTime,endTime);
  329. if (as != null) {
  330. if (as.getCallSum()!= null) teamCallSum = teamCallSum + as.getCallSum();
  331. if (as.getCallDurationSum()!= null) teamCallDurationSum = teamCallDurationSum.add(as.getCallDurationSum());
  332. }
  333. }
  334. salesTeamBo.setTeamCallSum(teamCallSum);
  335. salesTeamBo.setTeamCallDurationSum(teamCallDurationSum);
  336. salesTeamBo.setTeamPeopleSum(admins.size());
  337. resList.add(salesTeamBo);
  338. addSonTeam(resList,salesTeamBo,startTime,endTime);
  339. }
  340. }
  341. return resList;
  342. }
  343. private void addSonTeam(List<SalesTeamBo>list, SalesTeamBo salesTeamBo, String startTime, String endTime) {
  344. List<SalesTeam> salesTeams = salesTeamMapper.queryBySuperId(salesTeamBo.getId());
  345. int teamCallSum=0;
  346. BigDecimal teamCallDurationSum=BigDecimal.ZERO;
  347. if (!salesTeams.isEmpty()){
  348. //计算所有子项数据
  349. for (SalesTeam e : salesTeams) {
  350. SalesTeamBo salesTeamBo2 = new SalesTeamBo(e);
  351. List<Admin> admins = adminMapper.queryByTeamId(e.getId());
  352. for (Admin admin : admins) {
  353. AdminStatisticsBo as=callLogMapper.selectAdminCallSum(admin.getId(),startTime,endTime);
  354. }
  355. salesTeamBo.setTeamCallSum(teamCallSum);
  356. salesTeamBo.setTeamCallDurationSum(teamCallDurationSum);
  357. salesTeamBo.setTeamPeopleSum(admins.size());
  358. //迭代计算并赋值给上一层
  359. addSonTeam(list,salesTeamBo2,startTime,endTime);
  360. salesTeamBo.setTeamPeopleSum(salesTeamBo.getTeamPeopleSum()+salesTeamBo2.getTeamPeopleSum());
  361. salesTeamBo.setTeamCallSum(salesTeamBo.getTeamCallSum()+salesTeamBo2.getTeamCallSum());
  362. salesTeamBo.setTeamCallDurationSum(salesTeamBo.getTeamCallDurationSum().add(salesTeamBo2.getTeamCallDurationSum()));
  363. list.add(salesTeamBo2);
  364. }
  365. }
  366. }
  367. public List<String> getThisMonth(Days days) {
  368. //获取三十天前的日期
  369. Date date=new Date();
  370. Calendar ca=Calendar.getInstance();
  371. ca.setTime(date);
  372. ca.add(Calendar.DAY_OF_MONTH,-30);
  373. days.setFirstDay(DateUtils.formatDate(ca.getTime(),AFTConstants.YYYYMMDD));
  374. List<String> list=new ArrayList<>();
  375. for (int i=0;i<31;i++){
  376. if (i==0){
  377. Calendar newc=Calendar.getInstance();
  378. newc.setTime(ca.getTime());
  379. list.add(DateUtils.formatDate(newc.getTime(), AFTConstants.YYYYMMDD));
  380. }else {
  381. ca.add(Calendar.DAY_OF_MONTH,1);
  382. ca.set(Calendar.HOUR_OF_DAY,0);
  383. if (ca.getTimeInMillis()<date.getTime()){
  384. Calendar newc=Calendar.getInstance();
  385. newc.setTime(ca.getTime());
  386. days.setEndDay(DateUtils.formatDate(newc.getTime(), AFTConstants.YYYYMMDD));
  387. list.add(days.getEndDay());
  388. }
  389. }
  390. }
  391. return list;
  392. }
  393. class Days{
  394. private String firstDay;
  395. private String endDay;
  396. public String getFirstDay() {
  397. return firstDay;
  398. }
  399. public void setFirstDay(String firstDay) {
  400. this.firstDay = firstDay;
  401. }
  402. public String getEndDay() {
  403. return endDay;
  404. }
  405. public void setEndDay(String endDay) {
  406. this.endDay = endDay;
  407. }
  408. }
  409. }