From 1da755a2249dd1dc6f98794279feef50221788b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=99=93=E8=BF=AA?= <2596750866@qq.com> Date: Mon, 30 Dec 2024 08:45:03 +0800 Subject: [PATCH] =?UTF-8?q?[feat]=20=E4=BB=93=E5=BA=93=E7=AE=A1=E7=90=86?= =?UTF-8?q?=20=E5=85=A5=E5=BA=93=E5=8D=95=20=E4=BF=AE=E6=94=B9=E5=A7=94?= =?UTF-8?q?=E5=A4=96=E5=85=A5=E5=BA=93=E9=A1=B5=E9=9D=A2=EF=BC=8C=E5=8E=BB?= =?UTF-8?q?=E9=99=A4=E7=BC=96=E8=BE=91=E8=A1=8C=E6=A0=B7=E5=BC=8F=EF=BC=9B?= =?UTF-8?q?=20=E4=BF=AE=E6=94=B9=E5=A7=94=E5=A4=96=E6=9A=82=E6=94=B6?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=EF=BC=8C=E6=9A=82=E6=94=B6=E5=90=88=E6=A0=BC?= =?UTF-8?q?=E6=95=B0=E6=B7=BB=E5=8A=A0=E7=A9=BA=E5=80=BC=E5=88=9D=E5=A7=8B?= =?UTF-8?q?=E5=8C=96=EF=BC=9B=20=E4=BF=AE=E6=94=B9=E4=BF=9D=E5=AD=98?= =?UTF-8?q?=E5=85=A5=E5=BA=93=E5=A7=94=E5=A4=96=E5=85=A5=E5=BA=93service?= =?UTF-8?q?=E6=96=B9=E6=B3=95=EF=BC=8C=E5=85=B3=E8=81=94=E5=BA=93=E5=AD=98?= =?UTF-8?q?=EF=BC=9B=20=E4=BF=AE=E6=94=B9=E6=9B=B4=E6=96=B0=E5=BA=93?= =?UTF-8?q?=E5=AD=98=E6=9F=A5=E8=AF=A2service=E6=96=B9=E6=B3=95=EF=BC=8C?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=A7=94=E5=A4=96=E7=B1=BB=E5=9E=8B=E5=85=A5?= =?UTF-8?q?=E5=BA=93=EF=BC=9B=20=E4=BF=AE=E6=94=B9=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E9=80=80=E6=96=99=E5=8D=95=E5=BA=93=E5=AD=98=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?service=E6=96=B9=E6=B3=95=E7=9C=8B=EF=BC=8C=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E5=91=98=E5=B7=A5=E9=80=80=E6=96=99=E5=A4=84=E7=90=86=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../WarehouseStorageOrderServiceImpl.java | 147 ++++++++++-------- .../storageOrder/storageOutOrder.html | 1 - .../storageOrder/temporaryOutOrder.html | 26 +++- 3 files changed, 102 insertions(+), 72 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/warehouse/service/impl/WarehouseStorageOrderServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/warehouse/service/impl/WarehouseStorageOrderServiceImpl.java index a719ad53..506b64d7 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/warehouse/service/impl/WarehouseStorageOrderServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/warehouse/service/impl/WarehouseStorageOrderServiceImpl.java @@ -146,6 +146,9 @@ public class WarehouseStorageOrderServiceImpl implements IWarehouseStorageOrderS @Autowired private ISysRemindService remindService; + @Autowired + private BaseEmpRequisiteOrderChildMapper empRequisiteOrderChildMapper; + /** * 查询仓库入库单 * @@ -515,79 +518,73 @@ public class WarehouseStorageOrderServiceImpl implements IWarehouseStorageOrderS public int updateOutsourceStorageSave(WarehouseStorageOrder warehouseStorageOrder) { String loginName = ShiroUtils.getLoginName(); - warehouseStorageOrder.setUpdateBy(loginName); - warehouseStorageOrder.setUpdateTime(DateUtils.getNowDate()); - //记录一下入库时间 - warehouseStorageOrder.setStorageTime(DateUtils.getNowDate()); List storageOrderDetailList = warehouseStorageOrder.getWarehouseStorageOrderDetailList(); if (StringUtils.isEmpty(storageOrderDetailList)){ throw new BusinessException("入库单详情数据为空"); } + WarehouseStorageOrder oldStorageOrder = warehouseStorageOrderMapper.selectStorageOrderByCode(warehouseStorageOrder.getWarehouseStorageCode()); //入库数 Integer storageNum = 0; - // 检查storageNum是否含有null值 - boolean hasThisStorageNumNull = storageOrderDetailList.stream() - .anyMatch(item -> item.getStorageNum() == null); - - if (hasThisStorageNumNull) { - throw new BusinessException("存在入库数为空,请检查!"); + // 检查storageNum是否含有null值 + List filtList = storageOrderDetailList.stream() + .filter(item ->item.getStorageNum()!=null).collect(Collectors.toList()); + if (filtList.size()==0) { + throw new BusinessException("实际出库数不能全为空,请检查!"); } - // 计算各个字段的总和 - storageNum = storageOrderDetailList.stream() + // 计算各个详情入库数的总和 + storageNum = filtList.stream() .mapToInt(WarehouseStorageOrderDetail::getStorageNum) .sum(); - - for (WarehouseStorageOrderDetail detail: storageOrderDetailList) { + for (WarehouseStorageOrderDetail detail: filtList) { int detailStorageNum = detail.getHasStorageNum() + detail.getStorageNum(); - if(detailStorageNum > detail.getQualityQualifiedNum()){ + if(detailStorageNum > detail.getQualityHasQualifiedNum()){ throw new BusinessException("物料" +detail.getMaterialNo()+ "总入库数大于品质合格数"); } } - //插入主表入库数量 - int orderStorageNum = warehouseStorageOrder.getStorageNum(); + int orderStorageNum = oldStorageOrder.getStorageNum(); orderStorageNum = orderStorageNum + storageNum; - warehouseStorageOrder.setStorageNum(orderStorageNum); + oldStorageOrder.setStorageNum(orderStorageNum); - for (WarehouseStorageOrderDetail storageOrderDetail : storageOrderDetailList) { + for (WarehouseStorageOrderDetail detail : filtList) { //更新入库单详情的数据 - storageOrderDetail.setUpdateBy(loginName); - storageOrderDetail.setUpdateTime(DateUtils.getNowDate()); + detail.setUpdateBy(loginName); + detail.setUpdateTime(DateUtils.getNowDate()); //更新已入库数 - int detailStorageNum = storageOrderDetail.getHasStorageNum() + storageOrderDetail.getStorageNum(); - storageOrderDetail.setHasStorageNum(detailStorageNum); - int updateWarehouseStorageOrderDetailResult = storageOrderDetailMapper.updateWarehouseStorageOrderDetail(storageOrderDetail); + int detailHasStockNum = Optional.ofNullable(detail.getHasStorageNum()).orElse(0); + int detailStorageNum = detailHasStockNum + detail.getStorageNum(); + detail.setHasStorageNum(detailStorageNum); + int updateWarehouseStorageOrderDetailResult = storageOrderDetailMapper.updateWarehouseStorageOrderDetail(detail); if (updateWarehouseStorageOrderDetailResult <= 0){ throw new BusinessException("更新仓库入库单详情失败,未影响任何行"); } //更新委外入库单详情,(只更新子表,详情页面需要展示,主表直接使用入库单,不存在 OutsourceStorageDetail tempOut = new OutsourceStorageDetail(); - tempOut.setWarehouseStorageCode(storageOrderDetail.getWarehouseStorageCode()); - tempOut.setMaterialNo(storageOrderDetail.getMaterialNo()); + tempOut.setWarehouseStorageCode(detail.getWarehouseStorageCode()); + tempOut.setMaterialNo(detail.getMaterialNo()); List outStorageDetails = outsourceStorageDetailMapper.selectOutsourceStorageDetailList(tempOut); OutsourceStorageDetail updateDetail = outStorageDetails.get(0); - updateDetail.setTakenMaterial(new BigDecimal(storageOrderDetail.getHasStorageNum()));//入库单详情已领料数已更新 + updateDetail.setTakenMaterial(new BigDecimal(detail.getHasStorageNum()));//入库单详情已领料数已更新 updateDetail.setUpdateBy(loginName); updateDetail.setUpdateTime(DateUtils.getNowDate()); int outUpdateResult = outsourceStorageDetailMapper.updateOutsourceStorageDetail(updateDetail); if(outUpdateResult<=0){ throw new BusinessException("更新委外入库单详情失败!"); } - - WarehouseStorageOrderDetail updateStorageOrderDetail = storageOrderDetailMapper.selectWarehouseStorageOrderDetailById(storageOrderDetail.getWarehouseStorageDetailId()); + /*更新库存查询信息*/ + WarehouseStorageOrderDetail updateStorageOrderDetail = storageOrderDetailMapper.selectWarehouseStorageOrderDetailById(detail.getWarehouseStorageDetailId()); createWarehouseInventoryInquiry(updateStorageOrderDetail); - } - //更新入库单的数据 + oldStorageOrder.setUpdateBy(loginName); + oldStorageOrder.setUpdateTime(DateUtils.getNowDate()); + oldStorageOrder.setStorageTime(DateUtils.getNowDate()); int updateResult = warehouseStorageOrderMapper.updateWarehouseStorageOrder(warehouseStorageOrder); - if (updateResult <= 0){ - log.warn("更新入库单失败,未影响任何行"); + throw new BusinessException("更新入库单失败,未影响任何行"); } return updateResult; - } /** @@ -741,22 +738,6 @@ public class WarehouseStorageOrderServiceImpl implements IWarehouseStorageOrderS } - -// 根据入库单(采购订单)关联品质单获取历史总数(已到货数-品质不合格数)(采购总数-退换货数) - public BigDecimal getHistoricalTotalFromQualityOrder(WarehouseStorageOrderDetail warehouseStorageOrderDetail){ - BigDecimal historicalTotal = BigDecimal.ZERO; - QualityOrderDetail tempDetail = new QualityOrderDetail(); - tempDetail.setInStorageCode(warehouseStorageOrderDetail.getWarehouseStorageCode()); - tempDetail.setMaterialNo(warehouseStorageOrderDetail.getMaterialNo()); - - QualityOrderDetail qualityOrderDetail = qualityOrderDetailMapper.selectQualityOrderDetailByStorageCodeAndno(tempDetail); - Integer actualArriveNum = qualityOrderDetail.getCheckNum(); - Integer qualityUnqualifiedNum = qualityOrderDetail.getQualityUnqualifiedNum(); - - historicalTotal = BigDecimal.valueOf(actualArriveNum) - .subtract(BigDecimal.valueOf(qualityUnqualifiedNum)); - return historicalTotal; - } /** * 修改保存入库-采购单(仓库入库) */ @@ -1749,7 +1730,12 @@ public class WarehouseStorageOrderServiceImpl implements IWarehouseStorageOrderS sharedNum = Optional.ofNullable(pickDetails.get(0).getSharedStockNum()) .orElse(0); }else if(pickNo.startsWith("YGLL")){ - + BaseEmpRequisiteOrderChild tempChild = new BaseEmpRequisiteOrderChild(); + tempChild.setQuoteId(pickNo); + tempChild.setMaterialCode(storageOrderDetail.getMaterialNo()); + List pickDetails = empRequisiteOrderChildMapper.selectBaseEmpRequisiteOrderChildList(tempChild); + sharedNum = Optional.ofNullable(pickDetails.get(0).getSharedStockAllocatedNum()) + .orElse(0); } /*获取该领料单关联所有退料单详情实际总退料数,以便计算归还固定和共享库存数*/ BaseReturnOrderDetail tempReturnDetail = new BaseReturnOrderDetail(); @@ -1988,21 +1974,56 @@ public class WarehouseStorageOrderServiceImpl implements IWarehouseStorageOrderS if (insertDetailResult <= 0){ throw new BusinessException("新增库存履历失败!"); } - }else if(warehouseStorageType.equals("4")){//新增委外入库库存历史记录 - WarehouseInventoryInquiryDetail inquiryDetail = new WarehouseInventoryInquiryDetail(); - inquiryDetail = createMakeInOrderInquiryDetail(warehouseStorageOrderDetail); -// inquiryDetail.setInventoryHistoricalType("2"); - inventoryInquiryDetailMapper.insertWarehouseInventoryInquiryDetail(inquiryDetail); } - //查询该物料报损数,更新库存查询报损数 - List damageChildren = damageChildMapper.selectWarehouseInventoryReportDamageChildByMaterialNo(materialNo); - Integer scrapSum = 0; - if(StringUtils.isNotEmpty(damageChildren)){ - for (WarehouseInventoryReportDamageChild damageChild:damageChildren) { - Integer scrapNum = damageChild.getActualScrapQuantity(); - scrapSum += scrapSum; + else if(warehouseStorageType.equals("4")){//新增委外入库库存历史记录 + WarehouseInventoryInquiry oldWarehouseInventoryInquiry = warehouseInventoryInquiryMapper.selectWarehouseInventoryInquiryByMaterialNo(materialNo); + Integer historicalTotal = oldWarehouseInventoryInquiry.getHistoricalTotal(); + historicalTotal += storageNum; + oldWarehouseInventoryInquiry.setHistoricalTotal(historicalTotal); + + Integer availableStockNum = oldWarehouseInventoryInquiry.getAvailableStockNum(); + if (availableStockNum == null || availableStockNum == 0){ + availableStockNum = storageNum; + }else { + availableStockNum += storageNum; + } + oldWarehouseInventoryInquiry.setAvailableStockNum(availableStockNum); + + Integer fixedAvailableStockNum = oldWarehouseInventoryInquiry.getFixedAvailableStockNum();//固定可用库存 + if (fixedAvailableStockNum == null || fixedAvailableStockNum == 0){ + fixedAvailableStockNum = storageNum; + }else { + fixedAvailableStockNum += storageNum; + } + oldWarehouseInventoryInquiry.setFixedAvailableStockNum(fixedAvailableStockNum); + + int updateResult = warehouseInventoryInquiryService.updateWarehouseInventoryInquiry(oldWarehouseInventoryInquiry); + if (updateResult <= 0){ + throw new BusinessException("更新库存查询记录失败!"); + } + + remindService.warehouseSafetyStockRemind(oldWarehouseInventoryInquiry); + + WarehouseInventoryInquiryDetail inquiryDetail = createMakeInOrderInquiryDetail(warehouseStorageOrderDetail); + + inquiryDetail.setInquiryWarehouseType("2");//委外入库 + inquiryDetail.setInquiryOrderType("2");//委外入库单 + inquiryDetail.setInquiryBusinessType("2");//委外 + + int insertDetailResult = inventoryInquiryDetailMapper.insertWarehouseInventoryInquiryDetail(inquiryDetail); + if (insertDetailResult <= 0){ + throw new BusinessException("新增库存履历失败!"); } } + //查询该物料报损数,更新库存查询报损数 +// List damageChildren = damageChildMapper.selectWarehouseInventoryReportDamageChildByMaterialNo(materialNo); +// Integer scrapSum = 0; +// if(StringUtils.isNotEmpty(damageChildren)){ +// for (WarehouseInventoryReportDamageChild damageChild:damageChildren) { +// Integer scrapNum = damageChild.getActualScrapQuantity(); +// scrapSum += scrapSum; +// } +// } } //生成入库库存历史记录 diff --git a/ruoyi-admin/src/main/resources/templates/warehouse/storageOrder/storageOutOrder.html b/ruoyi-admin/src/main/resources/templates/warehouse/storageOrder/storageOutOrder.html index cb3f88c7..4e4deeb5 100644 --- a/ruoyi-admin/src/main/resources/templates/warehouse/storageOrder/storageOutOrder.html +++ b/ruoyi-admin/src/main/resources/templates/warehouse/storageOrder/storageOutOrder.html @@ -282,7 +282,6 @@ field: 'storageNum', editable:{ type: 'text', - mode:'inline', validate: function (v) { if (!v) return '数量不能为空'; if (isNaN(v)) return '数量必须是数字'; diff --git a/ruoyi-admin/src/main/resources/templates/warehouse/storageOrder/temporaryOutOrder.html b/ruoyi-admin/src/main/resources/templates/warehouse/storageOrder/temporaryOutOrder.html index 08e90f5e..ae2d0825 100644 --- a/ruoyi-admin/src/main/resources/templates/warehouse/storageOrder/temporaryOutOrder.html +++ b/ruoyi-admin/src/main/resources/templates/warehouse/storageOrder/temporaryOutOrder.html @@ -201,31 +201,31 @@ } }, { - title: '物料图片地址', + title: '图片', align: 'center', field: 'materialPhotourl', }, { - title: '物料型号', + title: '型号', field: 'materialModel', }, { - title: '物料描述', + title: '描述', align: 'center', field: 'materialDescribe', }, { - title: '物料品牌', + title: '品牌', align: 'center', field: 'materialBrand', }, { - title: '物料单位', + title: '单位', align: 'center', field: 'materialUnit', }, { - title: '物料加工方式', + title: '加工方式', align: 'center', field: 'materialProcessMethod', formatter: function(value, row, index) { @@ -272,9 +272,14 @@ title: '实际到货数', align: 'center', field: 'actualArriveNum', + formatter: function(value, row, index) { + if(value === null||value === undefined){ + value = ''; + } + return value; + }, editable:{ type: 'text', - mode:'inline', validate: function (v) { if (!v) return '数量不能为空'; if (isNaN(v)) return '数量必须是数字'; @@ -288,9 +293,14 @@ title: '暂收合格数', align: 'center', field: 'temporaryQualifiedNum', + formatter: function(value, row, index) { + if(value === null||value === undefined){ + value = ''; + } + return value; + }, editable:{ type: 'text', - mode:'inline', validate: function (v) { if (!v) return '数量不能为空'; if (isNaN(v)) return '数量必须是数字';