TaskStatisticsServiceImpl.java 74 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574
  1. package com.ydtech.modules.admin.service.impl;
  2. import cn.hutool.core.bean.BeanUtil;
  3. import com.alibaba.excel.annotation.ExcelProperty;
  4. import com.alibaba.fastjson.JSONObject;
  5. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  6. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  7. import com.baomidou.mybatisplus.core.metadata.IPage;
  8. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  9. import com.github.pagehelper.PageHelper;
  10. import com.github.pagehelper.PageInfo;
  11. import com.ydtech.core.page.HttpResult;
  12. import com.ydtech.core.page.PageRequest;
  13. import com.ydtech.exception.SystemException;
  14. import com.ydtech.modules.admin.dao.SysAmountAuditingMapper;
  15. import com.ydtech.modules.admin.dao.SysDeptMapper;
  16. import com.ydtech.modules.admin.dao.SysUserMapper;
  17. import com.ydtech.modules.admin.dao.TaskStatisticsMapper;
  18. import com.ydtech.modules.admin.model.SysDept;
  19. import com.ydtech.modules.admin.model.SysUser;
  20. import com.ydtech.modules.admin.model.dto.*;
  21. import com.ydtech.modules.admin.model.vo.BusinessAgentData;
  22. import com.ydtech.modules.admin.model.vo.BusinessOrderData;
  23. import com.ydtech.modules.admin.model.vo.SysUserPartner;
  24. import com.ydtech.modules.admin.model.vo.TaskStatisticsVo;
  25. import com.ydtech.modules.admin.service.SysDeptService;
  26. import com.ydtech.modules.admin.service.TaskStatisticsService;
  27. import com.ydtech.modules.admin.utils.SliceUpDateUtil;
  28. import com.ydtech.modules.base.controller.BaseController;
  29. import com.ydtech.modules.base.model.vo.PageVo;
  30. import com.ydtech.modules.inv.utils.EasyExcelUtils;
  31. import com.ydtech.modules.order.dao.InsAreaCompanyMapper;
  32. import com.ydtech.modules.order.dao.InsOrdersMapper;
  33. import org.apache.commons.lang3.ObjectUtils;
  34. import org.apache.commons.lang3.StringUtils;
  35. import org.springframework.beans.BeanUtils;
  36. import org.springframework.beans.factory.annotation.Autowired;
  37. import org.springframework.beans.factory.annotation.Value;
  38. import org.springframework.stereotype.Service;
  39. import org.springframework.util.CollectionUtils;
  40. import java.io.File;
  41. import java.io.IOException;
  42. import java.math.BigDecimal;
  43. import java.math.RoundingMode;
  44. import java.nio.file.Files;
  45. import java.nio.file.Path;
  46. import java.nio.file.Paths;
  47. import java.text.DecimalFormat;
  48. import java.util.ArrayList;
  49. import java.util.Date;
  50. import java.util.HashMap;
  51. import java.util.List;
  52. import java.util.stream.Collectors;
  53. import static com.baomidou.mybatisplus.extension.toolkit.Db.list;
  54. /**
  55. * @description: 任务统计
  56. * @author: whp
  57. * @date: 2024/7/25
  58. **/
  59. @Service
  60. public class TaskStatisticsServiceImpl implements TaskStatisticsService {
  61. @Autowired
  62. private InsAreaCompanyMapper insAreaCompanyMapper;
  63. @Autowired
  64. private SysAmountAuditingMapper sysAmountAuditingMapper;
  65. @Autowired
  66. private InsOrdersMapper insOrdersMapper;
  67. @Autowired
  68. private TaskStatisticsMapper taskStatisticsMapper;
  69. @Autowired
  70. private SysDeptService sysDeptService;
  71. @Autowired
  72. private SysUserMapper sysUserMapper;
  73. @Autowired
  74. private SysDeptMapper sysDeptMapper;
  75. @Value("${upload.file.path}")
  76. private String uploadPath;
  77. @Value("${upload.file.url}")
  78. private String uploadUrl;
  79. /**
  80. * @description: 渠道任务统计查询
  81. * @author: whp
  82. * @date: 2024/7/25
  83. **/
  84. @Override
  85. public IPage<TaskStatisticsDto> queryPage(TaskStatisticsVo taskStatisticsVo) {
  86. String leaderId = taskStatisticsVo.getLeaderId();
  87. if(com.ydtech.utils.StringUtils.isNotEmpty(leaderId)){
  88. //获取领导人下级所有
  89. List<String> ids = new ArrayList<>();
  90. List<String> userList = this.getUserTreeHx(leaderId, ids);
  91. userList.add(leaderId);
  92. if(userList.size()>0){
  93. taskStatisticsVo.setLeaderIds(userList);
  94. }
  95. }
  96. PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
  97. Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
  98. page.setSearchCount(false).setOptimizeCountSql(false);//关闭count查询
  99. pageVo.setPageNum(taskStatisticsVo.getPageNum());
  100. pageVo.setPageSize(taskStatisticsVo.getPageSize());
  101. if(StringUtils.isNotEmpty(taskStatisticsVo.getDays())){
  102. if("7".equals(taskStatisticsVo.getDays())){
  103. taskStatisticsVo.setDays("2");
  104. } else if ("30".equals(taskStatisticsVo.getDays())) {
  105. taskStatisticsVo.setDays("3");
  106. }
  107. }
  108. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDays(), taskStatisticsVo.getBeginDate(), taskStatisticsVo.getEndDate());
  109. taskStatisticsVo.setBeginDate(dateMapByType.get("startDate"));
  110. taskStatisticsVo.setEndDate(dateMapByType.get("endDate"));
  111. IPage<TaskStatisticsDto> list = this.insAreaCompanyMapper.queryPageTaskStatistics(page,taskStatisticsVo);
  112. Long total = this.insAreaCompanyMapper.queryPageTaskStatisticsTotal(taskStatisticsVo);
  113. if (list != null && !list.getRecords().isEmpty()) {
  114. List<TaskStatisticsDto> records = list.getRecords();
  115. for (TaskStatisticsDto record : records) {
  116. String deptId = record.getDeptId();
  117. if (StringUtils.isNotEmpty(deptId)) {
  118. int length = deptId.length();
  119. if (length > 0) {
  120. if (length > 0) {
  121. if (length > 10) {
  122. String substring = deptId.substring(0, 6);
  123. String substring1 = deptId.substring(0, 8);
  124. String province = deptId.substring(0, 4);
  125. SysDept cityName = sysDeptService.getById(substring);
  126. SysDept districtName = sysDeptService.getById(substring1);
  127. SysDept provinceName = sysDeptService.getById(province);
  128. SysDept storeDeptName = sysDeptService.getById(deptId);
  129. record.setCityName(cityName.getName());
  130. record.setDistrictName(districtName.getName());
  131. record.setProvinceName(provinceName.getName());
  132. record.setStoreDeptName(storeDeptName.getName());
  133. }
  134. }
  135. }
  136. }
  137. taskStatisticsVo.setUserId(record.getUserId());
  138. HashMap<String,Object> sumEntryStatus = this.insAreaCompanyMapper.getSumEntryStatus(taskStatisticsVo);
  139. if(!sumEntryStatus.isEmpty()){
  140. String entryStatus = sumEntryStatus.get("entryStatus").toString();
  141. String outStatus = sumEntryStatus.get("outStatus").toString();
  142. record.setSumEntryStatus(entryStatus);
  143. record.setOutStatus(outStatus);
  144. }
  145. taskStatisticsVo.setUserId(null);
  146. }
  147. }
  148. list.setTotal(total);
  149. return list;
  150. }
  151. @Override
  152. public HttpResult ordersDetailsExcel(TaskStatisticsVo taskStatisticsVo) {
  153. String leaderId = taskStatisticsVo.getLeaderId();
  154. if(com.ydtech.utils.StringUtils.isNotEmpty(leaderId)){
  155. //获取领导人下级所有
  156. List<String> ids = new ArrayList<>();
  157. List<String> userList = this.getUserTreeHx(leaderId, ids);
  158. userList.add(leaderId);
  159. if(userList.size()>0){
  160. taskStatisticsVo.setLeaderIds(userList);
  161. }
  162. }
  163. PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
  164. Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
  165. page.setSearchCount(false).setOptimizeCountSql(false);//关闭count查询
  166. pageVo.setPageNum(taskStatisticsVo.getPageNum());
  167. pageVo.setPageSize(taskStatisticsVo.getPageSize());
  168. if(StringUtils.isNotEmpty(taskStatisticsVo.getDays())){
  169. if("7".equals(taskStatisticsVo.getDays())){
  170. taskStatisticsVo.setDays("2");
  171. } else if ("30".equals(taskStatisticsVo.getDays())) {
  172. taskStatisticsVo.setDays("3");
  173. }
  174. }
  175. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDays(), taskStatisticsVo.getBeginDate(), taskStatisticsVo.getEndDate());
  176. taskStatisticsVo.setBeginDate(dateMapByType.get("startDate"));
  177. taskStatisticsVo.setEndDate(dateMapByType.get("endDate"));
  178. List<OrdersDetailsExcel> list = taskStatisticsMapper.ordersDetailsExcel(taskStatisticsVo);
  179. this.saveTranslate(list);
  180. String uploadPath = this.uploadPath + "/excel/";
  181. Path path = Paths.get(uploadPath);
  182. if (!Files.exists(path)) {
  183. try {
  184. Files.createDirectories(path);
  185. } catch (IOException e) {
  186. e.printStackTrace();
  187. }
  188. }
  189. String fileName = EasyExcelUtils.downExcel(uploadPath, "任务明细导出", OrdersDetailsExcel.class, list);
  190. return HttpResult.ok("", uploadUrl + "excel/" + fileName);
  191. }
  192. private void saveTranslate(List<OrdersDetailsExcel> list) {
  193. for (OrdersDetailsExcel ordersDetailsExcel : list) {
  194. if(StringUtils.isNotEmpty(ordersDetailsExcel.getOrderSource())){
  195. if("1".equals(ordersDetailsExcel.getOrderSource()) && "0".equals(ordersDetailsExcel.getOrderstatus()) ){
  196. ordersDetailsExcel.setOrderSource("app报价");
  197. }
  198. if("0".equals(ordersDetailsExcel.getOrderSource()) && "0".equals(ordersDetailsExcel.getOrderstatus())){
  199. ordersDetailsExcel.setOrderSource("pc报价");
  200. }
  201. }
  202. if (StringUtils.isNotEmpty(ordersDetailsExcel.getOrderstatus())) {
  203. if("0".equals(ordersDetailsExcel.getOrderstatus())){
  204. ordersDetailsExcel.setOrderstatus("报价完成");
  205. }
  206. if("1".equals(ordersDetailsExcel.getOrderstatus())){
  207. ordersDetailsExcel.setOrderstatus("待核保");
  208. }
  209. if("2".equals(ordersDetailsExcel.getOrderstatus())){
  210. ordersDetailsExcel.setOrderstatus("已核保待缴费");
  211. }
  212. if("3".equals(ordersDetailsExcel.getOrderstatus())){
  213. ordersDetailsExcel.setOrderstatus("已承保");
  214. }
  215. if("10".equals(ordersDetailsExcel.getOrderstatus())){
  216. ordersDetailsExcel.setOrderstatus("报价失败");
  217. }
  218. if("11".equals(ordersDetailsExcel.getOrderstatus())){
  219. ordersDetailsExcel.setOrderstatus("重复投保");
  220. }
  221. if("4".equals(ordersDetailsExcel.getOrderstatus())){
  222. ordersDetailsExcel.setOrderstatus("核保退回");
  223. }
  224. }
  225. if(StringUtils.isNotEmpty(ordersDetailsExcel.getEntryStatus())){
  226. if("1".equals(ordersDetailsExcel.getEntryStatus())){
  227. ordersDetailsExcel.setEntryStatus("车险录入");
  228. }
  229. if("2".equals(ordersDetailsExcel.getEntryStatus())){
  230. ordersDetailsExcel.setEntryStatus("待客录单");
  231. }
  232. if("3".equals(ordersDetailsExcel.getEntryStatus())){
  233. ordersDetailsExcel.setEntryStatus("外部订单");
  234. }
  235. }
  236. }
  237. }
  238. private List<String> getUserTreeHx(String leaderId, List<String> ids) {
  239. List<SysUser> sysUsers = sysUserMapper.selectByLeadId(leaderId);
  240. if (!sysUsers.isEmpty()) {
  241. ids.addAll(sysUsers.stream().map(SysUser::getId).collect(Collectors.toList()));
  242. }
  243. for (SysUser sysUser : sysUsers) {
  244. this.getUserTreeHx(sysUser.getId(), ids);
  245. }
  246. return ids;
  247. }
  248. /**
  249. * @description: 保险公司统计查询
  250. * @author: whp
  251. * @date: 2024/7/25
  252. **/
  253. @Override
  254. public IPage<TaskStatisticsDto> insuranceCompanyQueryPage(TaskStatisticsVo taskStatisticsVo) {
  255. if(com.ydtech.utils.StringUtils.isNotEmpty(taskStatisticsVo.getProvinceId())){
  256. String provinceId = this.removeTrailingZeros(taskStatisticsVo.getProvinceId());
  257. taskStatisticsVo.setProvinceId(provinceId);
  258. }
  259. if(com.ydtech.utils.StringUtils.isNotEmpty(taskStatisticsVo.getCityId())){
  260. String cityId = this.removeTrailingZeros(taskStatisticsVo.getCityId());
  261. taskStatisticsVo.setCityId(cityId);
  262. }
  263. if(com.ydtech.utils.StringUtils.isNotEmpty(taskStatisticsVo.getCountyId())){
  264. String countyId = this.removeTrailingZeros(taskStatisticsVo.getCountyId());
  265. taskStatisticsVo.setCountyId(countyId);
  266. }
  267. if(StringUtils.isNotEmpty(taskStatisticsVo.getDays())){
  268. if("7".equals(taskStatisticsVo.getDays())){
  269. taskStatisticsVo.setDays("2");
  270. } else if ("30".equals(taskStatisticsVo.getDays())) {
  271. taskStatisticsVo.setDays("3");
  272. }
  273. }
  274. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDays(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
  275. taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
  276. taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
  277. PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
  278. Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
  279. page.setSearchCount(false).setOptimizeCountSql(false);//关闭count查询
  280. pageVo.setPageNum(taskStatisticsVo.getPageNum());
  281. pageVo.setPageSize(taskStatisticsVo.getPageSize());
  282. IPage<TaskStatisticsDto> list = this.insAreaCompanyMapper.insuranceCompanyQueryPage(page,taskStatisticsVo);
  283. Long total = this.insAreaCompanyMapper.insuranceCompanyQueryTotal(taskStatisticsVo);
  284. list.setTotal(total);
  285. return list;
  286. }
  287. private String removeTrailingZeros(String value) {
  288. int len = value.length();
  289. int i = len - 1;
  290. // 查找第一个非零字符的位置
  291. while (i >= 0 && value.charAt(i) == '0') {
  292. i--;
  293. }
  294. // 如果所有字符都是0,则返回"0"
  295. if (i < 0) {
  296. return "0";
  297. }
  298. // 使用substring方法获取去除末尾零的子串
  299. return value.substring(0, i + 1);
  300. }
  301. /**
  302. * @description: 代理人统计查询
  303. * @author: whp
  304. * @date: 2024/7/26
  305. **/
  306. @Override
  307. public IPage<TaskStatisticsDto> agentStatisticsQueryPage(TaskStatisticsVo taskStatisticsVo) {
  308. String leaderId = taskStatisticsVo.getLeaderId();
  309. if(com.ydtech.utils.StringUtils.isNotEmpty(leaderId)){
  310. //获取领导人下级所有
  311. List<String> ids = new ArrayList<>();
  312. List<String> userList = this.getUserTreeHx(leaderId, ids);
  313. userList.add(leaderId);
  314. if(userList.size()>0){
  315. taskStatisticsVo.setLeaderIds(userList);
  316. }
  317. }
  318. PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
  319. Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
  320. pageVo.setPageNum(taskStatisticsVo.getPageNum());
  321. pageVo.setPageSize(taskStatisticsVo.getPageSize());
  322. page.setSearchCount(false).setOptimizeCountSql(false);//关闭count查询
  323. if(StringUtils.isNotEmpty(taskStatisticsVo.getDays())){
  324. if("7".equals(taskStatisticsVo.getDays())){
  325. taskStatisticsVo.setDays("2");
  326. } else if ("30".equals(taskStatisticsVo.getDays())) {
  327. taskStatisticsVo.setDays("3");
  328. }
  329. }
  330. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDays(), taskStatisticsVo.getBeginDate(), taskStatisticsVo.getEndDate());
  331. taskStatisticsVo.setBeginDate(dateMapByType.get("startDate"));
  332. taskStatisticsVo.setEndDate(dateMapByType.get("endDate"));
  333. IPage<TaskStatisticsDto> list = this.insAreaCompanyMapper.agentStatisticsQueryPage(page,taskStatisticsVo);
  334. Long total = this.insAreaCompanyMapper.agentStatisticsQueryPageTotal(taskStatisticsVo);
  335. if (list != null && !list.getRecords().isEmpty()) {
  336. List<TaskStatisticsDto> records = list.getRecords();
  337. for (TaskStatisticsDto record : records) {
  338. String deptId = record.getDeptId();
  339. if (StringUtils.isNotEmpty(deptId)) {
  340. int length = deptId.length();
  341. if (length > 0) {
  342. if (length > 0) {
  343. if (length > 10) {
  344. String substring = deptId.substring(0, 6);
  345. String substring1 = deptId.substring(0, 8);
  346. String province = deptId.substring(0, 4);
  347. SysDept cityName = sysDeptService.getById(substring);
  348. SysDept districtName = sysDeptService.getById(substring1);
  349. SysDept provinceName = sysDeptService.getById(province);
  350. SysDept storeDeptName = sysDeptService.getById(deptId);
  351. record.setCityName(cityName.getName());
  352. record.setDistrictName(districtName.getName());
  353. record.setProvinceName(provinceName.getName());
  354. record.setStoreDeptName(storeDeptName.getName());
  355. }
  356. }
  357. }
  358. }
  359. }
  360. }
  361. list.setTotal(total);
  362. return list;
  363. }
  364. /**
  365. * @description: 财务中心-费用校验
  366. * @author: whp
  367. * @date: 2024/7/29
  368. **/
  369. @Override
  370. public IPage<TaskStatisticsDto> costCenter(TaskStatisticsVo taskStatisticsVo) {
  371. if(StringUtils.isNotEmpty(taskStatisticsVo.getDays())){
  372. if("7".equals(taskStatisticsVo.getDays())){
  373. taskStatisticsVo.setDays("2");
  374. } else if ("30".equals(taskStatisticsVo.getDays())) {
  375. taskStatisticsVo.setDays("3");
  376. }
  377. }
  378. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDays(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
  379. taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
  380. taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
  381. PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
  382. Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
  383. pageVo.setPageNum(taskStatisticsVo.getPageNum());
  384. pageVo.setPageSize(taskStatisticsVo.getPageSize());
  385. IPage<TaskStatisticsDto> list = this.insAreaCompanyMapper.costCenter(page,taskStatisticsVo);
  386. return list;
  387. }
  388. /**
  389. * @description: 财务中心-费用校验-明细
  390. * @author: whp
  391. * @date: 2024/10/10
  392. **/
  393. @Override
  394. public IPage<TaskStatisticsDto> costCenterDetails(TaskStatisticsVo taskStatisticsVo) {
  395. if(StringUtils.isNotEmpty(taskStatisticsVo.getDays())){
  396. if("7".equals(taskStatisticsVo.getDays())){
  397. taskStatisticsVo.setDays("2");
  398. } else if ("30".equals(taskStatisticsVo.getDays())) {
  399. taskStatisticsVo.setDays("3");
  400. }
  401. }
  402. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDays(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
  403. taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
  404. taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
  405. PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
  406. Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
  407. pageVo.setPageNum(taskStatisticsVo.getPageNum());
  408. pageVo.setPageSize(taskStatisticsVo.getPageSize());
  409. IPage<TaskStatisticsDto> list = this.insAreaCompanyMapper.costCenterDetails(page,taskStatisticsVo);
  410. return list;
  411. }
  412. /**
  413. * @description: 任务统计-保险公司-导出
  414. * @author: whp
  415. * @date: 2024/9/9
  416. **/
  417. @Override
  418. public HttpResult costCenterDetailsExcel(TaskStatisticsVo taskStatisticsVo) {
  419. if(StringUtils.isNotEmpty(taskStatisticsVo.getDays())){
  420. if("7".equals(taskStatisticsVo.getDays())){
  421. taskStatisticsVo.setDays("2");
  422. } else if ("30".equals(taskStatisticsVo.getDays())) {
  423. taskStatisticsVo.setDays("3");
  424. }
  425. }
  426. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDays(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
  427. taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
  428. taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
  429. List<TaskStatisticsDtoExcel> list = this.insAreaCompanyMapper.costCenterDetailsExcel(taskStatisticsVo);
  430. String uploadPath = this.uploadPath + "/excel/";
  431. Path path = Paths.get(uploadPath);
  432. if (!Files.exists(path)) {
  433. try {
  434. Files.createDirectories(path);
  435. } catch (IOException e) {
  436. e.printStackTrace();
  437. }
  438. }
  439. String fileName = EasyExcelUtils.downExcel(uploadPath, "费用校验审核人导出", TaskStatisticsDtoExcel.class, list);
  440. return HttpResult.ok("", uploadUrl + "excel/" + fileName);
  441. }
  442. /**
  443. * @description: 电销任务统计查询
  444. * @author: whp
  445. * @date: 2024/10/11
  446. **/
  447. @Override
  448. public IPage<TaskStatisticsDto> queryPageElectric(TaskStatisticsVo taskStatisticsVo) {
  449. String leaderId = taskStatisticsVo.getLeaderId();
  450. if(com.ydtech.utils.StringUtils.isNotEmpty(leaderId)){
  451. //获取领导人下级所有
  452. List<String> ids = new ArrayList<>();
  453. List<String> userList = this.getUserTreeHx(leaderId, ids);
  454. userList.add(leaderId);
  455. if(userList.size()>0){
  456. taskStatisticsVo.setLeaderIds(userList);
  457. }
  458. }
  459. PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
  460. Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
  461. page.setSearchCount(false).setOptimizeCountSql(false);//关闭count查询
  462. pageVo.setPageNum(taskStatisticsVo.getPageNum());
  463. pageVo.setPageSize(taskStatisticsVo.getPageSize());
  464. if(StringUtils.isNotEmpty(taskStatisticsVo.getDays())){
  465. if("7".equals(taskStatisticsVo.getDays())){
  466. taskStatisticsVo.setDays("2");
  467. } else if ("30".equals(taskStatisticsVo.getDays())) {
  468. taskStatisticsVo.setDays("3");
  469. }
  470. }
  471. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDays(), taskStatisticsVo.getBeginDate(), taskStatisticsVo.getEndDate());
  472. taskStatisticsVo.setBeginDate(dateMapByType.get("startDate"));
  473. taskStatisticsVo.setEndDate(dateMapByType.get("endDate"));
  474. IPage<TaskStatisticsDto> list = this.insAreaCompanyMapper.queryPageElectric(page,taskStatisticsVo);
  475. if (list != null && !list.getRecords().isEmpty()) {
  476. List<TaskStatisticsDto> records = list.getRecords();
  477. for (TaskStatisticsDto record : records) {
  478. String deptId = record.getDeptId();
  479. if (StringUtils.isNotEmpty(deptId)) {
  480. int length = deptId.length();
  481. if (length > 0) {
  482. if (length > 0) {
  483. if (length > 10) {
  484. String substring = deptId.substring(0, 6);
  485. String substring1 = deptId.substring(0, 8);
  486. String province = deptId.substring(0, 4);
  487. SysDept cityName = sysDeptService.getById(substring);
  488. SysDept districtName = sysDeptService.getById(substring1);
  489. SysDept provinceName = sysDeptService.getById(province);
  490. SysDept storeDeptName = sysDeptService.getById(deptId);
  491. record.setCityName(cityName.getName());
  492. record.setDistrictName(districtName.getName());
  493. record.setProvinceName(provinceName.getName());
  494. record.setStoreDeptName(storeDeptName.getName());
  495. }
  496. }
  497. }
  498. }
  499. }
  500. }
  501. Long total = this.insAreaCompanyMapper.queryPageElectricTotal(taskStatisticsVo);
  502. list.setTotal(total);
  503. return list;
  504. }
  505. /**
  506. * @description: 财务中心-费用校验-明细-查看
  507. * @author: whp
  508. * @date: 2024/10/10
  509. **/
  510. @Override
  511. public TaskStatisticsDtoNew costCenterDetailsLicense(TaskStatisticsVo taskStatisticsVo) {
  512. if(StringUtils.isNotEmpty(taskStatisticsVo.getDays())){
  513. if("7".equals(taskStatisticsVo.getDays())){
  514. taskStatisticsVo.setDays("2");
  515. } else if ("30".equals(taskStatisticsVo.getDays())) {
  516. taskStatisticsVo.setDays("3");
  517. }
  518. }
  519. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDays(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
  520. taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
  521. taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
  522. PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
  523. Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
  524. pageVo.setPageNum(taskStatisticsVo.getPageNum());
  525. pageVo.setPageSize(taskStatisticsVo.getPageSize());
  526. IPage<TaskStatisticsDto> list = this.insAreaCompanyMapper.costCenterDetailsLicense(page,taskStatisticsVo);
  527. TaskStatisticsDtoNew sumSecond = this.insAreaCompanyMapper.costCenterSecond(taskStatisticsVo);
  528. sumSecond.setPageResult(list);
  529. return sumSecond;
  530. }
  531. /**
  532. * @description: 保险公司统计总报价
  533. * @author: whp
  534. * @date: 2024/8/12
  535. **/
  536. @Override
  537. public IPage<TaskStatisticsDto> totalQuotation(TaskStatisticsVo taskStatisticsVo) {
  538. PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
  539. Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
  540. pageVo.setPageNum(taskStatisticsVo.getPageNum());
  541. pageVo.setPageSize(taskStatisticsVo.getPageSize());
  542. IPage<TaskStatisticsDto> list = this.insAreaCompanyMapper.totalQuotation(page,taskStatisticsVo);
  543. return list;
  544. }
  545. /**
  546. * @description: 控制台-业务数据
  547. * @author: whp
  548. * @date: 2024/8/13
  549. **/
  550. @Override
  551. public IPage<TaskStatisticsDto> getBusinessData(TaskStatisticsVo taskStatisticsVo) {
  552. if(StringUtils.isNotEmpty(taskStatisticsVo.getDays())){
  553. if("7".equals(taskStatisticsVo.getDays())){
  554. taskStatisticsVo.setDateType("2");
  555. } else if ("30".equals(taskStatisticsVo.getDays())) {
  556. taskStatisticsVo.setDateType("3");
  557. } else if ("1".equals(taskStatisticsVo.getDays())){
  558. taskStatisticsVo.setDateType("1");
  559. }
  560. }
  561. if(com.ydtech.utils.StringUtils.isNotEmpty(taskStatisticsVo.getParterProvinceId())){
  562. String provinceId = this.removeTrailingZeros(taskStatisticsVo.getParterProvinceId());
  563. taskStatisticsVo.setParterProvinceId(provinceId);
  564. }
  565. if(com.ydtech.utils.StringUtils.isNotEmpty(taskStatisticsVo.getParterCityId())){
  566. String cityId = this.removeTrailingZeros(taskStatisticsVo.getParterCityId());
  567. taskStatisticsVo.setParterCityId(cityId);
  568. }
  569. if(com.ydtech.utils.StringUtils.isNotEmpty(taskStatisticsVo.getParterCountyId())){
  570. String countyId = this.removeTrailingZeros(taskStatisticsVo.getParterCountyId());
  571. taskStatisticsVo.setParterCountyId(countyId);
  572. }
  573. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDateType(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
  574. taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
  575. taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
  576. getDateByType(taskStatisticsVo.getDateType(), taskStatisticsVo);
  577. PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
  578. Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
  579. pageVo.setPageNum(taskStatisticsVo.getPageNum());
  580. pageVo.setPageSize(taskStatisticsVo.getPageSize());
  581. IPage<TaskStatisticsDto> list = this.insAreaCompanyMapper.getBusinessData(page,taskStatisticsVo);
  582. return list;
  583. }
  584. /**
  585. * @description: 控制台-业务数据-统计
  586. * @author: whp
  587. * @date: 2024/10/12
  588. **/
  589. @Override
  590. public TaskStatisticsDto getCountBusinessData(TaskStatisticsVo taskStatisticsVo) {
  591. if(StringUtils.isNotEmpty(taskStatisticsVo.getDays())){
  592. if("7".equals(taskStatisticsVo.getDays())){
  593. taskStatisticsVo.setDateType("2");
  594. } else if ("30".equals(taskStatisticsVo.getDays())) {
  595. taskStatisticsVo.setDateType("3");
  596. } else if ("1".equals(taskStatisticsVo.getDays())){
  597. taskStatisticsVo.setDateType("1");
  598. }
  599. }
  600. if(com.ydtech.utils.StringUtils.isNotEmpty(taskStatisticsVo.getParterProvinceId())){
  601. String provinceId = this.removeTrailingZeros(taskStatisticsVo.getParterProvinceId());
  602. taskStatisticsVo.setParterProvinceId(provinceId);
  603. }
  604. if(com.ydtech.utils.StringUtils.isNotEmpty(taskStatisticsVo.getParterCityId())){
  605. String cityId = this.removeTrailingZeros(taskStatisticsVo.getParterCityId());
  606. taskStatisticsVo.setParterCityId(cityId);
  607. }
  608. if(com.ydtech.utils.StringUtils.isNotEmpty(taskStatisticsVo.getParterCountyId())){
  609. String countyId = this.removeTrailingZeros(taskStatisticsVo.getParterCountyId());
  610. taskStatisticsVo.setParterCountyId(countyId);
  611. }
  612. getDateByType(taskStatisticsVo.getDateType(), taskStatisticsVo);
  613. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDateType(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
  614. taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
  615. taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
  616. TaskStatisticsDto result = this.insAreaCompanyMapper.getCountBusinessData(taskStatisticsVo);
  617. TaskStatisticsDto userNumberdto = this.insAreaCompanyMapper.getUserNumber(taskStatisticsVo);
  618. if(ObjectUtils.isNotEmpty(userNumberdto)){
  619. BigDecimal userNumber = userNumberdto.getUserNumber();
  620. BigDecimal totalPremium = new BigDecimal(result.getTotalPremium());
  621. BigDecimal resultDivided = totalPremium.divide(userNumber, 2, RoundingMode.HALF_UP); //人均产能
  622. result.setPerCapitaAmount(resultDivided);
  623. result.setUserNumber(userNumberdto.getUserNumber());
  624. }
  625. return result;
  626. }
  627. /**
  628. * @description: 控制台-业务数据 - 保险分布
  629. * @author: whp
  630. * @date: 2024/8/13
  631. **/
  632. @Override
  633. public List<TaskStatisticsDto> getDistribution(TaskStatisticsVo taskStatisticsVo) {
  634. if(StringUtils.isNotEmpty(taskStatisticsVo.getDays())){
  635. if("7".equals(taskStatisticsVo.getDays())){
  636. taskStatisticsVo.setDateType("2");
  637. } else if ("30".equals(taskStatisticsVo.getDays())) {
  638. taskStatisticsVo.setDateType("3");
  639. } else if ("1".equals(taskStatisticsVo.getDays())){
  640. taskStatisticsVo.setDateType("1");
  641. }
  642. }
  643. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDateType(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
  644. taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
  645. taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
  646. getDateByType(taskStatisticsVo.getDateType(), taskStatisticsVo);
  647. List<TaskStatisticsDto> result = new ArrayList<>();
  648. //0 报价中 1 待核保 2 已核保代缴费 3 已承保 4 核保退回
  649. for (int i = 0; i < 5; i++) {
  650. taskStatisticsVo.setQuotationStatus(i+"");
  651. TaskStatisticsDto taskStatisticsDtoItem = insAreaCompanyMapper.getDistribution(taskStatisticsVo);
  652. if(ObjectUtils.isNotEmpty(taskStatisticsDtoItem)){
  653. taskStatisticsDtoItem.setQuotationStatus(i+"");
  654. result.add(taskStatisticsDtoItem);
  655. }
  656. }
  657. return result;
  658. }
  659. /**
  660. * @description: 任务统计-渠道导出
  661. * @author: whp
  662. * @date: 2024/09/09
  663. **/
  664. @Override
  665. public HttpResult channelExcel(TaskStatisticsVo taskStatisticsVo) {
  666. taskStatisticsVo.setManagementSource("1");
  667. return getHttpResult(taskStatisticsVo);
  668. }
  669. private HttpResult getHttpResult(TaskStatisticsVo taskStatisticsVo) {
  670. String leaderId = taskStatisticsVo.getLeaderId();
  671. if(com.ydtech.utils.StringUtils.isNotEmpty(leaderId)){
  672. //获取领导人下级所有
  673. List<String> ids = new ArrayList<>();
  674. List<String> userList = this.getUserTreeHx(leaderId, ids);
  675. userList.add(leaderId);
  676. if(userList.size()>0){
  677. taskStatisticsVo.setLeaderIds(userList);
  678. }
  679. }
  680. PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
  681. Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
  682. pageVo.setPageNum(taskStatisticsVo.getPageNum());
  683. pageVo.setPageSize(taskStatisticsVo.getPageSize());
  684. page.setSearchCount(false).setOptimizeCountSql(false);//关闭count查询
  685. if(StringUtils.isNotEmpty(taskStatisticsVo.getDays())){
  686. if("7".equals(taskStatisticsVo.getDays())){
  687. taskStatisticsVo.setDays("2");
  688. } else if ("30".equals(taskStatisticsVo.getDays())) {
  689. taskStatisticsVo.setDays("3");
  690. }
  691. }
  692. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDays(), taskStatisticsVo.getBeginDate(), taskStatisticsVo.getEndDate());
  693. taskStatisticsVo.setBeginDate(dateMapByType.get("startDate"));
  694. taskStatisticsVo.setEndDate(dateMapByType.get("endDate"));
  695. List<TaskStatisticsExcel> list = this.insAreaCompanyMapper.channelExcel(taskStatisticsVo);
  696. if (list != null && !list.isEmpty()) {
  697. for (TaskStatisticsExcel record : list) {
  698. String deptId = record.getDeptId();
  699. if (StringUtils.isNotEmpty(deptId)) {
  700. int length = deptId.length();
  701. if (length > 0) {
  702. if (length > 0) {
  703. if (length > 10) {
  704. String substring = deptId.substring(0, 6);
  705. String substring1 = deptId.substring(0, 8);
  706. String province = deptId.substring(0, 4);
  707. SysDept cityName = sysDeptService.getById(substring);
  708. SysDept districtName = sysDeptService.getById(substring1);
  709. SysDept provinceName = sysDeptService.getById(province);
  710. record.setCityName(cityName.getName());
  711. record.setDistrictName(districtName.getName());
  712. record.setProvinceName(provinceName.getName());
  713. }
  714. }
  715. }
  716. }
  717. }
  718. }
  719. String uploadPath = this.uploadPath + "/excel/";
  720. Path path = Paths.get(uploadPath);
  721. if (!Files.exists(path)) {
  722. try {
  723. Files.createDirectories(path);
  724. } catch (IOException e) {
  725. e.printStackTrace();
  726. }
  727. }
  728. String name ="";
  729. if(taskStatisticsVo.getManagementSource().equals("1")){
  730. name="渠道导出";
  731. } else if (taskStatisticsVo.getManagementSource().equals("2")) {
  732. name="代理人导出";
  733. }else {
  734. name="电销导出";
  735. }
  736. String fileName = EasyExcelUtils.downExcel(uploadPath, name, TaskStatisticsExcel.class, list);
  737. return HttpResult.ok("", uploadUrl + "excel/" + fileName);
  738. }
  739. /**
  740. * @description: 任控制台-业务数据-代理人
  741. * @author: whp
  742. * @date: 2024/09/09
  743. **/
  744. @Override
  745. public IPage<BusinessAgentData> getBusinessAgentData(TaskStatisticsVo taskStatisticsVo) {
  746. if(StringUtils.isNotEmpty(taskStatisticsVo.getTreeType()) ){
  747. if((StringUtils.isNotEmpty(taskStatisticsVo.getTreeUserId()) && "2".equals(taskStatisticsVo.getTreeType()))){
  748. List<String> userIds=this.getNextLevel(taskStatisticsVo.getTreeUserId());
  749. if(!userIds.isEmpty() && userIds.get(0)!=null){
  750. taskStatisticsVo.setUserIds(userIds);
  751. }else {
  752. taskStatisticsVo.setUserId(taskStatisticsVo.getTreeUserId());
  753. }
  754. }else if (StringUtils.isNotEmpty(taskStatisticsVo.getTreeUserId()) && "1".equals(taskStatisticsVo.getTreeType())){
  755. taskStatisticsVo.setDeptId(taskStatisticsVo.getTreeUserId());
  756. taskStatisticsVo.setTreeUserId(null);
  757. taskStatisticsVo.setUserIds(new ArrayList<>());
  758. }
  759. }
  760. PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
  761. Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
  762. page.setSearchCount(false).setOptimizeCountSql(false);//关闭count查询
  763. pageVo.setPageNum(taskStatisticsVo.getPageNum());
  764. pageVo.setPageSize(taskStatisticsVo.getPageSize());
  765. if(StringUtils.isNotEmpty(taskStatisticsVo.getTreeType()) && (StringUtils.isEmpty(taskStatisticsVo.getTreeUserId()) && StringUtils.isEmpty(taskStatisticsVo.getDeptId()) ) ){
  766. return new Page<>(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageNum());
  767. }
  768. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDateType(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
  769. taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
  770. taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
  771. getDateByType(taskStatisticsVo.getDateType(), taskStatisticsVo);
  772. IPage<BusinessAgentData> list = this.taskStatisticsMapper.getBusinessAgentData(page,taskStatisticsVo);
  773. List<BusinessAgentData> records = list.getRecords();
  774. for (BusinessAgentData record : records) {
  775. this.appendName(record);
  776. if (record.getDistributionAmountRate() == null) {
  777. record.setDistributionAmountRate(new BigDecimal("0.0000"));
  778. }
  779. }
  780. Long total = this.taskStatisticsMapper.getBusinessAgentDataTotal(taskStatisticsVo);
  781. list.setTotal(total);
  782. return list;
  783. }
  784. /**
  785. *
  786. * @param userId
  787. * @return 获取该用户下级所有用户id
  788. */
  789. private List<String> getNextLevel(String userId) {
  790. // 获取系统中的所有用户
  791. LambdaQueryWrapper<SysUser> queryWrapperUser = new LambdaQueryWrapper<>();
  792. queryWrapperUser.eq(SysUser :: getStatus,"1");
  793. queryWrapperUser.notLike(SysUser::getId,"M");
  794. List<SysUser> users = this.sysUserMapper.selectList(queryWrapperUser);
  795. // 创建查询包装器,用于查询指定用户ID的用
  796. LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>();
  797. queryWrapper.eq(SysUser::getId, userId);
  798. // 查询指定用户ID的用户,即第一级下属
  799. List<SysUser> usersLevel1 = this.sysUserMapper.selectList(queryWrapper);
  800. // 用于存储所有下属的ID
  801. List<String> strIds = new ArrayList<>();
  802. // 递归获取第一级下属及其所有下属的ID
  803. findChildren(usersLevel1, users, strIds);
  804. if(!strIds.contains(userId)){
  805. strIds.add(userId);
  806. }
  807. return strIds;
  808. }
  809. /**
  810. *
  811. * @param usersLevel1 即第一级下属
  812. * @param users 所有用户
  813. * @param strIds 用于存储所有下属的ID
  814. */
  815. private void findChildren(List<SysUser> SysUsers, List<SysUser> users, List<String> strIds) {
  816. for (SysUser sysUser : SysUsers) {
  817. List<SysUser> children = new ArrayList<>();
  818. for (SysUser user : users) {
  819. if (sysUser.getId() != null && sysUser.getId().equals(user.getLeaderId())) {
  820. if (!exists(children, user)) {
  821. children.add(user);
  822. strIds.add(user.getId());
  823. }
  824. }
  825. }
  826. sysUser.setChildren(children);
  827. findChildren(children, users, strIds);
  828. }
  829. }
  830. private boolean exists(List<SysUser> sysUsers, SysUser sysUser) {
  831. boolean exist = false;
  832. for (SysUser user : sysUsers) {
  833. if (user.getId().equals(sysUser.getId())) {
  834. exist = true;
  835. }
  836. }
  837. return exist;
  838. }
  839. /**
  840. * @version
  841. * @author: hxl
  842. * @Date: 2024/6/19 11:57
  843. * @Description: 通过时间类型判断
  844. */
  845. private static HashMap<String,String> getDateMapByType(String type, String startDate, String endDate) {
  846. HashMap<String,String> map =new HashMap<>();
  847. String startDateStr="";
  848. String endDateStr="";
  849. if(StringUtils.isNotBlank(startDate) && StringUtils.isNotBlank(endDate)){
  850. startDateStr= StringUtils.isNotBlank(startDate)?startDate+" 00:00:00":null;
  851. endDateStr= StringUtils.isNotBlank(endDate)?endDate+" 23:59:59":null;
  852. }else{
  853. if("1".equals(type)){
  854. // 一月内
  855. startDateStr= SliceUpDateUtil.getBeforeDay(new Date(),2)+" 00:00:00";
  856. endDateStr=SliceUpDateUtil.getBeforeDay(new Date(),0)+" 23:59:59";
  857. }else if("2".equals(type)){
  858. // 三月内
  859. startDateStr=SliceUpDateUtil.getBeforeDay(new Date(),3)+" 00:00:00";
  860. endDateStr=SliceUpDateUtil.getBeforeDay(new Date(),0)+" 23:59:59";
  861. }else if("3".equals(type)){
  862. // 近半年
  863. startDateStr=SliceUpDateUtil.getBeforeDay(new Date(),4)+" 00:00:00";
  864. endDateStr=SliceUpDateUtil.getBeforeDay(new Date(),0)+" 23:59:59";
  865. }
  866. }
  867. map.put("startDate",startDateStr);
  868. map.put("endDate",endDateStr);
  869. return map;
  870. }
  871. /**
  872. * @version
  873. * @author: hxl
  874. * @Date: 2024/6/19 11:57
  875. * @Description: 通过时间类型判断
  876. */
  877. private static HashMap<String,String> getDateMapByTypeNew(String type, String startDate, String endDate) {
  878. HashMap<String,String> map =new HashMap<>();
  879. String startDateStr="";
  880. String endDateStr="";
  881. if(org.apache.commons.lang3.StringUtils.isNotBlank(startDate) && org.apache.commons.lang3.StringUtils.isNotBlank(endDate)){
  882. startDateStr= org.apache.commons.lang3.StringUtils.isNotBlank(startDate)?startDate+" 00:00:00":null;
  883. endDateStr= org.apache.commons.lang3.StringUtils.isNotBlank(endDate)?endDate+" 23:59:59":null;
  884. }else{
  885. if("1".equals(type)){
  886. // 近1天
  887. startDateStr= SliceUpDateUtil.getBeforeDay(new Date(),0)+" 00:00:00";
  888. endDateStr=SliceUpDateUtil.getBeforeDay(new Date(),0)+" 23:59:59";
  889. }else if("2".equals(type)){
  890. // 近7天
  891. startDateStr=SliceUpDateUtil.getBeforeDay(new Date(),1)+" 00:00:00";
  892. endDateStr=SliceUpDateUtil.getBeforeDay(new Date(),0)+" 23:59:59";
  893. }else if("3".equals(type)){
  894. // 近30天
  895. startDateStr=SliceUpDateUtil.getBeforeDay(new Date(),6)+" 00:00:00";
  896. endDateStr=SliceUpDateUtil.getBeforeDay(new Date(),0)+" 23:59:59";
  897. }
  898. }
  899. map.put("startDate",startDateStr);
  900. map.put("endDate",endDateStr);
  901. return map;
  902. }
  903. /**
  904. * @description: 任控制台-业务数据-代理人-合计
  905. * @author: whp
  906. * @date: 2024/09/09
  907. **/
  908. @Override
  909. public BusinessAgentData getBusinessAgentDataTotal(TaskStatisticsVo taskStatisticsVo) {
  910. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDateType(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
  911. taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
  912. taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
  913. getDateByType(taskStatisticsVo.getDateType(), taskStatisticsVo);
  914. if(StringUtils.isNotEmpty(taskStatisticsVo.getTreeType()) || "3".equals(taskStatisticsVo.getManagementSource())){
  915. if((StringUtils.isNotEmpty(taskStatisticsVo.getTreeUserId()) && "2".equals(taskStatisticsVo.getTreeType()))){
  916. List<String> userIds=this.getNextLevel(taskStatisticsVo.getTreeUserId());
  917. if(!userIds.isEmpty() && userIds.get(0)!=null){
  918. taskStatisticsVo.setUserIds(userIds);
  919. }else {
  920. taskStatisticsVo.setUserId(taskStatisticsVo.getTreeUserId());
  921. }
  922. }else if (StringUtils.isNotEmpty(taskStatisticsVo.getTreeUserId()) &&"1".equals(taskStatisticsVo.getTreeType())){
  923. taskStatisticsVo.setDeptId(taskStatisticsVo.getTreeUserId());
  924. taskStatisticsVo.setTreeUserId(null);
  925. taskStatisticsVo.setUserIds(new ArrayList<>());
  926. }
  927. }
  928. if (StringUtils.isNotEmpty(taskStatisticsVo.getTreeType()) && (StringUtils.isEmpty(taskStatisticsVo.getTreeUserId()) && StringUtils.isEmpty(taskStatisticsVo.getDeptId()))) {
  929. return new BusinessAgentData();
  930. }
  931. String deptId = BaseController.getDeptId();
  932. BusinessAgentData result = this.taskStatisticsMapper.getBusinessAgentDataTotalAdd(taskStatisticsVo);
  933. Long total = this.taskStatisticsMapper.getBusinessAgentDataTotal(taskStatisticsVo);
  934. result.setTotalNumber(total.toString());
  935. BigDecimal sumPremium = result.getSumPremium();
  936. BusinessAgentData allsumPremium = this.taskStatisticsMapper.getAllsumPremium(taskStatisticsVo);
  937. if(ObjectUtils.isNotEmpty(sumPremium)){
  938. BigDecimal sumPremium1 = allsumPremium.getSumPremium();
  939. if(sumPremium.compareTo(BigDecimal.ZERO) ==1){
  940. BigDecimal multiply = sumPremium.divide(sumPremium1, 4, BigDecimal.ROUND_DOWN);
  941. result.setSumPremiumProportion(multiply);
  942. }
  943. }else {
  944. result.setSumPremiumProportion(BigDecimal.ZERO);
  945. }
  946. BigDecimal entranceAllFee = result.getEntranceAllFee() != null ? result.getEntranceAllFee() : BigDecimal.ZERO;
  947. BigDecimal exportAllFee = result.getExportAllFee() != null ? result.getExportAllFee() : BigDecimal.ZERO;
  948. BigDecimal subtract = entranceAllFee.subtract(exportAllFee);
  949. result.setDistributionAmount(subtract); //毛利润
  950. if(subtract.compareTo(BigDecimal.ZERO)>0){
  951. BigDecimal resultDivided = subtract.divide(sumPremium, 4, RoundingMode.HALF_UP); //人均产能
  952. result.setDistributionAmountRate(resultDivided);
  953. }else {
  954. result.setDistributionAmountRate(BigDecimal.ZERO);
  955. }
  956. return result;
  957. }
  958. /**
  959. * @description: 任务统计-代理人导出
  960. * @author: whp
  961. * @date: 2024/9/9
  962. **/
  963. @Override
  964. public HttpResult agentExcel(TaskStatisticsVo taskStatisticsVo) {
  965. taskStatisticsVo.setManagementSource("2");
  966. return getHttpResult(taskStatisticsVo);
  967. }
  968. /**
  969. * @description: 任务统计-电销导出
  970. * @author: whp
  971. * @date: 2024/10/29
  972. **/
  973. @Override
  974. public HttpResult electricExcel(TaskStatisticsVo taskStatisticsVo) {
  975. taskStatisticsVo.setManagementSource("3");
  976. return getHttpResult(taskStatisticsVo);
  977. }
  978. /**
  979. * @description: 任务统计-保险公司-导出
  980. * @author: whp
  981. * @date: 2024/9/9
  982. **/
  983. @Override
  984. public HttpResult insuranceCompanyExcel(TaskStatisticsVo taskStatisticsVo) {
  985. if(com.ydtech.utils.StringUtils.isNotEmpty(taskStatisticsVo.getProvinceId())){
  986. String provinceId = this.removeTrailingZeros(taskStatisticsVo.getProvinceId());
  987. taskStatisticsVo.setProvinceId(provinceId);
  988. }
  989. if(com.ydtech.utils.StringUtils.isNotEmpty(taskStatisticsVo.getCityId())){
  990. String cityId = this.removeTrailingZeros(taskStatisticsVo.getCityId());
  991. taskStatisticsVo.setCityId(cityId);
  992. }
  993. if(com.ydtech.utils.StringUtils.isNotEmpty(taskStatisticsVo.getCountyId())){
  994. String countyId = this.removeTrailingZeros(taskStatisticsVo.getCountyId());
  995. taskStatisticsVo.setCountyId(countyId);
  996. }
  997. if(StringUtils.isNotEmpty(taskStatisticsVo.getDays())){
  998. if("7".equals(taskStatisticsVo.getDays())){
  999. taskStatisticsVo.setDays("2");
  1000. } else if ("30".equals(taskStatisticsVo.getDays())) {
  1001. taskStatisticsVo.setDays("3");
  1002. }
  1003. }
  1004. List<InsuranceCompanyExcel> list = this.insAreaCompanyMapper.insuranceCompanyExcel(taskStatisticsVo);
  1005. String uploadPath = this.uploadPath + "/excel/";
  1006. Path path = Paths.get(uploadPath);
  1007. if (!Files.exists(path)) {
  1008. try {
  1009. Files.createDirectories(path);
  1010. } catch (IOException e) {
  1011. e.printStackTrace();
  1012. }
  1013. }
  1014. String fileName = EasyExcelUtils.downExcel(uploadPath, "保险公司导出", InsuranceCompanyExcel.class, list);
  1015. return HttpResult.ok("", uploadUrl + "excel/" + fileName);
  1016. }
  1017. /**
  1018. * @description: 任控制台-业务数据-代理人-详情
  1019. * @author: whp
  1020. * @date: 2024/09/10
  1021. **/
  1022. @Override
  1023. public IPage<BusinessAgentData> getBusinessAgentDataDetails(TaskStatisticsVo taskStatisticsVo) {
  1024. HashMap<String, String> dateMapByType = getDateMapByType(taskStatisticsVo.getDateType(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
  1025. taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
  1026. taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
  1027. getDateByType(taskStatisticsVo.getDateType(), taskStatisticsVo);
  1028. PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
  1029. Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
  1030. page.setSearchCount(false).setOptimizeCountSql(false);//关闭count查询
  1031. pageVo.setPageNum(taskStatisticsVo.getPageNum());
  1032. pageVo.setPageSize(taskStatisticsVo.getPageSize());
  1033. IPage<BusinessAgentData> list = this.taskStatisticsMapper.getBusinessAgentDataDetails(page, taskStatisticsVo);
  1034. Long total = this.taskStatisticsMapper.getBusinessAgentDataDetailsAdd(taskStatisticsVo);
  1035. list.setTotal(total);
  1036. return list;
  1037. }
  1038. /**
  1039. *
  1040. * @param taskStatisticsVo
  1041. * @return 控制台任务统计 渠道代理人详情
  1042. */
  1043. @Override
  1044. public IPage<TaskStatisticsDto> channelAgentDetails(TaskStatisticsVo taskStatisticsVo) {
  1045. if(StringUtils.isNotEmpty(taskStatisticsVo.getDays())){
  1046. if("7".equals(taskStatisticsVo.getDays())){
  1047. taskStatisticsVo.setDays("2");
  1048. } else if ("30".equals(taskStatisticsVo.getDays())) {
  1049. taskStatisticsVo.setDays("3");
  1050. }
  1051. }
  1052. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDays(), taskStatisticsVo.getBeginDate(), taskStatisticsVo.getEndDate());
  1053. taskStatisticsVo.setBeginDate(dateMapByType.get("startDate"));
  1054. taskStatisticsVo.setEndDate(dateMapByType.get("endDate"));
  1055. PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
  1056. Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
  1057. pageVo.setPageNum(taskStatisticsVo.getPageNum());
  1058. pageVo.setPageSize(taskStatisticsVo.getPageSize());
  1059. IPage<TaskStatisticsDto> list = this.taskStatisticsMapper.channelAgentDetails(page,taskStatisticsVo);
  1060. return list;
  1061. }
  1062. /**
  1063. * @description: 财务中心-费用校验-合计
  1064. * @author: whp
  1065. * @date: 2024/9/28
  1066. **/
  1067. @Override
  1068. public HashMap<String, Object> costCenterTotal(TaskStatisticsVo taskStatisticsVo) {
  1069. if(StringUtils.isNotEmpty(taskStatisticsVo.getDays())){
  1070. if("7".equals(taskStatisticsVo.getDays())){
  1071. taskStatisticsVo.setDays("2");
  1072. } else if ("30".equals(taskStatisticsVo.getDays())) {
  1073. taskStatisticsVo.setDays("3");
  1074. }
  1075. }
  1076. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDays(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
  1077. taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
  1078. taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
  1079. PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
  1080. Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
  1081. pageVo.setPageNum(taskStatisticsVo.getPageNum());
  1082. pageVo.setPageSize(taskStatisticsVo.getPageSize());
  1083. HashMap<String,Object> list = this.insAreaCompanyMapper.costCenterTotal(taskStatisticsVo);
  1084. return list;
  1085. }
  1086. private void appendName(BusinessAgentData user) {
  1087. StringBuilder stringBuilder = new StringBuilder();
  1088. String deptId = user.getDeptId();
  1089. if (com.ydtech.utils.StringUtils.isNotEmpty(deptId)) {
  1090. int length = deptId.length();
  1091. if (length > 0) {
  1092. if (length <= 5) {
  1093. String dept = deptId.replaceAll("[^\\d]*(\\d+).*", "$1");
  1094. SysDept cityName = sysDeptMapper.selectById(dept);
  1095. String name = cityName.getName();
  1096. stringBuilder.append("(").append(name).append(")");
  1097. } else if (length > 5) {
  1098. String dept = deptId.replaceAll("[^\\d]*(\\d+).*", "$1");
  1099. if (dept.length() < 5) {
  1100. SysDept dept1 = sysDeptMapper.selectById(dept);
  1101. SysDept cityName = sysDeptMapper.selectById(deptId);
  1102. stringBuilder.append(dept1.getName()).append(cityName.getName());
  1103. } else {
  1104. String deptIdTwo = dept.substring(0, 4);
  1105. SysDept dept1 = sysDeptMapper.selectById(deptIdTwo);
  1106. SysDept dept2 = sysDeptMapper.selectById(dept);
  1107. stringBuilder.append(dept1.getName()).append(dept2.getName());
  1108. }
  1109. }
  1110. user.setDeptName(stringBuilder.toString());
  1111. }
  1112. }
  1113. }
  1114. /**
  1115. * @description: 任控制台-业务数据-渠道-详情
  1116. * @author: hh
  1117. * @date: 2024/11/19
  1118. **/
  1119. @Override
  1120. public PageInfo<BusinessOrderData> getBusinessOrderDataDetails(TaskStatisticsVo taskStatisticsVo) {
  1121. getDateByType(taskStatisticsVo.getDateType(), taskStatisticsVo);
  1122. PageHelper.startPage(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
  1123. List<BusinessOrderData> businessOrderList = this.taskStatisticsMapper.getBusinessOrderDataDetails(taskStatisticsVo);
  1124. if (!com.ydtech.utils.StringUtils.isNullOrEmpty(businessOrderList) && !businessOrderList.isEmpty()) {
  1125. for (BusinessOrderData businessOrderData : businessOrderList) {
  1126. BigDecimal entranceAllFee = businessOrderData.getEntranceAllFee() != null ?
  1127. businessOrderData.getEntranceAllFee().setScale(2, BigDecimal.ROUND_HALF_UP) : BigDecimal.ZERO;
  1128. BigDecimal exportAllFee = businessOrderData.getExportAllFee() != null ? businessOrderData.getExportAllFee() : BigDecimal.ZERO;
  1129. BigDecimal distributionAmount = entranceAllFee.subtract(exportAllFee);
  1130. businessOrderData.setDistributionAmount(distributionAmount); //毛利润
  1131. businessOrderData.setEntranceAllFee(entranceAllFee);
  1132. if(distributionAmount.compareTo(BigDecimal.ZERO) > 0
  1133. && businessOrderData.getSumPremium().compareTo(BigDecimal.ZERO) > 0){
  1134. BigDecimal resultDivided = distributionAmount.divide(businessOrderData.getSumPremium(), 4, RoundingMode.HALF_UP); //人均产能
  1135. businessOrderData.setDistributionAmountRate(resultDivided);
  1136. }else {
  1137. businessOrderData.setDistributionAmountRate(new BigDecimal("0.0000"));
  1138. }
  1139. }
  1140. }
  1141. return new PageInfo<>(businessOrderList);
  1142. }
  1143. /**
  1144. * @description: 任控制台-业务数据-渠道-合计
  1145. * @author: hh
  1146. * @date: 2024/11/19
  1147. **/
  1148. @Override
  1149. public BusinessOrderData getBusinessOrderDataTotal(TaskStatisticsVo taskStatisticsVo) {
  1150. getDateByType(taskStatisticsVo.getDateType(), taskStatisticsVo);
  1151. BusinessOrderData result = this.taskStatisticsMapper.getBusinessOrderDataTotal(taskStatisticsVo);
  1152. if (com.ydtech.utils.StringUtils.isNullOrEmpty(result)) {
  1153. return null;
  1154. }
  1155. BigDecimal sumPremium = result.getSumPremium();
  1156. BusinessAgentData allsumPremium = this.taskStatisticsMapper.getAllsumPremium(taskStatisticsVo);
  1157. if (ObjectUtils.isNotEmpty(sumPremium)) {
  1158. BigDecimal allSumPremium = allsumPremium.getSumPremium();
  1159. if (sumPremium.compareTo(BigDecimal.ZERO) == 1 && allSumPremium.compareTo(BigDecimal.ZERO) > 0) {
  1160. BigDecimal multiply = sumPremium.divide(allSumPremium, 4, BigDecimal.ROUND_DOWN);
  1161. result.setSumPremiumProportion(multiply);
  1162. }
  1163. } else {
  1164. result.setSumPremiumProportion(BigDecimal.ZERO);
  1165. }
  1166. BigDecimal entranceAllFee = result.getEntranceAllFee() != null ? result.getEntranceAllFee() : BigDecimal.ZERO;
  1167. BigDecimal exportAllFee = result.getExportAllFee() != null ? result.getExportAllFee() : BigDecimal.ZERO;
  1168. BigDecimal subtract = entranceAllFee.subtract(exportAllFee);
  1169. result.setDistributionAmount(subtract); //毛利润
  1170. if(subtract.compareTo(BigDecimal.ZERO) > 0 && sumPremium.compareTo(BigDecimal.ZERO) > 0){
  1171. BigDecimal resultDivided = subtract.divide(sumPremium, 4, RoundingMode.HALF_UP); //人均产能
  1172. result.setDistributionAmountRate(resultDivided);
  1173. }else {
  1174. result.setDistributionAmountRate(new BigDecimal("0.0000"));
  1175. }
  1176. return result;
  1177. }
  1178. /**
  1179. * 任控制台-业务数据-渠道"
  1180. * @param taskStatisticsVo
  1181. * @return
  1182. */
  1183. @Override
  1184. public IPage<BusinessAgentData> getBusinessElectricData(TaskStatisticsVo taskStatisticsVo) {
  1185. PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
  1186. Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
  1187. page.setSearchCount(false).setOptimizeCountSql(false);//关闭count查询
  1188. pageVo.setPageNum(taskStatisticsVo.getPageNum());
  1189. pageVo.setPageSize(taskStatisticsVo.getPageSize());
  1190. if(StringUtils.isNotEmpty(taskStatisticsVo.getTreeUserId())){
  1191. List<String> userIds=this.getNextLevel(taskStatisticsVo.getTreeUserId());
  1192. taskStatisticsVo.setUserIds(userIds);
  1193. }
  1194. if(StringUtils.isNotEmpty(taskStatisticsVo.getTreeType()) && (StringUtils.isEmpty(taskStatisticsVo.getTreeUserId()) && StringUtils.isEmpty(taskStatisticsVo.getDeptId()) ) ){
  1195. return new Page<>(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageNum());
  1196. }
  1197. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDateType(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
  1198. taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
  1199. taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
  1200. getDateByType(taskStatisticsVo.getDateType(), taskStatisticsVo);
  1201. IPage<BusinessAgentData> list = this.taskStatisticsMapper.getBusinessAgentData(page,taskStatisticsVo);
  1202. List<BusinessAgentData> records = list.getRecords();
  1203. for (BusinessAgentData record : records) {
  1204. this.appendName(record);
  1205. if (record.getDistributionAmountRate() == null) {
  1206. record.setDistributionAmountRate(new BigDecimal("0.0000"));
  1207. }
  1208. }
  1209. Long total = this.taskStatisticsMapper.getBusinessAgentDataTotal(taskStatisticsVo);
  1210. list.setTotal(total);
  1211. return list;
  1212. }
  1213. /**
  1214. * 任控制台-业务数据-电销-合计
  1215. * @param taskStatisticsVo
  1216. * @return
  1217. */
  1218. @Override
  1219. public BusinessAgentData getBusinessElectricDataTotal(TaskStatisticsVo taskStatisticsVo) {
  1220. if(StringUtils.isNotEmpty(taskStatisticsVo.getTreeUserId())){
  1221. List<String> userIds=this.getNextLevel(taskStatisticsVo.getTreeUserId());
  1222. taskStatisticsVo.setUserIds(userIds);
  1223. }
  1224. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDateType(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
  1225. taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
  1226. taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
  1227. getDateByType(taskStatisticsVo.getDateType(), taskStatisticsVo);
  1228. if (StringUtils.isNotEmpty(taskStatisticsVo.getTreeType()) && (StringUtils.isEmpty(taskStatisticsVo.getTreeUserId()) && StringUtils.isEmpty(taskStatisticsVo.getDeptId()))) {
  1229. return new BusinessAgentData();
  1230. }
  1231. String deptId = BaseController.getDeptId();
  1232. BusinessAgentData result = this.taskStatisticsMapper.getBusinessAgentDataTotalAdd(taskStatisticsVo);
  1233. Long total = this.taskStatisticsMapper.getBusinessAgentDataTotal(taskStatisticsVo);
  1234. result.setTotalNumber(total.toString());
  1235. BigDecimal sumPremium = result.getSumPremium();
  1236. BusinessAgentData allsumPremium = this.taskStatisticsMapper.getAllsumPremium(taskStatisticsVo);
  1237. if(ObjectUtils.isNotEmpty(sumPremium)){
  1238. BigDecimal sumPremium1 = allsumPremium.getSumPremium();
  1239. if(sumPremium.compareTo(BigDecimal.ZERO) ==1){
  1240. BigDecimal multiply = sumPremium.divide(sumPremium1, 4, BigDecimal.ROUND_DOWN);
  1241. result.setSumPremiumProportion(multiply);
  1242. }
  1243. }else {
  1244. result.setSumPremiumProportion(BigDecimal.ZERO);
  1245. }
  1246. BigDecimal entranceAllFee = result.getEntranceAllFee() != null ? result.getEntranceAllFee() : BigDecimal.ZERO;
  1247. BigDecimal exportAllFee = result.getExportAllFee() != null ? result.getExportAllFee() : BigDecimal.ZERO;
  1248. BigDecimal subtract = entranceAllFee.subtract(exportAllFee);
  1249. result.setDistributionAmount(subtract); //毛利润
  1250. if(subtract.compareTo(BigDecimal.ZERO)>0){
  1251. BigDecimal resultDivided = subtract.divide(sumPremium, 4, RoundingMode.HALF_UP); //人均产能
  1252. result.setDistributionAmountRate(resultDivided);
  1253. }else {
  1254. result.setDistributionAmountRate(BigDecimal.ZERO);
  1255. }
  1256. return result;
  1257. }
  1258. @Override
  1259. public HttpResult getBusinessDataExcel(TaskStatisticsVo taskStatisticsVo) {
  1260. if (StringUtils.isNotEmpty(taskStatisticsVo.getDays())) {
  1261. if ("7".equals(taskStatisticsVo.getDays())) {
  1262. taskStatisticsVo.setDateType("2");
  1263. } else if ("30".equals(taskStatisticsVo.getDays())) {
  1264. taskStatisticsVo.setDateType("3");
  1265. } else if ("1".equals(taskStatisticsVo.getDays())) {
  1266. taskStatisticsVo.setDateType("1");
  1267. }
  1268. }
  1269. if (com.ydtech.utils.StringUtils.isNotEmpty(taskStatisticsVo.getParterProvinceId())) {
  1270. String provinceId = this.removeTrailingZeros(taskStatisticsVo.getParterProvinceId());
  1271. taskStatisticsVo.setParterProvinceId(provinceId);
  1272. }
  1273. if (com.ydtech.utils.StringUtils.isNotEmpty(taskStatisticsVo.getParterCityId())) {
  1274. String cityId = this.removeTrailingZeros(taskStatisticsVo.getParterCityId());
  1275. taskStatisticsVo.setParterCityId(cityId);
  1276. }
  1277. if (com.ydtech.utils.StringUtils.isNotEmpty(taskStatisticsVo.getParterCountyId())) {
  1278. String countyId = this.removeTrailingZeros(taskStatisticsVo.getParterCountyId());
  1279. taskStatisticsVo.setParterCountyId(countyId);
  1280. }
  1281. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDateType(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
  1282. taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
  1283. taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
  1284. List<TaskStatisticsDto> list = this.insAreaCompanyMapper.getBusinessDataList(taskStatisticsVo);
  1285. List<BusinessCompanyExcel> sysUserPartners = BeanUtil.copyToList(list, BusinessCompanyExcel.class);
  1286. String uploadPath = this.uploadPath + "/excel/";
  1287. Path path = Paths.get(uploadPath);
  1288. if (!Files.exists(path)) {
  1289. try {
  1290. Files.createDirectories(path);
  1291. } catch (IOException e) {
  1292. e.printStackTrace();
  1293. }
  1294. }
  1295. String fileName = EasyExcelUtils.downExcel(uploadPath, "业务数据保险公司导出", BusinessCompanyExcel.class, sysUserPartners);
  1296. return HttpResult.ok("", uploadUrl + "excel/" + fileName);
  1297. }
  1298. /**
  1299. * @description: 控制台 - 业务数据 - 代理人导出
  1300. * @author: whp
  1301. * @date: 2024/12/13
  1302. **/
  1303. @Override
  1304. public HttpResult getBusinessAgentExcel(TaskStatisticsVo taskStatisticsVo) {
  1305. if(StringUtils.isNotEmpty(taskStatisticsVo.getTreeType()) ){
  1306. if((StringUtils.isNotEmpty(taskStatisticsVo.getTreeUserId()) && "2".equals(taskStatisticsVo.getTreeType()))){
  1307. List<String> userIds=this.getNextLevel(taskStatisticsVo.getTreeUserId());
  1308. if(!userIds.isEmpty() && userIds.get(0)!=null){
  1309. taskStatisticsVo.setUserIds(userIds);
  1310. }else {
  1311. taskStatisticsVo.setUserId(taskStatisticsVo.getTreeUserId());
  1312. }
  1313. }else if (StringUtils.isNotEmpty(taskStatisticsVo.getTreeUserId()) && "1".equals(taskStatisticsVo.getTreeType())){
  1314. taskStatisticsVo.setDeptId(taskStatisticsVo.getTreeUserId());
  1315. taskStatisticsVo.setTreeUserId(null);
  1316. taskStatisticsVo.setUserIds(new ArrayList<>());
  1317. }
  1318. }
  1319. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDateType(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
  1320. taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
  1321. taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
  1322. getDateByType(taskStatisticsVo.getDateType(), taskStatisticsVo);
  1323. List<BusinessAgentData> list = this.taskStatisticsMapper.getBusinessAgentDataExcel(taskStatisticsVo);
  1324. for (BusinessAgentData record : list) {
  1325. this.appendName(record);
  1326. if (record.getDistributionAmountRate() == null) {
  1327. record.setDistributionAmountRate(new BigDecimal("0.0000"));
  1328. }
  1329. if(record.getManagementSource().equals("2")){
  1330. record.setManagementSource("代理人");
  1331. }
  1332. }
  1333. List<BusinessAgentExcel> sysUserPartners = BeanUtil.copyToList(list, BusinessAgentExcel.class);
  1334. String uploadPath = this.uploadPath + "/excel/";
  1335. Path path = Paths.get(uploadPath);
  1336. if (!Files.exists(path)) {
  1337. try {
  1338. Files.createDirectories(path);
  1339. } catch (IOException e) {
  1340. e.printStackTrace();
  1341. }
  1342. }
  1343. String fileName = EasyExcelUtils.downExcel(uploadPath, "业务数据代理人导出", BusinessAgentExcel.class, sysUserPartners);
  1344. return HttpResult.ok("", uploadUrl + "excel/" + fileName);
  1345. }
  1346. /**
  1347. * @description: 控制台 - 业务数据 -渠道导出
  1348. * @author: whp
  1349. * @date: 2024/12/13
  1350. **/
  1351. @Override
  1352. public HttpResult getChannelExcel(TaskStatisticsVo taskStatisticsVo) {
  1353. if(StringUtils.isNotEmpty(taskStatisticsVo.getTreeType()) ){
  1354. if((StringUtils.isNotEmpty(taskStatisticsVo.getTreeUserId()) && "2".equals(taskStatisticsVo.getTreeType()))){
  1355. List<String> userIds=this.getNextLevel(taskStatisticsVo.getTreeUserId());
  1356. if(!userIds.isEmpty() && userIds.get(0)!=null){
  1357. taskStatisticsVo.setUserIds(userIds);
  1358. }else {
  1359. taskStatisticsVo.setUserId(taskStatisticsVo.getTreeUserId());
  1360. }
  1361. }else if (StringUtils.isNotEmpty(taskStatisticsVo.getTreeUserId()) && "1".equals(taskStatisticsVo.getTreeType())){
  1362. taskStatisticsVo.setDeptId(taskStatisticsVo.getTreeUserId());
  1363. taskStatisticsVo.setTreeUserId(null);
  1364. taskStatisticsVo.setUserIds(new ArrayList<>());
  1365. }
  1366. }
  1367. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDateType(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
  1368. taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
  1369. taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
  1370. getDateByType(taskStatisticsVo.getDateType(), taskStatisticsVo);
  1371. List<BusinessAgentData> list = this.taskStatisticsMapper.getBusinessAgentDataExcel(taskStatisticsVo);
  1372. for (BusinessAgentData record : list) {
  1373. this.appendName(record);
  1374. if (record.getDistributionAmountRate() == null) {
  1375. record.setDistributionAmountRate(new BigDecimal("0.0000"));
  1376. }
  1377. if(record.getManagementSource().equals("1")){
  1378. record.setManagementSource("渠道");
  1379. }
  1380. }
  1381. List<GetChannelExcel> sysUserPartners = BeanUtil.copyToList(list, GetChannelExcel.class);
  1382. String uploadPath = this.uploadPath + "/excel/";
  1383. Path path = Paths.get(uploadPath);
  1384. if (!Files.exists(path)) {
  1385. try {
  1386. Files.createDirectories(path);
  1387. } catch (IOException e) {
  1388. e.printStackTrace();
  1389. }
  1390. }
  1391. String fileName = EasyExcelUtils.downExcel(uploadPath, "业务数据渠道导出", GetChannelExcel.class, sysUserPartners);
  1392. return HttpResult.ok("", uploadUrl + "excel/" + fileName);
  1393. }
  1394. /**
  1395. * @version
  1396. * @author: hh
  1397. * @Date: 2024/11/19
  1398. * @Description: 通过时间类型判断
  1399. */
  1400. private static void getDateByType(String type, TaskStatisticsVo taskStatisticsVo) {
  1401. String startDateStr = new String();
  1402. String endDateStr = new String();
  1403. if (StringUtils.isNotEmpty(type)) {
  1404. switch (type) {
  1405. case "1" : startDateStr = SliceUpDateUtil.getBeforeDay(new Date(),0) + " 00:00:00";
  1406. endDateStr = SliceUpDateUtil.getBeforeDay(new Date(),0) + " 23:59:59";
  1407. break;
  1408. case "2" : startDateStr = SliceUpDateUtil.getBeforeDay(new Date(),1) + " 00:00:00";
  1409. endDateStr = SliceUpDateUtil.getBeforeDay(new Date(),0) + " 23:59:59";
  1410. break;
  1411. case "3" : startDateStr = SliceUpDateUtil.getBeforeDay(new Date(),6) + " 00:00:00";
  1412. endDateStr = SliceUpDateUtil.getBeforeDay(new Date(),0) + " 23:59:59";
  1413. break;
  1414. }
  1415. if (StringUtils.isNotEmpty(taskStatisticsVo.getTimeType())) {
  1416. switch (taskStatisticsVo.getTimeType()) {
  1417. case "1" : taskStatisticsVo.setEnterTimeStart(startDateStr);
  1418. taskStatisticsVo.setEnterTimeEnd(endDateStr);
  1419. break;
  1420. case "2" : taskStatisticsVo.setSigningTimeStart(startDateStr);
  1421. taskStatisticsVo.setSigningTimeEnd(endDateStr);
  1422. break;
  1423. }
  1424. }
  1425. }
  1426. }
  1427. /**
  1428. * @description: 财务中心 - 费用校验 - 人员查询
  1429. * @author: whp
  1430. **/
  1431. @Override
  1432. public IPage<TaskStatisticsDto> costReviewer(TaskStatisticsVo taskStatisticsVo) {
  1433. if(StringUtils.isNotEmpty(taskStatisticsVo.getDays())){
  1434. if("7".equals(taskStatisticsVo.getDays())){
  1435. taskStatisticsVo.setDays("2");
  1436. } else if ("30".equals(taskStatisticsVo.getDays())) {
  1437. taskStatisticsVo.setDays("3");
  1438. }
  1439. }
  1440. HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDays(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
  1441. taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
  1442. taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
  1443. PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
  1444. Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
  1445. pageVo.setPageNum(taskStatisticsVo.getPageNum());
  1446. pageVo.setPageSize(taskStatisticsVo.getPageSize());
  1447. IPage<TaskStatisticsDto> list = this.insAreaCompanyMapper.costReviewer(page,taskStatisticsVo);
  1448. return list;
  1449. }
  1450. }