diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchaseprice/PurchasepriceController.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchaseprice/PurchasepriceController.java index 7f07bccd..3ae282c7 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchaseprice/PurchasepriceController.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchaseprice/PurchasepriceController.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.purchaseprice.vo.*; -import com.win.module.wms.controller.stdcostprice.vo.StdcostpriceRespVO; -import com.win.module.wms.convert.itembasic.ItembasicConvert; +import com.win.module.wms.controller.purchasereceiptRequest.vo.PurchasereceiptRequestMainImportErrorVO; import com.win.module.wms.convert.purchaseprice.PurchasepriceConvert; -import com.win.module.wms.convert.stdcostprice.StdcostpriceConvert; -import com.win.module.wms.dal.dataobject.itembasic.ItembasicDO; import com.win.module.wms.dal.dataobject.purchaseprice.PurchasepriceDO; import com.win.module.wms.enums.DictTypeConstants; import com.win.module.wms.service.purchaseprice.PurchasepriceService; @@ -166,17 +162,18 @@ public class PurchasepriceController { @Parameter(name = "updatePart", description = "部分更新,默认为 true", example = "true") }) @PreAuthorize("@ss.hasPermission('wms:purchaseprice: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, PurchasepriceImportExcelVO.class); - List errorList = purchasepriceService.importPurchasepriceList(list, mode, updatePart); + List errorList = purchasepriceService.importPurchasepriceList(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/purchaseprice/vo/PurchasepriceImportErrorVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchaseprice/vo/PurchasepriceImportErrorVO.java new file mode 100644 index 00000000..8f319af8 --- /dev/null +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/purchaseprice/vo/PurchasepriceImportErrorVO.java @@ -0,0 +1,51 @@ +package com.win.module.wms.controller.purchaseprice.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 PurchasepriceImportErrorVO { + @ExcelProperty("供应商代码") + private String supplierCode; + + @ExcelProperty("物料代码") + private String itemCode; + + @ExcelProperty(value = "货币", converter = DictConvert.class) + @DictFormat(DictTypeConstants.CURRENCY) + private String currency; + + @ExcelProperty("价格") + private BigDecimal price; + + @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/purchaseprice/PurchasepriceConvert.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/purchaseprice/PurchasepriceConvert.java index 15453771..f5d36bf9 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/purchaseprice/PurchasepriceConvert.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/purchaseprice/PurchasepriceConvert.java @@ -1,6 +1,8 @@ package com.win.module.wms.convert.purchaseprice; 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.purchaseprice.vo.*; import com.win.module.wms.dal.dataobject.purchaseprice.PurchasepriceDO; import org.mapstruct.Mapper; @@ -31,4 +33,6 @@ public interface PurchasepriceConvert { List convertList02(List list); PurchasepriceDO convert(PurchasepriceImportExcelVO purchaseprice); + + PurchasepriceImportErrorVO convert2(PurchasepriceDO bean); } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/purchaseprice/PurchasepriceMapper.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/purchaseprice/PurchasepriceMapper.java index f3de7a4a..5d7ec237 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/purchaseprice/PurchasepriceMapper.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/purchaseprice/PurchasepriceMapper.java @@ -57,4 +57,5 @@ public interface PurchasepriceMapper extends BaseMapperX { default List selectSeniorList(CustomConditions conditions) { return selectList(QueryWrapperUtils.structure(conditions)); } + } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/bom/BomServiceImpl.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/bom/BomServiceImpl.java index 4f97d5e8..6d2d1ae5 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/bom/BomServiceImpl.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/bom/BomServiceImpl.java @@ -159,7 +159,8 @@ public class BomServiceImpl implements BomService { BomDO existAccountcalendar = bomMapper.selectByProductItemCode(bom.getProductItemCode()); if (existAccountcalendar == null && mode != 3) { bomMapper.insert(bomDO); - } else if (existAccountcalendar != null && mode != 2) { // 如果存在,判断是否允许更新 + } else if (existAccountcalendar != null && mode != 2) { + // 如果存在,判断是否允许更新 bomDO.setId(existAccountcalendar.getId()); bomMapper.updateById(bomDO); } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/purchaseprice/PurchasepriceService.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/purchaseprice/PurchasepriceService.java index 7bd635bb..6a96db4d 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/purchaseprice/PurchasepriceService.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/purchaseprice/PurchasepriceService.java @@ -79,5 +79,5 @@ public interface PurchasepriceService { */ List getPurchasepriceList(PurchasepriceExportReqVO exportReqVO); - List importPurchasepriceList(List purchaseprices, Integer mode, Boolean updatePart); + List importPurchasepriceList(List purchaseprices, Integer mode, Boolean updatePart); } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/purchaseprice/PurchasepriceServiceImpl.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/purchaseprice/PurchasepriceServiceImpl.java index 13bbcd02..e6f8afff 100644 --- a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/purchaseprice/PurchasepriceServiceImpl.java +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/purchaseprice/PurchasepriceServiceImpl.java @@ -2,13 +2,17 @@ package com.win.module.wms.service.purchaseprice; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.google.common.annotations.VisibleForTesting; 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.purchaseprice.vo.*; +import com.win.module.wms.convert.bom.BomConvert; import com.win.module.wms.convert.purchaseprice.PurchasepriceConvert; +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.purchaseprice.PurchasepriceDO; import com.win.module.wms.dal.mysql.purchaseprice.PurchasepriceMapper; @@ -89,68 +93,80 @@ public class PurchasepriceServiceImpl implements PurchasepriceService { return purchasepriceMapper.selectList(exportReqVO); } + private String validatePurchasepriceImport( PurchasepriceDO purchaseprice ){ + StringBuilder message = new StringBuilder(); + try { + validatePurchasepriceExists(null); + } catch (ServiceException ex) { + message.append(ex.getMessage()).append(","); + } + try { + validateCodeExists(null, purchaseprice.getItemCode()); + } catch (ServiceException ex) { + message.append(ex.getMessage()).append(","); + } + try { + validateSupplierCodeExists(purchaseprice.getSupplierCode()); + } catch (ServiceException ex) { + message.append(ex.getMessage()).append(","); + } + try { + validateCurrencyExists(purchaseprice.getCurrency()); + } catch (ServiceException ex) { + message.append(ex.getMessage()).append(","); + } + try { + validatePriceExists(purchaseprice.getPrice()); + } catch (ServiceException ex) { + message.append(ex.getMessage()).append(","); + } + try { + validateAvailableExists(purchaseprice.getAvailable()); + } catch (ServiceException ex) { + message.append(ex.getMessage()).append(","); + } + return message.toString(); + } + + public List validatePurchaseprice( PurchasepriceDO purchaseprice){ + QueryWrapper queryWrapper = new QueryWrapper(); + queryWrapper.in("supplier_code", purchaseprice.getSupplierCode()); + queryWrapper.in("item_code", purchaseprice.getItemCode()); + queryWrapper.in("available",purchaseprice.getAvailable()); + List purchasepriceDO = purchasepriceMapper.selectList(queryWrapper); + return purchasepriceDO; + } + + + @Override - public List importPurchasepriceList(List purchaseprices, Integer mode, Boolean updatePart) { + public List importPurchasepriceList(List purchaseprices, Integer mode, Boolean updatePart) { if (CollUtil.isEmpty(purchaseprices)) { throw exception(PURCHASEPRICE_IMPORT_LIST_IS_EMPTY); } - List errorList = new ArrayList<>(); + List errorList = new ArrayList<>(); purchaseprices.forEach(purchaseprice -> { - // 校验,判断是否有不符合的原因 - String massage = ""; - if(mode != null) { - try { - validatePurchasepriceExists(null); - } catch (ServiceException ex) { - massage += ex.getMessage() + ","; - } - try { - validateCodeExists(null, purchaseprice.getItemCode()); - } catch (ServiceException ex) { - massage += ex.getMessage() + ","; - } - try { - validateSupplierCodeExists(purchaseprice.getSupplierCode()); - } catch (ServiceException ex) { - massage += ex.getMessage() + ","; - } - try { - validateCurrencyExists(purchaseprice.getCurrency()); - } catch (ServiceException ex) { - massage += ex.getMessage() + ","; - } - try { - validatePriceExists(purchaseprice.getPrice()); - } catch (ServiceException ex) { - massage += ex.getMessage() + ","; - } - try { - validateAvailableExists(purchaseprice.getAvailable()); - } catch (ServiceException ex) { - massage += ex.getMessage() + ","; - } - - if (StrUtil.isNotEmpty(massage)) { - massage.substring(0, massage.length() - 1); - errorList.add(purchaseprice); - } - if (errorList == null) { - // 判断如果不存在,在进行插入 - OwnerDO existConfigurationSetting = null; - if (existConfigurationSetting == null && mode != 3) { - purchasepriceMapper.insert(PurchasepriceConvert.INSTANCE.convert(purchaseprice)); - } else if (existConfigurationSetting != null && mode != 2) {// 如果存在,判断是否允许更新 - PurchasepriceDO purchasepriceDo = PurchasepriceConvert.INSTANCE.convert(purchaseprice); - purchasepriceDo.setId(existConfigurationSetting.getId()); - purchasepriceMapper.updateById(purchasepriceDo); - } - } - } + PurchasepriceDO purchasepriceDO = PurchasepriceConvert.INSTANCE.convert(purchaseprice); + String message = this.validatePurchasepriceImport(purchasepriceDO); + boolean flag = true; + if(!message.isEmpty()){ + PurchasepriceImportErrorVO importErrorVO = PurchasepriceConvert.INSTANCE.convert2(purchasepriceDO); + importErrorVO.setImportStatus("失败"); + importErrorVO.setImportRemark(message.substring(0, message.length() - 1)); + errorList.add(importErrorVO); + flag = false; + } + if(flag) { + List PurchasepriceDO = validatePurchaseprice(purchasepriceDO); + for(PurchasepriceDO purchase: PurchasepriceDO){ + purchase.setAvailable("FALSE"); + } + if(!PurchasepriceDO.isEmpty()) { + purchasepriceMapper.updateBatch(PurchasepriceDO); + } + purchasepriceMapper.insert(purchasepriceDO); + } }); - //错误不为空并非部分更新,手工回滚 - if(!errorList.isEmpty() && !updatePart) { - TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); - } return errorList; } private void validatePurchasepriceForCreateOrUpdate(Long id,String supplierCode,String itemCode, String currency,BigDecimal price,String available) { 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 d48a7263..c2ab378e 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 @@ -203,6 +203,7 @@ public class PurchasereceiptRequestMainServiceImpl implements PurchasereceiptReq return purchasereceiptRequestMainMapper.selectSeniorList(conditions); } + @Override @Transactional public List importPurchasereceiptRequestMainList(List datas, Integer mode, boolean updatePart) {