瀏覽代碼

CRM-合同: 新增更新合同商品如果有关联商机的话则更新商机商品

puhui999 1 年之前
父節點
當前提交
9caaa96e5b
共有 12 個文件被更改,包括 163 次插入140 次删除
  1. 2 0
      yudao-module-crm/yudao-module-crm-api/src/main/java/cn/iocoder/yudao/module/crm/enums/LogRecordConstants.java
  2. 6 3
      yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contract/CrmContractController.java
  3. 0 71
      yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contract/vo/CrmContractExcelVO.java
  4. 3 11
      yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/customer/CrmCustomerController.java
  5. 25 0
      yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/customer/vo/CrmCustomerImportReqVO.java
  6. 16 8
      yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/business/CrmBusinessService.java
  7. 14 5
      yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/business/CrmBusinessServiceImpl.java
  8. 48 0
      yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/business/bo/CrmBusinessUpdateProductReqBO.java
  9. 38 3
      yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/contract/CrmContractServiceImpl.java
  10. 0 28
      yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/contract/listener/CrmContractResultListener.java
  11. 2 3
      yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/customer/CrmCustomerService.java
  12. 9 8
      yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/customer/CrmCustomerServiceImpl.java

+ 2 - 0
yudao-module-crm/yudao-module-crm-api/src/main/java/cn/iocoder/yudao/module/crm/enums/LogRecordConstants.java

@@ -93,6 +93,8 @@ public interface LogRecordConstants {
     String CRM_CONTRACT_DELETE_SUCCESS = "删除了合同【{{#contractName}}】";
     String CRM_CONTRACT_TRANSFER_SUB_TYPE = "转移合同";
     String CRM_CONTRACT_TRANSFER_SUCCESS = "将合同【{{#contract.name}}】的负责人从【{getAdminUserById{#contract.ownerUserId}}】变更为了【{getAdminUserById{#reqVO.newOwnerUserId}}】";
+    String CRM_CONTRACT_SUBMIT_SUB_TYPE = "提交合同审批";
+    String CRM_CONTRACT_SUBMIT_SUCCESS = "提交合同【{{#contractName}}】审批成功";
 
     // ======================= CRM_PRODUCT 产品 =======================
 

+ 6 - 3
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contract/CrmContractController.java

@@ -8,7 +8,10 @@ import cn.iocoder.yudao.framework.common.util.number.NumberUtils;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
 import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
-import cn.iocoder.yudao.module.crm.controller.admin.contract.vo.*;
+import cn.iocoder.yudao.module.crm.controller.admin.contract.vo.CrmContractPageReqVO;
+import cn.iocoder.yudao.module.crm.controller.admin.contract.vo.CrmContractRespVO;
+import cn.iocoder.yudao.module.crm.controller.admin.contract.vo.CrmContractSaveReqVO;
+import cn.iocoder.yudao.module.crm.controller.admin.contract.vo.CrmContractTransferReqVO;
 import cn.iocoder.yudao.module.crm.convert.contract.CrmContractConvert;
 import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessDO;
 import cn.iocoder.yudao.module.crm.dal.dataobject.contact.CrmContactDO;
@@ -127,8 +130,8 @@ public class CrmContractController {
                                     HttpServletResponse response) throws IOException {
         PageResult<CrmContractDO> pageResult = contractService.getContractPage(exportReqVO, getLoginUserId());
         // 导出 Excel
-        ExcelUtils.write(response, "合同.xls", "数据", CrmContractExcelVO.class,
-                BeanUtils.toBean(pageResult.getList(), CrmContractExcelVO.class));
+        ExcelUtils.write(response, "合同.xls", "数据", CrmContractRespVO.class,
+                BeanUtils.toBean(pageResult.getList(), CrmContractRespVO.class));
     }
 
     @PutMapping("/transfer")

+ 0 - 71
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contract/vo/CrmContractExcelVO.java

@@ -1,71 +0,0 @@
-package cn.iocoder.yudao.module.crm.controller.admin.contract.vo;
-
-import com.alibaba.excel.annotation.ExcelProperty;
-import lombok.Data;
-
-import java.time.LocalDateTime;
-
-// TODO @puhui999:合并到 RespVO 里哈;
-/**
- * CRM 合同 Excel VO
- *
- * @author dhb52
- */
-@Data
-public class CrmContractExcelVO {
-
-    @ExcelProperty("合同编号")
-    private Long id;
-
-    @ExcelProperty("合同名称")
-    private String name;
-
-    @ExcelProperty("客户编号")
-    private Long customerId;
-
-    @ExcelProperty("商机编号")
-    private Long businessId;
-
-    @ExcelProperty("工作流编号")
-    private Long processInstanceId;
-
-    @ExcelProperty("下单日期")
-    private LocalDateTime orderDate;
-
-    @ExcelProperty("负责人的用户编号")
-    private Long ownerUserId;
-
-    @ExcelProperty("合同编号")
-    private String no;
-
-    @ExcelProperty("开始时间")
-    private LocalDateTime startTime;
-
-    @ExcelProperty("结束时间")
-    private LocalDateTime endTime;
-
-    @ExcelProperty("合同金额")
-    private Integer price;
-
-    @ExcelProperty("整单折扣")
-    private Integer discountPercent;
-
-    @ExcelProperty("产品总金额")
-    private Integer productPrice;
-
-    @ExcelProperty("联系人编号")
-    private Long contactId;
-
-    @ExcelProperty("公司签约人")
-    private Long signUserId;
-
-    @ExcelProperty("最后跟进时间")
-    private LocalDateTime contactLastTime;
-
-    @ExcelProperty("备注")
-    private String remark;
-
-    @ExcelProperty("创建时间")
-    private LocalDateTime createTime;
-
-}

+ 3 - 11
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/customer/CrmCustomerController.java

@@ -21,7 +21,6 @@ import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
 import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
-import io.swagger.v3.oas.annotations.Parameters;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import jakarta.annotation.Resource;
 import jakarta.servlet.http.HttpServletResponse;
@@ -30,7 +29,6 @@ import org.mapstruct.ap.internal.util.Collections;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
 
 import java.io.IOException;
 import java.time.LocalDateTime;
@@ -218,19 +216,13 @@ public class CrmCustomerController {
         ExcelUtils.write(response, "客户导入模板.xls", "客户列表", CrmCustomerImportExcelVO.class, list);
     }
 
-    // TODO @puhui999:updateSupport 要不改成前端必须传递;哈哈哈,代码排版看着有点乱;
-    // TODO @puhui999:加一个选择负责人;允许空,空就进入公海;
     @PostMapping("/import")
     @Operation(summary = "导入客户")
-    @Parameters({
-            @Parameter(name = "file", description = "Excel 文件", required = true),
-            @Parameter(name = "updateSupport", description = "是否支持更新,默认为 false", example = "true")
-    })
     @PreAuthorize("@ss.hasPermission('system:customer:import')")
-    public CommonResult<CrmCustomerImportRespVO> importExcel(@RequestParam("file") MultipartFile file, @RequestParam(value = "updateSupport", required = false, defaultValue = "false") Boolean updateSupport)
+    public CommonResult<CrmCustomerImportRespVO> importExcel(@Valid @RequestBody CrmCustomerImportReqVO importReqVO)
             throws Exception {
-        List<CrmCustomerImportExcelVO> list = ExcelUtils.read(file, CrmCustomerImportExcelVO.class);
-        return success(customerService.importCustomerList(list, updateSupport, getLoginUserId()));
+        List<CrmCustomerImportExcelVO> list = ExcelUtils.read(importReqVO.getFile(), CrmCustomerImportExcelVO.class);
+        return success(customerService.importCustomerList(list, importReqVO));
     }
 
     @PutMapping("/transfer")

+ 25 - 0
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/customer/vo/CrmCustomerImportReqVO.java

@@ -0,0 +1,25 @@
+package cn.iocoder.yudao.module.crm.controller.admin.customer.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
+import lombok.Builder;
+import lombok.Data;
+import org.springframework.web.multipart.MultipartFile;
+
+@Schema(description = "管理后台 - 客户导入 Request VO")
+@Data
+@Builder
+public class CrmCustomerImportReqVO {
+
+    @Schema(description = "Excel 文件", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "Excel 文件不能为空")
+    private MultipartFile file;
+
+    @Schema(description = "是否支持更新", requiredMode = Schema.RequiredMode.REQUIRED, example = "true")
+    @NotNull(message = "是否支持更新不能为空")
+    private Boolean updateSupport;
+
+    @Schema(description = "负责人", example = "1")
+    private Long ownerUserId; // 为 null 则客户进入公海
+
+}

+ 16 - 8
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/business/CrmBusinessService.java

@@ -7,6 +7,7 @@ import cn.iocoder.yudao.module.crm.controller.admin.business.vo.business.CrmBusi
 import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessDO;
 import cn.iocoder.yudao.module.crm.dal.dataobject.contact.CrmContactDO;
 import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerDO;
+import cn.iocoder.yudao.module.crm.service.business.bo.CrmBusinessUpdateProductReqBO;
 import cn.iocoder.yudao.module.crm.service.followup.bo.CrmUpdateFollowUpReqBO;
 import jakarta.validation.Valid;
 
@@ -50,6 +51,21 @@ public interface CrmBusinessService {
      */
     void deleteBusiness(Long id);
 
+    /**
+     * 商机转移
+     *
+     * @param reqVO  请求
+     * @param userId 用户编号
+     */
+    void transferBusiness(CrmBusinessTransferReqVO reqVO, Long userId);
+
+    /**
+     * 更新商机关联商品
+     *
+     * @param updateProductReqBO 请求
+     */
+    void updateBusinessProduct(CrmBusinessUpdateProductReqBO updateProductReqBO);
+
     /**
      * 获得商机
      *
@@ -105,14 +121,6 @@ public interface CrmBusinessService {
      */
     PageResult<CrmBusinessDO> getBusinessPageByContact(CrmBusinessPageReqVO pageReqVO);
 
-    /**
-     * 商机转移
-     *
-     * @param reqVO  请求
-     * @param userId 用户编号
-     */
-    void transferBusiness(CrmBusinessTransferReqVO reqVO, Long userId);
-
     /**
      * 获取关联客户的商机数量
      *

+ 14 - 5
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/business/CrmBusinessServiceImpl.java

@@ -20,6 +20,7 @@ import cn.iocoder.yudao.module.crm.dal.mysql.business.CrmBusinessProductMapper;
 import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum;
 import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionLevelEnum;
 import cn.iocoder.yudao.module.crm.framework.permission.core.annotations.CrmPermission;
+import cn.iocoder.yudao.module.crm.service.business.bo.CrmBusinessUpdateProductReqBO;
 import cn.iocoder.yudao.module.crm.service.contact.CrmContactBusinessService;
 import cn.iocoder.yudao.module.crm.service.contract.CrmContractService;
 import cn.iocoder.yudao.module.crm.service.followup.bo.CrmUpdateFollowUpReqBO;
@@ -80,7 +81,7 @@ public class CrmBusinessServiceImpl implements CrmBusinessService {
         businessMapper.insert(business);
         // 1.2 插入商机关联商品
         if (CollUtil.isNotEmpty(createReqVO.getProductItems())) { // 如果有的话
-            List<CrmBusinessProductDO> productList = convertBusinessProductList(createReqVO, business.getId());
+            List<CrmBusinessProductDO> productList = convertBusinessProductList(createReqVO.getProductItems(), business.getId());
             businessProductMapper.insertBatch(productList);
             // 更新合同商品总金额
             businessMapper.updateById(new CrmBusinessDO().setId(business.getId()).setProductPrice(
@@ -120,7 +121,7 @@ public class CrmBusinessServiceImpl implements CrmBusinessService {
         CrmBusinessDO updateObj = BeanUtils.toBean(updateReqVO, CrmBusinessDO.class);
         businessMapper.updateById(updateObj);
         // 2.2 更新商机关联商品
-        List<CrmBusinessProductDO> productList = convertBusinessProductList(updateReqVO, updateObj.getId());
+        List<CrmBusinessProductDO> productList = convertBusinessProductList(updateReqVO.getProductItems(), updateObj.getId());
         updateBusinessProduct(productList, updateObj.getId());
 
         // TODO @商机待定:如果状态发生变化,插入商机状态变更记录表
@@ -174,15 +175,15 @@ public class CrmBusinessServiceImpl implements CrmBusinessService {
         }
     }
 
-    private List<CrmBusinessProductDO> convertBusinessProductList(CrmBusinessSaveReqVO reqVO, Long businessId) {
+    private List<CrmBusinessProductDO> convertBusinessProductList(List<CrmBusinessSaveReqVO.CrmBusinessProductItem> productItems, Long businessId) {
         // 校验商品存在
-        Set<Long> productIds = convertSet(reqVO.getProductItems(), CrmBusinessSaveReqVO.CrmBusinessProductItem::getId);
+        Set<Long> productIds = convertSet(productItems, CrmBusinessSaveReqVO.CrmBusinessProductItem::getId);
         List<CrmProductDO> productList = productService.getProductList(productIds);
         if (CollUtil.isEmpty(productIds) || productList.size() != productIds.size()) {
             throw exception(PRODUCT_NOT_EXISTS);
         }
         Map<Long, CrmProductDO> productMap = convertMap(productList, CrmProductDO::getId);
-        return convertList(reqVO.getProductItems(), productItem -> {
+        return convertList(productItems, productItem -> {
             CrmProductDO product = productMap.get(productItem.getId());
             return BeanUtils.toBean(product, CrmBusinessProductDO.class)
                     .setId(null).setProductId(productItem.getId()).setBusinessId(businessId)
@@ -231,6 +232,14 @@ public class CrmBusinessServiceImpl implements CrmBusinessService {
         LogRecordContext.putVariable("business", business);
     }
 
+    @Override
+    public void updateBusinessProduct(CrmBusinessUpdateProductReqBO updateProductReqBO) {
+        // 更新商机关联商品
+        List<CrmBusinessProductDO> productList = convertBusinessProductList(
+                BeanUtils.toBean(updateProductReqBO.getProductItems(), CrmBusinessSaveReqVO.CrmBusinessProductItem.class), updateProductReqBO.getId());
+        updateBusinessProduct(productList, updateProductReqBO.getId());
+    }
+
     //======================= 查询相关 =======================
 
     @Override

+ 48 - 0
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/business/bo/CrmBusinessUpdateProductReqBO.java

@@ -0,0 +1,48 @@
+package cn.iocoder.yudao.module.crm.service.business.bo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotEmpty;
+import jakarta.validation.constraints.NotNull;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+/**
+ * 更新商机商品 Update Req BO
+ *
+ * @author HUIHUI
+ */
+@Data
+public class CrmBusinessUpdateProductReqBO {
+
+    /**
+     * 商机编号
+     */
+    @NotNull(message = "商机编号不能为空")
+    private Long id;
+
+    @NotEmpty(message = "产品列表不能为空")
+    private List<CrmBusinessProductItem> productItems;
+
+    @Schema(description = "产品列表")
+    @Data
+    @NoArgsConstructor
+    @AllArgsConstructor
+    public static class CrmBusinessProductItem {
+
+        @Schema(description = "产品编号", example = "20529")
+        @NotNull(message = "产品编号不能为空")
+        private Long id;
+
+        @Schema(description = "产品数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "8911")
+        @NotNull(message = "产品数量不能为空")
+        private Integer count;
+
+        @Schema(description = "产品折扣")
+        private Integer discountPercent;
+
+    }
+
+}

+ 38 - 3
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/contract/CrmContractServiceImpl.java

@@ -11,6 +11,7 @@ import cn.iocoder.yudao.framework.common.util.object.ObjectUtils;
 import cn.iocoder.yudao.module.bpm.api.listener.dto.BpmResultListenerRespDTO;
 import cn.iocoder.yudao.module.bpm.api.task.BpmProcessInstanceApi;
 import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO;
+import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum;
 import cn.iocoder.yudao.module.crm.controller.admin.contract.vo.CrmContractPageReqVO;
 import cn.iocoder.yudao.module.crm.controller.admin.contract.vo.CrmContractSaveReqVO;
 import cn.iocoder.yudao.module.crm.controller.admin.contract.vo.CrmContractTransferReqVO;
@@ -25,6 +26,7 @@ import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum;
 import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionLevelEnum;
 import cn.iocoder.yudao.module.crm.framework.permission.core.annotations.CrmPermission;
 import cn.iocoder.yudao.module.crm.service.business.CrmBusinessService;
+import cn.iocoder.yudao.module.crm.service.business.bo.CrmBusinessUpdateProductReqBO;
 import cn.iocoder.yudao.module.crm.service.customer.CrmCustomerService;
 import cn.iocoder.yudao.module.crm.service.followup.bo.CrmUpdateFollowUpReqBO;
 import cn.iocoder.yudao.module.crm.service.permission.CrmPermissionService;
@@ -96,7 +98,11 @@ public class CrmContractServiceImpl implements CrmContractService {
             // 更新合同商品总金额
             contractMapper.updateById(new CrmContractDO().setId(contract.getId()).setProductPrice(
                     getSumValue(productList, CrmContractProductDO::getTotalPrice, Integer::sum)));
-            // TODO @puhui999: 如果存在合同关联了商机则更新商机商品关联
+            // 如果存在合同关联了商机则更新商机商品关联
+            if (contract.getBusinessId() != null) {
+                businessService.updateBusinessProduct(new CrmBusinessUpdateProductReqBO().setId(contract.getBusinessId())
+                        .setProductItems(BeanUtils.toBean(createReqVO.getProductItems(), CrmBusinessUpdateProductReqBO.CrmBusinessProductItem.class)));
+            }
         }
 
         // 2. 创建数据权限
@@ -251,7 +257,8 @@ public class CrmContractServiceImpl implements CrmContractService {
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    // TODO @puhui999:操作日志;
+    @LogRecord(type = CRM_CONTRACT_TYPE, subType = CRM_CONTRACT_SUBMIT_SUB_TYPE, bizNo = "{{#id}}",
+            success = CRM_CONTRACT_SUBMIT_SUCCESS)
     public void submitContract(Long id, Long userId) {
         // 1. 校验合同是否在审批
         CrmContractDO contract = validateContractExists(id);
@@ -266,15 +273,43 @@ public class CrmContractServiceImpl implements CrmContractService {
         // 3. 更新合同工作流编号
         contractMapper.updateById(new CrmContractDO().setId(id).setProcessInstanceId(processInstanceId)
                 .setAuditStatus(CrmAuditStatusEnum.PROCESS.getStatus()));
+
+        // 3. 记录日志
+        LogRecordContext.putVariable("contractName", contract.getName());
     }
 
     @Override
     public void updateContractAuditStatus(BpmResultListenerRespDTO event) {
-        // TODO @puhui999:可能要判断下状态是否符合预期
+        // 判断下状态是否符合预期
+        if (!isEndResult(event.getResult())) {
+            return;
+        }
+        // 状态转换
+        if (ObjUtil.equal(event.getResult(), BpmProcessInstanceResultEnum.APPROVE.getResult())) {
+            event.setResult(CrmAuditStatusEnum.APPROVE.getStatus());
+        }
+        if (ObjUtil.equal(event.getResult(), BpmProcessInstanceResultEnum.REJECT.getResult())) {
+            event.setResult(CrmAuditStatusEnum.REJECT.getStatus());
+        }
+        if (ObjUtil.equal(event.getResult(), BpmProcessInstanceResultEnum.CANCEL.getResult())) {
+            event.setResult(CrmAuditStatusEnum.CANCEL.getStatus());
+        }
+        // 更新合同状态
         contractMapper.updateById(new CrmContractDO().setId(Long.parseLong(event.getBusinessKey()))
                 .setAuditStatus(event.getResult()));
     }
 
+    /**
+     * 判断该结果是否处于 End 最终结果
+     *
+     * @param result 结果
+     * @return 是否
+     */
+    public static boolean isEndResult(Integer result) {
+        return ObjectUtils.equalsAny(result, BpmProcessInstanceResultEnum.APPROVE.getResult(),
+                BpmProcessInstanceResultEnum.REJECT.getResult(), BpmProcessInstanceResultEnum.CANCEL.getResult());
+    }
+
     //======================= 查询相关 =======================
 
     @Override

+ 0 - 28
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/contract/listener/CrmContractResultListener.java

@@ -1,11 +1,7 @@
 package cn.iocoder.yudao.module.crm.service.contract.listener;
 
-import cn.hutool.core.util.ObjUtil;
-import cn.iocoder.yudao.framework.common.util.object.ObjectUtils;
 import cn.iocoder.yudao.module.bpm.api.listener.BpmResultListenerApi;
 import cn.iocoder.yudao.module.bpm.api.listener.dto.BpmResultListenerRespDTO;
-import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum;
-import cn.iocoder.yudao.module.crm.enums.common.CrmAuditStatusEnum;
 import cn.iocoder.yudao.module.crm.service.contract.CrmContractService;
 import cn.iocoder.yudao.module.crm.service.contract.CrmContractServiceImpl;
 import jakarta.annotation.Resource;
@@ -30,31 +26,7 @@ public class CrmContractResultListener implements BpmResultListenerApi {
 
     @Override
     public void onEvent(BpmResultListenerRespDTO event) {
-        boolean currentTaskFinish = isEndResult(event.getResult());
-        if (!currentTaskFinish) {
-            return;
-        }
-        if (ObjUtil.equal(event.getResult(), BpmProcessInstanceResultEnum.APPROVE.getResult())) {
-            event.setResult(CrmAuditStatusEnum.APPROVE.getStatus());
-        }
-        if (ObjUtil.equal(event.getResult(), BpmProcessInstanceResultEnum.REJECT.getResult())) {
-            event.setResult(CrmAuditStatusEnum.REJECT.getStatus());
-        }
-        if (ObjUtil.equal(event.getResult(), BpmProcessInstanceResultEnum.CANCEL.getResult())) {
-            event.setResult(CrmAuditStatusEnum.CANCEL.getStatus());
-        }
         contractService.updateContractAuditStatus(event);
     }
 
-    /**
-     * 判断该结果是否处于 End 最终结果
-     *
-     * @param result 结果
-     * @return 是否
-     */
-    public static boolean isEndResult(Integer result) {
-        return ObjectUtils.equalsAny(result, BpmProcessInstanceResultEnum.APPROVE.getResult(),
-                BpmProcessInstanceResultEnum.REJECT.getResult(), BpmProcessInstanceResultEnum.CANCEL.getResult());
-    }
-
 }

+ 2 - 3
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/customer/CrmCustomerService.java

@@ -110,11 +110,10 @@ public interface CrmCustomerService {
      * 批量导入客户
      *
      * @param importCustomers 导入客户列表
-     * @param isUpdateSupport 是否支持更新
-     * @param userId          用户编号
+     * @param importReqVO     请求
      * @return 导入结果
      */
-    CrmCustomerImportRespVO importCustomerList(List<CrmCustomerImportExcelVO> importCustomers, Boolean isUpdateSupport, Long userId);
+    CrmCustomerImportRespVO importCustomerList(List<CrmCustomerImportExcelVO> importCustomers, CrmCustomerImportReqVO importReqVO);
 
     // ==================== 公海相关操作 ====================
 

+ 9 - 8
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/customer/CrmCustomerServiceImpl.java

@@ -108,7 +108,7 @@ public class CrmCustomerServiceImpl implements CrmCustomerService {
     /**
      * 初始化客户的通用字段
      *
-     * @param customer 客户信息
+     * @param customer    客户信息
      * @param ownerUserId 负责人编号
      * @return 客户信息 DO
      */
@@ -244,8 +244,7 @@ public class CrmCustomerServiceImpl implements CrmCustomerService {
     }
 
     @Override
-    public CrmCustomerImportRespVO importCustomerList(List<CrmCustomerImportExcelVO> importCustomers,
-                                                      Boolean isUpdateSupport, Long userId) {
+    public CrmCustomerImportRespVO importCustomerList(List<CrmCustomerImportExcelVO> importCustomers, CrmCustomerImportReqVO importReqVO) {
         if (CollUtil.isEmpty(importCustomers)) {
             throw exception(CUSTOMER_IMPORT_LIST_IS_EMPTY);
         }
@@ -264,19 +263,21 @@ public class CrmCustomerServiceImpl implements CrmCustomerService {
             CrmCustomerDO existCustomer = customerMapper.selectByCustomerName(importCustomer.getName());
             if (existCustomer == null) {
                 // 1.1 插入客户信息
-                CrmCustomerDO customer = initCustomer(importCustomer, userId);
+                CrmCustomerDO customer = initCustomer(importCustomer, importReqVO.getOwnerUserId());
                 customerMapper.insert(customer);
                 respVO.getCreateCustomerNames().add(importCustomer.getName());
-                // 1.2 创建数据权限
-                permissionService.createPermission(new CrmPermissionCreateReqBO().setBizType(CrmBizTypeEnum.CRM_CUSTOMER.getType())
-                        .setBizId(customer.getId()).setUserId(userId).setLevel(CrmPermissionLevelEnum.OWNER.getLevel())); // 设置当前操作的人为负责人
+                if (importReqVO.getOwnerUserId() != null) {
+                    // 1.2 创建数据权限
+                    permissionService.createPermission(new CrmPermissionCreateReqBO().setBizType(CrmBizTypeEnum.CRM_CUSTOMER.getType())
+                            .setBizId(customer.getId()).setUserId(importReqVO.getOwnerUserId()).setLevel(CrmPermissionLevelEnum.OWNER.getLevel())); // 设置当前操作的人为负责人
+                }
                 // 1.3 记录操作日志
                 getSelf().importCustomerLog(customer, false);
                 return;
             }
 
             // 情况二:如果存在,判断是否允许更新
-            if (!isUpdateSupport) {
+            if (!importReqVO.getUpdateSupport()) {
                 respVO.getFailureCustomerNames().put(importCustomer.getName(),
                         StrUtil.format(CUSTOMER_NAME_EXISTS.getMsg(), importCustomer.getName()));
                 return;