TaskStatisticsServiceImpl.java 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795
  1. package com.ydtech.modules.admin.service.impl;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  4. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  5. import com.baomidou.mybatisplus.core.metadata.IPage;
  6. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  7. import com.github.pagehelper.PageHelper;
  8. import com.github.pagehelper.PageInfo;
  9. import com.ydtech.core.page.HttpResult;
  10. import com.ydtech.core.page.PageRequest;
  11. import com.ydtech.exception.SystemException;
  12. import com.ydtech.modules.admin.dao.SysAmountAuditingMapper;
  13. import com.ydtech.modules.admin.dao.SysDeptMapper;
  14. import com.ydtech.modules.admin.dao.SysUserMapper;
  15. import com.ydtech.modules.admin.dao.TaskStatisticsMapper;
  16. import com.ydtech.modules.admin.model.SysDept;
  17. import com.ydtech.modules.admin.model.SysUser;
  18. import com.ydtech.modules.admin.model.dto.*;
  19. import com.ydtech.modules.admin.model.vo.BusinessAgentData;
  20. import com.ydtech.modules.admin.model.vo.TaskStatisticsVo;
  21. import com.ydtech.modules.admin.service.SysDeptService;
  22. import com.ydtech.modules.admin.service.TaskStatisticsService;
  23. import com.ydtech.modules.admin.utils.SliceUpDateUtil;
  24. import com.ydtech.modules.base.controller.BaseController;
  25. import com.ydtech.modules.base.model.vo.PageVo;
  26. import com.ydtech.modules.inv.utils.EasyExcelUtils;
  27. import com.ydtech.modules.order.dao.InsAreaCompanyMapper;
  28. import com.ydtech.modules.order.dao.InsOrdersMapper;
  29. import org.apache.commons.lang3.ObjectUtils;
  30. import org.apache.commons.lang3.StringUtils;
  31. import org.springframework.beans.factory.annotation.Autowired;
  32. import org.springframework.beans.factory.annotation.Value;
  33. import org.springframework.stereotype.Service;
  34. import java.io.File;
  35. import java.io.IOException;
  36. import java.math.BigDecimal;
  37. import java.math.RoundingMode;
  38. import java.nio.file.Files;
  39. import java.nio.file.Path;
  40. import java.nio.file.Paths;
  41. import java.util.ArrayList;
  42. import java.util.Date;
  43. import java.util.HashMap;
  44. import java.util.List;
  45. import static com.baomidou.mybatisplus.extension.toolkit.Db.list;
  46. /**
  47. * @description: 任务统计
  48. * @author: whp
  49. * @date: 2024/7/25
  50. **/
  51. @Service
  52. public class TaskStatisticsServiceImpl implements TaskStatisticsService {
  53. @Autowired
  54. private InsAreaCompanyMapper insAreaCompanyMapper;
  55. @Autowired
  56. private SysAmountAuditingMapper sysAmountAuditingMapper;
  57. @Autowired
  58. private InsOrdersMapper insOrdersMapper;
  59. @Autowired
  60. private TaskStatisticsMapper taskStatisticsMapper;
  61. @Autowired
  62. private SysDeptService sysDeptService;
  63. @Autowired
  64. private SysUserMapper sysUserMapper;
  65. @Autowired
  66. private SysDeptMapper sysDeptMapper;
  67. @Value("${upload.file.path}")
  68. private String uploadPath;
  69. @Value("${upload.file.url}")
  70. private String uploadUrl;
  71. /**
  72. * @description: 渠道任务统计查询
  73. * @author: whp
  74. * @date: 2024/7/25
  75. **/
  76. @Override
  77. public IPage<TaskStatisticsDto> queryPage(TaskStatisticsVo taskStatisticsVo) {
  78. PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
  79. Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
  80. page.setSearchCount(false).setOptimizeCountSql(false);//关闭count查询
  81. pageVo.setPageNum(taskStatisticsVo.getPageNum());
  82. pageVo.setPageSize(taskStatisticsVo.getPageSize());
  83. IPage<TaskStatisticsDto> list = this.insAreaCompanyMapper.queryPageTaskStatistics(page,taskStatisticsVo);
  84. if (list != null && !list.getRecords().isEmpty()) {
  85. List<TaskStatisticsDto> records = list.getRecords();
  86. for (TaskStatisticsDto record : records) {
  87. String deptId = record.getDeptId();
  88. if (StringUtils.isNotEmpty(deptId)) {
  89. int length = deptId.length();
  90. if (length > 0) {
  91. if (length > 0) {
  92. if (length > 10) {
  93. String substring = deptId.substring(0, 6);
  94. String substring1 = deptId.substring(0, 8);
  95. String province = deptId.substring(0, 4);
  96. SysDept cityName = sysDeptService.getById(substring);
  97. SysDept districtName = sysDeptService.getById(substring1);
  98. SysDept provinceName = sysDeptService.getById(province);
  99. SysDept storeDeptName = sysDeptService.getById(deptId);
  100. record.setCityName(cityName.getName());
  101. record.setDistrictName(districtName.getName());
  102. record.setProvinceName(provinceName.getName());
  103. record.setStoreDeptName(storeDeptName.getName());
  104. }
  105. }
  106. }
  107. }
  108. }
  109. }
  110. Long total = this.insAreaCompanyMapper.queryPageTaskStatisticsTotal(taskStatisticsVo);
  111. list.setTotal(total);
  112. return list;
  113. }
  114. /**
  115. * @description: 保险公司统计查询
  116. * @author: whp
  117. * @date: 2024/7/25
  118. **/
  119. @Override
  120. public IPage<TaskStatisticsDto> insuranceCompanyQueryPage(TaskStatisticsVo taskStatisticsVo) {
  121. if(com.ydtech.utils.StringUtils.isNotEmpty(taskStatisticsVo.getProvinceId())){
  122. String provinceId = this.removeTrailingZeros(taskStatisticsVo.getProvinceId());
  123. taskStatisticsVo.setProvinceId(provinceId);
  124. }
  125. if(com.ydtech.utils.StringUtils.isNotEmpty(taskStatisticsVo.getCityId())){
  126. String cityId = this.removeTrailingZeros(taskStatisticsVo.getCityId());
  127. taskStatisticsVo.setCityId(cityId);
  128. }
  129. if(com.ydtech.utils.StringUtils.isNotEmpty(taskStatisticsVo.getCountyId())){
  130. String countyId = this.removeTrailingZeros(taskStatisticsVo.getCountyId());
  131. taskStatisticsVo.setCountyId(countyId);
  132. }
  133. if(StringUtils.isNotEmpty(taskStatisticsVo.getDays())){
  134. if("7".equals(taskStatisticsVo.getDays())){
  135. taskStatisticsVo.setDays("2");
  136. } else if ("30".equals(taskStatisticsVo.getDays())) {
  137. taskStatisticsVo.setDays("3");
  138. }
  139. }
  140. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDays(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
  141. taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
  142. taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
  143. PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
  144. Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
  145. page.setSearchCount(false).setOptimizeCountSql(false);//关闭count查询
  146. pageVo.setPageNum(taskStatisticsVo.getPageNum());
  147. pageVo.setPageSize(taskStatisticsVo.getPageSize());
  148. IPage<TaskStatisticsDto> list = this.insAreaCompanyMapper.insuranceCompanyQueryPage(page,taskStatisticsVo);
  149. Long total = this.insAreaCompanyMapper.insuranceCompanyQueryTotal(taskStatisticsVo);
  150. list.setTotal(total);
  151. return list;
  152. }
  153. private String removeTrailingZeros(String value) {
  154. int len = value.length();
  155. int i = len - 1;
  156. // 查找第一个非零字符的位置
  157. while (i >= 0 && value.charAt(i) == '0') {
  158. i--;
  159. }
  160. // 如果所有字符都是0,则返回"0"
  161. if (i < 0) {
  162. return "0";
  163. }
  164. // 使用substring方法获取去除末尾零的子串
  165. return value.substring(0, i + 1);
  166. }
  167. /**
  168. * @description: 代理人统计查询
  169. * @author: whp
  170. * @date: 2024/7/26
  171. **/
  172. @Override
  173. public IPage<TaskStatisticsDto> agentStatisticsQueryPage(TaskStatisticsVo taskStatisticsVo) {
  174. PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
  175. Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
  176. pageVo.setPageNum(taskStatisticsVo.getPageNum());
  177. pageVo.setPageSize(taskStatisticsVo.getPageSize());
  178. page.setSearchCount(false).setOptimizeCountSql(false);//关闭count查询
  179. IPage<TaskStatisticsDto> list = this.insAreaCompanyMapper.agentStatisticsQueryPage(page,taskStatisticsVo);
  180. Long total = this.insAreaCompanyMapper.agentStatisticsQueryPageTotal(taskStatisticsVo);
  181. if (list != null && !list.getRecords().isEmpty()) {
  182. List<TaskStatisticsDto> records = list.getRecords();
  183. for (TaskStatisticsDto record : records) {
  184. String deptId = record.getDeptId();
  185. if (StringUtils.isNotEmpty(deptId)) {
  186. int length = deptId.length();
  187. if (length > 0) {
  188. if (length > 0) {
  189. if (length > 10) {
  190. String substring = deptId.substring(0, 6);
  191. String substring1 = deptId.substring(0, 8);
  192. String province = deptId.substring(0, 4);
  193. SysDept cityName = sysDeptService.getById(substring);
  194. SysDept districtName = sysDeptService.getById(substring1);
  195. SysDept provinceName = sysDeptService.getById(province);
  196. SysDept storeDeptName = sysDeptService.getById(deptId);
  197. record.setCityName(cityName.getName());
  198. record.setDistrictName(districtName.getName());
  199. record.setProvinceName(provinceName.getName());
  200. record.setStoreDeptName(storeDeptName.getName());
  201. }
  202. }
  203. }
  204. }
  205. }
  206. }
  207. list.setTotal(total);
  208. return list;
  209. }
  210. /**
  211. * @description: 财务中心-费用校验
  212. * @author: whp
  213. * @date: 2024/7/29
  214. **/
  215. @Override
  216. public IPage<TaskStatisticsDto> costCenter(TaskStatisticsVo taskStatisticsVo) {
  217. if(StringUtils.isNotEmpty(taskStatisticsVo.getDays())){
  218. if("7".equals(taskStatisticsVo.getDays())){
  219. taskStatisticsVo.setDays("2");
  220. } else if ("30".equals(taskStatisticsVo.getDays())) {
  221. taskStatisticsVo.setDays("3");
  222. }
  223. }
  224. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDays(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
  225. taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
  226. taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
  227. PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
  228. Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
  229. pageVo.setPageNum(taskStatisticsVo.getPageNum());
  230. pageVo.setPageSize(taskStatisticsVo.getPageSize());
  231. IPage<TaskStatisticsDto> list = this.insAreaCompanyMapper.costCenter(page,taskStatisticsVo);
  232. return list;
  233. }
  234. /**
  235. * @description: 财务中心-费用校验-明细
  236. * @author: whp
  237. * @date: 2024/10/10
  238. **/
  239. @Override
  240. public IPage<TaskStatisticsDto> costCenterDetails(TaskStatisticsVo taskStatisticsVo) {
  241. if(StringUtils.isNotEmpty(taskStatisticsVo.getDays())){
  242. if("7".equals(taskStatisticsVo.getDays())){
  243. taskStatisticsVo.setDays("2");
  244. } else if ("30".equals(taskStatisticsVo.getDays())) {
  245. taskStatisticsVo.setDays("3");
  246. }
  247. }
  248. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDays(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
  249. taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
  250. taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
  251. PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
  252. Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
  253. pageVo.setPageNum(taskStatisticsVo.getPageNum());
  254. pageVo.setPageSize(taskStatisticsVo.getPageSize());
  255. IPage<TaskStatisticsDto> list = this.insAreaCompanyMapper.costCenterDetails(page,taskStatisticsVo);
  256. return list;
  257. }
  258. /**
  259. * @description: 任务统计-保险公司-导出
  260. * @author: whp
  261. * @date: 2024/9/9
  262. **/
  263. @Override
  264. public HttpResult costCenterDetailsExcel(TaskStatisticsVo taskStatisticsVo) {
  265. if(StringUtils.isNotEmpty(taskStatisticsVo.getDays())){
  266. if("7".equals(taskStatisticsVo.getDays())){
  267. taskStatisticsVo.setDays("2");
  268. } else if ("30".equals(taskStatisticsVo.getDays())) {
  269. taskStatisticsVo.setDays("3");
  270. }
  271. }
  272. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDays(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
  273. taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
  274. taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
  275. List<TaskStatisticsDtoExcel> list = this.insAreaCompanyMapper.costCenterDetailsExcel(taskStatisticsVo);
  276. String uploadPath = this.uploadPath + "/excel/";
  277. Path path = Paths.get(uploadPath);
  278. if (!Files.exists(path)) {
  279. try {
  280. Files.createDirectories(path);
  281. } catch (IOException e) {
  282. e.printStackTrace();
  283. }
  284. }
  285. String fileName = EasyExcelUtils.downExcel(uploadPath, "费用校验审核人导出", TaskStatisticsDtoExcel.class, list);
  286. return HttpResult.ok("", uploadUrl + "excel/" + fileName);
  287. }
  288. /**
  289. * @description: 财务中心-费用校验-明细-查看
  290. * @author: whp
  291. * @date: 2024/10/10
  292. **/
  293. @Override
  294. public TaskStatisticsDtoNew costCenterDetailsLicense(TaskStatisticsVo taskStatisticsVo) {
  295. if(StringUtils.isNotEmpty(taskStatisticsVo.getDays())){
  296. if("7".equals(taskStatisticsVo.getDays())){
  297. taskStatisticsVo.setDays("2");
  298. } else if ("30".equals(taskStatisticsVo.getDays())) {
  299. taskStatisticsVo.setDays("3");
  300. }
  301. }
  302. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDays(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
  303. taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
  304. taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
  305. PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
  306. Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
  307. pageVo.setPageNum(taskStatisticsVo.getPageNum());
  308. pageVo.setPageSize(taskStatisticsVo.getPageSize());
  309. IPage<TaskStatisticsDto> list = this.insAreaCompanyMapper.costCenterDetailsLicense(page,taskStatisticsVo);
  310. TaskStatisticsDtoNew sumSecond = this.insAreaCompanyMapper.costCenterSecond(taskStatisticsVo);
  311. sumSecond.setPageResult(list);
  312. return sumSecond;
  313. }
  314. /**
  315. * @description: 保险公司统计总报价
  316. * @author: whp
  317. * @date: 2024/8/12
  318. **/
  319. @Override
  320. public IPage<TaskStatisticsDto> totalQuotation(TaskStatisticsVo taskStatisticsVo) {
  321. PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
  322. Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
  323. pageVo.setPageNum(taskStatisticsVo.getPageNum());
  324. pageVo.setPageSize(taskStatisticsVo.getPageSize());
  325. IPage<TaskStatisticsDto> list = this.insAreaCompanyMapper.totalQuotation(page,taskStatisticsVo);
  326. return list;
  327. }
  328. /**
  329. * @description: 控制台-业务数据
  330. * @author: whp
  331. * @date: 2024/8/13
  332. **/
  333. @Override
  334. public IPage<TaskStatisticsDto> getBusinessData(TaskStatisticsVo taskStatisticsVo) {
  335. if(StringUtils.isNotEmpty(taskStatisticsVo.getDays())){
  336. if("7".equals(taskStatisticsVo.getDays())){
  337. taskStatisticsVo.setDateType("2");
  338. } else if ("30".equals(taskStatisticsVo.getDays())) {
  339. taskStatisticsVo.setDateType("3");
  340. } else if ("1".equals(taskStatisticsVo.getDays())){
  341. taskStatisticsVo.setDateType("1");
  342. }
  343. }
  344. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDateType(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
  345. taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
  346. taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
  347. PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
  348. Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
  349. pageVo.setPageNum(taskStatisticsVo.getPageNum());
  350. pageVo.setPageSize(taskStatisticsVo.getPageSize());
  351. IPage<TaskStatisticsDto> list = this.insAreaCompanyMapper.getBusinessData(page,taskStatisticsVo);
  352. return list;
  353. }
  354. /**
  355. * @description: 控制台-业务数据 - 保险分布
  356. * @author: whp
  357. * @date: 2024/8/13
  358. **/
  359. @Override
  360. public List<TaskStatisticsDto> getDistribution(TaskStatisticsVo taskStatisticsVo) {
  361. List<TaskStatisticsDto> result = new ArrayList<>();
  362. //0 报价中 1 待核保 2 已核保代缴费 3 已承保 4 核保退回
  363. for (int i = 0; i < 5; i++) {
  364. taskStatisticsVo.setQuotationStatus(i+"");
  365. TaskStatisticsDto taskStatisticsDtoItem = insAreaCompanyMapper.getDistribution(taskStatisticsVo);
  366. if(ObjectUtils.isNotEmpty(taskStatisticsDtoItem)){
  367. taskStatisticsDtoItem.setQuotationStatus(i+"");
  368. result.add(taskStatisticsDtoItem);
  369. }
  370. }
  371. return result;
  372. }
  373. /**
  374. * @description: 任务统计-渠道导出
  375. * @author: whp
  376. * @date: 2024/09/09
  377. **/
  378. @Override
  379. public HttpResult channelExcel(TaskStatisticsVo taskStatisticsVo) {
  380. taskStatisticsVo.setManagementSource("1");
  381. return getHttpResult(taskStatisticsVo);
  382. }
  383. private HttpResult getHttpResult(TaskStatisticsVo taskStatisticsVo) {
  384. List<TaskStatisticsExcel> list = this.insAreaCompanyMapper.channelExcel(taskStatisticsVo);
  385. if (list != null && !list.isEmpty()) {
  386. for (TaskStatisticsExcel record : list) {
  387. String deptId = record.getDeptId();
  388. if (StringUtils.isNotEmpty(deptId)) {
  389. int length = deptId.length();
  390. if (length > 0) {
  391. if (length > 0) {
  392. if (length > 10) {
  393. String substring = deptId.substring(0, 6);
  394. String substring1 = deptId.substring(0, 8);
  395. String province = deptId.substring(0, 4);
  396. SysDept cityName = sysDeptService.getById(substring);
  397. SysDept districtName = sysDeptService.getById(substring1);
  398. SysDept provinceName = sysDeptService.getById(province);
  399. record.setCityName(cityName.getName());
  400. record.setDistrictName(districtName.getName());
  401. record.setProvinceName(provinceName.getName());
  402. }
  403. }
  404. }
  405. }
  406. }
  407. }
  408. String uploadPath = this.uploadPath + "/excel/";
  409. Path path = Paths.get(uploadPath);
  410. if (!Files.exists(path)) {
  411. try {
  412. Files.createDirectories(path);
  413. } catch (IOException e) {
  414. e.printStackTrace();
  415. }
  416. }
  417. String fileName = EasyExcelUtils.downExcel(uploadPath, taskStatisticsVo.getManagementSource() .equals("1") ? "渠道导出":"代理人导出", TaskStatisticsExcel.class, list);
  418. return HttpResult.ok("", uploadUrl + "excel/" + fileName);
  419. }
  420. /**
  421. * @description: 任控制台-业务数据-代理人
  422. * @author: whp
  423. * @date: 2024/09/09
  424. **/
  425. @Override
  426. public IPage<BusinessAgentData> getBusinessAgentData(TaskStatisticsVo taskStatisticsVo) {
  427. if(StringUtils.isNotEmpty(taskStatisticsVo.getTreeType())){
  428. if(StringUtils.isNotEmpty(taskStatisticsVo.getTreeUserId()) && "2".equals(taskStatisticsVo.getTreeType())){
  429. List<String> userIds=this.getNextLevel(taskStatisticsVo.getTreeUserId());
  430. if(!userIds.isEmpty()){
  431. taskStatisticsVo.setUserIds(userIds);
  432. }else {
  433. taskStatisticsVo.setUserId(taskStatisticsVo.getTreeUserId());
  434. }
  435. }else if (StringUtils.isNotEmpty(taskStatisticsVo.getTreeUserId()) && "1".equals(taskStatisticsVo.getTreeType())){
  436. taskStatisticsVo.setDeptId(taskStatisticsVo.getTreeUserId());
  437. taskStatisticsVo.setTreeUserId(null);
  438. taskStatisticsVo.setUserIds(new ArrayList<>());
  439. }
  440. }
  441. PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
  442. Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
  443. page.setSearchCount(false).setOptimizeCountSql(false);//关闭count查询
  444. pageVo.setPageNum(taskStatisticsVo.getPageNum());
  445. pageVo.setPageSize(taskStatisticsVo.getPageSize());
  446. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDateType(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
  447. taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
  448. taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
  449. IPage<BusinessAgentData> list = this.taskStatisticsMapper.getBusinessAgentData(page,taskStatisticsVo);
  450. List<BusinessAgentData> records = list.getRecords();
  451. for (BusinessAgentData record : records) {
  452. this.appendName(record);
  453. }
  454. Long total = this.taskStatisticsMapper.getBusinessAgentDataTotal(taskStatisticsVo);
  455. list.setTotal(total);
  456. return list;
  457. }
  458. /**
  459. *
  460. * @param userId
  461. * @return 获取该用户下级所有用户id
  462. */
  463. private List<String> getNextLevel(String userId) {
  464. // 获取系统中的所有用户
  465. LambdaQueryWrapper<SysUser> queryWrapperUser = new LambdaQueryWrapper<>();
  466. queryWrapperUser.eq(SysUser :: getStatus,"1");
  467. List<SysUser> users = this.sysUserMapper.selectList(queryWrapperUser);
  468. // 创建查询包装器,用于查询指定用户ID的用
  469. LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>();
  470. queryWrapper.eq(SysUser::getId, userId);
  471. // 查询指定用户ID的用户,即第一级下属
  472. List<SysUser> usersLevel1 = this.sysUserMapper.selectList(queryWrapper);
  473. // 用于存储所有下属的ID
  474. List<String> strIds = new ArrayList<>();
  475. // 递归获取第一级下属及其所有下属的ID
  476. findChildren(usersLevel1, users, strIds);
  477. return strIds;
  478. }
  479. /**
  480. *
  481. * @param usersLevel1 即第一级下属
  482. * @param users 所有用户
  483. * @param strIds 用于存储所有下属的ID
  484. */
  485. private void findChildren(List<SysUser> SysUsers, List<SysUser> users, List<String> strIds) {
  486. for (SysUser sysUser : SysUsers) {
  487. List<SysUser> children = new ArrayList<>();
  488. for (SysUser user : users) {
  489. if (sysUser.getId() != null && sysUser.getId().equals(user.getLeaderId())) {
  490. if (!exists(children, user)) {
  491. children.add(user);
  492. strIds.add(user.getId());
  493. }
  494. }
  495. }
  496. sysUser.setChildren(children);
  497. findChildren(children, users, strIds);
  498. }
  499. }
  500. private boolean exists(List<SysUser> sysUsers, SysUser sysUser) {
  501. boolean exist = false;
  502. for (SysUser user : sysUsers) {
  503. if (user.getId().equals(sysUser.getId())) {
  504. exist = true;
  505. }
  506. }
  507. return exist;
  508. }
  509. /**
  510. * @version
  511. * @author: hxl
  512. * @Date: 2024/6/19 11:57
  513. * @Description: 通过时间类型判断
  514. */
  515. private static HashMap<String,String> getDateMapByType(String type, String startDate, String endDate) {
  516. HashMap<String,String> map =new HashMap<>();
  517. String startDateStr="";
  518. String endDateStr="";
  519. if(StringUtils.isNotBlank(startDate) && StringUtils.isNotBlank(endDate)){
  520. startDateStr= StringUtils.isNotBlank(startDate)?startDate+" 00:00:00":null;
  521. endDateStr= StringUtils.isNotBlank(endDate)?endDate+" 23:59:59":null;
  522. }else{
  523. if("1".equals(type)){
  524. // 一月内
  525. startDateStr= SliceUpDateUtil.getBeforeDay(new Date(),2)+" 00:00:00";
  526. endDateStr=SliceUpDateUtil.getBeforeDay(new Date(),0)+" 23:59:59";
  527. }else if("2".equals(type)){
  528. // 三月内
  529. startDateStr=SliceUpDateUtil.getBeforeDay(new Date(),3)+" 00:00:00";
  530. endDateStr=SliceUpDateUtil.getBeforeDay(new Date(),0)+" 23:59:59";
  531. }else if("3".equals(type)){
  532. // 近半年
  533. startDateStr=SliceUpDateUtil.getBeforeDay(new Date(),4)+" 00:00:00";
  534. endDateStr=SliceUpDateUtil.getBeforeDay(new Date(),0)+" 23:59:59";
  535. }
  536. }
  537. map.put("startDate",startDateStr);
  538. map.put("endDate",endDateStr);
  539. return map;
  540. }
  541. /**
  542. * @version
  543. * @author: hxl
  544. * @Date: 2024/6/19 11:57
  545. * @Description: 通过时间类型判断
  546. */
  547. private static HashMap<String,String> getDateMapByTypeNew(String type, String startDate, String endDate) {
  548. HashMap<String,String> map =new HashMap<>();
  549. String startDateStr="";
  550. String endDateStr="";
  551. if(org.apache.commons.lang3.StringUtils.isNotBlank(startDate) && org.apache.commons.lang3.StringUtils.isNotBlank(endDate)){
  552. startDateStr= org.apache.commons.lang3.StringUtils.isNotBlank(startDate)?startDate+" 00:00:00":null;
  553. endDateStr= org.apache.commons.lang3.StringUtils.isNotBlank(endDate)?endDate+" 23:59:59":null;
  554. }else{
  555. if("1".equals(type)){
  556. // 近1天
  557. startDateStr= SliceUpDateUtil.getBeforeDay(new Date(),0)+" 00:00:00";
  558. endDateStr=SliceUpDateUtil.getBeforeDay(new Date(),0)+" 23:59:59";
  559. }else if("2".equals(type)){
  560. // 近7天
  561. startDateStr=SliceUpDateUtil.getBeforeDay(new Date(),1)+" 00:00:00";
  562. endDateStr=SliceUpDateUtil.getBeforeDay(new Date(),0)+" 23:59:59";
  563. }else if("3".equals(type)){
  564. // 近30天
  565. startDateStr=SliceUpDateUtil.getBeforeDay(new Date(),6)+" 00:00:00";
  566. endDateStr=SliceUpDateUtil.getBeforeDay(new Date(),0)+" 23:59:59";
  567. }
  568. }
  569. map.put("startDate",startDateStr);
  570. map.put("endDate",endDateStr);
  571. return map;
  572. }
  573. /**
  574. * @description: 任控制台-业务数据-代理人-合计
  575. * @author: whp
  576. * @date: 2024/09/09
  577. **/
  578. @Override
  579. public BusinessAgentData getBusinessAgentDataTotal(TaskStatisticsVo taskStatisticsVo) {
  580. HashMap<String, String> dateMapByType = getDateMapByType(taskStatisticsVo.getDateType(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
  581. taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
  582. taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
  583. if(StringUtils.isNotEmpty(taskStatisticsVo.getTreeType())){
  584. if(StringUtils.isNotEmpty(taskStatisticsVo.getTreeUserId()) && "2".equals(taskStatisticsVo.getTreeType())){
  585. List<String> userIds=this.getNextLevel(taskStatisticsVo.getTreeUserId());
  586. if(!userIds.isEmpty()){
  587. taskStatisticsVo.setUserIds(userIds);
  588. }else {
  589. taskStatisticsVo.setUserId(taskStatisticsVo.getTreeUserId());
  590. }
  591. }else if (StringUtils.isNotEmpty(taskStatisticsVo.getTreeUserId()) &&"1".equals(taskStatisticsVo.getTreeType())){
  592. taskStatisticsVo.setDeptId(taskStatisticsVo.getTreeUserId());
  593. taskStatisticsVo.setTreeUserId(null);
  594. taskStatisticsVo.setUserIds(new ArrayList<>());
  595. }
  596. }
  597. String deptId = BaseController.getDeptId();
  598. BusinessAgentData result = this.taskStatisticsMapper.getBusinessAgentDataTotalAdd(taskStatisticsVo);
  599. Long total = this.taskStatisticsMapper.getBusinessAgentDataTotal(taskStatisticsVo);
  600. result.setTotalNumber(total.toString());
  601. BigDecimal sumPremium = result.getSumPremium();
  602. BusinessAgentData allsumPremium = this.taskStatisticsMapper.getAllsumPremium(taskStatisticsVo);
  603. if(ObjectUtils.isNotEmpty(sumPremium)){
  604. BigDecimal sumPremium1 = allsumPremium.getSumPremium();
  605. if(sumPremium.compareTo(BigDecimal.ZERO) ==1){
  606. BigDecimal multiply = sumPremium.divide(sumPremium1, 2, BigDecimal.ROUND_DOWN);
  607. result.setSumPremiumProportion(multiply);
  608. }
  609. }else {
  610. result.setSumPremiumProportion(BigDecimal.ZERO);
  611. }
  612. return result;
  613. }
  614. /**
  615. * @description: 任务统计-代理人导出
  616. * @author: whp
  617. * @date: 2024/9/9
  618. **/
  619. @Override
  620. public HttpResult agentExcel(TaskStatisticsVo taskStatisticsVo) {
  621. taskStatisticsVo.setManagementSource("2");
  622. return getHttpResult(taskStatisticsVo);
  623. }
  624. /**
  625. * @description: 任务统计-保险公司-导出
  626. * @author: whp
  627. * @date: 2024/9/9
  628. **/
  629. @Override
  630. public HttpResult insuranceCompanyExcel(TaskStatisticsVo taskStatisticsVo) {
  631. List<InsuranceCompanyExcel> list = this.insAreaCompanyMapper.insuranceCompanyExcel(taskStatisticsVo);
  632. String uploadPath = this.uploadPath + "/excel/";
  633. Path path = Paths.get(uploadPath);
  634. if (!Files.exists(path)) {
  635. try {
  636. Files.createDirectories(path);
  637. } catch (IOException e) {
  638. e.printStackTrace();
  639. }
  640. }
  641. String fileName = EasyExcelUtils.downExcel(uploadPath, "保险公司导出", InsuranceCompanyExcel.class, list);
  642. return HttpResult.ok("", uploadUrl + "excel/" + fileName);
  643. }
  644. /**
  645. * @description: 任控制台-业务数据-代理人-详情
  646. * @author: whp
  647. * @date: 2024/09/10
  648. **/
  649. @Override
  650. public IPage<BusinessAgentData> getBusinessAgentDataDetails(TaskStatisticsVo taskStatisticsVo) {
  651. HashMap<String, String> dateMapByType = getDateMapByType(taskStatisticsVo.getDateType(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
  652. taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
  653. taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
  654. PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
  655. Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
  656. page.setSearchCount(false).setOptimizeCountSql(false);//关闭count查询
  657. pageVo.setPageNum(taskStatisticsVo.getPageNum());
  658. pageVo.setPageSize(taskStatisticsVo.getPageSize());
  659. IPage<BusinessAgentData> list = this.taskStatisticsMapper.getBusinessAgentDataDetails(page, taskStatisticsVo);
  660. Long total = this.taskStatisticsMapper.getBusinessAgentDataDetailsAdd(taskStatisticsVo);
  661. list.setTotal(total);
  662. return list;
  663. }
  664. /**
  665. *
  666. * @param taskStatisticsVo
  667. * @return 控制台任务统计 渠道代理人详情
  668. */
  669. @Override
  670. public IPage<TaskStatisticsDto> channelAgentDetails(TaskStatisticsVo taskStatisticsVo) {
  671. PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
  672. Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
  673. pageVo.setPageNum(taskStatisticsVo.getPageNum());
  674. pageVo.setPageSize(taskStatisticsVo.getPageSize());
  675. HashMap<String, String> dateMapByType = getDateMapByType(taskStatisticsVo.getDateType(), taskStatisticsVo.getBeginDate(), taskStatisticsVo.getEndDate());
  676. taskStatisticsVo.setBeginDate(dateMapByType.get("startDate"));
  677. taskStatisticsVo.setEndDate(dateMapByType.get("endDate"));
  678. IPage<TaskStatisticsDto> list = this.taskStatisticsMapper.channelAgentDetails(page,taskStatisticsVo);
  679. return list;
  680. }
  681. /**
  682. * @description: 财务中心-费用校验-合计
  683. * @author: whp
  684. * @date: 2024/9/28
  685. **/
  686. @Override
  687. public HashMap<String, Object> costCenterTotal(TaskStatisticsVo taskStatisticsVo) {
  688. if(StringUtils.isNotEmpty(taskStatisticsVo.getDays())){
  689. if("7".equals(taskStatisticsVo.getDays())){
  690. taskStatisticsVo.setDays("2");
  691. } else if ("30".equals(taskStatisticsVo.getDays())) {
  692. taskStatisticsVo.setDays("3");
  693. }
  694. }
  695. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDays(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
  696. taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
  697. taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
  698. PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
  699. Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
  700. pageVo.setPageNum(taskStatisticsVo.getPageNum());
  701. pageVo.setPageSize(taskStatisticsVo.getPageSize());
  702. HashMap<String,Object> list = this.insAreaCompanyMapper.costCenterTotal(taskStatisticsVo);
  703. return list;
  704. }
  705. private void appendName(BusinessAgentData user) {
  706. StringBuilder stringBuilder = new StringBuilder();
  707. String deptId = user.getDeptId();
  708. if (com.ydtech.utils.StringUtils.isNotEmpty(deptId)) {
  709. int length = deptId.length();
  710. if (length > 0) {
  711. if (length <= 5) {
  712. String dept = deptId.replaceAll("[^\\d]*(\\d+).*", "$1");
  713. SysDept cityName = sysDeptMapper.selectById(dept);
  714. String name = cityName.getName();
  715. stringBuilder.append("(").append(name).append(")");
  716. } else if (length > 5) {
  717. String dept = deptId.replaceAll("[^\\d]*(\\d+).*", "$1");
  718. if (dept.length() < 5) {
  719. SysDept dept1 = sysDeptMapper.selectById(dept);
  720. SysDept cityName = sysDeptMapper.selectById(deptId);
  721. stringBuilder.append(dept1.getName()).append(cityName.getName());
  722. } else {
  723. String deptIdTwo = dept.substring(0, 4);
  724. SysDept dept1 = sysDeptMapper.selectById(deptIdTwo);
  725. SysDept dept2 = sysDeptMapper.selectById(dept);
  726. stringBuilder.append(dept1.getName()).append(dept2.getName());
  727. }
  728. }
  729. user.setDeptName(stringBuilder.toString());
  730. }
  731. }
  732. }
  733. }