This commit is contained in:
2025-12-19 17:05:11 +08:00
parent a97b7737e0
commit 8e3b06f929
5 changed files with 119 additions and 71 deletions

View File

@@ -56,6 +56,8 @@ namespace Gatedge.NewOrientLandMark.BOS.PlugIn.PUR_PurchaseOrder.ConvertPlugIn
foreach (var bill in billList) foreach (var bill in billList)
{ {
var billObj = bill.DataEntity; var billObj = bill.DataEntity;
billObj["FBarRecordNo"] = FBarRecordNo;
billObj["FCreateByCode"] = "1";
var entryList = billObj["InStockEntry"] as DynamicObjectCollection; var entryList = billObj["InStockEntry"] as DynamicObjectCollection;
BaseDataField StockField = BaseDataField StockField =
e.TargetBusinessInfo.GetField("FStockId") as BaseDataField; e.TargetBusinessInfo.GetField("FStockId") as BaseDataField;
@@ -69,9 +71,10 @@ namespace Gatedge.NewOrientLandMark.BOS.PlugIn.PUR_PurchaseOrder.ConvertPlugIn
var orgId = org["Id"].ToString(); var orgId = org["Id"].ToString();
foreach (var item in entryList) foreach (var item in entryList)
{ {
var param = PushCustomParams.First().Value;
DynamicObject Stock = service.LoadSingle( DynamicObject Stock = service.LoadSingle(
this.Context, this.Context,
CustomParams["InStockId"], param.InStockId,
StockField.RefFormDynamicObjectType StockField.RefFormDynamicObjectType
); );
DynamicObject StockStatus = service.LoadSingle( DynamicObject StockStatus = service.LoadSingle(
@@ -90,7 +93,7 @@ namespace Gatedge.NewOrientLandMark.BOS.PlugIn.PUR_PurchaseOrder.ConvertPlugIn
var remainInStockUnitId = Convert.ToInt64(item["RemainInStockUnitId_Id"]); // 采购单位 var remainInStockUnitId = Convert.ToInt64(item["RemainInStockUnitId_Id"]); // 采购单位
var baseUnitId = Convert.ToInt64(item["BaseUnitID_Id"]); // 基础单位 var baseUnitId = Convert.ToInt64(item["BaseUnitID_Id"]); // 基础单位
//var snUnitId = Convert.ToInt64(item["SNUnitID_Id"]); // 序列号单位 //var snUnitId = Convert.ToInt64(item["SNUnitID_Id"]); // 序列号单位
var qty = Convert.ToDecimal(CustomParams["InStockQty"]); var qty = Convert.ToDecimal(param.InStockQty);
item["RealQty"] = qty; // 填写实收数 item["RealQty"] = qty; // 填写实收数
// 计价数量 // 计价数量
if (priceUnitId != 0) if (priceUnitId != 0)
@@ -112,8 +115,8 @@ namespace Gatedge.NewOrientLandMark.BOS.PlugIn.PUR_PurchaseOrder.ConvertPlugIn
item["BaseUnitQty"] = BaseRealQty; item["BaseUnitQty"] = BaseRealQty;
} }
var lotId = CustomParams["FLot_Id"].ToString(); var lotId = param.FLot_Id.ToString();
var lotText = CustomParams["FLot_Text"]?.ToString().Trim(); var lotText = param.FLot_Text.Trim();
// 如果批号不为空,则赋值 // 如果批号不为空,则赋值
if (!lotText.IsNullOrEmpty()) if (!lotText.IsNullOrEmpty())
{ {

View File

@@ -56,7 +56,7 @@ namespace Gatedge.ScanCode.Services.IServices
public K3CloudResponseStatus SaveErrorInfo(int barRecordId, string ErrorInfo); public K3CloudResponseStatus SaveErrorInfo(int barRecordId, string ErrorInfo);
/// <summary> /// <summary>
/// 保存错误信息 /// 保存成功信息
/// </summary> /// </summary>
/// <param name="barRecordId"></param> /// <param name="barRecordId"></param>
/// <param name="resultEntityList"></param> /// <param name="resultEntityList"></param>

View File

@@ -13,6 +13,12 @@ namespace Gatedge.ScanCode.Services.IServices
/// </summary> /// </summary>
/// <param name="cancelAssign"></param> /// <param name="cancelAssign"></param>
void CancelAssign(CancelAssign cancelAssign); void CancelAssign(CancelAssign cancelAssign);
/// <summary>
/// 删除入库单
/// </summary>
/// <param name="stkInStockDeleteParam"></param>
void Delete(Delete stkInStockDeleteParam); void Delete(Delete stkInStockDeleteParam);
/// <summary> /// <summary>
@@ -21,5 +27,12 @@ namespace Gatedge.ScanCode.Services.IServices
/// <param name="stkInStockSubmitParam"></param> /// <param name="stkInStockSubmitParam"></param>
/// <returns></returns> /// <returns></returns>
K3CloudResponseStatus Submit(Submit stkInStockSubmitParam); K3CloudResponseStatus Submit(Submit stkInStockSubmitParam);
/// <summary>
/// 审核
/// </summary>
/// <param name="auditParam"></param>
/// <returns></returns>
K3CloudResponseStatus Audit(Audit auditParam);
} }
} }

View File

@@ -1,7 +1,9 @@
using Gatedge.K3Cloud.Utils; using Gatedge.K3Cloud.Utils;
using Gatedge.K3Cloud.Utils.Exceptions;
using Gatedge.K3Cloud.Utils.Model.K3Request; using Gatedge.K3Cloud.Utils.Model.K3Request;
using Gatedge.K3Cloud.Utils.Model.K3Result.Model; using Gatedge.K3Cloud.Utils.Model.K3Result.Model;
using Gatedge.ScanCode.Models.K3Request.SaveModel; using Gatedge.ScanCode.Models.K3Request.SaveModel;
using Gatedge.ScanCode.Models.Vo;
using Gatedge.ScanCode.Services.IServices; using Gatedge.ScanCode.Services.IServices;
using Microsoft.IdentityModel.Tokens; using Microsoft.IdentityModel.Tokens;
@@ -30,6 +32,16 @@ namespace Gatedge.ScanCode.Services
{ {
_utils = utils; _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; }
}
/// <summary> /// <summary>
/// 下推采购入库单 /// 下推采购入库单
/// </summary> /// </summary>
@@ -65,89 +77,98 @@ namespace Gatedge.ScanCode.Services
throw new Exception("该扫描结果已经被提交,不允许重复提交"); throw new Exception("该扫描结果已经被提交,不允许重复提交");
} }
// 如果提交成功,开始下推生产入库单 // 如果提交成功,开始下推生产入库单
var barEntityList = barRecord.FBarEntity; var barEntityList = barRecord.FBarEntity;
// 构造下推参数 // 构造下推参数
List<Push> billPusheList = new List<Push>(); Push billPush = new Push();
billPush.EntryIds = string.Join(",", barEntityList.Select(n => n.FSrcEntryId));
billPush.CustomParams = new Dictionary<string, object>();
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<string, PushCustomParam>();
foreach (var item in barEntityList) foreach (var item in barEntityList)
{ {
Push billPush = new Push(); var pushCustomParams = new PushCustomParam()
billPush.EntryIds = item.FSrcEntryId;
billPush.CustomParams = new Dictionary<string, object>();
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<K3CloudResponseStatus>();
// TODO 遍历下推
foreach (var item in billPusheList)
{
var pushResp = _utils.Push(_FormId, item);
// 如果失败,将所有生成的单据删除,并保存错误信息到扫描记录
if (pushResp?.IsSuccess != true)
{ {
// 下推成功的记录里获取Id并且删除 InStockQty = item.FBarQty ?? 0, // 下推数量
var deletePrdInStockIdList = new List<string>(); InStockId = item.FBarStockId_Id?.ToString() ?? string.Empty, // 入库仓库
successList.ForEach(n => n.SuccessEntitys?.ForEach(m => deletePrdInStockIdList.Add(m.Id.ToString()))); FStockDate = item.FStockDate ?? DateTime.MinValue, // 入库日期
var errorInfo = string.Join("\r\n", pushResp.Errors.Select(n => n.Message)); FExpirationDate = item.FExpirationDate ?? DateTime.MinValue, // 有效期至
// 如果有成功的下推单,则删除生成的入库单,回写错误信息。 FLot_Id = item.FLot_Id ?? 0, // 批号Id
if (deletePrdInStockIdList.Count > 0) FLot_Text = item.FLot_Text ?? string.Empty // 批号文本
{ };
// 撤销并删除生产入库单 Params.Add(item.FSrcEntryId ?? "0", pushCustomParams);
CancelAssignDeletePrdInStock(deletePrdInStockIdList);
}
barRecordService.SaveErrorInfo(barRecordId, errorInfo);
// 撤销提交的栈板单据
CancelAssignBarRecord(barRecordId);
return pushResp;
}
successList.Add(pushResp);
} }
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<string>(); if (pushResp?.SuccessEntitys.Count == 0)
successList.ForEach(n => n.SuccessEntitys?.ForEach(m => prdInStockIds.Add(m.Id.ToString()))); {
throw new Exception("下推出现异常");
}
var inStockBillIds = pushResp?.SuccessEntitys?.Select(n => n.Id.ToString()).ToList();
Submit stkInStockSubmitParam = new Submit() Submit stkInStockSubmitParam = new Submit()
{ {
Ids = string.Join(',', prdInStockIds) Ids = string.Join(',', inStockBillIds)
}; };
var submitResult = stkInStockService.Submit(stkInStockSubmitParam); var submitResult = stkInStockService.Submit(stkInStockSubmitParam);
var result = barRecordService.SubmitSuccess(barRecordId, successList.Select(n => new BarRecordSave.ResultEntry // 如果提交不成功,删除本次入库的单据,并返回结果
if (!submitResult.IsSuccess)
{ {
FResultBillNo = n.SuccessEntitys.First().Number, var errorInfo = string.Join("\r\n", submitResult.Errors.Select(n => n.Message));
FResultId = n.SuccessEntitys.First().Id.ToString(), 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() FResultBillId = new Models.K3Request.BaseData.FormType()
{ {
FID = _TargetFormId FID = _TargetFormId
} }
})); }));
return submitResult; return auditResult;
// 如果提交不成功
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;
} }
/// <summary> /// <summary>

View File

@@ -26,6 +26,17 @@ namespace Gatedge.ScanCode.Services
_utils = utils; _utils = utils;
} }
/// <summary>
/// 审核
/// </summary>
/// <param name="auditParam"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
public K3CloudResponseStatus Audit(Audit auditParam)
{
return _utils.Audit(_FormId, auditParam);
}
/// <summary> /// <summary>
/// 撤销 /// 撤销
/// </summary> /// </summary>