From 2302448a9ed0a40bfa6c39bc164709e641d4b686 Mon Sep 17 00:00:00 2001 From: luolm <470431449@qq.com> Date: Mon, 27 Jan 2025 19:59:47 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=A2=E6=88=B7=E7=AE=A1=E7=90=86=E5=AF=BC?= =?UTF-8?q?=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/controller/CustomerController.java | 26 ++++--- .../admin/controller/DeviceController.java | 1 - .../pojo/vo/ComstomerImportTemplate.java | 58 +++++++++++++++ .../admin/pojo/vo/CustomerExcelVO.java | 12 +++- .../admin/service/AdminCustomerService.java | 70 +++++++++++++++++++ .../admin/service/AdminDeviceTypeService.java | 3 +- .../common/util/UniqueSequenceGenerator.java | 5 +- 7 files changed, 157 insertions(+), 18 deletions(-) create mode 100644 nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/pojo/vo/ComstomerImportTemplate.java create mode 100644 nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/AdminCustomerService.java diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/CustomerController.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/CustomerController.java index 3749e79e..90e796e2 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/CustomerController.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/CustomerController.java @@ -9,8 +9,10 @@ import com.nflg.mobilebroken.admin.pojo.dto.BaseAreaEditDTO; import com.nflg.mobilebroken.admin.pojo.dto.CustomerDTO; import com.nflg.mobilebroken.admin.pojo.query.CustomerQuery; import com.nflg.mobilebroken.admin.pojo.query.DepartmentQuery; +import com.nflg.mobilebroken.admin.pojo.vo.ComstomerImportTemplate; import com.nflg.mobilebroken.admin.pojo.vo.CustomerExcelVO; import com.nflg.mobilebroken.admin.pojo.vo.DeviceExcelVO; +import com.nflg.mobilebroken.admin.service.AdminCustomerService; import com.nflg.mobilebroken.common.constant.STATE; import com.nflg.mobilebroken.common.exception.NflgException; import com.nflg.mobilebroken.common.pojo.ApiResult; @@ -47,6 +49,9 @@ public class CustomerController { @Resource ITBaseCustomerService baseCustomerService; + @Resource + AdminCustomerService adminCustomerService; + @PostMapping("getList") @MethodInfoMark(value = "获取客户列表" ,menuName = "客户管理") @@ -70,7 +75,7 @@ public class CustomerController { VUtils.trueThrow(CollUtil.isNotEmpty(existCompany)).throwMessage(STATE.PageError,customerDTO.getAgencyCompanyName()+"公司名称已存在"); TBaseCustomer ent = Convert.convert(TBaseCustomer.class, customerDTO); ent.setId(null); - ent.setAgencyCompanyCode(new UniqueSequenceGenerator().generateCode(Constant.CustomerCodePrefix)); + ent.setAgencyCompanyCode(UniqueSequenceGenerator.generateCode(Constant.CustomerCodePrefix)); ent.setDataCreateUserNo(TokenUtil.getUserNo()); ent.setDataCreateUserName(TokenUtil.getUserName()); ent.setDataCreateTime(LocalDateTime.now()); @@ -125,9 +130,9 @@ public class CustomerController { public void downTemplate(HttpServletResponse response) throws IOException { EecExcelUtil.setResponseExcelHeader(response,"客户导入模板"); - final ListSheet listSheet = new ListSheet() { + final ListSheet listSheet = new ListSheet() { @Override - protected List more() { + protected List more() { return null; } }; @@ -163,16 +168,15 @@ public class CustomerController { * @return */ @PostMapping("importData") - @MethodInfoMark(value = "导入客户",menuName = "客户列表") public ApiResult importData( @RequestParam(value = "file") MultipartFile file){ -// try { -// List data = EecExcelUtil.getExcelContext(file.getInputStream(), DeviceExcelVO.class); -// VUtils.trueThrowBusinessError(CollUtil.isEmpty(data)).throwMessage("导入文件内容为空"); -// adminDeviceService.importData(data); -// } catch (IOException e) { -// throw new NflgException(STATE.BusinessError, "导出失败:"+e.getMessage()); -// } + try { + List data = EecExcelUtil.getExcelContext(file.getInputStream(), CustomerExcelVO.class); + VUtils.trueThrowBusinessError(CollUtil.isEmpty(data)).throwMessage("导入文件内容为空"); + adminCustomerService.importData(data); + } catch (IOException e) { + throw new NflgException(STATE.BusinessError, "导出失败:"+e.getMessage()); + } return ApiResult.success(true); } diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/DeviceController.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/DeviceController.java index d5edb9da..cd145ec8 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/DeviceController.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/DeviceController.java @@ -146,7 +146,6 @@ public class DeviceController { * @return */ @PostMapping("importData") - @MethodInfoMark(value = "导入设备",menuName = "设备管理") public ApiResult importData( @RequestParam(value = "file") MultipartFile file){ try { diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/pojo/vo/ComstomerImportTemplate.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/pojo/vo/ComstomerImportTemplate.java new file mode 100644 index 00000000..40038eae --- /dev/null +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/pojo/vo/ComstomerImportTemplate.java @@ -0,0 +1,58 @@ +package com.nflg.mobilebroken.admin.pojo.vo; + +import org.ttzero.excel.annotation.ExcelColumn; + +public class ComstomerImportTemplate { + + @ExcelColumn( "代理公司名称") + private String agencyCompanyName; + + /** + * 代理负责人 + */ + @ExcelColumn( "代理负责人") + private String agencyManager; + + /** + * sap客户号 + */ + @ExcelColumn("sap客户号") + private String sapCustomerNo; + + /** + * 销售授权信息 + */ + @ExcelColumn("销售授权信息") + private String salesAuthorizationInfo; + + /** + * 区域编码 + */ + @ExcelColumn("区域编码") + private String areaCode; + + /** + * 区域 + */ + @ExcelColumn("区域名称") + private String areaName; + + /** + * 服务主管 + */ + @ExcelColumn("服务主管") + private String serviceSupervisor; + + /** + * 销售主管 + */ + @ExcelColumn("销售主管") + private String salesSupervisor; + + + + @ExcelColumn("状态") + private String enableStateName; + + +} diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/pojo/vo/CustomerExcelVO.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/pojo/vo/CustomerExcelVO.java index 98f32071..d859ef3d 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/pojo/vo/CustomerExcelVO.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/pojo/vo/CustomerExcelVO.java @@ -5,12 +5,13 @@ import org.ttzero.excel.annotation.ExcelColumn; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; +import java.io.Serializable; /** * 客户管理导出模板 */ @Data -public class CustomerExcelVO { +public class CustomerExcelVO implements Serializable { @ExcelColumn( "代理公司名称") private String agencyCompanyName; @@ -63,6 +64,13 @@ public class CustomerExcelVO { private Integer enableState; + public Integer getEnableState() { + if(enableState==null){ + return enableStateName=="禁用"?0:1; + } + return enableState; + } + @ExcelColumn("状态") private String enableStateName; @@ -73,6 +81,6 @@ public class CustomerExcelVO { @ExcelColumn("创建人") private String dataCreateUserName; - @ExcelColumn(value = "创建人" ,format = "yyyy-MM-dd") + @ExcelColumn(value = "创建时间" ,format = "yyyy-MM-dd") private String dataCreateTime; } diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/AdminCustomerService.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/AdminCustomerService.java new file mode 100644 index 00000000..33b7b222 --- /dev/null +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/AdminCustomerService.java @@ -0,0 +1,70 @@ +package com.nflg.mobilebroken.admin.service; + + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.StrUtil; +import com.nflg.mobilebroken.admin.constant.Constant; +import com.nflg.mobilebroken.admin.pojo.vo.CustomerExcelVO; +import com.nflg.mobilebroken.common.constant.STATE; +import com.nflg.mobilebroken.common.util.TokenUtil; +import com.nflg.mobilebroken.common.util.UniqueSequenceGenerator; +import com.nflg.mobilebroken.common.util.VUtils; +import com.nflg.mobilebroken.repository.entity.TBaseCustomer; +import com.nflg.mobilebroken.repository.service.ITBaseCustomerService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.time.LocalDateTime; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +@Service +public class AdminCustomerService { + + @Resource + ITBaseCustomerService baseCustomerService; + + /** + * 导入 + * @param data + */ + @Transactional(rollbackFor = Exception.class) + public void importData(List data){ + + //检查EXCEL中代理公司名是否重复 + Map> duplicateCompany = data.stream() + .collect(Collectors.groupingBy(CustomerExcelVO::getAgencyCompanyName)) + .entrySet().stream() + .filter(entry -> entry.getValue().size() > 1) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + + if(CollUtil.isNotEmpty(duplicateCompany)) { + VUtils.trueThrow(true).throwMessage(STATE.ParamErr,"Excel中以下代理公司名重复:"+StrUtil.join(",",duplicateCompany.keySet()) ) ; + } + //检查公司名称是否已存在数据库中 + List companyNames = data.stream().map(u -> u.getAgencyCompanyName()).collect(Collectors.toList()); + + List existCompany= baseCustomerService.lambdaQuery().in(TBaseCustomer::getAgencyCompanyName, companyNames).list(); + if(CollUtil.isNotEmpty(existCompany)){ + Set existCompanyNames = existCompany.stream().map(u -> u.getAgencyCompanyName()).collect(Collectors.toSet()); + VUtils.trueThrow(true).throwMessage(STATE.ParamErr,StrUtil.join(",",existCompanyNames)+" 已存在数据库中"); + } + List result = Convert.toList(TBaseCustomer.class, data); + result.forEach(k->{ + k.setDataCreateUserNo(TokenUtil.getUserNo()); + k.setDataCreateUserName(TokenUtil.getUserName()); + k.setDataCreateTime(LocalDateTime.now()); + k.setDataModifyUserNo(TokenUtil.getUserNo()); + k.setDataModifyUserName(TokenUtil.getUserName()); + k.setDataModifyTime(LocalDateTime.now()); + k.setAgencyCompanyCode(UniqueSequenceGenerator.generateCode(Constant.CustomerCodePrefix) ); + + }); + baseCustomerService.saveBatch(result); + + } +} diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/AdminDeviceTypeService.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/AdminDeviceTypeService.java index 03ce21c7..dfd193f5 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/AdminDeviceTypeService.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/AdminDeviceTypeService.java @@ -21,7 +21,6 @@ public class AdminDeviceTypeService { @Resource ITBaseDeviceTypeService baseDeviceTypeService; - UniqueSequenceGenerator uniqueSequenceGenerator=new UniqueSequenceGenerator(); public void batchAddDeviceType(List deviceTypeList){ List existDeviceTypes = baseDeviceTypeService.lambdaQuery().in(TBaseDeviceType::getDeviceType, deviceTypeList).select(TBaseDeviceType::getDeviceType).list(); @@ -34,7 +33,7 @@ public class AdminDeviceTypeService { for (String deviceType:needAddTypes) { TBaseDeviceType ent=new TBaseDeviceType(); ent.setId(null); - ent.setDeviceTypeCode(uniqueSequenceGenerator.generateCode(Constant.DeviceTypeCodePrefix)); + ent.setDeviceTypeCode(UniqueSequenceGenerator.generateCode(Constant.DeviceTypeCodePrefix)); ent.setDeviceType(deviceType); ent.setDeviceState(Boolean.TRUE); ent.setDataCreateUserNo(TokenUtil.getUserNo()); diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/util/UniqueSequenceGenerator.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/util/UniqueSequenceGenerator.java index 95594364..c139f08a 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/util/UniqueSequenceGenerator.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/util/UniqueSequenceGenerator.java @@ -7,14 +7,15 @@ import java.util.concurrent.atomic.AtomicInteger; public class UniqueSequenceGenerator { private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); - private AtomicInteger sequence = new AtomicInteger(0); + /** * 生成唯一顺序编码 * @return 唯一顺序编码字符串 */ - public synchronized String generateCode(String prefix) { + public static synchronized String generateCode(String prefix) { + AtomicInteger sequence = new AtomicInteger(0); // 获取当前时间戳,精确到毫秒 String timestamp = sdf.format(new Date()); // 获取序列号,并在达到9999时重置为0