王 垚
2022-09-05 89e9e87324656eb6ff2bc70c731ee676eeac9111
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
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);
        }
    }
}