168 lines
8.0 KiB
C#
168 lines
8.0 KiB
C#
|
|
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++;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|