This commit is contained in:
PastSaid
2025-01-01 08:21:58 +08:00
parent 9725ab5376
commit 3d15fd4b7e
59 changed files with 3013 additions and 1324 deletions

View File

@@ -0,0 +1,167 @@
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++;
}
}
}
}
}
}
}