소스 검색

新增质检操作、入库操作、出库操作、装配操作业务代码

SunYaLong 2 년 전
부모
커밋
6d936251ad
28개의 변경된 파일1275개의 추가작업 그리고 15개의 파일을 삭제
  1. 16 0
      ZrAdminNetCore-net7.0/ZR.Admin.WebApi/Controllers/Balance/StkBalanceDtlController.cs
  2. 74 4
      ZrAdminNetCore-net7.0/ZR.Admin.WebApi/Controllers/InStore/InInstoreRecordController.cs
  3. 76 3
      ZrAdminNetCore-net7.0/ZR.Admin.WebApi/Controllers/Inspect/QaInspectRecordController.cs
  4. 28 0
      ZrAdminNetCore-net7.0/ZR.Admin.WebApi/Controllers/Inspect/SapDeliverRecordController.cs
  5. 114 2
      ZrAdminNetCore-net7.0/ZR.Admin.WebApi/Controllers/OutStore/OutAssembleRecordController.cs
  6. 93 2
      ZrAdminNetCore-net7.0/ZR.Admin.WebApi/Controllers/OutStore/OutOutstoreRecordController.cs
  7. 28 0
      ZrAdminNetCore-net7.0/ZR.Admin.WebApi/Controllers/OutStore/SapBomRecordController.cs
  8. 149 0
      ZrAdminNetCore-net7.0/ZR.Admin.WebApi/Controllers/OutStore/SapOutTaskRecordController.cs
  9. 129 0
      ZrAdminNetCore-net7.0/ZR.Admin.WebApi/ZRModel.xml
  10. 12 0
      ZrAdminNetCore-net7.0/ZR.Model/Dto/Balance/StkBalanceDtlDto.cs
  11. 9 1
      ZrAdminNetCore-net7.0/ZR.Model/Dto/Inspect/QaInspectRecordDto.cs
  12. 22 0
      ZrAdminNetCore-net7.0/ZR.Model/Dto/Inspect/SapDeliverRecordDto.cs
  13. 12 1
      ZrAdminNetCore-net7.0/ZR.Model/Dto/OutStore/SapBomRecordDto.cs
  14. 81 0
      ZrAdminNetCore-net7.0/ZR.Model/Dto/OutStore/SapOutTaskRecordDto.cs
  15. 1 1
      ZrAdminNetCore-net7.0/ZR.Model/Models/InStore/InInstoreRecord.cs
  16. 12 0
      ZrAdminNetCore-net7.0/ZR.Model/Models/Inspect/QaInspectRecord.cs
  17. 1 1
      ZrAdminNetCore-net7.0/ZR.Model/Models/OutStore/OutAssembleRecord.cs
  18. 97 0
      ZrAdminNetCore-net7.0/ZR.Model/Models/OutStore/SapOutTaskRecord.cs
  19. 51 0
      ZrAdminNetCore-net7.0/ZR.Service/Business/Balance/StkBalanceDtlService.cs
  20. 4 0
      ZrAdminNetCore-net7.0/ZR.Service/Business/IBusinessService/Balance/IStkBalanceDtlService.cs
  21. 5 0
      ZrAdminNetCore-net7.0/ZR.Service/Business/IBusinessService/Inspect/IQaInspectRecordService.cs
  22. 5 0
      ZrAdminNetCore-net7.0/ZR.Service/Business/IBusinessService/Inspect/ISapDeliverRecordService.cs
  23. 5 0
      ZrAdminNetCore-net7.0/ZR.Service/Business/IBusinessService/OutStore/ISapBomRecordService.cs
  24. 28 0
      ZrAdminNetCore-net7.0/ZR.Service/Business/IBusinessService/OutStore/ISapOutTaskRecordService.cs
  25. 34 0
      ZrAdminNetCore-net7.0/ZR.Service/Business/Inspect/QaInspectRecordService.cs
  26. 34 0
      ZrAdminNetCore-net7.0/ZR.Service/Business/Inspect/SapDeliverRecordService.cs
  27. 32 0
      ZrAdminNetCore-net7.0/ZR.Service/Business/OutStore/SapBomRecordService.cs
  28. 123 0
      ZrAdminNetCore-net7.0/ZR.Service/Business/OutStore/SapOutTaskRecordService.cs

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

@@ -130,7 +130,23 @@ namespace ZR.Admin.WebApi.Controllers.Balance
             return ToResponse(response);
         }
 
+        #region 2023 0524 孙亚龙 新增
+        [HttpGet("GetStkBalanceDtlList")]
+        public IActionResult GetStkBalanceDtlList([FromQuery] GetOutOperateBalanceQueryDto parm)
+        {
+            var response = _StkBalanceDtlService.GetBalanceDtlList(parm);
+            int qty = 0;
+            foreach (var item in response)
+            {
+                qty += item.BalanceQty;
+            }
+            return SUCCESS(qty);
+        }
+        #endregion
+
+        #region 2023 0524 孙亚龙 新增
 
+        #endregion
 
     }
 }

+ 74 - 4
ZrAdminNetCore-net7.0/ZR.Admin.WebApi/Controllers/InStore/InInstoreRecordController.cs

@@ -10,6 +10,11 @@ using ZR.Common;
 using ZR.Service.Business.IBusinessService.InStore;
 using ZR.Model.Dto.InStore;
 using ZR.Model.Models.InStore;
+using ZR.Model.Dto.Inspect;
+using ZR.Model.Models.Balance;
+using ZR.Model.Models.Inspect;
+using ZR.Service.Business.IBusinessService.Balance;
+using ZR.Service.Business.IBusinessService.Inspect;
 
 namespace ZR.Admin.WebApi.Controllers.InStore
 {
@@ -24,15 +29,23 @@ namespace ZR.Admin.WebApi.Controllers.InStore
     [Route("business/InInstoreRecord")]
     public class InInstoreRecordController : BaseController
     {
+        #region 依赖注入项
+        private readonly IInInstoreRecordService _InInstoreRecordService;
+        private readonly IQaInspectRecordService _QaInspectRecordService;
+        private readonly IStkBalanceDtlService _StkBalanceDtlService;
         /// <summary>
-        /// 入库管理/入库记录表接口
+        /// 构造函数
         /// </summary>
-        private readonly IInInstoreRecordService _InInstoreRecordService;
-
-        public InInstoreRecordController(IInInstoreRecordService InInstoreRecordService)
+        public InInstoreRecordController(
+            IInInstoreRecordService InInstoreRecordService,
+            IQaInspectRecordService QaInspectRecordService,
+            IStkBalanceDtlService StkBalanceDtlService)
         {
             _InInstoreRecordService = InInstoreRecordService;
+            _QaInspectRecordService = QaInspectRecordService;
+            _StkBalanceDtlService = StkBalanceDtlService;
         }
+        #endregion
 
         /// <summary>
         /// 查询入库管理/入库记录表列表
@@ -120,6 +133,63 @@ namespace ZR.Admin.WebApi.Controllers.InStore
         }
 
 
+        #region 2023 0524 孙亚龙 新增
+        /// <summary>
+        /// 添加入库记录数据, 并更新对应的质检记录
+        /// </summary>
+        /// <param name="parm"></param>
+        /// <returns></returns>
+        /// <exception cref="CustomException"></exception>
+        [HttpPost("AddCheckedSapDeliverInstoreDtlResult")]
+        [ActionPermissionFilter(Permission = "business:ininstorerecord:AddCheckedSapDeliverInstoreDtlResult")]
+        public IActionResult AddCheckedSapDeliverInstoreDtlResult([FromBody] QaInspectRecordDto parm)
+        {
+            if (parm == null)
+            {
+                throw new CustomException("请求实体不能为空");
+            }
+            QaInspectRecord qaInspectRecordMd = parm.Adapt<QaInspectRecord>().ToUpdate(HttpContext);
+            TypeAdapterConfig config = new();
+            config.ForType<QaInspectRecordDto, InInstoreRecord>()
+                .Ignore(dest => dest.Result)
+                .NameMatchingStrategy(NameMatchingStrategy.IgnoreCase);
+
+            InInstoreRecord inInstoreRecordMd = parm.Adapt<InInstoreRecord>(config);
+            if (qaInspectRecordMd.InstoreQty >= qaInspectRecordMd.CheckQty)
+            {
+                qaInspectRecordMd.InstoreResult = 99;
+            }
+            inInstoreRecordMd.InStoreNo = parm.DeliverNo;
+            inInstoreRecordMd.Result = 99;
+            inInstoreRecordMd.CreateBy = HttpContext.GetName();
+            inInstoreRecordMd.CreateTime = DateTime.Now;
+            inInstoreRecordMd.CreateBy = HttpContext.GetName();
+            inInstoreRecordMd.CreateTime = DateTime.Now;
+            inInstoreRecordMd.UpdateBy = HttpContext.GetName();
+            inInstoreRecordMd.UpdateTime = DateTime.Now;
+
+            StkBalanceDtl stkBalanceDtlMd = parm.Adapt<StkBalanceDtl>();
+            stkBalanceDtlMd.RegionId = 1;
+            stkBalanceDtlMd.BinId = 1;
+            stkBalanceDtlMd.CreateBy = HttpContext.GetName();
+            stkBalanceDtlMd.CreateTime = DateTime.Now;
+            stkBalanceDtlMd.CreateBy = HttpContext.GetName();
+            stkBalanceDtlMd.CreateTime = DateTime.Now;
+            stkBalanceDtlMd.UpdateBy = HttpContext.GetName();
+            stkBalanceDtlMd.UpdateTime = DateTime.Now;
+            stkBalanceDtlMd.BalanceQty = inInstoreRecordMd.InStoreQty;
+            stkBalanceDtlMd.Status = 55;
+
+
+
+            int response = _QaInspectRecordService.UpdateQaInspectRecord(qaInspectRecordMd);
+            int response1 = _InInstoreRecordService.AddInInstoreRecord(inInstoreRecordMd);
+            int response2 = _StkBalanceDtlService.AddStkBalanceDtl(stkBalanceDtlMd);
+
+            return ToResponse(response + response1 + response2);
+        }
+        #endregion
+
 
     }
 }

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

@@ -10,6 +10,7 @@ using ZR.Common;
 using ZR.Service.Business.IBusinessService.Inspect;
 using ZR.Model.Dto.Inspect;
 using ZR.Model.Models.Inspect;
+using ZR.Service.Business.Inspect;
 
 namespace ZR.Admin.WebApi.Controllers.Inspect
 {
@@ -24,15 +25,23 @@ namespace ZR.Admin.WebApi.Controllers.Inspect
     [Route("business/QaInspectRecord")]
     public class QaInspectRecordController : BaseController
     {
+        #region 依赖注入项
         /// <summary>
-        /// 质检管理/质检记录表接口
+        /// 接口
         /// </summary>
+        private readonly ISapDeliverRecordService _SapDeliverRecordService;
         private readonly IQaInspectRecordService _QaInspectRecordService;
-
-        public QaInspectRecordController(IQaInspectRecordService QaInspectRecordService)
+        /// <summary>
+        /// 构造函数
+        /// </summary>
+        public QaInspectRecordController(
+            ISapDeliverRecordService SapDeliverRecordService,
+            IQaInspectRecordService QaInspectRecordService)
         {
             _QaInspectRecordService = QaInspectRecordService;
+            _SapDeliverRecordService = SapDeliverRecordService;
         }
+        #endregion
 
         /// <summary>
         /// 查询质检管理/质检记录表列表
@@ -121,5 +130,69 @@ namespace ZR.Admin.WebApi.Controllers.Inspect
 
 
 
+        #region 2023 0524 孙亚龙 新增
+        /// <summary>
+        /// 查询质检完成,未入库完成的交验单号
+        /// </summary>
+        /// <param name="parm"></param>
+        /// <returns></returns>
+        [HttpPost("QueryCheckedSapDeliverData")]
+        [ActionPermissionFilter(Permission = "business:sapdeliverrecord:QueryCheckedSapDeliverData")]
+        public IActionResult QueryCheckedSapDeliverData([FromBody] QaInspectRecordQueryNoPageDto parm)
+        {
+            var response = _QaInspectRecordService.GetCheckedDeliverData(parm);
+            return SUCCESS(response);
+        }
+        /// <summary>
+        /// 根据交验单号 查询已质检完成的交验单明细数据
+        /// </summary>
+        /// <param name="deliverNo">交验单号</param>
+        /// <returns></returns>
+        [HttpPost("QueryCheckedSapDeliverDtlData")]
+        [ActionPermissionFilter(Permission = "business:sapdeliverrecord:QueryCheckedSapDeliverDtlData")]
+        public IActionResult QueryCheckedSapDeliverDtlData(string deliverNo)
+        {
+            var response = _QaInspectRecordService.GetCheckedSapDeliverRecordList(deliverNo);
+            return SUCCESS(response);
+        }
+
+        /// <summary>
+        /// 添加质检记录,并更新对应的交验单明细
+        /// </summary>
+        /// <param name="parm">已质检的交验单明细 Dto实体类</param>
+        /// <returns></returns>
+        /// <exception cref="CustomException"></exception>
+        [HttpPost("addSapDeliverDtlInspectResult")]
+        [ActionPermissionFilter(Permission = "business:sapdeliverrecord:addSapDeliverDtlInspectResult")]
+        public IActionResult AddSapDeliverDtlInspectResult([FromBody] SapDeliverRecordExtDto parm)
+        {
+            if (parm == null)
+            {
+                throw new CustomException("请求实体不能为空");
+            }
+            SapDeliverRecord sapDeliverRecordMd = parm.Adapt<SapDeliverRecord>().ToUpdate(HttpContext);
+            QaInspectRecord qaInspectRecordMd = parm.Adapt<QaInspectRecord>();
+            sapDeliverRecordMd.CheckQty += parm.CheckOkQty;
+            if (sapDeliverRecordMd.CheckQty >= sapDeliverRecordMd.Qty)
+            {
+                sapDeliverRecordMd.CheckResult = "OK";
+            }
+            qaInspectRecordMd.InspectNo = parm.DeliverNo;
+            qaInspectRecordMd.InspectedBy = HttpContext.GetName();
+            qaInspectRecordMd.InspectTime = DateTime.Now;
+            qaInspectRecordMd.CreateBy = HttpContext.GetName();
+            qaInspectRecordMd.CreateTime = DateTime.Now;
+            qaInspectRecordMd.UpdateBy = HttpContext.GetName();
+            qaInspectRecordMd.UpdateTime = DateTime.Now;
+            qaInspectRecordMd.Result = "OK";
+            qaInspectRecordMd.CheckQty = parm.CheckOkQty;
+
+            int response = _SapDeliverRecordService.UpdateSapDeliverRecord(sapDeliverRecordMd);
+            int response1 = _QaInspectRecordService.AddQaInspectRecord(qaInspectRecordMd);
+
+            return ToResponse(response + response1);
+        }
+        #endregion
+
     }
 }

+ 28 - 0
ZrAdminNetCore-net7.0/ZR.Admin.WebApi/Controllers/Inspect/SapDeliverRecordController.cs

@@ -201,5 +201,33 @@ namespace ZR.Admin.WebApi.Controllers.Inspect
             return ExportExcel(fileInfo.Item1, fileInfo.Item2);
         }
 
+
+        #region 2023 0524 孙亚龙 新增
+        /// <summary>
+        /// 查询未质检完成的交验单号数据
+        /// </summary>
+        /// <param name="parm">交验单查询Dto实体类 -- 无分页参数</param>
+        /// <returns></returns>
+        [HttpPost("QuerySapDeliverData")]
+        [ActionPermissionFilter(Permission = "business:sapdeliverrecord:QuerySapDeliverData")]
+        public IActionResult QuerySapDeliverData([FromBody] SapDeliverQueryNoPageDto parm)
+        {
+            var response = _SapDeliverRecordService.GetListNoPage(parm);
+            return SUCCESS(response);
+        }
+
+        /// <summary>
+        /// 根据交验单号获取交验单明细数据
+        /// </summary>
+        /// <param name="deliverNo">交验单号</param>
+        /// <returns></returns>
+        [HttpPost("QuerySapDeliverDtlData")]
+        [ActionPermissionFilter(Permission = "business:sapdeliverrecord:QuerySapDeliverDtlData")]
+        public IActionResult QuerySapDeliverDtlData(string deliverNo)
+        {
+            var response = _SapDeliverRecordService.GetSapDeliverRecordList(deliverNo);
+            return SUCCESS(response);
+        }
+        #endregion
     }
 }

+ 114 - 2
ZrAdminNetCore-net7.0/ZR.Admin.WebApi/Controllers/OutStore/OutAssembleRecordController.cs

@@ -10,6 +10,11 @@ using ZR.Common;
 using ZR.Service.Business.IBusinessService.OutStore;
 using ZR.Model.Dto.OutStore;
 using ZR.Model.Models.OutStore;
+using UAParser;
+using ZR.Model.Dto.Balance;
+using ZR.Model.Models.Balance;
+using ZR.Service.Business.OutStore;
+using ZR.Service.Business.IBusinessService.Balance;
 
 namespace ZR.Admin.WebApi.Controllers.OutStore
 {
@@ -25,13 +30,19 @@ namespace ZR.Admin.WebApi.Controllers.OutStore
     public class OutAssembleRecordController : BaseController
     {
         /// <summary>
-        /// 出库管理/装配记录表接口
+        /// 接口
         /// </summary>
         private readonly IOutAssembleRecordService _OutAssembleRecordService;
+        private readonly IStkBalanceDtlService _StkBalanceDtlService;
+        private readonly ISapBomRecordService _SapBomRecordService;
 
-        public OutAssembleRecordController(IOutAssembleRecordService OutAssembleRecordService)
+        public OutAssembleRecordController(IOutAssembleRecordService OutAssembleRecordService,
+                                            IStkBalanceDtlService StkBalanceDtlService,
+                                            ISapBomRecordService SapBomRecordService)
         {
             _OutAssembleRecordService = OutAssembleRecordService;
+            _StkBalanceDtlService = StkBalanceDtlService;
+            _SapBomRecordService = SapBomRecordService;
         }
 
         /// <summary>
@@ -120,6 +131,107 @@ namespace ZR.Admin.WebApi.Controllers.OutStore
         }
 
 
+        #region 2023 0524 孙亚龙 新增
+        [HttpPost("AddOutAssembleRecordForFile")]
+        [ActionPermissionFilter(Permission = "AddOutAssembleRecordForFile")]
+        public IActionResult AddOutAssembleRecordForFile([FromForm] SapBomRecordAssembleExtDto assembleDataDto)
+        {
+            IFormFile? formFile;
+            ClientInfo clientInfo = HttpContext.GetClientInfo();
+            if (clientInfo.OS.ToString().Contains("Android 10"))
+            {
+                var file11 = HttpContext.Request.Form.Files[0];
+                formFile = file11;
+            }
+            else
+            {
+                formFile = assembleDataDto.File;
+            }
+            if (formFile == null)
+            {
+                throw new CustomException(ResultCode.PARAM_ERROR, "上传的实物图片不能为空!!");
+            }
+            SapBomRecord sapBomRecordMd = assembleDataDto.Adapt<SapBomRecord>().ToUpdate();
+            sapBomRecordMd.AssembleQty += assembleDataDto.AssembleNum;
+            if (sapBomRecordMd.AssembleQty >= sapBomRecordMd.Qty)
+            {
+                sapBomRecordMd.Result = 99;
+            }
+            OutAssembleRecord assembleRecordMd = assembleDataDto.Adapt<OutAssembleRecord>();
+            using var stream = formFile.OpenReadStream();
+            BinaryReader br = new(stream);
+            byte[] byData = br.ReadBytes((int)stream.Length);
+            assembleRecordMd.Picture = byData;
+            assembleRecordMd.BnSnCode = assembleDataDto.BnSnCode;
+            assembleRecordMd.AssembleQty = assembleDataDto.AssembleNum;
+            assembleRecordMd.CreateBy = HttpContext.GetName();
+            assembleRecordMd.CreateTime = DateTime.Now;
+            assembleRecordMd.CreateBy = HttpContext.GetName();
+            assembleRecordMd.CreateTime = DateTime.Now;
+            assembleRecordMd.UpdateBy = HttpContext.GetName();
+            assembleRecordMd.UpdateTime = DateTime.Now;
+            assembleRecordMd.Result = 99;
+
+            List<StkBalanceDtl> list = _StkBalanceDtlService.GetBalanceDtlList(new GetOutOperateBalanceQueryDto
+            {
+                BomNo = assembleDataDto.BomNo,
+                MaterialCode = assembleDataDto.MaterialCode,
+                BnSnCode = assembleDataDto.BnSnCode,
+                IsForAssemble = true,
+            }).Adapt<List<StkBalanceDtl>>();
+
+            int allotNum = 0;
+            Dictionary<int, int> allocDic = new();
+            foreach (var item in list)
+            {
+                if ((item.BalanceQty + allotNum) <= assembleDataDto.Qty)
+                {
+                    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);
+            return ToResponse(response1 + response2 + response3);
+        }
+        #endregion
+
+    }
+    public class SapBomRecordAssembleExtDto : SapBomRecordDto
+    {
+        /// <summary>
+        /// 本次装配数量
+        /// </summary>
+        public int AssembleNum { get; set; }
+        public string BnSnCode { get; set; }
+        public IFormFile? File { get; set; }
 
     }
 }

+ 93 - 2
ZrAdminNetCore-net7.0/ZR.Admin.WebApi/Controllers/OutStore/OutOutstoreRecordController.cs

@@ -10,6 +10,10 @@ using ZR.Common;
 using ZR.Service.Business.IBusinessService.OutStore;
 using ZR.Model.Dto.OutStore;
 using ZR.Model.Models.OutStore;
+using ZR.Service.Business.IBusinessService.Balance;
+using ZR.Model.Dto.Balance;
+using ZR.Model.Models.Balance;
+using ZR.Model.Models;
 
 namespace ZR.Admin.WebApi.Controllers.OutStore
 {
@@ -25,13 +29,19 @@ namespace ZR.Admin.WebApi.Controllers.OutStore
     public class OutOutstoreRecordController : BaseController
     {
         /// <summary>
-        /// 出库管理/出库记录表接口
+        /// 接口
         /// </summary>
         private readonly IOutOutstoreRecordService _OutOutstoreRecordService;
+        private readonly IStkBalanceDtlService _StkBalanceDtlService;
+        private readonly ISapOutTaskRecordService _SapOutTaskRecordService;
 
-        public OutOutstoreRecordController(IOutOutstoreRecordService OutOutstoreRecordService)
+        public OutOutstoreRecordController(IOutOutstoreRecordService OutOutstoreRecordService,
+            IStkBalanceDtlService StkBalanceDtlService,
+            ISapOutTaskRecordService SapOutTaskRecordService)
         {
             _OutOutstoreRecordService = OutOutstoreRecordService;
+            _StkBalanceDtlService = StkBalanceDtlService;
+            _SapOutTaskRecordService = SapOutTaskRecordService;
         }
 
         /// <summary>
@@ -120,6 +130,87 @@ namespace ZR.Admin.WebApi.Controllers.OutStore
         }
 
 
+        #region 2023 0524 孙亚龙 新增
+        [HttpPost("AddOutstoreRecord")]
+        public IActionResult AddOutstoreRecord([FromBody] SapOutTaskRecordExtDto parm)
+        {
+            if (parm == null)
+            {
+                throw new CustomException("请求实体不能为空");
+            }
+            SapOutTaskRecord sapOutTaskRecordMd = parm.Adapt<SapOutTaskRecord>().ToUpdate(HttpContext);
+            sapOutTaskRecordMd.OutQty += parm.OutNum;
+            if (sapOutTaskRecordMd.OutQty >= sapOutTaskRecordMd.Qty)
+            {
+                sapOutTaskRecordMd.Result = 99;
+            }
+
+            OutOutstoreRecord outOutstoreMd = parm.Adapt<OutOutstoreRecord>();
+            outOutstoreMd.OutSotreNo = parm.BomNo;
+            outOutstoreMd.BnSnCode = parm.BnSnCode;
+            outOutstoreMd.OutStoreQty = parm.OutNum;
+            outOutstoreMd.Result = 99;
+            outOutstoreMd.CreateBy = HttpContext.GetName();
+            outOutstoreMd.CreateTime = DateTime.Now;
+            outOutstoreMd.CreateBy = HttpContext.GetName();
+            outOutstoreMd.CreateTime = DateTime.Now;
+            outOutstoreMd.UpdateBy = HttpContext.GetName();
+            outOutstoreMd.UpdateTime = DateTime.Now;
+
+            List<StkBalanceDtl> list = _StkBalanceDtlService.GetBalanceDtlList(new GetOutOperateBalanceQueryDto
+            {
+                BomNo = parm.BomNo,
+                MaterialCode = parm.MaterialCode,
+                BnSnCode = parm.BnSnCode,
+                Qty = parm.Qty,
+            }).Adapt<List<StkBalanceDtl>>();
+
+            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);
+            return ToResponse(response1 + response2 + response3);
+        }
+        #endregion
 
     }
 }

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

@@ -178,5 +178,33 @@ namespace ZR.Admin.WebApi.Controllers.OutStore
             return SUCCESS(list);
         }
 
+
+        #region 2023 0524 孙亚龙 新增
+        /// <summary>
+        /// 查询未出库完成的关键件Bom清单号 数据
+        /// </summary>
+        /// <param name="parm">关键件Bom清单查询Dto实体类 -- 无分页参数</param>
+        /// <returns></returns>
+        [HttpPost("QueryBomList")]
+        [ActionPermissionFilter(Permission = "business:sapdeliverrecord:QueryBomList")]
+        public IActionResult QueryBomList([FromBody] SapBomRecordQueryNoPageDto parm)
+        {
+            var response = _SapBomRecordService.GetBomList(parm);
+            return SUCCESS(response);
+        }
+
+        /// <summary>
+        /// 根据Bom单号获取关键件Bom清单明细数据
+        /// </summary>
+        /// <param name="outTaskNo">Bom单号</param>
+        /// <returns></returns>
+        [HttpPost("QuerySapBomRecordList")]
+        [ActionPermissionFilter(Permission = "business:sapdeliverrecord:QuerySapBomRecordList")]
+        public IActionResult QuerySapBomRecordList(string bomNo)
+        {
+            var response = _SapBomRecordService.GetBomRecordList(bomNo);
+            return SUCCESS(response);
+        }
+        #endregion
     }
 }

+ 149 - 0
ZrAdminNetCore-net7.0/ZR.Admin.WebApi/Controllers/OutStore/SapOutTaskRecordController.cs

@@ -0,0 +1,149 @@
+using Infrastructure;
+using Infrastructure.Attribute;
+using Infrastructure.Enums;
+using Infrastructure.Model;
+using Mapster;
+using Microsoft.AspNetCore.Mvc;
+using ZR.Model.Dto;
+using ZR.Model.Models;
+using ZR.Service.Business.IBusinessService;
+using ZR.Admin.WebApi.Extensions;
+using ZR.Admin.WebApi.Filters;
+using ZR.Common;
+using ZR.Service.Business.IBusinessService.OutStore;
+using ZR.Model.Dto.OutStore;
+
+namespace ZR.Admin.WebApi.Controllers.OutStore
+{
+    /// <summary>
+    /// Controller
+    /// 
+    /// @tableName sap_out_task_record
+    /// @author admin
+    /// @date 2023-05-10
+    /// </summary>
+    [Verify]
+    [Route("SapInterface")]
+    public class SapOutTaskRecordController : BaseController
+    {
+        /// <summary>
+        /// 接口
+        /// </summary>
+        private readonly ISapOutTaskRecordService _SapOutTaskRecordService;
+
+        public SapOutTaskRecordController(ISapOutTaskRecordService SapOutTaskRecordService)
+        {
+            _SapOutTaskRecordService = SapOutTaskRecordService;
+        }
+
+        /// <summary>
+        /// 查询列表
+        /// </summary>
+        /// <param name="parm"></param>
+        /// <returns></returns>
+        [HttpGet("QuerySapOutTaskRecord")]
+        [ActionPermissionFilter(Permission = "business:sapouttaskrecord:list")]
+        public IActionResult QuerySapOutTaskRecord([FromQuery] SapOutTaskRecordQueryDto parm)
+        {
+            var response = _SapOutTaskRecordService.GetList(parm);
+            return SUCCESS(response);
+        }
+
+        /// <summary>
+        /// 查询未出库完成的出库任务单号数据
+        /// </summary>
+        /// <param name="parm">出库任务单查询Dto实体类 -- 无分页参数</param>
+        /// <returns></returns>
+        [HttpPost("QuerySapOutTaskList")]
+        [ActionPermissionFilter(Permission = "business:sapdeliverrecord:QuerySapOutTaskList")]
+        public IActionResult QuerySapOutTaskList([FromBody] SapOutTaskQueryNoPageDto parm)
+        {
+            var response = _SapOutTaskRecordService.GetSapOutTaskList(parm);
+            return SUCCESS(response);
+        }
+
+        /// <summary>
+        /// 根据出库任务单号获取出库任务单明细数据
+        /// </summary>
+        /// <param name="outTaskNo">出库任务单号</param>
+        /// <returns></returns>
+        [HttpPost("QuerySapOutTaskRecordList")]
+        [ActionPermissionFilter(Permission = "business:sapdeliverrecord:QuerySapOutTaskRecordList")]
+        public IActionResult QuerySapOutTaskRecordList(string outTaskNo)
+        {
+            var response = _SapOutTaskRecordService.GetSapOutTaskRecordList(outTaskNo);
+            return SUCCESS(response);
+        }
+
+        /// <summary>
+        /// 查询详情
+        /// </summary>
+        /// <param name="Id"></param>
+        /// <returns></returns>
+        [HttpGet("GetSapOutTaskRecord")]
+        [ActionPermissionFilter(Permission = "business:sapouttaskrecord:query")]
+        public IActionResult GetSapOutTaskRecord(int Id)
+        {
+            var response = _SapOutTaskRecordService.GetFirst(x => x.Id == Id);
+
+            return SUCCESS(response);
+        }
+
+        /// <summary>
+        /// 添加
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost("AddSapOutTaskRecord")]
+        [ActionPermissionFilter(Permission = "business:sapouttaskrecord:add")]
+        [Log(Title = "", BusinessType = BusinessType.INSERT)]
+        public IActionResult AddSapOutTaskRecord([FromBody] SapOutTaskRecordDto parm)
+        {
+            if (parm == null)
+            {
+                throw new CustomException("请求参数错误");
+            }
+            var modal = parm.Adapt<SapOutTaskRecord>().ToCreate(HttpContext);
+
+            var response = _SapOutTaskRecordService.AddSapOutTaskRecord(modal);
+
+            return ToResponse(response);
+        }
+
+        /// <summary>
+        /// 更新
+        /// </summary>
+        /// <returns></returns>
+        [HttpPut("UpdateSapOutTaskRecord")]
+        [ActionPermissionFilter(Permission = "business:sapouttaskrecord:edit")]
+        [Log(Title = "", BusinessType = BusinessType.UPDATE)]
+        public IActionResult UpdateSapOutTaskRecord([FromBody] SapOutTaskRecordDto parm)
+        {
+            if (parm == null)
+            {
+                throw new CustomException("请求实体不能为空");
+            }
+            var modal = parm.Adapt<SapOutTaskRecord>().ToUpdate(HttpContext);
+
+            var response = _SapOutTaskRecordService.UpdateSapOutTaskRecord(modal);
+
+            return ToResponse(response);
+        }
+
+        /// <summary>
+        /// 删除
+        /// </summary>
+        /// <returns></returns>
+        [HttpDelete("DeleteSapOutTaskRecord")]
+        [ActionPermissionFilter(Permission = "business:sapouttaskrecord:delete")]
+        [Log(Title = "", BusinessType = BusinessType.DELETE)]
+        public IActionResult DeleteSapOutTaskRecord(string ids)
+        {
+            int[] idsArr = Tools.SpitIntArrary(ids);
+            if (idsArr.Length <= 0) { return ToResponse(ApiResult.Error($"删除失败Id 不能为空")); }
+
+            var response = _SapOutTaskRecordService.Delete(idsArr);
+
+            return ToResponse(response);
+        }
+    }
+}

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

@@ -42,6 +42,12 @@
         <member name="P:ZR.Model.Dto.Balance.StkBalanceDtlQueryDto.BeginTime">
             创建时间
         </member>
+        <member name="P:ZR.Model.Dto.Balance.GetOutOperateBalanceQueryDto.IsForAssemble">
+            <summary>
+            true:查询可用于装配的库存数据(库存状态:88)
+            false:查询可用于出库的库存数据(库存状态:55)
+            </summary>
+        </member>
         <member name="T:ZR.Model.Dto.Balance.StkBalanceDtlDto">
             <summary>
             库存管理/库存明细表输入输出对象
@@ -82,11 +88,21 @@
             接口管理/SAP交验单记录表查询对象
             </summary>
         </member>
+        <member name="T:ZR.Model.Dto.Inspect.SapDeliverQueryNoPageDto">
+            <summary>
+            查询对象 无分页参数
+            </summary>
+        </member>
         <member name="T:ZR.Model.Dto.Inspect.SapDeliverRecordDto">
             <summary>
             接口管理/SAP交验单记录表输入输出对象
             </summary>
         </member>
+        <member name="P:ZR.Model.Dto.Inspect.SapDeliverRecordExtDto.BnSnCode">
+            <summary>
+            BN/SN码 
+            </summary>
+        </member>
         <member name="T:ZR.Model.Dto.InStore.InInstoreRecordQueryDto">
             <summary>
             入库管理/入库记录表查询对象
@@ -132,11 +148,31 @@
             接口管理/SAP关键件清单记录表查询对象
             </summary>
         </member>
+        <member name="T:ZR.Model.Dto.OutStore.SapBomRecordQueryNoPageDto">
+            <summary>
+            查询对象 无分页参数
+            </summary>
+        </member>
         <member name="T:ZR.Model.Dto.OutStore.SapBomRecordDto">
             <summary>
             接口管理/SAP关键件清单记录表输入输出对象
             </summary>
         </member>
+        <member name="T:ZR.Model.Dto.OutStore.SapOutTaskRecordQueryDto">
+            <summary>
+            查询对象
+            </summary>
+        </member>
+        <member name="T:ZR.Model.Dto.OutStore.SapOutTaskQueryNoPageDto">
+            <summary>
+            查询对象 无分页参数
+            </summary>
+        </member>
+        <member name="T:ZR.Model.Dto.OutStore.SapOutTaskRecordDto">
+            <summary>
+            输入输出对象
+            </summary>
+        </member>
         <member name="T:ZR.Model.Dto.ArticleCategoryDto">
             <summary>
             文章目录输入对象
@@ -499,6 +535,16 @@
             质检结果(Wait未质检,OK质检合格,NG质检不合格) 
             </summary>
         </member>
+        <member name="P:ZR.Model.Models.Inspect.QaInspectRecord.InstoreQty">
+            <summary>
+            入库数量 
+            </summary>
+        </member>
+        <member name="P:ZR.Model.Models.Inspect.QaInspectRecord.InstoreResult">
+            <summary>
+            入库结果。0:未入库;99:入库完成。 
+            </summary>
+        </member>
         <member name="T:ZR.Model.Models.Inspect.SapDeliverRecord">
              <summary>
              接口管理/SAP交验单记录表,数据实体对象
@@ -1032,6 +1078,89 @@
             装配结果(0未装配,99装配完成) 
             </summary>
         </member>
+        <member name="T:ZR.Model.Models.SapOutTaskRecord">
+             <summary>
+             ,数据实体对象
+            
+             @author admin
+             @date 2023-05-10
+             </summary>
+        </member>
+        <member name="P:ZR.Model.Models.SapOutTaskRecord.Id">
+            <summary>
+            主键ID 
+            </summary>
+        </member>
+        <member name="P:ZR.Model.Models.SapOutTaskRecord.OutTaskNo">
+            <summary>
+            出库任务单号 
+            </summary>
+        </member>
+        <member name="P:ZR.Model.Models.SapOutTaskRecord.BomNo">
+            <summary>
+            生产令号 
+            </summary>
+        </member>
+        <member name="P:ZR.Model.Models.SapOutTaskRecord.Category">
+            <summary>
+            物料类型(外协件,外购件) 
+            </summary>
+        </member>
+        <member name="P:ZR.Model.Models.SapOutTaskRecord.MaterialCode">
+            <summary>
+            物料编码 
+            </summary>
+        </member>
+        <member name="P:ZR.Model.Models.SapOutTaskRecord.MaterialName">
+            <summary>
+            物料名称 
+            </summary>
+        </member>
+        <member name="P:ZR.Model.Models.SapOutTaskRecord.MaterialSpec">
+            <summary>
+            规格型号/图号 
+            </summary>
+        </member>
+        <member name="P:ZR.Model.Models.SapOutTaskRecord.Qty">
+            <summary>
+            出库需求数量 
+            </summary>
+        </member>
+        <member name="P:ZR.Model.Models.SapOutTaskRecord.OutQty">
+            <summary>
+            已出库数量 
+            </summary>
+        </member>
+        <member name="P:ZR.Model.Models.SapOutTaskRecord.Result">
+            <summary>
+            出库结果。0:未出库;99:出库完成; 
+            </summary>
+        </member>
+        <member name="P:ZR.Model.Models.SapOutTaskRecord.CreateBy">
+            <summary>
+            创建者 
+            </summary>
+        </member>
+        <member name="P:ZR.Model.Models.SapOutTaskRecord.CreateTime">
+            <summary>
+            创建时间 
+            </summary>
+        </member>
+        <member name="P:ZR.Model.Models.SapOutTaskRecord.UpdateBy">
+            <summary>
+            更新者 
+            </summary>
+        </member>
+        <member name="P:ZR.Model.Models.SapOutTaskRecord.UpdateTime">
+            <summary>
+            更新时间 
+            </summary>
+        </member>
+        <member name="P:ZR.Model.Models.SapOutTaskRecord.Remark">
+            <summary>
+            备注 
+            </summary>
+        </member>
         <member name="T:ZR.Model.Models.CommonLang">
              <summary>
              多语言配置,数据实体对象

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

@@ -38,6 +38,18 @@ namespace ZR.Model.Dto.Balance
         public DateTime? EndTime { get; set; }
     }
 
+    public class GetOutOperateBalanceQueryDto
+    {
+        public string BomNo { get; set; }
+        public string MaterialCode { get; set; }
+        public string BnSnCode { get; set; }
+        public int Qty { get; set; }
+        /// <summary>
+        /// true:查询可用于装配的库存数据(库存状态:88)
+        /// false:查询可用于出库的库存数据(库存状态:55)
+        /// </summary>
+        public bool IsForAssemble { get; set; }
+    }
     /// <summary>
     /// 库存管理/库存明细表输入输出对象
     /// </summary>

+ 9 - 1
ZrAdminNetCore-net7.0/ZR.Model/Dto/Inspect/QaInspectRecordDto.cs

@@ -12,7 +12,11 @@ namespace ZR.Model.Dto.Inspect
     public class QaInspectRecordQueryDto : PagerInfo
     {
     }
-
+    public class QaInspectRecordQueryNoPageDto
+    {
+        public string DeliverNo { get; set; }
+        public string BomNo { get; set; }
+    }
     /// <summary>
     /// 质检管理/质检记录表输入输出对象
     /// </summary>
@@ -73,7 +77,11 @@ namespace ZR.Model.Dto.Inspect
         public DateTime? UpdateTime { get; set; }
 
         public string Remark { get; set; }
+        
+        public int? InstoreQty { get; set; }
 
+        [Required(ErrorMessage = "入库结果。0:未入库;99:入库完成。不能为空")]
+        public int InstoreResult { get; set; }
 
 
     }

+ 22 - 0
ZrAdminNetCore-net7.0/ZR.Model/Dto/Inspect/SapDeliverRecordDto.cs

@@ -29,7 +29,20 @@ namespace ZR.Model.Dto.Inspect
         public DateTime? BeginTime { get; set; }
         public DateTime? EndTime { get; set; }
     }
+    /// <summary>
+    /// 查询对象 无分页参数
+    /// </summary>
+    public class SapDeliverQueryNoPageDto
+    {
+        public string DeliverNo { get; set; }
+        public string BomNo { get; set; }
+    }
 
+    public class SapDeliverDto
+    {
+        [Required(ErrorMessage = "交验单号不能为空")]
+        public string DeliverNo { get; set; }
+    }
     /// <summary>
     /// 接口管理/SAP交验单记录表输入输出对象
     /// </summary>
@@ -92,5 +105,14 @@ namespace ZR.Model.Dto.Inspect
 
 
 
+    }
+    public class SapDeliverRecordExtDto : SapDeliverRecordDto
+    {
+        public int CheckOkQty { get; set; }
+
+        /// <summary>
+        /// BN/SN码 
+        /// </summary>
+        public string BnSnCode { get; set; }
     }
 }

+ 12 - 1
ZrAdminNetCore-net7.0/ZR.Model/Dto/OutStore/SapBomRecordDto.cs

@@ -27,7 +27,18 @@ namespace ZR.Model.Dto.OutStore
         public DateTime? BeginTime { get; set; }
         public DateTime? EndTime { get; set; }
     }
-
+    /// <summary>
+    /// 查询对象 无分页参数
+    /// </summary>
+    public class SapBomRecordQueryNoPageDto
+    {
+        public string BomNo { get; set; }
+    }
+    public class SapBomRecordExtDto
+    {
+        [Required(ErrorMessage = "生产令号不能为空")]
+        public string BomNo { get; set; }
+    }
     /// <summary>
     /// 接口管理/SAP关键件清单记录表输入输出对象
     /// </summary>

+ 81 - 0
ZrAdminNetCore-net7.0/ZR.Model/Dto/OutStore/SapOutTaskRecordDto.cs

@@ -0,0 +1,81 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using Newtonsoft.Json;
+using ZR.Model.Dto;
+
+namespace ZR.Model.Dto.OutStore
+{
+    /// <summary>
+    /// 查询对象
+    /// </summary>
+    public class SapOutTaskRecordQueryDto : PagerInfo
+    {
+
+    }
+
+    /// <summary>
+    /// 查询对象 无分页参数
+    /// </summary>
+    public class SapOutTaskQueryNoPageDto
+    {
+        public string OutTaskNo { get; set; }
+        public string BomNo { get; set; }
+    }
+
+    public class SapOutTaskDto
+    {
+        [Required(ErrorMessage = "出库任务单号不能为空")]
+        public string OutTaskNo { get; set; }
+    }
+
+    public class SapOutTaskRecordExtDto : SapOutTaskRecordDto
+    {
+        public int OutNum { get; set; }
+        public string BnSnCode { get; set; }
+    }
+
+    /// <summary>
+    /// 输入输出对象
+    /// </summary>
+    public class SapOutTaskRecordDto
+    {
+        [Required(ErrorMessage = "主键ID不能为空")]
+        public int Id { get; set; }
+
+        public string OutTaskNo { get; set; }
+
+        [Required(ErrorMessage = "生产令号不能为空")]
+        public string BomNo { get; set; }
+
+        [Required(ErrorMessage = "物料类型(外协件,外购件)不能为空")]
+        public string Category { get; set; }
+
+        [Required(ErrorMessage = "物料编码不能为空")]
+        public string MaterialCode { get; set; }
+
+        [Required(ErrorMessage = "物料名称不能为空")]
+        public string MaterialName { get; set; }
+
+        [Required(ErrorMessage = "规格型号/图号不能为空")]
+        public string MaterialSpec { get; set; }
+
+        [Required(ErrorMessage = "出库需求数量不能为空")]
+        public int Qty { get; set; }
+
+        public int? OutQty { get; set; }
+
+        [Required(ErrorMessage = "出库结果。0:未出库;99:出库完成;不能为空")]
+        public int Result { get; set; }
+
+        public string CreateBy { get; set; }
+
+        public DateTime? CreateTime { get; set; }
+
+        public string UpdateBy { get; set; }
+
+        public DateTime? UpdateTime { get; set; }
+
+        public string Remark { get; set; }
+    }
+}

+ 1 - 1
ZrAdminNetCore-net7.0/ZR.Model/Models/InStore/InInstoreRecord.cs

@@ -67,7 +67,7 @@ namespace ZR.Model.Models.InStore
         /// <summary>
         /// 入库数量 
         /// </summary>
-        public int? InStoreQty { get; set; }
+        public int InStoreQty { get; set; }
 
         /// <summary>
         /// 入库结果(0未入库,99入库完成) 

+ 12 - 0
ZrAdminNetCore-net7.0/ZR.Model/Models/Inspect/QaInspectRecord.cs

@@ -96,5 +96,17 @@ namespace ZR.Model.Models.Inspect
         /// </summary>
         public string Result { get; set; }
 
+        /// <summary>
+        /// 入库数量 
+        /// </summary>
+        [SugarColumn(ColumnName = "instore_qty")]
+        public int? InstoreQty { get; set; }
+
+        /// <summary>
+        /// 入库结果。0:未入库;99:入库完成。 
+        /// </summary>
+        [SugarColumn(ColumnName = "instore_result")]
+        public int InstoreResult { get; set; }
+
     }
 }

+ 1 - 1
ZrAdminNetCore-net7.0/ZR.Model/Models/OutStore/OutAssembleRecord.cs

@@ -57,7 +57,7 @@ namespace ZR.Model.Models.OutStore
         /// <summary>
         /// 实物图片 
         /// </summary>
-        public string Picture { get; set; }
+        public byte[] Picture { get; set; }
 
         /// <summary>
         /// 装配结果 

+ 97 - 0
ZrAdminNetCore-net7.0/ZR.Model/Models/OutStore/SapOutTaskRecord.cs

@@ -0,0 +1,97 @@
+using System;
+using SqlSugar;
+using System.Collections.Generic;
+
+namespace ZR.Model.Models
+{
+    /// <summary>
+    /// ,数据实体对象
+    ///
+    /// @author admin
+    /// @date 2023-05-10
+    /// </summary>
+    [SugarTable("sap_out_task_record")]
+    public class SapOutTaskRecord
+    {
+        /// <summary>
+        /// 主键ID 
+        /// </summary>
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = false)]
+        public int Id { get; set; }
+
+        /// <summary>
+        /// 出库任务单号 
+        /// </summary>
+        public string OutTaskNo { get; set; }
+
+        /// <summary>
+        /// 生产令号 
+        /// </summary>
+        public string BomNo { get; set; }
+
+        /// <summary>
+        /// 物料类型(外协件,外购件) 
+        /// </summary>
+        public string Category { get; set; }
+
+        /// <summary>
+        /// 物料编码 
+        /// </summary>
+        public string MaterialCode { get; set; }
+
+        /// <summary>
+        /// 物料名称 
+        /// </summary>
+        public string MaterialName { get; set; }
+
+        /// <summary>
+        /// 规格型号/图号 
+        /// </summary>
+        public string MaterialSpec { get; set; }
+
+        /// <summary>
+        /// 出库需求数量 
+        /// </summary>
+        public int Qty { get; set; }
+
+        /// <summary>
+        /// 已出库数量 
+        /// </summary>
+        public int? OutQty { get; set; }
+
+        /// <summary>
+        /// 出库结果。0:未出库;99:出库完成; 
+        /// </summary>
+        public int Result { get; set; }
+
+        /// <summary>
+        /// 创建者 
+        /// </summary>
+        [SugarColumn(ColumnName = "create_by")]
+        public string CreateBy { get; set; }
+
+        /// <summary>
+        /// 创建时间 
+        /// </summary>
+        [SugarColumn(ColumnName = "create_time")]
+        public DateTime? CreateTime { get; set; }
+
+        /// <summary>
+        /// 更新者 
+        /// </summary>
+        [SugarColumn(ColumnName = "update_by")]
+        public string UpdateBy { get; set; }
+
+        /// <summary>
+        /// 更新时间 
+        /// </summary>
+        [SugarColumn(ColumnName = "update_time")]
+        public DateTime? UpdateTime { get; set; }
+
+        /// <summary>
+        /// 备注 
+        /// </summary>
+        public string Remark { get; set; }
+
+    }
+}

+ 51 - 0
ZrAdminNetCore-net7.0/ZR.Service/Business/Balance/StkBalanceDtlService.cs

@@ -12,6 +12,7 @@ using ZR.Service.Business.IBusinessService.Balance;
 using ZR.Model.Dto.Balance;
 using ZR.Model.Models.BaseSet;
 using ZR.Model.Models.Balance;
+using Mapster;
 
 namespace ZR.Service.Business.Balance
 {
@@ -162,5 +163,55 @@ namespace ZR.Service.Business.Balance
             Truncate();
         }
         #endregion
+
+
+        #region 2023 0524 孙亚龙 新增
+        public List<StkBalanceDtlDto> GetBalanceDtlList(GetOutOperateBalanceQueryDto parm)
+        {
+            /*
+             * 库存查找规则:
+             * 1、先按照 bom号、物料号、Bn\Sn码 的条件查找库存
+             * 2、如果存在指定bom号的库存数据,则直接返回
+             * 3、如果不存在指定bom号的库存数据,则需要按照物料号、Bn\Sn码 的条件查找库存,然后把结果返回
+             * 
+             */
+            #region 按照 bom号、物料号、Bn\Sn码 的条件查找库存
+            //开始拼装查询条件
+            var predicate = Expressionable.Create<StkBalanceDtl>();
+            predicate.AndIF(parm != null && !string.IsNullOrEmpty(parm.MaterialCode), x => x.MaterialCode == parm.MaterialCode);
+            predicate.AndIF(parm != null && !string.IsNullOrEmpty(parm.BomNo), x => x.BomNo == parm.BomNo);
+            predicate.AndIF(parm != null && !string.IsNullOrEmpty(parm.BnSnCode), x => x.BnSnCode == parm.BnSnCode);
+            predicate.AndIF(parm.IsForAssemble, x => x.Status == 88);
+            predicate.AndIF(!parm.IsForAssemble, x => x.Status == 55);
+            //predicate.And(x => x.BalanceQty >= parm.Qty);
+
+            //搜索条件查询语法参考Sqlsugar
+            var response = Queryable()
+                .Where(predicate.ToExpression())
+                .OrderBy(x => x.BalanceId)
+                .OrderBy(x => x.BalanceQty)
+                .ToList();
+            if (response.Count > 0)
+            {
+                return response.Adapt<List<StkBalanceDtlDto>>();
+            }
+            #endregion 按照 bom号、物料号、Bn\Sn码 的条件查找库存
+
+            #region 按照物料号、Bn\Sn码 的条件查找库存
+            var predicate1 = Expressionable.Create<StkBalanceDtl>();
+            predicate1.AndIF(parm != null && !string.IsNullOrEmpty(parm.MaterialCode), x => x.MaterialCode == parm.MaterialCode);
+            predicate1.AndIF(parm != null && !string.IsNullOrEmpty(parm.BnSnCode), x => x.BnSnCode == parm.BnSnCode);
+            predicate1.AndIF(parm.IsForAssemble, x => x.Status == 88);
+            predicate1.AndIF(!parm.IsForAssemble, x => x.Status == 55);
+            response = Queryable()
+                .Where(predicate1.ToExpression())
+                .OrderBy(x => x.BalanceId)
+                .OrderBy(x => x.BalanceQty)
+                .ToList();
+            return response.Adapt<List<StkBalanceDtlDto>>();
+            #endregion 按照物料号、Bn\Sn码 的条件查找库存
+        }
+        #endregion
+
     }
 }

+ 4 - 0
ZrAdminNetCore-net7.0/ZR.Service/Business/IBusinessService/Balance/IStkBalanceDtlService.cs

@@ -22,5 +22,9 @@ namespace ZR.Service.Business.IBusinessService.Balance
         int UpdateStkBalanceDtl(StkBalanceDtl parm);
 
         void TruncateStkBalanceDtl();
+
+        #region 2023 0524 孙亚龙 新增
+        List<StkBalanceDtlDto> GetBalanceDtlList(GetOutOperateBalanceQueryDto parm);
+        #endregion
     }
 }

+ 5 - 0
ZrAdminNetCore-net7.0/ZR.Service/Business/IBusinessService/Inspect/IQaInspectRecordService.cs

@@ -21,5 +21,10 @@ namespace ZR.Service.Business.IBusinessService.Inspect
         int UpdateQaInspectRecord(QaInspectRecord parm);
 
         void TruncateQaInspectRecord();
+
+        #region 2023 0524 孙亚龙 新增
+        List<SapDeliverDto> GetCheckedDeliverData(QaInspectRecordQueryNoPageDto parm);
+        List<QaInspectRecordDto> GetCheckedSapDeliverRecordList(string deliverNo);
+        #endregion
     }
 }

+ 5 - 0
ZrAdminNetCore-net7.0/ZR.Service/Business/IBusinessService/Inspect/ISapDeliverRecordService.cs

@@ -28,5 +28,10 @@ namespace ZR.Service.Business.IBusinessService.Inspect
         /// <param name="list"></param>
         /// <returns></returns>
         string ImportDatas(List<SapDeliverRecord> list);
+
+        #region 2023 0524 孙亚龙 新增
+        List<SapDeliverDto> GetListNoPage(SapDeliverQueryNoPageDto parm);
+        List<SapDeliverRecordDto> GetSapDeliverRecordList(string deliverNo);
+        #endregion
     }
 }

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

@@ -22,5 +22,10 @@ namespace ZR.Service.Business.IBusinessService.OutStore
 
         void TruncateSapBomRecord();
         string ImportDatas(List<SapBomRecord> list);
+
+        #region 2023 0524 孙亚龙 新增
+        List<SapBomRecordExtDto> GetBomList(SapBomRecordQueryNoPageDto parm);
+        List<SapBomRecordDto> GetBomRecordList(string bomNo);
+        #endregion
     }
 }

+ 28 - 0
ZrAdminNetCore-net7.0/ZR.Service/Business/IBusinessService/OutStore/ISapOutTaskRecordService.cs

@@ -0,0 +1,28 @@
+using System;
+using ZR.Model;
+using ZR.Model.Dto;
+using ZR.Model.Models;
+using System.Collections.Generic;
+using ZR.Model.Dto.OutStore;
+
+namespace ZR.Service.Business.IBusinessService.OutStore
+{
+    /// <summary>
+    /// service接口
+    ///
+    /// @author admin
+    /// @date 2023-05-10
+    /// </summary>
+    public interface ISapOutTaskRecordService : IBaseService<SapOutTaskRecord>
+    {
+        PagedInfo<SapOutTaskRecordDto> GetList(SapOutTaskRecordQueryDto parm);
+
+        int AddSapOutTaskRecord(SapOutTaskRecord parm);
+
+        int UpdateSapOutTaskRecord(SapOutTaskRecord parm);
+        
+        void TruncateSapOutTaskRecord();
+        List<SapOutTaskDto> GetSapOutTaskList(SapOutTaskQueryNoPageDto parm);
+        List<SapOutTaskRecordDto> GetSapOutTaskRecordList(string outTaskNo);
+    }
+}

+ 34 - 0
ZrAdminNetCore-net7.0/ZR.Service/Business/Inspect/QaInspectRecordService.cs

@@ -7,6 +7,8 @@ using System.Linq;
 using ZR.Service.Business.IBusinessService.Inspect;
 using ZR.Model.Dto.Inspect;
 using ZR.Model.Models.Inspect;
+using Mapster;
+using System.Collections.Generic;
 
 namespace ZR.Service.Business.Inspect
 {
@@ -91,5 +93,37 @@ namespace ZR.Service.Business.Inspect
             Truncate();
         }
         #endregion
+
+        #region 2023 0524 孙亚龙 新增
+        public List<SapDeliverDto> GetCheckedDeliverData(QaInspectRecordQueryNoPageDto parm)
+        {
+            //开始拼装查询条件
+            var predicate = Expressionable.Create<QaInspectRecord>();
+            predicate.AndIF(parm != null && !string.IsNullOrEmpty(parm.DeliverNo), x => x.DeliverNo.Contains(parm.DeliverNo));
+            predicate.AndIF(parm != null && !string.IsNullOrEmpty(parm.BomNo), x => x.BomNo.Contains(parm.BomNo));
+            predicate.And(x => x.CheckQty > x.InstoreQty);
+            //搜索条件查询语法参考Sqlsugar
+            var response = Queryable()
+                .Distinct()
+                .Where(predicate.ToExpression())
+                .OrderBy(x => x.InspectId).Select(x => new { x.DeliverNo }).ToList();
+
+            return response.Adapt<List<SapDeliverDto>>();
+        }
+
+        public List<QaInspectRecordDto> GetCheckedSapDeliverRecordList(string deliverNo)
+        {
+            //开始拼装查询条件
+            var predicate = Expressionable.Create<QaInspectRecord>();
+            predicate.And(x => x.DeliverNo == deliverNo);
+            //predicate.And(x => x.Qty > x.CheckQty);
+            //搜索条件查询语法参考Sqlsugar
+            var response = Queryable()
+                .Where(predicate.ToExpression())
+                .OrderBy(x => x.InspectId).ToList();
+
+            return response.Adapt<List<QaInspectRecordDto>>();
+        }
+        #endregion
     }
 }

+ 34 - 0
ZrAdminNetCore-net7.0/ZR.Service/Business/Inspect/SapDeliverRecordService.cs

@@ -9,6 +9,7 @@ using System.Collections.Generic;
 using ZR.Service.Business.IBusinessService.Inspect;
 using ZR.Model.Dto.Inspect;
 using ZR.Model.Models.Inspect;
+using Mapster;
 
 namespace ZR.Service.Business.Inspect
 {
@@ -136,5 +137,38 @@ namespace ZR.Service.Business.Inspect
             return msg;
         }
         #endregion
+
+        #region 2023 0524 孙亚龙 新增
+        public List<SapDeliverDto> GetListNoPage(SapDeliverQueryNoPageDto parm)
+        {
+            //开始拼装查询条件
+            var predicate = Expressionable.Create<SapDeliverRecord>();
+            predicate.AndIF(parm != null && !string.IsNullOrEmpty(parm.DeliverNo), x => x.DeliverNo.Contains(parm.DeliverNo));
+            predicate.AndIF(parm != null && !string.IsNullOrEmpty(parm.BomNo), x => x.BomNo.Contains(parm.BomNo));
+            predicate.And(x => x.Qty > x.CheckQty);
+            //搜索条件查询语法参考Sqlsugar
+            var response = Queryable()
+                .Distinct()
+                .Where(predicate.ToExpression())
+                .OrderBy(x => x.Id).Select(x => new { x.DeliverNo }).ToList();
+
+            return response.Adapt<List<SapDeliverDto>>();
+        }
+
+        public List<SapDeliverRecordDto> GetSapDeliverRecordList(string deliverNo)
+        {
+            //开始拼装查询条件
+            var predicate = Expressionable.Create<SapDeliverRecord>();
+            predicate.And(x => x.DeliverNo == deliverNo);
+            //predicate.And(x => x.Qty > x.CheckQty);
+            //搜索条件查询语法参考Sqlsugar
+            var response = Queryable()
+                .Where(predicate.ToExpression())
+                .OrderBy(x => x.Id).ToList();
+
+            return response.Adapt<List<SapDeliverRecordDto>>();
+        }
+
+        #endregion
     }
 }

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

@@ -9,6 +9,7 @@ using System.Collections.Generic;
 using ZR.Service.Business.IBusinessService.OutStore;
 using ZR.Model.Dto.OutStore;
 using ZR.Model.Models.OutStore;
+using Mapster;
 
 namespace ZR.Service.Business.OutStore
 {
@@ -132,5 +133,36 @@ namespace ZR.Service.Business.OutStore
             return msg;
         }
         #endregion
+
+        #region 2023 0524 孙亚龙 新增
+        public List<SapBomRecordExtDto> GetBomList(SapBomRecordQueryNoPageDto parm)
+        {
+            //开始拼装查询条件
+            var predicate = Expressionable.Create<SapBomRecord>();
+            predicate.AndIF(parm != null && !string.IsNullOrEmpty(parm.BomNo), x => x.BomNo.Contains(parm.BomNo));
+            predicate.And(x => x.Qty > x.AssembleQty);
+            //搜索条件查询语法参考Sqlsugar
+            var response = Queryable()
+                .Distinct()
+                .Where(predicate.ToExpression())
+                .OrderBy(x => x.Id).Select(x => new { x.BomNo }).ToList();
+
+            return response.Adapt<List<SapBomRecordExtDto>>();
+        }
+
+        public List<SapBomRecordDto> GetBomRecordList(string bomNo)
+        {
+            //开始拼装查询条件
+            var predicate = Expressionable.Create<SapBomRecord>();
+            predicate.And(x => x.BomNo == bomNo);
+            //predicate.And(x => x.Qty > x.CheckQty);
+            //搜索条件查询语法参考Sqlsugar
+            var response = Queryable()
+                .Where(predicate.ToExpression())
+                .OrderBy(x => x.Id).ToList();
+
+            return response.Adapt<List<SapBomRecordDto>>();
+        }
+        #endregion
     }
 }

+ 123 - 0
ZrAdminNetCore-net7.0/ZR.Service/Business/OutStore/SapOutTaskRecordService.cs

@@ -0,0 +1,123 @@
+using System;
+using SqlSugar;
+using Infrastructure.Attribute;
+using ZR.Model;
+using ZR.Model.Dto;
+using ZR.Model.Models;
+using ZR.Repository;
+using ZR.Service.Business.IBusinessService;
+using System.Linq;
+using System.Collections.Generic;
+using Mapster;
+using ZR.Model.Models.Inspect;
+using ZR.Service.Business.IBusinessService.OutStore;
+using ZR.Model.Dto.OutStore;
+
+namespace ZR.Service.Business.OutStore
+{
+    /// <summary>
+    /// Service业务层处理
+    ///
+    /// @author admin
+    /// @date 2023-05-10
+    /// </summary>
+    [AppService(ServiceType = typeof(ISapOutTaskRecordService), ServiceLifetime = LifeTime.Transient)]
+    public class SapOutTaskRecordService : BaseService<SapOutTaskRecord>, ISapOutTaskRecordService
+    {
+        #region 业务逻辑代码
+
+        /// <summary>
+        /// 查询列表
+        /// </summary>
+        /// <param name="parm"></param>
+        /// <returns></returns>
+        public PagedInfo<SapOutTaskRecordDto> GetList(SapOutTaskRecordQueryDto parm)
+        {
+            //开始拼装查询条件
+            var predicate = Expressionable.Create<SapOutTaskRecord>();
+
+            //搜索条件查询语法参考Sqlsugar
+            var response = Queryable()
+                .Where(predicate.ToExpression())
+                .ToPage<SapOutTaskRecord, SapOutTaskRecordDto>(parm);
+
+            return response;
+        }
+
+        public List<SapOutTaskDto> GetSapOutTaskList(SapOutTaskQueryNoPageDto parm)
+        {
+            //开始拼装查询条件
+            var predicate = Expressionable.Create<SapOutTaskRecord>();
+            predicate.AndIF(parm != null && !string.IsNullOrEmpty(parm.OutTaskNo), x => x.OutTaskNo.Contains(parm.OutTaskNo));
+            predicate.AndIF(parm != null && !string.IsNullOrEmpty(parm.BomNo), x => x.BomNo.Contains(parm.BomNo));
+            predicate.And(x => x.Qty > x.OutQty);
+            //搜索条件查询语法参考Sqlsugar
+            var response = Queryable()
+                .Distinct()
+                .Where(predicate.ToExpression())
+                .OrderBy(x => x.Id).Select(x => new { x.OutTaskNo }).ToList();
+
+            return response.Adapt<List<SapOutTaskDto>>();
+        }
+
+        public List<SapOutTaskRecordDto> GetSapOutTaskRecordList(string outTaskNo)
+        {
+            //开始拼装查询条件
+            var predicate = Expressionable.Create<SapOutTaskRecord>();
+            predicate.And(x => x.OutTaskNo == outTaskNo);
+            //predicate.And(x => x.Qty > x.CheckQty);
+            //搜索条件查询语法参考Sqlsugar
+            var response = Queryable()
+                .Where(predicate.ToExpression())
+                .OrderBy(x => x.Id).ToList();
+
+            return response.Adapt<List<SapOutTaskRecordDto>>();
+        }
+
+        /// <summary>
+        /// 添加
+        /// </summary>
+        /// <param name="model"></param>
+        /// <returns></returns>
+        public int AddSapOutTaskRecord(SapOutTaskRecord model)
+        {
+            return Add(model, true);
+        }
+
+        /// <summary>
+        /// 修改
+        /// </summary>
+        /// <param name="model"></param>
+        /// <returns></returns>
+        public int UpdateSapOutTaskRecord(SapOutTaskRecord model)
+        {
+            //var response = Update(w => w.Id == model.Id, it => new SapOutTaskRecord()
+            //{
+            //    OutTaskNo = model.OutTaskNo,
+            //    BomNo = model.BomNo,
+            //    Category = model.Category,
+            //    MaterialCode = model.MaterialCode,
+            //    MaterialName = model.MaterialName,
+            //    MaterialSpec = model.MaterialSpec,
+            //    Qty = model.Qty,
+            //    OutQty = model.OutQty,
+            //    Result = model.Result,
+            //    UpdateBy = model.UpdateBy,
+            //    UpdateTime = model.UpdateTime,
+            //    Remark = model.Remark,
+            //});
+            //return response;
+            return Update(model, true);
+        }
+
+        /// <summary>
+        /// 清空
+        /// </summary>
+        /// <returns></returns>
+        public void TruncateSapOutTaskRecord()
+        {
+            Truncate();
+        }
+        #endregion
+    }
+}