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.Text; namespace GZ.LJY000.Enpower.POSH_W5WagonPlan.BillConvertPlugInEx { [Description("W+5预测单转换预测单#"), HotUpdate] public class W5WagonPlan2PLN_FORECAST : 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 convertBillNo = billHead["FConvertBillNo"]; if (!convertBillNo.IsNullOrEmptyOrWhiteSpace()) { var sqlL = $@"/*dialect*/ WITH #W5预测单 AS ( SELECT t0.FBILLNO,t0.FID,t0e.FEntryID,t0e.FSTARTDATE,t0e.FYEAR,t0e.FMATERIALID,t0e.FUNITID ,FD1,FD2,FD3,FD4,FD5,FD6,FD7,FD8,FD9,FD10,FD11,FD12,FD13,FD14,FD15,FD16,FD17,FD18,FD19,FD20,FD21,FD22,FD23,FD24,FD25,FD26,FD27,FD28,FD29,FD30,FD31,FD32,FD33,FD34,FD35,FD36,FD37,FD38,FD39,FD40,FD41,FD42 FROM T_PLN_FORECAST2W5 t0 --表头 INNER JOIN T_PLN_FORECAST2W5ENTRY t0e on t0.FID = t0e.FID --表体 WHERE t0.FBILLNO = '{convertBillNo.ToString()}' ) ,#W5装车计划 AS ( SELECT * ,REPLACE(t1.dateM,'FD','') RN ,DATEPART(WEEKDAY,t1.FSTARTDATE) '初始周天' ,DATEPART(WEEKDAY,DATEADD(DAY,CONVERT(int,REPLACE(T1.DATEM,'FD','')) -1,t1.FSTARTDATE)) '周天' ,DATEADD(DAY,CONVERT(int,REPLACE(T1.DATEM,'FD','')) - 1,t1.FSTARTDATE) AS '日期' FROM #W5预测单 t0 UNPIVOT ( FQTY FOR dateM IN (FD1,FD2,FD3,FD4,FD5,FD6,FD7,FD8,FD9,FD10,FD11,FD12,FD13,FD14,FD15,FD16,FD17,FD18,FD19,FD20,FD21,FD22,FD23,FD24,FD25,FD26,FD27,FD28,FD29,FD30,FD31,FD32,FD33,FD34,FD35,FD36,FD37,FD38,FD39,FD40,FD41,FD42) ) AS t1 ) , #数据二次处理 AS ( SELECT t0.FBILLNO,t0.FID,t0.FEntryID,t0.FMATERIALID,t0.FUNITID,t0.FYEAR ,t0.FQTY ,t0.RN ,CASE t0.初始周天 WHEN 1 THEN 7 ELSE t0.初始周天 - 1 END '初始周天' ,t0.FSTARTDATE ,CASE t0.周天 WHEN 1 THEN 7 ELSE t0.周天 - 1 END '周天' ,t0.日期 ,DATEADD(SECOND,-1,DATEADD(DAY, 1, t0.日期)) AS 'endDate' FROM #W5装车计划 t0 ) SELECT * FROM ( SELECT t0.FBILLNO,t0.FID,t0.FEntryID,t0.FMATERIALID,t0.FUNITID,t0.FYEAR,t1.groupby FROM #W5预测单 t0 , (SELECT 1 groupby UNION ALL SELECT 2 groupby UNION ALL SELECT 3 groupby UNION ALL SELECT 4 groupby UNION ALL SELECT 5 groupby UNION ALL SELECT 6 groupby) t1 ) tt CROSS APPLY ( SELECT t0.FBILLNO,t0.FID,t0.FEntryID,t0.FMATERIALID,t0.FUNITID,t0.FYEAR ,SUM(t0.FQTY) '最终数量' ,MIN(t0.日期) minDate ,MAX(t0.endDate) maxDate FROM #数据二次处理 t0 WHERE tt.FEntryID = t0.FEntryID AND (t0.初始周天 + t0.RN - 1) > (tt.groupby -1) * 7 AND (t0.初始周天 + t0.RN-1) <= tt.groupby * 7 GROUP BY t0.FBILLNO,t0.FID,t0.FEntryID,t0.FMATERIALID,t0.FUNITID,t0.FYEAR ) t0 ORDER BY t0.minDate ASC "; //throw new Exception(sqlL); var dataList = DBServiceHelper.ExecuteDynamicObject(this.Context, sqlL); if (dataList != null && dataList.Count > 0) { var entrys = billHead["PLN_FORECASTENTRY"] as DynamicObjectCollection; entrys.Clear(); var idx = 1; //#! 物料 var matFld = e.TargetBusinessInfo.GetField("FMaterialId") as BaseDataField; ////#! 货主 //var ownerFId = e.TargetBusinessInfo.GetField("FOwnerId") as BaseDataField; //#! 计量单位 var unitFId = e.TargetBusinessInfo.GetField("FUnitID") as BaseDataField; var unitBaseFId = e.TargetBusinessInfo.GetField("FBaseUnitID") as BaseDataField; //仓库 var stockFid = e.TargetBusinessInfo.GetField("FStockId") as BaseDataField; foreach (var item in dataList) { var entity = entrys.DynamicCollectionItemPropertyType.CreateInstance() as DynamicObject; entity["Seq"] = idx; //# 物料 var matId = item["FMATERIALID"].Long2Int(); entity["MaterialId_Id"] = matId; var matObj = BusinessDataServiceHelper.LoadSingle(this.Context, matId, matFld.RefFormDynamicObjectType); entity["MaterialId"] = matObj; //预留类型 entity["ReserveType"] = (matObj["MaterialPlan"] as DynamicObjectCollection)[0]["ReserveType"]; //均化周期 entity["AveraCycle"] = 1; var MaterialBase = (matObj["MaterialBase"] as DynamicObjectCollection)[0] as DynamicObject; var baseUnitId_Id = MaterialBase["BaseUnitId_Id"].Long2Int(); var qty = decimal.Parse(item["最终数量"].ToString()); entity["Qty"] = qty; entity["StartDate"] = item["minDate"]; entity["EndDate"] = item["maxDate"]; ////# 货主类型 //entity["FOwnerTypeId"] = item["FOWNERTYPEID"]; ////# 货主 //var ownerId = item["FOWNERID"].Long2Int(); //if (ownerId > 0) //{ // var ownerObj = BusinessDataServiceHelper.LoadSingle(this.Context, ownerId, ownerFId.RefFormDynamicObjectType); // entity["FOwnerId_Id"] = ownerId; // entity["FOwnerId"] = ownerObj; //} //# 计量单位 var unitId = item["FUNITID"].Long2Int(); if (unitId > 0) { var unitObj = BusinessDataServiceHelper.LoadSingle(this.Context, unitId, unitFId.RefFormDynamicObjectType); entity["UnitID_Id"] = unitId; entity["UnitID"] = unitObj; if (baseUnitId_Id != 0) { var baseUnitQty = ConvertServiceHelper.GetBaseUnitQty(this.Context, matId, unitId, qty); var unitBaseObj = BusinessDataServiceHelper.LoadSingle(this.Context, baseUnitId_Id, unitBaseFId.RefFormDynamicObjectType); entity["BaseUnitId_Id"] = MaterialBase["BaseUnitId_Id"]; entity["BaseUnitId"] = unitBaseObj; entity["BaseQty"] = baseUnitQty; } } var entity_Links = entity["FEntity_Link"] as DynamicObjectCollection; var entityLink = entity_Links.DynamicCollectionItemPropertyType.CreateInstance() as DynamicObject; entity_Links.Add(entityLink); entityLink["RuleId"] = "5999083d-5e4a-4af9-93f8-32873ef4e9de"; entityLink["STableName"] = "T_PLN_FORECAST2YEARENTRY"; entityLink["SBillId"] = item["FID"].ToString(); entityLink["SId"] = item["FEntryID"].ToString(); entrys.Add(entity); idx++; } } } } } } }