diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/domain/MaterialBaseInfoFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/domain/MaterialBaseInfoFeign.java index 44ff2f082..2d70d66e6 100644 --- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/domain/MaterialBaseInfoFeign.java +++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/domain/MaterialBaseInfoFeign.java @@ -244,4 +244,10 @@ public class MaterialBaseInfoFeign extends BaseVOEntity{ @ApiModelProperty(name = "单位") private String unit; + + @ApiModelProperty(name = "组织(多个用,分开)") + private String orgId; + + @ApiModelProperty(name = "是否正常物料: 0-是 1-否") + private Integer isNormalMaterial; } \ No newline at end of file diff --git a/mhd-auth/src/main/resources/bootstrap.yml b/mhd-auth/src/main/resources/bootstrap.yml index 828fff329..6cb67337b 100644 --- a/mhd-auth/src/main/resources/bootstrap.yml +++ b/mhd-auth/src/main/resources/bootstrap.yml @@ -15,7 +15,7 @@ spring: # server-addr: 127.0.0.1:8848 # 线上测试环境配置 容器名+端口号 # server-addr: 10.33.0.129:6010 - server-addr: 10.102.192.31:6848 + server-addr: 10.102.192.30:6848 username: nacos password: manhuoda@2023 #线上正式环境 @@ -24,7 +24,7 @@ spring: # password: manhuoda@2023 config: # server-addr: 127.0.0.1:8848 - server-addr: 10.102.192.31:6848 + server-addr: 10.102.192.30:6848 # 测试环境配置 容器名+端口号 # server-addr: 10.33.0.129:6010 # 线上测试环境配置 容器名+端口号 @@ -52,4 +52,4 @@ sso: AwIDAQAB -----END PUBLIC KEY----- # SSO登录成功后跳转的前端页面地址 - redirect-url: "https://diglog.namkwong.com.mo/main_app/sso" + redirect-url: "https://diglog.namkwong.com.mo/main_app/sso" \ No newline at end of file diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/materialBaseInfo/MaterialBaseInfoApplicationService.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/materialBaseInfo/MaterialBaseInfoApplicationService.java index ae9cd97a9..645c45a44 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/materialBaseInfo/MaterialBaseInfoApplicationService.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/materialBaseInfo/MaterialBaseInfoApplicationService.java @@ -157,15 +157,18 @@ public class MaterialBaseInfoApplicationService { * @param materialBaseInfoDO */ private void shipperParam(MaterialBaseInfoDO materialBaseInfoDO){ - AjaxResult ajaxResult = userServiceFeign.getInfo(materialBaseInfoDO.getShipperId()); - if(!"200".equals(String.valueOf(ajaxResult.get("code")))){ - throw new ServiceException("获取货主信息失败"); - } - UserPo userPo = JSON.parseObject(JSONObject.toJSONString(ajaxResult.get("data")), UserPo.class); - // 如果原始shipperName不为空,保留原始值(导入或手动输入时应该保留完整名称) - // 只有在原始shipperName为空时,才使用查询到的userName - if (materialBaseInfoDO.getShipperName() == null || materialBaseInfoDO.getShipperName().trim().isEmpty()) { - materialBaseInfoDO.setShipperName(userPo.getUserName()); + Long shipperId = materialBaseInfoDO.getShipperId(); + if (shipperId != null && shipperId != 0l) { + AjaxResult ajaxResult = userServiceFeign.getInfo(materialBaseInfoDO.getShipperId()); + if(!"200".equals(String.valueOf(ajaxResult.get("code")))){ + throw new ServiceException("获取货主信息失败"); + } + UserPo userPo = JSON.parseObject(JSONObject.toJSONString(ajaxResult.get("data")), UserPo.class); + // 如果原始shipperName不为空,保留原始值(导入或手动输入时应该保留完整名称) + // 只有在原始shipperName为空时,才使用查询到的userName + if (materialBaseInfoDO.getShipperName() == null || materialBaseInfoDO.getShipperName().trim().isEmpty()) { + materialBaseInfoDO.setShipperName(userPo.getUserName()); + } } } @@ -182,4 +185,4 @@ public class MaterialBaseInfoApplicationService { //return materialBaseInfoDomainService.getMaterialStockList(shipperName,materialName,machineCode,topOrganizationId,pageNum,pageSize);/**/ return null; } -} +} \ No newline at end of file diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/materialBaseInfo/entity/MaterialBaseInfo.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/materialBaseInfo/entity/MaterialBaseInfo.java index 4a902da82..95a81b9dd 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/materialBaseInfo/entity/MaterialBaseInfo.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/materialBaseInfo/entity/MaterialBaseInfo.java @@ -1,5 +1,6 @@ package com.mhd.basic.domain.materialBaseInfo.entity; +import com.baomidou.mybatisplus.annotation.FieldStrategy; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; @@ -44,14 +45,17 @@ public class MaterialBaseInfo extends BaseVOEntity{ @ApiModelProperty("货主id") @Excel(name = "货主id") + @TableField(updateStrategy = FieldStrategy.IGNORED) private Long shipperId; @ApiModelProperty("货主名称") @Excel(name = "货主名称") + @TableField(updateStrategy = FieldStrategy.IGNORED) private String shipperName; @ApiModelProperty("物料编码") @Excel(name = "物料编码") + @TableField(updateStrategy = FieldStrategy.IGNORED) private String materialCode; @ApiModelProperty("物料名称") @@ -404,4 +408,9 @@ public class MaterialBaseInfo extends BaseVOEntity{ @ApiModelProperty(name = "收费标准") private BigDecimal chargeStandard; + @ApiModelProperty(name = "组织(多个用,分开)") + private String orgId; + + @ApiModelProperty(name = "是否正常物料: 0-是 1-否") + private Integer isNormalMaterial; } \ No newline at end of file diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/materialBaseInfo/repository/po/MaterialBaseInfoPO.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/materialBaseInfo/repository/po/MaterialBaseInfoPO.java index d7fb53ff9..b876cb1c2 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/materialBaseInfo/repository/po/MaterialBaseInfoPO.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/materialBaseInfo/repository/po/MaterialBaseInfoPO.java @@ -393,4 +393,10 @@ public class MaterialBaseInfoPO extends BaseVOEntity{ @ApiModelProperty(name = "收费标准") private BigDecimal chargeStandard; + + @ApiModelProperty(name = "组织(多个用,分开)") + private String orgId; + + @ApiModelProperty(name = "是否正常物料: 0-是 1-否") + private Integer isNormalMaterial; } \ No newline at end of file diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/materialBaseInfo/repository/todo/MaterialBaseInfoDO.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/materialBaseInfo/repository/todo/MaterialBaseInfoDO.java index 3b3ae1181..d1e95243e 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/materialBaseInfo/repository/todo/MaterialBaseInfoDO.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/materialBaseInfo/repository/todo/MaterialBaseInfoDO.java @@ -399,4 +399,10 @@ public class MaterialBaseInfoDO extends BaseVOEntity{ @ApiModelProperty(name = "收费标准") private BigDecimal chargeStandard; + + @ApiModelProperty(name = "组织(多个用,分开)") + private String orgId; + + @ApiModelProperty(name = "是否正常物料: 0-是 1-否") + private Integer isNormalMaterial; } \ No newline at end of file diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/dto/materialBaseInfo/MaterialBaseInfoDTO.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/dto/materialBaseInfo/MaterialBaseInfoDTO.java index 54f093650..9ab26e7a9 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/dto/materialBaseInfo/MaterialBaseInfoDTO.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/dto/materialBaseInfo/MaterialBaseInfoDTO.java @@ -379,4 +379,10 @@ public class MaterialBaseInfoDTO extends BaseVOEntity{ @ApiModelProperty(name = "收费标准") private BigDecimal chargeStandard; + @ApiModelProperty(name = "组织(多个用,分开)") + private String orgId; + + @ApiModelProperty(name = "是否正常物料: 0-是 1-否") + private Integer isNormalMaterial; + } \ No newline at end of file diff --git a/mhd-modules/mhd-system/src/main/resources/bootstrap.yml b/mhd-modules/mhd-system/src/main/resources/bootstrap.yml index aa660b126..b1b1ca982 100644 --- a/mhd-modules/mhd-system/src/main/resources/bootstrap.yml +++ b/mhd-modules/mhd-system/src/main/resources/bootstrap.yml @@ -15,7 +15,6 @@ spring: discovery: # server-addr: 127.0.0.1:8848 # server-addr: 10.33.0.129:6010 - # 线上测试环境配置 容器名+端口号 server-addr: 10.102.192.30:6848 username: nacos password: manhuoda@2023 @@ -24,7 +23,6 @@ spring: config: # server-addr: 127.0.0.1:8848 # server-addr: 10.33.0.129:6010 - # 线上测试环境配置 容器名+端口号 server-addr: 10.102.192.30:6848 username: nacos password: manhuoda@2023 diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/executionInMaterialDetail/repository/po/ExecutionInMaterialDetailPO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/executionInMaterialDetail/repository/po/ExecutionInMaterialDetailPO.java index 6a1a637c4..86be848a0 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/executionInMaterialDetail/repository/po/ExecutionInMaterialDetailPO.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/executionInMaterialDetail/repository/po/ExecutionInMaterialDetailPO.java @@ -495,4 +495,12 @@ public class ExecutionInMaterialDetailPO extends ExecutionStockInOrderBasePO { //申报总价 private BigDecimal amountGw; private String khdm; + + @ApiModelProperty("保额") + @Excel(name = "保额") + private BigDecimal insureAmount; + + @ApiModelProperty("货物类型:0-物料 1-半成品 2-成品") + @Excel(name = "货物类型") + private Integer goodsType; } \ No newline at end of file diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/executionInMaterialDetail/repository/po/ExecutionInMaterialDetailWithOrderPO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/executionInMaterialDetail/repository/po/ExecutionInMaterialDetailWithOrderPO.java index 4697b3ba3..3bb849e16 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/executionInMaterialDetail/repository/po/ExecutionInMaterialDetailWithOrderPO.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/executionInMaterialDetail/repository/po/ExecutionInMaterialDetailWithOrderPO.java @@ -3,6 +3,8 @@ package com.mhd.oms.domain.executionInMaterialDetail.repository.po; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.Date; + /** * 入库明细查询结果(关联入库执行单) * @@ -27,4 +29,7 @@ public class ExecutionInMaterialDetailWithOrderPO extends ExecutionInMaterialDet @ApiModelProperty("货主名称") private String orderShipperName; + + @ApiModelProperty("入库日期") + private Date warehouseDate; } diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockOutOrder/service/ReservationStockOutOrderDomainService.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockOutOrder/service/ReservationStockOutOrderDomainService.java index 03be30fc3..aada73d53 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockOutOrder/service/ReservationStockOutOrderDomainService.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockOutOrder/service/ReservationStockOutOrderDomainService.java @@ -1127,6 +1127,10 @@ public class ReservationStockOutOrderDomainService { reservationStockInOrderMapper.updateByTransportationNumber(transportationNumber); LoginUser loginUser = SecurityUtils.getLoginUser(); BusinessDeliveryDetailsLink businessDeliveryDetailsLink = businessDeliveryDetailsLinkService.getOne(new QueryWrapper().lambda().eq(BusinessDeliveryDetailsLink::getInvoiceNumber, invoiceNumber), false); + List businessDeliveryDetailsLinks = businessDeliveryDetailsLinkService.list(new QueryWrapper().lambda().eq(BusinessDeliveryDetailsLink::getInvoiceNumber, invoiceNumber)); + if (businessDeliveryDetailsLinks!=null&&businessDeliveryDetailsLinks.size()>1) { + throw new ServiceException("存在发票号重复情况,请检查!"); + } if (businessDeliveryDetailsLink != null) { businessDeliveryDetailsLink.setIsReturn(1); // 1表示已退货 businessDeliveryDetailsLink.setUpdateBy(loginUser.getUserPo().getUserId()); @@ -1135,6 +1139,9 @@ public class ReservationStockOutOrderDomainService { businessDeliveryDetailsLinkService.updateById(businessDeliveryDetailsLink); // String invoiceNumber1 = businessDeliveryDetailsLink.getInvoiceNumber(); List list = reservationDeliveryDetailsLinkService.list(new QueryWrapper().lambda().eq(ReservationDeliveryDetailsLink::getInvoiceNumber, invoiceNumber)); + if (list != null && !list.isEmpty() && list.size()>1) { + throw new ServiceException("存在发票号重复情况,请检查!"); + } if (list != null && !list.isEmpty() && list.size()>0) { ReservationDeliveryDetailsLink reservationDeliveryDetailsLink = list.get(0); String orderNumber = reservationDeliveryDetailsLink.getOrderNumber(); @@ -1163,8 +1170,7 @@ public class ReservationStockOutOrderDomainService { reservationStockInOrder.setOrderTypeCode("tui_huo_ru_ku"); reservationStockInOrder.setBusinessType("tui_huo_ru_ku"); reservationStockInOrder.setReservationOrderSource("系统生成"); - reservationStockInOrder.setQuantity(new BigDecimal(bag)); -// reservationStockInOrder.setInQuantity(new BigDecimal(bag)); +// reservationStockInOrder.setQuantity(new BigDecimal(bag)); reservationStockInOrder.setRemark("发票号: "+invoiceNumber); reservationStockInOrder.setDirectWarehouse(1); reservationStockInOrder.setCloseOrder(2); @@ -1246,14 +1252,28 @@ public class ReservationStockOutOrderDomainService { /** * 生成出库预约单号: + * 生成后校验数据库中是否已存在,存在则序号加一,直至不重复为止 */ public String generateReserveOrderNumber() { SimpleDateFormat sdf = new SimpleDateFormat("yyMMdd"); String datePart = sdf.format(new Date()); String prefix = "C" + datePart; int todayCount = reservationStockOutOrderMapper.countByOrderNumberPrefix(prefix); - String seq = String.format("%03d", todayCount + 1); - return prefix + seq; + int seq = todayCount + 1; + String orderNumber; + do { + orderNumber = prefix + String.format("%03d", seq); + Integer count = reservationStockOutOrderMapper.selectCount( + new LambdaQueryWrapper() + .eq(ReservationStockOutOrder::getOutOrderNumber, orderNumber) + ); + if (count != null && count > 0) { + seq++; + } else { + break; + } + } while (true); + return orderNumber; } public String generateReserveOrderNumber1() { diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reserveStockInOrder/repository/vo/ReservedInventory.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reserveStockInOrder/repository/vo/ReservedInventory.java index a6b5c2830..ae068746f 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/reserveStockInOrder/repository/vo/ReservedInventory.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reserveStockInOrder/repository/vo/ReservedInventory.java @@ -1,5 +1,6 @@ package com.mhd.oms.domain.reserveStockInOrder.repository.vo; +import com.alibaba.excel.annotation.ExcelIgnore; import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.format.DateTimeFormat; import com.mhd.oms.domain.reserveStockInOrder.repository.util.StringToBigDecimalConverter; @@ -68,4 +69,10 @@ public class ReservedInventory { * 验证结果(导入后自动填充,不映射Excel) */ private String validationResult; + + /** + * WMS物料id(解析预览接口根据货物名称匹配后自动填充,匹配不到为空,不映射Excel) + */ + @ExcelIgnore + private Long materialBaseInfoId; } \ No newline at end of file diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reserveStockInOrder/service/ReserveStockInOrderApplicationService.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reserveStockInOrder/service/ReserveStockInOrderApplicationService.java index f0a8d2302..d67e648b3 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/reserveStockInOrder/service/ReserveStockInOrderApplicationService.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reserveStockInOrder/service/ReserveStockInOrderApplicationService.java @@ -1981,6 +1981,35 @@ public class ReserveStockInOrderApplicationService { return stockInOrderDomainService.queryNoticePrintDetail(stockInOrderDO); } + /** + * Excel解析预览:根据货物名称匹配WMS对应物料并填充物料id, + * 匹配不到物料id保持为空,不阻断解析 + */ + public void fillMaterialBaseInfoId(List dataList) { + if (dataList == null || dataList.isEmpty()) { + return; + } + // 物料名称匹配结果缓存,避免同名重复查库 + Map materialCache = new HashMap<>(); + for (ReservedInventory reservedInventory : dataList) { + String goodsName = reservedInventory.getGoodsName(); + if (StringUtils.isBlank(goodsName)) { + continue; + } + MaterialBaseInfoPO materialBaseInfoPO = materialCache.get(goodsName); + if (materialBaseInfoPO == null && !materialCache.containsKey(goodsName)) { + List materialBaseInfoPOS = reserveStockInOrderMapper.getByName(goodsName); + if (materialBaseInfoPOS != null && !materialBaseInfoPOS.isEmpty()) { + materialBaseInfoPO = materialBaseInfoPOS.get(0); + } + materialCache.put(goodsName, materialBaseInfoPO); + } + if (materialBaseInfoPO != null) { + reservedInventory.setMaterialBaseInfoId(materialBaseInfoPO.getMaterialBaseInfoId()); + } + } + } + public void importInData(List dataList) { LoginUser loginUser = SecurityUtils.getLoginUser(); ReserveStockInOrderDO reserveStockInOrder = new ReserveStockInOrderDO(); diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reserveStockOutOrder/entity/ReserveStockOutOrder.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reserveStockOutOrder/entity/ReserveStockOutOrder.java index 464ccbb11..df53789da 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/reserveStockOutOrder/entity/ReserveStockOutOrder.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reserveStockOutOrder/entity/ReserveStockOutOrder.java @@ -444,4 +444,9 @@ public class ReserveStockOutOrder extends BaseVOEntity { @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") private Date outboundTime; + @ApiModelProperty("预约业务类型") + private String reserveBusinessType; + @ApiModelProperty("预约业务类型名称") + private String reserveBusinessTypeName; + } \ No newline at end of file diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reserveStockOutOrder/repository/po/ReserveStockOutOrderPO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reserveStockOutOrder/repository/po/ReserveStockOutOrderPO.java index 6a1049f85..42a258d5c 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/reserveStockOutOrder/repository/po/ReserveStockOutOrderPO.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reserveStockOutOrder/repository/po/ReserveStockOutOrderPO.java @@ -452,4 +452,8 @@ public class ReserveStockOutOrderPO extends BaseVOEntity { @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") private Date outboundTime; + @ApiModelProperty("预约业务类型") + private String reserveBusinessType; + @ApiModelProperty("预约业务类型名称") + private String reserveBusinessTypeName; } \ No newline at end of file diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reserveStockOutOrder/repository/todo/ReserveStockOutOrderDO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reserveStockOutOrder/repository/todo/ReserveStockOutOrderDO.java index 1e7a27c9c..e15ccd96b 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/reserveStockOutOrder/repository/todo/ReserveStockOutOrderDO.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reserveStockOutOrder/repository/todo/ReserveStockOutOrderDO.java @@ -490,4 +490,8 @@ public class ReserveStockOutOrderDO extends BaseVOEntity { @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") private Date outboundTime; + @ApiModelProperty("预约业务类型") + private String reserveBusinessType; + @ApiModelProperty("预约业务类型名称") + private String reserveBusinessTypeName; } \ No newline at end of file diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reserveStockOutOrder/repository/todo/ReserveStockOutOrderDTO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reserveStockOutOrder/repository/todo/ReserveStockOutOrderDTO.java index 677164a2d..41fa9e8c1 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/reserveStockOutOrder/repository/todo/ReserveStockOutOrderDTO.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reserveStockOutOrder/repository/todo/ReserveStockOutOrderDTO.java @@ -479,4 +479,8 @@ public class ReserveStockOutOrderDTO extends ReserveStockOutOrderBaseDTO { @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") private Date outboundTime; + @ApiModelProperty("预约业务类型") + private String reserveBusinessType; + @ApiModelProperty("预约业务类型名称") + private String reserveBusinessTypeName; } \ No newline at end of file diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reserveStockOutOrder/repository/vo/ReservedInventoryOut.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reserveStockOutOrder/repository/vo/ReservedInventoryOut.java index 618ef5324..9beb82261 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/reserveStockOutOrder/repository/vo/ReservedInventoryOut.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reserveStockOutOrder/repository/vo/ReservedInventoryOut.java @@ -1,5 +1,6 @@ package com.mhd.oms.domain.reserveStockOutOrder.repository.vo; +import com.alibaba.excel.annotation.ExcelIgnore; import com.alibaba.excel.annotation.ExcelProperty; import com.mhd.oms.domain.reserveStockInOrder.repository.util.StringToBigDecimalConverter; import com.mhd.oms.domain.reserveStockInOrder.repository.util.StringToDateConverter; @@ -35,6 +36,19 @@ public class ReservedInventoryOut { /** * 验证结果(导入后自动填充,不映射Excel) + * @ExcelIgnore:排除在Excel列映射之外,避免被自动分配列索引 */ + @ExcelIgnore private String validationResult; + + /** + * WMS库存id(解析预览接口根据货物名称查询可用库存后自动填充,不映射Excel) + * @ExcelIgnore:Long类型字段若被自动映射到非数字列,会抛出ExcelDataConvertException + */ + @ExcelIgnore + private Long materialInventoryId; + + + @ExcelIgnore + private Long materialBaseInfoId; } \ No newline at end of file diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reserveStockOutOrder/service/ReserveStockOutOrderApplicationService.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reserveStockOutOrder/service/ReserveStockOutOrderApplicationService.java index bca9f5c24..210afd106 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/reserveStockOutOrder/service/ReserveStockOutOrderApplicationService.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reserveStockOutOrder/service/ReserveStockOutOrderApplicationService.java @@ -847,7 +847,7 @@ public class ReserveStockOutOrderApplicationService { * @description 审核入库单 * @author ZhouGY * @date 2024/5/21 13:53 - * @param stockInOrderDO + * @param stockOutOrderDO * @return Boolean */ public Boolean auditState(ReserveStockOutOrderDO stockOutOrderDO){ @@ -858,7 +858,7 @@ public class ReserveStockOutOrderApplicationService { * @description 下发入库单 * @author ZhouGY * @date 2024/5/21 13:53 - * @param stockInOrderDO + * @param stockOutOrderDO * @return Boolean */ public Boolean issueOrder(ReserveStockOutOrderDO stockOutOrderDO){ @@ -868,7 +868,7 @@ public class ReserveStockOutOrderApplicationService { * @description 审核入库单 * @author ZhouGY * @date 2024/5/21 13:53 - * @param stockInOrderDO + * @param stockOutOrderDO * @return Boolean */ public Boolean orderReject(ReserveStockOutOrderDO stockOutOrderDO){ @@ -1361,6 +1361,43 @@ public class ReserveStockOutOrderApplicationService { return result; } + /** + * Excel解析预览:根据货物名称查询WMS对应物料的库存信息, + * 可用数量大于导入数据件数的填充库存id; + * 物料不存在、无库存或可用数量不足时库存id保持为空,不抛异常 + */ + public void fillMaterialInventoryId(List dataList) { + if (CollectionUtils.isEmpty(dataList)) { + return; + } + for (ReservedInventoryOut reservedInventory : dataList) { + String goodsName = reservedInventory.getGoodsName(); + BigDecimal importQuantity = reservedInventory.getQuantity() == null ? BigDecimal.ZERO : reservedInventory.getQuantity(); + // 根据货物名称查询对应物料,匹配不到则库存id为空 + List materialBaseInfoPOS = reserveStockInOrderMapper.getByName(goodsName); + if (materialBaseInfoPOS == null || materialBaseInfoPOS.isEmpty()) { + continue; + } + Long materialBaseInfoId = materialBaseInfoPOS.get(0).getMaterialBaseInfoId(); + // 根据物料id查询对应库存,无库存则库存id为空 + List reservationMaterialInventories = reservationMaterialInventoryMapper.selectList( + new LambdaQueryWrapper() + .eq(ReservationMaterialInventory::getMaterialBaseInfoId, materialBaseInfoId)); + if (reservationMaterialInventories == null || reservationMaterialInventories.isEmpty()) { + continue; + } + // 取可用数量大于导入数据件数的库存,填充库存id;都不满足则库存id为空 + for (ReservationMaterialInventory inventory : reservationMaterialInventories) { + BigDecimal allocationQuantity = inventory.getAllocationQuantity() == null ? BigDecimal.ZERO : inventory.getAllocationQuantity(); + if (allocationQuantity.compareTo(importQuantity) > 0) { + reservedInventory.setMaterialInventoryId(inventory.getMaterialInventoryId()); + reservedInventory.setMaterialBaseInfoId(inventory.getMaterialBaseInfoId()); + break; + } + } + } + } + public void importInData(List dataList) { LoginUser loginUser = SecurityUtils.getLoginUser(); ReserveStockOutOrderDO reserveStockOutOrder = new ReserveStockOutOrderDO(); diff --git a/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/ReserveStockOutOrder/ReserveStockOutOrderApi.java b/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/ReserveStockOutOrder/ReserveStockOutOrderApi.java index 14e6d1f9e..5be6eb209 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/ReserveStockOutOrder/ReserveStockOutOrderApi.java +++ b/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/ReserveStockOutOrder/ReserveStockOutOrderApi.java @@ -296,6 +296,31 @@ public class ReserveStockOutOrderApi extends BaseController { } } + /** + * 仅解析Excel文件内容并返回,不执行入库 + * 同时根据货物名称查询WMS对应物料库存,可用数量大于件数的返回库存id,匹配不到库存id返回空 + */ + @ApiOperation("解析导入Excel(仅解析不入库)") + @PostMapping("/parseExcel") + public ResponseEntity> parseExcel(@RequestParam("file") MultipartFile file) { + List dataList = null; + try { + dataList = ExcelParseUtil.parseExcel(file); + } catch (IOException e) { + throw new RuntimeException(e); + } + + // 根据货物名称查询WMS库存并填充库存id,匹配不到库存id返回空 + stockOutOrderApplicationService.fillMaterialInventoryId(dataList); + + Map successResponse = new HashMap<>(); + successResponse.put("code", 200); + successResponse.put("message", "Excel解析成功"); + successResponse.put("dataCount", dataList.size()); + successResponse.put("details", dataList); + return ResponseEntity.ok(successResponse); + } + /** * 生成出库预约单号 */ diff --git a/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/reserveStockInOrder/ReserveStockInOrderApi.java b/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/reserveStockInOrder/ReserveStockInOrderApi.java index f1526fe43..66a8e66a6 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/reserveStockInOrder/ReserveStockInOrderApi.java +++ b/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/reserveStockInOrder/ReserveStockInOrderApi.java @@ -260,6 +260,52 @@ public class ReserveStockInOrderApi extends BaseController { } } + /** + * 仅解析Excel文件内容并返回,不执行入库 + * 同时根据货物名称匹配WMS物料并返回物料id,匹配不到返回空 + */ + @ApiOperation("解析导入Excel(仅解析不入库)") + @PostMapping("/parseExcel") + public ResponseEntity> parseExcel(@RequestParam("file") MultipartFile file) { + try { + List dataList = ExcelParseUtil.parseExcel(file); + + // 根据货物名称匹配WMS物料并填充物料id,匹配不到返回空 + stockInOrderApplicationService.fillMaterialBaseInfoId(dataList); + + Map successResponse = new HashMap<>(); + successResponse.put("code", 200); + successResponse.put("message", "Excel解析成功"); + successResponse.put("dataCount", dataList.size()); + successResponse.put("details", dataList); + return ResponseEntity.ok(successResponse); + + } catch (ValidationException e) { + // 数据验证失败响应 + Map errorResponse = new HashMap<>(); + errorResponse.put("code", 400); + errorResponse.put("message", "数据验证失败"); + errorResponse.put("errorDetails", e.getMessage()); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(errorResponse); + + } catch (IOException e) { + // 文件处理失败响应 + Map errorResponse = new HashMap<>(); + errorResponse.put("code", 500); + errorResponse.put("message", "文件处理失败"); + errorResponse.put("errorDetails", e.getMessage()); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(errorResponse); + + } catch (Exception e) { + // 其他未知错误响应 + Map errorResponse = new HashMap<>(); + errorResponse.put("code", 500); + errorResponse.put("message", e.getMessage()); + errorResponse.put("errorDetails", e.getMessage()); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(errorResponse); + } + } + /** * 老系统入库预约单数据导入(主表+明细两个Excel文件批量导入,按名称匹配基础数据) */ diff --git a/mhd_oms/src/main/resources/mapper/executionInMaterialDetail/executionInMaterialDetailMapper.xml b/mhd_oms/src/main/resources/mapper/executionInMaterialDetail/executionInMaterialDetailMapper.xml index fd4e7b2d0..cb7efac12 100644 --- a/mhd_oms/src/main/resources/mapper/executionInMaterialDetail/executionInMaterialDetailMapper.xml +++ b/mhd_oms/src/main/resources/mapper/executionInMaterialDetail/executionInMaterialDetailMapper.xml @@ -97,6 +97,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + @@ -366,6 +368,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + SELECT in_order_number FROM reserve_stock_in_order WHERE in_order_number LIKE concat(#{prefix}, '%') - AND del_flag = 1 + AND organization_id = #{organizationId} @@ -847,7 +847,7 @@ SELECT in_order_number FROM reservation_stock_in_order WHERE in_order_number LIKE concat(#{prefix}, '%') - AND del_flag = 1 + AND organization_id = #{organizationId} @@ -859,7 +859,7 @@ SELECT in_order_number FROM execution_stock_in_order WHERE in_order_number LIKE concat(#{prefix}, '%') - AND del_flag = 1 + AND organization_id = #{organizationId} @@ -871,7 +871,7 @@ SELECT in_order_number FROM NGWL_TEST_WMS.stock_in_order WHERE in_order_number LIKE concat(#{prefix}, '%') - AND del_flag = 1 + AND organization_id = #{organizationId} diff --git a/mhd_oms/src/main/resources/mapper/reserveStockOutOrder/ReserveStockOutOrderMapper.xml b/mhd_oms/src/main/resources/mapper/reserveStockOutOrder/ReserveStockOutOrderMapper.xml index 5d27761f8..7ce415d78 100644 --- a/mhd_oms/src/main/resources/mapper/reserveStockOutOrder/ReserveStockOutOrderMapper.xml +++ b/mhd_oms/src/main/resources/mapper/reserveStockOutOrder/ReserveStockOutOrderMapper.xml @@ -95,6 +95,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + @@ -112,7 +114,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" a.COMPLETE_TIME,a.ORDER_DATE,a.TRANSPORT_MODE_CODE,a.TRANSPORT_MODE_NAME,a.SUPERVISION_MODE_CODE,a.SUPERVISION_MODE_NAME, a.CUSTOMS_INSPECTION_FLAG,a.NEED_DECLARE_FLAG,a.NEED_TRANSPORT_FLAG,a.picture_app,a.reservation_audit_time,a.reservation_audit_name ,a.reservation_audit_id,a.issue_name,a.issue_id,a.issue_time,a.issue_status,a.tms_order_number, - a.DIRECTOR_NAME ,a.DIRECTOR_PHONE,a.DIRECTOR_ID,a.RESERVATION_ORDER_SOURCE,a.OUTBOUND_TIME + a.DIRECTOR_NAME ,a.DIRECTOR_PHONE,a.DIRECTOR_ID,a.RESERVATION_ORDER_SOURCE,a.OUTBOUND_TIME,a.RESERVE_BUSINESS_TYPE,a.RESERVE_BUSINESS_TYPE_NAME @@ -132,6 +134,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and a.out_order_id = #{outOrderId} + + and a.reserve_business_type = #{reserveBusinessType} + and a.organization_id = #{organizationId} @@ -553,7 +558,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" SELECT in_order_number FROM NGWL_TEST_OMS.reserve_stock_in_order WHERE in_order_number LIKE concat(#{prefix}, '%') - AND del_flag = 1 + AND organization_id = #{organizationId} @@ -636,7 +636,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" SELECT in_order_number FROM NGWL_TEST_OMS.reservation_stock_in_order WHERE in_order_number LIKE concat(#{prefix}, '%') - AND del_flag = 1 + AND organization_id = #{organizationId} @@ -648,7 +648,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" SELECT in_order_number FROM NGWL_TEST_OMS.execution_stock_in_order WHERE in_order_number LIKE concat(#{prefix}, '%') - AND del_flag = 1 + AND organization_id = #{organizationId} @@ -660,7 +660,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" SELECT in_order_number FROM stock_in_order WHERE in_order_number LIKE concat(#{prefix}, '%') - AND del_flag = 1 + AND organization_id = #{organizationId} diff --git a/mhd_wms/src/main/resources/mapper/stockOutOrder/StockOutOrderMapper.xml b/mhd_wms/src/main/resources/mapper/stockOutOrder/StockOutOrderMapper.xml index 8babfe003..ac19f2b19 100644 --- a/mhd_wms/src/main/resources/mapper/stockOutOrder/StockOutOrderMapper.xml +++ b/mhd_wms/src/main/resources/mapper/stockOutOrder/StockOutOrderMapper.xml @@ -531,7 +531,7 @@