diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productionlineitem/ProductionlineitemController.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productionlineitem/ProductionlineitemController.java index d09759fe..25b43b58 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productionlineitem/ProductionlineitemController.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productionlineitem/ProductionlineitemController.java @@ -8,11 +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.productionlineitem.vo.*; -import com.win.module.wms.convert.itembasic.ItembasicConvert; import com.win.module.wms.convert.productionlineitem.ProductionlineitemConvert; -import com.win.module.wms.dal.dataobject.itembasic.ItembasicDO; import com.win.module.wms.dal.dataobject.productionlineitem.ProductionlineitemDO; import com.win.module.wms.enums.DictTypeConstants; import com.win.module.wms.service.productionlineitem.ProductionlineitemService; @@ -127,7 +124,7 @@ public class ProductionlineitemController { List list = Arrays.asList(); Map mapDropDown = new HashMap<>(); String[] available = DictFrameworkUtils.dictTypeDictDataValue(DictTypeConstants.TRUE_FALSE); - mapDropDown.put(3, available);; + mapDropDown.put(4, available); // 输出 ExcelUtils.write(response, "生产线物料关系导入模板.xls", "生产线物料关系列表", ProductionlineItemImportExcelVO.class, list,mapDropDown); } @@ -140,18 +137,19 @@ public class ProductionlineitemController { @Parameter(name = "updatePart", description = "部分更新,默认为 true", example = "true") }) @PreAuthorize("@ss.hasPermission('wms:productionlineitem: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, ProductionlineItemImportExcelVO.class); - List errorList = productionlineitemService.importProductionlineItemList(list, mode, updatePart); + List errorList = productionlineitemService.importProductionlineItemList(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/productionlineitem/vo/ProductionlineItemImportErrorVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productionlineitem/vo/ProductionlineItemImportErrorVO.java new file mode 100644 index 00000000..710059ad --- /dev/null +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/productionlineitem/vo/ProductionlineItemImportErrorVO.java @@ -0,0 +1,52 @@ +package com.win.module.wms.controller.productionlineitem.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 ProductionlineItemImportErrorVO { + + @ExcelProperty("完工收货库位") + private String fgLocationCode; + + @ExcelProperty("原料库位") + private String rawLocationCode; + + @ExcelProperty("产线代码") + private String productionLineCode; + + @ExcelProperty("物品代码") + private String itemCode; + + @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/productionlineitem/ProductionlineitemConvert.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/productionlineitem/ProductionlineitemConvert.java index c996611c..0f87c54a 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/productionlineitem/ProductionlineitemConvert.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/productionlineitem/ProductionlineitemConvert.java @@ -31,4 +31,8 @@ public interface ProductionlineitemConvert { List convertList02(List list); ProductionlineitemDO convert(ProductionlineItemImportExcelVO productionlineItem); + + ProductionlineItemImportErrorVO convert2(ProductionlineitemDO bean); + + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/productionlineitem/ProductionlineitemMapper.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/productionlineitem/ProductionlineitemMapper.java index f3df726c..6475e241 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/productionlineitem/ProductionlineitemMapper.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/productionlineitem/ProductionlineitemMapper.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.productionlineitem.vo.ProductionlineitemExportReqVO; import com.win.module.wms.controller.productionlineitem.vo.ProductionlineitemPageReqVO; +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.productionlineitem.ProductionlineitemDO; import org.apache.ibatis.annotations.Mapper; @@ -21,6 +22,11 @@ import java.util.List; @Mapper public interface ProductionlineitemMapper extends BaseMapperX { + default ProductionlineitemDO selectByProductItemCode(String itemCode){ + return selectOne(ProductionlineitemDO::getItemCode, itemCode); + } + + default PageResult selectPage(ProductionlineitemPageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX() .eqIfPresent(ProductionlineitemDO::getFgLocationCode, reqVO.getFgLocationCode()) diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/productionlineitem/ProductionlineitemService.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/productionlineitem/ProductionlineitemService.java index da24f266..5f7e1825 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/productionlineitem/ProductionlineitemService.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/productionlineitem/ProductionlineitemService.java @@ -70,7 +70,7 @@ public interface ProductionlineitemService { */ List getProductionlineitemList(ProductionlineitemExportReqVO exportReqVO); - List importProductionlineItemList(List productionlineItems, Integer mode, Boolean updatePart); + List importProductionlineItemList(List productionlineItems, Integer mode, Boolean updatePart); /** * 零件生产线关系有效 * BQ-----QPLI diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/productionlineitem/ProductionlineitemServiceImpl.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/productionlineitem/ProductionlineitemServiceImpl.java index 7c174301..758a6163 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/productionlineitem/ProductionlineitemServiceImpl.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/productionlineitem/ProductionlineitemServiceImpl.java @@ -8,8 +8,11 @@ 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.productionlineitem.vo.*; +import com.win.module.wms.convert.bom.BomConvert; import com.win.module.wms.convert.productionlineitem.ProductionlineitemConvert; +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.productionlineitem.ProductionlineitemDO; import com.win.module.wms.dal.mysql.productionlineitem.ProductionlineitemMapper; @@ -86,37 +89,46 @@ public class ProductionlineitemServiceImpl implements ProductionlineitemService return productionlineitemMapper.selectList(exportReqVO); } + private String validateProductionlineItemImport( ProductionlineitemDO productionlineItem ){ + StringBuilder message = new StringBuilder(); + try { + validateProcessForCreateOrUpdate(null, productionlineItem.getFgLocationCode(), productionlineItem.getProductionLineCode(), productionlineItem.getItemCode(), productionlineItem.getAvailable()); + } catch (ServiceException ex) { + message.append(ex.getMessage()).append(","); + } + return message.toString(); + } + @Override - public List importProductionlineItemList(List productionlineItems, Integer mode, Boolean updatePart) { + public List importProductionlineItemList(List productionlineItems, Integer mode, Boolean updatePart) { if (CollUtil.isEmpty(productionlineItems)) { throw exception(PRODUCTIONLINEITEM_IMPORT_LIST_IS_EMPTY); } - List errorList = new ArrayList<>(); + List errorList = new ArrayList<>(); productionlineItems.forEach(productionlineItem -> { // 校验,判断是否有不符合的原因 - try { - if (mode != null) { - validateProcessForCreateOrUpdate(null, productionlineItem.getFgLocationCode(), productionlineItem.getProductionLineCode() - , productionlineItem.getItemCode(), productionlineItem.getAvailable()); - } - } catch (ServiceException ex) { - errorList.add(productionlineItem); - return; + ProductionlineitemDO productionlineitemDO = ProductionlineitemConvert.INSTANCE.convert(productionlineItem); + String message = this.validateProductionlineItemImport(productionlineitemDO); + boolean flag = true; + if(!message.isEmpty()){ + ProductionlineItemImportErrorVO importErrorVO = ProductionlineitemConvert.INSTANCE.convert2(productionlineitemDO); + importErrorVO.setImportStatus("失败"); + importErrorVO.setImportRemark(message.substring(0, message.length() - 1)); + errorList.add(importErrorVO); + flag = false; } // 判断如果不存在,在进行插入 - OwnerDO existConfigurationSetting = null; - if (existConfigurationSetting == null && mode != 3) { - productionlineitemMapper.insert(ProductionlineitemConvert.INSTANCE.convert(productionlineItem)); - } else if (existConfigurationSetting != null && mode != 2) {// 如果存在,判断是否允许更新 - ProductionlineitemDO productionlineItemDo = ProductionlineitemConvert.INSTANCE.convert(productionlineItem); - productionlineItemDo.setId(existConfigurationSetting.getId()); - productionlineitemMapper.updateById(productionlineItemDo); + if(flag) { + ProductionlineitemDO existAccountcalendar = productionlineitemMapper.selectByProductItemCode(productionlineitemDO.getItemCode()); + if (existAccountcalendar == null && mode != 3) { + productionlineitemMapper.insert(productionlineitemDO); + } else if (existAccountcalendar != null && mode != 2) { + // 如果存在,判断是否允许更新 + productionlineitemDO.setId(existAccountcalendar.getId()); + productionlineitemMapper.updateById(productionlineitemDO); + } } }); - //错误不为空并非部分更新,手工回滚 - if(!errorList.isEmpty() && !updatePart) { - TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); - } return errorList; } private void validateProcessForCreateOrUpdate(Long id, String fgLocationCode,String productionLineCode,String itemCode,String available) {