diff --git a/ensign-gateway/src/main/resources/application.yml b/ensign-gateway/src/main/resources/application.yml index ecd2503..3a2d479 100644 --- a/ensign-gateway/src/main/resources/application.yml +++ b/ensign-gateway/src/main/resources/application.yml @@ -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 diff --git a/ensign-module-crm/ensign-module-crm-biz/src/main/java/com/ensign/crm/module/crm/controller/crm/ExcelTemplateController.java b/ensign-module-crm/ensign-module-crm-biz/src/main/java/com/ensign/crm/module/crm/controller/crm/ExcelTemplateController.java index d3fa2bb..397513d 100644 --- a/ensign-module-crm/ensign-module-crm-biz/src/main/java/com/ensign/crm/module/crm/controller/crm/ExcelTemplateController.java +++ b/ensign-module-crm/ensign-module-crm-biz/src/main/java/com/ensign/crm/module/crm/controller/crm/ExcelTemplateController.java @@ -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") diff --git a/ensign-module-crm/ensign-module-crm-biz/src/main/java/com/ensign/crm/module/crm/controller/crm/vs/GenerateTemplateReqVo.java b/ensign-module-crm/ensign-module-crm-biz/src/main/java/com/ensign/crm/module/crm/controller/crm/vs/GenerateTemplateReqVo.java new file mode 100644 index 0000000..2cd7596 --- /dev/null +++ b/ensign-module-crm/ensign-module-crm-biz/src/main/java/com/ensign/crm/module/crm/controller/crm/vs/GenerateTemplateReqVo.java @@ -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 data; + + private List region; + +} diff --git a/ensign-module-crm/ensign-module-crm-biz/src/main/java/com/ensign/crm/module/crm/controller/crm/vs/RegionOptionItem.java b/ensign-module-crm/ensign-module-crm-biz/src/main/java/com/ensign/crm/module/crm/controller/crm/vs/RegionOptionItem.java new file mode 100644 index 0000000..0b98c9e --- /dev/null +++ b/ensign-module-crm/ensign-module-crm-biz/src/main/java/com/ensign/crm/module/crm/controller/crm/vs/RegionOptionItem.java @@ -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; +} diff --git a/ensign-module-crm/ensign-module-crm-biz/src/main/java/com/ensign/crm/module/crm/model/DealerRegistrationModel.java b/ensign-module-crm/ensign-module-crm-biz/src/main/java/com/ensign/crm/module/crm/model/DealerRegistrationModel.java index a8ff339..05f802c 100644 --- a/ensign-module-crm/ensign-module-crm-biz/src/main/java/com/ensign/crm/module/crm/model/DealerRegistrationModel.java +++ b/ensign-module-crm/ensign-module-crm-biz/src/main/java/com/ensign/crm/module/crm/model/DealerRegistrationModel.java @@ -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; - } diff --git a/ensign-module-crm/ensign-module-crm-biz/src/main/java/com/ensign/crm/module/crm/service/ExcelTemplateService.java b/ensign-module-crm/ensign-module-crm-biz/src/main/java/com/ensign/crm/module/crm/service/ExcelTemplateService.java index b71529c..64a7a9a 100644 --- a/ensign-module-crm/ensign-module-crm-biz/src/main/java/com/ensign/crm/module/crm/service/ExcelTemplateService.java +++ b/ensign-module-crm/ensign-module-crm-biz/src/main/java/com/ensign/crm/module/crm/service/ExcelTemplateService.java @@ -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 region = data.getRegion(); + Map regionMap = region.stream().collect(Collectors.toMap(RegionOptionItem::getValue, RegionOptionItem::getLabel)); + List existData = dictDataService.getDictDataList(CommonStatusEnum.ENABLE.getStatus(), DictTypeConstants.REGION_OPTION); + List update = new ArrayList<>(); + List 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 emptyData = new ArrayList<>(); - ExcelUtils.write(response, "经销商登记引出模板.xlsx", "Sheet1", DealerRegistrationModel.class, emptyData); + Map existMap = existData.stream().collect(Collectors.toMap(DictDataDO::getValue, d -> d)); + List delete = existMap.entrySet().stream() + .filter(entry -> !regionMap.containsKey(entry.getKey())) + .map(Map.Entry::getValue) + .collect(Collectors.toList()); + + for (Map.Entry 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 parsingExcel(MultipartFile file) throws IOException { diff --git a/ensign-module-system/ensign-module-system-api/src/main/java/com/ensign/crm/module/system/enums/DictTypeConstants.java b/ensign-module-system/ensign-module-system-api/src/main/java/com/ensign/crm/module/system/enums/DictTypeConstants.java index 597433b..c909ff6 100644 --- a/ensign-module-system/ensign-module-system-api/src/main/java/com/ensign/crm/module/system/enums/DictTypeConstants.java +++ b/ensign-module-system/ensign-module-system-api/src/main/java/com/ensign/crm/module/system/enums/DictTypeConstants.java @@ -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"; } diff --git a/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/controller/admin/dict/vo/data/DictDataSaveReqVO.java b/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/controller/admin/dict/vo/data/DictDataSaveReqVO.java index e23e22f..8ff4e5e 100644 --- a/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/controller/admin/dict/vo/data/DictDataSaveReqVO.java +++ b/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/controller/admin/dict/vo/data/DictDataSaveReqVO.java @@ -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") diff --git a/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/service/dict/DictDataService.java b/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/service/dict/DictDataService.java index 56d04ce..ca1e38d 100644 --- a/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/service/dict/DictDataService.java +++ b/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/service/dict/DictDataService.java @@ -107,4 +107,8 @@ public interface DictDataService { */ List getDictDataListByDictType(String dictType); + + void updateById(List data); + + void deleteById(Collection ids); } diff --git a/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/service/dict/DictDataServiceImpl.java b/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/service/dict/DictDataServiceImpl.java index a3725c9..76be375 100644 --- a/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/service/dict/DictDataServiceImpl.java +++ b/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/service/dict/DictDataServiceImpl.java @@ -176,4 +176,16 @@ public class DictDataServiceImpl implements DictDataService { return list; } + + @Override + public void updateById(List data) { + dictDataMapper.updateById(data); + } + + @Override + public void deleteById(Collection ids) { + if (ids != null && !ids.isEmpty()) { + dictDataMapper.deleteByIds(ids); + } + } }