From 1492ffd32e43d0294cc6ac9a4f4389cd50d91fe9 Mon Sep 17 00:00:00 2001
From: liyong <18434998025@163.com>
Date: 星期四, 07 五月 2026 16:38:00 +0800
Subject: [PATCH] feat(basic): 添加客户联系人管理功能
---
src/main/java/com/ruoyi/basic/dto/CustomerContactDto.java | 15 ++
src/main/java/com/ruoyi/basic/pojo/CustomerContact.java | 105 +++++++++++++++++
src/main/java/com/ruoyi/basic/controller/CustomerContactController.java | 64 ++++++++++
src/main/java/com/ruoyi/basic/mapper/CustomerContactMapper.java | 23 +++
src/main/java/com/ruoyi/basic/service/impl/CustomerContactServiceImpl.java | 84 ++++++++++++++
src/main/java/com/ruoyi/basic/service/CustomerContactService.java | 26 ++++
src/main/resources/mapper/basic/CustomerContactMapper.xml | 38 ++++++
7 files changed, 355 insertions(+), 0 deletions(-)
diff --git a/src/main/java/com/ruoyi/basic/controller/CustomerContactController.java b/src/main/java/com/ruoyi/basic/controller/CustomerContactController.java
new file mode 100644
index 0000000..e5e8ce9
--- /dev/null
+++ b/src/main/java/com/ruoyi/basic/controller/CustomerContactController.java
@@ -0,0 +1,64 @@
+package com.ruoyi.basic.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.basic.dto.CustomerContactDto;
+import com.ruoyi.basic.service.CustomerContactService;
+import com.ruoyi.framework.web.domain.R;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * <p>
+ * 瀹㈡埛鑱旂郴浜鸿〃 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-05-07 03:46:40
+ */
+@RestController
+@RequestMapping("/customerContact")
+@AllArgsConstructor
+@Tag(name = "瀹㈡埛鑱旂郴浜鸿〃")
+public class CustomerContactController {
+
+ private final CustomerContactService customerContactService;
+
+ /**
+ * 鍒嗛〉鏌ヨ
+ * @param page
+ * @param customerContact
+ * @return
+ */
+ @GetMapping("/listPage")
+ @Operation(summary = "鍒嗛〉鏌ヨ")
+ public R listPage(Page<CustomerContactDto> page, CustomerContactDto customerContact) {
+ return R.ok(customerContactService.listPage(page, customerContact));
+ }
+
+
+ @PostMapping("/add")
+ @Operation(summary = "娣诲姞")
+ public R add(@RequestBody CustomerContactDto customerContact) {
+ return R.ok(customerContactService.add(customerContact));
+ }
+
+ @PutMapping("update")
+ @Operation(summary = "淇敼")
+ public R update(@RequestBody CustomerContactDto customerContact) {
+ return R.ok(customerContactService.updateCustomerContact(customerContact));
+ }
+
+ @GetMapping("/getById/{id}")
+ @Operation(summary = "閫氳繃id鏌ヨ")
+ public R getById(@PathVariable("id") Long id) {
+ return R.ok(customerContactService.getCustomerContactDtoById(id));
+ }
+
+ @DeleteMapping("/delete")
+ @Operation(summary = "鍒犻櫎")
+ public R delete(@RequestBody CustomerContactDto customerContact) {
+ return R.ok(customerContactService.removeById(customerContact));
+ }
+}
diff --git a/src/main/java/com/ruoyi/basic/dto/CustomerContactDto.java b/src/main/java/com/ruoyi/basic/dto/CustomerContactDto.java
new file mode 100644
index 0000000..0244372
--- /dev/null
+++ b/src/main/java/com/ruoyi/basic/dto/CustomerContactDto.java
@@ -0,0 +1,15 @@
+package com.ruoyi.basic.dto;
+
+import com.ruoyi.basic.pojo.CustomerContact;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class CustomerContactDto extends CustomerContact {
+
+ private String customerNames;
+
+ private List<Long> customerIdList;
+
+}
diff --git a/src/main/java/com/ruoyi/basic/mapper/CustomerContactMapper.java b/src/main/java/com/ruoyi/basic/mapper/CustomerContactMapper.java
new file mode 100644
index 0000000..8e376a4
--- /dev/null
+++ b/src/main/java/com/ruoyi/basic/mapper/CustomerContactMapper.java
@@ -0,0 +1,23 @@
+package com.ruoyi.basic.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.basic.dto.CustomerContactDto;
+import com.ruoyi.basic.pojo.CustomerContact;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 瀹㈡埛鑱旂郴浜鸿〃 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-05-07 03:46:40
+ */
+@Mapper
+public interface CustomerContactMapper extends BaseMapper<CustomerContact> {
+
+ IPage<CustomerContactDto> listPage(Page<CustomerContactDto> page, @Param("customerContactDto") CustomerContactDto customerContactDto);
+}
diff --git a/src/main/java/com/ruoyi/basic/pojo/CustomerContact.java b/src/main/java/com/ruoyi/basic/pojo/CustomerContact.java
new file mode 100644
index 0000000..1edc1ab
--- /dev/null
+++ b/src/main/java/com/ruoyi/basic/pojo/CustomerContact.java
@@ -0,0 +1,105 @@
+package com.ruoyi.basic.pojo;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 瀹㈡埛鑱旂郴浜鸿〃
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-05-07 03:46:40
+ */
+@Getter
+@Setter
+@ToString
+@TableName("customer_contact")
+@ApiModel(value = "CustomerContact瀵硅薄", description = "瀹㈡埛鑱旂郴浜鸿〃")
+public class CustomerContact implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 涓婚敭ID
+ */
+ @ApiModelProperty("涓婚敭ID")
+ @TableId(value = "id", type = IdType.AUTO)
+ private Long id;
+
+ /**
+ * 鑱旂郴浜哄悕绉�
+ */
+ @ApiModelProperty("鑱旂郴浜哄悕绉�")
+ private String contactName;
+
+ /**
+ * 鐢佃瘽
+ */
+ @ApiModelProperty("鐢佃瘽")
+ private String phone;
+
+ /**
+ * 鍏宠仈瀹㈡埛淇℃伅琛↖D
+ */
+ @ApiModelProperty("鍏宠仈瀹㈡埛淇℃伅琛↖D")
+ private String customerId;
+
+ /**
+ * 閮ㄩ棬ID
+ */
+ @ApiModelProperty("閮ㄩ棬ID")
+ @TableField(fill = FieldFill.INSERT)
+ private Long deptId;
+
+ /**
+ * 鍒涘缓浜�
+ */
+ @ApiModelProperty("鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Long createUser;
+
+ /**
+ * 鍒涘缓鏃堕棿
+ */
+ @ApiModelProperty("鍒涘缓鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ /**
+ * 鏇存柊浜�
+ */
+ @ApiModelProperty("鏇存柊浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Long updateUser;
+
+ /**
+ * 鏇存柊鏃堕棿
+ */
+ @ApiModelProperty("鏇存柊鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+ /**
+ * 澶囨敞
+ */
+ @ApiModelProperty("澶囨敞")
+ private String remark;
+
+ /**
+ * 鍒犻櫎鏍囧織锛�0浠h〃瀛樺湪 2浠h〃鍒犻櫎锛�
+ */
+ @ApiModelProperty("鍒犻櫎鏍囧織锛�0浠h〃瀛樺湪 2浠h〃鍒犻櫎锛�")
+ private String delFlag;
+}
diff --git a/src/main/java/com/ruoyi/basic/service/CustomerContactService.java b/src/main/java/com/ruoyi/basic/service/CustomerContactService.java
new file mode 100644
index 0000000..aa71f50
--- /dev/null
+++ b/src/main/java/com/ruoyi/basic/service/CustomerContactService.java
@@ -0,0 +1,26 @@
+package com.ruoyi.basic.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.basic.dto.CustomerContactDto;
+import com.ruoyi.basic.pojo.CustomerContact;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 瀹㈡埛鑱旂郴浜鸿〃 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-05-07 03:46:40
+ */
+public interface CustomerContactService extends IService<CustomerContact> {
+
+ IPage<CustomerContactDto> listPage(Page<CustomerContactDto> page, CustomerContactDto customerContact);
+
+ Boolean add(CustomerContactDto customerContact);
+
+ Boolean updateCustomerContact(CustomerContactDto customerContact);
+
+ CustomerContactDto getCustomerContactDtoById(Long id);
+}
diff --git a/src/main/java/com/ruoyi/basic/service/impl/CustomerContactServiceImpl.java b/src/main/java/com/ruoyi/basic/service/impl/CustomerContactServiceImpl.java
new file mode 100644
index 0000000..281b214
--- /dev/null
+++ b/src/main/java/com/ruoyi/basic/service/impl/CustomerContactServiceImpl.java
@@ -0,0 +1,84 @@
+package com.ruoyi.basic.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.basic.dto.CustomerContactDto;
+import com.ruoyi.basic.mapper.CustomerContactMapper;
+import com.ruoyi.basic.pojo.CustomerContact;
+import com.ruoyi.basic.service.CustomerContactService;
+import com.ruoyi.common.utils.bean.BeanUtils;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 瀹㈡埛鑱旂郴浜鸿〃 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-05-07 03:46:40
+ */
+@Service
+@RequiredArgsConstructor
+public class CustomerContactServiceImpl extends ServiceImpl<CustomerContactMapper, CustomerContact> implements CustomerContactService {
+
+ private final CustomerContactMapper customerContactMapper;
+ @Override
+ public IPage<CustomerContactDto> listPage(Page<CustomerContactDto> page, CustomerContactDto customerContactDto) {
+ return customerContactMapper.listPage(page,customerContactDto);
+ }
+
+ @Override
+ public Boolean add(CustomerContactDto customerContact) {
+ List<Long> idList = customerContact.getCustomerIdList();
+ if (idList != null && !idList.isEmpty()) {
+ String result = idList.stream()
+ .filter(Objects::nonNull)
+ .distinct()
+ .map(String::valueOf) // 灏� Long 杞崲涓� String
+ .collect(Collectors.joining(","));
+ customerContact.setCustomerId(result);
+ }
+ return save(customerContact);
+
+ }
+
+ @Override
+ public Boolean updateCustomerContact(CustomerContactDto customerContact) {
+ List<Long> idList = customerContact.getCustomerIdList();
+ if (idList != null && !idList.isEmpty()) {
+ String result = idList.stream()
+ .filter(Objects::nonNull)
+ .distinct()
+ .map(String::valueOf) // 灏� Long 杞崲涓� String
+ .collect(Collectors.joining(","));
+ customerContact.setCustomerId(result);
+ }
+ return updateById(customerContact);
+ }
+
+ @Override
+ public CustomerContactDto getCustomerContactDtoById(Long id) {
+ CustomerContact byId = getById(id);
+ CustomerContactDto customerContactDto = new CustomerContactDto();
+ BeanUtils.copyProperties(byId, customerContactDto);
+ if (byId != null && byId.getCustomerId() != null && !byId.getCustomerId().isEmpty()) {
+ List<Long> idList = Arrays.stream(byId.getCustomerId().split(","))
+ .map(String::trim) // 鍘婚櫎鍙兘鐨勭┖鏍�
+ .filter(s -> !s.isEmpty()) // 杩囨护绌哄瓧绗︿覆
+ .map(Long::parseLong) // 杞崲涓� Long
+ .collect(Collectors.toList());
+ customerContactDto.setCustomerIdList(idList);
+ } else {
+ customerContactDto.setCustomerIdList(new ArrayList<>());
+ }
+ return customerContactDto;
+ }
+}
diff --git a/src/main/resources/mapper/basic/CustomerContactMapper.xml b/src/main/resources/mapper/basic/CustomerContactMapper.xml
new file mode 100644
index 0000000..1c2f582
--- /dev/null
+++ b/src/main/resources/mapper/basic/CustomerContactMapper.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.basic.mapper.CustomerContactMapper">
+
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.ruoyi.basic.pojo.CustomerContact">
+ <id column="id" property="id" />
+ <result column="contact_name" property="contactName" />
+ <result column="phone" property="phone" />
+ <result column="customer_id" property="customerId" />
+ <result column="dept_id" property="deptId" />
+ <result column="create_user" property="createUser" />
+ <result column="create_time" property="createTime" />
+ <result column="update_user" property="updateUser" />
+ <result column="update_time" property="updateTime" />
+ <result column="remark" property="remark" />
+ <result column="del_flag" property="delFlag" />
+ </resultMap>
+ <select id="listPage" resultType="com.ruoyi.basic.dto.CustomerContactDto">
+ SELECT
+ cc.*,
+ (
+ SELECT GROUP_CONCAT(ci.customer_name SEPARATOR ',')
+ FROM customer ci
+ WHERE FIND_IN_SET(ci.id, cc.customer_id)
+ ) AS customer_names
+ FROM customer_contact cc
+ <where>
+ cc.del_flag = 0
+ <if test="customerContactDto.contactName != null and customerContactDto.contactName !=''">
+ and cc.contact_name = #{customerContactDto.contactName}
+ </if>
+ <if test="customerContactDto.phone != null and customerContactDto.phone !=''">
+ and cc.phone = #{customerContactDto.phone}
+ </if>
+ </where>
+ </select>
+</mapper>
--
Gitblit v1.9.3