TaskStatisticsServiceImpl.java 41 KB

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