| | |
| | | InitializeComponent(); |
| | | } |
| | | |
| | | private void EquipmentCollectionForm_Load(object sender, EventArgs e) |
| | | private void btnWB_Click(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; |
| | | //制单编码只读 |
| | | this.txtHMakerNumber.ReadOnly = true; |
| | | //制单人提示 |
| | | this.txtHMaker.ForeColor = Color.LightGray; |
| | | this.txtHMaker.Text = "请输入用户编码!"; |
| | | |
| | | 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-11-21 13:40:27"; |
| | | 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) |
| | | { |
| | | if (this.txtHMakerNumber.Text == "") |
| | | { |
| | | MessageBox.Show("请输入制单人信息!"); |
| | | } |
| | | else |
| | | { |
| | | Get_DisplayBard(); |
| | | } |
| | | //this.txtHBathNo.ReadOnly = true; |
| | | |
| | | } |
| | | } |
| | | |
| | | //查询条码数据 |
| | | 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"); |
| | | //通过接口 获取token |
| | | JsonResult_JL 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_JL 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; |
| | | } |
| | | } |
| | | //通过双方讨论 最终采纳 检验数量=合格+不合格+可疑 |
| | | HInSpectQty = HRightQty + HUnKnowQty + HUnRightQty; |
| | | |
| | | |
| | | 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(),'" + this.txtHMaker.Text + "',getdate()" + |
| | | "," + DateTime.Now.Year + "," + DateTime.Now.Month + ",''" + |
| | | "," + HSourceID + ",0,'',0,0,0" + |
| | | ",'',0," + HMaterID + ",'" + this.labHMakerID.Text + "', " + 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<JsonResult_JL> getUrl(string url, FormUrlEncodedContent formData) |
| | | { |
| | | |
| | | // 创建 HttpClient 实例 |
| | | using (var client = new HttpClient()) |
| | | { |
| | | // 发送 POST 请求,并等待响应 |
| | | HttpResponseMessage response = await client.PostAsync(url, formData); |
| | | |
| | | Dictionary<object, object> dic = new Dictionary<object, object>(); |
| | | JsonResult_JL jsonResult = new JsonResult_JL(); |
| | | // 检查响应是否成功 |
| | | if (response.IsSuccessStatusCode) |
| | | { |
| | | // 处理成功响应的逻辑 |
| | | string responseBody = await response.Content.ReadAsStringAsync(); |
| | | jsonResult = JsonConvert.DeserializeObject<JsonResult_JL>(responseBody); |
| | | } |
| | | else |
| | | { |
| | | // 处理失败响应的逻辑 |
| | | MessageBox.Show("请求失败,状态码:" + response.StatusCode); |
| | | } |
| | | return jsonResult; |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取设备列表 |
| | | /// </summary> |
| | | /// <param name="url"></param> |
| | | /// <param name="postData"></param> |
| | | /// <returns></returns> |
| | | public async Task<JsonEquipmentData_JL> EquipmentList(string url, StringContent postData, string Type) |
| | | { |
| | | |
| | | // 创建 HttpClient 实例 |
| | | using (HttpClient client = new HttpClient()) |
| | | { |
| | | JsonEquipmentData_JL jsonResult = new JsonEquipmentData_JL(); |
| | | 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<JsonEquipmentData_JL>(responseBody); |
| | | } |
| | | else |
| | | { |
| | | MessageBox.Show($"请求失败:{response.StatusCode} - {url} - 当前时间:{DateTime.Now:yyyy-MM-dd HH:mm:ss}"); |
| | | } |
| | | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | MessageBox.Show("请求报错:" + ex.Message); |
| | | } |
| | | return jsonResult; |
| | | } |
| | | } |
| | | |
| | | public async Task<JsonResult_JL> EquipResultList(string url, StringContent postData, string Type) |
| | | { |
| | | |
| | | // 创建 HttpClient 实例 |
| | | using (HttpClient client = new HttpClient()) |
| | | { |
| | | JsonResult_JL jsonResult = new JsonResult_JL(); |
| | | 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<JsonResult_JL>(responseBody); |
| | | } |
| | | else |
| | | { |
| | | MessageBox.Show($"请求失败:{response.StatusCode} - {url} - 当前时间:{DateTime.Now:yyyy-MM-dd HH:mm:ss}"); |
| | | } |
| | | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | MessageBox.Show("请求报错:" + ex.Message); |
| | | } |
| | | return jsonResult; |
| | | } |
| | | } |
| | | |
| | | |
| | | //获取tockID |
| | | public async Task<JsonResult_JL> FindAccessToken(string url) |
| | | { |
| | | string urls = url + EquipmentType_JL.One; |
| | | // 准备要发送的表单数据 |
| | | var formData = new FormUrlEncodedContent(new[] |
| | | { |
| | | new KeyValuePair<string, string>("userName", "admin"), |
| | | new KeyValuePair<string, string>("password", "admin") |
| | | // 添加更多键值对,根据您的需要 |
| | | }); |
| | | JsonResult_JL jsonResult = await getUrl(urls, formData); |
| | | return jsonResult; |
| | | } |
| | | |
| | | //获取设备列表 |
| | | public async Task<JsonEquipmentData_JL> FindDeviceList(string url, string token) |
| | | { |
| | | //设备列表接口 |
| | | string urls = url + EquipmentType_JL.Two; |
| | | CustomWriteLog("设备列表接口:'" + urls + "'", DateTime.Now.ToString("yyyy-MM-dd")); |
| | | // 准备要发送的表单数据 |
| | | var postData = new StringContent("{\"token\":\"" + token + "\"}", System.Text.Encoding.UTF8, "application/json"); |
| | | JsonEquipmentData_JL jsonResult = await EquipmentList(urls, postData, "POST"); |
| | | return jsonResult; |
| | | } |
| | | |
| | | //获取良品、不良品明细、工艺参数 |
| | | public async Task<JsonEquipmentData_JL> FindAllDevicePropsDetailByTimeRange(string url, string token, string nos, string HBegin, string HEnd) |
| | | { |
| | | string basePropIds = DBHelper.GetConfigKey(AppDomain.CurrentDomain.BaseDirectory + "Config/SQLAPI.config", "basePropIds"); |
| | | basePropIds = "[" + basePropIds + "]"; |
| | | nos = nos.Replace(",", "\",\""); |
| | | //20250723 发现有的客户数采没有采集工艺参数 如果传入对应的 设备编号 会导致 请求失败 传入参数ID 也可以获取到对应的设备 这样不会 请求失败 |
| | | //string stringJson = "{\"token\":\"" + token + "\",\"deviceNos\":[\"" + nos + "\"],\"startTime\":\"" + HBegin + "\",\"endTime\":\"" + HEnd + "\",\"basePropIds\":" + basePropIds + "}"; |
| | | string stringJson = "{\"token\":\"" + token + "\",\"startTime\":\"" + HBegin + "\",\"endTime\":\"" + HEnd + "\",\"basePropIds\":" + basePropIds + "}"; |
| | | //设备列表接口 |
| | | string urls = url + EquipmentType_JL.Nine; |
| | | CustomWriteLog("工艺参数接口:'" + urls + "' 参数值: '" + stringJson + "'", DateTime.Now.ToString("yyyy-MM-dd")); |
| | | // 准备要发送的表单数据 |
| | | var postData = new StringContent(stringJson, System.Text.Encoding.UTF8, "application/json"); |
| | | JsonEquipmentData_JL jsonEquipment = await EquipmentList(urls, postData, "POST"); |
| | | return jsonEquipment; |
| | | } |
| | | |
| | | //获取不良数,合数数,可疑数 总数 |
| | | public async Task<JsonEquipmentData_JL> 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_JL.Seven; |
| | | CustomWriteLog("获取不良数,合数数,可疑数 总数:'" + urls + "' 参数值: '" + stringJson + "'", DateTime.Now.ToString("yyyy-MM-dd")); |
| | | JsonEquipmentData_JL jsonResult = await EquipmentList(urls, postData, "POST"); |
| | | return jsonResult; |
| | | } |
| | | |
| | | |
| | | //获取设备运行状态 |
| | | public async Task<JsonEquipmentData_JL> 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_JL.Three; |
| | | CustomWriteLog("设备运行状态:'" + urls + "' 参数值: '" + stringJson + "'", DateTime.Now.ToString("yyyy-MM-dd")); |
| | | JsonEquipmentData_JL jsonResult = await EquipmentList(urls, postData, "POST"); |
| | | return jsonResult; |
| | | } |
| | | |
| | | //获取设备时间段产量 |
| | | public async Task<JsonEquipmentData_JL> 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_JL.Four; |
| | | CustomWriteLog("设备时间段产量:'" + urls + "' 参数值: '" + stringJson + "'", DateTime.Now.ToString("yyyy-MM-dd")); |
| | | JsonEquipmentData_JL jsonResult = await EquipmentList(urls, postData, "POST"); |
| | | return jsonResult; |
| | | } |
| | | |
| | | //获取设备运行时间 开机 停机 待机 关机 |
| | | public async Task<JsonResult_JL> FindDeviceStatusTimeByNo(string url, string token, string nos, string HBegin, string HEnd) |
| | | { |
| | | nos = nos.Replace(",", "\",\""); |
| | | nos = "\"" + nos + "\""; |
| | | string stringJson = "{\"token\":\"" + token + "\",\"no\":" + nos + ",\"startTime\":\"" + HBegin + "\",\"endTime\":\"" + HEnd + "\"}"; |
| | | var postData = new StringContent(stringJson, System.Text.Encoding.UTF8, "application/json"); |
| | | string urls = url + EquipmentType_JL.Five; |
| | | // 记录开机时长 |
| | | CustomWriteLog("设备运行时间接口:'"+ urls + "' 参数值: '" + stringJson + "'", DateTime.Now.ToString("yyyy-MM-dd")); |
| | | JsonResult_JL jsonResult = await EquipResultList(urls, postData, "POST"); |
| | | return jsonResult; |
| | | } |
| | | |
| | | //获取注塑机的 开机 |
| | | public async Task<JsonResult_JL> FindDeviceStatusTimeByNosAndOperationMode(string url, string token, string nos, string HBegin, string HEnd) |
| | | { |
| | | nos = nos.Replace(",", "\",\""); |
| | | nos = "\"" + nos + "\""; |
| | | string stringJson = "{\"token\":\"" + token + "\",\"no\":" + nos + ",\"startTime\":\"" + HBegin + "\",\"endTime\":\"" + HEnd + "\"}"; |
| | | var postData = new StringContent(stringJson, System.Text.Encoding.UTF8, "application/json"); |
| | | string urls = url + EquipmentType_JL.Ten; |
| | | CustomWriteLog("注塑机的 开机接口:'" + urls + "' 参数值: '" + stringJson + "'", DateTime.Now.ToString("yyyy-MM-dd")); |
| | | JsonResult_JL jsonResult = await EquipResultList(urls, postData, "POST"); |
| | | return jsonResult; |
| | | } |
| | | |
| | | |
| | | //下拉框绑定数据 |
| | | private void bindCbox() |
| | | { |
| | | IList<Info_JL> infoList = new List<Info_JL>(); |
| | | Info_JL info1 = new Info_JL() { Id = "CMR-QC-SE-001", Name = "螺母全检" }; |
| | | Info_JL info2 = new Info_JL() { Id = "CMR-ZZ-SE-001", Name = "螺母压装" }; |
| | | Info_JL info3 = new Info_JL() { Id = "ZSJ07", Name = "注塑机#07" }; |
| | | //Info_JL info3 = new Info_JL() { 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:00"); |
| | | //this.txtBegin.Text = "2024-11-21 13:40:27"; |
| | | this.btnBegin.Enabled = false; |
| | | this.timer.Enabled = true; |
| | | this.Time_CLHB.Enabled = true; |
| | | } |
| | | } |
| | | MessageBox.Show("数据读取中...", "操作提示"); |
| | | } |
| | | |
| | | //定时获取数据 |
| | | private async void timer_Tick(object sender, EventArgs e) |
| | | { |
| | | //测试全检 |
| | | //this.timer.Enabled = false; |
| | | |
| | | string Url = DBHelper.GetConfigKey(AppDomain.CurrentDomain.BaseDirectory + "Config/SQLAPI.config", "sUrl"); |
| | | string urls = Url + EquipmentType_JL.One; |
| | |
| | | JsonResult_JL jsonResult = await getUrl(urls, formData); |
| | | string time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:00"); |
| | | |
| | | if (cmbEquipFile.SelectedIndex == 1) |
| | | { |
| | | SaveNutPressFit(Url, jsonResult.data.token, time); |
| | | } |
| | | else if (cmbEquipFile.SelectedIndex == 2) |
| | | { |
| | | SaveInjectionMoldingMachine(jsonResult.data.token, Url, time); |
| | | } |
| | | |
| | | 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_JL 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_JL jsonEquipment = await FindAllDevicePropsDetailByTimeRange(Url, token, nos, TimeDate, time); |
| | | |
| | | var JsonData_JL = "{\"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_JL value = JsonConvert.DeserializeObject<valueData_JL>(jsonEquipment.data[0].props[i].datas[j].value); |
| | | if (value.type == "良品") |
| | | { |
| | | JsonData_JL += "{\"HDate\":\"" + jsonEquipment.data[0].props[i].datas[j].createTime + "\",\"HTechParamName\":\"螺母是否凸出\",\"HResult\":\"OK\",\"HCount\":1,\"HSourceCode\":\"" + nos + "\"},"; |
| | | } |
| | | else |
| | | { |
| | | JsonData_JL += "{\"HDate\":\"" + jsonEquipment.data[0].props[i].datas[j].createTime + "\",\"HTechParamName\":\"螺母是否凸出\",\"HResult\":\"NG\",\"HCount\":1,\"HSourceCode\":\"" + nos + "\"},"; |
| | | } |
| | | JsonData_JL += "{\"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_JL += "{\"HDate\":\"" + time + "\",\"HTechParamName\":\"良品数\",\"HResult\":\"OK\",\"HCount\":" + jsonEquipment.data[i].sum + ",\"HSourceCode\":\"" + nos + "\"},"; |
| | | } |
| | | //不良数 |
| | | else if (jsonEquipment.data[i].propId == 470) |
| | | { |
| | | JsonData_JL += "{\"HDate\":\"" + time + "\",\"HTechParamName\":\"NG数量\",\"HResult\":\"NG\",\"HCount\":" + jsonEquipment.data[i].sum + ",\"HSourceCode\":\"" + nos + "\"},"; |
| | | } |
| | | } |
| | | |
| | | JsonData_JL = JsonData_JL.Substring(0, JsonData_JL.Length - 1); |
| | | JsonData_JL += "]}"; |
| | | DataSave(JsonData_JL); |
| | | if (TimeDate != "") |
| | | { |
| | | TimeDate = time; |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | //注塑机采集数据 保存 |
| | | public async void SaveInjectionMoldingMachine(string token, string Url, string time) |
| | | { |
| | | ListData.Items.Clear(); |
| | | { |
| | | if (TimeDate == "") |
| | | { |
| | | TimeDate = this.txtBegin.Text; |
| | | TimeDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:00"); |
| | | } |
| | | //this.timer.Enabled = false; |
| | | |
| | | //TimeDate = "2025-02-10 13:10:50"; |
| | | //time = "2025-02-10 13:11:50"; |
| | | |
| | | |
| | | //获取所有设备数据 |
| | | JsonEquipmentData_JL jsonResult = await FindDeviceList(Url, token); |
| | | if (jsonResult.code != "0") |
| | |
| | | //获取设备编码 |
| | | for (int i = 0; i < jsonResult.data.Count; i++) |
| | | { |
| | | nos += jsonResult.data[i].no + ","; |
| | | //if (jsonResult.data[i].no.Contains("JS_ZS")) |
| | | //{ |
| | | // nos += jsonResult.data[i].no + ","; |
| | | //} |
| | | nos += jsonResult.data[i].no + ","; |
| | | } |
| | | nos = nos.Substring(0, nos.Length - 1); |
| | | //获取参数 获取每个设备对应的所有参数 |
| | |
| | | //循环 每个参数对应的所有数据 |
| | | for (int k = 0; k < jsonEquipment.data[i].props[j].datas.Count; k++) |
| | | { |
| | | JsonData_JL += "{\"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 + "\"},"; |
| | | //CustomWriteLog("工艺参数具体值:{\"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 + "\"}", DateTime.Now.ToString("yyyy-MM-dd")); |
| | | JsonData_JL += "{\"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 + "\"},"; |
| | | } |
| | | } |
| | | |
| | |
| | | for (int j = 0; j < data.data.Count; j++) |
| | | { |
| | | |
| | | JsonData_JL += "{\"HDate\":\"" + time + "\",\"HTechParamName\":\"生产数量\",\"HResult\":\"OK\",\"HCount\":" + data.data[j].prod + ",\"HSourceCode\":\"" + jsonEquipment.data[i].deviceNo + "\"},"; |
| | | //CustomWriteLog("{\"HDate\":\"" + time + "\",\"HTechParamName\":\"生产数量\",\"HResult\":\"OK\",\"HCount\":" + data.data[j].prod + ",\"HSourceCode\":\"" + jsonEquipment.data[i].deviceNo + "\"}", DateTime.Now.ToString("yyyy-MM-dd")); |
| | | JsonData_JL += "{\"HDate\":\"" + time + "\",\"HTechParamName\":\"生产数量\",\"HResult\":\"OK\",\"HCount\":" + data.data[j].prod + ",\"HSourceCode\":\"" + jsonEquipment.data[i].deviceNo + "\"},"; |
| | | } |
| | | } |
| | | } |
| | |
| | | CustomWriteLog("data属性为空", DateTime.Now.ToString("yyyy-MM-dd")); |
| | | } |
| | | else |
| | | { |
| | | { |
| | | for (int i = 0; i < EquipmentStaus.data.Count; i++) |
| | | { |
| | | //卷绕 注塑 浸渍 组装 的设备运行 开关停机时间 |
| | | if (EquipmentStaus.data[i].no.Contains("JS-MZ-") || EquipmentStaus.data[i].no.Contains("JS_LS_") || EquipmentStaus.data[i].no.Contains("JL_E_") |
| | | CustomWriteLog(EquipmentStaus.data[0].no, DateTime.Now.ToString("yyyy-MM-dd")); |
| | | //设备运行 开关停机时间 |
| | | if (EquipmentStaus.data[i].no.Contains("JS_MZ_") || EquipmentStaus.data[i].no.Contains("JS_LS_") || EquipmentStaus.data[i].no.Contains("JL_E_") |
| | | || EquipmentStaus.data[i].no.Contains("JL_") || EquipmentStaus.data[i].no.Contains("JL_A_") || EquipmentStaus.data[i].no.Contains("JL_B_") |
| | | || EquipmentStaus.data[i].no.Contains("JL_3_") || EquipmentStaus.data[i].no.Contains("JL_2_") || EquipmentStaus.data[i].no.Contains("JL_1_") |
| | | || EquipmentStaus.data[i].no.Contains("JS_RX_") || EquipmentStaus.data[i].no.Contains("JS_ZS_") || EquipmentStaus.data[i].no.Contains("JS_YL_") |
| | |
| | | } |
| | | |
| | | JsonResult_JL HEqDate = await FindDeviceStatusTimeByNo(Url, token, EquipmentStaus.data[i].no, HBegDate, HEndDate); |
| | | |
| | | // 记录开机时长 |
| | | CustomWriteLog("设备开机时长: 开机时长" + ((float)(HEqDate.data.onlineTime / 60 / 60)).ToString("0.00") + " " + EquipmentStaus.data[i].no + "", |
| | | DateTime.Now.ToString("yyyy-MM-dd")); |
| | | |
| | | // 记录关机时长 |
| | | CustomWriteLog("设备关机时长: 关机时长" + ((float)(HEqDate.data.offlineTime / 60 / 60)).ToString("0.00") + " " + EquipmentStaus.data[i].no + "", |
| | | DateTime.Now.ToString("yyyy-MM-dd")); |
| | | |
| | | // 记录停机时长 |
| | | CustomWriteLog("设备停机时长: 停机时长" + ((float)(HEqDate.data.standbyTime / 60 / 60)).ToString("0.00") + " " + EquipmentStaus.data[i].no + "", |
| | | DateTime.Now.ToString("yyyy-MM-dd")); |
| | | |
| | | // 记录运行时长 |
| | | CustomWriteLog("设备运行时长: 运行时长" + ((float)(HEqDate.data.runTime / 60 / 60)).ToString("0.00") + " " + EquipmentStaus.data[i].no + "", |
| | | DateTime.Now.ToString("yyyy-MM-dd")); |
| | | |
| | | |
| | | JsonData_JL += "{\"HDate\":\"" + HEndDate + "\",\"HTechParamName\":\"开机时长\",\"HResult\":\"" + ((float)(HEqDate.data.onlineTime / 60 / 60)).ToString("0.00") + "\",\"HCount\":1,\"HSourceCode\":\"" + EquipmentStaus.data[i].no + "\"},"; |
| | | JsonData_JL += "{\"HDate\":\"" + HEndDate + "\",\"HTechParamName\":\"关机时长\",\"HResult\":\"" + ((float)(HEqDate.data.offlineTime / 60 / 60)).ToString("0.00") + "\",\"HCount\":1,\"HSourceCode\":\"" + EquipmentStaus.data[i].no + "\"},"; |
| | |
| | | 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($"时间: {DateTime.Now:yyyy-MM-dd HH:mm:ss},加载成功"); |
| | | } |
| | | } |
| | | |
| | | //定时生成产量汇报单 |
| | | 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_JL.One; |
| | | // 准备要发送的表单数据 |
| | |
| | | //获取去设备编码 |
| | | for (int i = 0; i < jsonEquipment.data.Count; i++) |
| | | { |
| | | nos += "''" + jsonEquipment.data[i].no + "'',"; |
| | | //if (jsonEquipment.data[i].no.Contains("JS_ZS")) |
| | | //{ |
| | | // nos += "''" + jsonEquipment.data[i].no + "'',"; |
| | | //} |
| | | nos += "''" + jsonEquipment.data[i].no + "'',"; |
| | | } |
| | | nos = nos.Substring(0, nos.Length - 1); |
| | | |
| | | //this.Time_CLHB.Enabled = false; |
| | | |
| | | |
| | | CustomWriteLog("产量汇报单,设备编码:'"+ nos + "'", DateTime.Now.ToString("yyyy-MM-dd")); |
| | | |
| | | //查询开工的设备信息 以及 查询当天设备对应的开工时间 和完工时间 |
| | |
| | | } |
| | | } |
| | | |
| | | private void txtHMaker_Leave(object sender, EventArgs e) |
| | | #region 接口 |
| | | //获取登录的token |
| | | public async Task<JsonResult_JL> getUrl(string url, FormUrlEncodedContent formData) |
| | | { |
| | | if (string.IsNullOrWhiteSpace(txtHMaker.Text)) |
| | | { |
| | | this.txtHMaker.ForeColor = Color.LightGray; |
| | | txtHMaker.Text = "请输入用户编码!"; |
| | | } |
| | | } |
| | | |
| | | private void txtHMaker_Enter(object sender, EventArgs e) |
| | | { |
| | | if (txtHMaker.Text.Trim() == "请输入用户编码!") |
| | | // 创建 HttpClient 实例 |
| | | using (var client = new HttpClient()) |
| | | { |
| | | txtHMaker.Text = ""; |
| | | this.txtHMaker.ForeColor = Color.Black; |
| | | } |
| | | } |
| | | // 发送 POST 请求,并等待响应 |
| | | HttpResponseMessage response = await client.PostAsync(url, formData); |
| | | |
| | | private void txtHMaker_KeyDown(object sender, KeyEventArgs e) |
| | | { |
| | | if (e.KeyCode == Keys.Enter) |
| | | { |
| | | SelectHMaker(this.txtHMaker.Text); |
| | | } |
| | | } |
| | | |
| | | |
| | | //查询职员信息 |
| | | public void SelectHMaker(string txtHMaker) |
| | | { |
| | | try |
| | | { |
| | | DataSet ds = oCN.RunProcReturn("select HItemID,HName,HNumber from Gy_Employee where HNumber='" + txtHMaker + "' or HName ='" + txtHMaker + "'", "Gy_Employee"); |
| | | if (ds.Tables[0].Rows.Count > 0) |
| | | Dictionary<object, object> dic = new Dictionary<object, object>(); |
| | | JsonResult_JL jsonResult = new JsonResult_JL(); |
| | | // 检查响应是否成功 |
| | | if (response.IsSuccessStatusCode) |
| | | { |
| | | string HName = ds.Tables[0].Rows[0]["HName"].ToString(); |
| | | string HMakerID = ds.Tables[0].Rows[0]["HItemID"].ToString(); |
| | | string HNumber = ds.Tables[0].Rows[0]["HNumber"].ToString(); |
| | | this.txtHMaker.Text = HName; |
| | | this.txtHMakerNumber.Text = HNumber; |
| | | this.labHMakerID.Text = HMakerID; |
| | | this.txtHMaker.ReadOnly = true; |
| | | // 处理成功响应的逻辑 |
| | | string responseBody = await response.Content.ReadAsStringAsync(); |
| | | jsonResult = JsonConvert.DeserializeObject<JsonResult_JL>(responseBody); |
| | | } |
| | | else |
| | | { |
| | | MessageBox.Show(this, "编码:" + txtHMaker + ",查无数据,可能是输入编码有误!", "提示"); |
| | | // 处理失败响应的逻辑 |
| | | MessageBox.Show("请求失败,状态码:" + response.StatusCode); |
| | | } |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | MessageBox.Show(this, e.Message, "提示"); |
| | | return jsonResult; |
| | | } |
| | | } |
| | | |
| | | private void EquipmentCollectionForm_Activated(object sender, EventArgs e) |
| | | // 获取设备列表 |
| | | public async Task<JsonEquipmentData_JL> EquipmentList(string url, StringContent postData, string Type) |
| | | { |
| | | //光标选中制单人 |
| | | this.txtHMaker.Focus(); |
| | | |
| | | // 创建 HttpClient 实例 |
| | | using (HttpClient client = new HttpClient()) |
| | | { |
| | | JsonEquipmentData_JL jsonResult = new JsonEquipmentData_JL(); |
| | | 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<JsonEquipmentData_JL>(responseBody); |
| | | } |
| | | else |
| | | { |
| | | MessageBox.Show($"请求失败:{response.StatusCode} - {url} - 当前时间:{DateTime.Now:yyyy-MM-dd HH:mm:ss}"); |
| | | } |
| | | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | MessageBox.Show("请求报错:" + ex.Message); |
| | | } |
| | | return jsonResult; |
| | | } |
| | | } |
| | | |
| | | public async Task<JsonResult_JL> EquipResultList(string url, StringContent postData, string Type) |
| | | { |
| | | |
| | | // 创建 HttpClient 实例 |
| | | using (HttpClient client = new HttpClient()) |
| | | { |
| | | JsonResult_JL jsonResult = new JsonResult_JL(); |
| | | 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<JsonResult_JL>(responseBody); |
| | | } |
| | | else |
| | | { |
| | | MessageBox.Show($"请求失败:{response.StatusCode} - {url} - 当前时间:{DateTime.Now:yyyy-MM-dd HH:mm:ss}"); |
| | | } |
| | | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | MessageBox.Show("请求报错:" + ex.Message); |
| | | } |
| | | return jsonResult; |
| | | } |
| | | } |
| | | |
| | | //获取设备列表 |
| | | public async Task<JsonEquipmentData_JL> FindDeviceList(string url, string token) |
| | | { |
| | | //设备列表接口 |
| | | string urls = url + EquipmentType_JL.Two; |
| | | CustomWriteLog("设备列表接口:'" + urls + "'", DateTime.Now.ToString("yyyy-MM-dd")); |
| | | // 准备要发送的表单数据 |
| | | var postData = new StringContent("{\"token\":\"" + token + "\"}", System.Text.Encoding.UTF8, "application/json"); |
| | | JsonEquipmentData_JL jsonResult = await EquipmentList(urls, postData, "POST"); |
| | | return jsonResult; |
| | | } |
| | | |
| | | //获取良品、不良品明细、工艺参数 |
| | | public async Task<JsonEquipmentData_JL> FindAllDevicePropsDetailByTimeRange(string url, string token, string nos, string HBegin, string HEnd) |
| | | { |
| | | string basePropIds = DBHelper.GetConfigKey(AppDomain.CurrentDomain.BaseDirectory + "Config/SQLAPI.config", "basePropIds"); |
| | | basePropIds = "[" + basePropIds + "]"; |
| | | nos = nos.Replace(",", "\",\""); |
| | | //20250723 发现有的客户数采没有采集工艺参数 如果传入对应的 设备编号 会导致 请求失败 传入参数ID 也可以获取到对应的设备 这样不会 请求失败 |
| | | //string stringJson = "{\"token\":\"" + token + "\",\"deviceNos\":[\"" + nos + "\"],\"startTime\":\"" + HBegin + "\",\"endTime\":\"" + HEnd + "\",\"basePropIds\":" + basePropIds + "}"; |
| | | string stringJson = "{\"token\":\"" + token + "\",\"startTime\":\"" + HBegin + "\",\"endTime\":\"" + HEnd + "\",\"basePropIds\":" + basePropIds + "}"; |
| | | //设备列表接口 |
| | | string urls = url + EquipmentType_JL.Nine; |
| | | CustomWriteLog("工艺参数接口:'" + urls + "' 参数值: '" + stringJson + "'", DateTime.Now.ToString("yyyy-MM-dd")); |
| | | // 准备要发送的表单数据 |
| | | var postData = new StringContent(stringJson, System.Text.Encoding.UTF8, "application/json"); |
| | | JsonEquipmentData_JL jsonEquipment = await EquipmentList(urls, postData, "POST"); |
| | | return jsonEquipment; |
| | | } |
| | | |
| | | //获取不良数,合数数,可疑数 总数 |
| | | public async Task<JsonEquipmentData_JL> 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_JL.Seven; |
| | | CustomWriteLog("获取不良数,合数数,可疑数 总数:'" + urls + "' 参数值: '" + stringJson + "'", DateTime.Now.ToString("yyyy-MM-dd")); |
| | | JsonEquipmentData_JL jsonResult = await EquipmentList(urls, postData, "POST"); |
| | | return jsonResult; |
| | | } |
| | | |
| | | //获取设备运行状态 |
| | | public async Task<JsonEquipmentData_JL> 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_JL.Three; |
| | | CustomWriteLog("设备运行状态:'" + urls + "' 参数值: '" + stringJson + "'", DateTime.Now.ToString("yyyy-MM-dd")); |
| | | JsonEquipmentData_JL jsonResult = await EquipmentList(urls, postData, "POST"); |
| | | return jsonResult; |
| | | } |
| | | |
| | | //获取设备时间段产量 |
| | | public async Task<JsonEquipmentData_JL> 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_JL.Four; |
| | | CustomWriteLog("设备时间段产量:'" + urls + "' 参数值: '" + stringJson + "'", DateTime.Now.ToString("yyyy-MM-dd")); |
| | | JsonEquipmentData_JL jsonResult = await EquipmentList(urls, postData, "POST"); |
| | | return jsonResult; |
| | | } |
| | | |
| | | //获取设备运行时间 开机 停机 待机 关机 |
| | | public async Task<JsonResult_JL> FindDeviceStatusTimeByNo(string url, string token, string nos, string HBegin, string HEnd) |
| | | { |
| | | nos = nos.Replace(",", "\",\""); |
| | | nos = "\"" + nos + "\""; |
| | | string stringJson = "{\"token\":\"" + token + "\",\"no\":" + nos + ",\"startTime\":\"" + HBegin + "\",\"endTime\":\"" + HEnd + "\"}"; |
| | | var postData = new StringContent(stringJson, System.Text.Encoding.UTF8, "application/json"); |
| | | string urls = url + EquipmentType_JL.Five; |
| | | // 记录开机时长 |
| | | CustomWriteLog("设备运行时间接口:'" + urls + "' 参数值: '" + stringJson + "'", DateTime.Now.ToString("yyyy-MM-dd")); |
| | | JsonResult_JL jsonResult = await EquipResultList(urls, postData, "POST"); |
| | | return jsonResult; |
| | | } |
| | | |
| | | //获取注塑机的 开机 |
| | | public async Task<JsonResult_JL> FindDeviceStatusTimeByNosAndOperationMode(string url, string token, string nos, string HBegin, string HEnd) |
| | | { |
| | | nos = nos.Replace(",", "\",\""); |
| | | nos = "\"" + nos + "\""; |
| | | string stringJson = "{\"token\":\"" + token + "\",\"no\":" + nos + ",\"startTime\":\"" + HBegin + "\",\"endTime\":\"" + HEnd + "\"}"; |
| | | var postData = new StringContent(stringJson, System.Text.Encoding.UTF8, "application/json"); |
| | | string urls = url + EquipmentType_JL.Ten; |
| | | CustomWriteLog("注塑机的 开机接口:'" + urls + "' 参数值: '" + stringJson + "'", DateTime.Now.ToString("yyyy-MM-dd")); |
| | | JsonResult_JL jsonResult = await EquipResultList(urls, postData, "POST"); |
| | | return jsonResult; |
| | | } |
| | | #endregion |
| | | |
| | | private static readonly object lockObj = new object(); |
| | | //写日志 |
| | | public static void CustomWriteLog(object obj, string FileName, string filePath = "Vlog", bool isAppend = true) |