using ExtensionMethods; using Kingdee.BOS.App.Data; using Kingdee.BOS.Core.DynamicForm.PlugIn; using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; using Kingdee.BOS.Orm.DataEntity; using Kingdee.BOS.ServiceHelper; using Kingdee.BOS.Util; using System; using System.Collections.Generic; using System.Linq; using System.Security.AccessControl; using System.Text; namespace CYG.PRD_MORPT { /// /// 【服务插件】1.审核时更新实际工时归集 /// public class OperationEventPlugInEx : 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"); } /// /// 操作事物后事件(事务内触发) /// /// /// /// 1. 此事件在操作执行代码之后,操作的内部逻辑已经执行完毕 /// 2. 此事件在操作事务提交之前 /// 3. 此事件中的数据库处理,受操作的事务保护 /// 4. 通常此事件,可以用来做同步数据,如同步生成其他单据,而且需要受事务保护 /// public override void EndOperationTransaction(EndOperationTransactionArgs e) { base.EndOperationTransaction(e); // 保存8提交9审核1反审核26 if (this.FormOperation.OperationId == 1) //if (this.FormOperation.Operation.EqualsIgnoreCase("Audit")) { Audit2DoUpdMoRptInfo(e); } } /// /// 审核时更新实际工时归集 /// /// public void Audit2DoUpdMoRptInfo(EndOperationTransactionArgs e) { 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); //DBServiceHelper.Execute(this.Context, sql); } // 保存变更后的数据 //new BusinessDataWriter(Context).Save(e.DataEntitys); } } }