From 8e3b06f92974df9e36d3f359b9c47404e9758f35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=96=8C=20=E6=9C=B1?= <1324361213@qq.com> Date: Fri, 19 Dec 2025 17:05:11 +0800 Subject: [PATCH] 0 --- .../ConvertPlugIn/ToStkInStock.cs | 11 +- .../Services/IServices/IBarRecordService.cs | 2 +- .../Services/IServices/IStkInStockService.cs | 13 ++ .../Services/PurchaseOrderService.cs | 153 ++++++++++-------- .../Services/StkInStockService.cs | 11 ++ 5 files changed, 119 insertions(+), 71 deletions(-) diff --git a/Gatedge.NewOrientLandMark.BOS/PlugIn/PUR_PurchaseOrder/ConvertPlugIn/ToStkInStock.cs b/Gatedge.NewOrientLandMark.BOS/PlugIn/PUR_PurchaseOrder/ConvertPlugIn/ToStkInStock.cs index dacf092..be79d21 100644 --- a/Gatedge.NewOrientLandMark.BOS/PlugIn/PUR_PurchaseOrder/ConvertPlugIn/ToStkInStock.cs +++ b/Gatedge.NewOrientLandMark.BOS/PlugIn/PUR_PurchaseOrder/ConvertPlugIn/ToStkInStock.cs @@ -56,6 +56,8 @@ namespace Gatedge.NewOrientLandMark.BOS.PlugIn.PUR_PurchaseOrder.ConvertPlugIn foreach (var bill in billList) { var billObj = bill.DataEntity; + billObj["FBarRecordNo"] = FBarRecordNo; + billObj["FCreateByCode"] = "1"; var entryList = billObj["InStockEntry"] as DynamicObjectCollection; BaseDataField StockField = e.TargetBusinessInfo.GetField("FStockId") as BaseDataField; @@ -69,9 +71,10 @@ namespace Gatedge.NewOrientLandMark.BOS.PlugIn.PUR_PurchaseOrder.ConvertPlugIn var orgId = org["Id"].ToString(); foreach (var item in entryList) { + var param = PushCustomParams.First().Value; DynamicObject Stock = service.LoadSingle( this.Context, - CustomParams["InStockId"], + param.InStockId, StockField.RefFormDynamicObjectType ); DynamicObject StockStatus = service.LoadSingle( @@ -90,7 +93,7 @@ namespace Gatedge.NewOrientLandMark.BOS.PlugIn.PUR_PurchaseOrder.ConvertPlugIn var remainInStockUnitId = Convert.ToInt64(item["RemainInStockUnitId_Id"]); // 采购单位 var baseUnitId = Convert.ToInt64(item["BaseUnitID_Id"]); // 基础单位 //var snUnitId = Convert.ToInt64(item["SNUnitID_Id"]); // 序列号单位 - var qty = Convert.ToDecimal(CustomParams["InStockQty"]); + var qty = Convert.ToDecimal(param.InStockQty); item["RealQty"] = qty; // 填写实收数 // 计价数量 if (priceUnitId != 0) @@ -112,8 +115,8 @@ namespace Gatedge.NewOrientLandMark.BOS.PlugIn.PUR_PurchaseOrder.ConvertPlugIn item["BaseUnitQty"] = BaseRealQty; } - var lotId = CustomParams["FLot_Id"].ToString(); - var lotText = CustomParams["FLot_Text"]?.ToString().Trim(); + var lotId = param.FLot_Id.ToString(); + var lotText = param.FLot_Text.Trim(); // 如果批号不为空,则赋值 if (!lotText.IsNullOrEmpty()) { diff --git a/Gatedge.ScanCode/Services/IServices/IBarRecordService.cs b/Gatedge.ScanCode/Services/IServices/IBarRecordService.cs index 134cb07..af3b596 100644 --- a/Gatedge.ScanCode/Services/IServices/IBarRecordService.cs +++ b/Gatedge.ScanCode/Services/IServices/IBarRecordService.cs @@ -56,7 +56,7 @@ namespace Gatedge.ScanCode.Services.IServices public K3CloudResponseStatus SaveErrorInfo(int barRecordId, string ErrorInfo); /// - /// 保存错误信息 + /// 保存成功信息 /// /// /// diff --git a/Gatedge.ScanCode/Services/IServices/IStkInStockService.cs b/Gatedge.ScanCode/Services/IServices/IStkInStockService.cs index b455a34..0c29b79 100644 --- a/Gatedge.ScanCode/Services/IServices/IStkInStockService.cs +++ b/Gatedge.ScanCode/Services/IServices/IStkInStockService.cs @@ -13,6 +13,12 @@ namespace Gatedge.ScanCode.Services.IServices /// /// void CancelAssign(CancelAssign cancelAssign); + + + /// + /// 删除入库单 + /// + /// void Delete(Delete stkInStockDeleteParam); /// @@ -21,5 +27,12 @@ namespace Gatedge.ScanCode.Services.IServices /// /// K3CloudResponseStatus Submit(Submit stkInStockSubmitParam); + + /// + /// 审核 + /// + /// + /// + K3CloudResponseStatus Audit(Audit auditParam); } } diff --git a/Gatedge.ScanCode/Services/PurchaseOrderService.cs b/Gatedge.ScanCode/Services/PurchaseOrderService.cs index 56d2268..39e156a 100644 --- a/Gatedge.ScanCode/Services/PurchaseOrderService.cs +++ b/Gatedge.ScanCode/Services/PurchaseOrderService.cs @@ -1,7 +1,9 @@ using Gatedge.K3Cloud.Utils; +using Gatedge.K3Cloud.Utils.Exceptions; using Gatedge.K3Cloud.Utils.Model.K3Request; using Gatedge.K3Cloud.Utils.Model.K3Result.Model; using Gatedge.ScanCode.Models.K3Request.SaveModel; +using Gatedge.ScanCode.Models.Vo; using Gatedge.ScanCode.Services.IServices; using Microsoft.IdentityModel.Tokens; @@ -30,6 +32,16 @@ namespace Gatedge.ScanCode.Services { _utils = utils; } + + class PushCustomParam + { + public decimal InStockQty { get; set; } + public string InStockId { get; set; } + public DateTime FStockDate { get; set; } + public DateTime FExpirationDate { get; set; } + public int FLot_Id { get; set; } + public string FLot_Text { get; set; } + } /// /// 下推采购入库单 /// @@ -65,89 +77,98 @@ namespace Gatedge.ScanCode.Services throw new Exception("该扫描结果已经被提交,不允许重复提交"); } // 如果提交成功,开始下推生产入库单 - - var barEntityList = barRecord.FBarEntity; // 构造下推参数 - List billPusheList = new List(); + Push billPush = new Push(); + billPush.EntryIds = string.Join(",", barEntityList.Select(n => n.FSrcEntryId)); + billPush.CustomParams = new Dictionary(); + billPush.CustomParams.Add("IsConvertByScanCode", true); // 是否由条码下推 + billPush.CustomParams.Add("FBarRecordNo", barRecord.BillNo); // 是否由条码下推 + + billPush.RuleId = _ConvertRuleId; // 注塑/装配车间排产计划专用转换规则 + billPush.TargetFormId = _TargetFormId; // 目标单据类型:采购入库单 + billPush.IsEnableDefaultRule = false; // 不启用默认规则 + billPush.IsDraftWhenSaveFail = false; // 保存失败,不自动暂存 + var Params = new Dictionary(); foreach (var item in barEntityList) { - Push billPush = new Push(); - billPush.EntryIds = item.FSrcEntryId; - billPush.CustomParams = new Dictionary(); - billPush.CustomParams.Add("IsConvertByScanCode", true); // 是否由条码下推 - billPush.CustomParams.Add("InStockQty", item.FBarQty.ToString()); // 下推数量 - billPush.CustomParams.Add("InStockId", item.FBarStockId_Id.ToString()); // 入库仓库 - billPush.CustomParams.Add("FStockDate", item.FStockDate.ToString()); // 入库日期 - billPush.CustomParams.Add("FExpirationDate", item.FExpirationDate.ToString()); // 有效期至 - billPush.CustomParams.Add("FLot_Id", item.FLot_Id.ToString()); // 有效期至 - billPush.CustomParams.Add("FLot_Text", item.FLot_Text.ToString()); // 有效期至 - billPush.RuleId = _ConvertRuleId; // 注塑/装配车间排产计划专用转换规则 - billPush.TargetFormId = _TargetFormId; // 目标单据类型:采购入库单 - billPush.IsEnableDefaultRule = false; // 不启用默认规则 - billPush.IsDraftWhenSaveFail = false; // 保存失败,不自动暂存 - billPusheList.Add(billPush); - } - // 成功列表 - var successList = new List(); - // TODO 遍历下推 - foreach (var item in billPusheList) - { - var pushResp = _utils.Push(_FormId, item); - // 如果失败,将所有生成的单据删除,并保存错误信息到扫描记录 - if (pushResp?.IsSuccess != true) + var pushCustomParams = new PushCustomParam() { - // 从下推成功的记录里获取Id,并且删除 - var deletePrdInStockIdList = new List(); - successList.ForEach(n => n.SuccessEntitys?.ForEach(m => deletePrdInStockIdList.Add(m.Id.ToString()))); - var errorInfo = string.Join("\r\n", pushResp.Errors.Select(n => n.Message)); - // 如果有成功的下推单,则删除生成的入库单,回写错误信息。 - if (deletePrdInStockIdList.Count > 0) - { - // 撤销并删除生产入库单 - CancelAssignDeletePrdInStock(deletePrdInStockIdList); - } - barRecordService.SaveErrorInfo(barRecordId, errorInfo); - // 撤销提交的栈板单据 - CancelAssignBarRecord(barRecordId); - return pushResp; - - } - successList.Add(pushResp); + InStockQty = item.FBarQty ?? 0, // 下推数量 + InStockId = item.FBarStockId_Id?.ToString() ?? string.Empty, // 入库仓库 + FStockDate = item.FStockDate ?? DateTime.MinValue, // 入库日期 + FExpirationDate = item.FExpirationDate ?? DateTime.MinValue, // 有效期至 + FLot_Id = item.FLot_Id ?? 0, // 批号Id + FLot_Text = item.FLot_Text ?? string.Empty // 批号文本 + }; + Params.Add(item.FSrcEntryId ?? "0", pushCustomParams); } + billPush.CustomParams.Add("PushCustomParams", Params); + + + // 执行下推 + var pushResp = _utils.Push(_FormId, billPush); + // 如果失败,保存错误信息到扫描记录 + if (pushResp?.IsSuccess != true) + { + var errorInfo = string.Join("\r\n", pushResp.Errors.Select(n => n.Message)); + barRecordService.SaveErrorInfo(barRecordId, errorInfo); + // 撤销提交的栈板单据 + CancelAssignBarRecord(barRecordId); + return pushResp; + } + //如果都成功,将入库单提交 - var prdInStockIds = new List(); - successList.ForEach(n => n.SuccessEntitys?.ForEach(m => prdInStockIds.Add(m.Id.ToString()))); + if (pushResp?.SuccessEntitys.Count == 0) + { + throw new Exception("下推出现异常"); + } + var inStockBillIds = pushResp?.SuccessEntitys?.Select(n => n.Id.ToString()).ToList(); Submit stkInStockSubmitParam = new Submit() { - Ids = string.Join(',', prdInStockIds) + Ids = string.Join(',', inStockBillIds) }; var submitResult = stkInStockService.Submit(stkInStockSubmitParam); - var result = barRecordService.SubmitSuccess(barRecordId, successList.Select(n => new BarRecordSave.ResultEntry + // 如果提交不成功,删除本次入库的单据,并返回结果 + if (!submitResult.IsSuccess) { - FResultBillNo = n.SuccessEntitys.First().Number, - FResultId = n.SuccessEntitys.First().Id.ToString(), + var errorInfo = string.Join("\r\n", submitResult.Errors.Select(n => n.Message)); + barRecordService.SaveErrorInfo(barRecordId, errorInfo); + // 撤销提交的栈板单据 + CancelAssignBarRecord(barRecordId); + // 撤销并删除所有下推数据 + CancelAssignDeletePrdInStock(inStockBillIds); + return submitResult; + } + // 如果提交成功,审核入库单 + Audit stkInStockAuditParam = new Audit() + { + Ids = string.Join(',', inStockBillIds) + }; + var auditResult = stkInStockService.Audit(stkInStockAuditParam); + // 如果审核不成功,删除本次入库的单据,并返回结果 + if (!auditResult.IsSuccess) + { + var errorInfo = string.Join("\r\n", auditResult.Errors.Select(n => n.Message)); + barRecordService.SaveErrorInfo(barRecordId, errorInfo); + // 撤销提交的栈板单据 + CancelAssignBarRecord(barRecordId); + // 撤销并删除所有下推数据 + CancelAssignDeletePrdInStock(inStockBillIds); + return auditResult; + } + + // 如果审核成功,更新栈板单据的结果信息 + var result = barRecordService.SubmitSuccess(barRecordId, auditResult.SuccessEntitys.Select(n => new BarRecordSave.ResultEntry + { + FResultBillNo = n.Number, + FResultId = n.Id.ToString(), FResultBillId = new Models.K3Request.BaseData.FormType() { FID = _TargetFormId } })); - return submitResult; - // 如果提交不成功 - if (!submitResult.IsSuccess) - { - var errorInfo = string.Join("\r\n", submitResult.Errors.Select(n => n.Message)); - // 撤销并删除入库单 - CancelAssignDeletePrdInStock(prdInStockIds); - // 撤销提交的栈板单据 - CancelAssignBarRecord(barRecordId); - // 回写错误信息 - barRecordService.SaveErrorInfo(barRecordId, errorInfo); - return submitResult; - } - - - //return result; + return auditResult; } /// diff --git a/Gatedge.ScanCode/Services/StkInStockService.cs b/Gatedge.ScanCode/Services/StkInStockService.cs index 4473d36..8795a1b 100644 --- a/Gatedge.ScanCode/Services/StkInStockService.cs +++ b/Gatedge.ScanCode/Services/StkInStockService.cs @@ -26,6 +26,17 @@ namespace Gatedge.ScanCode.Services _utils = utils; } + /// + /// 审核 + /// + /// + /// + /// + public K3CloudResponseStatus Audit(Audit auditParam) + { + return _utils.Audit(_FormId, auditParam); + } + /// /// 撤销 ///