dengjunjie
3 天以前 d2a1ccd801f942381723c5a6001989d8da8ba6f5
优化盘点逻辑
已修改2个文件
330 ■■■■■ 文件已修改
新建文件夹/WIDESEA_WMSServer/WIDESEA_SquareCabinServices/extend/Check.cs 95 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
新建文件夹/WMS/src/views/outbound/outboundOrder_Hty.vue 235 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
н¨Îļþ¼Ð/WIDESEA_WMSServer/WIDESEA_SquareCabinServices/extend/Check.cs
@@ -3,6 +3,7 @@
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Common;
using WIDESEA_Common.OrderEnum;
using WIDESEA_Common.StockEnum;
using WIDESEA_Common.TaskEnum;
@@ -36,6 +37,7 @@
                foreach (var item in inventory_Batches)
                {
                    var supplyTasks = _supplyTaskService.Repository.QueryData(x => x.MaterielCode == item.MaterielCode && x.BatchNo == item.BatchNo && x.TaskStatus == SupplyStatusEnum.NewCheck.ObjToInt()).ToList();
                    if (item.SupplyQuantity != 0) throw new Exception($"物料编号【{item.MaterielCode}】批次号【{item.BatchNo}】已存在盘点差异!");
                    if (supplyTasks.Count > 0) throw new Exception($"物料编号【{item.MaterielCode}】批次号【{item.BatchNo}】已存在盘点任务,请先完成当前盘点任务");
                    supplyTasks = _supplyTaskService.Repository.QueryData(x => x.MaterielCode == item.MaterielCode && x.BatchNo == item.BatchNo && x.TaskStatus == SupplyStatusEnum.NewOut.ObjToInt()).ToList();
                    if (supplyTasks.Count > 0) throw new Exception($"物料编号【{item.MaterielCode}】批次号【{item.BatchNo}】已存在出库任务,请先完成当前出库任务");
@@ -234,7 +236,7 @@
                if (materielInfo == null) return WebResponseContent.Instance.Error($"请维护物料编号【{cabinOrderDetail.Goods_no}】的物料信息");
                cabinOrderDetail.Order_Outqty += supplyTask.SupplyQuantity;
                #region å¹³åº“盘点只能出现整箱差异
                if (supplyTask.WarehouseCode == WarehouseEnum.大件库.ObjToInt().ToString("000"))
                if (supplyTask.WarehouseCode == WarehouseEnum.大件库.ObjToInt().ToString("000") && materielInfo.MaterielSourceType != MaterielSourceTypeEnum.PurchasePart)
                {
                    var Qty = supplyTask.SupplyQuantity % materielInfo.BoxQty;
                    if (Qty != 0) return WebResponseContent.Instance.Error($"大件库库存为整箱!盘点数量不能存在散件");
@@ -247,45 +249,85 @@
                #endregion
                #region åº“å­˜
                Dt_InventoryInfo inventoryInfo = new Dt_InventoryInfo();
                List<Dt_Inventory_Batch> inventory_Batchs = _inventory_BatchServices.Repository.QueryData(x => cabinOrder.Details.Select(x => x.Goods_no).Contains(x.MaterielCode));
                List<Dt_InventoryInfo> inventoryInfos = _inventoryInfoService.Repository.QueryData(x => cabinOrder.Details.Select(x => x.Goods_no).Contains(x.MaterielCode) && x.WarehouseCode == supplyTask.WarehouseCode && x.StockStatus == StockStatusEmun.盘点锁定.ObjToInt());
                Dt_InventoryInfo? inventoryInfo = new();
                List<Dt_InventoryInfo> inventoryInfosDel = new List<Dt_InventoryInfo>();
                if (supplyTask.WarehouseCode != WarehouseEnum.立库.ObjToInt().ToString("000"))
                {
                    inventoryInfo = _inventoryInfoService.Repository.QueryFirst(x => x.BatchNo == cabinOrderDetail.Batch_num && x.MaterielCode == cabinOrderDetail.Goods_no && x.WarehouseCode == supplyTask.WarehouseCode && x.LocationCode == supplyTask.LocationCode);
                    inventoryInfo = inventoryInfos.FirstOrDefault(x => x.BatchNo == cabinOrderDetail.Batch_num && x.MaterielCode == cabinOrderDetail.Goods_no && x.LocationCode == supplyTask.LocationCode);
                    if (inventoryInfo == null) return WebResponseContent.Instance.Error($"未找到货位【{LocationCode}】的库存信息");
                }
                else
                {
                    inventoryInfo = _inventoryInfoService.Repository.QueryFirst(x => x.BatchNo == cabinOrderDetail.Batch_num && x.MaterielCode == cabinOrderDetail.Goods_no && x.WarehouseCode == supplyTask.WarehouseCode);
                    inventoryInfo = inventoryInfos.FirstOrDefault(x => x.BatchNo == cabinOrderDetail.Batch_num && x.MaterielCode == cabinOrderDetail.Goods_no);
                }
                if (inventoryInfo == null) return WebResponseContent.Instance.Error($"未找到立库的库存信息");
                inventoryInfo.SupplyQuantity = supplyTask.SupplyQuantity - inventoryInfo.StockQuantity;
                #endregion
                #region åˆ¤æ–­å½“前物料批次的盘点任务是否全部完成
                List<Dt_SupplyTask> supplyTasks = _supplyTaskService.Repository.QueryData(x => x.MaterielCode == supplyTask.MaterielCode && x.BatchNo == supplyTask.BatchNo && x.TaskStatus == SupplyStatusEnum.NewCheck.ObjToInt() && x.WarehouseCode == supplyTask.WarehouseCode && x.TaskId != supplyTask.TaskId).ToList();
                List<Dt_SupplyTask> supplyTasks1 = _supplyTaskService.Repository.QueryData(x => x.MaterielCode == supplyTask.MaterielCode && x.BatchNo == supplyTask.BatchNo && x.TaskStatus == SupplyStatusEnum.NewCheck.ObjToInt() && x.TaskId != supplyTask.TaskId).ToList();
                Dt_Inventory_Batch inventory_Batch = new Dt_Inventory_Batch();
                List<Dt_InventoryInfo> inventoryInfos = new List<Dt_InventoryInfo>();
                if (supplyTasks1.Count < 1)
                List<Dt_SupplyTask> supplyTasks = _supplyTaskService.Repository.QueryData(x => x.OrderNo == supplyTask.OrderNo && x.TaskStatus == SupplyStatusEnum.NewCheck.ObjToInt() && x.TaskId != supplyTask.TaskId).ToList();//查找当前盘点单的盘点任务
                if (!supplyTasks.Where(x => cabinOrderDetail.Goods_no == x.MaterielCode && x.BatchNo == cabinOrderDetail.Batch_num).Any())
                    cabinOrderDetail.OotDetailStatus = "已完成";
                #region åˆ¤æ–­å½“前盘点单任务是否全部完成
                if (supplyTasks.Count < 1)
                {
                    #region æŸ¥æ‰¾åº“å­˜
                    inventoryInfos = _inventoryInfoService.Repository.QueryData(x => x.BatchNo == cabinOrderDetail.Batch_num && x.MaterielCode == cabinOrderDetail.Goods_no && x.Id != inventoryInfo.Id);
                    var SupplyQuantitys = inventoryInfos.Sum(x => x.SupplyQuantity) + inventoryInfo.SupplyQuantity;//计算盘点总数
                    #endregion
                    #region åº“存批次
                    inventory_Batch = _inventory_BatchServices.Repository.QueryFirst(x => x.BatchNo == cabinOrderDetail.Batch_num && x.MaterielCode == cabinOrderDetail.Goods_no);
                    #region å¤„理当前物料批次的库存和批次信息
                    Dt_Inventory_Batch inventory_Batch = inventory_Batchs.First(x => x.BatchNo == inventoryInfo.BatchNo && x.MaterielCode == inventoryInfo.MaterielCode);
                    var SupplyQuantitys = inventoryInfos.Where(x => x.BatchNo == inventoryInfo.BatchNo && x.MaterielCode == inventoryInfo.MaterielCode).Sum(x => x.SupplyQuantity);
                    if (SupplyQuantitys == 0)
                    {
                        foreach (var item in inventoryInfos)
                        foreach (var item in inventoryInfos.Where(x => x.BatchNo == inventoryInfo.BatchNo && x.MaterielCode == inventoryInfo.MaterielCode))
                        {
                            item.StockQuantity += item.SupplyQuantity;
                            if (item.StockQuantity <= 0)
                            {
                                inventoryInfosDel.Add(item);
                                continue;
                            }
                            item.AvailableQuantity = item.StockQuantity;
                            item.SupplyQuantity = 0;
                            item.StockStatus = StockStatusEmun.入库完成.ObjToInt();
                        }
                        inventoryInfo.StockQuantity += inventoryInfo.SupplyQuantity;
                        inventoryInfo.SupplyQuantity = 0;
                        inventoryInfo.StockStatus = StockStatusEmun.入库完成.ObjToInt();
                        //inventoryInfo.StockQuantity += inventoryInfo.SupplyQuantity;
                        //if (inventoryInfo.StockQuantity <= 0)
                        //{
                        //    inventoryInfosDel.Add(inventoryInfo);
                        //    inventoryInfo = null;
                        //}
                        //else
                        //{
                        //    inventoryInfo.AvailableQuantity = inventoryInfo.StockQuantity;
                        //    inventoryInfo.SupplyQuantity = 0;
                        //    inventoryInfo.StockStatus = StockStatusEmun.入库完成.ObjToInt();
                        //}
                    }
                    else
                    {
                        inventory_Batch.SupplyQuantity += SupplyQuantitys;
                    }
                    #endregion
                    #region å¤„理其他库存批次和库存
                    foreach (var detail in cabinOrder.Details.Where(x => x.Id != cabinOrderDetail.Id))
                    {
                        SupplyQuantitys = inventoryInfos.Where(x => x.BatchNo == detail.Batch_num && x.MaterielCode == detail.Goods_no).Sum(x => x.SupplyQuantity);//计算盘点总数
                        inventory_Batch = inventory_Batchs.First(x => x.BatchNo == detail.Batch_num && x.MaterielCode == detail.Goods_no);
                        #region åº“存批次
                        if (SupplyQuantitys == 0)
                        {
                            foreach (var item in inventoryInfos.Where(x => x.BatchNo == detail.Batch_num && x.MaterielCode == detail.Goods_no))
                            {
                                item.StockQuantity += item.SupplyQuantity;
                                if (item.StockQuantity <= 0)
                                {
                                    inventoryInfosDel.Add(item);
                                    continue;
                                }
                                item.AvailableQuantity = item.StockQuantity;
                                item.SupplyQuantity = 0;
                                item.StockStatus = StockStatusEmun.入库完成.ObjToInt();
                            }
                    }
                    else
                    {
@@ -293,6 +335,9 @@
                    }
                    #endregion
                }
                    #endregion
                }
                #endregion
                _unitOfWorkManage.BeginTran();
                #region å¤„理盘点单
                if (supplyTasks.Count < 1)
@@ -315,12 +360,12 @@
                    _deliveryOrderDetailServices.Repository.UpdateData(cabinOrderDetail);
                }
                #endregion
                _inventoryInfoService.UpdateData(inventoryInfo);
                //_inventoryInfoService.UpdateData(inventoryInfo);
                _supplyTaskService.Repository.DeleteAndMoveIntoHty(supplyTask, OperateTypeEnum.自动完成);
                _inventoryInfoService.UpdateData(inventoryInfos);
                _inventory_BatchServices.UpdateData(inventory_Batch);
                if (inventoryInfosDel.Count > 0) _inventoryInfoService.DeleteData(inventoryInfosDel);
                _inventory_BatchServices.UpdateData(inventory_Batchs);
                _unitOfWorkManage.CommitTran();
                #endregion
                content.OK();
            }
            catch (Exception ex)
н¨Îļþ¼Ð/WMS/src/views/outbound/outboundOrder_Hty.vue
@@ -5,7 +5,8 @@
 *业务请在@/extension/widesea_wcs/order/Dt_OutboundOrder_Hty.js此处编写
 -->
<template>
    <view-grid ref="grid"
  <view-grid
    ref="grid"
               :columns="columns"
               :detail="detail"
               :editFormFields="editFormFields"
@@ -13,7 +14,8 @@
               :searchFormFields="searchFormFields"
               :searchFormOptions="searchFormOptions"
               :table="table"
               :extend="extend">
    :extend="extend"
  >
    </view-grid>
</template>
<script>
@@ -22,12 +24,12 @@
    export default defineComponent({
        setup() {
            const table = ref({
                key: 'id',
      key: "id",
                footer: "Foots",
                cnName: '历史出库单',
                name: 'DeliveryOrderHty',
      cnName: "历史出库单",
      name: "DeliveryOrderHty",
                url: "/DeliveryOrderHty/",
                sortName: "id"
      sortName: "id",
            });
            const editFormFields = ref({});
            const editFormOptions = ref([]);
@@ -62,81 +64,81 @@
                    },
                    { title: "客户名称", field: "client_name", type: "like" },
                    { title: "出库记账时间", field: "account_time", type: "datetime" },
                ]
      ],
            ]);
            const columns = ref([
                {
                    field: 'id',
                    title: '历史记录主键',
                    type: 'int',
        field: "id",
        title: "历史记录主键",
        type: "int",
                    width: 120,
                    hidden: true,
                    readonly: true,
                    require: true,
                    align: 'left'
        align: "left",
                },
                {
                    field: 'sourceId',
                    title: '原主键',
                    type: 'int',
        field: "sourceId",
        title: "原主键",
        type: "int",
                    width: 100,
                    align: 'left'
        align: "left",
                },
                {
                    field: 'out_no',
                    title: '出库单号',
                    type: 'string',
        field: "out_no",
        title: "出库单号",
        type: "string",
                    width: 150,
                    require: true,
                    align: 'left',
        align: "left",
                    sort: true,
                    link: true
        link: true,
                },
                {
                    field: 'out_type',
                    title: '出库单类型',
                    type: 'string',
        field: "out_type",
        title: "出库单类型",
        type: "string",
                    width: 120,
                    require: true,
                    align: 'left',
                    bind: { key: "out_type", data: [] }
        align: "left",
        bind: { key: "out_type", data: [] },
                },
                {
                    field: 'client_no',
                    title: '客户代码',
                    type: 'string',
        field: "client_no",
        title: "客户代码",
        type: "string",
                    width: 120,
                    align: 'left'
        align: "left",
                },
                {
                    field: 'client_name',
                    title: '客户名称',
                    type: 'string',
        field: "client_name",
        title: "客户名称",
        type: "string",
                    width: 150,
                    align: 'left'
        align: "left",
                },
                {
                    field: 'warehouse_no',
                    title: '库发号',
                    type: 'string',
        field: "warehouse_no",
        title: "库发号",
        type: "string",
                    width: 100,
                    align: 'left',
                    bind: { key: "warehouseNuber", data: [] }
        align: "left",
        bind: { key: "warehouseNuber", data: [] },
                },
                {
                    field: 'account_time',
                    title: '出库记账时间',
                    type: 'datetime',
        field: "account_time",
        title: "出库记账时间",
        type: "datetime",
                    width: 160,
                    align: 'left'
        align: "left",
                },
                {
                    field: 'outStatus',
                    title: '头标状态',
                    type: 'string',
        field: "outStatus",
        title: "头标状态",
        type: "string",
                    width: 120,
                    align: 'left',
                    bind: { key: "outStatus", data: [] }
        align: "left",
        bind: { key: "outStatus", data: [] },
                },
                // {
                //     field: 'creater',
@@ -146,12 +148,12 @@
                //     align: 'left'
                // },
                {
                    field: 'createDate',
                    title: '创建时间',
                    type: 'datetime',
        field: "createDate",
        title: "创建时间",
        type: "datetime",
                    width: 160,
                    align: 'left',
                    sort: true
        align: "left",
        sort: true,
                },
                // {
                //     field: 'modifier',
@@ -174,21 +176,21 @@
                table: "DtDeliveryOrderDetailHty",
                columns: [
                    {
                        field: 'id',
                        title: '历史记录主键',
                        type: 'int',
          field: "id",
          title: "历史记录主键",
          type: "int",
                        width: 120,
                        hidden: true,
                        readonly: true,
                        require: true,
                        align: 'left'
          align: "left",
                    },
                    {
                        field: 'sourceId',
                        title: '原主键',
                        type: 'int',
          field: "sourceId",
          title: "原主键",
          type: "int",
                        width: 100,
                        align: 'left'
          align: "left",
                    },
                    // {
                    //     field: 'deliveryOrderId',
@@ -201,12 +203,12 @@
                    //     hidden: true
                    // },
                    {
                        field: 'reservoirarea',
                        title: '库区',
                        type: 'string',
          field: "reservoirarea",
          title: "库区",
          type: "string",
                        width: 120,
                        align: 'left',
                        bind: { key: "warehouseNuber", data: [] }
          align: "left",
          bind: { key: "warehouseNuber", data: [] },
                    },
                        {
                        field: "goods_no",
@@ -219,86 +221,95 @@
                        bind: { key: "MaterielNames", data: [] },
                    },
                    {
                        field: 'goods_no',
                        title: '药品编码',
                        type: 'string',
          field: "goods_no",
          title: "药品编码",
          type: "string",
                        width: 150,
                        require: true,
                        align: 'left',
                        bind: { key: "medicineGoods", data: [] }
          align: "left",
          bind: { key: "medicineGoods", data: [] },
                    },
                    {
                        field: 'order_qty',
                        title: '订单数量',
                        type: 'decimal',
          field: "order_qty",
          title: "订单数量",
          type: "decimal",
                        width: 100,
                        require: true,
                        align: 'left'
          align: "left",
                    },
                    {
                        field: 'batch_num',
                        title: '批号',
                        type: 'string',
          field: "order_Outqty",
          title: "完成数量",
          type: "decimal",
          width: 100,
          require: true,
          align: "left",
          // edit:{type:"number"}
        },
        {
          field: "batch_num",
          title: "批号",
          type: "string",
                        width: 120,
                        require: true,
                        align: 'left'
          align: "left",
                    },
                    {
                        field: 'exp_date',
                        title: '校期',
                        type: 'string',
          field: "exp_date",
          title: "校期",
          type: "string",
                        width: 120,
                        align: 'left'
          align: "left",
                    },
                    {
                        field: 'ootDetailStatus',
                        title: '状态',
                        type: 'string',
          field: "ootDetailStatus",
          title: "状态",
          type: "string",
                        width: 120,
                        align: 'left',
                        bind: { key: "ootDetailStatus", data: [] }
          align: "left",
          bind: { key: "ootDetailStatus", data: [] },
                    },
                    {
                        field: 'status',
                        title: '同步状态',
                        type: 'int',
          field: "status",
          title: "同步状态",
          type: "int",
                        width: 120,
                        align: 'left',
                        bind: { key: "syncStatus", data: [] }
          align: "left",
          bind: { key: "syncStatus", data: [] },
                    },
                    {
                        field: 'creater',
                        title: '创建人',
                        type: 'string',
          field: "creater",
          title: "创建人",
          type: "string",
                        width: 90,
                        align: 'left'
          align: "left",
                    },
                    {
                        field: 'createDate',
                        title: '创建时间',
                        type: 'datetime',
          field: "createDate",
          title: "创建时间",
          type: "datetime",
                        width: 160,
                        align: 'left',
                        sort: true
          align: "left",
          sort: true,
                    },
                    {
                        field: 'modifier',
                        title: '修改人',
                        type: 'string',
          field: "modifier",
          title: "修改人",
          type: "string",
                        width: 100,
                        align: 'left'
          align: "left",
                    },
                    {
                        field: 'modifyDate',
                        title: '修改时间',
                        type: 'datetime',
          field: "modifyDate",
          title: "修改时间",
          type: "datetime",
                        width: 160,
                        align: 'left',
                        sort: true
                    }
          align: "left",
          sort: true,
        },
                ],
                sortName: "id",
                key: "id"
      key: "id",
            });
            return {
                table,