TaskStatisticsServiceImpl.java 27 KB

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