zrg
2025-09-26 af68c3a0ceee325c9a948817b218861f67d51cc0
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
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using Pub_Class;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Diagnostics;
using System.Web.Http;
using WebAPI.Models;
 
namespace WebAPI.Controllers
{
    /// <summary>
    /// 工资报表菜单各模块接口
    /// </summary>
    public class ReportController : ApiController
    {
        public DBUtility.ClsPub.Enum_BillStatus BillStatus;
 
        private json objJsonResult = new json();
        SQLHelper.ClsCN oCN = new SQLHelper.ClsCN();
        DataSet ds;
 
        /// <summary>
        /// 返回客诉追溯流程报表
        /// </summary>
        /// <param name="sWhere">拼接的SQL</param>
        /// <returns>object</returns>
        [Route("Report/RetrospectionCustomerReport")]
        [HttpGet]
        public object RetrospectionCustomerReport(string sWhere)
        {
            DataSet ds;
            try
            {
                if (sWhere == null || sWhere.Equals(""))
                {
                    ds = oCN.RunProcReturn("select top 5000 * from h_v_RetrospectionCustomerReport order by 组托单日期 desc", "h_v_RetrospectionCustomerReport");
                }
                else
                {
                    string sql1 = "select * from h_v_RetrospectionCustomerReport where 1 = 1 ";
                    string sql = sql1 + sWhere;
                    string sql2 = " order by 组托单日期 desc";
                    sql += sql2;
                    ds = oCN.RunProcReturn(sql, "h_v_RetrospectionCustomerReport");
                }
                if (ds == null || ds.Tables[0].Rows.Count == 0)
                {
                    objJsonResult.code = "0";
                    objJsonResult.count = 0;
                    objJsonResult.Message = "无数据!";
                    objJsonResult.data = null;
                    return objJsonResult;
                }
                else
                {
                    objJsonResult.code = "1";
                    objJsonResult.count = 1;
                    objJsonResult.Message = "Sucess!";
                    objJsonResult.data = ds.Tables[0];
                    return objJsonResult;
                }
 
            }
            catch (Exception e)
            {
                objJsonResult.code = "0";
                objJsonResult.count = 0;
                objJsonResult.Message = "Exception!" + e.ToString();
                objJsonResult.data = null;
                return objJsonResult;
            }
        }
 
        /// <summary>
        /// 返回工序在制品报表
        /// </summary>
        /// <param name="EdDate">截止时间</param>
        /// <param name="sWhere">拼接的SQL</param>
        /// <returns>object</returns>
        [Route("Report/ProcessWIPReport")]
        [HttpGet]
        public object ProcessWIPReport(DateTime EdDate, string sWhere)
        {
            DataSet ds;
            try
            {
                ds = oCN.RunProcReturn("exec h_p_K3_Sc_WIPSumReportDateReport '" + EdDate + "','" + sWhere + "'", "h_p_K3_Sc_WIPSumReportDateReport");
                if (ds == null || ds.Tables[0].Rows.Count == 0)
                {
                    objJsonResult.code = "0";
                    objJsonResult.count = 0;
                    objJsonResult.Message = "无数据!";
                    objJsonResult.data = null;
                    return objJsonResult;
                }
                else
                {
                    objJsonResult.code = "1";
                    objJsonResult.count = 1;
                    objJsonResult.Message = "Sucess!";
                    objJsonResult.data = ds.Tables[0];
                    return objJsonResult;
                }
            }
            catch (Exception e)
            {
                objJsonResult.code = "0";
                objJsonResult.count = 0;
                objJsonResult.Message = "Exception!" + e.ToString();
                objJsonResult.data = null;
                return objJsonResult;
            }
        }
 
        //
 
        #region 末道工序汇报入库
        /// <summary>
        /// 末道工序汇报入库列表
        /// </summary>
        /// <param name="sWhere"></param>
        /// <param name="user"></param>
        /// <returns></returns>
        [Route("Sc_ProcessMangement/Sc_ProcessReportList_Last")]
        [HttpGet]
        public object Sc_ProcessReportList_Last(string sWhere, string user)
        {
            try
            {
                string sql1 = "select * from h_v_Sc_ProcessReportList_Last where 1 = 1  and HLastProc='是'";
                string sql = sql1 + sWhere + "  order by hmainid desc";
                ds = oCN.RunProcReturn(sql, "h_v_Sc_ProcessReportList_Last");
 
                objJsonResult.code = "1";
                objJsonResult.count = 1;
                objJsonResult.Message = "Sucess!";
                objJsonResult.data = ds.Tables[0];
                return objJsonResult;
 
            }
            catch (Exception e)
            {
                objJsonResult.code = "0";
                objJsonResult.count = 0;
                objJsonResult.Message = "Exception!" + e.ToString();
                objJsonResult.data = null;
                return objJsonResult;
            }
        }
        #endregion
 
        #region 斯莫尔 末道工序汇报列表  汇报 入库
        /// <summary>
        /// 生成 生产汇报单  
        /// 同步金蝶云 工序汇报入库单 入库
        /// </summary>
        /// <param name="InterID"></param>
        /// <param name="user"></param>
        /// <param name="BillNo"></param>
        /// <param name="OrganizationID"></param>
        /// <returns></returns>
        [Route("Sc_ProcessMangement/SRM_SaveICMOReportBill")]
        [HttpGet]
        public object SRM_SaveICMOReportBill(string InterID, string user, string BillNo, string OrganizationID)
        {
            try
            {
                Stopwatch sw = new Stopwatch();
 
                //获取生产汇报单最大InterID和单据号
                Int64 HInterID = DBUtility.ClsPub.CreateBillID("3711", ref DBUtility.ClsPub.sExeReturnInfo);
                string HBillNo = DBUtility.ClsPub.CreateBillCode("3711", ref DBUtility.ClsPub.sExeReturnInfo, true);
                HBillNo = "9010-" + HBillNo;
 
                LogService.Write("生产汇报单:" + HBillNo);
 
                sw.Start();//开始计时
 
                //获取组织代码
                string OrganizationNUM = oCN.RunProcReturn("select HNumber from Xt_ORGANIZATIONS where HItemID=" + OrganizationID, "Xt_ORGANIZATIONS").Tables[0].Rows[0]["HNumber"].ToString();
 
                LogService.Write("1-查询,用时" + sw.Elapsed);
 
                //根据工序汇报单主ID获取工序汇报入库单的数据
                DataSet ds = oCN.RunProcReturn("select * from h_v_MES_StationOutBillList_LastProc where HInterID=" + InterID, "h_v_MES_StationOutBillList_LastProc");
                DataRow dr = ds.Tables[0].Rows[0];
 
                LogService.Write("2-查询,用时" + sw.Elapsed);
 
                //保存
                oCN.BeginTran();
                DataSet DsTable = oCN.RunProcReturn($"select * from Sc_ICMOReportBillMain where HMainSourceBillNo='{BillNo}'", "Sc_ICMOReportBillMain");
 
                LogService.Write("3-查询,用时" + sw.Elapsed);
 
                if (DsTable.Tables[0].Rows.Count > 0)
                {
                    objJsonResult.code = "0";
                    objJsonResult.count = 0;
                    objJsonResult.Message = "已入库,请不要重复入库";
                    objJsonResult.data = null;
                    return objJsonResult;
                }
                //生产汇报单主表
                oCN.RunProc("Insert Into Sc_ICMOReportBillMain   " +
            "(HBillType,HBillSubType,HInterID,HBillNo,HDate,HMaker,HMakeDate,HBillStatus,HChecker,HCheckDate" +
            ",HYear,HPeriod,HRemark,HEmpID,HEmpNumber" +
            ",HGroupID,HDeptID,HDeptNumber" +
            ",HMainSourceBillNo,HMainSourceInterID,HMainSourceEntryID,HMainSourceBillType" +
            ") " +
            " values('3711','3711'," + HInterID.ToString() + ",'" + HBillNo + "',getdate(),'" + user + "',getdate(),2,'" + user + "',getdate()" +
            ",DATENAME(YEAR,GETDATE())," + DateTime.Now.Month + ",'','" + dr["HEmpID"].ToString() + "','" + dr["操作员代码"].ToString() +
            "','" + dr["HGroupID"].ToString() + "',0,''" +
            ",'" + BillNo.ToString() + "'," + InterID.ToString() + ", 0,'3791'" +
            ") ");
                //生产汇报单子表
                oCN.RunProc("Insert into Sc_ICMOReportBillSub " +
                      " (HInterID,HEntryID,HMaterID,HMaterNumber" +
                      ",HQty,HUnitID,HUnitNumber,HTimes,HSourceID" +
                      ",HQtyMust,HWorkerID,HWorkerNumber,HBadCount,HWasterQty," +
                      "HCloseMan,HCloseType,HRemark," +
                      "HSourceInterID,HSourceEntryID,HSourceBillNo,HSourceBillType,HRelationQty,HRelationMoney" +
                      ",HSeOrderInterID,HSeOrderEntryID,HSeOrderBillNo" +
                      ",HICMOInterID,HICMOBillNo,HBarCode" +
                      ") values("
                      + HInterID.ToString() + ",1," + dr["HMaterID"].ToString() + ",'" + dr["产品代码"].ToString() + "'" +
                      "," + dr["合格数量"].ToString() + ",0,'',0,0" +
                      "," + dr["接收数量"].ToString() + "," + dr["HEmpID"].ToString() + ",'" + dr["操作员代码"].ToString() + "'," + dr["不良数量"].ToString() + "," + dr["报废数量"].ToString() +
                      ",'',0,''" +
                      "," + InterID.ToString() + ",0,'" + BillNo.ToString() + "','3791',0,0" +
                      ",0,0,''" +
                      "," + dr["HICMOInterID"].ToString() + ",'" + dr["任务单"].ToString() + "',''" +
                      ") ");
 
                LogService.Write("4-新增,用时" + sw.Elapsed);
 
                //同步金蝶
                //访问金蝶
                var loginRet = InvokeHelper.Login();
                var isSuccess = JObject.Parse(loginRet)["LoginResultType"].Value<int>();
 
                LogService.Write("5-访问金蝶,用时" + sw.Elapsed);
 
                if (isSuccess == 0)
                {
                    objJsonResult.code = "0";
                    objJsonResult.count = 0;
                    objJsonResult.Message = "操作失败,金蝶账号登录异常。" + loginRet;
                    objJsonResult.data = null;
                    return objJsonResult;
                }
 
                LogService.Write("6-找到金蝶的生产订单,用时" + sw.Elapsed);
 
                //根据任务单查找到金蝶的生产订单
                DataSet ds1 = oCN.RunProcReturn("select * from  h_v_TOERP_StationOutBillList_LastProc_SMR where 单据号='" + dr["单据号"].ToString() + "'", "h_v_TOERP_StationOutBillList_LastProc_SMR");
 
                if (ds1.Tables[0].Rows.Count == 0)
                {
                    objJsonResult.code = "0";
                    objJsonResult.count = 0;
                    objJsonResult.Message = "操作失败,通过出站单查不到生产订单数据";
                    objJsonResult.data = null;
                    return objJsonResult;
                }
                DataRow dr1 = ds1.Tables[0].Rows[0];
 
                LogService.Write("7-开始新增金蝶云单据,用时" + sw.Elapsed);
 
                JObject model = new JObject();
                model.Add("FBillType", new JObject() { ["Fnumber"] = "SCHBD01_SYS" }); //单据类型生产汇报“SCHBD02_SYS” 入库汇报SCHBD01_SYS
                model.Add("FPrdOrgId", new JObject() { ["Fnumber"] = dr1["FPrdOrgNUMBER"].ToString() }); //生产组织1
                model.Add("FDate", DateTime.Now.ToString("yyyy-MM-dd")); //单据日期1
                model.Add("FBillNo", HBillNo);
                model.Add("F_RCZU_LZKH", dr1["工序流转卡号"].ToString());
 
                JArray Fentity = new JArray();
 
                foreach (DataRow item in ds.Tables[0].Rows)
                {
                    JObject FentityModel = new JObject();
                    FentityModel.Add("FIsNew", false);//  源单类型 
                    FentityModel.Add("FReportType", new JObject() { ["Fnumber"] = dr1["FREPORTTYPENUMBER"].ToString() });//生产汇报类型
                    FentityModel.Add("FSrcBillType", "PRD_MO");//  源单类型 
                    FentityModel.Add("FProductType", "1");//  产品类型 
                    FentityModel.Add("FSrcBillNo", item["任务单"].ToString());//  源单编号 
                    FentityModel.Add("FSrcInterId", dr1["FMOID"].ToString());//  源单内码 
                    FentityModel.Add("FSrcEntryId", dr1["FMOENTRYID"].ToString());//  源单分录内码、
                    FentityModel.Add("FSRCENTRYSEQ", dr1["FMOENTRYSEQ"].ToString());//  源单分录行号
                    FentityModel.Add("FUNITID", new JObject() { ["Fnumber"] = dr1["FUNITNUMBER"].ToString() });//单位
                    FentityModel.Add("FTimeUnitId", "1");//时间单位
                    FentityModel.Add("FWorkshipId", new JObject() { ["Fnumber"] = dr1["FWorkShopNUM"].ToString() }); //  生产车间
                    FentityModel.Add("FStandHourUnitId", "3600"); // 单位标准工时单位 
                    FentityModel.Add("FMaterialId", new JObject() { ["Fnumber"] = dr1["FMaterialNUM"].ToString() }); // 物料编码 
                    FentityModel.Add("FMoEntrySeq", dr1["FMOENTRYSEQ"].ToString());//生产订单行号
                    FentityModel.Add("FMoId", dr1["HICMOInterID"].ToString());//生产订单内码
                    FentityModel.Add("FFinishQty", item["接收数量"].ToString());//完成数量1
                    //FentityModel.Add("FQuaQty", item["合格数量"].ToString());//合格数量1FFailQty
                    FentityModel.Add("FFailQty", item["不良数量"].ToString());//不合格数量
                    FentityModel.Add("FStockInOrgId ", new JObject() { ["Fnumber"] = OrganizationNUM });// 入库组织 
                    FentityModel.Add("FStockId", new JObject() { ["Fnumber"] = dr1["FStockNUM"].ToString() }); // 仓库 
                    FentityModel.Add("FMOBILLNO", dr1["FMOBILLNO"].ToString());//  
                    FentityModel.Add("FMOENTRYID", dr1["FMOENTRYID"].ToString());//  
                    FentityModel.Add("FOwnerTypeId", dr1["FOWNERTYPEID"].ToString()); //货主类型:FOwnerTypeId(必填项)
                    FentityModel.Add("FOwnerId", new JObject() { ["Fnumber"] = dr1["FOwnerNumber"].ToString() }); //货主:FOwnerId(必填项)
                    FentityModel.Add("FBomId", new JObject() { ["Fnumber"] = dr1["FBOMNUM"].ToString() }); //BOM版本:FBomId(必填项)
                    FentityModel.Add("FCostRate", dr1["FCostRate"].ToString());// 成本权重
                    FentityModel.Add("FISBACKFLUSH", dr1["FISBACKFLUSH"].ToString() == "True" ? true : false);// 倒冲领料
                    FentityModel.Add("FCHECKPRODUCT", dr1["HCHECKPRODUCT"].ToString() == "True" ? true : false);// 产品检验
                    FentityModel.Add("FMOMAINENTRYID", dr1["FMOENTRYID"].ToString());//
                    //FentityModel.Add("FSRCENTRYSEQ", dr1["HSEQ"].ToString());//源单行号
                    FentityModel.Add("FLot", new JObject() { ["FNumber"] = dr1["FBATCHNO"].ToString() }); //批号
                    //FentityModel.Add("F_RCZU_LZKH", dr1["工序流转卡号"].ToString());//  工序流转卡 
                    JArray Fentity2 = new JArray();
                    JObject FentityModel2 = new JObject();
                    FentityModel2.Add("FEntity_Link_FFlowId", "f6e6eec3-5267-4f02-8593-b633da508a72");
                    FentityModel2.Add("FEntity_Link_FFlowLineId", "PRD_MO2MORPT");
                    FentityModel2.Add("FEntity_Link_FRuleId", "3");
                    FentityModel2.Add("FEntity_Link_FSTableId", "0");
                    FentityModel2.Add("FEntity_Link_FSTableName", "T_PRD_MOENTRY");
                    FentityModel2.Add("FEntity_Link_FSBillId", dr1["FMOID"].ToString());
                    FentityModel2.Add("FEntity_Link_FSId", dr1["FMOENTRYID"].ToString());
                    FentityModel2.Add("FEntity_Link_FBaseQuaQtyOld", item["合格数量"].ToString());
                    FentityModel2.Add("FEntity_Link_FBaseQuaQty", item["合格数量"].ToString());
                    Fentity2.Add(FentityModel2);
                    FentityModel.Add("FEntity_Link", Fentity2);
                    Fentity.Add(FentityModel);
                }
                model.Add("FEntity", Fentity); //明细信息                       
                JObject jsonRoot = new JObject()
                {
                    ["Creator"] = "",
                    ["NeedUpDateFields"] = new JArray(),
                    ["NeedReturnFields"] = new JArray(),
                    ["IsDeleteEntry"] = "false",
                    ["SubSystemId"] = "",
                    ["IsVerifyBaseDataField"] = "false",
                    //["IsAutoSubmitAndAudit"] = true,//自动调用提交和审核功能
                    ["Model"] = model
                };
 
                string result = InvokeHelper.Save("PRD_MORPT", JsonConvert.SerializeObject(jsonRoot));//保存
 
                LogService.Write("8-保存结果,用时" + sw.Elapsed);
 
                //判断保存是否成功
                if (JObject.Parse(result)["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper() != "TRUE")
                {
                    LogService.Write("工序汇报单入库错误jsonRoot:" + jsonRoot);
                    oCN.RollBack();
                    objJsonResult.code = "0";
                    objJsonResult.count = 0;
                    objJsonResult.Message = $"生产汇报入库单同步金蝶云失败!单号:{dr["单据号"].ToString()}" + result;
                    objJsonResult.data = null;
                    return objJsonResult;
                }
 
                LogService.Write("9-开始审核,用时" + sw.Elapsed);
             
 
                oCN.RunProc("update Sc_StationOutBillMain set HRelationQty=1 where  HBillNo='" + BillNo + "'");
 
                LogService.Write("11-修改完成,用时" + sw.Elapsed);
 
                sw.Stop();//结束计时
                LogService.Write("12-总用时" + sw.Elapsed);
 
                oCN.Commit();
                objJsonResult.code = "0";
                objJsonResult.count = 1;
                objJsonResult.Message = "保存成功!";
                objJsonResult.data = 1;
                return objJsonResult;
            }
            catch (Exception e)
            {
                oCN.RollBack();
                objJsonResult.code = "0";
                objJsonResult.count = 0;
                objJsonResult.Message = "Exception!" + e.ToString();
                objJsonResult.data = null;
                return objJsonResult;
            }
        }
        #endregion
 
 
    }
}