dengjunjie
3 天以前 23f7d0e0cf31ea6a7cde81bf23ef07091bd4f3a7
添加人工触发调拨单
已修改4个文件
274 ■■■■ 文件已修改
新建文件夹/WIDESEA_WMSServer/ClassLibrary2/Inventory_BatchServices.cs.cs 133 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
新建文件夹/WIDESEA_WMSServer/WIDESEA_SquareCabinServices/extend/Allocat.cs 135 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
新建文件夹/WMS/src/extension/stock/Dt_Inventory_Batch.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
新建文件夹/WMS/src/views/stock/Dt_Inventory_Batch.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
н¨Îļþ¼Ð/WIDESEA_WMSServer/ClassLibrary2/Inventory_BatchServices.cs.cs
@@ -1,9 +1,15 @@
using System;
using SqlSugar.Extensions;
using System;
using System.Collections.Generic;
using System.Drawing.Drawing2D;
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;
using WIDESEA_Common.WareHouseEnum;
using WIDESEA_Core;
using WIDESEA_Core.BaseRepository;
using WIDESEA_Core.BaseServices;
@@ -16,15 +22,136 @@
    public class Inventory_BatchServices : ServiceBase<Dt_Inventory_Batch, IRepository<Dt_Inventory_Batch>>, IInventory_BatchServices
    {
        private IMessageInfoService _messageInfoService;
        public Inventory_BatchServices(IRepository<Dt_Inventory_Batch> BaseDal, IMessageInfoService messageInfoService) : base(BaseDal)
        private IMaterielInfoService _materielInfoService;
        private IInventoryInfoService _inventoryInfoService;
        private ISupplyTaskService _supplyTaskService;
        public Inventory_BatchServices(IRepository<Dt_Inventory_Batch> BaseDal, IMessageInfoService messageInfoService, IMaterielInfoService materielInfoService, IInventoryInfoService inventoryInfoService, ISupplyTaskService supplyTaskService) : base(BaseDal)
        {
            _messageInfoService = messageInfoService;
            _materielInfoService = materielInfoService;
            _inventoryInfoService = inventoryInfoService;
            _supplyTaskService = supplyTaskService;
        }
        public IRepository<Dt_Inventory_Batch> Repository => BaseDal;
        public override WebResponseContent UpdateData(SaveModel saveModel)
        {
            return base.UpdateData(saveModel);
            try
            {
                string WareCode = WarehouseEnum.大件库.ObjToInt().ToString("000");
                var qty = saveModel.MainData["stockQuantity"].ObjToInt();
                var id = saveModel.MainData["id"].ObjToInt();
                var materielCode = saveModel.MainData["materielCode"].ToString();
                var batchNo = saveModel.MainData["batchNo"].ToString();
                //var Inventory_Batch = BaseDal.QueryFirst(x => x.Id == id);
                //if (qty > Inventory_Batch.AvailableQuantity) throw new Exception("调拨数量不可大于可用数量");
                var materielInfo = _materielInfoService.Repository.QueryFirst(x => x.MaterielCode == materielCode);
                if (materielInfo == null) return WebResponseContent.Instance.Error($"请维护药品编号【{materielCode}】的信息");
                if (!Enum.IsDefined(typeof(MaterielSourceTypeEnum), materielInfo.MaterielSourceType))
                    return WebResponseContent.Instance.Error($"请设置药品编号【{materielCode}】的属性分类");
                if (materielInfo.MaterielSourceType == MaterielSourceTypeEnum.PurchasePart)
                    return WebResponseContent.Instance.Error($"药品编号【{materielCode}】的属性分类为大件,不可调拨");
                List<Dt_InventoryInfo> dt_InventoryInfos = _inventoryInfoService.Repository.QueryData(x => x.MaterielCode == materielInfo.MaterielCode && x.BatchNo == batchNo && x.StockStatus == StockStatusEmun.入库完成.ObjToInt() && x.AvailableQuantity > 0 && x.WarehouseCode == WareCode).OrderBy(x => x.InDate).ToList();
                if (dt_InventoryInfos.Count < 1) return WebResponseContent.Instance.Error($"物料编号【{materielInfo.MaterielCode}】大件库无库存!请及时补充库存!");
                var StockQty = dt_InventoryInfos.Sum(x => x.AvailableQuantity);
                if (StockQty < qty) return WebResponseContent.Instance.Error($"调拨数量不可大于大件库可用数量,大件库可用数量为【{StockQty}】");
                var zx = qty / materielInfo.BoxQty;
                var ys = qty % materielInfo.BoxQty;
                if (ys > 0) zx++;
                decimal Qty = 0;
                List<Dt_SupplyTask> supplyTasks = new List<Dt_SupplyTask>();
                Dt_DeliveryOrder deliveryOrder = new Dt_DeliveryOrder()
                {
                    Out_no = DateTime.Now.ToString("yyMMddHHmmss"),
                    Warehouse_no = WareCode,
                    Out_type = OutOrderTypeEnum.Allocate.ObjToInt().ToString(),
                    OutStatus = "新建",
                    Details = new List<Dt_DeliveryOrderDetail>()
                };
                foreach (var item in dt_InventoryInfos)
                {
                    decimal taskQty = 0;
                    if (zx < 1) break;
                    while (item.AvailableQuantity > 0 && zx > 0)
                    {
                        zx--;
                        Qty += materielInfo.BoxQty;
                        taskQty += materielInfo.BoxQty;
                        materielInfo.Business_qty += materielInfo.BoxQty;
                        item.OutboundQuantity += materielInfo.BoxQty;
                        item.AvailableQuantity -= materielInfo.BoxQty;
                    }
                    #region æ·»åŠ è°ƒæ‹¨å‡ºåº“ä»»åŠ¡
                    Dt_SupplyTask supplyTask = new Dt_SupplyTask()
                    {
                        WarehouseCode = item.WarehouseCode,
                        BatchNo = item.BatchNo,
                        MaterielName = item.MaterielName,
                        MaterielCode = item.MaterielCode,
                        MaterielSpec = item.MaterielSpec,
                        TaskStatus = SupplyStatusEnum.NewOut.ObjToInt(),
                        TaskType = TaskTypeEnum.AllocatOut.ObjToInt(),
                        CreateDate = DateTime.Now,
                        Creater = App.User.UserName ?? "System",
                        LocationCode = item.LocationCode,
                        OrderNo = deliveryOrder.Out_no,
                        StockQuantity = taskQty,
                        SupplyQuantity = 0,
                        Remark = "调拨出库"
                    };
                    supplyTasks.Add(supplyTask);
                    #endregion
                }
                Dt_DeliveryOrderDetail deliveryOrderDetail = new Dt_DeliveryOrderDetail()
                {
                    Batch_num = batchNo,
                    Order_Outqty = 0,
                    Order_qty = Qty,
                    CreateDate = DateTime.Now,
                    Creater = App.User.UserName ?? "System",
                    Goods_no = materielCode,
                    OotDetailStatus = "新建",
                    Status = 2,
                    Reservoirarea = WareCode
                };
                deliveryOrder.Details.Add(deliveryOrderDetail);
                #region æ·»åŠ è°ƒæ‹¨å…¥åº“å•
                Dt_CabinOrder cabinOrder = new Dt_CabinOrder()
                {
                    Order_no = deliveryOrder.Out_no,
                    Order_type = InOrderTypeEnum.Allocat.ObjToInt().ToString(),
                    Warehouse_no = "001",
                    OdrderStatus = "新建",
                    Details = new List<Dt_CabinOrderDetail>()
                };
                foreach (var item in deliveryOrder.Details)
                {
                    Dt_CabinOrderDetail orderDetail = new Dt_CabinOrderDetail()
                    {
                        Reservoirarea = cabinOrder.Warehouse_no,
                        Goods_no = item.Goods_no,
                        Order_qty = item.Order_qty,
                        Batch_num = item.Batch_num,
                        OrderDetailStatus = "新建",
                        Status = 0
                    };
                    cabinOrder.Details.Add(orderDetail);
                }
                #endregion
                Db.Ado.BeginTran();
                _materielInfoService.UpdateData(materielInfo);
                _inventoryInfoService.Repository.UpdateData(dt_InventoryInfos);
                _supplyTaskService.AddData(supplyTasks);
                if (deliveryOrder.Details.Count > 1) Db.InsertNav(deliveryOrder).Include(x => x.Details).ExecuteCommand();
                if (cabinOrder.Details.Count > 1) Db.InsertNav(cabinOrder).Include(x => x.Details).ExecuteCommand();
                Db.Ado.CommitTran();
                return WebResponseContent.Instance.OK();
            }
            catch (Exception ex)
            {
                Db.Ado.RollbackTran();
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
        public WebResponseContent GetExpiredAndlow()
        {
н¨Îļþ¼Ð/WIDESEA_WMSServer/WIDESEA_SquareCabinServices/extend/Allocat.cs
@@ -42,9 +42,17 @@
                    dt_InventoryInfos = dt_InventoryInfos.OrderBy(x => x.ValidityPeriod).ToList();
                else
                    dt_InventoryInfos = dt_InventoryInfos.OrderBy(x => x.InDate).ToList();
                decimal Qty = 0;
                Dt_DeliveryOrder deliveryOrder = new Dt_DeliveryOrder()
                {
                    Out_no = DateTime.Now.ToString("yyMMddHHmmss"),
                    Warehouse_no = WareCode,
                    Out_type = OutOrderTypeEnum.Allocate.ObjToInt().ToString(),
                    OutStatus = "新建",
                    Details = new List<Dt_DeliveryOrderDetail>()
                };
                foreach (var item in dt_InventoryInfos)
                {
                    decimal Qty = 0;
                    if (materielInfo.Business_qty >= materielInfo.MinQty) break;
                    //item.StockStatus = StockStatusEmun.出库锁定.ObjToInt();
                    while (item.StockQuantity > item.OutboundQuantity && materielInfo.Business_qty < materielInfo.MinQty)
@@ -54,49 +62,31 @@
                        item.OutboundQuantity += materielInfo.BoxQty;
                    }
                    item.AvailableQuantity = item.StockQuantity - item.OutboundQuantity;
                }
                #region å¤§ä»¶åº“补立库后立库业务库存数还是小于立库最小库存数,添加提示信息
                //添加报警信息
                if (materielInfo.Business_qty < materielInfo.MinQty)
                {
                    _messageInfoService.AddMessageInfo(MessageGroupByEnum.InventoryLowAlarm, $"物料名称:{materielInfo.MaterielName}", $"【物料编码{materielInfo.MaterielCode}已生成调拨出入库单,请进行出入库流程。大件库库存过低!请及时补充库存!】");
                }
                else
                {
                    _messageInfoService.AddMessageInfo(MessageGroupByEnum.InventoryLowAlarm, $"物料名称:{materielInfo.MaterielName}", $"【物料编码{materielInfo.MaterielCode}已生成调拨出入库单,请进行出入库流程】");
                }
                #endregion
                #region æ·»åŠ è°ƒæ‹¨å‡ºåº“å•
                Dt_DeliveryOrder deliveryOrder = new Dt_DeliveryOrder()
                {
                    Out_no = DateTime.Now.ToString("yyMMddHHmmss"),
                    Out_type = OutOrderTypeEnum.Allocate.ObjToInt().ToString(),
                    OutStatus = "新建",
                    Details = new List<Dt_DeliveryOrderDetail>()
                };
                dt_InventoryInfos = dt_InventoryInfos.Where(X => X.StockStatus == StockStatusEmun.出库锁定.ObjToInt()).ToList();
                foreach (var item in dt_InventoryInfos.GroupBy(x => x.BatchNo)) //这里按批次分组了
                {
                    Dt_DeliveryOrderDetail deliveryOrderDetail = new Dt_DeliveryOrderDetail()
                    #region æ·»åŠ è°ƒæ‹¨å‡ºåº“å•
                    Dt_DeliveryOrderDetail? deliveryOrderDetail = deliveryOrder.Details.FirstOrDefault(x => x.Batch_num == item.BatchNo);
                    if (deliveryOrderDetail == null)
                    {
                        Batch_num = item.Key,
                        Order_Outqty = 0,
                        Order_qty = item.Select(x => x.OutboundQuantity).Sum(),
                        CreateDate = DateTime.Now,
                        Creater = App.User.UserName ?? "System",
                        Goods_no = item.First().MaterielCode,
                        OotDetailStatus = "新建",
                        Status = 2,
                        Reservoirarea = item.First().WarehouseCode
                    };
                    deliveryOrder.Warehouse_no = item.First().WarehouseCode;
                    deliveryOrder.Details.Add(deliveryOrderDetail);
                }
                #endregion
                #region æ·»åŠ è°ƒæ‹¨å‡ºåº“ä»»åŠ¡
                foreach (var item in dt_InventoryInfos)
                {
                        deliveryOrderDetail = new Dt_DeliveryOrderDetail()
                        {
                            Batch_num = item.BatchNo,
                            Order_Outqty = 0,
                            Order_qty = Qty,
                            CreateDate = DateTime.Now,
                            Creater = App.User.UserName ?? "System",
                            Goods_no = item.MaterielCode,
                            OotDetailStatus = "新建",
                            Status = 2,
                            Reservoirarea = WareCode
                        };
                        deliveryOrder.Details.Add(deliveryOrderDetail);
                    }
                    else
                    {
                        deliveryOrderDetail.Order_qty += Qty;
                    }
                    deliveryOrder.Details.Add(deliveryOrderDetail);
                    #endregion
                    #region æ·»åŠ è°ƒæ‹¨å‡ºåº“ä»»åŠ¡
                    Dt_SupplyTask supplyTask = new Dt_SupplyTask()
                    {
                        WarehouseCode = item.WarehouseCode,
@@ -110,12 +100,67 @@
                        Creater = App.User.UserName ?? "System",
                        LocationCode = item.LocationCode,
                        OrderNo = deliveryOrder.Out_no,
                        StockQuantity = item.OutboundQuantity,
                        StockQuantity = Qty,
                        SupplyQuantity = 0,
                        Remark = "调拨出库"
                    };
                    supplyTasks.Add(supplyTask);
                    supplyTasks.Add(supplyTask);
                    #endregion
                }
                #region å¤§ä»¶åº“补立库后立库业务库存数还是小于立库最小库存数,添加提示信息
                //添加报警信息
                if (materielInfo.Business_qty < materielInfo.MinQty)
                {
                    _messageInfoService.AddMessageInfo(MessageGroupByEnum.InventoryLowAlarm, $"物料名称:{materielInfo.MaterielName}", $"【物料编码{materielInfo.MaterielCode}已生成调拨出入库单,请进行出入库流程。大件库库存过低!请及时补充库存!】");
                }
                else
                {
                    _messageInfoService.AddMessageInfo(MessageGroupByEnum.InventoryLowAlarm, $"物料名称:{materielInfo.MaterielName}", $"【物料编码{materielInfo.MaterielCode}已生成调拨出入库单,请进行出入库流程】");
                }
                #endregion
                #region æ·»åŠ è°ƒæ‹¨å‡ºåº“å•
                //dt_InventoryInfos = dt_InventoryInfos.Where(X => X.StockStatus == StockStatusEmun.出库锁定.ObjToInt()).ToList();
                //foreach (var item in dt_InventoryInfos.GroupBy(x => x.BatchNo)) //这里按批次分组了
                //{
                //    Dt_DeliveryOrderDetail deliveryOrderDetail = new Dt_DeliveryOrderDetail()
                //    {
                //        Batch_num = item.Key,
                //        Order_Outqty = 0,
                //        Order_qty = item.Select(x => x.OutboundQuantity).Sum(),
                //        CreateDate = DateTime.Now,
                //        Creater = App.User.UserName ?? "System",
                //        Goods_no = item.First().MaterielCode,
                //        OotDetailStatus = "新建",
                //        Status = 2,
                //        Reservoirarea = item.First().WarehouseCode
                //    };
                //    deliveryOrder.Warehouse_no = item.First().WarehouseCode;
                //    deliveryOrder.Details.Add(deliveryOrderDetail);
                //}
                #endregion
                #region æ·»åŠ è°ƒæ‹¨å‡ºåº“ä»»åŠ¡
                //foreach (var item in dt_InventoryInfos)
                //{
                //    Dt_SupplyTask supplyTask = new Dt_SupplyTask()
                //    {
                //        WarehouseCode = item.WarehouseCode,
                //        BatchNo = item.BatchNo,
                //        MaterielName = item.MaterielName,
                //        MaterielCode = item.MaterielCode,
                //        MaterielSpec = item.MaterielSpec,
                //        TaskStatus = SupplyStatusEnum.NewOut.ObjToInt(),
                //        TaskType = TaskTypeEnum.AllocatOut.ObjToInt(),
                //        CreateDate = DateTime.Now,
                //        Creater = App.User.UserName ?? "System",
                //        LocationCode = item.LocationCode,
                //        OrderNo = deliveryOrder.Out_no,
                //        StockQuantity = item.OutboundQuantity,
                //        SupplyQuantity = 0,
                //        Remark = "调拨出库"
                //    };
                //    supplyTasks.Add(supplyTask);
                //}
                #endregion
                #region æ·»åŠ è°ƒæ‹¨å…¥åº“å•
н¨Îļþ¼Ð/WMS/src/extension/stock/Dt_Inventory_Batch.js
@@ -101,10 +101,10 @@
      //(3)this.editFormFields.字段='xxx';
      //如果需要给下拉框设置默认值,请遍历this.editFormOptions找到字段配置对应data属性的key值
      //看不懂就把输出看:console.log(this.editFormOptions)
      this.editFormFields.stockQuantity = 1;
      // this.editFormFields.availableQuantity = 1;
      this.editFormOptions.forEach((editForm) => {
        editForm.forEach((x) => {
          if (x.field == "stockQuantity") {
          if (x.field == "availableQuantity") {
            
          } else {
            x.readonly = true
н¨Îļþ¼Ð/WMS/src/views/stock/Dt_Inventory_Batch.vue
@@ -69,7 +69,7 @@
        {
          title: "调拨数量",
          required: true,
          field: "stockQuantity",
          field: "availableQuantity",
          type: "number",
        },
      ],