From 7598ed05cf6ebd9085473554b977570525f92a04 Mon Sep 17 00:00:00 2001 From: zyna Date: Sat, 11 Nov 2023 23:31:09 +0800 Subject: [PATCH] =?UTF-8?q?crm=E8=81=94=E7=B3=BB=E4=BA=BA=E7=AC=AC?= =?UTF-8?q?=E4=BA=8C=E7=89=88=E6=96=B0=E5=A2=9E=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/contact/ContactController.java | 93 ++++++++++++------- .../admin/contact/vo/ContactBaseVO.java | 55 ++++++----- .../admin/contact/vo/ContactCreateReqVO.java | 8 +- .../admin/contact/vo/ContactExcelVO.java | 41 +++++--- .../admin/contact/vo/ContactExportReqVO.java | 37 ++++++-- .../admin/contact/vo/ContactPageReqVO.java | 49 ++++++---- .../admin/contact/vo/ContactRespVO.java | 12 ++- .../admin/contact/vo/ContactSimpleRespVO.java | 20 ++++ .../admin/contact/vo/ContactUpdateReqVO.java | 11 ++- .../crm/convert/contact/ContactConvert.java | 21 ++--- .../crm/dal/dataobject/contact/ContactDO.java | 64 +++++++++---- .../crm/dal/mysql/contact/ContactMapper.java | 29 ++++-- .../crm/service/contact/ContactService.java | 20 ++-- .../service/contact/ContactServiceImpl.java | 71 ++++---------- 14 files changed, 315 insertions(+), 216 deletions(-) create mode 100644 yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contact/vo/ContactSimpleRespVO.java diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contact/ContactController.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contact/ContactController.java index 5d92abc45..d1e0c5ba5 100644 --- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contact/ContactController.java +++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contact/ContactController.java @@ -1,32 +1,43 @@ package cn.iocoder.yudao.module.crm.controller.admin.contact; -import cn.iocoder.yudao.framework.common.pojo.CommonResult; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; -import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; -import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.*; -import cn.iocoder.yudao.module.crm.convert.contact.ContactConvert; -import cn.iocoder.yudao.module.crm.dal.dataobject.contact.ContactDO; -import cn.iocoder.yudao.module.crm.service.contact.ContactService; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.tags.Tag; -import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.validation.annotation.Validated; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.NumberUtil; +import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.CrmCustomerExportReqVO; +import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerDO; +import cn.iocoder.yudao.module.crm.service.customer.CrmCustomerService; +import cn.iocoder.yudao.module.system.api.user.AdminUserApi; +import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; +import com.google.common.collect.Lists; import org.springframework.web.bind.annotation.*; - import javax.annotation.Resource; -import javax.servlet.http.HttpServletResponse; -import javax.validation.Valid; +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 java.util.Collection; -import java.util.List; +import java.util.stream.Collectors; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; -import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; -import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; -@Tag(name = "管理后台 - CRM 联系人") +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; + +import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; +import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.*; + +import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.*; +import cn.iocoder.yudao.module.crm.dal.dataobject.contact.ContactDO; +import cn.iocoder.yudao.module.crm.convert.contact.ContactConvert; +import cn.iocoder.yudao.module.crm.service.contact.ContactService; + +@Tag(name = "管理后台 - crm联系人") @RestController @RequestMapping("/crm/contact") @Validated @@ -34,12 +45,16 @@ public class ContactController { @Resource private ContactService contactService; + @Resource + private AdminUserApi adminUserApi; + @Resource + private CrmCustomerService crmCustomerService; @PostMapping("/create") @Operation(summary = "创建crm联系人") @PreAuthorize("@ss.hasPermission('crm:contact:create')") public CommonResult createContact(@Valid @RequestBody ContactCreateReqVO createReqVO) { - return success(contactService.createContact(createReqVO, getLoginUserId())); + return success(contactService.createContact(createReqVO)); } @PutMapping("/update") @@ -65,7 +80,12 @@ public class ContactController { @PreAuthorize("@ss.hasPermission('crm:contact:query')") public CommonResult getContact(@RequestParam("id") Long id) { ContactDO contact = contactService.getContact(id); - return success(ContactConvert.INSTANCE.convert(contact)); + ContactRespVO contactRespVO = ContactConvert.INSTANCE.convert(contact); + Map userMap = adminUserApi.getUserMap(CollUtil.removeNull(Lists.newArrayList( + NumberUtil.parseLong(contact.getCreator())))); + contactRespVO.setCreatorName(Optional.ofNullable(userMap.get(NumberUtil.parseLong(contact.getCreator()))).map(AdminUserRespDTO::getNickname).orElse(null)); + contactRespVO.setCustomerName(Optional.ofNullable(crmCustomerService.getCustomer(contact.getCustomerId())).map(CrmCustomerDO::getName).orElse(null)); + return success(contactRespVO); } @GetMapping("/list") @@ -76,13 +96,26 @@ public class ContactController { List list = contactService.getContactList(ids); return success(ContactConvert.INSTANCE.convertList(list)); } - + @GetMapping("/simpleAlllist") + @Operation(summary = "获得crm联系人列表") + @PreAuthorize("@ss.hasPermission('crm:contact:query')") + public CommonResult> simpleAlllist() { + List list = contactService.allContactList(); + return success(ContactConvert.INSTANCE.convertAllList(list)); + } @GetMapping("/page") @Operation(summary = "获得crm联系人分页") @PreAuthorize("@ss.hasPermission('crm:contact:query')") public CommonResult> getContactPage(@Valid ContactPageReqVO pageVO) { - PageResult pageResult = contactService.getContactPage(pageVO); - return success(ContactConvert.INSTANCE.convertPage(pageResult)); + PageResult pageData = contactService.getContactPage(pageVO); + PageResult pageResult =ContactConvert.INSTANCE.convertPage(pageData); + //待接口实现后修改 + List crmCustomerDOList = crmCustomerService.getCustomerList(new CrmCustomerExportReqVO()); + Map crmCustomerDOMap = crmCustomerDOList.stream().collect(Collectors.toMap(CrmCustomerDO::getId,v->v)); + pageResult.getList().forEach(item -> { + item.setCustomerName(Optional.ofNullable(crmCustomerDOMap.get(item.getCustomerId())).map(CrmCustomerDO::getName).orElse(null)); + }); + return success(pageResult); } @GetMapping("/export-excel") @@ -97,12 +130,4 @@ public class ContactController { ExcelUtils.write(response, "crm联系人.xls", "数据", ContactExcelVO.class, datas); } - @PutMapping("/transfer") - @Operation(summary = "联系人转移") - @PreAuthorize("@ss.hasPermission('crm:contact:update')") - public CommonResult transfer(@Valid @RequestBody CrmContactTransferReqVO reqVO) { - contactService.transferContact(reqVO, getLoginUserId()); - return success(true); - } - } diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contact/vo/ContactBaseVO.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contact/vo/ContactBaseVO.java index 0f9da5c06..6a75dbf2e 100644 --- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contact/vo/ContactBaseVO.java +++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contact/vo/ContactBaseVO.java @@ -1,12 +1,17 @@ package cn.iocoder.yudao.module.crm.controller.admin.contact.vo; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; +import lombok.*; + +import java.time.LocalDate; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import javax.validation.constraints.*; import org.springframework.format.annotation.DateTimeFormat; -import javax.validation.constraints.NotNull; -import java.time.LocalDateTime; - +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; /** @@ -16,31 +21,19 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_ @Data public class ContactBaseVO { - // TODO @zyna:部分字段,缺少 example,需要补充; - - @Schema(description = "联系人名称", example = "张三") - @NotNull(message = "姓名不能为空") - private String name; - @Schema(description = "下次联系时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY) private LocalDateTime nextTime; - // TODO @zyna:缺少 validator 的校验 @Schema(description = "手机号") private String mobile; - // TODO @zyna:缺少 validator 的校验 @Schema(description = "电话") private String telephone; - // TODO @zyna:缺少 validator 的校验 @Schema(description = "电子邮箱") private String email; - @Schema(description = "职务") - private String post; - - // TODO @zyna:非空校验 @Schema(description = "客户编号", example = "10795") private Long customerId; @@ -50,12 +43,32 @@ public class ContactBaseVO { @Schema(description = "备注", example = "你说的对") private String remark; - // TODO @zyna:这个新建的时候,应该不会传递;而是后端默认设置自己为负责人; - @Schema(description = "负责人用户编号", example = "7648") - private Long ownerUserId; - @Schema(description = "最后跟进时间") @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) private LocalDateTime lastTime; + @Schema(description = "直属上级", example = "23457") + private Long parentId; + + @Schema(description = "姓名", example = "芋艿") + private String name; + + @Schema(description = "职位") + private String post; + + @Schema(description = "QQ") + private Long qq; + + @Schema(description = "微信") + private String webchat; + + @Schema(description = "性别") + private Integer sex; + + @Schema(description = "是否关键决策人") + private Boolean policyMakers; + + @Schema(description = "负责人用户编号", example = "14334") + private String ownerUserId; + } diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contact/vo/ContactCreateReqVO.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contact/vo/ContactCreateReqVO.java index 5eccfea74..424d945dc 100644 --- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contact/vo/ContactCreateReqVO.java +++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contact/vo/ContactCreateReqVO.java @@ -1,11 +1,11 @@ package cn.iocoder.yudao.module.crm.controller.admin.contact.vo; +import lombok.*; +import java.util.*; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.ToString; +import javax.validation.constraints.*; -@Schema(description = "管理后台 - CRM 联系人创建 Request VO") +@Schema(description = "管理后台 - crm联系人创建 Request VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contact/vo/ContactExcelVO.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contact/vo/ContactExcelVO.java index 3ac5f3765..f7ca2b8d0 100644 --- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contact/vo/ContactExcelVO.java +++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contact/vo/ContactExcelVO.java @@ -2,6 +2,8 @@ package cn.iocoder.yudao.module.crm.controller.admin.contact.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; + +import java.time.LocalDate; import java.util.*; import java.time.LocalDateTime; import java.time.LocalDateTime; @@ -17,12 +19,6 @@ import com.alibaba.excel.annotation.ExcelProperty; @Data public class ContactExcelVO { - @ExcelProperty("主键") - private Long id; - - @ExcelProperty("联系人名称") - private String name; - @ExcelProperty("下次联系时间") private LocalDateTime nextTime; @@ -35,9 +31,6 @@ public class ContactExcelVO { @ExcelProperty("电子邮箱") private String email; - @ExcelProperty("职务") - private String post; - @ExcelProperty("客户编号") private Long customerId; @@ -47,13 +40,37 @@ public class ContactExcelVO { @ExcelProperty("备注") private String remark; - @ExcelProperty("负责人用户编号") - private Long ownerUserId; - @ExcelProperty("创建时间") private LocalDateTime createTime; @ExcelProperty("最后跟进时间") private LocalDateTime lastTime; + @ExcelProperty("主键") + private Long id; + + @ExcelProperty("直属上级") + private Long parentId; + + @ExcelProperty("姓名") + private String name; + + @ExcelProperty("职位") + private String post; + + @ExcelProperty("QQ") + private Long qq; + + @ExcelProperty("微信") + private String webchat; + + @ExcelProperty("性别") + private Integer sex; + + @ExcelProperty("是否关键决策人") + private Boolean policyMakers; + + @ExcelProperty("负责人用户编号") + private String ownerUserId; + } diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contact/vo/ContactExportReqVO.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contact/vo/ContactExportReqVO.java index 961cebd0c..180ddb6bd 100644 --- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contact/vo/ContactExportReqVO.java +++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contact/vo/ContactExportReqVO.java @@ -1,6 +1,8 @@ package cn.iocoder.yudao.module.crm.controller.admin.contact.vo; import lombok.*; + +import java.time.LocalDate; import java.util.*; import io.swagger.v3.oas.annotations.media.Schema; import cn.iocoder.yudao.framework.common.pojo.PageParam; @@ -9,13 +11,10 @@ import org.springframework.format.annotation.DateTimeFormat; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; -@Schema(description = "管理后台 - CRM 联系人 Excel 导出 Request VO,参数和 ContactPageReqVO 是一致的") +@Schema(description = "管理后台 - crm联系人 Excel 导出 Request VO,参数和 ContactPageReqVO 是一致的") @Data public class ContactExportReqVO { - @Schema(description = "联系人名称", example = "张三") - private String name; - @Schema(description = "下次联系时间") @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) private LocalDateTime[] nextTime; @@ -29,9 +28,6 @@ public class ContactExportReqVO { @Schema(description = "电子邮箱") private String email; - @Schema(description = "职务") - private String post; - @Schema(description = "客户编号", example = "10795") private Long customerId; @@ -41,9 +37,6 @@ public class ContactExportReqVO { @Schema(description = "备注", example = "你说的对") private String remark; - @Schema(description = "负责人用户编号", example = "7648") - private Long ownerUserId; - @Schema(description = "创建时间") @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) private LocalDateTime[] createTime; @@ -52,4 +45,28 @@ public class ContactExportReqVO { @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) private LocalDateTime[] lastTime; + @Schema(description = "直属上级", example = "23457") + private Long parentId; + + @Schema(description = "姓名", example = "芋艿") + private String name; + + @Schema(description = "职位") + private String post; + + @Schema(description = "QQ") + private Long qq; + + @Schema(description = "微信") + private String webchat; + + @Schema(description = "性别") + private Integer sex; + + @Schema(description = "是否关键决策人") + private Boolean policyMakers; + + @Schema(description = "负责人用户编号", example = "14334") + private String ownerUserId; + } diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contact/vo/ContactPageReqVO.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contact/vo/ContactPageReqVO.java index 64d8a04b9..7aac9083a 100644 --- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contact/vo/ContactPageReqVO.java +++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contact/vo/ContactPageReqVO.java @@ -1,27 +1,22 @@ package cn.iocoder.yudao.module.crm.controller.admin.contact.vo; -import cn.iocoder.yudao.framework.common.pojo.PageParam; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.ToString; -import org.springframework.format.annotation.DateTimeFormat; +import lombok.*; +import java.time.LocalDate; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; import java.time.LocalDateTime; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; -@Schema(description = "管理后台 - CRM 联系人分页 Request VO") +@Schema(description = "管理后台 - crm联系人分页 Request VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) public class ContactPageReqVO extends PageParam { - // TODO @芋艿:需要查询的字段; - - @Schema(description = "联系人名称", example = "张三") - private String name; - @Schema(description = "下次联系时间") @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) private LocalDateTime[] nextTime; @@ -35,9 +30,6 @@ public class ContactPageReqVO extends PageParam { @Schema(description = "电子邮箱") private String email; - @Schema(description = "职务") - private String post; - @Schema(description = "客户编号", example = "10795") private Long customerId; @@ -47,9 +39,6 @@ public class ContactPageReqVO extends PageParam { @Schema(description = "备注", example = "你说的对") private String remark; - @Schema(description = "负责人用户编号", example = "7648") - private Long ownerUserId; - @Schema(description = "创建时间") @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) private LocalDateTime[] createTime; @@ -58,4 +47,28 @@ public class ContactPageReqVO extends PageParam { @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) private LocalDateTime[] lastTime; + @Schema(description = "直属上级", example = "23457") + private Long parentId; + + @Schema(description = "姓名", example = "芋艿") + private String name; + + @Schema(description = "职位") + private String post; + + @Schema(description = "QQ") + private Long qq; + + @Schema(description = "微信") + private String webchat; + + @Schema(description = "性别") + private Integer sex; + + @Schema(description = "是否关键决策人") + private Boolean policyMakers; + + @Schema(description = "负责人用户编号", example = "14334") + private String ownerUserId; + } diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contact/vo/ContactRespVO.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contact/vo/ContactRespVO.java index 6a02c69d2..062d9eee5 100644 --- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contact/vo/ContactRespVO.java +++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contact/vo/ContactRespVO.java @@ -4,17 +4,19 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import java.time.LocalDateTime; -@Schema(description = "管理后台 - CRM 联系人 Response VO") +@Schema(description = "管理后台 - crm联系人 Response VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) public class ContactRespVO extends ContactBaseVO { - @Schema(description = "主键", example = "23210") - private Long id; - @Schema(description = "创建时间") private LocalDateTime createTime; @Schema(description = "创建人") - private String creator; + private String creatorName; + @Schema(description = "客户") + private String customerName; + @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "3167") + private Long id; + } diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contact/vo/ContactSimpleRespVO.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contact/vo/ContactSimpleRespVO.java new file mode 100644 index 000000000..dd37802d5 --- /dev/null +++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contact/vo/ContactSimpleRespVO.java @@ -0,0 +1,20 @@ +package cn.iocoder.yudao.module.crm.controller.admin.contact.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - crm联系人 Response VO") +@Data +@ToString(callSuper = true) +public class ContactSimpleRespVO { + @Schema(description = "姓名", example = "芋艿") + private String name; + + @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "3167") + private Long id; + +} diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contact/vo/ContactUpdateReqVO.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contact/vo/ContactUpdateReqVO.java index d2621fa5e..6aeaaec7c 100644 --- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contact/vo/ContactUpdateReqVO.java +++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contact/vo/ContactUpdateReqVO.java @@ -1,17 +1,18 @@ package cn.iocoder.yudao.module.crm.controller.admin.contact.vo; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.ToString; +import lombok.*; +import java.util.*; +import javax.validation.constraints.*; -@Schema(description = "管理后台 - CRM 联系人更新 Request VO") +@Schema(description = "管理后台 - crm联系人更新 Request VO") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) public class ContactUpdateReqVO extends ContactBaseVO { - @Schema(description = "主键", example = "23210") + @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "3167") + @NotNull(message = "主键不能为空") private Long id; } diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/convert/contact/ContactConvert.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/convert/contact/ContactConvert.java index b4cc69963..d0b535a19 100644 --- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/convert/contact/ContactConvert.java +++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/convert/contact/ContactConvert.java @@ -1,18 +1,16 @@ package cn.iocoder.yudao.module.crm.convert.contact; +import java.util.*; + import cn.iocoder.yudao.framework.common.pojo.PageResult; + +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.*; import cn.iocoder.yudao.module.crm.dal.dataobject.contact.ContactDO; -import cn.iocoder.yudao.module.crm.service.permission.bo.CrmTransferPermissionReqBO; -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import org.mapstruct.Mappings; -import org.mapstruct.factory.Mappers; - -import java.util.List; /** - * crm 联系人 Convert + * crm联系人 Convert * * @author 芋道源码 */ @@ -32,11 +30,6 @@ public interface ContactConvert { PageResult convertPage(PageResult page); List convertList02(List list); - - @Mappings({ - @Mapping(target = "bizId", source = "reqVO.id"), - @Mapping(target = "newOwnerUserId", source = "reqVO.id") - }) - CrmTransferPermissionReqBO convert(CrmContactTransferReqVO reqVO, Long userId); + List convertAllList(List list); } diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/contact/ContactDO.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/contact/ContactDO.java index f958fcd64..513ffba45 100644 --- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/contact/ContactDO.java +++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/contact/ContactDO.java @@ -1,15 +1,17 @@ package cn.iocoder.yudao.module.crm.dal.dataobject.contact; -import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; -import com.baomidou.mybatisplus.annotation.KeySequence; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; import lombok.*; +import java.time.LocalDate; +import java.util.*; import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; /** - * crm 联系人 DO + * crm联系人 DO * * @author 芋道源码 */ @@ -23,15 +25,6 @@ import java.time.LocalDateTime; @AllArgsConstructor public class ContactDO extends BaseDO { - /** - * 主键 - */ - @TableId - private Long id; - /** - * 联系人名称 - */ - private String name; /** * 下次联系时间 */ @@ -48,14 +41,8 @@ public class ContactDO extends BaseDO { * 电子邮箱 */ private String email; - /** - * 职务 - */ - private String post; /** * 客户编号 - * - * TODO @zyna:关联的字段,也要写下 */ private Long customerId; /** @@ -70,5 +57,42 @@ public class ContactDO extends BaseDO { * 最后跟进时间 */ private LocalDateTime lastTime; + /** + * 主键 + */ + @TableId + private Long id; + /** + * 直属上级 + */ + private Long parentId; + /** + * 姓名 + */ + private String name; + /** + * 职位 + */ + private String post; + /** + * QQ + */ + private Long qq; + /** + * 微信 + */ + private String webchat; + /** + * 性别 + */ + private Integer sex; + /** + * 是否关键决策人 + */ + private Boolean policyMakers; + /** + * 负责人用户编号 + */ + private String ownerUserId; } diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/contact/ContactMapper.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/contact/ContactMapper.java index 7643e4d4c..ef336c37e 100644 --- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/contact/ContactMapper.java +++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/contact/ContactMapper.java @@ -1,14 +1,13 @@ package cn.iocoder.yudao.module.crm.dal.mysql.contact; +import java.util.*; + import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; -import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.ContactExportReqVO; -import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.ContactPageReqVO; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.module.crm.dal.dataobject.contact.ContactDO; import org.apache.ibatis.annotations.Mapper; - -import java.util.List; +import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.*; /** * crm联系人 Mapper @@ -20,33 +19,45 @@ public interface ContactMapper extends BaseMapperX { default PageResult selectPage(ContactPageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX() - .likeIfPresent(ContactDO::getName, reqVO.getName()) .betweenIfPresent(ContactDO::getNextTime, reqVO.getNextTime()) .eqIfPresent(ContactDO::getMobile, reqVO.getMobile()) .eqIfPresent(ContactDO::getTelephone, reqVO.getTelephone()) .eqIfPresent(ContactDO::getEmail, reqVO.getEmail()) - .eqIfPresent(ContactDO::getPost, reqVO.getPost()) .eqIfPresent(ContactDO::getCustomerId, reqVO.getCustomerId()) .eqIfPresent(ContactDO::getAddress, reqVO.getAddress()) .eqIfPresent(ContactDO::getRemark, reqVO.getRemark()) .betweenIfPresent(ContactDO::getCreateTime, reqVO.getCreateTime()) .betweenIfPresent(ContactDO::getLastTime, reqVO.getLastTime()) + .eqIfPresent(ContactDO::getParentId, reqVO.getParentId()) + .likeIfPresent(ContactDO::getName, reqVO.getName()) + .eqIfPresent(ContactDO::getPost, reqVO.getPost()) + .eqIfPresent(ContactDO::getQq, reqVO.getQq()) + .eqIfPresent(ContactDO::getWebchat, reqVO.getWebchat()) + .eqIfPresent(ContactDO::getSex, reqVO.getSex()) + .eqIfPresent(ContactDO::getPolicyMakers, reqVO.getPolicyMakers()) + .eqIfPresent(ContactDO::getOwnerUserId, reqVO.getOwnerUserId()) .orderByDesc(ContactDO::getId)); } default List selectList(ContactExportReqVO reqVO) { return selectList(new LambdaQueryWrapperX() - .likeIfPresent(ContactDO::getName, reqVO.getName()) .betweenIfPresent(ContactDO::getNextTime, reqVO.getNextTime()) .eqIfPresent(ContactDO::getMobile, reqVO.getMobile()) .eqIfPresent(ContactDO::getTelephone, reqVO.getTelephone()) .eqIfPresent(ContactDO::getEmail, reqVO.getEmail()) - .eqIfPresent(ContactDO::getPost, reqVO.getPost()) .eqIfPresent(ContactDO::getCustomerId, reqVO.getCustomerId()) .eqIfPresent(ContactDO::getAddress, reqVO.getAddress()) .eqIfPresent(ContactDO::getRemark, reqVO.getRemark()) .betweenIfPresent(ContactDO::getCreateTime, reqVO.getCreateTime()) .betweenIfPresent(ContactDO::getLastTime, reqVO.getLastTime()) + .eqIfPresent(ContactDO::getParentId, reqVO.getParentId()) + .likeIfPresent(ContactDO::getName, reqVO.getName()) + .eqIfPresent(ContactDO::getPost, reqVO.getPost()) + .eqIfPresent(ContactDO::getQq, reqVO.getQq()) + .eqIfPresent(ContactDO::getWebchat, reqVO.getWebchat()) + .eqIfPresent(ContactDO::getSex, reqVO.getSex()) + .eqIfPresent(ContactDO::getPolicyMakers, reqVO.getPolicyMakers()) + .eqIfPresent(ContactDO::getOwnerUserId, reqVO.getOwnerUserId()) .orderByDesc(ContactDO::getId)); } diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/contact/ContactService.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/contact/ContactService.java index ecb6fd577..4e835f0e7 100644 --- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/contact/ContactService.java +++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/contact/ContactService.java @@ -1,12 +1,10 @@ package cn.iocoder.yudao.module.crm.service.contact; -import cn.iocoder.yudao.framework.common.pojo.PageResult; +import java.util.*; +import javax.validation.*; import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.*; import cn.iocoder.yudao.module.crm.dal.dataobject.contact.ContactDO; - -import javax.validation.Valid; -import java.util.Collection; -import java.util.List; +import cn.iocoder.yudao.framework.common.pojo.PageResult; /** * crm联系人 Service 接口 @@ -19,10 +17,9 @@ public interface ContactService { * 创建crm联系人 * * @param createReqVO 创建信息 - * @param userId 用户编号 * @return 编号 */ - Long createContact(@Valid ContactCreateReqVO createReqVO, Long userId); + Long createContact(@Valid ContactCreateReqVO createReqVO); /** * 更新crm联系人 @@ -71,11 +68,8 @@ public interface ContactService { List getContactList(ContactExportReqVO exportReqVO); /** - * 联系人编号 - * - * @param reqVO 请求 - * @param userId 用户编号 + * 获取所有联系人列表,只返回姓名和id + * @return 所有联系人列表 */ - void transferContact(CrmContactTransferReqVO reqVO, Long userId); - + List allContactList(); } diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/contact/ContactServiceImpl.java b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/contact/ContactServiceImpl.java index dafebb598..fcd067e88 100644 --- a/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/contact/ContactServiceImpl.java +++ b/yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/contact/ContactServiceImpl.java @@ -1,27 +1,22 @@ package cn.iocoder.yudao.module.crm.service.contact; +import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; + +import java.util.*; +import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.*; +import cn.iocoder.yudao.module.crm.dal.dataobject.contact.ContactDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; + +import cn.iocoder.yudao.module.crm.convert.contact.ContactConvert; +import cn.iocoder.yudao.module.crm.dal.mysql.contact.ContactMapper; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.*; + import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.ListUtil; -import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.*; -import cn.iocoder.yudao.module.crm.convert.contact.ContactConvert; -import cn.iocoder.yudao.module.crm.dal.dataobject.contact.ContactDO; -import cn.iocoder.yudao.module.crm.dal.mysql.contact.ContactMapper; -import cn.iocoder.yudao.module.crm.framework.core.annotations.CrmPermission; -import cn.iocoder.yudao.module.crm.framework.enums.CrmBizTypeEnum; -import cn.iocoder.yudao.module.crm.framework.enums.CrmPermissionLevelEnum; -import cn.iocoder.yudao.module.crm.service.permission.CrmPermissionService; -import cn.iocoder.yudao.module.crm.service.permission.bo.CrmPermissionCreateReqBO; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.validation.annotation.Validated; - -import javax.annotation.Resource; -import java.util.Collection; -import java.util.List; - -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; -import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.CONTACT_NOT_EXISTS; /** * crm联系人 Service 实现类 @@ -35,41 +30,25 @@ public class ContactServiceImpl implements ContactService { @Resource private ContactMapper contactMapper; - @Resource - private CrmPermissionService crmPermissionService; - @Override - public Long createContact(ContactCreateReqVO createReqVO, Long userId) { - // TODO @customerId:需要校验存在 + public Long createContact(ContactCreateReqVO createReqVO) { // 插入 ContactDO contact = ContactConvert.INSTANCE.convert(createReqVO); contactMapper.insert(contact); - - // 创建数据权限 - crmPermissionService.createPermission(new CrmPermissionCreateReqBO().setBizType(CrmBizTypeEnum.CRM_CONTACTS.getType()) - .setBizId(contact.getId()).setUserId(userId).setPermissionLevel(CrmPermissionLevelEnum.OWNER.getLevel())); // 设置当前操作的人为负责人 - // 返回 return contact.getId(); } @Override - @Transactional(rollbackFor = Exception.class) - @CrmPermission(bizType = CrmBizTypeEnum.CRM_CONTACTS, getIdFor = ContactUpdateReqVO.class, - permissionLevel = CrmPermissionLevelEnum.WRITE) public void updateContact(ContactUpdateReqVO updateReqVO) { // 校验存在 validateContactExists(updateReqVO.getId()); - // TODO @customerId:需要校验存在 - // 更新 ContactDO updateObj = ContactConvert.INSTANCE.convert(updateReqVO); contactMapper.updateById(updateObj); } @Override - @Transactional(rollbackFor = Exception.class) - @CrmPermission(bizType = CrmBizTypeEnum.CRM_CONTACTS, permissionLevel = CrmPermissionLevelEnum.WRITE) public void deleteContact(Long id) { // 校验存在 validateContactExists(id); @@ -77,16 +56,13 @@ public class ContactServiceImpl implements ContactService { contactMapper.deleteById(id); } - private ContactDO validateContactExists(Long id) { - ContactDO contact = contactMapper.selectById(id); - if (contact == null) { + private void validateContactExists(Long id) { + if (contactMapper.selectById(id) == null) { throw exception(CONTACT_NOT_EXISTS); } - return contact; } @Override - @CrmPermission(bizType = CrmBizTypeEnum.CRM_CONTACTS, permissionLevel = CrmPermissionLevelEnum.READ) public ContactDO getContact(Long id) { return contactMapper.selectById(id); } @@ -110,15 +86,8 @@ public class ContactServiceImpl implements ContactService { } @Override - public void transferContact(CrmContactTransferReqVO reqVO, Long userId) { - // 1 校验联系人是否存在 - validateContactExists(reqVO.getId()); - - // 2. 数据权限转移 - crmPermissionService.transferPermission( - ContactConvert.INSTANCE.convert(reqVO, userId).setBizType(CrmBizTypeEnum.CRM_CONTACTS.getType())); - - // 3. TODO 记录转移日志 + public List allContactList() { + return contactMapper.selectList(); } }