haogh hai 9 meses
pai
achega
a6ea960c0f

+ 9 - 0
sop-api/src/main/java/com/qmth/sop/server/api/TBCrmController.java

@@ -157,4 +157,13 @@ public class TBCrmController {
             tBCrmService.updateById(tbCrm);
         }
     }
+
+
+    @ApiOperation(value = "匹配导出")
+    @RequestMapping(value = "/export", method = RequestMethod.POST)
+    @ApiResponses({ @ApiResponse(code = 200, message = "返回信息", response = Object.class) })
+    @OperationLog(logType = LogTypeEnum.EXPORT)
+    public void export(@ApiParam(value = "服务单元ID", required = true) @RequestParam(required = true) Long serviceUnitId) throws Exception {
+        tBCrmService.export(serviceUnitId);
+    }
 }

BIN=BIN
sop-api/src/main/resources/static/crm_custom_receiver.xlsx


+ 66 - 0
sop-business/src/main/java/com/qmth/sop/business/bean/dto/CrmCustomImportDto.java

@@ -0,0 +1,66 @@
+package com.qmth.sop.business.bean.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Description 派单对应的客户收件人信息
+ * @Author haoguanghui
+ * @date 2024/09/06
+ */
+public class CrmCustomImportDto {
+
+    @ApiModelProperty(value = "项目单号/项目编号*")
+    private String crmNo;
+
+    @ApiModelProperty(value = "邮寄地址*")
+    private String address;
+
+    @ApiModelProperty(value = "收件人*")
+    private String consignee;
+
+    @ApiModelProperty(value = "收件人联系电话*")
+    private String consigneePhone;
+
+    @ApiModelProperty(value = "客户名称")
+    private String customName;
+
+    public String getCrmNo() {
+        return crmNo;
+    }
+
+    public void setCrmNo(String crmNo) {
+        this.crmNo = crmNo;
+    }
+
+    public String getAddress() {
+        return address;
+    }
+
+    public void setAddress(String address) {
+        this.address = address;
+    }
+
+    public String getConsignee() {
+        return consignee;
+    }
+
+    public void setConsignee(String consignee) {
+        this.consignee = consignee;
+    }
+
+    public String getConsigneePhone() {
+        return consigneePhone;
+    }
+
+    public void setConsigneePhone(String consigneePhone) {
+        this.consigneePhone = consigneePhone;
+    }
+
+    public String getCustomName() {
+        return customName;
+    }
+
+    public void setCustomName(String customName) {
+        this.customName = customName;
+    }
+}

+ 8 - 0
sop-business/src/main/java/com/qmth/sop/business/mapper/TBCrmMapper.java

@@ -3,6 +3,7 @@ package com.qmth.sop.business.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.qmth.sop.business.bean.dto.CrmCustomImportDto;
 import com.qmth.sop.business.bean.dto.DataPermissionDto;
 import com.qmth.sop.business.bean.dto.SopCrmInfo;
 import com.qmth.sop.business.bean.result.CrmProjectResult;
@@ -146,4 +147,11 @@ public interface TBCrmMapper extends BaseMapper<TBCrm> {
      */
     List<TBCrm> findByTBCrmListByServiceUnitIdAndAddress(@Param("serviceUnitId") Long serviceUnitId, @Param("province") String province,
             @Param("city") String city);
+
+    /**
+     * 根据服务单元ID查询派单和对应的客户收件人信息
+     * @param serviceUnitId 服务单元id
+     * @return 派单客户集合
+     */
+    List<CrmCustomImportDto> listCrmCustomByServiceId(@Param("serviceUnitId") Long serviceUnitId);
 }

+ 6 - 0
sop-business/src/main/java/com/qmth/sop/business/service/TBCrmService.java

@@ -199,4 +199,10 @@ public interface TBCrmService extends IService<TBCrm> {
      * @return 派单绑定信息
      */
     CrmBindResult findCrmBindInfo(Long serviceUnitId, Long customId);
+
+    /**
+     *  匹配导出
+     * @param serviceUnitId 服务单元ID
+     */
+    void export(Long serviceUnitId);
 }

+ 60 - 4
sop-business/src/main/java/com/qmth/sop/business/service/impl/TBCrmServiceImpl.java

@@ -1,15 +1,16 @@
 package com.qmth.sop.business.service.impl;
 
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.ExcelWriter;
+import com.alibaba.excel.write.metadata.WriteSheet;
+import com.alibaba.excel.write.metadata.fill.FillConfig;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 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.qmth.boot.api.exception.ApiException;
-import com.qmth.sop.business.bean.dto.DataPermissionDto;
-import com.qmth.sop.business.bean.dto.RoleDto;
-import com.qmth.sop.business.bean.dto.SopCrmInfo;
-import com.qmth.sop.business.bean.dto.UserArchivesDto;
+import com.qmth.sop.business.bean.dto.*;
 import com.qmth.sop.business.bean.params.ServiceScopeParam;
 import com.qmth.sop.business.bean.params.TBCrmDetailParam;
 import com.qmth.sop.business.bean.params.TBCrmParam;
@@ -23,6 +24,7 @@ import com.qmth.sop.business.util.SmsSendUtil;
 import com.qmth.sop.common.contant.SpringContextHolder;
 import com.qmth.sop.common.contant.SystemConstant;
 import com.qmth.sop.common.enums.*;
+import com.qmth.sop.common.util.FileUtil;
 import com.qmth.sop.common.util.ResultUtil;
 import com.qmth.sop.common.util.ServletUtil;
 import org.apache.commons.collections4.CollectionUtils;
@@ -33,7 +35,12 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
 import java.util.*;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
@@ -900,6 +907,55 @@ public class TBCrmServiceImpl extends ServiceImpl<TBCrmMapper, TBCrm> implements
         return crmBindResult;
     }
 
+    @Override
+    public void export(Long serviceUnitId) {
+        File fileTemp = null;
+        try {
+            fileTemp = SystemConstant.getFileTempVar(SystemConstant.XLSX_PREFIX);
+            InputStream inputStream = this.getClass().getResourceAsStream("/" + SystemConstant.STATIC + "/" +
+                    ImportTemplateEnum.TEMPLATE_CRM_CUSTOM_RECEIVER.getTemplateName());
+            ExcelWriter writer = EasyExcel.write(fileTemp).withTemplate(inputStream).build();
+            WriteSheet sheet = EasyExcel.writerSheet().build();
+            FillConfig fillConfig = FillConfig.builder().forceNewRow(true).build();
+
+            List<CrmCustomImportDto> dataList = baseMapper.listCrmCustomByServiceId(serviceUnitId);
+
+            //过滤一个客户对应多个收件人的数据
+            Function<CrmCustomImportDto,List<Object>> compositeKey = crmCustom -> Arrays.asList(crmCustom.getCrmNo(),crmCustom.getCustomName());
+            Map<List<Object>, List<CrmCustomImportDto>> customGroupByList = dataList.stream().collect(Collectors.groupingBy(compositeKey, Collectors.toList()));
+            List<CrmCustomImportDto> customDtoList = filterCrmCustom(customGroupByList);
+
+            writer.fill(customDtoList, fillConfig, sheet);
+            writer.finish();
+            HttpServletResponse response = ServletUtil.getResponse();
+            FileUtil.outputFile(response, fileTemp, ImportTemplateEnum.TEMPLATE_CRM_CUSTOM_RECEIVER.getFileName());
+        } catch (IOException e) {
+            throw ExceptionResultEnum.ERROR.exception(e.getMessage());
+        } finally {
+            if (Objects.nonNull(fileTemp)) {
+                fileTemp.delete();
+            }
+        }
+    }
+
+    private List<CrmCustomImportDto> filterCrmCustom(Map<List<Object>, List<CrmCustomImportDto>> customGroupByList) {
+        List<CrmCustomImportDto> customDtoList = new ArrayList<>();
+        Set<Map.Entry<List<Object>, List<CrmCustomImportDto>>> entries = customGroupByList.entrySet();
+        for (Map.Entry<List<Object>, List<CrmCustomImportDto>> entry : entries) {
+            List<CrmCustomImportDto> crmCustomList = entry.getValue();
+            if (CollectionUtils.isEmpty(crmCustomList))
+                continue;
+            if (crmCustomList.size() == 1) {
+                customDtoList.addAll(crmCustomList);
+            } else if (crmCustomList.size() > 1) {
+                CrmCustomImportDto dto = new CrmCustomImportDto();
+                dto.setCrmNo(crmCustomList.get(0).getCrmNo());
+                customDtoList.add(dto);
+            }
+        }
+        return customDtoList;
+    }
+
     /**
      * 根据sop用户身份类型构建用户档案信息
      *

+ 16 - 0
sop-business/src/main/resources/mapper/TBCrmMapper.xml

@@ -471,6 +471,22 @@
             </if>
         </where>
     </select>
+    <select id="listCrmCustomByServiceId" resultType="com.qmth.sop.business.bean.dto.CrmCustomImportDto" parameterType="java.lang.Long">
+        SELECT
+            tbc.crm_no AS crmNo,
+            sc.NAME customName,
+            scr.consignee,
+            scr.consignee_phone AS consigneePhone,
+            scr.consignee_address AS address
+        FROM
+            t_b_crm tbc
+                LEFT JOIN sys_custom sc ON tbc.custom_id = sc.id
+                LEFT JOIN sys_custom_receiver scr ON trim( scr.NAME )= trim( sc.NAME )
+        WHERE
+            service_id = #{serviceUnitId}
+        ORDER BY
+            tbc.update_time DESC
+    </select>
 
 
 </mapper>

+ 3 - 1
sop-common/src/main/java/com/qmth/sop/common/enums/ImportTemplateEnum.java

@@ -17,7 +17,9 @@ public enum ImportTemplateEnum {
 
     TEMPLATE_DELIVERY("delivery.xlsx", "设备发货导入模板.xlsx"),
 
-    TEMPLATE_CRM_SOP_DETAIL("crm_sop_detail.xlsx", "sop导入模板.xlsx");
+    TEMPLATE_CRM_SOP_DETAIL("crm_sop_detail.xlsx", "sop导入模板.xlsx"),
+
+    TEMPLATE_CRM_CUSTOM_RECEIVER("crm_custom_receiver.xlsx", "客户匹配信息模板.xlsx");
 
     ImportTemplateEnum(String templateName, String fileName) {
         this.templateName = templateName;