This commit is contained in:
PastSaid
2024-12-05 15:39:19 +08:00
parent 5472714e30
commit 9725ab5376
128 changed files with 46381 additions and 69 deletions

View File

@@ -0,0 +1,111 @@
using Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn;
using Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn.Args;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.ServiceHelper;
using Kingdee.BOS.Util;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
namespace GZ.LJY000.Biori.SAL_OUTSTOCK
{
[Description("发货通知单下推销售出库单#"), HotUpdate]
public class BillConvertEventPlugInEx : AbstractConvertPlugIn
{
public override void AfterConvert(AfterConvertEventArgs e)
{
base.AfterConvert(e);
if (e.Result.FindByEntityKey("FBillHead").Any())
{
var billHead = e.Result.FindByEntityKey("FBillHead")[0].DataEntity;
var sqlTables = new List<string>();
var entrys = billHead["SAL_OUTSTOCKENTRY"] as DynamicObjectCollection;
foreach (var entry in entrys)
{
DynamicObject entityLinkObj = null;
var entityLinkObjList = entry["FEntity_Link"] as DynamicObjectCollection;
if (entityLinkObjList != null && entityLinkObjList.Count > 0)
entityLinkObj = entityLinkObjList[0];
var sBillId = entityLinkObj == null ? 0 : entityLinkObj["SBillId"].Long2Int();
var sId = entityLinkObj == null ? 0 : entityLinkObj["SId"].Long2Int();
var sTableName = entityLinkObj == null ? "" : entityLinkObj["STableName"].ToString();
sqlTables.Add($" SELECT {sId} FENTRYID ");
}
var sqlL = $@"/*dialect*/
WITH #基础数据 AS (
{string.Join(" UNION ", sqlTables)}
)
SELECT t4.FBILLNO,t4.FEntryID,t4.FSeq
,t4.FSRCBILLENTRYID,t0.FENTRYID AS 'EntryId'
FROM # t0
INNER JOIN T_SAL_DELIVERYNOTICEENTRY_LK t1e_lk on t1e_lk.FENTRYID = t0.FENTRYID
AND t1e_lk.FSTABLENAME = 'T_SAL_ORDERENTRY'
INNER JOIN T_SAL_ORDERENTRY_LK t2e_lk on t2e_lk.FENTRYID = t1e_lk.FSID
AND t2e_lk.FSTABLENAME = 'T_PLN_FORECASTENTRY'
CROSS APPLY (
SELECT t4.FBILLNO,t4e.FEntryID,t4e.FSeq,t4e.FSRCBILLENTRYID
FROM T_PRD_PACKAGEINSTOCK t4
INNER JOIN T_PRD_PACKAGEINSTOCKENTRY t4e on t4.FID = t4e.FID
WHERE t4e.FSRCBILLENTRYID = t2e_lk.FSID
UNION ALL
SELECT t4.FBILLNO,0,0,t4.FSRCBILLENTRYID
FROM T_PRD_PACKAGEINSTOCK t4
WHERE t4.FSRCBILLENTRYID = t2e_lk.FSID
) t4
UNION ALL
SELECT t4.FBILLNO,t4.FEntryID,t4.FSeq
,t4.FSRCBILLENTRYID,t0.FENTRYID AS 'EntryId'
FROM # t0
INNER JOIN T_SAL_DELIVERYNOTICEENTRY_LK t1e_lk on t1e_lk.FENTRYID = t0.FENTRYID
AND t1e_lk.FSTABLENAME = 'T_SAL_ORDERENTRY'
CROSS APPLY (
SELECT t4.FBILLNO,t4e.FEntryID,t4e.FSeq,t4e.FSRCBILLENTRYID
FROM T_PRD_PACKAGEINSTOCK t4
INNER JOIN T_PRD_PACKAGEINSTOCKENTRY t4e on t4.FID = t4e.FID
WHERE t4e.FSRCBILLENTRYID = t1e_lk.FSID
UNION ALL
SELECT t4.FBILLNO,0,0,t4.FSRCBILLENTRYID
FROM T_PRD_PACKAGEINSTOCK t4
WHERE t4.FSRCBILLENTRYID = t1e_lk.FSID
) t4
";
var dataList = DBServiceHelper.ExecuteDynamicObject(this.Context, sqlL);
if (dataList != null && dataList.Any())
{
foreach (var entry in entrys)
{
DynamicObject entityLinkObj = null;
var entityLinkObjList = entry["FEntity_Link"] as DynamicObjectCollection;
if (entityLinkObjList != null && entityLinkObjList.Count > 0)
entityLinkObj = entityLinkObjList[0];
var sBillId = entityLinkObj == null ? 0 : entityLinkObj["SBillId"].Long2Int();
var sId = entityLinkObj == null ? 0 : entityLinkObj["SId"].Long2Int();
var sTableName = entityLinkObj == null ? "" : entityLinkObj["STableName"].ToString();
var data = dataList.FirstOrDefault(w => w["EntryId"].Long2Int() == sId);
if (data != null)
{
entry["FPackBillNo"] = data["FBILLNO"];
entry["FPackBillSeq"] = data["FSeq"];
entry["FPackBillEntryId"] = data["FEntryID"];
}
}
}
}
}
}
}

View File

@@ -0,0 +1,91 @@
using Kingdee.BOS.Core.DynamicForm;
using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.List;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.Util;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
namespace GZ.LJY000.Biori.SAL_OUTSTOCK
{
[HotUpdate, Description("销售出库单组装单取值插件")]
public class BillEventPlugInEx : AbstractDynamicFormPlugIn
{
public override void BeforeUpdateValue(BeforeUpdateValueEventArgs e)
{
base.BeforeUpdateValue(e);
}
public override void EntryBarItemClick(BarItemClickEventArgs e)
{
base.EntryBarItemClick(e);
if (e.BarItemKey.Equals("tbScanPack"))
{
var billShowParameter = new DynamicFormShowParameter();
if (this.Context.DBId.Equals("6735f10547df64"))
billShowParameter.FormId = "k474702e8884e43a3b11c235d9d430f5d";
else
billShowParameter.FormId = "UHIK_ScanGetPack";
billShowParameter.ParentPageId = this.View.PageId;
var billObj = this.View.Model.DataObject;
var billId = billObj["Id"].ToString();
var entity = billObj["SAL_OUTSTOCKENTRY"] as DynamicObjectCollection;
if (entity != null && entity.Any())
{
this.View.ShowForm(billShowParameter, (result) =>
{
if (result != null)
{
var rows = result.ReturnData as DynamicObjectCollection;
if (rows.Any())
{
//var parentRows = rows.Where(w => !w["FParentRowId"].ToString().IsNullOrEmpty());
//var subRows = rows.Where(w => w["FParentRowId"].ToString().IsNullOrEmpty());
foreach (var item in entity)
{
DynamicObject row = null;
//var parentRowId = item["ParentRowId"].ToString();
//var rowId = item["RowId"].ToString();
//if (parentRowId.IsNullOrEmpty())
//{
// //var row = rows.FirstOrDefault(w => w["FRowId"].ToString() == item["RowId"].ToString());
// row = parentRows.FirstOrDefault(w => w["FMaterialID_Id"].Long2Int() == item["MaterialID_Id"].Long2Int());
//}
//else
//{
// var parentMatId = item["ParentMatId_Id"].Long2Int();
// var parentRow = parentRows.FirstOrDefault(w => w["FMaterialID_Id"].Long2Int() == parentMatId);
// row = subRows.FirstOrDefault(w => w["FParentRowId"].ToString() == parentRow["FRowId"].ToString() && w["FMaterialID_Id"] == item["MaterialID_Id"]);
//}
row = rows.FirstOrDefault(w => w["FMaterialID_Id"].Long2Int() == item["MaterialID_Id"].Long2Int());
if (row != null)
{
item["FPackBillNo"] = row["FBILLNO"].ToString();
item["FPackBillSeq"] = row["FBILLSEQ"].Long2Int();
item["FPackBillEntryId"] = row["FBILLENTRYID"].Long2Int();
}
}
}
}
this.View.UpdateView("FEntity");
return;
});
}
}
}
}
}

View File

@@ -0,0 +1,141 @@

using Kingdee.BOS.App.Data;
using Kingdee.BOS.Core.DynamicForm;
using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.Util;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
namespace GZ.LJY000.Biori.SAL_OUTSTOCK
{
[HotUpdate, Description("销售出库单审核/反审核操作")]
public class OperationEventPlugInEx : AbstractOperationServicePlugIn
{
public override void OnPreparePropertys(PreparePropertysEventArgs e)
{
base.OnPreparePropertys(e);
e.FieldKeys.Add("FRowType");
e.FieldKeys.Add("FPackBillNo");
e.FieldKeys.Add("FPackBillSeq");
e.FieldKeys.Add("FPackBillEntryId");
e.FieldKeys.Add("FRealQty");
}
public override void OnAddValidators(AddValidatorsEventArgs e)
{
base.OnAddValidators(e);
//添加检查校验器:
if (this.FormOperation.OperationId == 1)
{
var validator = new VaildatorEventPlugInEx();//新增的校验器
validator.EntityKey = "FEntity";
e.Validators.Add(validator);//添加校验器
}
}
public override void EndOperationTransaction(EndOperationTransactionArgs e)
{
base.EndOperationTransaction(e);
//保存8 提交9 审核1 反审核26 删除3
if (this.FormOperation.OperationId == 1)
{
DoComputePackgeQty(e.DataEntitys, false);
}
else if (this.FormOperation.OperationId == 26)
{
DoComputePackgeQty(e.DataEntitys, true);
}
}
/// <summary>
///
/// </summary>
/// <param name="dataEntitys"></param>
/// <param name="isInStock"></param>
private void DoComputePackgeQty(DynamicObject[] dataEntitys, bool isInStock)
{
var dataEntityList = new List<DynamicObject>();
var sqlL = new List<string>();
foreach (var data in dataEntitys)
{
foreach (var item in data["SAL_OUTSTOCKENTRY"] as DynamicObjectCollection)
{
var packBillNo = item["FPackBillNo"];
var rowType = item["RowType"].ToString();
if (!packBillNo.IsNullOrEmpty() && rowType.Equals("Parent"))
{
sqlL.Add($" SELECT '{packBillNo}' AS FBILLNO , {item["RealQty"]} AS QTY ");
}
}
}
if (isInStock)
DoComputePackgeInStockQty(sqlL);
else
DoComputePackgeOutStockQty(sqlL);
}
/// <summary>
/// 入库操作
/// </summary>
/// <param name="sqlL"></param>
private void DoComputePackgeInStockQty(List<string> sqlL)
{
if (sqlL.Any())
{
var updSqlL = $@"/*dialect*/
WITH #基础数据 AS (
{string.Join(" UNION ALL ", sqlL)}
)
UPDATE t0 SET t0.FQTY = t0.FQTY + t1.QTY
,t0.FOUTSTOCKQTY = t0.FOUTSTOCKQTY - t1.QTY
FROM T_PRD_PACKAGEINSTOCK t0
INNER JOIN # t1 on t1.FBILLNO = t0.FBILLNO
WHERE 1 = 1
AND t0.FDOCUMENTSTATUS = 'C'
";
//更新组装单信
var resData = DBUtils.Execute(this.Context, updSqlL);
return;
}
}
/// <summary>
/// 出库操作
/// </summary>
/// <param name="dataEntitys"></param>
private void DoComputePackgeOutStockQty(List<string> sqlL)
{
if (sqlL.Any())
{
var updSqlL = $@"/*dialect*/
WITH #基础数据 AS (
{string.Join(" UNION ALL ", sqlL)}
)
UPDATE t0 SET t0.FQTY = t0.FQTY - t1.QTY
,t0.FOUTSTOCKQTY = t0.FOUTSTOCKQTY + t1.QTY
FROM T_PRD_PACKAGEINSTOCK t0
INNER JOIN # t1 on t1.FBILLNO = t0.FBILLNO
WHERE 1 = 1
AND t0.FDOCUMENTSTATUS = 'C'
AND (t0.FQTY - t1.QTY) >= 0
";
//更新组装单信
var resData = DBUtils.Execute(this.Context, updSqlL);
return;
}
}
}
}

View File

@@ -0,0 +1,112 @@
using Kingdee.BOS;
using Kingdee.BOS.Core;
using Kingdee.BOS.Core.DynamicForm;
using Kingdee.BOS.Core.Validation;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.ServiceHelper;
using Kingdee.BOS.Util;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
namespace GZ.LJY000.Biori.SAL_OUTSTOCK
{
/// <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"];
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)); // 错误级别:警告、错误...
}
}
}