Browse Source

优化出库结果提交和装配结果提交代码

SunYaLong 1 year ago
parent
commit
116cf832e5

+ 8 - 1
ZrAdminNetCore-net7.0/ZR.Admin.WebApi/Controllers/Balance/StkBalanceDtlController.cs

@@ -138,7 +138,14 @@ namespace ZR.Admin.WebApi.Controllers.Balance
             int qty = 0;
             foreach (var item in response)
             {
-                qty += item.BalanceQty;
+                if (parm.IsForAssemble)
+                {
+                    qty += item.OutQty - item.AssembleQty;
+                }
+                else
+                {
+                    qty += item.BalanceQty - item.OutQty;
+                }
             }
             return SUCCESS(qty);
         }

+ 2 - 2
ZrAdminNetCore-net7.0/ZR.Admin.WebApi/Controllers/Inspect/QaInspectRecordController.cs

@@ -229,7 +229,7 @@ namespace ZR.Admin.WebApi.Controllers.Inspect
                     qaInspectRecord.UpdateBy = HttpContext.GetName();
                     qaInspectRecord.UpdateTime = DateTime.Now;
                     qaInspectRecord.Result = "OK";
-                    qaInspectRecord.CheckQty = (int)sapDeliverMd.CheckQty;
+                    qaInspectRecord.CheckQty = realNeedNum;
                     qaInspectRecord.BnSnCode = parm.BnSnCode;
                     QaInspectList.Add(qaInspectRecord);
                     break;
@@ -251,7 +251,7 @@ namespace ZR.Admin.WebApi.Controllers.Inspect
                     qaInspectRecord.UpdateBy = HttpContext.GetName();
                     qaInspectRecord.UpdateTime = DateTime.Now;
                     qaInspectRecord.Result = "OK";
-                    qaInspectRecord.CheckQty = (int)sapDeliverMd.CheckQty;
+                    qaInspectRecord.CheckQty = tmpNeedNum;
                     qaInspectRecord.BnSnCode = parm.BnSnCode;
                     QaInspectList.Add(qaInspectRecord);
                 }

+ 71 - 26
ZrAdminNetCore-net7.0/ZR.Admin.WebApi/Controllers/OutStore/OutAssembleRecordController.cs

@@ -15,6 +15,7 @@ using ZR.Model.Dto.Balance;
 using ZR.Model.Models.Balance;
 using ZR.Service.Business.OutStore;
 using ZR.Service.Business.IBusinessService.Balance;
+using Aliyun.OSS;
 
 namespace ZR.Admin.WebApi.Controllers.OutStore
 {
@@ -157,7 +158,7 @@ namespace ZR.Admin.WebApi.Controllers.OutStore
             {
                 throw new CustomException(ResultCode.PARAM_ERROR, "上传的实物图片不能为空!!");
             }
-            SapBomRecord sapBomRecordMd = assembleDataDto.Adapt<SapBomRecord>().ToUpdate();
+            SapBomRecord sapBomRecordMd = assembleDataDto.Adapt<SapBomRecord>().ToUpdate(HttpContext);
             sapBomRecordMd.AssembleQty += assembleDataDto.AssembleNum;
             if (sapBomRecordMd.AssembleQty >= sapBomRecordMd.Qty)
             {
@@ -186,45 +187,89 @@ namespace ZR.Admin.WebApi.Controllers.OutStore
                 IsForAssemble = true,
             }).Adapt<List<StkBalanceDtl>>();
 
+            int sumBal = list.Sum(x => x.OutQty - x.AssembleQty);
+
+            if (sumBal < assembleDataDto.AssembleNum)
+            {
+                throw new CustomException(ResultCode.INVALID_REQUEST, $"已出库的库存数量:【{sumBal}】小于本次装配需求数量:【{assembleDataDto.AssembleQty}】!!");
+            }
+
+            int myAssembleNum = assembleDataDto.AssembleNum;
             int allotNum = 0;
-            Dictionary<int, int> allocDic = new();
-            foreach (var item in list)
+            List<StkBalanceDtl> allotList = new();
+            while (true)
             {
-                if ((item.BalanceQty + allotNum) <= assembleDataDto.Qty)
+                StkBalanceDtl? balanceDtl = list.FirstOrDefault(x => (x.OutQty - x.AssembleQty) > 0);
+                if (balanceDtl == null || allotNum >= myAssembleNum)
                 {
-                    allotNum += item.BalanceQty;
-                    allocDic.Add(item.BalanceId, item.BalanceQty);
-                }
-                else
-                {
-                    allotNum += item.BalanceQty;
-                    allocDic.Add(item.BalanceId, allotNum - assembleDataDto.Qty);
                     break;
                 }
-            }
+                int tmpBalAssembleNum = balanceDtl.OutQty - balanceDtl.AssembleQty;
 
-            int response3 = 0;
-            foreach (var item in allocDic)
-            {
-                StkBalanceDtl md = list.FirstOrDefault(x => x.BalanceId == item.Key);
-                if (md.BalanceQty == item.Value)
+                if ((allotNum + tmpBalAssembleNum) > myAssembleNum)
                 {
-                    md.Status = 99;
-                    md.UpdateBy = HttpContext.GetName();
-                    md.UpdateTime = DateTime.Now;
-                    response3 += _StkBalanceDtlService.Update(md);
+                    int realNeedNum = myAssembleNum - allotNum;
+                    allotNum += realNeedNum;
+                    balanceDtl.AssembleQty += realNeedNum;
+                    balanceDtl.UpdateBy = HttpContext.GetName();
+                    balanceDtl.UpdateTime = DateTime.Now;
+                    allotList.Add(balanceDtl);
+                    break;
                 }
                 else
                 {
-                    md.Status = 88;
-                    md.BalanceQty = item.Value;
-                    md.UpdateBy = HttpContext.GetName();
-                    md.UpdateTime = DateTime.Now;
-                    response3 += _StkBalanceDtlService.Update(md);
+                    allotNum += tmpBalAssembleNum;
+                    balanceDtl.AssembleQty += tmpBalAssembleNum;
+                    balanceDtl.UpdateBy = HttpContext.GetName();
+                    balanceDtl.UpdateTime = DateTime.Now;
+                    balanceDtl.Status = 99;
+                    allotList.Add(balanceDtl);
                 }
             }
+            //int allotNum = 0;
+            //Dictionary<int, int> allocDic = new();
+            //foreach (var item in list)
+            //{
+            //    if ((item.BalanceQty + allotNum) <= assembleDataDto.AssembleNum)
+            //    {
+            //        allotNum += item.BalanceQty;
+            //        allocDic.Add(item.BalanceId, item.BalanceQty);
+            //    }
+            //    else
+            //    {
+            //        allotNum += item.BalanceQty;
+            //        allocDic.Add(item.BalanceId, allotNum - assembleDataDto.Qty);
+            //        break;
+            //    }
+            //}
+
+            //int response3 = 0;
+            //foreach (var item in allocDic)
+            //{
+            //    StkBalanceDtl md = list.FirstOrDefault(x => x.BalanceId == item.Key);
+            //    if (md.BalanceQty == item.Value)
+            //    {
+            //        md.Status = 99;
+            //        md.UpdateBy = HttpContext.GetName();
+            //        md.UpdateTime = DateTime.Now;
+            //        response3 += _StkBalanceDtlService.Update(md);
+            //    }
+            //    else
+            //    {
+            //        md.Status = 88;
+            //        md.BalanceQty = item.Value;
+            //        md.UpdateBy = HttpContext.GetName();
+            //        md.UpdateTime = DateTime.Now;
+            //        response3 += _StkBalanceDtlService.Update(md);
+            //    }
+            //}
             int response1 = _SapBomRecordService.Update(sapBomRecordMd);
             int response2 = _OutAssembleRecordService.Insert(assembleRecordMd);
+            int response3 = 0;
+            foreach (var item in allotList)
+            {
+                response3 += _StkBalanceDtlService.Update(item);
+            }
             return ToResponse(response1 + response2 + response3);
         }
         #endregion

+ 75 - 30
ZrAdminNetCore-net7.0/ZR.Admin.WebApi/Controllers/OutStore/OutOutstoreRecordController.cs

@@ -153,7 +153,7 @@ namespace ZR.Admin.WebApi.Controllers.OutStore
             }
 
             OutOutstoreRecord outOutstoreMd = parm.Adapt<OutOutstoreRecord>();
-            outOutstoreMd.OutSotreNo = parm.BomNo;
+            outOutstoreMd.OutSotreNo = sapOutTaskRecordMd.OutTaskNo;
             outOutstoreMd.BnSnCode = parm.BnSnCode;
             outOutstoreMd.OutStoreQty = parm.OutNum;
             outOutstoreMd.Result = 99;
@@ -172,49 +172,94 @@ namespace ZR.Admin.WebApi.Controllers.OutStore
                 Qty = parm.Qty,
             }).Adapt<List<StkBalanceDtl>>();
 
+            int sumBal = list.Sum(x => x.BalanceQty - x.OutQty);
+
+            if (sumBal < parm.OutNum)
+            {
+                throw new CustomException(ResultCode.INVALID_REQUEST, $"在库的库存数量:【{sumBal}】小于本次出库需求数量:【{parm.OutNum}】!!");
+            }
+
+            int myOutNum = parm.OutNum;
             int allotNum = 0;
-            Dictionary<int, int> allocDic = new();
-            foreach (var item in list)
+            List<StkBalanceDtl> allotList = new();
+            while (true)
             {
-                if ((item.BalanceQty + allotNum) <= parm.Qty)
+                StkBalanceDtl? balanceDtl = list.FirstOrDefault(x => (x.BalanceQty - x.OutQty) > 0);
+                if (balanceDtl == null || allotNum >= myOutNum)
                 {
-                    allotNum += item.BalanceQty;
-                    allocDic.Add(item.BalanceId, item.BalanceQty);
-                }
-                else
-                {
-                    allotNum += item.BalanceQty;
-                    allocDic.Add(item.BalanceId, allotNum - parm.Qty);
                     break;
                 }
-            }
+                int tmpBalOutNum = balanceDtl.BalanceQty - balanceDtl.OutQty;
 
-            int response3 = 0;
-            foreach (var item in allocDic)
-            {
-                StkBalanceDtl md = list.FirstOrDefault(x => x.BalanceId == item.Key);
-                if (md.BalanceQty == item.Value)
+                if ((allotNum + tmpBalOutNum) > myOutNum)
                 {
-                    md.Status = 88;
-                    md.UpdateBy = HttpContext.GetName();
-                    md.UpdateTime = DateTime.Now;
-                    response3 += _StkBalanceDtlService.Update(md);
+                    int realNeedNum = myOutNum - allotNum;
+                    allotNum += realNeedNum;
+                    balanceDtl.OutQty += realNeedNum;
+                    balanceDtl.UpdateBy = HttpContext.GetName();
+                    balanceDtl.UpdateTime = DateTime.Now;
+                    allotList.Add(balanceDtl);
+                    break;
                 }
                 else
                 {
-                    md.Status = 55;
-                    md.BalanceQty = item.Value;
-                    md.UpdateBy = HttpContext.GetName();
-                    md.UpdateTime = DateTime.Now;
-                    response3 += _StkBalanceDtlService.Update(md);
-                }
-                if (outOutstoreMd.MaterialCode == md.MaterialCode)
-                {
-                    outOutstoreMd.KeyFlag = md.KeyFlag;
+                    allotNum += tmpBalOutNum;
+                    balanceDtl.OutQty += tmpBalOutNum;
+                    balanceDtl.UpdateBy = HttpContext.GetName();
+                    balanceDtl.UpdateTime = DateTime.Now;
+                    balanceDtl.Status = 88;
+                    allotList.Add(balanceDtl);
                 }
             }
+
+            //int allotNum = 0;
+            //Dictionary<int, int> allocDic = new();
+            //foreach (var item in list)
+            //{
+            //    if ((item.BalanceQty + allotNum) <= parm.Qty)
+            //    {
+            //        allotNum += item.BalanceQty;
+            //        allocDic.Add(item.BalanceId, item.BalanceQty);
+            //    }
+            //    else
+            //    {
+            //        allotNum += item.BalanceQty;
+            //        allocDic.Add(item.BalanceId, allotNum - parm.Qty);
+            //        break;
+            //    }
+            //}
+
+            //int response3 = 0;
+            //foreach (var item in allocDic)
+            //{
+            //    StkBalanceDtl md = list.FirstOrDefault(x => x.BalanceId == item.Key);
+            //    if (md.BalanceQty == item.Value)
+            //    {
+            //        md.Status = 88;
+            //        md.UpdateBy = HttpContext.GetName();
+            //        md.UpdateTime = DateTime.Now;
+            //        response3 += _StkBalanceDtlService.Update(md);
+            //    }
+            //    else
+            //    {
+            //        md.Status = 55;
+            //        md.BalanceQty = item.Value;
+            //        md.UpdateBy = HttpContext.GetName();
+            //        md.UpdateTime = DateTime.Now;
+            //        response3 += _StkBalanceDtlService.Update(md);
+            //    }
+            //    if (outOutstoreMd.MaterialCode == md.MaterialCode)
+            //    {
+            //        outOutstoreMd.KeyFlag = md.KeyFlag;
+            //    }
+            //}
             int response1 = _SapOutTaskRecordService.UpdateSapOutTaskRecord(sapOutTaskRecordMd);
             int response2 = _OutOutstoreRecordService.Insert(outOutstoreMd);
+            int response3 = 0;
+            foreach (var item in allotList)
+            {
+                response3 += _StkBalanceDtlService.Update(item);
+            }
             return ToResponse(response1 + response2 + response3);
         }
         #endregion

+ 8 - 0
ZrAdminNetCore-net7.0/ZR.Admin.WebApi/Controllers/OutStore/SapBomRecordController.cs

@@ -12,6 +12,7 @@ using ZR.Service.Business;
 using ZR.Service.Business.IBusinessService.OutStore;
 using ZR.Model.Dto.OutStore;
 using ZR.Model.Models.OutStore;
+using ZR.Service.Business.OutStore;
 
 namespace ZR.Admin.WebApi.Controllers.OutStore
 {
@@ -205,6 +206,13 @@ namespace ZR.Admin.WebApi.Controllers.OutStore
             var response = _SapBomRecordService.GetBomRecordList(bomNo);
             return SUCCESS(response);
         }
+        [HttpPost("QuerySapBomRecordListForMaterialSpec")]
+        [ActionPermissionFilter(Permission = "business:sapdeliverrecord:QuerySapBomRecordListForMaterialSpec")]
+        public IActionResult QuerySapBomRecordListForMaterialSpec(string bomNo, string materialSpecCode)
+        {
+            var response = _SapBomRecordService.GetBomRecordList(bomNo, materialSpecCode);
+            return SUCCESS(response);
+        }
         #endregion
     }
 }

+ 20 - 0
ZrAdminNetCore-net7.0/ZR.Admin.WebApi/ZRModel.xml

@@ -53,6 +53,16 @@
             库存管理/库存明细表输入输出对象
             </summary>
         </member>
+        <member name="P:ZR.Model.Dto.Balance.StkBalanceDtlDto.OutQty">
+            <summary>
+            已出库数量 
+            </summary>
+        </member>
+        <member name="P:ZR.Model.Dto.Balance.StkBalanceDtlDto.AssembleQty">
+            <summary>
+            已装配数量 
+            </summary>
+        </member>
         <member name="T:ZR.Model.Dto.BaseSet.BasBinQueryDto">
             <summary>
             基础资料/库位信息表查询对象
@@ -261,6 +271,16 @@
             库存数量 
             </summary>
         </member>
+        <member name="P:ZR.Model.Models.Balance.StkBalanceDtl.OutQty">
+            <summary>
+            已出库数量 
+            </summary>
+        </member>
+        <member name="P:ZR.Model.Models.Balance.StkBalanceDtl.AssembleQty">
+            <summary>
+            已装配数量 
+            </summary>
+        </member>
         <member name="P:ZR.Model.Models.Balance.StkBalanceDtl.Status">
             <summary>
             库存状态(0初始创建,33盘点入库占用,55在库,77盘点出库占用,99出库完成) 

+ 9 - 0
ZrAdminNetCore-net7.0/ZR.Model/Dto/Balance/StkBalanceDtlDto.cs

@@ -105,6 +105,15 @@ namespace ZR.Model.Dto.Balance
         public DateTime? UpdateTime { get; set; }
 
         public string Remark { get; set; }
+        /// <summary>
+        /// 已出库数量 
+        /// </summary>
+        public int OutQty { get; set; }
+
+        /// <summary>
+        /// 已装配数量 
+        /// </summary>
+        public int AssembleQty { get; set; }
 
     }
 }

+ 10 - 0
ZrAdminNetCore-net7.0/ZR.Model/Models/Balance/StkBalanceDtl.cs

@@ -74,6 +74,16 @@ namespace ZR.Model.Models.Balance
         /// </summary>
         public int BalanceQty { get; set; }
 
+        /// <summary>
+        /// 已出库数量 
+        /// </summary>
+        public int OutQty { get; set; }
+
+        /// <summary>
+        /// 已装配数量 
+        /// </summary>
+        public int AssembleQty { get; set; }
+
         /// <summary>
         /// 库存状态(0初始创建,33盘点入库占用,55在库,77盘点出库占用,99出库完成) 
         /// </summary>

+ 1 - 1
ZrAdminNetCore-net7.0/ZR.Service/Business/IBusinessService/OutStore/ISapBomRecordService.cs

@@ -25,7 +25,7 @@ namespace ZR.Service.Business.IBusinessService.OutStore
 
         #region 2023 0524 孙亚龙 新增
         List<SapBomRecordExtDto> GetBomList(SapBomRecordQueryNoPageDto parm);
-        List<SapBomRecordDto> GetBomRecordList(string bomNo);
+        List<SapBomRecordDto> GetBomRecordList(string bomNo, string materialSpecCode = null);
         #endregion
     }
 }

+ 2 - 1
ZrAdminNetCore-net7.0/ZR.Service/Business/OutStore/SapBomRecordService.cs

@@ -150,11 +150,12 @@ namespace ZR.Service.Business.OutStore
             return response.Adapt<List<SapBomRecordExtDto>>();
         }
 
-        public List<SapBomRecordDto> GetBomRecordList(string bomNo)
+        public List<SapBomRecordDto> GetBomRecordList(string bomNo, string materialSpecCode = null)
         {
             //开始拼装查询条件
             var predicate = Expressionable.Create<SapBomRecord>();
             predicate.And(x => x.BomNo == bomNo);
+            predicate.AndIF(!string.IsNullOrEmpty(materialSpecCode), x => x.MaterialSpec == materialSpecCode);
             //predicate.And(x => x.Qty > x.CheckQty);
             //搜索条件查询语法参考Sqlsugar
             var response = Queryable()