TaskStatisticsServiceImpl.java 54 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172
  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.BusinessOrderData;
  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.controller.BaseController;
  26. import com.ydtech.modules.base.model.vo.PageVo;
  27. import com.ydtech.modules.inv.utils.EasyExcelUtils;
  28. import com.ydtech.modules.order.dao.InsAreaCompanyMapper;
  29. import com.ydtech.modules.order.dao.InsOrdersMapper;
  30. import org.apache.commons.lang3.ObjectUtils;
  31. import org.apache.commons.lang3.StringUtils;
  32. import org.springframework.beans.factory.annotation.Autowired;
  33. import org.springframework.beans.factory.annotation.Value;
  34. import org.springframework.stereotype.Service;
  35. import java.io.File;
  36. import java.io.IOException;
  37. import java.math.BigDecimal;
  38. import java.math.RoundingMode;
  39. import java.nio.file.Files;
  40. import java.nio.file.Path;
  41. import java.nio.file.Paths;
  42. import java.text.DecimalFormat;
  43. import java.util.ArrayList;
  44. import java.util.Date;
  45. import java.util.HashMap;
  46. import java.util.List;
  47. import java.util.stream.Collectors;
  48. import static com.baomidou.mybatisplus.extension.toolkit.Db.list;
  49. /**
  50. * @description: 任务统计
  51. * @author: whp
  52. * @date: 2024/7/25
  53. **/
  54. @Service
  55. public class TaskStatisticsServiceImpl implements TaskStatisticsService {
  56. @Autowired
  57. private InsAreaCompanyMapper insAreaCompanyMapper;
  58. @Autowired
  59. private SysAmountAuditingMapper sysAmountAuditingMapper;
  60. @Autowired
  61. private InsOrdersMapper insOrdersMapper;
  62. @Autowired
  63. private TaskStatisticsMapper taskStatisticsMapper;
  64. @Autowired
  65. private SysDeptService sysDeptService;
  66. @Autowired
  67. private SysUserMapper sysUserMapper;
  68. @Autowired
  69. private SysDeptMapper sysDeptMapper;
  70. @Value("${upload.file.path}")
  71. private String uploadPath;
  72. @Value("${upload.file.url}")
  73. private String uploadUrl;
  74. /**
  75. * @description: 渠道任务统计查询
  76. * @author: whp
  77. * @date: 2024/7/25
  78. **/
  79. @Override
  80. public IPage<TaskStatisticsDto> queryPage(TaskStatisticsVo taskStatisticsVo) {
  81. String leaderId = taskStatisticsVo.getLeaderId();
  82. if(com.ydtech.utils.StringUtils.isNotEmpty(leaderId)){
  83. //获取领导人下级所有
  84. List<String> ids = new ArrayList<>();
  85. List<String> userList = this.getUserTreeHx(leaderId, ids);
  86. userList.add(leaderId);
  87. if(userList.size()>0){
  88. taskStatisticsVo.setLeaderIds(userList);
  89. }
  90. }
  91. PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
  92. Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
  93. page.setSearchCount(false).setOptimizeCountSql(false);//关闭count查询
  94. pageVo.setPageNum(taskStatisticsVo.getPageNum());
  95. pageVo.setPageSize(taskStatisticsVo.getPageSize());
  96. if(StringUtils.isNotEmpty(taskStatisticsVo.getDays())){
  97. if("7".equals(taskStatisticsVo.getDays())){
  98. taskStatisticsVo.setDays("2");
  99. } else if ("30".equals(taskStatisticsVo.getDays())) {
  100. taskStatisticsVo.setDays("3");
  101. }
  102. }
  103. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDays(), taskStatisticsVo.getBeginDate(), taskStatisticsVo.getEndDate());
  104. taskStatisticsVo.setBeginDate(dateMapByType.get("startDate"));
  105. taskStatisticsVo.setEndDate(dateMapByType.get("endDate"));
  106. IPage<TaskStatisticsDto> list = this.insAreaCompanyMapper.queryPageTaskStatistics(page,taskStatisticsVo);
  107. if (list != null && !list.getRecords().isEmpty()) {
  108. List<TaskStatisticsDto> records = list.getRecords();
  109. for (TaskStatisticsDto record : records) {
  110. String deptId = record.getDeptId();
  111. if (StringUtils.isNotEmpty(deptId)) {
  112. int length = deptId.length();
  113. if (length > 0) {
  114. if (length > 0) {
  115. if (length > 10) {
  116. String substring = deptId.substring(0, 6);
  117. String substring1 = deptId.substring(0, 8);
  118. String province = deptId.substring(0, 4);
  119. SysDept cityName = sysDeptService.getById(substring);
  120. SysDept districtName = sysDeptService.getById(substring1);
  121. SysDept provinceName = sysDeptService.getById(province);
  122. SysDept storeDeptName = sysDeptService.getById(deptId);
  123. record.setCityName(cityName.getName());
  124. record.setDistrictName(districtName.getName());
  125. record.setProvinceName(provinceName.getName());
  126. record.setStoreDeptName(storeDeptName.getName());
  127. }
  128. }
  129. }
  130. }
  131. taskStatisticsVo.setUserId(record.getUserId());
  132. HashMap<String,Object> sumEntryStatus = this.insAreaCompanyMapper.getSumEntryStatus(taskStatisticsVo);
  133. if(!sumEntryStatus.isEmpty()){
  134. String entryStatus = sumEntryStatus.get("entryStatus").toString();
  135. String outStatus = sumEntryStatus.get("outStatus").toString();
  136. record.setSumEntryStatus(entryStatus);
  137. record.setOutStatus(outStatus);
  138. }
  139. taskStatisticsVo.setUserId(null);
  140. }
  141. }
  142. Long total = this.insAreaCompanyMapper.queryPageTaskStatisticsTotal(taskStatisticsVo);
  143. list.setTotal(total);
  144. return list;
  145. }
  146. private List<String> getUserTreeHx(String leaderId, List<String> ids) {
  147. List<SysUser> sysUsers = sysUserMapper.selectByLeadId(leaderId);
  148. if (!sysUsers.isEmpty()) {
  149. ids.addAll(sysUsers.stream().map(SysUser::getId).collect(Collectors.toList()));
  150. }
  151. for (SysUser sysUser : sysUsers) {
  152. this.getUserTreeHx(sysUser.getId(), ids);
  153. }
  154. return ids;
  155. }
  156. /**
  157. * @description: 保险公司统计查询
  158. * @author: whp
  159. * @date: 2024/7/25
  160. **/
  161. @Override
  162. public IPage<TaskStatisticsDto> insuranceCompanyQueryPage(TaskStatisticsVo taskStatisticsVo) {
  163. if(com.ydtech.utils.StringUtils.isNotEmpty(taskStatisticsVo.getProvinceId())){
  164. String provinceId = this.removeTrailingZeros(taskStatisticsVo.getProvinceId());
  165. taskStatisticsVo.setProvinceId(provinceId);
  166. }
  167. if(com.ydtech.utils.StringUtils.isNotEmpty(taskStatisticsVo.getCityId())){
  168. String cityId = this.removeTrailingZeros(taskStatisticsVo.getCityId());
  169. taskStatisticsVo.setCityId(cityId);
  170. }
  171. if(com.ydtech.utils.StringUtils.isNotEmpty(taskStatisticsVo.getCountyId())){
  172. String countyId = this.removeTrailingZeros(taskStatisticsVo.getCountyId());
  173. taskStatisticsVo.setCountyId(countyId);
  174. }
  175. if(StringUtils.isNotEmpty(taskStatisticsVo.getDays())){
  176. if("7".equals(taskStatisticsVo.getDays())){
  177. taskStatisticsVo.setDays("2");
  178. } else if ("30".equals(taskStatisticsVo.getDays())) {
  179. taskStatisticsVo.setDays("3");
  180. }
  181. }
  182. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDays(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
  183. taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
  184. taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
  185. PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
  186. Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
  187. page.setSearchCount(false).setOptimizeCountSql(false);//关闭count查询
  188. pageVo.setPageNum(taskStatisticsVo.getPageNum());
  189. pageVo.setPageSize(taskStatisticsVo.getPageSize());
  190. IPage<TaskStatisticsDto> list = this.insAreaCompanyMapper.insuranceCompanyQueryPage(page,taskStatisticsVo);
  191. Long total = this.insAreaCompanyMapper.insuranceCompanyQueryTotal(taskStatisticsVo);
  192. list.setTotal(total);
  193. return list;
  194. }
  195. private String removeTrailingZeros(String value) {
  196. int len = value.length();
  197. int i = len - 1;
  198. // 查找第一个非零字符的位置
  199. while (i >= 0 && value.charAt(i) == '0') {
  200. i--;
  201. }
  202. // 如果所有字符都是0,则返回"0"
  203. if (i < 0) {
  204. return "0";
  205. }
  206. // 使用substring方法获取去除末尾零的子串
  207. return value.substring(0, i + 1);
  208. }
  209. /**
  210. * @description: 代理人统计查询
  211. * @author: whp
  212. * @date: 2024/7/26
  213. **/
  214. @Override
  215. public IPage<TaskStatisticsDto> agentStatisticsQueryPage(TaskStatisticsVo taskStatisticsVo) {
  216. String leaderId = taskStatisticsVo.getLeaderId();
  217. if(com.ydtech.utils.StringUtils.isNotEmpty(leaderId)){
  218. //获取领导人下级所有
  219. List<String> ids = new ArrayList<>();
  220. List<String> userList = this.getUserTreeHx(leaderId, ids);
  221. userList.add(leaderId);
  222. if(userList.size()>0){
  223. taskStatisticsVo.setLeaderIds(userList);
  224. }
  225. }
  226. PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
  227. Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
  228. pageVo.setPageNum(taskStatisticsVo.getPageNum());
  229. pageVo.setPageSize(taskStatisticsVo.getPageSize());
  230. page.setSearchCount(false).setOptimizeCountSql(false);//关闭count查询
  231. if(StringUtils.isNotEmpty(taskStatisticsVo.getDays())){
  232. if("7".equals(taskStatisticsVo.getDays())){
  233. taskStatisticsVo.setDays("2");
  234. } else if ("30".equals(taskStatisticsVo.getDays())) {
  235. taskStatisticsVo.setDays("3");
  236. }
  237. }
  238. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDays(), taskStatisticsVo.getBeginDate(), taskStatisticsVo.getEndDate());
  239. taskStatisticsVo.setBeginDate(dateMapByType.get("startDate"));
  240. taskStatisticsVo.setEndDate(dateMapByType.get("endDate"));
  241. IPage<TaskStatisticsDto> list = this.insAreaCompanyMapper.agentStatisticsQueryPage(page,taskStatisticsVo);
  242. Long total = this.insAreaCompanyMapper.agentStatisticsQueryPageTotal(taskStatisticsVo);
  243. if (list != null && !list.getRecords().isEmpty()) {
  244. List<TaskStatisticsDto> records = list.getRecords();
  245. for (TaskStatisticsDto record : records) {
  246. String deptId = record.getDeptId();
  247. if (StringUtils.isNotEmpty(deptId)) {
  248. int length = deptId.length();
  249. if (length > 0) {
  250. if (length > 0) {
  251. if (length > 10) {
  252. String substring = deptId.substring(0, 6);
  253. String substring1 = deptId.substring(0, 8);
  254. String province = deptId.substring(0, 4);
  255. SysDept cityName = sysDeptService.getById(substring);
  256. SysDept districtName = sysDeptService.getById(substring1);
  257. SysDept provinceName = sysDeptService.getById(province);
  258. SysDept storeDeptName = sysDeptService.getById(deptId);
  259. record.setCityName(cityName.getName());
  260. record.setDistrictName(districtName.getName());
  261. record.setProvinceName(provinceName.getName());
  262. record.setStoreDeptName(storeDeptName.getName());
  263. }
  264. }
  265. }
  266. }
  267. }
  268. }
  269. list.setTotal(total);
  270. return list;
  271. }
  272. /**
  273. * @description: 财务中心-费用校验
  274. * @author: whp
  275. * @date: 2024/7/29
  276. **/
  277. @Override
  278. public IPage<TaskStatisticsDto> costCenter(TaskStatisticsVo taskStatisticsVo) {
  279. if(StringUtils.isNotEmpty(taskStatisticsVo.getDays())){
  280. if("7".equals(taskStatisticsVo.getDays())){
  281. taskStatisticsVo.setDays("2");
  282. } else if ("30".equals(taskStatisticsVo.getDays())) {
  283. taskStatisticsVo.setDays("3");
  284. }
  285. }
  286. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDays(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
  287. taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
  288. taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
  289. PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
  290. Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
  291. pageVo.setPageNum(taskStatisticsVo.getPageNum());
  292. pageVo.setPageSize(taskStatisticsVo.getPageSize());
  293. IPage<TaskStatisticsDto> list = this.insAreaCompanyMapper.costCenter(page,taskStatisticsVo);
  294. return list;
  295. }
  296. /**
  297. * @description: 财务中心-费用校验-明细
  298. * @author: whp
  299. * @date: 2024/10/10
  300. **/
  301. @Override
  302. public IPage<TaskStatisticsDto> costCenterDetails(TaskStatisticsVo taskStatisticsVo) {
  303. if(StringUtils.isNotEmpty(taskStatisticsVo.getDays())){
  304. if("7".equals(taskStatisticsVo.getDays())){
  305. taskStatisticsVo.setDays("2");
  306. } else if ("30".equals(taskStatisticsVo.getDays())) {
  307. taskStatisticsVo.setDays("3");
  308. }
  309. }
  310. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDays(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
  311. taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
  312. taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
  313. PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
  314. Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
  315. pageVo.setPageNum(taskStatisticsVo.getPageNum());
  316. pageVo.setPageSize(taskStatisticsVo.getPageSize());
  317. IPage<TaskStatisticsDto> list = this.insAreaCompanyMapper.costCenterDetails(page,taskStatisticsVo);
  318. return list;
  319. }
  320. /**
  321. * @description: 任务统计-保险公司-导出
  322. * @author: whp
  323. * @date: 2024/9/9
  324. **/
  325. @Override
  326. public HttpResult costCenterDetailsExcel(TaskStatisticsVo taskStatisticsVo) {
  327. if(StringUtils.isNotEmpty(taskStatisticsVo.getDays())){
  328. if("7".equals(taskStatisticsVo.getDays())){
  329. taskStatisticsVo.setDays("2");
  330. } else if ("30".equals(taskStatisticsVo.getDays())) {
  331. taskStatisticsVo.setDays("3");
  332. }
  333. }
  334. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDays(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
  335. taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
  336. taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
  337. List<TaskStatisticsDtoExcel> list = this.insAreaCompanyMapper.costCenterDetailsExcel(taskStatisticsVo);
  338. String uploadPath = this.uploadPath + "/excel/";
  339. Path path = Paths.get(uploadPath);
  340. if (!Files.exists(path)) {
  341. try {
  342. Files.createDirectories(path);
  343. } catch (IOException e) {
  344. e.printStackTrace();
  345. }
  346. }
  347. String fileName = EasyExcelUtils.downExcel(uploadPath, "费用校验审核人导出", TaskStatisticsDtoExcel.class, list);
  348. return HttpResult.ok("", uploadUrl + "excel/" + fileName);
  349. }
  350. /**
  351. * @description: 电销任务统计查询
  352. * @author: whp
  353. * @date: 2024/10/11
  354. **/
  355. @Override
  356. public IPage<TaskStatisticsDto> queryPageElectric(TaskStatisticsVo taskStatisticsVo) {
  357. String leaderId = taskStatisticsVo.getLeaderId();
  358. if(com.ydtech.utils.StringUtils.isNotEmpty(leaderId)){
  359. //获取领导人下级所有
  360. List<String> ids = new ArrayList<>();
  361. List<String> userList = this.getUserTreeHx(leaderId, ids);
  362. userList.add(leaderId);
  363. if(userList.size()>0){
  364. taskStatisticsVo.setLeaderIds(userList);
  365. }
  366. }
  367. PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
  368. Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
  369. page.setSearchCount(false).setOptimizeCountSql(false);//关闭count查询
  370. pageVo.setPageNum(taskStatisticsVo.getPageNum());
  371. pageVo.setPageSize(taskStatisticsVo.getPageSize());
  372. if(StringUtils.isNotEmpty(taskStatisticsVo.getDays())){
  373. if("7".equals(taskStatisticsVo.getDays())){
  374. taskStatisticsVo.setDays("2");
  375. } else if ("30".equals(taskStatisticsVo.getDays())) {
  376. taskStatisticsVo.setDays("3");
  377. }
  378. }
  379. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDays(), taskStatisticsVo.getBeginDate(), taskStatisticsVo.getEndDate());
  380. taskStatisticsVo.setBeginDate(dateMapByType.get("startDate"));
  381. taskStatisticsVo.setEndDate(dateMapByType.get("endDate"));
  382. IPage<TaskStatisticsDto> list = this.insAreaCompanyMapper.queryPageElectric(page,taskStatisticsVo);
  383. if (list != null && !list.getRecords().isEmpty()) {
  384. List<TaskStatisticsDto> records = list.getRecords();
  385. for (TaskStatisticsDto record : records) {
  386. String deptId = record.getDeptId();
  387. if (StringUtils.isNotEmpty(deptId)) {
  388. int length = deptId.length();
  389. if (length > 0) {
  390. if (length > 0) {
  391. if (length > 10) {
  392. String substring = deptId.substring(0, 6);
  393. String substring1 = deptId.substring(0, 8);
  394. String province = deptId.substring(0, 4);
  395. SysDept cityName = sysDeptService.getById(substring);
  396. SysDept districtName = sysDeptService.getById(substring1);
  397. SysDept provinceName = sysDeptService.getById(province);
  398. SysDept storeDeptName = sysDeptService.getById(deptId);
  399. record.setCityName(cityName.getName());
  400. record.setDistrictName(districtName.getName());
  401. record.setProvinceName(provinceName.getName());
  402. record.setStoreDeptName(storeDeptName.getName());
  403. }
  404. }
  405. }
  406. }
  407. }
  408. }
  409. Long total = this.insAreaCompanyMapper.queryPageElectricTotal(taskStatisticsVo);
  410. list.setTotal(total);
  411. return list;
  412. }
  413. /**
  414. * @description: 财务中心-费用校验-明细-查看
  415. * @author: whp
  416. * @date: 2024/10/10
  417. **/
  418. @Override
  419. public TaskStatisticsDtoNew costCenterDetailsLicense(TaskStatisticsVo taskStatisticsVo) {
  420. if(StringUtils.isNotEmpty(taskStatisticsVo.getDays())){
  421. if("7".equals(taskStatisticsVo.getDays())){
  422. taskStatisticsVo.setDays("2");
  423. } else if ("30".equals(taskStatisticsVo.getDays())) {
  424. taskStatisticsVo.setDays("3");
  425. }
  426. }
  427. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDays(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
  428. taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
  429. taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
  430. PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
  431. Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
  432. pageVo.setPageNum(taskStatisticsVo.getPageNum());
  433. pageVo.setPageSize(taskStatisticsVo.getPageSize());
  434. IPage<TaskStatisticsDto> list = this.insAreaCompanyMapper.costCenterDetailsLicense(page,taskStatisticsVo);
  435. TaskStatisticsDtoNew sumSecond = this.insAreaCompanyMapper.costCenterSecond(taskStatisticsVo);
  436. sumSecond.setPageResult(list);
  437. return sumSecond;
  438. }
  439. /**
  440. * @description: 保险公司统计总报价
  441. * @author: whp
  442. * @date: 2024/8/12
  443. **/
  444. @Override
  445. public IPage<TaskStatisticsDto> totalQuotation(TaskStatisticsVo taskStatisticsVo) {
  446. PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
  447. Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
  448. pageVo.setPageNum(taskStatisticsVo.getPageNum());
  449. pageVo.setPageSize(taskStatisticsVo.getPageSize());
  450. IPage<TaskStatisticsDto> list = this.insAreaCompanyMapper.totalQuotation(page,taskStatisticsVo);
  451. return list;
  452. }
  453. /**
  454. * @description: 控制台-业务数据
  455. * @author: whp
  456. * @date: 2024/8/13
  457. **/
  458. @Override
  459. public IPage<TaskStatisticsDto> getBusinessData(TaskStatisticsVo taskStatisticsVo) {
  460. if(StringUtils.isNotEmpty(taskStatisticsVo.getDays())){
  461. if("7".equals(taskStatisticsVo.getDays())){
  462. taskStatisticsVo.setDateType("2");
  463. } else if ("30".equals(taskStatisticsVo.getDays())) {
  464. taskStatisticsVo.setDateType("3");
  465. } else if ("1".equals(taskStatisticsVo.getDays())){
  466. taskStatisticsVo.setDateType("1");
  467. }
  468. }
  469. if(com.ydtech.utils.StringUtils.isNotEmpty(taskStatisticsVo.getParterProvinceId())){
  470. String provinceId = this.removeTrailingZeros(taskStatisticsVo.getParterProvinceId());
  471. taskStatisticsVo.setParterProvinceId(provinceId);
  472. }
  473. if(com.ydtech.utils.StringUtils.isNotEmpty(taskStatisticsVo.getParterCityId())){
  474. String cityId = this.removeTrailingZeros(taskStatisticsVo.getParterCityId());
  475. taskStatisticsVo.setParterCityId(cityId);
  476. }
  477. if(com.ydtech.utils.StringUtils.isNotEmpty(taskStatisticsVo.getParterCountyId())){
  478. String countyId = this.removeTrailingZeros(taskStatisticsVo.getParterCountyId());
  479. taskStatisticsVo.setParterCountyId(countyId);
  480. }
  481. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDateType(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
  482. taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
  483. taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
  484. PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
  485. Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
  486. pageVo.setPageNum(taskStatisticsVo.getPageNum());
  487. pageVo.setPageSize(taskStatisticsVo.getPageSize());
  488. IPage<TaskStatisticsDto> list = this.insAreaCompanyMapper.getBusinessData(page,taskStatisticsVo);
  489. return list;
  490. }
  491. /**
  492. * @description: 控制台-业务数据-统计
  493. * @author: whp
  494. * @date: 2024/10/12
  495. **/
  496. @Override
  497. public TaskStatisticsDto getCountBusinessData(TaskStatisticsVo taskStatisticsVo) {
  498. if(StringUtils.isNotEmpty(taskStatisticsVo.getDays())){
  499. if("7".equals(taskStatisticsVo.getDays())){
  500. taskStatisticsVo.setDateType("2");
  501. } else if ("30".equals(taskStatisticsVo.getDays())) {
  502. taskStatisticsVo.setDateType("3");
  503. } else if ("1".equals(taskStatisticsVo.getDays())){
  504. taskStatisticsVo.setDateType("1");
  505. }
  506. }
  507. if(com.ydtech.utils.StringUtils.isNotEmpty(taskStatisticsVo.getParterProvinceId())){
  508. String provinceId = this.removeTrailingZeros(taskStatisticsVo.getParterProvinceId());
  509. taskStatisticsVo.setParterProvinceId(provinceId);
  510. }
  511. if(com.ydtech.utils.StringUtils.isNotEmpty(taskStatisticsVo.getParterCityId())){
  512. String cityId = this.removeTrailingZeros(taskStatisticsVo.getParterCityId());
  513. taskStatisticsVo.setParterCityId(cityId);
  514. }
  515. if(com.ydtech.utils.StringUtils.isNotEmpty(taskStatisticsVo.getParterCountyId())){
  516. String countyId = this.removeTrailingZeros(taskStatisticsVo.getParterCountyId());
  517. taskStatisticsVo.setParterCountyId(countyId);
  518. }
  519. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDateType(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
  520. taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
  521. taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
  522. TaskStatisticsDto result = this.insAreaCompanyMapper.getCountBusinessData(taskStatisticsVo);
  523. TaskStatisticsDto userNumberdto = this.insAreaCompanyMapper.getUserNumber(taskStatisticsVo);
  524. if(ObjectUtils.isNotEmpty(userNumberdto)){
  525. BigDecimal userNumber = userNumberdto.getUserNumber();
  526. BigDecimal totalPremium = new BigDecimal(result.getTotalPremium());
  527. BigDecimal resultDivided = totalPremium.divide(userNumber, 2, RoundingMode.HALF_UP); //人均产能
  528. result.setPerCapitaAmount(resultDivided);
  529. result.setUserNumber(userNumberdto.getUserNumber());
  530. }
  531. return result;
  532. }
  533. /**
  534. * @description: 控制台-业务数据 - 保险分布
  535. * @author: whp
  536. * @date: 2024/8/13
  537. **/
  538. @Override
  539. public List<TaskStatisticsDto> getDistribution(TaskStatisticsVo taskStatisticsVo) {
  540. List<TaskStatisticsDto> result = new ArrayList<>();
  541. //0 报价中 1 待核保 2 已核保代缴费 3 已承保 4 核保退回
  542. for (int i = 0; i < 5; i++) {
  543. taskStatisticsVo.setQuotationStatus(i+"");
  544. TaskStatisticsDto taskStatisticsDtoItem = insAreaCompanyMapper.getDistribution(taskStatisticsVo);
  545. if(ObjectUtils.isNotEmpty(taskStatisticsDtoItem)){
  546. taskStatisticsDtoItem.setQuotationStatus(i+"");
  547. result.add(taskStatisticsDtoItem);
  548. }
  549. }
  550. return result;
  551. }
  552. /**
  553. * @description: 任务统计-渠道导出
  554. * @author: whp
  555. * @date: 2024/09/09
  556. **/
  557. @Override
  558. public HttpResult channelExcel(TaskStatisticsVo taskStatisticsVo) {
  559. taskStatisticsVo.setManagementSource("1");
  560. return getHttpResult(taskStatisticsVo);
  561. }
  562. private HttpResult getHttpResult(TaskStatisticsVo taskStatisticsVo) {
  563. List<TaskStatisticsExcel> list = this.insAreaCompanyMapper.channelExcel(taskStatisticsVo);
  564. if (list != null && !list.isEmpty()) {
  565. for (TaskStatisticsExcel record : list) {
  566. String deptId = record.getDeptId();
  567. if (StringUtils.isNotEmpty(deptId)) {
  568. int length = deptId.length();
  569. if (length > 0) {
  570. if (length > 0) {
  571. if (length > 10) {
  572. String substring = deptId.substring(0, 6);
  573. String substring1 = deptId.substring(0, 8);
  574. String province = deptId.substring(0, 4);
  575. SysDept cityName = sysDeptService.getById(substring);
  576. SysDept districtName = sysDeptService.getById(substring1);
  577. SysDept provinceName = sysDeptService.getById(province);
  578. record.setCityName(cityName.getName());
  579. record.setDistrictName(districtName.getName());
  580. record.setProvinceName(provinceName.getName());
  581. }
  582. }
  583. }
  584. }
  585. }
  586. }
  587. String uploadPath = this.uploadPath + "/excel/";
  588. Path path = Paths.get(uploadPath);
  589. if (!Files.exists(path)) {
  590. try {
  591. Files.createDirectories(path);
  592. } catch (IOException e) {
  593. e.printStackTrace();
  594. }
  595. }
  596. String name ="";
  597. if(taskStatisticsVo.getManagementSource().equals("1")){
  598. name="渠道导出";
  599. } else if (taskStatisticsVo.getManagementSource().equals("2")) {
  600. name="代理人导出";
  601. }else {
  602. name="电销导出";
  603. }
  604. String fileName = EasyExcelUtils.downExcel(uploadPath, name, TaskStatisticsExcel.class, list);
  605. return HttpResult.ok("", uploadUrl + "excel/" + fileName);
  606. }
  607. /**
  608. * @description: 任控制台-业务数据-代理人
  609. * @author: whp
  610. * @date: 2024/09/09
  611. **/
  612. @Override
  613. public IPage<BusinessAgentData> getBusinessAgentData(TaskStatisticsVo taskStatisticsVo) {
  614. if(StringUtils.isNotEmpty(taskStatisticsVo.getTreeType()) || "3".equals(taskStatisticsVo.getManagementSource())){
  615. if((StringUtils.isNotEmpty(taskStatisticsVo.getTreeUserId()) && "2".equals(taskStatisticsVo.getTreeType())) ||"3".equals(taskStatisticsVo.getManagementSource()) ){
  616. List<String> userIds=this.getNextLevel(taskStatisticsVo.getTreeUserId());
  617. if(!userIds.isEmpty() && userIds.get(0)!=null){
  618. taskStatisticsVo.setUserIds(userIds);
  619. }else {
  620. taskStatisticsVo.setUserId(taskStatisticsVo.getTreeUserId());
  621. }
  622. }else if (StringUtils.isNotEmpty(taskStatisticsVo.getTreeUserId()) && "1".equals(taskStatisticsVo.getTreeType())){
  623. taskStatisticsVo.setDeptId(taskStatisticsVo.getTreeUserId());
  624. taskStatisticsVo.setTreeUserId(null);
  625. taskStatisticsVo.setUserIds(new ArrayList<>());
  626. }
  627. }
  628. PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
  629. Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
  630. page.setSearchCount(false).setOptimizeCountSql(false);//关闭count查询
  631. pageVo.setPageNum(taskStatisticsVo.getPageNum());
  632. pageVo.setPageSize(taskStatisticsVo.getPageSize());
  633. if(StringUtils.isNotEmpty(taskStatisticsVo.getTreeType()) && (StringUtils.isEmpty(taskStatisticsVo.getTreeUserId()) && StringUtils.isEmpty(taskStatisticsVo.getDeptId()) ) ){
  634. return new Page<>(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageNum());
  635. }
  636. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDateType(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
  637. taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
  638. taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
  639. getDateByType(taskStatisticsVo.getDateType(), taskStatisticsVo);
  640. IPage<BusinessAgentData> list = this.taskStatisticsMapper.getBusinessAgentData(page,taskStatisticsVo);
  641. List<BusinessAgentData> records = list.getRecords();
  642. for (BusinessAgentData record : records) {
  643. this.appendName(record);
  644. if (record.getDistributionAmountRate() == null) {
  645. record.setDistributionAmountRate(new BigDecimal("0.0000"));
  646. }
  647. }
  648. Long total = this.taskStatisticsMapper.getBusinessAgentDataTotal(taskStatisticsVo);
  649. list.setTotal(total);
  650. return list;
  651. }
  652. /**
  653. *
  654. * @param userId
  655. * @return 获取该用户下级所有用户id
  656. */
  657. private List<String> getNextLevel(String userId) {
  658. // 获取系统中的所有用户
  659. LambdaQueryWrapper<SysUser> queryWrapperUser = new LambdaQueryWrapper<>();
  660. queryWrapperUser.eq(SysUser :: getStatus,"1");
  661. queryWrapperUser.notLike(SysUser::getId,"M");
  662. List<SysUser> users = this.sysUserMapper.selectList(queryWrapperUser);
  663. // 创建查询包装器,用于查询指定用户ID的用
  664. LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>();
  665. queryWrapper.eq(SysUser::getId, userId);
  666. // 查询指定用户ID的用户,即第一级下属
  667. List<SysUser> usersLevel1 = this.sysUserMapper.selectList(queryWrapper);
  668. // 用于存储所有下属的ID
  669. List<String> strIds = new ArrayList<>();
  670. // 递归获取第一级下属及其所有下属的ID
  671. findChildren(usersLevel1, users, strIds);
  672. if(!strIds.contains(userId)){
  673. strIds.add(userId);
  674. }
  675. return strIds;
  676. }
  677. /**
  678. *
  679. * @param usersLevel1 即第一级下属
  680. * @param users 所有用户
  681. * @param strIds 用于存储所有下属的ID
  682. */
  683. private void findChildren(List<SysUser> SysUsers, List<SysUser> users, List<String> strIds) {
  684. for (SysUser sysUser : SysUsers) {
  685. List<SysUser> children = new ArrayList<>();
  686. for (SysUser user : users) {
  687. if (sysUser.getId() != null && sysUser.getId().equals(user.getLeaderId())) {
  688. if (!exists(children, user)) {
  689. children.add(user);
  690. strIds.add(user.getId());
  691. }
  692. }
  693. }
  694. sysUser.setChildren(children);
  695. findChildren(children, users, strIds);
  696. }
  697. }
  698. private boolean exists(List<SysUser> sysUsers, SysUser sysUser) {
  699. boolean exist = false;
  700. for (SysUser user : sysUsers) {
  701. if (user.getId().equals(sysUser.getId())) {
  702. exist = true;
  703. }
  704. }
  705. return exist;
  706. }
  707. /**
  708. * @version
  709. * @author: hxl
  710. * @Date: 2024/6/19 11:57
  711. * @Description: 通过时间类型判断
  712. */
  713. private static HashMap<String,String> getDateMapByType(String type, String startDate, String endDate) {
  714. HashMap<String,String> map =new HashMap<>();
  715. String startDateStr="";
  716. String endDateStr="";
  717. if(StringUtils.isNotBlank(startDate) && StringUtils.isNotBlank(endDate)){
  718. startDateStr= StringUtils.isNotBlank(startDate)?startDate+" 00:00:00":null;
  719. endDateStr= StringUtils.isNotBlank(endDate)?endDate+" 23:59:59":null;
  720. }else{
  721. if("1".equals(type)){
  722. // 一月内
  723. startDateStr= SliceUpDateUtil.getBeforeDay(new Date(),2)+" 00:00:00";
  724. endDateStr=SliceUpDateUtil.getBeforeDay(new Date(),0)+" 23:59:59";
  725. }else if("2".equals(type)){
  726. // 三月内
  727. startDateStr=SliceUpDateUtil.getBeforeDay(new Date(),3)+" 00:00:00";
  728. endDateStr=SliceUpDateUtil.getBeforeDay(new Date(),0)+" 23:59:59";
  729. }else if("3".equals(type)){
  730. // 近半年
  731. startDateStr=SliceUpDateUtil.getBeforeDay(new Date(),4)+" 00:00:00";
  732. endDateStr=SliceUpDateUtil.getBeforeDay(new Date(),0)+" 23:59:59";
  733. }
  734. }
  735. map.put("startDate",startDateStr);
  736. map.put("endDate",endDateStr);
  737. return map;
  738. }
  739. /**
  740. * @version
  741. * @author: hxl
  742. * @Date: 2024/6/19 11:57
  743. * @Description: 通过时间类型判断
  744. */
  745. private static HashMap<String,String> getDateMapByTypeNew(String type, String startDate, String endDate) {
  746. HashMap<String,String> map =new HashMap<>();
  747. String startDateStr="";
  748. String endDateStr="";
  749. if(org.apache.commons.lang3.StringUtils.isNotBlank(startDate) && org.apache.commons.lang3.StringUtils.isNotBlank(endDate)){
  750. startDateStr= org.apache.commons.lang3.StringUtils.isNotBlank(startDate)?startDate+" 00:00:00":null;
  751. endDateStr= org.apache.commons.lang3.StringUtils.isNotBlank(endDate)?endDate+" 23:59:59":null;
  752. }else{
  753. if("1".equals(type)){
  754. // 近1天
  755. startDateStr= SliceUpDateUtil.getBeforeDay(new Date(),0)+" 00:00:00";
  756. endDateStr=SliceUpDateUtil.getBeforeDay(new Date(),0)+" 23:59:59";
  757. }else if("2".equals(type)){
  758. // 近7天
  759. startDateStr=SliceUpDateUtil.getBeforeDay(new Date(),1)+" 00:00:00";
  760. endDateStr=SliceUpDateUtil.getBeforeDay(new Date(),0)+" 23:59:59";
  761. }else if("3".equals(type)){
  762. // 近30天
  763. startDateStr=SliceUpDateUtil.getBeforeDay(new Date(),6)+" 00:00:00";
  764. endDateStr=SliceUpDateUtil.getBeforeDay(new Date(),0)+" 23:59:59";
  765. }
  766. }
  767. map.put("startDate",startDateStr);
  768. map.put("endDate",endDateStr);
  769. return map;
  770. }
  771. /**
  772. * @description: 任控制台-业务数据-代理人-合计
  773. * @author: whp
  774. * @date: 2024/09/09
  775. **/
  776. @Override
  777. public BusinessAgentData getBusinessAgentDataTotal(TaskStatisticsVo taskStatisticsVo) {
  778. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDateType(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
  779. taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
  780. taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
  781. getDateByType(taskStatisticsVo.getDateType(), taskStatisticsVo);
  782. if(StringUtils.isNotEmpty(taskStatisticsVo.getTreeType()) || "3".equals(taskStatisticsVo.getManagementSource())){
  783. if((StringUtils.isNotEmpty(taskStatisticsVo.getTreeUserId()) && "2".equals(taskStatisticsVo.getTreeType())) ||"3".equals(taskStatisticsVo.getManagementSource()) ){
  784. List<String> userIds=this.getNextLevel(taskStatisticsVo.getTreeUserId());
  785. if(!userIds.isEmpty() && userIds.get(0)!=null){
  786. taskStatisticsVo.setUserIds(userIds);
  787. }else {
  788. taskStatisticsVo.setUserId(taskStatisticsVo.getTreeUserId());
  789. }
  790. }else if (StringUtils.isNotEmpty(taskStatisticsVo.getTreeUserId()) &&"1".equals(taskStatisticsVo.getTreeType())){
  791. taskStatisticsVo.setDeptId(taskStatisticsVo.getTreeUserId());
  792. taskStatisticsVo.setTreeUserId(null);
  793. taskStatisticsVo.setUserIds(new ArrayList<>());
  794. }
  795. }
  796. if (StringUtils.isNotEmpty(taskStatisticsVo.getTreeType()) && (StringUtils.isEmpty(taskStatisticsVo.getTreeUserId()) && StringUtils.isEmpty(taskStatisticsVo.getDeptId()))) {
  797. return new BusinessAgentData();
  798. }
  799. String deptId = BaseController.getDeptId();
  800. BusinessAgentData result = this.taskStatisticsMapper.getBusinessAgentDataTotalAdd(taskStatisticsVo);
  801. Long total = this.taskStatisticsMapper.getBusinessAgentDataTotal(taskStatisticsVo);
  802. result.setTotalNumber(total.toString());
  803. BigDecimal sumPremium = result.getSumPremium();
  804. BusinessAgentData allsumPremium = this.taskStatisticsMapper.getAllsumPremium(taskStatisticsVo);
  805. if(ObjectUtils.isNotEmpty(sumPremium)){
  806. BigDecimal sumPremium1 = allsumPremium.getSumPremium();
  807. if(sumPremium.compareTo(BigDecimal.ZERO) ==1){
  808. BigDecimal multiply = sumPremium.divide(sumPremium1, 4, BigDecimal.ROUND_DOWN);
  809. result.setSumPremiumProportion(multiply);
  810. }
  811. }else {
  812. result.setSumPremiumProportion(BigDecimal.ZERO);
  813. }
  814. BigDecimal entranceAllFee = result.getEntranceAllFee() != null ? result.getEntranceAllFee() : BigDecimal.ZERO;
  815. BigDecimal exportAllFee = result.getExportAllFee() != null ? result.getExportAllFee() : BigDecimal.ZERO;
  816. BigDecimal subtract = entranceAllFee.subtract(exportAllFee);
  817. result.setDistributionAmount(subtract); //毛利润
  818. if(subtract.compareTo(BigDecimal.ZERO)>0){
  819. BigDecimal resultDivided = subtract.divide(sumPremium, 4, RoundingMode.HALF_UP); //人均产能
  820. result.setDistributionAmountRate(resultDivided);
  821. }else {
  822. result.setDistributionAmountRate(BigDecimal.ZERO);
  823. }
  824. return result;
  825. }
  826. /**
  827. * @description: 任务统计-代理人导出
  828. * @author: whp
  829. * @date: 2024/9/9
  830. **/
  831. @Override
  832. public HttpResult agentExcel(TaskStatisticsVo taskStatisticsVo) {
  833. taskStatisticsVo.setManagementSource("2");
  834. return getHttpResult(taskStatisticsVo);
  835. }
  836. /**
  837. * @description: 任务统计-电销导出
  838. * @author: whp
  839. * @date: 2024/10/29
  840. **/
  841. @Override
  842. public HttpResult electricExcel(TaskStatisticsVo taskStatisticsVo) {
  843. taskStatisticsVo.setManagementSource("3");
  844. return getHttpResult(taskStatisticsVo);
  845. }
  846. /**
  847. * @description: 任务统计-保险公司-导出
  848. * @author: whp
  849. * @date: 2024/9/9
  850. **/
  851. @Override
  852. public HttpResult insuranceCompanyExcel(TaskStatisticsVo taskStatisticsVo) {
  853. if(com.ydtech.utils.StringUtils.isNotEmpty(taskStatisticsVo.getProvinceId())){
  854. String provinceId = this.removeTrailingZeros(taskStatisticsVo.getProvinceId());
  855. taskStatisticsVo.setProvinceId(provinceId);
  856. }
  857. if(com.ydtech.utils.StringUtils.isNotEmpty(taskStatisticsVo.getCityId())){
  858. String cityId = this.removeTrailingZeros(taskStatisticsVo.getCityId());
  859. taskStatisticsVo.setCityId(cityId);
  860. }
  861. if(com.ydtech.utils.StringUtils.isNotEmpty(taskStatisticsVo.getCountyId())){
  862. String countyId = this.removeTrailingZeros(taskStatisticsVo.getCountyId());
  863. taskStatisticsVo.setCountyId(countyId);
  864. }
  865. if(StringUtils.isNotEmpty(taskStatisticsVo.getDays())){
  866. if("7".equals(taskStatisticsVo.getDays())){
  867. taskStatisticsVo.setDays("2");
  868. } else if ("30".equals(taskStatisticsVo.getDays())) {
  869. taskStatisticsVo.setDays("3");
  870. }
  871. }
  872. List<InsuranceCompanyExcel> list = this.insAreaCompanyMapper.insuranceCompanyExcel(taskStatisticsVo);
  873. String uploadPath = this.uploadPath + "/excel/";
  874. Path path = Paths.get(uploadPath);
  875. if (!Files.exists(path)) {
  876. try {
  877. Files.createDirectories(path);
  878. } catch (IOException e) {
  879. e.printStackTrace();
  880. }
  881. }
  882. String fileName = EasyExcelUtils.downExcel(uploadPath, "保险公司导出", InsuranceCompanyExcel.class, list);
  883. return HttpResult.ok("", uploadUrl + "excel/" + fileName);
  884. }
  885. /**
  886. * @description: 任控制台-业务数据-代理人-详情
  887. * @author: whp
  888. * @date: 2024/09/10
  889. **/
  890. @Override
  891. public IPage<BusinessAgentData> getBusinessAgentDataDetails(TaskStatisticsVo taskStatisticsVo) {
  892. HashMap<String, String> dateMapByType = getDateMapByType(taskStatisticsVo.getDateType(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
  893. taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
  894. taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
  895. getDateByType(taskStatisticsVo.getDateType(), taskStatisticsVo);
  896. PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
  897. Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
  898. page.setSearchCount(false).setOptimizeCountSql(false);//关闭count查询
  899. pageVo.setPageNum(taskStatisticsVo.getPageNum());
  900. pageVo.setPageSize(taskStatisticsVo.getPageSize());
  901. IPage<BusinessAgentData> list = this.taskStatisticsMapper.getBusinessAgentDataDetails(page, taskStatisticsVo);
  902. Long total = this.taskStatisticsMapper.getBusinessAgentDataDetailsAdd(taskStatisticsVo);
  903. list.setTotal(total);
  904. return list;
  905. }
  906. /**
  907. *
  908. * @param taskStatisticsVo
  909. * @return 控制台任务统计 渠道代理人详情
  910. */
  911. @Override
  912. public IPage<TaskStatisticsDto> channelAgentDetails(TaskStatisticsVo taskStatisticsVo) {
  913. if(StringUtils.isNotEmpty(taskStatisticsVo.getDays())){
  914. if("7".equals(taskStatisticsVo.getDays())){
  915. taskStatisticsVo.setDays("2");
  916. } else if ("30".equals(taskStatisticsVo.getDays())) {
  917. taskStatisticsVo.setDays("3");
  918. }
  919. }
  920. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDays(), taskStatisticsVo.getBeginDate(), taskStatisticsVo.getEndDate());
  921. taskStatisticsVo.setBeginDate(dateMapByType.get("startDate"));
  922. taskStatisticsVo.setEndDate(dateMapByType.get("endDate"));
  923. PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
  924. Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
  925. pageVo.setPageNum(taskStatisticsVo.getPageNum());
  926. pageVo.setPageSize(taskStatisticsVo.getPageSize());
  927. IPage<TaskStatisticsDto> list = this.taskStatisticsMapper.channelAgentDetails(page,taskStatisticsVo);
  928. return list;
  929. }
  930. /**
  931. * @description: 财务中心-费用校验-合计
  932. * @author: whp
  933. * @date: 2024/9/28
  934. **/
  935. @Override
  936. public HashMap<String, Object> costCenterTotal(TaskStatisticsVo taskStatisticsVo) {
  937. if(StringUtils.isNotEmpty(taskStatisticsVo.getDays())){
  938. if("7".equals(taskStatisticsVo.getDays())){
  939. taskStatisticsVo.setDays("2");
  940. } else if ("30".equals(taskStatisticsVo.getDays())) {
  941. taskStatisticsVo.setDays("3");
  942. }
  943. }
  944. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDays(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
  945. taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
  946. taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
  947. PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
  948. Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
  949. pageVo.setPageNum(taskStatisticsVo.getPageNum());
  950. pageVo.setPageSize(taskStatisticsVo.getPageSize());
  951. HashMap<String,Object> list = this.insAreaCompanyMapper.costCenterTotal(taskStatisticsVo);
  952. return list;
  953. }
  954. private void appendName(BusinessAgentData user) {
  955. StringBuilder stringBuilder = new StringBuilder();
  956. String deptId = user.getDeptId();
  957. if (com.ydtech.utils.StringUtils.isNotEmpty(deptId)) {
  958. int length = deptId.length();
  959. if (length > 0) {
  960. if (length <= 5) {
  961. String dept = deptId.replaceAll("[^\\d]*(\\d+).*", "$1");
  962. SysDept cityName = sysDeptMapper.selectById(dept);
  963. String name = cityName.getName();
  964. stringBuilder.append("(").append(name).append(")");
  965. } else if (length > 5) {
  966. String dept = deptId.replaceAll("[^\\d]*(\\d+).*", "$1");
  967. if (dept.length() < 5) {
  968. SysDept dept1 = sysDeptMapper.selectById(dept);
  969. SysDept cityName = sysDeptMapper.selectById(deptId);
  970. stringBuilder.append(dept1.getName()).append(cityName.getName());
  971. } else {
  972. String deptIdTwo = dept.substring(0, 4);
  973. SysDept dept1 = sysDeptMapper.selectById(deptIdTwo);
  974. SysDept dept2 = sysDeptMapper.selectById(dept);
  975. stringBuilder.append(dept1.getName()).append(dept2.getName());
  976. }
  977. }
  978. user.setDeptName(stringBuilder.toString());
  979. }
  980. }
  981. }
  982. /**
  983. * @description: 任控制台-业务数据-渠道-详情
  984. * @author: hh
  985. * @date: 2024/11/19
  986. **/
  987. @Override
  988. public PageInfo<BusinessOrderData> getBusinessOrderDataDetails(TaskStatisticsVo taskStatisticsVo) {
  989. getDateByType(taskStatisticsVo.getDateType(), taskStatisticsVo);
  990. PageHelper.startPage(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
  991. List<BusinessOrderData> businessOrderList = this.taskStatisticsMapper.getBusinessOrderDataDetails(taskStatisticsVo);
  992. if (!com.ydtech.utils.StringUtils.isNullOrEmpty(businessOrderList) && !businessOrderList.isEmpty()) {
  993. for (BusinessOrderData businessOrderData : businessOrderList) {
  994. BigDecimal entranceAllFee = businessOrderData.getEntranceAllFee() != null ?
  995. businessOrderData.getEntranceAllFee().setScale(2, BigDecimal.ROUND_HALF_UP) : BigDecimal.ZERO;
  996. BigDecimal exportAllFee = businessOrderData.getExportAllFee() != null ? businessOrderData.getExportAllFee() : BigDecimal.ZERO;
  997. BigDecimal distributionAmount = entranceAllFee.subtract(exportAllFee);
  998. businessOrderData.setDistributionAmount(distributionAmount); //毛利润
  999. businessOrderData.setEntranceAllFee(entranceAllFee);
  1000. if(distributionAmount.compareTo(BigDecimal.ZERO) > 0
  1001. && businessOrderData.getSumPremium().compareTo(BigDecimal.ZERO) > 0){
  1002. BigDecimal resultDivided = distributionAmount.divide(businessOrderData.getSumPremium(), 4, RoundingMode.HALF_UP); //人均产能
  1003. businessOrderData.setDistributionAmountRate(resultDivided);
  1004. }else {
  1005. businessOrderData.setDistributionAmountRate(new BigDecimal("0.0000"));
  1006. }
  1007. }
  1008. }
  1009. return new PageInfo<>(businessOrderList);
  1010. }
  1011. /**
  1012. * @description: 任控制台-业务数据-渠道-合计
  1013. * @author: hh
  1014. * @date: 2024/11/19
  1015. **/
  1016. @Override
  1017. public BusinessOrderData getBusinessOrderDataTotal(TaskStatisticsVo taskStatisticsVo) {
  1018. getDateByType(taskStatisticsVo.getDateType(), taskStatisticsVo);
  1019. BusinessOrderData result = this.taskStatisticsMapper.getBusinessOrderDataTotal(taskStatisticsVo);
  1020. if (com.ydtech.utils.StringUtils.isNullOrEmpty(result)) {
  1021. return null;
  1022. }
  1023. BigDecimal sumPremium = result.getSumPremium();
  1024. BusinessAgentData allsumPremium = this.taskStatisticsMapper.getAllsumPremium(taskStatisticsVo);
  1025. if (ObjectUtils.isNotEmpty(sumPremium)) {
  1026. BigDecimal allSumPremium = allsumPremium.getSumPremium();
  1027. if (sumPremium.compareTo(BigDecimal.ZERO) == 1 && allSumPremium.compareTo(BigDecimal.ZERO) > 0) {
  1028. BigDecimal multiply = sumPremium.divide(allSumPremium, 4, BigDecimal.ROUND_DOWN);
  1029. result.setSumPremiumProportion(multiply);
  1030. }
  1031. } else {
  1032. result.setSumPremiumProportion(BigDecimal.ZERO);
  1033. }
  1034. BigDecimal entranceAllFee = result.getEntranceAllFee() != null ? result.getEntranceAllFee() : BigDecimal.ZERO;
  1035. BigDecimal exportAllFee = result.getExportAllFee() != null ? result.getExportAllFee() : BigDecimal.ZERO;
  1036. BigDecimal subtract = entranceAllFee.subtract(exportAllFee);
  1037. result.setDistributionAmount(subtract); //毛利润
  1038. if(subtract.compareTo(BigDecimal.ZERO) > 0 && sumPremium.compareTo(BigDecimal.ZERO) > 0){
  1039. BigDecimal resultDivided = subtract.divide(sumPremium, 4, RoundingMode.HALF_UP); //人均产能
  1040. result.setDistributionAmountRate(resultDivided);
  1041. }else {
  1042. result.setDistributionAmountRate(new BigDecimal("0.0000"));
  1043. }
  1044. return result;
  1045. }
  1046. /**
  1047. * @version
  1048. * @author: hh
  1049. * @Date: 2024/11/19
  1050. * @Description: 通过时间类型判断
  1051. */
  1052. private static void getDateByType(String type, TaskStatisticsVo taskStatisticsVo) {
  1053. String startDateStr = new String();
  1054. String endDateStr = new String();
  1055. if (StringUtils.isNotEmpty(type)) {
  1056. switch (type) {
  1057. case "1" : startDateStr = SliceUpDateUtil.getBeforeDay(new Date(),0) + " 00:00:00";
  1058. endDateStr = SliceUpDateUtil.getBeforeDay(new Date(),0) + " 23:59:59";
  1059. break;
  1060. case "2" : startDateStr = SliceUpDateUtil.getBeforeDay(new Date(),1) + " 00:00:00";
  1061. endDateStr = SliceUpDateUtil.getBeforeDay(new Date(),0) + " 23:59:59";
  1062. break;
  1063. case "3" : startDateStr = SliceUpDateUtil.getBeforeDay(new Date(),6) + " 00:00:00";
  1064. endDateStr = SliceUpDateUtil.getBeforeDay(new Date(),0) + " 23:59:59";
  1065. break;
  1066. }
  1067. if (StringUtils.isNotEmpty(taskStatisticsVo.getTimeType())) {
  1068. switch (taskStatisticsVo.getTimeType()) {
  1069. case "1" : taskStatisticsVo.setEnterTimeStart(startDateStr);
  1070. taskStatisticsVo.setEnterTimeEnd(endDateStr);
  1071. break;
  1072. case "2" : taskStatisticsVo.setSigningTimeStart(startDateStr);
  1073. taskStatisticsVo.setSigningTimeEnd(endDateStr);
  1074. break;
  1075. }
  1076. }
  1077. }
  1078. }
  1079. }