diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productionline/ProductionlineController.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productionline/ProductionlineController.java index 9dacbfb3..062376f3 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productionline/ProductionlineController.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productionline/ProductionlineController.java @@ -8,13 +8,8 @@ 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.productionline.vo.*; -import com.win.module.wms.controller.workshop.vo.WorkshopRespVO; -import com.win.module.wms.convert.itembasic.ItembasicConvert; import com.win.module.wms.convert.productionline.ProductionlineConvert; -import com.win.module.wms.convert.workshop.WorkshopConvert; -import com.win.module.wms.dal.dataobject.itembasic.ItembasicDO; import com.win.module.wms.dal.dataobject.productionline.ProductionlineDO; import com.win.module.wms.enums.DictTypeConstants; import com.win.module.wms.service.productionline.ProductionlineService; @@ -26,7 +21,6 @@ import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; - import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; @@ -34,7 +28,6 @@ import java.io.IOException; import java.time.LocalDateTime; import java.time.ZoneOffset; import java.util.*; - import static com.win.framework.common.pojo.CommonResult.success; import static com.win.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; @@ -143,6 +136,7 @@ public class ProductionlineController { ExcelUtils.write(response, "参数设置导入模板.xls", "参数设置列表", ProductionlineImportExcelVO.class, list,mapDropDown); } + @PostMapping("/import") @Operation(summary = "导入参数设置") @Parameters({ @@ -151,18 +145,19 @@ public class ProductionlineController { @Parameter(name = "updatePart", description = "部分更新,默认为 true", example = "true") }) @PreAuthorize("@ss.hasPermission('wms:productionline: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, ProductionlineImportExcelVO.class); - List errorList = productionlineService.importProductionlineList(list, mode, updatePart); + List errorList = productionlineService.importProductionlineList(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/productionline/vo/ProductionlineImportErrorVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productionline/vo/ProductionlineImportErrorVO.java new file mode 100644 index 00000000..502ef594 --- /dev/null +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productionline/vo/ProductionlineImportErrorVO.java @@ -0,0 +1,63 @@ +package com.win.module.wms.controller.productionline.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 ProductionlineImportErrorVO { + @ExcelProperty("代码") + private String code; + + @ExcelProperty("名称") + private String name; + + @ExcelProperty("描述") + private String description; + + @ExcelProperty(value = "类型", converter = DictConvert.class) + @DictFormat(DictTypeConstants.PROCESS_TYPE) + private String type; + + @ExcelProperty("车间代码") + private String workshopCode; + + @ExcelProperty("原料库位") + private String rawLocationCode; + + @ExcelProperty("成品库位") + private String fgLocationCode; + + @ExcelProperty(value = "是否可用", converter = DictConvert.class) + @DictFormat(DictTypeConstants.TRUE_FALSE) + private String available; + + @ExcelProperty(value = "生效时间") + @ColumnWidth(value = 16) + private LocalDateTime activeTime; + + @ExcelProperty(value = "失效时间") + @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/productionline/ProductionlineConvert.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/productionline/ProductionlineConvert.java index 73ef6adb..f124b8eb 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/productionline/ProductionlineConvert.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/productionline/ProductionlineConvert.java @@ -1,6 +1,8 @@ package com.win.module.wms.convert.productionline; 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.productionline.vo.*; import com.win.module.wms.dal.dataobject.productionline.ProductionlineDO; import org.mapstruct.Mapper; @@ -31,4 +33,7 @@ public interface ProductionlineConvert { List convertList02(List list); ProductionlineDO convert(ProductionlineImportExcelVO productionline); + + ProductionlineImportErrorVO convert2(ProductionlineDO bean); + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/productionline/ProductionlineMapper.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/productionline/ProductionlineMapper.java index 60e8fcfe..ece0c256 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/productionline/ProductionlineMapper.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/productionline/ProductionlineMapper.java @@ -7,6 +7,7 @@ import com.win.framework.mybatis.core.query.LambdaQueryWrapperX; import com.win.framework.mybatis.core.util.QueryWrapperUtils; import com.win.module.wms.controller.productionline.vo.ProductionlineExportReqVO; import com.win.module.wms.controller.productionline.vo.ProductionlinePageReqVO; +import com.win.module.wms.dal.dataobject.bom.BomDO; import com.win.module.wms.dal.dataobject.itembasic.ItembasicDO; import com.win.module.wms.dal.dataobject.productionline.ProductionlineDO; import org.apache.ibatis.annotations.Mapper; diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/productionline/ProductionlineService.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/productionline/ProductionlineService.java index 25c7570d..b9e3f375 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/productionline/ProductionlineService.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/productionline/ProductionlineService.java @@ -70,7 +70,7 @@ public interface ProductionlineService { */ List getProductionlineList(ProductionlineExportReqVO exportReqVO); - List importProductionlineList(List productionlines, Integer mode, Boolean updatePart); + List importProductionlineList(List productionlines, Integer mode, Boolean updatePart); /** *查询生产线是否存在 diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/productionline/ProductionlineServiceImpl.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/productionline/ProductionlineServiceImpl.java index 17d2ed75..d0fdf88b 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/productionline/ProductionlineServiceImpl.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/productionline/ProductionlineServiceImpl.java @@ -9,8 +9,10 @@ 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.productionline.vo.*; +import com.win.module.wms.convert.bom.BomConvert; import com.win.module.wms.convert.productionline.ProductionlineConvert; 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.productionline.ProductionlineDO; import com.win.module.wms.dal.dataobject.productionlineitem.ProductionlineitemDO; @@ -87,36 +89,47 @@ public class ProductionlineServiceImpl implements ProductionlineService { return productionlineMapper.selectList(exportReqVO); } + private String validateProductionlineImport( ProductionlineDO productionline ){ + StringBuilder message = new StringBuilder(); + try { + validateProcessForCreateOrUpdate(null,productionline.getCode(),productionline.getWorkshopCode(),productionline.getAvailable()); + } catch (ServiceException ex) { + message.append(ex.getMessage()).append(","); + } + return message.toString(); + } + @Override - public List importProductionlineList(List productionlines, Integer mode, Boolean updatePart) { + public List importProductionlineList(List productionlines, Integer mode, Boolean updatePart) { if (CollUtil.isEmpty(productionlines)) { throw exception(PRODUCTIONLINE_IMPORT_LIST_IS_EMPTY); } - List errorList = new ArrayList<>(); + List errorList = new ArrayList<>(); productionlines.forEach(productionline -> { // 校验,判断是否有不符合的原因 - try { if(mode != null){ - validateProcessForCreateOrUpdate(null,productionline.getCode(),productionline.getWorkshopCode(),productionline.getAvailable());} - } catch (ServiceException ex) { - errorList.add(productionline); - return; - } - // 判断如果不存在,在进行插入 - OwnerDO existConfigurationSetting = null; - if (existConfigurationSetting == null&& mode != 3) { - productionlineMapper.insert(ProductionlineConvert.INSTANCE.convert(productionline)); - } - else if (existConfigurationSetting != null && mode != 2) {// 如果存在,判断是否允许更新 - ProductionlineDO productionlineDo = ProductionlineConvert.INSTANCE.convert(productionline); - productionlineDo.setId(existConfigurationSetting.getId()); - productionlineMapper.updateById(productionlineDo); - } + ProductionlineDO productionlineDO = ProductionlineConvert.INSTANCE.convert(productionline); + String message = this.validateProductionlineImport(productionlineDO); + boolean flag = true; + if(!message.isEmpty()){ + ProductionlineImportErrorVO importErrorVO = ProductionlineConvert.INSTANCE.convert2(productionlineDO); + importErrorVO.setImportStatus("失败"); + importErrorVO.setImportRemark(message.substring(0, message.length() - 1)); + errorList.add(importErrorVO); + flag = false; + } + if(flag){ + ProductionlineDO existAccountcalendar = productionlineMapper.selectByCode(productionlineDO.getCode()); + if(existAccountcalendar == null && mode != 3){ + productionlineMapper.insert(productionlineDO); + } + else if(existAccountcalendar != null && mode != 2){ + productionlineDO.setId(existAccountcalendar.getId()); + productionlineMapper.updateById(productionlineDO); + } + } + } }); - //错误不为空并非部分更新,手工回滚 - if(!errorList.isEmpty() && !updatePart) { - TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); - } return errorList; } private void validateProcessForCreateOrUpdate(Long id, String code,String workshopCode,String available) {