Files
GateDge2023_ljy/14.宝锐/GZ.LJY000.Biori/UHIK_PRD_PACKAGE_INSTOCK/BillConvertEventPlugInEx.cs
PastSaid 3d15fd4b7e a
2025-01-01 08:21:58 +08:00

335 lines
14 KiB
C#

using Kingdee.BOS.Core.Bill;
using Kingdee.BOS.Core.Metadata;
using Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn;
using Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn.Args;
using Kingdee.BOS.Core.Metadata.FieldElement;
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.Security.Cryptography;
using System.Text;
namespace GZ.LJY000.Biori.UHIK_PRD_PACKAGE_INSTOCK
{
[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 srcBillEntryId = billHead["FPSrcBillEntryId"].Long2Int();
var srcBillType = billHead["FSrcBillType"].ToString();
if (srcBillType.ToUpper().Equals("PLN_FORECAST"))
{
var sqlL = $@"/*dialect*/
DECLARE @EntryId int
SET @EntryId = {srcBillEntryId}
;WITH #预测单数据 AS (
--套件子项
SELECT t0.FBILLNO,t0e.FID,t0e.FENTRYID,t0e.FMATERIALID
,t0e.FROWID,t0e.FPARENTROWID,t0e.FBOMID,t0e.FBOMENTRYID,t0e.FOWNERID,t0e.FOWNERTYPEID
,t0e.FPRODUCTTYPE,t0e.FSEQ,t0e.F_UHIK_TEXT8 AS '标签货号'
,t0e.F_UHIK_QTY2 AS '父项数量',t0e.F_UHIK_TEXT2 AS '标签规格_Note'
,t0e.FSTOCKORGID AS '库存组织',t0e.F_HUOHAO AS '货号'
,t0e.F_UHIK_DATE AS '标签生产日期'
,t0e.F_UHIK_LOT AS '标签批号'
,t2e.FENTRYID AS 'PEntryId'
FROM T_PLN_FORECAST t0
INNER JOIN T_PLN_FORECASTENTRY t0e on t0.FID = t0e.FID AND t0e.FPRODUCTTYPE = 2
INNER JOIN T_PLN_FORECASTENTRY t2e on t2e.FROWID = t0e.FPARENTROWID
WHERE 1 = 1
AND t0e.FPRODUCTTYPE = 2
AND t2e.FENTRYID = @EntryId
)
SELECT t1.FNUMBER,t1_l.FNAME,t0.*
,ISNULL(t2.FQTY,0) 'FQTY'
,ISNULL(t2.F_FYL_QTY,0) 'F_FYL_QTY'
,ISNULL(t2.F_GS_QTY,0) 'F_GS_QTY'
,ISNULL(t2.F_GZQTY,0)'F_GZQTY'
,ISNULL(t2.FLOT,0) 'FLOT'
,ISNULL(t2.FLOT_TEXT,'') 'FLOT_TEXT'
,ISNULL(t2.FUNITID,0) 'FUNITID'
,ISNULL(t2.MOBIllNo,'') 'MOBIllNo'
,ISNULL(t2.MoBillType,'') 'MoBillType'
,ISNULL(t2.MoEntryId,0) 'MoEntryId'
,ISNULL(t2.MoEntrySeq,0) 'MoEntrySeq'
,ISNULL(t2.MoId,0) 'MoId'
,ISNULL(t2.生产日期,'') '生产日期'
,ISNULL(t2.有效期至,'') '有效期至'
,ROW_NUMBER() OVER(ORDER BY t0.FSEQ) RN
,ISNULL(t3.RptQty,0) 'RptQty'
FROM #预测单数据 t0
INNER JOIN T_BD_MATERIAL t1 on t1.FMATERIALID = t0.FMATERIALID
INNER JOIN T_BD_MATERIAL_L t1_l on t1_l.FMATERIALID = t0.FMATERIALID AND t1_l.FLOCALEID = 2052
OUTER APPLY (
SELECT t2.FBILLNO AS 'MOBIllNo',t2.FBILLTYPE AS 'MoBillType',t2.FID AS 'MoId',t2e.FENTRYID AS 'MoEntryId',t2e.FSEQ AS 'MoEntrySeq'
,t2e.F_GZQty,t2e.F_GS_QTY,t2e.F_FYL_QTY,t2e.FQTY
,t2e.FLOT,t2e.FLOT_TEXT,t2e.FUNITID
,ISNULL(CONVERT(varchar(100),t2e.F_UHIK_DATE,20),'') '生产日期',ISNULL(CONVERT(varchar(100),t2e.F_UHIK_DATE1,20),'') '有效期至'
FROM T_PRD_MO t2
INNER JOIN T_PRD_MOENTRY t2e on t2.FID = t2e.FID
INNER JOIN T_PRD_MOENTRY_A t2e_a on t2e.FENTRYID = t2e_a.FENTRYID AND t2e_a.FREQSRC = 2
WHERE 1 = 1 AND t2e.FSALEORDERENTRYSEQ = t0.FSEQ AND t2e.FSALEORDERNO = t0.FBILLNO
AND t2e.FMATERIALID = t0.FMATERIALID
UNION ALL
SELECT t2.FBILLNO AS 'MOBIllNo',t2.FBILLTYPE AS 'MoBillType',t2.FID AS 'MoId',t2e.FENTRYID AS 'MoEntryId',t2e.FSEQ AS 'MoEntrySeq'
,t2e.F_GZQty,t2e.F_GS_QTY,t2e.F_FYL_QTY,t2e.FQTY
,t2e.FLOT,t2e.FLOT_TEXT,t2e.FUNITID
,ISNULL(CONVERT(varchar(100),t2e.F_UHIK_DATE,20),'') '生产日期',ISNULL(CONVERT(varchar(100),t2e.F_UHIK_DATE1,20),'') '有效期至'
FROM T_PRD_MO t2
INNER JOIN T_PRD_MOENTRY t2e on t2.FID = t2e.FID
INNER JOIN T_PRD_MOENTRY_A t2e_a on t2e.FENTRYID = t2e_a.FENTRYID
WHERE 1 = 1 AND t2e.FPackSrcBillNo = t0.FBILLNO AND t2e.FFPackSrcSeq = t0.FSEQ AND t2e.FPackSrcType = 1
AND t2e.FMATERIALID = t0.FMATERIALID
) t2
OUTER APPLY (
SELECT t3e_lk.FSID,SUM(t3e_a.FBASESTOCKINQUASELQTY) RptQty
FROM T_PRD_MORPT t3
INNER JOIN T_PRD_MORPTENTRY t3e on t3.FID = t3e.FID
INNER JOIN T_PRD_MORPTENTRY_A t3e_a on t3e_a.FENTRYID = t3e.FENTRYID
INNER JOIN T_PRD_MORPTENTRY_LK t3e_lk on t3e_lk.FENTRYID = t3e.FENTRYID AND t3e_lk.FSTABLENAME = 'T_PRD_MOENTRY'
WHERE t3e_lk.FSID = t2.MoEntryId
GROUP BY t3e_lk.FSID
) t3
";
var dataList = DBServiceHelper.ExecuteDynamicObject(this.Context, sqlL);
if (dataList != null && dataList.Any())
{
var entrys = billHead["FEntity"] as DynamicObjectCollection;
var entityType = entrys[0].DynamicObjectType;
//#! 物料
var matFld = e.TargetBusinessInfo.GetField("FMaterialId") as BaseDataField;
//#! 货主
var ownerFId = e.TargetBusinessInfo.GetField("FOwnerId") as BaseDataField;
//#! 批号
var lotFId = e.TargetBusinessInfo.GetField("FLot") as BaseDataField;
//#! 单据类型
var moBillTypeFId = e.TargetBusinessInfo.GetField("FMoBillTypeId") as BaseDataField;
//#! 计量单位
var unitFId = e.TargetBusinessInfo.GetField("FUnitID") as BaseDataField;
var PStockOrgObj = billHead["FPStockOrgId"] as DynamicObject;
var PStockOrgId_Id = billHead["FPStockOrgId_Id"].Long2Int();
//仓库
var stockFid = e.TargetBusinessInfo.GetField("FStockId") as BaseDataField;
entrys.Clear();
foreach (var item in dataList)
{
var entry = new DynamicObject(entityType);
entry["Seq"] = item["RN"];
//# 物料
var matId = item["FMATERIALID"].Long2Int();
entry["FMaterialId_Id"] = matId;
var matObj = BusinessDataServiceHelper.LoadSingle(this.Context, matId, matFld.RefFormDynamicObjectType);
entry["FMaterialId"] = matObj;
var materialStock = (matObj["MaterialStock"] as DynamicObjectCollection)[0];
var stockId = materialStock["StockId_Id"].Long2Int();
if (stockId > 0)
{
entry["FStockId_Id"] = stockId;
var stockObj = BusinessDataServiceHelper.LoadSingle(this.Context, stockId, stockFid.RefFormDynamicObjectType);
entry["FStockId"] = stockObj;
}
//# 产品类型
entry["FProductType"] = item["FPRODUCTTYPE"];
//# 来源单据
entry["FSrcBillId"] = item["FID"];
entry["FSrcBillEntryId"] = item["FENTRYID"];
//# 生产订单数据
var moBillTypeId = item["MoBillType"];
if (!moBillTypeId.IsNullOrEmptyOrWhiteSpace())
{
var moBillTypeObj = BusinessDataServiceHelper.LoadSingle(this.Context, moBillTypeId, moBillTypeFId.RefFormDynamicObjectType);
entry["FMoBillTypeId_Id"] = moBillTypeId;
entry["FMoBillTypeId"] = moBillTypeObj;
entry["FMoId"] = item["MoId"];
entry["FMOBillNo"] = item["MOBIllNo"];
}
entry["FMoEntryId"] = item["MoEntryId"];
entry["FMoEntrySeq"] = item["MoEntrySeq"];
//# 货主类型
entry["FOwnerTypeId"] = item["FOWNERTYPEID"];
//# 货主
var ownerId = item["FOWNERID"].Long2Int();
if (ownerId > 0)
{
var ownerObj = BusinessDataServiceHelper.LoadSingle(this.Context, ownerId, ownerFId.RefFormDynamicObjectType);
entry["FOwnerId_Id"] = ownerId;
entry["FOwnerId"] = ownerObj;
}
//# 批号
var lotId = item["FLOT"].Long2Int();
if (lotId > 0)
{
var lotObj = BusinessDataServiceHelper.LoadSingle(this.Context, lotId, lotFId.RefFormDynamicObjectType);
entry["FLot_Id"] = lotId;
entry["FLot"] = lotObj;
entry["FLot_Text"] = item["FLOT_TEXT"];
}
//# 计量单位
var unitId = item["FUNITID"].Long2Int();
if (unitId > 0)
{
var unitObj = BusinessDataServiceHelper.LoadSingle(this.Context, unitId, unitFId.RefFormDynamicObjectType);
entry["FUnitID_Id"] = unitId;
entry["FUnitID"] = unitObj;
}
//# 库存组织
entry["FStockOrgId_Id"] = PStockOrgId_Id;
entry["FStockOrgId"] = PStockOrgObj;
entry["FLabHuoHao"] = item["标签货号"];
entry["FGZLQty"] = item["F_GZQty"];
entry["FLabSpec"] = item["标签规格_Note"];
entry["FZGSQty"] = item["F_GS_QTY"];
entry["FHuoHao"] = item["货号"];
if (item["生产日期"].ToString() != string.Empty)
entry["FProducedDate"] = item["生产日期"];
if (item["有效期至"].ToString() != string.Empty)
entry["FExpiryDate"] = item["有效期至"];
//# entry[""] = item["标签生产日期"]
//# 富余量
entry["FFYLQty"] = item["F_FYL_QTY"];
entry["FQty"] = item["FQTY"];
//entry["FRptQty"] = item["FQTY"];
entry["FRptQty"] = item["RptQty"];
entry["FNoInStockQty"] = item["FQTY"];
entrys.Add(entry);
}
}
}
}
}
public override void OnParseFilterOptions(ParseFilterOptionsEventArgs e)
{
base.OnParseFilterOptions(e);
}
public override void OnInitVariable(InitVariableEventArgs e)
{
base.OnInitVariable(e);
}
public override void OnQueryBuilderParemeter(QueryBuilderParemeterEventArgs e)
{
base.OnQueryBuilderParemeter(e);
}
public override void OnBeforeGetSourceData(BeforeGetSourceDataEventArgs e)
{
base.OnBeforeGetSourceData(e);
}
public override void OnInSelectedRow(InSelectedRowEventArgs e)
{
base.OnInSelectedRow(e);
}
public override void OnBeforeFieldMapping(BeforeFieldMappingEventArgs e)
{
base.OnBeforeFieldMapping(e);
}
public override void OnFieldMapping(FieldMappingEventArgs e)
{
base.OnFieldMapping(e);
}
public override void OnAfterFieldMapping(AfterFieldMappingEventArgs e)
{
base.OnAfterFieldMapping(e);
}
public override void OnCreateLink(CreateLinkEventArgs e)
{
base.OnCreateLink(e);
}
public override void OnSetLinkAmount(SetLinkAmountEventArgs e)
{
base.OnSetLinkAmount(e);
}
public override void OnAfterCreateLink(CreateLinkEventArgs e)
{
base.OnAfterCreateLink(e);
}
public override void OnGetSourceData(GetSourceDataEventArgs e)
{
base.OnGetSourceData(e);
}
public override void OnCreateTarget(CreateTargetEventArgs e)
{
base.OnCreateTarget(e);
}
public override void OnGetDrawSourceData(GetDrawSourceDataEventArgs e)
{
base.OnGetDrawSourceData(e);
}
public override void OnCreateDrawTarget(CreateDrawTargetEventArgs e)
{
base.OnCreateDrawTarget(e);
}
public override void OnBeforeGroupBy(BeforeGroupByEventArgs e)
{
base.OnBeforeGroupBy(e);
}
public override void OnGetConvertBusinessService(ConvertBusinessServiceEventArgs e)
{
base.OnGetConvertBusinessService(e);
}
public override void OnAfterConvertBusinessService(AfterConvertBusinessServiceEventArgs e)
{
base.OnAfterConvertBusinessService(e);
}
public override void OnBeforeTailDiff(BeforeTailDiffEventArgs e)
{
base.OnBeforeTailDiff(e);
}
public override void OnAfterTailDiff(AfterTailDiffEventArgs e)
{
base.OnAfterTailDiff(e);
}
}
}