using Newtonsoft.Json; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Net.Http; using System.Text; using System.Threading.Tasks; using System.Web; using System.Windows.Forms; namespace EquipmentCollectionForm { public partial class EquipmentCollectionForm : Form { private json objJsonResult = new json(); DataTable dt = new DataTable(); public DBHelper oCN = new DBHelper(); public string TimeDate = ""; public EquipmentCollectionForm() { InitializeComponent(); } private void EquipmentCollectionForm_Load(object sender, EventArgs e) { this.txtBegin.ReadOnly = true; this.txtEnd.ReadOnly = true; this.txtLj.ReadOnly = true; this.btnSave.Enabled = false; this.txtHMaterNumber.ReadOnly = true; //this.btnRest.Enabled = false; bindCbox(); } private void btnBegin_Click(object sender, EventArgs e) { if (this.txtHBathNo.Text == "" || this.txtHBathNo.ReadOnly == false) //if (false) { MessageBox.Show("请输入批次号进行确认!"); } else { this.txtBegin.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); //this.txtBegin.Text = "2024-09-24 09:47:39"; this.btnBegin.Enabled = false; if (cmbEquipFile.SelectedIndex == 1) { this.txtHBathNo.ReadOnly = true; this.timer.Enabled = true; } } } private void btnEnd_Click(object sender, EventArgs e) { if (this.txtBegin.Text == "") { MessageBox.Show("请点击开始按钮进行开始确认!"); } else { this.txtEnd.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); //this.txtEnd.Text = "2024-09-24 09:52:39"; this.btnEnd.Enabled = false; if (cmbEquipFile.SelectedIndex == 1) { this.btnSave.Enabled = true; } } } private void btnLj_Click(object sender, EventArgs e) { if (this.txtEnd.Text == "") { MessageBox.Show("请点击结束按钮进行结束确认!"); } else { //路径赋值给文本 using (OpenFileDialog openFile = new OpenFileDialog()) { openFile.Multiselect = true; // 允许选择多个文件 DialogResult result = openFile.ShowDialog(); if (result == DialogResult.OK) { //保存按钮灰掉 this.btnSave.Enabled = true; string selectedFolderPath = openFile.FileName; this.txtLj.Text = selectedFolderPath; objJsonResult = Xt_CSVReadText(openFile.FileNames, 1); dt = objJsonResult.dataTable; if (objJsonResult.code == "0") { MessageBox.Show(objJsonResult.Message); } else { for (int i = 0; i < dt.Rows.Count; i++) { ListData.Items.Add("底孔直径:" + dt.Rows[i]["BottomHoleDiameter"].ToString() + ",有无螺牙检测数据:" + dt.Rows[i]["TestingData"].ToString() + ",有无螺牙检测结果:" + dt.Rows[i]["DetectionResult"].ToString() + ",时间:" + dt.Rows[i]["HDate"].ToString()); } } } } } } //读取CSV文件数据 根据文件路径找到对应文件 并获取对应的数据 public json Xt_CSVReadText(string[] FilePath, int num) { try { DataTable dt = new DataTable(num.ToString()); dt.Columns.Add("BottomHoleDiameter"); dt.Columns.Add("TestingData"); dt.Columns.Add("DetectionResult"); dt.Columns.Add("HDate"); DataTable dt2 = new DataTable(); for (int u = 0; u < FilePath.Length; u++) { using (StreamReader sr = new StreamReader(FilePath[u], Encoding.GetEncoding("gb2312"))) { string[] headers = sr.ReadLine()?.Split(','); if (headers != null && u == 0) { foreach (var header in headers) { dt2.Columns.Add(header.Trim()); } } string line; while ((line = sr.ReadLine()) != null) { var values = line.Split(','); DataRow row = dt2.NewRow(); for (int i = 0; i < values.Length; i++) { // 这里可能需要添加类型转换和错误处理 row[i] = values[i].Trim(); } dt2.Rows.Add(row); } } } DateTime HBegin = DateTime.Parse(this.txtBegin.Text); DateTime HEnd = DateTime.Parse(this.txtEnd.Text); for (int i = 0; i < dt2.Rows.Count; i++) { for (int j = 0; j < 2; j++) { DateTime Now = DateTime.Parse(dt2.Rows[i][dt2.Columns[6]].ToString() + " " + dt2.Rows[i][dt2.Columns[7]].ToString()); if (Now >= HBegin && Now <= HEnd) { DataRow dr = dt.NewRow(); dr["BottomHoleDiameter"] = dt2.Rows[i][dt2.Columns[j]].ToString(); dr["TestingData"] = dt2.Rows[i][dt2.Columns[j + 2]].ToString(); dr["DetectionResult"] = dt2.Rows[i][dt2.Columns[j + 4]].ToString(); dr["HDate"] = DateTime.Parse(dt2.Rows[i][dt2.Columns[6]].ToString() + " " + dt2.Rows[i][dt2.Columns[7]].ToString()).ToString("yyyy-MM-dd HH:mm:ss"); dt.Rows.Add(dr); } } } objJsonResult.code = "1"; objJsonResult.count = 1; objJsonResult.Message = ""; objJsonResult.dataTable = dt; return objJsonResult; } catch (Exception e) { objJsonResult.code = "0"; objJsonResult.count = 0; objJsonResult.Message = e.Message; objJsonResult.dataTable = null; return objJsonResult; } } private void txtHBathNo_KeyUp(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { //this.txtHBathNo.ReadOnly = true; Get_DisplayBard(); } } //查询条码数据 public void Get_DisplayBard() { string HBarCode = this.txtHBathNo.Text; DataSet ds = oCN.RunProcReturn("select HBatchNo,m.HNumber,a.HMaterID from Gy_BarCodeBill a left join Gy_Material m on a.HMaterID = m.HItemID where HBarCode='" + HBarCode + "'", "Gy_BarCodeBill"); if (ds.Tables[0].Rows.Count == 0) { MessageBox.Show("条码查无数据!"); } else { this.txtHBathNo.Text = ds.Tables[0].Rows[0]["HBatchNo"].ToString(); this.txtHMaterNumber.Text = ds.Tables[0].Rows[0]["HNumber"].ToString(); this.HMaterID.Text = ds.Tables[0].Rows[0]["HMaterID"].ToString(); } this.txtHBathNo.ReadOnly = true; } private void btnRest_Click(object sender, EventArgs e) { this.txtHBathNo.Text = ""; this.txtHMaterNumber.Text = ""; this.HMaterID.Text = "0"; this.txtHBathNo.ReadOnly = false; this.btnBegin.Enabled = true; this.txtBegin.Text = ""; this.btnEnd.Enabled = true; this.txtEnd.Text = ""; this.btnSave.Enabled = false; this.txtLj.Text = ""; this.ListData.Items.Clear(); this.timer.Enabled = false; } private async void btnSave_Click(object sender, EventArgs e) { DialogResult dr = MessageBox.Show("确认保存?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); if (dr == DialogResult.Yes) { string Url = DBHelper.GetConfigKey(AppDomain.CurrentDomain.BaseDirectory + "Config/SQLAPI.config", "sUrl"); JsonResult jsonResult = await FindAccessToken(Url); string EquipFile = this.cmbEquipFile.Text; switch (EquipFile) { case "螺母全检": SaveFullInspectionOfNuts(jsonResult.data.token, Url); break; case "螺母压装": SaveNutPressFit(jsonResult.data.token, Url, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); break; case "注塑机": SaveInjectionMoldingMachine(jsonResult.data.token, Url, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); break; } this.btnSave.Enabled = false; } } //螺母全检保存 public async void SaveFullInspectionOfNuts(string token,string url) { try { JsonEquipmentData jsonResult =await FindDeviceList(url, token); if (jsonResult.code != "0") { this.btnSave.Enabled = true; MessageBox.Show("设备列表报错:" + jsonResult.message); } else { string nos = ""; //获取去设备编码 for (int i = 0; i < jsonResult.data.Count; i++) { if (jsonResult.data[i].no == this.cmbEquipFile.SelectedValue.ToString()) { nos = jsonResult.data[i].no; } } string HBegin = this.txtBegin.Text; string HEnd = this.txtEnd.Text; jsonResult = await FindDevicePropCalc(url, token, nos, HBegin, HEnd); if (jsonResult.code != "0") { this.btnSave.Enabled = true; MessageBox.Show("数量获取报错:" + jsonResult.message); } else { double HInSpectQty = 0;//检验数量 double HRightQty = 0;//合格 double HUnRightQty = 0;//不合格 double HUnKnowQty = 0;//可疑 for (int i = 0; i < jsonResult.data.Count; i++) { if (jsonResult.data[i].propId == 173) { HInSpectQty = jsonResult.data[i].sum; } else if (jsonResult.data[i].propId == 469) { HRightQty = jsonResult.data[i].sum; } else if (jsonResult.data[i].propId == 606) { HUnKnowQty = jsonResult.data[i].sum; } else if (jsonResult.data[i].propId == 470) { HUnRightQty = jsonResult.data[i].sum; } } string HNumber = ""; int HSourceID = 0; string HSourceNumber = ""; switch (this.cmbEquipFile.Text) { case "螺母全检": HNumber = "LMJC"; HSourceNumber = "1030"; break; case "螺母压装": HNumber = "LMYZ"; HSourceNumber = "1029"; break; } //查询生产资源 DataSet dsSouce = oCN.RunProcReturn("select * from Gy_Source with(nolock) where HNumber='" + HSourceNumber + "'", "Gy_Source"); if (dsSouce.Tables[0].Rows.Count == 0) { this.btnSave.Enabled = true; MessageBox.Show("生产资源查无数据!"); } else { HSourceID = int.Parse(dsSouce.Tables[0].Rows[0]["HItemID"].ToString()); //查询检验方案 DataSet dataSet = oCN.RunProcReturn(@"select a.HInterID HQCSchemeID,b.HQCCheckItemID, ch.HNumber HQCCheckItemNumber,m.HNumber,HUpLimit,HDownLimit,HTargetVal,a.HProcID,b.HInspectInstruMentID ,b.HAnalysisMethod from Gy_QCCheckProjectMain a with(nolock) inner join Gy_QCCheckProjectSub b with(nolock) on a.HInterID=b.HInterID left join Gy_Material m with(nolock) on a.HMaterID=m.HItemID left join Gy_QCCheckItem ch with(nolock) on b.HQCCheckItemID=ch.HItemID left join Gy_InspectInstruMent ment on b.HInspectInstruMentID=ment.HItemID where m.HNumber='" + this.txtHMaterNumber.Text + "' and ment.HNumber='" + HNumber + "'", "Gy_QCCheckProjectMain"); //保存数据 if (dataSet.Tables[0].Rows.Count > 0) { string sExeReturnInfo = ""; string BillType = "7519"; long HInterID = oCN.CreateBillID_Prod(BillType, ref sExeReturnInfo); string HBillNo = oCN.CreateBillCode(BillType, ref sExeReturnInfo, true); if (dataSet.Tables[0].Rows.Count <= dt.Columns.Count - 1) { oCN.BeginTran(); string HProcID = dataSet.Tables[0].Rows[0]["HProcID"].ToString(); string HMaterID = this.HMaterID.Text; string HQCSchemeID = dataSet.Tables[0].Rows[0]["HQCSchemeID"].ToString(); string HBatchNo = this.txtHBathNo.Text; int HLastResults = 1; for (int i = 0; i < dataSet.Tables[0].Rows.Count; i++) { int HLastResult = 1; string HAnalysisMethod = dataSet.Tables[0].Rows[i]["HAnalysisMethod"].ToString(); decimal HUpLimit = 0; decimal HDownLimit = 0; if (HAnalysisMethod == "2") { HUpLimit = decimal.Parse(dataSet.Tables[0].Rows[i]["HTargetVal"].ToString()) + decimal.Parse(dataSet.Tables[0].Rows[i]["HUpLimit"].ToString()); HDownLimit = decimal.Parse(dataSet.Tables[0].Rows[i]["HTargetVal"].ToString()) + decimal.Parse(dataSet.Tables[0].Rows[i]["HDownLimit"].ToString()); } for (int j = 0; j < dt.Columns.Count - 1; j++) { string HQCCheckItemName = ""; switch (dt.Columns[j].ColumnName) { case "BottomHoleDiameter": HQCCheckItemName = "DKZJ"; break; case "TestingData": HQCCheckItemName = "LYJCSJ"; break; case "DetectionResult": HQCCheckItemName = "LYJCJG"; break; } //SRM@101.2@VEN00005@CGDD000167@1.02.002.002@20231129@1000 if (dataSet.Tables[0].Rows[i]["HQCCheckItemNumber"].ToString().Contains(HQCCheckItemName)) { for (int k = 0; k < dt.Rows.Count; k++) { if (DateTime.Parse(dt.Rows[k]["HDate"].ToString()) >= DateTime.Parse(HBegin) && DateTime.Parse(dt.Rows[k]["HDate"].ToString()) <= DateTime.Parse(HEnd)) { decimal HInSpectValue = decimal.Parse(dt.Rows[k][dt.Columns[j].ColumnName].ToString()); int HInSpectResult = 1; if (HAnalysisMethod == "2") { HInSpectResult = (HInSpectValue > HUpLimit || HDownLimit > HInSpectValue) ? 0 : 1; } else { HInSpectResult = int.Parse(HInSpectValue.ToString()); } if (HInSpectResult == 1 && HLastResult != 0) { HLastResult = 1; } else { HLastResult = 0; } oCN.RunProc("Insert into QC_StockCheckBillSub_ValueGrid " + " (HInterID,HEntryID,HSEQ" + ",HInSpectResult,HInSpectValue,HInSpectValueB,HInSpectValueT)" + "values(" + HInterID + "," + ((i + 1)) + "," + (k + 1) + "" + "," + HInSpectResult + "," + dt.Rows[k][dt.Columns[j].ColumnName].ToString() + "," + dt.Rows[k][dt.Columns[j].ColumnName].ToString() + "," + dt.Rows[k][dt.Columns[j].ColumnName].ToString() + ") "); } } break; } } oCN.RunProc("Insert into QC_StockCheckBillSub " + " (HInterID,HBillNo_bak,HEntryID,HCloseMan" + ",HEntryCloseDate,HCloseType,HRemark,HSourceInterID" + ",HSourceEntryID,HSourceBillNo,HSourceBillType,HRelationQty,HRelationMoney" + ",HQCCheckItemID,HQCStd,HUnit,HQCNote,HResult" + ",HMax,HMin,HAvg,HSampleSchemeID,HSampleQty,HSampleDamageQty,HAcceptQty" + ",HRejectQty,HSampleUnRightQty,HStatus,HUnitID,HInspectVal,HTargetVal" + ",HUpLimit,HDownLimit,HUpOffSet,HDownOffSet,HKeyInspect,HAnalysisMethod,HInspectInstruMentID,HInspectResult" + ") values(" + HInterID + ",'" + HBillNo + "'," + (i + 1) + ",''" + ",getdate(),0,'',0" + ",0,'','',0,0" + "," + dataSet.Tables[0].Rows[i]["HQCCheckItemID"].ToString() + ",'" + dataSet.Tables[0].Rows[i]["HTargetVal"].ToString() + "','','','" + HLastResult + "'" + ",'" + dataSet.Tables[0].Rows[i]["HUpLimit"].ToString() + "','" + dataSet.Tables[0].Rows[i]["HDownLimit"].ToString() + "','',0,0,0,0" + ",0,0,'',0,'','" + dataSet.Tables[0].Rows[i]["HTargetVal"].ToString() + "'" + ",'" + dataSet.Tables[0].Rows[i]["HUpLimit"].ToString() + "','" + dataSet.Tables[0].Rows[i]["HDownLimit"].ToString() + "','','',0,'" + HAnalysisMethod + "'," + dataSet.Tables[0].Rows[i]["HInspectInstruMentID"].ToString() + ",'" + HLastResult + "'" + ") "); if (HLastResult == 1 && HLastResults != 0) { HLastResults = 1; } else { HLastResults = 0; } } //主表 oCN.RunProc("Insert Into QC_StockCheckBillMain " + "(HBillType,HBillSubType,HInterID,HBillNo,HBillStatus,HDate,HMaker,HMakeDate" + ",HYear,HPeriod,HRemark" + ",HSourceID,HICMOInterID,HICMOBillNo,HICMOQty,HProcExchInterID,HProcExchEntryID" + ",HProcExchBillNo,HProcExchQty,HMaterID,HFirstCheckEmp,HLastResult" + ",HMainSourceInterID,HMainSourceEntryID,HMainSourceBillNo,HMainSourceBillType,HICMOEntryID,HQCSchemeID,HShiftsID,HErrTreatment" + ",HProcID,HBatchNo,HInSpectQty ,HRightQty ,HUnRightQty ,HUnKnowQty " + ") " + " values('" + BillType + "','" + BillType + "'," + HInterID + ",'" + HBillNo + "',1,getdate(),'',getdate()" + "," + DateTime.Now.Year + "," + DateTime.Now.Month + ",''" + "," + HSourceID + ",0,'',0,0,0" + ",'',0," + HMaterID + ",'', " + HLastResults + ",0,0,'','',0," + HQCSchemeID + ",0,''" + "," + HProcID + ",'" + HBatchNo + "',"+ HInSpectQty + ","+ HRightQty + ", "+ HUnRightQty + ", " + HUnKnowQty + ") "); oCN.Commit(); MessageBox.Show("保存成功!"); //this.btnRest.Enabled = true; } else { this.btnSave.Enabled = true; MessageBox.Show("当前物料的检验方案与Excel的列不匹配!"); } } else { this.btnSave.Enabled = true; MessageBox.Show("当前物料没有对应的检验方案!"); } } } } } catch (Exception e) { this.btnSave.Enabled = true; MessageBox.Show("保存失败!" + e.Message); } } //获取登录的token public async Task getUrl(string url, FormUrlEncodedContent formData) { // 创建 HttpClient 实例 using (var client = new HttpClient()) { // 发送 POST 请求,并等待响应 HttpResponseMessage response = await client.PostAsync(url, formData); Dictionary dic = new Dictionary(); JsonResult jsonResult = new JsonResult(); // 检查响应是否成功 if (response.IsSuccessStatusCode) { // 处理成功响应的逻辑 string responseBody = await response.Content.ReadAsStringAsync(); jsonResult = JsonConvert.DeserializeObject(responseBody); } else { // 处理失败响应的逻辑 MessageBox.Show("请求失败,状态码:" + response.StatusCode); } return jsonResult; } } /// /// 获取设备列表 /// /// /// /// public async Task EquipmentList(string url, StringContent postData,string Type) { // 创建 HttpClient 实例 using (HttpClient client = new HttpClient()) { JsonEquipmentData jsonResult = new JsonEquipmentData(); try { HttpResponseMessage response; if (Type == "POST") { // 发起 POST 请求 response = await client.PostAsync(url, postData); } else { // 发起 get 请求 response = await client.GetAsync(url); } // 确保请求成功 if (response.IsSuccessStatusCode) { // 读取响应内容 string responseBody = await response.Content.ReadAsStringAsync(); jsonResult = JsonConvert.DeserializeObject(responseBody); } else { MessageBox.Show($"请求失败,: {response.StatusCode}"); } } catch (Exception ex) { MessageBox.Show("请求报错:" + ex.Message); } return jsonResult; } } //获取ID public async Task FindAccessToken(string url) { string urls = url + EquipmentType.One; // 准备要发送的表单数据 var formData = new FormUrlEncodedContent(new[] { new KeyValuePair("userName", "admin"), new KeyValuePair("password", "admin") // 添加更多键值对,根据您的需要 }); JsonResult jsonResult = await getUrl(urls, formData); return jsonResult; } //获取设备列表 public async Task FindDeviceList(string url,string token) { //设备列表接口 string urls = url + EquipmentType.Two; // 准备要发送的表单数据 var postData = new StringContent("{\"token\":\"" + token + "\"}", System.Text.Encoding.UTF8, "application/json"); JsonEquipmentData jsonResult = await EquipmentList(urls, postData, "POST"); return jsonResult; } //获取良品、不良品明细 public async Task FindAllDevicePropsDetailByTimeRange(string url, string token,string nos, string HBegin, string HEnd) { nos = nos.Replace(",", "\",\""); string stringJson = "{\"token\":\"" + token + "\",\"deviceNos\":[\"" + nos + "\"],\"startTime\":\"" + HBegin + "\",\"endTime\":\"" + HEnd + "\",\"basePropIds\":[473,474,489,508, 562, 563, 564, 565, 566, 567, 568, 569, 570,571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 597, 600, 601, 602, 603, 604, 605, 593, 594, 595]}"; //设备列表接口 string urls = url + EquipmentType.Nine; // 准备要发送的表单数据 var postData = new StringContent(stringJson, System.Text.Encoding.UTF8, "application/json"); JsonEquipmentData jsonEquipment = await EquipmentList(urls, postData, "POST"); return jsonEquipment; } //获取不良数,合数数,可疑数 总数 public async Task FindDevicePropCalc(string url, string token,string nos,string HBegin,string HEnd) { string stringJson = "{\"token\":\"" + token + "\",\"deviceNo\":\"" + nos + "\",\"propIds\":[606,173,469,470],\"beginTime\":\"" + HBegin + "\",\"endTime\":\"" + HEnd + "\"}"; var postData = new StringContent(stringJson, System.Text.Encoding.UTF8, "application/json"); string urls = url + EquipmentType.Seven; JsonEquipmentData jsonResult = await EquipmentList(urls, postData, "POST"); return jsonResult; } //获取设备运行状态 public async Task FindDeviceStatusByNos(string url, string token, string nos) { nos = nos.Replace(",", "\",\""); nos = "\"" + nos + "\""; string stringJson = "{\"token\":\"" + token + "\",\"nos\":[" + nos + "]}"; var postData = new StringContent(stringJson, System.Text.Encoding.UTF8, "application/json"); string urls = url + EquipmentType.Three; JsonEquipmentData jsonResult = await EquipmentList(urls, postData, "POST"); return jsonResult; } //获取设备时间段产量 public async Task FindProdByNosAndTime(string url, string token, string nos, string HBegin, string HEnd) { nos = nos.Replace(",", "\",\""); nos = "\"" + nos + "\""; string stringJson = "{\"token\":\"" + token + "\",\"nos\":[" + nos + "],\"startTime\":\"" + HBegin + "\",\"endTime\":\"" + HEnd + "\"}"; var postData = new StringContent(stringJson, System.Text.Encoding.UTF8, "application/json"); string urls = url + EquipmentType.Four; JsonEquipmentData jsonResult = await EquipmentList(urls, postData, "POST"); return jsonResult; } //下拉框绑定数据 private void bindCbox() { IList infoList = new List(); Info info1 = new Info() { Id = "CMR_QC_SE_001", Name = "螺母全检" }; Info info2 = new Info() { Id = "CMR_ZZ_SE_001", Name = "螺母压装" }; Info info3 = new Info() { Id = "ZSJ07", Name = "注塑机#07" }; //Info info3 = new Info() { Id = "3", Name = "王五" }; infoList.Add(info1); infoList.Add(info2); infoList.Add(info3); cmbEquipFile.DataSource = infoList; cmbEquipFile.ValueMember = "Id"; cmbEquipFile.DisplayMember = "Name"; this.cmbEquipFile.SelectedIndex = 0; this.cmbEquipFile.DropDownStyle = ComboBoxStyle.DropDownList; } //选择下拉框值更改事件 private void cmbEquipFile_SelectedIndexChanged(object sender, EventArgs e) { if (cmbEquipFile.SelectedIndex == 0) { this.btnLj.Enabled = true; this.timer.Enabled = false; } else { this.btnLj.Enabled = false; DialogResult dr = MessageBox.Show("是否确认开始采集?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); if (dr == DialogResult.Yes) { this.txtHBathNo.ReadOnly = true; this.txtBegin.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); this.btnBegin.Enabled = false; this.timer.Enabled = true; this.Time_CLHB.Enabled = true; } } } //定时获取数据 private async void timer_Tick(object sender, EventArgs e) { string Url = DBHelper.GetConfigKey(AppDomain.CurrentDomain.BaseDirectory + "Config/SQLAPI.config", "sUrl"); string urls = Url + EquipmentType.One; // 准备要发送的表单数据 var formData = new FormUrlEncodedContent(new[] { new KeyValuePair("userName", "admin"), new KeyValuePair("password", "admin") // 添加更多键值对,根据您的需要 }); JsonResult jsonResult = await getUrl(urls, formData); string time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); if (cmbEquipFile.SelectedIndex == 1) { SaveNutPressFit(Url, jsonResult.data.token, time); } else if (cmbEquipFile.SelectedIndex == 2) { SaveInjectionMoldingMachine(jsonResult.data.token, Url, time); } } //螺母压装采集数据 保存 public async void SaveNutPressFit(string Url , string token, string time) { if (TimeDate == "") { TimeDate = this.txtBegin.Text; } this.timer.Enabled = false; JsonEquipmentData jsonResult = await FindDeviceList(Url, token); if (jsonResult.code != "0") { MessageBox.Show("设备列表报错:" + jsonResult.message); } else { string nos = ""; //获取去设备编码 for (int i = 0; i < jsonResult.data.Count; i++) { if (jsonResult.data[i].no.Contains("CMR_ZZ_SE_001")) { nos += jsonResult.data[i].no + ","; } } nos = nos.Substring(0, nos.Length - 1); //TimeDate = "2024-08-14 08:30:39"; //time = "2024-08-14 15:05:39"; JsonEquipmentData jsonEquipment = await FindAllDevicePropsDetailByTimeRange(Url, token, nos, TimeDate, time); var JsonData = "{\"data\":["; for (int i = 0; i < jsonEquipment.data[0].props.Count; i++) { for (int j = 0; j < jsonEquipment.data[0].props[i].datas.Count; j++) { valueData value = JsonConvert.DeserializeObject(jsonEquipment.data[0].props[i].datas[j].value); if (value.type == "良品") { JsonData += "{\"HDate\":\"" + jsonEquipment.data[0].props[i].datas[j].createTime + "\",\"HTechParamName\":\"螺母是否凸出\",\"HResult\":\"OK\",\"HCount\":1,\"HSourceCode\":\"" + nos + "\"},"; } else { JsonData += "{\"HDate\":\"" + jsonEquipment.data[0].props[i].datas[j].createTime + "\",\"HTechParamName\":\"螺母是否凸出\",\"HResult\":\"NG\",\"HCount\":1,\"HSourceCode\":\"" + nos + "\"},"; } JsonData += "{\"HDate\":\"" + jsonEquipment.data[0].props[i].datas[j].createTime + "\",\"HTechParamName\":\"生产周期\",\"HResult\":\"" + value.beat + "\",\"HCount\":1,\"HSourceCode\":\"" + nos + "\"},"; } } jsonEquipment = await FindDevicePropCalc(Url, token, nos, TimeDate, time); for (int i = 0; i < jsonEquipment.data.Count; i++) { //合格数 if (jsonEquipment.data[i].propId == 469) { JsonData += "{\"HDate\":\"" + time + "\",\"HTechParamName\":\"良品数\",\"HResult\":\"OK\",\"HCount\":" + jsonEquipment.data[i].sum + ",\"HSourceCode\":\""+ nos + "\"},"; } //不良数 else if (jsonEquipment.data[i].propId == 470) { JsonData += "{\"HDate\":\"" + time + "\",\"HTechParamName\":\"NG数量\",\"HResult\":\"NG\",\"HCount\":" + jsonEquipment.data[i].sum + ",\"HSourceCode\":\"" + nos + "\"},"; } } JsonData = JsonData.Substring(0, JsonData.Length - 1); JsonData += "]}"; DataSave(JsonData); if (TimeDate != "") { TimeDate = time; } } } //注塑机采集数据 保存 public async void SaveInjectionMoldingMachine(string token, string Url, string time) { ListData.Items.Clear(); if (TimeDate == "") { TimeDate = this.txtBegin.Text; } //this.timer.Enabled = false; //TimeDate = "2024-08-19 19:38:14.540"; //time = "2024-08-19 19:39:14.540"; JsonEquipmentData jsonResult = await FindDeviceList(Url, token); if (jsonResult.code != "0") { MessageBox.Show("设备列表报错:" + jsonResult.message); } else { string nos = ""; //获取去设备编码 for (int i = 0; i < jsonResult.data.Count; i++) { if (jsonResult.data[i].no.Contains("CMR-ZS-SE")) { nos += jsonResult.data[i].no + ","; } else if (jsonResult.data[i].no.Contains("CMR_ZZ_SE_")) { nos += jsonResult.data[i].no + ","; } } nos = nos.Substring(0, nos.Length - 1); JsonEquipmentData jsonEquipment = await FindAllDevicePropsDetailByTimeRange(Url, token, nos, TimeDate, time); var JsonData = "{\"data\":["; for (int i = 0; i < jsonEquipment.data.Count; i++) { if (jsonEquipment.data[i].deviceNo.Contains("CMR_ZZ_SE_")) { for (int j = 0; j < jsonEquipment.data[i].props.Count; j++) { for (int k = 0; k < jsonEquipment.data[i].props[j].datas.Count; k++) { valueData value = JsonConvert.DeserializeObject(jsonEquipment.data[i].props[j].datas[k].value); if (value.type == "良品") { JsonData += "{\"HDate\":\"" + jsonEquipment.data[i].props[j].datas[k].createTime + "\",\"HTechParamName\":\"螺母是否凸出\",\"HResult\":\"OK\",\"HCount\":1,\"HSourceCode\":\"" + jsonEquipment.data[i].deviceNo + "\"},"; } else { JsonData += "{\"HDate\":\"" + jsonEquipment.data[i].props[j].datas[k].createTime + "\",\"HTechParamName\":\"螺母是否凸出\",\"HResult\":\"NG\",\"HCount\":1,\"HSourceCode\":\"" + jsonEquipment.data[i].deviceNo + "\"},"; } JsonData += "{\"HDate\":\"" + jsonEquipment.data[i].props[j].datas[k].createTime + "\",\"HTechParamName\":\"生产周期\",\"HResult\":\"" + value.beat + "\",\"HCount\":1,\"HSourceCode\":\"" + jsonEquipment.data[i].deviceNo + "\"},"; } } JsonEquipmentData data = await FindDevicePropCalc(Url, token, jsonEquipment.data[i].deviceNo, TimeDate, time); for (int j = 0; j < data.data.Count; j++) { //合格数 if (data.data[j].propId == 469) { JsonData += "{\"HDate\":\"" + time + "\",\"HTechParamName\":\"良品数\",\"HResult\":\"OK\",\"HCount\":" + data.data[j].sum + ",\"HSourceCode\":\"" + jsonEquipment.data[i].deviceNo + "\"},"; } //不良数 else if (data.data[j].propId == 470) { JsonData += "{\"HDate\":\"" + time + "\",\"HTechParamName\":\"NG数量\",\"HResult\":\"NG\",\"HCount\":" + data.data[j].sum + ",\"HSourceCode\":\"" + jsonEquipment.data[i].deviceNo + "\"},"; } } } else { for (int j = 0; j < jsonEquipment.data[i].props.Count; j++) { for (int k = 0; k < jsonEquipment.data[i].props[j].datas.Count; k++) { JsonData += "{\"HDate\":\"" + jsonEquipment.data[i].props[j].datas[k].createTime + "\",\"HTechParamName\":\"" + jsonEquipment.data[i].props[j].propName + "\",\"HResult\":\""+ jsonEquipment.data[i].props[j].datas[k].value + "\",\"HCount\":1,\"HSourceCode\":\"" + jsonEquipment.data[i].deviceNo + "\"},"; } } JsonEquipmentData data = await FindProdByNosAndTime(Url, token, jsonEquipment.data[i].deviceNo, TimeDate, time); for (int j = 0; j < data.data.Count; j++) { JsonData += "{\"HDate\":\"" + time + "\",\"HTechParamName\":\"生产数量\",\"HResult\":\"OK\",\"HCount\":" + data.data[j].prod + ",\"HSourceCode\":\"" + jsonEquipment.data[i].deviceNo + "\"},"; } } } var EquipmentStaus = await FindDeviceStatusByNos(Url, token, nos); for (int i = 0; i < EquipmentStaus.data.Count; i++) { string staus = ""; switch (EquipmentStaus.data[i].status) { //-1:未知,1:离线,2:待机,3:正常运行,4:告警 case "-1": staus = "未知"; break; case "1": staus = "离线"; break; case "2": staus = "待机"; break; case "3": staus = "正常运行"; break; case "4": staus = "告警"; break; } if (jsonEquipment.data.Count > 0) { JsonData += "{\"HDate\":\"" + time + "\",\"HTechParamName\":\"开关机状态\",\"HResult\":\"" + staus + "\",\"HCount\":1,\"HSourceCode\":\"" + EquipmentStaus.data[i].no + "\"},"; } else { JsonData += "{\"HDate\":\"" + time + "\",\"HTechParamName\":\"开关机状态\",\"HResult\":\"" + staus + "\",\"HCount\":0,\"HSourceCode\":\"" + EquipmentStaus.data[i].no + "\"},"; } } JsonData = JsonData.Substring(0, JsonData.Length - 1); JsonData += "]}"; DataSave(JsonData); if (TimeDate != "") { TimeDate = time; } } } //数据保存 public void DataSave(string JsonData) { JsonEquipmentData data = JsonConvert.DeserializeObject(JsonData); for (int i = 0; i < data.data.Count; i++) { oCN.RunProc(@"insert into Sb_EquipMentCollectionTechParam_Temp(HDate,HSourceCode,HTechParamID,HTechParamName,HCount ,HCreateTime,HResult,HProcNumber,HFlag) values(getdate(),'"+ data.data[i].HSourceCode + "',0,'" + data.data[i].HTechParamName + "'," + data.data[i].HCount + ",'" + data.data[i].HDate + "','" + data.data[i].HResult + "','" + data.data[i].HProcNumber + "',0)"); ListData.Items.Add("时间:" + data.data[i].HDate + ",工艺参数:" + data.data[i].HTechParamName + ",工艺参数值:" + data.data[i].HResult); } } //定时生成产量汇报单 private async void Time_CLHB_Tick(object sender, EventArgs e) { //this.Time_CLHB.Enabled = false; string Url = DBHelper.GetConfigKey(AppDomain.CurrentDomain.BaseDirectory + "Config/SQLAPI.config", "sUrl"); string urls = Url + EquipmentType.One; // 准备要发送的表单数据 var formData = new FormUrlEncodedContent(new[] { new KeyValuePair("userName", "admin"), new KeyValuePair("password", "admin") // 添加更多键值对,根据您的需要 }); JsonResult jsonResult = await getUrl(urls, formData); string time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); string token = jsonResult.data.token; JsonEquipmentData jsonEquipment = await FindDeviceList(Url, token); if (jsonEquipment.code != "0") { MessageBox.Show("设备列表报错:" + jsonEquipment.message); } else { string nos = ""; //获取去设备编码 for (int i = 0; i < jsonEquipment.data.Count; i++) { if (jsonEquipment.data[i].no.Contains("CMR-ZS-SE")) { nos += "''" + jsonEquipment.data[i].no + "'',"; } else if (jsonEquipment.data[i].no.Contains("CMR_ZZ_SE_")) { nos += "''" + jsonEquipment.data[i].no + "'',"; } } nos = nos.Substring(0, nos.Length - 1); //this.Time_CLHB.Enabled = false; DataSet ds = oCN.RunProcReturn("exec h_p_Sc_TimeICMOReporList '" + nos + "'", "h_p_Sc_TimeICMOReporList"); if (ds.Tables[0].Rows.Count > 0) { DataTable dt = ds.Tables[0]; for (int i = 0; i < dt.Rows.Count; i++) { nos = dt.Rows[i]["设备编码"].ToString(); string HICMInterID = dt.Rows[i]["HInterID"].ToString(); string HBegDate = DateTime.Parse(dt.Rows[i]["日期"].ToString()).ToString("yyyy-MM-dd HH:mm:ss"); string HEndDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); jsonEquipment = await FindProdByNosAndTime(Url, token, nos, HBegDate, HEndDate); if (decimal.Parse(jsonEquipment.data[0].prod) > 0) { oCN.RunProc("exec h_p_Sc_AddTimeICMORepor " + HICMInterID + "," + jsonEquipment.data[0].prod+",'"+ HEndDate + "'"); } } } if (ds.Tables[1].Rows.Count > 0) { DataTable dt = ds.Tables[1]; for (int i = 0; i < dt.Rows.Count; i++) { nos = dt.Rows[i]["设备编码"].ToString(); string HICMInterID = dt.Rows[i]["HInterID"].ToString(); string HBegDate = DateTime.Parse(dt.Rows[i]["开始日期"].ToString()).ToString("yyyy-MM-dd HH:mm:ss"); string HEndDate = DateTime.Parse(dt.Rows[i]["结束日期"].ToString()).ToString("yyyy-MM-dd HH:mm:ss"); jsonEquipment = await FindProdByNosAndTime(Url, token, nos, HBegDate, HEndDate); if (decimal.Parse(jsonEquipment.data[0].prod) > 0) { oCN.RunProc("exec h_p_Sc_AddTimeICMORepor " + HICMInterID + "," + jsonEquipment.data[0].prod + ",'" + HEndDate + "'"); } } } } } private void EquipmentCollectionForm_FormClosing(object sender, FormClosingEventArgs e) { if (MessageBox.Show("确定要关闭吗?", "确认", MessageBoxButtons.YesNo) == DialogResult.No) { e.Cancel = true; } } } public class JsonResult { public string code { get; set; } public string message { get; set; } public string expirationTime { get; set; } public string token { get; set; } public JsonData data { get; set; } } public class JsonEquipmentData { public string code { get; set; } public string message { get; set; } public string expirationTime { get; set; } public string token { get; set; } public string deviceNo { get; set; } public string deviceName { get; set; } public string deviceStatus { get; set; } public List data { get; set; } } public class JsonData { public string expirationTime { get; set; } public string token { get; set; } public string deviceNo { get; set; } public List props { get; set; } public string area { get; set; } public string no { get; set; } public string name { get; set; } public string status { get; set; } public string prod { get; set; } public string propName { get; set; } public string basePropId { get; set; } public string value { get; set; } public string time { get; set; } public int propId { get; set; } public double count { get; set; } public double min { get; set; } public double max { get; set; } public double avg { get; set; } public double sum { get; set; } public string createTime { get; set; } public string happenTime { get; set; } public string HDate{ get; set; } public string HTechParamName { get; set; } public string HResult { get; set; } public string HCount { get; set; } public string HSourceCode { get; set; } public string HProcNumber { get; set; } } public class propsData { public string propName { get; set; } public List datas { get; set; } public string basePropId { get; set; } } public class valueData { public string beat { get; set; } public string type { get; set; } } //设备接口 public static class EquipmentType { //设备 获取令牌 public static string One = "/api/third/findAccessToken"; //设备列表 public static string Two = "/api/third/findDeviceList"; //设备状态 public static string Three = "/api/third/findDeviceStatusByNos"; //设备产量 public static string Four = "/api/third/findProdByNosAndTime"; //设备时长 public static string Five = "/api/third/findDeviceStatusTimeByNo"; //属性列表 public static string Six = "/api/third/findPropertyListByNos"; //产量,不良数,合格数,可疑数 总数 public static string Seven = "/api/third/findDevicePropCalc"; //一段时间内设备状态的获取 public static string Eight = "/api/third/dayDeviceStatusTimeline"; //良品 不良品 明细 注塑机数据 public static string Nine = "/api/third/findAllDevicePropsDetailByTimeRange"; //注塑机数据 public static string Ten = "/api/third/findAllDevicePropsDetailByTimeRange"; //public static string Eleven = "Monday"; //public static string Twelve = "Monday"; } public class Info { public string Id { get; set; } public string Name { get; set; } } }