Merge branch 'main' into prod

This commit is contained in:
zzs 2025-03-10 18:03:36 +08:00
commit a8ea01e699
13 changed files with 173 additions and 17 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,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<List<DealerRegistrationModel>> parsing(MultipartFile file) throws IOException {
public CommonResult<List<DealerRegistrationModel>> parsing(@RequestBody MultipartFile file) throws IOException {
return CommonResult.success(excelTemplateService.parsingExcel(file));
}
}

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,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;
}

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,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<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 {
return ExcelUtils.read(file, DealerRegistrationModel.class);
List<DealerRegistrationModel> 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());
}
}

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

@ -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<UserRespVO> 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));
}
}

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);
}
}
}

View File

@ -214,4 +214,6 @@ public interface AdminUserService {
*/
AdminUserDO getUserByOpenId(String openId);
AdminUserDO getUserByPhone(String phone);
}

View File

@ -529,4 +529,16 @@ public class AdminUserServiceImpl implements AdminUserService {
return user;
}
}
@Override
public AdminUserDO getUserByPhone(String phone) {
LambdaQueryWrapperX<AdminUserDO> queryWrapperX = new LambdaQueryWrapperX<>();
queryWrapperX.eq(AdminUserDO::getMobile, phone);
List<AdminUserDO> users = userMapper.selectList(queryWrapperX);
if (users.isEmpty()) {
return null;
}
return users.get(0);
}
}