using CnasSynchronusClient;
using CnasSynchrousModel;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace CNAS_BalanceClient
{
public class CrucibleUIOperation
{
///
/// 将天平端传输过来的重量传输到坩埚数据中
///
///
///
///
///
///
public void UpdateCrucibleBalanceWeight(Dictionary DstCurrentLeftGrids, DataGridView dgvCrucibleShelf, double defaultdouble, string currentCrucibleDataType, List laboratoryTests)
{
//当前坩埚架选中单元格
if (dgvCrucibleShelf.CurrentCell == null) return;
if (dgvCrucibleShelf.CurrentCell.ColumnIndex != 3) return; //索引为3的列为“重量”列,其他列不允许插入数值
//是否满足称重范围
double MinValue = 0;
double MaxValue = 0;
switch (currentCrucibleDataType)
{
case "Crucible|Heat":
MinValue = 0.9;
MaxValue = 1.1;
break;
case "Crucible|Sulfur":
MinValue = 0.045;
MaxValue = 0.055;
break;
case "Crucible|Hydrogen":
MinValue = 0.05;
MaxValue = 0.2;
break;
}
if (defaultdouble > MaxValue || defaultdouble < MinValue)
{
MessageBox.Show($"称重范围是{MinValue}g~{MaxValue}g.", "提示");
return;
}
if (dgvCrucibleShelf.Rows[dgvCrucibleShelf.CurrentCell.RowIndex].Cells[0].Value == null || dgvCrucibleShelf.Rows[dgvCrucibleShelf.CurrentCell.RowIndex].Cells[0].Value.ToString() == "")
{
//此时说明datagridview中没有旧值,不存在覆盖问题,可以直接增加数据
string strSampleCode = GetCurrentSelectedSampleCode(currentCrucibleDataType, DstCurrentLeftGrids);
if (strSampleCode == "") return; //此时未获得左侧样品编号,不能在右侧增加数据
string strCrucibleNumber = dgvCrucibleShelf.Rows[dgvCrucibleShelf.CurrentCell.RowIndex].Cells["Shelf_CrucibleNumber"].Value.ToString();
//新增加一条数据
LaboratoryTest laboratory = new LaboratoryTest();
laboratory.GUID = Guid.NewGuid().ToString();
laboratory.Sample_Number = strCrucibleNumber + "-" + strSampleCode;
laboratory.Sample_Weight = defaultdouble;
laboratory.Operator = GlobalCommonOperation.strUserName;
laboratory.OperaDateTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm"));
laboratory.DataType = currentCrucibleDataType;
laboratory.Crucible_Number = strCrucibleNumber;
laboratory.WeighingType = currentCrucibleDataType == "Crucible|Heat" ? "FRL" : (currentCrucibleDataType == "Crucible|Sulfur" ? "CLY" : "CHN");
laboratory.OperationType = "add";
laboratoryTests.Add(laboratory);
//更改datagridview中的值
dgvCrucibleShelf.Rows[dgvCrucibleShelf.CurrentCell.RowIndex].Cells["Shelf_ID"].Value = laboratory.GUID;
dgvCrucibleShelf.Rows[dgvCrucibleShelf.CurrentCell.RowIndex].Cells["Shelf_SampleNumber"].Value = laboratory.Sample_Number;
dgvCrucibleShelf.Rows[dgvCrucibleShelf.CurrentCell.RowIndex].Cells["Shelf_WeighingType"].Value = laboratory.WeighingType;
dgvCrucibleShelf.Rows[dgvCrucibleShelf.CurrentCell.RowIndex].Cells["Shelf_SampleWeight"].Value = laboratory.Sample_Weight;
dgvCrucibleShelf.Rows[dgvCrucibleShelf.CurrentCell.RowIndex].Cells["Shelf_Operator"].Value = laboratory.Operator;
dgvCrucibleShelf.Rows[dgvCrucibleShelf.CurrentCell.RowIndex].Cells["Shelf_SampleWeight"].Value = laboratory.Sample_Weight;
}
else //此时说明datagridview中存在旧值,可能存在覆盖问题
{
if (MessageBox.Show("单元格已经存在数据,继续将覆盖这个数据,是否继续?", "提示", MessageBoxButtons.OKCancel) == DialogResult.OK)
{
string strCurrentID = dgvCrucibleShelf.Rows[dgvCrucibleShelf.CurrentCell.RowIndex].Cells[0].Value.ToString();
var query = laboratoryTests.Where(s => s.GUID == strCurrentID).ToList();
if (query.Count == 1)
{
query[0].Sample_Weight = defaultdouble;
query[0].OperaDateTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm"));
query[0].Operator = GlobalCommonOperation.strUserName;
if (query[0].OperationType == null || query[0].OperationType == "")
query[0].OperationType = "update";
//更改datagridview中的值
dgvCrucibleShelf.Rows[dgvCrucibleShelf.CurrentCell.RowIndex].Cells["Shelf_SampleWeight"].Value = query[0].Sample_Weight;
}
}
}
}
///
/// 获得当前坩埚选中的样品编码
///
///
///
///
private string GetCurrentSelectedSampleCode(string currentCrucibleDataType, Dictionary DstCurrentGrids)
{
string strSampleCode = "";
DataGridView dgv = DstCurrentGrids[currentCrucibleDataType];
if (dgv.CurrentCell != null && dgv.Rows[dgv.CurrentCell.RowIndex].Cells[0].Value != null)
strSampleCode = dgv.Rows[dgv.CurrentCell.RowIndex].Cells[1].Value.ToString();
return strSampleCode;
}
///
/// 增加一组坩埚架数据
///
///
///
///
///
///
public void AddCrucibleShelfData(Dictionary DictCrucuibleGrids, DataGridView dgvCrucibleShelf, string currentCrucibleDataType, string strTypeTitle, List laboratoryTests)
{
//0.判断左侧选中某项内容,如果左侧未选中任何内容,则不应该产生数据
string strSampleCode = GetCurrentSelectedSampleCode(currentCrucibleDataType, DictCrucuibleGrids);
//if (strSampleCode == "") return;
//1.在datagridview上增加20个数据行
dgvCrucibleShelf.Rows.Clear();
string strWeighingType = currentCrucibleDataType == "Crucible|Heat" ? "FRL" : (currentCrucibleDataType == "Crucible|Sulfur" ? "CLY" : "CHN");
for (int i = 1; i < 21; i++)
{
int index = dgvCrucibleShelf.Rows.Add();
dgvCrucibleShelf.Rows[index].Cells["Shelf_CrucibleNumber"].Value = strWeighingType + strTypeTitle + string.Format("{0:D2}", i);
}
//2.判断数据库中是否存在该坩埚架的内容,如果存在,则将数据插入到这20行数据行中
var query = laboratoryTests.Where(s => s.DataType == currentCrucibleDataType && s.Crucible_Number != null && s.Crucible_Number.StartsWith($"{strWeighingType}{strTypeTitle}") && s.OperaDateTime.ToString("yyyyMMdd") == DateTime.Now.ToString("yyyyMMdd") && ((s.OperationType == null) || (s.OperationType != null && s.OperationType.ToLower() != "delete"))).ToList(); //判断条件:今天的,样品编码以左侧样品号结尾,坩埚号以称量类型开头。
if (query.Count > 0)
{
foreach (var item in query)
{
foreach (DataGridViewRow dgr in dgvCrucibleShelf.Rows)
{
if (dgr.Cells["Shelf_CrucibleNumber"].Value.ToString() == item.Crucible_Number)
{
dgr.Cells["Shelf_ID"].Value = item.GUID;
dgr.Cells["Shelf_SampleNumber"].Value = item.Sample_Number;
dgr.Cells["Shelf_WeighingType"].Value = item.WeighingType;
dgr.Cells["Shelf_SampleWeight"].Value = item.Sample_Weight;
dgr.Cells["Shelf_Operator"].Value = item.Operator;
}
}
}
}
}
}
}