This commit is contained in:
梁骏愉
2025-03-15 15:03:34 +08:00
parent 17bb7e4131
commit 2306c8b7cf
69 changed files with 4199 additions and 324 deletions

View File

@@ -4,6 +4,7 @@ using Kingdee.BOS.Core.Metadata.FieldElement;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.ServiceHelper;
using Kingdee.BOS.Util;
using Kingdee.BOS.WebApi.FormService;
using System;
using System.Collections.Generic;
using System.ComponentModel;
@@ -26,7 +27,8 @@ namespace GZ.LJY000.Enpower.POSH_Year_Forecast.BillConvertPlugInEx
{
var sqlL = $@"/*dialect*/
WITH #年度预测 AS (
;WITH #年度预测 AS (
SELECT t1.FBILLNO,t1.FID,t1.FEntryID,t1.FSEQ,t1.FMATERIALID,t1.FUNITID,t1.FCUSTID
,t1.FQTY,t1.FYEAR '年份' ,REPLACE(T1.DATEM,'FMONTH','') '月份'
,t1.FYEAR * 100 + REPLACE(T1.DATEM,'FMONTH','') 周期
@@ -45,6 +47,8 @@ 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 '最终数量'
,tt.FQTY 'F_OriginalQty',t0.FQTY 'W5Qty'
INTO #table1
FROM #年度预测 tt
OUTER APPLY (
SELECT t1.FMATERIALID,SUM(t1.FQTY) FQTY
@@ -64,7 +68,39 @@ FROM #年度预测 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
declare @startDate date,@endDate date
SELECT @startDate = MIN(t0.startDate),@endDate = MAX(t0.endDate)
FROM #table1 t0
;WITH #发货通知单 AS (
SELECT t0.FBILLNO,t0.FDATE,t0.FCUSTOMERID,t0e.FMATERIALID,t0e.FQTY,t0e.F_PNDR_BASEQTY3 '2次调拨'
FROM T_SAL_DELIVERYNOTICE t0
INNER JOIN T_SAL_DELIVERYNOTICEENTRY t0e on t0.FID = t0e.FID
WHERE t0.FDOCUMENTSTATUS = 'C'
AND t0.FDATE between @startDate AND @endDate
)
,#最终数据 AS (
SELECT t0.FBILLNO,t0.FID,t0.FEntryID,t0.FMATERIALID,t0.FUNITID,t0.FCUSTID,t0.startDate,t0.endDate,t0.FSEQ
,CASE WHEN t0.最终数量 < (ISNULL(t1.FQTY,0) + ISNULL(t1.[2次调拨],0)) THEN 0 ELSE t0.最终数量 - (ISNULL(t1.FQTY,0) + ISNULL(t1.[2次调拨],0)) END AS '最终数量'
,t0.年份,t0.月份
,ISNULL(t1.FQTY,0) 'F_DelivQty',ISNULL(t1.[2次调拨],0) 'F_Direct2Qty'
,t0.F_OriginalQty,t0.W5Qty
FROM #table1 t0
OUTER APPLY (
SELECT SUM(t1.FQTY) FQTY ,SUM(t1.[2次调拨]) [2次调拨]
FROM #发货通知单 t1
WHERE 1 = 1 AND t1.FMATERIALID = t0.FMATERIALID
AND t0.FCUSTID = t1.FCUSTOMERID
AND t1.FDATE BETWEEN t0.startDate AND t0.endDate
) t1
)
SELECT t0.*
FROM #最终数据 t0
WHERE t0.最终数量 > 0
ORDER BY t0.startDate,t0.FSEQ
DROP TABLE #table1
";
//throw new Exception(sqlL);
var dataList = DBServiceHelper.ExecuteDynamicObject(this.Context, sqlL);
@@ -103,14 +139,22 @@ ORDER BY tt.startDate,tt.FSEQ
entity["ReserveType"] = (matObj["MaterialPlan"] as DynamicObjectCollection)[0]["ReserveType"];
//均化周期
entity["AveraCycle"] = 1;
var MaterialBase = (matObj["MaterialBase"] as DynamicObjectCollection)[0] as DynamicObject;
var MaterialBase = (matObj["MaterialBase"] as DynamicObjectCollection)[0];
var baseUnitId_Id = MaterialBase["BaseUnitId_Id"].Long2Int();
var qty = decimal.Parse(item["最终数量"].ToString());
entity["Qty"] = qty;
entity["F_DelivQty"] = decimal.Parse(item["F_DelivQty"].ToString());
entity["F_Direct2Qty"] = decimal.Parse(item["F_Direct2Qty"].ToString());
entity["F_OriginalQty"] = decimal.Parse(item["F_OriginalQty"].ToString());
entity["F_W5Qty"] = decimal.Parse(item["W5Qty"].ToString());
entity["StartDate"] = item["startDate"];
entity["EndDate"] = item["endDate"];
entity["F_Year"] = item["年份"];
entity["F_Month"] = item["月份"];
entity["FCloseStatus"] = "A";
////# 货主类型
//entity["FOwnerTypeId"] = item["FOWNERTYPEID"];
////# 货主
@@ -163,6 +207,23 @@ ORDER BY tt.startDate,tt.FSEQ
idx++;
}
}
else
{
}
string jsonData = @"
{{
""CreateOrgId"": ""{fileName}"",
""Numbers"": [],
""Ids"": """",
""PkEntryIds"": [],
""UseOrgId"": {InterId},
""NetworkCtrl"": ""{formBillNo}"",
""IgnoreInterationFlag"": """",
}}";
WebApiServiceCall.Execute(this.Context, "PLN_FORECAST", "BillClose", jsonData);
}
}

View File

@@ -0,0 +1,116 @@
#引入clr运行库
import clr
#添加对cloud插件开发的常用组件引用
clr.AddReference('System')
clr.AddReference('System.Data')
clr.AddReference('Kingdee.BOS')
clr.AddReference('Kingdee.BOS.Core')
clr.AddReference('Kingdee.BOS.App')
clr.AddReference('Kingdee.BOS.App.Core')
clr.AddReference('Kingdee.BOS.Contracts')
clr.AddReference('Kingdee.BOS.DataEntity')
clr.AddReference('Kingdee.BOS.ServiceHelper')
clr.AddReference('Kingdee.BOS.WebApi.FormService')
#dairycloud基础库中的常用实体对象分命名空间导入不会递归导入
from Kingdee.BOS.Core import *
from Kingdee.BOS.Util import *
from Kingdee.BOS.Core.Bill import *
from Kingdee.BOS.Core.List import *
from Kingdee.BOS.Core.Bill.PlugIn import *
from Kingdee.BOS.Orm.DataEntity import *
from Kingdee.BOS.Core.DynamicForm.PlugIn import *
from Kingdee.BOS.Core.DynamicForm.PlugIn.Args import *
from Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel import *
from Kingdee.BOS.Core.Metadata.ConvertElement.ServiceArgs import *
from System import *
from System.Data import *
from Kingdee.BOS.App.Data import *
from Kingdee.BOS.App import *
from Kingdee.BOS.Orm import *
from Kingdee.BOS.Contracts import *
from System.Collections.Generic import List
from Kingdee.BOS.ServiceHelper import *
from Kingdee.BOS.App.Core import *
from Kingdee.BOS.WebApi.FormService import *
def OnPreparePropertys(e):
e.FieldKeys.Add("FVersions");
e.FieldKeys.Add("FBillNo");
e.FieldKeys.Add("FForecastYear");
def EndOperationTransaction(e):
# raise Exception("A")
if this.FormOperation.OperationId == 1:
DoClosePLN_FORECAST(e);
def DoClosePLN_FORECAST(e):
for entity in e.DataEntitys:
billNo = entity["BillNo"]
billId = entity["Id"]
sqlL = """/*dialect*/
;WITH #年度预测单 AS (
SELECT t1.FBILLNO,t1.FISCLOSE,t0.FFORECASTYEAR,t0.FBILLNO 'thisBillNo'
,ROW_NUMBER() OVER (ORDER BY t1.FBILLNO DESC) RN
,CASE WHEN t1.FBILLNO = t0.FBILLNO THEN 1 ELSE 0 END A
FROM T_PLN_FORECAST2YEAR t0
INNER JOIN T_PLN_FORECAST2YEAR t1 on t0.FFORECASTYEAR = t1.FFORECASTYEAR
WHERE t0.FBILLNO = '{0}'
--AND t1.FISCLOSE != 'B'
)
SELECT t0.FBILLNO,t0.FID,t0.FCONVERTBILLNO,t0e.FENTRYID,t0e.FCLOSESTATUS,t0.FBILLTYPEID
FROM ( SELECT TOP 1 t2.*
FROM #年度预测单 t2
INNER JOIN #年度预测单 t1 on t1.A = 1
WHERE t2.RN > t1.RN
ORDER BY t2.RN
) tt
INNER JOIN T_PLN_FORECAST t0 on t0.FCONVERTBILLNO = tt.FBILLNO
INNER JOIN T_PLN_FORECASTENTRY t0e on t0e.FID = t0.FID
WHERE 1 = 1
AND t0.FBILLTYPEID = '67707a90214919' --年度
AND (t0e.FCLOSESTATUS = 'A' OR t0e.FCLOSESTATUS = '')
""".format(billNo)
# raise Exception(sqlL);
dataList = DBServiceHelper.ExecuteDynamicObject(this.Context, sqlL)
if dataList.Count == 0:
return;
# 请求参数
id = dataList[0]["FID"]
pkEntryIds = List[str]()
para = {"CreateOrgId":this.Context.UserId,"Numbers":[],"Ids":"","PkEntryIds":[],"UseOrgId":this.Context.CurrentOrganizationInfo.ID,"NetworkCtrl":"","IgnoreInterationFlag":""}
for item in dataList:
# pkEntryIds.Add(str(item["FENTRYID"]))
para["PkEntryIds"].Add({"Id":str(item["FID"]),"EntryIds":str(item["FENTRYID"])})
# raise Exception(JsonUtil.Serialize(para))
# 业务对象标识
formId = "PLN_FORECAST"
# 操作接口编码
operateNumber = "BillClose"
resultJson = WebApiServiceCall.Execute(this.Context, formId, operateNumber, JsonUtil.Serialize(para));
# raise Exception(JsonUtil.Serialize(resultJson))
if resultJson !=None :
IsSuccess = resultJson["Result"]["ResponseStatus"]["IsSuccess"]
if IsSuccess==False:
raise Exception(JsonUtil.Serialize(resultJson))
updSql = """/*dialect*/
WITH #上版本 AS (
SELECT TOP 1 t1.*
FROM T_PLN_FORECAST2YEAR t0
INNER JOIN T_PLN_FORECAST2YEAR t1 on t0.FFORECASTYEAR = t1.FFORECASTYEAR
WHERE t0.FBILLNO = '{0}'
AND t1.FBILLNO != '{0}'
ORDER By t1.FBILLNO DESC
)
UPDATE T_PLN_FORECAST2YEAR SET FIsClose = 'B'
FROM T_PLN_FORECAST2YEAR t0
INNER JOIN #上版本 t1 on t1.FID = t0.FID
WHERE t1.FIsClose != 'B'
""".format(billNo)
res = DBServiceHelper.Execute(this.Context, updSql)
return;

View File

@@ -1,44 +0,0 @@
#引入clr运行库
import clr
#添加对cloud插件开发的常用组件引用
clr.AddReference('System')
clr.AddReference('System.Data')
clr.AddReference('Kingdee.BOS')
clr.AddReference('Kingdee.BOS.Core')
clr.AddReference('Kingdee.BOS.App')
clr.AddReference('Kingdee.BOS.App.Core')
clr.AddReference('Kingdee.BOS.Contracts')
clr.AddReference('Kingdee.BOS.DataEntity')
clr.AddReference('Kingdee.BOS.ServiceHelper')
#dairycloud基础库中的常用实体对象分命名空间导入不会递归导入
from Kingdee.BOS.Core import *
from Kingdee.BOS.Util import *
from Kingdee.BOS.Core.Bill import *
from Kingdee.BOS.Core.List import *
from Kingdee.BOS.Core.Bill.PlugIn import *
from Kingdee.BOS.Orm.DataEntity import *
from Kingdee.BOS.Core.DynamicForm.PlugIn import *
from Kingdee.BOS.Core.DynamicForm.PlugIn.Args import *
from Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel import *
from Kingdee.BOS.Core.Metadata.ConvertElement.ServiceArgs import *
from System import *
from System.Data import *
from Kingdee.BOS.App.Data import *
from Kingdee.BOS.App import *
from Kingdee.BOS.Orm import *
from Kingdee.BOS.Contracts import *
from System.Collections.Generic import List
from Kingdee.BOS.ServiceHelper import *
from Kingdee.BOS.App.Core import *
def OnPreparePropertys(e):
e.FieldKeys.Add("FVersions");
e.FieldKeys.Add("FBillNo");
def BeforeDoSaveExecute(e):
for entity in e.DataEntities:
billNo = entity["BillNo"]
billId = entity["Id"]
return;