package com.ydtech.modules.admin.service.impl; import cn.hutool.core.bean.BeanUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.ydtech.core.page.HttpResult; import com.ydtech.modules.admin.dao.SysAmountAuditingMapper; import com.ydtech.modules.admin.dao.SysDeptMapper; import com.ydtech.modules.admin.dao.SysUserMapper; import com.ydtech.modules.admin.dao.TaskStatisticsMapper; import com.ydtech.modules.admin.model.SumEntryStatusDo; import com.ydtech.modules.admin.model.SysDept; import com.ydtech.modules.admin.model.SysUser; import com.ydtech.modules.admin.model.dto.*; import com.ydtech.modules.admin.model.vo.BusinessAgentData; import com.ydtech.modules.admin.model.vo.BusinessOrderData; import com.ydtech.modules.admin.model.vo.TaskStatisticsVo; import com.ydtech.modules.admin.service.SysDeptService; import com.ydtech.modules.admin.service.TaskStatisticsService; import com.ydtech.modules.admin.utils.SliceUpDateUtil; import com.ydtech.modules.base.controller.BaseController; import com.ydtech.modules.base.model.vo.PageVo; import com.ydtech.modules.inv.utils.EasyExcelUtils; import com.ydtech.modules.order.dao.InsAreaCompanyMapper; import com.ydtech.modules.order.dao.InsOrdersMapper; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import java.io.IOException; import java.math.BigDecimal; import java.math.RoundingMode; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; /** * @description: 任务统计 * @author: whp * @date: 2024/7/25 **/ @Service public class TaskStatisticsServiceImpl implements TaskStatisticsService { @Autowired private InsAreaCompanyMapper insAreaCompanyMapper; @Autowired private SysAmountAuditingMapper sysAmountAuditingMapper; @Autowired private InsOrdersMapper insOrdersMapper; @Autowired private TaskStatisticsMapper taskStatisticsMapper; @Autowired private SysDeptService sysDeptService; @Autowired private SysUserMapper sysUserMapper; @Autowired private SysDeptMapper sysDeptMapper; @Value("${upload.file.path}") private String uploadPath; @Value("${upload.file.url}") private String uploadUrl; /** * @description: 渠道任务统计查询 * @author: whp * @date: 2024/7/25 **/ @Override public IPage queryPage(TaskStatisticsVo taskStatisticsVo) { String leaderId = taskStatisticsVo.getLeaderId(); if (com.ydtech.utils.StringUtils.isNotEmpty(leaderId)) { //获取领导人下级所有 List ids = new ArrayList<>(); List userList = this.getUserTreeHx(leaderId, ids); userList.add(leaderId); if (userList.size() > 0) { taskStatisticsVo.setLeaderIds(userList); } } PageVo pageVo = new PageVo<>(); Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize()); page.setSearchCount(false).setOptimizeCountSql(false);//关闭count查询 pageVo.setPageNum(taskStatisticsVo.getPageNum()); pageVo.setPageSize(taskStatisticsVo.getPageSize()); if (StringUtils.isNotEmpty(taskStatisticsVo.getDays())) { if ("7".equals(taskStatisticsVo.getDays())) { taskStatisticsVo.setDays("2"); } else if ("30".equals(taskStatisticsVo.getDays())) { taskStatisticsVo.setDays("3"); } } HashMap dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDays(), taskStatisticsVo.getBeginDate(), taskStatisticsVo.getEndDate()); // 控制台逻辑 人员渠道跳转任务的时间应该是签单日期查询 if (StringUtils.isNotEmpty(taskStatisticsVo.getTaskType()) && "1".equals(taskStatisticsVo.getTaskType())) { taskStatisticsVo.setBeginDate(null); taskStatisticsVo.setEndDate(null); taskStatisticsVo.setSigningTimeStart(dateMapByType.get("startDate")); taskStatisticsVo.setSigningTimeEnd(dateMapByType.get("endDate")); } else { taskStatisticsVo.setBeginDate(dateMapByType.get("startDate")); taskStatisticsVo.setEndDate(dateMapByType.get("endDate")); } IPage list = this.insAreaCompanyMapper.queryPageTaskStatistics(page, taskStatisticsVo); Long total = this.insAreaCompanyMapper.queryPageTaskStatisticsTotal(taskStatisticsVo); buildTaskStatisticsDto(list.getRecords(), taskStatisticsVo); list.setTotal(total); return list; } private void buildTaskStatisticsDto(List records, TaskStatisticsVo taskStatisticsVo) { Map deptMap = sysDeptService.list() .stream() .collect(Collectors.toMap(SysDept::getId, SysDept::getName)); List userIds = records.stream().map(TaskStatisticsDto::getUserId).collect(Collectors.toList()); SumEntryStatusDo sumEntryStatusDo = new SumEntryStatusDo(taskStatisticsVo, userIds); List sumEntryStatusNew = this.insAreaCompanyMapper.getSumEntryStatusNew(sumEntryStatusDo); Map collect = sumEntryStatusNew.stream() .collect(Collectors.toMap(RecordSummaryDto::getUserId, x -> x)); for (TaskStatisticsDto record : records) { Optional.ofNullable(record.getDeptId()).ifPresent(recordDto -> { String substring = recordDto.substring(0, 6); String substring1 = recordDto.substring(0, 8); String province = recordDto.substring(0, 4); record.setCityName(deptMap.get(record.getDeptId())); record.setDistrictName(deptMap.get(substring)); record.setProvinceName(deptMap.get(substring1)); record.setStoreDeptName(deptMap.get(province)); }); RecordSummaryDto recordDto = collect.get(record.getUserId()); if (!ObjectUtils.isEmpty(recordDto)) { record.setSumEntryStatus(recordDto.getEntryStatus()); record.setOutStatus(recordDto.getOutStatus()); } else { record.setSumEntryStatus("0"); record.setOutStatus("0"); } } } @Override public HttpResult ordersDetailsExcel(TaskStatisticsVo taskStatisticsVo) { String leaderId = taskStatisticsVo.getLeaderId(); if (com.ydtech.utils.StringUtils.isNotEmpty(leaderId)) { //获取领导人下级所有 List ids = new ArrayList<>(); List userList = this.getUserTreeHx(leaderId, ids); userList.add(leaderId); if (!userList.isEmpty()) { taskStatisticsVo.setLeaderIds(userList); } } PageVo pageVo = new PageVo<>(); Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize()); page.setSearchCount(false).setOptimizeCountSql(false);//关闭count查询 pageVo.setPageNum(taskStatisticsVo.getPageNum()); pageVo.setPageSize(taskStatisticsVo.getPageSize()); if (StringUtils.isNotEmpty(taskStatisticsVo.getDays())) { if ("7".equals(taskStatisticsVo.getDays())) { taskStatisticsVo.setDays("2"); } else if ("30".equals(taskStatisticsVo.getDays())) { taskStatisticsVo.setDays("3"); } } HashMap dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDays(), taskStatisticsVo.getBeginDate(), taskStatisticsVo.getEndDate()); taskStatisticsVo.setBeginDate(dateMapByType.get("startDate")); taskStatisticsVo.setEndDate(dateMapByType.get("endDate")); List list = taskStatisticsMapper.ordersDetailsExcel(taskStatisticsVo); this.saveTranslate(list); String uploadPath = this.uploadPath + "/excel/"; Path path = Paths.get(uploadPath); if (!Files.exists(path)) { try { Files.createDirectories(path); } catch (IOException e) { e.printStackTrace(); } } String fileName = EasyExcelUtils.downExcel(uploadPath, "任务明细导出", OrdersDetailsExcel.class, list); return HttpResult.ok("", uploadUrl + "excel/" + fileName); } private void saveTranslate(List list) { for (OrdersDetailsExcel ordersDetailsExcel : list) { if (StringUtils.isNotEmpty(ordersDetailsExcel.getOrderSource())) { if ("1".equals(ordersDetailsExcel.getOrderSource()) && "0".equals(ordersDetailsExcel.getOrderstatus())) { ordersDetailsExcel.setOrderSource("app报价"); } if ("0".equals(ordersDetailsExcel.getOrderSource()) && "0".equals(ordersDetailsExcel.getOrderstatus())) { ordersDetailsExcel.setOrderSource("pc报价"); } } if (StringUtils.isNotEmpty(ordersDetailsExcel.getOrderstatus())) { if ("0".equals(ordersDetailsExcel.getOrderstatus())) { ordersDetailsExcel.setOrderstatus("报价完成"); } if ("1".equals(ordersDetailsExcel.getOrderstatus())) { ordersDetailsExcel.setOrderstatus("待核保"); } if ("2".equals(ordersDetailsExcel.getOrderstatus())) { ordersDetailsExcel.setOrderstatus("已核保待缴费"); } if ("3".equals(ordersDetailsExcel.getOrderstatus())) { ordersDetailsExcel.setOrderstatus("已承保"); } if ("10".equals(ordersDetailsExcel.getOrderstatus())) { ordersDetailsExcel.setOrderstatus("报价失败"); } if ("11".equals(ordersDetailsExcel.getOrderstatus())) { ordersDetailsExcel.setOrderstatus("重复投保"); } if ("4".equals(ordersDetailsExcel.getOrderstatus())) { ordersDetailsExcel.setOrderstatus("核保退回"); } } if (StringUtils.isNotEmpty(ordersDetailsExcel.getEntryStatus())) { if ("1".equals(ordersDetailsExcel.getEntryStatus())) { ordersDetailsExcel.setEntryStatus("车险录入"); } if ("2".equals(ordersDetailsExcel.getEntryStatus())) { ordersDetailsExcel.setEntryStatus("待客录单"); } if ("3".equals(ordersDetailsExcel.getEntryStatus())) { ordersDetailsExcel.setEntryStatus("外部订单"); } } } } private List getUserTreeHx(String leaderId, List ids) { List sysUsers = sysUserMapper.selectByLeadId(leaderId); if (!sysUsers.isEmpty()) { ids.addAll(sysUsers.stream().map(SysUser::getId).collect(Collectors.toList())); } for (SysUser sysUser : sysUsers) { this.getUserTreeHx(sysUser.getId(), ids); } return ids; } /** * @description: 保险公司统计查询 * @author: whp * @date: 2024/7/25 **/ @Override public IPage insuranceCompanyQueryPage(TaskStatisticsVo taskStatisticsVo) { if (com.ydtech.utils.StringUtils.isNotEmpty(taskStatisticsVo.getProvinceId())) { String provinceId = this.removeTrailingZeros(taskStatisticsVo.getProvinceId()); taskStatisticsVo.setProvinceId(provinceId); } if (com.ydtech.utils.StringUtils.isNotEmpty(taskStatisticsVo.getCityId())) { String cityId = this.removeTrailingZeros(taskStatisticsVo.getCityId()); taskStatisticsVo.setCityId(cityId); } if (com.ydtech.utils.StringUtils.isNotEmpty(taskStatisticsVo.getCountyId())) { String countyId = this.removeTrailingZeros(taskStatisticsVo.getCountyId()); taskStatisticsVo.setCountyId(countyId); } if (StringUtils.isNotEmpty(taskStatisticsVo.getDays())) { if ("7".equals(taskStatisticsVo.getDays())) { taskStatisticsVo.setDays("2"); } else if ("30".equals(taskStatisticsVo.getDays())) { taskStatisticsVo.setDays("3"); } } HashMap dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDays(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd()); taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate")); taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate")); PageVo pageVo = new PageVo<>(); Page page = new Page<>(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize()); page.setSearchCount(false).setOptimizeCountSql(false);//关闭count查询 pageVo.setPageNum(taskStatisticsVo.getPageNum()); pageVo.setPageSize(taskStatisticsVo.getPageSize()); IPage list = this.insAreaCompanyMapper.insuranceCompanyQueryPage(page, taskStatisticsVo); Long total = this.insAreaCompanyMapper.insuranceCompanyQueryTotal(taskStatisticsVo); list.setTotal(total); return list; } private String removeTrailingZeros(String value) { int len = value.length(); int i = len - 1; // 查找第一个非零字符的位置 while (i >= 0 && value.charAt(i) == '0') { i--; } // 如果所有字符都是0,则返回"0" if (i < 0) { return "0"; } // 使用substring方法获取去除末尾零的子串 return value.substring(0, i + 1); } /** * @description: 代理人统计查询 * @author: whp * @date: 2024/7/26 **/ @Override public IPage agentStatisticsQueryPage(TaskStatisticsVo taskStatisticsVo) { String leaderId = taskStatisticsVo.getLeaderId(); if (com.ydtech.utils.StringUtils.isNotEmpty(leaderId)) { //获取领导人下级所有 List ids = new ArrayList<>(); List userList = this.getUserTreeHx(leaderId, ids); userList.add(leaderId); if (!userList.isEmpty()) { taskStatisticsVo.setLeaderIds(userList); } } PageVo pageVo = new PageVo<>(); Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize()); pageVo.setPageNum(taskStatisticsVo.getPageNum()); pageVo.setPageSize(taskStatisticsVo.getPageSize()); page.setSearchCount(false).setOptimizeCountSql(false);//关闭count查询 if (StringUtils.isNotEmpty(taskStatisticsVo.getDays())) { if ("7".equals(taskStatisticsVo.getDays())) { taskStatisticsVo.setDays("2"); } else if ("30".equals(taskStatisticsVo.getDays())) { taskStatisticsVo.setDays("3"); } } HashMap dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDays(), taskStatisticsVo.getBeginDate(), taskStatisticsVo.getEndDate()); taskStatisticsVo.setBeginDate(dateMapByType.get("startDate")); taskStatisticsVo.setEndDate(dateMapByType.get("endDate")); String userId = BaseController.getUserId(); if (taskStatisticsVo.getDeptIds() != null && !taskStatisticsVo.getDeptIds().isEmpty()) { taskStatisticsVo.setRelationUserId(userId); } IPage list = this.insAreaCompanyMapper.agentStatisticsQueryPage(page, taskStatisticsVo); Long total = this.insAreaCompanyMapper.agentStatisticsQueryPageTotal(taskStatisticsVo); buildTaskStatisticsDto(list.getRecords(), taskStatisticsVo); list.setTotal(total); return list; } /** * @description: 财务中心-费用校验 * @author: whp * @date: 2024/7/29 **/ @Override public IPage costCenter(TaskStatisticsVo taskStatisticsVo) { if (StringUtils.isNotEmpty(taskStatisticsVo.getDays())) { if ("7".equals(taskStatisticsVo.getDays())) { taskStatisticsVo.setDays("2"); } else if ("30".equals(taskStatisticsVo.getDays())) { taskStatisticsVo.setDays("3"); } } HashMap dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDays(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd()); taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate")); taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate")); PageVo pageVo = new PageVo<>(); Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize()); pageVo.setPageNum(taskStatisticsVo.getPageNum()); pageVo.setPageSize(taskStatisticsVo.getPageSize()); IPage list = this.insAreaCompanyMapper.costCenter(page, taskStatisticsVo); return list; } /** * @description: 财务中心-费用校验-明细 * @author: whp * @date: 2024/10/10 **/ @Override public IPage costCenterDetails(TaskStatisticsVo taskStatisticsVo) { if (StringUtils.isNotEmpty(taskStatisticsVo.getDays())) { if ("7".equals(taskStatisticsVo.getDays())) { taskStatisticsVo.setDays("2"); } else if ("30".equals(taskStatisticsVo.getDays())) { taskStatisticsVo.setDays("3"); } } HashMap dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDays(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd()); taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate")); taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate")); PageVo pageVo = new PageVo<>(); Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize()); pageVo.setPageNum(taskStatisticsVo.getPageNum()); pageVo.setPageSize(taskStatisticsVo.getPageSize()); IPage list = this.insAreaCompanyMapper.costCenterDetails(page, taskStatisticsVo); return list; } /** * @description: 任务统计-保险公司-导出 * @author: whp * @date: 2024/9/9 **/ @Override public HttpResult costCenterDetailsExcel(TaskStatisticsVo taskStatisticsVo) { if (StringUtils.isNotEmpty(taskStatisticsVo.getDays())) { if ("7".equals(taskStatisticsVo.getDays())) { taskStatisticsVo.setDays("2"); } else if ("30".equals(taskStatisticsVo.getDays())) { taskStatisticsVo.setDays("3"); } } HashMap dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDays(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd()); taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate")); taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate")); List list = this.insAreaCompanyMapper.costCenterDetailsExcel(taskStatisticsVo); String uploadPath = this.uploadPath + "/excel/"; Path path = Paths.get(uploadPath); if (!Files.exists(path)) { try { Files.createDirectories(path); } catch (IOException e) { e.printStackTrace(); } } String fileName = EasyExcelUtils.downExcel(uploadPath, "费用校验审核人导出", TaskStatisticsDtoExcel.class, list); return HttpResult.ok("", uploadUrl + "excel/" + fileName); } /** * @description: 电销任务统计查询 * @author: whp * @date: 2024/10/11 **/ @Override public IPage queryPageElectric(TaskStatisticsVo taskStatisticsVo) { String leaderId = taskStatisticsVo.getLeaderId(); if (com.ydtech.utils.StringUtils.isNotEmpty(leaderId)) { //获取领导人下级所有 List ids = new ArrayList<>(); List userList = this.getUserTreeHx(leaderId, ids); userList.add(leaderId); if (!userList.isEmpty()) { taskStatisticsVo.setLeaderIds(userList); } } PageVo pageVo = new PageVo<>(); Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize()); page.setSearchCount(false).setOptimizeCountSql(false);//关闭count查询 pageVo.setPageNum(taskStatisticsVo.getPageNum()); pageVo.setPageSize(taskStatisticsVo.getPageSize()); if (StringUtils.isNotEmpty(taskStatisticsVo.getDays())) { if ("7".equals(taskStatisticsVo.getDays())) { taskStatisticsVo.setDays("2"); } else if ("30".equals(taskStatisticsVo.getDays())) { taskStatisticsVo.setDays("3"); } } HashMap dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDays(), taskStatisticsVo.getBeginDate(), taskStatisticsVo.getEndDate()); taskStatisticsVo.setBeginDate(dateMapByType.get("startDate")); taskStatisticsVo.setEndDate(dateMapByType.get("endDate")); if (StringUtils.isNotEmpty(taskStatisticsVo.getTaskType()) && "1".equals(taskStatisticsVo.getTaskType())) { taskStatisticsVo.setBeginDate(null); taskStatisticsVo.setEndDate(null); taskStatisticsVo.setSigningTimeStart(dateMapByType.get("startDate")); taskStatisticsVo.setSigningTimeEnd(dateMapByType.get("endDate")); } else { taskStatisticsVo.setBeginDate(dateMapByType.get("startDate")); taskStatisticsVo.setEndDate(dateMapByType.get("endDate")); } IPage list = this.insAreaCompanyMapper.queryPageElectric(page, taskStatisticsVo); buildTaskStatisticsDto(list.getRecords(), taskStatisticsVo); Long total = this.insAreaCompanyMapper.queryPageElectricTotal(taskStatisticsVo); list.setTotal(total); return list; } /** * @description: 财务中心-费用校验-明细-查看 * @author: whp * @date: 2024/10/10 **/ @Override public TaskStatisticsDtoNew costCenterDetailsLicense(TaskStatisticsVo taskStatisticsVo) { if (StringUtils.isNotEmpty(taskStatisticsVo.getDays())) { if ("7".equals(taskStatisticsVo.getDays())) { taskStatisticsVo.setDays("2"); } else if ("30".equals(taskStatisticsVo.getDays())) { taskStatisticsVo.setDays("3"); } } HashMap dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDays(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd()); taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate")); taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate")); PageVo pageVo = new PageVo<>(); Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize()); pageVo.setPageNum(taskStatisticsVo.getPageNum()); pageVo.setPageSize(taskStatisticsVo.getPageSize()); IPage list = this.insAreaCompanyMapper.costCenterDetailsLicense(page, taskStatisticsVo); TaskStatisticsDtoNew sumSecond = this.insAreaCompanyMapper.costCenterSecond(taskStatisticsVo); sumSecond.setPageResult(list); return sumSecond; } /** * @description: 保险公司统计总报价 * @author: whp * @date: 2024/8/12 **/ @Override public IPage totalQuotation(TaskStatisticsVo taskStatisticsVo) { PageVo pageVo = new PageVo<>(); Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize()); pageVo.setPageNum(taskStatisticsVo.getPageNum()); pageVo.setPageSize(taskStatisticsVo.getPageSize()); IPage list = this.insAreaCompanyMapper.totalQuotation(page, taskStatisticsVo); return list; } /** * @description: 控制台-业务数据 * @author: whp * @date: 2024/8/13 **/ @Override public IPage getBusinessData(TaskStatisticsVo taskStatisticsVo) { if (StringUtils.isNotEmpty(taskStatisticsVo.getDays())) { if ("7".equals(taskStatisticsVo.getDays())) { taskStatisticsVo.setDateType("2"); } else if ("30".equals(taskStatisticsVo.getDays())) { taskStatisticsVo.setDateType("3"); } else if ("1".equals(taskStatisticsVo.getDays())) { taskStatisticsVo.setDateType("1"); } } if (com.ydtech.utils.StringUtils.isNotEmpty(taskStatisticsVo.getParterProvinceId())) { String provinceId = this.removeTrailingZeros(taskStatisticsVo.getParterProvinceId()); taskStatisticsVo.setParterProvinceId(provinceId); } if (com.ydtech.utils.StringUtils.isNotEmpty(taskStatisticsVo.getParterCityId())) { String cityId = this.removeTrailingZeros(taskStatisticsVo.getParterCityId()); taskStatisticsVo.setParterCityId(cityId); } if (com.ydtech.utils.StringUtils.isNotEmpty(taskStatisticsVo.getParterCountyId())) { String countyId = this.removeTrailingZeros(taskStatisticsVo.getParterCountyId()); taskStatisticsVo.setParterCountyId(countyId); } HashMap dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDateType(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd()); taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate")); taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate")); getDateByType(taskStatisticsVo.getDateType(), taskStatisticsVo); PageVo pageVo = new PageVo<>(); Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize()); pageVo.setPageNum(taskStatisticsVo.getPageNum()); pageVo.setPageSize(taskStatisticsVo.getPageSize()); IPage list = this.insAreaCompanyMapper.getBusinessData(page, taskStatisticsVo); return list; } /** * @description: 控制台-业务数据-统计 * @author: whp * @date: 2024/10/12 **/ @Override public TaskStatisticsDto getCountBusinessData(TaskStatisticsVo taskStatisticsVo) { if (StringUtils.isNotEmpty(taskStatisticsVo.getDays())) { if ("7".equals(taskStatisticsVo.getDays())) { taskStatisticsVo.setDateType("2"); } else if ("30".equals(taskStatisticsVo.getDays())) { taskStatisticsVo.setDateType("3"); } else if ("1".equals(taskStatisticsVo.getDays())) { taskStatisticsVo.setDateType("1"); } } if (com.ydtech.utils.StringUtils.isNotEmpty(taskStatisticsVo.getParterProvinceId())) { String provinceId = this.removeTrailingZeros(taskStatisticsVo.getParterProvinceId()); taskStatisticsVo.setParterProvinceId(provinceId); } if (com.ydtech.utils.StringUtils.isNotEmpty(taskStatisticsVo.getParterCityId())) { String cityId = this.removeTrailingZeros(taskStatisticsVo.getParterCityId()); taskStatisticsVo.setParterCityId(cityId); } if (com.ydtech.utils.StringUtils.isNotEmpty(taskStatisticsVo.getParterCountyId())) { String countyId = this.removeTrailingZeros(taskStatisticsVo.getParterCountyId()); taskStatisticsVo.setParterCountyId(countyId); } getDateByType(taskStatisticsVo.getDateType(), taskStatisticsVo); HashMap dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDateType(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd()); taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate")); taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate")); TaskStatisticsDto result = this.insAreaCompanyMapper.getCountBusinessData(taskStatisticsVo); TaskStatisticsDto userNumberdto = this.insAreaCompanyMapper.getUserNumber(taskStatisticsVo); if (ObjectUtils.isNotEmpty(userNumberdto)) { if(result.getTotalPremium()!=null && userNumberdto.getUserNumber() !=null){ BigDecimal userNumber = userNumberdto.getUserNumber(); BigDecimal totalPremium = new BigDecimal(result.getTotalPremium()); BigDecimal resultDivided = totalPremium.divide(userNumber, 2, RoundingMode.HALF_UP); //人均产能 result.setPerCapitaAmount(resultDivided); result.setUserNumber(userNumberdto.getUserNumber()); } } return result; } /** * @description: 控制台-业务数据 - 保险分布 * @author: whp * @date: 2024/8/13 **/ @Override public List getDistribution(TaskStatisticsVo taskStatisticsVo) { if (StringUtils.isNotEmpty(taskStatisticsVo.getDays())) { if ("7".equals(taskStatisticsVo.getDays())) { taskStatisticsVo.setDateType("2"); } else if ("30".equals(taskStatisticsVo.getDays())) { taskStatisticsVo.setDateType("3"); } else if ("1".equals(taskStatisticsVo.getDays())) { taskStatisticsVo.setDateType("1"); } } HashMap dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDateType(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd()); taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate")); taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate")); getDateByType(taskStatisticsVo.getDateType(), taskStatisticsVo); List result = new ArrayList<>(); //0 报价中 1 待核保 2 已核保代缴费 3 已承保 4 核保退回 for (int i = 0; i < 5; i++) { taskStatisticsVo.setQuotationStatus(i + ""); TaskStatisticsDto taskStatisticsDtoItem = insAreaCompanyMapper.getDistribution(taskStatisticsVo); if (ObjectUtils.isNotEmpty(taskStatisticsDtoItem)) { taskStatisticsDtoItem.setQuotationStatus(i + ""); result.add(taskStatisticsDtoItem); } } return result; } /** * @description: 任务统计-渠道导出 * @author: whp * @date: 2024/09/09 **/ @Override public HttpResult channelExcel(TaskStatisticsVo taskStatisticsVo) { taskStatisticsVo.setManagementSource("1"); return getHttpResult(taskStatisticsVo); } private void buildTaskStatisticsDto(List list) { Map deptMap = sysDeptService.list() .stream() .collect(Collectors.toMap(SysDept::getId, SysDept::getName)); for (TaskStatisticsExcel record : list) { Optional.ofNullable(record.getDeptId()).ifPresent(recordDto -> { String deptId = record.getDeptId(); String substring = deptId.substring(0, 6); String substring1 = deptId.substring(0, 8); String province = deptId.substring(0, 4); record.setCityName(deptMap.get(substring)); record.setDistrictName(deptMap.get(substring1)); record.setProvinceName(deptMap.get(province)); }); } } private HttpResult getHttpResult(TaskStatisticsVo taskStatisticsVo) { taskStatisticsVo.filterTime(); String leaderId = taskStatisticsVo.getLeaderId(); if (com.ydtech.utils.StringUtils.isNotEmpty(leaderId)) { //获取领导人下级所有 List ids = new ArrayList<>(); List userList = this.getUserTreeHx(leaderId, ids); userList.add(leaderId); if (!userList.isEmpty()) { taskStatisticsVo.setLeaderIds(userList); } } PageVo pageVo = new PageVo<>(); Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize()); pageVo.setPageNum(taskStatisticsVo.getPageNum()); pageVo.setPageSize(taskStatisticsVo.getPageSize()); page.setSearchCount(false).setOptimizeCountSql(false);//关闭count查询 if (StringUtils.isNotEmpty(taskStatisticsVo.getDays())) { if ("7".equals(taskStatisticsVo.getDays())) { taskStatisticsVo.setDays("2"); } else if ("30".equals(taskStatisticsVo.getDays())) { taskStatisticsVo.setDays("3"); } } HashMap dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDays(), taskStatisticsVo.getBeginDate(), taskStatisticsVo.getEndDate()); taskStatisticsVo.setBeginDate(dateMapByType.get("startDate")); taskStatisticsVo.setEndDate(dateMapByType.get("endDate")); List list = this.insAreaCompanyMapper.channelExcel(taskStatisticsVo); buildTaskStatisticsDto(list); String uploadPath = this.uploadPath + "/excel/"; Path path = Paths.get(uploadPath); if (!Files.exists(path)) { try { Files.createDirectories(path); } catch (IOException e) { e.printStackTrace(); } } String name = ""; if (taskStatisticsVo.getManagementSource().equals("1")) { name = "渠道导出"; } else if (taskStatisticsVo.getManagementSource().equals("2")) { name = "代理人导出"; } else { name = "电销导出"; } String fileName = EasyExcelUtils.downExcel(uploadPath, name, TaskStatisticsExcel.class, list); return HttpResult.ok("", uploadUrl + "excel/" + fileName); } /** * @description: 任控制台-业务数据-代理人 * @author: whp * @date: 2024/09/09 **/ @Override public IPage getBusinessAgentData(TaskStatisticsVo taskStatisticsVo) { if (StringUtils.isNotEmpty(taskStatisticsVo.getTreeType())) { if ((StringUtils.isNotEmpty(taskStatisticsVo.getTreeUserId()) && "2".equals(taskStatisticsVo.getTreeType()))) { List userIds = this.getNextLevel(taskStatisticsVo.getTreeUserId()); if (!userIds.isEmpty() && userIds.get(0) != null) { taskStatisticsVo.setUserIds(userIds); } else { taskStatisticsVo.setUserId(taskStatisticsVo.getTreeUserId()); } } else if (StringUtils.isNotEmpty(taskStatisticsVo.getTreeUserId()) && "1".equals(taskStatisticsVo.getTreeType())) { taskStatisticsVo.setDeptId(taskStatisticsVo.getTreeUserId()); taskStatisticsVo.setTreeUserId(null); taskStatisticsVo.setUserIds(new ArrayList<>()); } } PageVo pageVo = new PageVo<>(); Page page = new Page<>(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize()); page.setSearchCount(false).setOptimizeCountSql(false);//关闭count查询 pageVo.setPageNum(taskStatisticsVo.getPageNum()); pageVo.setPageSize(taskStatisticsVo.getPageSize()); if (StringUtils.isNotEmpty(taskStatisticsVo.getTreeType()) && (StringUtils.isEmpty(taskStatisticsVo.getTreeUserId()) && StringUtils.isEmpty(taskStatisticsVo.getDeptId()))) { return new Page<>(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageNum()); } HashMap dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDateType(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd()); taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate")); taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate")); getDateByType(taskStatisticsVo.getDateType(), taskStatisticsVo); IPage list = this.taskStatisticsMapper.getBusinessAgentData(page, taskStatisticsVo); List records = list.getRecords(); for (BusinessAgentData record : records) { this.appendName(record); if (record.getDistributionAmountRate() == null) { record.setDistributionAmountRate(new BigDecimal("0.0000")); } } Long total = this.taskStatisticsMapper.getBusinessAgentDataTotal(taskStatisticsVo); list.setTotal(total); return list; } /** * @param userId * @return 获取该用户下级所有用户id */ private List getNextLevel(String userId) { // 获取系统中的所有用户 LambdaQueryWrapper queryWrapperUser = new LambdaQueryWrapper<>(); queryWrapperUser.eq(SysUser::getStatus, "1"); queryWrapperUser.notLike(SysUser::getId, "M"); List users = this.sysUserMapper.selectList(queryWrapperUser); // 创建查询包装器,用于查询指定用户ID的用 LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(SysUser::getId, userId); // 查询指定用户ID的用户,即第一级下属 List usersLevel1 = this.sysUserMapper.selectList(queryWrapper); // 用于存储所有下属的ID List strIds = new ArrayList<>(); // 递归获取第一级下属及其所有下属的ID findChildren(usersLevel1, users, strIds); if (!strIds.contains(userId)) { strIds.add(userId); } return strIds; } /** * @param SysUsers 即第一级下属 * @param users 所有用户 * @param strIds 用于存储所有下属的ID */ private void findChildren(List SysUsers, List users, List strIds) { for (SysUser sysUser : SysUsers) { List children = new ArrayList<>(); for (SysUser user : users) { if (sysUser.getId() != null && sysUser.getId().equals(user.getLeaderId())) { if (!exists(children, user)) { children.add(user); strIds.add(user.getId()); } } } sysUser.setChildren(children); findChildren(children, users, strIds); } } private boolean exists(List sysUsers, SysUser sysUser) { boolean exist = false; for (SysUser user : sysUsers) { if (user.getId().equals(sysUser.getId())) { exist = true; } } return exist; } /** * @version * @author: hxl * @Date: 2024/6/19 11:57 * @Description: 通过时间类型判断 */ private static HashMap getDateMapByType(String type, String startDate, String endDate) { HashMap map = new HashMap<>(); String startDateStr = ""; String endDateStr = ""; if (StringUtils.isNotBlank(startDate) && StringUtils.isNotBlank(endDate)) { startDateStr = StringUtils.isNotBlank(startDate) ? startDate + " 00:00:00" : null; endDateStr = StringUtils.isNotBlank(endDate) ? endDate + " 23:59:59" : null; } else { if ("1".equals(type)) { // 一月内 startDateStr = SliceUpDateUtil.getBeforeDay(new Date(), 2) + " 00:00:00"; endDateStr = SliceUpDateUtil.getBeforeDay(new Date(), 0) + " 23:59:59"; } else if ("2".equals(type)) { // 三月内 startDateStr = SliceUpDateUtil.getBeforeDay(new Date(), 3) + " 00:00:00"; endDateStr = SliceUpDateUtil.getBeforeDay(new Date(), 0) + " 23:59:59"; } else if ("3".equals(type)) { // 近半年 startDateStr = SliceUpDateUtil.getBeforeDay(new Date(), 4) + " 00:00:00"; endDateStr = SliceUpDateUtil.getBeforeDay(new Date(), 0) + " 23:59:59"; } } map.put("startDate", startDateStr); map.put("endDate", endDateStr); return map; } /** * @version * @author: hxl * @Date: 2024/6/19 11:57 * @Description: 通过时间类型判断 */ public static HashMap getDateMapByTypeNew(String type, String startDate, String endDate) { HashMap map = new HashMap<>(); String startDateStr = ""; String endDateStr = ""; if (org.apache.commons.lang3.StringUtils.isNotBlank(startDate) && org.apache.commons.lang3.StringUtils.isNotBlank(endDate)) { startDateStr = org.apache.commons.lang3.StringUtils.isNotBlank(startDate) ? startDate + " 00:00:00" : null; endDateStr = org.apache.commons.lang3.StringUtils.isNotBlank(endDate) ? endDate + " 23:59:59" : null; } else { if ("1".equals(type)) { // 近1天 startDateStr = SliceUpDateUtil.getBeforeDay(new Date(), 0) + " 00:00:00"; endDateStr = SliceUpDateUtil.getBeforeDay(new Date(), 0) + " 23:59:59"; } else if ("2".equals(type)) { // 近7天 startDateStr = SliceUpDateUtil.getBeforeDay(new Date(), 1) + " 00:00:00"; endDateStr = SliceUpDateUtil.getBeforeDay(new Date(), 0) + " 23:59:59"; } else if ("3".equals(type)) { // 近30天 startDateStr = SliceUpDateUtil.getBeforeDay(new Date(), 6) + " 00:00:00"; endDateStr = SliceUpDateUtil.getBeforeDay(new Date(), 0) + " 23:59:59"; } } map.put("startDate", startDateStr); map.put("endDate", endDateStr); return map; } /** * @description: 任控制台-业务数据-代理人-合计 * @author: whp * @date: 2024/09/09 **/ @Override public BusinessAgentData getBusinessAgentDataTotal(TaskStatisticsVo taskStatisticsVo) { HashMap dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDateType(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd()); taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate")); taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate")); getDateByType(taskStatisticsVo.getDateType(), taskStatisticsVo); if (StringUtils.isNotEmpty(taskStatisticsVo.getTreeType()) || "3".equals(taskStatisticsVo.getManagementSource())) { if ((StringUtils.isNotEmpty(taskStatisticsVo.getTreeUserId()) && "2".equals(taskStatisticsVo.getTreeType()))) { List userIds = this.getNextLevel(taskStatisticsVo.getTreeUserId()); if (!userIds.isEmpty() && userIds.get(0) != null) { taskStatisticsVo.setUserIds(userIds); } else { taskStatisticsVo.setUserId(taskStatisticsVo.getTreeUserId()); } } else if (StringUtils.isNotEmpty(taskStatisticsVo.getTreeUserId()) && "1".equals(taskStatisticsVo.getTreeType())) { taskStatisticsVo.setDeptId(taskStatisticsVo.getTreeUserId()); taskStatisticsVo.setTreeUserId(null); taskStatisticsVo.setUserIds(new ArrayList<>()); } } if (StringUtils.isNotEmpty(taskStatisticsVo.getTreeType()) && (StringUtils.isEmpty(taskStatisticsVo.getTreeUserId()) && StringUtils.isEmpty(taskStatisticsVo.getDeptId()))) { return new BusinessAgentData(); } BusinessAgentData result = this.taskStatisticsMapper.getBusinessAgentDataTotalAdd(taskStatisticsVo); Long total = this.taskStatisticsMapper.getBusinessAgentDataTotal(taskStatisticsVo); result.setTotalNumber(total.toString()); BigDecimal sumPremium = result.getSumPremium(); BusinessAgentData allsumPremium = this.taskStatisticsMapper.getAllsumPremium(taskStatisticsVo); if (ObjectUtils.isNotEmpty(sumPremium)) { BigDecimal sumPremium1 = allsumPremium.getSumPremium(); if (sumPremium.compareTo(BigDecimal.ZERO) == 1) { BigDecimal multiply = sumPremium.divide(sumPremium1, 4, BigDecimal.ROUND_DOWN); result.setSumPremiumProportion(multiply); } } else { result.setSumPremiumProportion(BigDecimal.ZERO); } BigDecimal entranceAllFee = result.getEntranceAllFee() != null ? result.getEntranceAllFee() : BigDecimal.ZERO; BigDecimal exportAllFee = result.getExportAllFee() != null ? result.getExportAllFee() : BigDecimal.ZERO; BigDecimal subtract = entranceAllFee.subtract(exportAllFee); result.setDistributionAmount(subtract); //毛利润 if (subtract.compareTo(BigDecimal.ZERO) > 0) { BigDecimal resultDivided = subtract.divide(sumPremium, 4, RoundingMode.HALF_UP); //人均产能 result.setDistributionAmountRate(resultDivided); } else { result.setDistributionAmountRate(BigDecimal.ZERO); } return result; } /** * @description: 任务统计-代理人导出 * @author: whp * @date: 2024/9/9 **/ @Override public HttpResult agentExcel(TaskStatisticsVo taskStatisticsVo) { taskStatisticsVo.setManagementSource("2"); return getHttpResult(taskStatisticsVo); } /** * @description: 任务统计-电销导出 * @author: whp * @date: 2024/10/29 **/ @Override public HttpResult electricExcel(TaskStatisticsVo taskStatisticsVo) { taskStatisticsVo.setManagementSource("3"); return getHttpResult(taskStatisticsVo); } /** * @description: 任务统计-保险公司-导出 * @author: whp * @date: 2024/9/9 **/ @Override public HttpResult insuranceCompanyExcel(TaskStatisticsVo taskStatisticsVo) { if (com.ydtech.utils.StringUtils.isNotEmpty(taskStatisticsVo.getProvinceId())) { String provinceId = this.removeTrailingZeros(taskStatisticsVo.getProvinceId()); taskStatisticsVo.setProvinceId(provinceId); } if (com.ydtech.utils.StringUtils.isNotEmpty(taskStatisticsVo.getCityId())) { String cityId = this.removeTrailingZeros(taskStatisticsVo.getCityId()); taskStatisticsVo.setCityId(cityId); } if (com.ydtech.utils.StringUtils.isNotEmpty(taskStatisticsVo.getCountyId())) { String countyId = this.removeTrailingZeros(taskStatisticsVo.getCountyId()); taskStatisticsVo.setCountyId(countyId); } if (StringUtils.isNotEmpty(taskStatisticsVo.getDays())) { if ("7".equals(taskStatisticsVo.getDays())) { taskStatisticsVo.setDays("2"); } else if ("30".equals(taskStatisticsVo.getDays())) { taskStatisticsVo.setDays("3"); } } List list = this.insAreaCompanyMapper.insuranceCompanyExcel(taskStatisticsVo); String uploadPath = this.uploadPath + "/excel/"; Path path = Paths.get(uploadPath); if (!Files.exists(path)) { try { Files.createDirectories(path); } catch (IOException e) { e.printStackTrace(); } } String fileName = EasyExcelUtils.downExcel(uploadPath, "保险公司导出", InsuranceCompanyExcel.class, list); return HttpResult.ok("", uploadUrl + "excel/" + fileName); } /** * @description: 任控制台-业务数据-代理人-详情 * @author: whp * @date: 2024/09/10 **/ @Override public IPage getBusinessAgentDataDetails(TaskStatisticsVo taskStatisticsVo) { HashMap dateMapByType = getDateMapByType(taskStatisticsVo.getDateType(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd()); taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate")); taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate")); getDateByType(taskStatisticsVo.getDateType(), taskStatisticsVo); PageVo pageVo = new PageVo<>(); Page page = new Page<>(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize()); page.setSearchCount(false).setOptimizeCountSql(false);//关闭count查询 pageVo.setPageNum(taskStatisticsVo.getPageNum()); pageVo.setPageSize(taskStatisticsVo.getPageSize()); IPage list = this.taskStatisticsMapper.getBusinessAgentDataDetails(page, taskStatisticsVo); Long total = this.taskStatisticsMapper.getBusinessAgentDataDetailsAdd(taskStatisticsVo); list.setTotal(total); return list; } /** * @param taskStatisticsVo * @return 控制台任务统计 渠道代理人详情 */ @Override public IPage channelAgentDetails(TaskStatisticsVo taskStatisticsVo) { if (StringUtils.isNotEmpty(taskStatisticsVo.getDays())) { if ("7".equals(taskStatisticsVo.getDays())) { taskStatisticsVo.setDays("2"); } else if ("30".equals(taskStatisticsVo.getDays())) { taskStatisticsVo.setDays("3"); } } HashMap dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDays(), taskStatisticsVo.getBeginDate(), taskStatisticsVo.getEndDate()); taskStatisticsVo.setBeginDate(dateMapByType.get("startDate")); taskStatisticsVo.setEndDate(dateMapByType.get("endDate")); PageVo pageVo = new PageVo<>(); Page page = new Page<>(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize()); pageVo.setPageNum(taskStatisticsVo.getPageNum()); pageVo.setPageSize(taskStatisticsVo.getPageSize()); IPage list = this.taskStatisticsMapper.channelAgentDetails(page, taskStatisticsVo); return list; } /** * @description: 财务中心-费用校验-合计 * @author: whp * @date: 2024/9/28 **/ @Override public HashMap costCenterTotal(TaskStatisticsVo taskStatisticsVo) { if (StringUtils.isNotEmpty(taskStatisticsVo.getDays())) { if ("7".equals(taskStatisticsVo.getDays())) { taskStatisticsVo.setDays("2"); } else if ("30".equals(taskStatisticsVo.getDays())) { taskStatisticsVo.setDays("3"); } } HashMap dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDays(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd()); taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate")); taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate")); PageVo pageVo = new PageVo<>(); Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize()); pageVo.setPageNum(taskStatisticsVo.getPageNum()); pageVo.setPageSize(taskStatisticsVo.getPageSize()); HashMap list = this.insAreaCompanyMapper.costCenterTotal(taskStatisticsVo); return list; } private void appendName(BusinessAgentData user) { StringBuilder stringBuilder = new StringBuilder(); String deptId = user.getDeptId(); if (com.ydtech.utils.StringUtils.isNotEmpty(deptId)) { int length = deptId.length(); if (length > 0) { if (length <= 5) { String dept = deptId.replaceAll("[^\\d]*(\\d+).*", "$1"); SysDept cityName = sysDeptMapper.selectById(dept); String name = cityName.getName(); stringBuilder.append("(").append(name).append(")"); } else if (length > 5) { String dept = deptId.replaceAll("[^\\d]*(\\d+).*", "$1"); if (dept.length() < 5) { SysDept dept1 = sysDeptMapper.selectById(dept); SysDept cityName = sysDeptMapper.selectById(deptId); stringBuilder.append(dept1.getName()).append(cityName.getName()); } else { String deptIdTwo = dept.substring(0, 4); SysDept dept1 = sysDeptMapper.selectById(deptIdTwo); SysDept dept2 = sysDeptMapper.selectById(dept); stringBuilder.append(dept1.getName()).append(dept2.getName()); } } user.setDeptName(stringBuilder.toString()); } } } /** * @description: 任控制台-业务数据-渠道-详情 * @author: hh * @date: 2024/11/19 **/ @Override public PageInfo getBusinessOrderDataDetails(TaskStatisticsVo taskStatisticsVo) { getDateByType(taskStatisticsVo.getDateType(), taskStatisticsVo); PageHelper.startPage(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize()); List businessOrderList = this.taskStatisticsMapper.getBusinessOrderDataDetails(taskStatisticsVo); if (!com.ydtech.utils.StringUtils.isNullOrEmpty(businessOrderList) && !businessOrderList.isEmpty()) { for (BusinessOrderData businessOrderData : businessOrderList) { BigDecimal entranceAllFee = businessOrderData.getEntranceAllFee() != null ? businessOrderData.getEntranceAllFee() .setScale(2, BigDecimal.ROUND_HALF_UP) : BigDecimal.ZERO; BigDecimal exportAllFee = businessOrderData.getExportAllFee() != null ? businessOrderData.getExportAllFee() : BigDecimal.ZERO; BigDecimal distributionAmount = entranceAllFee.subtract(exportAllFee); businessOrderData.setDistributionAmount(distributionAmount); //毛利润 businessOrderData.setEntranceAllFee(entranceAllFee); if (distributionAmount.compareTo(BigDecimal.ZERO) > 0 && businessOrderData.getSumPremium() .compareTo(BigDecimal.ZERO) > 0) { BigDecimal resultDivided = distributionAmount.divide(businessOrderData.getSumPremium(), 4, RoundingMode.HALF_UP); //人均产能 businessOrderData.setDistributionAmountRate(resultDivided); } else { businessOrderData.setDistributionAmountRate(new BigDecimal("0.0000")); } } } return new PageInfo<>(businessOrderList); } /** * @description: 任控制台-业务数据-渠道-合计 * @author: hh * @date: 2024/11/19 **/ @Override public BusinessOrderData getBusinessOrderDataTotal(TaskStatisticsVo taskStatisticsVo) { getDateByType(taskStatisticsVo.getDateType(), taskStatisticsVo); BusinessOrderData result = this.taskStatisticsMapper.getBusinessOrderDataTotal(taskStatisticsVo); if (com.ydtech.utils.StringUtils.isNullOrEmpty(result)) { return null; } BigDecimal sumPremium = result.getSumPremium(); BusinessAgentData allsumPremium = this.taskStatisticsMapper.getAllsumPremium(taskStatisticsVo); if (ObjectUtils.isNotEmpty(sumPremium)) { BigDecimal allSumPremium = allsumPremium.getSumPremium(); if (sumPremium.compareTo(BigDecimal.ZERO) == 1 && allSumPremium.compareTo(BigDecimal.ZERO) > 0) { BigDecimal multiply = sumPremium.divide(allSumPremium, 4, BigDecimal.ROUND_DOWN); result.setSumPremiumProportion(multiply); } } else { result.setSumPremiumProportion(BigDecimal.ZERO); } BigDecimal entranceAllFee = result.getEntranceAllFee() != null ? result.getEntranceAllFee() : BigDecimal.ZERO; BigDecimal exportAllFee = result.getExportAllFee() != null ? result.getExportAllFee() : BigDecimal.ZERO; BigDecimal subtract = entranceAllFee.subtract(exportAllFee); result.setDistributionAmount(subtract); //毛利润 if (subtract.compareTo(BigDecimal.ZERO) > 0 && sumPremium.compareTo(BigDecimal.ZERO) > 0) { BigDecimal resultDivided = subtract.divide(sumPremium, 4, RoundingMode.HALF_UP); //人均产能 result.setDistributionAmountRate(resultDivided); } else { result.setDistributionAmountRate(new BigDecimal("0.0000")); } return result; } /** * 任控制台-业务数据-渠道" * * @param taskStatisticsVo * @return */ @Override public IPage getBusinessElectricData(TaskStatisticsVo taskStatisticsVo) { PageVo pageVo = new PageVo<>(); Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize()); page.setSearchCount(false).setOptimizeCountSql(false);//关闭count查询 pageVo.setPageNum(taskStatisticsVo.getPageNum()); pageVo.setPageSize(taskStatisticsVo.getPageSize()); if (StringUtils.isNotEmpty(taskStatisticsVo.getTreeUserId())) { List userIds = this.getNextLevel(taskStatisticsVo.getTreeUserId()); taskStatisticsVo.setUserIds(userIds); } if (StringUtils.isNotEmpty(taskStatisticsVo.getTreeType()) && (StringUtils.isEmpty(taskStatisticsVo.getTreeUserId()) && StringUtils.isEmpty(taskStatisticsVo.getDeptId()))) { return new Page<>(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageNum()); } HashMap dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDateType(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd()); taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate")); taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate")); getDateByType(taskStatisticsVo.getDateType(), taskStatisticsVo); IPage list = this.taskStatisticsMapper.getBusinessAgentData(page, taskStatisticsVo); List records = list.getRecords(); for (BusinessAgentData record : records) { this.appendName(record); if (record.getDistributionAmountRate() == null) { record.setDistributionAmountRate(new BigDecimal("0.0000")); } } Long total = this.taskStatisticsMapper.getBusinessAgentDataTotal(taskStatisticsVo); list.setTotal(total); return list; } /** * 任控制台-业务数据-电销-合计 * * @param taskStatisticsVo * @return */ @Override public BusinessAgentData getBusinessElectricDataTotal(TaskStatisticsVo taskStatisticsVo) { if (StringUtils.isNotEmpty(taskStatisticsVo.getTreeUserId())) { List userIds = this.getNextLevel(taskStatisticsVo.getTreeUserId()); taskStatisticsVo.setUserIds(userIds); } HashMap dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDateType(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd()); taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate")); taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate")); getDateByType(taskStatisticsVo.getDateType(), taskStatisticsVo); if (StringUtils.isNotEmpty(taskStatisticsVo.getTreeType()) && (StringUtils.isEmpty(taskStatisticsVo.getTreeUserId()) && StringUtils.isEmpty(taskStatisticsVo.getDeptId()))) { return new BusinessAgentData(); } String deptId = BaseController.getDeptId(); BusinessAgentData result = this.taskStatisticsMapper.getBusinessAgentDataTotalAdd(taskStatisticsVo); Long total = this.taskStatisticsMapper.getBusinessAgentDataTotal(taskStatisticsVo); result.setTotalNumber(total.toString()); BigDecimal sumPremium = result.getSumPremium(); BusinessAgentData allsumPremium = this.taskStatisticsMapper.getAllsumPremium(taskStatisticsVo); if (ObjectUtils.isNotEmpty(sumPremium)) { BigDecimal sumPremium1 = allsumPremium.getSumPremium(); if (sumPremium.compareTo(BigDecimal.ZERO) == 1) { BigDecimal multiply = sumPremium.divide(sumPremium1, 4, BigDecimal.ROUND_DOWN); result.setSumPremiumProportion(multiply); } } else { result.setSumPremiumProportion(BigDecimal.ZERO); } BigDecimal entranceAllFee = result.getEntranceAllFee() != null ? result.getEntranceAllFee() : BigDecimal.ZERO; BigDecimal exportAllFee = result.getExportAllFee() != null ? result.getExportAllFee() : BigDecimal.ZERO; BigDecimal subtract = entranceAllFee.subtract(exportAllFee); result.setDistributionAmount(subtract); //毛利润 if (subtract.compareTo(BigDecimal.ZERO) > 0) { BigDecimal resultDivided = subtract.divide(sumPremium, 4, RoundingMode.HALF_UP); //人均产能 result.setDistributionAmountRate(resultDivided); } else { result.setDistributionAmountRate(BigDecimal.ZERO); } return result; } @Override public HttpResult getBusinessDataExcel(TaskStatisticsVo taskStatisticsVo) { if (StringUtils.isNotEmpty(taskStatisticsVo.getDays())) { if ("7".equals(taskStatisticsVo.getDays())) { taskStatisticsVo.setDateType("2"); } else if ("30".equals(taskStatisticsVo.getDays())) { taskStatisticsVo.setDateType("3"); } else if ("1".equals(taskStatisticsVo.getDays())) { taskStatisticsVo.setDateType("1"); } } if (com.ydtech.utils.StringUtils.isNotEmpty(taskStatisticsVo.getParterProvinceId())) { String provinceId = this.removeTrailingZeros(taskStatisticsVo.getParterProvinceId()); taskStatisticsVo.setParterProvinceId(provinceId); } if (com.ydtech.utils.StringUtils.isNotEmpty(taskStatisticsVo.getParterCityId())) { String cityId = this.removeTrailingZeros(taskStatisticsVo.getParterCityId()); taskStatisticsVo.setParterCityId(cityId); } if (com.ydtech.utils.StringUtils.isNotEmpty(taskStatisticsVo.getParterCountyId())) { String countyId = this.removeTrailingZeros(taskStatisticsVo.getParterCountyId()); taskStatisticsVo.setParterCountyId(countyId); } HashMap dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDateType(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd()); taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate")); taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate")); List list = this.insAreaCompanyMapper.getBusinessDataList(taskStatisticsVo); List sysUserPartners = BeanUtil.copyToList(list, BusinessCompanyExcel.class); String uploadPath = this.uploadPath + "/excel/"; Path path = Paths.get(uploadPath); if (!Files.exists(path)) { try { Files.createDirectories(path); } catch (IOException e) { e.printStackTrace(); } } String fileName = EasyExcelUtils.downExcel(uploadPath, "业务数据保险公司导出", BusinessCompanyExcel.class, sysUserPartners); return HttpResult.ok("", uploadUrl + "excel/" + fileName); } /** * @description: 控制台 - 业务数据 - 代理人导出 * @author: whp * @date: 2024/12/13 **/ @Override public HttpResult getBusinessAgentExcel(TaskStatisticsVo taskStatisticsVo) { if (StringUtils.isNotEmpty(taskStatisticsVo.getTreeType())) { if ((StringUtils.isNotEmpty(taskStatisticsVo.getTreeUserId()) && "2".equals(taskStatisticsVo.getTreeType()))) { List userIds = this.getNextLevel(taskStatisticsVo.getTreeUserId()); if (!userIds.isEmpty() && userIds.get(0) != null) { taskStatisticsVo.setUserIds(userIds); } else { taskStatisticsVo.setUserId(taskStatisticsVo.getTreeUserId()); } } else if (StringUtils.isNotEmpty(taskStatisticsVo.getTreeUserId()) && "1".equals(taskStatisticsVo.getTreeType())) { taskStatisticsVo.setDeptId(taskStatisticsVo.getTreeUserId()); taskStatisticsVo.setTreeUserId(null); taskStatisticsVo.setUserIds(new ArrayList<>()); } } HashMap dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDateType(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd()); taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate")); taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate")); getDateByType(taskStatisticsVo.getDateType(), taskStatisticsVo); List list = this.taskStatisticsMapper.getBusinessAgentDataExcel(taskStatisticsVo); for (BusinessAgentData record : list) { this.appendName(record); if (record.getDistributionAmountRate() == null) { record.setDistributionAmountRate(new BigDecimal("0.0000")); } if (record.getManagementSource().equals("2")) { record.setManagementSource("代理人"); } } List sysUserPartners = BeanUtil.copyToList(list, BusinessAgentExcel.class); String uploadPath = this.uploadPath + "/excel/"; Path path = Paths.get(uploadPath); if (!Files.exists(path)) { try { Files.createDirectories(path); } catch (IOException e) { e.printStackTrace(); } } String fileName = EasyExcelUtils.downExcel(uploadPath, "业务数据代理人导出", BusinessAgentExcel.class, sysUserPartners); return HttpResult.ok("", uploadUrl + "excel/" + fileName); } /** * @description: 控制台 - 业务数据 -渠道导出 * @author: whp * @date: 2024/12/13 **/ @Override public HttpResult getChannelExcel(TaskStatisticsVo taskStatisticsVo) { if (StringUtils.isNotEmpty(taskStatisticsVo.getTreeType())) { if ((StringUtils.isNotEmpty(taskStatisticsVo.getTreeUserId()) && "2".equals(taskStatisticsVo.getTreeType()))) { List userIds = this.getNextLevel(taskStatisticsVo.getTreeUserId()); if (!userIds.isEmpty() && userIds.get(0) != null) { taskStatisticsVo.setUserIds(userIds); } else { taskStatisticsVo.setUserId(taskStatisticsVo.getTreeUserId()); } } else if (StringUtils.isNotEmpty(taskStatisticsVo.getTreeUserId()) && "1".equals(taskStatisticsVo.getTreeType())) { taskStatisticsVo.setDeptId(taskStatisticsVo.getTreeUserId()); taskStatisticsVo.setTreeUserId(null); taskStatisticsVo.setUserIds(new ArrayList<>()); } } HashMap dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDateType(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd()); taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate")); taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate")); getDateByType(taskStatisticsVo.getDateType(), taskStatisticsVo); List list = this.taskStatisticsMapper.getBusinessAgentDataExcel(taskStatisticsVo); for (BusinessAgentData record : list) { this.appendName(record); if (record.getDistributionAmountRate() == null) { record.setDistributionAmountRate(new BigDecimal("0.0000")); } if (record.getManagementSource().equals("1")) { record.setManagementSource("渠道"); } } List sysUserPartners = BeanUtil.copyToList(list, GetChannelExcel.class); String uploadPath = this.uploadPath + "/excel/"; Path path = Paths.get(uploadPath); if (!Files.exists(path)) { try { Files.createDirectories(path); } catch (IOException e) { e.printStackTrace(); } } String fileName = EasyExcelUtils.downExcel(uploadPath, "业务数据渠道导出", GetChannelExcel.class, sysUserPartners); return HttpResult.ok("", uploadUrl + "excel/" + fileName); } /** * @version * @author: hh * @Date: 2024/11/19 * @Description: 通过时间类型判断 */ private static void getDateByType(String type, TaskStatisticsVo taskStatisticsVo) { String startDateStr = new String(); String endDateStr = new String(); if (StringUtils.isNotEmpty(type)) { switch (type) { case "1": startDateStr = SliceUpDateUtil.getBeforeDay(new Date(), 0) + " 00:00:00"; endDateStr = SliceUpDateUtil.getBeforeDay(new Date(), 0) + " 23:59:59"; break; case "2": startDateStr = SliceUpDateUtil.getBeforeDay(new Date(), 1) + " 00:00:00"; endDateStr = SliceUpDateUtil.getBeforeDay(new Date(), 0) + " 23:59:59"; break; case "3": startDateStr = SliceUpDateUtil.getBeforeDay(new Date(), 6) + " 00:00:00"; endDateStr = SliceUpDateUtil.getBeforeDay(new Date(), 0) + " 23:59:59"; break; } if (StringUtils.isNotEmpty(taskStatisticsVo.getTimeType())) { switch (taskStatisticsVo.getTimeType()) { case "1": taskStatisticsVo.setEnterTimeStart(startDateStr); taskStatisticsVo.setEnterTimeEnd(endDateStr); break; case "2": taskStatisticsVo.setSigningTimeStart(startDateStr); taskStatisticsVo.setSigningTimeEnd(endDateStr); break; } } } } /** * @description: 财务中心 - 费用校验 - 人员查询 * @author: whp **/ @Override public IPage costReviewer(TaskStatisticsVo taskStatisticsVo) { if (StringUtils.isNotEmpty(taskStatisticsVo.getDays())) { if ("7".equals(taskStatisticsVo.getDays())) { taskStatisticsVo.setDays("2"); } else if ("30".equals(taskStatisticsVo.getDays())) { taskStatisticsVo.setDays("3"); } } HashMap dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDays(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd()); taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate")); taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate")); PageVo pageVo = new PageVo<>(); Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize()); pageVo.setPageNum(taskStatisticsVo.getPageNum()); pageVo.setPageSize(taskStatisticsVo.getPageSize()); IPage list = this.insAreaCompanyMapper.costReviewer(page, taskStatisticsVo); return list; } /** * 控制台 - 业务数据 -渠道明细导出 * @param taskStatisticsVo * @return */ @Override public HttpResult detailExport(TaskStatisticsVo taskStatisticsVo) { if (StringUtils.isNotEmpty(taskStatisticsVo.getTreeType())) { if ((StringUtils.isNotEmpty(taskStatisticsVo.getTreeUserId()) && "2".equals(taskStatisticsVo.getTreeType()))) { List userIds = this.getNextLevel(taskStatisticsVo.getTreeUserId()); if (!userIds.isEmpty() && userIds.get(0) != null) { taskStatisticsVo.setUserIds(userIds); } else { taskStatisticsVo.setUserId(taskStatisticsVo.getTreeUserId()); } } else if (StringUtils.isNotEmpty(taskStatisticsVo.getTreeUserId()) && "1".equals(taskStatisticsVo.getTreeType())) { taskStatisticsVo.setDeptId(taskStatisticsVo.getTreeUserId()); taskStatisticsVo.setTreeUserId(null); taskStatisticsVo.setUserIds(new ArrayList<>()); } } PageVo pageVo = new PageVo<>(); Page page = new Page<>(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize()); page.setSearchCount(false).setOptimizeCountSql(false);//关闭count查询 pageVo.setPageNum(taskStatisticsVo.getPageNum()); pageVo.setPageSize(taskStatisticsVo.getPageSize()); HashMap dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDateType(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd()); taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate")); taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate")); getDateByType(taskStatisticsVo.getDateType(), taskStatisticsVo); IPage list = this.taskStatisticsMapper.getBusinessAgentData(page, taskStatisticsVo); List records = list.getRecords(); List ids = records.stream() .map(BusinessAgentData::getUserId) // 提取每个对象的id属性 .collect(Collectors.toList()); // 收集到新的List中 if(!CollectionUtils.isEmpty(taskStatisticsVo.getUserIds())){ ids.addAll(taskStatisticsVo.getUserIds()); } taskStatisticsVo.setUserIds(ids); List result = taskStatisticsMapper.getAgentDataDetails(taskStatisticsVo); for (ChannelDetailsExport channelDetailsExport : result) { BusinessAgentData businessAgentData = new BusinessAgentData(); businessAgentData.setDeptId(channelDetailsExport.getDeptId()); this.appendName(businessAgentData); if (StringUtils.isNotEmpty(businessAgentData.getDeptName())) { channelDetailsExport.setDeptName(businessAgentData.getDeptName()); } } String uploadPath = this.uploadPath + "/excel/"; Path path = Paths.get(uploadPath); if (!Files.exists(path)) { try { Files.createDirectories(path); } catch (IOException e) { e.printStackTrace(); } } SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String formattedDate = sdf.format(new Date()); String fileName = EasyExcelUtils.downExcel(uploadPath, "1".equals(taskStatisticsVo.getManagementSource()) ? "业务数据渠道明细导出": "业务数据代理人明细导出"+formattedDate, ChannelDetailsExport.class, result); return HttpResult.ok("", uploadUrl + "excel/" + fileName); } }