using MESClassLibrary.BLL.Log; using MESClassLibrary.DAL.Injection; using MESClassLibrary.EFModel; using MESClassLibrary.Model; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; namespace MESClassLibrary.BLL.Injection { public class InjectionRecordBLL { BBMPTEntities ef = new BBMPTEntities(); BasicBLL<tb_Injection_Record> db = new BasicBLL<tb_Injection_Record>(); BasicBLL<tb_Product_Injection_w> db_w = new BasicBLL<tb_Product_Injection_w>(); InjectionRecordDAL dal = new InjectionRecordDAL(); /// <summary> /// 新增信息 /// </summary> /// <param name="md"></param> /// <returns></returns> public bool AddInfo(tb_Injection_Record md) { try { var list = db.SearchInfoByKey("RecordDate", md.RecordDate);//判断是否有重复数据 if (list != null && list.Count > 0) { if (list.Where(p => p.StationID.Equals(md.StationID) && p.workClass.Equals(md.workClass)).Count() > 0) { return false; } } return db.AddInfo(md); } catch (Exception ex) { LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod()); return false; } } /// <summary> /// 修改信息 /// </summary> /// <param name="md"></param> /// <returns></returns> public bool UpdateInfo(tb_Injection_Record md) { try { //初始化要更新的字段 string[] proNames = new string[7]; proNames[0] = "workClass"; proNames[1] = "StationID"; proNames[2] = "JK_Weight"; proNames[3] = "Waste_Weight"; proNames[4] = "RecordDate"; proNames[5] = "StockNo"; proNames[6] = "PartNo"; //必填字段初始化,如果不需要更新必填字段则设置为空即可,时间类型无需初始化 //如果没有初始化必填字段,更新会报错 return db.UpdateInfo(md, proNames); } catch (Exception ex) { LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod()); return false; } } /// <summary> /// 删除信息 /// </summary> /// <param name="md"></param> /// <param name="flag"></param> /// <returns></returns> public bool DeleteInfo(tb_Injection_Record md) { try { return db.DelInfo(md); } catch (Exception ex) { LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod()); return false; } } /// <summary> /// 查询全部信息分页 /// </summary> /// <returns></returns> public string SearchInfoAll(string page, string pagesize, string StartTime, string EndTime, string StationID) { try { string jsonStr = "[]"; int total = 0;//总行数 DateTime stime = Convert.ToDateTime(StartTime); DateTime etime = Convert.ToDateTime(EndTime); List<tb_Injection_Record> list = ef.tb_Injection_Record.Where(p => p.RecordDate >= stime && p.RecordDate <= etime).ToList(); if (!String.IsNullOrEmpty(StationID)) { list = list.Where(p => p.StationID.Equals(StationID)).ToList(); } List<Injection_RecordModel> modelList = new List<Injection_RecordModel>(); if (list.Count > 0) { #region 联查 BasicBLL<tb_Station> machine_db = new BasicBLL<tb_Station>(); var machine_list = machine_db.SearchAllInfo(); foreach (var item in list) { Injection_RecordModel dm = Tool.Mapper<Injection_RecordModel, tb_Injection_Record>(item); var machine_info = machine_list.FirstOrDefault(p => p.StationID == item.StationID); if (machine_info != null) { dm.StationNo = machine_info.StationNo; } modelList.Add(dm); } #endregion total = modelList.Count; int Skipcount = (Convert.ToInt32(page) - 1) * Convert.ToInt32(pagesize); modelList = modelList.Skip(Skipcount).Take(Convert.ToInt32(pagesize)).ToList(); JsonDataModel<Injection_RecordModel> md = new JsonDataModel<Injection_RecordModel>(); md.total = total.ToString(); md.rows = modelList; jsonStr = JSONTools.ScriptSerialize<JsonDataModel<Injection_RecordModel>>(md); } return jsonStr; } catch (Exception ex) { LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod()); return null; } } #region 废料信息录入 public string SearchInfo(string page, string pagesize, string StartTime, string EndTime, string StationID) { try { string jsonStr = "[]"; int total = 0;//总行数 DateTime stime = Convert.ToDateTime(StartTime); DateTime etime = Convert.ToDateTime(EndTime); DataTable dt = dal.SearchRecordByPage(Convert.ToInt32(page), Convert.ToInt32(pagesize), StartTime, EndTime, StationID); IList<ProductInjectionModel> list = Tool.ConvertTo<ProductInjectionModel>(dt); if (list.Count > 0) { total = list.Count; JsonDataModel<ProductInjectionModel> md = new JsonDataModel<ProductInjectionModel>(); md.total = total.ToString(); md.rows = list.ToList(); jsonStr = JSONTools.ScriptSerialize(md); } return jsonStr; } catch (Exception ex) { LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod()); return null; } } public bool UpdateWasteInfo(tb_Product_Injection_w md) { try { var info = ef.tb_Product_Injection_w.Where(p => p.ID.Equals(md.ID)).FirstOrDefault();//判断是否有重复数据 if (info != null) { //初始化要更新的字段 string[] proNames = new string[3]; proNames[0] = "RealCycle"; proNames[1] = "JK_Weight"; proNames[2] = "Waste_Weight"; //必填字段初始化,如果不需要更新必填字段则设置为空即可,时间类型无需初始化 //如果没有初始化必填字段,更新会报错 db_w.UpdateInfo(md, proNames); } else { db_w.AddInfo(md); } return true; } catch (Exception ex) { LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod()); return false; } } #endregion /// <summary> /// 查询全部信息 /// </summary> /// <returns></returns> public List<tb_Injection_Record> SearchAll() { try { var s_list = db.SearchAllInfo().ToList(); return s_list; } catch (Exception) { return null; } } /// <summary> /// 根据ID查询信息 /// </summary> /// <param name="id"></param> /// <returns></returns> public tb_Injection_Record SearchInfoByID(string id) { try { return db.SearchInfoByID(id); } catch (Exception ex) { LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod()); return null; } } #region 日合格趋势 //表格 public string SearchQualifiedDay(string StartTime) { try { DateTime sTime = Convert.ToDateTime(StartTime); int days = System.Threading.Thread.CurrentThread.CurrentUICulture.Calendar.GetDaysInMonth(sTime.Year, sTime.Month); StringBuilder sb = new StringBuilder(100); DataTable dt = dal.SearchByTime(Convert.ToDateTime(sTime.Year + "-" + sTime.Month + "-01").ToString("yyyy-MM-dd"), Convert.ToDateTime(sTime.Year + "-" + sTime.Month + "-" + days.ToString()).ToString("yyyy-MM-dd")); if (dt != null && dt.Rows.Count > 0) { List<string> titleList = new List<string>(); List<double> totalList = new List<double>(); List<double> No_totalList = new List<double>(); List<double> OK_L_List = new List<double>(); for (int i = 0; i < days; i++) { titleList.Add((i + 1) + "日"); string nowTime = Convert.ToDateTime(sTime.Year + "-" + sTime.Month + "-" + (i + 1)).ToString("yyyy-MM-dd"); var DayList = from myRow in dt.AsEnumerable() where myRow.Field<string>(3) == nowTime select myRow; double total_OK = DayList.Sum(p => (int)p.ItemArray[7]); double total_NO = DayList.Sum(p => (int)p.ItemArray[8]); double total_all = total_OK + total_NO; totalList.Add(total_OK); No_totalList.Add(total_NO); if (total_all > 0) { OK_L_List.Add(Math.Round((total_OK / total_all) * 100, 2)); } else { OK_L_List.Add(0); } } sb.Append("<table border='1'>"); sb.Append("<tr>"); sb.Append("<td width='50'></td>"); foreach (var item in titleList) { sb.Append("<td width='50'>" + item + "</td>"); } sb.Append("</tr>"); sb.Append("<tr>"); sb.Append("<td width='100'>总合格数量</td>"); foreach (var item in totalList) { sb.Append("<td width='50'>" + item + "</td>"); } sb.Append("</tr>"); sb.Append("<tr>"); sb.Append("<td width='100'>不良数量</td>"); foreach (var item in No_totalList) { sb.Append("<td width='50'>" + item + "</td>"); } sb.Append("</tr>"); sb.Append("<tr>"); sb.Append("<td width='100'>合格率</td>"); foreach (var item in OK_L_List) { sb.Append("<td width='50'>" + item + "%</td>"); } sb.Append("</tr>"); sb.Append("<tr>"); sb.Append("<td width='100'>目标值</td>"); foreach (var item in OK_L_List) { sb.Append("<td width='50'>99.6%</td>"); } sb.Append("</tr>"); sb.Append("</table>"); } return sb.ToString(); } catch (Exception ex) { LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod()); return null; } } //柱状图 public EcharBarModel SearchQualifiedDayBar(string StartTime) { try { EcharBarModel md = new EcharBarModel(); DateTime sTime = Convert.ToDateTime(StartTime); int days = System.Threading.Thread.CurrentThread.CurrentUICulture.Calendar.GetDaysInMonth(sTime.Year, sTime.Month); StringBuilder sb = new StringBuilder(100); DataTable dt = dal.SearchByTime(Convert.ToDateTime(sTime.Year + "-" + sTime.Month + "-01").ToString("yyyy-MM-dd"), Convert.ToDateTime(sTime.Year + "-" + sTime.Month + "-" + days.ToString()).ToString("yyyy-MM-dd")); if (dt != null && dt.Rows.Count > 0) { List<string> titleList = new List<string>(); List<double> totalList = new List<double>(); List<double> No_totalList = new List<double>(); List<double> OK_L_List = new List<double>(); List<double> T_L_List = new List<double>(); for (int i = 0; i < days; i++) { titleList.Add((i + 1) + "日"); string nowTime = Convert.ToDateTime(sTime.Year + "-" + sTime.Month + "-" + (i + 1)).ToString("yyyy-MM-dd"); var DayList = from myRow in dt.AsEnumerable() where myRow.Field<string>(3) == nowTime select myRow; double total_OK = DayList.Sum(p => (int)p.ItemArray[7]); double total_NO = DayList.Sum(p => (int)p.ItemArray[8]); double total_all = total_OK + total_NO; totalList.Add(total_OK); No_totalList.Add(total_NO); if (total_all > 0) { OK_L_List.Add(Math.Round((total_OK / total_all) * 100, 2)); } else { OK_L_List.Add(0); } } foreach (var item in OK_L_List) { T_L_List.Add(99.6); } md.categories = titleList; md.QualifiedData = OK_L_List; md.TargetData = T_L_List; } return md; } catch (Exception ex) { LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod()); return null; } } public List<List<string>> SearchQualifiedDayForExcel(string StartTime) { try { List<List<string>> list = new List<List<string>>(); DateTime sTime = Convert.ToDateTime(StartTime); int days = System.Threading.Thread.CurrentThread.CurrentUICulture.Calendar.GetDaysInMonth(sTime.Year, sTime.Month); StringBuilder sb = new StringBuilder(100); DataTable dt = dal.SearchByTime(Convert.ToDateTime(sTime.Year + "-" + sTime.Month + "-01").ToString("yyyy-MM-dd"), Convert.ToDateTime(sTime.Year + "-" + sTime.Month + "-" + days.ToString()).ToString("yyyy-MM-dd")); if (dt != null && dt.Rows.Count > 0) { List<string> titleList = new List<string>(); List<double> totalList = new List<double>(); List<double> No_totalList = new List<double>(); List<double> OK_L_List = new List<double>(); for (int i = 0; i < days; i++) { titleList.Add((i + 1) + "日"); string nowTime = Convert.ToDateTime(sTime.Year + "-" + sTime.Month + "-" + (i + 1)).ToString("yyyy-MM-dd"); var DayList = from myRow in dt.AsEnumerable() where myRow.Field<string>(3) == nowTime select myRow; double total_OK = DayList.Sum(p => (int)p.ItemArray[7]); double total_NO = DayList.Sum(p => (int)p.ItemArray[8]); double total_all = total_OK + total_NO; totalList.Add(total_OK); No_totalList.Add(total_NO); if (total_all > 0) { OK_L_List.Add(Math.Round((total_OK / total_all) * 100, 2)); } else { OK_L_List.Add(0); } } List<string> title_ = new List<string>(); title_.Add(""); title_.AddRange(titleList); list.Add(title_); List<string> total_ = new List<string>(); total_.Add("总合格数量"); foreach (var item in totalList) { total_.Add(item.ToString()); } list.Add(total_); List<string> No_total_ = new List<string>(); No_total_.Add("不良数量"); foreach (var item in No_totalList) { No_total_.Add(item.ToString()); } list.Add(No_total_); List<string> OK_L_ = new List<string>(); OK_L_.Add("合格率"); foreach (var item in OK_L_List) { OK_L_.Add(item.ToString() + "%"); } list.Add(OK_L_); List<string> tag_L_ = new List<string>(); tag_L_.Add("目标值"); foreach (var item in OK_L_List) { tag_L_.Add("99.6%"); } list.Add(tag_L_); } return list; } catch (Exception ex) { LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod()); return null; } } #endregion #region 月合格趋势 //表格 public string SearchQualifiedMonth(string StartTime) { try { DateTime sTime = Convert.ToDateTime(StartTime); StringBuilder sb = new StringBuilder(100); DataTable dt = dal.SearchByTime(sTime.Year + "-01-01", sTime.Year + "-12-31"); if (dt != null && dt.Rows.Count > 0) { DateTime startT = Convert.ToDateTime(sTime.Year + "-01-01"); List<string> titleList = new List<string>(); List<double> totalList = new List<double>(); List<double> No_totalList = new List<double>(); List<double> OK_L_List = new List<double>(); for (int i = 0; i < 12; i++) { titleList.Add((i + 1) + "月"); int days = System.Threading.Thread.CurrentThread.CurrentUICulture.Calendar.GetDaysInMonth(startT.Year, (i + 1)); string starTime = Convert.ToDateTime(sTime.Year + "-" + (i + 1) + "-01").ToString("yyyy-MM-dd"); string entTime = Convert.ToDateTime(sTime.Year + "-" + (i + 1) + "-" + days).ToString("yyyy-MM-dd"); var DayList = from myRow in dt.AsEnumerable() where myRow.Field<string>(3).CompareTo(Convert.ToDateTime(sTime.Year + "-" + (i + 1) + "-01").ToString("yyyy-MM-dd")) >= 0 && myRow.Field<string>(3).CompareTo(Convert.ToDateTime(sTime.Year + "-" + (i + 1) + "-" + days).ToString("yyyy-MM-dd")) <= 0 select myRow; double total_OK = DayList.Sum(p => (int)p.ItemArray[7]); double total_NO = DayList.Sum(p => (int)p.ItemArray[8]); double total_all = total_OK + total_NO; totalList.Add(total_OK); No_totalList.Add(total_NO); if (total_all > 0) { OK_L_List.Add(Math.Round((total_OK / total_all) * 100, 2)); } else { OK_L_List.Add(0); } } sb.Append("<table border='1' width='1000'>"); sb.Append("<tr>"); sb.Append("<td width='50'></td>"); foreach (var item in titleList) { sb.Append("<td width='50'>" + item + "</td>"); } sb.Append("</tr>"); sb.Append("<tr>"); sb.Append("<td width='50'>总合格数量</td>"); foreach (var item in totalList) { sb.Append("<td width='50'>" + item + "</td>"); } sb.Append("</tr>"); sb.Append("<tr>"); sb.Append("<td width='50'>不良数量</td>"); foreach (var item in No_totalList) { sb.Append("<td width='50'>" + item + "</td>"); } sb.Append("</tr>"); sb.Append("<tr>"); sb.Append("<td width='50'>合格率</td>"); foreach (var item in OK_L_List) { sb.Append("<td width='50'>" + item + "%</td>"); } sb.Append("</tr>"); sb.Append("<tr>"); sb.Append("<td width='50'>目标值</td>"); foreach (var item in OK_L_List) { sb.Append("<td width='50'>99.6%</td>"); } sb.Append("</tr>"); sb.Append("</table>"); } return sb.ToString(); } catch (Exception ex) { LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod()); return null; } } //柱状图 public EcharBarModel SearchQualifiedMonthBar(string StartTime) { try { EcharBarModel md = new EcharBarModel(); DateTime sTime = Convert.ToDateTime(StartTime); DataTable dt = dal.SearchByTime(sTime.Year + "-01-01", sTime.Year + "-12-31"); if (dt != null && dt.Rows.Count > 0) { DateTime startT = Convert.ToDateTime(sTime.Year + "-01-01"); List<string> titleList = new List<string>(); List<double> totalList = new List<double>(); List<double> No_totalList = new List<double>(); List<double> OK_L_List = new List<double>(); List<double> T_L_List = new List<double>(); for (int i = 0; i < 12; i++) { titleList.Add((i + 1) + "月"); int days = System.Threading.Thread.CurrentThread.CurrentUICulture.Calendar.GetDaysInMonth(startT.Year, (i + 1)); string starTime = Convert.ToDateTime(sTime.Year + "-" + (i + 1) + "-01").ToString("yyyy-MM-dd"); string entTime = Convert.ToDateTime(sTime.Year + "-" + (i + 1) + "-" + days).ToString("yyyy-MM-dd"); var DayList = from myRow in dt.AsEnumerable() where myRow.Field<string>(3).CompareTo(Convert.ToDateTime(sTime.Year + "-" + (i + 1) + "-01").ToString("yyyy-MM-dd")) >= 0 && myRow.Field<string>(3).CompareTo(Convert.ToDateTime(sTime.Year + "-" + (i + 1) + "-" + days).ToString("yyyy-MM-dd")) <= 0 select myRow; double total_OK = DayList.Sum(p => (int)p.ItemArray[7]); double total_NO = DayList.Sum(p => (int)p.ItemArray[8]); double total_all = total_OK + total_NO; totalList.Add(total_OK); No_totalList.Add(total_NO); if (total_all > 0) { OK_L_List.Add(Math.Round((total_OK / total_all) * 100, 2)); } else { OK_L_List.Add(0); } } foreach (var item in OK_L_List) { T_L_List.Add(99.6); } md.categories = titleList; md.QualifiedData = OK_L_List; md.TargetData = T_L_List; } return md; } catch (Exception ex) { LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod()); return null; } } public List<List<string>> SearchQualifiedMonthForExcel(string StartTime) { try { List<List<string>> list = new List<List<string>>(); DateTime sTime = Convert.ToDateTime(StartTime); StringBuilder sb = new StringBuilder(100); DataTable dt = dal.SearchByTime(sTime.Year + "-01-01", sTime.Year + "-12-31"); if (dt != null && dt.Rows.Count > 0) { DateTime startT = Convert.ToDateTime(sTime.Year + "-01-01"); List<string> titleList = new List<string>(); List<double> totalList = new List<double>(); List<double> No_totalList = new List<double>(); List<double> OK_L_List = new List<double>(); for (int i = 0; i < 12; i++) { titleList.Add((i + 1) + "月"); int days = System.Threading.Thread.CurrentThread.CurrentUICulture.Calendar.GetDaysInMonth(startT.Year, (i + 1)); string starTime = Convert.ToDateTime(sTime.Year + "-" + (i + 1) + "-01").ToString("yyyy-MM-dd"); string entTime = Convert.ToDateTime(sTime.Year + "-" + (i + 1) + "-" + days).ToString("yyyy-MM-dd"); var DayList = from myRow in dt.AsEnumerable() where myRow.Field<string>(3).CompareTo(Convert.ToDateTime(sTime.Year + "-" + (i + 1) + "-01").ToString("yyyy-MM-dd")) >= 0 && myRow.Field<string>(3).CompareTo(Convert.ToDateTime(sTime.Year + "-" + (i + 1) + "-" + days).ToString("yyyy-MM-dd")) <= 0 select myRow; double total_OK = DayList.Sum(p => (int)p.ItemArray[7]); double total_NO = DayList.Sum(p => (int)p.ItemArray[8]); double total_all = total_OK + total_NO; totalList.Add(total_OK); No_totalList.Add(total_NO); if (total_all > 0) { OK_L_List.Add(Math.Round((total_OK / total_all) * 100, 2)); } else { OK_L_List.Add(0); } } List<string> title_ = new List<string>(); title_.Add(""); title_.AddRange(titleList); list.Add(title_); List<string> total_ = new List<string>(); total_.Add("总合格数量"); foreach (var item in totalList) { total_.Add(item.ToString()); } list.Add(total_); List<string> No_total_ = new List<string>(); No_total_.Add("不良数量"); foreach (var item in No_totalList) { No_total_.Add(item.ToString()); } list.Add(No_total_); List<string> OK_L_ = new List<string>(); OK_L_.Add("合格率"); foreach (var item in OK_L_List) { OK_L_.Add(item.ToString() + "%"); } list.Add(OK_L_); List<string> tag_L_ = new List<string>(); tag_L_.Add("目标值"); foreach (var item in OK_L_List) { tag_L_.Add("99.6%"); } list.Add(tag_L_); } return list; } catch (Exception ex) { LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod()); return null; } } #endregion #region 日原料利用率 public string SearchMaterialAvailabilityDay(string StartTime) { try { var p_info = ef.tb_Plastic.Where(p => p.Weight != null); DateTime sTime = Convert.ToDateTime(StartTime); int days = System.Threading.Thread.CurrentThread.CurrentUICulture.Calendar.GetDaysInMonth(sTime.Year, sTime.Month); StringBuilder sb = new StringBuilder(100); DataTable dt = dal.SearchByTime(Convert.ToDateTime(sTime.Year + "-" + sTime.Month + "-01").ToString("yyyy-MM-dd"), Convert.ToDateTime(sTime.Year + "-" + sTime.Month + "-" + days.ToString()).ToString("yyyy-MM-dd")); if (dt != null && dt.Rows.Count > 0) { List<string> titleList = new List<string>(); List<double> totalList = new List<double>(); List<double> No_totalList = new List<double>(); List<double> All_totalList = new List<double>(); List<double> OK_L_List = new List<double>(); for (int i = 0; i < days; i++) { titleList.Add((i + 1) + "日"); string nowTime = Convert.ToDateTime(sTime.Year + "-" + sTime.Month + "-" + (i + 1)).ToString("yyyy-MM-dd"); var listAddress = (from myRow in dt.AsEnumerable() where myRow.Field<string>(3) == nowTime group myRow by new { StockNo = myRow.ItemArray[5] } into g //orderby new ComparerItem() { OrderIndex = b.Key., Id = b.Key.Id } descending select new { StockNo = (string)g.Key.StockNo, total_ok = g.Sum(c => (int)c.ItemArray[7]), total_no = g.Sum(c => (int)c.ItemArray[8]) }); double total_OK = 0; double total_NO = 0; foreach (var item in listAddress) { string stockNo = item.StockNo; var w_info = p_info.FirstOrDefault(p => p.StockNo.Equals(stockNo)); if (w_info != null) { total_OK += (double)(w_info.Weight * item.total_ok); total_NO += (double)(w_info.Weight * item.total_no); } } totalList.Add(Math.Round(total_OK / 1000, 2)); No_totalList.Add(Math.Round(total_NO / 1000, 2)); DateTime nsTime = Convert.ToDateTime(nowTime + " 00:00:00"); DateTime neTime = Convert.ToDateTime(nowTime + " 23:59:59"); var Waste_Num = ef.tb_Injection_Record.Where(p => p.RecordDate >= nsTime && p.RecordDate <= neTime).Sum(p => p.Waste_Weight); double total_Waste = 0; if (Waste_Num == null) { total_Waste = 0; } else { total_Waste = (double)Waste_Num; } double total_all = total_OK + total_NO + total_Waste; All_totalList.Add(Math.Round(total_all / 1000, 2)); if (total_all > 0) { OK_L_List.Add(Math.Round((total_OK / total_all) * 100, 2)); } else { OK_L_List.Add(0); } } sb.Append("<table border='1'>"); sb.Append("<tr>"); sb.Append("<td width='50'></td>"); foreach (var item in titleList) { sb.Append("<td width='50'>" + item + "</td>"); } sb.Append("</tr>"); sb.Append("<tr>"); sb.Append("<td width='50'>目标值</td>"); foreach (var item in OK_L_List) { sb.Append("<td width='50'>98%</td>"); } sb.Append("</tr>"); sb.Append("<tr>"); sb.Append("<td width='50'>合格件耗用原料</td>"); foreach (var item in totalList) { sb.Append("<td width='50'>" + item + "</td>"); } sb.Append("</tr>"); sb.Append("<tr>"); sb.Append("<td width='50'>总耗用原料</td>"); foreach (var item in All_totalList) { sb.Append("<td width='50'>" + item + "</td>"); } sb.Append("</tr>"); sb.Append("<tr>"); sb.Append("<td width='50'>原料利用率</td>"); foreach (var item in OK_L_List) { sb.Append("<td width='50'>" + item + "%</td>"); } sb.Append("</tr>"); sb.Append("</table>"); } return sb.ToString(); } catch (Exception ex) { LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod()); return null; } } //柱状图 public EcharBarModel SearchMaterialAvailabilityDayBar(string StartTime) { try { EcharBarModel md = new EcharBarModel(); var p_info = ef.tb_Plastic.Where(p => p.Weight != null); DateTime sTime = Convert.ToDateTime(StartTime); int days = System.Threading.Thread.CurrentThread.CurrentUICulture.Calendar.GetDaysInMonth(sTime.Year, sTime.Month); StringBuilder sb = new StringBuilder(100); DataTable dt = dal.SearchByTime(Convert.ToDateTime(sTime.Year + "-" + sTime.Month + "-01").ToString("yyyy-MM-dd"), Convert.ToDateTime(sTime.Year + "-" + sTime.Month + "-" + days.ToString()).ToString("yyyy-MM-dd")); if (dt != null && dt.Rows.Count > 0) { List<string> titleList = new List<string>(); List<double> totalList = new List<double>(); List<double> No_totalList = new List<double>(); List<double> OK_L_List = new List<double>(); List<double> T_L_List = new List<double>(); for (int i = 0; i < days; i++) { titleList.Add((i + 1) + "日"); string nowTime = Convert.ToDateTime(sTime.Year + "-" + sTime.Month + "-" + (i + 1)).ToString("yyyy-MM-dd"); var listAddress = (from myRow in dt.AsEnumerable() where myRow.Field<string>(3) == nowTime group myRow by new { StockNo = myRow.ItemArray[5] } into g //orderby new ComparerItem() { OrderIndex = b.Key., Id = b.Key.Id } descending select new { StockNo = (string)g.Key.StockNo, total_ok = g.Sum(c => (int)c.ItemArray[7]), total_no = g.Sum(c => (int)c.ItemArray[8]) }); double total_OK = 0; double total_NO = 0; foreach (var item in listAddress) { string stockNo = item.StockNo; var w_info = p_info.FirstOrDefault(p => p.StockNo.Equals(stockNo)); if (w_info != null) { total_OK += (double)(w_info.Weight * item.total_ok); total_NO += (double)(w_info.Weight * item.total_no); } } totalList.Add(Math.Round(total_OK / 1000, 2)); No_totalList.Add(Math.Round(total_NO / 1000, 2)); DateTime nsTime = Convert.ToDateTime(nowTime + " 00:00:00"); DateTime neTime = Convert.ToDateTime(nowTime + " 23:59:59"); var Waste_Num = ef.tb_Injection_Record.Where(p => p.RecordDate >= nsTime && p.RecordDate <= neTime).Sum(p => p.Waste_Weight); double total_Waste = 0; if (Waste_Num == null) { total_Waste = 0; } else { total_Waste = (double)Waste_Num; } double total_all = total_OK + total_NO + total_Waste; if (total_all > 0) { OK_L_List.Add(Math.Round((total_OK / total_all) * 100, 2)); } else { OK_L_List.Add(0); } } foreach (var item in OK_L_List) { T_L_List.Add(98); } md.categories = titleList; md.QualifiedData = OK_L_List; md.TargetData = T_L_List; } return md; } catch (Exception ex) { LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod()); return null; } } public List<List<string>> SearchMaterialAvailabilityDayForExcel(string StartTime) { try { List<List<string>> list = new List<List<string>>(); var p_info = ef.tb_Plastic.Where(p => p.Weight != null); DateTime sTime = Convert.ToDateTime(StartTime); int days = System.Threading.Thread.CurrentThread.CurrentUICulture.Calendar.GetDaysInMonth(sTime.Year, sTime.Month); StringBuilder sb = new StringBuilder(100); DataTable dt = dal.SearchByTime(Convert.ToDateTime(sTime.Year + "-" + sTime.Month + "-01").ToString("yyyy-MM-dd"), Convert.ToDateTime(sTime.Year + "-" + sTime.Month + "-" + days.ToString()).ToString("yyyy-MM-dd")); if (dt != null && dt.Rows.Count > 0) { List<string> titleList = new List<string>(); List<double> totalList = new List<double>(); List<double> No_totalList = new List<double>(); List<double> All_totalList = new List<double>(); List<double> OK_L_List = new List<double>(); for (int i = 0; i < days; i++) { titleList.Add((i + 1) + "日"); string nowTime = Convert.ToDateTime(sTime.Year + "-" + sTime.Month + "-" + (i + 1)).ToString("yyyy-MM-dd"); var listAddress = (from myRow in dt.AsEnumerable() where myRow.Field<string>(3) == nowTime group myRow by new { StockNo = myRow.ItemArray[5] } into g //orderby new ComparerItem() { OrderIndex = b.Key., Id = b.Key.Id } descending select new { StockNo = (string)g.Key.StockNo, total_ok = g.Sum(c => (int)c.ItemArray[7]), total_no = g.Sum(c => (int)c.ItemArray[8]) }); double total_OK = 0; double total_NO = 0; foreach (var item in listAddress) { string stockNo = item.StockNo; var w_info = p_info.FirstOrDefault(p => p.StockNo.Equals(stockNo)); if (w_info != null) { total_OK += (double)(w_info.Weight * item.total_ok); total_NO += (double)(w_info.Weight * item.total_no); } } totalList.Add(Math.Round(total_OK / 1000, 2)); No_totalList.Add(Math.Round(total_NO / 1000, 2)); DateTime nsTime = Convert.ToDateTime(nowTime + " 00:00:00"); DateTime neTime = Convert.ToDateTime(nowTime + " 23:59:59"); var Waste_Num = ef.tb_Injection_Record.Where(p => p.RecordDate >= nsTime && p.RecordDate <= neTime).Sum(p => p.Waste_Weight); double total_Waste = 0; if (Waste_Num == null) { total_Waste = 0; } else { total_Waste = (double)Waste_Num; } double total_all = total_OK + total_NO + total_Waste; All_totalList.Add(Math.Round(total_all / 1000, 2)); if (total_all > 0) { OK_L_List.Add(Math.Round((total_OK / total_all) * 100, 2)); } else { OK_L_List.Add(0); } } List<string> title_ = new List<string>(); title_.Add(""); title_.AddRange(titleList); list.Add(title_); List<string> tag_L_ = new List<string>(); tag_L_.Add("目标值"); foreach (var item in OK_L_List) { tag_L_.Add("98%"); } list.Add(tag_L_); List<string> total_ = new List<string>(); total_.Add("合格件耗用原料"); foreach (var item in totalList) { total_.Add(item.ToString()); } list.Add(total_); List<string> No_total_ = new List<string>(); No_total_.Add("总耗用原料"); foreach (var item in All_totalList) { No_total_.Add(item.ToString()); } list.Add(No_total_); List<string> OK_L_ = new List<string>(); OK_L_.Add("原料利用率"); foreach (var item in OK_L_List) { OK_L_.Add(item.ToString() + "%"); } list.Add(OK_L_); } return list; } catch (Exception ex) { LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod()); return null; } } #endregion #region 月原料利用率 public string SearchMaterialAvailabilityMonth(string StartTime) { try { StringBuilder sb = new StringBuilder(100); var p_info = ef.tb_Plastic.Where(p => p.Weight != null); DateTime sTime = Convert.ToDateTime(StartTime); DataTable dt = dal.SearchByTime(sTime.Year + "-01-01", sTime.Year + "-12-31"); if (dt != null && dt.Rows.Count > 0) { List<string> titleList = new List<string>(); List<double> totalList = new List<double>(); List<double> No_totalList = new List<double>(); List<double> All_totalList = new List<double>(); List<double> OK_L_List = new List<double>(); for (int i = 0; i < 12; i++) { DateTime startT = Convert.ToDateTime(sTime.Year + "-01-01"); titleList.Add((i + 1) + "月"); int days = System.Threading.Thread.CurrentThread.CurrentUICulture.Calendar.GetDaysInMonth(startT.Year, (i + 1)); string starTime = Convert.ToDateTime(sTime.Year + "-" + (i + 1) + "-01").ToString("yyyy-MM-dd"); string entTime = Convert.ToDateTime(sTime.Year + "-" + (i + 1) + "-" + days).ToString("yyyy-MM-dd"); var listAddress = (from myRow in dt.AsEnumerable() where myRow.Field<string>(3).CompareTo(Convert.ToDateTime(sTime.Year + "-" + (i + 1) + "-01").ToString("yyyy-MM-dd")) >= 0 && myRow.Field<string>(3).CompareTo(Convert.ToDateTime(sTime.Year + "-" + (i + 1) + "-" + days).ToString("yyyy-MM-dd")) <= 0 group myRow by new { StockNo = myRow.ItemArray[5] } into g select new { StockNo = (string)g.Key.StockNo, total_ok = g.Sum(c => (int)c.ItemArray[7]), total_no = g.Sum(c => (int)c.ItemArray[8]) }); double total_OK = 0; double total_NO = 0; foreach (var item in listAddress) { string stockNo = item.StockNo; var w_info = p_info.FirstOrDefault(p => p.StockNo.Equals(stockNo)); if (w_info != null) { total_OK += (double)(w_info.Weight * item.total_ok); total_NO += (double)(w_info.Weight * item.total_no); } } totalList.Add(Math.Round(total_OK / 1000, 2)); No_totalList.Add(Math.Round(total_NO / 1000, 2)); DateTime nsTime = Convert.ToDateTime(starTime + " 00:00:00"); DateTime neTime = Convert.ToDateTime(entTime + " 23:59:59"); var Waste_Num = ef.tb_Injection_Record.Where(p => p.RecordDate >= nsTime && p.RecordDate <= neTime).Sum(p => p.Waste_Weight); double total_Waste = 0; if (Waste_Num == null) { total_Waste = 0; } else { total_Waste = (double)Waste_Num; } double total_all = total_OK + total_NO + total_Waste; All_totalList.Add(Math.Round(total_all / 1000, 2)); if (total_all > 0) { OK_L_List.Add(Math.Round((total_OK / total_all) * 100, 2)); } else { OK_L_List.Add(0); } } sb.Append("<table border='1' width='1000'>"); sb.Append("<tr>"); sb.Append("<td width='50'></td>"); foreach (var item in titleList) { sb.Append("<td width='50'>" + item + "</td>"); } sb.Append("</tr>"); sb.Append("<tr>"); sb.Append("<td width='50'>目标值</td>"); foreach (var item in OK_L_List) { sb.Append("<td width='50'>98%</td>"); } sb.Append("</tr>"); sb.Append("<tr>"); sb.Append("<td width='50'>合格件耗用原料</td>"); foreach (var item in totalList) { sb.Append("<td width='50'>" + item + "</td>"); } sb.Append("</tr>"); sb.Append("<tr>"); sb.Append("<td width='50'>总耗用原料</td>"); foreach (var item in All_totalList) { sb.Append("<td width='50'>" + item + "</td>"); } sb.Append("</tr>"); sb.Append("<tr>"); sb.Append("<td width='50'>原料利用率</td>"); foreach (var item in OK_L_List) { sb.Append("<td width='50'>" + item + "%</td>"); } sb.Append("</tr>"); sb.Append("</table>"); } return sb.ToString(); } catch (Exception ex) { LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod()); return null; } } public EcharBarModel SearchMaterialAvailabilityMonthBar(string StartTime) { try { EcharBarModel md = new EcharBarModel(); var p_info = ef.tb_Plastic.Where(p => p.Weight != null); DateTime sTime = Convert.ToDateTime(StartTime); DataTable dt = dal.SearchByTime(sTime.Year + "-01-01", sTime.Year + "-12-31"); if (dt != null && dt.Rows.Count > 0) { List<string> titleList = new List<string>(); List<double> totalList = new List<double>(); List<double> No_totalList = new List<double>(); List<double> OK_L_List = new List<double>(); List<double> T_L_List = new List<double>(); for (int i = 0; i < 12; i++) { DateTime startT = Convert.ToDateTime(sTime.Year + "-01-01"); titleList.Add((i + 1) + "月"); int days = System.Threading.Thread.CurrentThread.CurrentUICulture.Calendar.GetDaysInMonth(startT.Year, (i + 1)); string starTime = Convert.ToDateTime(sTime.Year + "-" + (i + 1) + "-01").ToString("yyyy-MM-dd"); string entTime = Convert.ToDateTime(sTime.Year + "-" + (i + 1) + "-" + days).ToString("yyyy-MM-dd"); var listAddress = (from myRow in dt.AsEnumerable() where myRow.Field<string>(3).CompareTo(Convert.ToDateTime(sTime.Year + "-" + (i + 1) + "-01").ToString("yyyy-MM-dd")) >= 0 && myRow.Field<string>(3).CompareTo(Convert.ToDateTime(sTime.Year + "-" + (i + 1) + "-" + days).ToString("yyyy-MM-dd")) <= 0 group myRow by new { StockNo = myRow.ItemArray[5] } into g select new { StockNo = (string)g.Key.StockNo, total_ok = g.Sum(c => (int)c.ItemArray[7]), total_no = g.Sum(c => (int)c.ItemArray[8]) }); double total_OK = 0; double total_NO = 0; foreach (var item in listAddress) { string stockNo = item.StockNo; var w_info = p_info.FirstOrDefault(p => p.StockNo.Equals(stockNo)); if (w_info != null) { total_OK += (double)(w_info.Weight * item.total_ok); total_NO += (double)(w_info.Weight * item.total_no); } } totalList.Add(Math.Round(total_OK / 1000, 2)); No_totalList.Add(Math.Round(total_NO / 1000, 2)); DateTime nsTime = Convert.ToDateTime(starTime + " 00:00:00"); DateTime neTime = Convert.ToDateTime(entTime + " 23:59:59"); var Waste_Num = ef.tb_Injection_Record.Where(p => p.RecordDate >= nsTime && p.RecordDate <= neTime).Sum(p => p.Waste_Weight); double total_Waste = 0; if (Waste_Num == null) { total_Waste = 0; } else { total_Waste = (double)Waste_Num; } double total_all = total_OK + total_NO + total_Waste; if (total_all > 0) { OK_L_List.Add(Math.Round((total_OK / total_all) * 100, 2)); } else { OK_L_List.Add(0); } } foreach (var item in OK_L_List) { T_L_List.Add(98); } md.categories = titleList; md.QualifiedData = OK_L_List; md.TargetData = T_L_List; } return md; } catch (Exception ex) { LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod()); return null; } } public List<List<string>> SearchMaterialAvailabilityMonthForExcel(string StartTime) { try { List<List<string>> list = new List<List<string>>(); var p_info = ef.tb_Plastic.Where(p => p.Weight != null); DateTime sTime = Convert.ToDateTime(StartTime); DataTable dt = dal.SearchByTime(sTime.Year + "-01-01", sTime.Year + "-12-31"); if (dt != null && dt.Rows.Count > 0) { List<string> titleList = new List<string>(); List<double> totalList = new List<double>(); List<double> No_totalList = new List<double>(); List<double> All_totalList = new List<double>(); List<double> OK_L_List = new List<double>(); for (int i = 0; i < 12; i++) { DateTime startT = Convert.ToDateTime(sTime.Year + "-01-01"); titleList.Add((i + 1) + "月"); int days = System.Threading.Thread.CurrentThread.CurrentUICulture.Calendar.GetDaysInMonth(startT.Year, (i + 1)); string starTime = Convert.ToDateTime(sTime.Year + "-" + (i + 1) + "-01").ToString("yyyy-MM-dd"); string entTime = Convert.ToDateTime(sTime.Year + "-" + (i + 1) + "-" + days).ToString("yyyy-MM-dd"); var listAddress = (from myRow in dt.AsEnumerable() where myRow.Field<string>(3).CompareTo(Convert.ToDateTime(sTime.Year + "-" + (i + 1) + "-01").ToString("yyyy-MM-dd")) >= 0 && myRow.Field<string>(3).CompareTo(Convert.ToDateTime(sTime.Year + "-" + (i + 1) + "-" + days).ToString("yyyy-MM-dd")) <= 0 group myRow by new { StockNo = myRow.ItemArray[5] } into g select new { StockNo = (string)g.Key.StockNo, total_ok = g.Sum(c => (int)c.ItemArray[7]), total_no = g.Sum(c => (int)c.ItemArray[8]) }); double total_OK = 0; double total_NO = 0; foreach (var item in listAddress) { string stockNo = item.StockNo; var w_info = p_info.FirstOrDefault(p => p.StockNo.Equals(stockNo)); if (w_info != null) { total_OK += (double)(w_info.Weight * item.total_ok); total_NO += (double)(w_info.Weight * item.total_no); } } totalList.Add(Math.Round(total_OK / 1000, 2)); No_totalList.Add(Math.Round(total_NO / 1000, 2)); DateTime nsTime = Convert.ToDateTime(starTime + " 00:00:00"); DateTime neTime = Convert.ToDateTime(entTime + " 23:59:59"); var Waste_Num = ef.tb_Injection_Record.Where(p => p.RecordDate >= nsTime && p.RecordDate <= neTime).Sum(p => p.Waste_Weight); double total_Waste = 0; if (Waste_Num == null) { total_Waste = 0; } else { total_Waste = (double)Waste_Num; } double total_all = total_OK + total_NO + total_Waste; All_totalList.Add(Math.Round(total_all / 1000, 2)); if (total_all > 0) { OK_L_List.Add(Math.Round((total_OK / total_all) * 100, 2)); } else { OK_L_List.Add(0); } } List<string> title_ = new List<string>(); title_.Add(""); title_.AddRange(titleList); list.Add(title_); List<string> tag_L_ = new List<string>(); tag_L_.Add("目标值"); foreach (var item in OK_L_List) { tag_L_.Add("98%"); } list.Add(tag_L_); List<string> total_ = new List<string>(); total_.Add("合格件耗用原料"); foreach (var item in totalList) { total_.Add(item.ToString()); } list.Add(total_); List<string> No_total_ = new List<string>(); No_total_.Add("总耗用原料"); foreach (var item in All_totalList) { No_total_.Add(item.ToString()); } list.Add(No_total_); List<string> OK_L_ = new List<string>(); OK_L_.Add("原料利用率"); foreach (var item in OK_L_List) { OK_L_.Add(item.ToString() + "%"); } list.Add(OK_L_); } return list; } catch (Exception ex) { LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod()); return null; } } #endregion #region 注塑生产记录表 public string SearchProductInjectionRecord(string StartTime, string EndTime) { var defectList = ef.tb_Defect.ToList(); var defectInfo = defectList.Where(p => p.LineID.Equals(defectList.FirstOrDefault().LineID)).OrderBy(p => p.DefectName).Select(p => p.DefectName).ToList(); var DownReasonList = ef.tb_Inhection_DownReason.OrderBy(p => p.Reason).Select(p => p.Reason).ToList(); DataTable dt = dal.SearchProductInjectionRecord(Convert.ToDateTime(StartTime).ToString("yyyy-MM-dd"), Convert.ToDateTime(EndTime).ToString("yyyy-MM-dd")); DataTable dt2 = dal.SearchProductInjectionRecordBadReason(Convert.ToDateTime(StartTime).ToString("yyyy-MM-dd"), Convert.ToDateTime(EndTime).ToString("yyyy-MM-dd")); List<InjectionBadReasonModel> list = Tool.ConvertTo<InjectionBadReasonModel>(dt2).ToList(); DataTable dt3 = dal.SearchProductInjectionRecordDownReason(Convert.ToDateTime(StartTime).ToString("yyyy-MM-dd"), Convert.ToDateTime(EndTime).ToString("yyyy-MM-dd")); List<InjectionRecordDownReasonModel> list3 = Tool.ConvertTo<InjectionRecordDownReasonModel>(dt3).ToList(); StringBuilder sb = new StringBuilder(100); sb.Append("<table border='1' style='text-align:center;vertical-align:middle;'>"); sb.Append("<tr>"); sb.Append("<td width='50' rowspan='2'>日期</td>"); sb.Append("<td width='50' rowspan='2'>班次</td>"); sb.Append("<td width='50' rowspan='2'>注塑机台</td>"); sb.Append("<td width='50' rowspan='2'>开机时间</td>"); sb.Append("<td width='50' rowspan='2'>关机时间</td>"); sb.Append("<td width='50' rowspan='2'>产品性质</td>"); sb.Append("<td width='50' rowspan='2'>产品名称</td>"); sb.Append("<td width='50' rowspan='2'>原料名称</td>"); //sb.Append("<td width='50' rowspan='2'>原料牌号</td>"); sb.Append("<td width='50' rowspan='2'>原料批次号</td>"); sb.Append("<td width='50' rowspan='2'>标准开机时间</td>"); sb.Append("<td width='50' rowspan='2'>标准周期</td>"); sb.Append("<td width='50' rowspan='2'>实际周期</td>"); sb.Append("<td width='50' rowspan='2'>计划数量</td>"); sb.Append("<td width='50' rowspan='2'>合格数量</td>"); sb.Append("<td width='50' rowspan='2'>总合格数量</td>"); sb.Append("<td width='50' rowspan='2'>不良数量</td>"); sb.Append("<td width='50' colspan='" + defectInfo.Count + "'>不良原因</td>"); sb.Append("<td width='50' rowspan='2'>产品毛重</td>"); sb.Append("<td width='50' rowspan='2'>废料块</td>"); sb.Append("<td width='50' rowspan='2'>浇口重量</td>"); sb.Append("<td width='50' rowspan='2'>产品耗用原料</td>"); sb.Append("<td width='50' rowspan='2'>合格率</td>"); sb.Append("<td width='50' rowspan='2'>完成率</td>"); sb.Append("<td width='50' rowspan='2'>计划工时</td>"); sb.Append("<td width='50' rowspan='2'>产出工时</td>"); sb.Append("<td width='50' colspan='2'>停机时间</td>"); sb.Append("<td width='50' colspan='3'>换膜</td>"); sb.Append("<td width='50' rowspan='2'>计划停机</td>"); sb.Append("<td width='50' colspan='" + DownReasonList.Count + "'>停机原因</td>"); sb.Append("</tr>"); sb.Append("<tr>"); foreach (var item in defectInfo) { sb.Append("<td width='50'>" + item + "</td>"); } sb.Append("<td width='50'>计划停机+换模时间</td>"); sb.Append("<td width='50'>非计划停机</td>"); sb.Append("<td width='50'>换膜</td>"); sb.Append("<td width='50'>交班</td>"); sb.Append("<td width='50'>接班</td>"); foreach (var item in DownReasonList) { sb.Append("<td width='50'>" + item + "</td>"); } sb.Append("</tr>"); try { if (dt != null && dt.Rows.Count > 0) { for (int i = 0; i < dt.Rows.Count; i++) { sb.Append("<tr>"); sb.Append("<td width='50'>" + dt.Rows[i]["ProductDate"] + "</td>"); sb.Append("<td width='50'>" + dt.Rows[i]["ClassName"].ToString() + "</td>"); sb.Append("<td width='50'>" + dt.Rows[i]["StationNo"] + "</td>");//注塑机台 sb.Append("<td width='50'>" + dt.Rows[i]["BeginTime"] + "</td>");//开机时间 sb.Append("<td width='50'>" + dt.Rows[i]["EndTime"] + "</td>");//关机时间 sb.Append("<td width='50'>正常</td>");//产品性质 sb.Append("<td width='50'>" + dt.Rows[i]["ProductName"] + "</td>");//产品名称 sb.Append("<td width='50'>" + dt.Rows[i]["MaterialName"] + "</td>");//原料名称 //sb.Append("<td width='50'></td>");//原料牌号 sb.Append("<td width='50'>" + dt.Rows[i]["BatchNo"] + "</td>");//原料批次号 sb.Append("<td width='50'>" + dt.Rows[i]["OpenDebugTime"] + "</td>");//标准开机时间 decimal cycle_Time = dt.Rows[i]["CycleTime"] == DBNull.Value ? 0 : Convert.ToDecimal(dt.Rows[i]["CycleTime"]); sb.Append("<td width='50'>" + cycle_Time + "</td>");//标准周期 decimal real_Cycle = dt.Rows[i]["RealCycle"] == DBNull.Value ? 0 : Convert.ToDecimal(dt.Rows[i]["RealCycle"]); decimal product_count = dt.Rows[i]["ProductCount"] == DBNull.Value ? 0 : Convert.ToDecimal(dt.Rows[i]["ProductCount"]); decimal bad_count = dt.Rows[i]["BadCount"] == DBNull.Value ? 0 : Convert.ToDecimal(dt.Rows[i]["BadCount"]); decimal weight = dt.Rows[i]["Weight"] == DBNull.Value ? 0 : Convert.ToDecimal(dt.Rows[i]["Weight"]); decimal plan_count = dt.Rows[i]["PlanCount"] == DBNull.Value ? 0 : Convert.ToDecimal(dt.Rows[i]["PlanCount"]); sb.Append("<td width='50'>" + real_Cycle + "</td>");//实际周期 sb.Append("<td width='50'>" + dt.Rows[i]["PlanCount"] + "</td>");//计划数量 sb.Append("<td width='50'>" + product_count + "</td>");//合格数量 sb.Append("<td width='50'>" + (product_count + bad_count + list.Where(p => "开机报废;".Equals(p.BadReason)).Count()) + "</td>");//总合格数量 sb.Append("<td width='50'>" + dt.Rows[i]["BadCount"] + "</td>");//不良数量 for (int k = 0; k < defectInfo.Count; k++) { sb.Append("<td width='50'>" + list.Where(p => p.BadReason.Equals(defectInfo[k] + ";")).Count() + "</td>"); } sb.Append("<td width='50'>" + dt.Rows[i]["Weight"] + "</td>");//产品毛重(总合格数量+不良数量)*产品毛重 sb.Append("<td width='50'>" + dt.Rows[i]["Waste_Weight"] + "</td>");//废料块 sb.Append("<td width='50'>" + dt.Rows[i]["JK_Weight"] + "</td>");//浇口重量 sb.Append("<td width='50'>" + (product_count + bad_count) * weight + "</td>");//产品耗用原料 if ((product_count + bad_count) == 0) { sb.Append("<td width='50'>0%</td>");//合格率(总合格数/(总合格数+不良数)) } else { sb.Append("<td width='50'>" + Math.Round((product_count / (product_count + bad_count)) * 100, 2) + "%</td>");//合格率(总合格数/(总合格数+不良数)) } if (plan_count == 0) { sb.Append("<td width='50'>0%</td>");//完成率 } else { sb.Append("<td width='50'>" + Math.Round((product_count / plan_count) * 100, 2) + "%</td>");//完成率(总合格数/计划数) } sb.Append("<td width='50'>" + Math.Round((plan_count * cycle_Time) / 60, 2) + "</td>");//计划工时(计划数量*标准周期/60) sb.Append("<td width='50'>" + Math.Round((plan_count * real_Cycle) / 60, 2) + "</td>");//产出工时(计划数量*实际周期/60) var listR = list3.Where(p => p.DownTypeName != null && p.PlanID.Equals(dt.Rows[i]["PlanID"])).ToList(); long x = listR.Where(p => p.DownTypeName.Contains("计划停机")).Sum(p => p.DownTime); long x1 = listR.Where(p => p.DownTypeName.Contains("换模时间")).Sum(p => p.DownTime); sb.Append("<td width='50'>" + (x + x1) + "</td>");//计划停机+换模时间 sb.Append("<td width='50'>" + listR.Where(p => p.DownTypeName.Contains("非计划停机")).Sum(p => p.DownTime) + "</td>"); sb.Append("<td width='50'>" + listR.Where(p => p.DownTypeName.Contains("换模")).Sum(p => p.DownTime) + "</td>"); sb.Append("<td width='50'>" + listR.Where(p => p.DownTypeName.Contains("交班")).Sum(p => p.DownTime) + "</td>"); sb.Append("<td width='50'>" + listR.Where(p => p.DownTypeName.Contains("接班")).Sum(p => p.DownTime) + "</td>"); sb.Append("<td width='50'>" + listR.Where(p => p.DownTypeName.Contains("计划停机")).Sum(p => p.DownTime) + "</td>"); for (int k = 0; k < DownReasonList.Count; k++) { sb.Append("<td width='50'>" + list3.Where(p => p.Reason != null && p.PlanID.Equals(dt.Rows[i]["PlanID"]) && p.Reason.Contains(DownReasonList[k])).Sum(p => p.DownTime) + "</td>"); } sb.Append("</tr>"); } } } catch (Exception ex) { throw; } sb.Append("</table>"); return sb.ToString(); } private string CheckWorkClass(string StartTime) { try { if (true) { string time = StartTime.Substring(0, StartTime.IndexOf(" ")); if (DateTime.Compare(Convert.ToDateTime(StartTime), Convert.ToDateTime(time + " 08:00:00")) > 0 && DateTime.Compare(Convert.ToDateTime(time + " 19:59:59"), Convert.ToDateTime(StartTime)) > 0) { return "A"; } return "B"; } } catch (Exception ex) { } return ""; } public List<List<string>> SearchProductInjectionRecordForExcel(string StartTime, string EndTime) { List<List<string>> listExcel = new List<List<string>>(); var defectList = ef.tb_Defect.ToList(); var defectInfo = defectList.Where(p => p.LineID.Equals(defectList.FirstOrDefault().LineID)).OrderBy(p => p.DefectName).Select(p => p.DefectName).ToList(); var DownReasonList = ef.tb_Inhection_DownReason.OrderBy(p => p.Reason).Select(p => p.Reason).ToList(); DataTable dt = dal.SearchProductInjectionRecord(Convert.ToDateTime(StartTime).ToString("yyyy-MM-dd"), Convert.ToDateTime(EndTime).ToString("yyyy-MM-dd")); DataTable dt2 = dal.SearchProductInjectionRecordBadReason(Convert.ToDateTime(StartTime).ToString("yyyy-MM-dd"), Convert.ToDateTime(EndTime).ToString("yyyy-MM-dd")); List<InjectionBadReasonModel> list = Tool.ConvertTo<InjectionBadReasonModel>(dt2).ToList(); DataTable dt3 = dal.SearchProductInjectionRecordDownReason(Convert.ToDateTime(StartTime).ToString("yyyy-MM-dd"), Convert.ToDateTime(EndTime).ToString("yyyy-MM-dd")); List<InjectionRecordDownReasonModel> list3 = Tool.ConvertTo<InjectionRecordDownReasonModel>(dt3).ToList(); List<string> titleList = new List<string>(); titleList.Add(""); titleList.Add(""); titleList.Add(""); titleList.Add(""); titleList.Add(""); titleList.Add(""); titleList.Add(""); titleList.Add(""); titleList.Add(""); titleList.Add(""); titleList.Add(""); titleList.Add(""); titleList.Add(""); titleList.Add(""); titleList.Add(""); titleList.Add(""); foreach (var item in defectInfo) { titleList.Add("不良原因"); } titleList.Add(""); titleList.Add(""); titleList.Add(""); titleList.Add(""); titleList.Add(""); titleList.Add(""); titleList.Add(""); titleList.Add(""); titleList.Add("停机时间"); titleList.Add("停机时间"); titleList.Add("换膜"); titleList.Add("换膜"); titleList.Add("换膜"); titleList.Add(""); foreach (var item in DownReasonList) { titleList.Add("停机原因"); } listExcel.Add(titleList); List<string> titleList2 = new List<string>(); titleList2.Add("日期"); titleList2.Add("班次"); titleList2.Add("注塑机台"); titleList2.Add("开机时间"); titleList2.Add("关机时间"); titleList2.Add("产品性质"); titleList2.Add("产品名称"); titleList2.Add("原料名称"); titleList2.Add("原料批次号"); titleList2.Add("标准开机时间"); titleList2.Add("标准周期"); titleList2.Add("实际周期"); titleList2.Add("计划数量"); titleList2.Add("合格数量"); titleList2.Add("总合格数量"); titleList2.Add("不良数量"); foreach (var item in defectInfo) { titleList2.Add(item); } titleList2.Add("产品毛重"); titleList2.Add("废料块"); titleList2.Add("浇口重量"); titleList2.Add("产品耗用原料"); titleList2.Add("合格率"); titleList2.Add("完成率"); titleList2.Add("计划工时"); titleList2.Add("产出工时"); titleList2.Add("计划停机+换模时间"); titleList2.Add("非计划停机"); titleList2.Add("换膜"); titleList2.Add("交班"); titleList2.Add("接班"); titleList2.Add("计划停机"); foreach (var item in DownReasonList) { titleList2.Add(item); } listExcel.Add(titleList2); if (dt != null && dt.Rows.Count > 0) { for (int i = 0; i < dt.Rows.Count; i++) { List<string> conList = new List<string>(); conList.Add(dt.Rows[i]["ProductDate"].ToString()); conList.Add(dt.Rows[i]["ClassName"].ToString()); conList.Add(dt.Rows[i]["StationNo"].ToString()); conList.Add(dt.Rows[i]["BeginTime"].ToString()); conList.Add(dt.Rows[i]["EndTime"].ToString()); conList.Add("正常"); conList.Add(dt.Rows[i]["ProductName"].ToString()); conList.Add(dt.Rows[i]["MaterialName"].ToString()); conList.Add(dt.Rows[i]["BatchNo"].ToString()); conList.Add(dt.Rows[i]["OpenDebugTime"].ToString()); decimal cycle_Time = dt.Rows[i]["CycleTime"] == DBNull.Value ? 0 : Convert.ToDecimal(dt.Rows[i]["CycleTime"]); conList.Add(cycle_Time.ToString()); decimal real_Cycle = dt.Rows[i]["RealCycle"] == DBNull.Value ? 0 : Convert.ToDecimal(dt.Rows[i]["RealCycle"]); decimal product_count = dt.Rows[i]["ProductCount"] == DBNull.Value ? 0 : Convert.ToDecimal(dt.Rows[i]["ProductCount"]); decimal bad_count = dt.Rows[i]["BadCount"] == DBNull.Value ? 0 : Convert.ToDecimal(dt.Rows[i]["BadCount"]); decimal weight = dt.Rows[i]["Weight"] == DBNull.Value ? 0 : Convert.ToDecimal(dt.Rows[i]["Weight"]); decimal plan_count = dt.Rows[i]["PlanCount"] == DBNull.Value ? 0 : Convert.ToDecimal(dt.Rows[i]["PlanCount"]); decimal openFailCount = 0; conList.Add(real_Cycle.ToString()); conList.Add(dt.Rows[i]["PlanCount"].ToString()); conList.Add(product_count.ToString()); conList.Add((product_count + bad_count + defectInfo.Where(p => "开机报废".Equals(p)).Count()).ToString()); conList.Add(dt.Rows[i]["BadCount"].ToString()); for (int k = 0; k < defectInfo.Count; k++) { conList.Add(list.Where(p => p.BadReason.Equals(defectInfo[k] + ";")).Count().ToString()); } conList.Add(dt.Rows[i]["Weight"].ToString()); conList.Add(dt.Rows[i]["Waste_Weight"].ToString()); conList.Add(dt.Rows[i]["JK_Weight"].ToString()); conList.Add(((product_count + bad_count) * weight).ToString()); if ((product_count + bad_count) == 0) { conList.Add("0%"); } else { conList.Add((Math.Round((product_count / (product_count + bad_count)) * 100, 2)).ToString()); } if (plan_count == 0) { conList.Add("0%"); } else { conList.Add((Math.Round((product_count / plan_count) * 100, 2)).ToString()); } conList.Add((Math.Round((plan_count * cycle_Time) / 60, 2)).ToString()); conList.Add((Math.Round((plan_count * real_Cycle) / 60, 2)).ToString()); var listR = list3.Where(p => p.DownTypeName != null && p.PlanID.Equals(dt.Rows[i]["PlanID"])).ToList(); long x = listR.Where(p => p.DownTypeName.Contains("计划停机")).Sum(p => p.DownTime); long x1 = listR.Where(p => p.DownTypeName.Contains("换模时间")).Sum(p => p.DownTime); conList.Add((x + x1).ToString()); conList.Add((listR.Where(p => p.DownTypeName.Contains("非计划停机")).Sum(p => p.DownTime)).ToString()); conList.Add((listR.Where(p => p.DownTypeName.Contains("换模")).Sum(p => p.DownTime)).ToString()); conList.Add((listR.Where(p => p.DownTypeName.Contains("交班")).Sum(p => p.DownTime)).ToString()); conList.Add((listR.Where(p => p.DownTypeName.Contains("接班")).Sum(p => p.DownTime)).ToString()); conList.Add((listR.Where(p => p.DownTypeName.Contains("计划停机")).Sum(p => p.DownTime)).ToString()); for (int k = 0; k < DownReasonList.Count; k++) { conList.Add((list3.Where(p => p.Reason != null && p.PlanID.Equals(dt.Rows[i]["PlanID"]) && p.Reason.Contains(DownReasonList[k])).Sum(p => p.DownTime)).ToString()); } listExcel.Add(conList); } } return listExcel; } #endregion public DataTable SearchInfoByPlanID(string planID) { try { return dal.SearchInfoByPlanID(planID); } catch (Exception ex) { LogErrBLL.AddInfo(ex.ToString(),MethodBase.GetCurrentMethod()); return null; } } } }