a
This commit is contained in:
@@ -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++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user