王 垚
2021-02-28 eef39f21410d0eb02018bda05d3da369604b1562
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
149
150
151
152
153
154
155
156
using System.ComponentModel;
using Kingdee.BOS.Contracts;
using Kingdee.BOS;
using Kingdee.BOS.Core;
using Kingdee.BOS.ServiceHelper;
using System.Data;
using ZD.Cloud.Logger;
using Newtonsoft.Json.Linq;
using System;
using Kingdee.BOS.Util;
using System.Linq;
using ZD.Cloud.WebApi;
using Demo.Model.Model;
using Demo.Model.Model.PODemandPlan;
using System.Diagnostics;
using System.Collections.Generic;
using ZD.Share.Common;
 
namespace Demo.TimedTaskPlugIn.PRD
{
    [Description("采购订单生成提料计划")]
    [HotUpdate]
    public class TLPlanTimeTaskByPurchase : Kingdee.BOS.Contracts.IScheduleService
    {
        CloudClient cloudClient = new CloudClient("http://localhost//k3cloud/");
        public Context Context;
        public void Run(Context ctx, Schedule schedule)
        {
            try
            {
                Stopwatch sw = new Stopwatch();
                sw.Start();
                Context = ctx;
                string sql = @"/*dialect*/  select count(*) js from t_PUR_POOrder a
join t_PUR_POOrderEntry b on a.FID = b.FID
where FBILLTYPEID in 
(
select FBILLTYPEID from T_BAS_BILLTYPE
where FBILLFORMID = 'PUR_PurchaseOrder'
and FNUMBER in('CGDD09_SYS', 'CGDD10_SYS')
)
and FDOCUMENTSTATUS = 'C'
and FENTRYID not in  (select distinct FHPOOrderEntryID from Cg_PODemandPlanBillSub)";
                int ret = DBServiceHelper.ExecuteScalar<int>(Context, sql, 0);
                if (ret == 0)
                    return;
                Extraction();
                LogHelper.Info("提料计划时长:" + sw.Elapsed);
                sw.Stop();
 
            }
            catch (System.Exception ex)
            {
                LogHelper.Error(ex.Message.ToString());
            }
        }
 
        public void Extraction()
        {
            try
            {
                //需要生成提料计划所有数据
                string sql = @"/*dialect*/ SELECT * FROM (
select a.FID,b.FENTRYID,B.FSEQ,a.FBILLNO,A.FSUPPLIERID,d.FNUMBER as FSUPPLIERNAME,CONVERT(NVARCHAR(50),T.FDELIVERYDATE,23)FDELIVERYDATE,b.FMATERIALID,c.FNUMBER as FMATERIALNAME,b.FQTY from t_PUR_POOrder a
join t_PUR_POOrderEntry b on a.FID = b.FID
join T_PUR_POORDERENTRY_D T on B.FENTRYID = T.FENTRYID
join T_BD_MATERIAL c on b.FMATERIALID = c.FMATERIALID
join T_BD_SUPPLIER d on a.FSUPPLIERID=d.FSUPPLIERID
left join Cg_PODemandPlanBillSub e on b.FENTRYID =e.FHPOOrderEntryID
where a.FBILLTYPEID in 
(
select FBILLTYPEID  from T_BAS_BILLTYPE
where FBILLFORMID = 'PUR_PurchaseOrder'
and FNUMBER in('CGDD09_SYS','CGDD10_SYS')
)
and a.FDOCUMENTSTATUS = 'C'
)A
";
                //交期和供应商进行分组 
                DataTable purDt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0];
                sql = @"/*dialect*/ select DISTINCT A.FSUPPLIERID,CONVERT(NVARCHAR(50),T.FDELIVERYDATE,23)FDELIVERYDATE from t_PUR_POOrder a
join t_PUR_POOrderEntry b on a.FID = b.FID
join T_PUR_POORDERENTRY_D T on B.FENTRYID = T.FENTRYID
left join Cg_PODemandPlanBillSub e on b.FENTRYID =e.FHPOOrderEntryID
where a.FBILLTYPEID in 
(
select FBILLTYPEID  from T_BAS_BILLTYPE
where FBILLFORMID = 'PUR_PurchaseOrder'
and FNUMBER in('CGDD09_SYS','CGDD10_SYS')
)
and a.FDOCUMENTSTATUS = 'C'
";
                DataTable _purDt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0];
                JArray FinalyResult = new JArray();
                int tlmmm = 1;
                if (_purDt.Rows.Count > 0)
                {
                    foreach (DataRow _dr in _purDt.Rows)
                    {
                        DataRow[] purDtRows = purDt.Select($"FSUPPLIERID = '{_dr[0].ToString()}' AND FDELIVERYDATE = '{_dr[1].ToString()}'");
                        LogHelper.Info(purDtRows.ToString());
                        JObject model = new JObject();
                        model.Add("FHDate", purDtRows[0]["FDELIVERYDATE"].ToString());
                        model.Add("FSettleCurrId", new JObject() { ["Fnumber"] = "PRE001" });
                        model.Add("FSupplierID", new JObject() { ["Fnumber"] = purDtRows[0]["FSUPPLIERNAME"].ToString() });
                        JArray Fentity = new JArray();
                        foreach (DataRow drN in purDtRows)
                        {
                            JObject FentityModel = new JObject();
                            FentityModel.Add("FHPURCHASEORGID", new JObject() { ["Fnumber"] = "100" });//采购组织
                            FentityModel.Add("FHMaterID", new JObject() { ["Fnumber"] = drN["FMATERIALNAME"].ToString() });//物料
                            FentityModel.Add("FHQty", drN["FQty"].ToString());//数量
                            FentityModel.Add("FPURCHASEORGID", new JObject() { ["Fnumber"] = "100" });//采购组织
                            FentityModel.Add("FHPOOrderInterID", drN["FID"].ToString());// 采购订单内码:FHPOOrderInterID
                            FentityModel.Add("FHPOOrderEntryID", drN["FENTRYID"].ToString()); //采购订单子内码:FHPOOrderEntryID
                            FentityModel.Add("FHPOOrderBillNo", drN["FBILLNO"].ToString()); //采购订单号:FHPOOrderBillNo
                            FentityModel.Add("FHPOOrderFseq", drN["FSEQ"].ToString()); // 
                            FentityModel.Add("FUnitID", new JObject() { ["Fnumber"] = "Pcs" }); //单位
                            Fentity.Add(FentityModel);
                        }
                        model.Add("FEntity", Fentity);
                        FinalyResult.Add(model);
                        if ((tlmmm >= 20 || tlmmm == _purDt.Rows.Count) && (tlmmm % 20 == 0 || tlmmm == _purDt.Rows.Count))
                        {
                            LogHelper.Info("提料计划新增批量执行,记录循环的当前条数" + tlmmm);
                            JObject jsonRoot = new JObject()
                            {
                                ["Creator"] = "",
                                ["NeedUpDateFields"] = new JArray(),
                                ["NeedReturnFields"] = new JArray(),
                                ["IsDeleteEntry"] = "false",
                                ["SubSystemId"] = "",
                                ["IsVerifyBaseDataField"] = "false",
                                ["Model"] = FinalyResult
                            };
                            CloudClient cloudClient = new CloudClient("http://localhost//k3cloud/");
                            var result = cloudClient.BatchSave("paez_PODemandPlan", jsonRoot.ToString());
                            JObject saveObj = JObject.Parse(result);
                            string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper();
                            if (saveIsSuc != "TRUE")
                            {
                                LogHelper.Error(jsonRoot.ToString());
                            }
                            FinalyResult = new JArray();
                        }
                        tlmmm++;
                    }
                }
            }
            catch (Exception ex)
            {
                LogHelper.Info("提料计划跳出:" + ex.Message.ToString());
            }
        }
    }
}