Explorar el Código

销售线索导入-(excel/csv)

yangzian hace 3 años
padre
commit
b5ca351f29

+ 22 - 0
ruixuan-common/src/main/java/com/ruixuan/common/utils/file/FileTypeUtils.java

@@ -90,4 +90,26 @@ public class FileTypeUtils
 
         return false;
     }
+
+
+     /**
+     * 返回文件类型 - excel 或者 csv
+     * @param file
+     * @return
+     */
+    public static String gerFileTypeXlsOrCsv(MultipartFile file){
+        String fileName = file.getOriginalFilename();
+
+        if (fileName.endsWith(".xls") || fileName.endsWith(".xlsx")){
+            return "excel";
+        }
+        if (fileName.endsWith(".csv")){
+            return "csv";
+        }
+        return null;
+    }
+
+
+
+
 }

+ 8 - 0
ruixuan-salesLeads/pom.xml

@@ -47,6 +47,7 @@
         </dependency>
 
 
+        <!-- excel-->
         <dependency>
             <groupId>com.alibaba</groupId>
             <artifactId>easyexcel</artifactId>
@@ -54,6 +55,13 @@
         </dependency>
 
 
+        <!-- csv -->
+        <dependency>
+            <groupId>de.siegmar</groupId>
+            <artifactId>fastcsv</artifactId>
+            <version>1.0.3</version>
+        </dependency>
+
     </dependencies>
 
 </project>

+ 28 - 0
ruixuan-salesLeads/src/main/java/com.ruixuan.salesLeads/controller/DemoController.java

@@ -4,18 +4,24 @@ import com.alibaba.excel.EasyExcel;
 import com.ruixuan.common.core.controller.BaseController;
 import com.ruixuan.common.core.domain.AjaxResult;
 import com.ruixuan.common.core.domain.ResultResponse;
+import com.ruixuan.common.utils.StringUtils;
 import com.ruixuan.common.utils.poi.ExcelUtil;
 import com.ruixuan.salesLeads.listener.ImportExcelListener;
 import com.ruixuan.salesLeads.pojo.SaleClueInfoPojo;
 import com.ruixuan.salesLeads.pojo.TestPojo;
 import com.ruixuan.salesLeads.service.ITestService;
+import de.siegmar.fastcsv.reader.CsvContainer;
+import de.siegmar.fastcsv.reader.CsvReader;
+import de.siegmar.fastcsv.reader.CsvRow;
 import io.swagger.annotations.*;
 import org.apache.poi.ss.formula.functions.T;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.io.File;
 import java.lang.reflect.Field;
+import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -117,4 +123,26 @@ public class DemoController extends BaseController {
         return ResultResponse.successMsg("cheng.",null);
     }
 
+    @ApiOperation(value = "导入",notes = "swagger不支持上传,请移步使用postman上传仅支持form-data。")
+    @PostMapping(value = "/importCsv")
+    public ResultResponse importExcel(
+                                      @ApiParam("wenjianwenjian") @RequestParam("file") MultipartFile file
+
+                                       ) throws Exception{
+
+
+
+
+
+
+
+
+
+        //logger.info("jieguo====>>>{}",lisMap);
+
+
+
+        return ResultResponse.successMsg("cheng.",null);
+    }
+
 }

+ 6 - 5
ruixuan-salesLeads/src/main/java/com.ruixuan.salesLeads/controller/SaleClueInfoController.java

@@ -45,9 +45,9 @@ public class SaleClueInfoController extends BaseController {
 
 
 
-    @ApiOperation(value = "导入",notes = "swagger不支持上传,请移步使用postman上传仅支持form-data。")
-    @PostMapping(value = "/importExcel")
-    public ResultResponse importExcel(
+    @ApiOperation(value = "销售线索上传",notes = "swagger不支持上传,请使用postman上传,支持form-data。文件绑定参数为files,支持文件数组")
+    @PostMapping(value = "/importSaleExcelOrCsv")
+    public ResultResponse importSaleExcelOrCsv(
                                       @ApiParam("文件数组") @RequestParam("files") List<MultipartFile> files,
                                       @ApiParam("销售线索类型1:50W低潜;2:50W中高潜;3:200W高潜;4:200W-500w;5:500W") @RequestParam("salesLeadsType") int salesLeadsType,
                                       @ApiParam("年-月") @RequestParam("uploadDate") String uploadDate,
@@ -60,15 +60,16 @@ public class SaleClueInfoController extends BaseController {
         }
 
         for (MultipartFile file : files) {
+
            if (!FileTypeUtils.fileNameSuffix(file)){
                return ResultResponse.error("请上传正确格式的文件,支持扩展名.xls;.xlsx;.csv");
            }
+
         }
 
         Long year = DateUtils.strDateToInt(uploadDate);
 
-        return saleClueInfoServiceImpl.importSaleClueExcel(files,salesLeadsType,year,createUserId);
-
+        return saleClueInfoServiceImpl.importSaleExcelOrCsv(files,salesLeadsType,year,createUserId);
 
     }
 

+ 1 - 1
ruixuan-salesLeads/src/main/java/com.ruixuan.salesLeads/service/ISaleClueInfoService.java

@@ -16,5 +16,5 @@ import java.util.List;
 public interface ISaleClueInfoService {
 
 
-    ResultResponse importSaleClueExcel(List<MultipartFile> files,int salesLeadsType,Long uploadDate,Long createUserId)throws Exception;
+    ResultResponse importSaleExcelOrCsv(List<MultipartFile> files,int salesLeadsType,Long uploadDate,Long createUserId)throws Exception;
 }

+ 88 - 54
ruixuan-salesLeads/src/main/java/com.ruixuan.salesLeads/service/impl/SaleClueInfoServiceImpl.java

@@ -2,17 +2,15 @@ package com.ruixuan.salesLeads.service.impl;
 
 import com.alibaba.excel.EasyExcel;
 import com.ruixuan.common.core.domain.ResultResponse;
-import com.ruixuan.common.utils.PageUtils;
 import com.ruixuan.common.utils.StringUtils;
+import com.ruixuan.common.utils.file.FileTypeUtils;
 import com.ruixuan.salesLeads.listener.ImportExcelListener;
 import com.ruixuan.salesLeads.mapper.SaleClueInfoMapper;
 import com.ruixuan.salesLeads.mapper.SaleQuotaInfoMapper;
-import com.ruixuan.salesLeads.mapper.TestMapper;
 import com.ruixuan.salesLeads.pojo.SaleClueInfoPojo;
 import com.ruixuan.salesLeads.pojo.SaleQuotaInfoPojo;
-import com.ruixuan.salesLeads.pojo.TestPojo;
 import com.ruixuan.salesLeads.service.ISaleClueInfoService;
-import com.ruixuan.salesLeads.service.ITestService;
+import com.ruixuan.salesLeads.utils.CsvImportUtil;
 import com.ruixuan.system.domain.SysAreaInfo;
 import com.ruixuan.system.domain.SysIndustryInfo;
 import com.ruixuan.system.mapper.SysAreaInfoMapper;
@@ -55,84 +53,120 @@ public class SaleClueInfoServiceImpl implements ISaleClueInfoService {
 
 
 
+    /**
+     * Author: zianY
+     * Description: 销售线索添加
+     * 支持excel 和 csv 文件上传
+     *------------
+     * @param files
+     * @param salesLeadsType 销售线索类型1:50W低潜;2:50W中高潜;3:200W高潜;4:200W-500w;5:500W
+     * @param uploadDate 时间 格式为202205
+     * @param createUserId
+     *------------
+     * Return com.ruixuan.common.core.domain.ResultResponse
+     */
     @Override
-    public ResultResponse importSaleClueExcel(List<MultipartFile> files, int salesLeadsType, Long uploadDate, Long createUserId) throws Exception{
+    public ResultResponse importSaleExcelOrCsv(List<MultipartFile> files, int salesLeadsType, Long uploadDate, Long createUserId) throws Exception{
 
 
-        for (MultipartFile file : files) {
-            //读取Excel
-            EasyExcel.read(file.getInputStream(),null,
-                        new ImportExcelListener()).sheet().headRowNumber(1).doRead();
-
-
-            //结果集
-            List<Map<String,String>> dataList = ImportExcelListener.importDataList;
 
-            //头 信息
-            //Map<Integer, String> headList = ImportExcelListener.importHeadList;
+        List<Map<String,String>> dataList = new ArrayList<>();
 
-            //log.info("--结果shuju---{}",dataList);
+        for (MultipartFile file : files) {
 
-            //log.info("--结果表头---{}",headList);
+            //文件类型
+            String fileType = FileTypeUtils.gerFileTypeXlsOrCsv(file);
 
+            if (StringUtils.equals("excel",fileType)){
 
-            List<SaleClueInfoPojo> clueList = new ArrayList<>();
-            List<SaleQuotaInfoPojo> quotaList = new ArrayList<>();
-            for (Map<String, String> dataMap : dataList) {
-                SaleClueInfoPojo clue = new SaleClueInfoPojo();
-                SaleQuotaInfoPojo quota = new SaleQuotaInfoPojo();
+                //读取Excel
+                EasyExcel.read(file.getInputStream(),null,
+                            new ImportExcelListener()).sheet().headRowNumber(1).doRead();
 
-                clue.setSalesLeadsType(salesLeadsType);
-                clue.setSellerId(Long.valueOf(dataMap.get("sellerId")));
-                clue.setSellerName(dataMap.get("sellerName"));
-                clue.setFans(Long.valueOf(dataMap.get("fans")));
-                clue.setTelephone(Long.valueOf(dataMap.get("telephone")));
-                clue.setProviderFlag(dataMap.get("providerFlag").equals("否") ? 0 : 1);
-                clue.setTransitionFlag(Integer.valueOf(dataMap.get("transitionFlag")));
-                clue.setCreateUserId(createUserId);
+                //头 信息
+                //Map<Integer, String> headList = ImportExcelListener.importHeadList;
 
-                //查询行业
-                SysIndustryInfo industryInfo = sysIndustryInfoMapper.getIndustryInfoByName(dataMap.get("industryId"));
-                clue.setIndustryId(StringUtils.isNull(industryInfo) ? 0 : industryInfo.getId());
+                //结果集
+                dataList = ImportExcelListener.importDataList;
 
-                //根据城市查询 省市id
-                SysAreaInfo areaInfo = sysAreaInfoMapper.getAreaInfoByName(dataMap.get("cityId"));
-                clue.setProvinceId(areaInfo.getParentCode());
-                clue.setCityId(areaInfo.getCode());
+            }
 
+            if (StringUtils.equals("csv",fileType)){
 
-                quota.setNearlyThirtyDays(dataMap.get("NearlyThirtyDays"));
-                quota.setGmvMonth(Long.valueOf(dataMap.get("gmvMonth")));
-                quota.setGmv(dataMap.get("gmv"));
+                dataList = CsvImportUtil.readCSV(file);
 
-                quota.setMtdDate(Long.valueOf(dataMap.get("mtdDate")));
-                quota.setMtd(dataMap.get("mtd"));
-                quota.setCreateUserId(createUserId);
-                quota.setSellerId(Long.valueOf(dataMap.get("sellerId")));
+            }
 
+            //处理数据结果
+            resultData(dataList,salesLeadsType,createUserId);
 
 
-                clueList.add(clue);
-                quotaList.add(quota);
-            }
+            //excel 清除监听数据
+            ImportExcelListener.importDataList.clear();
+            ImportExcelListener.importHeadList.clear();
 
 
-            saleClueInfoMapper.replaceSaleClueInfoBatch(clueList);
-            saleQuotaInfoMapper.replaceSaleQuotaInfoBatch(quotaList);
+        }
 
 
+        return ResultResponse.successMsg("保存成功",null);
+    }
 
 
-            ImportExcelListener.importDataList.clear();
-            ImportExcelListener.importHeadList.clear();
+    /**
+     * 处理销售线索 数据结果
+     * @param dataList
+     * @param salesLeadsType
+     * @param createUserId
+     */
+    public void resultData(List<Map<String,String>> dataList,int salesLeadsType,Long createUserId){
+
+        List<SaleClueInfoPojo> clueList = new ArrayList<>();
+        List<SaleQuotaInfoPojo> quotaList = new ArrayList<>();
+        for (Map<String, String> dataMap : dataList) {
+            SaleClueInfoPojo clue = new SaleClueInfoPojo();
+            SaleQuotaInfoPojo quota = new SaleQuotaInfoPojo();
+
+            clue.setSalesLeadsType(salesLeadsType);
+            clue.setSellerId(Long.valueOf(dataMap.get("sellerId")));
+            clue.setSellerName(dataMap.get("sellerName"));
+            clue.setFans(Long.valueOf(dataMap.get("fans")));
+            clue.setTelephone(Long.valueOf(dataMap.get("telephone")));
+            clue.setProviderFlag(dataMap.get("providerFlag").equals("否") ? 0 : 1);
+            clue.setTransitionFlag(Integer.valueOf(dataMap.get("transitionFlag")));
+            clue.setCreateUserId(createUserId);
+
+            //查询行业
+            SysIndustryInfo industryInfo = sysIndustryInfoMapper.getIndustryInfoByName(dataMap.get("industryId"));
+            clue.setIndustryId(StringUtils.isNull(industryInfo) ? 0 : industryInfo.getId());
+
+            //根据城市查询 省市id
+            SysAreaInfo areaInfo = sysAreaInfoMapper.getAreaInfoByName(dataMap.get("cityId"));
+            clue.setProvinceId(areaInfo.getParentCode());
+            clue.setCityId(areaInfo.getCode());
+
+            quota.setNearlyThirtyDays(dataMap.get("NearlyThirtyDays"));
+            quota.setGmvMonth(Long.valueOf(dataMap.get("gmvMonth")));
+            quota.setGmv(dataMap.get("gmv"));
+
+            quota.setMtdDate(Long.valueOf(dataMap.get("mtdDate")));
+            quota.setMtd(dataMap.get("mtd"));
+            quota.setCreateUserId(createUserId);
+            quota.setSellerId(Long.valueOf(dataMap.get("sellerId")));
+
+            clueList.add(clue);
+            quotaList.add(quota);
+        }
 
+        //销售线索
+        saleClueInfoMapper.replaceSaleClueInfoBatch(clueList);
+        //线索-额度
+        saleQuotaInfoMapper.replaceSaleQuotaInfoBatch(quotaList);
 
+    }
 
-        }
 
 
 
 
-        return null;
-    }
 }

+ 163 - 0
ruixuan-salesLeads/src/main/java/com.ruixuan.salesLeads/utils/CsvImportUtil.java

@@ -0,0 +1,163 @@
+package com.ruixuan.salesLeads.utils;
+
+
+import com.ruixuan.common.utils.StringUtils;
+import de.siegmar.fastcsv.reader.CsvContainer;
+import de.siegmar.fastcsv.reader.CsvReader;
+import de.siegmar.fastcsv.reader.CsvRow;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.File;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * ***************************************************
+ *
+ * @Auther: zianY
+ * @Descipion: 销售线索-csv 格式读取
+ * @CreateDate: 2022-05-26
+ * ****************************************************
+ */
+@Slf4j
+public class CsvImportUtil {
+
+
+    /**
+     * 读取csv数据
+     * @param multipartFile
+     * @return
+     * @throws Exception
+     */
+    public static List<Map<String,String>> readCSV(MultipartFile multipartFile)throws Exception {
+
+        //multipartFile 转 file
+        File file = CsvImportUtil.multipartFile2File(multipartFile);
+
+        CsvReader csvReader = new CsvReader();
+        csvReader.setContainsHeader(true);
+
+        CsvContainer csv = csvReader.read(file, StandardCharsets.UTF_8);
+        //log.info("csv====>>>{}",csv.getRows());
+
+        //行数据
+        List<CsvRow> rows = csv.getRows();
+
+        //List<String> header = csv.getHeader();
+
+        List<Map<String,String>> lisMap = new ArrayList<>();
+
+        for (int i = 0; i < rows.size(); i++) {
+
+            Map<String, String> objectMap = new HashMap<>();
+
+            Map<String,String> rowMap = rows.get(i).getFieldMap();
+
+            rowMap.forEach((key,vlue)->{
+
+                switch (key){
+                    case "卖家ID":
+
+                        objectMap.put("sellerId",vlue);
+                        break;
+
+
+                    case "卖家昵称":
+
+                        objectMap.put("sellerName",vlue);
+                        break;
+
+
+                    case "粉丝数":
+
+                        objectMap.put("fans",vlue);
+                        break;
+
+                    case "所属行业":
+
+                        objectMap.put("industryId",vlue);
+                        break;
+
+
+                    case "常驻省份":
+
+                        objectMap.put("provinceId",vlue);
+                        break;
+
+
+                    case "常驻城市":
+
+                        objectMap.put("cityId",vlue);
+                        break;
+
+
+                    case "联系方式":
+
+                        objectMap.put("telephone",vlue);
+                        break;
+
+
+                    case "卖家是否绑定服务商":
+
+                        objectMap.put("providerFlag", StringUtils.isEmpty(vlue) ? "否" : vlue);
+                        break;
+
+                    case "是否跃迁":
+
+                        objectMap.put("transitionFlag",StringUtils.isEmpty(vlue) ? "0" : vlue);
+                        break;
+
+                }
+
+
+                if ((key).contains("30天")){
+                    objectMap.put("NearlyThirtyDays",vlue);
+                }
+
+                if ((key).contains("gmv")){
+                    objectMap.put("gmvMonth",key.substring(0,key.indexOf("gmv")));
+                    objectMap.put("gmv",vlue);
+                }
+
+                if (key.contains("mtd")){
+                    objectMap.put("mtdDate",key.substring(0,key.indexOf("mtd")));
+                    objectMap.put("mtd",vlue);
+                }
+
+
+            });
+
+
+            lisMap.add(objectMap);
+
+        }
+
+
+        return lisMap;
+
+    }
+
+
+    /**
+     * multipartFile转File
+     **/
+    public static File multipartFile2File(MultipartFile multipartFile){
+        File file = null;
+        if (multipartFile != null){
+            try {
+                file=File.createTempFile("tmp", null);
+                multipartFile.transferTo(file);
+                System.gc();
+                file.deleteOnExit();
+            }catch (Exception e){
+                e.printStackTrace();
+                log.warn("multipartFile转File发生异常:"+e);
+            }
+        }
+        return file;
+    }
+}