using System; using System.Collections.Generic; using Kingdee.BOS.Util; using Kingdee.BOS.Core.Metadata; using Kingdee.BOS.Core.Metadata.EntityElement; using Kingdee.BOS.Core.DynamicForm.PlugIn; using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; using Kingdee.BOS.Orm.DataEntity; using Kingdee.BOS.Contracts; using Kingdee.BOS.App; using Kingdee.BOS.Core.Metadata.FieldElement; using System.ComponentModel; using Kingdee.BOS.ServiceHelper; using Kingdee.K3.SCM.App; using System.Diagnostics; using ZD.Cloud.Logger; using System.Data; using Kingdee.BOS; using Kingdee.BOS.App.Data; namespace Demo.DynamicForm.PRD { [Description("[直接调拨单-审核]按钮功能]")] [HotUpdate] public class Pro_ZJDBSH : AbstractOperationServicePlugIn { public override void OnPreparePropertys(PreparePropertysEventArgs e) { base.OnPreparePropertys(e); e.FieldKeys.Add("FSrcBillType"); e.FieldKeys.Add("FSrcBillNo"); e.FieldKeys.Add("FID"); e.FieldKeys.Add("FTreeEntity_FEntryID"); e.FieldKeys.Add("FBillNo"); e.FieldKeys.Add("FBFLowId"); e.FieldKeys.Add("FMaterialId"); e.FieldKeys.Add("FBaseUnitQty"); e.FieldKeys.Add("FBaseJoinQty"); e.FieldKeys.Add("FDayPlanBillNo"); e.FieldKeys.Add("FDayPlanFentryId"); e.FieldKeys.Add("FBaseQty"); } ///// /////反审核 反更新日计划用料清单调拨数量 ///// ///// //public override void AfterExecuteOperationTransaction(AfterExecuteOperationTransaction e) //{ // base.AfterExecuteOperationTransaction(e); // Stopwatch sw = new Stopwatch(); // sw.Start();//开始计时 // List sqlList = new List(); // string sql = ""; // //审核时更新生产用料清单表明细调拨数量 // Entity entity = this.BusinessInfo.GetEntity("FBillEntry");//获取明细信息 // foreach (var billObj in e.SelectedRows) // { // DynamicObjectCollection entryRows = entity.DynamicProperty.GetValue(billObj.DataEntity) // as DynamicObjectCollection; // foreach (var entryRow in entryRows) // { // //生产用料清单为空时 // if (Convert.ToString(entryRow["FDayPlanBillNo"]) == "") // continue; // string fentryId = entryRow["FDayPlanFentryId"].ToString(); // sql = string.Format($"/*dialect*/update Sc_DayPlanPPBomBillSub set FTranslateQty + = {Convert.ToDecimal(entryRow["FBaseQty"])} where FEntryID = { fentryId} "); // sqlList.Add(sql); // } // } // DBServiceHelper.ExecuteBatch(Context, sqlList); // sw.Stop();//结束计时 // LogHelper.Info("生成日计划用料清单运行总时长:" + sw.Elapsed); //} /// ///反审核 反更新日计划用料清单调拨数量 /// /// public override void AfterExecuteOperationTransaction(AfterExecuteOperationTransaction e) { base.AfterExecuteOperationTransaction(e); List sqlList = new List(); string sql = ""; Entity entity = this.BusinessInfo.GetEntity("FBillEntry");//获取明细信息 //审核时更新日计划用料清单表明细调拨数量 foreach (var billObj in e.SelectedRows) { DynamicObjectCollection entryRows = entity.DynamicProperty.GetValue(billObj.DataEntity) as DynamicObjectCollection; foreach (var entryRow in entryRows) { string fentryId = entryRow["FDayPlanFentryId"].ToString(); //if (fentryId == "0") // continue; sql = string.Format($"/*dialect*/update Sc_DayPlanPPBomBillSub set FTranslateQty = FTranslateQty+{Convert.ToDecimal(entryRow["BaseQty"])} where FEntryID = { fentryId} "); sqlList.Add(sql); } } DBServiceHelper.ExecuteBatch(Context, sqlList); } private void BatchUpdate() { // 定义一个DataTable:存储待更新的数据 DataTable dt = new DataTable(); dt.TableName = "JD_t_Cust_Entry100001"; var idCol = dt.Columns.Add("FID"); idCol.DataType = typeof(long); var billNoCol = dt.Columns.Add("FBillNo"); billNoCol.DataType = typeof(string); // 灌入测试数据 dt.BeginLoadData(); // 执行此方法,可以提升灌入数据性能 for (int i = 1; i <= 10; i++) { dt.LoadDataRow(new object[] { i, i.ToString() }, true); } dt.EndLoadData(); // 灌入数据结束 // 准备批量更新服务参数 // tableName : 待更新的物理表格名 // dt : 待更新的数据 BatchSqlParam batchUpdateParam = new BatchSqlParam("JD_t_Cust_Entry100001", dt); // 设置匹配字段:即DataTable中的数据,与物理表格以那个字段进行匹配 // 匹配字段可以添加多个 // columnName: DataTable中的列名 // fieldName : 物料表格中匹配的字段名 batchUpdateParam.AddWhereExpression("FID", KDDbType.Int64, "FID"); // 设置待更新的字段 // columnName: DataTable中的列名 // fieldName : 对应的物料表格字段名 batchUpdateParam.AddSetExpression("FBillNo", KDDbType.String, "FBillNo"); // 执行批量更新 DBUtils.BatchUpdate(this.Context, batchUpdateParam); } } }