This commit is contained in:
PastSaid
2024-12-05 15:39:19 +08:00
parent 5472714e30
commit 9725ab5376
128 changed files with 46381 additions and 69 deletions

View File

@@ -0,0 +1,246 @@
using ExtensionMethods;
using Kingdee.BOS.Core;
using Kingdee.BOS.Core.CommonFilter;
using Kingdee.BOS.Core.DynamicForm;
using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.KDThread;
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.Threading;
namespace GZ.LJY000.Enpower.POSH_PRODUCTCOSTQUICKQUERY2
{
[Description("产品成本还原分解汇总报表"), HotUpdate]
public class BillEventPlugInEx : AbstractDynamicFormPlugIn
{
private FilterShowParameter _showParameter;
public BillEventPlugInEx() : base()
{
}
/// <summary>
/// 按钮点击事件
/// </summary>
/// <param name="e"></param>
public override void BarItemClick(BarItemClickEventArgs e)
{
base.BarItemClick(e);
if (e.BarItemKey.Equals("tbShowFilterForm", StringComparison.OrdinalIgnoreCase))
{
if (_showParameter == null)
{
_showParameter = new FilterShowParameter();
_showParameter.FormId = "YCKE_PRODUCTCOSTQUICKQUERY_FILTER";
_showParameter.ParentPageId = this.View.PageId;
}
this.View.ShowForm(_showParameter, (resultData) =>
{
var whereSql = "";
if (resultData != null && resultData.ReturnData != null)
{
var returnData = resultData.ReturnData as FilterParameter;
var filterString = returnData.FilterString;
if (!filterString.IsNullOrEmptyOrWhiteSpace())
whereSql += " AND " + filterString.Replace("FBILLNO", "t0.FPRODUCTNO");
var customFilter = returnData.CustomFilter;
if (customFilter != null)
{
//年
var FYear = customFilter["FYear"];
var yearVal = FYear == null || FYear.IsNullOrEmptyOrWhiteSpace() ? 0 : FYear.Long2Int();
//月
var FPeriod = customFilter["FPeriod"];
var periodVal = FPeriod == null || FPeriod.IsNullOrEmptyOrWhiteSpace() ? 0 : FPeriod.Long2Int();
if (yearVal > 0)
{
whereSql += $" AND t2.FYEAR = {yearVal} ";
if (periodVal > 0)
whereSql += $" AND t2.FPERIOD = {yearVal} ";
}
var FSelMoBillNo = customFilter["FSelMoBillNo"];
var moBillNo = FSelMoBillNo == null ? "" : FSelMoBillNo.ToString();
if (moBillNo != "")
whereSql += $" AND t0.FPRODUCTNO = '{moBillNo}' ";
}
}
if (whereSql != "")
{
ShowProgressBar(whereSql);
}
});
}
}
/// <summary>
/// 进度条
/// </summary>
/// <param name="whereSql"></param>
private void ShowProgressBar(string whereSql)
{
//
var progressFormParameter = new DynamicFormShowParameter();
progressFormParameter.PageId = Guid.NewGuid().ToString();
progressFormParameter.FormId = "BOS_ReportProgressMsg";
progressFormParameter.OpenStyle.ShowType = ShowType.Modal;
progressFormParameter.Caption = "正在加载数据...";
progressFormParameter.HiddenCloseButton = true;
progressFormParameter.ParentPageId = this.View.PageId;
//# true表示使用真实进度在执行任务的方法中更新进度值代码示例this.View.Session["ProcessRateValue"] =10
progressFormParameter.CustomParams.Add("UseTruePro", "true");
this.View.ShowForm(progressFormParameter ,(result) =>
{
this.View.ShowMessage("数据加载完成!");
});
MainWorker.QuequeTask(this.Context, () =>
{
DocCompute(whereSql);
this.View.Session["ProcessRateValue"] = 100;
}, (asynResult) =>
{
if (asynResult != null && asynResult.Exception != null)
this.View.ShowErrMessage(asynResult.Exception.Message);
});
}
/// <summary>
/// 计算数据
/// </summary>
/// <param name="whereSql"></param>
/// <exception cref="NotImplementedException"></exception>
private void DocCompute(string whereSql)
{
var moSqlL = $@"/*dialect*/
DECLARE @ACCTGORGID int
SET @ACCTGORGID = 1
;WITH #列表数据 AS (
SELECT t0.FPRODUCTNO
,t0.FBILLID
,t0.FBILLENTRYID
,t0.FPRODUCTID
,t0.FFORMID
,t1.FPRODUCTDIMEID
,t3.FQUALIFIEDINQTY AS '本期完工数量'
,t3.FCURRINPUTQTY AS '本期投入数量'
,t3.FSUMCURRINPUTQTY AS '累计投入数量'
,t3.FSUMQUALIFIEDINQTY AS '累计完工数量'
,RANK() OVER (PARTITION BY t0.FBILLID,t0.FBILLENTRYID ORDER BY (t2.FYEAR * 100 + t2.FPERIOD) DESC) 'RN'
,(t2.FYEAR * 100 + t2.FPERIOD) AS 'FPERIOD'
FROM T_CB_PROORDERDIME t0
INNER JOIN V_CB_PROORDERINFO t1 on t1.FPRODUCTDIMEID = t0.FPRODUCTDIMEID
INNER JOIN V_HS_OUTACCTG t2 on t1.FACCTGID = t2.FID
LEFT JOIN V_CB_COSTCALEXPENSE t3 on t3.FID = t1.FID
WHERE 1 = 1
AND t2.FACCTGORGID = @ACCTGORGID
AND t2.FCOMPUTEID != ''
AND t1.FENDINITKEY = 1
AND t0.FFORMID = 'PRD_MO'
{whereSql}
)
SELECT t0.*,t1.FNUMBER,t1_l.FNAME
FROM #列表数据 t0
INNER JOIN T_BD_MATERIAL t1 on t1.FMATERIALID = t0.FPRODUCTID
INNER jOIN T_BD_MATERIAL_L t1_l on t1_l.FMATERIALID = t0.FPRODUCTID AND t1_l.FLOCALEID = 2052
WHERE t0.RN = 1";
Thread.Sleep(100000);
var proEntity = this.View.Model.BusinessInfo.GetEntryEntity("FEntity");
var proRows = this.View.Model.GetEntityDataObject(proEntity);
this.View.Model.BeginIniti();
proRows.Clear();
var datas = DBServiceHelper.ExecuteDynamicObject(this.Context, moSqlL);
if (datas != null && datas.Any())
{
var num = 0;
var count = datas.Count;
foreach (var data in datas)
{
var row = new DynamicObject(proEntity.DynamicObjectType);
var period = data["FPERIOD"].Long2Int();
var billNo = data["FPRODUCTNO"].ToString();
row["FMoBillNo"] = billNo;
row["FProMaterialNumber"] = data["FNUMBER"];
row["FProMaterialName"] = data["FNAME"];
row["FQUALIFIEDINQTY"] = data["本期完工数量"];
row["FResult"] = "计算中";
num++;
this.View.Session["ProcessRateValue"] = (num * 100 / count).Long2Int();
this.View.Session["ProcessTips"] = $"共{count}条数据,已处理{num - 1}条数据,正在处理{billNo}";
var costDataList = GetExecCost(billNo, period, 1);
if (costDataList != null && costDataList.Count > 0)
{
var costData = costDataList[0];
row["FMaterialCostQ"] = costData["原材料Q1"];
row["FLaborCostS"] = costData["直接人工S"];
row["FProcessCostO"] = costData["制造费用O"];
var costR = costData["原材料Q1"].ToDecimal() + costData["直接人工S"].ToDecimal() + costData["制造费用O"].ToDecimal();
row["FQ_O_S_T_R"] = costR;
row["FMaterialCostT"] = costData["间接材料Q2"];
row["FO2"] = costData["制造费用_职工薪酬"];
row["FO3"] = costData["制造费用_股份支付"];
row["FO4"] = costData["制造费用_劳动保护费"];
row["FO5"] = costData["制造费用_差旅费"];
row["FO6"] = costData["制造费用_业务招待费"];
row["FO7"] = costData["制造费用_办公费"];
row["FO8"] = costData["制造费用_折旧与摊销"];
row["FO9"] = costData["制造费用_租赁费"];
row["FO10"] = costData["制造费用_水电费"];
row["FO11"] = costData["制造费用_物料消耗"];
row["FO12"] = costData["制造费用_加工_修理_检测费"];
row["FO13"] = costData["制造费用_车辆使用费"];
row["FO14"] = costData["制造费用_其他"];
row["FO15"] = costData["制造费用_委外加工费"];
row["FALLHRWORKTIME"] = costData["总工时"];
}
proRows.Add(row);
}
}
this.View.UpdateView("FEntity");
this.View.Model.EndIniti();
}
/// <summary>
/// 计算费用成本
/// </summary>
/// <param name="billNo"></param>
/// <param name="period"></param>
/// <param name="acctgOrgId"></param>
/// <returns></returns>
private List<DynamicObject> GetExecCost(string billNo, int period, int acctgOrgId)
{
var sqlL = $@"/*dialect*/
EXEC TEST_CB_CPCBHYFXIBB_COMPUTE '{billNo}',{period},{acctgOrgId}
";
var res = DBServiceHelper.ExecuteDynamicObject(this.Context, sqlL);
return res.ToList();
}
}
}