diff --git a/agt-module-license/agt-module-license-server/src/main/java/org/agt/module/license/controller/admin/license/vo/ImportRespVO.java b/agt-module-license/agt-module-license-server/src/main/java/org/agt/module/license/controller/admin/license/vo/ImportRespVO.java index 459aa7d..d6036f2 100644 --- a/agt-module-license/agt-module-license-server/src/main/java/org/agt/module/license/controller/admin/license/vo/ImportRespVO.java +++ b/agt-module-license/agt-module-license-server/src/main/java/org/agt/module/license/controller/admin/license/vo/ImportRespVO.java @@ -21,4 +21,9 @@ public class ImportRespVO { @Schema(description = "导入失败的集合,key 为导入关键字段,value 为失败原因", requiredMode = Schema.RequiredMode.REQUIRED) private Map failures; + @Schema(description = "导入失败的集合,key 为失败原因,value 为sn", requiredMode = Schema.RequiredMode.REQUIRED) + private Map failureMap; + + @Schema(description = "总条数", requiredMode = Schema.RequiredMode.REQUIRED) + private Integer total; } diff --git a/agt-module-license/agt-module-license-server/src/main/java/org/agt/module/license/dal/dataobject/customer/CustomerDO.java b/agt-module-license/agt-module-license-server/src/main/java/org/agt/module/license/dal/dataobject/customer/CustomerDO.java index 58342db..7d4d600 100644 --- a/agt-module-license/agt-module-license-server/src/main/java/org/agt/module/license/dal/dataobject/customer/CustomerDO.java +++ b/agt-module-license/agt-module-license-server/src/main/java/org/agt/module/license/dal/dataobject/customer/CustomerDO.java @@ -69,5 +69,9 @@ public class CustomerDO extends BaseDO { * 备注 */ private String remark; - + /** + * 数据类型 + * + */ + private Integer dataType; } \ No newline at end of file diff --git a/agt-module-license/agt-module-license-server/src/main/java/org/agt/module/license/dal/dataobject/license/LicenseDO.java b/agt-module-license/agt-module-license-server/src/main/java/org/agt/module/license/dal/dataobject/license/LicenseDO.java index 945af08..80d750c 100644 --- a/agt-module-license/agt-module-license-server/src/main/java/org/agt/module/license/dal/dataobject/license/LicenseDO.java +++ b/agt-module-license/agt-module-license-server/src/main/java/org/agt/module/license/dal/dataobject/license/LicenseDO.java @@ -84,5 +84,17 @@ public class LicenseDO extends BaseDO { * 备注 */ private String remark; - + /** + * 数据类型 + * + */ + private Integer dataType; + /** + * License管理员 + */ + private Long licenseAdmin; + /** + * 审批时间 + */ + private LocalDateTime approveTime; } \ No newline at end of file diff --git a/agt-module-license/agt-module-license-server/src/main/java/org/agt/module/license/dal/dataobject/license/LicenseHistoryDO.java b/agt-module-license/agt-module-license-server/src/main/java/org/agt/module/license/dal/dataobject/license/LicenseHistoryDO.java index 96a2ea8..65ca551 100644 --- a/agt-module-license/agt-module-license-server/src/main/java/org/agt/module/license/dal/dataobject/license/LicenseHistoryDO.java +++ b/agt-module-license/agt-module-license-server/src/main/java/org/agt/module/license/dal/dataobject/license/LicenseHistoryDO.java @@ -88,5 +88,17 @@ public class LicenseHistoryDO extends BaseDO { * 备注 */ private String remark; - + /** + * 数据类型 + * + */ + private Integer dataType; + /** + * License管理员 + */ + private Long licenseAdmin; + /** + * 审批时间 + */ + private LocalDateTime approveTime; } \ No newline at end of file diff --git a/agt-module-license/agt-module-license-server/src/main/java/org/agt/module/license/dal/dataobject/project/ProjectDO.java b/agt-module-license/agt-module-license-server/src/main/java/org/agt/module/license/dal/dataobject/project/ProjectDO.java index 664a0c3..2c16ff6 100644 --- a/agt-module-license/agt-module-license-server/src/main/java/org/agt/module/license/dal/dataobject/project/ProjectDO.java +++ b/agt-module-license/agt-module-license-server/src/main/java/org/agt/module/license/dal/dataobject/project/ProjectDO.java @@ -105,5 +105,9 @@ public class ProjectDO extends BaseDO { * 备注 */ private String remark; - + /** + * 数据类型 + * + */ + private Integer dataType; } \ No newline at end of file diff --git a/agt-module-license/agt-module-license-server/src/main/java/org/agt/module/license/dal/mysql/license/LicenseMapper.java b/agt-module-license/agt-module-license-server/src/main/java/org/agt/module/license/dal/mysql/license/LicenseMapper.java index 112431e..3d80d17 100644 --- a/agt-module-license/agt-module-license-server/src/main/java/org/agt/module/license/dal/mysql/license/LicenseMapper.java +++ b/agt-module-license/agt-module-license-server/src/main/java/org/agt/module/license/dal/mysql/license/LicenseMapper.java @@ -1,5 +1,6 @@ package org.agt.module.license.dal.mysql.license; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import org.agt.framework.common.pojo.PageResult; import org.agt.framework.mybatis.core.mapper.BaseMapperX; import org.agt.framework.mybatis.core.query.LambdaQueryWrapperX; @@ -7,6 +8,7 @@ import org.agt.module.license.controller.admin.license.vo.LicensePageReqVO; import org.agt.module.license.dal.dataobject.license.LicenseDO; import org.agt.module.license.enums.LicenseStatusEnum; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; import java.time.LocalDateTime; import java.util.List; @@ -44,6 +46,8 @@ public interface LicenseMapper extends BaseMapperX { } default LicenseDO selectBySn(String sn) { - return selectOne(LicenseDO::getSerialNo, sn); + return selectOne(Wrappers.lambdaQuery().eq(LicenseDO::getSerialNo, sn), false); } + + LicenseDO getBySnAndProjectAndCustomer(@Param("serialNo") String serialNo, @Param("projectName") String projectName, @Param("customerName") String customerName); } \ No newline at end of file diff --git a/agt-module-license/agt-module-license-server/src/main/java/org/agt/module/license/dal/mysql/project/ProjectMapper.java b/agt-module-license/agt-module-license-server/src/main/java/org/agt/module/license/dal/mysql/project/ProjectMapper.java index 610e6c7..62d41b3 100644 --- a/agt-module-license/agt-module-license-server/src/main/java/org/agt/module/license/dal/mysql/project/ProjectMapper.java +++ b/agt-module-license/agt-module-license-server/src/main/java/org/agt/module/license/dal/mysql/project/ProjectMapper.java @@ -85,4 +85,6 @@ public interface ProjectMapper extends BaseMapperX { IPage queryPage(IPage page, @Param("query") ProjectPageReqVO reqVO); List getLicenseProjects(@Param("query") ProjectListReqVO reqVO); + + ProjectDO getBySnAndProjectAndCustomer(@Param("serialNo") String serialNo, @Param("projectName") String projectName, @Param("customerName") String customerName); } \ No newline at end of file diff --git a/agt-module-license/agt-module-license-server/src/main/java/org/agt/module/license/service/license/LicenseServiceImpl.java b/agt-module-license/agt-module-license-server/src/main/java/org/agt/module/license/service/license/LicenseServiceImpl.java index 87a0ab0..0d72408 100644 --- a/agt-module-license/agt-module-license-server/src/main/java/org/agt/module/license/service/license/LicenseServiceImpl.java +++ b/agt-module-license/agt-module-license-server/src/main/java/org/agt/module/license/service/license/LicenseServiceImpl.java @@ -50,7 +50,6 @@ import java.time.LocalDateTime; import java.time.LocalTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; -import java.util.Comparator; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; @@ -647,50 +646,63 @@ public class LicenseServiceImpl implements LicenseService { throw exception(LICENSE_IMPORT_LIST_IS_EMPTY); } - list = list.stream().filter(c -> StrUtil.isNotBlank(c.getSerialNo())).collect(Collectors.toList()); - for (LicenseImportExcelVO importExcelVO : list) { - if (StrUtil.isBlank(importExcelVO.getProjectName())) { - importExcelVO.setProjectName(importExcelVO.getCustomerName() + "-" + importExcelVO.getSerialNo()); - } - } +// list = list.stream().filter(c -> StrUtil.isNotBlank(c.getSerialNo())).collect(Collectors.toList()); +// for (LicenseImportExcelVO importExcelVO : list) { +// if (StrUtil.isBlank(importExcelVO.getProjectName())) { +// importExcelVO.setProjectName(importExcelVO.getCustomerName() + "-" + importExcelVO.getSerialNo()); +// } +// } // 根据sn分组 ImportRespVO respVO = ImportRespVO.builder().creates(new ArrayList<>()) .updates(new ArrayList<>()).failures(new LinkedHashMap<>()).build(); - Map> map = list.stream().collect(Collectors.groupingBy(LicenseImportExcelVO::getSerialNo)); - - List imports = new ArrayList<>(); - for (Map.Entry> entry : map.entrySet()) { - String serialNo = entry.getKey(); - List importList = entry.getValue(); - - if (importList.size() > 1) { - importList.sort(Comparator.comparing(LicenseImportExcelVO::getApplicationTime).reversed()); - imports.add(importList.get(0)); - for (int i = 1; i < importList.size(); i++) { - respVO.getFailures().put(serialNo, "SN重复,以最新的为准"); - } - } else { - imports.addAll(importList); +// Map> map = list.stream().collect(Collectors.groupingBy(LicenseImportExcelVO::getSerialNo)); +// +// List imports = new ArrayList<>(); +// for (Map.Entry> entry : map.entrySet()) { +// String serialNo = entry.getKey(); +// List importList = entry.getValue(); +// +// if (importList.size() > 1) { +// importList.sort(Comparator.comparing(LicenseImportExcelVO::getApplicationTime).reversed()); +// imports.add(importList.get(0)); +// for (int i = 1; i < importList.size(); i++) { +// respVO.getFailures().put(serialNo, "SN重复,以最新的为准"); +// } +// } else { +// imports.addAll(importList); +// } +// } + for (LicenseImportExcelVO importVO : list) { + if (StrUtil.isBlank(importVO.getProjectName())) { + importVO.setProjectName(importVO.getCustomerName() + "-" + importVO.getSerialNo()); } - } - for (LicenseImportExcelVO importVO : imports) { String serialNo = importVO.getSerialNo(); - if (StrUtil.isBlank(importVO.getCustomerName())) { - respVO.getFailures().put(importVO.getCustomerName(), "客户名称不能为空"); + if (StrUtil.isBlank(serialNo)) { + respVO.getFailures().put(importVO.getCustomerName(), "SN不能为空"); continue; } + if (StrUtil.isBlank(importVO.getCustomerName())) { + respVO.getFailures().put(serialNo, "客户名称不能为空"); + continue; + } + LocalDateTime createTime = getCreateTime(importVO); CustomerDO customerDO = customerMapper.selectOne(Wrappers.lambdaQuery().eq(CustomerDO::getName, importVO.getCustomerName()), false); if (customerDO == null) { Integer maxCustomerCode = customerMapper.selectOldMaxCode(); customerDO = new CustomerDO(); customerDO.setName(importVO.getCustomerName()); customerDO.setCode(maxCustomerCode == null ? "1000" : maxCustomerCode + 1 + ""); + customerDO.setDataType(1); + customerDO.setCreateTime(createTime); customerMapper.insert(customerDO); + } else if (updateSupport) { + customerDO.setCreateTime(createTime); + customerMapper.updateById(customerDO); } Long customerId = customerDO.getId(); - ProjectDO projectDO = projectMapper.selectOne(Wrappers.lambdaQuery().eq(ProjectDO::getName, importVO.getProjectName()), false); + ProjectDO projectDO = projectMapper.getBySnAndProjectAndCustomer(serialNo, importVO.getProjectName(), importVO.getCustomerName()); Long projectId = null; if (projectDO == null) { @@ -702,16 +714,21 @@ public class LicenseServiceImpl implements LicenseService { projectDO.setBusinessOwner(customerMapper.getUserByName(importVO.getBusinessOwnerName())); projectDO.setTechnicalOwnerA(customerMapper.getUserByName(importVO.getTechnicalOwnerAName())); projectDO.setTechnicalOwnerB(customerMapper.getUserByName(importVO.getTechnicalOwnerBName())); + projectDO.setDataType(1); + projectDO.setCreateTime(createTime); projectMapper.insert(projectDO); projectId = projectDO.getId(); - } else { + } else if (updateSupport) { projectId = projectDO.getId(); projectDO = BeanUtils.toBean(importVO, ProjectDO.class); projectDO.setId(projectId); projectDO.setBusinessOwner(customerMapper.getUserByName(importVO.getBusinessOwnerName())); projectDO.setTechnicalOwnerA(customerMapper.getUserByName(importVO.getTechnicalOwnerAName())); projectDO.setTechnicalOwnerB(customerMapper.getUserByName(importVO.getTechnicalOwnerBName())); + projectDO.setCreateTime(createTime); projectMapper.updateById(projectDO); + } else { + projectId = projectDO.getId(); } LicenseDO licenseDO = new LicenseDO(); @@ -728,10 +745,10 @@ public class LicenseServiceImpl implements LicenseService { expiryDate = LocalDateTime.of(LocalDate.parse(expiryDateExt, DateTimeFormatter.ofPattern("yyyy/M/d")), LocalTime.of(23, 59, 59)); } licenseDO.setExpiryDate(expiryDate); - licenseDO.setApplicationTime(LocalDateTime.of(importVO.getApplicationTime(), LocalTime.of(0, 0, 0))); + licenseDO.setApplicationTime(createTime); // licenseDO.setUserNumber(importVO.getUserNumber()); // licenseDO.setRanNumber(importVO.getRanNumber()); - licenseDO.setApprover(161L); +// licenseDO.setApprover(161L); String neListStr = importVO.getNeListStr(); List neList = getNeList(neListStr); @@ -740,8 +757,9 @@ public class LicenseServiceImpl implements LicenseService { continue; } - LicenseDO license = licenseMapper.selectBySn(serialNo); + LicenseDO license = licenseMapper.getBySnAndProjectAndCustomer(serialNo, importVO.getProjectName(), importVO.getCustomerName()); if (license == null) { + licenseDO.setDataType(1); licenseMapper.insert(licenseDO); LicenseDetailDO licenseDetailDO = new LicenseDetailDO(); licenseDetailDO.setLicenseId(licenseDO.getId()); @@ -751,7 +769,7 @@ public class LicenseServiceImpl implements LicenseService { continue; } if (!updateSupport) { - respVO.getFailures().put(serialNo, "已存在该SN的License"); + respVO.getFailures().put(serialNo, "已存在相同的客户、项目和SN"); continue; } @@ -773,9 +791,27 @@ public class LicenseServiceImpl implements LicenseService { respVO.getUpdates().add(serialNo); } + Map failures = respVO.getFailures(); + Map newMap = failures.entrySet().stream() + .collect(Collectors.toMap( + Map.Entry::getValue, + Map.Entry::getKey, + (existing, replacement) -> existing + "、" + replacement)); // 使用第一个遇到的key作为结果 + respVO.setFailureMap(newMap); + respVO.setTotal(list.size()); return respVO; } + private static LocalDateTime getCreateTime(LicenseImportExcelVO importVO) { + LocalDateTime createTime = LocalDateTime.now(); + try { + createTime = LocalDateTime.of(importVO.getApplicationTime(), LocalTime.of(0, 0, 0)); + } catch (Exception e) { + log.error("导入excel时间错误:{}", e.getMessage()); + } + return createTime; + } + private static List getNeList(String neListStr) { List neList = new ArrayList<>(); diff --git a/agt-module-license/agt-module-license-server/src/main/resources/mapper/license/LicenseMapper.xml b/agt-module-license/agt-module-license-server/src/main/resources/mapper/license/LicenseMapper.xml index f5b6cae..415d4cd 100644 --- a/agt-module-license/agt-module-license-server/src/main/resources/mapper/license/LicenseMapper.xml +++ b/agt-module-license/agt-module-license-server/src/main/resources/mapper/license/LicenseMapper.xml @@ -2,11 +2,27 @@ - + \ No newline at end of file diff --git a/agt-module-license/agt-module-license-server/src/main/resources/mapper/project/ProjectMapper.xml b/agt-module-license/agt-module-license-server/src/main/resources/mapper/project/ProjectMapper.xml index d7f5003..b400a03 100644 --- a/agt-module-license/agt-module-license-server/src/main/resources/mapper/project/ProjectMapper.xml +++ b/agt-module-license/agt-module-license-server/src/main/resources/mapper/project/ProjectMapper.xml @@ -83,4 +83,27 @@ AND l.id IS NULL + + \ No newline at end of file