1
huangxiaoqiang
12 小时以前 a296223898d61a9838bbd35ed75c87575e308a36
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_StorageBasicServices/Boxing/BoxingInfoService.cs
@@ -1,5 +1,6 @@
using Mapster;
using Masuit.Tools;
using Masuit.Tools.Models;
using SqlSugar;
using System.ComponentModel.DataAnnotations;
using System.Linq.Expressions;
@@ -8,6 +9,7 @@
using WIDESEA_Core.BaseRepository;
using WIDESEA_DTO.Basic;
using WIDESEA_IOrderRepository;
using WIDESEA_Model.Models;
using WIDESEA_OrderRepository;
namespace WIDESEA_StorageBasicService;
@@ -17,11 +19,13 @@
    private readonly IUnitOfWorkManage _unitOfWorkManage;
    private readonly ILocationStatusChangeRecordRepository _locationStatusChangeRecordRepository;
    private readonly IDt_InboundOrderRepository _inboundOrderRepository;
    public BoxingInfoService(IBoxingInfoRepository BaseDal,IUnitOfWorkManage unitOfWorkManage, ILocationStatusChangeRecordRepository locationStatusChangeRecordRepository, IDt_InboundOrderRepository inboundOrderRepository) : base(BaseDal)
    private readonly IBoxingInfoDetailRepository _boxingInfoDetailRepository;
    public BoxingInfoService(IBoxingInfoRepository BaseDal,IUnitOfWorkManage unitOfWorkManage, ILocationStatusChangeRecordRepository locationStatusChangeRecordRepository, IDt_InboundOrderRepository inboundOrderRepository,IBoxingInfoDetailRepository boxingInfoDetailRepository) : base(BaseDal)
    {
        _unitOfWorkManage = unitOfWorkManage;
        _locationStatusChangeRecordRepository = locationStatusChangeRecordRepository;
        _inboundOrderRepository = inboundOrderRepository;
        _boxingInfoDetailRepository = boxingInfoDetailRepository;
    }
    public override PageGridData<DtBoxingInfo> GetPageData(PageDataOptions options)
    {
@@ -91,7 +95,7 @@
            return content.Error(ex.Message);
        }
    }
    public async Task<WebResponseContent> AddGroupPlateAsync(GroupPlate groupPlate)
    {
@@ -102,62 +106,117 @@
            {
                return content.Error("参数错误");
            }
            var info = await BaseDal.QueryFirstAsync(x => x.PalletCode == groupPlate.palletCode);
            if (!info.IsNullOrEmpty())
            var infos = await BaseDal.QueryFirstNavAsync(x => x.PalletCode == groupPlate.palletCode);
            List<DtBoxingInfoDetail> details = new List<DtBoxingInfoDetail>();
            if (infos != null)
            {
                content.Error("该托盘已存在组盘");
            }
            else
            {
                List<DtBoxingInfoDetail> details = new List<DtBoxingInfoDetail>();
                foreach (var item in groupPlate.groups)
                {
                    var InboundOrder = _inboundOrderRepository.QueryFirst(x => x.OrderNo == item.orderNo);
                    if (InboundOrder != null)
                    if (infos.BoxingInfoDetails.Count > 0)
                    {
                        var x = details.Where(x => x.MaterielCode == InboundOrder.MaterialNo && x.Warehouse == InboundOrder.WarehouseName && x.DrawingNumber == InboundOrder.ProductDrawingNumber && x.DemandClassification == InboundOrder.DemandClassification).FirstOrDefault();
                        if (x != null)
                        var detail = _boxingInfoDetailRepository.QueryFirst(x => x.OrderNo == item.orderNo);
                        if (detail != null)
                        {
                            details.Remove(x);
                            x.MaterielCode = InboundOrder.MaterialNo;
                            x.MaterielName = InboundOrder.MaterialName;
                            x.DemandClassification = InboundOrder.DemandClassification;
                            x.Warehouse = InboundOrder.WarehouseName;
                            x.OrderNo = InboundOrder.UpperOrderNo;
                            x.Unit = InboundOrder.Unit;
                            x.WareHouseId = InboundOrder.WareHouseId;
                            x.Specs = InboundOrder.Specs;
                            x.Weight = InboundOrder.Weight;
                            x.Quantity = x.Quantity + item.quantity;
                            x.DrawingNumber = InboundOrder.ProductDrawingNumber;
                            x.Date = InboundOrder.Datetime;
                            details.Add(x);
                            DtBoxingInfoDetail boxdetail = new DtBoxingInfoDetail()
                            {
                                MaterielCode = detail.MaterielCode,
                                MaterielName = detail.MaterielName,
                                DemandClassification = detail.DemandClassification,
                                Warehouse = detail.Warehouse,
                                OrderNo = detail.OrderNo,
                                Unit = detail.Unit,
                                Specs = detail.Specs,
                                Weight = detail.Weight,
                                WareHouseId = detail.WareHouseId,
                                Quantity = item.quantity,
                                DrawingNumber = detail.DrawingNumber,
                                Date = detail.Date,
                            };
                            details.Add(boxdetail);
                        }
                        else
                        {
                            DtBoxingInfoDetail detail = new DtBoxingInfoDetail()
                            {
                                MaterielCode = InboundOrder.MaterialNo,
                                MaterielName = InboundOrder.MaterialName,
                                DemandClassification = InboundOrder.DemandClassification,
                                Warehouse = InboundOrder.WarehouseName,
                                OrderNo = InboundOrder.UpperOrderNo,
                                Unit = InboundOrder.Unit,
                                Specs = InboundOrder.Specs,
                                Weight = InboundOrder.Weight,
                                WareHouseId = InboundOrder.WareHouseId,
                                Quantity = item.quantity,
                                DrawingNumber = InboundOrder.ProductDrawingNumber,
                                Date = InboundOrder.Datetime,
                            };
                            details.Add(detail);
                            details = GetDtBoxingInfoDetails(item, details);
                        }
                    }
                    else
                    {
                        return content.Error("未找到入库单据信息");
                        details = GetDtBoxingInfoDetails(item, details);
                    }
                }
                infos.StockStatus = (int)StockStateEmun.组盘撤销;
                DtBoxingInfo_Hty stockhty = infos.Adapt<DtBoxingInfo_Hty>();
                stockhty.ModifyDate = DateTime.Now;
                DtBoxingInfo boxing = new DtBoxingInfo()
                {
                    PalletCode = groupPlate.palletCode,
                    StockStatus = (int)StockStateEmun.组盘暂存,
                    BoxingInfoDetails = details
                };
                await _unitOfWorkManage.UseTranAsync(async () =>
                {
                    await BaseDal.Db.DeleteNav<DtBoxingInfo>(x => x.Id == infos.Id)
                                        .Include(x => x.BoxingInfoDetails)
                                        .ExecuteCommandAsync();
                    await AddStockHtyAsync(stockhty);
                    await BaseDal.AddDataNavAsync(boxing);
                });
                return content.OK("组盘成功");
            }
            else
            {
                foreach (var item in groupPlate.groups)
                {
                    #region
                    //var InboundOrder = _inboundOrderRepository.QueryFirst(x => x.OrderNo == item.orderNo);
                    //if (InboundOrder != null)
                    //{
                    //    var x = details.Where(x => x.MaterielCode == InboundOrder.MaterialNo && x.Warehouse == InboundOrder.WarehouseName && x.DrawingNumber == InboundOrder.ProductDrawingNumber && x.DemandClassification == InboundOrder.DemandClassification).FirstOrDefault();
                    //    if (x != null)
                    //    {
                    //        details.Remove(x);
                    //        x.MaterielCode = InboundOrder.MaterialNo;
                    //        x.MaterielName = InboundOrder.MaterialName;
                    //        x.DemandClassification = InboundOrder.DemandClassification;
                    //        x.Warehouse = InboundOrder.WarehouseName;
                    //        x.OrderNo = InboundOrder.OrderNo;
                    //        x.Unit = InboundOrder.Unit;
                    //        x.WareHouseId = InboundOrder.WareHouseId;
                    //        x.Specs = InboundOrder.Specs;
                    //        x.Weight = InboundOrder.Weight;
                    //        x.Quantity = x.Quantity + item.quantity;
                    //        x.DrawingNumber = InboundOrder.ProductDrawingNumber;
                    //        x.Date = InboundOrder.Datetime;
                    //        details.Add(x);
                    //    }
                    //    else
                    //    {
                    //        DtBoxingInfoDetail detail = new DtBoxingInfoDetail()
                    //        {
                    //            MaterielCode = InboundOrder.MaterialNo,
                    //            MaterielName = InboundOrder.MaterialName,
                    //            DemandClassification = InboundOrder.DemandClassification,
                    //            Warehouse = InboundOrder.WarehouseName,
                    //            OrderNo = InboundOrder.OrderNo,
                    //            Unit = InboundOrder.Unit,
                    //            Specs = InboundOrder.Specs,
                    //            Weight = InboundOrder.Weight,
                    //            WareHouseId = InboundOrder.WareHouseId,
                    //            Quantity = item.quantity,
                    //            DrawingNumber = InboundOrder.ProductDrawingNumber,
                    //            Date = InboundOrder.Datetime,
                    //        };
                    //        details.Add(detail);
                    //    }
                    //}
                    //else
                    //{
                    //    return content.Error("未找到入库单据信息");
                    //}
                    #endregion
                    details = GetDtBoxingInfoDetails(item,details);
                }
                DtBoxingInfo boxing = new DtBoxingInfo()
                {
@@ -166,15 +225,66 @@
                    BoxingInfoDetails = details
                };
                await BaseDal.AddDataNavAsync(boxing);
                content.OK("组盘成功");
                return content.OK("组盘成功");
            }
            return content;
        }
        catch (Exception ex)
        {
            return content.Error(ex.Message);
        }
    }
    public List<DtBoxingInfoDetail> GetDtBoxingInfoDetails(GroupPlateInfo info, List<DtBoxingInfoDetail> details)
    {
        var InboundOrder = _inboundOrderRepository.QueryFirst(x => x.OrderNo == info.orderNo);
        if (InboundOrder != null)
        {
            var x = details.Where(x => x.MaterielCode == InboundOrder.MaterialNo && x.Warehouse == InboundOrder.WarehouseName && x.DrawingNumber == InboundOrder.ProductDrawingNumber && x.DemandClassification == InboundOrder.DemandClassification).FirstOrDefault();
            if (x != null)
            {
                details.Remove(x);
                x.MaterielCode = InboundOrder.MaterialNo;
                x.MaterielName = InboundOrder.MaterialName;
                x.DemandClassification = InboundOrder.DemandClassification;
                x.Warehouse = InboundOrder.WarehouseName;
                x.OrderNo = InboundOrder.OrderNo;
                x.Unit = InboundOrder.Unit;
                x.WareHouseId = InboundOrder.WareHouseId;
                x.Specs = InboundOrder.Specs;
                x.Weight = InboundOrder.Weight;
                x.Quantity = x.Quantity + info.quantity;
                x.DrawingNumber = InboundOrder.ProductDrawingNumber;
                x.Date = InboundOrder.Datetime;
                details.Add(x);
            }
            else
            {
                DtBoxingInfoDetail boxdetail = new DtBoxingInfoDetail()
                {
                    MaterielCode = InboundOrder.MaterialNo,
                    MaterielName = InboundOrder.MaterialName,
                    DemandClassification = InboundOrder.DemandClassification,
                    Warehouse = InboundOrder.WarehouseName,
                    OrderNo = InboundOrder.OrderNo,
                    Unit = InboundOrder.Unit,
                    Specs = InboundOrder.Specs,
                    Weight = InboundOrder.Weight,
                    WareHouseId = InboundOrder.WareHouseId,
                    Quantity = info.quantity,
                    DrawingNumber = InboundOrder.ProductDrawingNumber,
                    Date = InboundOrder.Datetime,
                };
                details.Add(boxdetail);
            }
            return details;
        }
        else
        {
            throw new Exception($"未找到入库单据{info.orderNo}");
        }
    }
    #endregion
    #region è§£ç›˜
@@ -187,7 +297,7 @@
            {
                return content.Error("参数错误");
            }
            var boxingInfo = await BaseDal.QueryFirstNavAsync(x => x.PalletCode == groupPlate.palletCode && x.StockStatus == (int)StockStateEmun.组盘暂存);
            var boxingInfo = await BaseDal.QueryFirstNavAsync(x => x.PalletCode == groupPlate.palletCode);
            if (!boxingInfo.IsNullOrEmpty())
            {
                boxingInfo.StockStatus = (int)StockStateEmun.组盘撤销;
@@ -215,7 +325,7 @@
    }
    private async Task AddStockHtyAsync(DtBoxingInfo_Hty stockhty)
    {
        var isStockAdd = await SqlSugarHelper.DbWMS.InsertNav(stockhty).IncludesAllFirstLayer().ExecuteCommandAsync();
        var isStockAdd = await SqlSugarHelper.DbWMS.InsertNav(stockhty).Include(x=>x.BoxingInfoDetails).ExecuteCommandAsync();
        if (!isStockAdd)
        {
            throw new Exception("库存历史信息添加失败");