TaskStatisticsServiceImpl.java 29 KB

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