王 垚
2021-02-16 211bb749ab809dab4276c66a5d23bb5ea053ba8f
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
128
129
130
131
132
133
134
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");
        }
        ///// <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);
        }
    }
}