mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-10-28 16:58:43 +08:00 
			
		
		
		
	| @@ -41,7 +41,7 @@ CREATE TABLE `crm_receivable`  ( | ||||
| DROP TABLE IF EXISTS `crm_receivable_plan`; | ||||
| CREATE TABLE `crm_receivable_plan`  ( | ||||
|     `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID', | ||||
|     `index_no` bigint(20) NULL DEFAULT NULL COMMENT '期数', | ||||
|     `period` tinyint(4) DEFAULT NULL COMMENT '期数', | ||||
|     `receivable_id` bigint(20) NULL DEFAULT NULL COMMENT '回款ID', | ||||
|     `status` tinyint(4) NOT NULL COMMENT '完成状态', | ||||
|     `check_status` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '审批状态', | ||||
|   | ||||
| @@ -0,0 +1,61 @@ | ||||
| package cn.iocoder.yudao.module.crm.enums; | ||||
|  | ||||
| import cn.iocoder.yudao.framework.common.core.IntArrayValuable; | ||||
|  | ||||
| import java.util.Arrays; | ||||
|  | ||||
| /** | ||||
|  * 流程审批状态枚举类 | ||||
|  * 0 未审核 1 审核通过 2 审核拒绝 3 审核中 4 已撤回 | ||||
|  * @author 赤焰 | ||||
|  */ | ||||
| public enum AuditStatusEnum implements IntArrayValuable { | ||||
|     /** | ||||
|      * 未审批 | ||||
|      */ | ||||
|     AUDIT_NEW(0, "未审批"), | ||||
|     /** | ||||
|      * 审核通过 | ||||
|      */ | ||||
| 	AUDIT_FINISH(1, "审核通过"), | ||||
|     /** | ||||
|      * 审核拒绝 | ||||
|      */ | ||||
| 	AUDIT_REJECT(2, "审核拒绝"), | ||||
|     /** | ||||
|      * 审核中 | ||||
|      */ | ||||
|     AUDIT_DOING(3, "审核中"), | ||||
| 	/** | ||||
| 	 * 已撤回 | ||||
| 	 */ | ||||
| 	AUDIT_RETURN(4, "已撤回"); | ||||
|  | ||||
|     private final Integer value; | ||||
|     private final String desc; | ||||
|  | ||||
|     public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(AuditStatusEnum::getValue).toArray(); | ||||
|  | ||||
|     /** | ||||
|      * | ||||
|      * @param value | ||||
|      * @param desc | ||||
|      */ | ||||
|     AuditStatusEnum(Integer value, String desc) { | ||||
|         this.value = value; | ||||
|         this.desc = desc; | ||||
|     } | ||||
|  | ||||
|     public Integer getValue() { | ||||
|         return value; | ||||
|     } | ||||
|  | ||||
|     public String getDesc() { | ||||
|         return desc; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public int[] array() { | ||||
|         return ARRAYS; | ||||
|     } | ||||
| } | ||||
| @@ -11,5 +11,6 @@ public interface DictTypeConstants { | ||||
|     String CRM_CUSTOMER_INDUSTRY = "crm_customer_industry"; // CRM 客户所属行业 | ||||
|     String CRM_CUSTOMER_LEVEL = "crm_customer_level"; // CRM 客户等级 | ||||
|     String CRM_CUSTOMER_SOURCE = "crm_customer_source"; // CRM 客户来源 | ||||
|     String CRM_RECEIVABLE_CHECK_STATUS = "crm_receivable_check_status"; // CRM 审批状态 | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -26,10 +26,11 @@ public interface ErrorCodeConstants { | ||||
|     // ========== 联系人管理 1-020-003-000 ========== | ||||
|     ErrorCode CONTACT_NOT_EXISTS = new ErrorCode(1_020_003_000, "联系人不存在"); | ||||
|  | ||||
|     // TODO @liuhongfeng:错误码分段; | ||||
|     ErrorCode RECEIVABLE_NOT_EXISTS = new ErrorCode(1_030_000_001, "回款管理不存在"); | ||||
|     // ========== 回款管理 1-020-004-000 ========== | ||||
|     ErrorCode RECEIVABLE_NOT_EXISTS = new ErrorCode(1_020_004_000, "回款管理不存在"); | ||||
|  | ||||
|     ErrorCode RECEIVABLE_PLAN_NOT_EXISTS = new ErrorCode(1_040_000_001, "回款计划不存在"); | ||||
|     // ========== 合同管理 1-020-005-000 ========== | ||||
|     ErrorCode RECEIVABLE_PLAN_NOT_EXISTS = new ErrorCode(1_020_005_000, "回款计划不存在"); | ||||
|  | ||||
|     // ========== 客户管理 1_020_006_000 ========== | ||||
|     ErrorCode CUSTOMER_NOT_EXISTS = new ErrorCode(1_020_006_000, "客户不存在"); | ||||
|   | ||||
| @@ -0,0 +1,8 @@ | ||||
| package cn.iocoder.yudao.module.crm.enums; | ||||
|  | ||||
| /** | ||||
|  * @author 赤焰 | ||||
|  */ | ||||
|  | ||||
| public enum ReturnTypeEnum { | ||||
| } | ||||
| @@ -5,9 +5,9 @@ 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.receivable.vo.*; | ||||
| import cn.iocoder.yudao.module.crm.convert.receivable.ReceivableConvert; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.ReceivableDO; | ||||
| import cn.iocoder.yudao.module.crm.service.receivable.ReceivableService; | ||||
| import cn.iocoder.yudao.module.crm.convert.receivable.CrmReceivableConvert; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.CrmReceivableDO; | ||||
| import cn.iocoder.yudao.module.crm.service.receivable.CrmReceivableService; | ||||
| import io.swagger.v3.oas.annotations.Operation; | ||||
| import io.swagger.v3.oas.annotations.Parameter; | ||||
| import io.swagger.v3.oas.annotations.tags.Tag; | ||||
| @@ -28,23 +28,23 @@ import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.E | ||||
| @RestController | ||||
| @RequestMapping("/crm/receivable") | ||||
| @Validated | ||||
| public class ReceivableController { | ||||
| public class CrmReceivableController { | ||||
| 
 | ||||
|     @Resource | ||||
|     private ReceivableService receivableService; | ||||
|     private CrmReceivableService crmReceivableService; | ||||
| 
 | ||||
|     @PostMapping("/create") | ||||
|     @Operation(summary = "创建回款管理") | ||||
|     @PreAuthorize("@ss.hasPermission('crm:receivable:create')") | ||||
|     public CommonResult<Long> createReceivable(@Valid @RequestBody ReceivableCreateReqVO createReqVO) { | ||||
|         return success(receivableService.createReceivable(createReqVO)); | ||||
|     public CommonResult<Long> createReceivable(@Valid @RequestBody CrmReceivableCreateReqVO createReqVO) { | ||||
|         return success(crmReceivableService.createReceivable(createReqVO)); | ||||
|     } | ||||
| 
 | ||||
|     @PutMapping("/update") | ||||
|     @Operation(summary = "更新回款管理") | ||||
|     @PreAuthorize("@ss.hasPermission('crm:receivable:update')") | ||||
|     public CommonResult<Boolean> updateReceivable(@Valid @RequestBody ReceivableUpdateReqVO updateReqVO) { | ||||
|         receivableService.updateReceivable(updateReqVO); | ||||
|     public CommonResult<Boolean> updateReceivable(@Valid @RequestBody CrmReceivableUpdateReqVO updateReqVO) { | ||||
|         crmReceivableService.updateReceivable(updateReqVO); | ||||
|         return success(true); | ||||
|     } | ||||
| 
 | ||||
| @@ -53,7 +53,7 @@ public class ReceivableController { | ||||
|     @Parameter(name = "id", description = "编号", required = true) | ||||
|     @PreAuthorize("@ss.hasPermission('crm:receivable:delete')") | ||||
|     public CommonResult<Boolean> deleteReceivable(@RequestParam("id") Long id) { | ||||
|         receivableService.deleteReceivable(id); | ||||
|         crmReceivableService.deleteReceivable(id); | ||||
|         return success(true); | ||||
|     } | ||||
| 
 | ||||
| @@ -61,29 +61,29 @@ public class ReceivableController { | ||||
|     @Operation(summary = "获得回款管理") | ||||
|     @Parameter(name = "id", description = "编号", required = true, example = "1024") | ||||
|     @PreAuthorize("@ss.hasPermission('crm:receivable:query')") | ||||
|     public CommonResult<ReceivableRespVO> getReceivable(@RequestParam("id") Long id) { | ||||
|         ReceivableDO receivable = receivableService.getReceivable(id); | ||||
|         return success(ReceivableConvert.INSTANCE.convert(receivable)); | ||||
|     public CommonResult<CrmReceivableRespVO> getReceivable(@RequestParam("id") Long id) { | ||||
|         CrmReceivableDO receivable = crmReceivableService.getReceivable(id); | ||||
|         return success(CrmReceivableConvert.INSTANCE.convert(receivable)); | ||||
|     } | ||||
| 
 | ||||
|     @GetMapping("/page") | ||||
|     @Operation(summary = "获得回款管理分页") | ||||
|     @PreAuthorize("@ss.hasPermission('crm:receivable:query')") | ||||
|     public CommonResult<PageResult<ReceivableRespVO>> getReceivablePage(@Valid ReceivablePageReqVO pageVO) { | ||||
|         PageResult<ReceivableDO> pageResult = receivableService.getReceivablePage(pageVO); | ||||
|         return success(ReceivableConvert.INSTANCE.convertPage(pageResult)); | ||||
|     public CommonResult<PageResult<CrmReceivableRespVO>> getReceivablePage(@Valid CrmReceivablePageReqVO pageVO) { | ||||
|         PageResult<CrmReceivableDO> pageResult = crmReceivableService.getReceivablePage(pageVO); | ||||
|         return success(CrmReceivableConvert.INSTANCE.convertPage(pageResult)); | ||||
|     } | ||||
| 
 | ||||
|     @GetMapping("/export-excel") | ||||
|     @Operation(summary = "导出回款管理 Excel") | ||||
|     @PreAuthorize("@ss.hasPermission('crm:receivable:export')") | ||||
|     @OperateLog(type = EXPORT) | ||||
|     public void exportReceivableExcel(@Valid ReceivableExportReqVO exportReqVO, | ||||
|     public void exportReceivableExcel(@Valid CrmReceivableExportReqVO exportReqVO, | ||||
|               HttpServletResponse response) throws IOException { | ||||
|         List<ReceivableDO> list = receivableService.getReceivableList(exportReqVO); | ||||
|         List<CrmReceivableDO> list = crmReceivableService.getReceivableList(exportReqVO); | ||||
|         // 导出 Excel | ||||
|         List<ReceivableExcelVO> datas = ReceivableConvert.INSTANCE.convertList02(list); | ||||
|         ExcelUtils.write(response, "回款管理.xls", "数据", ReceivableExcelVO.class, datas); | ||||
|         List<CrmReceivableExcelVO> datas = CrmReceivableConvert.INSTANCE.convertList02(list); | ||||
|         ExcelUtils.write(response, "回款管理.xls", "数据", CrmReceivableExcelVO.class, datas); | ||||
|     } | ||||
| 
 | ||||
| } | ||||
| @@ -5,9 +5,9 @@ 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.receivable.vo.*; | ||||
| import cn.iocoder.yudao.module.crm.convert.receivable.ReceivablePlanConvert; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.ReceivablePlanDO; | ||||
| import cn.iocoder.yudao.module.crm.service.receivable.ReceivablePlanService; | ||||
| import cn.iocoder.yudao.module.crm.convert.receivable.CrmReceivablePlanConvert; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.CrmReceivablePlanDO; | ||||
| import cn.iocoder.yudao.module.crm.service.receivable.CrmReceivablePlanService; | ||||
| import io.swagger.v3.oas.annotations.Operation; | ||||
| import io.swagger.v3.oas.annotations.Parameter; | ||||
| import io.swagger.v3.oas.annotations.tags.Tag; | ||||
| @@ -28,23 +28,23 @@ import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.E | ||||
| @RestController | ||||
| @RequestMapping("/crm/receivable-plan") | ||||
| @Validated | ||||
| public class ReceivablePlanController { | ||||
| public class CrmReceivablePlanController { | ||||
| 
 | ||||
|     @Resource | ||||
|     private ReceivablePlanService receivablePlanService; | ||||
|     private CrmReceivablePlanService crmReceivablePlanService; | ||||
| 
 | ||||
|     @PostMapping("/create") | ||||
|     @Operation(summary = "创建回款计划") | ||||
|     @PreAuthorize("@ss.hasPermission('crm:receivable-plan:create')") | ||||
|     public CommonResult<Long> createReceivablePlan(@Valid @RequestBody ReceivablePlanCreateReqVO createReqVO) { | ||||
|         return success(receivablePlanService.createReceivablePlan(createReqVO)); | ||||
|     public CommonResult<Long> createReceivablePlan(@Valid @RequestBody CrmReceivablePlanCreateReqVO createReqVO) { | ||||
|         return success(crmReceivablePlanService.createReceivablePlan(createReqVO)); | ||||
|     } | ||||
| 
 | ||||
|     @PutMapping("/update") | ||||
|     @Operation(summary = "更新回款计划") | ||||
|     @PreAuthorize("@ss.hasPermission('crm:receivable-plan:update')") | ||||
|     public CommonResult<Boolean> updateReceivablePlan(@Valid @RequestBody ReceivablePlanUpdateReqVO updateReqVO) { | ||||
|         receivablePlanService.updateReceivablePlan(updateReqVO); | ||||
|     public CommonResult<Boolean> updateReceivablePlan(@Valid @RequestBody CrmReceivablePlanUpdateReqVO updateReqVO) { | ||||
|         crmReceivablePlanService.updateReceivablePlan(updateReqVO); | ||||
|         return success(true); | ||||
|     } | ||||
| 
 | ||||
| @@ -53,7 +53,7 @@ public class ReceivablePlanController { | ||||
|     @Parameter(name = "id", description = "编号", required = true) | ||||
|     @PreAuthorize("@ss.hasPermission('crm:receivable-plan:delete')") | ||||
|     public CommonResult<Boolean> deleteReceivablePlan(@RequestParam("id") Long id) { | ||||
|         receivablePlanService.deleteReceivablePlan(id); | ||||
|         crmReceivablePlanService.deleteReceivablePlan(id); | ||||
|         return success(true); | ||||
|     } | ||||
| 
 | ||||
| @@ -61,29 +61,29 @@ public class ReceivablePlanController { | ||||
|     @Operation(summary = "获得回款计划") | ||||
|     @Parameter(name = "id", description = "编号", required = true, example = "1024") | ||||
|     @PreAuthorize("@ss.hasPermission('crm:receivable-plan:query')") | ||||
|     public CommonResult<ReceivablePlanRespVO> getReceivablePlan(@RequestParam("id") Long id) { | ||||
|         ReceivablePlanDO receivablePlan = receivablePlanService.getReceivablePlan(id); | ||||
|         return success(ReceivablePlanConvert.INSTANCE.convert(receivablePlan)); | ||||
|     public CommonResult<CrmReceivablePlanRespVO> getReceivablePlan(@RequestParam("id") Long id) { | ||||
|         CrmReceivablePlanDO receivablePlan = crmReceivablePlanService.getReceivablePlan(id); | ||||
|         return success(CrmReceivablePlanConvert.INSTANCE.convert(receivablePlan)); | ||||
|     } | ||||
| 
 | ||||
|     @GetMapping("/page") | ||||
|     @Operation(summary = "获得回款计划分页") | ||||
|     @PreAuthorize("@ss.hasPermission('crm:receivable-plan:query')") | ||||
|     public CommonResult<PageResult<ReceivablePlanRespVO>> getReceivablePlanPage(@Valid ReceivablePlanPageReqVO pageVO) { | ||||
|         PageResult<ReceivablePlanDO> pageResult = receivablePlanService.getReceivablePlanPage(pageVO); | ||||
|         return success(ReceivablePlanConvert.INSTANCE.convertPage(pageResult)); | ||||
|     public CommonResult<PageResult<CrmReceivablePlanRespVO>> getReceivablePlanPage(@Valid CrmReceivablePlanPageReqVO pageVO) { | ||||
|         PageResult<CrmReceivablePlanDO> pageResult = crmReceivablePlanService.getReceivablePlanPage(pageVO); | ||||
|         return success(CrmReceivablePlanConvert.INSTANCE.convertPage(pageResult)); | ||||
|     } | ||||
| 
 | ||||
|     @GetMapping("/export-excel") | ||||
|     @Operation(summary = "导出回款计划 Excel") | ||||
|     @PreAuthorize("@ss.hasPermission('crm:receivable-plan:export')") | ||||
|     @OperateLog(type = EXPORT) | ||||
|     public void exportReceivablePlanExcel(@Valid ReceivablePlanExportReqVO exportReqVO, | ||||
|     public void exportReceivablePlanExcel(@Valid CrmReceivablePlanExportReqVO exportReqVO, | ||||
|               HttpServletResponse response) throws IOException { | ||||
|         List<ReceivablePlanDO> list = receivablePlanService.getReceivablePlanList(exportReqVO); | ||||
|         List<CrmReceivablePlanDO> list = crmReceivablePlanService.getReceivablePlanList(exportReqVO); | ||||
|         // 导出 Excel | ||||
|         List<ReceivablePlanExcelVO> datas = ReceivablePlanConvert.INSTANCE.convertList02(list); | ||||
|         ExcelUtils.write(response, "回款计划.xls", "数据", ReceivablePlanExcelVO.class, datas); | ||||
|         List<CrmReceivablePlanExcelVO> datas = CrmReceivablePlanConvert.INSTANCE.convertList02(list); | ||||
|         ExcelUtils.write(response, "回款计划.xls", "数据", CrmReceivablePlanExcelVO.class, datas); | ||||
|     } | ||||
| 
 | ||||
| } | ||||
| @@ -0,0 +1,61 @@ | ||||
| package cn.iocoder.yudao.module.crm.controller.admin.receivable.vo; | ||||
|  | ||||
| import cn.iocoder.yudao.framework.common.validation.InEnum; | ||||
| import cn.iocoder.yudao.module.crm.enums.AuditStatusEnum; | ||||
| import io.swagger.v3.oas.annotations.media.Schema; | ||||
| import lombok.Data; | ||||
| import org.springframework.format.annotation.DateTimeFormat; | ||||
|  | ||||
| import java.time.LocalDateTime; | ||||
|  | ||||
| import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; | ||||
|  | ||||
| /** | ||||
|  * 回款管理 Base VO,提供给添加、修改、详细的子 VO 使用 | ||||
|  * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 | ||||
|  */ | ||||
| @Data | ||||
| public class CrmReceivableBaseVO { | ||||
|  | ||||
|     @Schema(description = "回款编号",requiredMode = Schema.RequiredMode.REQUIRED, example = "31177") | ||||
|     private String no; | ||||
|  | ||||
|     @Schema(description = "回款计划", example = "31177") | ||||
|     private Long planId; | ||||
|  | ||||
|     @Schema(description = "客户名称", example = "4963") | ||||
|     private Long customerId; | ||||
|  | ||||
|     @Schema(description = "合同名称", example = "30305") | ||||
|     private Long contractId; | ||||
|  | ||||
|     @Schema(description = "审批状态", example = "1") | ||||
|     @InEnum(AuditStatusEnum.class) | ||||
|     private Integer checkStatus; | ||||
|  | ||||
|     @Schema(description = "回款日期") | ||||
|     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||||
|     private LocalDateTime returnTime; | ||||
|  | ||||
|     @Schema(description = "回款方式", example = "2") | ||||
|     private String returnType; | ||||
|  | ||||
|     @Schema(description = "回款金额", example = "31859") | ||||
|     private Integer price; | ||||
|  | ||||
|     @Schema(description = "负责人", example = "22202") | ||||
|     private Long ownerUserId; | ||||
|  | ||||
|     @Schema(description = "批次", example = "2539") | ||||
|     private Long batchId; | ||||
|  | ||||
|     @Schema(description = "显示顺序") | ||||
|     private Integer sort; | ||||
|  | ||||
|     @Schema(description = "备注", example = "备注") | ||||
|     private String remark; | ||||
|  | ||||
|     @Schema(description = "完成状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") | ||||
|     private Integer status; | ||||
|  | ||||
| } | ||||
| @@ -1,14 +1,12 @@ | ||||
| package cn.iocoder.yudao.module.crm.controller.admin.receivable.vo; | ||||
| 
 | ||||
| import lombok.*; | ||||
| import java.util.*; | ||||
| import io.swagger.v3.oas.annotations.media.Schema; | ||||
| import javax.validation.constraints.*; | ||||
| 
 | ||||
| @Schema(description = "管理后台 - CRM 回款创建 Request VO") | ||||
| @Data | ||||
| @EqualsAndHashCode(callSuper = true) | ||||
| @ToString(callSuper = true) | ||||
| public class ReceivableCreateReqVO extends ReceivableBaseVO { | ||||
| public class CrmReceivableCreateReqVO extends CrmReceivableBaseVO { | ||||
| 
 | ||||
| } | ||||
| @@ -1,11 +1,8 @@ | ||||
| package cn.iocoder.yudao.module.crm.controller.admin.receivable.vo; | ||||
| 
 | ||||
| import io.swagger.v3.oas.annotations.media.Schema; | ||||
| import cn.iocoder.yudao.module.system.enums.DictTypeConstants; | ||||
| import lombok.*; | ||||
| import java.util.*; | ||||
| import java.time.LocalDateTime; | ||||
| import java.math.BigDecimal; | ||||
| import java.time.LocalDateTime; | ||||
| 
 | ||||
| import java.time.LocalDateTime; | ||||
| 
 | ||||
| import com.alibaba.excel.annotation.ExcelProperty; | ||||
| @@ -19,7 +16,7 @@ import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; | ||||
|  * @author 赤焰 | ||||
|  */ | ||||
| @Data | ||||
| public class ReceivableExcelVO { | ||||
| public class CrmReceivableExcelVO { | ||||
| 
 | ||||
|     @ExcelProperty("ID") | ||||
|     private Long id; | ||||
| @@ -30,14 +27,14 @@ public class ReceivableExcelVO { | ||||
|     @ExcelProperty("回款计划ID") | ||||
|     private Long planId; | ||||
| 
 | ||||
|     @ExcelProperty("客户ID") | ||||
|     @ExcelProperty("客户名称") | ||||
|     private Long customerId; | ||||
| 
 | ||||
|     @ExcelProperty("合同ID") | ||||
|     @ExcelProperty("合同名称") | ||||
|     private Long contractId; | ||||
| 
 | ||||
|     @ExcelProperty(value = "审批状态", converter = DictConvert.class) | ||||
|     @DictFormat("crm_receivable_check_status") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 | ||||
|     @DictFormat(cn.iocoder.yudao.module.crm.enums.DictTypeConstants.CRM_RECEIVABLE_CHECK_STATUS) | ||||
|     private Integer checkStatus; | ||||
| 
 | ||||
|     @ExcelProperty("工作流编号") | ||||
| @@ -50,7 +47,7 @@ public class ReceivableExcelVO { | ||||
|     private String returnType; | ||||
| 
 | ||||
|     @ExcelProperty("回款金额") | ||||
|     private BigDecimal price; | ||||
|     private Integer price; | ||||
| 
 | ||||
|     @ExcelProperty("负责人") | ||||
|     private Long ownerUserId; | ||||
| @@ -58,17 +55,8 @@ public class ReceivableExcelVO { | ||||
|     @ExcelProperty("批次") | ||||
|     private Long batchId; | ||||
| 
 | ||||
|     //@ExcelProperty("显示顺序") | ||||
|     //private Integer sort; | ||||
| 
 | ||||
|     //@ExcelProperty("数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)") | ||||
|     //private Integer dataScope; | ||||
| 
 | ||||
|     //@ExcelProperty("数据范围(指定部门数组)") | ||||
|     //private String dataScopeDeptIds; | ||||
| 
 | ||||
|     @ExcelProperty(value = "状态", converter = DictConvert.class) | ||||
|     @DictFormat("common_status") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 | ||||
|     @DictFormat(DictTypeConstants.COMMON_STATUS) | ||||
|     private Integer status; | ||||
| 
 | ||||
|     @ExcelProperty("备注") | ||||
| @@ -4,7 +4,6 @@ import io.swagger.v3.oas.annotations.media.Schema; | ||||
| import lombok.Data; | ||||
| import org.springframework.format.annotation.DateTimeFormat; | ||||
| 
 | ||||
| import java.math.BigDecimal; | ||||
| import java.time.LocalDateTime; | ||||
| 
 | ||||
| import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; | ||||
| @@ -12,28 +11,25 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_ | ||||
| /** | ||||
|  * @author 赤焰 | ||||
|  */ | ||||
| @Schema(description = "管理后台 - CRM 回款 Excel 导出 Request VO,参数和 ReceivablePageReqVO 是一致的") | ||||
| @Schema(description = "管理后台 - CRM 回款 Excel 导出 Request VO,参数和 CrmReceivablePageReqVO 是一致的") | ||||
| @Data | ||||
| public class ReceivableExportReqVO { | ||||
| public class CrmReceivableExportReqVO { | ||||
| 
 | ||||
|     @Schema(description = "回款编号") | ||||
|     private String no; | ||||
| 
 | ||||
|     @Schema(description = "回款计划ID", example = "31177") | ||||
|     @Schema(description = "回款计划", example = "31177") | ||||
|     private Long planId; | ||||
| 
 | ||||
|     @Schema(description = "客户ID", example = "4963") | ||||
|     @Schema(description = "客户名称", example = "4963") | ||||
|     private Long customerId; | ||||
| 
 | ||||
|     @Schema(description = "合同ID", example = "30305") | ||||
|     @Schema(description = "合同名称", example = "30305") | ||||
|     private Long contractId; | ||||
| 
 | ||||
|     @Schema(description = "审批状态", example = "1") | ||||
|     private Integer checkStatus; | ||||
| 
 | ||||
|     @Schema(description = "工作流编号", example = "16568") | ||||
|     private Long processInstanceId; | ||||
| 
 | ||||
|     @Schema(description = "回款日期") | ||||
|     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||||
|     private LocalDateTime[] returnTime; | ||||
| @@ -42,7 +38,7 @@ public class ReceivableExportReqVO { | ||||
|     private String returnType; | ||||
| 
 | ||||
|     @Schema(description = "回款金额", example = "31859") | ||||
|     private BigDecimal price; | ||||
|     private Integer price; | ||||
| 
 | ||||
|     @Schema(description = "负责人", example = "22202") | ||||
|     private Long ownerUserId; | ||||
| @@ -50,15 +46,6 @@ public class ReceivableExportReqVO { | ||||
|     @Schema(description = "批次", example = "2539") | ||||
|     private Long batchId; | ||||
| 
 | ||||
|     @Schema(description = "显示顺序") | ||||
|     private Integer sort; | ||||
| 
 | ||||
|     @Schema(description = "数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)") | ||||
|     private Integer dataScope; | ||||
| 
 | ||||
|     @Schema(description = "数据范围(指定部门数组)") | ||||
|     private String dataScopeDeptIds; | ||||
| 
 | ||||
|     @Schema(description = "状态", example = "1") | ||||
|     private Integer status; | ||||
| 
 | ||||
| @@ -7,7 +7,6 @@ import lombok.EqualsAndHashCode; | ||||
| import lombok.ToString; | ||||
| import org.springframework.format.annotation.DateTimeFormat; | ||||
| 
 | ||||
| import java.math.BigDecimal; | ||||
| import java.time.LocalDateTime; | ||||
| 
 | ||||
| import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; | ||||
| @@ -16,27 +15,23 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_ | ||||
| @Data | ||||
| @EqualsAndHashCode(callSuper = true) | ||||
| @ToString(callSuper = true) | ||||
| public class ReceivablePageReqVO extends PageParam { | ||||
| public class CrmReceivablePageReqVO extends PageParam { | ||||
| 
 | ||||
|     // TODO @liuhongfeng:目前就使用 no 检索即可; | ||||
|     @Schema(description = "回款编号") | ||||
|     private String no; | ||||
| 
 | ||||
|     @Schema(description = "回款计划ID", example = "31177") | ||||
|     private Long planId; | ||||
| 
 | ||||
|     @Schema(description = "客户ID", example = "4963") | ||||
|     @Schema(description = "客户名称", example = "4963") | ||||
|     private Long customerId; | ||||
| 
 | ||||
|     @Schema(description = "合同ID", example = "30305") | ||||
|     @Schema(description = "合同名称", example = "30305") | ||||
|     private Long contractId; | ||||
| 
 | ||||
|     @Schema(description = "审批状态", example = "1") | ||||
|     private Integer checkStatus; | ||||
| 
 | ||||
|     @Schema(description = "工作流编号", example = "16568") | ||||
|     private Long processInstanceId; | ||||
| 
 | ||||
|     @Schema(description = "回款日期") | ||||
|     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||||
|     private LocalDateTime[] returnTime; | ||||
| @@ -45,29 +40,15 @@ public class ReceivablePageReqVO extends PageParam { | ||||
|     private String returnType; | ||||
| 
 | ||||
|     @Schema(description = "回款金额", example = "31859") | ||||
|     private BigDecimal price; | ||||
|     private Integer price; | ||||
| 
 | ||||
|     @Schema(description = "负责人", example = "22202") | ||||
|     private Long ownerUserId; | ||||
| 
 | ||||
|     @Schema(description = "批次", example = "2539") | ||||
|     private Long batchId; | ||||
| 
 | ||||
|     @Schema(description = "显示顺序") | ||||
|     private Integer sort; | ||||
| 
 | ||||
|     @Schema(description = "数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)") | ||||
|     private Integer dataScope; | ||||
| 
 | ||||
|     @Schema(description = "数据范围(指定部门数组)") | ||||
|     private String dataScopeDeptIds; | ||||
| 
 | ||||
|     @Schema(description = "状态", example = "1") | ||||
|     private Integer status; | ||||
| 
 | ||||
|     @Schema(description = "备注", example = "随便") | ||||
|     private String remark; | ||||
| 
 | ||||
|     @Schema(description = "创建时间") | ||||
|     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||||
|     private LocalDateTime[] createTime; | ||||
| @@ -1,10 +1,11 @@ | ||||
| package cn.iocoder.yudao.module.crm.controller.admin.receivable.vo; | ||||
| 
 | ||||
| import cn.iocoder.yudao.framework.common.validation.InEnum; | ||||
| import cn.iocoder.yudao.module.crm.enums.AuditStatusEnum; | ||||
| import io.swagger.v3.oas.annotations.media.Schema; | ||||
| import lombok.Data; | ||||
| import org.springframework.format.annotation.DateTimeFormat; | ||||
| 
 | ||||
| import java.math.BigDecimal; | ||||
| import java.time.LocalDateTime; | ||||
| 
 | ||||
| import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; | ||||
| @@ -14,59 +15,48 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_ | ||||
|  * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 | ||||
|  */ | ||||
| @Data | ||||
| public class ReceivablePlanBaseVO { | ||||
| public class CrmReceivablePlanBaseVO { | ||||
| 
 | ||||
|     // TODO 芋艿:这个字段,在想想命名; | ||||
|     @Schema(description = "期数") | ||||
|     private Long indexNo; | ||||
|     @Schema(description = "期数", example = "1") | ||||
|     private Integer period; | ||||
| 
 | ||||
|     // TODO @liuhongfeng:中英文之间,有个空格,这样更干净; | ||||
|     @Schema(description = "回款ID", example = "19852") | ||||
|     @Schema(description = "回款计划", example = "19852") | ||||
|     private Long receivableId; | ||||
| 
 | ||||
|     @Schema(description = "完成状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") | ||||
|     //@NotNull(message = "完成状态不能为空") | ||||
|     private Integer status; | ||||
| 
 | ||||
|     // TODO @liuhongfeng:这个字段,可以写个枚举,然后 InEnum 去校验下; | ||||
|     // TODO @liuhongfeng:这个字段,应该不是前端传递的噢,而是后端自己生成的 | ||||
|     @Schema(description = "审批状态", example = "1") | ||||
|     private String checkStatus; | ||||
|     @InEnum(AuditStatusEnum.class) | ||||
|     private Integer checkStatus; | ||||
| 
 | ||||
|     // TODO @liuhongfeng:这个字段,应该不是前端传递的噢,而是后端自己生成的,所以不适合放在 base 里面; | ||||
|     @Schema(description = "工作流编号", example = "8909") | ||||
|     private Long processInstanceId; | ||||
| 
 | ||||
|     // TODO @liuhongfeng:使用 Int 哈,分; | ||||
|     @Schema(description = "计划回款金额", example = "29675") | ||||
|     private BigDecimal price; | ||||
|     private Integer price; | ||||
| 
 | ||||
|     @Schema(description = "计划回款日期") | ||||
|     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||||
|     private LocalDateTime returnTime; | ||||
| 
 | ||||
|     // TODO @liuhongfeng:这个字段,Integer | ||||
|     @Schema(description = "提前几天提醒") | ||||
|     private Long remindDays; | ||||
|     private Integer remindDays; | ||||
| 
 | ||||
|     @Schema(description = "提醒日期") | ||||
|     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||||
|     private LocalDateTime remindTime; | ||||
| 
 | ||||
|     @Schema(description = "客户ID", example = "18026") | ||||
|     @Schema(description = "客户名称", example = "18026") | ||||
|     private Long customerId; | ||||
| 
 | ||||
|     @Schema(description = "合同ID", example = "3473") | ||||
|     @Schema(description = "合同名称", example = "3473") | ||||
|     private Long contractId; | ||||
| 
 | ||||
|     // TODO @liuhongfeng:这个字段,应该不是前端传递的噢,而是后端自己生成的,所以不适合放在 base 里面; | ||||
|     @Schema(description = "负责人", example = "17828") | ||||
|     private Long ownerUserId; | ||||
| 
 | ||||
|     @Schema(description = "显示顺序") | ||||
|     private Integer sort; | ||||
| 
 | ||||
|     @Schema(description = "备注", example = "随便") | ||||
|     @Schema(description = "备注", example = "备注") | ||||
|     private String remark; | ||||
| 
 | ||||
| } | ||||
| @@ -1,14 +1,12 @@ | ||||
| package cn.iocoder.yudao.module.crm.controller.admin.receivable.vo; | ||||
| 
 | ||||
| import lombok.*; | ||||
| import java.util.*; | ||||
| import io.swagger.v3.oas.annotations.media.Schema; | ||||
| import javax.validation.constraints.*; | ||||
| 
 | ||||
| @Schema(description = "管理后台 - CRM 回款计划创建 Request VO") | ||||
| @Data | ||||
| @EqualsAndHashCode(callSuper = true) | ||||
| @ToString(callSuper = true) | ||||
| public class ReceivablePlanCreateReqVO extends ReceivablePlanBaseVO { | ||||
| public class CrmReceivablePlanCreateReqVO extends CrmReceivablePlanBaseVO { | ||||
| 
 | ||||
| } | ||||
| @@ -1,8 +1,8 @@ | ||||
| package cn.iocoder.yudao.module.crm.controller.admin.receivable.vo; | ||||
| 
 | ||||
| import cn.iocoder.yudao.module.system.enums.DictTypeConstants; | ||||
| import lombok.*; | ||||
| 
 | ||||
| import java.math.BigDecimal; | ||||
| import java.time.LocalDateTime; | ||||
| 
 | ||||
| import com.alibaba.excel.annotation.ExcelProperty; | ||||
| @@ -16,36 +16,36 @@ import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; | ||||
|  * @author 芋道源码 | ||||
|  */ | ||||
| @Data | ||||
| public class ReceivablePlanExcelVO { | ||||
| public class CrmReceivablePlanExcelVO { | ||||
| 
 | ||||
|     @ExcelProperty("ID") | ||||
|     private Long id; | ||||
| 
 | ||||
|     @ExcelProperty("期数") | ||||
|     private Long indexNo; | ||||
|     private Integer period; | ||||
| 
 | ||||
|     @ExcelProperty("回款ID") | ||||
|     private Long receivableId; | ||||
| 
 | ||||
|     @ExcelProperty(value = "完成状态", converter = DictConvert.class) | ||||
|     @DictFormat("common_status") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 | ||||
|     @ExcelProperty(value = "状态", converter = DictConvert.class) | ||||
|     @DictFormat(DictTypeConstants.COMMON_STATUS) | ||||
|     private Integer status; | ||||
| 
 | ||||
|     @ExcelProperty(value = "审批状态", converter = DictConvert.class) | ||||
|     @DictFormat("crm_receivable_check_status") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 | ||||
|     private String checkStatus; | ||||
|     @DictFormat(cn.iocoder.yudao.module.crm.enums.DictTypeConstants.CRM_RECEIVABLE_CHECK_STATUS) | ||||
|     private Integer checkStatus; | ||||
| 
 | ||||
|     //@ExcelProperty("工作流编号") | ||||
|     //private Long processInstanceId; | ||||
| 
 | ||||
|     @ExcelProperty("计划回款金额") | ||||
|     private BigDecimal price; | ||||
|     private Integer price; | ||||
| 
 | ||||
|     @ExcelProperty("计划回款日期") | ||||
|     private LocalDateTime returnTime; | ||||
| 
 | ||||
|     @ExcelProperty("提前几天提醒") | ||||
|     private Long remindDays; | ||||
|     private Integer remindDays; | ||||
| 
 | ||||
|     @ExcelProperty("提醒日期") | ||||
|     private LocalDateTime remindTime; | ||||
| @@ -53,7 +53,7 @@ public class ReceivablePlanExcelVO { | ||||
|     @ExcelProperty("客户ID") | ||||
|     private Long customerId; | ||||
| 
 | ||||
|     @ExcelProperty("合同ID") | ||||
|     @ExcelProperty("合同名称") | ||||
|     private Long contractId; | ||||
| 
 | ||||
|     @ExcelProperty("负责人") | ||||
| @@ -1,42 +1,41 @@ | ||||
| package cn.iocoder.yudao.module.crm.controller.admin.receivable.vo; | ||||
| 
 | ||||
| import lombok.*; | ||||
| import java.util.*; | ||||
| import io.swagger.v3.oas.annotations.media.Schema; | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageParam; | ||||
| 
 | ||||
| import java.time.LocalDateTime; | ||||
| import org.springframework.format.annotation.DateTimeFormat; | ||||
| 
 | ||||
| import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; | ||||
| 
 | ||||
| @Schema(description = "管理后台 - CRM 回款计划 Excel 导出 Request VO,参数和 ReceivablePlanPageReqVO 是一致的") | ||||
| @Schema(description = "管理后台 - CRM 回款计划 Excel 导出 Request VO,参数和 CrmReceivablePlanPageReqVO 是一致的") | ||||
| @Data | ||||
| public class ReceivablePlanExportReqVO { | ||||
| public class CrmReceivablePlanExportReqVO { | ||||
| 
 | ||||
|     @Schema(description = "期数") | ||||
|     private Long indexNo; | ||||
|     private Integer period; | ||||
| 
 | ||||
|     @Schema(description = "完成状态", example = "2") | ||||
|     private Integer status; | ||||
| 
 | ||||
|     @Schema(description = "审批状态", example = "1") | ||||
|     private String checkStatus; | ||||
|     private Integer checkStatus; | ||||
| 
 | ||||
|     @Schema(description = "计划回款日期") | ||||
|     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||||
|     private LocalDateTime[] returnTime; | ||||
| 
 | ||||
|     @Schema(description = "提前几天提醒") | ||||
|     private Long remindDays; | ||||
|     private Integer remindDays; | ||||
| 
 | ||||
|     @Schema(description = "提醒日期") | ||||
|     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||||
|     private LocalDateTime[] remindTime; | ||||
| 
 | ||||
|     @Schema(description = "客户ID", example = "18026") | ||||
|     @Schema(description = "客户名称", example = "18026") | ||||
|     private Long customerId; | ||||
| 
 | ||||
|     @Schema(description = "合同ID", example = "3473") | ||||
|     @Schema(description = "合同名称", example = "3473") | ||||
|     private Long contractId; | ||||
| 
 | ||||
|     @Schema(description = "负责人", example = "17828") | ||||
| @@ -15,42 +15,31 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_ | ||||
| @Data | ||||
| @EqualsAndHashCode(callSuper = true) | ||||
| @ToString(callSuper = true) | ||||
| public class ReceivablePlanPageReqVO extends PageParam { | ||||
| 
 | ||||
|     // TODO 芋艿:筛选字段,需要去掉几个,在想想; | ||||
| 
 | ||||
|     @Schema(description = "期数") | ||||
|     private Long indexNo; | ||||
| public class CrmReceivablePlanPageReqVO extends PageParam { | ||||
| 
 | ||||
|     @Schema(description = "完成状态", example = "2") | ||||
|     private Integer status; | ||||
| 
 | ||||
|     @Schema(description = "审批状态", example = "1") | ||||
|     private String checkStatus; | ||||
|     private Integer checkStatus; | ||||
| 
 | ||||
|     @Schema(description = "计划回款日期") | ||||
|     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||||
|     private LocalDateTime[] returnTime; | ||||
| 
 | ||||
|     @Schema(description = "提前几天提醒") | ||||
|     private Long remindDays; | ||||
| 
 | ||||
|     @Schema(description = "提醒日期") | ||||
|     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||||
|     private LocalDateTime[] remindTime; | ||||
| 
 | ||||
|     @Schema(description = "客户ID", example = "18026") | ||||
|     @Schema(description = "客户名称", example = "18026") | ||||
|     private Long customerId; | ||||
| 
 | ||||
|     @Schema(description = "合同ID", example = "3473") | ||||
|     @Schema(description = "合同名称", example = "3473") | ||||
|     private Long contractId; | ||||
| 
 | ||||
|     @Schema(description = "负责人", example = "17828") | ||||
|     private Long ownerUserId; | ||||
| 
 | ||||
|     @Schema(description = "备注", example = "随便") | ||||
|     private String remark; | ||||
| 
 | ||||
|     @Schema(description = "创建时间") | ||||
|     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||||
|     private LocalDateTime[] createTime; | ||||
| @@ -8,7 +8,7 @@ import java.time.LocalDateTime; | ||||
| @Data | ||||
| @EqualsAndHashCode(callSuper = true) | ||||
| @ToString(callSuper = true) | ||||
| public class ReceivablePlanRespVO extends ReceivablePlanBaseVO { | ||||
| public class CrmReceivablePlanRespVO extends CrmReceivablePlanBaseVO { | ||||
| 
 | ||||
|     @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "25153") | ||||
|     private Long id; | ||||
| @@ -2,14 +2,14 @@ package cn.iocoder.yudao.module.crm.controller.admin.receivable.vo; | ||||
| 
 | ||||
| import io.swagger.v3.oas.annotations.media.Schema; | ||||
| import lombok.*; | ||||
| import java.util.*; | ||||
| 
 | ||||
| import javax.validation.constraints.*; | ||||
| 
 | ||||
| @Schema(description = "管理后台 - CRM 回款计划更新 Request VO") | ||||
| @Data | ||||
| @EqualsAndHashCode(callSuper = true) | ||||
| @ToString(callSuper = true) | ||||
| public class ReceivablePlanUpdateReqVO extends ReceivablePlanBaseVO { | ||||
| public class CrmReceivablePlanUpdateReqVO extends CrmReceivablePlanBaseVO { | ||||
| 
 | ||||
|     @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "25153") | ||||
|     @NotNull(message = "ID不能为空") | ||||
| @@ -8,7 +8,7 @@ import java.time.LocalDateTime; | ||||
| @Data | ||||
| @EqualsAndHashCode(callSuper = true) | ||||
| @ToString(callSuper = true) | ||||
| public class ReceivableRespVO extends ReceivableBaseVO { | ||||
| public class CrmReceivableRespVO extends CrmReceivableBaseVO { | ||||
| 
 | ||||
|     @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "25787") | ||||
|     private Long id; | ||||
| @@ -2,14 +2,14 @@ package cn.iocoder.yudao.module.crm.controller.admin.receivable.vo; | ||||
| 
 | ||||
| import io.swagger.v3.oas.annotations.media.Schema; | ||||
| import lombok.*; | ||||
| import java.util.*; | ||||
| 
 | ||||
| import javax.validation.constraints.*; | ||||
| 
 | ||||
| @Schema(description = "管理后台 - CRM 回款更新 Request VO") | ||||
| @Data | ||||
| @EqualsAndHashCode(callSuper = true) | ||||
| @ToString(callSuper = true) | ||||
| public class ReceivableUpdateReqVO extends ReceivableBaseVO { | ||||
| public class CrmReceivableUpdateReqVO extends CrmReceivableBaseVO { | ||||
| 
 | ||||
|     @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "25787") | ||||
|     @NotNull(message = "ID不能为空") | ||||
| @@ -1,80 +0,0 @@ | ||||
| package cn.iocoder.yudao.module.crm.controller.admin.receivable.vo; | ||||
|  | ||||
| import io.swagger.v3.oas.annotations.media.Schema; | ||||
| import lombok.Data; | ||||
| import org.springframework.format.annotation.DateTimeFormat; | ||||
|  | ||||
| import javax.validation.constraints.NotNull; | ||||
| import java.math.BigDecimal; | ||||
| import java.time.LocalDateTime; | ||||
|  | ||||
| import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; | ||||
|  | ||||
| /** | ||||
|  * 回款管理 Base VO,提供给添加、修改、详细的子 VO 使用 | ||||
|  * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 | ||||
|  */ | ||||
| @Data | ||||
| public class ReceivableBaseVO { | ||||
|  | ||||
|     // TODO @liuhongfeng:部分缺少 example 的字段,要补充下; | ||||
|     // TODO @liuhongfeng:部分字段,需要必传,要写 requiredMode = Schema.RequiredMode.REQUIRED,以及对应的 validator 非空校验 | ||||
|  | ||||
|     @Schema(description = "回款编号") | ||||
|     private String no; | ||||
|  | ||||
|     // TODO @liuhongfeng:中英文之间,有个空格,这样更干净; | ||||
|     @Schema(description = "回款计划ID", example = "31177") | ||||
|     private Long planId; | ||||
|  | ||||
|     @Schema(description = "客户ID", example = "4963") | ||||
|     private Long customerId; | ||||
|  | ||||
|     @Schema(description = "合同ID", example = "30305") | ||||
|     private Long contractId; | ||||
|  | ||||
|     // TODO @liuhongfeng:这个字段,可以写个枚举,然后 InEnum 去校验下; | ||||
|     // TODO @liuhongfeng:这个字段,应该不是前端传递的噢,而是后端自己生成的 | ||||
|     @Schema(description = "审批状态", example = "1") | ||||
|     private Integer checkStatus; | ||||
|  | ||||
|     // TODO @liuhongfeng:这个字段,应该不是前端传递的噢,而是后端自己生成的,所以不适合放在 base 里面; | ||||
|     @Schema(description = "工作流编号", example = "16568") | ||||
|     private Long processInstanceId; | ||||
|  | ||||
|     @Schema(description = "回款日期") | ||||
|     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) | ||||
|     private LocalDateTime returnTime; | ||||
|  | ||||
|     @Schema(description = "回款方式", example = "2") | ||||
|     private String returnType; | ||||
|  | ||||
|     // TODO @liuhongfeng:使用 Int 哈,分; | ||||
|     @Schema(description = "回款金额", example = "31859") | ||||
|     private BigDecimal price; | ||||
|  | ||||
|     @Schema(description = "负责人", example = "22202") | ||||
|     private Long ownerUserId; | ||||
|  | ||||
|     @Schema(description = "批次", example = "2539") | ||||
|     private Long batchId; | ||||
|  | ||||
|     @Schema(description = "显示顺序") | ||||
|     private Integer sort; | ||||
|  | ||||
|     // TODO @芋艿:这个字段在看看;dataScope、dataScopeDeptIds | ||||
|     @Schema(description = "数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)") | ||||
|     private Integer dataScope; | ||||
|  | ||||
|     @Schema(description = "数据范围(指定部门数组)") | ||||
|     private String dataScopeDeptIds; | ||||
|  | ||||
|     // TODO @liuhongfeng:这个字段,这个字段,应该不是前端传递的噢,而是后端自己生成的,所以不适合放在 base 里面; | ||||
|     @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | ||||
|     @NotNull(message = "状态不能为空") | ||||
|     private Integer status; | ||||
|  | ||||
|     @Schema(description = "备注", example = "随便") | ||||
|     private String remark; | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,34 @@ | ||||
| package cn.iocoder.yudao.module.crm.convert.receivable; | ||||
|  | ||||
| import java.util.*; | ||||
|  | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||
|  | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.CrmReceivableDO; | ||||
| import org.mapstruct.Mapper; | ||||
| import org.mapstruct.factory.Mappers; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.*; | ||||
|  | ||||
| /** | ||||
|  * 回款管理 Convert | ||||
|  * | ||||
|  * @author 赤焰 | ||||
|  */ | ||||
| @Mapper | ||||
| public interface CrmReceivableConvert { | ||||
|  | ||||
|     CrmReceivableConvert INSTANCE = Mappers.getMapper(CrmReceivableConvert.class); | ||||
|  | ||||
|     CrmReceivableDO convert(CrmReceivableCreateReqVO bean); | ||||
|  | ||||
|     CrmReceivableDO convert(CrmReceivableUpdateReqVO bean); | ||||
|  | ||||
|     CrmReceivableRespVO convert(CrmReceivableDO bean); | ||||
|  | ||||
|     List<CrmReceivableRespVO> convertList(List<CrmReceivableDO> list); | ||||
|  | ||||
|     PageResult<CrmReceivableRespVO> convertPage(PageResult<CrmReceivableDO> page); | ||||
|  | ||||
|     List<CrmReceivableExcelVO> convertList02(List<CrmReceivableDO> list); | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,34 @@ | ||||
| package cn.iocoder.yudao.module.crm.convert.receivable; | ||||
|  | ||||
| import java.util.*; | ||||
|  | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||
|  | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.CrmReceivablePlanDO; | ||||
| import org.mapstruct.Mapper; | ||||
| import org.mapstruct.factory.Mappers; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.*; | ||||
|  | ||||
| /** | ||||
|  * 回款计划 Convert | ||||
|  * | ||||
|  * @author 芋道源码 | ||||
|  */ | ||||
| @Mapper | ||||
| public interface CrmReceivablePlanConvert { | ||||
|  | ||||
|     CrmReceivablePlanConvert INSTANCE = Mappers.getMapper(CrmReceivablePlanConvert.class); | ||||
|  | ||||
|     CrmReceivablePlanDO convert(CrmReceivablePlanCreateReqVO bean); | ||||
|  | ||||
|     CrmReceivablePlanDO convert(CrmReceivablePlanUpdateReqVO bean); | ||||
|  | ||||
|     CrmReceivablePlanRespVO convert(CrmReceivablePlanDO bean); | ||||
|  | ||||
|     List<CrmReceivablePlanRespVO> convertList(List<CrmReceivablePlanDO> list); | ||||
|  | ||||
|     PageResult<CrmReceivablePlanRespVO> convertPage(PageResult<CrmReceivablePlanDO> page); | ||||
|  | ||||
|     List<CrmReceivablePlanExcelVO> convertList02(List<CrmReceivablePlanDO> list); | ||||
|  | ||||
| } | ||||
| @@ -1,34 +0,0 @@ | ||||
| package cn.iocoder.yudao.module.crm.convert.receivable; | ||||
|  | ||||
| import java.util.*; | ||||
|  | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||
|  | ||||
| import org.mapstruct.Mapper; | ||||
| import org.mapstruct.factory.Mappers; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.*; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.ReceivableDO; | ||||
|  | ||||
| /** | ||||
|  * 回款管理 Convert | ||||
|  * | ||||
|  * @author 赤焰 | ||||
|  */ | ||||
| @Mapper | ||||
| public interface ReceivableConvert { | ||||
|  | ||||
|     ReceivableConvert INSTANCE = Mappers.getMapper(ReceivableConvert.class); | ||||
|  | ||||
|     ReceivableDO convert(ReceivableCreateReqVO bean); | ||||
|  | ||||
|     ReceivableDO convert(ReceivableUpdateReqVO bean); | ||||
|  | ||||
|     ReceivableRespVO convert(ReceivableDO bean); | ||||
|  | ||||
|     List<ReceivableRespVO> convertList(List<ReceivableDO> list); | ||||
|  | ||||
|     PageResult<ReceivableRespVO> convertPage(PageResult<ReceivableDO> page); | ||||
|  | ||||
|     List<ReceivableExcelVO> convertList02(List<ReceivableDO> list); | ||||
|  | ||||
| } | ||||
| @@ -1,34 +0,0 @@ | ||||
| package cn.iocoder.yudao.module.crm.convert.receivable; | ||||
|  | ||||
| import java.util.*; | ||||
|  | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||
|  | ||||
| import org.mapstruct.Mapper; | ||||
| import org.mapstruct.factory.Mappers; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.*; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.ReceivablePlanDO; | ||||
|  | ||||
| /** | ||||
|  * 回款计划 Convert | ||||
|  * | ||||
|  * @author 芋道源码 | ||||
|  */ | ||||
| @Mapper | ||||
| public interface ReceivablePlanConvert { | ||||
|  | ||||
|     ReceivablePlanConvert INSTANCE = Mappers.getMapper(ReceivablePlanConvert.class); | ||||
|  | ||||
|     ReceivablePlanDO convert(ReceivablePlanCreateReqVO bean); | ||||
|  | ||||
|     ReceivablePlanDO convert(ReceivablePlanUpdateReqVO bean); | ||||
|  | ||||
|     ReceivablePlanRespVO convert(ReceivablePlanDO bean); | ||||
|  | ||||
|     List<ReceivablePlanRespVO> convertList(List<ReceivablePlanDO> list); | ||||
|  | ||||
|     PageResult<ReceivablePlanRespVO> convertPage(PageResult<ReceivablePlanDO> page); | ||||
|  | ||||
|     List<ReceivablePlanExcelVO> convertList02(List<ReceivablePlanDO> list); | ||||
|  | ||||
| } | ||||
| @@ -6,7 +6,6 @@ import com.baomidou.mybatisplus.annotation.TableId; | ||||
| import com.baomidou.mybatisplus.annotation.TableName; | ||||
| import lombok.*; | ||||
| 
 | ||||
| import java.math.BigDecimal; | ||||
| import java.time.LocalDateTime; | ||||
| 
 | ||||
| /** | ||||
| @@ -22,7 +21,7 @@ import java.time.LocalDateTime; | ||||
| @Builder | ||||
| @NoArgsConstructor | ||||
| @AllArgsConstructor | ||||
| public class ReceivableDO extends BaseDO { | ||||
| public class CrmReceivableDO extends BaseDO { | ||||
| 
 | ||||
|     /** | ||||
|      * ID | ||||
| @@ -34,27 +33,26 @@ public class ReceivableDO extends BaseDO { | ||||
|      */ | ||||
|     private String no; | ||||
|     /** | ||||
|      * 回款计划ID | ||||
|      * 回款计划 | ||||
|      * | ||||
|      * TODO @liuhongfeng:这个字段,后续要写下关联的实体哈 | ||||
|      * 对应实体 {@link CrmReceivablePlanDO} | ||||
|      */ | ||||
|     private Long planId; | ||||
|     /** | ||||
|      * 客户ID | ||||
|      * | ||||
|      * TODO @liuhongfeng:这个字段,后续要写下关联的实体哈 | ||||
|      * 对应实体 {@link cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerDO} | ||||
|      */ | ||||
|     private Long customerId; | ||||
|     /** | ||||
|      * 合同ID | ||||
|      * | ||||
|      * TODO @liuhongfeng:这个字段,后续要写下关联的实体哈 | ||||
|      * 对应实体 {@link cn.iocoder.yudao.module.crm.dal.dataobject.contract.ContractDO} | ||||
|      */ | ||||
|     private Long contractId; | ||||
|     /** | ||||
|      * 审批状态 | ||||
|      * | ||||
|      * 枚举 {@link TODO crm_receivable_check_status 对应的类} | ||||
|      * 对应字典 {@link cn.iocoder.yudao.module.crm.enums.DictTypeConstants#CRM_RECEIVABLE_CHECK_STATUS} | ||||
|      */ | ||||
|     private Integer checkStatus; | ||||
|     /** | ||||
| @@ -74,7 +72,7 @@ public class ReceivableDO extends BaseDO { | ||||
|     /** | ||||
|      * 回款金额 | ||||
|      */ | ||||
|     private BigDecimal price; | ||||
|     private Integer price; | ||||
|     /** | ||||
|      * 负责人 | ||||
|      */ | ||||
| @@ -99,7 +97,8 @@ public class ReceivableDO extends BaseDO { | ||||
|     /** | ||||
|      * 状态 | ||||
|      * | ||||
|      * 枚举 {@link TODO common_status 对应的类} | ||||
|      * 枚举 {@link cn.iocoder.yudao.framework.common.enums.CommonStatusEnum} | ||||
|      * | ||||
|      */ | ||||
|     private Integer status; | ||||
|     /** | ||||
| @@ -1,12 +1,9 @@ | ||||
| package cn.iocoder.yudao.module.crm.dal.dataobject.receivable; | ||||
| 
 | ||||
| import lombok.*; | ||||
| import java.util.*; | ||||
| import java.math.BigDecimal; | ||||
| import java.time.LocalDateTime; | ||||
| import java.time.LocalDateTime; | ||||
| import java.time.LocalDateTime; | ||||
| 
 | ||||
| import java.time.LocalDateTime; | ||||
| 
 | ||||
| import com.baomidou.mybatisplus.annotation.*; | ||||
| import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; | ||||
| 
 | ||||
| @@ -23,7 +20,7 @@ import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; | ||||
| @Builder | ||||
| @NoArgsConstructor | ||||
| @AllArgsConstructor | ||||
| public class ReceivablePlanDO extends BaseDO { | ||||
| public class CrmReceivablePlanDO extends BaseDO { | ||||
| 
 | ||||
|     /** | ||||
|      * ID | ||||
| @@ -33,23 +30,23 @@ public class ReceivablePlanDO extends BaseDO { | ||||
|     /** | ||||
|      * 期数 | ||||
|      */ | ||||
|     private Long indexNo; | ||||
|     private Integer period; | ||||
|     /** | ||||
|      * 回款ID | ||||
|      */ | ||||
|     private Long receivableId; | ||||
|     /** | ||||
|      * 完成状态 | ||||
|      * 状态 | ||||
|      * | ||||
|      * 枚举 {@link cn.iocoder.yudao.framework.common.enums.CommonStatusEnum} | ||||
|      * | ||||
|      * 枚举 {@link TODO common_status 对应的类} | ||||
|      */ | ||||
|     private Integer status; | ||||
|     /** | ||||
|      * 审批状态 | ||||
|      * | ||||
|      * 枚举 {@link TODO crm_receivable_check_status 对应的类} | ||||
|      * 对应字典 {@link cn.iocoder.yudao.module.crm.enums.DictTypeConstants#CRM_RECEIVABLE_CHECK_STATUS} | ||||
|      */ | ||||
|     private String checkStatus; | ||||
|     private Integer checkStatus; | ||||
|     /** | ||||
|      * 工作流编号 | ||||
|      */ | ||||
| @@ -57,7 +54,7 @@ public class ReceivablePlanDO extends BaseDO { | ||||
|     /** | ||||
|      * 计划回款金额 | ||||
|      */ | ||||
|     private BigDecimal price; | ||||
|     private Integer price; | ||||
|     /** | ||||
|      * 计划回款日期 | ||||
|      */ | ||||
| @@ -65,7 +62,7 @@ public class ReceivablePlanDO extends BaseDO { | ||||
|     /** | ||||
|      * 提前几天提醒 | ||||
|      */ | ||||
|     private Long remindDays; | ||||
|     private Integer remindDays; | ||||
|     /** | ||||
|      * 提醒日期 | ||||
|      */ | ||||
| @@ -0,0 +1,54 @@ | ||||
| package cn.iocoder.yudao.module.crm.dal.mysql.receivable; | ||||
|  | ||||
| import java.util.*; | ||||
|  | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||
| import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | ||||
| import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.CrmReceivableDO; | ||||
| import org.apache.ibatis.annotations.Mapper; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.*; | ||||
|  | ||||
| /** | ||||
|  * 回款管理 Mapper | ||||
|  * | ||||
|  * @author 赤焰 | ||||
|  */ | ||||
| @Mapper | ||||
| public interface CrmReceivableMapper extends BaseMapperX<CrmReceivableDO> { | ||||
|  | ||||
|     default PageResult<CrmReceivableDO> selectPage(CrmReceivablePageReqVO reqVO) { | ||||
|         return selectPage(reqVO, new LambdaQueryWrapperX<CrmReceivableDO>() | ||||
|                 .eqIfPresent(CrmReceivableDO::getNo, reqVO.getNo()) | ||||
|                 .eqIfPresent(CrmReceivableDO::getPlanId, reqVO.getPlanId()) | ||||
|                 .eqIfPresent(CrmReceivableDO::getCustomerId, reqVO.getCustomerId()) | ||||
|                 .eqIfPresent(CrmReceivableDO::getContractId, reqVO.getContractId()) | ||||
|                 .eqIfPresent(CrmReceivableDO::getCheckStatus, reqVO.getCheckStatus()) | ||||
|                 .betweenIfPresent(CrmReceivableDO::getReturnTime, reqVO.getReturnTime()) | ||||
|                 .eqIfPresent(CrmReceivableDO::getReturnType, reqVO.getReturnType()) | ||||
|                 .eqIfPresent(CrmReceivableDO::getPrice, reqVO.getPrice()) | ||||
|                 .eqIfPresent(CrmReceivableDO::getOwnerUserId, reqVO.getOwnerUserId()) | ||||
|                 .eqIfPresent(CrmReceivableDO::getStatus, reqVO.getStatus()) | ||||
|                 .betweenIfPresent(CrmReceivableDO::getCreateTime, reqVO.getCreateTime()) | ||||
|                 .orderByDesc(CrmReceivableDO::getId)); | ||||
|     } | ||||
|  | ||||
|     default List<CrmReceivableDO> selectList(CrmReceivableExportReqVO reqVO) { | ||||
|         return selectList(new LambdaQueryWrapperX<CrmReceivableDO>() | ||||
|                 .eqIfPresent(CrmReceivableDO::getNo, reqVO.getNo()) | ||||
|                 .eqIfPresent(CrmReceivableDO::getPlanId, reqVO.getPlanId()) | ||||
|                 .eqIfPresent(CrmReceivableDO::getCustomerId, reqVO.getCustomerId()) | ||||
|                 .eqIfPresent(CrmReceivableDO::getContractId, reqVO.getContractId()) | ||||
|                 .eqIfPresent(CrmReceivableDO::getCheckStatus, reqVO.getCheckStatus()) | ||||
|                 .betweenIfPresent(CrmReceivableDO::getReturnTime, reqVO.getReturnTime()) | ||||
|                 .eqIfPresent(CrmReceivableDO::getReturnType, reqVO.getReturnType()) | ||||
|                 .eqIfPresent(CrmReceivableDO::getPrice, reqVO.getPrice()) | ||||
|                 .eqIfPresent(CrmReceivableDO::getOwnerUserId, reqVO.getOwnerUserId()) | ||||
|                 .eqIfPresent(CrmReceivableDO::getBatchId, reqVO.getBatchId()) | ||||
|                 .eqIfPresent(CrmReceivableDO::getStatus, reqVO.getStatus()) | ||||
|                 .eqIfPresent(CrmReceivableDO::getRemark, reqVO.getRemark()) | ||||
|                 .betweenIfPresent(CrmReceivableDO::getCreateTime, reqVO.getCreateTime()) | ||||
|                 .orderByDesc(CrmReceivableDO::getId)); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,49 @@ | ||||
| package cn.iocoder.yudao.module.crm.dal.mysql.receivable; | ||||
|  | ||||
| import java.util.*; | ||||
|  | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||
| import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | ||||
| import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.CrmReceivablePlanDO; | ||||
| import org.apache.ibatis.annotations.Mapper; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.*; | ||||
|  | ||||
| /** | ||||
|  * 回款计划 Mapper | ||||
|  * | ||||
|  * @author 芋道源码 | ||||
|  */ | ||||
| @Mapper | ||||
| public interface CrmReceivablePlanMapper extends BaseMapperX<CrmReceivablePlanDO> { | ||||
|  | ||||
|     default PageResult<CrmReceivablePlanDO> selectPage(CrmReceivablePlanPageReqVO reqVO) { | ||||
|         return selectPage(reqVO, new LambdaQueryWrapperX<CrmReceivablePlanDO>() | ||||
|                 .eqIfPresent(CrmReceivablePlanDO::getStatus, reqVO.getStatus()) | ||||
|                 .eqIfPresent(CrmReceivablePlanDO::getCheckStatus, reqVO.getCheckStatus()) | ||||
|                 .betweenIfPresent(CrmReceivablePlanDO::getReturnTime, reqVO.getReturnTime()) | ||||
|                 .betweenIfPresent(CrmReceivablePlanDO::getRemindTime, reqVO.getRemindTime()) | ||||
|                 .eqIfPresent(CrmReceivablePlanDO::getCustomerId, reqVO.getCustomerId()) | ||||
|                 .eqIfPresent(CrmReceivablePlanDO::getContractId, reqVO.getContractId()) | ||||
|                 .eqIfPresent(CrmReceivablePlanDO::getOwnerUserId, reqVO.getOwnerUserId()) | ||||
|                 .betweenIfPresent(CrmReceivablePlanDO::getCreateTime, reqVO.getCreateTime()) | ||||
|                 .orderByDesc(CrmReceivablePlanDO::getId)); | ||||
|     } | ||||
|  | ||||
|     default List<CrmReceivablePlanDO> selectList(CrmReceivablePlanExportReqVO reqVO) { | ||||
|         return selectList(new LambdaQueryWrapperX<CrmReceivablePlanDO>() | ||||
|                 .eqIfPresent(CrmReceivablePlanDO::getPeriod, reqVO.getPeriod()) | ||||
|                 .eqIfPresent(CrmReceivablePlanDO::getStatus, reqVO.getStatus()) | ||||
|                 .eqIfPresent(CrmReceivablePlanDO::getCheckStatus, reqVO.getCheckStatus()) | ||||
|                 .betweenIfPresent(CrmReceivablePlanDO::getReturnTime, reqVO.getReturnTime()) | ||||
|                 .eqIfPresent(CrmReceivablePlanDO::getRemindDays, reqVO.getRemindDays()) | ||||
|                 .betweenIfPresent(CrmReceivablePlanDO::getRemindTime, reqVO.getRemindTime()) | ||||
|                 .eqIfPresent(CrmReceivablePlanDO::getCustomerId, reqVO.getCustomerId()) | ||||
|                 .eqIfPresent(CrmReceivablePlanDO::getContractId, reqVO.getContractId()) | ||||
|                 .eqIfPresent(CrmReceivablePlanDO::getOwnerUserId, reqVO.getOwnerUserId()) | ||||
|                 .eqIfPresent(CrmReceivablePlanDO::getRemark, reqVO.getRemark()) | ||||
|                 .betweenIfPresent(CrmReceivablePlanDO::getCreateTime, reqVO.getCreateTime()) | ||||
|                 .orderByDesc(CrmReceivablePlanDO::getId)); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -1,64 +0,0 @@ | ||||
| package cn.iocoder.yudao.module.crm.dal.mysql.receivable; | ||||
|  | ||||
| import java.util.*; | ||||
|  | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||
| import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | ||||
| import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.ReceivableDO; | ||||
| import org.apache.ibatis.annotations.Mapper; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.*; | ||||
|  | ||||
| /** | ||||
|  * 回款管理 Mapper | ||||
|  * | ||||
|  * @author 赤焰 | ||||
|  */ | ||||
| @Mapper | ||||
| public interface ReceivableMapper extends BaseMapperX<ReceivableDO> { | ||||
|  | ||||
|     default PageResult<ReceivableDO> selectPage(ReceivablePageReqVO reqVO) { | ||||
|         return selectPage(reqVO, new LambdaQueryWrapperX<ReceivableDO>() | ||||
|                 .eqIfPresent(ReceivableDO::getNo, reqVO.getNo()) | ||||
|                 .eqIfPresent(ReceivableDO::getPlanId, reqVO.getPlanId()) | ||||
|                 .eqIfPresent(ReceivableDO::getCustomerId, reqVO.getCustomerId()) | ||||
|                 .eqIfPresent(ReceivableDO::getContractId, reqVO.getContractId()) | ||||
|                 .eqIfPresent(ReceivableDO::getCheckStatus, reqVO.getCheckStatus()) | ||||
|                 .eqIfPresent(ReceivableDO::getProcessInstanceId, reqVO.getProcessInstanceId()) | ||||
|                 .betweenIfPresent(ReceivableDO::getReturnTime, reqVO.getReturnTime()) | ||||
|                 .eqIfPresent(ReceivableDO::getReturnType, reqVO.getReturnType()) | ||||
|                 .eqIfPresent(ReceivableDO::getPrice, reqVO.getPrice()) | ||||
|                 .eqIfPresent(ReceivableDO::getOwnerUserId, reqVO.getOwnerUserId()) | ||||
|                 .eqIfPresent(ReceivableDO::getBatchId, reqVO.getBatchId()) | ||||
|                 .eqIfPresent(ReceivableDO::getSort, reqVO.getSort()) | ||||
|                 .eqIfPresent(ReceivableDO::getDataScope, reqVO.getDataScope()) | ||||
|                 .eqIfPresent(ReceivableDO::getDataScopeDeptIds, reqVO.getDataScopeDeptIds()) | ||||
|                 .eqIfPresent(ReceivableDO::getStatus, reqVO.getStatus()) | ||||
|                 .eqIfPresent(ReceivableDO::getRemark, reqVO.getRemark()) | ||||
|                 .betweenIfPresent(ReceivableDO::getCreateTime, reqVO.getCreateTime()) | ||||
|                 .orderByDesc(ReceivableDO::getId)); | ||||
|     } | ||||
|  | ||||
|     default List<ReceivableDO> selectList(ReceivableExportReqVO reqVO) { | ||||
|         return selectList(new LambdaQueryWrapperX<ReceivableDO>() | ||||
|                 .eqIfPresent(ReceivableDO::getNo, reqVO.getNo()) | ||||
|                 .eqIfPresent(ReceivableDO::getPlanId, reqVO.getPlanId()) | ||||
|                 .eqIfPresent(ReceivableDO::getCustomerId, reqVO.getCustomerId()) | ||||
|                 .eqIfPresent(ReceivableDO::getContractId, reqVO.getContractId()) | ||||
|                 .eqIfPresent(ReceivableDO::getCheckStatus, reqVO.getCheckStatus()) | ||||
|                 .eqIfPresent(ReceivableDO::getProcessInstanceId, reqVO.getProcessInstanceId()) | ||||
|                 .betweenIfPresent(ReceivableDO::getReturnTime, reqVO.getReturnTime()) | ||||
|                 .eqIfPresent(ReceivableDO::getReturnType, reqVO.getReturnType()) | ||||
|                 .eqIfPresent(ReceivableDO::getPrice, reqVO.getPrice()) | ||||
|                 .eqIfPresent(ReceivableDO::getOwnerUserId, reqVO.getOwnerUserId()) | ||||
|                 .eqIfPresent(ReceivableDO::getBatchId, reqVO.getBatchId()) | ||||
|                 .eqIfPresent(ReceivableDO::getSort, reqVO.getSort()) | ||||
|                 .eqIfPresent(ReceivableDO::getDataScope, reqVO.getDataScope()) | ||||
|                 .eqIfPresent(ReceivableDO::getDataScopeDeptIds, reqVO.getDataScopeDeptIds()) | ||||
|                 .eqIfPresent(ReceivableDO::getStatus, reqVO.getStatus()) | ||||
|                 .eqIfPresent(ReceivableDO::getRemark, reqVO.getRemark()) | ||||
|                 .betweenIfPresent(ReceivableDO::getCreateTime, reqVO.getCreateTime()) | ||||
|                 .orderByDesc(ReceivableDO::getId)); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -1,52 +0,0 @@ | ||||
| package cn.iocoder.yudao.module.crm.dal.mysql.receivable; | ||||
|  | ||||
| import java.util.*; | ||||
|  | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||
| import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; | ||||
| import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.ReceivablePlanDO; | ||||
| import org.apache.ibatis.annotations.Mapper; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.*; | ||||
|  | ||||
| /** | ||||
|  * 回款计划 Mapper | ||||
|  * | ||||
|  * @author 芋道源码 | ||||
|  */ | ||||
| @Mapper | ||||
| public interface ReceivablePlanMapper extends BaseMapperX<ReceivablePlanDO> { | ||||
|  | ||||
|     default PageResult<ReceivablePlanDO> selectPage(ReceivablePlanPageReqVO reqVO) { | ||||
|         return selectPage(reqVO, new LambdaQueryWrapperX<ReceivablePlanDO>() | ||||
|                 .eqIfPresent(ReceivablePlanDO::getIndexNo, reqVO.getIndexNo()) | ||||
|                 .eqIfPresent(ReceivablePlanDO::getStatus, reqVO.getStatus()) | ||||
|                 .eqIfPresent(ReceivablePlanDO::getCheckStatus, reqVO.getCheckStatus()) | ||||
|                 .betweenIfPresent(ReceivablePlanDO::getReturnTime, reqVO.getReturnTime()) | ||||
|                 .eqIfPresent(ReceivablePlanDO::getRemindDays, reqVO.getRemindDays()) | ||||
|                 .betweenIfPresent(ReceivablePlanDO::getRemindTime, reqVO.getRemindTime()) | ||||
|                 .eqIfPresent(ReceivablePlanDO::getCustomerId, reqVO.getCustomerId()) | ||||
|                 .eqIfPresent(ReceivablePlanDO::getContractId, reqVO.getContractId()) | ||||
|                 .eqIfPresent(ReceivablePlanDO::getOwnerUserId, reqVO.getOwnerUserId()) | ||||
|                 .eqIfPresent(ReceivablePlanDO::getRemark, reqVO.getRemark()) | ||||
|                 .betweenIfPresent(ReceivablePlanDO::getCreateTime, reqVO.getCreateTime()) | ||||
|                 .orderByDesc(ReceivablePlanDO::getId)); | ||||
|     } | ||||
|  | ||||
|     default List<ReceivablePlanDO> selectList(ReceivablePlanExportReqVO reqVO) { | ||||
|         return selectList(new LambdaQueryWrapperX<ReceivablePlanDO>() | ||||
|                 .eqIfPresent(ReceivablePlanDO::getIndexNo, reqVO.getIndexNo()) | ||||
|                 .eqIfPresent(ReceivablePlanDO::getStatus, reqVO.getStatus()) | ||||
|                 .eqIfPresent(ReceivablePlanDO::getCheckStatus, reqVO.getCheckStatus()) | ||||
|                 .betweenIfPresent(ReceivablePlanDO::getReturnTime, reqVO.getReturnTime()) | ||||
|                 .eqIfPresent(ReceivablePlanDO::getRemindDays, reqVO.getRemindDays()) | ||||
|                 .betweenIfPresent(ReceivablePlanDO::getRemindTime, reqVO.getRemindTime()) | ||||
|                 .eqIfPresent(ReceivablePlanDO::getCustomerId, reqVO.getCustomerId()) | ||||
|                 .eqIfPresent(ReceivablePlanDO::getContractId, reqVO.getContractId()) | ||||
|                 .eqIfPresent(ReceivablePlanDO::getOwnerUserId, reqVO.getOwnerUserId()) | ||||
|                 .eqIfPresent(ReceivablePlanDO::getRemark, reqVO.getRemark()) | ||||
|                 .betweenIfPresent(ReceivablePlanDO::getCreateTime, reqVO.getCreateTime()) | ||||
|                 .orderByDesc(ReceivablePlanDO::getId)); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.crm.service.receivable; | ||||
| import java.util.*; | ||||
| import javax.validation.*; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.*; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.ReceivablePlanDO; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.CrmReceivablePlanDO; | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||
| 
 | ||||
| /** | ||||
| @@ -11,7 +11,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||
|  * | ||||
|  * @author 芋道源码 | ||||
|  */ | ||||
| public interface ReceivablePlanService { | ||||
| public interface CrmReceivablePlanService { | ||||
| 
 | ||||
|     /** | ||||
|      * 创建回款计划 | ||||
| @@ -19,14 +19,14 @@ public interface ReceivablePlanService { | ||||
|      * @param createReqVO 创建信息 | ||||
|      * @return 编号 | ||||
|      */ | ||||
|     Long createReceivablePlan(@Valid ReceivablePlanCreateReqVO createReqVO); | ||||
|     Long createReceivablePlan(@Valid CrmReceivablePlanCreateReqVO createReqVO); | ||||
| 
 | ||||
|     /** | ||||
|      * 更新回款计划 | ||||
|      * | ||||
|      * @param updateReqVO 更新信息 | ||||
|      */ | ||||
|     void updateReceivablePlan(@Valid ReceivablePlanUpdateReqVO updateReqVO); | ||||
|     void updateReceivablePlan(@Valid CrmReceivablePlanUpdateReqVO updateReqVO); | ||||
| 
 | ||||
|     /** | ||||
|      * 删除回款计划 | ||||
| @@ -41,7 +41,7 @@ public interface ReceivablePlanService { | ||||
|      * @param id 编号 | ||||
|      * @return 回款计划 | ||||
|      */ | ||||
|     ReceivablePlanDO getReceivablePlan(Long id); | ||||
|     CrmReceivablePlanDO getReceivablePlan(Long id); | ||||
| 
 | ||||
|     /** | ||||
|      * 获得回款计划列表 | ||||
| @@ -49,7 +49,7 @@ public interface ReceivablePlanService { | ||||
|      * @param ids 编号 | ||||
|      * @return 回款计划列表 | ||||
|      */ | ||||
|     List<ReceivablePlanDO> getReceivablePlanList(Collection<Long> ids); | ||||
|     List<CrmReceivablePlanDO> getReceivablePlanList(Collection<Long> ids); | ||||
| 
 | ||||
|     /** | ||||
|      * 获得回款计划分页 | ||||
| @@ -57,7 +57,7 @@ public interface ReceivablePlanService { | ||||
|      * @param pageReqVO 分页查询 | ||||
|      * @return 回款计划分页 | ||||
|      */ | ||||
|     PageResult<ReceivablePlanDO> getReceivablePlanPage(ReceivablePlanPageReqVO pageReqVO); | ||||
|     PageResult<CrmReceivablePlanDO> getReceivablePlanPage(CrmReceivablePlanPageReqVO pageReqVO); | ||||
| 
 | ||||
|     /** | ||||
|      * 获得回款计划列表, 用于 Excel 导出 | ||||
| @@ -65,6 +65,6 @@ public interface ReceivablePlanService { | ||||
|      * @param exportReqVO 查询条件 | ||||
|      * @return 回款计划列表 | ||||
|      */ | ||||
|     List<ReceivablePlanDO> getReceivablePlanList(ReceivablePlanExportReqVO exportReqVO); | ||||
|     List<CrmReceivablePlanDO> getReceivablePlanList(CrmReceivablePlanExportReqVO exportReqVO); | ||||
| 
 | ||||
| } | ||||
| @@ -0,0 +1,129 @@ | ||||
| package cn.iocoder.yudao.module.crm.service.receivable; | ||||
|  | ||||
| import cn.hutool.core.collection.CollUtil; | ||||
| import cn.hutool.core.collection.ListUtil; | ||||
| import cn.hutool.core.util.ObjectUtil; | ||||
| import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.CrmReceivablePlanCreateReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.CrmReceivablePlanExportReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.CrmReceivablePlanPageReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.CrmReceivablePlanUpdateReqVO; | ||||
| import cn.iocoder.yudao.module.crm.convert.receivable.CrmReceivablePlanConvert; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.contract.ContractDO; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerDO; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.CrmReceivablePlanDO; | ||||
| import cn.iocoder.yudao.module.crm.dal.mysql.receivable.CrmReceivablePlanMapper; | ||||
| import cn.iocoder.yudao.module.crm.enums.AuditStatusEnum; | ||||
| import cn.iocoder.yudao.module.crm.service.contract.ContractService; | ||||
| import cn.iocoder.yudao.module.crm.service.customer.CrmCustomerService; | ||||
| import org.springframework.stereotype.Service; | ||||
| import org.springframework.validation.annotation.Validated; | ||||
|  | ||||
| import javax.annotation.Resource; | ||||
| import java.util.Collection; | ||||
| import java.util.List; | ||||
|  | ||||
| import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | ||||
| import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.*; | ||||
|  | ||||
| /** | ||||
|  * 回款计划 Service 实现类 | ||||
|  * | ||||
|  * @author 芋道源码 | ||||
|  */ | ||||
| @Service | ||||
| @Validated | ||||
| public class CrmReceivablePlanServiceImpl implements CrmReceivablePlanService { | ||||
|  | ||||
|     @Resource | ||||
|     private CrmReceivablePlanMapper crmReceivablePlanMapper; | ||||
|     @Resource | ||||
|     private ContractService contractService; | ||||
|     @Resource | ||||
|     private CrmCustomerService crmCustomerService; | ||||
|  | ||||
|     @Override | ||||
|     public Long createReceivablePlan(CrmReceivablePlanCreateReqVO createReqVO) { | ||||
|         // 插入 | ||||
|         CrmReceivablePlanDO receivablePlan = CrmReceivablePlanConvert.INSTANCE.convert(createReqVO); | ||||
|         if (ObjectUtil.isNull(receivablePlan.getStatus())){ | ||||
|             receivablePlan.setStatus(CommonStatusEnum.ENABLE.getStatus()); | ||||
|         } | ||||
|         if (ObjectUtil.isNull(receivablePlan.getCheckStatus())){ | ||||
|             receivablePlan.setCheckStatus(AuditStatusEnum.AUDIT_NEW.getValue()); | ||||
|         } | ||||
|  | ||||
|         checkReceivablePlan(receivablePlan); | ||||
|  | ||||
|         crmReceivablePlanMapper.insert(receivablePlan); | ||||
|         // 返回 | ||||
|         return receivablePlan.getId(); | ||||
|     } | ||||
|  | ||||
|     private void checkReceivablePlan(CrmReceivablePlanDO receivablePlan) { | ||||
|  | ||||
|         if(ObjectUtil.isNull(receivablePlan.getContractId())){ | ||||
|             throw exception(CONTRACT_NOT_EXISTS); | ||||
|         } | ||||
|  | ||||
|         ContractDO contract = contractService.getContract(receivablePlan.getContractId()); | ||||
|         if(ObjectUtil.isNull(contract)){ | ||||
|             throw exception(CONTRACT_NOT_EXISTS); | ||||
|         } | ||||
|  | ||||
|         CrmCustomerDO customer = crmCustomerService.getCustomer(receivablePlan.getCustomerId()); | ||||
|         if(ObjectUtil.isNull(customer)){ | ||||
|             throw exception(CUSTOMER_NOT_EXISTS); | ||||
|         } | ||||
|  | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void updateReceivablePlan(CrmReceivablePlanUpdateReqVO updateReqVO) { | ||||
|         // 校验存在 | ||||
|         validateReceivablePlanExists(updateReqVO.getId()); | ||||
|  | ||||
|         // 更新 | ||||
|         CrmReceivablePlanDO updateObj = CrmReceivablePlanConvert.INSTANCE.convert(updateReqVO); | ||||
|         crmReceivablePlanMapper.updateById(updateObj); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void deleteReceivablePlan(Long id) { | ||||
|         // 校验存在 | ||||
|         validateReceivablePlanExists(id); | ||||
|         // 删除 | ||||
|         crmReceivablePlanMapper.deleteById(id); | ||||
|     } | ||||
|  | ||||
|     private void validateReceivablePlanExists(Long id) { | ||||
|         if (crmReceivablePlanMapper.selectById(id) == null) { | ||||
|             throw exception(RECEIVABLE_PLAN_NOT_EXISTS); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public CrmReceivablePlanDO getReceivablePlan(Long id) { | ||||
|         return crmReceivablePlanMapper.selectById(id); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public List<CrmReceivablePlanDO> getReceivablePlanList(Collection<Long> ids) { | ||||
|         if (CollUtil.isEmpty(ids)) { | ||||
|             return ListUtil.empty(); | ||||
|         } | ||||
|         return crmReceivablePlanMapper.selectBatchIds(ids); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public PageResult<CrmReceivablePlanDO> getReceivablePlanPage(CrmReceivablePlanPageReqVO pageReqVO) { | ||||
|         return crmReceivablePlanMapper.selectPage(pageReqVO); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public List<CrmReceivablePlanDO> getReceivablePlanList(CrmReceivablePlanExportReqVO exportReqVO) { | ||||
|         return crmReceivablePlanMapper.selectList(exportReqVO); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -4,7 +4,7 @@ import java.util.*; | ||||
| import javax.validation.*; | ||||
| 
 | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.*; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.ReceivableDO; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.CrmReceivableDO; | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||
| 
 | ||||
| /** | ||||
| @@ -12,7 +12,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||
|  * | ||||
|  * @author 赤焰 | ||||
|  */ | ||||
| public interface ReceivableService { | ||||
| public interface CrmReceivableService { | ||||
| 
 | ||||
|     /** | ||||
|      * 创建回款管理 | ||||
| @@ -20,14 +20,14 @@ public interface ReceivableService { | ||||
|      * @param createReqVO 创建信息 | ||||
|      * @return 编号 | ||||
|      */ | ||||
|     Long createReceivable(@Valid ReceivableCreateReqVO createReqVO); | ||||
|     Long createReceivable(@Valid CrmReceivableCreateReqVO createReqVO); | ||||
| 
 | ||||
|     /** | ||||
|      * 更新回款管理 | ||||
|      * | ||||
|      * @param updateReqVO 更新信息 | ||||
|      */ | ||||
|     void updateReceivable(@Valid ReceivableUpdateReqVO updateReqVO); | ||||
|     void updateReceivable(@Valid CrmReceivableUpdateReqVO updateReqVO); | ||||
| 
 | ||||
|     /** | ||||
|      * 删除回款管理 | ||||
| @@ -42,7 +42,7 @@ public interface ReceivableService { | ||||
|      * @param id 编号 | ||||
|      * @return 回款管理 | ||||
|      */ | ||||
|     ReceivableDO getReceivable(Long id); | ||||
|     CrmReceivableDO getReceivable(Long id); | ||||
| 
 | ||||
|     /** | ||||
|      * 获得回款管理列表 | ||||
| @@ -50,7 +50,7 @@ public interface ReceivableService { | ||||
|      * @param ids 编号 | ||||
|      * @return 回款管理列表 | ||||
|      */ | ||||
|     List<ReceivableDO> getReceivableList(Collection<Long> ids); | ||||
|     List<CrmReceivableDO> getReceivableList(Collection<Long> ids); | ||||
| 
 | ||||
|     /** | ||||
|      * 获得回款管理分页 | ||||
| @@ -58,7 +58,7 @@ public interface ReceivableService { | ||||
|      * @param pageReqVO 分页查询 | ||||
|      * @return 回款管理分页 | ||||
|      */ | ||||
|     PageResult<ReceivableDO> getReceivablePage(ReceivablePageReqVO pageReqVO); | ||||
|     PageResult<CrmReceivableDO> getReceivablePage(CrmReceivablePageReqVO pageReqVO); | ||||
| 
 | ||||
|     /** | ||||
|      * 获得回款管理列表, 用于 Excel 导出 | ||||
| @@ -66,6 +66,6 @@ public interface ReceivableService { | ||||
|      * @param exportReqVO 查询条件 | ||||
|      * @return 回款管理列表 | ||||
|      */ | ||||
|     List<ReceivableDO> getReceivableList(ReceivableExportReqVO exportReqVO); | ||||
|     List<CrmReceivableDO> getReceivableList(CrmReceivableExportReqVO exportReqVO); | ||||
| 
 | ||||
| } | ||||
| @@ -0,0 +1,138 @@ | ||||
| package cn.iocoder.yudao.module.crm.service.receivable; | ||||
|  | ||||
| import cn.hutool.core.collection.CollUtil; | ||||
| import cn.hutool.core.collection.ListUtil; | ||||
| import cn.hutool.core.util.ObjectUtil; | ||||
| import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.CrmReceivableCreateReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.CrmReceivableExportReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.CrmReceivablePageReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.CrmReceivableUpdateReqVO; | ||||
| import cn.iocoder.yudao.module.crm.convert.receivable.CrmReceivableConvert; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.contract.ContractDO; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerDO; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.CrmReceivableDO; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.CrmReceivablePlanDO; | ||||
| import cn.iocoder.yudao.module.crm.dal.mysql.receivable.CrmReceivableMapper; | ||||
| import cn.iocoder.yudao.module.crm.enums.AuditStatusEnum; | ||||
| import cn.iocoder.yudao.module.crm.service.contract.ContractService; | ||||
| import cn.iocoder.yudao.module.crm.service.customer.CrmCustomerService; | ||||
| import org.springframework.stereotype.Service; | ||||
| import org.springframework.validation.annotation.Validated; | ||||
|  | ||||
| import javax.annotation.Resource; | ||||
| import java.util.Collection; | ||||
| import java.util.List; | ||||
|  | ||||
| import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | ||||
| import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.*; | ||||
|  | ||||
| /** | ||||
|  * 回款管理 Service 实现类 | ||||
|  * | ||||
|  * @author 赤焰 | ||||
|  */ | ||||
| @Service | ||||
| @Validated | ||||
| public class CrmReceivableServiceImpl implements CrmReceivableService { | ||||
|  | ||||
|     @Resource | ||||
|     private CrmReceivableMapper crmReceivableMapper; | ||||
|     @Resource | ||||
|     private ContractService contractService; | ||||
|     @Resource | ||||
|     private CrmCustomerService crmCustomerService; | ||||
|     @Resource | ||||
|     private CrmReceivablePlanService crmReceivablePlanService; | ||||
|  | ||||
|     @Override | ||||
|     public Long createReceivable(CrmReceivableCreateReqVO createReqVO) { | ||||
|         // 插入 | ||||
|         CrmReceivableDO receivable = CrmReceivableConvert.INSTANCE.convert(createReqVO); | ||||
|         if (ObjectUtil.isNull(receivable.getStatus())){ | ||||
|             receivable.setStatus(CommonStatusEnum.ENABLE.getStatus()); | ||||
|         } | ||||
|         if (ObjectUtil.isNull(receivable.getCheckStatus())){ | ||||
|             receivable.setCheckStatus(AuditStatusEnum.AUDIT_NEW.getValue()); | ||||
|         } | ||||
|  | ||||
|         //校验 | ||||
|         checkReceivable(receivable); | ||||
|  | ||||
|         crmReceivableMapper.insert(receivable); | ||||
|         // 返回 | ||||
|         return receivable.getId(); | ||||
|     } | ||||
|  | ||||
|     private void checkReceivable(CrmReceivableDO receivable) { | ||||
|  | ||||
|         if(ObjectUtil.isNull(receivable.getContractId())){ | ||||
|             throw exception(CONTRACT_NOT_EXISTS); | ||||
|         } | ||||
|  | ||||
|         ContractDO contract = contractService.getContract(receivable.getContractId()); | ||||
|         if(ObjectUtil.isNull(contract)){ | ||||
|             throw exception(CONTRACT_NOT_EXISTS); | ||||
|         } | ||||
|  | ||||
|         CrmCustomerDO customer = crmCustomerService.getCustomer(receivable.getCustomerId()); | ||||
|         if(ObjectUtil.isNull(customer)){ | ||||
|             throw exception(CUSTOMER_NOT_EXISTS); | ||||
|         } | ||||
|  | ||||
|         CrmReceivablePlanDO receivablePlan = crmReceivablePlanService.getReceivablePlan(receivable.getPlanId()); | ||||
|         if(ObjectUtil.isNull(receivablePlan)){ | ||||
|             throw exception(RECEIVABLE_PLAN_NOT_EXISTS); | ||||
|         } | ||||
|  | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void updateReceivable(CrmReceivableUpdateReqVO updateReqVO) { | ||||
|         // 校验存在 | ||||
|         validateReceivableExists(updateReqVO.getId()); | ||||
|  | ||||
|         // 更新 | ||||
|         CrmReceivableDO updateObj = CrmReceivableConvert.INSTANCE.convert(updateReqVO); | ||||
|         crmReceivableMapper.updateById(updateObj); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void deleteReceivable(Long id) { | ||||
|         // 校验存在 | ||||
|         validateReceivableExists(id); | ||||
|         // 删除 | ||||
|         crmReceivableMapper.deleteById(id); | ||||
|     } | ||||
|  | ||||
|     private void validateReceivableExists(Long id) { | ||||
|         if (crmReceivableMapper.selectById(id) == null) { | ||||
|             throw exception(RECEIVABLE_NOT_EXISTS); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public CrmReceivableDO getReceivable(Long id) { | ||||
|         return crmReceivableMapper.selectById(id); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public List<CrmReceivableDO> getReceivableList(Collection<Long> ids) { | ||||
|         if (CollUtil.isEmpty(ids)) { | ||||
|             return ListUtil.empty(); | ||||
|         } | ||||
|         return crmReceivableMapper.selectBatchIds(ids); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public PageResult<CrmReceivableDO> getReceivablePage(CrmReceivablePageReqVO pageReqVO) { | ||||
|         return crmReceivableMapper.selectPage(pageReqVO); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public List<CrmReceivableDO> getReceivableList(CrmReceivableExportReqVO exportReqVO) { | ||||
|         return crmReceivableMapper.selectList(exportReqVO); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -1,97 +0,0 @@ | ||||
| package cn.iocoder.yudao.module.crm.service.receivable; | ||||
|  | ||||
| import cn.hutool.core.collection.CollUtil; | ||||
| import cn.hutool.core.collection.ListUtil; | ||||
| import cn.hutool.core.util.ObjectUtil; | ||||
| import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.ReceivablePlanCreateReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.ReceivablePlanExportReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.ReceivablePlanPageReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.ReceivablePlanUpdateReqVO; | ||||
| import cn.iocoder.yudao.module.crm.convert.receivable.ReceivablePlanConvert; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.ReceivablePlanDO; | ||||
| import cn.iocoder.yudao.module.crm.dal.mysql.receivable.ReceivablePlanMapper; | ||||
| import org.springframework.stereotype.Service; | ||||
| import org.springframework.validation.annotation.Validated; | ||||
|  | ||||
| import javax.annotation.Resource; | ||||
| import java.util.Collection; | ||||
| import java.util.List; | ||||
|  | ||||
| import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | ||||
| import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.RECEIVABLE_PLAN_NOT_EXISTS; | ||||
|  | ||||
| /** | ||||
|  * 回款计划 Service 实现类 | ||||
|  * | ||||
|  * @author 芋道源码 | ||||
|  */ | ||||
| @Service | ||||
| @Validated | ||||
| public class ReceivablePlanServiceImpl implements ReceivablePlanService { | ||||
|  | ||||
|     @Resource | ||||
|     private ReceivablePlanMapper receivablePlanMapper; | ||||
|  | ||||
|     @Override | ||||
|     public Long createReceivablePlan(ReceivablePlanCreateReqVO createReqVO) { | ||||
|         // 插入 | ||||
|         ReceivablePlanDO receivablePlan = ReceivablePlanConvert.INSTANCE.convert(createReqVO); | ||||
|         // TODO @liuhongfeng:空格要注释;if (ObjectUtil.isNull(receivablePlan.getStatus())) { | ||||
|         if(ObjectUtil.isNull(receivablePlan.getStatus())){ | ||||
|             receivablePlan.setStatus(CommonStatusEnum.ENABLE.getStatus()); | ||||
|         } | ||||
|         receivablePlanMapper.insert(receivablePlan); | ||||
|         // 返回 | ||||
|         return receivablePlan.getId(); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void updateReceivablePlan(ReceivablePlanUpdateReqVO updateReqVO) { | ||||
|         // 校验存在 | ||||
|         validateReceivablePlanExists(updateReqVO.getId()); | ||||
|  | ||||
|         // 更新 | ||||
|         ReceivablePlanDO updateObj = ReceivablePlanConvert.INSTANCE.convert(updateReqVO); | ||||
|         receivablePlanMapper.updateById(updateObj); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void deleteReceivablePlan(Long id) { | ||||
|         // 校验存在 | ||||
|         validateReceivablePlanExists(id); | ||||
|         // 删除 | ||||
|         receivablePlanMapper.deleteById(id); | ||||
|     } | ||||
|  | ||||
|     private void validateReceivablePlanExists(Long id) { | ||||
|         if (receivablePlanMapper.selectById(id) == null) { | ||||
|             throw exception(RECEIVABLE_PLAN_NOT_EXISTS); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public ReceivablePlanDO getReceivablePlan(Long id) { | ||||
|         return receivablePlanMapper.selectById(id); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public List<ReceivablePlanDO> getReceivablePlanList(Collection<Long> ids) { | ||||
|         if (CollUtil.isEmpty(ids)) { | ||||
|             return ListUtil.empty(); | ||||
|         } | ||||
|         return receivablePlanMapper.selectBatchIds(ids); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public PageResult<ReceivablePlanDO> getReceivablePlanPage(ReceivablePlanPageReqVO pageReqVO) { | ||||
|         return receivablePlanMapper.selectPage(pageReqVO); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public List<ReceivablePlanDO> getReceivablePlanList(ReceivablePlanExportReqVO exportReqVO) { | ||||
|         return receivablePlanMapper.selectList(exportReqVO); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -1,93 +0,0 @@ | ||||
| package cn.iocoder.yudao.module.crm.service.receivable; | ||||
|  | ||||
| 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.receivable.vo.ReceivableCreateReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.ReceivableExportReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.ReceivablePageReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.ReceivableUpdateReqVO; | ||||
| import cn.iocoder.yudao.module.crm.convert.receivable.ReceivableConvert; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.ReceivableDO; | ||||
| import cn.iocoder.yudao.module.crm.dal.mysql.receivable.ReceivableMapper; | ||||
| import org.springframework.stereotype.Service; | ||||
| import org.springframework.validation.annotation.Validated; | ||||
|  | ||||
| import javax.annotation.Resource; | ||||
| import java.util.Collection; | ||||
| import java.util.List; | ||||
|  | ||||
| import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | ||||
| import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.RECEIVABLE_NOT_EXISTS; | ||||
|  | ||||
| /** | ||||
|  * 回款管理 Service 实现类 | ||||
|  * | ||||
|  * @author 赤焰 | ||||
|  */ | ||||
| @Service | ||||
| @Validated | ||||
| public class ReceivableServiceImpl implements ReceivableService { | ||||
|  | ||||
|     @Resource | ||||
|     private ReceivableMapper receivableMapper; | ||||
|  | ||||
|     @Override | ||||
|     public Long createReceivable(ReceivableCreateReqVO createReqVO) { | ||||
|         // TODO @liuhongfeng:planId 是否存在,是否合法,需要去校验; | ||||
|         // TODO @liuhongfeng:其它类似 customerId、contractId 也需要去校验; | ||||
|         // 插入 | ||||
|         ReceivableDO receivable = ReceivableConvert.INSTANCE.convert(createReqVO); | ||||
|         receivableMapper.insert(receivable); | ||||
|         // 返回 | ||||
|         return receivable.getId(); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void updateReceivable(ReceivableUpdateReqVO updateReqVO) { | ||||
|         // 校验存在 | ||||
|         validateReceivableExists(updateReqVO.getId()); | ||||
|  | ||||
|         // 更新 | ||||
|         ReceivableDO updateObj = ReceivableConvert.INSTANCE.convert(updateReqVO); | ||||
|         receivableMapper.updateById(updateObj); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void deleteReceivable(Long id) { | ||||
|         // 校验存在 | ||||
|         validateReceivableExists(id); | ||||
|         // 删除 | ||||
|         receivableMapper.deleteById(id); | ||||
|     } | ||||
|  | ||||
|     private void validateReceivableExists(Long id) { | ||||
|         if (receivableMapper.selectById(id) == null) { | ||||
|             throw exception(RECEIVABLE_NOT_EXISTS); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public ReceivableDO getReceivable(Long id) { | ||||
|         return receivableMapper.selectById(id); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public List<ReceivableDO> getReceivableList(Collection<Long> ids) { | ||||
|         if (CollUtil.isEmpty(ids)) { | ||||
|             return ListUtil.empty(); | ||||
|         } | ||||
|         return receivableMapper.selectBatchIds(ids); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public PageResult<ReceivableDO> getReceivablePage(ReceivablePageReqVO pageReqVO) { | ||||
|         return receivableMapper.selectPage(pageReqVO); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public List<ReceivableDO> getReceivableList(ReceivableExportReqVO exportReqVO) { | ||||
|         return receivableMapper.selectList(exportReqVO); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -1,6 +1,6 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | ||||
| <mapper namespace="cn.iocoder.yudao.module.crm.dal.mysql.receivable.ReceivableMapper"> | ||||
| <mapper namespace="cn.iocoder.yudao.module.crm.dal.mysql.receivable.CrmReceivableMapper"> | ||||
| 
 | ||||
|     <!-- | ||||
|         一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。 | ||||
| @@ -1,6 +1,6 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | ||||
| <mapper namespace="cn.iocoder.yudao.module.crm.dal.mysql.receivable.ReceivablePlanMapper"> | ||||
| <mapper namespace="cn.iocoder.yudao.module.crm.dal.mysql.receivable.CrmReceivablePlanMapper"> | ||||
| 
 | ||||
|     <!-- | ||||
|         一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。 | ||||
| @@ -2,12 +2,12 @@ package cn.iocoder.yudao.module.crm.service.receivable; | ||||
| 
 | ||||
| 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.receivable.vo.ReceivablePlanCreateReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.ReceivablePlanExportReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.ReceivablePlanPageReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.ReceivablePlanUpdateReqVO; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.ReceivablePlanDO; | ||||
| import cn.iocoder.yudao.module.crm.dal.mysql.receivable.ReceivablePlanMapper; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.CrmReceivablePlanCreateReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.CrmReceivablePlanExportReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.CrmReceivablePlanPageReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.CrmReceivablePlanUpdateReqVO; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.CrmReceivablePlanDO; | ||||
| import cn.iocoder.yudao.module.crm.dal.mysql.receivable.CrmReceivablePlanMapper; | ||||
| import org.junit.jupiter.api.Disabled; | ||||
| import org.junit.jupiter.api.Test; | ||||
| import org.springframework.context.annotation.Import; | ||||
| @@ -26,54 +26,54 @@ import static org.junit.jupiter.api.Assertions.*; | ||||
| 
 | ||||
| // TODO 芋艿:后续,需要补充测试用例 | ||||
| /** | ||||
|  * {@link ReceivablePlanServiceImpl} 的单元测试类 | ||||
|  * {@link CrmReceivablePlanServiceImpl} 的单元测试类 | ||||
|  * | ||||
|  * @author 芋道源码 | ||||
|  */ | ||||
| @Import(ReceivablePlanServiceImpl.class) | ||||
| public class ReceivablePlanServiceImplTest extends BaseDbUnitTest { | ||||
| @Import(CrmReceivablePlanServiceImpl.class) | ||||
| public class CrmCrmReceivablePlanServiceImplTest extends BaseDbUnitTest { | ||||
| 
 | ||||
|     @Resource | ||||
|     private ReceivablePlanServiceImpl receivablePlanService; | ||||
|     private CrmReceivablePlanServiceImpl receivablePlanService; | ||||
| 
 | ||||
|     @Resource | ||||
|     private ReceivablePlanMapper receivablePlanMapper; | ||||
|     private CrmReceivablePlanMapper crmReceivablePlanMapper; | ||||
| 
 | ||||
|     @Test | ||||
|     public void testCreateReceivablePlan_success() { | ||||
|         // 准备参数 | ||||
|         ReceivablePlanCreateReqVO reqVO = randomPojo(ReceivablePlanCreateReqVO.class); | ||||
|         CrmReceivablePlanCreateReqVO reqVO = randomPojo(CrmReceivablePlanCreateReqVO.class); | ||||
| 
 | ||||
|         // 调用 | ||||
|         Long receivablePlanId = receivablePlanService.createReceivablePlan(reqVO); | ||||
|         // 断言 | ||||
|         assertNotNull(receivablePlanId); | ||||
|         // 校验记录的属性是否正确 | ||||
|         ReceivablePlanDO receivablePlan = receivablePlanMapper.selectById(receivablePlanId); | ||||
|         CrmReceivablePlanDO receivablePlan = crmReceivablePlanMapper.selectById(receivablePlanId); | ||||
|         assertPojoEquals(reqVO, receivablePlan); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void testUpdateReceivablePlan_success() { | ||||
|         // mock 数据 | ||||
|         ReceivablePlanDO dbReceivablePlan = randomPojo(ReceivablePlanDO.class); | ||||
|         receivablePlanMapper.insert(dbReceivablePlan);// @Sql: 先插入出一条存在的数据 | ||||
|         CrmReceivablePlanDO dbReceivablePlan = randomPojo(CrmReceivablePlanDO.class); | ||||
|         crmReceivablePlanMapper.insert(dbReceivablePlan);// @Sql: 先插入出一条存在的数据 | ||||
|         // 准备参数 | ||||
|         ReceivablePlanUpdateReqVO reqVO = randomPojo(ReceivablePlanUpdateReqVO.class, o -> { | ||||
|         CrmReceivablePlanUpdateReqVO reqVO = randomPojo(CrmReceivablePlanUpdateReqVO.class, o -> { | ||||
|             o.setId(dbReceivablePlan.getId()); // 设置更新的 ID | ||||
|         }); | ||||
| 
 | ||||
|         // 调用 | ||||
|         receivablePlanService.updateReceivablePlan(reqVO); | ||||
|         // 校验是否更新正确 | ||||
|         ReceivablePlanDO receivablePlan = receivablePlanMapper.selectById(reqVO.getId()); // 获取最新的 | ||||
|         CrmReceivablePlanDO receivablePlan = crmReceivablePlanMapper.selectById(reqVO.getId()); // 获取最新的 | ||||
|         assertPojoEquals(reqVO, receivablePlan); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void testUpdateReceivablePlan_notExists() { | ||||
|         // 准备参数 | ||||
|         ReceivablePlanUpdateReqVO reqVO = randomPojo(ReceivablePlanUpdateReqVO.class); | ||||
|         CrmReceivablePlanUpdateReqVO reqVO = randomPojo(CrmReceivablePlanUpdateReqVO.class); | ||||
| 
 | ||||
|         // 调用, 并断言异常 | ||||
|         assertServiceException(() -> receivablePlanService.updateReceivablePlan(reqVO), RECEIVABLE_PLAN_NOT_EXISTS); | ||||
| @@ -82,15 +82,15 @@ public class ReceivablePlanServiceImplTest extends BaseDbUnitTest { | ||||
|     @Test | ||||
|     public void testDeleteReceivablePlan_success() { | ||||
|         // mock 数据 | ||||
|         ReceivablePlanDO dbReceivablePlan = randomPojo(ReceivablePlanDO.class); | ||||
|         receivablePlanMapper.insert(dbReceivablePlan);// @Sql: 先插入出一条存在的数据 | ||||
|         CrmReceivablePlanDO dbReceivablePlan = randomPojo(CrmReceivablePlanDO.class); | ||||
|         crmReceivablePlanMapper.insert(dbReceivablePlan);// @Sql: 先插入出一条存在的数据 | ||||
|         // 准备参数 | ||||
|         Long id = dbReceivablePlan.getId(); | ||||
| 
 | ||||
|         // 调用 | ||||
|         receivablePlanService.deleteReceivablePlan(id); | ||||
|        // 校验数据不存在了 | ||||
|        assertNull(receivablePlanMapper.selectById(id)); | ||||
|        assertNull(crmReceivablePlanMapper.selectById(id)); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
| @@ -106,8 +106,8 @@ public class ReceivablePlanServiceImplTest extends BaseDbUnitTest { | ||||
|     @Disabled  // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 | ||||
|     public void testGetReceivablePlanPage() { | ||||
|        // mock 数据 | ||||
|        ReceivablePlanDO dbReceivablePlan = randomPojo(ReceivablePlanDO.class, o -> { // 等会查询到 | ||||
|            o.setIndexNo(null); | ||||
|        CrmReceivablePlanDO dbReceivablePlan = randomPojo(CrmReceivablePlanDO.class, o -> { // 等会查询到 | ||||
|            o.setPeriod(null); | ||||
|            o.setStatus(null); | ||||
|            o.setCheckStatus(null); | ||||
|            o.setReturnTime(null); | ||||
| @@ -119,45 +119,42 @@ public class ReceivablePlanServiceImplTest extends BaseDbUnitTest { | ||||
|            o.setRemark(null); | ||||
|            o.setCreateTime(null); | ||||
|        }); | ||||
|        receivablePlanMapper.insert(dbReceivablePlan); | ||||
|        // 测试 indexNo 不匹配 | ||||
|        receivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setIndexNo(null))); | ||||
|        crmReceivablePlanMapper.insert(dbReceivablePlan); | ||||
|        // 测试 Period 不匹配 | ||||
|        crmReceivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setPeriod(null))); | ||||
|        // 测试 status 不匹配 | ||||
|        receivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setStatus(null))); | ||||
|        crmReceivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setStatus(null))); | ||||
|        // 测试 checkStatus 不匹配 | ||||
|        receivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setCheckStatus(null))); | ||||
|        crmReceivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setCheckStatus(null))); | ||||
|        // 测试 returnTime 不匹配 | ||||
|        receivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setReturnTime(null))); | ||||
|        crmReceivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setReturnTime(null))); | ||||
|        // 测试 remindDays 不匹配 | ||||
|        receivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setRemindDays(null))); | ||||
|        crmReceivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setRemindDays(null))); | ||||
|        // 测试 remindTime 不匹配 | ||||
|        receivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setRemindTime(null))); | ||||
|        crmReceivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setRemindTime(null))); | ||||
|        // 测试 customerId 不匹配 | ||||
|        receivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setCustomerId(null))); | ||||
|        crmReceivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setCustomerId(null))); | ||||
|        // 测试 contractId 不匹配 | ||||
|        receivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setContractId(null))); | ||||
|        crmReceivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setContractId(null))); | ||||
|        // 测试 ownerUserId 不匹配 | ||||
|        receivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setOwnerUserId(null))); | ||||
|        crmReceivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setOwnerUserId(null))); | ||||
|        // 测试 remark 不匹配 | ||||
|        receivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setRemark(null))); | ||||
|        crmReceivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setRemark(null))); | ||||
|        // 测试 createTime 不匹配 | ||||
|        receivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setCreateTime(null))); | ||||
|        crmReceivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setCreateTime(null))); | ||||
|        // 准备参数 | ||||
|        ReceivablePlanPageReqVO reqVO = new ReceivablePlanPageReqVO(); | ||||
|        reqVO.setIndexNo(null); | ||||
|        CrmReceivablePlanPageReqVO reqVO = new CrmReceivablePlanPageReqVO(); | ||||
|        reqVO.setStatus(null); | ||||
|        reqVO.setCheckStatus(null); | ||||
|        reqVO.setReturnTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); | ||||
|        reqVO.setRemindDays(null); | ||||
|        reqVO.setRemindTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); | ||||
|        reqVO.setCustomerId(null); | ||||
|        reqVO.setContractId(null); | ||||
|        reqVO.setOwnerUserId(null); | ||||
|        reqVO.setRemark(null); | ||||
|        reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); | ||||
| 
 | ||||
|        // 调用 | ||||
|        PageResult<ReceivablePlanDO> pageResult = receivablePlanService.getReceivablePlanPage(reqVO); | ||||
|        PageResult<CrmReceivablePlanDO> pageResult = receivablePlanService.getReceivablePlanPage(reqVO); | ||||
|        // 断言 | ||||
|        assertEquals(1, pageResult.getTotal()); | ||||
|        assertEquals(1, pageResult.getList().size()); | ||||
| @@ -168,8 +165,8 @@ public class ReceivablePlanServiceImplTest extends BaseDbUnitTest { | ||||
|     @Disabled  // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 | ||||
|     public void testGetReceivablePlanList() { | ||||
|        // mock 数据 | ||||
|        ReceivablePlanDO dbReceivablePlan = randomPojo(ReceivablePlanDO.class, o -> { // 等会查询到 | ||||
|            o.setIndexNo(null); | ||||
|        CrmReceivablePlanDO dbReceivablePlan = randomPojo(CrmReceivablePlanDO.class, o -> { // 等会查询到 | ||||
|            o.setPeriod(null); | ||||
|            o.setStatus(null); | ||||
|            o.setCheckStatus(null); | ||||
|            o.setReturnTime(null); | ||||
| @@ -181,32 +178,32 @@ public class ReceivablePlanServiceImplTest extends BaseDbUnitTest { | ||||
|            o.setRemark(null); | ||||
|            o.setCreateTime(null); | ||||
|        }); | ||||
|        receivablePlanMapper.insert(dbReceivablePlan); | ||||
|        // 测试 indexNo 不匹配 | ||||
|        receivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setIndexNo(null))); | ||||
|        crmReceivablePlanMapper.insert(dbReceivablePlan); | ||||
|        // 测试 Period 不匹配 | ||||
|        crmReceivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setPeriod(null))); | ||||
|        // 测试 status 不匹配 | ||||
|        receivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setStatus(null))); | ||||
|        crmReceivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setStatus(null))); | ||||
|        // 测试 checkStatus 不匹配 | ||||
|        receivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setCheckStatus(null))); | ||||
|        crmReceivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setCheckStatus(null))); | ||||
|        // 测试 returnTime 不匹配 | ||||
|        receivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setReturnTime(null))); | ||||
|        crmReceivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setReturnTime(null))); | ||||
|        // 测试 remindDays 不匹配 | ||||
|        receivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setRemindDays(null))); | ||||
|        crmReceivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setRemindDays(null))); | ||||
|        // 测试 remindTime 不匹配 | ||||
|        receivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setRemindTime(null))); | ||||
|        crmReceivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setRemindTime(null))); | ||||
|        // 测试 customerId 不匹配 | ||||
|        receivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setCustomerId(null))); | ||||
|        crmReceivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setCustomerId(null))); | ||||
|        // 测试 contractId 不匹配 | ||||
|        receivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setContractId(null))); | ||||
|        crmReceivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setContractId(null))); | ||||
|        // 测试 ownerUserId 不匹配 | ||||
|        receivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setOwnerUserId(null))); | ||||
|        crmReceivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setOwnerUserId(null))); | ||||
|        // 测试 remark 不匹配 | ||||
|        receivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setRemark(null))); | ||||
|        crmReceivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setRemark(null))); | ||||
|        // 测试 createTime 不匹配 | ||||
|        receivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setCreateTime(null))); | ||||
|        crmReceivablePlanMapper.insert(cloneIgnoreId(dbReceivablePlan, o -> o.setCreateTime(null))); | ||||
|        // 准备参数 | ||||
|        ReceivablePlanExportReqVO reqVO = new ReceivablePlanExportReqVO(); | ||||
|        reqVO.setIndexNo(null); | ||||
|        CrmReceivablePlanExportReqVO reqVO = new CrmReceivablePlanExportReqVO(); | ||||
|        reqVO.setPeriod(null); | ||||
|        reqVO.setStatus(null); | ||||
|        reqVO.setCheckStatus(null); | ||||
|        reqVO.setReturnTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); | ||||
| @@ -219,7 +216,7 @@ public class ReceivablePlanServiceImplTest extends BaseDbUnitTest { | ||||
|        reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); | ||||
| 
 | ||||
|        // 调用 | ||||
|        List<ReceivablePlanDO> list = receivablePlanService.getReceivablePlanList(reqVO); | ||||
|        List<CrmReceivablePlanDO> list = receivablePlanService.getReceivablePlanList(reqVO); | ||||
|        // 断言 | ||||
|        assertEquals(1, list.size()); | ||||
|        assertPojoEquals(dbReceivablePlan, list.get(0)); | ||||
| @@ -2,12 +2,12 @@ package cn.iocoder.yudao.module.crm.service.receivable; | ||||
| 
 | ||||
| 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.receivable.vo.ReceivableCreateReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.ReceivableExportReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.ReceivablePageReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.ReceivableUpdateReqVO; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.ReceivableDO; | ||||
| import cn.iocoder.yudao.module.crm.dal.mysql.receivable.ReceivableMapper; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.CrmReceivableCreateReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.CrmReceivableExportReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.CrmReceivablePageReqVO; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.CrmReceivableUpdateReqVO; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.CrmReceivableDO; | ||||
| import cn.iocoder.yudao.module.crm.dal.mysql.receivable.CrmReceivableMapper; | ||||
| import org.junit.jupiter.api.Disabled; | ||||
| import org.junit.jupiter.api.Test; | ||||
| import org.springframework.context.annotation.Import; | ||||
| @@ -26,54 +26,54 @@ import static org.junit.jupiter.api.Assertions.*; | ||||
| 
 | ||||
| // TODO 芋艿:等实现完,在校验下; | ||||
| /** | ||||
|  * {@link ReceivableServiceImpl} 的单元测试类 | ||||
|  * {@link CrmReceivableServiceImpl} 的单元测试类 | ||||
|  * | ||||
|  * @author 赤焰 | ||||
|  */ | ||||
| @Import(ReceivableServiceImpl.class) | ||||
| public class ReceivableServiceImplTest extends BaseDbUnitTest { | ||||
| @Import(CrmReceivableServiceImpl.class) | ||||
| public class CrmCrmReceivableServiceImplTest extends BaseDbUnitTest { | ||||
| 
 | ||||
|     @Resource | ||||
|     private ReceivableServiceImpl receivableService; | ||||
|     private CrmReceivableServiceImpl receivableService; | ||||
| 
 | ||||
|     @Resource | ||||
|     private ReceivableMapper receivableMapper; | ||||
|     private CrmReceivableMapper crmReceivableMapper; | ||||
| 
 | ||||
|     @Test | ||||
|     public void testCreateReceivable_success() { | ||||
|         // 准备参数 | ||||
|         ReceivableCreateReqVO reqVO = randomPojo(ReceivableCreateReqVO.class); | ||||
|         CrmReceivableCreateReqVO reqVO = randomPojo(CrmReceivableCreateReqVO.class); | ||||
| 
 | ||||
|         // 调用 | ||||
|         Long receivableId = receivableService.createReceivable(reqVO); | ||||
|         // 断言 | ||||
|         assertNotNull(receivableId); | ||||
|         // 校验记录的属性是否正确 | ||||
|         ReceivableDO receivable = receivableMapper.selectById(receivableId); | ||||
|         CrmReceivableDO receivable = crmReceivableMapper.selectById(receivableId); | ||||
|         assertPojoEquals(reqVO, receivable); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void testUpdateReceivable_success() { | ||||
|         // mock 数据 | ||||
|         ReceivableDO dbReceivable = randomPojo(ReceivableDO.class); | ||||
|         receivableMapper.insert(dbReceivable);// @Sql: 先插入出一条存在的数据 | ||||
|         CrmReceivableDO dbReceivable = randomPojo(CrmReceivableDO.class); | ||||
|         crmReceivableMapper.insert(dbReceivable);// @Sql: 先插入出一条存在的数据 | ||||
|         // 准备参数 | ||||
|         ReceivableUpdateReqVO reqVO = randomPojo(ReceivableUpdateReqVO.class, o -> { | ||||
|         CrmReceivableUpdateReqVO reqVO = randomPojo(CrmReceivableUpdateReqVO.class, o -> { | ||||
|             o.setId(dbReceivable.getId()); // 设置更新的 ID | ||||
|         }); | ||||
| 
 | ||||
|         // 调用 | ||||
|         receivableService.updateReceivable(reqVO); | ||||
|         // 校验是否更新正确 | ||||
|         ReceivableDO receivable = receivableMapper.selectById(reqVO.getId()); // 获取最新的 | ||||
|         CrmReceivableDO receivable = crmReceivableMapper.selectById(reqVO.getId()); // 获取最新的 | ||||
|         assertPojoEquals(reqVO, receivable); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void testUpdateReceivable_notExists() { | ||||
|         // 准备参数 | ||||
|         ReceivableUpdateReqVO reqVO = randomPojo(ReceivableUpdateReqVO.class); | ||||
|         CrmReceivableUpdateReqVO reqVO = randomPojo(CrmReceivableUpdateReqVO.class); | ||||
| 
 | ||||
|         // 调用, 并断言异常 | ||||
|         assertServiceException(() -> receivableService.updateReceivable(reqVO), RECEIVABLE_NOT_EXISTS); | ||||
| @@ -82,15 +82,15 @@ public class ReceivableServiceImplTest extends BaseDbUnitTest { | ||||
|     @Test | ||||
|     public void testDeleteReceivable_success() { | ||||
|         // mock 数据 | ||||
|         ReceivableDO dbReceivable = randomPojo(ReceivableDO.class); | ||||
|         receivableMapper.insert(dbReceivable);// @Sql: 先插入出一条存在的数据 | ||||
|         CrmReceivableDO dbReceivable = randomPojo(CrmReceivableDO.class); | ||||
|         crmReceivableMapper.insert(dbReceivable);// @Sql: 先插入出一条存在的数据 | ||||
|         // 准备参数 | ||||
|         Long id = dbReceivable.getId(); | ||||
| 
 | ||||
|         // 调用 | ||||
|         receivableService.deleteReceivable(id); | ||||
|        // 校验数据不存在了 | ||||
|        assertNull(receivableMapper.selectById(id)); | ||||
|        assertNull(crmReceivableMapper.selectById(id)); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
| @@ -106,7 +106,7 @@ public class ReceivableServiceImplTest extends BaseDbUnitTest { | ||||
|     @Disabled  // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 | ||||
|     public void testGetReceivablePage() { | ||||
|        // mock 数据 | ||||
|        ReceivableDO dbReceivable = randomPojo(ReceivableDO.class, o -> { // 等会查询到 | ||||
|        CrmReceivableDO dbReceivable = randomPojo(CrmReceivableDO.class, o -> { // 等会查询到 | ||||
|            o.setNo(null); | ||||
|            o.setPlanId(null); | ||||
|            o.setCustomerId(null); | ||||
| @@ -125,63 +125,57 @@ public class ReceivableServiceImplTest extends BaseDbUnitTest { | ||||
|            o.setRemark(null); | ||||
|            o.setCreateTime(null); | ||||
|        }); | ||||
|        receivableMapper.insert(dbReceivable); | ||||
|        crmReceivableMapper.insert(dbReceivable); | ||||
|        // 测试 no 不匹配 | ||||
|        receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setNo(null))); | ||||
|        crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setNo(null))); | ||||
|        // 测试 planId 不匹配 | ||||
|        receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setPlanId(null))); | ||||
|        crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setPlanId(null))); | ||||
|        // 测试 customerId 不匹配 | ||||
|        receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setCustomerId(null))); | ||||
|        crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setCustomerId(null))); | ||||
|        // 测试 contractId 不匹配 | ||||
|        receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setContractId(null))); | ||||
|        crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setContractId(null))); | ||||
|        // 测试 checkStatus 不匹配 | ||||
|        receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setCheckStatus(null))); | ||||
|        crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setCheckStatus(null))); | ||||
|        // 测试 processInstanceId 不匹配 | ||||
|        receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setProcessInstanceId(null))); | ||||
|        crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setProcessInstanceId(null))); | ||||
|        // 测试 returnTime 不匹配 | ||||
|        receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setReturnTime(null))); | ||||
|        crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setReturnTime(null))); | ||||
|        // 测试 returnType 不匹配 | ||||
|        receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setReturnType(null))); | ||||
|        crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setReturnType(null))); | ||||
|        // 测试 price 不匹配 | ||||
|        receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setPrice(null))); | ||||
|        crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setPrice(null))); | ||||
|        // 测试 ownerUserId 不匹配 | ||||
|        receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setOwnerUserId(null))); | ||||
|        crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setOwnerUserId(null))); | ||||
|        // 测试 batchId 不匹配 | ||||
|        receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setBatchId(null))); | ||||
|        crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setBatchId(null))); | ||||
|        // 测试 sort 不匹配 | ||||
|        receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setSort(null))); | ||||
|        crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setSort(null))); | ||||
|        // 测试 dataScope 不匹配 | ||||
|        receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setDataScope(null))); | ||||
|        crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setDataScope(null))); | ||||
|        // 测试 dataScopeDeptIds 不匹配 | ||||
|        receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setDataScopeDeptIds(null))); | ||||
|        crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setDataScopeDeptIds(null))); | ||||
|        // 测试 status 不匹配 | ||||
|        receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setStatus(null))); | ||||
|        crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setStatus(null))); | ||||
|        // 测试 remark 不匹配 | ||||
|        receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setRemark(null))); | ||||
|        crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setRemark(null))); | ||||
|        // 测试 createTime 不匹配 | ||||
|        receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setCreateTime(null))); | ||||
|        crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setCreateTime(null))); | ||||
|        // 准备参数 | ||||
|        ReceivablePageReqVO reqVO = new ReceivablePageReqVO(); | ||||
|        CrmReceivablePageReqVO reqVO = new CrmReceivablePageReqVO(); | ||||
|        reqVO.setNo(null); | ||||
|        reqVO.setPlanId(null); | ||||
|        reqVO.setCustomerId(null); | ||||
|        reqVO.setContractId(null); | ||||
|        reqVO.setCheckStatus(null); | ||||
|        reqVO.setProcessInstanceId(null); | ||||
|        reqVO.setReturnTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); | ||||
|        reqVO.setReturnType(null); | ||||
|        reqVO.setPrice(null); | ||||
|        reqVO.setOwnerUserId(null); | ||||
|        reqVO.setBatchId(null); | ||||
|        reqVO.setSort(null); | ||||
|        reqVO.setDataScope(null); | ||||
|        reqVO.setDataScopeDeptIds(null); | ||||
|        reqVO.setStatus(null); | ||||
|        reqVO.setRemark(null); | ||||
|        reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); | ||||
| 
 | ||||
|        // 调用 | ||||
|        PageResult<ReceivableDO> pageResult = receivableService.getReceivablePage(reqVO); | ||||
|        PageResult<CrmReceivableDO> pageResult = receivableService.getReceivablePage(reqVO); | ||||
|        // 断言 | ||||
|        assertEquals(1, pageResult.getTotal()); | ||||
|        assertEquals(1, pageResult.getList().size()); | ||||
| @@ -192,7 +186,7 @@ public class ReceivableServiceImplTest extends BaseDbUnitTest { | ||||
|     @Disabled  // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 | ||||
|     public void testGetReceivableList() { | ||||
|        // mock 数据 | ||||
|        ReceivableDO dbReceivable = randomPojo(ReceivableDO.class, o -> { // 等会查询到 | ||||
|        CrmReceivableDO dbReceivable = randomPojo(CrmReceivableDO.class, o -> { // 等会查询到 | ||||
|            o.setNo(null); | ||||
|            o.setPlanId(null); | ||||
|            o.setCustomerId(null); | ||||
| @@ -211,63 +205,59 @@ public class ReceivableServiceImplTest extends BaseDbUnitTest { | ||||
|            o.setRemark(null); | ||||
|            o.setCreateTime(null); | ||||
|        }); | ||||
|        receivableMapper.insert(dbReceivable); | ||||
|        crmReceivableMapper.insert(dbReceivable); | ||||
|        // 测试 no 不匹配 | ||||
|        receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setNo(null))); | ||||
|        crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setNo(null))); | ||||
|        // 测试 planId 不匹配 | ||||
|        receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setPlanId(null))); | ||||
|        crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setPlanId(null))); | ||||
|        // 测试 customerId 不匹配 | ||||
|        receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setCustomerId(null))); | ||||
|        crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setCustomerId(null))); | ||||
|        // 测试 contractId 不匹配 | ||||
|        receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setContractId(null))); | ||||
|        crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setContractId(null))); | ||||
|        // 测试 checkStatus 不匹配 | ||||
|        receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setCheckStatus(null))); | ||||
|        crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setCheckStatus(null))); | ||||
|        // 测试 processInstanceId 不匹配 | ||||
|        receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setProcessInstanceId(null))); | ||||
|        crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setProcessInstanceId(null))); | ||||
|        // 测试 returnTime 不匹配 | ||||
|        receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setReturnTime(null))); | ||||
|        crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setReturnTime(null))); | ||||
|        // 测试 returnType 不匹配 | ||||
|        receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setReturnType(null))); | ||||
|        crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setReturnType(null))); | ||||
|        // 测试 price 不匹配 | ||||
|        receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setPrice(null))); | ||||
|        crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setPrice(null))); | ||||
|        // 测试 ownerUserId 不匹配 | ||||
|        receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setOwnerUserId(null))); | ||||
|        crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setOwnerUserId(null))); | ||||
|        // 测试 batchId 不匹配 | ||||
|        receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setBatchId(null))); | ||||
|        crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setBatchId(null))); | ||||
|        // 测试 sort 不匹配 | ||||
|        receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setSort(null))); | ||||
|        crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setSort(null))); | ||||
|        // 测试 dataScope 不匹配 | ||||
|        receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setDataScope(null))); | ||||
|        crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setDataScope(null))); | ||||
|        // 测试 dataScopeDeptIds 不匹配 | ||||
|        receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setDataScopeDeptIds(null))); | ||||
|        crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setDataScopeDeptIds(null))); | ||||
|        // 测试 status 不匹配 | ||||
|        receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setStatus(null))); | ||||
|        crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setStatus(null))); | ||||
|        // 测试 remark 不匹配 | ||||
|        receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setRemark(null))); | ||||
|        crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setRemark(null))); | ||||
|        // 测试 createTime 不匹配 | ||||
|        receivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setCreateTime(null))); | ||||
|        crmReceivableMapper.insert(cloneIgnoreId(dbReceivable, o -> o.setCreateTime(null))); | ||||
|        // 准备参数 | ||||
|        ReceivableExportReqVO reqVO = new ReceivableExportReqVO(); | ||||
|        CrmReceivableExportReqVO reqVO = new CrmReceivableExportReqVO(); | ||||
|        reqVO.setNo(null); | ||||
|        reqVO.setPlanId(null); | ||||
|        reqVO.setCustomerId(null); | ||||
|        reqVO.setContractId(null); | ||||
|        reqVO.setCheckStatus(null); | ||||
|        reqVO.setProcessInstanceId(null); | ||||
|        reqVO.setReturnTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); | ||||
|        reqVO.setReturnType(null); | ||||
|        reqVO.setPrice(null); | ||||
|        reqVO.setOwnerUserId(null); | ||||
|        reqVO.setBatchId(null); | ||||
|        reqVO.setSort(null); | ||||
|        reqVO.setDataScope(null); | ||||
|        reqVO.setDataScopeDeptIds(null); | ||||
|        reqVO.setStatus(null); | ||||
|        reqVO.setRemark(null); | ||||
|        reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); | ||||
| 
 | ||||
|        // 调用 | ||||
|        List<ReceivableDO> list = receivableService.getReceivableList(reqVO); | ||||
|        List<CrmReceivableDO> list = receivableService.getReceivableList(reqVO); | ||||
|        // 断言 | ||||
|        assertEquals(1, list.size()); | ||||
|        assertPojoEquals(dbReceivable, list.get(0)); | ||||
		Reference in New Issue
	
	Block a user
	 芋道源码
					芋道源码