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);
+ }
+
///
/// 撤销
///