TaskStatisticsServiceImpl.java 75 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599
  1. package com.ydtech.modules.admin.service.impl;
  2. import cn.hutool.core.bean.BeanUtil;
  3. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  4. import com.baomidou.mybatisplus.core.metadata.IPage;
  5. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  6. import com.github.pagehelper.PageHelper;
  7. import com.github.pagehelper.PageInfo;
  8. import com.ydtech.core.page.HttpResult;
  9. import com.ydtech.modules.admin.dao.SysAmountAuditingMapper;
  10. import com.ydtech.modules.admin.dao.SysDeptMapper;
  11. import com.ydtech.modules.admin.dao.SysUserMapper;
  12. import com.ydtech.modules.admin.dao.TaskStatisticsMapper;
  13. import com.ydtech.modules.admin.model.SumEntryStatusDo;
  14. import com.ydtech.modules.admin.model.SysDept;
  15. import com.ydtech.modules.admin.model.SysUser;
  16. import com.ydtech.modules.admin.model.dto.*;
  17. import com.ydtech.modules.admin.model.vo.BusinessAgentData;
  18. import com.ydtech.modules.admin.model.vo.BusinessOrderData;
  19. import com.ydtech.modules.admin.model.vo.TaskStatisticsVo;
  20. import com.ydtech.modules.admin.service.SysDeptService;
  21. import com.ydtech.modules.admin.service.TaskStatisticsService;
  22. import com.ydtech.modules.admin.utils.SliceUpDateUtil;
  23. import com.ydtech.modules.base.controller.BaseController;
  24. import com.ydtech.modules.base.model.vo.PageVo;
  25. import com.ydtech.modules.inv.utils.EasyExcelUtils;
  26. import com.ydtech.modules.order.dao.InsAreaCompanyMapper;
  27. import com.ydtech.modules.order.dao.InsOrdersMapper;
  28. import org.apache.commons.lang3.ObjectUtils;
  29. import org.apache.commons.lang3.StringUtils;
  30. import org.springframework.beans.factory.annotation.Autowired;
  31. import org.springframework.beans.factory.annotation.Value;
  32. import org.springframework.stereotype.Service;
  33. import org.springframework.util.CollectionUtils;
  34. import java.io.IOException;
  35. import java.math.BigDecimal;
  36. import java.math.RoundingMode;
  37. import java.nio.file.Files;
  38. import java.nio.file.Path;
  39. import java.nio.file.Paths;
  40. import java.text.SimpleDateFormat;
  41. import java.util.*;
  42. import java.util.stream.Collectors;
  43. /**
  44. * @description: 任务统计
  45. * @author: whp
  46. * @date: 2024/7/25
  47. **/
  48. @Service
  49. public class TaskStatisticsServiceImpl implements TaskStatisticsService {
  50. @Autowired
  51. private InsAreaCompanyMapper insAreaCompanyMapper;
  52. @Autowired
  53. private SysAmountAuditingMapper sysAmountAuditingMapper;
  54. @Autowired
  55. private InsOrdersMapper insOrdersMapper;
  56. @Autowired
  57. private TaskStatisticsMapper taskStatisticsMapper;
  58. @Autowired
  59. private SysDeptService sysDeptService;
  60. @Autowired
  61. private SysUserMapper sysUserMapper;
  62. @Autowired
  63. private SysDeptMapper sysDeptMapper;
  64. @Value("${upload.file.path}")
  65. private String uploadPath;
  66. @Value("${upload.file.url}")
  67. private String uploadUrl;
  68. /**
  69. * @description: 渠道任务统计查询
  70. * @author: whp
  71. * @date: 2024/7/25
  72. **/
  73. @Override
  74. public IPage<TaskStatisticsDto> queryPage(TaskStatisticsVo taskStatisticsVo) {
  75. String leaderId = taskStatisticsVo.getLeaderId();
  76. if (com.ydtech.utils.StringUtils.isNotEmpty(leaderId)) {
  77. //获取领导人下级所有
  78. List<String> ids = new ArrayList<>();
  79. List<String> userList = this.getUserTreeHx(leaderId, ids);
  80. userList.add(leaderId);
  81. if (userList.size() > 0) {
  82. taskStatisticsVo.setLeaderIds(userList);
  83. }
  84. }
  85. PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
  86. Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
  87. page.setSearchCount(false).setOptimizeCountSql(false);//关闭count查询
  88. pageVo.setPageNum(taskStatisticsVo.getPageNum());
  89. pageVo.setPageSize(taskStatisticsVo.getPageSize());
  90. if (StringUtils.isNotEmpty(taskStatisticsVo.getDays())) {
  91. if ("7".equals(taskStatisticsVo.getDays())) {
  92. taskStatisticsVo.setDays("2");
  93. } else if ("30".equals(taskStatisticsVo.getDays())) {
  94. taskStatisticsVo.setDays("3");
  95. }
  96. }
  97. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDays(), taskStatisticsVo.getBeginDate(), taskStatisticsVo.getEndDate());
  98. // 控制台逻辑 人员渠道跳转任务的时间应该是签单日期查询
  99. if (StringUtils.isNotEmpty(taskStatisticsVo.getTaskType()) && "1".equals(taskStatisticsVo.getTaskType())) {
  100. taskStatisticsVo.setBeginDate(null);
  101. taskStatisticsVo.setEndDate(null);
  102. taskStatisticsVo.setSigningTimeStart(dateMapByType.get("startDate"));
  103. taskStatisticsVo.setSigningTimeEnd(dateMapByType.get("endDate"));
  104. } else {
  105. taskStatisticsVo.setBeginDate(dateMapByType.get("startDate"));
  106. taskStatisticsVo.setEndDate(dateMapByType.get("endDate"));
  107. }
  108. IPage<TaskStatisticsDto> list = this.insAreaCompanyMapper.queryPageTaskStatistics(page, taskStatisticsVo);
  109. Long total = this.insAreaCompanyMapper.queryPageTaskStatisticsTotal(taskStatisticsVo);
  110. buildTaskStatisticsDto(list.getRecords(), taskStatisticsVo);
  111. list.setTotal(total);
  112. return list;
  113. }
  114. private void buildTaskStatisticsDto(List<TaskStatisticsDto> records, TaskStatisticsVo taskStatisticsVo) {
  115. Map<String, String> deptMap = sysDeptService.list()
  116. .stream()
  117. .collect(Collectors.toMap(SysDept::getId, SysDept::getName));
  118. List<String> userIds = records.stream().map(TaskStatisticsDto::getUserId).collect(Collectors.toList());
  119. SumEntryStatusDo sumEntryStatusDo = new SumEntryStatusDo(taskStatisticsVo, userIds);
  120. List<RecordSummaryDto> sumEntryStatusNew = this.insAreaCompanyMapper.getSumEntryStatusNew(sumEntryStatusDo);
  121. Map<String, RecordSummaryDto> collect = sumEntryStatusNew.stream()
  122. .collect(Collectors.toMap(RecordSummaryDto::getUserId, x -> x));
  123. for (TaskStatisticsDto record : records) {
  124. Optional.ofNullable(record.getDeptId()).ifPresent(recordDto -> {
  125. String substring = recordDto.substring(0, 6);
  126. String substring1 = recordDto.substring(0, 8);
  127. String province = recordDto.substring(0, 4);
  128. record.setCityName(deptMap.get(record.getDeptId()));
  129. record.setDistrictName(deptMap.get(substring));
  130. record.setProvinceName(deptMap.get(substring1));
  131. record.setStoreDeptName(deptMap.get(province));
  132. });
  133. RecordSummaryDto recordDto = collect.get(record.getUserId());
  134. if (!ObjectUtils.isEmpty(recordDto)) {
  135. record.setSumEntryStatus(recordDto.getEntryStatus());
  136. record.setOutStatus(recordDto.getOutStatus());
  137. } else {
  138. record.setSumEntryStatus("0");
  139. record.setOutStatus("0");
  140. }
  141. }
  142. }
  143. @Override
  144. public HttpResult ordersDetailsExcel(TaskStatisticsVo taskStatisticsVo) {
  145. String leaderId = taskStatisticsVo.getLeaderId();
  146. if (com.ydtech.utils.StringUtils.isNotEmpty(leaderId)) {
  147. //获取领导人下级所有
  148. List<String> ids = new ArrayList<>();
  149. List<String> userList = this.getUserTreeHx(leaderId, ids);
  150. userList.add(leaderId);
  151. if (!userList.isEmpty()) {
  152. taskStatisticsVo.setLeaderIds(userList);
  153. }
  154. }
  155. PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
  156. Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
  157. page.setSearchCount(false).setOptimizeCountSql(false);//关闭count查询
  158. pageVo.setPageNum(taskStatisticsVo.getPageNum());
  159. pageVo.setPageSize(taskStatisticsVo.getPageSize());
  160. if (StringUtils.isNotEmpty(taskStatisticsVo.getDays())) {
  161. if ("7".equals(taskStatisticsVo.getDays())) {
  162. taskStatisticsVo.setDays("2");
  163. } else if ("30".equals(taskStatisticsVo.getDays())) {
  164. taskStatisticsVo.setDays("3");
  165. }
  166. }
  167. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDays(), taskStatisticsVo.getBeginDate(), taskStatisticsVo.getEndDate());
  168. taskStatisticsVo.setBeginDate(dateMapByType.get("startDate"));
  169. taskStatisticsVo.setEndDate(dateMapByType.get("endDate"));
  170. List<OrdersDetailsExcel> list = taskStatisticsMapper.ordersDetailsExcel(taskStatisticsVo);
  171. this.saveTranslate(list);
  172. String uploadPath = this.uploadPath + "/excel/";
  173. Path path = Paths.get(uploadPath);
  174. if (!Files.exists(path)) {
  175. try {
  176. Files.createDirectories(path);
  177. } catch (IOException e) {
  178. e.printStackTrace();
  179. }
  180. }
  181. String fileName = EasyExcelUtils.downExcel(uploadPath, "任务明细导出", OrdersDetailsExcel.class, list);
  182. return HttpResult.ok("", uploadUrl + "excel/" + fileName);
  183. }
  184. private void saveTranslate(List<OrdersDetailsExcel> list) {
  185. for (OrdersDetailsExcel ordersDetailsExcel : list) {
  186. if (StringUtils.isNotEmpty(ordersDetailsExcel.getOrderSource())) {
  187. if ("1".equals(ordersDetailsExcel.getOrderSource()) && "0".equals(ordersDetailsExcel.getOrderstatus())) {
  188. ordersDetailsExcel.setOrderSource("app报价");
  189. }
  190. if ("0".equals(ordersDetailsExcel.getOrderSource()) && "0".equals(ordersDetailsExcel.getOrderstatus())) {
  191. ordersDetailsExcel.setOrderSource("pc报价");
  192. }
  193. }
  194. if (StringUtils.isNotEmpty(ordersDetailsExcel.getOrderstatus())) {
  195. if ("0".equals(ordersDetailsExcel.getOrderstatus())) {
  196. ordersDetailsExcel.setOrderstatus("报价完成");
  197. }
  198. if ("1".equals(ordersDetailsExcel.getOrderstatus())) {
  199. ordersDetailsExcel.setOrderstatus("待核保");
  200. }
  201. if ("2".equals(ordersDetailsExcel.getOrderstatus())) {
  202. ordersDetailsExcel.setOrderstatus("已核保待缴费");
  203. }
  204. if ("3".equals(ordersDetailsExcel.getOrderstatus())) {
  205. ordersDetailsExcel.setOrderstatus("已承保");
  206. }
  207. if ("10".equals(ordersDetailsExcel.getOrderstatus())) {
  208. ordersDetailsExcel.setOrderstatus("报价失败");
  209. }
  210. if ("11".equals(ordersDetailsExcel.getOrderstatus())) {
  211. ordersDetailsExcel.setOrderstatus("重复投保");
  212. }
  213. if ("4".equals(ordersDetailsExcel.getOrderstatus())) {
  214. ordersDetailsExcel.setOrderstatus("核保退回");
  215. }
  216. }
  217. if (StringUtils.isNotEmpty(ordersDetailsExcel.getEntryStatus())) {
  218. if ("1".equals(ordersDetailsExcel.getEntryStatus())) {
  219. ordersDetailsExcel.setEntryStatus("车险录入");
  220. }
  221. if ("2".equals(ordersDetailsExcel.getEntryStatus())) {
  222. ordersDetailsExcel.setEntryStatus("待客录单");
  223. }
  224. if ("3".equals(ordersDetailsExcel.getEntryStatus())) {
  225. ordersDetailsExcel.setEntryStatus("外部订单");
  226. }
  227. }
  228. }
  229. }
  230. private List<String> getUserTreeHx(String leaderId, List<String> ids) {
  231. List<SysUser> sysUsers = sysUserMapper.selectByLeadId(leaderId);
  232. if (!sysUsers.isEmpty()) {
  233. ids.addAll(sysUsers.stream().map(SysUser::getId).collect(Collectors.toList()));
  234. }
  235. for (SysUser sysUser : sysUsers) {
  236. this.getUserTreeHx(sysUser.getId(), ids);
  237. }
  238. return ids;
  239. }
  240. /**
  241. * @description: 保险公司统计查询
  242. * @author: whp
  243. * @date: 2024/7/25
  244. **/
  245. @Override
  246. public IPage<TaskStatisticsDto> insuranceCompanyQueryPage(TaskStatisticsVo taskStatisticsVo) {
  247. if (com.ydtech.utils.StringUtils.isNotEmpty(taskStatisticsVo.getProvinceId())) {
  248. String provinceId = this.removeTrailingZeros(taskStatisticsVo.getProvinceId());
  249. taskStatisticsVo.setProvinceId(provinceId);
  250. }
  251. if (com.ydtech.utils.StringUtils.isNotEmpty(taskStatisticsVo.getCityId())) {
  252. String cityId = this.removeTrailingZeros(taskStatisticsVo.getCityId());
  253. taskStatisticsVo.setCityId(cityId);
  254. }
  255. if (com.ydtech.utils.StringUtils.isNotEmpty(taskStatisticsVo.getCountyId())) {
  256. String countyId = this.removeTrailingZeros(taskStatisticsVo.getCountyId());
  257. taskStatisticsVo.setCountyId(countyId);
  258. }
  259. if (StringUtils.isNotEmpty(taskStatisticsVo.getDays())) {
  260. if ("7".equals(taskStatisticsVo.getDays())) {
  261. taskStatisticsVo.setDays("2");
  262. } else if ("30".equals(taskStatisticsVo.getDays())) {
  263. taskStatisticsVo.setDays("3");
  264. }
  265. }
  266. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDays(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
  267. taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
  268. taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
  269. PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
  270. Page<TaskStatisticsVo> page = new Page<>(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
  271. page.setSearchCount(false).setOptimizeCountSql(false);//关闭count查询
  272. pageVo.setPageNum(taskStatisticsVo.getPageNum());
  273. pageVo.setPageSize(taskStatisticsVo.getPageSize());
  274. IPage<TaskStatisticsDto> list = this.insAreaCompanyMapper.insuranceCompanyQueryPage(page, taskStatisticsVo);
  275. Long total = this.insAreaCompanyMapper.insuranceCompanyQueryTotal(taskStatisticsVo);
  276. list.setTotal(total);
  277. return list;
  278. }
  279. private String removeTrailingZeros(String value) {
  280. int len = value.length();
  281. int i = len - 1;
  282. // 查找第一个非零字符的位置
  283. while (i >= 0 && value.charAt(i) == '0') {
  284. i--;
  285. }
  286. // 如果所有字符都是0,则返回"0"
  287. if (i < 0) {
  288. return "0";
  289. }
  290. // 使用substring方法获取去除末尾零的子串
  291. return value.substring(0, i + 1);
  292. }
  293. /**
  294. * @description: 代理人统计查询
  295. * @author: whp
  296. * @date: 2024/7/26
  297. **/
  298. @Override
  299. public IPage<TaskStatisticsDto> agentStatisticsQueryPage(TaskStatisticsVo taskStatisticsVo) {
  300. String leaderId = taskStatisticsVo.getLeaderId();
  301. if (com.ydtech.utils.StringUtils.isNotEmpty(leaderId)) {
  302. //获取领导人下级所有
  303. List<String> ids = new ArrayList<>();
  304. List<String> userList = this.getUserTreeHx(leaderId, ids);
  305. userList.add(leaderId);
  306. if (!userList.isEmpty()) {
  307. taskStatisticsVo.setLeaderIds(userList);
  308. }
  309. }
  310. PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
  311. Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
  312. pageVo.setPageNum(taskStatisticsVo.getPageNum());
  313. pageVo.setPageSize(taskStatisticsVo.getPageSize());
  314. page.setSearchCount(false).setOptimizeCountSql(false);//关闭count查询
  315. if (StringUtils.isNotEmpty(taskStatisticsVo.getDays())) {
  316. if ("7".equals(taskStatisticsVo.getDays())) {
  317. taskStatisticsVo.setDays("2");
  318. } else if ("30".equals(taskStatisticsVo.getDays())) {
  319. taskStatisticsVo.setDays("3");
  320. }
  321. }
  322. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDays(), taskStatisticsVo.getBeginDate(), taskStatisticsVo.getEndDate());
  323. taskStatisticsVo.setBeginDate(dateMapByType.get("startDate"));
  324. taskStatisticsVo.setEndDate(dateMapByType.get("endDate"));
  325. String userId = BaseController.getUserId();
  326. if (taskStatisticsVo.getDeptIds() != null && !taskStatisticsVo.getDeptIds().isEmpty()) {
  327. taskStatisticsVo.setRelationUserId(userId);
  328. }
  329. IPage<TaskStatisticsDto> list = this.insAreaCompanyMapper.agentStatisticsQueryPage(page, taskStatisticsVo);
  330. Long total = this.insAreaCompanyMapper.agentStatisticsQueryPageTotal(taskStatisticsVo);
  331. buildTaskStatisticsDto(list.getRecords(), taskStatisticsVo);
  332. list.setTotal(total);
  333. return list;
  334. }
  335. /**
  336. * @description: 财务中心-费用校验
  337. * @author: whp
  338. * @date: 2024/7/29
  339. **/
  340. @Override
  341. public IPage<TaskStatisticsDto> costCenter(TaskStatisticsVo taskStatisticsVo) {
  342. if (StringUtils.isNotEmpty(taskStatisticsVo.getDays())) {
  343. if ("7".equals(taskStatisticsVo.getDays())) {
  344. taskStatisticsVo.setDays("2");
  345. } else if ("30".equals(taskStatisticsVo.getDays())) {
  346. taskStatisticsVo.setDays("3");
  347. }
  348. }
  349. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDays(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
  350. taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
  351. taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
  352. PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
  353. Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
  354. pageVo.setPageNum(taskStatisticsVo.getPageNum());
  355. pageVo.setPageSize(taskStatisticsVo.getPageSize());
  356. IPage<TaskStatisticsDto> list = this.insAreaCompanyMapper.costCenter(page, taskStatisticsVo);
  357. return list;
  358. }
  359. /**
  360. * @description: 财务中心-费用校验-明细
  361. * @author: whp
  362. * @date: 2024/10/10
  363. **/
  364. @Override
  365. public IPage<TaskStatisticsDto> costCenterDetails(TaskStatisticsVo taskStatisticsVo) {
  366. if (StringUtils.isNotEmpty(taskStatisticsVo.getDays())) {
  367. if ("7".equals(taskStatisticsVo.getDays())) {
  368. taskStatisticsVo.setDays("2");
  369. } else if ("30".equals(taskStatisticsVo.getDays())) {
  370. taskStatisticsVo.setDays("3");
  371. }
  372. }
  373. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDays(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
  374. taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
  375. taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
  376. PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
  377. Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
  378. pageVo.setPageNum(taskStatisticsVo.getPageNum());
  379. pageVo.setPageSize(taskStatisticsVo.getPageSize());
  380. IPage<TaskStatisticsDto> list = this.insAreaCompanyMapper.costCenterDetails(page, taskStatisticsVo);
  381. return list;
  382. }
  383. /**
  384. * @description: 任务统计-保险公司-导出
  385. * @author: whp
  386. * @date: 2024/9/9
  387. **/
  388. @Override
  389. public HttpResult costCenterDetailsExcel(TaskStatisticsVo taskStatisticsVo) {
  390. if (StringUtils.isNotEmpty(taskStatisticsVo.getDays())) {
  391. if ("7".equals(taskStatisticsVo.getDays())) {
  392. taskStatisticsVo.setDays("2");
  393. } else if ("30".equals(taskStatisticsVo.getDays())) {
  394. taskStatisticsVo.setDays("3");
  395. }
  396. }
  397. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDays(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
  398. taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
  399. taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
  400. List<TaskStatisticsDtoExcel> list = this.insAreaCompanyMapper.costCenterDetailsExcel(taskStatisticsVo);
  401. String uploadPath = this.uploadPath + "/excel/";
  402. Path path = Paths.get(uploadPath);
  403. if (!Files.exists(path)) {
  404. try {
  405. Files.createDirectories(path);
  406. } catch (IOException e) {
  407. e.printStackTrace();
  408. }
  409. }
  410. String fileName = EasyExcelUtils.downExcel(uploadPath, "费用校验审核人导出", TaskStatisticsDtoExcel.class, list);
  411. return HttpResult.ok("", uploadUrl + "excel/" + fileName);
  412. }
  413. /**
  414. * @description: 电销任务统计查询
  415. * @author: whp
  416. * @date: 2024/10/11
  417. **/
  418. @Override
  419. public IPage<TaskStatisticsDto> queryPageElectric(TaskStatisticsVo taskStatisticsVo) {
  420. String leaderId = taskStatisticsVo.getLeaderId();
  421. if (com.ydtech.utils.StringUtils.isNotEmpty(leaderId)) {
  422. //获取领导人下级所有
  423. List<String> ids = new ArrayList<>();
  424. List<String> userList = this.getUserTreeHx(leaderId, ids);
  425. userList.add(leaderId);
  426. if (!userList.isEmpty()) {
  427. taskStatisticsVo.setLeaderIds(userList);
  428. }
  429. }
  430. PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
  431. Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
  432. page.setSearchCount(false).setOptimizeCountSql(false);//关闭count查询
  433. pageVo.setPageNum(taskStatisticsVo.getPageNum());
  434. pageVo.setPageSize(taskStatisticsVo.getPageSize());
  435. if (StringUtils.isNotEmpty(taskStatisticsVo.getDays())) {
  436. if ("7".equals(taskStatisticsVo.getDays())) {
  437. taskStatisticsVo.setDays("2");
  438. } else if ("30".equals(taskStatisticsVo.getDays())) {
  439. taskStatisticsVo.setDays("3");
  440. }
  441. }
  442. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDays(), taskStatisticsVo.getBeginDate(), taskStatisticsVo.getEndDate());
  443. taskStatisticsVo.setBeginDate(dateMapByType.get("startDate"));
  444. taskStatisticsVo.setEndDate(dateMapByType.get("endDate"));
  445. if (StringUtils.isNotEmpty(taskStatisticsVo.getTaskType()) && "1".equals(taskStatisticsVo.getTaskType())) {
  446. taskStatisticsVo.setBeginDate(null);
  447. taskStatisticsVo.setEndDate(null);
  448. taskStatisticsVo.setSigningTimeStart(dateMapByType.get("startDate"));
  449. taskStatisticsVo.setSigningTimeEnd(dateMapByType.get("endDate"));
  450. } else {
  451. taskStatisticsVo.setBeginDate(dateMapByType.get("startDate"));
  452. taskStatisticsVo.setEndDate(dateMapByType.get("endDate"));
  453. }
  454. IPage<TaskStatisticsDto> list = this.insAreaCompanyMapper.queryPageElectric(page, taskStatisticsVo);
  455. buildTaskStatisticsDto(list.getRecords(), taskStatisticsVo);
  456. Long total = this.insAreaCompanyMapper.queryPageElectricTotal(taskStatisticsVo);
  457. list.setTotal(total);
  458. return list;
  459. }
  460. /**
  461. * @description: 财务中心-费用校验-明细-查看
  462. * @author: whp
  463. * @date: 2024/10/10
  464. **/
  465. @Override
  466. public TaskStatisticsDtoNew costCenterDetailsLicense(TaskStatisticsVo taskStatisticsVo) {
  467. if (StringUtils.isNotEmpty(taskStatisticsVo.getDays())) {
  468. if ("7".equals(taskStatisticsVo.getDays())) {
  469. taskStatisticsVo.setDays("2");
  470. } else if ("30".equals(taskStatisticsVo.getDays())) {
  471. taskStatisticsVo.setDays("3");
  472. }
  473. }
  474. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDays(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
  475. taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
  476. taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
  477. PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
  478. Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
  479. pageVo.setPageNum(taskStatisticsVo.getPageNum());
  480. pageVo.setPageSize(taskStatisticsVo.getPageSize());
  481. IPage<TaskStatisticsDto> list = this.insAreaCompanyMapper.costCenterDetailsLicense(page, taskStatisticsVo);
  482. TaskStatisticsDtoNew sumSecond = this.insAreaCompanyMapper.costCenterSecond(taskStatisticsVo);
  483. sumSecond.setPageResult(list);
  484. return sumSecond;
  485. }
  486. /**
  487. * @description: 保险公司统计总报价
  488. * @author: whp
  489. * @date: 2024/8/12
  490. **/
  491. @Override
  492. public IPage<TaskStatisticsDto> totalQuotation(TaskStatisticsVo taskStatisticsVo) {
  493. PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
  494. Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
  495. pageVo.setPageNum(taskStatisticsVo.getPageNum());
  496. pageVo.setPageSize(taskStatisticsVo.getPageSize());
  497. IPage<TaskStatisticsDto> list = this.insAreaCompanyMapper.totalQuotation(page, taskStatisticsVo);
  498. return list;
  499. }
  500. /**
  501. * @description: 控制台-业务数据
  502. * @author: whp
  503. * @date: 2024/8/13
  504. **/
  505. @Override
  506. public IPage<TaskStatisticsDto> getBusinessData(TaskStatisticsVo taskStatisticsVo) {
  507. if (StringUtils.isNotEmpty(taskStatisticsVo.getDays())) {
  508. if ("7".equals(taskStatisticsVo.getDays())) {
  509. taskStatisticsVo.setDateType("2");
  510. } else if ("30".equals(taskStatisticsVo.getDays())) {
  511. taskStatisticsVo.setDateType("3");
  512. } else if ("1".equals(taskStatisticsVo.getDays())) {
  513. taskStatisticsVo.setDateType("1");
  514. }
  515. }
  516. if (com.ydtech.utils.StringUtils.isNotEmpty(taskStatisticsVo.getParterProvinceId())) {
  517. String provinceId = this.removeTrailingZeros(taskStatisticsVo.getParterProvinceId());
  518. taskStatisticsVo.setParterProvinceId(provinceId);
  519. }
  520. if (com.ydtech.utils.StringUtils.isNotEmpty(taskStatisticsVo.getParterCityId())) {
  521. String cityId = this.removeTrailingZeros(taskStatisticsVo.getParterCityId());
  522. taskStatisticsVo.setParterCityId(cityId);
  523. }
  524. if (com.ydtech.utils.StringUtils.isNotEmpty(taskStatisticsVo.getParterCountyId())) {
  525. String countyId = this.removeTrailingZeros(taskStatisticsVo.getParterCountyId());
  526. taskStatisticsVo.setParterCountyId(countyId);
  527. }
  528. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDateType(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
  529. taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
  530. taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
  531. getDateByType(taskStatisticsVo.getDateType(), taskStatisticsVo);
  532. PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
  533. Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
  534. pageVo.setPageNum(taskStatisticsVo.getPageNum());
  535. pageVo.setPageSize(taskStatisticsVo.getPageSize());
  536. IPage<TaskStatisticsDto> list = this.insAreaCompanyMapper.getBusinessData(page, taskStatisticsVo);
  537. return list;
  538. }
  539. /**
  540. * @description: 控制台-业务数据-统计
  541. * @author: whp
  542. * @date: 2024/10/12
  543. **/
  544. @Override
  545. public TaskStatisticsDto getCountBusinessData(TaskStatisticsVo taskStatisticsVo) {
  546. if (StringUtils.isNotEmpty(taskStatisticsVo.getDays())) {
  547. if ("7".equals(taskStatisticsVo.getDays())) {
  548. taskStatisticsVo.setDateType("2");
  549. } else if ("30".equals(taskStatisticsVo.getDays())) {
  550. taskStatisticsVo.setDateType("3");
  551. } else if ("1".equals(taskStatisticsVo.getDays())) {
  552. taskStatisticsVo.setDateType("1");
  553. }
  554. }
  555. if (com.ydtech.utils.StringUtils.isNotEmpty(taskStatisticsVo.getParterProvinceId())) {
  556. String provinceId = this.removeTrailingZeros(taskStatisticsVo.getParterProvinceId());
  557. taskStatisticsVo.setParterProvinceId(provinceId);
  558. }
  559. if (com.ydtech.utils.StringUtils.isNotEmpty(taskStatisticsVo.getParterCityId())) {
  560. String cityId = this.removeTrailingZeros(taskStatisticsVo.getParterCityId());
  561. taskStatisticsVo.setParterCityId(cityId);
  562. }
  563. if (com.ydtech.utils.StringUtils.isNotEmpty(taskStatisticsVo.getParterCountyId())) {
  564. String countyId = this.removeTrailingZeros(taskStatisticsVo.getParterCountyId());
  565. taskStatisticsVo.setParterCountyId(countyId);
  566. }
  567. getDateByType(taskStatisticsVo.getDateType(), taskStatisticsVo);
  568. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDateType(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
  569. taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
  570. taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
  571. TaskStatisticsDto result = this.insAreaCompanyMapper.getCountBusinessData(taskStatisticsVo);
  572. TaskStatisticsDto userNumberdto = this.insAreaCompanyMapper.getUserNumber(taskStatisticsVo);
  573. if (ObjectUtils.isNotEmpty(userNumberdto)) {
  574. if(result.getTotalPremium()!=null && userNumberdto.getUserNumber() !=null){
  575. BigDecimal userNumber = userNumberdto.getUserNumber();
  576. BigDecimal totalPremium = new BigDecimal(result.getTotalPremium());
  577. BigDecimal resultDivided = totalPremium.divide(userNumber, 2, RoundingMode.HALF_UP); //人均产能
  578. result.setPerCapitaAmount(resultDivided);
  579. result.setUserNumber(userNumberdto.getUserNumber());
  580. }
  581. }
  582. return result;
  583. }
  584. /**
  585. * @description: 控制台-业务数据 - 保险分布
  586. * @author: whp
  587. * @date: 2024/8/13
  588. **/
  589. @Override
  590. public List<TaskStatisticsDto> getDistribution(TaskStatisticsVo taskStatisticsVo) {
  591. if (StringUtils.isNotEmpty(taskStatisticsVo.getDays())) {
  592. if ("7".equals(taskStatisticsVo.getDays())) {
  593. taskStatisticsVo.setDateType("2");
  594. } else if ("30".equals(taskStatisticsVo.getDays())) {
  595. taskStatisticsVo.setDateType("3");
  596. } else if ("1".equals(taskStatisticsVo.getDays())) {
  597. taskStatisticsVo.setDateType("1");
  598. }
  599. }
  600. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDateType(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
  601. taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
  602. taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
  603. getDateByType(taskStatisticsVo.getDateType(), taskStatisticsVo);
  604. List<TaskStatisticsDto> result = new ArrayList<>();
  605. //0 报价中 1 待核保 2 已核保代缴费 3 已承保 4 核保退回
  606. for (int i = 0; i < 5; i++) {
  607. taskStatisticsVo.setQuotationStatus(i + "");
  608. TaskStatisticsDto taskStatisticsDtoItem = insAreaCompanyMapper.getDistribution(taskStatisticsVo);
  609. if (ObjectUtils.isNotEmpty(taskStatisticsDtoItem)) {
  610. taskStatisticsDtoItem.setQuotationStatus(i + "");
  611. result.add(taskStatisticsDtoItem);
  612. }
  613. }
  614. return result;
  615. }
  616. /**
  617. * @description: 任务统计-渠道导出
  618. * @author: whp
  619. * @date: 2024/09/09
  620. **/
  621. @Override
  622. public HttpResult channelExcel(TaskStatisticsVo taskStatisticsVo) {
  623. taskStatisticsVo.setManagementSource("1");
  624. return getHttpResult(taskStatisticsVo);
  625. }
  626. private void buildTaskStatisticsDto(List<TaskStatisticsExcel> list) {
  627. Map<String, String> deptMap = sysDeptService.list()
  628. .stream()
  629. .collect(Collectors.toMap(SysDept::getId, SysDept::getName));
  630. for (TaskStatisticsExcel record : list) {
  631. Optional.ofNullable(record.getDeptId()).ifPresent(recordDto -> {
  632. String deptId = record.getDeptId();
  633. String substring = deptId.substring(0, 6);
  634. String substring1 = deptId.substring(0, 8);
  635. String province = deptId.substring(0, 4);
  636. record.setCityName(deptMap.get(substring));
  637. record.setDistrictName(deptMap.get(substring1));
  638. record.setProvinceName(deptMap.get(province));
  639. });
  640. }
  641. }
  642. private HttpResult getHttpResult(TaskStatisticsVo taskStatisticsVo) {
  643. taskStatisticsVo.filterTime();
  644. String leaderId = taskStatisticsVo.getLeaderId();
  645. if (com.ydtech.utils.StringUtils.isNotEmpty(leaderId)) {
  646. //获取领导人下级所有
  647. List<String> ids = new ArrayList<>();
  648. List<String> userList = this.getUserTreeHx(leaderId, ids);
  649. userList.add(leaderId);
  650. if (!userList.isEmpty()) {
  651. taskStatisticsVo.setLeaderIds(userList);
  652. }
  653. }
  654. PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
  655. Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
  656. pageVo.setPageNum(taskStatisticsVo.getPageNum());
  657. pageVo.setPageSize(taskStatisticsVo.getPageSize());
  658. page.setSearchCount(false).setOptimizeCountSql(false);//关闭count查询
  659. if (StringUtils.isNotEmpty(taskStatisticsVo.getDays())) {
  660. if ("7".equals(taskStatisticsVo.getDays())) {
  661. taskStatisticsVo.setDays("2");
  662. } else if ("30".equals(taskStatisticsVo.getDays())) {
  663. taskStatisticsVo.setDays("3");
  664. }
  665. }
  666. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDays(), taskStatisticsVo.getBeginDate(), taskStatisticsVo.getEndDate());
  667. taskStatisticsVo.setBeginDate(dateMapByType.get("startDate"));
  668. taskStatisticsVo.setEndDate(dateMapByType.get("endDate"));
  669. List<TaskStatisticsExcel> list = this.insAreaCompanyMapper.channelExcel(taskStatisticsVo);
  670. buildTaskStatisticsDto(list);
  671. String uploadPath = this.uploadPath + "/excel/";
  672. Path path = Paths.get(uploadPath);
  673. if (!Files.exists(path)) {
  674. try {
  675. Files.createDirectories(path);
  676. } catch (IOException e) {
  677. e.printStackTrace();
  678. }
  679. }
  680. String name = "";
  681. if (taskStatisticsVo.getManagementSource().equals("1")) {
  682. name = "渠道导出";
  683. } else if (taskStatisticsVo.getManagementSource().equals("2")) {
  684. name = "代理人导出";
  685. } else {
  686. name = "电销导出";
  687. }
  688. String fileName = EasyExcelUtils.downExcel(uploadPath, name, TaskStatisticsExcel.class, list);
  689. return HttpResult.ok("", uploadUrl + "excel/" + fileName);
  690. }
  691. /**
  692. * @description: 任控制台-业务数据-代理人
  693. * @author: whp
  694. * @date: 2024/09/09
  695. **/
  696. @Override
  697. public IPage<BusinessAgentData> getBusinessAgentData(TaskStatisticsVo taskStatisticsVo) {
  698. if (StringUtils.isNotEmpty(taskStatisticsVo.getTreeType())) {
  699. if ((StringUtils.isNotEmpty(taskStatisticsVo.getTreeUserId()) && "2".equals(taskStatisticsVo.getTreeType()))) {
  700. List<String> userIds = this.getNextLevel(taskStatisticsVo.getTreeUserId());
  701. if (!userIds.isEmpty() && userIds.get(0) != null) {
  702. taskStatisticsVo.setUserIds(userIds);
  703. } else {
  704. taskStatisticsVo.setUserId(taskStatisticsVo.getTreeUserId());
  705. }
  706. } else if (StringUtils.isNotEmpty(taskStatisticsVo.getTreeUserId()) && "1".equals(taskStatisticsVo.getTreeType())) {
  707. taskStatisticsVo.setDeptId(taskStatisticsVo.getTreeUserId());
  708. taskStatisticsVo.setTreeUserId(null);
  709. taskStatisticsVo.setUserIds(new ArrayList<>());
  710. }
  711. }
  712. PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
  713. Page<TaskStatisticsVo> page = new Page<>(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
  714. page.setSearchCount(false).setOptimizeCountSql(false);//关闭count查询
  715. pageVo.setPageNum(taskStatisticsVo.getPageNum());
  716. pageVo.setPageSize(taskStatisticsVo.getPageSize());
  717. if (StringUtils.isNotEmpty(taskStatisticsVo.getTreeType()) && (StringUtils.isEmpty(taskStatisticsVo.getTreeUserId()) && StringUtils.isEmpty(taskStatisticsVo.getDeptId()))) {
  718. return new Page<>(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageNum());
  719. }
  720. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDateType(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
  721. taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
  722. taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
  723. getDateByType(taskStatisticsVo.getDateType(), taskStatisticsVo);
  724. IPage<BusinessAgentData> list = this.taskStatisticsMapper.getBusinessAgentData(page, taskStatisticsVo);
  725. List<BusinessAgentData> records = list.getRecords();
  726. for (BusinessAgentData record : records) {
  727. this.appendName(record);
  728. if (record.getDistributionAmountRate() == null) {
  729. record.setDistributionAmountRate(new BigDecimal("0.0000"));
  730. }
  731. }
  732. Long total = this.taskStatisticsMapper.getBusinessAgentDataTotal(taskStatisticsVo);
  733. list.setTotal(total);
  734. return list;
  735. }
  736. /**
  737. * @param userId
  738. * @return 获取该用户下级所有用户id
  739. */
  740. private List<String> getNextLevel(String userId) {
  741. // 获取系统中的所有用户
  742. LambdaQueryWrapper<SysUser> queryWrapperUser = new LambdaQueryWrapper<>();
  743. queryWrapperUser.eq(SysUser::getStatus, "1");
  744. queryWrapperUser.notLike(SysUser::getId, "M");
  745. List<SysUser> users = this.sysUserMapper.selectList(queryWrapperUser);
  746. // 创建查询包装器,用于查询指定用户ID的用
  747. LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>();
  748. queryWrapper.eq(SysUser::getId, userId);
  749. // 查询指定用户ID的用户,即第一级下属
  750. List<SysUser> usersLevel1 = this.sysUserMapper.selectList(queryWrapper);
  751. // 用于存储所有下属的ID
  752. List<String> strIds = new ArrayList<>();
  753. // 递归获取第一级下属及其所有下属的ID
  754. findChildren(usersLevel1, users, strIds);
  755. if (!strIds.contains(userId)) {
  756. strIds.add(userId);
  757. }
  758. return strIds;
  759. }
  760. /**
  761. * @param SysUsers 即第一级下属
  762. * @param users 所有用户
  763. * @param strIds 用于存储所有下属的ID
  764. */
  765. private void findChildren(List<SysUser> SysUsers, List<SysUser> users, List<String> strIds) {
  766. for (SysUser sysUser : SysUsers) {
  767. List<SysUser> children = new ArrayList<>();
  768. for (SysUser user : users) {
  769. if (sysUser.getId() != null && sysUser.getId().equals(user.getLeaderId())) {
  770. if (!exists(children, user)) {
  771. children.add(user);
  772. strIds.add(user.getId());
  773. }
  774. }
  775. }
  776. sysUser.setChildren(children);
  777. findChildren(children, users, strIds);
  778. }
  779. }
  780. private boolean exists(List<SysUser> sysUsers, SysUser sysUser) {
  781. boolean exist = false;
  782. for (SysUser user : sysUsers) {
  783. if (user.getId().equals(sysUser.getId())) {
  784. exist = true;
  785. }
  786. }
  787. return exist;
  788. }
  789. /**
  790. * @version
  791. * @author: hxl
  792. * @Date: 2024/6/19 11:57
  793. * @Description: 通过时间类型判断
  794. */
  795. private static HashMap<String, String> getDateMapByType(String type, String startDate, String endDate) {
  796. HashMap<String, String> map = new HashMap<>();
  797. String startDateStr = "";
  798. String endDateStr = "";
  799. if (StringUtils.isNotBlank(startDate) && StringUtils.isNotBlank(endDate)) {
  800. startDateStr = StringUtils.isNotBlank(startDate) ? startDate + " 00:00:00" : null;
  801. endDateStr = StringUtils.isNotBlank(endDate) ? endDate + " 23:59:59" : null;
  802. } else {
  803. if ("1".equals(type)) {
  804. // 一月内
  805. startDateStr = SliceUpDateUtil.getBeforeDay(new Date(), 2) + " 00:00:00";
  806. endDateStr = SliceUpDateUtil.getBeforeDay(new Date(), 0) + " 23:59:59";
  807. } else if ("2".equals(type)) {
  808. // 三月内
  809. startDateStr = SliceUpDateUtil.getBeforeDay(new Date(), 3) + " 00:00:00";
  810. endDateStr = SliceUpDateUtil.getBeforeDay(new Date(), 0) + " 23:59:59";
  811. } else if ("3".equals(type)) {
  812. // 近半年
  813. startDateStr = SliceUpDateUtil.getBeforeDay(new Date(), 4) + " 00:00:00";
  814. endDateStr = SliceUpDateUtil.getBeforeDay(new Date(), 0) + " 23:59:59";
  815. }
  816. }
  817. map.put("startDate", startDateStr);
  818. map.put("endDate", endDateStr);
  819. return map;
  820. }
  821. /**
  822. * @version
  823. * @author: hxl
  824. * @Date: 2024/6/19 11:57
  825. * @Description: 通过时间类型判断
  826. */
  827. public static HashMap<String, String> getDateMapByTypeNew(String type, String startDate, String endDate) {
  828. HashMap<String, String> map = new HashMap<>();
  829. String startDateStr = "";
  830. String endDateStr = "";
  831. if (org.apache.commons.lang3.StringUtils.isNotBlank(startDate) && org.apache.commons.lang3.StringUtils.isNotBlank(endDate)) {
  832. startDateStr = org.apache.commons.lang3.StringUtils.isNotBlank(startDate) ? startDate + " 00:00:00" : null;
  833. endDateStr = org.apache.commons.lang3.StringUtils.isNotBlank(endDate) ? endDate + " 23:59:59" : null;
  834. } else {
  835. if ("1".equals(type)) {
  836. // 近1天
  837. startDateStr = SliceUpDateUtil.getBeforeDay(new Date(), 0) + " 00:00:00";
  838. endDateStr = SliceUpDateUtil.getBeforeDay(new Date(), 0) + " 23:59:59";
  839. } else if ("2".equals(type)) {
  840. // 近7天
  841. startDateStr = SliceUpDateUtil.getBeforeDay(new Date(), 1) + " 00:00:00";
  842. endDateStr = SliceUpDateUtil.getBeforeDay(new Date(), 0) + " 23:59:59";
  843. } else if ("3".equals(type)) {
  844. // 近30天
  845. startDateStr = SliceUpDateUtil.getBeforeDay(new Date(), 6) + " 00:00:00";
  846. endDateStr = SliceUpDateUtil.getBeforeDay(new Date(), 0) + " 23:59:59";
  847. }
  848. }
  849. map.put("startDate", startDateStr);
  850. map.put("endDate", endDateStr);
  851. return map;
  852. }
  853. /**
  854. * @description: 任控制台-业务数据-代理人-合计
  855. * @author: whp
  856. * @date: 2024/09/09
  857. **/
  858. @Override
  859. public BusinessAgentData getBusinessAgentDataTotal(TaskStatisticsVo taskStatisticsVo) {
  860. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDateType(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
  861. taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
  862. taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
  863. getDateByType(taskStatisticsVo.getDateType(), taskStatisticsVo);
  864. if (StringUtils.isNotEmpty(taskStatisticsVo.getTreeType()) || "3".equals(taskStatisticsVo.getManagementSource())) {
  865. if ((StringUtils.isNotEmpty(taskStatisticsVo.getTreeUserId()) && "2".equals(taskStatisticsVo.getTreeType()))) {
  866. List<String> userIds = this.getNextLevel(taskStatisticsVo.getTreeUserId());
  867. if (!userIds.isEmpty() && userIds.get(0) != null) {
  868. taskStatisticsVo.setUserIds(userIds);
  869. } else {
  870. taskStatisticsVo.setUserId(taskStatisticsVo.getTreeUserId());
  871. }
  872. } else if (StringUtils.isNotEmpty(taskStatisticsVo.getTreeUserId()) && "1".equals(taskStatisticsVo.getTreeType())) {
  873. taskStatisticsVo.setDeptId(taskStatisticsVo.getTreeUserId());
  874. taskStatisticsVo.setTreeUserId(null);
  875. taskStatisticsVo.setUserIds(new ArrayList<>());
  876. }
  877. }
  878. if (StringUtils.isNotEmpty(taskStatisticsVo.getTreeType()) && (StringUtils.isEmpty(taskStatisticsVo.getTreeUserId()) && StringUtils.isEmpty(taskStatisticsVo.getDeptId()))) {
  879. return new BusinessAgentData();
  880. }
  881. BusinessAgentData result = this.taskStatisticsMapper.getBusinessAgentDataTotalAdd(taskStatisticsVo);
  882. Long total = this.taskStatisticsMapper.getBusinessAgentDataTotal(taskStatisticsVo);
  883. result.setTotalNumber(total.toString());
  884. BigDecimal sumPremium = result.getSumPremium();
  885. BusinessAgentData allsumPremium = this.taskStatisticsMapper.getAllsumPremium(taskStatisticsVo);
  886. if (ObjectUtils.isNotEmpty(sumPremium)) {
  887. BigDecimal sumPremium1 = allsumPremium.getSumPremium();
  888. if (sumPremium.compareTo(BigDecimal.ZERO) == 1) {
  889. BigDecimal multiply = sumPremium.divide(sumPremium1, 4, BigDecimal.ROUND_DOWN);
  890. result.setSumPremiumProportion(multiply);
  891. }
  892. } else {
  893. result.setSumPremiumProportion(BigDecimal.ZERO);
  894. }
  895. BigDecimal entranceAllFee = result.getEntranceAllFee() != null ? result.getEntranceAllFee() : BigDecimal.ZERO;
  896. BigDecimal exportAllFee = result.getExportAllFee() != null ? result.getExportAllFee() : BigDecimal.ZERO;
  897. BigDecimal subtract = entranceAllFee.subtract(exportAllFee);
  898. result.setDistributionAmount(subtract); //毛利润
  899. if (subtract.compareTo(BigDecimal.ZERO) > 0) {
  900. BigDecimal resultDivided = subtract.divide(sumPremium, 4, RoundingMode.HALF_UP); //人均产能
  901. result.setDistributionAmountRate(resultDivided);
  902. } else {
  903. result.setDistributionAmountRate(BigDecimal.ZERO);
  904. }
  905. return result;
  906. }
  907. /**
  908. * @description: 任务统计-代理人导出
  909. * @author: whp
  910. * @date: 2024/9/9
  911. **/
  912. @Override
  913. public HttpResult agentExcel(TaskStatisticsVo taskStatisticsVo) {
  914. taskStatisticsVo.setManagementSource("2");
  915. return getHttpResult(taskStatisticsVo);
  916. }
  917. /**
  918. * @description: 任务统计-电销导出
  919. * @author: whp
  920. * @date: 2024/10/29
  921. **/
  922. @Override
  923. public HttpResult electricExcel(TaskStatisticsVo taskStatisticsVo) {
  924. taskStatisticsVo.setManagementSource("3");
  925. return getHttpResult(taskStatisticsVo);
  926. }
  927. /**
  928. * @description: 任务统计-保险公司-导出
  929. * @author: whp
  930. * @date: 2024/9/9
  931. **/
  932. @Override
  933. public HttpResult insuranceCompanyExcel(TaskStatisticsVo taskStatisticsVo) {
  934. if (com.ydtech.utils.StringUtils.isNotEmpty(taskStatisticsVo.getProvinceId())) {
  935. String provinceId = this.removeTrailingZeros(taskStatisticsVo.getProvinceId());
  936. taskStatisticsVo.setProvinceId(provinceId);
  937. }
  938. if (com.ydtech.utils.StringUtils.isNotEmpty(taskStatisticsVo.getCityId())) {
  939. String cityId = this.removeTrailingZeros(taskStatisticsVo.getCityId());
  940. taskStatisticsVo.setCityId(cityId);
  941. }
  942. if (com.ydtech.utils.StringUtils.isNotEmpty(taskStatisticsVo.getCountyId())) {
  943. String countyId = this.removeTrailingZeros(taskStatisticsVo.getCountyId());
  944. taskStatisticsVo.setCountyId(countyId);
  945. }
  946. if (StringUtils.isNotEmpty(taskStatisticsVo.getDays())) {
  947. if ("7".equals(taskStatisticsVo.getDays())) {
  948. taskStatisticsVo.setDays("2");
  949. } else if ("30".equals(taskStatisticsVo.getDays())) {
  950. taskStatisticsVo.setDays("3");
  951. }
  952. }
  953. List<InsuranceCompanyExcel> list = this.insAreaCompanyMapper.insuranceCompanyExcel(taskStatisticsVo);
  954. String uploadPath = this.uploadPath + "/excel/";
  955. Path path = Paths.get(uploadPath);
  956. if (!Files.exists(path)) {
  957. try {
  958. Files.createDirectories(path);
  959. } catch (IOException e) {
  960. e.printStackTrace();
  961. }
  962. }
  963. String fileName = EasyExcelUtils.downExcel(uploadPath, "保险公司导出", InsuranceCompanyExcel.class, list);
  964. return HttpResult.ok("", uploadUrl + "excel/" + fileName);
  965. }
  966. /**
  967. * @description: 任控制台-业务数据-代理人-详情
  968. * @author: whp
  969. * @date: 2024/09/10
  970. **/
  971. @Override
  972. public IPage<BusinessAgentData> getBusinessAgentDataDetails(TaskStatisticsVo taskStatisticsVo) {
  973. HashMap<String, String> dateMapByType = getDateMapByType(taskStatisticsVo.getDateType(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
  974. taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
  975. taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
  976. getDateByType(taskStatisticsVo.getDateType(), taskStatisticsVo);
  977. PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
  978. Page<TaskStatisticsVo> page = new Page<>(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
  979. page.setSearchCount(false).setOptimizeCountSql(false);//关闭count查询
  980. pageVo.setPageNum(taskStatisticsVo.getPageNum());
  981. pageVo.setPageSize(taskStatisticsVo.getPageSize());
  982. IPage<BusinessAgentData> list = this.taskStatisticsMapper.getBusinessAgentDataDetails(page, taskStatisticsVo);
  983. Long total = this.taskStatisticsMapper.getBusinessAgentDataDetailsAdd(taskStatisticsVo);
  984. list.setTotal(total);
  985. return list;
  986. }
  987. /**
  988. * @param taskStatisticsVo
  989. * @return 控制台任务统计 渠道代理人详情
  990. */
  991. @Override
  992. public IPage<TaskStatisticsDto> channelAgentDetails(TaskStatisticsVo taskStatisticsVo) {
  993. if (StringUtils.isNotEmpty(taskStatisticsVo.getDays())) {
  994. if ("7".equals(taskStatisticsVo.getDays())) {
  995. taskStatisticsVo.setDays("2");
  996. } else if ("30".equals(taskStatisticsVo.getDays())) {
  997. taskStatisticsVo.setDays("3");
  998. }
  999. }
  1000. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDays(), taskStatisticsVo.getBeginDate(), taskStatisticsVo.getEndDate());
  1001. taskStatisticsVo.setBeginDate(dateMapByType.get("startDate"));
  1002. taskStatisticsVo.setEndDate(dateMapByType.get("endDate"));
  1003. PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
  1004. Page<TaskStatisticsVo> page = new Page<>(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
  1005. pageVo.setPageNum(taskStatisticsVo.getPageNum());
  1006. pageVo.setPageSize(taskStatisticsVo.getPageSize());
  1007. IPage<TaskStatisticsDto> list = this.taskStatisticsMapper.channelAgentDetails(page, taskStatisticsVo);
  1008. return list;
  1009. }
  1010. /**
  1011. * @description: 财务中心-费用校验-合计
  1012. * @author: whp
  1013. * @date: 2024/9/28
  1014. **/
  1015. @Override
  1016. public HashMap<String, Object> costCenterTotal(TaskStatisticsVo taskStatisticsVo) {
  1017. if (StringUtils.isNotEmpty(taskStatisticsVo.getDays())) {
  1018. if ("7".equals(taskStatisticsVo.getDays())) {
  1019. taskStatisticsVo.setDays("2");
  1020. } else if ("30".equals(taskStatisticsVo.getDays())) {
  1021. taskStatisticsVo.setDays("3");
  1022. }
  1023. }
  1024. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDays(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
  1025. taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
  1026. taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
  1027. PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
  1028. Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
  1029. pageVo.setPageNum(taskStatisticsVo.getPageNum());
  1030. pageVo.setPageSize(taskStatisticsVo.getPageSize());
  1031. HashMap<String, Object> list = this.insAreaCompanyMapper.costCenterTotal(taskStatisticsVo);
  1032. return list;
  1033. }
  1034. private void appendName(BusinessAgentData user) {
  1035. StringBuilder stringBuilder = new StringBuilder();
  1036. String deptId = user.getDeptId();
  1037. if (com.ydtech.utils.StringUtils.isNotEmpty(deptId)) {
  1038. int length = deptId.length();
  1039. if (length > 0) {
  1040. if (length <= 5) {
  1041. String dept = deptId.replaceAll("[^\\d]*(\\d+).*", "$1");
  1042. SysDept cityName = sysDeptMapper.selectById(dept);
  1043. String name = cityName.getName();
  1044. stringBuilder.append("(").append(name).append(")");
  1045. } else if (length > 5) {
  1046. String dept = deptId.replaceAll("[^\\d]*(\\d+).*", "$1");
  1047. if (dept.length() < 5) {
  1048. SysDept dept1 = sysDeptMapper.selectById(dept);
  1049. SysDept cityName = sysDeptMapper.selectById(deptId);
  1050. stringBuilder.append(dept1.getName()).append(cityName.getName());
  1051. } else {
  1052. String deptIdTwo = dept.substring(0, 4);
  1053. SysDept dept1 = sysDeptMapper.selectById(deptIdTwo);
  1054. SysDept dept2 = sysDeptMapper.selectById(dept);
  1055. stringBuilder.append(dept1.getName()).append(dept2.getName());
  1056. }
  1057. }
  1058. user.setDeptName(stringBuilder.toString());
  1059. }
  1060. }
  1061. }
  1062. /**
  1063. * @description: 任控制台-业务数据-渠道-详情
  1064. * @author: hh
  1065. * @date: 2024/11/19
  1066. **/
  1067. @Override
  1068. public PageInfo<BusinessOrderData> getBusinessOrderDataDetails(TaskStatisticsVo taskStatisticsVo) {
  1069. getDateByType(taskStatisticsVo.getDateType(), taskStatisticsVo);
  1070. PageHelper.startPage(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
  1071. List<BusinessOrderData> businessOrderList = this.taskStatisticsMapper.getBusinessOrderDataDetails(taskStatisticsVo);
  1072. if (!com.ydtech.utils.StringUtils.isNullOrEmpty(businessOrderList) && !businessOrderList.isEmpty()) {
  1073. for (BusinessOrderData businessOrderData : businessOrderList) {
  1074. BigDecimal entranceAllFee = businessOrderData.getEntranceAllFee() != null ? businessOrderData.getEntranceAllFee()
  1075. .setScale(2, BigDecimal.ROUND_HALF_UP) : BigDecimal.ZERO;
  1076. BigDecimal exportAllFee = businessOrderData.getExportAllFee() != null ? businessOrderData.getExportAllFee() : BigDecimal.ZERO;
  1077. BigDecimal distributionAmount = entranceAllFee.subtract(exportAllFee);
  1078. businessOrderData.setDistributionAmount(distributionAmount); //毛利润
  1079. businessOrderData.setEntranceAllFee(entranceAllFee);
  1080. if (distributionAmount.compareTo(BigDecimal.ZERO) > 0 && businessOrderData.getSumPremium()
  1081. .compareTo(BigDecimal.ZERO) > 0) {
  1082. BigDecimal resultDivided = distributionAmount.divide(businessOrderData.getSumPremium(), 4, RoundingMode.HALF_UP); //人均产能
  1083. businessOrderData.setDistributionAmountRate(resultDivided);
  1084. } else {
  1085. businessOrderData.setDistributionAmountRate(new BigDecimal("0.0000"));
  1086. }
  1087. }
  1088. }
  1089. return new PageInfo<>(businessOrderList);
  1090. }
  1091. /**
  1092. * @description: 任控制台-业务数据-渠道-合计
  1093. * @author: hh
  1094. * @date: 2024/11/19
  1095. **/
  1096. @Override
  1097. public BusinessOrderData getBusinessOrderDataTotal(TaskStatisticsVo taskStatisticsVo) {
  1098. getDateByType(taskStatisticsVo.getDateType(), taskStatisticsVo);
  1099. BusinessOrderData result = this.taskStatisticsMapper.getBusinessOrderDataTotal(taskStatisticsVo);
  1100. if (com.ydtech.utils.StringUtils.isNullOrEmpty(result)) {
  1101. return null;
  1102. }
  1103. BigDecimal sumPremium = result.getSumPremium();
  1104. BusinessAgentData allsumPremium = this.taskStatisticsMapper.getAllsumPremium(taskStatisticsVo);
  1105. if (ObjectUtils.isNotEmpty(sumPremium)) {
  1106. BigDecimal allSumPremium = allsumPremium.getSumPremium();
  1107. if (sumPremium.compareTo(BigDecimal.ZERO) == 1 && allSumPremium.compareTo(BigDecimal.ZERO) > 0) {
  1108. BigDecimal multiply = sumPremium.divide(allSumPremium, 4, BigDecimal.ROUND_DOWN);
  1109. result.setSumPremiumProportion(multiply);
  1110. }
  1111. } else {
  1112. result.setSumPremiumProportion(BigDecimal.ZERO);
  1113. }
  1114. BigDecimal entranceAllFee = result.getEntranceAllFee() != null ? result.getEntranceAllFee() : BigDecimal.ZERO;
  1115. BigDecimal exportAllFee = result.getExportAllFee() != null ? result.getExportAllFee() : BigDecimal.ZERO;
  1116. BigDecimal subtract = entranceAllFee.subtract(exportAllFee);
  1117. result.setDistributionAmount(subtract); //毛利润
  1118. if (subtract.compareTo(BigDecimal.ZERO) > 0 && sumPremium.compareTo(BigDecimal.ZERO) > 0) {
  1119. BigDecimal resultDivided = subtract.divide(sumPremium, 4, RoundingMode.HALF_UP); //人均产能
  1120. result.setDistributionAmountRate(resultDivided);
  1121. } else {
  1122. result.setDistributionAmountRate(new BigDecimal("0.0000"));
  1123. }
  1124. return result;
  1125. }
  1126. /**
  1127. * 任控制台-业务数据-渠道"
  1128. *
  1129. * @param taskStatisticsVo
  1130. * @return
  1131. */
  1132. @Override
  1133. public IPage<BusinessAgentData> getBusinessElectricData(TaskStatisticsVo taskStatisticsVo) {
  1134. PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
  1135. Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
  1136. page.setSearchCount(false).setOptimizeCountSql(false);//关闭count查询
  1137. pageVo.setPageNum(taskStatisticsVo.getPageNum());
  1138. pageVo.setPageSize(taskStatisticsVo.getPageSize());
  1139. if (StringUtils.isNotEmpty(taskStatisticsVo.getTreeUserId())) {
  1140. List<String> userIds = this.getNextLevel(taskStatisticsVo.getTreeUserId());
  1141. taskStatisticsVo.setUserIds(userIds);
  1142. }
  1143. if (StringUtils.isNotEmpty(taskStatisticsVo.getTreeType()) && (StringUtils.isEmpty(taskStatisticsVo.getTreeUserId()) && StringUtils.isEmpty(taskStatisticsVo.getDeptId()))) {
  1144. return new Page<>(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageNum());
  1145. }
  1146. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDateType(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
  1147. taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
  1148. taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
  1149. getDateByType(taskStatisticsVo.getDateType(), taskStatisticsVo);
  1150. IPage<BusinessAgentData> list = this.taskStatisticsMapper.getBusinessAgentData(page, taskStatisticsVo);
  1151. List<BusinessAgentData> records = list.getRecords();
  1152. for (BusinessAgentData record : records) {
  1153. this.appendName(record);
  1154. if (record.getDistributionAmountRate() == null) {
  1155. record.setDistributionAmountRate(new BigDecimal("0.0000"));
  1156. }
  1157. }
  1158. Long total = this.taskStatisticsMapper.getBusinessAgentDataTotal(taskStatisticsVo);
  1159. list.setTotal(total);
  1160. return list;
  1161. }
  1162. /**
  1163. * 任控制台-业务数据-电销-合计
  1164. *
  1165. * @param taskStatisticsVo
  1166. * @return
  1167. */
  1168. @Override
  1169. public BusinessAgentData getBusinessElectricDataTotal(TaskStatisticsVo taskStatisticsVo) {
  1170. if (StringUtils.isNotEmpty(taskStatisticsVo.getTreeUserId())) {
  1171. List<String> userIds = this.getNextLevel(taskStatisticsVo.getTreeUserId());
  1172. taskStatisticsVo.setUserIds(userIds);
  1173. }
  1174. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDateType(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
  1175. taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
  1176. taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
  1177. getDateByType(taskStatisticsVo.getDateType(), taskStatisticsVo);
  1178. if (StringUtils.isNotEmpty(taskStatisticsVo.getTreeType()) && (StringUtils.isEmpty(taskStatisticsVo.getTreeUserId()) && StringUtils.isEmpty(taskStatisticsVo.getDeptId()))) {
  1179. return new BusinessAgentData();
  1180. }
  1181. String deptId = BaseController.getDeptId();
  1182. BusinessAgentData result = this.taskStatisticsMapper.getBusinessAgentDataTotalAdd(taskStatisticsVo);
  1183. Long total = this.taskStatisticsMapper.getBusinessAgentDataTotal(taskStatisticsVo);
  1184. result.setTotalNumber(total.toString());
  1185. BigDecimal sumPremium = result.getSumPremium();
  1186. BusinessAgentData allsumPremium = this.taskStatisticsMapper.getAllsumPremium(taskStatisticsVo);
  1187. if (ObjectUtils.isNotEmpty(sumPremium)) {
  1188. BigDecimal sumPremium1 = allsumPremium.getSumPremium();
  1189. if (sumPremium.compareTo(BigDecimal.ZERO) == 1) {
  1190. BigDecimal multiply = sumPremium.divide(sumPremium1, 4, BigDecimal.ROUND_DOWN);
  1191. result.setSumPremiumProportion(multiply);
  1192. }
  1193. } else {
  1194. result.setSumPremiumProportion(BigDecimal.ZERO);
  1195. }
  1196. BigDecimal entranceAllFee = result.getEntranceAllFee() != null ? result.getEntranceAllFee() : BigDecimal.ZERO;
  1197. BigDecimal exportAllFee = result.getExportAllFee() != null ? result.getExportAllFee() : BigDecimal.ZERO;
  1198. BigDecimal subtract = entranceAllFee.subtract(exportAllFee);
  1199. result.setDistributionAmount(subtract); //毛利润
  1200. if (subtract.compareTo(BigDecimal.ZERO) > 0) {
  1201. BigDecimal resultDivided = subtract.divide(sumPremium, 4, RoundingMode.HALF_UP); //人均产能
  1202. result.setDistributionAmountRate(resultDivided);
  1203. } else {
  1204. result.setDistributionAmountRate(BigDecimal.ZERO);
  1205. }
  1206. return result;
  1207. }
  1208. @Override
  1209. public HttpResult getBusinessDataExcel(TaskStatisticsVo taskStatisticsVo) {
  1210. if (StringUtils.isNotEmpty(taskStatisticsVo.getDays())) {
  1211. if ("7".equals(taskStatisticsVo.getDays())) {
  1212. taskStatisticsVo.setDateType("2");
  1213. } else if ("30".equals(taskStatisticsVo.getDays())) {
  1214. taskStatisticsVo.setDateType("3");
  1215. } else if ("1".equals(taskStatisticsVo.getDays())) {
  1216. taskStatisticsVo.setDateType("1");
  1217. }
  1218. }
  1219. if (com.ydtech.utils.StringUtils.isNotEmpty(taskStatisticsVo.getParterProvinceId())) {
  1220. String provinceId = this.removeTrailingZeros(taskStatisticsVo.getParterProvinceId());
  1221. taskStatisticsVo.setParterProvinceId(provinceId);
  1222. }
  1223. if (com.ydtech.utils.StringUtils.isNotEmpty(taskStatisticsVo.getParterCityId())) {
  1224. String cityId = this.removeTrailingZeros(taskStatisticsVo.getParterCityId());
  1225. taskStatisticsVo.setParterCityId(cityId);
  1226. }
  1227. if (com.ydtech.utils.StringUtils.isNotEmpty(taskStatisticsVo.getParterCountyId())) {
  1228. String countyId = this.removeTrailingZeros(taskStatisticsVo.getParterCountyId());
  1229. taskStatisticsVo.setParterCountyId(countyId);
  1230. }
  1231. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDateType(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
  1232. taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
  1233. taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
  1234. List<TaskStatisticsDto> list = this.insAreaCompanyMapper.getBusinessDataList(taskStatisticsVo);
  1235. List<BusinessCompanyExcel> sysUserPartners = BeanUtil.copyToList(list, BusinessCompanyExcel.class);
  1236. String uploadPath = this.uploadPath + "/excel/";
  1237. Path path = Paths.get(uploadPath);
  1238. if (!Files.exists(path)) {
  1239. try {
  1240. Files.createDirectories(path);
  1241. } catch (IOException e) {
  1242. e.printStackTrace();
  1243. }
  1244. }
  1245. String fileName = EasyExcelUtils.downExcel(uploadPath, "业务数据保险公司导出", BusinessCompanyExcel.class, sysUserPartners);
  1246. return HttpResult.ok("", uploadUrl + "excel/" + fileName);
  1247. }
  1248. /**
  1249. * @description: 控制台 - 业务数据 - 代理人导出
  1250. * @author: whp
  1251. * @date: 2024/12/13
  1252. **/
  1253. @Override
  1254. public HttpResult getBusinessAgentExcel(TaskStatisticsVo taskStatisticsVo) {
  1255. if (StringUtils.isNotEmpty(taskStatisticsVo.getTreeType())) {
  1256. if ((StringUtils.isNotEmpty(taskStatisticsVo.getTreeUserId()) && "2".equals(taskStatisticsVo.getTreeType()))) {
  1257. List<String> userIds = this.getNextLevel(taskStatisticsVo.getTreeUserId());
  1258. if (!userIds.isEmpty() && userIds.get(0) != null) {
  1259. taskStatisticsVo.setUserIds(userIds);
  1260. } else {
  1261. taskStatisticsVo.setUserId(taskStatisticsVo.getTreeUserId());
  1262. }
  1263. } else if (StringUtils.isNotEmpty(taskStatisticsVo.getTreeUserId()) && "1".equals(taskStatisticsVo.getTreeType())) {
  1264. taskStatisticsVo.setDeptId(taskStatisticsVo.getTreeUserId());
  1265. taskStatisticsVo.setTreeUserId(null);
  1266. taskStatisticsVo.setUserIds(new ArrayList<>());
  1267. }
  1268. }
  1269. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDateType(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
  1270. taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
  1271. taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
  1272. getDateByType(taskStatisticsVo.getDateType(), taskStatisticsVo);
  1273. List<BusinessAgentData> list = this.taskStatisticsMapper.getBusinessAgentDataExcel(taskStatisticsVo);
  1274. for (BusinessAgentData record : list) {
  1275. this.appendName(record);
  1276. if (record.getDistributionAmountRate() == null) {
  1277. record.setDistributionAmountRate(new BigDecimal("0.0000"));
  1278. }
  1279. if (record.getManagementSource().equals("2")) {
  1280. record.setManagementSource("代理人");
  1281. }
  1282. }
  1283. List<BusinessAgentExcel> sysUserPartners = BeanUtil.copyToList(list, BusinessAgentExcel.class);
  1284. String uploadPath = this.uploadPath + "/excel/";
  1285. Path path = Paths.get(uploadPath);
  1286. if (!Files.exists(path)) {
  1287. try {
  1288. Files.createDirectories(path);
  1289. } catch (IOException e) {
  1290. e.printStackTrace();
  1291. }
  1292. }
  1293. String fileName = EasyExcelUtils.downExcel(uploadPath, "业务数据代理人导出", BusinessAgentExcel.class, sysUserPartners);
  1294. return HttpResult.ok("", uploadUrl + "excel/" + fileName);
  1295. }
  1296. /**
  1297. * @description: 控制台 - 业务数据 -渠道导出
  1298. * @author: whp
  1299. * @date: 2024/12/13
  1300. **/
  1301. @Override
  1302. public HttpResult getChannelExcel(TaskStatisticsVo taskStatisticsVo) {
  1303. if (StringUtils.isNotEmpty(taskStatisticsVo.getTreeType())) {
  1304. if ((StringUtils.isNotEmpty(taskStatisticsVo.getTreeUserId()) && "2".equals(taskStatisticsVo.getTreeType()))) {
  1305. List<String> userIds = this.getNextLevel(taskStatisticsVo.getTreeUserId());
  1306. if (!userIds.isEmpty() && userIds.get(0) != null) {
  1307. taskStatisticsVo.setUserIds(userIds);
  1308. } else {
  1309. taskStatisticsVo.setUserId(taskStatisticsVo.getTreeUserId());
  1310. }
  1311. } else if (StringUtils.isNotEmpty(taskStatisticsVo.getTreeUserId()) && "1".equals(taskStatisticsVo.getTreeType())) {
  1312. taskStatisticsVo.setDeptId(taskStatisticsVo.getTreeUserId());
  1313. taskStatisticsVo.setTreeUserId(null);
  1314. taskStatisticsVo.setUserIds(new ArrayList<>());
  1315. }
  1316. }
  1317. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDateType(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
  1318. taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
  1319. taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
  1320. getDateByType(taskStatisticsVo.getDateType(), taskStatisticsVo);
  1321. List<BusinessAgentData> list = this.taskStatisticsMapper.getBusinessAgentDataExcel(taskStatisticsVo);
  1322. for (BusinessAgentData record : list) {
  1323. this.appendName(record);
  1324. if (record.getDistributionAmountRate() == null) {
  1325. record.setDistributionAmountRate(new BigDecimal("0.0000"));
  1326. }
  1327. if (record.getManagementSource().equals("1")) {
  1328. record.setManagementSource("渠道");
  1329. }
  1330. }
  1331. List<GetChannelExcel> sysUserPartners = BeanUtil.copyToList(list, GetChannelExcel.class);
  1332. String uploadPath = this.uploadPath + "/excel/";
  1333. Path path = Paths.get(uploadPath);
  1334. if (!Files.exists(path)) {
  1335. try {
  1336. Files.createDirectories(path);
  1337. } catch (IOException e) {
  1338. e.printStackTrace();
  1339. }
  1340. }
  1341. String fileName = EasyExcelUtils.downExcel(uploadPath, "业务数据渠道导出", GetChannelExcel.class, sysUserPartners);
  1342. return HttpResult.ok("", uploadUrl + "excel/" + fileName);
  1343. }
  1344. /**
  1345. * @version
  1346. * @author: hh
  1347. * @Date: 2024/11/19
  1348. * @Description: 通过时间类型判断
  1349. */
  1350. private static void getDateByType(String type, TaskStatisticsVo taskStatisticsVo) {
  1351. String startDateStr = new String();
  1352. String endDateStr = new String();
  1353. if (StringUtils.isNotEmpty(type)) {
  1354. switch (type) {
  1355. case "1":
  1356. startDateStr = SliceUpDateUtil.getBeforeDay(new Date(), 0) + " 00:00:00";
  1357. endDateStr = SliceUpDateUtil.getBeforeDay(new Date(), 0) + " 23:59:59";
  1358. break;
  1359. case "2":
  1360. startDateStr = SliceUpDateUtil.getBeforeDay(new Date(), 1) + " 00:00:00";
  1361. endDateStr = SliceUpDateUtil.getBeforeDay(new Date(), 0) + " 23:59:59";
  1362. break;
  1363. case "3":
  1364. startDateStr = SliceUpDateUtil.getBeforeDay(new Date(), 6) + " 00:00:00";
  1365. endDateStr = SliceUpDateUtil.getBeforeDay(new Date(), 0) + " 23:59:59";
  1366. break;
  1367. }
  1368. if (StringUtils.isNotEmpty(taskStatisticsVo.getTimeType())) {
  1369. switch (taskStatisticsVo.getTimeType()) {
  1370. case "1":
  1371. taskStatisticsVo.setEnterTimeStart(startDateStr);
  1372. taskStatisticsVo.setEnterTimeEnd(endDateStr);
  1373. break;
  1374. case "2":
  1375. taskStatisticsVo.setSigningTimeStart(startDateStr);
  1376. taskStatisticsVo.setSigningTimeEnd(endDateStr);
  1377. break;
  1378. }
  1379. }
  1380. }
  1381. }
  1382. /**
  1383. * @description: 财务中心 - 费用校验 - 人员查询
  1384. * @author: whp
  1385. **/
  1386. @Override
  1387. public IPage<TaskStatisticsDto> costReviewer(TaskStatisticsVo taskStatisticsVo) {
  1388. if (StringUtils.isNotEmpty(taskStatisticsVo.getDays())) {
  1389. if ("7".equals(taskStatisticsVo.getDays())) {
  1390. taskStatisticsVo.setDays("2");
  1391. } else if ("30".equals(taskStatisticsVo.getDays())) {
  1392. taskStatisticsVo.setDays("3");
  1393. }
  1394. }
  1395. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDays(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
  1396. taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
  1397. taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
  1398. PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
  1399. Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
  1400. pageVo.setPageNum(taskStatisticsVo.getPageNum());
  1401. pageVo.setPageSize(taskStatisticsVo.getPageSize());
  1402. IPage<TaskStatisticsDto> list = this.insAreaCompanyMapper.costReviewer(page, taskStatisticsVo);
  1403. return list;
  1404. }
  1405. /**
  1406. * 控制台 - 业务数据 -渠道明细导出
  1407. * @param taskStatisticsVo
  1408. * @return
  1409. */
  1410. @Override
  1411. public HttpResult detailExport(TaskStatisticsVo taskStatisticsVo) {
  1412. if (StringUtils.isNotEmpty(taskStatisticsVo.getTreeType())) {
  1413. if ((StringUtils.isNotEmpty(taskStatisticsVo.getTreeUserId()) && "2".equals(taskStatisticsVo.getTreeType()))) {
  1414. List<String> userIds = this.getNextLevel(taskStatisticsVo.getTreeUserId());
  1415. if (!userIds.isEmpty() && userIds.get(0) != null) {
  1416. taskStatisticsVo.setUserIds(userIds);
  1417. } else {
  1418. taskStatisticsVo.setUserId(taskStatisticsVo.getTreeUserId());
  1419. }
  1420. } else if (StringUtils.isNotEmpty(taskStatisticsVo.getTreeUserId()) && "1".equals(taskStatisticsVo.getTreeType())) {
  1421. taskStatisticsVo.setDeptId(taskStatisticsVo.getTreeUserId());
  1422. taskStatisticsVo.setTreeUserId(null);
  1423. taskStatisticsVo.setUserIds(new ArrayList<>());
  1424. }
  1425. }
  1426. PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
  1427. Page<TaskStatisticsVo> page = new Page<>(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
  1428. page.setSearchCount(false).setOptimizeCountSql(false);//关闭count查询
  1429. pageVo.setPageNum(taskStatisticsVo.getPageNum());
  1430. pageVo.setPageSize(taskStatisticsVo.getPageSize());
  1431. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDateType(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
  1432. taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
  1433. taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
  1434. getDateByType(taskStatisticsVo.getDateType(), taskStatisticsVo);
  1435. IPage<BusinessAgentData> list = this.taskStatisticsMapper.getBusinessAgentData(page, taskStatisticsVo);
  1436. List<BusinessAgentData> records = list.getRecords();
  1437. List<String> ids = records.stream()
  1438. .map(BusinessAgentData::getUserId) // 提取每个对象的id属性
  1439. .collect(Collectors.toList()); // 收集到新的List中
  1440. if(!CollectionUtils.isEmpty(taskStatisticsVo.getUserIds())){
  1441. ids.addAll(taskStatisticsVo.getUserIds());
  1442. }
  1443. taskStatisticsVo.setUserIds(ids);
  1444. List<ChannelDetailsExport> result = taskStatisticsMapper.getAgentDataDetails(taskStatisticsVo);
  1445. for (ChannelDetailsExport channelDetailsExport : result) {
  1446. BusinessAgentData businessAgentData = new BusinessAgentData();
  1447. businessAgentData.setDeptId(channelDetailsExport.getDeptId());
  1448. this.appendName(businessAgentData);
  1449. if (StringUtils.isNotEmpty(businessAgentData.getDeptName())) {
  1450. channelDetailsExport.setDeptName(businessAgentData.getDeptName());
  1451. }
  1452. }
  1453. String uploadPath = this.uploadPath + "/excel/";
  1454. Path path = Paths.get(uploadPath);
  1455. if (!Files.exists(path)) {
  1456. try {
  1457. Files.createDirectories(path);
  1458. } catch (IOException e) {
  1459. e.printStackTrace();
  1460. }
  1461. }
  1462. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  1463. String formattedDate = sdf.format(new Date());
  1464. String fileName = EasyExcelUtils.downExcel(uploadPath, "1".equals(taskStatisticsVo.getManagementSource()) ? "业务数据渠道明细导出": "业务数据代理人明细导出"+formattedDate, ChannelDetailsExport.class, result);
  1465. return HttpResult.ok("", uploadUrl + "excel/" + fileName);
  1466. }
  1467. }