From 0264a4ef551558df25bf45294c3547f7882124b5 Mon Sep 17 00:00:00 2001 From: "hongxi.lian" Date: Wed, 29 Nov 2023 15:50:49 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B7=A5=E5=BA=8F=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/process/ProcessController.java | 17 +++-- .../process/vo/ProcessImportErrorVO.java | 63 +++++++++++++++++++ .../wms/convert/process/ProcessConvert.java | 4 ++ .../wms/service/process/ProcessService.java | 2 +- .../service/process/ProcessServiceImpl.java | 61 +++++++++++------- 5 files changed, 112 insertions(+), 35 deletions(-) create mode 100644 win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/process/vo/ProcessImportErrorVO.java diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/process/ProcessController.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/process/ProcessController.java index 8d83d41c..9ef22634 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/process/ProcessController.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/process/ProcessController.java @@ -8,13 +8,9 @@ import com.win.framework.excel.core.util.ExcelUtils; 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.itembasic.vo.ItembasicExcelVO; +import com.win.module.wms.controller.bom.vo.BomImportErrorVO; import com.win.module.wms.controller.process.vo.*; -import com.win.module.wms.controller.workstation.vo.WorkstationRespVO; -import com.win.module.wms.convert.itembasic.ItembasicConvert; import com.win.module.wms.convert.process.ProcessConvert; -import com.win.module.wms.convert.workstation.WorkstationConvert; -import com.win.module.wms.dal.dataobject.itembasic.ItembasicDO; import com.win.module.wms.dal.dataobject.process.ProcessDO; import com.win.module.wms.enums.DictTypeConstants; import com.win.module.wms.service.process.ProcessService; @@ -152,18 +148,19 @@ public class ProcessController { @Parameter(name = "updatePart", description = "部分更新,默认为 true", example = "true") }) @PreAuthorize("@ss.hasPermission('wms:process: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, ProcessImportExcelVO.class); - List errorList = processService.importProcessList(list, mode, updatePart); + List errorList = processService.importProcessList(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); } @PostMapping("/senior") diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/process/vo/ProcessImportErrorVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/process/vo/ProcessImportErrorVO.java new file mode 100644 index 00000000..239ec7e6 --- /dev/null +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/process/vo/ProcessImportErrorVO.java @@ -0,0 +1,63 @@ +package com.win.module.wms.controller.process.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 ProcessImportErrorVO { + + @ExcelProperty("代码") + private String code; + + @ExcelProperty("名称") + private String name; + + @ExcelProperty(value = "类型", converter = DictConvert.class) + @DictFormat("process_type") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 + private String type; + + @ExcelProperty("车间代码") + private String workshopCode; + + @ExcelProperty("生产线代码") + private String productionLineCode; + + @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("创建时间") + @ColumnWidth(value = 16) + private LocalDateTime createTime; + + @ExcelProperty("创建者ID") + private String creator; + + @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/process/ProcessConvert.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/process/ProcessConvert.java index 23f98cd8..e4bd204a 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/process/ProcessConvert.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/process/ProcessConvert.java @@ -1,6 +1,8 @@ package com.win.module.wms.convert.process; 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.process.vo.*; import com.win.module.wms.dal.dataobject.process.ProcessDO; import org.mapstruct.Mapper; @@ -31,4 +33,6 @@ public interface ProcessConvert { List convertList02(List list); ProcessDO convert(ProcessImportExcelVO process); + + ProcessImportErrorVO convert2(ProcessDO bean); } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/process/ProcessService.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/process/ProcessService.java index d994efb6..30b54cd0 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/process/ProcessService.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/process/ProcessService.java @@ -79,5 +79,5 @@ public interface ProcessService { */ List getProcessList(ProcessExportReqVO exportReqVO); - List importProcessList(List processes, Integer mode, Boolean updatePart); + List importProcessList(List processes, Integer mode, Boolean updatePart); } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/process/ProcessServiceImpl.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/process/ProcessServiceImpl.java index 6521600b..2e23a30f 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/process/ProcessServiceImpl.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/process/ProcessServiceImpl.java @@ -7,9 +7,12 @@ import com.win.framework.common.exception.ServiceException; 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.bom.vo.BomImportErrorVO; import com.win.module.wms.controller.process.vo.*; +import com.win.module.wms.convert.bom.BomConvert; import com.win.module.wms.convert.process.ProcessConvert; import com.win.module.wms.dal.dataobject.accountcalendar.AccountcalendarDO; +import com.win.module.wms.dal.dataobject.bom.BomDO; import com.win.module.wms.dal.dataobject.owner.OwnerDO; import com.win.module.wms.dal.dataobject.process.ProcessDO; import com.win.module.wms.dal.mysql.process.ProcessMapper; @@ -88,36 +91,46 @@ public class ProcessServiceImpl implements ProcessService { return processMapper.selectList(exportReqVO); } + private String validateProcessImport( ProcessDO process){ + StringBuilder message = new StringBuilder(); + try { + validateProcessForCreateOrUpdate(null,process.getCode(),process.getWorkshopCode(), process.getProductionLineCode(),process.getAvailable()); + } catch (ServiceException ex) { + message.append(ex.getMessage()).append(","); + } + return message.toString(); + } + + @Override - public List importProcessList(List processes, Integer mode, Boolean updatePart) { + public List importProcessList(List processes, Integer mode, Boolean updatePart) { if (CollUtil.isEmpty(processes)) { throw exception(PROCESS_IMPORT_LIST_IS_EMPTY); } - List errorList = new ArrayList<>(); + List errorList = new ArrayList<>(); processes.forEach(process -> { - // 校验,判断是否有不符合的原因 - try { - if(mode != null){ - validateProcessForCreateOrUpdate(null,process.getCode(),process.getWorkshopCode(), process.getProductionLineCode(),process.getAvailable());} - } catch (ServiceException ex) { - errorList.add(process); - return; - } - // 判断如果不存在,在进行插入 - OwnerDO existConfigurationSetting = null; - if (existConfigurationSetting == null&& mode != 3) { - processMapper.insert(ProcessConvert.INSTANCE.convert(process)); - } - else if (existConfigurationSetting != null && mode != 2) {// 如果存在,判断是否允许更新 - ProcessDO processDo = ProcessConvert.INSTANCE.convert(process); - processDo.setId(existConfigurationSetting.getId()); - processMapper.updateById(processDo); - } + ProcessDO processDO = ProcessConvert.INSTANCE.convert(process); + String message = this.validateProcessImport(processDO); + boolean flag = true; + if(!message.isEmpty()){ + ProcessImportErrorVO importErrorVO = ProcessConvert.INSTANCE.convert2(processDO); + importErrorVO.setImportStatus("失败"); + importErrorVO.setImportRemark(message.substring(0, message.length() - 1)); + errorList.add(importErrorVO); + flag = false; + } + if(flag){ + ProcessDO existConfigurationSetting = processMapper.selectByCode(processDO.getCode()); + if (existConfigurationSetting == null&& mode != 3) { + processMapper.insert(ProcessConvert.INSTANCE.convert(process)); + } + else if (existConfigurationSetting != null && mode != 2) {// 如果存在,判断是否允许更新 + ProcessDO processDo = ProcessConvert.INSTANCE.convert(process); + processDo.setId(existConfigurationSetting.getId()); + processMapper.updateById(processDo); + } + } }); - //错误不为空并非部分更新,手工回滚 - if(!errorList.isEmpty() && !updatePart) { - TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); - } return errorList; } private void validateProcessForCreateOrUpdate(Long id, String code,String workshopCode,String productionLineCode,String available) {