From 1b8198a716f952b2af82c70e4526e63815ff2afd Mon Sep 17 00:00:00 2001 From: "hongxi.lian" Date: Wed, 29 Nov 2023 10:21:42 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=9C=88=E5=8F=B0=E7=AE=A1=E7=90=86?= =?UTF-8?q?=EF=BC=8C=E5=BA=93=E5=8C=BA=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../areabasic/AreabasicController.java | 19 ++-- .../areabasic/vo/AreabasicImportErrorVO.java | 63 +++++++++++ .../wms/controller/dock/DockController.java | 21 ++-- .../controller/dock/vo/DockImportErrorVO.java | 79 +++++++++++++ .../convert/areabasic/AreabasicConvert.java | 4 + .../module/wms/convert/dock/DockConvert.java | 4 + .../service/areabasic/AreabasicService.java | 2 +- .../areabasic/AreabasicServiceImpl.java | 102 +++++++++-------- .../module/wms/service/dock/DockService.java | 2 +- .../wms/service/dock/DockServiceImpl.java | 107 ++++++++++-------- 10 files changed, 282 insertions(+), 121 deletions(-) create mode 100644 win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/areabasic/vo/AreabasicImportErrorVO.java create mode 100644 win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/dock/vo/DockImportErrorVO.java diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/areabasic/AreabasicController.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/areabasic/AreabasicController.java index 3a77c42a..eb9e4d61 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/areabasic/AreabasicController.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/areabasic/AreabasicController.java @@ -9,13 +9,8 @@ import com.win.framework.operatelog.core.annotations.OperateLog; import com.win.module.system.api.user.AdminUserApi; import com.win.module.system.api.user.dto.AdminUserRespDTO; import com.win.module.wms.controller.areabasic.vo.*; -import com.win.module.wms.controller.dock.vo.DockRespVO; -import com.win.module.wms.controller.itembasic.vo.ItembasicExcelVO; import com.win.module.wms.convert.areabasic.AreabasicConvert; -import com.win.module.wms.convert.dock.DockConvert; -import com.win.module.wms.convert.itembasic.ItembasicConvert; import com.win.module.wms.dal.dataobject.areabasic.AreabasicDO; -import com.win.module.wms.dal.dataobject.itembasic.ItembasicDO; import com.win.module.wms.enums.DictTypeConstants; import com.win.module.wms.service.areabasic.AreabasicService; import io.swagger.v3.oas.annotations.Operation; @@ -174,16 +169,18 @@ public class AreabasicController { @Parameter(name = "updatePart", description = "部分更新,默认为 true", example = "true") }) @PreAuthorize("@ss.hasPermission('wms:areabasic:import')") - public void importExcel(HttpServletResponse response, - @RequestParam("file") MultipartFile file, - @RequestParam(value = "mode") Integer mode, - @RequestParam(value = "updatePart", required = false, defaultValue = "false") Boolean updatePart) throws Exception { + public CommonResult> importExcel(HttpServletResponse response, + @RequestParam("file") MultipartFile file, + @RequestParam(value = "mode") Integer mode, + @RequestParam(value = "updatePart", required = false, defaultValue = "false") Boolean updatePart) throws Exception { List list = ExcelUtils.read(file, AreabasicImportExcelVo.class); - List errorList = areabasicService.importAreabasicList(list, mode, updatePart); + List errorList = areabasicService.importAreabasicList(list, mode, updatePart); Map returnMap = new HashMap<>(); returnMap.put("errorCount", errorList.size()); if(!errorList.isEmpty()) { String url = ExcelUtils.writeLocalFile("库区导入错误数据" + LocalDateTime.now().toEpochSecond(ZoneOffset.of("+8")) + ".xls", "错误列表", errorList); returnMap.put("errorFile", url); - }} + } + return success(returnMap); + } } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/areabasic/vo/AreabasicImportErrorVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/areabasic/vo/AreabasicImportErrorVO.java new file mode 100644 index 00000000..4a399ffc --- /dev/null +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/areabasic/vo/AreabasicImportErrorVO.java @@ -0,0 +1,63 @@ +package com.win.module.wms.controller.areabasic.vo; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.win.framework.excel.core.annotations.DictFormat; +import com.win.framework.excel.core.convert.DictConvert; +import com.win.module.wms.enums.DictTypeConstants; +import lombok.Builder; +import lombok.Data; +import lombok.ToString; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +@Data +@Builder +@ToString(callSuper = true) +public class AreabasicImportErrorVO { + @ExcelProperty("代码") + private String code; + + @ExcelProperty("名称") + private String name; + + @ExcelProperty("描述") + private String description; + + @ExcelProperty("仓库代码") + private String warehouseCode; + + @ExcelProperty(value = "类型", converter = DictConvert.class) + @DictFormat(DictTypeConstants.WAREHOUSE_TYPE) + private String type; + + @ExcelProperty(value = "是否是功能区", converter = DictConvert.class) + @DictFormat(DictTypeConstants.TRUE_FALSE) + private String isFunctional; + + @ExcelProperty(value = "是否可用", converter = DictConvert.class) + @DictFormat(DictTypeConstants.TRUE_FALSE) + private String available; + + @ExcelProperty("生效时间") + @ColumnWidth(value = 16) + private LocalDateTime activeTime; + + @ExcelProperty("失效时间") + @ColumnWidth(value = 16) + private LocalDateTime expireTime; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty(value = "导入状态", index = 0) + private String importStatus; + + @ExcelProperty(value = "导入说明", index = 1) + private String importRemark; + + + + +} diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/dock/DockController.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/dock/DockController.java index a60a522d..27f79b04 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/dock/DockController.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/dock/DockController.java @@ -8,13 +8,8 @@ import com.win.framework.operatelog.core.annotations.OperateLog; import com.win.module.system.api.user.AdminUserApi; import com.win.module.system.api.user.dto.AdminUserRespDTO; import com.win.module.wms.controller.dock.vo.*; -import com.win.module.wms.controller.itembasic.vo.ItembasicExcelVO; -import com.win.module.wms.controller.warehouse.vo.WarehouseRespVO; import com.win.module.wms.convert.dock.DockConvert; -import com.win.module.wms.convert.itembasic.ItembasicConvert; -import com.win.module.wms.convert.warehouse.WarehouseConvert; import com.win.module.wms.dal.dataobject.dock.DockDO; -import com.win.module.wms.dal.dataobject.itembasic.ItembasicDO; import com.win.module.wms.dal.mysql.dock.DockMapper; import com.win.module.wms.enums.DictTypeConstants; import com.win.module.wms.service.dock.DockService; @@ -165,7 +160,7 @@ public class DockController { String[] type = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.DOCK_TYPE); mapDropDown.put(5, type); String[] available = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.TRUE_FALSE); - mapDropDown.put(10, available);; + mapDropDown.put(10, available); // 输出 ExcelUtils.write(response, "月台导入模板.xls", "月台列表", DockImportExcelVO.class, list,mapDropDown); } @@ -178,18 +173,20 @@ public class DockController { @Parameter(name = "updatePart", description = "部分更新,默认为 true", example = "true") }) @PreAuthorize("@ss.hasPermission('wms:dock:import')") - public void importExcel(HttpServletResponse response, - @RequestParam("file") MultipartFile file, - @RequestParam(value = "mode") Integer mode, - @RequestParam(value = "updatePart", required = false, defaultValue = "false") Boolean updatePart) throws Exception { + public CommonResult> importExcel(HttpServletResponse response, + @RequestParam("file") MultipartFile file, + @RequestParam(value = "mode") Integer mode, + @RequestParam(value = "updatePart", required = false, defaultValue = "false") Boolean updatePart) throws Exception { List list = ExcelUtils.read(file, DockImportExcelVO.class); - List errorList = dockService.dockimportDockList(list, mode, updatePart); + List errorList = dockService.dockimportDockList(list, mode, updatePart); Map returnMap = new HashMap<>(); returnMap.put("errorCount", errorList.size()); if(!errorList.isEmpty()) { String url = ExcelUtils.writeLocalFile("月台导入错误数据" + LocalDateTime.now().toEpochSecond(ZoneOffset.of("+8")) + ".xls", "错误列表", errorList); returnMap.put("errorFile", url); - }} + } + return success(returnMap); + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/dock/vo/DockImportErrorVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/dock/vo/DockImportErrorVO.java new file mode 100644 index 00000000..aaa0e949 --- /dev/null +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/dock/vo/DockImportErrorVO.java @@ -0,0 +1,79 @@ +package com.win.module.wms.controller.dock.vo; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.win.framework.excel.core.annotations.DictFormat; +import com.win.framework.excel.core.convert.DictConvert; +import com.win.module.wms.enums.DictTypeConstants; +import lombok.Builder; +import lombok.Data; +import lombok.ToString; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +@Data +@Builder +@ToString(callSuper = true) +public class DockImportErrorVO { + + @ExcelProperty("代码") + private String code; + + @ExcelProperty("名称") + private String name; + + @ExcelProperty("描述") + private String description; + + @ExcelProperty("城市") + private String city; + + @ExcelProperty("地址") + private String address; + + @ExcelProperty(value = "类型", converter = DictConvert.class) + @DictFormat("dock_type") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 + private String type; + + @ExcelProperty("仓库代码") + private String warehouseCode; + + @ExcelProperty("默认库位代码") + private String defaultLocationCode; + + @ExcelProperty("联系人姓名") + private String contactPerson; + + @ExcelProperty("联系人电话") + private String contactPhone; + + @ExcelProperty(value = "是否可用", converter = DictConvert.class) + @DictFormat("true_false") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 + private String available; + + @ExcelProperty("生效时间") + @ColumnWidth(value = 16) + private LocalDateTime activeTime; + + @ExcelProperty("失效时间") + @ColumnWidth(value = 16) + private LocalDateTime expireTime; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty(value = "导入状态", index = 0) + private String importStatus; + + @ExcelProperty(value = "导入说明", index = 1) + private String importRemark; + + + + + + + + +} diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/areabasic/AreabasicConvert.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/areabasic/AreabasicConvert.java index 5d4c1a38..8dcb7047 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/areabasic/AreabasicConvert.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/areabasic/AreabasicConvert.java @@ -2,6 +2,8 @@ package com.win.module.wms.convert.areabasic; import com.win.framework.common.pojo.PageResult; import com.win.module.wms.controller.areabasic.vo.*; +import com.win.module.wms.controller.bom.vo.BomImportErrorVO; +import com.win.module.wms.controller.bom.vo.BomImportExcelVo; import com.win.module.wms.dal.dataobject.areabasic.AreabasicDO; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; @@ -32,4 +34,6 @@ public interface AreabasicConvert { List convertList02(List list); + AreabasicImportErrorVO convert2(AreabasicDO bean); + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/dock/DockConvert.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/dock/DockConvert.java index 6bbc906e..6cc8f6e6 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/dock/DockConvert.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/dock/DockConvert.java @@ -1,6 +1,8 @@ package com.win.module.wms.convert.dock; import com.win.framework.common.pojo.PageResult; +import com.win.module.wms.controller.bom.vo.BomImportErrorVO; +import com.win.module.wms.controller.bom.vo.BomImportExcelVo; import com.win.module.wms.controller.dock.vo.*; import com.win.module.wms.dal.dataobject.dock.DockDO; import org.mapstruct.Mapper; @@ -31,4 +33,6 @@ public interface DockConvert { List convertList02(List list); + DockImportErrorVO convert2(DockDO bean); + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/areabasic/AreabasicService.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/areabasic/AreabasicService.java index 6b236fc3..08927847 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/areabasic/AreabasicService.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/areabasic/AreabasicService.java @@ -76,5 +76,5 @@ public interface AreabasicService { */ List getAreabasicList(AreabasicExportReqVO exportReqVO); - List importAreabasicList(List areabasics, Integer mode, Boolean updatePart); + List importAreabasicList(List areabasics, Integer mode, Boolean updatePart); } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/areabasic/AreabasicServiceImpl.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/areabasic/AreabasicServiceImpl.java index 6ad56827..1c77c428 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/areabasic/AreabasicServiceImpl.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/areabasic/AreabasicServiceImpl.java @@ -8,7 +8,9 @@ import com.win.framework.common.pojo.CustomConditions; import com.win.framework.common.pojo.PageResult; import com.win.framework.datapermission.core.util.DataPermissionUtils; import com.win.module.wms.controller.areabasic.vo.*; +import com.win.module.wms.controller.bom.vo.BomImportErrorVO; import com.win.module.wms.convert.areabasic.AreabasicConvert; +import com.win.module.wms.convert.bom.BomConvert; import com.win.module.wms.dal.dataobject.areabasic.AreabasicDO; import com.win.module.wms.dal.mysql.areabasic.AreabasicMapper; import org.springframework.stereotype.Service; @@ -85,63 +87,71 @@ public class AreabasicServiceImpl implements AreabasicService { return areabasicMapper.selectList(exportReqVO); } + + public String validateAreabasic(AreabasicDO areabasic){ + StringBuilder message = new StringBuilder(); + try { + validateAreabasicExists(null); + } catch (ServiceException ex) { + message.append(ex.getMessage()).append(","); + } + try { + validateCodeExists(null,areabasic.getCode()); + } catch (ServiceException ex) { + message.append(ex.getMessage()).append(","); + } + try { + validateWarehouseCodeExists(areabasic.getWarehouseCode()); + } catch (ServiceException ex) { + message.append(ex.getMessage()).append(","); + } + try { + validateIsFunctionalExists(areabasic.getIsFunctional()); + } catch (ServiceException ex) { + message.append(ex.getMessage()).append(","); + } + try { + validateAvailableExists(areabasic.getAvailable()); + } catch (ServiceException ex) { + message.append(ex.getMessage()).append(","); + } + return message.toString(); + } + + + @Override - public List importAreabasicList(List areabasics, Integer mode, Boolean updatePart) { + public List importAreabasicList(List areabasics, Integer mode, Boolean updatePart) { if (CollUtil.isEmpty(areabasics)) { throw exception(AREABASIC_IMPORT_LIST_IS_EMPTY); } - List errorList = new ArrayList<>(); + List errorList = new ArrayList<>(); areabasics.forEach(areabasic -> { - String massage = ""; - // 校验,判断是否有不符合的原因 - if(mode == 2){ - try { - validateAreabasicExists(null); - } catch (ServiceException ex) { - massage += ex.getMessage() + ","; - } - try { - validateCodeExists(null,areabasic.getCode()); - } catch (ServiceException ex) { - massage += ex.getMessage() + ","; - } - try { - validateWarehouseCodeExists(areabasic.getWarehouseCode()); - } catch (ServiceException ex) { - massage += ex.getMessage() + ","; - } - try { - validateIsFunctionalExists(areabasic.getIsFunctional()); - } catch (ServiceException ex) { - massage += ex.getMessage() + ","; + AreabasicDO areabasicDO = AreabasicConvert.INSTANCE.convert(areabasic); + String massage = this.validateAreabasic(areabasicDO); + boolean flag = true; + if(!massage.isEmpty()){ + AreabasicImportErrorVO importErrorVO = AreabasicConvert.INSTANCE.convert2(areabasicDO); + importErrorVO.setImportStatus("失败"); + importErrorVO.setImportRemark(massage.substring(0, massage.length() - 1)); + errorList.add(importErrorVO); + flag = false; + } + if(flag){ + AreabasicDO existAccountcalendar = areabasicMapper.selectByCode(areabasic.getCode()); + if (existAccountcalendar == null&& mode != 3) { + areabasicMapper.insert(areabasicDO); } - try { - validateAvailableExists(areabasic.getAvailable()); - } catch (ServiceException ex) { - massage += ex.getMessage() + ","; + else if (existAccountcalendar != null && mode != 2) {// 如果存在,判断是否允许更新 + areabasicDO.setId(existAccountcalendar.getId()); + areabasicMapper.updateById(areabasicDO); } } - if(StrUtil.isNotEmpty(massage)){ - massage.substring(0,massage.length()-1); - errorList.add(areabasic); - } - // 判断如果不存在,在进行插入 - AreabasicDO existAccountcalendar = areabasicMapper.selectByCode(areabasic.getCode()); - if (existAccountcalendar == null&& mode != 3) { - areabasicMapper.insert(AreabasicConvert.INSTANCE.convert(areabasic)); - } - else if (existAccountcalendar != null && mode != 2) {// 如果存在,判断是否允许更新 - AreabasicDO accountcalendarDO = AreabasicConvert.INSTANCE.convert(areabasic); - accountcalendarDO.setId(existAccountcalendar.getId()); - areabasicMapper.updateById(accountcalendarDO); - } }); - //错误不为空并非部分更新,手工回滚 - if(!errorList.isEmpty() && !updatePart) { - TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); - } return errorList; } + + private void validateAreabasicForCreateOrUpdate(Long id,String code,String warehouseCode,String isFunctional,String available) { // 关闭数据权限,避免因为没有数据权限,查询不到数据,进而导致唯一校验不正确 DataPermissionUtils.executeIgnore(() -> { diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/dock/DockService.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/dock/DockService.java index 64379d5b..0949d066 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/dock/DockService.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/dock/DockService.java @@ -79,7 +79,7 @@ public interface DockService { */ List getDockList(DockExportReqVO exportReqVO); - List dockimportDockList(List docks, Integer mode, Boolean updatePart); + List dockimportDockList(List docks, Integer mode, Boolean updatePart); /** * 校验(客户地点 月台)收货口有效,状态正确 diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/dock/DockServiceImpl.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/dock/DockServiceImpl.java index 1d93e7b9..023e289e 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/dock/DockServiceImpl.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/dock/DockServiceImpl.java @@ -9,7 +9,9 @@ import com.win.framework.common.pojo.CustomConditions; import com.win.framework.common.pojo.PageResult; import com.win.framework.datapermission.core.util.DataPermissionUtils; import com.win.module.wms.controller.dock.vo.*; +import com.win.module.wms.convert.bom.BomConvert; import com.win.module.wms.convert.dock.DockConvert; +import com.win.module.wms.dal.dataobject.bom.BomDO; import com.win.module.wms.dal.dataobject.dock.DockDO; import com.win.module.wms.dal.mysql.dock.DockMapper; import org.springframework.stereotype.Service; @@ -89,71 +91,76 @@ public class DockServiceImpl implements DockService { return dockMapper.selectList(exportReqVO); } + public String valitedock(DockDO dock){ + StringBuilder message = new StringBuilder(); + try { + validateDockExists(null); + } catch (ServiceException ex) { + message.append(ex.getMessage()).append(","); + } + try { + validateCodeExists(null,dock.getCode()); + } catch (ServiceException ex) { + message.append(ex.getMessage()).append(","); + } + try { + validateTypeExists(dock.getType()); + } catch (ServiceException ex) { + message.append(ex.getMessage()).append(","); + } + try { + validateWareHouseCodeExists(dock.getWarehouseCode()); + } catch (ServiceException ex) { + message.append(ex.getMessage()).append(","); + } + try { + validateDefaultLocationCodeExists(dock.getDefaultLocationCode()); + } catch (ServiceException ex) { + message.append(ex.getMessage()).append(","); + } + try { + validateAvailableExists(dock.getAvailable()); + } catch (ServiceException ex) { + message.append(ex.getMessage()).append(","); + } + return message.toString(); + } + @Override - public List dockimportDockList(List docks, Integer mode, Boolean updatePart) { + public List dockimportDockList(List docks, Integer mode, Boolean updatePart) { if (CollUtil.isEmpty(docks)) { throw exception(DOCK_IMPORT_LIST_IS_EMPTY); } - List errorList = new ArrayList<>(); + List errorList = new ArrayList<>(); docks.forEach(dock -> { - String massage = ""; - // 校验,判断是否有不符合的原因 - if(mode != null) { - try { - validateDockExists(null); - } catch (ServiceException ex) { - massage += ex.getMessage() + ","; - } - try { - validateCodeExists(null,dock.getCode()); - } catch (ServiceException ex) { - massage += ex.getMessage() + ","; - } - try { - validateTypeExists(dock.getType()); - } catch (ServiceException ex) { - massage += ex.getMessage() + ","; - } - try { - validateWareHouseCodeExists(dock.getWarehouseCode()); - } catch (ServiceException ex) { - massage += ex.getMessage() + ","; - } - try { - validateDefaultLocationCodeExists(dock.getDefaultLocationCode()); - } catch (ServiceException ex) { - massage += ex.getMessage() + ","; - } - try { - validateAvailableExists(dock.getAvailable()); - } catch (ServiceException ex) { - massage += ex.getMessage() + ","; - } + DockDO dockDO = DockConvert.INSTANCE.convert(dock); + String message = this.valitedock(dockDO); + boolean flag = true; + if(!message.isEmpty()){ + DockImportErrorVO importErrorVO = DockConvert.INSTANCE.convert2(dockDO); + importErrorVO.setImportStatus("失败"); + importErrorVO.setImportRemark(message.substring(0, message.length() - 1)); + errorList.add(importErrorVO); + flag = false; } - if(StrUtil.isNotEmpty(massage)){ - massage.substring(0,massage.length()-1); - errorList.add(dock); - } - if(errorList == null){ - DockDO existConfigurationSetting = null; - if (existConfigurationSetting == null&& mode != 3) { + if(flag){ + // 判断如果不存在,在进行插入 + DockDO existAccountcalendar = dockMapper.selectByItemCode(dockDO.getCode()); + if (existAccountcalendar == null&& mode != 3) { dockMapper.insert(DockConvert.INSTANCE.convert(dock)); } - else if (existConfigurationSetting != null && mode != 2) {// 如果存在,判断是否允许更新 - DockDO dockDO = DockConvert.INSTANCE.convert(dock); - dockDO.setId(existConfigurationSetting.getId()); + else if (existAccountcalendar != null && mode != 2) { + // 如果存在,判断是否允许更新 + dockDO.setId(existAccountcalendar.getId()); dockMapper.updateById(dockDO); } } - // 判断如果不存在,在进行插入 }); - //错误不为空并非部分更新,手工回滚 - if(!errorList.isEmpty() && !updatePart) { - TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); - } return errorList; } + + private void validateDockForCreateOrUpdate(Long id, String code,String type, String warehouseCode, String defaultLocationCode,String available) { // 关闭数据权限,避免因为没有数据权限,查询不到数据,进而导致唯一校验不正确 From 03fa2c0c36f58c9cbd2869bad356e60848f5e26d Mon Sep 17 00:00:00 2001 From: liuchen864 <23082234@qq.com> Date: Wed, 29 Nov 2023 10:28:06 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=A3=80=E9=AA=8C=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E6=89=A7=E8=A1=8C=E4=BF=AE=E6=94=B9=E5=BA=93=E5=AD=98=E4=BA=8B?= =?UTF-8?q?=E5=8A=A1=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../vo/InspectJobDetailUpdateReqVO.java | 26 ++-------- .../wms/dal/mysql/balance/BalanceMapper.java | 13 +++++ .../inspectJob/InspectJobMainServiceImpl.java | 52 +++++++++++++------ .../InspectRequestMainServiceImpl.java | 1 - ...PurchasereceiptRequestMainServiceImpl.java | 37 ++++++------- .../PurchasereturnRequestMainServiceImpl.java | 14 +++-- 6 files changed, 79 insertions(+), 64 deletions(-) diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/inspectJob/vo/InspectJobDetailUpdateReqVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/inspectJob/vo/InspectJobDetailUpdateReqVO.java index a6bcc3cd..4e13d0e4 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/inspectJob/vo/InspectJobDetailUpdateReqVO.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/inspectJob/vo/InspectJobDetailUpdateReqVO.java @@ -1,14 +1,12 @@ package com.win.module.wms.controller.inspectJob.vo; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import org.springframework.format.annotation.DateTimeFormat; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; import javax.validation.constraints.NotNull; import java.math.BigDecimal; -import java.time.LocalDateTime; - -import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; @Schema(description = "管理后台 - 检验任务子更新 Request VO") @Data @@ -44,22 +42,4 @@ public class InspectJobDetailUpdateReqVO extends InspectJobDetailBaseVO { @NotNull(message = "到库存状态不能为空") private String toInventoryStatus; - @Schema(description = "单价") - private BigDecimal singlePrice; - - @Schema(description = "金额") - private BigDecimal amount; - - @Schema(description = "到货日期") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private LocalDateTime arriveDate; - - @Schema(description = "生产日期") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private LocalDateTime produceDate; - - @Schema(description = "失效日期") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private LocalDateTime expireDate; - } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/balance/BalanceMapper.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/balance/BalanceMapper.java index 565354fb..8b1de205 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/balance/BalanceMapper.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/balance/BalanceMapper.java @@ -77,6 +77,19 @@ public interface BalanceMapper extends BaseMapperX { return result > 0; } + /** + * 更新库存余额数量,出库qty是负数 + */ + default BalanceDO getBalanceQty(String packingNumber, String itemCode, String batch, String inventoryStatus, String locationCode) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("packing_number", packingNumber); + queryWrapper.eq("item_code", itemCode); + queryWrapper.eq("batch", batch); + queryWrapper.eq("inventory_status", inventoryStatus); + queryWrapper.eq("location_code", locationCode); + return selectOne(queryWrapper); + } + default PageResult selectPage(BalancePageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX() .eqIfPresent(BalanceDO::getPackingNumber, reqVO.getPackingNumber()) diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/inspectJob/InspectJobMainServiceImpl.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/inspectJob/InspectJobMainServiceImpl.java index 85a0b0e6..894c0669 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/inspectJob/InspectJobMainServiceImpl.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/inspectJob/InspectJobMainServiceImpl.java @@ -12,12 +12,14 @@ import com.win.module.system.api.user.dto.AdminUserRespDTO; import com.win.module.system.enums.serialNumber.RuleCodeEnum; import com.win.module.wms.controller.inspectJob.vo.*; import com.win.module.wms.controller.transaction.vo.TransactionCreateReqVO; +import com.win.module.wms.dal.dataobject.balance.BalanceDO; import com.win.module.wms.dal.dataobject.businesstype.BusinesstypeDO; import com.win.module.wms.dal.dataobject.inspectJob.InspectJobMainDO; import com.win.module.wms.dal.dataobject.inspectRecord.InspectRecordDetailDO; import com.win.module.wms.dal.dataobject.inspectRecord.InspectRecordMainDO; import com.win.module.wms.dal.dataobject.inspectRequest.InspectRequestMainDO; import com.win.module.wms.dal.dataobject.transactiontype.TransactiontypeDO; +import com.win.module.wms.dal.mysql.balance.BalanceMapper; import com.win.module.wms.dal.mysql.inspectJob.InspectJobDetailMapper; import com.win.module.wms.dal.mysql.inspectJob.InspectJobMainMapper; import com.win.module.wms.dal.mysql.inspectRecord.InspectRecordDetailMapper; @@ -77,6 +79,8 @@ public class InspectJobMainServiceImpl implements InspectJobMainService { private TransactionService transactionService; @Resource private ExpectinService expectinService; + @Resource + private BalanceMapper balanceMapper; @Override public InspectJobMainDO getInspectJobMain(Long id) { @@ -219,6 +223,8 @@ public class InspectJobMainServiceImpl implements InspectJobMainService { inspectRecordDetailDO.setUpdater(null); inspectRecordDetailDO.setUpdateTime(null); inspectRecordDetailDOList.add(inspectRecordDetailDO); + //查询库存余额 + BalanceDO balanceDO = balanceMapper.getBalanceQty(inspectJobDetailUpdateReqVO.getPackingNumber(), inspectJobMainUpdateReqVO.getItemCode(), inspectJobMainUpdateReqVO.getBatch(), inspectJobDetailUpdateReqVO.getInventoryStatus(), inspectJobDetailUpdateReqVO.getFromLocationCode()); //添加库存事务入list TransactionCreateReqVO transactionCreateReqVOIn = new TransactionCreateReqVO(); BeanUtils.copyProperties(inspectRecordDetailDO, transactionCreateReqVOIn); @@ -226,21 +232,36 @@ public class InspectJobMainServiceImpl implements InspectJobMainService { BusinesstypeDO businesstypeDO = jobUtils.selectDocumentSettingFromBusinessType("InspectJob"); transactionCreateReqVOIn.setBusinessType(businesstypeDO.getCode()); TransactiontypeDO transactiontypeDOIn = jobUtils.selectDocumentFromTransactionType(businesstypeDO.getInTransactionType()); - transactionCreateReqVOIn.setInventoryAction(transactiontypeDOIn.getInventoryAction()); transactionCreateReqVOIn.setTransactionType(transactiontypeDOIn.getCode()); transactionCreateReqVOIn.setRecordNumber(number); - transactionCreateReqVOIn.setQty(inspectJobDetailUpdateReqVO.getGoodQty()); transactionCreateReqVOIn.setBatch(inspectRecordMainDO.getBatch()); transactionCreateReqVOIn.setWorker(String.valueOf(userApi.getUser(getLoginUserId()).getId())); transactionCreateReqVOIn.setInventoryStatus(inspectJobDetailUpdateReqVO.getToInventoryStatus()); - transactionCreateReqVOIn.setSinglePrice(inspectJobDetailUpdateReqVO.getSinglePrice()); - transactionCreateReqVOIn.setAmount(inspectJobDetailUpdateReqVO.getAmount()); - transactionCreateReqVOIn.setArriveDate(inspectJobDetailUpdateReqVO.getArriveDate()); - transactionCreateReqVOIn.setProduceDate(inspectJobDetailUpdateReqVO.getProduceDate()); - transactionCreateReqVOIn.setExpireDate(inspectJobDetailUpdateReqVO.getExpireDate()); + transactionCreateReqVOIn.setSinglePrice(balanceDO.getSinglePrice()); + transactionCreateReqVOIn.setAmount(balanceDO.getAmount()); + transactionCreateReqVOIn.setArriveDate(balanceDO.getArriveDate()); + transactionCreateReqVOIn.setProduceDate(balanceDO.getProduceDate()); + transactionCreateReqVOIn.setExpireDate(balanceDO.getExpireDate()); transactionCreateReqVOIn.setId(null); - //待确定库存事务信息 - transactionCreateReqVOList.add(transactionCreateReqVOIn); + if(inspectJobDetailUpdateReqVO.getGoodQty() != null && inspectJobDetailUpdateReqVO.getGoodQty().compareTo(BigDecimal.ZERO) > 0) { + TransactionCreateReqVO transactionCreateReqVO = new TransactionCreateReqVO(); + BeanUtils.copyProperties(transactionCreateReqVOIn, transactionCreateReqVO); + transactionCreateReqVO.setInventoryAction("OK"); + transactionCreateReqVO.setQty(inspectJobDetailUpdateReqVO.getGoodQty()); + transactionCreateReqVOList.add(transactionCreateReqVO); + } else if (inspectJobDetailUpdateReqVO.getCrackQty() != null && inspectJobDetailUpdateReqVO.getCrackQty().compareTo(BigDecimal.ZERO) > 0) { + TransactionCreateReqVO transactionCreateReqVO = new TransactionCreateReqVO(); + BeanUtils.copyProperties(transactionCreateReqVOIn, transactionCreateReqVO); + transactionCreateReqVO.setInventoryAction("SCRAP"); + transactionCreateReqVO.setQty(inspectJobDetailUpdateReqVO.getCrackQty()); + transactionCreateReqVOList.add(transactionCreateReqVO); + } else if (inspectJobDetailUpdateReqVO.getFailedQty() != null && inspectJobDetailUpdateReqVO.getFailedQty().compareTo(BigDecimal.ZERO) > 0) { + TransactionCreateReqVO transactionCreateReqVO = new TransactionCreateReqVO(); + BeanUtils.copyProperties(transactionCreateReqVOIn, transactionCreateReqVO); + transactionCreateReqVO.setInventoryAction("NOK"); + transactionCreateReqVO.setQty(inspectJobDetailUpdateReqVO.getFailedQty()); + transactionCreateReqVOList.add(transactionCreateReqVO); + } //添加库存事务出list TransactionCreateReqVO transactionCreateReqVOOut = new TransactionCreateReqVO(); BeanUtils.copyProperties(inspectRecordDetailDO, transactionCreateReqVOOut); @@ -252,13 +273,14 @@ public class InspectJobMainServiceImpl implements InspectJobMainService { transactionCreateReqVOOut.setBatch(inspectRecordMainDO.getBatch()); transactionCreateReqVOOut.setWorker(String.valueOf(userApi.getUser(getLoginUserId()).getId())); transactionCreateReqVOOut.setRecordNumber(number); - transactionCreateReqVOOut.setQty(inspectJobDetailUpdateReqVO.getGoodQty()); + //出库数量为子表数量,不管合格不合格都要出掉 + transactionCreateReqVOIn.setQty(inspectJobDetailUpdateReqVO.getQty()); transactionCreateReqVOOut.setInventoryStatus(inspectJobDetailUpdateReqVO.getInventoryStatus()); - transactionCreateReqVOOut.setSinglePrice(inspectJobDetailUpdateReqVO.getSinglePrice()); - transactionCreateReqVOOut.setAmount(inspectJobDetailUpdateReqVO.getAmount()); - transactionCreateReqVOOut.setArriveDate(inspectJobDetailUpdateReqVO.getArriveDate()); - transactionCreateReqVOOut.setProduceDate(inspectJobDetailUpdateReqVO.getProduceDate()); - transactionCreateReqVOOut.setExpireDate(inspectJobDetailUpdateReqVO.getExpireDate()); + transactionCreateReqVOOut.setSinglePrice(balanceDO.getSinglePrice()); + transactionCreateReqVOOut.setAmount(balanceDO.getAmount()); + transactionCreateReqVOOut.setArriveDate(balanceDO.getArriveDate()); + transactionCreateReqVOOut.setProduceDate(balanceDO.getProduceDate()); + transactionCreateReqVOOut.setExpireDate(balanceDO.getExpireDate()); transactionCreateReqVOOut.setId(null); //待确定库存事务信息 transactionCreateReqVOList.add(transactionCreateReqVOOut); diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/inspectRequest/InspectRequestMainServiceImpl.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/inspectRequest/InspectRequestMainServiceImpl.java index f0ba4444..f2ad74d9 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/inspectRequest/InspectRequestMainServiceImpl.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/inspectRequest/InspectRequestMainServiceImpl.java @@ -365,7 +365,6 @@ public class InspectRequestMainServiceImpl implements InspectRequestMainService } return; } - InspectRequestDetailDO inspectRequestDetailDOTmp = detailDOList.get(0); List expectoutCreateReqVOList = new ArrayList<>(); InspectJobMainDO inspectJobMainDO = InspectJobMainConvert.INSTANCE.convert(mainDO); inspectJobMainDO.setStatus(JobStatusEnum.PENDING.getCode()); diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/purchasereceiptRequest/PurchasereceiptRequestMainServiceImpl.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/purchasereceiptRequest/PurchasereceiptRequestMainServiceImpl.java index c2ab378e..4316894b 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/purchasereceiptRequest/PurchasereceiptRequestMainServiceImpl.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/purchasereceiptRequest/PurchasereceiptRequestMainServiceImpl.java @@ -453,16 +453,14 @@ public class PurchasereceiptRequestMainServiceImpl implements PurchasereceiptReq } for(PurchasereceiptRequestDetailDO detailDO : detailDOList) { List list; - //从map取出list - switch (key) { - case "item": - list = listMap.get(detailDO.getItemCode()); - case "container": - list = listMap.get(detailDO.getContainerNumber()); - case "location": - list = listMap.get(detailDO.getFromLocationCode()); - default: - list = listMap.get(key); + if (key.equals("item")) {//按零件拆分 + list = listMap.get(detailDO.getItemCode()); + } else if (key.equals("container")) {//按器具拆分 + list = listMap.get(detailDO.getContainerNumber()); + } else if (key.equals("location")) {//按库位拆分 + list = listMap.get(detailDO.getDefaultToLocationCode()); + } else { + list = listMap.get(key); } if(list == null) { list = new ArrayList<>(); @@ -470,25 +468,24 @@ public class PurchasereceiptRequestMainServiceImpl implements PurchasereceiptReq //向list增加数据 list.add(detailDO); //放回map - switch (key) { - case "item": - listMap.put(detailDO.getItemCode(), list); - case "container": - listMap.put(detailDO.getContainerNumber(), list); - case "location": - listMap.put(detailDO.getFromLocationCode(), list); - default: - listMap.put(key, list); + if (key.equals("item")) {//按零件拆分 + listMap.put(detailDO.getItemCode(), list); + } else if (key.equals("container")) {//按器具拆分 + listMap.put(detailDO.getContainerNumber(), list); + } else if (key.equals("location")) {//按库位拆分 + listMap.put(detailDO.getDefaultToLocationCode(), list); + } else { + listMap.put(key, list); } } JobsettingDO jobsettingDO = jobsettingService.selectJobsettingExist("PurchaseReceiptJob"); //组装任务数据 for(String mapKey : listMap.keySet()) { List purchasereceiptRequestDetailDOList = listMap.get(mapKey); + List subList = new ArrayList<>(); for(int i = 0; i < purchasereceiptRequestDetailDOList.size(); i++) { //PurchasereceiptJobMainCreateReqVO不包含id、创建人等信息 PurchasereceiptJobMainCreateReqVO purchasereceiptJobMainCreateReqVO; - List subList = new ArrayList<>(); if(i % count == 0) { purchasereceiptJobMainCreateReqVO = PurchasereceiptJobMainConvert.INSTANCE.convert(mainDO); purchasereceiptJobMainCreateReqVO.setRequestNumber(mainDO.getNumber()); diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/purchasereturnRequest/PurchasereturnRequestMainServiceImpl.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/purchasereturnRequest/PurchasereturnRequestMainServiceImpl.java index 5d2485f9..57b86eda 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/purchasereturnRequest/PurchasereturnRequestMainServiceImpl.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/purchasereturnRequest/PurchasereturnRequestMainServiceImpl.java @@ -110,12 +110,19 @@ public class PurchasereturnRequestMainServiceImpl implements PurchasereturnReque @Override public Long createPurchasereturnRequestMain(PurchasereturnRequestMainCreateReqVO createReqVO) { - // 插入 PurchasereturnRequestMainDO purchasereturnRequestMain = PurchasereturnRequestMainConvert.INSTANCE.convert(createReqVO); + String number = serialNumberApi.generateCode(RuleCodeEnum.PURCHASE_RECEIPT_REQUEST.getCode()); + purchasereturnRequestMain.setNumber(number); PurchasereturnRequestMainDO purchasereturnRequestMainDO = validatorToCreate(createReqVO); + List subDOList = PurchasereturnRequestDetailConvert.INSTANCE.convertList03(createReqVO.getSubList()); + for (PurchasereturnRequestDetailDO detailDO : subDOList) { + detailDO.setMasterId(purchasereturnRequestMain.getId()); + detailDO.setNumber(number); + } + purchasereturnRequestDetailMapper.insertBatch(subDOList); //调用自动执行方法 if (RequestStatusEnum.HANDLING.getCode().equals(purchasereturnRequestMainDO.getStatus())) { - + this.generateJob(purchasereturnRequestMain, subDOList); } trendsApi.createTrends(purchasereturnRequestMain.getId(), "purchasereturnRequest", "增加了采购退货申请", TrendsTypeEnum.CREATE); // 返回 @@ -128,9 +135,6 @@ public class PurchasereturnRequestMainServiceImpl implements PurchasereturnReque validatePurchasereturnRequestMainExists(updateReqVO.getId()); // 更新主表 PurchasereturnRequestMainDO purchasereturnRequestMainDO = validatorToUpdate(updateReqVO); - if (RequestStatusEnum.HANDLING.getCode().equals(purchasereturnRequestMainDO.getStatus())) { - - } trendsApi.createTrends(purchasereturnRequestMainDO.getId(), "purchasereturnRequest", "增加了采购退货申请", TrendsTypeEnum.CREATE); }