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,156 @@
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_Year_Forecast.BillConvertPlugInEx
{
[Description("年度预测单转换预测单#"), HotUpdate]
public class YeacForecast2PLN_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 #年度预测 AS (
SELECT t1.FBILLNO,t1.FID,t1.FEntryID,t1.FSEQ,t1.FMATERIALID,t1.FUNITID
,t1.FQTY,t1.FYEAR '年份' ,REPLACE(T1.DATEM,'FMONTH','') '月份'
,t1.FYEAR * 100 + REPLACE(T1.DATEM,'FMONTH','') 周期
--,DATEADD(MONTH, DATEDIFF(MONTH, 0, ), 0) AS 'startDate'
,CONVERT(datetime,CONCAT(T1.FYEAR,'-',REPLACE(T1.DATEM,'FMONTH',''),'-01')) 'startDate'
FROM (
SELECT t0.FBILLNO,t0.FID,t0e.FEntryID,t0e.FSEQ,t0e.FYEAR,t0e.FMATERIALID,t0e.FUNITID,FMONTH1,FMONTH2,FMONTH3,FMONTH4,FMONTH5,FMONTH6,FMONTH7,FMONTH8,FMONTH9,FMONTH10,FMONTH11,FMONTH12
FROM T_PLN_FORECAST2YEAR t0 --表头
INNER JOIN T_PLN_FORECAST2YEARENTRY t0e on t0.FID = t0e.FID --表体
) t0
UNPIVOT (
FQTY FOR dateM IN (FMONTH1,FMONTH2,FMONTH3,FMONTH4,FMONTH5,FMONTH6,FMONTH7,FMONTH8,FMONTH9,FMONTH10,FMONTH11,FMONTH12)
) AS t1
)
SELECT tt.*
,DATEADD(SECOND,-1,DATEADD(MONTH, 1, tt.startDate)) AS 'endDate'
--,t0.FQTY AS 'W5数量'
,CASE WHEN ISNULL(t0.FQTY,0) > tt.FQTY THEN 0 ELSE tt.FQTY - ISNULL(t0.FQTY,0) END '最终数量'
FROM #年度预测 tt
OUTER APPLY (
SELECT t1.FMATERIALID,SUM(t1.FQTY) FQTY
FROM (
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.FDOCUMENTSTATUS = 'C' AND t0.FExecutionState = '1'
) 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
WHERE t1.FMATERIALID = tt.FMATERIALID AND t1.FYEAR * 100 + DATEPART(MONTH,(DATEADD(DAY,CONVERT(int,REPLACE(T1.DATEM,'FD','')) - 1,t1.FSTARTDATE))) = tt.周期
GROUP BY t1.FMATERIALID,t1.FYEAR * 100 + DATEPART(MONTH,(DATEADD(DAY,CONVERT(int,REPLACE(T1.DATEM,'FD','')) - 1,t1.FSTARTDATE)))
) t0
WHERE tt.FBILLNO = '{convertBillNo.ToString()}'
ORDER BY tt.startDate,tt.FSEQ
";
//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["startDate"];
entity["EndDate"] = item["endDate"];
////# 货主类型
//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"] = "ec1cd362-7d98-4a5c-b9bb-42a20f62a234";
entityLink["STableName"] = "T_PLN_FORECAST2YEARENTRY";
entityLink["SBillId"] = item["FID"].ToString();
entityLink["SId"] = item["FEntryID"].ToString();
entrys.Add(entity);
idx++;
}
}
}
}
}
}
}