mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-10-28 16:58:43 +08:00 
			
		
		
		
	Merge remote-tracking branch 'yudao/feature/crm' into feature/crm
# Conflicts: # yudao-module-crm/yudao-module-crm-api/src/main/java/cn/iocoder/yudao/module/crm/enums/ErrorCodeConstants.java # yudao-module-crm/yudao-module-crm-biz/src/test/java/cn/iocoder/yudao/module/crm/service/business/BusinessStatusTypeServiceImplTest.java
This commit is contained in:
		| @@ -66,4 +66,7 @@ public interface ErrorCodeConstants { | ||||
|     // ========== 商机状态 1_020_011_000 ========== | ||||
|     ErrorCode BUSINESS_STATUS_NOT_EXISTS = new ErrorCode(1_020_011_000, "商机状态不存在"); | ||||
|  | ||||
|     // ========== 客户公海规则设置 1_020_011_000 ========== | ||||
|     ErrorCode CUSTOMER_LIMIT_CONFIG_NOT_EXISTS = new ErrorCode(1_020_012_000, "客户限制配置不存在"); | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -0,0 +1,44 @@ | ||||
| package cn.iocoder.yudao.module.crm.enums.customer; | ||||
|  | ||||
| import cn.iocoder.yudao.framework.common.core.IntArrayValuable; | ||||
| import lombok.AllArgsConstructor; | ||||
| import lombok.Getter; | ||||
|  | ||||
| import java.util.Arrays; | ||||
|  | ||||
| /** | ||||
|  * CRM 客户限制配置规则类型 | ||||
|  * | ||||
|  * @author Wanwan | ||||
|  */ | ||||
| @Getter | ||||
| @AllArgsConstructor | ||||
| public enum CrmCustomerLimitConfigTypeEnum implements IntArrayValuable { | ||||
|  | ||||
|     /** | ||||
|      * 拥有客户数限制 | ||||
|      */ | ||||
|     CUSTOMER_QUANTITY_LIMIT(1, "拥有客户数限制"), | ||||
|     /** | ||||
|      * 锁定客户数限制 | ||||
|      */ | ||||
|     CUSTOMER_LOCK_LIMIT(2, "锁定客户数限制"), | ||||
|     ; | ||||
|  | ||||
|     public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(CrmCustomerLimitConfigTypeEnum::getCode).toArray(); | ||||
|  | ||||
|     /** | ||||
|      * 状态 | ||||
|      */ | ||||
|     private final Integer code; | ||||
|     /** | ||||
|      * 状态名 | ||||
|      */ | ||||
|     private final String name; | ||||
|  | ||||
|     @Override | ||||
|     public int[] array() { | ||||
|         return ARRAYS; | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -1,16 +1,18 @@ | ||||
| package cn.iocoder.yudao.module.crm.controller.admin.business; | ||||
|  | ||||
| import cn.hutool.core.collection.CollUtil; | ||||
| import cn.iocoder.yudao.framework.common.pojo.CommonResult; | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||
| 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.business.vo.*; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.business.*; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.status.CrmBusinessStatusQueryVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.type.CrmBusinessStatusTypeQueryVO; | ||||
| import cn.iocoder.yudao.module.crm.convert.business.CrmBusinessConvert; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessDO; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessStatusDO; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessStatusTypeDO; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerDO; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.permission.CrmPermissionDO; | ||||
| import cn.iocoder.yudao.module.crm.service.business.CrmBusinessService; | ||||
| import cn.iocoder.yudao.module.crm.service.business.CrmBusinessStatusService; | ||||
| import cn.iocoder.yudao.module.crm.service.business.CrmBusinessStatusTypeService; | ||||
| @@ -91,17 +93,21 @@ public class CrmBusinessController { | ||||
|     @PreAuthorize("@ss.hasPermission('crm:business:query')") | ||||
|     public CommonResult<PageResult<CrmBusinessRespVO>> getBusinessPage(@Valid CrmBusinessPageReqVO pageVO) { | ||||
|         PageResult<CrmBusinessDO> pageResult = businessService.getBusinessPage(pageVO, getLoginUserId()); | ||||
|         //处理客户名称回显 | ||||
|         if (CollUtil.isEmpty(pageResult.getList())) { | ||||
|             return success(PageResult.empty(pageResult.getTotal())); | ||||
|         } | ||||
|         // 处理客户名称回显 | ||||
|         // TODO @ljlleo:可以使用 CollectionUtils.convertSet 替代常用的 stream 操作,更简洁一点;下面几个也是哈; | ||||
|         Set<Long> customerIds = pageResult.getList().stream() | ||||
|                 .map(CrmBusinessDO::getCustomerId).filter(Objects::nonNull).collect(Collectors.toSet()); | ||||
|         List<CrmCustomerDO> customerList = customerService.getCustomerList(customerIds); | ||||
|         //处理商机状态类型名称回显 | ||||
|         // 处理商机状态类型名称回显 | ||||
|         Set<Long> statusTypeIds = pageResult.getList().stream() | ||||
|                 .map(CrmBusinessDO::getStatusTypeId).filter(Objects::nonNull).collect(Collectors.toSet()); | ||||
|         CrmBusinessStatusTypeQueryVO queryStatusTypeVO = new CrmBusinessStatusTypeQueryVO(); | ||||
|         queryStatusTypeVO.setIdList(statusTypeIds); | ||||
|         List<CrmBusinessStatusTypeDO> statusTypeList = businessStatusTypeService.selectList(queryStatusTypeVO); | ||||
|         //处理商机状态名称回显 | ||||
|         // 处理商机状态名称回显 | ||||
|         Set<Long> statusIds = pageResult.getList().stream() | ||||
|                 .map(CrmBusinessDO::getCustomerId).filter(Objects::nonNull).collect(Collectors.toSet()); | ||||
|         CrmBusinessStatusQueryVO queryVO = new CrmBusinessStatusQueryVO(); | ||||
|   | ||||
| @@ -7,7 +7,12 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||
| 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.business.vo.*; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.status.CrmBusinessStatusQueryVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.status.CrmBusinessStatusRespVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.type.CrmBusinessStatusTypePageReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.type.CrmBusinessStatusTypeQueryVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.type.CrmBusinessStatusTypeRespVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.type.CrmBusinessStatusTypeSaveReqVO; | ||||
| import cn.iocoder.yudao.module.crm.convert.businessstatus.CrmBusinessStatusConvert; | ||||
| import cn.iocoder.yudao.module.crm.convert.businessstatustype.CrmBusinessStatusTypeConvert; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessStatusDO; | ||||
| @@ -81,7 +86,8 @@ public class CrmBusinessStatusTypeController { | ||||
|     @PreAuthorize("@ss.hasPermission('crm:business-status-type:query')") | ||||
|     public CommonResult<CrmBusinessStatusTypeRespVO> getBusinessStatusType(@RequestParam("id") Long id) { | ||||
|         CrmBusinessStatusTypeDO businessStatusType = businessStatusTypeService.getBusinessStatusType(id); | ||||
|         //处理状态回显 | ||||
|         // 处理状态回显 | ||||
|         // TODO @ljlleo:可以使用 CollectionUtils.convertSet 替代常用的 stream 操作,更简洁一点;下面几个也是哈; | ||||
|         CrmBusinessStatusQueryVO queryVO = new CrmBusinessStatusQueryVO(); | ||||
|         queryVO.setTypeId(id); | ||||
|         List<CrmBusinessStatusDO> statusList = businessStatusService.selectList(queryVO); | ||||
| @@ -93,7 +99,8 @@ public class CrmBusinessStatusTypeController { | ||||
|     @PreAuthorize("@ss.hasPermission('crm:business-status-type:query')") | ||||
|     public CommonResult<PageResult<CrmBusinessStatusTypeRespVO>> getBusinessStatusTypePage(@Valid CrmBusinessStatusTypePageReqVO pageReqVO) { | ||||
|         PageResult<CrmBusinessStatusTypeDO> pageResult = businessStatusTypeService.getBusinessStatusTypePage(pageReqVO); | ||||
|         //处理部门回显 | ||||
|         // 处理部门回显 | ||||
|         // TODO @ljlleo:可以使用 CollectionUtils.convertSet 替代常用的 stream 操作,更简洁一点;下面几个也是哈; | ||||
|         Set<Long> deptIds = pageResult.getList().stream() | ||||
|                 .map(CrmBusinessStatusTypeDO::getDeptIds) | ||||
|                 .filter(Objects::nonNull) | ||||
| @@ -126,6 +133,7 @@ public class CrmBusinessStatusTypeController { | ||||
|         return success(BeanUtils.toBean(list, CrmBusinessStatusTypeRespVO.class)); | ||||
|     } | ||||
|  | ||||
|     // TODO @ljlleo 这个接口,是不是可以和 getBusinessStatusTypeList 合并成一个? | ||||
|     @GetMapping("/get-status-list") | ||||
|     @Operation(summary = "获得商机状态列表") | ||||
|     @PreAuthorize("@ss.hasPermission('crm:business-status:query')") | ||||
| @@ -135,4 +143,5 @@ public class CrmBusinessStatusTypeController { | ||||
|         List<CrmBusinessStatusDO> list = businessStatusService.selectList(queryVO); | ||||
|         return success(CrmBusinessStatusConvert.INSTANCE.convertList(list)); | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -1,4 +0,0 @@ | ||||
| /** | ||||
|  * 商机(销售机会) | ||||
|  */ | ||||
| package cn.iocoder.yudao.module.crm.controller.admin.business; | ||||
| @@ -1,4 +1,4 @@ | ||||
| package cn.iocoder.yudao.module.crm.controller.admin.business.vo; | ||||
| package cn.iocoder.yudao.module.crm.controller.admin.business.vo.business; | ||||
| 
 | ||||
| import io.swagger.v3.oas.annotations.media.Schema; | ||||
| import lombok.Data; | ||||
| @@ -1,4 +1,4 @@ | ||||
| package cn.iocoder.yudao.module.crm.controller.admin.business.vo; | ||||
| package cn.iocoder.yudao.module.crm.controller.admin.business.vo.business; | ||||
| 
 | ||||
| import io.swagger.v3.oas.annotations.media.Schema; | ||||
| import lombok.Data; | ||||
| @@ -1,4 +1,4 @@ | ||||
| package cn.iocoder.yudao.module.crm.controller.admin.business.vo; | ||||
| package cn.iocoder.yudao.module.crm.controller.admin.business.vo.business; | ||||
| 
 | ||||
| import com.alibaba.excel.annotation.ExcelProperty; | ||||
| import lombok.Data; | ||||
| @@ -1,4 +1,4 @@ | ||||
| package cn.iocoder.yudao.module.crm.controller.admin.business.vo; | ||||
| package cn.iocoder.yudao.module.crm.controller.admin.business.vo.business; | ||||
| 
 | ||||
| import io.swagger.v3.oas.annotations.media.Schema; | ||||
| import lombok.Data; | ||||
| @@ -1,4 +1,4 @@ | ||||
| package cn.iocoder.yudao.module.crm.controller.admin.business.vo; | ||||
| package cn.iocoder.yudao.module.crm.controller.admin.business.vo.business; | ||||
| 
 | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageParam; | ||||
| import io.swagger.v3.oas.annotations.media.Schema; | ||||
| @@ -1,4 +1,4 @@ | ||||
| package cn.iocoder.yudao.module.crm.controller.admin.business.vo; | ||||
| package cn.iocoder.yudao.module.crm.controller.admin.business.vo.business; | ||||
| 
 | ||||
| import io.swagger.v3.oas.annotations.media.Schema; | ||||
| import lombok.*; | ||||
| @@ -16,13 +16,13 @@ public class CrmBusinessRespVO extends CrmBusinessBaseVO { | ||||
|     @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) | ||||
|     private LocalDateTime createTime; | ||||
| 
 | ||||
|     @Schema(description = "客户名称") | ||||
|     @Schema(description = "客户名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四") | ||||
|     private String customerName; | ||||
| 
 | ||||
|     @Schema(description = "状态类型名称") | ||||
|     @Schema(description = "状态类型名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "进行中") | ||||
|     private String statusTypeName; | ||||
| 
 | ||||
|     @Schema(description = "状态名称") | ||||
|     @Schema(description = "状态名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "跟进中") | ||||
|     private String statusName; | ||||
| 
 | ||||
| } | ||||
| @@ -1,4 +1,4 @@ | ||||
| package cn.iocoder.yudao.module.crm.controller.admin.business.vo; | ||||
| package cn.iocoder.yudao.module.crm.controller.admin.business.vo.business; | ||||
| 
 | ||||
| import cn.iocoder.yudao.module.crm.framework.enums.CrmPermissionLevelEnum; | ||||
| import io.swagger.v3.oas.annotations.media.Schema; | ||||
| @@ -1,5 +1,6 @@ | ||||
| package cn.iocoder.yudao.module.crm.controller.admin.business.vo; | ||||
| package cn.iocoder.yudao.module.crm.controller.admin.business.vo.business; | ||||
| 
 | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.business.CrmBusinessBaseVO; | ||||
| import io.swagger.v3.oas.annotations.media.Schema; | ||||
| import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | ||||
| @@ -1,4 +1,4 @@ | ||||
| package cn.iocoder.yudao.module.crm.controller.admin.business.vo; | ||||
| package cn.iocoder.yudao.module.crm.controller.admin.business.vo.status; | ||||
| 
 | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageParam; | ||||
| import io.swagger.v3.oas.annotations.media.Schema; | ||||
| @@ -1,4 +1,4 @@ | ||||
| package cn.iocoder.yudao.module.crm.controller.admin.business.vo; | ||||
| package cn.iocoder.yudao.module.crm.controller.admin.business.vo.status; | ||||
| 
 | ||||
| import io.swagger.v3.oas.annotations.media.Schema; | ||||
| import lombok.Data; | ||||
| @@ -1,4 +1,4 @@ | ||||
| package cn.iocoder.yudao.module.crm.controller.admin.business.vo; | ||||
| package cn.iocoder.yudao.module.crm.controller.admin.business.vo.status; | ||||
| 
 | ||||
| import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; | ||||
| import com.alibaba.excel.annotation.ExcelProperty; | ||||
| @@ -26,7 +26,7 @@ public class CrmBusinessStatusRespVO { | ||||
|     @ExcelProperty("赢单率") | ||||
|     private String percent; | ||||
| 
 | ||||
|     @Schema(description = "排序") | ||||
|     @Schema(description = "排序", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | ||||
|     @ExcelProperty("排序") | ||||
|     private Integer sort; | ||||
| 
 | ||||
| @@ -1,4 +1,4 @@ | ||||
| package cn.iocoder.yudao.module.crm.controller.admin.business.vo; | ||||
| package cn.iocoder.yudao.module.crm.controller.admin.business.vo.status; | ||||
| 
 | ||||
| import io.swagger.v3.oas.annotations.media.Schema; | ||||
| import lombok.Data; | ||||
| @@ -21,9 +21,11 @@ public class CrmBusinessStatusSaveReqVO { | ||||
|     @NotEmpty(message = "状态名不能为空") | ||||
|     private String name; | ||||
| 
 | ||||
|     // TODO @lilleo:percent 应该是 Integer; | ||||
|     @Schema(description = "赢单率") | ||||
|     private String percent; | ||||
| 
 | ||||
|     // TODO @lilleo:这个是不是不用前端新增和修改的时候传递,交给顺序计算出来,存储起来就好了; | ||||
|     @Schema(description = "排序") | ||||
|     private Integer sort; | ||||
| 
 | ||||
| @@ -1,4 +1,4 @@ | ||||
| package cn.iocoder.yudao.module.crm.controller.admin.business.vo; | ||||
| package cn.iocoder.yudao.module.crm.controller.admin.business.vo.type; | ||||
| 
 | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageParam; | ||||
| import io.swagger.v3.oas.annotations.media.Schema; | ||||
| @@ -1,4 +1,4 @@ | ||||
| package cn.iocoder.yudao.module.crm.controller.admin.business.vo; | ||||
| package cn.iocoder.yudao.module.crm.controller.admin.business.vo.type; | ||||
| 
 | ||||
| import io.swagger.v3.oas.annotations.media.Schema; | ||||
| import lombok.Data; | ||||
| @@ -1,4 +1,4 @@ | ||||
| package cn.iocoder.yudao.module.crm.controller.admin.business.vo; | ||||
| package cn.iocoder.yudao.module.crm.controller.admin.business.vo.type; | ||||
| 
 | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessStatusDO; | ||||
| import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; | ||||
| @@ -22,13 +22,12 @@ public class CrmBusinessStatusTypeRespVO { | ||||
|     @ExcelProperty("状态类型名") | ||||
|     private String name; | ||||
| 
 | ||||
|     @Schema(description = "使用的部门名称", requiredMode = Schema.RequiredMode.REQUIRED) | ||||
|     @ExcelProperty("使用的部门名称") | ||||
|     private List<String> deptNames; | ||||
| 
 | ||||
|     @Schema(description = "使用的部门编号", requiredMode = Schema.RequiredMode.REQUIRED) | ||||
|     @ExcelProperty("使用的部门编号") | ||||
|     private List<Long> deptIds; | ||||
|     @Schema(description = "使用的部门名称", requiredMode = Schema.RequiredMode.REQUIRED) | ||||
|     @ExcelProperty("使用的部门名称") | ||||
|     private List<String> deptNames; | ||||
| 
 | ||||
|     @Schema(description = "创建人", requiredMode = Schema.RequiredMode.REQUIRED) | ||||
|     @ExcelProperty("创建人") | ||||
| @@ -38,6 +37,7 @@ public class CrmBusinessStatusTypeRespVO { | ||||
|     @ExcelProperty("创建时间") | ||||
|     private LocalDateTime createTime; | ||||
| 
 | ||||
|     // TODO @ljlleo 字段后缀改成 statuses,保持和 deptIds 风格一致;CrmBusinessStatusDO 改成 VO 哈;一般不使用 do 直接返回 | ||||
|     @Schema(description = "状态集合", requiredMode = Schema.RequiredMode.REQUIRED) | ||||
|     private List<CrmBusinessStatusDO> statusList; | ||||
| 
 | ||||
| @@ -1,5 +1,6 @@ | ||||
| package cn.iocoder.yudao.module.crm.controller.admin.business.vo; | ||||
| package cn.iocoder.yudao.module.crm.controller.admin.business.vo.type; | ||||
| 
 | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.status.CrmBusinessStatusSaveReqVO; | ||||
| import com.google.common.collect.Lists; | ||||
| import io.swagger.v3.oas.annotations.media.Schema; | ||||
| import lombok.Data; | ||||
| @@ -21,6 +22,7 @@ public class CrmBusinessStatusTypeSaveReqVO { | ||||
|     @Schema(description = "使用的部门编号", requiredMode = Schema.RequiredMode.REQUIRED) | ||||
|     private List<Long> deptIds = Lists.newArrayList(); | ||||
| 
 | ||||
|     // TODO @ljlleo VO 里面,我们不使用默认值哈。这里 Lists.newArrayList() 看看怎么去掉。上面 deptIds 也是类似噢 | ||||
|     @Schema(description = "商机状态集合", requiredMode = Schema.RequiredMode.REQUIRED) | ||||
|     private List<CrmBusinessStatusSaveReqVO> statusList = Lists.newArrayList(); | ||||
| 
 | ||||
| @@ -3,13 +3,13 @@ package cn.iocoder.yudao.module.crm.controller.admin.customer; | ||||
| import cn.hutool.core.collection.CollUtil; | ||||
| import cn.iocoder.yudao.framework.common.pojo.CommonResult; | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.CrmCustomerLimitConfigCreateReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.CrmCustomerLimitConfigPageReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.CrmCustomerLimitConfigRespVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.CrmCustomerLimitConfigUpdateReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.limitconfig.CrmCustomerLimitConfigCreateReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.limitconfig.CrmCustomerLimitConfigPageReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.limitconfig.CrmCustomerLimitConfigRespVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.limitconfig.CrmCustomerLimitConfigUpdateReqVO; | ||||
| import cn.iocoder.yudao.module.crm.convert.customer.CrmCustomerLimitConfigConvert; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.customerlimitconfig.CrmCustomerLimitConfigDO; | ||||
| import cn.iocoder.yudao.module.crm.service.customerlimitconfig.CrmCustomerLimitConfigService; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerLimitConfigDO; | ||||
| import cn.iocoder.yudao.module.crm.service.customer.CrmCustomerLimitConfigService; | ||||
| import cn.iocoder.yudao.module.system.api.dept.DeptApi; | ||||
| import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO; | ||||
| import cn.iocoder.yudao.module.system.api.user.AdminUserApi; | ||||
| @@ -29,7 +29,7 @@ import java.util.Map; | ||||
| import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; | ||||
| import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSetByFlatMap; | ||||
|  | ||||
| @Tag(name = "管理后台 - 客户限制配置") | ||||
| @Tag(name = "管理后台 - CRM 客户限制配置") | ||||
| @RestController | ||||
| @RequestMapping("/crm/customer-limit-config") | ||||
| @Validated | ||||
|   | ||||
| @@ -1,8 +1,8 @@ | ||||
| package cn.iocoder.yudao.module.crm.controller.admin.customer; | ||||
|  | ||||
| import cn.iocoder.yudao.framework.common.pojo.CommonResult; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.CrmCustomerPoolConfigRespVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.CrmCustomerPoolConfigUpdateReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.poolconfig.CrmCustomerPoolConfigRespVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.poolconfig.CrmCustomerPoolConfigSaveReqVO; | ||||
| import cn.iocoder.yudao.module.crm.convert.customer.CrmCustomerConvert; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerPoolConfigDO; | ||||
| import cn.iocoder.yudao.module.crm.service.customer.CrmCustomerPoolConfigService; | ||||
| @@ -34,12 +34,11 @@ public class CrmCustomerPoolConfigController { | ||||
|         return success(CrmCustomerConvert.INSTANCE.convert(customerPoolConfig)); | ||||
|     } | ||||
|  | ||||
|     // TODO @wanwan:这个请求,搞成 save 哈; | ||||
|     @PutMapping("/update") | ||||
|     @PutMapping("/save") | ||||
|     @Operation(summary = "更新客户公海规则设置") | ||||
|     @PreAuthorize("@ss.hasPermission('crm:customer-pool-config:update')") | ||||
|     public CommonResult<Boolean> updateCustomerPoolConfig(@Valid @RequestBody CrmCustomerPoolConfigUpdateReqVO updateReqVO) { | ||||
|         customerPoolConfigService.updateCustomerPoolConfig(updateReqVO); | ||||
|     public CommonResult<Boolean> saveCustomerPoolConfig(@Valid @RequestBody CrmCustomerPoolConfigSaveReqVO updateReqVO) { | ||||
|         customerPoolConfigService.saveCustomerPoolConfig(updateReqVO); | ||||
|         return success(true); | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -1,14 +0,0 @@ | ||||
| package cn.iocoder.yudao.module.crm.controller.admin.customer.vo; | ||||
|  | ||||
| import io.swagger.v3.oas.annotations.media.Schema; | ||||
| import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | ||||
| import lombok.ToString; | ||||
|  | ||||
| @Schema(description = "管理后台 - CRM 客户更新 Request VO") | ||||
| @Data | ||||
| @EqualsAndHashCode(callSuper = true) | ||||
| @ToString(callSuper = true) | ||||
| public class CrmCustomerPoolConfigUpdateReqVO extends CrmCustomerPoolConfigBaseVO { | ||||
|  | ||||
| } | ||||
| @@ -1,4 +1,4 @@ | ||||
| package cn.iocoder.yudao.module.crm.controller.admin.customer.vo; | ||||
| package cn.iocoder.yudao.module.crm.controller.admin.customer.vo.limitconfig; | ||||
| 
 | ||||
| import io.swagger.v3.oas.annotations.media.Schema; | ||||
| import lombok.Data; | ||||
| @@ -6,7 +6,6 @@ import lombok.Data; | ||||
| import javax.validation.constraints.NotNull; | ||||
| import java.util.List; | ||||
| 
 | ||||
| // TODO @wanwan:vo 下,可以新建一个 limitconfig,放它的 vo; | ||||
| /** | ||||
|  * 客户限制配置 Base VO,提供给添加、修改、详细的子 VO 使用 | ||||
|  * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 | ||||
| @@ -1,4 +1,4 @@ | ||||
| package cn.iocoder.yudao.module.crm.controller.admin.customer.vo; | ||||
| package cn.iocoder.yudao.module.crm.controller.admin.customer.vo.limitconfig; | ||||
| 
 | ||||
| import io.swagger.v3.oas.annotations.media.Schema; | ||||
| import lombok.Data; | ||||
| @@ -1,4 +1,4 @@ | ||||
| package cn.iocoder.yudao.module.crm.controller.admin.customer.vo; | ||||
| package cn.iocoder.yudao.module.crm.controller.admin.customer.vo.limitconfig; | ||||
| 
 | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageParam; | ||||
| import io.swagger.v3.oas.annotations.media.Schema; | ||||
| @@ -1,5 +1,7 @@ | ||||
| package cn.iocoder.yudao.module.crm.controller.admin.customer.vo; | ||||
| package cn.iocoder.yudao.module.crm.controller.admin.customer.vo.limitconfig; | ||||
| 
 | ||||
| import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO; | ||||
| import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; | ||||
| import io.swagger.v3.oas.annotations.media.Schema; | ||||
| import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | ||||
| @@ -18,10 +20,10 @@ public class CrmCustomerLimitConfigRespVO extends CrmCustomerLimitConfigBaseVO { | ||||
|     private Long id; | ||||
| 
 | ||||
|     @Schema(description = "规则适用人群名称") | ||||
|     private String userNames; | ||||
|     private List<AdminUserRespDTO> users; | ||||
| 
 | ||||
|     @Schema(description = "规则适用部门名称") | ||||
|     private String deptNames; | ||||
|     private List<DeptRespDTO> depts; | ||||
| 
 | ||||
|     @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) | ||||
|     private LocalDateTime createTime; | ||||
| @@ -1,4 +1,4 @@ | ||||
| package cn.iocoder.yudao.module.crm.controller.admin.customer.vo; | ||||
| package cn.iocoder.yudao.module.crm.controller.admin.customer.vo.limitconfig; | ||||
| 
 | ||||
| import io.swagger.v3.oas.annotations.media.Schema; | ||||
| import lombok.Data; | ||||
| @@ -1,4 +1,4 @@ | ||||
| package cn.iocoder.yudao.module.crm.controller.admin.customer.vo; | ||||
| package cn.iocoder.yudao.module.crm.controller.admin.customer.vo.poolconfig; | ||||
| 
 | ||||
| import io.swagger.v3.oas.annotations.media.Schema; | ||||
| import lombok.Data; | ||||
| @@ -12,7 +12,6 @@ import javax.validation.constraints.NotNull; | ||||
| @Data | ||||
| public class CrmCustomerPoolConfigBaseVO { | ||||
| 
 | ||||
|     // TODO @wanwan:参数校验 | ||||
|     @Schema(description = "是否启用客户公海", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") | ||||
|     @NotNull(message = "是否启用客户公海不能为空") | ||||
|     private Boolean enabled; | ||||
| @@ -1,11 +1,10 @@ | ||||
| package cn.iocoder.yudao.module.crm.controller.admin.customer.vo; | ||||
| package cn.iocoder.yudao.module.crm.controller.admin.customer.vo.poolconfig; | ||||
| 
 | ||||
| import io.swagger.v3.oas.annotations.media.Schema; | ||||
| import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | ||||
| import lombok.ToString; | ||||
| 
 | ||||
| // TODO @wanwan:vo 下,可以新建一个 poolconfig,放它的 vo; | ||||
| @Schema(description = "管理后台 - CRM 客户公海规则 Response VO") | ||||
| @Data | ||||
| @EqualsAndHashCode(callSuper = true) | ||||
| @@ -0,0 +1,38 @@ | ||||
| package cn.iocoder.yudao.module.crm.controller.admin.customer.vo.poolconfig; | ||||
|  | ||||
| import cn.hutool.core.util.BooleanUtil; | ||||
| import cn.hutool.core.util.ObjectUtil; | ||||
| import io.swagger.v3.oas.annotations.media.Schema; | ||||
| import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | ||||
| import lombok.ToString; | ||||
|  | ||||
| import javax.validation.constraints.AssertTrue; | ||||
| import java.util.Objects; | ||||
|  | ||||
| @Schema(description = "管理后台 - CRM 客户公海配置的保存 Request VO") | ||||
| @Data | ||||
| @EqualsAndHashCode(callSuper = true) | ||||
| @ToString(callSuper = true) | ||||
| public class CrmCustomerPoolConfigSaveReqVO extends CrmCustomerPoolConfigBaseVO { | ||||
|  | ||||
|     // TODO @wanwan:AssertTrue 必须 is 开头哈;注意需要 json 忽略下,避免被序列化; | ||||
|     @AssertTrue(message = "客户公海规则设置不正确") | ||||
|     // TODO @wanwan:这个方法,是不是拆成 2 个,一个校验 contactExpireDays、一个校验 dealExpireDays; | ||||
|     public boolean poolEnableValid() { | ||||
|         if (!BooleanUtil.isTrue(getEnabled())) { | ||||
|             return true; | ||||
|         } | ||||
|         return ObjectUtil.isAllNotEmpty(getContactExpireDays(), getDealExpireDays()); | ||||
|     } | ||||
|  | ||||
|     @AssertTrue(message = "客户公海规则设置不正确") | ||||
|     // TODO @wanwan:这个方法,是不是改成 isNotifyDaysValid() 更好点?本质校验的是 notifyDays 是否为空 | ||||
|     public boolean notifyEnableValid() { | ||||
|         if (!BooleanUtil.isTrue(getNotifyEnabled())) { | ||||
|             return true; | ||||
|         } | ||||
|         return Objects.nonNull(getNotifyDays()); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -1,7 +1,7 @@ | ||||
| package cn.iocoder.yudao.module.crm.convert.business; | ||||
|  | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.*; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.business.*; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessDO; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessStatusDO; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessStatusTypeDO; | ||||
| @@ -46,14 +46,14 @@ public interface CrmBusinessConvert { | ||||
|     default PageResult<CrmBusinessRespVO> convertPage(PageResult<CrmBusinessDO> page, List<CrmCustomerDO> customerList, | ||||
|                                                       List<CrmBusinessStatusTypeDO> statusTypeList, List<CrmBusinessStatusDO> statusList) { | ||||
|         PageResult<CrmBusinessRespVO> result = convertPage(page); | ||||
|         // 拼接关联字段 | ||||
|         Map<Long, String> customerMap = convertMap(customerList, CrmCustomerDO::getId, CrmCustomerDO::getName); | ||||
|         Map<Long, String> statusTypeMap = convertMap(statusTypeList, CrmBusinessStatusTypeDO::getId, CrmBusinessStatusTypeDO::getName); | ||||
|         Map<Long, String> statusMap = convertMap(statusList, CrmBusinessStatusDO::getId, CrmBusinessStatusDO::getName); | ||||
|         result.getList().stream().forEach(t -> { | ||||
|             t.setCustomerName(customerMap.get(t.getCustomerId())); | ||||
|             t.setStatusTypeName(statusTypeMap.get(t.getStatusTypeId())); | ||||
|             t.setStatusName(statusMap.get(t.getStatusId())); | ||||
|         }); | ||||
|         result.getList().forEach(type -> type | ||||
|                 .setCustomerName(customerMap.get(type.getCustomerId())) | ||||
|                 .setStatusTypeName(statusTypeMap.get(type.getStatusTypeId())) | ||||
|                 .setStatusName(statusMap.get(type.getStatusId()))); | ||||
|         return result; | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -1,8 +1,8 @@ | ||||
| package cn.iocoder.yudao.module.crm.convert.businessstatus; | ||||
|  | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.CrmBusinessStatusRespVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.CrmBusinessStatusSaveReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.status.CrmBusinessStatusRespVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.status.CrmBusinessStatusSaveReqVO; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessStatusDO; | ||||
| import org.mapstruct.Mapper; | ||||
| import org.mapstruct.factory.Mappers; | ||||
|   | ||||
| @@ -1,8 +1,8 @@ | ||||
| package cn.iocoder.yudao.module.crm.convert.businessstatustype; | ||||
|  | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.CrmBusinessStatusTypeRespVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.CrmBusinessStatusTypeSaveReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.type.CrmBusinessStatusTypeRespVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.type.CrmBusinessStatusTypeSaveReqVO; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessStatusDO; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessStatusTypeDO; | ||||
| import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO; | ||||
| @@ -33,18 +33,17 @@ public interface CrmBusinessStatusTypeConvert { | ||||
|  | ||||
|     default PageResult<CrmBusinessStatusTypeRespVO> convertPage(PageResult<CrmBusinessStatusTypeDO> page, List<DeptRespDTO> deptList) { | ||||
|         PageResult<CrmBusinessStatusTypeRespVO> pageResult = convertPage(page); | ||||
|         // 拼接关联字段 | ||||
|         Map<Long, String> deptMap = convertMap(deptList, DeptRespDTO::getId, DeptRespDTO::getName); | ||||
|         pageResult.getList().stream().forEach(r -> { | ||||
|             r.setDeptNames(convertList(r.getDeptIds(), deptMap::get)); | ||||
|         }); | ||||
|         pageResult.getList().forEach(type -> type.setDeptNames(convertList(type.getDeptIds(), deptMap::get))); | ||||
|         return pageResult; | ||||
|     } | ||||
|  | ||||
|     default CrmBusinessStatusTypeRespVO convert(CrmBusinessStatusTypeDO bean, List<CrmBusinessStatusDO> statusList) { | ||||
|         // TODO @ljlleo 可以链式赋值,简化成一行; | ||||
|         CrmBusinessStatusTypeRespVO result = convert(bean); | ||||
|         result.setStatusList(statusList); | ||||
|         return result; | ||||
|     } | ||||
|  | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -3,6 +3,8 @@ package cn.iocoder.yudao.module.crm.convert.customer; | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||
| import cn.iocoder.yudao.framework.ip.core.utils.AreaUtils; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.*; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.poolconfig.CrmCustomerPoolConfigRespVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.poolconfig.CrmCustomerPoolConfigSaveReqVO; | ||||
| 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.permission.bo.CrmPermissionTransferReqBO; | ||||
| @@ -78,6 +80,6 @@ public interface CrmCustomerConvert { | ||||
|  | ||||
|     CrmCustomerPoolConfigRespVO convert(CrmCustomerPoolConfigDO customerPoolConfig); | ||||
|  | ||||
|     CrmCustomerPoolConfigDO convert(CrmCustomerPoolConfigUpdateReqVO updateReqVO); | ||||
|     CrmCustomerPoolConfigDO convert(CrmCustomerPoolConfigSaveReqVO updateReqVO); | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -1,10 +1,11 @@ | ||||
| package cn.iocoder.yudao.module.crm.convert.customer; | ||||
|  | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.CrmCustomerLimitConfigCreateReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.CrmCustomerLimitConfigRespVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.CrmCustomerLimitConfigUpdateReqVO; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.customerlimitconfig.CrmCustomerLimitConfigDO; | ||||
| import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.limitconfig.CrmCustomerLimitConfigCreateReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.limitconfig.CrmCustomerLimitConfigRespVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.limitconfig.CrmCustomerLimitConfigUpdateReqVO; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerLimitConfigDO; | ||||
| import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO; | ||||
| import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; | ||||
| import org.mapstruct.Mapper; | ||||
| @@ -12,8 +13,6 @@ import org.mapstruct.factory.Mappers; | ||||
|  | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
| import java.util.Objects; | ||||
| import java.util.stream.Collectors; | ||||
|  | ||||
| /** | ||||
|  * 客户限制配置 Convert | ||||
| @@ -54,14 +53,11 @@ public interface CrmCustomerLimitConfigConvert { | ||||
|      * | ||||
|      * @param userMap 用户映射 | ||||
|      * @param deptMap 部门映射 | ||||
|      * @param respVo 响应实体 | ||||
|      * @param respVo  响应实体 | ||||
|      */ | ||||
|     static void fillNameField(Map<Long, AdminUserRespDTO> userMap, Map<Long, DeptRespDTO> deptMap, CrmCustomerLimitConfigRespVO respVo) { | ||||
|         // TODO wanwan:返回 list,具体怎么拼接叫给前端; | ||||
|         respVo.setUserNames(respVo.getUserIds().stream().map(userMap::get) | ||||
|                 .filter(Objects::nonNull).map(AdminUserRespDTO::getNickname).collect(Collectors.joining(","))); | ||||
|         respVo.setDeptNames(respVo.getDeptIds().stream().map(deptMap::get) | ||||
|                 .filter(Objects::nonNull).map(DeptRespDTO::getName).collect(Collectors.joining(","))); | ||||
|         respVo.setUsers(CollectionUtils.convertList(respVo.getUserIds(), userMap::get)); | ||||
|         respVo.setDepts(CollectionUtils.convertList(respVo.getDeptIds(), deptMap::get)); | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -69,8 +69,7 @@ public class CrmBusinessDO extends BaseDO { | ||||
|      */ | ||||
|     private Integer discountPercent; | ||||
|     /** | ||||
|      * 产品总金额 | ||||
|      * | ||||
|      * 产品总金额,单位:分 | ||||
|      */ | ||||
|     private Integer productPrice; | ||||
|     /** | ||||
|   | ||||
| @@ -26,6 +26,8 @@ public class CrmBusinessStatusDO { | ||||
|     private Long id; | ||||
|     /** | ||||
|      * 状态类型编号 | ||||
|      * | ||||
|      * 关联 {@link CrmBusinessStatusTypeDO#getId()} | ||||
|      */ | ||||
|     private Long typeId; | ||||
|     /** | ||||
| @@ -34,6 +36,8 @@ public class CrmBusinessStatusDO { | ||||
|     private String name; | ||||
|     /** | ||||
|      * 赢单率 | ||||
|      * | ||||
|      * TODO 这里是不是改成 Integer 存储,百分比 * 100 ; | ||||
|      */ | ||||
|     private String percent; | ||||
|     /** | ||||
|   | ||||
| @@ -41,6 +41,8 @@ public class CrmBusinessStatusTypeDO extends BaseDO { | ||||
|     private List<Long> deptIds; | ||||
|     /** | ||||
|      * 开启状态 | ||||
|      * | ||||
|      * TODO 改成 Integer,关联 CommonStatus | ||||
|      */ | ||||
|     private Boolean status; | ||||
|  | ||||
|   | ||||
| @@ -1,7 +1,8 @@ | ||||
| package cn.iocoder.yudao.module.crm.dal.dataobject.customerlimitconfig; | ||||
| package cn.iocoder.yudao.module.crm.dal.dataobject.customer; | ||||
| 
 | ||||
| import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; | ||||
| import cn.iocoder.yudao.framework.mybatis.core.type.LongListTypeHandler; | ||||
| import cn.iocoder.yudao.module.crm.enums.customer.CrmCustomerLimitConfigTypeEnum; | ||||
| import com.baomidou.mybatisplus.annotation.KeySequence; | ||||
| import com.baomidou.mybatisplus.annotation.TableField; | ||||
| import com.baomidou.mybatisplus.annotation.TableId; | ||||
| @@ -32,8 +33,8 @@ public class CrmCustomerLimitConfigDO extends BaseDO { | ||||
|     private Long id; | ||||
|     /** | ||||
|      * 规则类型 | ||||
|      * | ||||
|      * TODO @wanwan:搞个枚举哈; | ||||
|      * <p> | ||||
|      * 枚举 {@link CrmCustomerLimitConfigTypeEnum} | ||||
|      */ | ||||
|     private Integer type; | ||||
|     /** | ||||
| @@ -1,9 +1,7 @@ | ||||
| package cn.iocoder.yudao.module.crm.dal.dataobject.customer; | ||||
|  | ||||
| import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; | ||||
| import com.baomidou.mybatisplus.annotation.KeySequence; | ||||
| import com.baomidou.mybatisplus.annotation.TableId; | ||||
| import com.baomidou.mybatisplus.annotation.TableName; | ||||
| import com.baomidou.mybatisplus.annotation.*; | ||||
| import lombok.*; | ||||
|  | ||||
| /** | ||||
| @@ -33,18 +31,22 @@ public class CrmCustomerPoolConfigDO extends BaseDO { | ||||
|     /** | ||||
|      * 未跟进放入公海天数 | ||||
|      */ | ||||
|     @TableField(updateStrategy = FieldStrategy.ALWAYS) | ||||
|     private Integer contactExpireDays; | ||||
|     /** | ||||
|      * 未成交放入公海天数 | ||||
|      */ | ||||
|     @TableField(updateStrategy = FieldStrategy.ALWAYS) | ||||
|     private Integer dealExpireDays; | ||||
|     /** | ||||
|      * 是否开启提前提醒 | ||||
|      */ | ||||
|     @TableField(updateStrategy = FieldStrategy.ALWAYS) | ||||
|     private Boolean notifyEnabled; | ||||
|     /** | ||||
|      * 提前提醒天数 | ||||
|      */ | ||||
|     @TableField(updateStrategy = FieldStrategy.ALWAYS) | ||||
|     private Integer notifyDays; | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -3,8 +3,8 @@ package cn.iocoder.yudao.module.crm.dal.mysql.business; | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||
| import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | ||||
| import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.CrmBusinessExportReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.CrmBusinessPageReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.business.CrmBusinessExportReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.business.CrmBusinessPageReqVO; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessDO; | ||||
| import org.apache.ibatis.annotations.Mapper; | ||||
|  | ||||
|   | ||||
| @@ -3,8 +3,8 @@ package cn.iocoder.yudao.module.crm.dal.mysql.business; | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||
| import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | ||||
| import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.CrmBusinessStatusPageReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.CrmBusinessStatusQueryVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.status.CrmBusinessStatusPageReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.status.CrmBusinessStatusQueryVO; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessStatusDO; | ||||
| import org.apache.ibatis.annotations.Mapper; | ||||
|  | ||||
| @@ -31,8 +31,7 @@ public interface CrmBusinessStatusMapper extends BaseMapperX<CrmBusinessStatusDO | ||||
|     } | ||||
|  | ||||
|     default int delete(Long typeId) { | ||||
|         return delete(new LambdaQueryWrapperX<CrmBusinessStatusDO>() | ||||
|                 .eq(CrmBusinessStatusDO::getTypeId, typeId)); | ||||
|         return delete(CrmBusinessStatusDO::getTypeId, typeId); | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -3,8 +3,8 @@ package cn.iocoder.yudao.module.crm.dal.mysql.business; | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||
| import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | ||||
| import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.CrmBusinessStatusTypePageReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.CrmBusinessStatusTypeQueryVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.type.CrmBusinessStatusTypePageReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.type.CrmBusinessStatusTypeQueryVO; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessStatusTypeDO; | ||||
| import org.apache.ibatis.annotations.Mapper; | ||||
|  | ||||
|   | ||||
| @@ -3,8 +3,8 @@ package cn.iocoder.yudao.module.crm.dal.mysql.customerlimitconfig; | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||
| import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | ||||
| import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.CrmCustomerLimitConfigPageReqVO; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.customerlimitconfig.CrmCustomerLimitConfigDO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.limitconfig.CrmCustomerLimitConfigPageReqVO; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerLimitConfigDO; | ||||
| import org.apache.ibatis.annotations.Mapper; | ||||
|  | ||||
| /** | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| package cn.iocoder.yudao.module.crm.service.business; | ||||
|  | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.*; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.business.*; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessDO; | ||||
|  | ||||
| import javax.validation.Valid; | ||||
|   | ||||
| @@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.crm.service.business; | ||||
| import cn.hutool.core.collection.CollUtil; | ||||
| import cn.hutool.core.collection.ListUtil; | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.*; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.business.*; | ||||
| import cn.iocoder.yudao.module.crm.convert.business.CrmBusinessConvert; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessDO; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.permission.CrmPermissionDO; | ||||
|   | ||||
| @@ -1,9 +1,9 @@ | ||||
| package cn.iocoder.yudao.module.crm.service.business; | ||||
|  | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.CrmBusinessStatusPageReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.CrmBusinessStatusQueryVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.CrmBusinessStatusSaveReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.status.CrmBusinessStatusPageReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.status.CrmBusinessStatusQueryVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.status.CrmBusinessStatusSaveReqVO; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessStatusDO; | ||||
|  | ||||
| import javax.validation.Valid; | ||||
| @@ -54,6 +54,8 @@ public interface CrmBusinessStatusService { | ||||
|      */ | ||||
|     PageResult<CrmBusinessStatusDO> getBusinessStatusPage(CrmBusinessStatusPageReqVO pageReqVO); | ||||
|  | ||||
|     // TODO @ljlleo 常用的 ids 之类的查询,可以封装单独的方法,不用走类似 QueryVO,用起来更方便。 | ||||
|     // TODO @ljlleo 方法名用 getBusinessStatusList | ||||
|     /** | ||||
|      * 获得商机状态分页 | ||||
|      * | ||||
|   | ||||
| @@ -2,9 +2,9 @@ package cn.iocoder.yudao.module.crm.service.business; | ||||
|  | ||||
| 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.business.vo.CrmBusinessStatusPageReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.CrmBusinessStatusQueryVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.CrmBusinessStatusSaveReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.status.CrmBusinessStatusPageReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.status.CrmBusinessStatusQueryVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.status.CrmBusinessStatusSaveReqVO; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessStatusDO; | ||||
| import cn.iocoder.yudao.module.crm.dal.mysql.business.CrmBusinessStatusMapper; | ||||
| import org.springframework.stereotype.Service; | ||||
| @@ -51,6 +51,7 @@ public class CrmBusinessStatusServiceImpl implements CrmBusinessStatusService { | ||||
|     public void deleteBusinessStatus(Long id) { | ||||
|         // 校验存在 | ||||
|         validateBusinessStatusExists(id); | ||||
|         // TODO @ljlleo 这里可以考虑,如果有商机在使用,不允许删除 | ||||
|         // 删除 | ||||
|         businessStatusMapper.deleteById(id); | ||||
|     } | ||||
|   | ||||
| @@ -1,9 +1,9 @@ | ||||
| package cn.iocoder.yudao.module.crm.service.business; | ||||
|  | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.CrmBusinessStatusTypePageReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.CrmBusinessStatusTypeQueryVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.CrmBusinessStatusTypeSaveReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.type.CrmBusinessStatusTypePageReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.type.CrmBusinessStatusTypeQueryVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.type.CrmBusinessStatusTypeSaveReqVO; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessStatusTypeDO; | ||||
|  | ||||
| import javax.validation.Valid; | ||||
| @@ -54,6 +54,7 @@ public interface CrmBusinessStatusTypeService { | ||||
|      */ | ||||
|     PageResult<CrmBusinessStatusTypeDO> getBusinessStatusTypePage(CrmBusinessStatusTypePageReqVO pageReqVO); | ||||
|  | ||||
|     // TODO @ljlleo 常用的 ids 之类的查询,可以封装单独的方法,不用走类似 QueryVO,用起来更方便。 | ||||
|     /** | ||||
|      * 获得商机状态类型列表 | ||||
|      * | ||||
| @@ -61,4 +62,5 @@ public interface CrmBusinessStatusTypeService { | ||||
|      * @return 商机状态类型列表 | ||||
|      */ | ||||
|     List<CrmBusinessStatusTypeDO> selectList(CrmBusinessStatusTypeQueryVO queryVO); | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -1,11 +1,12 @@ | ||||
| package cn.iocoder.yudao.module.crm.service.business; | ||||
|  | ||||
| import cn.hutool.core.collection.CollUtil; | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||
| import cn.iocoder.yudao.framework.common.util.object.BeanUtils; | ||||
| import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.CrmBusinessStatusTypePageReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.CrmBusinessStatusTypeQueryVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.CrmBusinessStatusTypeSaveReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.type.CrmBusinessStatusTypePageReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.type.CrmBusinessStatusTypeQueryVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.type.CrmBusinessStatusTypeSaveReqVO; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessStatusDO; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessStatusTypeDO; | ||||
| import cn.iocoder.yudao.module.crm.dal.mysql.business.CrmBusinessStatusMapper; | ||||
| @@ -42,15 +43,14 @@ public class CrmBusinessStatusTypeServiceImpl implements CrmBusinessStatusTypeSe | ||||
|     public Long createBusinessStatusType(CrmBusinessStatusTypeSaveReqVO createReqVO) { | ||||
|         //检验名称是否存在 | ||||
|         validateBusinessStatusTypeExists(createReqVO.getName(), null); | ||||
|         // 插入 | ||||
|         // 插入类型 | ||||
|         CrmBusinessStatusTypeDO businessStatusType = BeanUtils.toBean(createReqVO, CrmBusinessStatusTypeDO.class); | ||||
|         businessStatusTypeMapper.insert(businessStatusType); | ||||
|         createReqVO.getStatusList().stream().forEach(status -> { | ||||
|             status.setTypeId(businessStatusType.getId()); | ||||
|         }); | ||||
|         //插入状态 | ||||
|         businessStatusMapper.insertBatch(BeanUtils.toBean(createReqVO.getStatusList(), CrmBusinessStatusDO.class)); | ||||
|         // 返回 | ||||
|         // 插入状态 | ||||
|         if (CollUtil.isNotEmpty(createReqVO.getStatusList())) { | ||||
|             createReqVO.getStatusList().forEach(status -> status.setTypeId(businessStatusType.getId())); | ||||
|             businessStatusMapper.insertBatch(BeanUtils.toBean(createReqVO.getStatusList(), CrmBusinessStatusDO.class)); | ||||
|         } | ||||
|         return businessStatusType.getId(); | ||||
|     } | ||||
|  | ||||
| @@ -61,29 +61,27 @@ public class CrmBusinessStatusTypeServiceImpl implements CrmBusinessStatusTypeSe | ||||
|         validateBusinessStatusTypeExists(updateReqVO.getId()); | ||||
|         // 校验名称是否存在 | ||||
|         validateBusinessStatusTypeExists(updateReqVO.getName(), updateReqVO.getId()); | ||||
|         // 更新 | ||||
|         // 更新类型 | ||||
|         CrmBusinessStatusTypeDO updateObj = BeanUtils.toBean(updateReqVO, CrmBusinessStatusTypeDO.class); | ||||
|         businessStatusTypeMapper.updateById(updateObj); | ||||
|         //删除状态 | ||||
|         // 更新状态(删除 + 更新) | ||||
|         // TODO @ljlleo 可以参考 DeliveryExpressTemplateServiceImpl 的 updateExpressTemplateFree 方法;主要没变化的,还是不删除了哈。 | ||||
|         businessStatusMapper.delete(updateReqVO.getId()); | ||||
|         //插入状态 | ||||
|         updateReqVO.getStatusList().stream().forEach(status -> { | ||||
|             status.setTypeId(updateReqVO.getId()); | ||||
|         }); | ||||
|         updateReqVO.getStatusList().forEach(status -> status.setTypeId(updateReqVO.getId())); | ||||
|         businessStatusMapper.insertBatch(BeanUtils.toBean(updateReqVO.getStatusList(), CrmBusinessStatusDO.class)); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     @Transactional(rollbackFor = Exception.class) | ||||
|     public void deleteBusinessStatusType(Long id) { | ||||
|         //TODO 待添加被引用校验 | ||||
|         // TODO 待添加被引用校验 | ||||
|         //... | ||||
|  | ||||
|         // 校验存在 | ||||
|         validateBusinessStatusTypeExists(id); | ||||
|         // 删除 | ||||
|         // 删除类型 | ||||
|         businessStatusTypeMapper.deleteById(id); | ||||
|         //删除状态 | ||||
|         // 删除状态 | ||||
|         businessStatusMapper.delete(id); | ||||
|     } | ||||
|  | ||||
| @@ -93,6 +91,7 @@ public class CrmBusinessStatusTypeServiceImpl implements CrmBusinessStatusTypeSe | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     // TODO @ljlleo 这个方法,这个参考 validateDeptNameUnique 实现。 | ||||
|     private void validateBusinessStatusTypeExists(String name, Long id) { | ||||
|         LambdaQueryWrapper<CrmBusinessStatusTypeDO> wrapper = new LambdaQueryWrapperX<>(); | ||||
|         if(null != id) { | ||||
| @@ -118,4 +117,5 @@ public class CrmBusinessStatusTypeServiceImpl implements CrmBusinessStatusTypeSe | ||||
|     public List<CrmBusinessStatusTypeDO> selectList(CrmBusinessStatusTypeQueryVO queryVO) { | ||||
|         return businessStatusTypeMapper.selectList(queryVO); | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -1,10 +1,10 @@ | ||||
| package cn.iocoder.yudao.module.crm.service.customerlimitconfig; | ||||
| package cn.iocoder.yudao.module.crm.service.customer; | ||||
| 
 | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.CrmCustomerLimitConfigCreateReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.CrmCustomerLimitConfigPageReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.CrmCustomerLimitConfigUpdateReqVO; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.customerlimitconfig.CrmCustomerLimitConfigDO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.limitconfig.CrmCustomerLimitConfigCreateReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.limitconfig.CrmCustomerLimitConfigPageReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.limitconfig.CrmCustomerLimitConfigUpdateReqVO; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerLimitConfigDO; | ||||
| 
 | ||||
| import javax.validation.Valid; | ||||
| 
 | ||||
| @@ -1,11 +1,11 @@ | ||||
| package cn.iocoder.yudao.module.crm.service.customerlimitconfig; | ||||
| package cn.iocoder.yudao.module.crm.service.customer; | ||||
| 
 | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.CrmCustomerLimitConfigCreateReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.CrmCustomerLimitConfigPageReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.CrmCustomerLimitConfigUpdateReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.limitconfig.CrmCustomerLimitConfigCreateReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.limitconfig.CrmCustomerLimitConfigPageReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.limitconfig.CrmCustomerLimitConfigUpdateReqVO; | ||||
| import cn.iocoder.yudao.module.crm.convert.customer.CrmCustomerLimitConfigConvert; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.customerlimitconfig.CrmCustomerLimitConfigDO; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerLimitConfigDO; | ||||
| import cn.iocoder.yudao.module.crm.dal.mysql.customerlimitconfig.CrmCustomerLimitConfigMapper; | ||||
| import cn.iocoder.yudao.module.system.api.dept.DeptApi; | ||||
| import cn.iocoder.yudao.module.system.api.user.AdminUserApi; | ||||
| @@ -1,6 +1,6 @@ | ||||
| package cn.iocoder.yudao.module.crm.service.customer; | ||||
|  | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.CrmCustomerPoolConfigUpdateReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.poolconfig.CrmCustomerPoolConfigSaveReqVO; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerPoolConfigDO; | ||||
|  | ||||
| import javax.validation.Valid; | ||||
| @@ -24,6 +24,6 @@ public interface CrmCustomerPoolConfigService { | ||||
|      * | ||||
|      * @param saveReqVO 更新信息 | ||||
|      */ | ||||
|     void updateCustomerPoolConfig(@Valid CrmCustomerPoolConfigUpdateReqVO saveReqVO); | ||||
|     void saveCustomerPoolConfig(@Valid CrmCustomerPoolConfigSaveReqVO saveReqVO); | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -1,9 +1,7 @@ | ||||
| package cn.iocoder.yudao.module.crm.service.customer; | ||||
|  | ||||
| import cn.hutool.core.util.BooleanUtil; | ||||
| import cn.hutool.core.util.ObjectUtil; | ||||
| import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.CrmCustomerPoolConfigUpdateReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.poolconfig.CrmCustomerPoolConfigSaveReqVO; | ||||
| import cn.iocoder.yudao.module.crm.convert.customer.CrmCustomerConvert; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerPoolConfigDO; | ||||
| import cn.iocoder.yudao.module.crm.dal.mysql.customer.CrmCustomerPoolConfigMapper; | ||||
| @@ -13,9 +11,6 @@ import org.springframework.validation.annotation.Validated; | ||||
| import javax.annotation.Resource; | ||||
| import java.util.Objects; | ||||
|  | ||||
| import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | ||||
| import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.CUSTOMER_POOL_CONFIG_ERROR; | ||||
|  | ||||
| /** | ||||
|  * 客户公海配置 Service 实现类 | ||||
|  * | ||||
| @@ -43,15 +38,7 @@ public class CrmCustomerPoolConfigServiceImpl implements CrmCustomerPoolConfigSe | ||||
|      * @param saveReqVO 更新信息 | ||||
|      */ | ||||
|     @Override | ||||
|     public void updateCustomerPoolConfig(CrmCustomerPoolConfigUpdateReqVO saveReqVO) { | ||||
|         // TODO @wanwan:看下 @AssertTrue 的逻辑; | ||||
|         if (BooleanUtil.isTrue(saveReqVO.getEnabled()) && (ObjectUtil.hasNull(saveReqVO.getContactExpireDays(), saveReqVO.getDealExpireDays()))) { | ||||
|             throw exception(CUSTOMER_POOL_CONFIG_ERROR); | ||||
|         } | ||||
|         if (BooleanUtil.isTrue(saveReqVO.getNotifyEnabled()) && (Objects.isNull(saveReqVO.getNotifyDays()))) { | ||||
|             throw exception(CUSTOMER_POOL_CONFIG_ERROR); | ||||
|         } | ||||
|  | ||||
|     public void saveCustomerPoolConfig(CrmCustomerPoolConfigSaveReqVO saveReqVO) { | ||||
|         // 存在,则进行更新 | ||||
|         CrmCustomerPoolConfigDO dbConfig = getCustomerPoolConfig(); | ||||
|         if (Objects.nonNull(dbConfig)) { | ||||
|   | ||||
| @@ -1,4 +0,0 @@ | ||||
| /** | ||||
|  * 客户 | ||||
|  */ | ||||
| package cn.iocoder.yudao.module.crm.service.customer; | ||||
| @@ -0,0 +1,118 @@ | ||||
| package cn.iocoder.yudao.module.crm.service.business; | ||||
|  | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||
| import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.type.CrmBusinessStatusTypePageReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.type.CrmBusinessStatusTypeSaveReqVO; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessStatusTypeDO; | ||||
| import cn.iocoder.yudao.module.crm.dal.mysql.business.CrmBusinessStatusTypeMapper; | ||||
| import org.junit.jupiter.api.Disabled; | ||||
| import org.junit.jupiter.api.Test; | ||||
| import org.springframework.context.annotation.Import; | ||||
|  | ||||
| import javax.annotation.Resource; | ||||
|  | ||||
| import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; | ||||
| import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; | ||||
| import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId; | ||||
| import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; | ||||
| import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.BUSINESS_STATUS_TYPE_NOT_EXISTS; | ||||
| import static org.junit.jupiter.api.Assertions.*; | ||||
|  | ||||
| // TODO 芋艿:后续再 review | ||||
| /** | ||||
|  * {@link CrmBusinessStatusTypeServiceImpl} 的单元测试类 | ||||
|  * | ||||
|  * @author ljlleo | ||||
|  */ | ||||
| @Import(CrmBusinessStatusTypeServiceImpl.class) | ||||
| public class BusinessStatusTypeServiceImplTest extends BaseDbUnitTest { | ||||
|  | ||||
|     @Resource | ||||
|     private CrmBusinessStatusTypeServiceImpl businessStatusTypeService; | ||||
|  | ||||
|     @Resource | ||||
|     private CrmBusinessStatusTypeMapper businessStatusTypeMapper; | ||||
|  | ||||
|     @Test | ||||
|     public void testCreateBusinessStatusType_success() { | ||||
|         // 准备参数 | ||||
|         CrmBusinessStatusTypeSaveReqVO createReqVO = randomPojo(CrmBusinessStatusTypeSaveReqVO.class).setId(null); | ||||
|  | ||||
|         // 调用 | ||||
|         Long businessStatusTypeId = businessStatusTypeService.createBusinessStatusType(createReqVO); | ||||
|         // 断言 | ||||
|         assertNotNull(businessStatusTypeId); | ||||
|         // 校验记录的属性是否正确 | ||||
|         CrmBusinessStatusTypeDO businessStatusType = businessStatusTypeMapper.selectById(businessStatusTypeId); | ||||
|         assertPojoEquals(createReqVO, businessStatusType, "id"); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testUpdateBusinessStatusType_success() { | ||||
|         // mock 数据 | ||||
|         CrmBusinessStatusTypeDO dbBusinessStatusType = randomPojo(CrmBusinessStatusTypeDO.class); | ||||
|         businessStatusTypeMapper.insert(dbBusinessStatusType);// @Sql: 先插入出一条存在的数据 | ||||
|         // 准备参数 | ||||
|         CrmBusinessStatusTypeSaveReqVO updateReqVO = randomPojo(CrmBusinessStatusTypeSaveReqVO.class, o -> { | ||||
|             o.setId(dbBusinessStatusType.getId()); // 设置更新的 ID | ||||
|         }); | ||||
|  | ||||
|         // 调用 | ||||
|         businessStatusTypeService.updateBusinessStatusType(updateReqVO); | ||||
|         // 校验是否更新正确 | ||||
|         CrmBusinessStatusTypeDO businessStatusType = businessStatusTypeMapper.selectById(updateReqVO.getId()); // 获取最新的 | ||||
|         assertPojoEquals(updateReqVO, businessStatusType); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testUpdateBusinessStatusType_notExists() { | ||||
|         // 准备参数 | ||||
|         CrmBusinessStatusTypeSaveReqVO updateReqVO = randomPojo(CrmBusinessStatusTypeSaveReqVO.class); | ||||
|  | ||||
|         // 调用, 并断言异常 | ||||
|         assertServiceException(() -> businessStatusTypeService.updateBusinessStatusType(updateReqVO), BUSINESS_STATUS_TYPE_NOT_EXISTS); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testDeleteBusinessStatusType_success() { | ||||
|         // mock 数据 | ||||
|         CrmBusinessStatusTypeDO dbBusinessStatusType = randomPojo(CrmBusinessStatusTypeDO.class); | ||||
|         businessStatusTypeMapper.insert(dbBusinessStatusType);// @Sql: 先插入出一条存在的数据 | ||||
|         // 准备参数 | ||||
|         Long id = dbBusinessStatusType.getId(); | ||||
|  | ||||
|         // 调用 | ||||
|         businessStatusTypeService.deleteBusinessStatusType(id); | ||||
|        // 校验数据不存在了 | ||||
|        assertNull(businessStatusTypeMapper.selectById(id)); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     public void testDeleteBusinessStatusType_notExists() { | ||||
|         // 准备参数 | ||||
|         Long id = randomLongId(); | ||||
|  | ||||
|         // 调用, 并断言异常 | ||||
|         assertServiceException(() -> businessStatusTypeService.deleteBusinessStatusType(id), BUSINESS_STATUS_TYPE_NOT_EXISTS); | ||||
|     } | ||||
|  | ||||
|     @Test | ||||
|     @Disabled  // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 | ||||
|     public void testGetBusinessStatusTypePage() { | ||||
|        // mock 数据 | ||||
|        CrmBusinessStatusTypeDO dbBusinessStatusType = randomPojo(CrmBusinessStatusTypeDO.class, o -> { // 等会查询到 | ||||
|        }); | ||||
|        businessStatusTypeMapper.insert(dbBusinessStatusType); | ||||
|        // 准备参数 | ||||
|        CrmBusinessStatusTypePageReqVO reqVO = new CrmBusinessStatusTypePageReqVO(); | ||||
|  | ||||
|        // 调用 | ||||
|        PageResult<CrmBusinessStatusTypeDO> pageResult = businessStatusTypeService.getBusinessStatusTypePage(reqVO); | ||||
|        // 断言 | ||||
|        assertEquals(1, pageResult.getTotal()); | ||||
|        assertEquals(1, pageResult.getList().size()); | ||||
|        assertPojoEquals(dbBusinessStatusType, pageResult.getList().get(0)); | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -1,9 +1,9 @@ | ||||
| package cn.iocoder.yudao.module.crm.service.business; | ||||
|  | ||||
| import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.CrmBusinessCreateReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.CrmBusinessExportReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.CrmBusinessUpdateReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.business.CrmBusinessCreateReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.business.CrmBusinessExportReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.business.CrmBusinessUpdateReqVO; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessDO; | ||||
| import cn.iocoder.yudao.module.crm.dal.mysql.business.CrmBusinessMapper; | ||||
| import org.junit.jupiter.api.Disabled; | ||||
|   | ||||
| @@ -2,11 +2,12 @@ package cn.iocoder.yudao.module.crm.service.customerlimitconfig; | ||||
|  | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||
| import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.CrmCustomerLimitConfigCreateReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.CrmCustomerLimitConfigPageReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.CrmCustomerLimitConfigUpdateReqVO; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.customerlimitconfig.CrmCustomerLimitConfigDO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.limitconfig.CrmCustomerLimitConfigCreateReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.limitconfig.CrmCustomerLimitConfigPageReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.limitconfig.CrmCustomerLimitConfigUpdateReqVO; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerLimitConfigDO; | ||||
| import cn.iocoder.yudao.module.crm.dal.mysql.customerlimitconfig.CrmCustomerLimitConfigMapper; | ||||
| import cn.iocoder.yudao.module.crm.service.customer.CrmCustomerLimitConfigServiceImpl; | ||||
| import org.junit.jupiter.api.Disabled; | ||||
| import org.junit.jupiter.api.Test; | ||||
| import org.springframework.context.annotation.Import; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 puhui999
					puhui999