Files
GateDge2023_ljy/14.宝锐/GZ.LJY000.Biori/STK_TransferDirect/VaildatorEventPlugInEx.cs
PastSaid 9725ab5376 a
2024-12-05 15:39:19 +08:00

113 lines
4.3 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Kingdee.BOS.Core.DynamicForm;
using Kingdee.BOS.Core.Validation;
using Kingdee.BOS.Core;
using Kingdee.K3.BD.NewCode.Core.Utils;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using Kingdee.BOS;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.Util;
using Kingdee.BOS.ServiceHelper;
namespace GZ.LJY000.Biori.STK_TransferDirect
{
/// <summary>
/// 直接调拨单审核时校验对应组装单是否有足够数量
/// </summary>
[Description("直接调拨单审核时校验对应组装单是否有足够数量")]
public class VaildatorEventPlugInEx : AbstractValidator
{
/// <summary>
///
/// </summary>
/// <param name="dataEntities"></param>
/// <param name="validateContext"></param>
/// <param name="ctx"></param>
public override void Validate(ExtendedDataEntity[] dataEntities, ValidateContext validateContext, Context ctx)
{
IOperationResult opResult = new OperationResult();
var dataEntityList = new List<DynamicObject>();
var sqlL = new List<string>();
foreach (var data in dataEntities)
{
var item = data.DataEntity;
var packBillNo = item["FPackBillNo"].ToString();
var rowType = item["RowType"].ToString();
if (!packBillNo.IsNullOrEmpty() && rowType.Equals("Parent"))
{
sqlL.Add($" SELECT '{packBillNo}' AS FBILLNO , {item["RealQty"]} AS QTY ");
}
}
if (sqlL.Any())
{
var selectSql = $@"/*dialect*/
WITH #基础数据 AS (
{string.Join(" UNION ALL ", sqlL)}
)
SELECT t0.FBILLNO,t0.FMATERIALID,t0.FQTY,t0.FINSTOCKQTY,t0.FNOINSTOCKQTY,t0.FOUTSTOCKQTY
,t0.FQTY - t1.QTY AS 'surplusQty'
FROM T_PRD_PACKAGEINSTOCK t0
INNER JOIN # t1 on t1.FBILLNO = t0.FBILLNO
WHERE 1 = 1
AND t0.FDOCUMENTSTATUS = 'C'
";
var dataList = DBServiceHelper.ExecuteDynamicObject(this.Context, selectSql);
if (dataList != null && dataList.Any())
{
foreach (var data in dataEntities)
{
var item = data.DataEntity;
var packBillNo = item["FPackBillNo"].ToString();
var rowType = item["RowType"].ToString();
if (!packBillNo.IsNullOrEmpty() && rowType.Equals("Parent"))
{
var res = dataList.FirstOrDefault(w => w["FBILLNO"].ToString() == packBillNo);
if (res != null)
{
var surplusQty = Convert.ToDecimal(res["surplusQty"]);
if (surplusQty < 0)
{
ValidatorUnique(validateContext, data, data.DataEntity["Id"].ToString());
}
}
}
}
}
}
}
/// <summary>
///
/// </summary>
/// <param name="validateContext"></param>
/// <param name="entity"></param>
/// <param name="id"></param>
private void ValidatorUnique(ValidateContext validateContext, ExtendedDataEntity entity, string id)
{
//添加校验的错误信息
validateContext.AddError(entity,
new ValidationErrorInfo(
"RealQty", // 出错的字段Key可以空
id, // 数据包内码,必填,后续操作会据此内码避开此数据包
entity.DataEntityIndex, // 出错的数据包在全部数据包中的顺序
0, // 出错的数据行在全部数据行中的顺序如果校验基于单据头此为0
"REF", // 错误编码,可以任意设定一个字符,主要用于追查错误来源
$"对应组装单可出库数量不足!", // 错误的详细提示信息
$"对应组装单可出库数量不足!", // 错误的简明提示信息
ErrorLevel.Error)); // 错误级别:警告、错误...
}
}
}