王 垚
2022-09-05 226dd2b152c0fb06b3f8108ac7740216a8a453c6
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
135
136
137
138
139
140
141
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.Data;
using Newtonsoft.Json.Linq;
using ZD.Cloud.WebApi;
using Newtonsoft.Json;
using Kingdee.BOS.Core.DynamicForm;
using System.Linq;
using Demo.BillView.PRD;
 
namespace Demo.OperationService
{
    [Description("[采购退料单-审核]服务插件]")]
    [HotUpdate]
    public class PUR_MRBAduit : AbstractOperationServicePlugIn
    {
        Dictionary<string, string> dictionary = new Dictionary<string, string>();
        public override void OnPrepareOperationServiceOption(OnPrepareOperationServiceEventArgs e)
        {
            base.OnPrepareOperationServiceOption(e);
 
            //为了在BeginOperationTransaction里检查数据抛出异常时
            //只回滚当前单据的事务,这里设置为不支持批量事务,这样BOS会
            //循环为每一张单据创建事务调用操作
            e.SupportTransaction = true;
            e.SurportBatchTransaction = false;
        }
        public override void OnPreparePropertys(PreparePropertysEventArgs e)
        {
            e.FieldKeys.Add("FSRCBillTypeId");
            e.FieldKeys.Add("FPURMRBENTRY_FEntryID");
            e.FieldKeys.Add("FRMREALQTY");
        }
        public override void BeginOperationTransaction(BeginOperationTransactionArgs e)
        {
            base.BeginOperationTransaction(e);
            //Entity entity = this.BusinessInfo.GetEntity("FEntity");//获取明细信息
            //foreach (var billObj in e.DataEntitys)
            //{
            //    DynamicObjectCollection entryRows = billObj["FEntity"] as DynamicObjectCollection;
            //    foreach (var entryRow in entryRows)
            //    {
            //        var fentryId = entryRow["Id"].ToString();
            //    }
            //}
        }
        /// <summary>
        /// 审核后 反写提料计划单 退料数量
        /// </summary>
        /// <param name="e"></param>
        public override void AfterExecuteOperationTransaction(AfterExecuteOperationTransaction e)
        {
            base.AfterExecuteOperationTransaction(e);
            foreach (var billObj in e.DataEntitys)
            {
                DynamicObjectCollection entryRows = billObj["PUR_MRBENTRY"] as DynamicObjectCollection;
                foreach (var entryRow in entryRows)
                {
                    var fentryId = entryRow["Id"].ToString();
                    var fSrcbillTypeId = entryRow["SrcbillTypeId"].ToString();
                    var fRmrealQty = entryRow["RmrealQty"].ToString();
                    if (fSrcbillTypeId == "STK_InStock")
                    {
                        string sql = string.Format(@"
/*dialect*/
select t2.FRMREALQTY,t2.FSRCBILLTYPEID,t4.FTLENTRYID  from T_PUR_MRBENTRY_LK t1 
join T_PUR_MRBENTRY t2 on t1.FENTRYID =t2.FENTRYID 
join T_STK_INSTOCKENTRY_LK t3 on t1.FSID = t3.FENTRYID
join T_PUR_RECEIVEENTRY t4 on t3.FSID =t4.FENTRYID 
where t2.FSRCBILLTYPEID = 'STK_InStock'
and t2.FENTRYID = '{0}'
", fentryId);
                        DataTable dt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0];
                        if (dt.Rows.Count == 1)
                        {
                            DataRow dr = dt.Rows[0];
                            if (Convert.ToInt32(dr["FTLENTRYID"]) == 0)
                                continue;
                            sql = $"/*dialect*/ update Cg_PODemandPlanBillSub set FRMREALQTY = FRMREALQTY + {fRmrealQty} where FEntryID = {dr["FTLENTRYID"]}";
                            DBServiceHelper.Execute(Context,sql);
                            sql = $"/*dialect*/ update T_PUR_MRBENTRY set FTLENTRYID = {dr["FTLENTRYID"]} where FEntryID = {fentryId}";
                            DBServiceHelper.Execute(Context, sql);
                        }
                    }
                    else if (fSrcbillTypeId == "PUR_ReceiveBill") 
                    {
                        string sql = string.Format(@"
/*dialect*/
select t2.FRMREALQTY,t2.FSRCBILLTYPEID,t3.FTLENTRYID from T_PUR_MRBENTRY_LK t1 
join T_PUR_MRBENTRY t2 on t1.FENTRYID =t2.FENTRYID 
join T_PUR_RECEIVEENTRY t3 on t1.FSID =t3.FENTRYID 
where t2.FSRCBILLTYPEID = 'PUR_ReceiveBill'
and t2.FENTRYID = '{0}'
", fentryId);
                        DataTable dt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0];
                        if (dt.Rows.Count == 1)
                        {
                            DataRow dr = dt.Rows[0];
                            if (Convert.ToInt32(dr["FTLENTRYID"]) == 0)
                                continue;
                            sql = $"/*dialect*/ update Cg_PODemandPlanBillSub set FRMREALQTY = FRMREALQTY + {fRmrealQty} where FEntryID = {dr["FTLENTRYID"]}";
                            DBServiceHelper.Execute(Context, sql);
                            sql = $"/*dialect*/ update T_PUR_MRBENTRY set FTLENTRYID = {dr["FTLENTRYID"]} where FEntryID = {fentryId}";
                            DBServiceHelper.Execute(Context, sql);
                        }
                    }
                }
            }
            foreach (var item in dictionary)
            {
                ResultMessage.dataError(this.OperationResult.OperateResult, item.Key, item.Value);
            }
        }
        public static class ResultMessage
        {/// <summary>
         /// 修改提示信息
         /// </summary>
         /// <param name="operateResult"></param>
         /// <param name="billno"></param>
            public static void dataError(OperateResultCollection operateResult, string billno, string message)
            {
                OperateResult operate = operateResult.Where(n => n.Number == billno).First();
                operate.Message = message;
                operate.SuccessStatus = false;
                operate.MessageType = MessageType.FatalError;
            }
        }
    }
}