From 154d8783a21419dbd4d42ec9db32a5c3dbeadc5e Mon Sep 17 00:00:00 2001 From: chenfang Date: Thu, 12 Oct 2023 09:18:55 +0800 Subject: [PATCH] =?UTF-8?q?=E7=89=A9=E5=93=81=E5=9F=BA=E7=A1=80=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=20=20=E5=AF=BC=E5=85=A5=E5=8A=9F=E8=83=BD=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../itembasic/ItembasicController.java | 19 +++-- .../itembasic/vo/ItembasicImportRespVO.java | 3 + .../workstation/WorkstationController.java | 8 +- .../service/itembasic/ItembasicService.java | 2 +- .../itembasic/ItembasicServiceImpl.java | 77 ++++++++++++------- .../workstation/WorkstationService.java | 2 +- .../workstation/WorkstationServiceImpl.java | 28 +++---- 7 files changed, 82 insertions(+), 57 deletions(-) diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/itembasic/ItembasicController.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/itembasic/ItembasicController.java index 55831b04..b023c555 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/itembasic/ItembasicController.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/itembasic/ItembasicController.java @@ -137,14 +137,11 @@ public class ItembasicController { public void importTemplate(HttpServletResponse response) throws IOException { // 手动创建导出 demo List list = Arrays.asList( - ItembasicImportExcelVo.builder().code("yunai").uom("1").isStdPack("1").enableBuy("1") - .enableMake("1").status("1").enableOutsourcing("1") - .isRecycled("1").isPhantom("1").abcClass("1").type("1").validityDays(1).available("1").build(), - ItembasicImportExcelVo.builder().code("yuanma").uom("2").isStdPack("2").enableBuy("2") - .enableMake("2").status("2").enableOutsourcing("2") - .isRecycled("2").isPhantom("2").abcClass("2").type("2").validityDays(1).available("2").build() + ItembasicImportExcelVo.builder().code("aaaa").status("ENABLE").uom("EA").isStdPack("TURE").enableBuy("TURE").enableMake("TURE").enableOutsourcing("TURE") + .isRecycled("TURE").isPhantom("TURE").abcClass("A").type("RAW").validityDays(1).available("TRUE").build(), + ItembasicImportExcelVo.builder().code("bbbb").status("DISABLE").uom("EA").isStdPack("FASLE").enableBuy("FASLE").enableMake("FASLE").enableOutsourcing("FASLE") + .isRecycled("FASLE").isPhantom("FASLE").abcClass("Z").type("RAW").validityDays(1).available("FASLE").build() ); - // 输出 ExcelUtils.write(response, "用户导入模板.xls", "用户列表", ItembasicImportExcelVo.class, list); } @@ -154,13 +151,15 @@ public class ItembasicController { @Operation(summary = "导入用户") @Parameters({ @Parameter(name = "file", description = "Excel 文件", required = true), - @Parameter(name = "updateSupport", description = "是否支持更新,默认为 false", example = "true") + @Parameter(name = "mode", description = "导入模式1更新2追加3覆盖", example = "1"), + @Parameter(name = "updatePart", description = "部分更新,默认为 true", example = "true") }) @PreAuthorize("@ss.hasPermission('wms:itembasic:import')") public CommonResult importExcel(@RequestParam("file") MultipartFile file, - @RequestParam(value = "updateSupport", required = false, defaultValue = "false") Boolean updateSupport) throws Exception { + @RequestParam(value = "mode") Integer mode, + @RequestParam(value = "updatePart", required = false, defaultValue = "false") Boolean updatePart) throws Exception { List list = ExcelUtils.read(file, ItembasicImportExcelVo.class); - return success(itembasicService.importUserList(list, updateSupport)); + return success(itembasicService.importUserList(list, mode,updatePart)); } } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/itembasic/vo/ItembasicImportRespVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/itembasic/vo/ItembasicImportRespVO.java index 6eb48790..ce69e6f5 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/itembasic/vo/ItembasicImportRespVO.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/itembasic/vo/ItembasicImportRespVO.java @@ -21,4 +21,7 @@ public class ItembasicImportRespVO { @Schema(description = "导入失败的用户集合,key 为用户名,value 为失败原因", requiredMode = Schema.RequiredMode.REQUIRED) private Map failureItembasics; + //这个map改成实体类 + private List importResult; + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/workstation/WorkstationController.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/workstation/WorkstationController.java index b012189d..0961708a 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/workstation/WorkstationController.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/workstation/WorkstationController.java @@ -115,12 +115,14 @@ public class WorkstationController { @Operation(summary = "导入用户") @Parameters({ @Parameter(name = "file", description = "Excel 文件", required = true), - @Parameter(name = "updateSupport", description = "是否支持更新,默认为 false", example = "true") + @Parameter(name = "mode", description = "导入模式1更新2追加3覆盖", example = "1"), + @Parameter(name = "updatePart", description = "部分更新,默认为 true", example = "true") }) @PreAuthorize("@ss.hasPermission('wms:workstation:import')") public CommonResult importExcel(@RequestParam("file") MultipartFile file, - @RequestParam(value = "updateSupport", required = false, defaultValue = "false") Boolean updateSupport) throws Exception { + @RequestParam(value = "mode") Integer mode, + @RequestParam(value = "updatePart", required = false, defaultValue = "false") Boolean updatePart) throws Exception { List list = ExcelUtils.read(file, WorkstationImportExcelVo.class); - return success(workstationService.importUserList(list, updateSupport)); + return success(workstationService.importUserList(list, mode,updatePart)); } } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/itembasic/ItembasicService.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/itembasic/ItembasicService.java index 287b981b..061d2e98 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/itembasic/ItembasicService.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/itembasic/ItembasicService.java @@ -76,6 +76,6 @@ public interface ItembasicService { * @param isUpdateSupport 是否支持更新 * @return 导入结果 */ - ItembasicImportRespVO importUserList(List importItembasics, boolean isUpdateSupport); + ItembasicImportRespVO importUserList(List importItembasics, Integer mode,boolean updatePart); } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/itembasic/ItembasicServiceImpl.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/itembasic/ItembasicServiceImpl.java index 93987423..de6f8bee 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/itembasic/ItembasicServiceImpl.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/itembasic/ItembasicServiceImpl.java @@ -1,6 +1,7 @@ package com.win.module.wms.service.itembasic; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.win.framework.common.exception.ServiceException; import com.win.framework.common.pojo.PageResult; import com.win.framework.datapermission.core.util.DataPermissionUtils; @@ -9,20 +10,17 @@ import com.win.module.wms.convert.itembasic.ItembasicConvert; import com.win.module.wms.dal.dataobject.itembasic.ItembasicDO; import com.win.module.wms.dal.mysql.itembasic.ItembasicMapper; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.interceptor.TransactionAspectSupport; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.Collection; -import java.util.LinkedHashMap; -import java.util.List; +import java.util.*; import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.win.module.system.enums.ErrorCodeConstants.USER_IMPORT_LIST_IS_EMPTY; -import static com.win.module.system.enums.ErrorCodeConstants.USER_USERNAME_EXISTS; import static com.win.module.wms.enums.itembasic.ErrorCodeConstants.ITEMBASIC_NOT_EXISTS; import static com.win.module.wms.enums.itembasic.ErrorCodeConstants.ITEMBASIC_NOT_RIGHT; +import static com.win.module.wms.enums.workstation.ErrorCodeConstants.CODE_EXISTS; /** * 物品基本信息 Service 实现类 @@ -49,7 +47,7 @@ public class ItembasicServiceImpl implements ItembasicService { public void updateItembasic(ItembasicUpdateReqVO updateReqVO) { // 校验存在 validateItembasicExists(updateReqVO.getId()); - codeExists(updateReqVO.getCode()); +// codeExists(updateReqVO.getCode()); statusExists(updateReqVO.getStatus()); uomExists(updateReqVO.getUom()); isStdPackExists(updateReqVO.getIsStdPack()); @@ -81,10 +79,24 @@ public class ItembasicServiceImpl implements ItembasicService { } } - private void codeExists(String code) { + private void codeExists(Long id,String code) { if (code.isEmpty()) { throw exception(ITEMBASIC_NOT_RIGHT); } + if (StrUtil.isBlank(code)) { + return; + } + ItembasicDO itembasic = itembasicMapper.selectByCode(code); + if (itembasic == null) { + return; + } + // 如果 id 为空,说明不用比较是否为相同 id 的用户 + if (id == null) { + throw exception(CODE_EXISTS); + } + if (!itembasic.getId().equals(id)) { + throw exception(CODE_EXISTS); + } } private void statusExists(String status) { @@ -179,47 +191,54 @@ public class ItembasicServiceImpl implements ItembasicService { return itembasicMapper.selectList(exportReqVO); } - @Override - @Transactional(rollbackFor = Exception.class) // 添加事务,异常则回滚所有导入 - public ItembasicImportRespVO importUserList(List importItembasics, boolean isUpdateSupport) { + public ItembasicImportRespVO importUserList(List importItembasics, Integer mode, boolean updatePart) { if (CollUtil.isEmpty(importItembasics)) { throw exception(USER_IMPORT_LIST_IS_EMPTY); } ItembasicImportRespVO respVO = ItembasicImportRespVO.builder().createItembasics(new ArrayList<>()) .updateItembasics(new ArrayList<>()).failureItembasics(new LinkedHashMap<>()).build(); - importItembasics.forEach(importItembasic -> { + importItembasics.forEach(itembasic -> { // 校验,判断是否有不符合的原因 try { - validateUserForCreateOrUpdate(importItembasic.getCode()); + if(mode == 2){ + validateUserForCreateOrUpdate(null,itembasic.getCode()); + } } catch (ServiceException ex) { - respVO.getFailureItembasics().put(importItembasic.getCode(), ex.getMessage()); + respVO.getFailureItembasics().put(itembasic.getCode(), ex.getMessage()); return; } // 判断如果不存在,在进行插入 - ItembasicDO existItembasic = itembasicMapper.selectByCode(importItembasic.getCode()); - if (existItembasic == null) { - itembasicMapper.insert(ItembasicConvert.INSTANCE.convert(importItembasic)); // 设置默认密码及空岗位编号数组 - respVO.getCreateItembasics().add(importItembasic.getCode()); - return; + ItembasicDO existItembasic = itembasicMapper.selectByCode(itembasic.getCode()); + if (existItembasic == null&& mode != 3) { + itembasicMapper.insert(ItembasicConvert.INSTANCE.convert(itembasic)); + respVO.getCreateItembasics().add(itembasic.getCode()); } - // 如果存在,判断是否允许更新 - if (!isUpdateSupport) { - respVO.getFailureItembasics().put(importItembasic.getCode(), USER_USERNAME_EXISTS.getMsg()); - return; + else if (existItembasic != null && mode != 2) {// 如果存在,判断是否允许更新 + ItembasicDO itembasicDO = ItembasicConvert.INSTANCE.convert(itembasic); + itembasicDO.setId(existItembasic.getId()); + itembasicMapper.updateById(itembasicDO); + respVO.getUpdateItembasics().add(itembasic.getCode()); } - ItembasicDO updateUser = ItembasicConvert.INSTANCE.convert(importItembasic); - updateUser.setId(existItembasic.getId()); - itembasicMapper.updateById(updateUser); - respVO.getUpdateItembasics().add(importItembasic.getCode()); }); + //错误不为空并非部分更新,手工回滚 + if(respVO.getUpdateItembasics().isEmpty() && !updatePart) { + respVO.setUpdateItembasics(new ArrayList<>()); + respVO.setCreateItembasics(new ArrayList<>()); + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + } + List importResult = new ArrayList<>(); + importResult.add("createItembasics"); + importResult.add("updateItembasics"); + importResult.add("failureItembasics"); + respVO.setImportResult(importResult); return respVO; } - private void validateUserForCreateOrUpdate(String code) { + private void validateUserForCreateOrUpdate(Long id,String code) { // 关闭数据权限,避免因为没有数据权限,查询不到数据,进而导致唯一校验不正确 DataPermissionUtils.executeIgnore(() -> { // 校验code唯一 - codeExists(code); + codeExists(id,code); }); } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/workstation/WorkstationService.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/workstation/WorkstationService.java index 6d88cd65..bc01e5b1 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/workstation/WorkstationService.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/workstation/WorkstationService.java @@ -69,5 +69,5 @@ public interface WorkstationService { */ List getWorkstationList(WorkstationExportReqVO exportReqVO); - WorkstationImportRespVO importUserList(List list, Boolean isUpdateSupport); + WorkstationImportRespVO importUserList(List list, Integer mode,Boolean updatePart); } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/workstation/WorkstationServiceImpl.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/workstation/WorkstationServiceImpl.java index 8a8cb952..1c6a572a 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/workstation/WorkstationServiceImpl.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/workstation/WorkstationServiceImpl.java @@ -11,6 +11,7 @@ import com.win.module.wms.dal.dataobject.workstation.WorkstationDO; import com.win.module.wms.dal.mysql.workstation.WorkstationMapper; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.interceptor.TransactionAspectSupport; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; @@ -90,7 +91,7 @@ public class WorkstationServiceImpl implements WorkstationService { @Override @Transactional(rollbackFor = Exception.class) // 添加事务,异常则回滚所有导入 - public WorkstationImportRespVO importUserList(List workstations, Boolean isUpdateSupport) { + public WorkstationImportRespVO importUserList(List workstations, Integer mode,Boolean updatePart) { if (CollUtil.isEmpty(workstations)) { throw exception(USER_IMPORT_LIST_IS_EMPTY); } @@ -106,22 +107,23 @@ public class WorkstationServiceImpl implements WorkstationService { } // 判断如果不存在,在进行插入 WorkstationDO existWorkstation = workstationMapper.selectByCode(workstation.getCode()); - if (existWorkstation == null) { + if (existWorkstation == null&& mode != 3) { workstationMapper.insert(WorkstationConvert.INSTANCE.convert(workstation)); respVO.getCreateWorkstations().add(workstation.getCode()); - return; } - // 如果存在,判断是否允许更新 -// if (!isUpdateSupport) { -// String put = respVO.getFailureWorkstations().put(workstation.getCode(), USER_USERNAME_EXISTS.getMsg()); -// System.out.println(put); -// return; -// } - WorkstationDO updateUser = WorkstationConvert.INSTANCE.convert(workstation); - updateUser.setId(existWorkstation.getId()); - workstationMapper.updateById(updateUser); - respVO.getUpdateWorkstations().add(workstation.getCode()); + else if (existWorkstation != null && mode != 2) {// 如果存在,判断是否允许更新 + WorkstationDO workstationDO = WorkstationConvert.INSTANCE.convert(workstation); + workstationDO.setId(existWorkstation.getId()); + workstationMapper.updateById(workstationDO); + respVO.getUpdateWorkstations().add(workstation.getCode()); + } }); + //错误不为空并非部分更新,手工回滚 + if(respVO.getUpdateWorkstations().isEmpty() && !updatePart) { + respVO.setUpdateWorkstations(new ArrayList<>()); + respVO.setCreateWorkstations(new ArrayList<>()); + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + } return respVO; }