1
王 垚
2022-12-17 bfdf6a1df8ff039ed473ab00138844acc3cc46da
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
142
143
144
145
146
147
148
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 Newtonsoft.Json.Linq;
using ZD.Cloud.WebApi;
using Newtonsoft.Json;
using Kingdee.BOS.Core.DynamicForm;
using System.Linq;
using RestSharp;
using zymes_Project.Utility;
 
namespace zymes_Project.OperationService
{
    [Description("[仓库仓位-审核]服务插件]")]
    [HotUpdate]
    public class zymes_RealessStock : 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)
        {
            base.OnPreparePropertys(e);
            e.FieldKeys.Add("FEntity");
            e.FieldKeys.Add("FEntity_FEntryID");
        }
        public override void AfterExecuteOperationTransaction(AfterExecuteOperationTransaction e)
        {
            base.AfterExecuteOperationTransaction(e);
            Entity entity = this.BusinessInfo.GetEntity("FEntity");//获取明细信息
            foreach (var billObj in e.DataEntitys)
            {
                var forgName = Context.CurrentOrganizationInfo.Name;
                if (!forgName.Contains("杭州斯莫尔磁性材料有限公司"))
                    continue;
                //var sql = $"exec zymes_RealessStock {billObj["Id"]} ";
                var id = billObj["Id"].ToString();
                string sql = string.Empty;
                sql = string.Format(@"
/*dialect*/
select a.FSTOCKID as HItemID,a.FSTOCKID as HERPItemID,a.FNumber as HNumber,l.FName as HName,a.FNumber as HShortNumber,0 as HParentID
,1 as HLevel,'true' as HEndFlag,case when a.FFORBIDSTATUS='A' then 'false' else 'true' end as HStopflag,'CLD-ERP导入' as HRemark
,a.FIsOpenLocation as HSPFlag,a.FSTOCKID as HSPGroupID,a.FAllowMinusQty as HUnderStock,'已使用' as HUseFlag
,getdate() as HMakeTime,a.FCREATEORGID as HCREATEORGID,a.FUSEORGID as HUSEORGID,a.FSTOCKPROPERTY as HSTOCKPROPERTY
from T_BD_STOCK a with(nolock)
inner join T_BD_STOCK_L l with(nolock) on a.FSTOCKID=l.FSTOCKID
Where a.FSTOCKID = {0}
 
select c.HID as HItemID,c.HID as HERPItemID,c.HNumber as HNumber,c.HName as HName,c.HNumber as HShortNumber,0 as HParentID,c.HSPType as HSPType,c.HSrcSPType as HSrcSPType,c.HDesSPType as HDesSPType
,1 as HLevel,'true' as HEndFlag,'false' as HStopflag,'CLD-ERP导入' as HRemark,a.FSTOCKID as HSPGroupID,'已使用' as HUseFlag,getdate() as HMakeTime,a.FCREATEORGID as HCREATEORGID,a.FUSEORGID as HUSEORGID
from T_BD_STOCK A  with(nolock)
inner join T_BD_STOCK_L L with(nolock) on A.FSTOCKID=L.FSTOCKID 
inner join T_BD_FLEXVALUESCOM ST with(nolock) on a.FSTOCKID = st.FSTOCKID
inner join (select c.FID HID,c.FF100001 HSPTypeID
,''""FStockLocId"":{""FSTOCKLOCID__FF100001"":{""FNUMBER"":""'' HSPType
,''""FSrcStockLocId"":{""FSRCSTOCKLOCID__FF100001"":{""FNUMBER"":""'' HSrcSPType
,''""FDestStockLocId"":{""FDESTSTOCKLOCID__FF100001"":{""FNUMBER"":""'' HDesSPType
,s.FNUMBER HNumber, sp.FName HName
from T_BAS_FLEXVALUESDETAIL c
inner
join T_BAS_FLEXVALUESENTRY s on s.FENTRYID = c.FF100001
inner
join T_BAS_FLEXVALUESENTRY_L sp on sp.FENTRYID = c.FF100001) c on c.HID = st.FSTOCKLOCID
inner join T_ORG_ORGANIZATIONS_L o with(nolock) on o.FORGID = A.FUSEORGID
where ST.FISDISABLE = '0' AND ST.FSYSDISABLE = '0'
and l.FLOCALEID = 2052 and isnull(o.FNAME,'') <> ''
and a.FSTOCKID = {0}
",id);
                DataSet ds = DBServiceHelper.ExecuteDataSet(Context, sql);
                DataTable maindt = ds.Tables[0];//仓库
                DataTable subdt = ds.Tables[1];//仓位
                if (maindt.Rows.Count == 0)
                {
                    LogService.Write("仓库仓位同步异常:" + sql);
                    continue;
                }
                JArray array = new JArray();//明细表
                foreach (DataRow dr in subdt.Rows)
                {
                    JObject fentrymodel = new JObject();
                    foreach (DataColumn column in subdt.Columns)
                    {
                        fentrymodel.Add(column.ColumnName, dr[column.ColumnName].ToString());
                    }
                    array.Add(fentrymodel);
                }
                JObject model = new JObject();//主表
                DataRow maindr = maindt.Rows[0];
                foreach (DataColumn column in maindt.Columns)
                {
                    model.Add(column.ColumnName, maindr[column.ColumnName].ToString());
                }
                model.Add("HStockplaceEntry", array);
                JObject jsonRoot = new JObject()
                {
                    ["model"] = model
                };
                LogService.Write("仓库仓位同步示例:" + JsonConvert.SerializeObject(jsonRoot));
                //string clientUrl = Util.GetConfigKey(AppDomain.CurrentDomain.BaseDirectory + "/Config/kdapi.config", "ClientUrl");//K/3 Cloud 业务站点地址
                var client = new RestSharp.RestClient("http://61.130.182.102:18181/simoerAPI/");
                var requestPost = new RestRequest("Gy_Warehouse/SaveGy_WarehouseListApi", Method.POST);
                requestPost.AddParameter("application/json", JsonConvert.SerializeObject(jsonRoot), ParameterType.RequestBody);
                IRestResponse responsePost = client.Execute(requestPost);
                var contentPost = responsePost.Content;
                if (!contentPost.Contains("成功"))
                { 
                    LogService.Write("仓库仓位同步异常,POST方式获取结果," + billObj["Id"] + "," + contentPost);
                    LogService.Write("仓库仓位同步异常,POST," +   "Gy_Warehouse/SaveGy_WarehouseListApi");
                    LogService.Write("仓库仓位同步异常,JsonConvert.SerializeObject(_jsonRoot)," + JsonConvert.SerializeObject(jsonRoot));
                }
            };
 
            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;
            }
        }
    }
}