Kaynağa Gözat

feat: 增加客户转移和释放公海

zhaojianyang 3 ay önce
ebeveyn
işleme
4523941dd2

+ 37 - 20
bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/controller/BlinkCustomerController.java

@@ -1,7 +1,6 @@
 package com.wx.blink.backend.controller;
 
-import com.wx.blink.backend.domain.dto.BlinkCustomerHeaderVO;
-import com.wx.blink.backend.domain.dto.BlinkCustomerTagVO;
+import com.wx.blink.backend.domain.dto.*;
 import com.wx.blink.backend.domain.qry.BlinkBizFileQry;
 import com.wx.blink.backend.service.IBlinkCustomerService;
 import com.wx.blink.backend.service.IBlinkCustomerTagService;
@@ -73,6 +72,41 @@ public class BlinkCustomerController {
         return customerService.supportsCustomerHeaderSingleQuery(id);
     }
 
+    @Operation(summary = "服务商客户列表")
+    @PostMapping("/supports/customer/providerQueryPage")
+    public ResponseDTO<PageResult<BlinkCustomerVO>> providerQueryPage(@RequestBody BlinkCustomerQry qry) {
+        return ResponseDTO.ok(customerService.providerCustomerQueryPage(qry));
+    }
+
+    @Operation(summary = "服务商客户列表表头统计数据接口")
+    @PostMapping(value = "/supports/customer/providerStatistics/info")
+    public ResponseDTO<BlinkCustomerStatisticsVO> providerStatisticsInfo() {
+        BlinkCustomerQry qry = new BlinkCustomerQry();
+        return ResponseDTO.ok(customerService.providerCustomerStatisticsInfo(qry));
+    }
+
+    @Operation(summary = "客户黑名单表单获取明细信息")
+    @GetMapping(value = "/supports/customer/blacklist/details/{id}")
+    public ResponseDTO<Map<String,Object>> supportsCustomerBlacklistDetails(@PathVariable String id) {
+        return ResponseDTO.ok(customerService.supportsCustomerBlacklistDetails(id));
+    }
+    @Operation(summary = "客户获取曾用名")
+    @GetMapping(value = "/supports/customer/getUsedName/{id}")
+    public ResponseDTO<List<BlinkCustomerUsedNameVO>> getUsedName(@PathVariable String id) {
+        return ResponseDTO.ok(customerService.getUsedName(id));
+    }
+    @Operation(summary = "客户转移")
+    @PostMapping(value = "/supports/customer/transfer")
+    public ResponseDTO<String> customerTransfer(@RequestBody BlinkCustomerTransferVO vo) {
+        return customerService.customerTransfer(vo);
+    }
+    @Operation(summary = "客户释放公海")
+    @PostMapping(value = "/supports/customer/release")
+    public ResponseDTO<String> customerRelease(@RequestBody BlinkCustomerReleaseVO vo) {
+        return customerService.customerRelease(vo);
+    }
+
+
     //----------------------------------------------资料------------------------------------------------------------//
     @Operation(summary = "添加资料")
     @PostMapping("/supports/biz/file/create")
@@ -92,24 +126,6 @@ public class BlinkCustomerController {
         return customerService.bizFileDelete(id);
     }
 
-    @Operation(summary = "服务商客户列表")
-    @PostMapping("/supports/customer/providerQueryPage")
-    public ResponseDTO<PageResult<BlinkCustomerVO>> providerQueryPage(@RequestBody BlinkCustomerQry qry) {
-        return ResponseDTO.ok(customerService.providerCustomerQueryPage(qry));
-    }
-
-    @Operation(summary = "服务商客户列表表头统计数据接口")
-    @PostMapping(value = "/supports/customer/providerStatistics/info")
-    public ResponseDTO<BlinkCustomerStatisticsVO> providerStatisticsInfo() {
-        BlinkCustomerQry qry = new BlinkCustomerQry();
-        return ResponseDTO.ok(customerService.providerCustomerStatisticsInfo(qry));
-    }
-
-    @Operation(summary = "客户黑名单表单获取明细信息")
-    @GetMapping(value = "/supports/customer/blacklist/details/{id}")
-    public ResponseDTO<Map<String,Object>> supportsCustomerBlacklistDetails(@PathVariable String id) {
-        return ResponseDTO.ok(customerService.supportsCustomerBlacklistDetails(id));
-    }
     //------------------------标签----------------------//
     @Operation(summary = "客户标签新增/修改")
     @PostMapping(value = "/supports/customer/tag/addOrUpdate")
@@ -129,4 +145,5 @@ public class BlinkCustomerController {
     public ResponseDTO<List<BlinkCustomerTagVO>> customerTagGetList(@PathVariable String customerId) {
         return ResponseDTO.ok(customerTagService.getCustomerTagList(customerId));
     }
+    //---------------------------------相关tab页查询-----------------------------------//
 }

+ 17 - 0
bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/domain/dto/BlinkCustomerReleaseVO.java

@@ -0,0 +1,17 @@
+package com.wx.blink.backend.domain.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class BlinkCustomerReleaseVO implements Serializable {
+/*客户释放公海*/
+    @Schema(description = "客户id")
+    private String cusid;
+
+    @Schema(description = "释放原因")
+    private String reason;
+
+}

+ 23 - 0
bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/domain/dto/BlinkCustomerTransferVO.java

@@ -0,0 +1,23 @@
+package com.wx.blink.backend.domain.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.wx.blink.base.common.json.serializer.EmployeeLoginNameVoDeserializer;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class BlinkCustomerTransferVO implements Serializable {
+/*客户转移*/
+    @Schema(description = "客户id")
+    private String cusid;
+
+    @Schema(description = "转移至归属区域")
+    private String belongRegion;
+
+    @Schema(description = "转移至营销人员")
+    private String marketStaff;
+
+}

+ 29 - 0
bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/domain/dto/BlinkCustomerUsedNameVO.java

@@ -0,0 +1,29 @@
+package com.wx.blink.backend.domain.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.wx.blink.base.common.domain.BaseEntity;
+import com.wx.blink.base.common.json.serializer.EmployeeLoginNameVoDeserializer;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class BlinkCustomerUsedNameVO implements Serializable {
+
+    @Schema(description = "客户id")
+    private String cusid;
+
+    @Schema(description = "客户名称")
+    @TableField("customer_name")
+    private String customerName;
+    @Schema(description = "时间")
+    @TableField("handle_time")
+    private String handleTime;
+    @Schema(description = "创建人")
+    @JsonSerialize(using = EmployeeLoginNameVoDeserializer.class)
+    @TableField("create_by")
+    private String createBy;
+
+}

+ 27 - 0
bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/manager/BlinkCustomerServiceImpl.java

@@ -7,6 +7,9 @@ import com.wx.blink.backend.domain.dataobject.BlinkCustomerDO;
 import com.wx.blink.backend.domain.dataobject.BlinkCustomerSeniorDO;
 import com.wx.blink.backend.domain.dataobject.BlinkProviderDO;
 import com.wx.blink.backend.domain.dto.BlinkCustomerHeaderVO;
+import com.wx.blink.backend.domain.dto.BlinkCustomerReleaseVO;
+import com.wx.blink.backend.domain.dto.BlinkCustomerTransferVO;
+import com.wx.blink.backend.domain.dto.BlinkCustomerUsedNameVO;
 import com.wx.blink.backend.domain.qry.BlinkBizFileQry;
 import com.wx.blink.backend.objectmapper.BlinkCustomerMapper;
 import com.wx.blink.backend.repository.BlinkCustomerRepository;
@@ -19,7 +22,9 @@ import com.wx.blink.base.common.domain.ResponseDTO;
 import com.wx.blink.base.common.util.BlinkEntityUtil;
 import com.wx.blink.base.common.util.BlinkEnumUtil;
 import com.wx.blink.base.common.util.BlinkPageUtil;
+import com.wx.blink.base.module.support.datatracer.constant.DataTracerConst;
 import com.wx.blink.base.module.support.datatracer.constant.DataTracerTypeEnum;
+import com.wx.blink.base.module.support.datatracer.domain.form.DataTracerForm;
 import com.wx.blink.base.module.support.datatracer.service.DataTracerService;
 import com.wx.blink.base.module.support.dict.service.DictCacheService;
 import com.wx.blink.base.module.support.serialnumber.constant.SerialNumberIdEnum;
@@ -275,6 +280,28 @@ public class BlinkCustomerServiceImpl extends ServiceImpl<BlinkCustomerRepositor
         return result;
     }
 
+    @Override
+    public List<BlinkCustomerUsedNameVO> getUsedName(String id) {
+        return customerRepository.getUsedNameById(id);
+    }
+
+    @Override
+    public ResponseDTO<String> customerTransfer(BlinkCustomerTransferVO vo) {
+        customerRepository.customerTransfer(vo);
+        return ResponseDTO.ok();
+    }
+
+    @Override
+    public ResponseDTO<String> customerRelease(BlinkCustomerReleaseVO vo) {
+        customerRepository.customerRelease(vo);
+        //记录
+        String reason = "释放公海,释放原因:";
+        if(vo.getReason()!=null) reason = reason+vo.getReason();
+        DataTracerForm form = DataTracerForm.builder().dataId(vo.getCusid()).type(DataTracerTypeEnum.CUSTOMER).content(reason).build();
+        dataTracerService.addTrace(form);
+        return ResponseDTO.ok();
+    }
+
     public BlinkCustomerStatisticsVO getCustomerStatisticsInfo( List<BlinkCustomerVO> list){
         Map<String, Integer> countTypes = list.stream()
                 .map(obj -> obj.getAuditStatus() == null ? "00" : obj.getAuditStatus()) // 将null转为字符串"00",作为待审核的状态

+ 25 - 0
bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/repository/BlinkCustomerRepository.java

@@ -4,6 +4,9 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.wx.blink.backend.domain.dataobject.BlinkCustomerDO;
 import com.wx.blink.backend.domain.dataobject.BlinkBizFileDO;
+import com.wx.blink.backend.domain.dto.BlinkCustomerReleaseVO;
+import com.wx.blink.backend.domain.dto.BlinkCustomerTransferVO;
+import com.wx.blink.backend.domain.dto.BlinkCustomerUsedNameVO;
 import com.wx.blink.backend.domain.qry.BlinkBizFileQry;
 import com.wx.blink.common.vo.BlinkBizFileVO;
 import com.wx.blink.common.vo.BlinkCustomerVO;
@@ -85,4 +88,26 @@ public interface BlinkCustomerRepository extends BaseMapper<BlinkCustomerDO> {
      * @return
      */
     void customerToBlacklist(@Param("id") String id);
+    /**
+     * 客户获取曾用名
+     *
+     * @param id
+     * @return
+     */
+    List<BlinkCustomerUsedNameVO> getUsedNameById(@Param("id") String id);
+
+    /**
+     * 客户转移
+     *
+     * @param vo
+     * @return
+     */
+    void customerTransfer(@Param("vo") BlinkCustomerTransferVO vo);
+    /**
+     * 客户释放公海
+     *
+     * @param vo
+     * @return
+     */
+    void customerRelease(@Param("vo") BlinkCustomerReleaseVO vo);
 }

+ 23 - 0
bound-link-api/blink-backend/src/main/java/com/wx/blink/backend/service/IBlinkCustomerService.java

@@ -4,6 +4,9 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.wx.blink.backend.domain.dataobject.BlinkCustomerDO;
 import com.wx.blink.backend.domain.dataobject.BlinkCustomerSeniorDO;
 import com.wx.blink.backend.domain.dto.BlinkCustomerHeaderVO;
+import com.wx.blink.backend.domain.dto.BlinkCustomerReleaseVO;
+import com.wx.blink.backend.domain.dto.BlinkCustomerTransferVO;
+import com.wx.blink.backend.domain.dto.BlinkCustomerUsedNameVO;
 import com.wx.blink.backend.domain.qry.BlinkBizFileQry;
 import com.wx.blink.base.common.domain.PageResult;
 import com.wx.blink.base.common.domain.ResponseDTO;
@@ -151,4 +154,24 @@ public interface IBlinkCustomerService extends IService<BlinkCustomerDO> {
      * @return
      */
     Map<String,Object> supportsCustomerBlacklistDetails(String id);
+    /**
+     * 客户获取曾用名
+     *
+     * @param id
+     * @return
+     */
+    List<BlinkCustomerUsedNameVO> getUsedName(String id);/**
+     * 客户转移
+     *
+     * @param vo
+     * @return
+     */
+    ResponseDTO<String> customerTransfer(BlinkCustomerTransferVO vo);
+    /**
+     * 客户释放公海
+     *
+     * @param vo
+     * @return
+     */
+    ResponseDTO<String> customerRelease(BlinkCustomerReleaseVO vo);
 }

+ 37 - 0
bound-link-api/blink-backend/src/main/resources/mapper/BlinkCustomerRepositoryMapper.xml

@@ -64,4 +64,41 @@
     <update id="customerToBlacklist">
         update blink_customer set is_black_list=1 where id = #{id}
     </update>
+
+    <select id="getUsedNameById" resultType="com.wx.blink.backend.domain.dto.BlinkCustomerUsedNameVO">
+        with base as (
+            /*客户登记*/
+            select icus.customer_name,icus.create_time handle_time,icus.create_by,cus.id cusid from l_blink_customer_register icus
+            left join blink_customer cus on icus.flow_id=cus.source_flow_id
+            left join st_instance ins on icus.flow_id COLLATE utf8mb4_general_ci = ins.biz_objectid COLLATE utf8mb4_general_ci
+            where provider_send_cusid is null and ins.State = 4 and cus.id = #{id}
+            union all
+            /*服务商提交客户*/
+            select icus.customer_name,icus.create_time handle_time,icus.create_by,cus.id cusid from l_blink_customer_register icus
+            left join blink_customer cus on icus.provider_send_cusid=cus.id
+            left join st_instance ins on icus.flow_id COLLATE utf8mb4_general_ci = ins.biz_objectid COLLATE utf8mb4_general_ci
+            where provider_send_cusid is not null and ins.State = 4 and icus.provider_send_cusid = #{id}
+            union all
+            /*变更*/
+            select icus.customer_name,ins.finish_time handle_time,icus.create_by,icus.cusid from l_blink_customer_edit icus
+            left join st_instance ins on icus.flow_id COLLATE utf8mb4_general_ci = ins.biz_objectid COLLATE utf8mb4_general_ci
+            where ins.State = 4 and icus.cusid = #{id}
+        ), RankedData AS (
+            SELECT cusid, customer_name, handle_time,create_by
+                 ,ROW_NUMBER() OVER (PARTITION BY cusid, customer_name ORDER BY handle_time ASC) AS row_num
+            FROM  base
+        )
+        SELECT cusid, customer_name, handle_time,create_by
+        FROM  RankedData
+        WHERE  row_num = 1;
+    </select>
+
+    <update id="customerTransfer">
+        update blink_customer set belong_region=#{vo.belongRegion},market_staff=#{vo.marketStaff} where id = #{vo.cusid}
+    </update>
+
+    <update id="customerRelease">
+        update blink_customer set belong_region=null,market_staff=null where id = #{vo.cusid}
+    </update>
+
 </mapper>