wangxinhui
2025-06-25 e1dd1dc9ba7135e3d64a65587d6c1be2c3e18c5a
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/MesOutboundOrderService.cs
@@ -21,6 +21,7 @@
using WIDESEA_Common.LocationEnum;
using WIDESEA_IRecordService;
using WIDESEA_Common.StockEnum;
using WIDESEA_Common.TaskEnum;
namespace WIDESEA_OutboundService
{
@@ -59,18 +60,19 @@
            float originalNeedQuantity = mesOutboundOrder.OrderQuantity;
            float needQuantity = originalNeedQuantity;
            //获取库存
            List<Dt_StockInfo> stockInfos = _stockService.StockInfoService.GetUseableStocks(mesOutboundOrder.MaterialCode, "", mesOutboundOrder.WarehouseId);
            if (!stockInfos.Any())
            {
                throw new Exception($"未找到可分配库存");
            }
            List<Dt_StockInfo> autoAssignStocks = _stockService.StockInfoService.GetOutboundStocks(stockInfos, mesOutboundOrder.MaterialCode, needQuantity, out float residueQuantity);
            mesOutboundOrder.LockQuantity += needQuantity - residueQuantity;
            if (residueQuantity>0)
            {
                throw new Exception($"库存不足");
            }
            autoAssignStocks.OrderBy(x => x.Details.FirstOrDefault()?.StockQuantity).ToList();
            outStocks.AddRange(autoAssignStocks);
            float assignQuantity = needQuantity - residueQuantity;
            float orderQuantity = mesOutboundOrder.OrderQuantity;
            for (int j = 0; j < autoAssignStocks.Count; j++)
            {
                float detailAssignQuantity = outStockLockInfos.Where(x => x.MaterielCode == mesOutboundOrder.MaterialCode).Sum(x => x.AssignQuantity);//出库订单明细已分配数量
@@ -144,5 +146,54 @@
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
        public WebResponseContent AddMesOrder(SubstrateOutModel substrateOutModel)
        {
            try
            {
                Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA57.ToString());
                if (warehouse == null)
                {
                    return WebResponseContent.Instance.Error($"仓库基础信息未配置");
                }
                Dt_MaterielInfo materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x => x.MaterielCode == substrateOutModel.MaterialCode);
                if (materielInfo == null)
                {
                    return WebResponseContent.Instance.Error($"未找到该物料信息");
                }
                int orderType = 0;
                if(substrateOutModel.Line == "1011")
                {
                    orderType = MesOutboundOrderTypeEnum.HandSubstrateOutPick.ObjToInt();
                }
                else
                {
                    orderType = MesOutboundOrderTypeEnum.HandSubstrateOut.ObjToInt();
                }
                Dt_MesOutboundOrder mesOutboundOrder = new Dt_MesOutboundOrder()
                {
                    CreateType = OrderCreateTypeEnum.CreateInSystem.ObjToInt(),
                    Line = substrateOutModel.Line,
                    MaterialCode = substrateOutModel.MaterialCode,
                    MaterialName = materielInfo.MaterielName,
                    OrderQuantity = substrateOutModel.RequiredQuantity,
                    TaskNo = DateTime.Now.ToString("yyyyMMddHHmmss"),
                    Unit = substrateOutModel.Unit,
                    OrderType = orderType,
                    OrderStatus = OutOrderStatusEnum.未开始.ObjToInt(),
                    WarehouseId = warehouse.WarehouseId
                };
                AddData(mesOutboundOrder);
                return WebResponseContent.Instance.OK();
            }
            catch (Exception ex)
            {
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
    }
}