using Newtonsoft.Json; 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.Web.Http; using WebAPI.Models; namespace WebAPI.Controllers { //报表Controller public class ReportController : ApiController { public ClsPub.Enum_BillStatus BillStatus; private json objJsonResult = new json(); SQLHelper.ClsCN oCN = new SQLHelper.ClsCN(); DataSet ds; /// /// 返回客诉追溯流程报表 /// /// 拼接的SQL /// object [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; } } /// /// 返回工序在制品报表 /// /// 截止时间 /// 拼接的SQL /// object [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 末道工序汇报入库 /// /// 末道工序汇报入库列表 /// /// /// /// [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 斯莫尔 末道工序汇报列表 汇报 入库 /// /// 生成 生产汇报单 /// 同步金蝶云 工序汇报入库单 入库 /// /// /// /// /// /// [Route("Sc_ProcessMangement/SRM_SaveICMOReportBill")] [HttpGet] public object SRM_SaveICMOReportBill(string InterID, string user, string BillNo, string OrganizationID) { try { //获取生产汇报单最大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; //获取组织代码 string OrganizationNUM = oCN.RunProcReturn("select HNumber from Xt_ORGANIZATIONS where HItemID=" + OrganizationID, "Xt_ORGANIZATIONS").Tables[0].Rows[0]["HNumber"].ToString(); //根据工序汇报单主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]; //保存 oCN.BeginTran(); DataSet DsTable = oCN.RunProcReturn($"select * from Sc_ICMOReportBillMain where HBillNo='{HBillNo}'", "Sc_ICMOReportBillMain"); 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() + "',''" + ") "); //同步金蝶 //访问金蝶 var loginRet = InvokeHelper.Login(); var isSuccess = JObject.Parse(loginRet)["LoginResultType"].Value(); if (isSuccess == 0) { objJsonResult.code = "0"; objJsonResult.count = 0; objJsonResult.Message = "操作失败,金蝶账号登录异常。" + loginRet; objJsonResult.data = null; return objJsonResult; } //根据任务单查找到金蝶的生产订单 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]; 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() == "1" ? true : false);// 倒冲领料 FentityModel.Add("FCHECKPRODUCT", dr1["HCHECKPRODUCT"].ToString() == "1" ? 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));//保存 //判断保存是否成功 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; } //提交审核 string result1 = string.Empty; string result2 = string.Empty; var fID = JObject.Parse(result)["Result"]["Id"].ToString(); var fBillNo = JObject.Parse(result)["Result"]["Number"].ToString(); var json = new { Ids = fID, }; result1 = InvokeHelper.Submit("PRD_MORPT", JsonConvert.SerializeObject(json));//提交 result2 = InvokeHelper.Audit("PRD_MORPT", JsonConvert.SerializeObject(json));//提交 if (JObject.Parse(result1)["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper() != "TRUE") { oCN.RollBack(); objJsonResult.code = "0"; objJsonResult.count = 0; objJsonResult.Message = $"生产汇报单单号:{fBillNo},提交失败" + result; objJsonResult.data = null; return objJsonResult; } oCN.RunProc("update Sc_StationOutBillMain set HRelationQty=1 where HBillNo='" + BillNo + "'"); 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 } }