From 83933bf71f92d26343a5a7fd83325ac87ceacbd6 Mon Sep 17 00:00:00 2001
From: zhengyi <landuo321@aliyun.com>
Date: Tue, 10 Dec 2024 21:43:25 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=AE=A2=E6=88=B7=E6=96=B0?=
 =?UTF-8?q?=E5=A2=9E/=E7=BC=96=E8=BE=91/=E8=AF=A6=E6=83=85=EF=BC=8C?=
 =?UTF-8?q?=E5=AE=A2=E6=88=B7=E4=B8=BB=E8=90=A5=E7=B1=BB=E5=88=AB/?=
 =?UTF-8?q?=E4=B8=BB=E8=90=A5=E4=BA=A7=E5=93=81=E7=9A=84=E4=BC=A0=E5=8F=82?=
 =?UTF-8?q?=E4=B8=8E=E8=BF=94=E5=8F=82=E6=95=B0=E6=8D=AE=E7=BB=93=E6=9E=84?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../vo/customer/vo/CustomerBaseVO.java        |  4 +-
 .../vo/customer/vo/CustomerDetailRespVO.java  |  3 ++
 .../vo/CustomerProductTypeGroupVO.java        | 18 ++++++++
 .../admin/customer/CustomerController.java    | 43 ++++++++++++++++---
 4 files changed, 60 insertions(+), 8 deletions(-)
 create mode 100644 yudao-module-customer/yudao-module-customer-core/src/main/java/cn/iocoder/yudao/module/customer/vo/customer/vo/CustomerProductTypeGroupVO.java

diff --git a/yudao-module-customer/yudao-module-customer-core/src/main/java/cn/iocoder/yudao/module/customer/vo/customer/vo/CustomerBaseVO.java b/yudao-module-customer/yudao-module-customer-core/src/main/java/cn/iocoder/yudao/module/customer/vo/customer/vo/CustomerBaseVO.java
index 6de54f997..8e915e3e2 100644
--- a/yudao-module-customer/yudao-module-customer-core/src/main/java/cn/iocoder/yudao/module/customer/vo/customer/vo/CustomerBaseVO.java
+++ b/yudao-module-customer/yudao-module-customer-core/src/main/java/cn/iocoder/yudao/module/customer/vo/customer/vo/CustomerBaseVO.java
@@ -6,6 +6,7 @@ import lombok.Data;
 
 import javax.validation.constraints.NotNull;
 import java.util.Date;
+import java.util.List;
 
 /**
  * 絎∽�� Base VO鐚���箴�膸�羞糸����篆��鴻��莚����絖� VO 篏睡��
@@ -117,7 +118,8 @@ public class CustomerBaseVO {
     @ApiModelProperty(value = "篁�罨鞘査紮���")
     private String payerName;
 
-
+    @ApiModelProperty(value = "筝肢�ヤ婚��膠糸����膸�")
+    private List<CustomerProductTypeGroupVO> products;
 
 
 }
diff --git a/yudao-module-customer/yudao-module-customer-core/src/main/java/cn/iocoder/yudao/module/customer/vo/customer/vo/CustomerDetailRespVO.java b/yudao-module-customer/yudao-module-customer-core/src/main/java/cn/iocoder/yudao/module/customer/vo/customer/vo/CustomerDetailRespVO.java
index 88099be70..0435e0a91 100644
--- a/yudao-module-customer/yudao-module-customer-core/src/main/java/cn/iocoder/yudao/module/customer/vo/customer/vo/CustomerDetailRespVO.java
+++ b/yudao-module-customer/yudao-module-customer-core/src/main/java/cn/iocoder/yudao/module/customer/vo/customer/vo/CustomerDetailRespVO.java
@@ -309,6 +309,9 @@ public class CustomerDetailRespVO extends CustomerBaseVO {
     @ApiModelProperty(value = "��筝㊦��筝肢�ヤ婚��膠糸��")
     private List<ProductTypeRespVO> productTypeList;
 
+    @ApiModelProperty(value = "筝肢�ヤ婚��膠糸����膸�")
+    private List<CustomerProductTypeGroupVO> products;
+
     @ApiModelProperty(value = "篁�罨鞘査紮���")
     private String payerName;
 
diff --git a/yudao-module-customer/yudao-module-customer-core/src/main/java/cn/iocoder/yudao/module/customer/vo/customer/vo/CustomerProductTypeGroupVO.java b/yudao-module-customer/yudao-module-customer-core/src/main/java/cn/iocoder/yudao/module/customer/vo/customer/vo/CustomerProductTypeGroupVO.java
new file mode 100644
index 000000000..f2e475238
--- /dev/null
+++ b/yudao-module-customer/yudao-module-customer-core/src/main/java/cn/iocoder/yudao/module/customer/vo/customer/vo/CustomerProductTypeGroupVO.java
@@ -0,0 +1,18 @@
+package cn.iocoder.yudao.module.customer.vo.customer.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+@ApiModel("絎∽�隙源�ュ����膠糸����膸�")
+public class CustomerProductTypeGroupVO {
+
+    @ApiModelProperty("筝肢�ョ瓜��id")
+    private Long typeId;
+
+    @ApiModelProperty("筝肢�ヤ婚��ids")
+    private List<Long> productIds;
+}
diff --git a/yudao-module-customer/yudao-module-customer-rest/src/main/java/cn/iocoder/yudao/module/customer/controller/admin/customer/CustomerController.java b/yudao-module-customer/yudao-module-customer-rest/src/main/java/cn/iocoder/yudao/module/customer/controller/admin/customer/CustomerController.java
index 24e88d8bd..cad4691c4 100644
--- a/yudao-module-customer/yudao-module-customer-rest/src/main/java/cn/iocoder/yudao/module/customer/controller/admin/customer/CustomerController.java
+++ b/yudao-module-customer/yudao-module-customer-rest/src/main/java/cn/iocoder/yudao/module/customer/controller/admin/customer/CustomerController.java
@@ -43,6 +43,7 @@ import cn.iocoder.yudao.module.customer.vo.customer.vo.*;
 import cn.iocoder.yudao.module.customer.vo.customerBank.CustomerBankBackVO;
 import cn.iocoder.yudao.module.customer.vo.customerBank.CustomerBankQueryVO;
 import cn.iocoder.yudao.module.ecw.api.paramValid.ParamValidatorApi;
+import cn.iocoder.yudao.module.ecw.controller.admin.region.vo.RegionRespVO;
 import cn.iocoder.yudao.module.ecw.enums.CustomerContactsDefaultEnum;
 import cn.iocoder.yudao.module.ecw.enums.CustomerCreateFromEnum;
 import cn.iocoder.yudao.module.ecw.enums.CustomerOperateTypeEnum;
@@ -55,6 +56,7 @@ import cn.iocoder.yudao.module.member.api.user.MemberUserApi;
 import cn.iocoder.yudao.module.member.api.user.dto.UserRespDTO;
 import cn.iocoder.yudao.module.order.dal.dataobject.order.OrderDO;
 import cn.iocoder.yudao.module.order.dal.mysql.order.OrderMapper;
+import cn.iocoder.yudao.module.product.vo.product.ProductRespVO;
 import cn.iocoder.yudao.module.sale.dal.dataobject.offer.OfferDO;
 import cn.iocoder.yudao.module.sale.dal.mysql.offer.OfferMapper;
 import cn.iocoder.yudao.module.system.api.file.FileMakeApi;
@@ -166,7 +168,11 @@ public class CustomerController {
 
         createReqVO.setIsPotential(true);
         createReqVO.setCustomerOperateLogRemark("�医�羹������");
-
+        if (CollectionUtil.isNotEmpty(createReqVO.getProducts())){
+            createReqVO.setProductTypes(createReqVO.getProducts().stream().map(CustomerProductTypeGroupVO::getTypeId).filter(Objects::nonNull).collect(Collectors.joining(",")));
+            createReqVO.setProductIds(createReqVO.getProducts().stream().map(CustomerProductTypeGroupVO::getProductIds)
+                    .flatMap(Collection::stream).filter(Objects::nonNull).collect(Collectors.joining(",")));
+        }
         return createCustomerPrivate(createReqVO);
     }
 
@@ -178,6 +184,11 @@ public class CustomerController {
             @Valid @RequestBody CustomerCreateReqVO createReqVO,
             HttpServletRequest request) {
         createReqVO.setCustomerOperateLogRemark("膊∞��腴�ゝ�∽�医産絎∽��");
+        if (CollectionUtil.isNotEmpty(createReqVO.getProducts())){
+            createReqVO.setProductTypes(createReqVO.getProducts().stream().map(CustomerProductTypeGroupVO::getTypeId).filter(Objects::nonNull).collect(Collectors.joining(",")));
+            createReqVO.setProductIds(createReqVO.getProducts().stream().map(CustomerProductTypeGroupVO::getProductIds)
+                    .flatMap(Collection::stream).filter(Objects::nonNull).collect(Collectors.joining(",")));
+        }
         return createCustomerPrivate(createReqVO);
     }
 
@@ -249,6 +260,11 @@ public class CustomerController {
         //SELECT arrival_confirm from ecw_customer  �遺�隋��
         List<CustomerContactsUpdateReqVO> customerContacts =
                 updateReqVO.getCustomerContacts();
+        if (CollectionUtil.isNotEmpty(updateReqVO.getProducts())){
+            updateReqVO.setProductTypes(updateReqVO.getProducts().stream().map(CustomerProductTypeGroupVO::getTypeId).filter(Objects::nonNull).collect(Collectors.joining(",")));
+            updateReqVO.setProductIds(updateReqVO.getProducts().stream().map(CustomerProductTypeGroupVO::getProductIds)
+                    .flatMap(Collection::stream).filter(Objects::nonNull).collect(Collectors.joining(",")));
+        }
         if (!CollectionUtils.isEmpty(customerContacts)) {
             long count = customerContacts.stream().filter(t -> CustomerContactsDefaultEnum.IS_DEFAULT.getValue().equals(t.getIsDefault())).count();
             if (count <= 0) {
@@ -264,7 +280,7 @@ public class CustomerController {
                 if (userid != null && userid != 0) { //���井����ヨ��ュ������userid=0
                     count = customerContactsService.count(
                             new LambdaQueryWrapperX<CustomerContactsDO>().eq(CustomerContactsDO::getUserid, userid)
-                            .ne(CustomerContactsDO::getCustomerId, updateReqVO.getId()).eq(BaseDO::getDeleted, 0));
+                                    .ne(CustomerContactsDO::getCustomerId, updateReqVO.getId()).eq(BaseDO::getDeleted, 0));
                     if (count > 0) {
                         UserRespDTO user = memberUserApi.getUser(userid);
                         throw exception(ErrorCodeConstants.CUSTOMER_CONTACTS_USERID_ALREADY_BIND, user != null ? user.getNickname() : "", user != null ? user.getMobile() : "");
@@ -337,7 +353,11 @@ public class CustomerController {
 
         //絎���篆≧���隋���ユ��
         updateReqVO.setIsCustomerServiceConfirmed(true);
-
+        if (CollectionUtil.isNotEmpty(updateReqVO.getProducts())){
+            updateReqVO.setProductTypes(updateReqVO.getProducts().stream().map(CustomerProductTypeGroupVO::getTypeId).filter(Objects::nonNull).collect(Collectors.joining(",")));
+            updateReqVO.setProductIds(updateReqVO.getProducts().stream().map(CustomerProductTypeGroupVO::getProductIds)
+                    .flatMap(Collection::stream).filter(Objects::nonNull).collect(Collectors.joining(",")));
+        }
         //絎���絎∽�隙拭��`莅ゆ・�倶�区�莅∞�絎∽�欠��筝�膸�瓜��
         return this.updateCustomer(updateReqVO);
     }
@@ -373,7 +393,7 @@ public class CustomerController {
         if (customerDODeleted == null) {
             throw exception(ErrorCodeConstants.CUSTOMER_DELETED_NOT_EXISTS);
         }
-        if (!Objects.equals(customerDOSaved.getCustomerService(), customerDODeleted.getCustomerService()) && !customerDOSaved.getIsInOpenSea() &&  !customerDODeleted.getIsInOpenSea()) {
+        if (!Objects.equals(customerDOSaved.getCustomerService(), customerDODeleted.getCustomerService()) && !customerDOSaved.getIsInOpenSea() && !customerDODeleted.getIsInOpenSea()) {
             throw exception(ErrorCodeConstants.CUSTOMER_MERGE_CUSTOMER_SERVICE_NOT_SAME);
         }
 
@@ -417,6 +437,17 @@ public class CustomerController {
                 respVO.setPromoterName(customer1.getName());
             }
         }
+        if (CollectionUtil.isNotEmpty(respVO.getProductList())) {
+            // 絲劫�����井���茵���膸�菴���
+            Map<Long, List<ProductRespVO>> productRespVOMap = respVO.getProductList().stream().collect(Collectors.groupingBy(ProductRespVO::getTypeId));
+            List<CustomerProductTypeGroupVO> products = productRespVOMap.entrySet().stream().map(entry -> {
+                CustomerProductTypeGroupVO productTypeGroupVO = new CustomerProductTypeGroupVO();
+                productTypeGroupVO.setTypeId(entry.getKey());
+                productTypeGroupVO.setProductIds(entry.getValue().stream().map(ProductRespVO::getId).collect(Collectors.toList()));
+                return productTypeGroupVO;
+            }).collect(Collectors.toList());
+            respVO.setProducts(products);
+        }
 
         //莅丞舟�区�茣��
         CustomerBankQueryVO customerBankQueryVO = new CustomerBankQueryVO();
@@ -488,13 +519,12 @@ public class CustomerController {
                 .stream().sorted(Comparator.comparing(CustomerBankBackVO::getId)).collect(Collectors.toList());
 
         respVO.setCustomerBankBackVOList(customerBankBackVOS);
-        String sR=getContactStr(id);
+        String sR = getContactStr(id);
         respVO.setContactstr(sR);
         return success(respVO);
     }
 
 
-
     @GetMapping("/list")
     @ApiOperation("�婭�����id�����桁�絎∽�決�����茵�")
     @ApiImplicitParam(name = "ids", value = "膽��桁��茵�", required = true, example = "1024,2048", dataTypeClass = List.class)
@@ -1112,7 +1142,6 @@ public class CustomerController {
     }
 
 
-
     @PutMapping("/recycle-unconfirmed-customer")
     @ApiOperation("���九群������・�句��絎∽��")
     // @PreAuthorize("@ss.hasPermission('ecw:customer:recycle:unconfirmed')")
-- 
2.22.0