using System;
|
using System.Collections.Generic;
|
using Kingdee.BOS.Util;
|
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 System.ComponentModel;
|
using Kingdee.BOS.ServiceHelper;
|
using System.Data;
|
using Kingdee.BOS;
|
using Kingdee.BOS.App.Data;
|
|
namespace Demo.BillView.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");
|
}
|
///// <summary>
|
/////反审核 反更新日计划用料清单调拨数量
|
///// </summary>
|
///// <param name="e"></param>
|
//public override void AfterExecuteOperationTransaction(AfterExecuteOperationTransaction e)
|
//{
|
// base.AfterExecuteOperationTransaction(e);
|
// Stopwatch sw = new Stopwatch();
|
// sw.Start();//开始计时
|
// List<string> sqlList = new List<string>();
|
// 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);
|
//}
|
/// <summary>
|
///反审核 反更新日计划用料清单调拨数量
|
/// </summary>
|
/// <param name="e"></param>
|
public override void AfterExecuteOperationTransaction(AfterExecuteOperationTransaction e)
|
{
|
base.AfterExecuteOperationTransaction(e);
|
List<string> sqlList = new List<string>();
|
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);
|
}
|
}
|
}
|