using Core.Mes.Client.Comm.Control;
using Core.Mes.Client.Comm.Server;
using Core.Mes.Client.Comm.Tool;
using CoreFS.CA06;
using Infragistics.Win.UltraWinGrid;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.Windows.Forms;
namespace Core.StlMes.Client.Qcm
{
public partial class FrmComMscPhyStdNote : FrmBase
{
public FrmComMscPhyStdNote()
{
InitializeComponent();
// this.MaximizeBox = false;
this.MinimizeBox = false;
}
private string pic; //理化标准索引号
public string Pic
{
get { return pic; }
set { pic = value; }
}
private string index; //理化标准索引号-序号
public string Index
{
get { return index; }
set { index = value; }
}
private string phyCode; //检验项代码
public string PhyCode
{
get { return phyCode; }
set { phyCode = value; }
}
private string phyName; //检验项名称
public string PhyName
{
get { return phyName; }
set { phyName = value; }
}
private OpeBase newOb; //ob对象
public OpeBase NewOb
{
get { return newOb; }
set { newOb = value; }
}
private string sResult;
public string SResult
{
get { return sResult; }
set { sResult = value; }
}
private string sResult2; //预留
public string SResult2
{
get { return sResult2; }
set { sResult2 = value; }
}
private string noteIndex;
public string NoteIndex
{
get { return noteIndex; }
set { noteIndex = value; }
}
private string stdMin;
public string StdMin
{
get { return stdMin; }
set { stdMin = value; }
}
private string stdGuid;
public string StdGuid
{
get { return stdGuid; }
set { stdGuid = value; }
}
private bool isCustAlphaPopup = false;
public bool IsCustAlphaPopup
{
get { return isCustAlphaPopup; }
set { isCustAlphaPopup = value; }
}
string stdDesc = "";
private void FrmComMscPhyStdNote_Load(object sender, EventArgs e)
{
if (isCustAlphaPopup)
{
ultraToolbarsManager1.Tools["ButtonTool2"].SharedProps.Visible = false;
ultraToolbarsManager1.Tools["ButtonTool5"].SharedProps.Visible = false;
ultraGroupBox1.Visible = false;
}
DoQuery();
}
private void ultraToolbarsManager1_ToolClick(object sender, Infragistics.Win.UltraWinToolbars.ToolClickEventArgs e)
{
if (e.Tool.Key.Equals("ButtonTool1")) //查询
{
DoQuery();
}
else if (e.Tool.Key.Equals("ButtonTool2")) //新增
{
DoAdd();
}
else if (e.Tool.Key.Equals("ButtonTool3")) //选择确定
{
DoChoose();
}
else if (e.Tool.Key.Equals("ButtonTool5")) //修改
{
DoUpdate();
}
else if (e.Tool.Key.Equals("ButtonTool6")) //关闭
{
if (MessageBox.Show("是否关闭本窗口?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
return;
this.Close();
}
}
private void DoQuery()
{
DataTable dt = ServerHelper.GetData("com.steering.pss.qcm.CoreMscPhyStdNote.doQuery", new object[] { this.PhyCode }, this.newOb);
GridHelper.CopyDataToDatatable(ref dt, ref dataTable1, true);
//DataTable dt1 = ServerHelper.GetData("com.steering.pss.qcm.CoreMscPhyStdNote.queryGuid", new object[] { this.Pic, this.Index }, this.NewOb);
//string strGuid = "";
//if (dt1 != null && dt1.Rows.Count > 0)
//{
// strGuid = dt1.Rows[0][0].ToString();
//}
foreach (UltraGridRow row in ultraGrid1.Rows)
{
if (row.Cells["STD_DESC"].Value.ToString() == stdDesc)
{
row.Activate();
break;
}
}
if (stdGuid != "")
{
foreach (UltraGridRow row in ultraGrid1.Rows)
{
if (row.Cells["GUID"].Value.ToString() == stdGuid)
{
row.RowSelectorAppearance.BackColor = Color.Yellow;
break;
}
}
}
stdDesc = "";
}
private void DoAdd()
{
if (GetData() == -1)
{
return;
}
DataTable dt = ServerHelper.GetData("com.steering.pss.qcm.CoreMscPhyStdNote.isReapt", new object[] { ultraTextEditor2.Text.Trim(), this.PhyCode }, this.NewOb);
if (dt != null && dt.Rows.Count > 0)
{
MessageUtil.ShowWarning("你输入的标准要求重复!");
return;
}
stdDesc = ultraTextEditor2.Text.Trim();
int count = ServerHelper.SetData("com.steering.pss.qcm.CoreMscPhyStdNote.doAdd", new object[] { parmList }, this.NewOb);
if (count > 0)
{
MessageUtil.ShowTips("数据新增成功!");
DoQuery();
}
}
private void DoUpdate()
{
UltraGridRow ugr = ultraGrid1.ActiveRow;
if (ugr == null)
{
MessageUtil.ShowWarning("请选择一条要修改的记录!");
return;
}
if (GetData() == -1)
{
return;
}
//判断要修改的序号是否被组合。
DataTable dtIndex = ServerHelper.GetData("com.steering.pss.qcm.CoreMscPhyStdNote.isGrouped", new object[] { this.PhyCode }, this.NewOb);
if (dtIndex != null && dtIndex.Rows.Count > 0)
{
string indexStr = dtIndex.Rows[0][0].ToString();
if (indexStr != "")
{
indexStr = indexStr.Replace("AND", "{");
indexStr = indexStr.Replace("OR", "}");
string[] arrIndex = indexStr.Split(new char[] { '{', '}', ',', ' ' }, StringSplitOptions.RemoveEmptyEntries);
for (int i = 0; i < arrIndex.Length; i++)
{
if (arrIndex[i].ToString() == ugr.Cells["INDEX_SEQ"].Value.ToString())
{
MessageUtil.ShowWarning("选择修改的标准说明已被用于组合新标准,无法修改!");
return;
}
}
}
}
//判断要修改的序号是否被引用。
DataTable dtGuid = ServerHelper.GetData("com.steering.pss.qcm.CoreMscPhyStdNote.isRefenced", new object[] { ugr.Cells["GUID"].Value.ToString() }, this.NewOb);
if (dtGuid != null && dtGuid.Rows.Count > 0)
{
MessageUtil.ShowWarning("选择修改的标准说明已被引用,无法修改!");
return;
}
//判断组合的序号是否包含了自身序号。
if (ultraTextEditor3.Text != "")
{
string group = ultraTextEditor3.Text;
group = group.Replace("AND", "{");
group = group.Replace("OR", "}");
string[] arrGroup = group.Split(new char[] { '{', '}', ' ' }, StringSplitOptions.RemoveEmptyEntries);
for (int i = 0; i < arrGroup.Length; i++)
{
if (arrGroup[i] == ugr.Cells["INDEX_SEQ"].Value.ToString())
{
MessageUtil.ShowWarning("标准组合不能引用自身!");
return;
}
}
}
//判断修改的标准要求,或组合的标准要求是否重复。
DataTable dt = ServerHelper.GetData("com.steering.pss.qcm.CoreMscPhyStdNote.isReaptUpdate", new object[] { ultraTextEditor2.Text.Trim(), this.PhyCode, ugr.Cells["INDEX_SEQ"].Value.ToString() }, this.NewOb);
if (dt != null && dt.Rows.Count > 0)
{
MessageUtil.ShowWarning("你输入的标准要求重复!");
return;
}
stdDesc = ultraTextEditor2.Text.Trim();
if (MessageBox.Show("是否确认修改数据?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
return;
parmList.RemoveAt(parmList.Count - 1);
parmList.Add(ugr.Cells["PHY_CODE"].Value.ToString());
parmList.Add(ugr.Cells["INDEX_SEQ"].Value.ToString());
int count = ServerHelper.SetData("com.steering.pss.qcm.CoreMscPhyStdNote.doUpdate", new object[] { parmList }, this.NewOb);
if (count > 0)
{
MessageUtil.ShowTips("数据修改成功!");
DoQuery();
}
}
private void DoChoose()
{
UltraGridRow ugr = ultraGrid1.ActiveRow;
if (ugr == null)
{
MessageUtil.ShowWarning("请选择一条需要关联的记录!");
return;
}
if (MessageBox.Show("是否确认关联?是,请到理化标准界面保存关联结果,否则不做处理", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
{
return;
}
NoteIndex = ugr.Cells["STD_DESC"].Value.ToString();
StdGuid = ugr.Cells["GUID"].Value.ToString();
this.Close();
// ArrayList list = new ArrayList();
// list.Add(ugr.Cells["GUID"].Value.ToString());
// list.Add(ugr.Cells["STD_DESC"].Value.ToString());
// list.Add(this.Pic);
// list.Add(this.Index);
// int count = ServerHelper.SetData("com.steering.pss.qcm.CoreMscPhyStdNote.updateMaterial", new object[] { list }, this.NewOb);
// if (count > 0)
// {
// MessageUtil.ShowTips("关联成功!");
// DoQuery();
// }
}
ArrayList parmList = new ArrayList();
private int GetData()
{
parmList.Clear();
bool isChecked = ultraCheckEditor1.Checked;
if (isChecked == false && ultraTextEditor2.Text.Trim() == "" && ultraTextEditor3.Text.Trim() == "")
{
MessageUtil.ShowWarning("请输入标准要求!");
return -1;
}
//标准组合序号---
if (ultraCheckEditor1.Checked)
{
if (ultraTextEditor3.Text.Trim() == "")
{
MessageUtil.ShowWarning("请选择标准组合!");
return -1;
}
}
if (ultraTextEditor3.Text.Trim() != "")
{
string str = ultraTextEditor3.Text;
str = str.Replace("AND", "+");
str = str.Replace("OR", "-");
//组合是否合乎数学公式性
if (!TestFormula(str))
{
MessageUtil.ShowWarning("标准组合不合法!");
return -1;
}
//组合的项目是否存在。
if (!isExistNum(str))
{
MessageUtil.ShowWarning("标准组合序号有不存在的序号!");
return -1;
}
}
parmList.Add(this.PhyCode);
parmList.Add(this.PhyName);
parmList.Add(ultraTextEditor2.Text.Trim());
parmList.Add(ultraTextEditor3.Text.Trim());
parmList.Add(this.UserInfo.GetUserName());
parmList.Add(ultraTextEditor4.Text.Trim());
parmList.Add(System.Guid.NewGuid().ToString("N"));
return 0;
}
///
/// 组合是否合法
///
///
///
private bool TestFormula(string str)
{
decimal? result;
result = str.CompileFormula();
if (result == null)
return false;
return true;
}
string repStr = "A";
///
/// 是否存在组合序号然后转化序号组合以及描述
///
///
private bool isExistNum(string str)
{
SResult = ultraTextEditor3.Text;
string strGroup = sResult; //保留一份副本
char[] ch = new char[] { '(', ')', '+', '-', ' ' };
string[] arrStr = str.Split(ch, StringSplitOptions.RemoveEmptyEntries);
Dictionary dicValue = new Dictionary(); //标准说明
Dictionary dicTemp = new Dictionary(); //中间变量
Dictionary dicGroup = new Dictionary(); //组合序号
DataTable dt = ServerHelper.GetData("com.steering.pss.qcm.CoreMscPhyStdNote.doQueryIndex", new object[] { this.PhyCode }, this.newOb);
if (dt != null && dt.Rows.Count > 0)
{
for (int i = 0; i < arrStr.Length; i++)
{
DataRow[] dr = dt.Select("INDEX_SEQ = '" + arrStr[i] + "'");
if (dr.Length <= 0)
{
return false;
}
if (!dicValue.ContainsKey(arrStr[i]))
dicValue.Add(arrStr[i], dr[0]["STD_DESC"].ToString());
if (!dr[0]["INDEX_SEQ_GROUP"].ToString().Equals("") && !dicGroup.ContainsKey(arrStr[i]))
dicGroup.Add(arrStr[i], dr[0]["INDEX_SEQ_GROUP"].ToString());
}
int[] arrInt = StringToInt(arrStr);
string[] tempStr = new string[arrStr.Length];
sResult = sResult.Replace("AND", "且");
sResult = sResult.Replace("OR", "或");
for (int i = 0; i < arrInt.Length; i++)
{
if (dicTemp.ContainsKey(arrInt[i].ToString()))
{
sResult = sResult.Replace(arrInt[i].ToString(), "#" + dicTemp[arrInt[i].ToString()]);
if (dicGroup.ContainsKey(arrInt[i].ToString()))
strGroup = strGroup.Replace(arrInt[i].ToString(), "#" + dicTemp[arrInt[i].ToString()]);
}
else
{
sResult = sResult.Replace(arrInt[i].ToString(), "#" + repStr);
if (dicGroup.ContainsKey(arrInt[i].ToString()))
strGroup = strGroup.Replace(arrInt[i].ToString(), "#" + repStr);
}
dicTemp.Add(repStr, arrInt[i].ToString());
tempStr[i] = repStr;
char newCh = Convert.ToChar(Convert.ToChar(repStr) + 1);
repStr = newCh.ToString();
}
for (int i = 0; i < tempStr.Length; i++)
{
sResult = sResult.Replace("#" + tempStr[i], dicValue[dicTemp[tempStr[i]]]);
if (dicGroup.ContainsKey(dicTemp[tempStr[i]]))
{
strGroup = strGroup.Replace("#" + tempStr[i], dicGroup[dicTemp[tempStr[i]]]);
}
}
ultraTextEditor2.Text = sResult;
ultraTextEditor3.Text = strGroup;
// MessageBox.Show(sResult+"\n"+strGroup);
return true;
}
else
{
return false;
}
}
private int[] StringToInt(string[] arrStr)
{
int[] arrInt = new int[arrStr.Length];
for (int i = 0; i < arrStr.Length; i++)
{
arrInt[i] = Convert.ToInt32(arrStr[i]);
}
arrInt = ArrSort(arrInt);
return arrInt;
}
private int[] ArrSort(int[] arr)
{
for (int i = 0; i < arr.Length; ++i)
{
int temp = arr[i]; //定义一个int变量,并使用获得的数组元素值赋值
int j = i;
while ((j > 0) && (arr[j - 1] < temp)) //判断数组中的元素是否小于获得的值
{
arr[j] = arr[j - 1]; //如果是,则将后一元素的的值提前
--j;
}
arr[j] = temp; //最后将int变量存储的值赋值给最后一个元素
}
return arr;
}
private void ultraCheckEditor1_CheckedChanged(object sender, EventArgs e)
{
if (ultraCheckEditor1.Checked)
{
ultraTextEditor3.Enabled = true;
ultraTextEditor3.ReadOnly = true;
}
else
{
ultraTextEditor3.Enabled = false;
}
}
private void ultraGrid1_AfterRowActivate(object sender, EventArgs e)
{
UltraGridRow ugr = ultraGrid1.ActiveRow;
if (ugr == null)
return;
ultraTextEditor2.Text = ugr.Cells["STD_DESC"].Value.ToString();
ultraTextEditor3.Text = ugr.Cells["INDEX_SEQ_GROUP"].Value.ToString();
ultraTextEditor4.Text = ugr.Cells["MEMO"].Value.ToString();
}
private void ultraTextEditor3_EditorButtonClick(object sender, Infragistics.Win.UltraWinEditors.EditorButtonEventArgs e)
{
UserControlCal usc = new UserControlCal();
usc.CloseEvent += new CloseHandler(usc_CloseEvent);
usc.OkEvent += new OkHandler(usc_OkEvent);
ultraPopupControlContainer1.PopupControl = usc;
int x = ultraGroupBox1.PointToScreen(ultraTextEditor3.Location).X;
int y = ultraGroupBox1.PointToScreen(ultraTextEditor3.Location).Y - usc.Height;
usc.TxtValue = ultraTextEditor3.Text;
ultraPopupControlContainer1.Show(new Point(x, y));
}
void usc_OkEvent(string result, string result2)
{
this.SResult = result;
ultraPopupControlContainer1.Close();
ultraTextEditor3.Text = this.SResult;
}
void usc_CloseEvent()
{
ultraPopupControlContainer1.Close();
}
}
}