From b4eaa039235ad60074d67e191775ee840d7fcc9b Mon Sep 17 00:00:00 2001 From: yinq Date: Fri, 26 Sep 2025 13:41:31 +0800 Subject: [PATCH] =?UTF-8?q?1.0.2=20add=E5=AE=A2=E6=88=B7=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E3=80=81=E8=81=94=E7=B3=BB=E4=BA=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/RemoteWorkflowServiceMock.java | 10 ++ .../resources/vm/java/serviceImpl.java.vm | 4 +- .../CrmCustomerContactController.java | 116 ++++++++++++++ .../CrmCustomerInfoController.java} | 62 ++++---- .../oa/crm/domain/CrmCustomerContact.java | 119 ++++++++++++++ .../domain/CrmCustomerInfo.java} | 29 +++- .../crm/domain/bo/CrmCustomerContactBo.java | 111 +++++++++++++ .../domain/bo/CrmCustomerInfoBo.java} | 34 +++- .../crm/domain/vo/CrmCustomerContactVo.java | 140 ++++++++++++++++ .../domain/vo/CrmCustomerInfoVo.java} | 66 ++++---- .../crm/mapper/CrmCustomerContactMapper.java | 37 +++++ .../mapper/CrmCustomerInfoMapper.java} | 14 +- .../service/ICrmCustomerContactService.java | 69 ++++++++ .../service/ICrmCustomerInfoService.java} | 22 +-- .../impl/CrmCustomerContactServiceImpl.java | 145 +++++++++++++++++ .../impl/CrmCustomerInfoServiceImpl.java | 149 ++++++++++++++++++ .../service/impl/BaseCustomerServiceImpl.java | 147 ----------------- .../mapper/oa/BaseCustomerMapper.xml | 39 ----- .../oa/crm/CrmCustomerContactMapper.xml | 14 ++ .../mapper/oa/crm/CrmCustomerInfoMapper.xml | 14 ++ 20 files changed, 1050 insertions(+), 291 deletions(-) create mode 100644 ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/controller/CrmCustomerContactController.java rename ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/{controller/BaseCustomerController.java => crm/controller/CrmCustomerInfoController.java} (52%) create mode 100644 ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/domain/CrmCustomerContact.java rename ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/{domain/BaseCustomer.java => crm/domain/CrmCustomerInfo.java} (85%) create mode 100644 ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/domain/bo/CrmCustomerContactBo.java rename ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/{domain/bo/BaseCustomerBo.java => crm/domain/bo/CrmCustomerInfoBo.java} (75%) create mode 100644 ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/domain/vo/CrmCustomerContactVo.java rename ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/{domain/vo/BaseCustomerVo.java => crm/domain/vo/CrmCustomerInfoVo.java} (83%) create mode 100644 ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/mapper/CrmCustomerContactMapper.java rename ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/{mapper/BaseCustomerMapper.java => crm/mapper/CrmCustomerInfoMapper.java} (52%) create mode 100644 ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/service/ICrmCustomerContactService.java rename ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/{service/IBaseCustomerService.java => crm/service/ICrmCustomerInfoService.java} (67%) create mode 100644 ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/service/impl/CrmCustomerContactServiceImpl.java create mode 100644 ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/service/impl/CrmCustomerInfoServiceImpl.java delete mode 100644 ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/service/impl/BaseCustomerServiceImpl.java delete mode 100644 ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/BaseCustomerMapper.xml create mode 100644 ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/crm/CrmCustomerContactMapper.xml create mode 100644 ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/crm/CrmCustomerInfoMapper.xml diff --git a/ruoyi-api/ruoyi-api-workflow/src/main/java/org/dromara/workflow/api/RemoteWorkflowServiceMock.java b/ruoyi-api/ruoyi-api-workflow/src/main/java/org/dromara/workflow/api/RemoteWorkflowServiceMock.java index 7eeb82c5..1118681a 100644 --- a/ruoyi-api/ruoyi-api-workflow/src/main/java/org/dromara/workflow/api/RemoteWorkflowServiceMock.java +++ b/ruoyi-api/ruoyi-api-workflow/src/main/java/org/dromara/workflow/api/RemoteWorkflowServiceMock.java @@ -67,4 +67,14 @@ public class RemoteWorkflowServiceMock implements RemoteWorkflowService { log.warn("服务调用异常 -> 降级处理"); return false; } + + @Override + public boolean completeTask(Long taskId, String message) { + return false; + } + + @Override + public boolean startCompleteTask(RemoteStartProcess startProcess) { + return false; + } } diff --git a/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/serviceImpl.java.vm b/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/serviceImpl.java.vm index 1d85add7..28b1a369 100644 --- a/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/serviceImpl.java.vm +++ b/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/serviceImpl.java.vm @@ -100,8 +100,8 @@ public class ${ClassName}ServiceImpl implements I${ClassName}Service { #end #set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)}) #if($column.isPk==1) - .orderByAsc(${ClassName}::get$AttrName); - #end + .orderByAsc(${ClassName}::get$AttrName) + #end; return lqw; } diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/controller/CrmCustomerContactController.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/controller/CrmCustomerContactController.java new file mode 100644 index 00000000..9f679615 --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/controller/CrmCustomerContactController.java @@ -0,0 +1,116 @@ +package org.dromara.oa.crm.controller; + +import java.util.List; + +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.web.core.BaseController; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.core.domain.R; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.excel.utils.ExcelUtil; +import org.dromara.oa.crm.domain.vo.CrmCustomerContactVo; +import org.dromara.oa.crm.domain.bo.CrmCustomerContactBo; +import org.dromara.oa.crm.service.ICrmCustomerContactService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 客户联系人信息 + * 前端访问路由地址为:/oa/crm/customerContact + * + * @author Yinq + * @date 2025-09-25 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/crm/customerContact") +public class CrmCustomerContactController extends BaseController { + + private final ICrmCustomerContactService crmCustomerContactService; + + /** + * 查询客户联系人信息列表 + */ + @SaCheckPermission("oa/crm:customerContact:list") + @GetMapping("/list") + public TableDataInfo list(CrmCustomerContactBo bo, PageQuery pageQuery) { + return crmCustomerContactService.queryPageList(bo, pageQuery); + } + + /** + * 导出客户联系人信息列表 + */ + @SaCheckPermission("oa/crm:customerContact:export") + @Log(title = "客户联系人信息", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(CrmCustomerContactBo bo, HttpServletResponse response) { + List list = crmCustomerContactService.queryList(bo); + ExcelUtil.exportExcel(list, "客户联系人信息", CrmCustomerContactVo.class, response); + } + + /** + * 获取客户联系人信息详细信息 + * + * @param contactId 主键 + */ + @SaCheckPermission("oa/crm:customerContact:query") + @GetMapping("/{contactId}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable("contactId") Long contactId) { + return R.ok(crmCustomerContactService.queryById(contactId)); + } + + /** + * 新增客户联系人信息 + */ + @SaCheckPermission("oa/crm:customerContact:add") + @Log(title = "客户联系人信息", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody CrmCustomerContactBo bo) { + return toAjax(crmCustomerContactService.insertByBo(bo)); + } + + /** + * 修改客户联系人信息 + */ + @SaCheckPermission("oa/crm:customerContact:edit") + @Log(title = "客户联系人信息", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody CrmCustomerContactBo bo) { + return toAjax(crmCustomerContactService.updateByBo(bo)); + } + + /** + * 删除客户联系人信息 + * + * @param contactIds 主键串 + */ + @SaCheckPermission("oa/crm:customerContact:remove") + @Log(title = "客户联系人信息", businessType = BusinessType.DELETE) + @DeleteMapping("/{contactIds}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable("contactIds") Long[] contactIds) { + return toAjax(crmCustomerContactService.deleteWithValidByIds(List.of(contactIds), true)); + } + + /** + * 下拉框查询客户联系人信息列表 + */ + @GetMapping("/getCrmCustomerContactList") + public R> getCrmCustomerContactList(CrmCustomerContactBo bo) { + List list = crmCustomerContactService.queryList(bo); + return R.ok(list); + } + +} diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/controller/BaseCustomerController.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/controller/CrmCustomerInfoController.java similarity index 52% rename from ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/controller/BaseCustomerController.java rename to ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/controller/CrmCustomerInfoController.java index 6ba48ab7..0bada8c7 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/controller/BaseCustomerController.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/controller/CrmCustomerInfoController.java @@ -1,4 +1,4 @@ -package org.dromara.oa.controller; +package org.dromara.oa.crm.controller; import java.util.List; @@ -17,44 +17,44 @@ import org.dromara.common.core.validate.AddGroup; import org.dromara.common.core.validate.EditGroup; import org.dromara.common.log.enums.BusinessType; import org.dromara.common.excel.utils.ExcelUtil; -import org.dromara.oa.domain.vo.BaseCustomerVo; -import org.dromara.oa.domain.bo.BaseCustomerBo; -import org.dromara.oa.service.IBaseCustomerService; +import org.dromara.oa.crm.domain.vo.CrmCustomerInfoVo; +import org.dromara.oa.crm.domain.bo.CrmCustomerInfoBo; +import org.dromara.oa.crm.service.ICrmCustomerInfoService; import org.dromara.common.mybatis.core.page.TableDataInfo; /** * 客户信息 - * 前端访问路由地址为:/oa/baseCustomer + * 前端访问路由地址为:/oa/crm/customerInfo * * @author Yinq - * @date 2025-09-15 + * @date 2025-09-25 */ @Validated @RequiredArgsConstructor @RestController -@RequestMapping("/baseCustomer") -public class BaseCustomerController extends BaseController { +@RequestMapping("/crm/customerInfo") +public class CrmCustomerInfoController extends BaseController { - private final IBaseCustomerService baseCustomerService; + private final ICrmCustomerInfoService crmCustomerInfoService; /** * 查询客户信息列表 */ - @SaCheckPermission("oa:baseCustomer:list") + @SaCheckPermission("oa/crm:customerInfo:list") @GetMapping("/list") - public TableDataInfo list(BaseCustomerBo bo, PageQuery pageQuery) { - return baseCustomerService.queryPageList(bo, pageQuery); + public TableDataInfo list(CrmCustomerInfoBo bo, PageQuery pageQuery) { + return crmCustomerInfoService.queryPageList(bo, pageQuery); } /** * 导出客户信息列表 */ - @SaCheckPermission("oa:baseCustomer:export") + @SaCheckPermission("oa/crm:customerInfo:export") @Log(title = "客户信息", businessType = BusinessType.EXPORT) @PostMapping("/export") - public void export(BaseCustomerBo bo, HttpServletResponse response) { - List list = baseCustomerService.queryList(bo); - ExcelUtil.exportExcel(list, "客户信息", BaseCustomerVo.class, response); + public void export(CrmCustomerInfoBo bo, HttpServletResponse response) { + List list = crmCustomerInfoService.queryList(bo); + ExcelUtil.exportExcel(list, "客户信息", CrmCustomerInfoVo.class, response); } /** @@ -62,33 +62,33 @@ public class BaseCustomerController extends BaseController { * * @param customerId 主键 */ - @SaCheckPermission("oa:baseCustomer:query") + @SaCheckPermission("oa/crm:customerInfo:query") @GetMapping("/{customerId}") - public R getInfo(@NotNull(message = "主键不能为空") - @PathVariable("customerId") Long customerId) { - return R.ok(baseCustomerService.queryById(customerId)); + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable("customerId") Long customerId) { + return R.ok(crmCustomerInfoService.queryById(customerId)); } /** * 新增客户信息 */ - @SaCheckPermission("oa:baseCustomer:add") + @SaCheckPermission("oa/crm:customerInfo:add") @Log(title = "客户信息", businessType = BusinessType.INSERT) @RepeatSubmit() @PostMapping() - public R add(@Validated(AddGroup.class) @RequestBody BaseCustomerBo bo) { - return toAjax(baseCustomerService.insertByBo(bo)); + public R add(@Validated(AddGroup.class) @RequestBody CrmCustomerInfoBo bo) { + return toAjax(crmCustomerInfoService.insertByBo(bo)); } /** * 修改客户信息 */ - @SaCheckPermission("oa:baseCustomer:edit") + @SaCheckPermission("oa/crm:customerInfo:edit") @Log(title = "客户信息", businessType = BusinessType.UPDATE) @RepeatSubmit() @PutMapping() - public R edit(@Validated(EditGroup.class) @RequestBody BaseCustomerBo bo) { - return toAjax(baseCustomerService.updateByBo(bo)); + public R edit(@Validated(EditGroup.class) @RequestBody CrmCustomerInfoBo bo) { + return toAjax(crmCustomerInfoService.updateByBo(bo)); } /** @@ -96,20 +96,20 @@ public class BaseCustomerController extends BaseController { * * @param customerIds 主键串 */ - @SaCheckPermission("oa:baseCustomer:remove") + @SaCheckPermission("oa/crm:customerInfo:remove") @Log(title = "客户信息", businessType = BusinessType.DELETE) @DeleteMapping("/{customerIds}") public R remove(@NotEmpty(message = "主键不能为空") @PathVariable("customerIds") Long[] customerIds) { - return toAjax(baseCustomerService.deleteWithValidByIds(List.of(customerIds), true)); + return toAjax(crmCustomerInfoService.deleteWithValidByIds(List.of(customerIds), true)); } /** * 下拉框查询客户信息列表 */ - @GetMapping("/getBaseCustomerList") - public R> getBaseCustomerList(BaseCustomerBo bo) { - List list = baseCustomerService.queryList(bo); + @GetMapping("/getCrmCustomerInfoList") + public R> getCrmCustomerInfoList(CrmCustomerInfoBo bo) { + List list = crmCustomerInfoService.queryList(bo); return R.ok(list); } diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/domain/CrmCustomerContact.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/domain/CrmCustomerContact.java new file mode 100644 index 00000000..89727c6d --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/domain/CrmCustomerContact.java @@ -0,0 +1,119 @@ +package org.dromara.oa.crm.domain; + +import org.dromara.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +import java.io.Serial; + +/** + * 客户联系人信息对象 crm_customer_contact + * + * @author Yinq + * @date 2025-09-25 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("crm_customer_contact") +public class CrmCustomerContact extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 联系人ID + */ + @TableId(value = "contact_id", type = IdType.AUTO) + private Long contactId; + + /** + * 所属客户ID + */ + private Long customerId; + + /** + * 联系人姓名 + */ + private String contactName; + + /** + * 尊称(0未知 1先生 2女士) + */ + private String sexType; + + /** + * 角色(1普通人 2决策人 3分项决策人 4商务决策 5财务决策 6使用人 7意见影响人) + */ + private Long roleType; + + /** + * 是否首要联系人(0否 1是) + */ + private String firstFlag; + + /** + * 生日 + */ + private Date birthday; + + /** + * 部门职务 + */ + private String departmentPosition; + + /** + * 详细地址 + */ + private String detailedAddress; + + /** + * 手机号码 + */ + private String phoneNumber; + + /** + * 固定电话 + */ + private String landlineNumber; + + /** + * 传真号码 + */ + private String facsimileNumber; + + /** + * 电子邮箱 + */ + private String email; + + /** + * 微信账号 + */ + private String wechatAccount; + + /** + * QQ号码 + */ + private String qqNumber; + + /** + * 备注 + */ + private String remark; + + /** + * 激活标识(1是 0否) + */ + private String activeFlag; + + /** + * 删除标志(0代表存在 1代表删除) + */ + @TableLogic + private String delFlag; + + +} diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/domain/BaseCustomer.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/domain/CrmCustomerInfo.java similarity index 85% rename from ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/domain/BaseCustomer.java rename to ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/domain/CrmCustomerInfo.java index 9ddf41b8..f7f67064 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/domain/BaseCustomer.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/domain/CrmCustomerInfo.java @@ -1,4 +1,4 @@ -package org.dromara.oa.domain; +package org.dromara.oa.crm.domain; import org.dromara.common.tenant.core.TenantEntity; import com.baomidou.mybatisplus.annotation.*; @@ -8,15 +8,15 @@ import lombok.EqualsAndHashCode; import java.io.Serial; /** - * 客户信息对象 base_customer + * 客户信息对象 crm_customer_info * * @author Yinq - * @date 2025-09-12 + * @date 2025-09-25 */ @Data @EqualsAndHashCode(callSuper = true) -@TableName("base_customer") -public class BaseCustomer extends TenantEntity { +@TableName("crm_customer_info") +public class CrmCustomerInfo extends TenantEntity { @Serial private static final long serialVersionUID = 1L; @@ -82,6 +82,11 @@ public class BaseCustomer extends TenantEntity { */ private Long parentCustomerId; + /** + * 客户关系 + */ + private String customerRelationship; + /** * 法定代表人 */ @@ -92,15 +97,25 @@ public class BaseCustomer extends TenantEntity { */ private String businessLicenseNumber; + /** + * 税号 + */ + private String taxNumber; + /** * 开户银行 */ private String bankAccountOpening; /** - * 税号 + * 银行账号 */ - private String taxNumber; + private String bankNumber; + + /** + * 附件ID + */ + private String ossId; /** * 备注 diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/domain/bo/CrmCustomerContactBo.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/domain/bo/CrmCustomerContactBo.java new file mode 100644 index 00000000..0fe02730 --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/domain/bo/CrmCustomerContactBo.java @@ -0,0 +1,111 @@ +package org.dromara.oa.crm.domain.bo; + +import org.dromara.oa.crm.domain.CrmCustomerContact; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +/** + * 客户联系人信息业务对象 crm_customer_contact + * + * @author Yinq + * @date 2025-09-25 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = CrmCustomerContact.class, reverseConvertGenerate = false) +public class CrmCustomerContactBo extends BaseEntity { + + /** + * 联系人ID + */ + private Long contactId; + + /** + * 所属客户ID + */ + private Long customerId; + + /** + * 联系人姓名 + */ + private String contactName; + + /** + * 尊称(0未知 1先生 2女士) + */ + private String sexType; + + /** + * 角色(1普通人 2决策人 3分项决策人 4商务决策 5财务决策 6使用人 7意见影响人) + */ + private Long roleType; + + /** + * 是否首要联系人(0否 1是) + */ + private String firstFlag; + + /** + * 生日 + */ + private Date birthday; + + /** + * 部门职务 + */ + private String departmentPosition; + + /** + * 详细地址 + */ + private String detailedAddress; + + /** + * 手机号码 + */ + private String phoneNumber; + + /** + * 固定电话 + */ + private String landlineNumber; + + /** + * 传真号码 + */ + private String facsimileNumber; + + /** + * 电子邮箱 + */ + private String email; + + /** + * 微信账号 + */ + private String wechatAccount; + + /** + * QQ号码 + */ + private String qqNumber; + + /** + * 备注 + */ + private String remark; + + /** + * 激活标识(1是 0否) + */ + private String activeFlag; + + +} diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/domain/bo/BaseCustomerBo.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/domain/bo/CrmCustomerInfoBo.java similarity index 75% rename from ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/domain/bo/BaseCustomerBo.java rename to ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/domain/bo/CrmCustomerInfoBo.java index 48f41e13..ae9a8c56 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/domain/bo/BaseCustomerBo.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/domain/bo/CrmCustomerInfoBo.java @@ -1,21 +1,24 @@ -package org.dromara.oa.domain.bo; +package org.dromara.oa.crm.domain.bo; -import org.dromara.oa.domain.BaseCustomer; +import org.dromara.oa.crm.domain.CrmCustomerInfo; import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; /** - * 客户信息业务对象 base_customer + * 客户信息业务对象 crm_customer_info * * @author Yinq - * @date 2025-09-12 + * @date 2025-09-25 */ @Data @EqualsAndHashCode(callSuper = true) -@AutoMapper(target = BaseCustomer.class, reverseConvertGenerate = false) -public class BaseCustomerBo extends BaseEntity { +@AutoMapper(target = CrmCustomerInfo.class, reverseConvertGenerate = false) +public class CrmCustomerInfoBo extends BaseEntity { /** * 客户ID @@ -77,6 +80,11 @@ public class BaseCustomerBo extends BaseEntity { */ private Long parentCustomerId; + /** + * 客户关系 + */ + private String customerRelationship; + /** * 法定代表人 */ @@ -87,15 +95,25 @@ public class BaseCustomerBo extends BaseEntity { */ private String businessLicenseNumber; + /** + * 税号 + */ + private String taxNumber; + /** * 开户银行 */ private String bankAccountOpening; /** - * 税号 + * 银行账号 */ - private String taxNumber; + private String bankNumber; + + /** + * 附件ID + */ + private String ossId; /** * 备注 diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/domain/vo/CrmCustomerContactVo.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/domain/vo/CrmCustomerContactVo.java new file mode 100644 index 00000000..9f41471c --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/domain/vo/CrmCustomerContactVo.java @@ -0,0 +1,140 @@ +package org.dromara.oa.crm.domain.vo; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.dromara.oa.crm.domain.CrmCustomerContact; +import cn.idev.excel.annotation.ExcelIgnoreUnannotated; +import cn.idev.excel.annotation.ExcelProperty; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + + +/** + * 客户联系人信息视图对象 crm_customer_contact + * + * @author Yinq + * @date 2025-09-25 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = CrmCustomerContact.class) +public class CrmCustomerContactVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 联系人ID + */ + @ExcelProperty(value = "联系人ID") + private Long contactId; + + /** + * 所属客户ID + */ + @ExcelProperty(value = "所属客户ID") + private Long customerId; + + /** + * 联系人姓名 + */ + @ExcelProperty(value = "联系人姓名") + private String contactName; + + /** + * 尊称(0未知 1先生 2女士) + */ + @ExcelProperty(value = "尊称", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "sex_type") + private String sexType; + + /** + * 角色(1普通人 2决策人 3分项决策人 4商务决策 5财务决策 6使用人 7意见影响人) + */ + @ExcelProperty(value = "角色", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "role_type") + private Long roleType; + + /** + * 是否首要联系人(0否 1是) + */ + @ExcelProperty(value = "是否首要联系人", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "first_flag") + private String firstFlag; + + /** + * 生日 + */ + @ExcelProperty(value = "生日") + private Date birthday; + + /** + * 部门职务 + */ + @ExcelProperty(value = "部门职务") + private String departmentPosition; + + /** + * 详细地址 + */ + @ExcelProperty(value = "详细地址") + private String detailedAddress; + + /** + * 手机号码 + */ + @ExcelProperty(value = "手机号码") + private String phoneNumber; + + /** + * 固定电话 + */ + @ExcelProperty(value = "固定电话") + private String landlineNumber; + + /** + * 传真号码 + */ + @ExcelProperty(value = "传真号码") + private String facsimileNumber; + + /** + * 电子邮箱 + */ + @ExcelProperty(value = "电子邮箱") + private String email; + + /** + * 微信账号 + */ + @ExcelProperty(value = "微信账号") + private String wechatAccount; + + /** + * QQ号码 + */ + @ExcelProperty(value = "QQ号码") + private String qqNumber; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + /** + * 激活标识(1是 0否) + */ + @ExcelProperty(value = "激活标识", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "1=是,0=否") + private String activeFlag; + + +} diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/domain/vo/BaseCustomerVo.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/domain/vo/CrmCustomerInfoVo.java similarity index 83% rename from ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/domain/vo/BaseCustomerVo.java rename to ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/domain/vo/CrmCustomerInfoVo.java index 8507e887..d070d160 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/domain/vo/BaseCustomerVo.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/domain/vo/CrmCustomerInfoVo.java @@ -1,6 +1,6 @@ -package org.dromara.oa.domain.vo; +package org.dromara.oa.crm.domain.vo; -import org.dromara.oa.domain.BaseCustomer; +import org.dromara.oa.crm.domain.CrmCustomerInfo; import cn.idev.excel.annotation.ExcelIgnoreUnannotated; import cn.idev.excel.annotation.ExcelProperty; import org.dromara.common.excel.annotation.ExcelDictFormat; @@ -15,15 +15,15 @@ import java.util.Date; /** - * 客户信息视图对象 base_customer + * 客户信息视图对象 crm_customer_info * * @author Yinq - * @date 2025-09-12 + * @date 2025-09-25 */ @Data @ExcelIgnoreUnannotated -@AutoMapper(target = BaseCustomer.class) -public class BaseCustomerVo implements Serializable { +@AutoMapper(target = CrmCustomerInfo.class) +public class CrmCustomerInfoVo implements Serializable { @Serial private static final long serialVersionUID = 1L; @@ -106,6 +106,12 @@ public class BaseCustomerVo implements Serializable { @ExcelProperty(value = "下级客户") private Long parentCustomerId; + /** + * 客户关系 + */ + @ExcelProperty(value = "客户关系") + private String customerRelationship; + /** * 法定代表人 */ @@ -118,6 +124,12 @@ public class BaseCustomerVo implements Serializable { @ExcelProperty(value = "营业执照号码") private String businessLicenseNumber; + /** + * 税号 + */ + @ExcelProperty(value = "税号") + private String taxNumber; + /** * 开户银行 */ @@ -125,10 +137,16 @@ public class BaseCustomerVo implements Serializable { private String bankAccountOpening; /** - * 税号 + * 银行账号 */ - @ExcelProperty(value = "税号") - private String taxNumber; + @ExcelProperty(value = "银行账号") + private String bankNumber; + + /** + * 附件ID + */ + @ExcelProperty(value = "附件ID") + private String ossId; /** * 备注 @@ -143,35 +161,5 @@ public class BaseCustomerVo implements Serializable { @ExcelDictFormat(dictType = "active_flag") private String activeFlag; - /** - * 创建部门 - */ - @ExcelProperty(value = "创建部门") - private Long createDept; - - /** - * 创建人 - */ - @ExcelProperty(value = "创建人") - private Long createBy; - - /** - * 创建时间 - */ - @ExcelProperty(value = "创建时间") - private Date createTime; - - /** - * 更新人 - */ - @ExcelProperty(value = "更新人") - private Long updateBy; - - /** - * 更新时间 - */ - @ExcelProperty(value = "更新时间") - private Date updateTime; - } diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/mapper/CrmCustomerContactMapper.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/mapper/CrmCustomerContactMapper.java new file mode 100644 index 00000000..a23526ad --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/mapper/CrmCustomerContactMapper.java @@ -0,0 +1,37 @@ +package org.dromara.oa.crm.mapper; + +import java.util.List; +import com.github.yulichang.wrapper.MPJLambdaWrapper; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.ibatis.annotations.Param; +import org.dromara.oa.crm.domain.CrmCustomerContact; +import org.dromara.oa.crm.domain.vo.CrmCustomerContactVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 客户联系人信息Mapper接口 + * + * @author Yinq + * @date 2025-09-25 + */ +public interface CrmCustomerContactMapper extends BaseMapperPlus { + + /** + * 查询客户联系人信息列表 + * + * @param page 分页 + * @param queryWrapper 条件 + * @return 客户联系人信息集合 + */ + public Page selectCustomCrmCustomerContactVoList(@Param("page") Page page, @Param(Constants.WRAPPER) MPJLambdaWrapper queryWrapper); + + /** + * 查询客户联系人信息列表 + * + * @param queryWrapper 条件 + * @return 客户联系人信息集合 + */ + public List selectCustomCrmCustomerContactVoList(@Param(Constants.WRAPPER) MPJLambdaWrapper queryWrapper); + +} diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/mapper/BaseCustomerMapper.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/mapper/CrmCustomerInfoMapper.java similarity index 52% rename from ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/mapper/BaseCustomerMapper.java rename to ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/mapper/CrmCustomerInfoMapper.java index b5306ea7..67e99fc0 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/mapper/BaseCustomerMapper.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/mapper/CrmCustomerInfoMapper.java @@ -1,21 +1,21 @@ -package org.dromara.oa.mapper; +package org.dromara.oa.crm.mapper; import java.util.List; import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.ibatis.annotations.Param; -import org.dromara.oa.domain.BaseCustomer; -import org.dromara.oa.domain.vo.BaseCustomerVo; +import org.dromara.oa.crm.domain.CrmCustomerInfo; +import org.dromara.oa.crm.domain.vo.CrmCustomerInfoVo; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; /** * 客户信息Mapper接口 * * @author Yinq - * @date 2025-09-15 + * @date 2025-09-25 */ -public interface BaseCustomerMapper extends BaseMapperPlus { +public interface CrmCustomerInfoMapper extends BaseMapperPlus { /** * 查询客户信息列表 @@ -24,7 +24,7 @@ public interface BaseCustomerMapper extends BaseMapperPlus selectCustomBaseCustomerVoList(@Param("page") Page page, @Param(Constants.WRAPPER) MPJLambdaWrapper queryWrapper); + public Page selectCustomCrmCustomerInfoVoList(@Param("page") Page page, @Param(Constants.WRAPPER) MPJLambdaWrapper queryWrapper); /** * 查询客户信息列表 @@ -32,6 +32,6 @@ public interface BaseCustomerMapper extends BaseMapperPlus selectCustomBaseCustomerVoList(@Param(Constants.WRAPPER) MPJLambdaWrapper queryWrapper); + public List selectCustomCrmCustomerInfoVoList(@Param(Constants.WRAPPER) MPJLambdaWrapper queryWrapper); } diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/service/ICrmCustomerContactService.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/service/ICrmCustomerContactService.java new file mode 100644 index 00000000..7e529200 --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/service/ICrmCustomerContactService.java @@ -0,0 +1,69 @@ +package org.dromara.oa.crm.service; + +import org.dromara.oa.crm.domain.CrmCustomerContact; +import org.dromara.oa.crm.domain.vo.CrmCustomerContactVo; +import org.dromara.oa.crm.domain.bo.CrmCustomerContactBo; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 客户联系人信息Service接口 + * + * @author Yinq + * @date 2025-09-25 + */ +public interface ICrmCustomerContactService { + + /** + * 查询客户联系人信息 + * + * @param contactId 主键 + * @return 客户联系人信息 + */ + CrmCustomerContactVo queryById(Long contactId); + + /** + * 分页查询客户联系人信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 客户联系人信息分页列表 + */ + TableDataInfo queryPageList(CrmCustomerContactBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的客户联系人信息列表 + * + * @param bo 查询条件 + * @return 客户联系人信息列表 + */ + List queryList(CrmCustomerContactBo bo); + + /** + * 新增客户联系人信息 + * + * @param bo 客户联系人信息 + * @return 是否新增成功 + */ + Boolean insertByBo(CrmCustomerContactBo bo); + + /** + * 修改客户联系人信息 + * + * @param bo 客户联系人信息 + * @return 是否修改成功 + */ + Boolean updateByBo(CrmCustomerContactBo bo); + + /** + * 校验并批量删除客户联系人信息信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/service/IBaseCustomerService.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/service/ICrmCustomerInfoService.java similarity index 67% rename from ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/service/IBaseCustomerService.java rename to ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/service/ICrmCustomerInfoService.java index c3299d29..e5e6b4b5 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/service/IBaseCustomerService.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/service/ICrmCustomerInfoService.java @@ -1,8 +1,8 @@ -package org.dromara.oa.service; +package org.dromara.oa.crm.service; -import org.dromara.oa.domain.BaseCustomer; -import org.dromara.oa.domain.vo.BaseCustomerVo; -import org.dromara.oa.domain.bo.BaseCustomerBo; +import org.dromara.oa.crm.domain.CrmCustomerInfo; +import org.dromara.oa.crm.domain.vo.CrmCustomerInfoVo; +import org.dromara.oa.crm.domain.bo.CrmCustomerInfoBo; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.PageQuery; @@ -13,9 +13,9 @@ import java.util.List; * 客户信息Service接口 * * @author Yinq - * @date 2025-09-12 + * @date 2025-09-25 */ -public interface IBaseCustomerService { +public interface ICrmCustomerInfoService { /** * 查询客户信息 @@ -23,7 +23,7 @@ public interface IBaseCustomerService { * @param customerId 主键 * @return 客户信息 */ - BaseCustomerVo queryById(Long customerId); + CrmCustomerInfoVo queryById(Long customerId); /** * 分页查询客户信息列表 @@ -32,7 +32,7 @@ public interface IBaseCustomerService { * @param pageQuery 分页参数 * @return 客户信息分页列表 */ - TableDataInfo queryPageList(BaseCustomerBo bo, PageQuery pageQuery); + TableDataInfo queryPageList(CrmCustomerInfoBo bo, PageQuery pageQuery); /** * 查询符合条件的客户信息列表 @@ -40,7 +40,7 @@ public interface IBaseCustomerService { * @param bo 查询条件 * @return 客户信息列表 */ - List queryList(BaseCustomerBo bo); + List queryList(CrmCustomerInfoBo bo); /** * 新增客户信息 @@ -48,7 +48,7 @@ public interface IBaseCustomerService { * @param bo 客户信息 * @return 是否新增成功 */ - Boolean insertByBo(BaseCustomerBo bo); + Boolean insertByBo(CrmCustomerInfoBo bo); /** * 修改客户信息 @@ -56,7 +56,7 @@ public interface IBaseCustomerService { * @param bo 客户信息 * @return 是否修改成功 */ - Boolean updateByBo(BaseCustomerBo bo); + Boolean updateByBo(CrmCustomerInfoBo bo); /** * 校验并批量删除客户信息信息 diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/service/impl/CrmCustomerContactServiceImpl.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/service/impl/CrmCustomerContactServiceImpl.java new file mode 100644 index 00000000..5e8cccf5 --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/service/impl/CrmCustomerContactServiceImpl.java @@ -0,0 +1,145 @@ +package org.dromara.oa.crm.service.impl; + +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.github.yulichang.toolkit.JoinWrappers; +import com.github.yulichang.wrapper.MPJLambdaWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.dromara.oa.crm.domain.bo.CrmCustomerContactBo; +import org.dromara.oa.crm.domain.vo.CrmCustomerContactVo; +import org.dromara.oa.crm.domain.CrmCustomerContact; +import org.dromara.oa.crm.mapper.CrmCustomerContactMapper; +import org.dromara.oa.crm.service.ICrmCustomerContactService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 客户联系人信息Service业务层处理 + * + * @author Yinq + * @date 2025-09-25 + */ +@RequiredArgsConstructor +@Service +public class CrmCustomerContactServiceImpl implements ICrmCustomerContactService { + + private final CrmCustomerContactMapper baseMapper; + + /** + * 查询客户联系人信息 + * + * @param contactId 主键 + * @return 客户联系人信息 + */ + @Override + public CrmCustomerContactVo queryById(Long contactId) { + return baseMapper.selectVoById(contactId); + } + + /** + * 分页查询客户联系人信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 客户联系人信息分页列表 + */ + @Override + public TableDataInfo queryPageList(CrmCustomerContactBo bo, PageQuery pageQuery) { + MPJLambdaWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的客户联系人信息列表 + * + * @param bo 查询条件 + * @return 客户联系人信息列表 + */ + @Override + public List queryList(CrmCustomerContactBo bo) { + MPJLambdaWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private MPJLambdaWrapper buildQueryWrapper(CrmCustomerContactBo bo) { + Map params = bo.getParams(); + MPJLambdaWrapper lqw = JoinWrappers.lambda(CrmCustomerContact.class) + .selectAll(CrmCustomerContact.class) + .eq(bo.getCustomerId() != null, CrmCustomerContact::getCustomerId, bo.getCustomerId()) + .like(StringUtils.isNotBlank(bo.getContactName()), CrmCustomerContact::getContactName, bo.getContactName()) + .eq(StringUtils.isNotBlank(bo.getSexType()), CrmCustomerContact::getSexType, bo.getSexType()) + .eq(bo.getRoleType() != null, CrmCustomerContact::getRoleType, bo.getRoleType()) + .eq(StringUtils.isNotBlank(bo.getFirstFlag()), CrmCustomerContact::getFirstFlag, bo.getFirstFlag()) + .eq(bo.getBirthday() != null, CrmCustomerContact::getBirthday, bo.getBirthday()) + .eq(StringUtils.isNotBlank(bo.getDepartmentPosition()), CrmCustomerContact::getDepartmentPosition, bo.getDepartmentPosition()) + .eq(StringUtils.isNotBlank(bo.getDetailedAddress()), CrmCustomerContact::getDetailedAddress, bo.getDetailedAddress()) + .eq(StringUtils.isNotBlank(bo.getPhoneNumber()), CrmCustomerContact::getPhoneNumber, bo.getPhoneNumber()) + .eq(StringUtils.isNotBlank(bo.getLandlineNumber()), CrmCustomerContact::getLandlineNumber, bo.getLandlineNumber()) + .eq(StringUtils.isNotBlank(bo.getFacsimileNumber()), CrmCustomerContact::getFacsimileNumber, bo.getFacsimileNumber()) + .eq(StringUtils.isNotBlank(bo.getEmail()), CrmCustomerContact::getEmail, bo.getEmail()) + .eq(StringUtils.isNotBlank(bo.getWechatAccount()), CrmCustomerContact::getWechatAccount, bo.getWechatAccount()) + .eq(StringUtils.isNotBlank(bo.getQqNumber()), CrmCustomerContact::getQqNumber, bo.getQqNumber()) + .eq(StringUtils.isNotBlank(bo.getActiveFlag()), CrmCustomerContact::getActiveFlag, bo.getActiveFlag()); + return lqw; + } + + /** + * 新增客户联系人信息 + * + * @param bo 客户联系人信息 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(CrmCustomerContactBo bo) { + CrmCustomerContact add = MapstructUtils.convert(bo, CrmCustomerContact.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setContactId(add.getContactId()); + } + return flag; + } + + /** + * 修改客户联系人信息 + * + * @param bo 客户联系人信息 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(CrmCustomerContactBo bo) { + CrmCustomerContact update = MapstructUtils.convert(bo, CrmCustomerContact.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(CrmCustomerContact entity) { + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除客户联系人信息信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if (isValid) { + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/service/impl/CrmCustomerInfoServiceImpl.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/service/impl/CrmCustomerInfoServiceImpl.java new file mode 100644 index 00000000..ed54a9d5 --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/service/impl/CrmCustomerInfoServiceImpl.java @@ -0,0 +1,149 @@ +package org.dromara.oa.crm.service.impl; + +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; + import org.dromara.common.mybatis.core.page.TableDataInfo; + import org.dromara.common.mybatis.core.page.PageQuery; + import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.github.yulichang.toolkit.JoinWrappers; +import com.github.yulichang.wrapper.MPJLambdaWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.dromara.oa.crm.domain.bo.CrmCustomerInfoBo; +import org.dromara.oa.crm.domain.vo.CrmCustomerInfoVo; +import org.dromara.oa.crm.domain.CrmCustomerInfo; +import org.dromara.oa.crm.mapper.CrmCustomerInfoMapper; +import org.dromara.oa.crm.service.ICrmCustomerInfoService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 客户信息Service业务层处理 + * + * @author Yinq + * @date 2025-09-25 + */ +@RequiredArgsConstructor +@Service +public class CrmCustomerInfoServiceImpl implements ICrmCustomerInfoService { + + private final CrmCustomerInfoMapper baseMapper; + + /** + * 查询客户信息 + * + * @param customerId 主键 + * @return 客户信息 + */ + @Override + public CrmCustomerInfoVo queryById(Long customerId){ + return baseMapper.selectVoById(customerId); + } + + /** + * 分页查询客户信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 客户信息分页列表 + */ + @Override + public TableDataInfo queryPageList(CrmCustomerInfoBo bo, PageQuery pageQuery) { + MPJLambdaWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的客户信息列表 + * + * @param bo 查询条件 + * @return 客户信息列表 + */ + @Override + public List queryList(CrmCustomerInfoBo bo) { + MPJLambdaWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private MPJLambdaWrapper buildQueryWrapper(CrmCustomerInfoBo bo) { + Map params = bo.getParams(); + MPJLambdaWrapper lqw = JoinWrappers.lambda(CrmCustomerInfo.class) + .selectAll(CrmCustomerInfo.class) + .like(StringUtils.isNotBlank(bo.getCustomerName()), CrmCustomerInfo::getCustomerName, bo.getCustomerName()) + .like(StringUtils.isNotBlank(bo.getMnemonicName()), CrmCustomerInfo::getMnemonicName, bo.getMnemonicName()) + .eq(bo.getIndustryId() != null, CrmCustomerInfo::getIndustryId, bo.getIndustryId()) + .eq(bo.getCustomerType() != null, CrmCustomerInfo::getCustomerType, bo.getCustomerType()) + .eq(bo.getCustomerStatus() != null, CrmCustomerInfo::getCustomerStatus, bo.getCustomerStatus()) + .eq(bo.getCustomerLevel() != null, CrmCustomerInfo::getCustomerLevel, bo.getCustomerLevel()) + .eq(bo.getCustomerSource() != null, CrmCustomerInfo::getCustomerSource, bo.getCustomerSource()) + .eq(bo.getOwnerId() != null, CrmCustomerInfo::getOwnerId, bo.getOwnerId()) + .eq(StringUtils.isNotBlank(bo.getDetailedAddress()), CrmCustomerInfo::getDetailedAddress, bo.getDetailedAddress()) + .eq(bo.getCustomerScale() != null, CrmCustomerInfo::getCustomerScale, bo.getCustomerScale()) + .eq(bo.getParentCustomerId() != null, CrmCustomerInfo::getParentCustomerId, bo.getParentCustomerId()) + .eq(StringUtils.isNotBlank(bo.getCustomerRelationship()), CrmCustomerInfo::getCustomerRelationship, bo.getCustomerRelationship()) + .eq(StringUtils.isNotBlank(bo.getLegalRepresentative()), CrmCustomerInfo::getLegalRepresentative, bo.getLegalRepresentative()) + .eq(StringUtils.isNotBlank(bo.getBusinessLicenseNumber()), CrmCustomerInfo::getBusinessLicenseNumber, bo.getBusinessLicenseNumber()) + .eq(StringUtils.isNotBlank(bo.getTaxNumber()), CrmCustomerInfo::getTaxNumber, bo.getTaxNumber()) + .eq(StringUtils.isNotBlank(bo.getBankAccountOpening()), CrmCustomerInfo::getBankAccountOpening, bo.getBankAccountOpening()) + .eq(StringUtils.isNotBlank(bo.getBankNumber()), CrmCustomerInfo::getBankNumber, bo.getBankNumber()) + .eq(StringUtils.isNotBlank(bo.getOssId()), CrmCustomerInfo::getOssId, bo.getOssId()) + .eq(StringUtils.isNotBlank(bo.getActiveFlag()), CrmCustomerInfo::getActiveFlag, bo.getActiveFlag()); + return lqw; + } + + /** + * 新增客户信息 + * + * @param bo 客户信息 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(CrmCustomerInfoBo bo) { + CrmCustomerInfo add = MapstructUtils.convert(bo, CrmCustomerInfo.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setCustomerId(add.getCustomerId()); + } + return flag; + } + + /** + * 修改客户信息 + * + * @param bo 客户信息 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(CrmCustomerInfoBo bo) { + CrmCustomerInfo update = MapstructUtils.convert(bo, CrmCustomerInfo.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(CrmCustomerInfo entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除客户信息信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/service/impl/BaseCustomerServiceImpl.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/service/impl/BaseCustomerServiceImpl.java deleted file mode 100644 index 58c4e437..00000000 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/service/impl/BaseCustomerServiceImpl.java +++ /dev/null @@ -1,147 +0,0 @@ -package org.dromara.oa.service.impl; - -import org.dromara.common.core.utils.MapstructUtils; -import org.dromara.common.core.utils.StringUtils; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.common.mybatis.core.page.PageQuery; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.github.yulichang.toolkit.JoinWrappers; -import com.github.yulichang.wrapper.MPJLambdaWrapper; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; -import org.dromara.oa.domain.bo.BaseCustomerBo; -import org.dromara.oa.domain.vo.BaseCustomerVo; -import org.dromara.oa.domain.BaseCustomer; -import org.dromara.oa.mapper.BaseCustomerMapper; -import org.dromara.oa.service.IBaseCustomerService; - -import java.util.List; -import java.util.Map; -import java.util.Collection; - -/** - * 客户信息Service业务层处理 - * - * @author Yinq - * @date 2025-09-15 - */ -@RequiredArgsConstructor -@Service -public class BaseCustomerServiceImpl implements IBaseCustomerService { - - private final BaseCustomerMapper baseMapper; - - /** - * 查询客户信息 - * - * @param customerId 主键 - * @return 客户信息 - */ - @Override - public BaseCustomerVo queryById(Long customerId) { - return baseMapper.selectVoById(customerId); - } - - /** - * 分页查询客户信息列表 - * - * @param bo 查询条件 - * @param pageQuery 分页参数 - * @return 客户信息分页列表 - */ - @Override - public TableDataInfo queryPageList(BaseCustomerBo bo, PageQuery pageQuery) { - MPJLambdaWrapper lqw = buildQueryWrapper(bo); - Page result = baseMapper.selectCustomBaseCustomerVoList(pageQuery.build(), lqw); - return TableDataInfo.build(result); - } - - /** - * 查询符合条件的客户信息列表 - * - * @param bo 查询条件 - * @return 客户信息列表 - */ - @Override - public List queryList(BaseCustomerBo bo) { - MPJLambdaWrapper lqw = buildQueryWrapper(bo); - return baseMapper.selectCustomBaseCustomerVoList(lqw); - } - - private MPJLambdaWrapper buildQueryWrapper(BaseCustomerBo bo) { - Map params = bo.getParams(); - MPJLambdaWrapper lqw = JoinWrappers.lambda(BaseCustomer.class) - .selectAll(BaseCustomer.class) - .like(StringUtils.isNotBlank(bo.getCustomerName()), BaseCustomer::getCustomerName, bo.getCustomerName()) - .like(StringUtils.isNotBlank(bo.getMnemonicName()), BaseCustomer::getMnemonicName, bo.getMnemonicName()) - .eq(bo.getIndustryId() != null, BaseCustomer::getIndustryId, bo.getIndustryId()) - .eq(bo.getCustomerType() != null, BaseCustomer::getCustomerType, bo.getCustomerType()) - .eq(bo.getCustomerStatus() != null, BaseCustomer::getCustomerStatus, bo.getCustomerStatus()) - .eq(bo.getCustomerLevel() != null, BaseCustomer::getCustomerLevel, bo.getCustomerLevel()) - .eq(bo.getCustomerSource() != null, BaseCustomer::getCustomerSource, bo.getCustomerSource()) - .eq(bo.getOwnerId() != null, BaseCustomer::getOwnerId, bo.getOwnerId()) - .eq(StringUtils.isNotBlank(bo.getDetailedAddress()), BaseCustomer::getDetailedAddress, bo.getDetailedAddress()) - .eq(bo.getCustomerScale() != null, BaseCustomer::getCustomerScale, bo.getCustomerScale()) - .eq(bo.getParentCustomerId() != null, BaseCustomer::getParentCustomerId, bo.getParentCustomerId()) - .eq(StringUtils.isNotBlank(bo.getLegalRepresentative()), BaseCustomer::getLegalRepresentative, bo.getLegalRepresentative()) - .eq(StringUtils.isNotBlank(bo.getBusinessLicenseNumber()), BaseCustomer::getBusinessLicenseNumber, bo.getBusinessLicenseNumber()) - .eq(StringUtils.isNotBlank(bo.getBankAccountOpening()), BaseCustomer::getBankAccountOpening, bo.getBankAccountOpening()) - .eq(StringUtils.isNotBlank(bo.getTaxNumber()), BaseCustomer::getTaxNumber, bo.getTaxNumber()) - .eq(StringUtils.isNotBlank(bo.getActiveFlag()), BaseCustomer::getActiveFlag, bo.getActiveFlag()) - .orderByAsc(BaseCustomer::getCustomerId); - return lqw; - } - - /** - * 新增客户信息 - * - * @param bo 客户信息 - * @return 是否新增成功 - */ - @Override - public Boolean insertByBo(BaseCustomerBo bo) { - BaseCustomer add = MapstructUtils.convert(bo, BaseCustomer.class); - validEntityBeforeSave(add); - boolean flag = baseMapper.insert(add) > 0; - if (flag) { - bo.setCustomerId(add.getCustomerId()); - } - return flag; - } - - /** - * 修改客户信息 - * - * @param bo 客户信息 - * @return 是否修改成功 - */ - @Override - public Boolean updateByBo(BaseCustomerBo bo) { - BaseCustomer update = MapstructUtils.convert(bo, BaseCustomer.class); - validEntityBeforeSave(update); - return baseMapper.updateById(update) > 0; - } - - /** - * 保存前的数据校验 - */ - private void validEntityBeforeSave(BaseCustomer entity) { - //TODO 做一些数据校验,如唯一约束 - } - - /** - * 校验并批量删除客户信息信息 - * - * @param ids 待删除的主键集合 - * @param isValid 是否进行有效性校验 - * @return 是否删除成功 - */ - @Override - public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { - if (isValid) { - //TODO 做一些业务上的校验,判断是否需要校验 - } - return baseMapper.deleteByIds(ids) > 0; - } -} diff --git a/ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/BaseCustomerMapper.xml b/ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/BaseCustomerMapper.xml deleted file mode 100644 index 0771d5b8..00000000 --- a/ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/BaseCustomerMapper.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - diff --git a/ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/crm/CrmCustomerContactMapper.xml b/ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/crm/CrmCustomerContactMapper.xml new file mode 100644 index 00000000..52f0fecf --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/crm/CrmCustomerContactMapper.xml @@ -0,0 +1,14 @@ + + + + + + + + + diff --git a/ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/crm/CrmCustomerInfoMapper.xml b/ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/crm/CrmCustomerInfoMapper.xml new file mode 100644 index 00000000..fa6d9d58 --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/crm/CrmCustomerInfoMapper.xml @@ -0,0 +1,14 @@ + + + + + + + + +