Files
GateDge2023_ljy/14.宝锐/GZ.LJY000.Biori/SAL_OUTSTOCK/BillConvertEventPlugInEx.cs

112 lines
4.3 KiB
C#
Raw Normal View History

2024-12-05 15:39:19 +08:00
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"];
}
}
}
}
}
}
}