Files
GateDge2023_ljy/07.珠海英搏尔/GZ.LJY000.Enpower/POSH_PRODUCTCOSTQUICKQUERY2/BillEventPlugInEx.cs
PastSaid 9725ab5376 a
2024-12-05 15:39:19 +08:00

246 lines
10 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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();
}
}
}