From 4bc513be11e671caf20ec6013a51dee42c2ed96e Mon Sep 17 00:00:00 2001
From: liu <2021943741@qq.com>
Date: 星期六, 07 十一月 2026 18:31:26 +0800
Subject: [PATCH] fix(crm): 禁止物料类合同开票
---
yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/salesTarget/CrmSalesTargetServiceImpl.java | 96 ++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 96 insertions(+), 0 deletions(-)
diff --git a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/salesTarget/CrmSalesTargetServiceImpl.java b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/salesTarget/CrmSalesTargetServiceImpl.java
index 9784da9..ba9331b 100644
--- a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/salesTarget/CrmSalesTargetServiceImpl.java
+++ b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/salesTarget/CrmSalesTargetServiceImpl.java
@@ -2,9 +2,13 @@
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
+import cn.iocoder.yudao.framework.common.exception.ServiceException;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.crm.controller.admin.salesTarget.vo.CrmSalesTargetChangeStatusReqVO;
+import cn.iocoder.yudao.module.crm.controller.admin.salesTarget.vo.CrmSalesTargetImportExcelVO;
+import cn.iocoder.yudao.module.crm.controller.admin.salesTarget.vo.CrmSalesTargetImportReqVO;
+import cn.iocoder.yudao.module.crm.controller.admin.salesTarget.vo.CrmSalesTargetImportRespVO;
import cn.iocoder.yudao.module.crm.controller.admin.salesTarget.vo.CrmSalesTargetPageReqVO;
import cn.iocoder.yudao.module.crm.controller.admin.salesTarget.vo.CrmSalesTargetRespVO;
import cn.iocoder.yudao.module.crm.controller.admin.salesTarget.vo.CrmSalesTargetSaveReqVO;
@@ -35,6 +39,7 @@
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -45,6 +50,7 @@
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
+import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.filterList;
import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.*;
/**
@@ -155,6 +161,96 @@
return convertListToRespVO(list);
}
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public CrmSalesTargetImportRespVO importSalesTargetList(List<CrmSalesTargetImportExcelVO> importSalesTargets,
+ CrmSalesTargetImportReqVO importReqVO) {
+ // 1. 鏍¢獙闈炵┖
+ importSalesTargets = filterList(importSalesTargets, item -> StrUtil.isNotBlank(item.getName()));
+ if (CollUtil.isEmpty(importSalesTargets)) {
+ throw exception(CRM_SALES_TARGET_IMPORT_LIST_IS_EMPTY);
+ }
+
+ // 2. 閫愭潯澶勭悊
+ CrmSalesTargetImportRespVO respVO = CrmSalesTargetImportRespVO.builder()
+ .createSalesTargetNames(new ArrayList<>())
+ .updateSalesTargetNames(new ArrayList<>())
+ .failureSalesTargetNames(new LinkedHashMap<>())
+ .build();
+ importSalesTargets.forEach(importSalesTarget -> {
+ try {
+ // 2.1 瑙f瀽鐩爣缁村害瀵硅薄锛堜釜浜�/閮ㄩ棬/浜у搧锛�
+ Long targetUserId = null;
+ Long targetDeptId = null;
+ Long targetItemId = null;
+ if (Objects.equals(importSalesTarget.getTargetDimension(), CrmSalesTargetDimensionEnum.USER.getType())) {
+ if (StrUtil.isBlank(importSalesTarget.getTargetUserName())) {
+ throw exception(CRM_SALES_TARGET_DIMENSION_TARGET_MISSING, "鐢ㄦ埛");
+ }
+ List<AdminUserRespDTO> users = adminUserApi.getUserListByNickname(importSalesTarget.getTargetUserName());
+ if (CollUtil.isEmpty(users)) {
+ throw exception(CRM_SALES_TARGET_IMPORT_DIMENSION_TARGET_NOT_FOUND, "鐢ㄦ埛", importSalesTarget.getTargetUserName());
+ }
+ targetUserId = users.get(0).getId();
+ } else if (Objects.equals(importSalesTarget.getTargetDimension(), CrmSalesTargetDimensionEnum.DEPT.getType())) {
+ if (StrUtil.isBlank(importSalesTarget.getTargetDeptName())) {
+ throw exception(CRM_SALES_TARGET_DIMENSION_TARGET_MISSING, "閮ㄩ棬");
+ }
+ DeptRespDTO dept = deptApi.getDeptList().stream()
+ .filter(d -> d.getName().equals(importSalesTarget.getTargetDeptName()))
+ .findFirst().orElse(null);
+ if (dept == null) {
+ throw exception(CRM_SALES_TARGET_IMPORT_DIMENSION_TARGET_NOT_FOUND, "閮ㄩ棬", importSalesTarget.getTargetDeptName());
+ }
+ targetDeptId = dept.getId();
+ } else if (Objects.equals(importSalesTarget.getTargetDimension(), CrmSalesTargetDimensionEnum.ITEM.getType())) {
+ if (StrUtil.isBlank(importSalesTarget.getTargetItemCode())) {
+ throw exception(CRM_SALES_TARGET_DIMENSION_TARGET_MISSING, "鐗╂枡");
+ }
+ MdmItemRespDTO item = mdmItemApi.getItemByCode(importSalesTarget.getTargetItemCode()).getCheckedData();
+ if (item == null) {
+ throw exception(CRM_SALES_TARGET_IMPORT_DIMENSION_TARGET_NOT_FOUND, "鐗╂枡", importSalesTarget.getTargetItemCode());
+ }
+ targetItemId = item.getId();
+ }
+
+ // 2.2 璁$畻鍛ㄦ湡璧锋涓庣姸鎬�
+ LocalDateTime[] period = calculatePeriod(importSalesTarget.getPeriodType(), importSalesTarget.getPeriodValue());
+ Integer status = calcStatusByPeriod(period[0], period[1]);
+
+ // 2.3 鍒ゆ柇鏄惁宸插瓨鍦ㄥ悓鍚嶇洰鏍�
+ CrmSalesTargetDO existTarget = salesTargetMapper.selectByName(importSalesTarget.getName());
+ if (existTarget == null) {
+ // 2.3.1 鏂板
+ CrmSalesTargetDO target = BeanUtils.toBean(importSalesTarget, CrmSalesTargetDO.class)
+ .setTargetUserId(targetUserId).setTargetDeptId(targetDeptId).setTargetItemId(targetItemId)
+ .setStartTime(period[0]).setEndTime(period[1]).setStatus(status);
+ salesTargetMapper.insert(target);
+ respVO.getCreateSalesTargetNames().add(importSalesTarget.getName());
+ return;
+ }
+ // 2.3.2 宸插瓨鍦紝鍒ゆ柇鏄惁鍏佽鏇存柊
+ if (!importReqVO.getUpdateSupport()) {
+ respVO.getFailureSalesTargetNames().put(importSalesTarget.getName(),
+ StrUtil.format(CRM_SALES_TARGET_NAME_EXISTS.getMsg(), importSalesTarget.getName()));
+ return;
+ }
+ CrmSalesTargetDO updateDO = BeanUtils.toBean(importSalesTarget, CrmSalesTargetDO.class)
+ .setId(existTarget.getId())
+ .setTargetUserId(targetUserId).setTargetDeptId(targetDeptId).setTargetItemId(targetItemId)
+ .setStartTime(period[0]).setEndTime(period[1]);
+ // 鎵嬪姩浣滃簾鐨勭姸鎬佷笉鍥犲鍏ヨ鐩�
+ updateDO.setStatus(Objects.equals(existTarget.getStatus(), CrmSalesTargetStatusEnum.INVALID.getStatus())
+ ? CrmSalesTargetStatusEnum.INVALID.getStatus() : status);
+ salesTargetMapper.updateById(updateDO);
+ respVO.getUpdateSalesTargetNames().add(importSalesTarget.getName());
+ } catch (ServiceException ex) {
+ respVO.getFailureSalesTargetNames().put(importSalesTarget.getName(), ex.getMessage());
+ }
+ });
+ return respVO;
+ }
+
// ========== 绉佹湁鏂规硶 ==========
private CrmSalesTargetDO validateSalesTargetExists(Long id) {
--
Gitblit v1.9.3