diff --git a/ruoyi-admin/src/main/java/com/ruoyi/system/mapper/SysMakeorderPickMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/system/mapper/SysMakeorderPickMapper.java index f979c7eb..de528b74 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/system/mapper/SysMakeorderPickMapper.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/system/mapper/SysMakeorderPickMapper.java @@ -92,4 +92,10 @@ public interface SysMakeorderPickMapper // 根据单号集合查询生产领料单 public List selectSysMakeorderPickListByNos(String[] pickNos); + + /** + * 通过出库单号查询生产领料单 + * */ + SysMakeorderPick selectSysMakeorderPickByOutOrderCode(String outOrderCode); + } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/warehouse/controller/WarehouseOutOrderController.java b/ruoyi-admin/src/main/java/com/ruoyi/warehouse/controller/WarehouseOutOrderController.java index b7a8bce3..83b2e12e 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/warehouse/controller/WarehouseOutOrderController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/warehouse/controller/WarehouseOutOrderController.java @@ -308,8 +308,23 @@ public class WarehouseOutOrderController extends BaseController return prefix + "/makeOutWarehouseDetail"; } + + /** - * 生产单-出库 + * 修改保存生产单-出库详情 + */ + @Log(title = "仓库出库单", businessType = BusinessType.UPDATE) + @PostMapping("/makeOutWarehouseDetail") + @ResponseBody + public AjaxResult makeOutWarehouseDetailSave(@RequestBody WarehouseOutOrder warehouseOutOrder) + { + return toAjax(warehouseOutOrderService.generalUpdateWarehouseOutOrder(warehouseOutOrder)); + } + + + + /** + * 开发修改单-出库 */ @GetMapping("/developModifyOutWarehouse/{outOrderId}") public String developModifyOutWarehouse(@PathVariable("outOrderId") Long outOrderId, ModelMap mmap) @@ -320,7 +335,7 @@ public class WarehouseOutOrderController extends BaseController } /** - * 修改保存生产单-出库 + * 修改保存开发修改单-出库 */ @RequiresPermissions("warehouse:warehouseOutOrder:developModifyOutWarehouse") @Log(title = "仓库出库单", businessType = BusinessType.UPDATE) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/warehouse/domain/WarehouseOutOrder.java b/ruoyi-admin/src/main/java/com/ruoyi/warehouse/domain/WarehouseOutOrder.java index 8e4fc083..1d451a6a 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/warehouse/domain/WarehouseOutOrder.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/warehouse/domain/WarehouseOutOrder.java @@ -30,7 +30,7 @@ public class WarehouseOutOrder extends BaseEntity /** 关联生产订单号 */ private String makeNo; - /** 出库状态 */ + /** 出库状态(0待仓库准备物料、1待售后维护设备1、2待业务确认发货、3待售后维护设备2、4待出库、5部分出库、6全部出库、7已出库、8已取消、9待收货、10待验收、11部分验收、12全部验收) */ @Excel(name = "出库状态",dictType = "warehouse_out_status") private String warehouseOutStatus; diff --git a/ruoyi-admin/src/main/java/com/ruoyi/warehouse/service/IWarehouseOutOrderService.java b/ruoyi-admin/src/main/java/com/ruoyi/warehouse/service/IWarehouseOutOrderService.java index 85318512..d5728b08 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/warehouse/service/IWarehouseOutOrderService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/warehouse/service/IWarehouseOutOrderService.java @@ -142,4 +142,5 @@ public interface IWarehouseOutOrderService * 销售单-出库 物料信息关联设备子表信息 */ List showAftersalesShippingDeviceListTwo(WarehouseOutOrder warehouseOutOrder); + } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/warehouse/service/impl/WarehouseOutOrderServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/warehouse/service/impl/WarehouseOutOrderServiceImpl.java index 3fbc9435..a1d5696f 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/warehouse/service/impl/WarehouseOutOrderServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/warehouse/service/impl/WarehouseOutOrderServiceImpl.java @@ -866,74 +866,115 @@ public class WarehouseOutOrderServiceImpl implements IWarehouseOutOrderService throw new BusinessException("更新出库单信息失败:缺少必要参数"); } + WarehouseOutOrder oldWarehouseOutOrder = warehouseOutOrderMapper.selectWarehouseOutOrderByCode(warehouseOutOrder.getOutOrderCode()); + if (oldWarehouseOutOrder == null){ + log.warn("更新出库单信息失败:出库单号为空:{}",warehouseOutOrder.getOutOrderCode()); + throw new BusinessException("出库单号为空"); + } + + //查询数据库中的生产领料单 + SysMakeorderPick oldMakeorderPick = sysMakeorderPickMapper.selectSysMakeorderPickByOutOrderCode(warehouseOutOrder.getOutOrderCode()); + List warehouseOutOrderDetailList = warehouseOutOrder.getWarehouseOutOrderDetailList(); + + // 检查outOrderSum是否含有null值 + boolean hasOutOrderSumNull = warehouseOutOrderDetailList.stream() + .anyMatch(item -> item.getActualOutOrderSum() == null); + + if (hasOutOrderSumNull) { + throw new BusinessException("存在实际出库数为空,请检查!"); + } + + + //出库数 + Integer outOrderSum = 0; + if (CollectionUtils.isEmpty(warehouseOutOrderDetailList)){ log.warn("保存生产单出库,物料列表信息为空:{}",warehouseOutOrder); throw new BusinessException("出库单详情数据为空"); }else { + + outOrderSum = warehouseOutOrderDetailList.stream().mapToInt(WarehouseOutOrderDetail::getActualOutOrderSum).sum(); + + Integer oldOutOrderSum = oldWarehouseOutOrder.getOutOrderSum(); + if (oldOutOrderSum == null || oldOutOrderSum == 0){ + oldOutOrderSum = outOrderSum; + }else { + oldOutOrderSum += outOrderSum; + } + warehouseOutOrder.setOutOrderSum(oldOutOrderSum); + int updateRows = 0; for (WarehouseOutOrderDetail warehouseOutOrderDetail : warehouseOutOrderDetailList) { warehouseOutOrderDetail.setUpdateBy(loginName); warehouseOutOrderDetail.setUpdateTime(new Date()); warehouseOutOrderDetail.setRemark(warehouseOutOrder.getRemark()); + + Integer applyOutOrderSum = warehouseOutOrderDetail.getApplyOutOrderSum(); + Integer hasOutOrderSum = warehouseOutOrderDetail.getHasOutOrderSum(); + Integer actualOutOrderSum = warehouseOutOrderDetail.getActualOutOrderSum(); + if (actualOutOrderSum > applyOutOrderSum ){ + throw new BusinessException("实际出库数不能大于申请出库数"); + } + if (hasOutOrderSum == null || hasOutOrderSum == 0){ + hasOutOrderSum= actualOutOrderSum; + }else { + hasOutOrderSum += actualOutOrderSum; + } + if (hasOutOrderSum > applyOutOrderSum ){ + throw new BusinessException("已出库数不能大于申请出库数"); + } + //设置已出库数 - warehouseOutOrderDetail.setHasOutOrderSum(warehouseOutOrderDetail.getActualOutOrderSum()); + warehouseOutOrderDetail.setHasOutOrderSum(hasOutOrderSum); + //设置仓库员 warehouseOutOrderDetail.setWarehouseName(loginName); //更新数据库记录 updateRows += outOrderDetailMapper.updateWarehouseOutOrderDetail(warehouseOutOrderDetail); if (updateRows <= 0){ throw new BusinessException("更新出库单详情数据失败"); - }else { -// 更新库存查询记录,新增库存历史 - String materialNo = warehouseOutOrderDetail.getMaterialNo(); - WarehouseInventoryInquiry inventoryInquiry = inventoryInquiryMapper.selectWarehouseInventoryInquiryByMaterialNo(materialNo); - if(inventoryInquiry == null){ - throw new BusinessException("更新库存查询数据失败!该物料不存在库存数据"); - }else{ - int inquiryUpdateResult = updateWarehouseInventoryInquiry(warehouseOutOrderDetail,inventoryInquiry); - if (inquiryUpdateResult <= 0){ - throw new BusinessException("更新库存查询数据失败"); - } - WarehouseInventoryInquiryDetail inquiryDetail = createWarehouseInventoryInquiryDetail(warehouseOutOrderDetail); - inquiryDetail.setInventoryHistoricalType("4");//生产出库 - int insertInquiryResult = inventoryInquiryDetailMapper.insertWarehouseInventoryInquiryDetail(inquiryDetail); - if (insertInquiryResult <= 0){ - throw new BusinessException("新增库存历史数据失败"); - } - } } +// else { + //// 更新库存查询记录,新增库存历史 +// String materialNo = warehouseOutOrderDetail.getMaterialNo(); +// WarehouseInventoryInquiry inventoryInquiry = inventoryInquiryMapper.selectWarehouseInventoryInquiryByMaterialNo(materialNo); +// if(inventoryInquiry == null){ +// throw new BusinessException("更新库存查询数据失败!该物料不存在库存数据"); +// }else{ +// int inquiryUpdateResult = updateWarehouseInventoryInquiry(warehouseOutOrderDetail,inventoryInquiry); +// if (inquiryUpdateResult <= 0){ +// throw new BusinessException("更新库存查询数据失败"); +// } +// WarehouseInventoryInquiryDetail inquiryDetail = createWarehouseInventoryInquiryDetail(warehouseOutOrderDetail); +// inquiryDetail.setInventoryHistoricalType("4");//生产出库 +// int insertInquiryResult = inventoryInquiryDetailMapper.insertWarehouseInventoryInquiryDetail(inquiryDetail); +// if (insertInquiryResult <= 0){ +// throw new BusinessException("新增库存历史数据失败"); +// } +// } +// } } } warehouseOutOrder.setUpdateBy(loginName); warehouseOutOrder.setUpdateTime(DateUtils.getNowDate()); - //表明已出库 - warehouseOutOrder.setWarehouseOutStatus("7"); + + if (warehouseOutOrder.getOutOrderSum().equals(oldWarehouseOutOrder.getEnterpriseSum())){ + warehouseOutOrder.setWarehouseOutStatus("6");//全部出库 + oldMakeorderPick.setPickStatus("2"); + }else { + warehouseOutOrder.setWarehouseOutStatus("5");//部分出库 + oldMakeorderPick.setPickStatus("1"); + } //设置出库时间 warehouseOutOrder.setOutOrderTime(DateUtils.getNowDate()); //设置仓库员 warehouseOutOrder.setWarehouseName(loginName); - //计算出库单主表的出库数 - Integer outOrderSum = 0; - - // 检查outOrderSum是否含有null值 - boolean hasOutOrderSumNull = warehouseOutOrderDetailList.stream() - .anyMatch(item -> item.getActualOutOrderSum() == null); - - if (hasOutOrderSumNull) { - throw new BusinessException("存在实际出库数为空,请检查!"); - } - // 计算各个字段的总和 - outOrderSum = warehouseOutOrderDetailList.stream() - .mapToInt(WarehouseOutOrderDetail::getActualOutOrderSum) - .sum(); - //设置出库单主表的出库数 - warehouseOutOrder.setOutOrderSum(outOrderSum); //更新生产订单信息 SysMakeOrder sysMakeOrder = new SysMakeOrder(); @@ -965,8 +1006,12 @@ public class WarehouseOutOrderServiceImpl implements IWarehouseOutOrderService log.warn("更新销售订单信息失败"); throw new BusinessException("更新销售订单信息失败"); } + + + oldMakeorderPick.setUpdateBy(loginName); + oldMakeorderPick.setUpdateTime(new Date()); // 更新生产领料单数据表示已领料 - int updateMakeorderPickResult = sysMakeorderPickMapper.updateMakeorderPickByCode(warehouseOutOrder.getOutOrderCode()); + int updateMakeorderPickResult = sysMakeorderPickMapper.updateSysMakeorderPick(oldMakeorderPick); if (updateMakeorderPickResult <= 0){ log.warn("更新生产领料单信息失败"); throw new BusinessException("更新生产领料单信息失败"); diff --git a/ruoyi-admin/src/main/resources/mapper/system/SysMakeorderPickMapper.xml b/ruoyi-admin/src/main/resources/mapper/system/SysMakeorderPickMapper.xml index 4c60398d..0b6334bc 100644 --- a/ruoyi-admin/src/main/resources/mapper/system/SysMakeorderPickMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/system/SysMakeorderPickMapper.xml @@ -43,6 +43,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" on a.sale_no = b.sales_order_code + + select id, del_flag, create_by, create_time, update_by, update_time, remark + ,make_no, sale_no, pick_no, out_order_code, pick_status, pick_user, audit_status + , instance_id, instance_type, submit_instance_id, cancel_instance_id, restore_instance_id, apply_title, apply_user, apply_time + ,material_sum,enterprise_sum,out_order_code + from sys_makeorder_pick + + + - + + + + insert into sys_makeorder_pick @@ -220,4 +235,5 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{pickNo} + \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/templates/warehouse/warehouseOutOrder/makeOutWarehouse.html b/ruoyi-admin/src/main/resources/templates/warehouse/warehouseOutOrder/makeOutWarehouse.html index fa6075be..6b0576c5 100644 --- a/ruoyi-admin/src/main/resources/templates/warehouse/warehouseOutOrder/makeOutWarehouse.html +++ b/ruoyi-admin/src/main/resources/templates/warehouse/warehouseOutOrder/makeOutWarehouse.html @@ -3,6 +3,7 @@ +
@@ -80,8 +81,9 @@ return { "outOrderDetailId":item.outOrderDetailId, "outOrderCode":item.outOrderCode, - "materialNo": item.materialNo, // 假设id对应materialId - "prepareOutOrderSum":item.prepareOutOrderSum, + "materialNo": item.materialNo, + "hasOutOrderSum":item.hasOutOrderSum, + "applyOutOrderSum":item.applyOutOrderSum, "actualOutOrderSum":item.actualOutOrderSum // ...其他字段 }; @@ -170,7 +172,41 @@ { title: '实际出库数', field: 'actualOutOrderSum', - editable:true + editable: { + validate: function(value) { + if ($.trim(value) === '') { + return '实际出库数不能为空'; + } + if (isNaN(value)) { + return '请输入有效的数字'; + } + if (value < 0) { + return '实际出库数不能小于0'; + } + //不能为小数 + if (value % 1 !== 0) { + return '实际出库数不能为小数'; + } + }, + }, + formatter: function (value, row) { + // 检查 row 是否存在 + if (!row) { + return ""; + } + + // 检查 actualOutOrderSum 是否存在 + if (row.actualOutOrderSum === undefined || row.actualOutOrderSum === null) { + return ""; + } + + // 根据 actualOutOrderSum 的值决定返回值 + if (row.actualOutOrderSum) { + return row.actualOutOrderSum; + } else { + return value; + } + } } ] }; diff --git a/ruoyi-admin/src/main/resources/templates/warehouse/warehouseOutOrder/makeOutWarehouseDetail.html b/ruoyi-admin/src/main/resources/templates/warehouse/warehouseOutOrder/makeOutWarehouseDetail.html index c51f9947..9942dee2 100644 --- a/ruoyi-admin/src/main/resources/templates/warehouse/warehouseOutOrder/makeOutWarehouseDetail.html +++ b/ruoyi-admin/src/main/resources/templates/warehouse/warehouseOutOrder/makeOutWarehouseDetail.html @@ -80,8 +80,9 @@ return { "outOrderDetailId":item.outOrderDetailId, "outOrderCode":item.outOrderCode, - "materialNo": item.materialNo, // 假设id对应materialId - "prepareOutOrderSum":item.prepareOutOrderSum, + "materialNo": item.materialNo, + "hasOutOrderSum": item.hasOutOrderSum, + "applyOutOrderSum":item.applyOutOrderSum, "actualOutOrderSum":item.actualOutOrderSum // ...其他字段 }; @@ -95,7 +96,7 @@ // 使用 JSON.stringify() 序列化数据 const jsonData = JSON.stringify(combinedData); // 发送 AJAX 请求到后端接口 - $.operate.saveJson(prefix + "/makeOutWarehouse", jsonData); + $.operate.saveJson(prefix + "/makeOutWarehouseDetail", jsonData); } //物料信息展示列表 diff --git a/ruoyi-admin/src/main/resources/templates/warehouse/warehouseOutOrder/warehouseOutOrder.html b/ruoyi-admin/src/main/resources/templates/warehouse/warehouseOutOrder/warehouseOutOrder.html index cefaf04b..499f2298 100644 --- a/ruoyi-admin/src/main/resources/templates/warehouse/warehouseOutOrder/warehouseOutOrder.html +++ b/ruoyi-admin/src/main/resources/templates/warehouse/warehouseOutOrder/warehouseOutOrder.html @@ -129,6 +129,9 @@ { title: '关联订单号', field: 'relatedOrderCode', + formatter: function(value, row, index) { + return $.table.tooltip(value, 5, "open"); + } }, { title: '订单类型', @@ -223,7 +226,7 @@ } /*生产单-出库*/ - if (row.warehouseOutStatus == 4 && row.warehouseOrderType == 1 && row.warehouseOutType == 1){ + if ( (row.warehouseOutStatus == 5 || row.warehouseOutStatus == 4)&& row.warehouseOrderType == 1 && row.warehouseOutType == 1){ actions.push('出库 '); } /*生产单-出库 详情*/