王 垚
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
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_MRBReAduit : 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");
            e.FieldKeys.Add("FTLENTRYID");
        }
        public override void BeginOperationTransaction(BeginOperationTransactionArgs e)
        {
            base.BeginOperationTransaction(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 fBillNo = billObj["BillNo"].ToString();
                    var fRmrealQty = Convert.ToDecimal(entryRow["RmrealQty"]); 
                    var fTlentryId = Convert.ToInt32(entryRow["FTLENTRYID"]);
                    if (fTlentryId == 0)
                        continue;
                    string sql = string.Format(@"
select B.FHQTY,B.FReciveCount,b.FRMREALQTY,M.FBILLNO from
Cg_PODemandPlanBillSub B
JOIN Cg_PODemandPlanBillMain M ON B.FID = M.FID
where B.FENTRYID = '{0}'
", fTlentryId);
                    DataTable DT = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0];
                    DataRow dr = DT.Rows[0];
                    if (Convert.ToDecimal(dr["FHQTY"]) + Convert.ToDecimal(dr["FRMREALQTY"]) - Convert.ToDecimal(dr["FReciveCount"]) - fRmrealQty < 0)
                    {
                        e.CancelOperation = true;
                        string result = $"操作失败,对应提料计划单:{dr["FBILLNO"]} 已下推生成新的提料计划单";
                        dictionary.Add(fBillNo, result);
                        continue;
                    }
                }
            }
        }
        /// <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 fRmrealQty = entryRow["RmrealQty"].ToString();
                    var fTlentryId = Convert.ToInt32(entryRow["FTLENTRYID"]);
                    if (fTlentryId > 0)
                    {
                        string sql = $"/*dialect*/ update Cg_PODemandPlanBillSub set FRMREALQTY = FRMREALQTY - {fRmrealQty} where FEntryID = {fTlentryId}";
                        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;
            }
        }
    }
}