Files
GateDge2023_ljy/05.长园/CY.PRD_MORPT/SetWorkTimeAfterAuditOperationServicePlugIn.cs
PastSaid 08d8878eef a
2024-03-11 14:47:23 +08:00

138 lines
5.5 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.App.Data;
using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Log;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.Util;
using Newtonsoft.Json;
using System;
using System.ComponentModel;
using System.Linq;
using System.Text;
namespace CY.PRD_MORPT
{
/// <summary>
/// 【服务插件】操作执行后事物结束前修改单据数据包
/// </summary>
[Description("【服务插件_ex】任务汇报审核时计算人员实作工时"), HotUpdate]
public class SetWorkTimeAfterAuditOperationServicePlugIn : AbstractOperationServicePlugIn
{
public override void OnPreparePropertys(PreparePropertysEventArgs e)
{
base.OnPreparePropertys(e);
//本地测试-工时类型
e.FieldKeys.Add("FWorkTimeType");
//长园-工时类型
//e.FieldKeys.Add("F_CYG_Worktype");
e.FieldKeys.Add("FFinishQty");
e.FieldKeys.Add("FStdManHour");
e.FieldKeys.Add("FMaterialId");
}
/// <summary>
/// 操作事物后事件(事务内触发)
/// </summary>
/// <param name="e"></param>
/// <remarks>
/// 1. 此事件在操作执行代码之后,操作的内部逻辑已经执行完毕
/// 2. 此事件在操作事务提交之前
/// 3. 此事件中的数据库处理,受操作的事务保护
/// 4. 通常此事件,可以用来做同步数据,如同步生成其他单据,而且需要受事务保护
/// </remarks>
public override void EndOperationTransaction(EndOperationTransactionArgs e)
{
base.EndOperationTransaction(e);
// 保存8提交9审核1反审核26
if (this.FormOperation.OperationId == 1)
//if (this.FormOperation.Operation.EqualsIgnoreCase("Audit"))
{
var dataEntitys = e.DataEntitys;
if (dataEntitys.Any())
{
var updateSQLList = new StringBuilder();
foreach (var data in dataEntitys)
{
var id = data["Id"].ToString();
var formId = data["FFormId"].ToString();
foreach (var item in data["PRD_MORPTENTRY"] as DynamicObjectCollection)
{
var entryId = item["Id"].ToString();
var entrySeq = item["Seq"].ToString();
//人员实作工时
var hrWorkTime = item["FHRWORKTIME"].ToDouble();
// 安装 F_CYG_FitTime
var fitTimeTotal = 0D;
// 指导安装 F_CYG_GuideTime
var guideTimeTotal = 0D;
//工时类型 0.无 1.含安装工时 2.指导安装工时 3.不含安装工时
var workTimeType = item["FWorkTimeType"].Long2Int();
if (workTimeType > 0)
{
//完成数量
var finishQty = item["FinishQty"].ToDouble();
//单位标准工时
var stdManHour = item["StdManHour"].ToDouble();
if (stdManHour != 0)
hrWorkTime = finishQty * stdManHour;
if (workTimeType != 3)
{
var materialId = item["MaterialId"] as DynamicObject;
if (workTimeType == 1)
{
var fitTime = materialId["F_CYG_FitTime"].ToDouble();
fitTimeTotal = fitTime * finishQty;
if (stdManHour == 0)
hrWorkTime -= fitTimeTotal;
}
if (workTimeType == 2)
{
var guideTime = materialId["F_CYG_GuideTime"].ToDouble();
guideTimeTotal = guideTime * finishQty;
if (stdManHour == 0)
hrWorkTime -= guideTimeTotal;
}
}
}
updateSQLList.AppendLine($@"
UPDATE T_CB_WORKHOURSENTRY
SET FWorkTimeType = '{workTimeType}' ,FFitTimeTotal = {fitTimeTotal},FguideTimeTotal = {guideTimeTotal},FHrWorkTimePart = {hrWorkTime}
WHERE FSRCBILLID = {id}
AND FSRCENTRYID = {entryId}
AND FSRCSEQ = {entrySeq}
AND FSRCBILLFORMID = '{formId}';");
}
}
//Logger.Info("审核测试", JsonConvert.SerializeObject(e));
//Logger.Info("审核测试2", updateSQLList.ToString());
var sql = updateSQLList.ToString();
if (!updateSQLList.IsNullOrEmpty())
DBUtils.Execute(this.Context, "/*dialect*/" + sql);
}
// 保存变更后的数据
//new BusinessDataWriter(Context).Save(e.DataEntitys);
}
}
}
}