feat:export entry data

This commit is contained in:
zzs 2025-03-10 10:10:52 +08:00
parent fc9f684716
commit 7d90fef64f
10 changed files with 137 additions and 13 deletions

View File

@ -21,7 +21,7 @@ spring:
- id: crm-api-proxy # ????????
uri: http://127.0.0.1:38080
predicates:
- Path=/crm-api/proxy/file/**
- Path=/crm-api/proxy/**
servlet:
multipart:
max-file-size: 20MB

View File

@ -1,13 +1,15 @@
package com.ensign.crm.module.crm.controller.crm;
import com.ensign.crm.framework.common.pojo.CommonResult;
import com.ensign.crm.module.crm.controller.crm.vs.GenerateTemplateReqVo;
import com.ensign.crm.module.crm.model.DealerRegistrationModel;
import com.ensign.crm.module.crm.service.ExcelTemplateService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
@ -30,10 +32,11 @@ public class ExcelTemplateController {
@Autowired
private ExcelTemplateService excelTemplateService;
@GetMapping("/download-template")
@PostMapping("/download-template")
@Operation(summary = "下载经销商登记引出模板")
public void generateTemplate(HttpServletResponse response) throws IOException {
excelTemplateService.generateDealerRegistration(response);
@Transactional
public void generateTemplate(@RequestBody GenerateTemplateReqVo presetData, HttpServletResponse response) throws IOException {
excelTemplateService.generateDealerRegistration(presetData, response);
}
@PostMapping("/upload/parsing")

View File

@ -0,0 +1,26 @@
package com.ensign.crm.module.crm.controller.crm.vs;
import com.ensign.crm.module.crm.model.DealerRegistrationModel;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* @Description: TODO
* @Date: 2025/3/10 9:14
* @Created: by ZZSLL
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class GenerateTemplateReqVo {
private List<DealerRegistrationModel> data;
private List<RegionOptionItem> region;
}

View File

@ -0,0 +1,21 @@
package com.ensign.crm.module.crm.controller.crm.vs;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @Description: TODO
* @Date: 2025/3/10 9:15
* @Created: by ZZSLL
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class RegionOptionItem {
private String label;
private String value;
}

View File

@ -5,6 +5,7 @@ import com.ensign.crm.framework.excel.core.annotations.DictFormat;
import com.ensign.crm.framework.excel.core.annotations.ExcelColumnSelect;
import com.ensign.crm.framework.excel.core.convert.DictConvert;
import com.ensign.crm.module.system.enums.DictTypeConstants;
import com.fasterxml.jackson.annotation.JsonAlias;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
@ -25,18 +26,22 @@ import lombok.experimental.Accessors;
public class DealerRegistrationModel {
@ExcelProperty("公司名称或客户姓名")
private String yem_tcompanyname_jxs;
@JsonAlias({"yem_tcompanyname", "yem_tcompanyname_jxs"})
private String yem_tcompanyname;
@ExcelProperty("客户联系人")
private String yem_customerlxr_jxs;
@JsonAlias({"yem_customerlxr_jxs", "yem_customerlxr"})
private String yem_customerlxr;
@ExcelProperty("客户联系方式")
private String yem_customercontact_jxs;
@JsonAlias({"yem_customercontact_jxs", "yem_customercontact"})
private String yem_customercontact;
@ExcelProperty(value = "区域", converter = DictConvert.class)
@DictFormat(DictTypeConstants.REGION_OPTION)
@ExcelColumnSelect(dictType = DictTypeConstants.REGION_OPTION)
private String yem_region_jxs;
@JsonAlias({"yem_region_jxs", "yem_region_qy_number"})
private String yem_region_qy_number;
@ExcelProperty(value = "意向强度", converter = DictConvert.class)
@DictFormat(DictTypeConstants.INTENTION_OPTION)
@ -44,6 +49,7 @@ public class DealerRegistrationModel {
private String yem_intentionality;
@ExcelProperty("转换客户")
@DictFormat(DictTypeConstants.BOOLEAN_OPTION)
@ExcelColumnSelect(dictType = DictTypeConstants.BOOLEAN_OPTION)
private String yem_switching;
}

View File

@ -1,7 +1,15 @@
package com.ensign.crm.module.crm.service;
import com.ensign.crm.framework.common.enums.CommonStatusEnum;
import com.ensign.crm.framework.excel.core.util.ExcelUtils;
import com.ensign.crm.module.crm.controller.crm.vs.GenerateTemplateReqVo;
import com.ensign.crm.module.crm.controller.crm.vs.RegionOptionItem;
import com.ensign.crm.module.crm.model.DealerRegistrationModel;
import com.ensign.crm.module.system.controller.admin.dict.vo.data.DictDataSaveReqVO;
import com.ensign.crm.module.system.dal.dataobject.dict.DictDataDO;
import com.ensign.crm.module.system.enums.DictTypeConstants;
import com.ensign.crm.module.system.service.dict.DictDataService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
@ -9,6 +17,8 @@ import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @Description: TODO
@ -19,15 +29,53 @@ import java.util.List;
@Service
public class ExcelTemplateService {
@Autowired
private DictDataService dictDataService;
/**
* 经销商登记
*
* @param data
* @param response
*/
public void generateDealerRegistration(HttpServletResponse response) throws IOException {
public void generateDealerRegistration(GenerateTemplateReqVo data, HttpServletResponse response) throws IOException {
List<RegionOptionItem> region = data.getRegion();
Map<String, String> regionMap = region.stream().collect(Collectors.toMap(RegionOptionItem::getValue, RegionOptionItem::getLabel));
List<DictDataDO> existData = dictDataService.getDictDataList(CommonStatusEnum.ENABLE.getStatus(), DictTypeConstants.REGION_OPTION);
List<DictDataDO> update = new ArrayList<>();
List<RegionOptionItem> insert = new ArrayList<>();
for (DictDataDO item : existData) {
String name = item.getLabel();
String value = item.getValue();
if (regionMap.containsKey(value)) {
if (!name.equals(regionMap.get(name))) {
item.setLabel(regionMap.get(value));
update.add(item);
}
}
}
List<DealerRegistrationModel> emptyData = new ArrayList<>();
ExcelUtils.write(response, "经销商登记引出模板.xlsx", "Sheet1", DealerRegistrationModel.class, emptyData);
Map<String, DictDataDO> existMap = existData.stream().collect(Collectors.toMap(DictDataDO::getValue, d -> d));
List<DictDataDO> delete = existMap.entrySet().stream()
.filter(entry -> !regionMap.containsKey(entry.getKey()))
.map(Map.Entry::getValue)
.collect(Collectors.toList());
for (Map.Entry<String, String> entry : regionMap.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
if (!existMap.containsKey(key)) {
insert.add(new RegionOptionItem(value, key));
}
}
dictDataService.updateById(update);
for (RegionOptionItem item : insert) {
dictDataService.createDictData(new DictDataSaveReqVO(null, 0, item.getLabel(), item.getValue(), DictTypeConstants.REGION_OPTION, CommonStatusEnum.ENABLE.getStatus(), null, null, null));
}
dictDataService.deleteById(delete.stream().map(DictDataDO::getId).collect(Collectors.toSet()));
ExcelUtils.write(response, "经销商登记引出模板.xlsx", "Sheet1", DealerRegistrationModel.class, data.getData());
}
public List<DealerRegistrationModel> parsingExcel(MultipartFile file) throws IOException {

View File

@ -27,4 +27,6 @@ public interface DictTypeConstants {
String REGION_OPTION = "crm_region_option";
String INTENTION_OPTION = "crm_intention_option";
String BOOLEAN_OPTION = "infra_boolean_string";
}

View File

@ -3,6 +3,7 @@ package com.ensign.crm.module.system.controller.admin.dict.vo.data;
import com.ensign.crm.framework.common.enums.CommonStatusEnum;
import com.ensign.crm.framework.common.validation.InEnum;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Data;
import javax.validation.constraints.NotBlank;
@ -11,6 +12,7 @@ import javax.validation.constraints.Size;
@Schema(description = "管理后台 - 字典数据创建/修改 Request VO")
@Data
@AllArgsConstructor
public class DictDataSaveReqVO {
@Schema(description = "字典数据编号", example = "1024")

View File

@ -107,4 +107,8 @@ public interface DictDataService {
*/
List<DictDataDO> getDictDataListByDictType(String dictType);
void updateById(List<DictDataDO> data);
void deleteById(Collection<Long> ids);
}

View File

@ -176,4 +176,16 @@ public class DictDataServiceImpl implements DictDataService {
return list;
}
@Override
public void updateById(List<DictDataDO> data) {
dictDataMapper.updateById(data);
}
@Override
public void deleteById(Collection<Long> ids) {
if (ids != null && !ids.isEmpty()) {
dictDataMapper.deleteByIds(ids);
}
}
}