feat:export entry data
This commit is contained in:
parent
fc9f684716
commit
7d90fef64f
@ -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
|
||||
|
@ -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")
|
||||
|
@ -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;
|
||||
|
||||
}
|
@ -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;
|
||||
}
|
@ -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;
|
||||
|
||||
}
|
||||
|
@ -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 {
|
||||
|
@ -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";
|
||||
}
|
||||
|
@ -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")
|
||||
|
@ -107,4 +107,8 @@ public interface DictDataService {
|
||||
*/
|
||||
List<DictDataDO> getDictDataListByDictType(String dictType);
|
||||
|
||||
|
||||
void updateById(List<DictDataDO> data);
|
||||
|
||||
void deleteById(Collection<Long> ids);
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user