diff --git a/ensign-gateway/src/main/resources/application.yml b/ensign-gateway/src/main/resources/application.yml index a67e657..7232c23 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..7cf3478 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,15 +32,16 @@ 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") @Operation(summary = "解析经销商登记Excel数据") - public CommonResult> parsing(MultipartFile file) throws IOException { + public CommonResult> parsing(@RequestBody MultipartFile file) throws IOException { return CommonResult.success(excelTemplateService.parsingExcel(file)); } } 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..2a26e16 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,8 @@ 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 com.fasterxml.jackson.annotation.JsonProperty; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -25,25 +27,33 @@ import lombok.experimental.Accessors; public class DealerRegistrationModel { @ExcelProperty("公司名称或客户姓名") - private String yem_tcompanyname_jxs; + @JsonAlias({"yem_tcompanyname", "yem_tcompanyname_jxs"}) + @JsonProperty("yem_tcompanyname_jxs") + private String yem_tcompanyname; @ExcelProperty("客户联系人") - private String yem_customerlxr_jxs; + @JsonAlias({"yem_customerlxr_jxs", "yem_customerlxr"}) + @JsonProperty("yem_customerlxr_jxs") + private String yem_customerlxr; @ExcelProperty("客户联系方式") - private String yem_customercontact_jxs; + @JsonAlias({"yem_customercontact_jxs", "yem_customercontact"}) + @JsonProperty("yem_customercontact_jxs") + 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", "yem_region_jxs_number"}) + private String yem_region_jxs_number; @ExcelProperty(value = "意向强度", converter = DictConvert.class) @DictFormat(DictTypeConstants.INTENTION_OPTION) @ExcelColumnSelect(dictType = DictTypeConstants.INTENTION_OPTION) private String yem_intentionality; - @ExcelProperty("转换客户") - private String yem_switching; - +// @ExcelProperty(value = "转换客户", converter = DictConvert.class) +// @DictFormat(DictTypeConstants.BOOLEAN_OPTION) +// @ExcelColumnSelect(dictType = DictTypeConstants.BOOLEAN_OPTION) +// private Boolean 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..3478807 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,18 +29,57 @@ 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 { - return ExcelUtils.read(file, DealerRegistrationModel.class); + List read = ExcelUtils.read(file, DealerRegistrationModel.class); + return read.stream().filter(d -> d.getYem_tcompanyname() != null && d.getYem_customerlxr() != null && d.getYem_customercontact() != null).collect(Collectors.toList()); } } 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/controller/admin/user/UserController.java b/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/controller/admin/user/UserController.java index 00992cd..6f15e47 100644 --- a/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/controller/admin/user/UserController.java +++ b/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/controller/admin/user/UserController.java @@ -170,4 +170,17 @@ public class UserController { return success(userService.importUserList(list, updateSupport)); } + @GetMapping("/get/phone") + @Operation(summary = "手机号查询用户") + @Parameter(name = "phone", description = "手机号", required = true, example = "15898763434") + @PreAuthorize("@ss.hasPermission('system:user:query')") + public CommonResult getUser(@RequestParam("phone") String phone) { + AdminUserDO user = userService.getUserByPhone(phone); + if (user == null) { + return success(null); + } + // 拼接数据 + DeptDO dept = deptService.getDept(user.getDeptId()); + return success(UserConvert.INSTANCE.convert(user, dept)); + } } 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); + } + } } diff --git a/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/service/user/AdminUserService.java b/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/service/user/AdminUserService.java index 9b36a0b..1b022c4 100644 --- a/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/service/user/AdminUserService.java +++ b/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/service/user/AdminUserService.java @@ -214,4 +214,6 @@ public interface AdminUserService { */ AdminUserDO getUserByOpenId(String openId); + AdminUserDO getUserByPhone(String phone); + } diff --git a/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/service/user/AdminUserServiceImpl.java b/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/service/user/AdminUserServiceImpl.java index bd85c29..a568c9f 100644 --- a/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/service/user/AdminUserServiceImpl.java +++ b/ensign-module-system/ensign-module-system-biz/src/main/java/com/ensign/crm/module/system/service/user/AdminUserServiceImpl.java @@ -529,4 +529,16 @@ public class AdminUserServiceImpl implements AdminUserService { return user; } } + + @Override + public AdminUserDO getUserByPhone(String phone) { + LambdaQueryWrapperX queryWrapperX = new LambdaQueryWrapperX<>(); + queryWrapperX.eq(AdminUserDO::getMobile, phone); + List users = userMapper.selectList(queryWrapperX); + if (users.isEmpty()) { + return null; + } + + return users.get(0); + } }