using AUTS.Domain.Entities; using AUTS.Domain.ViewModels; using AUTS.Services.DBUtility.Custom; using AUTS.Services.Enums; using AUTS.Services.Extensions; using AUTS.Services.Tool; using MySql.Data.MySqlClient; using System; using System.Collections.Generic; using System.Data; using System.Linq; namespace AUTS.Services.Manager { public partial class AutsChart { private static string TestLogTbName = "TBL_{0}_{1}_TestLog";//测试记录表名 /// /// 图表-未完成订单生产进度统计 /// /// 查询条件实体 /// 机型缓存 /// 订单缓存 /// 客户缓存 /// 工作站缓存 /// public static ReturnResult GetOrderStats(RequestOrderStats reqModel, List cacheUserProject, List cacheUserOrder, List cacheUserCustomer, List cacheUserStationList) { ReturnResult result = new ReturnResult(); try { var project = cacheUserProject.SingleOrDefault(x => x.ID == reqModel.ProjectID); if (!reqModel.IsOrder)//如果不是按照订单 { if (project == null) { result.Message = "无效或不存在的机型"; return result; } if (reqModel.StartDate == null) { result.Message = "请输入起始时间"; return result; } } var orderNotList = cacheUserOrder.Where(x => x.OrderStatus == (int)OrderStatus.InProduction);//取出该机型未完成订单 var minTime = reqModel.StartDate ?? DateTime.Now;//起始时间 if (project != null) { orderNotList = orderNotList.Where(x => x.ProductID == project.ID); } if (!reqModel.IsOrder) { orderNotList = orderNotList.Where(x => x.CreateTime <= minTime && x.DeliveryTime >= minTime);//取出未完成订单 //minTime = orderNotList.Min(m => m.CreateTime);//订单最早日期 } else { if (reqModel.StartDate == null && orderNotList.Count() > 0) { minTime = orderNotList.Min(m => m.CreateTime);//订单最早日期 } } if (orderNotList.Count() == 0) { result.Status = 200; return result; } var maxTime = reqModel.EndDate ?? DateTime.Now;//最晚日期 minTime = Convert.ToDateTime(minTime.ToString("yyyy/MM/dd"));//订单最早日期 maxTime = Convert.ToDateTime(maxTime.ToString("yyyy/MM/dd"));//订单最晚日期 TimeSpan ts = maxTime - minTime; int differenceInDays = ts.Days + 1; DataTable tblDatas = new DataTable("Datas"); tblDatas.Columns.Add("ID", Type.GetType("System.String"));//新列 tblDatas.Columns.Add("单号", Type.GetType("System.String"));//新列 tblDatas.Columns.Add("机型", Type.GetType("System.String"));//新列 tblDatas.Columns.Add("客户", Type.GetType("System.String"));//新列 tblDatas.Columns.Add("数量", Type.GetType("System.String"));//新列 tblDatas.Columns.Add("已完成", Type.GetType("System.String"));//新列 for (var i = 0; i < differenceInDays; i++) { tblDatas.Columns.Add(minTime.AddDays(i).ToString("yy/MM/dd"), Type.GetType("System.String"));//新列 } var dbTableName = ""; var sumTotal = 0; var dalHelperCustom = new DALHelperCustom(); var thisDataList = new List(); string connectionString = Users.GerOnUserCofin();//当前库连接串 using (MySqlConnection connection = new MySqlConnection(connectionString)) { DataSet dataSet = new DataSet(); connection.Open(); MySqlDataAdapter command = new MySqlDataAdapter(); var strSql = ""; foreach (var item in orderNotList) { strSql = ""; dataSet.Clear(); sumTotal = 0; DataRow newRow = tblDatas.NewRow();//新行 newRow["ID"] = item.ID; newRow["单号"] = item.OrderNo; newRow["机型"] = cacheUserProject.Single(x => x.ID == item.ProductID).ProjectName; newRow["客户"] = cacheUserCustomer.Single(x => x.ID == item.CompanyID).CustomerAbbr; newRow["数量"] = item.OrderCount; var endTestStation = cacheUserStationList.Where(x => x.ProjectID == item.ProductID && (x.StationType == StationType.Test.GetEnumDesc() || x.StationType == StationType.Test2.GetEnumDesc())).OrderByDescending(o => o.ArtworkOrder).FirstOrDefault();//最大测试站 dbTableName = string.Format(TestLogTbName, item.ProductID, endTestStation.ID);//最大测试站表名 //strSql = "select StartTime,DATE_FORMAT(StartTime,'%Y%m%d') DAYS,COUNT(*) Total from `" + dbTableName + "` Where OrderID=" + item.OrderID + " AND TestResult=1 GROUP BY DAYS;";//查询语句 strSql = "select {0} StartTime,DATE_FORMAT({0},'%Y%m%d') DAYS,COUNT(*) Total from `" + dbTableName + "` Where TestResult=1";//查询语句 if (reqModel.StartDate != null) { strSql += " AND (DATE_FORMAT({0}, '%Y-%m-%d %H:%i:%s') >='" + minTime.ToString("yyyy-MM-dd 00:00:00") + "')"; //strSql += (string.Format(" AND (DATE_FORMAT(StartTime, '%Y-%m-%d %H:%i:%s') >='{0}')", minTime.ToString("yyyy-MM-dd 00:00:00"))); } if (reqModel.EndDate != null && reqModel.StartDate != null) { strSql += " AND (DATE_FORMAT({0}, '%Y-%m-%d %H:%i:%s') <='" + maxTime.ToString("yyyy-MM-dd 23:59:59") + "')"; //strSql += (string.Format(" AND (DATE_FORMAT(StartTime, '%Y-%m-%d %H:%i:%s') <='{0}')", maxTime.ToString("yyyy-MM-dd 23:59:59"))); } if (reqModel.IsOrder) { strSql += " AND OrderID=" + item.ID; } strSql += " GROUP BY DAYS;"; if (endTestStation.StationType == StationType.Test2.GetEnumDesc()) { strSql = string.Format(strSql, "DateTime_2nd"); } else { strSql = string.Format(strSql, "StartTime"); } command = new MySqlDataAdapter(strSql, connection); command.Fill(dataSet, "ds"); if (dataSet.Tables[0].Rows.Count > 0) { thisDataList = dalHelperCustom.DataRowToModels(dataSet.Tables[0]); foreach (var itemData in thisDataList) { newRow[itemData.StartTime.ToString("yy/MM/dd")] = itemData.Total; sumTotal += itemData.Total; } } newRow["已完成"] = sumTotal; tblDatas.Rows.Add(newRow); } } var rows = ModelHelper.TableToRow(tblDatas); result.Data = rows; result.Status = 200; } catch (MySqlException ex) { result.Message = ex.Message; Logs.WriteErrorLog(ex); } catch (Exception ex) { result.Message = "网络系统繁忙,请稍候再试!"; LogHelp.WriteExceptionLog(ex); } return result; } /// /// 图表-该订单各站生产进度统计 /// /// 查询条件实体 /// 机型缓存 /// 订单缓存 /// 客户缓存 /// 工作站缓存 /// 数据库连接串 /// public static ReturnResult GetOrdersPlannedSpeedDetails(RequestOrdersPlanned reqModel, List cacheUserProject, List cacheUserOrder, List cacheUserCustomer, List cacheUserStationList, string connectionString) { ReturnResult result = new ReturnResult(); try { var id = reqModel.id; var order = cacheUserOrder.Single(x => x.ID == id);//取出订单 var stationList = cacheUserStationList.Where(x => x.StationType != StationType.QA.GetEnumDesc() && x.ProjectID == order.ProductID);//不为该机型QA的测试站 var minTime = reqModel.StartDate ?? order.CreateTime;//订单最早日期 var maxTime = reqModel.EndDate ?? DateTime.Now;//订单最晚日期 minTime = Convert.ToDateTime(minTime.ToString("yyyy/MM/dd"));//订单最早日期 maxTime = Convert.ToDateTime(maxTime.ToString("yyyy/MM/dd"));//订单最晚日期 TimeSpan ts = maxTime - minTime; int differenceInDays = ts.Days + 1; DataTable tblDatas = new DataTable("Datas"); tblDatas.Columns.Add("测试站", Type.GetType("System.String"));//新列 tblDatas.Columns.Add("数量", Type.GetType("System.String"));//新列 for (var i = 0; i < differenceInDays; i++) { tblDatas.Columns.Add(minTime.AddDays(i).ToString("yy/MM/dd"), Type.GetType("System.String"));//新列 } var dbTableName = ""; var strSql = ""; var sumTotal = 0; var dalHelperCustom = new DALHelperCustom(); //string connectionString = Users.GerOnUserCofin();//当前库连接串 using (MySqlConnection connection = new MySqlConnection(connectionString)) { DataSet dataSet = new DataSet(); MySqlDataAdapter command = new MySqlDataAdapter(); connection.Open(); //测试站列表 foreach (var itemStation in stationList) { strSql = ""; sumTotal = 0; dataSet.Clear(); DataRow newRow = tblDatas.NewRow();//新行 newRow["测试站"] = itemStation.StationName; newRow["数量"] = "当日"; DataRow newRow2 = tblDatas.NewRow();//新行 newRow2["测试站"] = itemStation.StationName; newRow2["数量"] = "累计"; dbTableName = string.Format(TestLogTbName, itemStation.ProjectID, itemStation.ID);//测试站表名 //strSql = "select StartTime,DATE_FORMAT(StartTime,'%Y%m%d') DAYS,COUNT(*) Total from `" + dbTableName + "` Where OrderID=" + id + " AND TestResult=1 GROUP BY DAYS;";//查询语句 strSql = "select {0},DATE_FORMAT({0},'%Y%m%d') DAYS,COUNT(*) Total from `" + dbTableName + "` Where TestResult=1";//查询语句 if (reqModel.IsOrder) { strSql += " AND OrderID=" + id; } if (reqModel.StartDate != null) { strSql += " AND (DATE_FORMAT({0}, '%Y-%m-%d %H:%i:%s') >='" + minTime.ToString("yyyy-MM-dd 00:00:00") + "')"; } if (reqModel.EndDate != null && reqModel.StartDate != null) { strSql += " AND (DATE_FORMAT({0}, '%Y-%m-%d %H:%i:%s') <='" + maxTime.ToString("yyyy-MM-dd 23:59:59") + "')"; } strSql += " GROUP BY DAYS;"; if (itemStation.StationType == StationType.Test2.GetEnumDesc()) { strSql = string.Format(strSql, "DateTime_2nd"); } else { strSql = string.Format(strSql, "StartTime"); } command = new MySqlDataAdapter(strSql, connection); command.Fill(dataSet, "ds"); if (dataSet.Tables[0].Rows.Count > 0) { var thisDataList = dalHelperCustom.DataRowToModels(dataSet.Tables[0]).OrderBy(x => x.StartTime); foreach (var itemData in thisDataList) { newRow[itemData.StartTime.ToString("yy/MM/dd")] = itemData.Total; sumTotal += itemData.Total; newRow2[itemData.StartTime.ToString("yy/MM/dd")] = sumTotal; } } tblDatas.Rows.Add(newRow); tblDatas.Rows.Add(newRow2); } } var rows = ModelHelper.TableToRow(tblDatas); result.Data = rows; result.Status = 200; } catch (MySqlException ex) { result.Message = ex.Message; Logs.WriteErrorLog(ex); } catch (Exception ex) { result.Message = "网络系统繁忙,请稍候再试!"; LogHelp.WriteExceptionLog(ex); } return result; } /// /// 生产实时统计 /// /// /// /// /// /// /// /// public static ReturnResult GetOrdersStatsDetails(RequestOrdersRealTime reqModel, List cacheUserProject, List cacheUserOrder, List cacheUserCustomer, List cacheUserStationList, string connectionString) { ReturnResult result = new ReturnResult(); try { //var vModelList = new VM_OrderPlannedSpeed(); var id = reqModel.Order; var order = cacheUserOrder.SingleOrDefault(x => x.ID == id);//取出订单 if (order == null) { result.Message = "无订单或无效订单"; return result; } var project = cacheUserProject.Single(x => x.ID == order.ProductID);//取出订单 var customer = cacheUserCustomer.Single(x => x.ID == order.CompanyID);//取出订单 var stationList = cacheUserStationList.Where(x => x.StationType != StationType.QA.GetEnumDesc() && x.ProjectID == order.ProductID).OrderBy(o => o.ArtworkOrder);//不为该机型QA的测试站 //vModelList.ProjectName = project.ProjectName; //vModelList.OrderNo = order.OrderNo; //vModelList.CustomerAbbr = customer.CustomerAbbr; //vModelList.OrderCount = order.OrderCount; //vModelList.CreateTime = order.CreateTime.ToString("yyyy/MM/dd"); //vModelList.DeliveryTime = order.DeliveryTime.ToString("yyyy/MM/dd"); ////测试站列表 //foreach (var itemStation in stationList) //{ // vModelList.StationDes += itemStation.StationName + "-" + itemStation.StationDesc + " "; //} DataTable tblDatas = new DataTable("Datas"); tblDatas.Columns.Add("DataType", Type.GetType("System.String"));//新列 tblDatas.Columns.Add("日期", Type.GetType("System.String"));//新列 tblDatas.Columns.Add("数据类型", Type.GetType("System.String"));//新列 //foreach (var station in stationList) //{ // tblDatas.Columns.Add(station.StationName, Type.GetType("System.String"));//新列 //} var strSql = "";//查询语句 var dbTableName = "";//测试记录表名 var timeStr = "";//日期 var totalDic = new Dictionary();//计算字典 var ppNum = 0; var actualNum = 0; var thisRow = 1; var rowKey = 0; var pPlan = new TBL_ProductionPlan(); var testLog = new OrderTestLogData(); using (MySqlConnection connection = new MySqlConnection(connectionString)) { DataSet dataSet = new DataSet(); MySqlDataAdapter command = new MySqlDataAdapter(); connection.Open(); strSql = "SELECT * FROM `TBL_ProductionPlan` WHERE OrderID=" + order.ID + ";"; command = new MySqlDataAdapter(strSql, connection); command.Fill(dataSet, "ds"); var dalHelperPP = new DALHelperCustom(); var dalHelperPSpeed = new DALHelperCustom(); var pSpeed = new List(); var ppList = dalHelperPP.DataRowToModels(dataSet.Tables[0]);//计划列表 var ppListGroup = ppList.GroupBy(g => g.ProductionTime).OrderBy(x => x.Key);//计划列表按时间分组 if (ppListGroup.Count() > 0) { foreach (var dateTime in ppListGroup) { timeStr = dateTime.Key.ToString("yyyy/MM/dd"); DataRow planRow = tblDatas.NewRow();//新行 计划行 planRow["DataType"] = "plan"; planRow["日期"] = timeStr; planRow["数据类型"] = "计划"; tblDatas.Rows.Add(planRow); DataRow planTotalRow = tblDatas.NewRow();//新行 累计计划行 planTotalRow["DataType"] = "plantotal"; planTotalRow["日期"] = timeStr; planTotalRow["数据类型"] = "累计计划"; tblDatas.Rows.Add(planTotalRow); DataRow testNumRow = tblDatas.NewRow();//新行 累计计划行 testNumRow["DataType"] = "test"; testNumRow["日期"] = timeStr; testNumRow["数据类型"] = "当日"; tblDatas.Rows.Add(testNumRow); DataRow testNumTotalRow = tblDatas.NewRow();//新行 累计计划行 testNumTotalRow["DataType"] = "testtotal"; testNumTotalRow["日期"] = timeStr; testNumTotalRow["数据类型"] = "累计当日"; tblDatas.Rows.Add(testNumTotalRow); } var minTime = ppList.Min(m => m.ProductionTime);//订单最早日期 var maxTime = ppList.Max(m => m.ProductionTime);//订单最晚日期 var timeWhere = " AND(DATE_FORMAT({0}, '%Y-%m-%d %H:%i:%s') >= '" + minTime.ToString("yyyy-MM-dd 00:00:00") + "') AND (DATE_FORMAT({0}, '%Y-%m-%d %H:%i:%s') <='" + maxTime.ToString("yyyy-MM-dd 23:59:59") + "')"; //测试站列表 foreach (var itemStation in stationList) { tblDatas.Columns.Add(itemStation.StationName, Type.GetType("System.String"));//新列 totalDic.Add(itemStation.StationName, new TbTotalDic()); dataSet.Clear(); dbTableName = string.Format(TestLogTbName, order.ProductID, itemStation.ID);//测试站表名 strSql = "select {0} StartTime,DATE_FORMAT({0},'%Y/%m/%d') DAYS,COUNT(*) Total from `" + dbTableName + "` Where TestResult=1";//查询语句 strSql += timeWhere; if (itemStation.StationType == StationType.Test2.GetEnumDesc()) { strSql = string.Format(strSql, "DateTime_2nd"); } else { strSql = string.Format(strSql, "StartTime"); } strSql += " GROUP BY DAYS;"; command = new MySqlDataAdapter(strSql, connection); command.Fill(dataSet, "ds"); pSpeed = dalHelperPSpeed.DataRowToModels(dataSet.Tables[0]);//测试记录数据 thisRow = 1; foreach (var dateTime in ppListGroup) { rowKey = (thisRow * 4); pPlan = null; testLog = null; if (dateTime.ToList().Count > 0) { pPlan = dateTime.ToList().SingleOrDefault(x => x.StationID == itemStation.ID); } testLog = pSpeed.SingleOrDefault(x => x.DAYS == timeStr); timeStr = dateTime.Key.ToString("yyyy/MM/dd"); ppNum = pPlan == null ? 0 : pPlan.ObjectiveYield; totalDic[itemStation.StationName].PlanTotal += ppNum; if (ppNum > 0) { tblDatas.Rows[(rowKey - 4)][itemStation.StationName] = ppNum;//计划 tblDatas.Rows[(rowKey - 3)][itemStation.StationName] = totalDic[itemStation.StationName].PlanTotal;//累计计划 } actualNum = testLog == null ? 0 : testLog.Total; totalDic[itemStation.StationName].ActualTotal += actualNum; if (actualNum > 0) { tblDatas.Rows[(rowKey - 2)][itemStation.StationName] = actualNum;//当日 tblDatas.Rows[(rowKey - 1)][itemStation.StationName] = totalDic[itemStation.StationName].ActualTotal;//累计 } thisRow += 1; } } } } var rows = ModelHelper.TableToRow(tblDatas); //vModelList.Rows = ModelHelper.TableToRow(tblDatas); result.Data = rows; result.Status = 200; } catch (MySqlException ex) { result.Message = ex.Message; Logs.WriteErrorLog(ex); } catch (Exception ex) { result.Message = "网络系统繁忙,请稍候再试!"; LogHelp.WriteExceptionLog(ex); } return result; } /// /// 更新生产进度 /// public static void UpdateOrderProductionSchedule() { //取所有库 var dbList = Cache.CacheHelp.GetSysDBList(); if (dbList != null && dbList.Count > 0) { IEnumerable orderList = null;// //var orderList = new List(); foreach (var item in dbList) { orderList = Cache.CacheHelp.GetUserDBOrderList(item.DatabaseName).Where(x => x.OrderStatus == (int)OrderStatus.ProductionPlan && x.OrderStatus == (int)OrderStatus.InProduction); } } } } }