387 lines
15 KiB
C#
387 lines
15 KiB
C#
|
|
using SOH.Kernel;
|
|||
|
|
using System;
|
|||
|
|
using System.Collections.Generic;
|
|||
|
|
using System.ComponentModel;
|
|||
|
|
using System.Data;
|
|||
|
|
using System.Drawing;
|
|||
|
|
using System.Linq;
|
|||
|
|
using System.Text;
|
|||
|
|
using System.Windows.Forms;
|
|||
|
|
using EAS.Services;
|
|||
|
|
using SOH.BLL;
|
|||
|
|
using SOH.Entities;
|
|||
|
|
using SOH.Data;
|
|||
|
|
using Microsoft.Win32;
|
|||
|
|
using System.Diagnostics;
|
|||
|
|
using System.IO;
|
|||
|
|
using System.Drawing.Drawing2D;
|
|||
|
|
|
|||
|
|
namespace SOH.JianYan
|
|||
|
|
{
|
|||
|
|
[ModuleAttribute(ModuleID = "0CA0F524-58B9-456F-B5E3-A923051C9926", ModuleName = "质控图")]
|
|||
|
|
public partial class frm_ZKT : SOH.Window.baseChildForm
|
|||
|
|
{
|
|||
|
|
public QC_Object newQCObject;
|
|||
|
|
public frm_ZKT()
|
|||
|
|
{
|
|||
|
|
InitializeComponent();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void cbb_yq_SelectedValueChanged(object sender, EventArgs e)
|
|||
|
|
{
|
|||
|
|
if (cbb_yq.SelectedValue != null)
|
|||
|
|
{
|
|||
|
|
qCValueBindingSource1.DataSource = null;
|
|||
|
|
showxq();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public void showxq()
|
|||
|
|
{
|
|||
|
|
var vser = ServiceContainer.GetService<IJianYan>();
|
|||
|
|
List<QC_Object> qco = vser.getQCObject(cbb_yq.SelectedValue.ToString());
|
|||
|
|
List<QC_Object> qco1 = qco.Where(t => t.qybj == 1).ToList();
|
|||
|
|
if (qco1.Count != 0)
|
|||
|
|
{
|
|||
|
|
QC_Object oneQCobject = qco1.First();
|
|||
|
|
hqyqjdbbh(oneQCobject);
|
|||
|
|
qCObjectBindingSource.DataSource = qco1;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
qCObjectBindingSource.DataSource = null;
|
|||
|
|
qCItemsBindingSource.DataSource = null;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void hqyqjdbbh(QC_Object qcobject)
|
|||
|
|
{
|
|||
|
|
var vser = ServiceContainer.GetService<IJianYan>();
|
|||
|
|
List<QC_Items> qcItems = vser.hqqcItems(cbb_yq.SelectedValue.ToString(), qcobject.QCOID);
|
|||
|
|
List<QC_Items> qcItems1 = qcItems.Where(t => t.qybj == 1).ToList();
|
|||
|
|
if (qcItems1 != null)
|
|||
|
|
{
|
|||
|
|
qCItemsBindingSource.DataSource = qcItems1;
|
|||
|
|
|
|||
|
|
qCValueBindingSource1.DataSource = null;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
class yiqi
|
|||
|
|
{
|
|||
|
|
public string yq { get; set; }
|
|||
|
|
public string yqmc { get; set; }
|
|||
|
|
}
|
|||
|
|
private void frm_ZKT_Load(object sender, EventArgs e)
|
|||
|
|
{
|
|||
|
|
dgv_qcvalues.AutoGenerateColumns = false;
|
|||
|
|
|
|||
|
|
dtp_strrq.Value = new DateTime(DateTime.Now.Year, DateTime.Now.Month - 1, 1);
|
|||
|
|
dtp_endrq.Value = DateTime.Now;
|
|||
|
|
|
|||
|
|
var vser = ServiceContainer.GetService<IJianYan>();
|
|||
|
|
string pcname = System.Net.Dns.GetHostName();
|
|||
|
|
var yqs = vser.getAllYQ();
|
|||
|
|
cbb_yq.DataSource = yqs.Select(t => new yiqi { yq = t.yq, yqmc = t.yq + "(" + t.yqmc + ")" }).ToList();
|
|||
|
|
showxq();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void dataGridView2_CellClick(object sender, DataGridViewCellEventArgs e)
|
|||
|
|
{
|
|||
|
|
DataGridViewRow dgvr = dataGridView2.Rows[e.RowIndex];
|
|||
|
|
var qcobecjt = dgvr.DataBoundItem as QC_Object;
|
|||
|
|
|
|||
|
|
newQCObject = qcobecjt;
|
|||
|
|
|
|||
|
|
hqyqjdbbh(qcobecjt);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void dtp_endrq_ValueChanged(object sender, EventArgs e)
|
|||
|
|
{
|
|||
|
|
DateTime time1 = Convert.ToDateTime(dtp_strrq.Value.Date.ToString("yyyy-MM-dd"));
|
|||
|
|
DateTime time2 = Convert.ToDateTime(dtp_endrq.Value.Date.ToString("yyyy-MM-dd"));
|
|||
|
|
|
|||
|
|
if (DateTime.Compare(time1, time2) > 0) //判断日期大小
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
MessageBox.Show("结束日期不能小于开始日期,请重新选择日期");
|
|||
|
|
}
|
|||
|
|
//else if (DateTime.Compare(time2, time1) < 0) //判断日期大小
|
|||
|
|
//{
|
|||
|
|
// MessageBox.Show("开始日期不能大于结束日期,请重新选择日期");
|
|||
|
|
//}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void dtp_strrq_ValueChanged(object sender, EventArgs e)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public QC_Items newQcItems;
|
|||
|
|
|
|||
|
|
private void dgv_Items_CellClick(object sender, DataGridViewCellEventArgs e)
|
|||
|
|
{
|
|||
|
|
DataGridViewRow dgvr = dgv_Items.Rows[e.RowIndex];
|
|||
|
|
var qcItems = dgvr.DataBoundItem as QC_Items;
|
|||
|
|
|
|||
|
|
if (qcItems != null)
|
|||
|
|
{
|
|||
|
|
newQcItems = qcItems;
|
|||
|
|
hqQcValues(newQcItems);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void hqQcValues(QC_Items qci)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
string strrq = dtp_strrq.Value.Date.ToString("yyyy-MM-dd");
|
|||
|
|
string endrq = dtp_endrq.Value.Date.ToString("yyyy-MM-dd");
|
|||
|
|
|
|||
|
|
var vser = ServiceContainer.GetService<IJianYan>();
|
|||
|
|
DataTable qcValues = vser.hqqcvalues(strrq, endrq, qci);
|
|||
|
|
Image bzimg = new Bitmap(820, 330);
|
|||
|
|
Graphics g = System.Drawing.Graphics.FromImage(bzimg);
|
|||
|
|
g.SmoothingMode = SmoothingMode.AntiAlias; //使绘图质量最高,即消除锯齿
|
|||
|
|
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
|
|||
|
|
g.CompositingQuality = CompositingQuality.HighQuality;
|
|||
|
|
g.FillRectangle(new SolidBrush(Color.White), 0, 0, 820, 330);
|
|||
|
|
if (qcValues.Rows.Count != 0)
|
|||
|
|
{
|
|||
|
|
Font f = new Font("微软雅黑", 14, FontStyle.Bold);
|
|||
|
|
yiqi y = cbb_yq.SelectedItem as yiqi;
|
|||
|
|
string bt = y.yqmc + qci.xmmc + "质控图";
|
|||
|
|
SizeF s = g.MeasureString(bt, f);
|
|||
|
|
g.DrawString(bt, f, Brushes.Black, (830 - s.Width) / 2, 0);
|
|||
|
|
string sj = strrq + " 至 " + endrq;
|
|||
|
|
Font sjf = new Font("微软雅黑", 10);
|
|||
|
|
s = g.MeasureString(sj, sjf);
|
|||
|
|
g.DrawString(sj, sjf, Brushes.Black, (820 - s.Width) / 2, 26);
|
|||
|
|
g.DrawLine(Pens.Black, 40, 45, 40, 45 + 264);
|
|||
|
|
g.DrawLine(Pens.Black, 40, 45 + 264 / 2, 40 + 760, 45 + 264 / 2);
|
|||
|
|
string s_sd = "靶值";
|
|||
|
|
Font f_sd = new Font("宋体", 10);
|
|||
|
|
SizeF sf_sd = g.MeasureString(s_sd, f_sd);
|
|||
|
|
g.DrawString(s_sd, f_sd, Brushes.Black, 40 - sf_sd.Width, 45 + 264 / 2 - sf_sd.Height / 2);
|
|||
|
|
//33
|
|||
|
|
Pen p_g = new Pen(Brushes.Green);
|
|||
|
|
p_g.DashStyle = DashStyle.Dash;
|
|||
|
|
g.DrawLine(p_g, 40, 45 + 264 / 2 - 33, 40 + 760, 45 + 264 / 2 - 33);
|
|||
|
|
s_sd = "1sd";
|
|||
|
|
f_sd = new Font("宋体", 14);
|
|||
|
|
sf_sd = g.MeasureString(s_sd, f_sd);
|
|||
|
|
g.DrawString(s_sd, f_sd, Brushes.Green, 40 - sf_sd.Width, 45 + 264 / 2 - 33 - sf_sd.Height / 2);
|
|||
|
|
|
|||
|
|
g.DrawLine(p_g, 40, 45 + 264 / 2 + 33, 40 + 760, 45 + 264 / 2 + 33);
|
|||
|
|
p_g = new Pen(Brushes.Green);
|
|||
|
|
p_g.DashStyle = DashStyle.Dash;
|
|||
|
|
s_sd = "-1sd";
|
|||
|
|
f_sd = new Font("宋体", 14);
|
|||
|
|
sf_sd = g.MeasureString(s_sd, f_sd);
|
|||
|
|
g.DrawString(s_sd, f_sd, Brushes.Green, 40 - sf_sd.Width, 45 + 264 / 2 + 33 - sf_sd.Height / 2);
|
|||
|
|
|
|||
|
|
|
|||
|
|
//66
|
|||
|
|
p_g = new Pen(Brushes.Orange);
|
|||
|
|
p_g.DashStyle = DashStyle.DashDot;
|
|||
|
|
g.DrawLine(p_g, 40, 45 + 264 / 2 - 66, 40 + 760, 45 + 264 / 2 - 66);
|
|||
|
|
s_sd = "2sd";
|
|||
|
|
f_sd = new Font("宋体", 14);
|
|||
|
|
sf_sd = g.MeasureString(s_sd, f_sd);
|
|||
|
|
g.DrawString(s_sd, f_sd, Brushes.Orange, 40 - sf_sd.Width, 45 + 264 / 2 - 66 - sf_sd.Height / 2);
|
|||
|
|
|
|||
|
|
g.DrawLine(p_g, 40, 45 + 264 / 2 + 66, 40 + 760, 45 + 264 / 2 + 66);
|
|||
|
|
p_g = new Pen(Brushes.Orange);
|
|||
|
|
p_g.DashStyle = DashStyle.DashDot;
|
|||
|
|
s_sd = "-2sd";
|
|||
|
|
f_sd = new Font("宋体", 14);
|
|||
|
|
sf_sd = g.MeasureString(s_sd, f_sd);
|
|||
|
|
g.DrawString(s_sd, f_sd, Brushes.Orange, 40 - sf_sd.Width, 45 + 264 / 2 + 66 - sf_sd.Height / 2);
|
|||
|
|
|
|||
|
|
|
|||
|
|
//99
|
|||
|
|
p_g = new Pen(Brushes.Red);
|
|||
|
|
p_g.DashStyle = DashStyle.DashDot;
|
|||
|
|
g.DrawLine(p_g, 40, 45 + 264 / 2 - 99, 40 + 760, 45 + 264 / 2 - 99);
|
|||
|
|
s_sd = "3sd";
|
|||
|
|
f_sd = new Font("宋体", 14);
|
|||
|
|
sf_sd = g.MeasureString(s_sd, f_sd);
|
|||
|
|
g.DrawString(s_sd, f_sd, Brushes.Red, 40 - sf_sd.Width, 45 + 264 / 2 - 99 - sf_sd.Height / 2);
|
|||
|
|
|
|||
|
|
g.DrawLine(p_g, 40, 45 + 264 / 2 + 99, 40 + 760, 45 + 264 / 2 + 99);
|
|||
|
|
p_g = new Pen(Brushes.Red);
|
|||
|
|
p_g.DashStyle = DashStyle.DashDot;
|
|||
|
|
s_sd = "-3sd";
|
|||
|
|
f_sd = new Font("宋体", 14);
|
|||
|
|
sf_sd = g.MeasureString(s_sd, f_sd);
|
|||
|
|
g.DrawString(s_sd, f_sd, Brushes.Red, 40 - sf_sd.Width, 45 + 264 / 2 + 99 - sf_sd.Height / 2);
|
|||
|
|
g.DrawLine(Pens.Black, 40, 45 + 264, 40 + 760, 45 + 264);
|
|||
|
|
|
|||
|
|
int days = (dtp_endrq.Value - dtp_strrq.Value).Days + 1;
|
|||
|
|
if (days < 1)
|
|||
|
|
{
|
|||
|
|
MessageBox.Show("请选择正确的时间段!");
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
float jg = 760 * 1.0f / (days + 1);
|
|||
|
|
PointF sp = new PointF(0, 0);
|
|||
|
|
RectangleF rect = new RectangleF(40, 45, 760, 264);
|
|||
|
|
for (int i = 0; i < days; i++)
|
|||
|
|
{
|
|||
|
|
g.DrawLine(Pens.Black, 40 + (i + 1) * jg, 45 + 264 - 3, 40 + (i + 1) * jg, 45 + 264);
|
|||
|
|
DateTime m = dtp_strrq.Value.AddDays(i);
|
|||
|
|
f = new Font("宋体", 8);
|
|||
|
|
string s1 = "";
|
|||
|
|
if (m.Day == 1)
|
|||
|
|
{
|
|||
|
|
s1 = m.Month + "月";
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
s1 = (m.Day).ToString();
|
|||
|
|
}
|
|||
|
|
s = g.MeasureString(s1, f);
|
|||
|
|
g.DrawString(s1, f, Brushes.Black, 40 + (i + 1) * jg - s.Width / 2, 45 + 265);
|
|||
|
|
DataRow[] drs = qcValues.Select("DataValue='" + m.ToString("yyyy-MM-dd") + "'");
|
|||
|
|
if (drs.Length > 0)
|
|||
|
|
{
|
|||
|
|
float bz = 0;
|
|||
|
|
string sbz = drs[0]["SD"].ToString();
|
|||
|
|
float.TryParse(sbz, out bz);
|
|||
|
|
if (bz != 0)
|
|||
|
|
{
|
|||
|
|
PointF ep = new PointF(40 + (i + 1) * jg, 45 + 264 / 2 - bz * 33);
|
|||
|
|
if (rect.Contains(ep))
|
|||
|
|
g.FillEllipse(Brushes.Black, ep.X - 2, ep.Y - 2, 4, 4);
|
|||
|
|
if(sp.X!=0&&sp.Y!=0)
|
|||
|
|
{
|
|||
|
|
g.DrawLine(Pens.Black, sp, ep);
|
|||
|
|
}
|
|||
|
|
sp = ep;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
qcValues.DefaultView.Sort = "DataValue";
|
|||
|
|
DataTable orderdt = qcValues.DefaultView.ToTable();
|
|||
|
|
qCValueBindingSource1.DataSource = orderdt;
|
|||
|
|
|
|||
|
|
double c;
|
|||
|
|
for (int i = 0; i < dgv_qcvalues.Rows.Count; i++)
|
|||
|
|
{
|
|||
|
|
if (dgv_qcvalues.Rows[i].Cells["col_sc"].Value.ToString().Trim().Length > 0)
|
|||
|
|
{
|
|||
|
|
if (double.TryParse(dgv_qcvalues.Rows[i].Cells["col_sc"].Value.ToString(), out c))
|
|||
|
|
{
|
|||
|
|
if ((c > 2 && c < 3) || (c < -2 && c > -3))
|
|||
|
|
{
|
|||
|
|
dgv_qcvalues.Rows[i].Cells["col_sc"].Style.BackColor = Color.Yellow;
|
|||
|
|
}
|
|||
|
|
else if ((c > 3) || (c < -3))
|
|||
|
|
{
|
|||
|
|
dgv_qcvalues.Rows[i].Cells["col_sc"].Style.BackColor = Color.Red;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
qCValueBindingSource1.DataSource = null;
|
|||
|
|
}
|
|||
|
|
pic_zkt.Image = bzimg;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void dgv_qcvalues_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
|
|||
|
|
{
|
|||
|
|
DataGridView dgv = (DataGridView)sender;
|
|||
|
|
if (dgv.Columns[e.ColumnIndex].Name == "dgv_jg")
|
|||
|
|
{
|
|||
|
|
e.Cancel = false;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
e.Cancel = true;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
public QC_Value newqcValues;
|
|||
|
|
public string qcValuesID;
|
|||
|
|
|
|||
|
|
private void dgv_qcvalues_CellClick(object sender, DataGridViewCellEventArgs e)
|
|||
|
|
{
|
|||
|
|
this.dgv_qcvalues.EditMode = System.Windows.Forms.DataGridViewEditMode.EditOnEnter;
|
|||
|
|
|
|||
|
|
//DataGridViewRow dgvr = ;
|
|||
|
|
string qcvalueid = dgv_qcvalues.Rows[e.RowIndex].Cells["col_id"].Value.ToString();
|
|||
|
|
//var qcvaluess = dgvr.DataBoundItem as QC_Value;
|
|||
|
|
|
|||
|
|
if (qcvalueid != null)
|
|||
|
|
{
|
|||
|
|
qcValuesID = qcvalueid;
|
|||
|
|
//newqcValues = qcvaluess;
|
|||
|
|
//hqQcValues(newQcItems);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void dgv_qcvalues_CellValueChanged(object sender, DataGridViewCellEventArgs e)
|
|||
|
|
{
|
|||
|
|
if (dgv_qcvalues.Rows.Count != 0)
|
|||
|
|
{
|
|||
|
|
DataGridViewRow dgvxm = dgv_qcvalues.Rows[e.RowIndex];
|
|||
|
|
string yqbh = dgvxm.Cells["col_yqbh"].Value.ToString();
|
|||
|
|
int QCOID = Convert.ToInt32(dgvxm.Cells["col_QCOID"].Value.ToString());
|
|||
|
|
int id = Convert.ToInt32(dgvxm.Cells["col_id"].Value.ToString());
|
|||
|
|
string rq = dgvxm.Cells["col_rq"].Value.ToString();
|
|||
|
|
string time = dgvxm.Cells["col_time"].Value.ToString();
|
|||
|
|
Double bz = Convert.ToDouble(dgvxm.Cells["col_bz"].Value);
|
|||
|
|
Double bzc = Convert.ToDouble(dgvxm.Cells["col_bzc"].Value);
|
|||
|
|
|
|||
|
|
Double jg = Convert.ToDouble(dgvxm.Cells["dgv_jg"].Value);
|
|||
|
|
|
|||
|
|
Double SD = (jg - bz) / bzc;
|
|||
|
|
var vser = ServiceContainer.GetService<IJianYan>();
|
|||
|
|
vser.qcValueUpdate(id, jg.ToString(), SD);
|
|||
|
|
|
|||
|
|
hqQcValues(newQcItems);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void button1_Click(object sender, EventArgs e)
|
|||
|
|
{
|
|||
|
|
if (newQcItems != null)
|
|||
|
|
{
|
|||
|
|
string rq = DateTime.Now.ToString("yyyy-MM-dd");
|
|||
|
|
string time = DateTime.Now.ToLongTimeString().ToString();
|
|||
|
|
|
|||
|
|
var vser = ServiceContainer.GetService<IJianYan>();
|
|||
|
|
vser.insertQcValue(rq, time, newQcItems);
|
|||
|
|
hqQcValues(newQcItems);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
MessageBox.Show("请选择一项质控项目!");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void button2_Click(object sender, EventArgs e)
|
|||
|
|
{
|
|||
|
|
if (qcValuesID != null)
|
|||
|
|
{
|
|||
|
|
var vser = ServiceContainer.GetService<IJianYan>();
|
|||
|
|
vser.deleteQcvalue(Convert.ToInt32(qcValuesID));
|
|||
|
|
hqQcValues(newQcItems);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
MessageBox.Show("请选择一项要删除的质控结果!");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void button3_Click(object sender, EventArgs e)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|