| | |
| | | import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.customer.*; |
| | | import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerDO; |
| | | import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerPoolConfigDO; |
| | | import cn.iocoder.yudao.module.crm.service.contract.CrmContractService; |
| | | import cn.iocoder.yudao.module.crm.service.customer.CrmCustomerPoolConfigService; |
| | | import cn.iocoder.yudao.module.crm.service.customer.CrmCustomerService; |
| | | import cn.iocoder.yudao.module.system.api.dept.DeptApi; |
| | |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import java.io.IOException; |
| | | import java.math.BigDecimal; |
| | | import java.time.LocalDateTime; |
| | | import java.util.Arrays; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | import java.util.stream.Stream; |
| | | |
| | | import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT; |
| | |
| | | private CrmCustomerService customerService; |
| | | @Resource |
| | | private CrmCustomerPoolConfigService customerPoolConfigService; |
| | | @Resource |
| | | private CrmContractService contractService; |
| | | |
| | | @Resource |
| | | private DeptApi deptApi; |
| | |
| | | Map<Long, DeptRespDTO> deptMap = deptApi.getDeptMap(convertSet(userMap.values(), AdminUserRespDTO::getDeptId)); |
| | | // 1.2 获取距离进入公海的时间 |
| | | Map<Long, Long> poolDayMap = getPoolDayMap(list); |
| | | // 1.3 获取「已签订合同」的数量与金额合计(按本页客户批量统计,审核通过的合同才算) |
| | | Set<Long> customerIds = convertSet(list, CrmCustomerDO::getId); |
| | | Map<Long, Long> contractCountMap = contractService.getContractCountMapByCustomerIds(customerIds); |
| | | Map<Long, BigDecimal> contractPriceMap = contractService.getContractPriceMapByCustomerIds(customerIds); |
| | | // 2. 转换成 VO |
| | | return BeanUtils.toBean(list, CrmCustomerRespVO.class, customerVO -> { |
| | | customerVO.setAreaName(AreaUtils.format(customerVO.getAreaId())); |
| | |
| | | if (customerVO.getOwnerUserId() != null) { |
| | | customerVO.setPoolDay(poolDayMap.get(customerVO.getId())); |
| | | } |
| | | // 2.3 设置已签订合同的数量与金额合计(没有合同的客户:数量 0、金额 null,前端显示「—」) |
| | | customerVO.setContractCount( |
| | | contractCountMap.getOrDefault(customerVO.getId(), 0L).intValue()); |
| | | customerVO.setContractTotalPrice(contractPriceMap.get(customerVO.getId())); |
| | | }); |
| | | } |
| | | |
| | |
| | | } |
| | | list = CollectionUtils.filterList(list, customer -> { |
| | | // 特殊:如果没负责人,则说明已经在公海,不用计算 |
| | | if (customer.getOwnerUserId() == null) { |
| | | if (customer.getOwnerUserId() == null || Boolean.FALSE.equals(customer.getAutoPoolEnabled())) { |
| | | return false; |
| | | } |
| | | // 已成交 or 已锁定,不进入公海 |
| | |
| | | List<CrmCustomerImportExcelVO> list = Arrays.asList( |
| | | CrmCustomerImportExcelVO.builder().name("超级管理员").industryId(1).level(1).source(1) |
| | | .mobile("15601691300").telephone("").qq("").wechat("").email("yunai@iocoder.cn") |
| | | .areaId(null).detailAddress("").remark("").build(), |
| | | .areaId(null).detailAddress("").remark("").autoPoolEnabled(true).build(), |
| | | CrmCustomerImportExcelVO.builder().name("源码").industryId(1).level(1).source(1) |
| | | .mobile("15601691300").telephone("").qq("").wechat("").email("yunai@iocoder.cn") |
| | | .areaId(null).detailAddress("").remark("").build() |
| | | .areaId(null).detailAddress("").remark("").autoPoolEnabled(true).build() |
| | | ); |
| | | // 输出 |
| | | ExcelUtils.write(response, "客户导入模板.xls", "客户列表", CrmCustomerImportExcelVO.class, list); |