geboshi_V1/LeatherProject/LeatherApp/Page/PartitionFrm.cs

294 lines
13 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using DocumentFormat.OpenXml.EMMA;
using DocumentFormat.OpenXml.Office2010.ExcelAc;
using DocumentFormat.OpenXml.Office2021.DocumentTasks;
using DocumentFormat.OpenXml.Spreadsheet;
using Models;
using OpenCvSharp;
using S7.Net.Types;
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace LeatherApp.Page
{
public partial class PartitionFrm : Form
{
public string BathReelID;
public string PartReelID;
public string NextPartReelID;
public double WeightParam;
Records model = null;
double LastSplitLength;
public PartitionFrm(Records m, double dis, double wd)
{
InitializeComponent();
label2.Visible = false;
//加载分卷信息
WeightParam = wd;
LastSplitLength = dis;
model = m;
ShowDefectRecordInfo(true);
}
private void ShowDefectRecordInfo(bool isLoad)
{
if (model != null)
{
//第一卷可以设置批卷号和当前分卷号
if (model.ReelNo == 0)
{
textBox1.ReadOnly = false;
textBox2.ReadOnly = false;
}
textBox1.Text = string.IsNullOrWhiteSpace(model.PartReelId) ? (model.ReelNo + 1).ToString() : model.PartReelId;
textBox2.Text = $"{model.BatchId}@{model.ReelId}";
textBox5.Text = (model.ReelNo + 2).ToString();
textBox4.Text = $"{model.BatchId}@{model.ReelId}";
if (model.Len == 0 && (model.DefectInfoList == null || model.DefectInfoList.Count == 0))
{
label2.Visible = true;
label2.Text = $"小于1米不记录";
}
//显示色差
if(!string.IsNullOrEmpty(model.PartReelNote))
txtR2.Text = model.PartReelNote2.Replace("色差:", "");
//model.PartReelNote2 = $"色差:{txtR2.Text}";
//分卷长度
double len = 0;
len = model.Len - LastSplitLength - Config.CutDis;//分卷,补差距
if (isLoad)
{
//卷长显示
numericUpDown1.Value = (decimal)len;
//显示重量
if(WeightParam > 0)
numericUpDown3.Value = (decimal)((double)numericUpDown1.Value * WeightParam);
}
//分卷数据分解卷
int cnt = 0;
string str = "";
string strCut = "";
double rmCnt = 0;
//让码计算
if (isLoad)
{
if (model.FMInformation != null && model.FMInformation.Count > 0)
{
//分卷长度
var rmList = model.FMInformation.Where(x => double.Parse(x[3]) < (model.Len - Config.CutDis)).ToList();
foreach (var dit in rmList)
{
rmCnt += double.Parse(dit[2].Split(',')[0]);
}
//总让码计数
RMCnt.Value = (decimal)rmCnt;
}
}
//显示净长
double jLen = ((double)numericUpDown1.Value - (double)RMCnt.Value) > 0 ? ((double)numericUpDown1.Value - (double)RMCnt.Value) : 0;
numericUpDown2.Value = (decimal)jLen;
//总缺陷显示统计
List<DefectInfo> deflist = new List<DefectInfo>();
if (model.DefectInfoList != null && len > 0)
{
//显示缺陷信息
object[] obj1 = new object[1];
object[] obj2 = new object[1];
object[] obj3 = new object[1];
deflist = model.DefectInfoList.FindAll(x => x.Y < ((model.Len - Config.CutDis) * 100));
foreach (var item in deflist)
{
item.Name = Config.getDefectName(model.ProductInfo.ModelName, item.Code);
}
List<JDefectTotal> DefectTotal = deflist.GroupBy(x => x.Name).Select(g => new JDefectTotal { Name = g.Key, Count = g.Count() }).ToList();
if (DefectTotal != null && DefectTotal.Count > 0)
{
obj1 = new object[DefectTotal.Count + 1];
obj2 = new object[DefectTotal.Count + 1];
obj3 = new object[DefectTotal.Count + 1];
obj1[0] = "缺陷";
obj2[0] = "个数";
obj3[0] = "米数";
int index = 1;
dataGridView1.Columns.Clear();
DataTable dt = new DataTable(); //建立个数据表
dt.Columns.Add(new DataColumn("让码序号", typeof(string)));//在表中添加string类型的列
foreach (var dit in DefectTotal)
{
obj1[index] = dit.Name;
obj2[index] = dit.Count;
obj3[index++] = Math.Round(deflist.Where(x => x.Name == dit.Name).ToList().Select(t => t.Height).Sum() / 100.0, 2);
dt.Columns.Add(new DataColumn((index - 1).ToString(), typeof(string)));//在表中添加string类型的列
cnt += dit.Count;
str += $"{dit.Name}{dit.Count}个,";
}
dataGridView1.DataSource = dt;
dt.Rows.Add(obj1);
dt.Rows.Add(obj2);
dt.Rows.Add(obj3);
//隐藏列头
dataGridView1.ColumnHeadersVisible = false;
}
//总缺陷计数
defectCnt.Text = cnt.ToString();
}
//厚度显示
if (model.ThicknessList != null && model.ThicknessList.Count > 0)
{
this.dataGridView2.Rows.Clear();
//分卷长度分开
var thList = model.ThicknessList.Where(x => (x.Y_Dis / 100) < (model.Len - Config.CutDis)).ToList();
for (int i = 0; i < thList.Count; i++)
{
double ave = Math.Round((thList[i].Value1 + thList[i].Value2 + thList[i].Value3)/3, 2);
var rowItem = new object[]{ (thList[i].Y_Dis /100).ToString("0.00"),
thList[i].Value1.ToString(),thList[i].Value2.ToString(),thList[i].Value3.ToString(), ave.ToString()};
this.dataGridView2.Rows.Insert(i, rowItem);
}
}
//裁切记录
if (model.DowngradeInformation != null && model.DowngradeInformation.Count > 0)
{
foreach (var item in model.DowngradeInformation)
{
strCut += $"裁切{item[0]}米,原因{item[1]},等级{item[2]},";
}
}
//分段信息
string fdStr = "";
if (model.FDInfor != null && model.FDInfor.Count > 0)
{
//分卷长度分开
var fdList = model.FDInfor.Where(x => x[1] < (model.Len - Config.CutDis)).ToList();
double last = (len - fdList.Select(x => x[0]).Sum()) > 0 ? (len - fdList.Select(x => x[0]).Sum()) : 0;
fdList.Add(new double[2] { Math.Round(last, 2), len });
fdStr += $"本卷分{fdList.Count()}段,分别";
for (int i = 0; i < fdList.Count; i++)
{
fdStr += $"{Math.Round(fdList[i][0], 2)}米,";
}
}
//总结
double tLen = Math.Round((double)numericUpDown1.Value,2);
double kg = Math.Round((double)numericUpDown3.Value, 2);
textBox3.Text = $"本卷共计{tLen}米,各类缺陷共计{cnt}个,让码{RMCnt.Value},重量{kg}kg";
if (!string.IsNullOrEmpty(str))
textBox3.Text += $",{str.Remove(str.Length - 1, 1)}";
if (!string.IsNullOrEmpty(fdStr))
textBox3.Text += $",{fdStr.Remove(fdStr.Length - 1, 1)}";
if (!string.IsNullOrEmpty(strCut))
textBox3.Text += $",{strCut.Remove(strCut.Length - 1, 1)}";
//else if (string.IsNullOrEmpty(fdStr))
// textBox3.Text = $"本卷共计{len}米,各类缺陷共计{cnt}个,让码{RMCnt.Value},{strCut.Remove(strCut.Length - 1, 1)}";
//else if (string.IsNullOrEmpty(strCut))
// textBox3.Text = $"本卷共计{len}米,各类缺陷共计{cnt}个,让码{RMCnt.Value},{str.Remove(str.Length - 1, 1)},{fdStr.Remove(str.Length - 1, 1)}";
//else
// textBox3.Text = $"本卷共计{len}米,各类缺陷共计{cnt}个,让码{RMCnt.Value},{str.Remove(str.Length - 1, 1)},{fdStr.Remove(str.Length - 1, 1)},{strCut.Remove(strCut.Length - 1, 1)}";
}
else
{
label2.Visible = true;
label2.Text = $"无数据!";
}
}
/// <summary>
/// 取消
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void skinButton2_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.Cancel;
this.Close();
}
private void skinButton1_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(textBox1.Text) || string.IsNullOrEmpty(textBox5.Text) || string.IsNullOrEmpty(textBox2.Text))
{
label2.Text = "请输入[卷号]或者[分卷号]!";
label2.Visible = true;
return;
}
if(textBox1.Text == textBox5.Text)
{
label2.Text = "[分卷号]与下一卷相同!";
label2.Visible = true;
return;
}
label2.Visible = false;
PartReelID = textBox1.Text;
BathReelID = textBox2.Text;
NextPartReelID = textBox5.Text;
//计算重量参数
if (Math.Round((double)numericUpDown1.Value, 2) > 0)
WeightParam = Math.Round((double)numericUpDown3.Value, 2) / Math.Round((double)numericUpDown1.Value, 2);
else
WeightParam = 0;
if (model != null)
{
model.PartReelNote = textBox3.Text;
//model.PartReelNote2 = $"厚度:{txtR1.Text},色差:{txtR2.Text},花纹对比:{txtR3.Text}";
model.PartReelNote2 = $"色差:{txtR2.Text}";
//分段信息信息 0卷长 1让码 2净长 3重量
model.LengthWeightInfor = new double[4] {Math.Round((double)numericUpDown1.Value ,2), Math.Round((double)RMCnt.Value, 2), Math.Round((double)numericUpDown2.Value, 2), Math.Round((double)numericUpDown3.Value, 2) } ;
}
this.DialogResult = DialogResult.OK;
this.Close();
}
public class JDefectTotal
{
[Description("疵点名")]
public string Name { get; set; }
[Description("疵点数")]
public int Count { get; set; }
}
private void RMCnt_ValueChanged(object sender, EventArgs e)
{
ShowDefectRecordInfo(false);
this.Refresh();
}
private void numericUpDown1_ValueChanged(object sender, EventArgs e)
{
ShowDefectRecordInfo(false);
this.Refresh();
}
private void numericUpDown3_ValueChanged(object sender, EventArgs e)
{
ShowDefectRecordInfo(false);
this.Refresh();
}
}
}