diff --git a/yunxi-module-system/yunxi-module-system-biz/src/main/java/com/yunxi/scm/module/system/dal/dataobject/enterprise/EnterpriseDO.java b/yunxi-module-system/yunxi-module-system-biz/src/main/java/com/yunxi/scm/module/system/dal/dataobject/enterprise/EnterpriseDO.java index aee2e1d6..a09e09be 100644 --- a/yunxi-module-system/yunxi-module-system-biz/src/main/java/com/yunxi/scm/module/system/dal/dataobject/enterprise/EnterpriseDO.java +++ b/yunxi-module-system/yunxi-module-system-biz/src/main/java/com/yunxi/scm/module/system/dal/dataobject/enterprise/EnterpriseDO.java @@ -1,5 +1,7 @@ package com.yunxi.scm.module.system.dal.dataobject.enterprise; +import com.yunxi.scm.module.system.dal.dataobject.dept.DeptDO; +import com.yunxi.scm.module.system.dal.dataobject.dept.PostDO; import lombok.*; import java.util.*; import java.time.LocalDateTime; @@ -276,4 +278,9 @@ public class EnterpriseDO extends BaseDO { */ private String commissionPeriodOfValidity; + @TableField(exist = false) + private DeptDO deptDO; + + @TableField(exist = false) + private List postDOList; } diff --git a/yunxi-module-system/yunxi-module-system-biz/src/main/java/com/yunxi/scm/module/system/service/user/AdminUserServiceImpl.java b/yunxi-module-system/yunxi-module-system-biz/src/main/java/com/yunxi/scm/module/system/service/user/AdminUserServiceImpl.java index ad05fece..55aa4234 100644 --- a/yunxi-module-system/yunxi-module-system-biz/src/main/java/com/yunxi/scm/module/system/service/user/AdminUserServiceImpl.java +++ b/yunxi-module-system/yunxi-module-system-biz/src/main/java/com/yunxi/scm/module/system/service/user/AdminUserServiceImpl.java @@ -235,8 +235,12 @@ public class AdminUserServiceImpl implements AdminUserService { //查询对应的租户 List tenantDOList = tenantService.getTenantListByUserId(adminUserDO.getId()); for (TenantDO tenantDO: tenantDOList) { - //查询租户下的机构 + //查询租户下的企业 List enterpriseList = enterpriseService.getEnterpriseListByTenantId(tenantDO.getId(), adminUserDO.getId()); + //查询企业下的部门和岗位 + for (EnterpriseDO enterpriseDO : enterpriseList) { + + } tenantDO.setEnterpriseList(enterpriseList); if(adminUserDO.getTenantId().equals(tenantDO.getId())){ adminUserDO.setEnterpriseList(enterpriseList); diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-api/src/main/java/com/yunxi/scm/module/xxjj/enums/ErrorCodeConstants.java b/yunxi-module-xxjj/yunxi-module-xxjj-api/src/main/java/com/yunxi/scm/module/xxjj/enums/ErrorCodeConstants.java index 9953935a..4564caa0 100644 --- a/yunxi-module-xxjj/yunxi-module-xxjj-api/src/main/java/com/yunxi/scm/module/xxjj/enums/ErrorCodeConstants.java +++ b/yunxi-module-xxjj/yunxi-module-xxjj-api/src/main/java/com/yunxi/scm/module/xxjj/enums/ErrorCodeConstants.java @@ -90,6 +90,7 @@ public interface ErrorCodeConstants { // ========== 合同详情信息 500100001 ========== ErrorCode CONTRACT_INFO_NOT_EXISTS = new ErrorCode(1005000002, "合同详情信息不存在"); - + // ========== 主体负责人转移 TODO 补充编号 ========== + ErrorCode SUBJECT_TRANSFER_NOT_EXISTS = new ErrorCode(1005000003, "主体负责人转移不存在"); } diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjectfollowmanagement/vo/SubjectFollowManagementBaseVO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjectfollowmanagement/vo/SubjectFollowManagementBaseVO.java index 694a4e51..0db97f72 100644 --- a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjectfollowmanagement/vo/SubjectFollowManagementBaseVO.java +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjectfollowmanagement/vo/SubjectFollowManagementBaseVO.java @@ -1,5 +1,6 @@ package com.yunxi.scm.module.xxjj.controller.admin.subjectfollowmanagement.vo; +import com.yunxi.scm.module.xxjj.dal.dataobject.subjectbasic.SubjectBasicDO; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import java.util.*; @@ -55,10 +56,18 @@ public class SubjectFollowManagementBaseVO { @Schema(description = "提醒类型(0:准时提醒 1:提前5分钟 2:提前15分钟 3:提前30分钟 4:提前1小时)", example = "1") private String remindType; + @Schema(description = "提醒方式(1:系统消息 2:邮件 3:短信)", example = "1") + private String remindMode; + + @Schema(description = "提醒方式(1:系统消息 2:邮件 3:短信)", example = "1") + private String[] remindModeArr; + @Schema(description = "任务描述", example = "你猜") private String description; @Schema(description = "附件") private String annex; + @Schema(description = "客户") + private SubjectBasicDO subjectBasicDO; } diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjectfollowmanagement/vo/SubjectFollowManagementExcelVO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjectfollowmanagement/vo/SubjectFollowManagementExcelVO.java index b63e8bdc..564b6b41 100644 --- a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjectfollowmanagement/vo/SubjectFollowManagementExcelVO.java +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjectfollowmanagement/vo/SubjectFollowManagementExcelVO.java @@ -54,6 +54,9 @@ public class SubjectFollowManagementExcelVO { @ExcelProperty("提醒类型(0:准时提醒 1:提前5分钟 2:提前15分钟 3:提前30分钟 4:提前1小时)") private String remindType; + @Schema(description = "提醒方式(1:系统消息 2:邮件 3:短信)", example = "1") + private String remindMode; + @ExcelProperty("任务描述") private String description; diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjectfollowmanagement/vo/SubjectFollowManagementExportReqVO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjectfollowmanagement/vo/SubjectFollowManagementExportReqVO.java index 78f0c3e0..d38a538a 100644 --- a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjectfollowmanagement/vo/SubjectFollowManagementExportReqVO.java +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjectfollowmanagement/vo/SubjectFollowManagementExportReqVO.java @@ -48,6 +48,9 @@ public class SubjectFollowManagementExportReqVO { @Schema(description = "提醒类型(0:准时提醒 1:提前5分钟 2:提前15分钟 3:提前30分钟 4:提前1小时)", example = "1") private String remindType; + @Schema(description = "提醒方式(1:系统消息 2:邮件 3:短信)", example = "1") + private String remindMode; + @Schema(description = "任务描述", example = "你猜") private String description; diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjectfollowmanagement/vo/SubjectFollowManagementPageReqVO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjectfollowmanagement/vo/SubjectFollowManagementPageReqVO.java index e4a49c47..21305ef6 100644 --- a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjectfollowmanagement/vo/SubjectFollowManagementPageReqVO.java +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjectfollowmanagement/vo/SubjectFollowManagementPageReqVO.java @@ -59,6 +59,9 @@ public class SubjectFollowManagementPageReqVO extends PageParam { @Schema(description = "提醒类型(0:准时提醒 1:提前5分钟 2:提前15分钟 3:提前30分钟 4:提前1小时)", example = "1") private String remindType; + @Schema(description = "提醒方式(1:系统消息 2:邮件 3:短信)", example = "1") + private String remindMode; + @Schema(description = "任务描述", example = "你猜") private String description; @@ -69,4 +72,16 @@ public class SubjectFollowManagementPageReqVO extends PageParam { @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) private LocalDateTime[] createTime; + + @Schema(description = "客户名称", example = "赵六") + private String name; + + @Schema(description = "客户来源(0:电话营销 1:主动来电 2:客户介绍 3:朋友介绍 4:独立开发 5:网络搜索 6:广告杂志 7:展会促销 8:其他途径)") + private String customerSource; + + @Schema(description = "客户星级(0:一星 1:二星 2:三星 3:四星 4:五星)") + private String customerStarrating; + + + } diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjectfollowmanagement/vo/SubjectFollowManagementRespVO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjectfollowmanagement/vo/SubjectFollowManagementRespVO.java index 9dccb529..f32b5fda 100644 --- a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjectfollowmanagement/vo/SubjectFollowManagementRespVO.java +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjectfollowmanagement/vo/SubjectFollowManagementRespVO.java @@ -1,5 +1,6 @@ package com.yunxi.scm.module.xxjj.controller.admin.subjectfollowmanagement.vo; +import com.baomidou.mybatisplus.annotation.TableField; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import java.time.LocalDateTime; @@ -16,4 +17,39 @@ public class SubjectFollowManagementRespVO extends SubjectFollowManagementBaseVO @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) private LocalDateTime createTime; + @Schema(description = "更新人", requiredMode = Schema.RequiredMode.REQUIRED) + private String creatorName; + /** + * 更新者,目前使用 SysUser 的 id 编号 + * + * 使用 String 类型的原因是,未来可能会存在非数值的情况,留好拓展性。 + */ + @Schema(description = "更新人", requiredMode = Schema.RequiredMode.REQUIRED) + private String updaterName; + + private String belongingPeopleName; + private String calssify; + private String name; + private String logo; + private String reservedFields1; + /** + * 企业性质(0:国有企业 1:集体企业 2:私营企业 3:股份制企业 4:外资企业 5:合资企业) + */ + private String enterpriseNature; + /** + * 行业分类(0:家用电器 1:交通运输 2:商务服务 3:家具用品 4:电工电气 5:通信产品 6:办公文教 7:运动休闲 8:传媒广电) + */ + private String industryClassify; + /** + * 客户来源(0:电话营销 1:主动来电 2:客户介绍 3:朋友介绍 4:独立开发 5:网络搜索 6:广告杂志 7:展会促销 8:其他途径) + */ + private String customerSource; + /** + * 客户星级(0:一星 1:二星 2:三星 3:四星 4:五星) + */ + private String customerStarrating; + /** + * 业务进度(0:了解跟进 1:资料收集 2:客户评审 3:风控核准 4:合作洽谈 5:准备签约 6:已经签约 7:合作叫停 8:暂时搁置) + */ + private String industrySchedule; } diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjectfollowreport/SubjectFollowReportController.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjectfollowreport/SubjectFollowReportController.java new file mode 100644 index 00000000..553b059c --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjectfollowreport/SubjectFollowReportController.java @@ -0,0 +1,102 @@ +package com.yunxi.scm.module.xxjj.controller.admin.subjectfollowreport; + +import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; + +import javax.validation.constraints.*; +import javax.validation.*; +import javax.servlet.http.*; +import java.util.*; +import java.io.IOException; + +import com.yunxi.scm.framework.common.pojo.PageResult; +import com.yunxi.scm.framework.common.pojo.CommonResult; +import static com.yunxi.scm.framework.common.pojo.CommonResult.success; + +import com.yunxi.scm.framework.excel.core.util.ExcelUtils; + +import com.yunxi.scm.framework.operatelog.core.annotations.OperateLog; +import static com.yunxi.scm.framework.operatelog.core.enums.OperateTypeEnum.*; + +import com.yunxi.scm.module.xxjj.controller.admin.subjectfollowreport.vo.*; +import com.yunxi.scm.module.xxjj.dal.dataobject.subjectfollowreport.SubjectFollowReportDO; +import com.yunxi.scm.module.xxjj.convert.subjectfollowreport.SubjectFollowReportConvert; +import com.yunxi.scm.module.xxjj.service.subjectfollowreport.SubjectFollowReportService; + +@Tag(name = "管理后台 - 跟进报告管理") +@RestController +@RequestMapping("/xxjj/subject-follow-report") +@Validated +public class SubjectFollowReportController { + + @Resource + private SubjectFollowReportService subjectFollowReportService; + + @PostMapping("/create") + @Operation(summary = "创建跟进报告管理") + @PreAuthorize("@ss.hasPermission('xxjj:subject-follow-report:create')") + public CommonResult createSubjectFollowReport(@Valid @RequestBody SubjectFollowReportCreateReqVO createReqVO) { + return success(subjectFollowReportService.createSubjectFollowReport(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新跟进报告管理") + @PreAuthorize("@ss.hasPermission('xxjj:subject-follow-report:update')") + public CommonResult updateSubjectFollowReport(@Valid @RequestBody SubjectFollowReportUpdateReqVO updateReqVO) { + subjectFollowReportService.updateSubjectFollowReport(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除跟进报告管理") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('xxjj:subject-follow-report:delete')") + public CommonResult deleteSubjectFollowReport(@RequestParam("id") Long id) { + subjectFollowReportService.deleteSubjectFollowReport(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得跟进报告管理") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('xxjj:subject-follow-report:query')") + public CommonResult getSubjectFollowReport(@RequestParam("id") Long id) { + SubjectFollowReportDO subjectFollowReport = subjectFollowReportService.getSubjectFollowReport(id); + return success(SubjectFollowReportConvert.INSTANCE.convert(subjectFollowReport)); + } + + @GetMapping("/list") + @Operation(summary = "获得跟进报告管理列表") + @Parameter(name = "ids", description = "编号列表", required = true, example = "1024,2048") + @PreAuthorize("@ss.hasPermission('xxjj:subject-follow-report:query')") + public CommonResult> getSubjectFollowReportList(@RequestParam("ids") Collection ids) { + List list = subjectFollowReportService.getSubjectFollowReportList(ids); + return success(SubjectFollowReportConvert.INSTANCE.convertList(list)); + } + + @GetMapping("/page") + @Operation(summary = "获得跟进报告管理分页") + @PreAuthorize("@ss.hasPermission('xxjj:subject-follow-report:query')") + public CommonResult> getSubjectFollowReportPage(@Valid SubjectFollowReportPageReqVO pageVO) { + PageResult pageResult = subjectFollowReportService.getSubjectFollowReportPage(pageVO); + return success(SubjectFollowReportConvert.INSTANCE.convertPage(pageResult)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出跟进报告管理 Excel") + @PreAuthorize("@ss.hasPermission('xxjj:subject-follow-report:export')") + @OperateLog(type = EXPORT) + public void exportSubjectFollowReportExcel(@Valid SubjectFollowReportExportReqVO exportReqVO, + HttpServletResponse response) throws IOException { + List list = subjectFollowReportService.getSubjectFollowReportList(exportReqVO); + // 导出 Excel + List datas = SubjectFollowReportConvert.INSTANCE.convertList02(list); + ExcelUtils.write(response, "跟进报告管理.xls", "数据", SubjectFollowReportExcelVO.class, datas); + } + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjectfollowreport/vo/SubjectFollowReportBaseVO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjectfollowreport/vo/SubjectFollowReportBaseVO.java new file mode 100644 index 00000000..eebaeb91 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjectfollowreport/vo/SubjectFollowReportBaseVO.java @@ -0,0 +1,49 @@ +package com.yunxi.scm.module.xxjj.controller.admin.subjectfollowreport.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import javax.validation.constraints.*; +import org.springframework.format.annotation.DateTimeFormat; + +import static com.yunxi.scm.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +/** + * 跟进报告管理 Base VO,提供给添加、修改、详细的子 VO 使用 + * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 + */ +@Data +public class SubjectFollowReportBaseVO { + + @Schema(description = "报告类型(1:跟进报告 2:其他报告)", example = "1") + private String reportType; + + @Schema(description = "报告日期") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime reporTime; + + @Schema(description = "跟进日期") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime followTime; + + @Schema(description = "业务id", requiredMode = Schema.RequiredMode.REQUIRED, example = "6470") + @NotNull(message = "业务id不能为空") + private Long businessId; + + @Schema(description = "附件") + private String annex; + + @Schema(description = "报告内容", example = "随便") + private String description; + + @Schema(description = "批阅人员") + private String readOverUser; + + @Schema(description = "抄送人员") + private String makeCopyUser; + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjectfollowreport/vo/SubjectFollowReportCreateReqVO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjectfollowreport/vo/SubjectFollowReportCreateReqVO.java new file mode 100644 index 00000000..31aeeaef --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjectfollowreport/vo/SubjectFollowReportCreateReqVO.java @@ -0,0 +1,14 @@ +package com.yunxi.scm.module.xxjj.controller.admin.subjectfollowreport.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import javax.validation.constraints.*; + +@Schema(description = "管理后台 - 跟进报告管理创建 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class SubjectFollowReportCreateReqVO extends SubjectFollowReportBaseVO { + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjectfollowreport/vo/SubjectFollowReportExcelVO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjectfollowreport/vo/SubjectFollowReportExcelVO.java new file mode 100644 index 00000000..9b541d87 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjectfollowreport/vo/SubjectFollowReportExcelVO.java @@ -0,0 +1,51 @@ +package com.yunxi.scm.module.xxjj.controller.admin.subjectfollowreport.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; + +import com.alibaba.excel.annotation.ExcelProperty; + +/** + * 跟进报告管理 Excel VO + * + * @author 长江云息 + */ +@Data +public class SubjectFollowReportExcelVO { + + @ExcelProperty("主键id") + private Long id; + + @ExcelProperty("报告类型(1:跟进报告 2:其他报告)") + private String reportType; + + @ExcelProperty("报告日期") + private LocalDateTime reporTime; + + @ExcelProperty("跟进日期") + private LocalDateTime followTime; + + @ExcelProperty("业务id") + private Long businessId; + + @ExcelProperty("附件") + private String annex; + + @ExcelProperty("报告内容") + private String description; + + @ExcelProperty("批阅人员") + private String readOverUser; + + @ExcelProperty("抄送人员") + private String makeCopyUser; + + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjectfollowreport/vo/SubjectFollowReportExportReqVO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjectfollowreport/vo/SubjectFollowReportExportReqVO.java new file mode 100644 index 00000000..d664eb94 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjectfollowreport/vo/SubjectFollowReportExportReqVO.java @@ -0,0 +1,46 @@ +package com.yunxi.scm.module.xxjj.controller.admin.subjectfollowreport.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import com.yunxi.scm.framework.common.pojo.PageParam; +import java.time.LocalDateTime; +import org.springframework.format.annotation.DateTimeFormat; + +import static com.yunxi.scm.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 跟进报告管理 Excel 导出 Request VO,参数和 SubjectFollowReportPageReqVO 是一致的") +@Data +public class SubjectFollowReportExportReqVO { + + @Schema(description = "报告类型(1:跟进报告 2:其他报告)", example = "1") + private String reportType; + + @Schema(description = "报告日期") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] reporTime; + + @Schema(description = "跟进日期") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] followTime; + + @Schema(description = "业务id", example = "6470") + private Long businessId; + + @Schema(description = "附件") + private String annex; + + @Schema(description = "报告内容", example = "随便") + private String description; + + @Schema(description = "批阅人员") + private String readOverUser; + + @Schema(description = "抄送人员") + private String makeCopyUser; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjectfollowreport/vo/SubjectFollowReportPageReqVO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjectfollowreport/vo/SubjectFollowReportPageReqVO.java new file mode 100644 index 00000000..71ef76ad --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjectfollowreport/vo/SubjectFollowReportPageReqVO.java @@ -0,0 +1,48 @@ +package com.yunxi.scm.module.xxjj.controller.admin.subjectfollowreport.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import com.yunxi.scm.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static com.yunxi.scm.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 跟进报告管理分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class SubjectFollowReportPageReqVO extends PageParam { + + @Schema(description = "报告类型(1:跟进报告 2:其他报告)", example = "1") + private String reportType; + + @Schema(description = "报告日期") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] reporTime; + + @Schema(description = "跟进日期") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] followTime; + + @Schema(description = "业务id", example = "6470") + private Long businessId; + + @Schema(description = "附件") + private String annex; + + @Schema(description = "报告内容", example = "随便") + private String description; + + @Schema(description = "批阅人员") + private String readOverUser; + + @Schema(description = "抄送人员") + private String makeCopyUser; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjectfollowreport/vo/SubjectFollowReportRespVO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjectfollowreport/vo/SubjectFollowReportRespVO.java new file mode 100644 index 00000000..da37a814 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjectfollowreport/vo/SubjectFollowReportRespVO.java @@ -0,0 +1,19 @@ +package com.yunxi.scm.module.xxjj.controller.admin.subjectfollowreport.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 跟进报告管理 Response VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class SubjectFollowReportRespVO extends SubjectFollowReportBaseVO { + + @Schema(description = "主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "11334") + private Long id; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime createTime; + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjectfollowreport/vo/SubjectFollowReportUpdateReqVO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjectfollowreport/vo/SubjectFollowReportUpdateReqVO.java new file mode 100644 index 00000000..0b34e93b --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjectfollowreport/vo/SubjectFollowReportUpdateReqVO.java @@ -0,0 +1,18 @@ +package com.yunxi.scm.module.xxjj.controller.admin.subjectfollowreport.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import javax.validation.constraints.*; + +@Schema(description = "管理后台 - 跟进报告管理更新 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class SubjectFollowReportUpdateReqVO extends SubjectFollowReportBaseVO { + + @Schema(description = "主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "11334") + @NotNull(message = "主键id不能为空") + private Long id; + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjecttransfer/SubjectTransferController.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjecttransfer/SubjectTransferController.java new file mode 100644 index 00000000..ae8c29c3 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjecttransfer/SubjectTransferController.java @@ -0,0 +1,102 @@ +package com.yunxi.scm.module.xxjj.controller.admin.subjecttransfer; + +import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; + +import javax.validation.constraints.*; +import javax.validation.*; +import javax.servlet.http.*; +import java.util.*; +import java.io.IOException; + +import com.yunxi.scm.framework.common.pojo.PageResult; +import com.yunxi.scm.framework.common.pojo.CommonResult; +import static com.yunxi.scm.framework.common.pojo.CommonResult.success; + +import com.yunxi.scm.framework.excel.core.util.ExcelUtils; + +import com.yunxi.scm.framework.operatelog.core.annotations.OperateLog; +import static com.yunxi.scm.framework.operatelog.core.enums.OperateTypeEnum.*; + +import com.yunxi.scm.module.xxjj.controller.admin.subjecttransfer.vo.*; +import com.yunxi.scm.module.xxjj.dal.dataobject.subjecttransfer.SubjectTransferDO; +import com.yunxi.scm.module.xxjj.convert.subjecttransfer.SubjectTransferConvert; +import com.yunxi.scm.module.xxjj.service.subjecttransfer.SubjectTransferService; + +@Tag(name = "管理后台 - 主体负责人转移") +@RestController +@RequestMapping("/xxjj/subject-transfer") +@Validated +public class SubjectTransferController { + + @Resource + private SubjectTransferService subjectTransferService; + + @PostMapping("/create") + @Operation(summary = "创建主体负责人转移") + @PreAuthorize("@ss.hasPermission('xxjj:subject-transfer:create')") + public CommonResult createSubjectTransfer(@Valid @RequestBody SubjectTransferCreateReqVO createReqVO) { + return success(subjectTransferService.createSubjectTransfer(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新主体负责人转移") + @PreAuthorize("@ss.hasPermission('xxjj:subject-transfer:update')") + public CommonResult updateSubjectTransfer(@Valid @RequestBody SubjectTransferUpdateReqVO updateReqVO) { + subjectTransferService.updateSubjectTransfer(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除主体负责人转移") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('xxjj:subject-transfer:delete')") + public CommonResult deleteSubjectTransfer(@RequestParam("id") Long id) { + subjectTransferService.deleteSubjectTransfer(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得主体负责人转移") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('xxjj:subject-transfer:query')") + public CommonResult getSubjectTransfer(@RequestParam("id") Long id) { + SubjectTransferDO subjectTransfer = subjectTransferService.getSubjectTransfer(id); + return success(SubjectTransferConvert.INSTANCE.convert(subjectTransfer)); + } + + @GetMapping("/list") + @Operation(summary = "获得主体负责人转移列表") + @Parameter(name = "ids", description = "编号列表", required = true, example = "1024,2048") + @PreAuthorize("@ss.hasPermission('xxjj:subject-transfer:query')") + public CommonResult> getSubjectTransferList(@RequestParam("ids") Collection ids) { + List list = subjectTransferService.getSubjectTransferList(ids); + return success(SubjectTransferConvert.INSTANCE.convertList(list)); + } + + @GetMapping("/page") + @Operation(summary = "获得主体负责人转移分页") + @PreAuthorize("@ss.hasPermission('xxjj:subject-transfer:query')") + public CommonResult> getSubjectTransferPage(@Valid SubjectTransferPageReqVO pageVO) { + PageResult pageResult = subjectTransferService.getSubjectTransferPage(pageVO); + return success(SubjectTransferConvert.INSTANCE.convertPage(pageResult)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出主体负责人转移 Excel") + @PreAuthorize("@ss.hasPermission('xxjj:subject-transfer:export')") + @OperateLog(type = EXPORT) + public void exportSubjectTransferExcel(@Valid SubjectTransferExportReqVO exportReqVO, + HttpServletResponse response) throws IOException { + List list = subjectTransferService.getSubjectTransferList(exportReqVO); + // 导出 Excel + List datas = SubjectTransferConvert.INSTANCE.convertList02(list); + ExcelUtils.write(response, "主体负责人转移.xls", "数据", SubjectTransferExcelVO.class, datas); + } + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjecttransfer/vo/SubjectTransferBaseVO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjecttransfer/vo/SubjectTransferBaseVO.java new file mode 100644 index 00000000..dde71812 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjecttransfer/vo/SubjectTransferBaseVO.java @@ -0,0 +1,44 @@ +package com.yunxi.scm.module.xxjj.controller.admin.subjecttransfer.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import javax.validation.constraints.*; + +/** + * 主体负责人转移 Base VO,提供给添加、修改、详细的子 VO 使用 + * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 + */ +@Data +public class SubjectTransferBaseVO { + + @Schema(description = "业务id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1442") + private Long businessId; + + @Schema(description = "业务类型(0:客户 1:供应商 2:服务商)", example = "1") + private String businessType; + + @Schema(description = "转移前用户id", requiredMode = Schema.RequiredMode.REQUIRED) + private Long userId1; + + @Schema(description = "转移后用户id", requiredMode = Schema.RequiredMode.REQUIRED) + private Long userId2; + + @Schema(description = "转移数据类型(0商机1订单2财务3费用4发票)", example = "2") + private String transferType; + + @Schema(description = "备注", example = "你猜") + private String remark; + + @Schema(description = "转移前所属用户id", example = "你猜") + private String userId1s; + + @Schema(description = "业务ids", example = "你猜") + private String businessIds; + + @Schema(description = "转移数据类型", example = "你猜") + private String[] transferTypeArr; + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjecttransfer/vo/SubjectTransferCreateReqVO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjecttransfer/vo/SubjectTransferCreateReqVO.java new file mode 100644 index 00000000..3234b039 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjecttransfer/vo/SubjectTransferCreateReqVO.java @@ -0,0 +1,14 @@ +package com.yunxi.scm.module.xxjj.controller.admin.subjecttransfer.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import javax.validation.constraints.*; + +@Schema(description = "管理后台 - 主体负责人转移创建 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class SubjectTransferCreateReqVO extends SubjectTransferBaseVO { + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjecttransfer/vo/SubjectTransferExcelVO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjecttransfer/vo/SubjectTransferExcelVO.java new file mode 100644 index 00000000..36d2cff0 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjecttransfer/vo/SubjectTransferExcelVO.java @@ -0,0 +1,43 @@ +package com.yunxi.scm.module.xxjj.controller.admin.subjecttransfer.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; + +import com.alibaba.excel.annotation.ExcelProperty; + +/** + * 主体负责人转移 Excel VO + * + * @author 长江云息 + */ +@Data +public class SubjectTransferExcelVO { + + @ExcelProperty("主键id") + private Long id; + + @ExcelProperty("业务id") + private Long businessId; + + @ExcelProperty("业务类型(0:客户 1:供应商 2:服务商)") + private String businessType; + + @ExcelProperty("转移前用户id") + private Long userId1; + + @ExcelProperty("转移后用户id") + private Long userId2; + + @ExcelProperty("转移数据类型(0商机1订单2财务3费用4发票)") + private String transferType; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjecttransfer/vo/SubjectTransferExportReqVO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjecttransfer/vo/SubjectTransferExportReqVO.java new file mode 100644 index 00000000..5f9b2d83 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjecttransfer/vo/SubjectTransferExportReqVO.java @@ -0,0 +1,38 @@ +package com.yunxi.scm.module.xxjj.controller.admin.subjecttransfer.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import com.yunxi.scm.framework.common.pojo.PageParam; +import java.time.LocalDateTime; +import org.springframework.format.annotation.DateTimeFormat; + +import static com.yunxi.scm.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 主体负责人转移 Excel 导出 Request VO,参数和 SubjectTransferPageReqVO 是一致的") +@Data +public class SubjectTransferExportReqVO { + + @Schema(description = "业务id", example = "1442") + private Long businessId; + + @Schema(description = "业务类型(0:客户 1:供应商 2:服务商)", example = "1") + private String businessType; + + @Schema(description = "转移前用户id") + private Long userId1; + + @Schema(description = "转移后用户id") + private Long userId2; + + @Schema(description = "转移数据类型(0商机1订单2财务3费用4发票)", example = "2") + private String transferType; + + @Schema(description = "备注", example = "你猜") + private String remark; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjecttransfer/vo/SubjectTransferPageReqVO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjecttransfer/vo/SubjectTransferPageReqVO.java new file mode 100644 index 00000000..8a298058 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjecttransfer/vo/SubjectTransferPageReqVO.java @@ -0,0 +1,49 @@ +package com.yunxi.scm.module.xxjj.controller.admin.subjecttransfer.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import com.yunxi.scm.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static com.yunxi.scm.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 主体负责人转移分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class SubjectTransferPageReqVO extends PageParam { + + @Schema(description = "业务id", example = "1442") + private Long businessId; + + @Schema(description = "业务类型(0:客户 1:供应商 2:服务商)", example = "1") + private String businessType; + + @Schema(description = "转移前用户id") + private Long userId1; + + @Schema(description = "转移后用户id") + private Long userId2; + + @Schema(description = "转移数据类型(0商机1订单2财务3费用4发票)", example = "2") + private String transferType; + + @Schema(description = "转移前所属用户id", example = "你猜") + private String userId1s; + + @Schema(description = "业务ids", example = "你猜") + private String businessIds; + + @Schema(description = "转移数据类型", example = "你猜") + private String[] transferTypeArr; + + @Schema(description = "备注", example = "你猜") + private String remark; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjecttransfer/vo/SubjectTransferRespVO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjecttransfer/vo/SubjectTransferRespVO.java new file mode 100644 index 00000000..8a476cf1 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjecttransfer/vo/SubjectTransferRespVO.java @@ -0,0 +1,19 @@ +package com.yunxi.scm.module.xxjj.controller.admin.subjecttransfer.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 主体负责人转移 Response VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class SubjectTransferRespVO extends SubjectTransferBaseVO { + + @Schema(description = "主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "6519") + private Long id; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime createTime; + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjecttransfer/vo/SubjectTransferUpdateReqVO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjecttransfer/vo/SubjectTransferUpdateReqVO.java new file mode 100644 index 00000000..7353c500 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/subjecttransfer/vo/SubjectTransferUpdateReqVO.java @@ -0,0 +1,18 @@ +package com.yunxi.scm.module.xxjj.controller.admin.subjecttransfer.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import javax.validation.constraints.*; + +@Schema(description = "管理后台 - 主体负责人转移更新 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class SubjectTransferUpdateReqVO extends SubjectTransferBaseVO { + + @Schema(description = "主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "6519") + @NotNull(message = "主键id不能为空") + private Long id; + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/convert/subjectfollowreport/SubjectFollowReportConvert.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/convert/subjectfollowreport/SubjectFollowReportConvert.java new file mode 100644 index 00000000..93cb0faa --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/convert/subjectfollowreport/SubjectFollowReportConvert.java @@ -0,0 +1,34 @@ +package com.yunxi.scm.module.xxjj.convert.subjectfollowreport; + +import java.util.*; + +import com.yunxi.scm.framework.common.pojo.PageResult; + +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; +import com.yunxi.scm.module.xxjj.controller.admin.subjectfollowreport.vo.*; +import com.yunxi.scm.module.xxjj.dal.dataobject.subjectfollowreport.SubjectFollowReportDO; + +/** + * 跟进报告管理 Convert + * + * @author 长江云息 + */ +@Mapper +public interface SubjectFollowReportConvert { + + SubjectFollowReportConvert INSTANCE = Mappers.getMapper(SubjectFollowReportConvert.class); + + SubjectFollowReportDO convert(SubjectFollowReportCreateReqVO bean); + + SubjectFollowReportDO convert(SubjectFollowReportUpdateReqVO bean); + + SubjectFollowReportRespVO convert(SubjectFollowReportDO bean); + + List convertList(List list); + + PageResult convertPage(PageResult page); + + List convertList02(List list); + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/convert/subjecttransfer/SubjectTransferConvert.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/convert/subjecttransfer/SubjectTransferConvert.java new file mode 100644 index 00000000..5efa2b0b --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/convert/subjecttransfer/SubjectTransferConvert.java @@ -0,0 +1,34 @@ +package com.yunxi.scm.module.xxjj.convert.subjecttransfer; + +import java.util.*; + +import com.yunxi.scm.framework.common.pojo.PageResult; + +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; +import com.yunxi.scm.module.xxjj.controller.admin.subjecttransfer.vo.*; +import com.yunxi.scm.module.xxjj.dal.dataobject.subjecttransfer.SubjectTransferDO; + +/** + * 主体负责人转移 Convert + * + * @author 长江云息 + */ +@Mapper +public interface SubjectTransferConvert { + + SubjectTransferConvert INSTANCE = Mappers.getMapper(SubjectTransferConvert.class); + + SubjectTransferDO convert(SubjectTransferCreateReqVO bean); + + SubjectTransferDO convert(SubjectTransferUpdateReqVO bean); + + SubjectTransferRespVO convert(SubjectTransferDO bean); + + List convertList(List list); + + PageResult convertPage(PageResult page); + + List convertList02(List list); + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/dal/dataobject/subjectfollowmanagement/SubjectFollowManagementDO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/dal/dataobject/subjectfollowmanagement/SubjectFollowManagementDO.java index 8d0423e1..d039b6da 100644 --- a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/dal/dataobject/subjectfollowmanagement/SubjectFollowManagementDO.java +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/dal/dataobject/subjectfollowmanagement/SubjectFollowManagementDO.java @@ -1,5 +1,6 @@ package com.yunxi.scm.module.xxjj.dal.dataobject.subjectfollowmanagement; +import com.yunxi.scm.module.xxjj.dal.dataobject.subjectbasic.SubjectBasicDO; import lombok.*; import java.util.*; import java.time.LocalDateTime; @@ -73,6 +74,11 @@ public class SubjectFollowManagementDO extends BaseDO { * 提醒类型(0:准时提醒 1:提前5分钟 2:提前15分钟 3:提前30分钟 4:提前1小时) */ private String remindType; + + /** + * 提醒方式(1:系统消息 2:邮件 3:短信) + */ + private String remindMode; /** * 任务描述 */ @@ -82,4 +88,53 @@ public class SubjectFollowManagementDO extends BaseDO { */ private String annex; + @TableField(exist = false) + private SubjectBasicDO subjectBasicDO; + + @TableField(exist = false) + private String creatorName; + /** + * 更新者,目前使用 SysUser 的 id 编号 + * + * 使用 String 类型的原因是,未来可能会存在非数值的情况,留好拓展性。 + */ + @TableField(exist = false) + private String updaterName; + + @TableField(exist = false) + private String belongingPeopleName; + + @TableField(exist = false) + private String calssify; + @TableField(exist = false) + private String name; + @TableField(exist = false) + private String logo; + @TableField(exist = false) + private String reservedFields1; + /** + * 企业性质(0:国有企业 1:集体企业 2:私营企业 3:股份制企业 4:外资企业 5:合资企业) + */ + @TableField(exist = false) + private String enterpriseNature; + /** + * 行业分类(0:家用电器 1:交通运输 2:商务服务 3:家具用品 4:电工电气 5:通信产品 6:办公文教 7:运动休闲 8:传媒广电) + */ + @TableField(exist = false) + private String industryClassify; + /** + * 客户来源(0:电话营销 1:主动来电 2:客户介绍 3:朋友介绍 4:独立开发 5:网络搜索 6:广告杂志 7:展会促销 8:其他途径) + */ + @TableField(exist = false) + private String customerSource; + /** + * 客户星级(0:一星 1:二星 2:三星 3:四星 4:五星) + */ + @TableField(exist = false) + private String customerStarrating; + /** + * 业务进度(0:了解跟进 1:资料收集 2:客户评审 3:风控核准 4:合作洽谈 5:准备签约 6:已经签约 7:合作叫停 8:暂时搁置) + */ + @TableField(exist = false) + private String industrySchedule; } diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/dal/dataobject/subjectfollowreport/SubjectFollowReportDO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/dal/dataobject/subjectfollowreport/SubjectFollowReportDO.java new file mode 100644 index 00000000..438ca344 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/dal/dataobject/subjectfollowreport/SubjectFollowReportDO.java @@ -0,0 +1,65 @@ +package com.yunxi.scm.module.xxjj.dal.dataobject.subjectfollowreport; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import com.yunxi.scm.framework.mybatis.core.dataobject.BaseDO; + +/** + * 跟进报告管理 DO + * + * @author 长江云息 + */ +@TableName("xxjj_subject_follow_report") +@KeySequence("xxjj_subject_follow_report_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SubjectFollowReportDO extends BaseDO { + + /** + * 主键id + */ + @TableId + private Long id; + /** + * 报告类型(1:跟进报告 2:其他报告) + */ + private String reportType; + /** + * 报告日期 + */ + private LocalDateTime reporTime; + /** + * 跟进日期 + */ + private LocalDateTime followTime; + /** + * 业务id + */ + private Long businessId; + /** + * 附件 + */ + private String annex; + /** + * 报告内容 + */ + private String description; + /** + * 批阅人员 + */ + private String readOverUser; + /** + * 抄送人员 + */ + private String makeCopyUser; + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/dal/dataobject/subjecttransfer/SubjectTransferDO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/dal/dataobject/subjecttransfer/SubjectTransferDO.java new file mode 100644 index 00000000..d57bbb17 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/dal/dataobject/subjecttransfer/SubjectTransferDO.java @@ -0,0 +1,55 @@ +package com.yunxi.scm.module.xxjj.dal.dataobject.subjecttransfer; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import com.yunxi.scm.framework.mybatis.core.dataobject.BaseDO; + +/** + * 主体负责人转移 DO + * + * @author 长江云息 + */ +@TableName("xxjj_subject_transfer") +@KeySequence("xxjj_subject_transfer_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SubjectTransferDO extends BaseDO { + + /** + * 主键id + */ + @TableId + private Long id; + /** + * 业务id + */ + private Long businessId; + /** + * 业务类型(0:客户 1:供应商 2:服务商) + */ + private String businessType; + /** + * 转移前用户id + */ + private Long userId1; + /** + * 转移后用户id + */ + private Long userId2; + /** + * 转移数据类型(0商机1订单2财务3费用4发票) + */ + private String transferType; + /** + * 备注 + */ + private String remark; + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/dal/mysql/subjectfollowmanagement/SubjectFollowManagementMapper.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/dal/mysql/subjectfollowmanagement/SubjectFollowManagementMapper.java index c85b1d3f..1cdb4b8a 100644 --- a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/dal/mysql/subjectfollowmanagement/SubjectFollowManagementMapper.java +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/dal/mysql/subjectfollowmanagement/SubjectFollowManagementMapper.java @@ -2,12 +2,14 @@ package com.yunxi.scm.module.xxjj.dal.mysql.subjectfollowmanagement; import java.util.*; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.yunxi.scm.framework.common.pojo.PageResult; import com.yunxi.scm.framework.mybatis.core.query.LambdaQueryWrapperX; import com.yunxi.scm.framework.mybatis.core.mapper.BaseMapperX; import com.yunxi.scm.module.xxjj.dal.dataobject.subjectfollowmanagement.SubjectFollowManagementDO; import org.apache.ibatis.annotations.Mapper; import com.yunxi.scm.module.xxjj.controller.admin.subjectfollowmanagement.vo.*; +import org.apache.ibatis.annotations.Param; /** * 主体跟进管理 Mapper @@ -17,6 +19,8 @@ import com.yunxi.scm.module.xxjj.controller.admin.subjectfollowmanagement.vo.*; @Mapper public interface SubjectFollowManagementMapper extends BaseMapperX { + IPage selectPage02(IPage page, @Param("reqVO") SubjectFollowManagementPageReqVO reqVO); + default PageResult selectPage(SubjectFollowManagementPageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX() .eqIfPresent(SubjectFollowManagementDO::getBusinessId, reqVO.getBusinessId()) diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/dal/mysql/subjectfollowreport/SubjectFollowReportMapper.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/dal/mysql/subjectfollowreport/SubjectFollowReportMapper.java new file mode 100644 index 00000000..4034dcb5 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/dal/mysql/subjectfollowreport/SubjectFollowReportMapper.java @@ -0,0 +1,48 @@ +package com.yunxi.scm.module.xxjj.dal.mysql.subjectfollowreport; + +import java.util.*; + +import com.yunxi.scm.framework.common.pojo.PageResult; +import com.yunxi.scm.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.yunxi.scm.framework.mybatis.core.mapper.BaseMapperX; +import com.yunxi.scm.module.xxjj.dal.dataobject.subjectfollowreport.SubjectFollowReportDO; +import org.apache.ibatis.annotations.Mapper; +import com.yunxi.scm.module.xxjj.controller.admin.subjectfollowreport.vo.*; + +/** + * 跟进报告管理 Mapper + * + * @author 长江云息 + */ +@Mapper +public interface SubjectFollowReportMapper extends BaseMapperX { + + default PageResult selectPage(SubjectFollowReportPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(SubjectFollowReportDO::getReportType, reqVO.getReportType()) + .betweenIfPresent(SubjectFollowReportDO::getReporTime, reqVO.getReporTime()) + .betweenIfPresent(SubjectFollowReportDO::getFollowTime, reqVO.getFollowTime()) + .eqIfPresent(SubjectFollowReportDO::getBusinessId, reqVO.getBusinessId()) + .eqIfPresent(SubjectFollowReportDO::getAnnex, reqVO.getAnnex()) + .eqIfPresent(SubjectFollowReportDO::getDescription, reqVO.getDescription()) + .eqIfPresent(SubjectFollowReportDO::getReadOverUser, reqVO.getReadOverUser()) + .eqIfPresent(SubjectFollowReportDO::getMakeCopyUser, reqVO.getMakeCopyUser()) + .betweenIfPresent(SubjectFollowReportDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(SubjectFollowReportDO::getId)); + } + + default List selectList(SubjectFollowReportExportReqVO reqVO) { + return selectList(new LambdaQueryWrapperX() + .eqIfPresent(SubjectFollowReportDO::getReportType, reqVO.getReportType()) + .betweenIfPresent(SubjectFollowReportDO::getReporTime, reqVO.getReporTime()) + .betweenIfPresent(SubjectFollowReportDO::getFollowTime, reqVO.getFollowTime()) + .eqIfPresent(SubjectFollowReportDO::getBusinessId, reqVO.getBusinessId()) + .eqIfPresent(SubjectFollowReportDO::getAnnex, reqVO.getAnnex()) + .eqIfPresent(SubjectFollowReportDO::getDescription, reqVO.getDescription()) + .eqIfPresent(SubjectFollowReportDO::getReadOverUser, reqVO.getReadOverUser()) + .eqIfPresent(SubjectFollowReportDO::getMakeCopyUser, reqVO.getMakeCopyUser()) + .betweenIfPresent(SubjectFollowReportDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(SubjectFollowReportDO::getId)); + } + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/dal/mysql/subjecttransfer/SubjectTransferMapper.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/dal/mysql/subjecttransfer/SubjectTransferMapper.java new file mode 100644 index 00000000..d567009e --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/dal/mysql/subjecttransfer/SubjectTransferMapper.java @@ -0,0 +1,44 @@ +package com.yunxi.scm.module.xxjj.dal.mysql.subjecttransfer; + +import java.util.*; + +import com.yunxi.scm.framework.common.pojo.PageResult; +import com.yunxi.scm.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.yunxi.scm.framework.mybatis.core.mapper.BaseMapperX; +import com.yunxi.scm.module.xxjj.dal.dataobject.subjecttransfer.SubjectTransferDO; +import org.apache.ibatis.annotations.Mapper; +import com.yunxi.scm.module.xxjj.controller.admin.subjecttransfer.vo.*; + +/** + * 主体负责人转移 Mapper + * + * @author 长江云息 + */ +@Mapper +public interface SubjectTransferMapper extends BaseMapperX { + + default PageResult selectPage(SubjectTransferPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(SubjectTransferDO::getBusinessId, reqVO.getBusinessId()) + .eqIfPresent(SubjectTransferDO::getBusinessType, reqVO.getBusinessType()) + .eqIfPresent(SubjectTransferDO::getUserId1, reqVO.getUserId1()) + .eqIfPresent(SubjectTransferDO::getUserId2, reqVO.getUserId2()) + .eqIfPresent(SubjectTransferDO::getTransferType, reqVO.getTransferType()) + .eqIfPresent(SubjectTransferDO::getRemark, reqVO.getRemark()) + .betweenIfPresent(SubjectTransferDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(SubjectTransferDO::getId)); + } + + default List selectList(SubjectTransferExportReqVO reqVO) { + return selectList(new LambdaQueryWrapperX() + .eqIfPresent(SubjectTransferDO::getBusinessId, reqVO.getBusinessId()) + .eqIfPresent(SubjectTransferDO::getBusinessType, reqVO.getBusinessType()) + .eqIfPresent(SubjectTransferDO::getUserId1, reqVO.getUserId1()) + .eqIfPresent(SubjectTransferDO::getUserId2, reqVO.getUserId2()) + .eqIfPresent(SubjectTransferDO::getTransferType, reqVO.getTransferType()) + .eqIfPresent(SubjectTransferDO::getRemark, reqVO.getRemark()) + .betweenIfPresent(SubjectTransferDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(SubjectTransferDO::getId)); + } + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/service/subjectfollowmanagement/SubjectFollowManagementServiceImpl.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/service/subjectfollowmanagement/SubjectFollowManagementServiceImpl.java index 5430f6a0..dc60c129 100644 --- a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/service/subjectfollowmanagement/SubjectFollowManagementServiceImpl.java +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/service/subjectfollowmanagement/SubjectFollowManagementServiceImpl.java @@ -1,5 +1,12 @@ package com.yunxi.scm.module.xxjj.service.subjectfollowmanagement; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.yunxi.scm.module.system.dal.dataobject.user.AdminUserDO; +import com.yunxi.scm.module.system.service.user.AdminUserService; +import com.yunxi.scm.module.xxjj.dal.dataobject.subjectbasic.SubjectBasicDO; +import com.yunxi.scm.module.xxjj.service.subjectbasic.SubjectBasicService; +import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; import org.springframework.validation.annotation.Validated; @@ -26,11 +33,16 @@ public class SubjectFollowManagementServiceImpl implements SubjectFollowManageme @Resource private SubjectFollowManagementMapper subjectFollowManagementMapper; + @Resource + private SubjectBasicService subjectBasicService; + @Resource + private AdminUserService adminUserService; @Override public Long createSubjectFollowManagement(SubjectFollowManagementCreateReqVO createReqVO) { // 插入 SubjectFollowManagementDO subjectFollowManagement = SubjectFollowManagementConvert.INSTANCE.convert(createReqVO); + subjectFollowManagement.setRemindMode(StringUtils.join(createReqVO.getRemindModeArr(), ",")); subjectFollowManagementMapper.insert(subjectFollowManagement); // 返回 return subjectFollowManagement.getId(); @@ -42,6 +54,7 @@ public class SubjectFollowManagementServiceImpl implements SubjectFollowManageme validateSubjectFollowManagementExists(updateReqVO.getId()); // 更新 SubjectFollowManagementDO updateObj = SubjectFollowManagementConvert.INSTANCE.convert(updateReqVO); + updateObj.setRemindMode(StringUtils.join(updateReqVO.getRemindModeArr(), ",")); subjectFollowManagementMapper.updateById(updateObj); } @@ -71,7 +84,29 @@ public class SubjectFollowManagementServiceImpl implements SubjectFollowManageme @Override public PageResult getSubjectFollowManagementPage(SubjectFollowManagementPageReqVO pageReqVO) { - return subjectFollowManagementMapper.selectPage(pageReqVO); + + IPage page = new Page<>(pageReqVO.getPageNo(), pageReqVO.getPageSize()); + subjectFollowManagementMapper.selectPage02(page, pageReqVO); + return new PageResult<>(page.getRecords(), page.getTotal()); + + + + /*PageResult pageResult = subjectFollowManagementMapper.selectPage(pageReqVO); + List list = pageResult.getList(); + for (SubjectFollowManagementDO subjectFollowManagementDO : list) { + SubjectBasicDO subjectBasicDO = subjectBasicService.getSubjectBasic(subjectFollowManagementDO.getBusinessId()); + subjectFollowManagementDO.setSubjectBasicDO(subjectBasicDO); + if(StringUtils.isNotEmpty(subjectFollowManagementDO.getCreator())){ + AdminUserDO adminUserDO = adminUserService.getUser(Long.parseLong(subjectFollowManagementDO.getCreator())); + subjectFollowManagementDO.setCreatorName(adminUserDO.getNickname()); + } + if(StringUtils.isNotEmpty(subjectFollowManagementDO.getUpdater())){ + AdminUserDO adminUserDO = adminUserService.getUser(Long.parseLong(subjectFollowManagementDO.getUpdater())); + subjectFollowManagementDO.setUpdaterName(adminUserDO.getNickname()); + } + } + pageResult.setList(list); + return pageResult;*/ } @Override diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/service/subjectfollowreport/SubjectFollowReportService.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/service/subjectfollowreport/SubjectFollowReportService.java new file mode 100644 index 00000000..f56dba78 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/service/subjectfollowreport/SubjectFollowReportService.java @@ -0,0 +1,70 @@ +package com.yunxi.scm.module.xxjj.service.subjectfollowreport; + +import java.util.*; +import javax.validation.*; +import com.yunxi.scm.module.xxjj.controller.admin.subjectfollowreport.vo.*; +import com.yunxi.scm.module.xxjj.dal.dataobject.subjectfollowreport.SubjectFollowReportDO; +import com.yunxi.scm.framework.common.pojo.PageResult; + +/** + * 跟进报告管理 Service 接口 + * + * @author 长江云息 + */ +public interface SubjectFollowReportService { + + /** + * 创建跟进报告管理 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createSubjectFollowReport(@Valid SubjectFollowReportCreateReqVO createReqVO); + + /** + * 更新跟进报告管理 + * + * @param updateReqVO 更新信息 + */ + void updateSubjectFollowReport(@Valid SubjectFollowReportUpdateReqVO updateReqVO); + + /** + * 删除跟进报告管理 + * + * @param id 编号 + */ + void deleteSubjectFollowReport(Long id); + + /** + * 获得跟进报告管理 + * + * @param id 编号 + * @return 跟进报告管理 + */ + SubjectFollowReportDO getSubjectFollowReport(Long id); + + /** + * 获得跟进报告管理列表 + * + * @param ids 编号 + * @return 跟进报告管理列表 + */ + List getSubjectFollowReportList(Collection ids); + + /** + * 获得跟进报告管理分页 + * + * @param pageReqVO 分页查询 + * @return 跟进报告管理分页 + */ + PageResult getSubjectFollowReportPage(SubjectFollowReportPageReqVO pageReqVO); + + /** + * 获得跟进报告管理列表, 用于 Excel 导出 + * + * @param exportReqVO 查询条件 + * @return 跟进报告管理列表 + */ + List getSubjectFollowReportList(SubjectFollowReportExportReqVO exportReqVO); + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/service/subjectfollowreport/SubjectFollowReportServiceImpl.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/service/subjectfollowreport/SubjectFollowReportServiceImpl.java new file mode 100644 index 00000000..7c56a95a --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/service/subjectfollowreport/SubjectFollowReportServiceImpl.java @@ -0,0 +1,82 @@ +package com.yunxi.scm.module.xxjj.service.subjectfollowreport; + +import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; + +import java.util.*; +import com.yunxi.scm.module.xxjj.controller.admin.subjectfollowreport.vo.*; +import com.yunxi.scm.module.xxjj.dal.dataobject.subjectfollowreport.SubjectFollowReportDO; +import com.yunxi.scm.framework.common.pojo.PageResult; + +import com.yunxi.scm.module.xxjj.convert.subjectfollowreport.SubjectFollowReportConvert; +import com.yunxi.scm.module.xxjj.dal.mysql.subjectfollowreport.SubjectFollowReportMapper; + +import static com.yunxi.scm.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.yunxi.scm.module.xxjj.enums.ErrorCodeConstants.*; + +/** + * 跟进报告管理 Service 实现类 + * + * @author 长江云息 + */ +@Service +@Validated +public class SubjectFollowReportServiceImpl implements SubjectFollowReportService { + + @Resource + private SubjectFollowReportMapper subjectFollowReportMapper; + + @Override + public Long createSubjectFollowReport(SubjectFollowReportCreateReqVO createReqVO) { + // 插入 + SubjectFollowReportDO subjectFollowReport = SubjectFollowReportConvert.INSTANCE.convert(createReqVO); + subjectFollowReportMapper.insert(subjectFollowReport); + // 返回 + return subjectFollowReport.getId(); + } + + @Override + public void updateSubjectFollowReport(SubjectFollowReportUpdateReqVO updateReqVO) { + // 校验存在 + validateSubjectFollowReportExists(updateReqVO.getId()); + // 更新 + SubjectFollowReportDO updateObj = SubjectFollowReportConvert.INSTANCE.convert(updateReqVO); + subjectFollowReportMapper.updateById(updateObj); + } + + @Override + public void deleteSubjectFollowReport(Long id) { + // 校验存在 + validateSubjectFollowReportExists(id); + // 删除 + subjectFollowReportMapper.deleteById(id); + } + + private void validateSubjectFollowReportExists(Long id) { + if (subjectFollowReportMapper.selectById(id) == null) { + //throw exception(SUBJECT_FOLLOW_REPORT_NOT_EXISTS); + } + } + + @Override + public SubjectFollowReportDO getSubjectFollowReport(Long id) { + return subjectFollowReportMapper.selectById(id); + } + + @Override + public List getSubjectFollowReportList(Collection ids) { + return subjectFollowReportMapper.selectBatchIds(ids); + } + + @Override + public PageResult getSubjectFollowReportPage(SubjectFollowReportPageReqVO pageReqVO) { + return subjectFollowReportMapper.selectPage(pageReqVO); + } + + @Override + public List getSubjectFollowReportList(SubjectFollowReportExportReqVO exportReqVO) { + return subjectFollowReportMapper.selectList(exportReqVO); + } + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/service/subjecttransfer/SubjectTransferService.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/service/subjecttransfer/SubjectTransferService.java new file mode 100644 index 00000000..4d8be940 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/service/subjecttransfer/SubjectTransferService.java @@ -0,0 +1,70 @@ +package com.yunxi.scm.module.xxjj.service.subjecttransfer; + +import java.util.*; +import javax.validation.*; +import com.yunxi.scm.module.xxjj.controller.admin.subjecttransfer.vo.*; +import com.yunxi.scm.module.xxjj.dal.dataobject.subjecttransfer.SubjectTransferDO; +import com.yunxi.scm.framework.common.pojo.PageResult; + +/** + * 主体负责人转移 Service 接口 + * + * @author 长江云息 + */ +public interface SubjectTransferService { + + /** + * 创建主体负责人转移 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createSubjectTransfer(@Valid SubjectTransferCreateReqVO createReqVO); + + /** + * 更新主体负责人转移 + * + * @param updateReqVO 更新信息 + */ + void updateSubjectTransfer(@Valid SubjectTransferUpdateReqVO updateReqVO); + + /** + * 删除主体负责人转移 + * + * @param id 编号 + */ + void deleteSubjectTransfer(Long id); + + /** + * 获得主体负责人转移 + * + * @param id 编号 + * @return 主体负责人转移 + */ + SubjectTransferDO getSubjectTransfer(Long id); + + /** + * 获得主体负责人转移列表 + * + * @param ids 编号 + * @return 主体负责人转移列表 + */ + List getSubjectTransferList(Collection ids); + + /** + * 获得主体负责人转移分页 + * + * @param pageReqVO 分页查询 + * @return 主体负责人转移分页 + */ + PageResult getSubjectTransferPage(SubjectTransferPageReqVO pageReqVO); + + /** + * 获得主体负责人转移列表, 用于 Excel 导出 + * + * @param exportReqVO 查询条件 + * @return 主体负责人转移列表 + */ + List getSubjectTransferList(SubjectTransferExportReqVO exportReqVO); + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/service/subjecttransfer/SubjectTransferServiceImpl.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/service/subjecttransfer/SubjectTransferServiceImpl.java new file mode 100644 index 00000000..3df1af52 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/service/subjecttransfer/SubjectTransferServiceImpl.java @@ -0,0 +1,87 @@ +package com.yunxi.scm.module.xxjj.service.subjecttransfer; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; + +import java.util.*; +import com.yunxi.scm.module.xxjj.controller.admin.subjecttransfer.vo.*; +import com.yunxi.scm.module.xxjj.dal.dataobject.subjecttransfer.SubjectTransferDO; +import com.yunxi.scm.framework.common.pojo.PageResult; + +import com.yunxi.scm.module.xxjj.convert.subjecttransfer.SubjectTransferConvert; +import com.yunxi.scm.module.xxjj.dal.mysql.subjecttransfer.SubjectTransferMapper; + +import static com.yunxi.scm.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.yunxi.scm.module.xxjj.enums.ErrorCodeConstants.*; + +/** + * 主体负责人转移 Service 实现类 + * + * @author 长江云息 + */ +@Service +@Validated +public class SubjectTransferServiceImpl implements SubjectTransferService { + + @Resource + private SubjectTransferMapper subjectTransferMapper; + + @Override + public Long createSubjectTransfer(SubjectTransferCreateReqVO createReqVO) { + String[] businessIds = createReqVO.getBusinessIds().split(","); + for (int i=0; i< businessIds.length; i++){ + SubjectTransferDO subjectTransfer = SubjectTransferConvert.INSTANCE.convert(createReqVO); + subjectTransfer.setBusinessId(Long.parseLong(businessIds[i])); + subjectTransfer.setUserId1(Long.parseLong(createReqVO.getUserId1s().split(",")[i])); + subjectTransfer.setTransferType((StringUtils.join(createReqVO.getTransferTypeArr(), ","))); + subjectTransferMapper.insert(subjectTransfer); + } + return 0L; + } + + @Override + public void updateSubjectTransfer(SubjectTransferUpdateReqVO updateReqVO) { + // 校验存在 + validateSubjectTransferExists(updateReqVO.getId()); + // 更新 + SubjectTransferDO updateObj = SubjectTransferConvert.INSTANCE.convert(updateReqVO); + subjectTransferMapper.updateById(updateObj); + } + + @Override + public void deleteSubjectTransfer(Long id) { + // 校验存在 + validateSubjectTransferExists(id); + // 删除 + subjectTransferMapper.deleteById(id); + } + + private void validateSubjectTransferExists(Long id) { + if (subjectTransferMapper.selectById(id) == null) { + throw exception(SUBJECT_TRANSFER_NOT_EXISTS); + } + } + + @Override + public SubjectTransferDO getSubjectTransfer(Long id) { + return subjectTransferMapper.selectById(id); + } + + @Override + public List getSubjectTransferList(Collection ids) { + return subjectTransferMapper.selectBatchIds(ids); + } + + @Override + public PageResult getSubjectTransferPage(SubjectTransferPageReqVO pageReqVO) { + return subjectTransferMapper.selectPage(pageReqVO); + } + + @Override + public List getSubjectTransferList(SubjectTransferExportReqVO exportReqVO) { + return subjectTransferMapper.selectList(exportReqVO); + } + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/resources/mapper/subjectfollowmanagement/SubjectFollowManagementMapper.xml b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/resources/mapper/subjectfollowmanagement/SubjectFollowManagementMapper.xml index 3066e8d1..276e7e32 100644 --- a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/resources/mapper/subjectfollowmanagement/SubjectFollowManagementMapper.xml +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/resources/mapper/subjectfollowmanagement/SubjectFollowManagementMapper.xml @@ -8,5 +8,29 @@ 代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/ --> - + diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/resources/mapper/subjectfollowreport/SubjectFollowReportMapper.xml b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/resources/mapper/subjectfollowreport/SubjectFollowReportMapper.xml new file mode 100644 index 00000000..2fbe3542 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/resources/mapper/subjectfollowreport/SubjectFollowReportMapper.xml @@ -0,0 +1,12 @@ + + + + + + + diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/resources/mapper/subjecttransfer/SubjectTransferMapper.xml b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/resources/mapper/subjecttransfer/SubjectTransferMapper.xml new file mode 100644 index 00000000..1a73f457 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/resources/mapper/subjecttransfer/SubjectTransferMapper.xml @@ -0,0 +1,12 @@ + + + + + + + diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/test/java/com/yunxi/scm/module/xxjj/service/subjectfollowreport/SubjectFollowReportServiceImplTest.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/test/java/com/yunxi/scm/module/xxjj/service/subjectfollowreport/SubjectFollowReportServiceImplTest.java new file mode 100644 index 00000000..e159dce7 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/test/java/com/yunxi/scm/module/xxjj/service/subjectfollowreport/SubjectFollowReportServiceImplTest.java @@ -0,0 +1,215 @@ +package com.yunxi.scm.module.xxjj.service.subjectfollowreport; + +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.mock.mockito.MockBean; + +import javax.annotation.Resource; + +import com.yunxi.scm.framework.test.core.ut.BaseDbUnitTest; + +import com.yunxi.scm.module.xxjj.controller.admin.subjectfollowreport.vo.*; +import com.yunxi.scm.module.xxjj.dal.dataobject.subjectfollowreport.SubjectFollowReportDO; +import com.yunxi.scm.module.xxjj.dal.mysql.subjectfollowreport.SubjectFollowReportMapper; +import com.yunxi.scm.framework.common.pojo.PageResult; + +import javax.annotation.Resource; +import org.springframework.context.annotation.Import; +import java.util.*; +import java.time.LocalDateTime; + +import static cn.hutool.core.util.RandomUtil.*; +import static com.yunxi.scm.module.xxjj.enums.ErrorCodeConstants.*; +import static com.yunxi.scm.framework.test.core.util.AssertUtils.*; +import static com.yunxi.scm.framework.test.core.util.RandomUtils.*; +import static com.yunxi.scm.framework.common.util.date.LocalDateTimeUtils.*; +import static com.yunxi.scm.framework.common.util.object.ObjectUtils.*; +import static com.yunxi.scm.framework.common.util.date.DateUtils.*; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +/** + * {@link SubjectFollowReportServiceImpl} 的单元测试类 + * + * @author 长江云息 + */ +@Import(SubjectFollowReportServiceImpl.class) +public class SubjectFollowReportServiceImplTest extends BaseDbUnitTest { + + @Resource + private SubjectFollowReportServiceImpl subjectFollowReportService; + + @Resource + private SubjectFollowReportMapper subjectFollowReportMapper; + + @Test + public void testCreateSubjectFollowReport_success() { + // 准备参数 + SubjectFollowReportCreateReqVO reqVO = randomPojo(SubjectFollowReportCreateReqVO.class); + + // 调用 + Long subjectFollowReportId = subjectFollowReportService.createSubjectFollowReport(reqVO); + // 断言 + assertNotNull(subjectFollowReportId); + // 校验记录的属性是否正确 + SubjectFollowReportDO subjectFollowReport = subjectFollowReportMapper.selectById(subjectFollowReportId); + assertPojoEquals(reqVO, subjectFollowReport); + } + + @Test + public void testUpdateSubjectFollowReport_success() { + // mock 数据 + SubjectFollowReportDO dbSubjectFollowReport = randomPojo(SubjectFollowReportDO.class); + subjectFollowReportMapper.insert(dbSubjectFollowReport);// @Sql: 先插入出一条存在的数据 + // 准备参数 + SubjectFollowReportUpdateReqVO reqVO = randomPojo(SubjectFollowReportUpdateReqVO.class, o -> { + o.setId(dbSubjectFollowReport.getId()); // 设置更新的 ID + }); + + // 调用 + subjectFollowReportService.updateSubjectFollowReport(reqVO); + // 校验是否更新正确 + SubjectFollowReportDO subjectFollowReport = subjectFollowReportMapper.selectById(reqVO.getId()); // 获取最新的 + assertPojoEquals(reqVO, subjectFollowReport); + } + + @Test + public void testUpdateSubjectFollowReport_notExists() { + // 准备参数 + SubjectFollowReportUpdateReqVO reqVO = randomPojo(SubjectFollowReportUpdateReqVO.class); + + // 调用, 并断言异常 + assertServiceException(() -> subjectFollowReportService.updateSubjectFollowReport(reqVO), SUBJECT_FOLLOW_REPORT_NOT_EXISTS); + } + + @Test + public void testDeleteSubjectFollowReport_success() { + // mock 数据 + SubjectFollowReportDO dbSubjectFollowReport = randomPojo(SubjectFollowReportDO.class); + subjectFollowReportMapper.insert(dbSubjectFollowReport);// @Sql: 先插入出一条存在的数据 + // 准备参数 + Long id = dbSubjectFollowReport.getId(); + + // 调用 + subjectFollowReportService.deleteSubjectFollowReport(id); + // 校验数据不存在了 + assertNull(subjectFollowReportMapper.selectById(id)); + } + + @Test + public void testDeleteSubjectFollowReport_notExists() { + // 准备参数 + Long id = randomLongId(); + + // 调用, 并断言异常 + assertServiceException(() -> subjectFollowReportService.deleteSubjectFollowReport(id), SUBJECT_FOLLOW_REPORT_NOT_EXISTS); + } + + @Test + @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 + public void testGetSubjectFollowReportPage() { + // mock 数据 + SubjectFollowReportDO dbSubjectFollowReport = randomPojo(SubjectFollowReportDO.class, o -> { // 等会查询到 + o.setReportType(null); + o.setReporTime(null); + o.setFollowTime(null); + o.setBusinessId(null); + o.setAnnex(null); + o.setDescription(null); + o.setReadOverUser(null); + o.setMakeCopyUser(null); + o.setCreateTime(null); + }); + subjectFollowReportMapper.insert(dbSubjectFollowReport); + // 测试 reportType 不匹配 + subjectFollowReportMapper.insert(cloneIgnoreId(dbSubjectFollowReport, o -> o.setReportType(null))); + // 测试 reporTime 不匹配 + subjectFollowReportMapper.insert(cloneIgnoreId(dbSubjectFollowReport, o -> o.setReporTime(null))); + // 测试 followTime 不匹配 + subjectFollowReportMapper.insert(cloneIgnoreId(dbSubjectFollowReport, o -> o.setFollowTime(null))); + // 测试 businessId 不匹配 + subjectFollowReportMapper.insert(cloneIgnoreId(dbSubjectFollowReport, o -> o.setBusinessId(null))); + // 测试 annex 不匹配 + subjectFollowReportMapper.insert(cloneIgnoreId(dbSubjectFollowReport, o -> o.setAnnex(null))); + // 测试 description 不匹配 + subjectFollowReportMapper.insert(cloneIgnoreId(dbSubjectFollowReport, o -> o.setDescription(null))); + // 测试 readOverUser 不匹配 + subjectFollowReportMapper.insert(cloneIgnoreId(dbSubjectFollowReport, o -> o.setReadOverUser(null))); + // 测试 makeCopyUser 不匹配 + subjectFollowReportMapper.insert(cloneIgnoreId(dbSubjectFollowReport, o -> o.setMakeCopyUser(null))); + // 测试 createTime 不匹配 + subjectFollowReportMapper.insert(cloneIgnoreId(dbSubjectFollowReport, o -> o.setCreateTime(null))); + // 准备参数 + SubjectFollowReportPageReqVO reqVO = new SubjectFollowReportPageReqVO(); + reqVO.setReportType(null); + reqVO.setReporTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); + reqVO.setFollowTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); + reqVO.setBusinessId(null); + reqVO.setAnnex(null); + reqVO.setDescription(null); + reqVO.setReadOverUser(null); + reqVO.setMakeCopyUser(null); + reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); + + // 调用 + PageResult pageResult = subjectFollowReportService.getSubjectFollowReportPage(reqVO); + // 断言 + assertEquals(1, pageResult.getTotal()); + assertEquals(1, pageResult.getList().size()); + assertPojoEquals(dbSubjectFollowReport, pageResult.getList().get(0)); + } + + @Test + @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 + public void testGetSubjectFollowReportList() { + // mock 数据 + SubjectFollowReportDO dbSubjectFollowReport = randomPojo(SubjectFollowReportDO.class, o -> { // 等会查询到 + o.setReportType(null); + o.setReporTime(null); + o.setFollowTime(null); + o.setBusinessId(null); + o.setAnnex(null); + o.setDescription(null); + o.setReadOverUser(null); + o.setMakeCopyUser(null); + o.setCreateTime(null); + }); + subjectFollowReportMapper.insert(dbSubjectFollowReport); + // 测试 reportType 不匹配 + subjectFollowReportMapper.insert(cloneIgnoreId(dbSubjectFollowReport, o -> o.setReportType(null))); + // 测试 reporTime 不匹配 + subjectFollowReportMapper.insert(cloneIgnoreId(dbSubjectFollowReport, o -> o.setReporTime(null))); + // 测试 followTime 不匹配 + subjectFollowReportMapper.insert(cloneIgnoreId(dbSubjectFollowReport, o -> o.setFollowTime(null))); + // 测试 businessId 不匹配 + subjectFollowReportMapper.insert(cloneIgnoreId(dbSubjectFollowReport, o -> o.setBusinessId(null))); + // 测试 annex 不匹配 + subjectFollowReportMapper.insert(cloneIgnoreId(dbSubjectFollowReport, o -> o.setAnnex(null))); + // 测试 description 不匹配 + subjectFollowReportMapper.insert(cloneIgnoreId(dbSubjectFollowReport, o -> o.setDescription(null))); + // 测试 readOverUser 不匹配 + subjectFollowReportMapper.insert(cloneIgnoreId(dbSubjectFollowReport, o -> o.setReadOverUser(null))); + // 测试 makeCopyUser 不匹配 + subjectFollowReportMapper.insert(cloneIgnoreId(dbSubjectFollowReport, o -> o.setMakeCopyUser(null))); + // 测试 createTime 不匹配 + subjectFollowReportMapper.insert(cloneIgnoreId(dbSubjectFollowReport, o -> o.setCreateTime(null))); + // 准备参数 + SubjectFollowReportExportReqVO reqVO = new SubjectFollowReportExportReqVO(); + reqVO.setReportType(null); + reqVO.setReporTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); + reqVO.setFollowTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); + reqVO.setBusinessId(null); + reqVO.setAnnex(null); + reqVO.setDescription(null); + reqVO.setReadOverUser(null); + reqVO.setMakeCopyUser(null); + reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); + + // 调用 + List list = subjectFollowReportService.getSubjectFollowReportList(reqVO); + // 断言 + assertEquals(1, list.size()); + assertPojoEquals(dbSubjectFollowReport, list.get(0)); + } + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/test/java/com/yunxi/scm/module/xxjj/service/subjecttransfer/SubjectTransferServiceImplTest.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/test/java/com/yunxi/scm/module/xxjj/service/subjecttransfer/SubjectTransferServiceImplTest.java new file mode 100644 index 00000000..3405788f --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/test/java/com/yunxi/scm/module/xxjj/service/subjecttransfer/SubjectTransferServiceImplTest.java @@ -0,0 +1,199 @@ +package com.yunxi.scm.module.xxjj.service.subjecttransfer; + +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.mock.mockito.MockBean; + +import javax.annotation.Resource; + +import com.yunxi.scm.framework.test.core.ut.BaseDbUnitTest; + +import com.yunxi.scm.module.xxjj.controller.admin.subjecttransfer.vo.*; +import com.yunxi.scm.module.xxjj.dal.dataobject.subjecttransfer.SubjectTransferDO; +import com.yunxi.scm.module.xxjj.dal.mysql.subjecttransfer.SubjectTransferMapper; +import com.yunxi.scm.framework.common.pojo.PageResult; + +import javax.annotation.Resource; +import org.springframework.context.annotation.Import; +import java.util.*; +import java.time.LocalDateTime; + +import static cn.hutool.core.util.RandomUtil.*; +import static com.yunxi.scm.module.xxjj.enums.ErrorCodeConstants.*; +import static com.yunxi.scm.framework.test.core.util.AssertUtils.*; +import static com.yunxi.scm.framework.test.core.util.RandomUtils.*; +import static com.yunxi.scm.framework.common.util.date.LocalDateTimeUtils.*; +import static com.yunxi.scm.framework.common.util.object.ObjectUtils.*; +import static com.yunxi.scm.framework.common.util.date.DateUtils.*; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +/** + * {@link SubjectTransferServiceImpl} 的单元测试类 + * + * @author 长江云息 + */ +@Import(SubjectTransferServiceImpl.class) +public class SubjectTransferServiceImplTest extends BaseDbUnitTest { + + @Resource + private SubjectTransferServiceImpl subjectTransferService; + + @Resource + private SubjectTransferMapper subjectTransferMapper; + + @Test + public void testCreateSubjectTransfer_success() { + // 准备参数 + SubjectTransferCreateReqVO reqVO = randomPojo(SubjectTransferCreateReqVO.class); + + // 调用 + Long subjectTransferId = subjectTransferService.createSubjectTransfer(reqVO); + // 断言 + assertNotNull(subjectTransferId); + // 校验记录的属性是否正确 + SubjectTransferDO subjectTransfer = subjectTransferMapper.selectById(subjectTransferId); + assertPojoEquals(reqVO, subjectTransfer); + } + + @Test + public void testUpdateSubjectTransfer_success() { + // mock 数据 + SubjectTransferDO dbSubjectTransfer = randomPojo(SubjectTransferDO.class); + subjectTransferMapper.insert(dbSubjectTransfer);// @Sql: 先插入出一条存在的数据 + // 准备参数 + SubjectTransferUpdateReqVO reqVO = randomPojo(SubjectTransferUpdateReqVO.class, o -> { + o.setId(dbSubjectTransfer.getId()); // 设置更新的 ID + }); + + // 调用 + subjectTransferService.updateSubjectTransfer(reqVO); + // 校验是否更新正确 + SubjectTransferDO subjectTransfer = subjectTransferMapper.selectById(reqVO.getId()); // 获取最新的 + assertPojoEquals(reqVO, subjectTransfer); + } + + @Test + public void testUpdateSubjectTransfer_notExists() { + // 准备参数 + SubjectTransferUpdateReqVO reqVO = randomPojo(SubjectTransferUpdateReqVO.class); + + // 调用, 并断言异常 + assertServiceException(() -> subjectTransferService.updateSubjectTransfer(reqVO), SUBJECT_TRANSFER_NOT_EXISTS); + } + + @Test + public void testDeleteSubjectTransfer_success() { + // mock 数据 + SubjectTransferDO dbSubjectTransfer = randomPojo(SubjectTransferDO.class); + subjectTransferMapper.insert(dbSubjectTransfer);// @Sql: 先插入出一条存在的数据 + // 准备参数 + Long id = dbSubjectTransfer.getId(); + + // 调用 + subjectTransferService.deleteSubjectTransfer(id); + // 校验数据不存在了 + assertNull(subjectTransferMapper.selectById(id)); + } + + @Test + public void testDeleteSubjectTransfer_notExists() { + // 准备参数 + Long id = randomLongId(); + + // 调用, 并断言异常 + assertServiceException(() -> subjectTransferService.deleteSubjectTransfer(id), SUBJECT_TRANSFER_NOT_EXISTS); + } + + @Test + @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 + public void testGetSubjectTransferPage() { + // mock 数据 + SubjectTransferDO dbSubjectTransfer = randomPojo(SubjectTransferDO.class, o -> { // 等会查询到 + o.setBusinessId(null); + o.setBusinessType(null); + o.setUserId1(null); + o.setUserId2(null); + o.setTransferType(null); + o.setRemark(null); + o.setCreateTime(null); + }); + subjectTransferMapper.insert(dbSubjectTransfer); + // 测试 businessId 不匹配 + subjectTransferMapper.insert(cloneIgnoreId(dbSubjectTransfer, o -> o.setBusinessId(null))); + // 测试 businessType 不匹配 + subjectTransferMapper.insert(cloneIgnoreId(dbSubjectTransfer, o -> o.setBusinessType(null))); + // 测试 userId1 不匹配 + subjectTransferMapper.insert(cloneIgnoreId(dbSubjectTransfer, o -> o.setUserId1(null))); + // 测试 userId2 不匹配 + subjectTransferMapper.insert(cloneIgnoreId(dbSubjectTransfer, o -> o.setUserId2(null))); + // 测试 transferType 不匹配 + subjectTransferMapper.insert(cloneIgnoreId(dbSubjectTransfer, o -> o.setTransferType(null))); + // 测试 remark 不匹配 + subjectTransferMapper.insert(cloneIgnoreId(dbSubjectTransfer, o -> o.setRemark(null))); + // 测试 createTime 不匹配 + subjectTransferMapper.insert(cloneIgnoreId(dbSubjectTransfer, o -> o.setCreateTime(null))); + // 准备参数 + SubjectTransferPageReqVO reqVO = new SubjectTransferPageReqVO(); + reqVO.setBusinessId(null); + reqVO.setBusinessType(null); + reqVO.setUserId1(null); + reqVO.setUserId2(null); + reqVO.setTransferType(null); + reqVO.setRemark(null); + reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); + + // 调用 + PageResult pageResult = subjectTransferService.getSubjectTransferPage(reqVO); + // 断言 + assertEquals(1, pageResult.getTotal()); + assertEquals(1, pageResult.getList().size()); + assertPojoEquals(dbSubjectTransfer, pageResult.getList().get(0)); + } + + @Test + @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 + public void testGetSubjectTransferList() { + // mock 数据 + SubjectTransferDO dbSubjectTransfer = randomPojo(SubjectTransferDO.class, o -> { // 等会查询到 + o.setBusinessId(null); + o.setBusinessType(null); + o.setUserId1(null); + o.setUserId2(null); + o.setTransferType(null); + o.setRemark(null); + o.setCreateTime(null); + }); + subjectTransferMapper.insert(dbSubjectTransfer); + // 测试 businessId 不匹配 + subjectTransferMapper.insert(cloneIgnoreId(dbSubjectTransfer, o -> o.setBusinessId(null))); + // 测试 businessType 不匹配 + subjectTransferMapper.insert(cloneIgnoreId(dbSubjectTransfer, o -> o.setBusinessType(null))); + // 测试 userId1 不匹配 + subjectTransferMapper.insert(cloneIgnoreId(dbSubjectTransfer, o -> o.setUserId1(null))); + // 测试 userId2 不匹配 + subjectTransferMapper.insert(cloneIgnoreId(dbSubjectTransfer, o -> o.setUserId2(null))); + // 测试 transferType 不匹配 + subjectTransferMapper.insert(cloneIgnoreId(dbSubjectTransfer, o -> o.setTransferType(null))); + // 测试 remark 不匹配 + subjectTransferMapper.insert(cloneIgnoreId(dbSubjectTransfer, o -> o.setRemark(null))); + // 测试 createTime 不匹配 + subjectTransferMapper.insert(cloneIgnoreId(dbSubjectTransfer, o -> o.setCreateTime(null))); + // 准备参数 + SubjectTransferExportReqVO reqVO = new SubjectTransferExportReqVO(); + reqVO.setBusinessId(null); + reqVO.setBusinessType(null); + reqVO.setUserId1(null); + reqVO.setUserId2(null); + reqVO.setTransferType(null); + reqVO.setRemark(null); + reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); + + // 调用 + List list = subjectTransferService.getSubjectTransferList(reqVO); + // 断言 + assertEquals(1, list.size()); + assertPojoEquals(dbSubjectTransfer, list.get(0)); + } + +} diff --git a/yunxi-ui-admin-vue3/src/api/xxjj/subjectFollowManagement/index.ts b/yunxi-ui-admin-vue3/src/api/xxjj/subjectFollowManagement/index.ts new file mode 100644 index 00000000..a787a9a8 --- /dev/null +++ b/yunxi-ui-admin-vue3/src/api/xxjj/subjectFollowManagement/index.ts @@ -0,0 +1,48 @@ +import request from '@/config/axios' + +export interface SubjectFollowManagementVO { + id: number + businessId: number + businessType: string + title: string + idCard: string + startTime: Date + endTime: Date + responsible: string + partake: string + mark: string + urgency: string + remindType: string + description: string + annex: string +} + +// 查询主体跟进管理列表 +export const getSubjectFollowManagementPage = async (params) => { + return await request.get({ url: `/xxjj/subject-follow-management/page`, params }) +} + +// 查询主体跟进管理详情 +export const getSubjectFollowManagement = async (id: number) => { + return await request.get({ url: `/xxjj/subject-follow-management/get?id=` + id }) +} + +// 新增主体跟进管理 +export const createSubjectFollowManagement = async (data: SubjectFollowManagementVO) => { + return await request.post({ url: `/xxjj/subject-follow-management/create`, data }) +} + +// 修改主体跟进管理 +export const updateSubjectFollowManagement = async (data: SubjectFollowManagementVO) => { + return await request.put({ url: `/xxjj/subject-follow-management/update`, data }) +} + +// 删除主体跟进管理 +export const deleteSubjectFollowManagement = async (id: number) => { + return await request.delete({ url: `/xxjj/subject-follow-management/delete?id=` + id }) +} + +// 导出主体跟进管理 Excel +export const exportSubjectFollowManagement = async (params) => { + return await request.download({ url: `/xxjj/subject-follow-management/export-excel`, params }) +} diff --git a/yunxi-ui-admin-vue3/src/api/xxjj/subjectFollowReport/index.ts b/yunxi-ui-admin-vue3/src/api/xxjj/subjectFollowReport/index.ts new file mode 100644 index 00000000..88b6a799 --- /dev/null +++ b/yunxi-ui-admin-vue3/src/api/xxjj/subjectFollowReport/index.ts @@ -0,0 +1,43 @@ +import request from '@/config/axios' + +export interface SubjectFollowReportVO { + id: number + reportType: string + reporTime: Date + followTime: Date + businessId: number + annex: string + description: string + readOverUser: string + makeCopyUser: string +} + +// 查询跟进报告管理列表 +export const getSubjectFollowReportPage = async (params) => { + return await request.get({ url: `/xxjj/subject-follow-report/page`, params }) +} + +// 查询跟进报告管理详情 +export const getSubjectFollowReport = async (id: number) => { + return await request.get({ url: `/xxjj/subject-follow-report/get?id=` + id }) +} + +// 新增跟进报告管理 +export const createSubjectFollowReport = async (data: SubjectFollowReportVO) => { + return await request.post({ url: `/xxjj/subject-follow-report/create`, data }) +} + +// 修改跟进报告管理 +export const updateSubjectFollowReport = async (data: SubjectFollowReportVO) => { + return await request.put({ url: `/xxjj/subject-follow-report/update`, data }) +} + +// 删除跟进报告管理 +export const deleteSubjectFollowReport = async (id: number) => { + return await request.delete({ url: `/xxjj/subject-follow-report/delete?id=` + id }) +} + +// 导出跟进报告管理 Excel +export const exportSubjectFollowReport = async (params) => { + return await request.download({ url: `/xxjj/subject-follow-report/export-excel`, params }) +} diff --git a/yunxi-ui-admin-vue3/src/api/xxjj/subjectTransfer/index.ts b/yunxi-ui-admin-vue3/src/api/xxjj/subjectTransfer/index.ts new file mode 100644 index 00000000..ecd5ccd4 --- /dev/null +++ b/yunxi-ui-admin-vue3/src/api/xxjj/subjectTransfer/index.ts @@ -0,0 +1,41 @@ +import request from '@/config/axios' + +export interface SubjectTransferVO { + id: number + businessId: number + businessType: string + userId1: number + userId2: number + transferType: string + remark: string +} + +// 查询主体负责人转移列表 +export const getSubjectTransferPage = async (params) => { + return await request.get({ url: `/xxjj/subject-transfer/page`, params }) +} + +// 查询主体负责人转移详情 +export const getSubjectTransfer = async (id: number) => { + return await request.get({ url: `/xxjj/subject-transfer/get?id=` + id }) +} + +// 新增主体负责人转移 +export const createSubjectTransfer = async (data: SubjectTransferVO) => { + return await request.post({ url: `/xxjj/subject-transfer/create`, data }) +} + +// 修改主体负责人转移 +export const updateSubjectTransfer = async (data: SubjectTransferVO) => { + return await request.put({ url: `/xxjj/subject-transfer/update`, data }) +} + +// 删除主体负责人转移 +export const deleteSubjectTransfer = async (id: number) => { + return await request.delete({ url: `/xxjj/subject-transfer/delete?id=` + id }) +} + +// 导出主体负责人转移 Excel +export const exportSubjectTransfer = async (params) => { + return await request.download({ url: `/xxjj/subject-transfer/export-excel`, params }) +} diff --git a/yunxi-ui-admin-vue3/src/utils/dict.ts b/yunxi-ui-admin-vue3/src/utils/dict.ts index 79042c11..13a498e0 100644 --- a/yunxi-ui-admin-vue3/src/utils/dict.ts +++ b/yunxi-ui-admin-vue3/src/utils/dict.ts @@ -204,4 +204,9 @@ export enum DICT_TYPE { enterpriseNature = 'enterprise_nature', //客户星级 XUELI = 'XUELI', //学历 ENTERPRISE_OPERATE_TYPE = 'enterprise_operate_type', //客户星级 + customer_type = 'customer_type', //客户星级 + account_type = 'account_type', //客户星级 + urgent_level = 'urgent_level', //紧要程度 + task_remind = 'task_remind', //紧要程度 + remind_way = 'remind_way', //紧要程度 } diff --git a/yunxi-ui-admin-vue3/src/views/xxjj/subjectBasic/index.vue b/yunxi-ui-admin-vue3/src/views/xxjj/subjectBasic/index.vue index 244503d2..e313d141 100644 --- a/yunxi-ui-admin-vue3/src/views/xxjj/subjectBasic/index.vue +++ b/yunxi-ui-admin-vue3/src/views/xxjj/subjectBasic/index.vue @@ -9,23 +9,38 @@ + + + + + - + + + + + + + + + + 搜索 @@ -41,12 +56,23 @@ - 新增 + 新建客户 + + + 新建任务 + + + 转移客户 - 导出 + + 导入 + + @@ -56,9 +82,9 @@ + class="xy-table" @selection-change="handleSelectionChange"> - + diff --git a/yunxi-ui-admin-vue3/src/views/xxjj/subjectBasic/src/SubjectTransferForm.vue b/yunxi-ui-admin-vue3/src/views/xxjj/subjectBasic/src/SubjectTransferForm.vue new file mode 100644 index 00000000..f72df56f --- /dev/null +++ b/yunxi-ui-admin-vue3/src/views/xxjj/subjectBasic/src/SubjectTransferForm.vue @@ -0,0 +1,138 @@ + + diff --git a/yunxi-ui-admin-vue3/src/views/xxjj/subjectFollowManagement/SubjectFollowManagementForm.vue b/yunxi-ui-admin-vue3/src/views/xxjj/subjectFollowManagement/SubjectFollowManagementForm.vue new file mode 100644 index 00000000..53a82516 --- /dev/null +++ b/yunxi-ui-admin-vue3/src/views/xxjj/subjectFollowManagement/SubjectFollowManagementForm.vue @@ -0,0 +1,184 @@ + + diff --git a/yunxi-ui-admin-vue3/src/views/xxjj/subjectFollowManagement/SubjectFollowReportForm.vue b/yunxi-ui-admin-vue3/src/views/xxjj/subjectFollowManagement/SubjectFollowReportForm.vue new file mode 100644 index 00000000..ced914c3 --- /dev/null +++ b/yunxi-ui-admin-vue3/src/views/xxjj/subjectFollowManagement/SubjectFollowReportForm.vue @@ -0,0 +1,143 @@ + + diff --git a/yunxi-ui-admin-vue3/src/views/xxjj/subjectFollowManagement/index.vue b/yunxi-ui-admin-vue3/src/views/xxjj/subjectFollowManagement/index.vue new file mode 100644 index 00000000..d7c4e044 --- /dev/null +++ b/yunxi-ui-admin-vue3/src/views/xxjj/subjectFollowManagement/index.vue @@ -0,0 +1,386 @@ + + + + diff --git a/yunxi-ui-admin-vue3/src/views/xxjj/subjectFollowManagement/index2.vue b/yunxi-ui-admin-vue3/src/views/xxjj/subjectFollowManagement/index2.vue new file mode 100644 index 00000000..201e114d --- /dev/null +++ b/yunxi-ui-admin-vue3/src/views/xxjj/subjectFollowManagement/index2.vue @@ -0,0 +1,316 @@ + + + diff --git a/yunxi-ui-admin-vue3/src/views/xxjj/subjectFollowManagement/src/DrawerFilter.vue b/yunxi-ui-admin-vue3/src/views/xxjj/subjectFollowManagement/src/DrawerFilter.vue new file mode 100644 index 00000000..dac23c09 --- /dev/null +++ b/yunxi-ui-admin-vue3/src/views/xxjj/subjectFollowManagement/src/DrawerFilter.vue @@ -0,0 +1,247 @@ + + + + + + \ No newline at end of file diff --git a/yunxi-ui-admin-vue3/src/views/xxjj/subjectFollowReport/SubjectFollowReportForm.vue b/yunxi-ui-admin-vue3/src/views/xxjj/subjectFollowReport/SubjectFollowReportForm.vue new file mode 100644 index 00000000..fa166b10 --- /dev/null +++ b/yunxi-ui-admin-vue3/src/views/xxjj/subjectFollowReport/SubjectFollowReportForm.vue @@ -0,0 +1,138 @@ + + diff --git a/yunxi-ui-admin-vue3/src/views/xxjj/subjectFollowReport/index.vue b/yunxi-ui-admin-vue3/src/views/xxjj/subjectFollowReport/index.vue new file mode 100644 index 00000000..abe2c054 --- /dev/null +++ b/yunxi-ui-admin-vue3/src/views/xxjj/subjectFollowReport/index.vue @@ -0,0 +1,269 @@ + + + diff --git a/yunxi-ui-admin-vue3/src/views/xxjj/subjectTransfer/SubjectTransferForm.vue b/yunxi-ui-admin-vue3/src/views/xxjj/subjectTransfer/SubjectTransferForm.vue new file mode 100644 index 00000000..d854e3cd --- /dev/null +++ b/yunxi-ui-admin-vue3/src/views/xxjj/subjectTransfer/SubjectTransferForm.vue @@ -0,0 +1,122 @@ + + diff --git a/yunxi-ui-admin-vue3/src/views/xxjj/subjectTransfer/index.vue b/yunxi-ui-admin-vue3/src/views/xxjj/subjectTransfer/index.vue new file mode 100644 index 00000000..52bbecf0 --- /dev/null +++ b/yunxi-ui-admin-vue3/src/views/xxjj/subjectTransfer/index.vue @@ -0,0 +1,241 @@ + + +