王 垚
2022-10-27 0283d10f1f65729a5f3a79832ea587f977a28e96
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
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
using Kingdee.BOS;
using Kingdee.BOS.Core.Bill.PlugIn;
using Kingdee.BOS.Core.DynamicForm;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel;
using Kingdee.BOS.Core.List;
using Kingdee.BOS.Core.List.PlugIn;
using Kingdee.BOS.Core.Metadata.EntityElement;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.ServiceHelper;
using Kingdee.BOS.Util;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
 
namespace Demo.BillView.PRD
{
    [Description("[日计划工单] 列表插件"), HotUpdate]
    public class Pro_DayPlanList : AbstractListPlugIn
    {
        //点击按钮触发
        public override void BarItemClick(BarItemClickEventArgs e)
        {
            base.BarItemClick(e);
            //关闭
            if (e.BarItemKey.Equals("BTNCLOSE"))
            {
                //获取选择记录
                ListSelectedRowCollection selectRows = this.ListView.SelectedRowsInfo;
 
                //读取ID,放到数组
                string[] ID = selectRows.GetPrimaryKeyValues();
                string FID = "";
 
                //没有选择行提示
                if (ID.Length == 0)
                {
                    //如果选择的是0,即没有选择行记录,弹窗报错,返回
                    this.View.ShowMessage("请选择单据!", MessageBoxType.Notice);
                    return;
                }
                else
                {
                    //如果点击成功,循环ID
                    for (int i = 0; i < ID.Length; i++)
                    {
                        FID = FID + ID[i].ToString() + ",";
                    }
                    FID = FID.Substring(0, FID.Length - 1);
                    string sql = $"/*dialect*/ update  Sc_WorkBillSortBillMain set FDocumentStatus = 'E',FHCloseMan = '{Context.UserId}',FHCloseDate = GETDATE() where FID in ({FID})";
                    ////LogHelper.Info(sql);
                    DBServiceHelper.Execute(Context, sql);
                    this.View.ShowMessage("操作成功");
                }
            }
            //反关闭
            else if (e.BarItemKey.Equals("BTNCANCELCLOSE"))
            {
                //获取选择记录
                ListSelectedRowCollection selectRows = this.ListView.SelectedRowsInfo;
 
                //读取ID,放到数组
                string[] ID = selectRows.GetPrimaryKeyValues();
                string FID = "";
 
                //没有选择行提示
                if (ID.Length == 0)
                {
                    //如果选择的是0,即没有选择行记录,弹窗报错,返回
                    this.View.ShowMessage("请选择单据!", MessageBoxType.Notice);
                    return;
                }
                else
                {
                    //如果点击成功,循环ID
                    for (int i = 0; i < ID.Length; i++)
                    {
                        FID = FID + ID[i].ToString() + ",";
                    }
                    FID = FID.Substring(0, FID.Length - 1);
                    //验证 关闭订单 
                    //验证所选订单是否存在相同数据 生产订单号+生产订单明细行号
                    string errmsg = "";
                    string fbillno = "";
                    string yzSql = string.Format(@"/*dialect*/
SELECT FBILLNO FROM SC_WORKBILLSORTBILLMAIN WHERE FSCORDERNO+CONVERT(VARCHAR,FSRCBILLENTRYSEQ) IN (
SELECT FSCORDERNO+CONVERT(VARCHAR,FSRCBILLENTRYSEQ) FROM  SC_WORKBILLSORTBILLMAIN 
WHERE FID IN ({0})  
GROUP BY 
FSCORDERNO,FSRCBILLENTRYSEQ
HAVING COUNT(*)>1
)", FID);
                    DataTable dataTable = DBServiceHelper.ExecuteDataSet(Context, yzSql).Tables[0];
                    if (dataTable.Rows.Count > 0)
                    {
                        errmsg += "所选订单中存在相同生产订单和明细行号数据,订单号:";
                        foreach (DataRow dr in dataTable.Rows)
                        {
                            errmsg += dr["FBILLNO"].ToString();
                            fbillno += $"'{dr["FBILLNO"].ToString()}',";
                        }
                    }
                    yzSql = string.Format(@"/*dialect*/
SELECT A.FBILLNO FROM SC_WORKBILLSORTBILLMAIN A 
JOIN (SELECT * FROM SC_WORKBILLSORTBILLMAIN WHERE FDOCUMENTSTATUS <>'E') B ON A.FSCORDERNO=B.FSCORDERNO AND A.FSRCBILLENTRYSEQ=B.FSRCBILLENTRYSEQ
WHERE  A.FID IN ({0})
", FID);
                    dataTable = DBServiceHelper.ExecuteDataSet(Context, yzSql).Tables[0];
                    if (dataTable.Rows.Count > 0)
                    {
                        errmsg += "\n" + "所选订单中存在生产订单和明细行号关闭后数据重复,订单号:";
                        foreach (DataRow dr in dataTable.Rows)
                        {
                            errmsg += dr["FBILLNO"].ToString();
                            fbillno += $"'{dr["FBILLNO"].ToString()}',";
                        }
                    }
                    string sql = $"/*dialect*/ update  Sc_WorkBillSortBillMain set FDocumentStatus = 'C',FHCloseMan = '',FHCloseDate = NULL where FID in ({FID})";
                    if (fbillno.Length > 0)
                    {
                        fbillno = fbillno.Substring(0, fbillno.Length - 1);
                        sql = $"/*dialect*/ update  Sc_WorkBillSortBillMain set FDocumentStatus = 'C',FHCloseMan = '',FHCloseDate = NULL where FID in ({FID}) AND FBILLNO NOT IN ({fbillno})";
                    }
                    ////LogHelper.Info(sql);
                    DBServiceHelper.Execute(Context, sql);
                    if (errmsg != "")
                    {
                        this.View.ShowMessage("部分单据操作成功\n" + errmsg);
                        return;
                    }
                    this.View.ShowMessage("操作成功");
                }
            }
            else if (e.BarItemKey.Equals("BTNDISPATCH"))
            {
                PushDispatchBill();
            }
        }
        public void PushDispatchBill()
        {
            try
            {
                //获取选择记录
                ListSelectedRowCollection selectRows = this.ListView.SelectedRowsInfo;
                if (selectRows.Count == 0)
                {
                    this.View.ShowMessage("请选择数据!", MessageBoxType.Notice);
                    return;
                }
                List<string> fidList = selectRows.GetEntryPrimaryKeyValues().ToList();
                string fentryids = string.Join(",", fidList);
                DataTable dt = new DataTable();
                string dtsql = $"/*dialect*/ exec proc_jit_saveDispatchBill '{fentryids}'";
                dt = DBServiceHelper.ExecuteDataSet(Context, dtsql).Tables[0];
                // 一次性获取10个单据编号
                var billNos = BusinessDataServiceHelper.GetListBillNO(this.Context, "bsv_dispatchBill", dt.Rows.Count, "635782b535d236");
                //LogService.Write("billNos:" + string.Join(",", billNos)); ;
                List<string> sqllist = new List<string>();
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    string sql = string.Format(@"  
/*dialect*/
insert into z_jit_prdDispatchBill values('')
INSERT INTO [t_jit_prdDispatchBill]([FID],[FBILLNO],[FDOCUMENTSTATUS],[FCREATORID],[FCREATEDATE],[FMODIFIERID],[FMODIFYDATE],[FWORKSHOPID],[FSCX],[FSALEORDERNO],[FMONO],[FMATERIALID],[FQTY],[FDAYPLANQTY],[FWAREHOUSQTY],[F_SB],[FKHXH],[FDATE],F_dy,F_gl,F_db,FDAYPLANFID,FDAYPLANFENTRYID,FDAYPLANBILLNO)
select id,'{0}','A',{1},GETDATE(),{1},GETDATE(),{2},{3},'{4}','{5}',{6},{7},{8},{9},'{10}','{11}','{12}','{13}','{14}','{15}','{16}','{17}','{18}' from z_jit_prdDispatchBill
delete z_jit_prdDispatchBill", billNos[i], Context.UserId, dt.Rows[i]["FWORKSHOPID"], dt.Rows[i]["FSCX"], dt.Rows[i]["FSALEORDERNO"], dt.Rows[i]["FMONO"], dt.Rows[i]["FMATERIALID"], dt.Rows[i]["FQTY"], dt.Rows[i]["FDAYPLANQTY"], dt.Rows[i]["FWAREHOUSQTY"], dt.Rows[i]["F_SB"], dt.Rows[i]["FKHXH"],dt.Rows[i]["FDATE"], dt.Rows[i]["F_dy"], dt.Rows[i]["F_gl"], dt.Rows[i]["F_db"], dt.Rows[i]["FDAYPLANFID"], dt.Rows[i]["FDAYPLANFENTRYID"], dt.Rows[i]["FDAYPLANBILLNO"]);
                    //LogService.Write(sql);
                    sqllist.Add(sql);
                }
                var ret = DBServiceHelper.ExecuteBatch(Context, sqllist);
                //LogService.Write("ret:" + ret);
                this.View.ShowMessage("操作成功,生成派工单数量为" + billNos.Count);
            }
            catch (Exception ex)
            {
                //LogService.Write(ex.ToString());
                this.View.ShowErrMessage(ex.Message.ToString());
            }
        }
    }
}