MeasureSetUp.cs 68 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;
  10. using SmartCoalApplication.Base.AutoMeasure;
  11. using SmartCoalApplication.Core;
  12. using System.Xml;
  13. using SmartCoalApplication.Annotation.Enum;
  14. using SmartCoalApplication.Base.MeasureModel;
  15. using SmartCoalApplication.Base.CommTool;
  16. using System.IO;
  17. using System.Text.RegularExpressions;
  18. using SmartCoalApplication.Resources;
  19. using Resources;
  20. using SmartCoalApplication.Core.DbOpreate.DbModel;
  21. using System.Reflection;
  22. using Microsoft.CSharp;
  23. using System.CodeDom.Compiler;
  24. namespace SmartCoalApplication.MeasureProcedure
  25. {
  26. internal partial class MeasureSetUp : PdnBaseForm
  27. {
  28. /// <summary>
  29. /// 設置點擊結點,根目錄名稱,點擊目錄的層數
  30. /// </summary>
  31. public TreeNode clickNode = new TreeNode();
  32. public string rootName = "";
  33. public int level = 0;//節點的層數
  34. private List<Label> labels = new List<Label>();//插入公式label
  35. private List<Button> buttons = new List<Button>();//插入公式刪除按鈕
  36. // 创建委托
  37. public delegate void TransferDataDelegate(List<MeasureMaintenanceFormula> list);
  38. // 声明一个事件(本质是一个委托)
  39. public event TransferDataDelegate TransferEvent;
  40. /// <summary>
  41. /// 公式相关
  42. /// </summary>
  43. private Dictionary<string, List<MeasureMaintenanceFormulaParameters>> fourmulaParametersList = new Dictionary<string, List<MeasureMaintenanceFormulaParameters>>();
  44. /// <summary>
  45. /// 新增编辑公式相关
  46. /// </summary>
  47. private List<MeasureMaintenanceFormula> everyFourmulaList = new List<MeasureMaintenanceFormula>();
  48. /// <summary>
  49. /// 树状结构数据
  50. /// </summary>
  51. protected MeasureMaintenanceTreeData measureMaintenanceTreeData;
  52. private string selectedId;
  53. private MeasureMaintenanceTreeSpecificData selectedData;
  54. private TreeNode selectedTreeNode;
  55. private string fileName;
  56. private AppWorkspace appWorkspace;
  57. private List<string> lineIDList = new List<string>();
  58. /// <summary>
  59. /// 公式符号
  60. /// </summary>
  61. private string[] symbolArray = new string[] { "+", "-", "*", "/" };
  62. private List<MeasureMaintenanceFormulaParameters> parametersList = new List<MeasureMaintenanceFormulaParameters>();
  63. private bool isChoose = true;
  64. private bool isRect = true;
  65. private bool isThreash = true;
  66. public MeasureSetUp(string name,List<MeasureMaintenanceFormula> list,AppWorkspace appWorkspace)
  67. {
  68. InitializeComponent();
  69. InitializeComponent2();
  70. this.label3.Visible = false;
  71. this.comboBox1.Visible = false;
  72. this.Icon = PdnInfo.AppIcon;
  73. this.appWorkspace = appWorkspace;
  74. #region [读取树状结构]
  75. #region [读取基础结构树]
  76. string basicFilePath;
  77. if (Program.instance.configModel.Language == 1)
  78. {
  79. basicFilePath = Application.StartupPath + "\\Config\\" + Program.instance.SettingPrefix + "\\basicTreeDataSimple.xml";
  80. }
  81. else
  82. {
  83. basicFilePath = Application.StartupPath + "\\Config\\" + Program.instance.SettingPrefix + "\\basicTreeDataTraditional.xml";
  84. }
  85. MeasureMaintenanceTreeData basicMeasureMaintenanceTreeData = XmlSerializeHelper.DESerializer<MeasureMaintenanceTreeData>(FileOperationHelper.ReadStringFromFile(basicFilePath, FileMode.Open));
  86. #endregion
  87. string filePath = Application.StartupPath + "\\Config\\" + Program.instance.SettingPrefix + "\\MeasureMaintenanceType\\";
  88. if (!Directory.Exists(filePath))
  89. {
  90. Directory.CreateDirectory(filePath);
  91. }
  92. fileName = name;
  93. filePath = $"{filePath}{fileName}.xml";
  94. if (!System.IO.File.Exists(filePath))
  95. {
  96. measureMaintenanceTreeData = XmlSerializeHelper.DESerializer<MeasureMaintenanceTreeData>(FileOperationHelper.ReadStringFromFile(basicFilePath, FileMode.Open));
  97. #region
  98. //int id = 100000;
  99. //foreach (var item in measureMaintenanceTreeData.MeasureMaintenanceTreeDataList) {
  100. // foreach (var item2 in item.MeasureMaintenanceTreeSpecificSonDataList) {
  101. // item2.MeasureMaintenanceTreeSpecificDataId = id.ToString();
  102. // int sonId = id + 1;
  103. // foreach (var item3 in item2.MeasureMaintenanceTreeSpecificFormulaDataList)
  104. // {
  105. // item3.FormulaParameterParentId = id.ToString();
  106. // item3.FormulaParametersId = sonId.ToString();
  107. // sonId++;
  108. // if (item2.MeasureMaintenanceTreeSpecificFormulaDataList.IndexOf(item3) == item2.MeasureMaintenanceTreeSpecificFormulaDataList.Count - 1) {
  109. // id = sonId;
  110. // }
  111. // }
  112. // }
  113. //}
  114. //WriteXml();
  115. #endregion
  116. }
  117. else
  118. {
  119. measureMaintenanceTreeData = XmlSerializeHelper.DESerializer<MeasureMaintenanceTreeData>(FileOperationHelper.ReadStringFromFile(filePath, FileMode.Open));
  120. foreach (var item in measureMaintenanceTreeData.MeasureMaintenanceTreeDataList)
  121. {
  122. MeasureMaintenanceTreeSpecificData data;
  123. this.appWorkspace.RecursionGetData(item.MeasureMaintenanceTreeSpecificDataId, basicMeasureMaintenanceTreeData.MeasureMaintenanceTreeDataList,out data);
  124. if (data != null)
  125. {
  126. item.MeasureMaintenanceTreeSpecificName = data.MeasureMaintenanceTreeSpecificName;
  127. }
  128. foreach (var item2 in item.MeasureMaintenanceTreeSpecificSonDataList)
  129. {
  130. MeasureMaintenanceTreeSpecificData data2;
  131. this.appWorkspace.RecursionGetData(item2.MeasureMaintenanceTreeSpecificDataId, basicMeasureMaintenanceTreeData.MeasureMaintenanceTreeDataList, out data2);
  132. if (data2 != null)
  133. {
  134. item2.MeasureMaintenanceTreeSpecificName = data2.MeasureMaintenanceTreeSpecificName;
  135. item2.MeasureMaintenanceTreeSpecificFormulaDataList.Clear();
  136. item2.MeasureMaintenanceTreeSpecificFormulaDataList.AddRange(data2.MeasureMaintenanceTreeSpecificFormulaDataList);
  137. }
  138. }
  139. }
  140. }
  141. #region [判断加密狗]
  142. if (Program.useSenseShield)
  143. {
  144. var shieldValue = Program.shieldValue;
  145. List<MeasureMaintenanceTreeSpecificData> needRemove = new List<MeasureMaintenanceTreeSpecificData>();
  146. foreach (var item in measureMaintenanceTreeData.MeasureMaintenanceTreeDataList)
  147. {
  148. uint fatherId = Convert.ToUInt32(item.MeasureMaintenanceTreeSpecificDataId);
  149. if (shieldValue.ContainsKey(fatherId))
  150. {
  151. foreach (var item2 in item.MeasureMaintenanceTreeSpecificSonDataList)
  152. {
  153. uint id = Convert.ToUInt32(item2.MeasureMaintenanceTreeSpecificDataId);
  154. if (shieldValue.ContainsKey(id))
  155. {
  156. if (!shieldValue[id])
  157. {
  158. needRemove.Add(item2);
  159. }
  160. }
  161. else
  162. {
  163. needRemove.Add(item2);
  164. }
  165. }
  166. }
  167. else
  168. {
  169. needRemove.Add(item);
  170. }
  171. }
  172. foreach (var item in needRemove)
  173. {
  174. var delete = measureMaintenanceTreeData.MeasureMaintenanceTreeDataList.Where(m => m.MeasureMaintenanceTreeSpecificDataId.Equals(item.MeasureMaintenanceTreeSpecificDataId)).FirstOrDefault();
  175. if (delete == null)
  176. {
  177. foreach (var item2 in measureMaintenanceTreeData.MeasureMaintenanceTreeDataList)
  178. {
  179. if (item2.MeasureMaintenanceTreeSpecificSonDataList.Contains(item))
  180. {
  181. item2.MeasureMaintenanceTreeSpecificSonDataList.Remove(item);
  182. }
  183. }
  184. }
  185. else
  186. {
  187. measureMaintenanceTreeData.MeasureMaintenanceTreeDataList.Remove(delete);
  188. }
  189. }
  190. }
  191. #endregion
  192. #endregion
  193. this.treeViewSort.ItemHeight = 18;
  194. this.treeViewSort.HideSelection = false;//失去焦点后不隐藏选中节点
  195. //自已绘制
  196. this.treeViewSort.DrawNode += new DrawTreeNodeEventHandler(treeViewSort_DrawNode);
  197. everyFourmulaList.AddRange(list);
  198. foreach (var item in measureMaintenanceTreeData.MeasureMaintenanceTreeDataList)
  199. {
  200. if (item.MeasureMaintenanceTreeSpecificDataId == "9")
  201. {
  202. foreach (var item2 in item.MeasureMaintenanceTreeSpecificSonDataList)
  203. {
  204. isChoose = item2.MeasureMaintenanceTreeSpecificIsCon;
  205. }
  206. }
  207. else if (item.MeasureMaintenanceTreeSpecificDataId == "10")
  208. {
  209. foreach (var item2 in item.MeasureMaintenanceTreeSpecificSonDataList)
  210. {
  211. if (item2.MeasureMaintenanceTreeSpecificDataId == "100300")
  212. isRect = item2.MeasureMaintenanceTreeSpecificIsRect;
  213. }
  214. }
  215. else if (true && item.MeasureMaintenanceTreeSpecificDataId == "7")
  216. {
  217. foreach (var item2 in item.MeasureMaintenanceTreeSpecificSonDataList)
  218. {
  219. if (item2.MeasureMaintenanceTreeSpecificDataId == "100176")
  220. isThreash = item2.MeasureMaintenanceTreeSpecificIsThreash;
  221. }
  222. }
  223. }
  224. #region [标尺相关信息]
  225. List<mic_rulers> ruleList = Program.instance.mic_rulersAll;
  226. comboBox2.DataSource = ruleList;
  227. comboBox2.DisplayMember = "ruler_name";
  228. comboBox2.SelectedIndex = -1;
  229. #endregion
  230. }
  231. private void InitializeComponent2()
  232. {
  233. this.Text = PdnResources.GetString("NewTestProcedureSetting");
  234. this.rootAdd.Text = PdnResources.GetString("NewAdd");
  235. this.groupBox1.Text = PdnResources.GetString("NewOperation");
  236. this.buttonCancel.Text = PdnResources.GetString("NewCancel");
  237. this.buttonDetermine.Text = PdnResources.GetString("NewConfirm");
  238. this.groupBox2.Text = PdnResources.GetString("NewcCassification");
  239. this.groupBox3.Text = PdnResources.GetString("NewMeasureLineSetting");
  240. this.buttonDelete.Text = PdnResources.GetString("NewDelete");
  241. this.buttonInsert.Text = PdnResources.GetString("NewInsert");
  242. this.label2.Text = PdnResources.GetString("NewFormula") + ":";
  243. this.label4.Text = PdnResources.GetString("MeasureSetUp.label4") + ":";
  244. this.label1.Text = PdnResources.GetString("NewAlias") + ":";
  245. this.groupBox4.Text = PdnResources.GetString("NewMeasuringLine");
  246. this.groupBox5.Text = PdnResources.GetString("NewFormulaSymbol");
  247. this.button3.Text = PdnResources.GetString("NewAverageValue");
  248. this.button2.Text = PdnResources.GetString("NewMinimumValue");
  249. this.button1.Text = PdnResources.GetString("NewMaximum");
  250. this.toolStripMenuEdit1.Text = PdnResources.GetString("NewEdit");
  251. this.toolStripMenuDelete1.Text = PdnResources.GetString("NewDelete");
  252. }
  253. private void treeViewSort_DrawNode(object sender, DrawTreeNodeEventArgs e)
  254. {
  255. e.DrawDefault = true; //使用默认颜色,只需要在TreeView失去焦点时选中节点仍然突显
  256. return;
  257. }
  258. /// <summary>
  259. /// 窗口加載,初始化
  260. /// </summary>
  261. private void MeasureSetUp_Load(object sender, EventArgs e)
  262. {
  263. //初始化鏈接節點
  264. RootNodeInitialize();
  265. //為根節點鏈接新增選項
  266. //為檢驗項目鏈接編輯選項
  267. ContextmenuInitialize();
  268. }
  269. /// <summary>
  270. /// 末級分類右鍵新增
  271. /// </summary>
  272. private void rootAdd_Click(object sender, EventArgs e)
  273. {
  274. //調用委托
  275. //子窗体Form2
  276. InspectionItemMaintenance form2 = new InspectionItemMaintenance(null,"","",">",">","xinzeng");
  277. //调用子窗体中的委托,将方法给委托
  278. form2.TransferEvent += frm_TransEvent;
  279. form2.ShowDialog();
  280. }
  281. //方法的具体实现
  282. private void frm_TransEvent(string jianyanxiangmuName, string guige1,string guige2, string cmpre1, string cmpre2,bool isEdit)
  283. {
  284. if (isEdit)
  285. {
  286. EditJianyanxiangmu(jianyanxiangmuName, guige1, guige2, cmpre1, cmpre2);
  287. }
  288. else {
  289. Addjianyanxiangmu(jianyanxiangmuName, guige1, guige2, cmpre1, cmpre2);
  290. }
  291. }
  292. /// <summary>
  293. /// 節點初始化
  294. /// </summary>
  295. private void RootNodeInitialize()
  296. {
  297. treeViewSort.Nodes.Clear();
  298. foreach (var item in measureMaintenanceTreeData.MeasureMaintenanceTreeDataList)
  299. {
  300. TreeNode treeNode = new TreeNode();
  301. treeNode.Name = item.MeasureMaintenanceTreeSpecificDataId;
  302. treeNode.Text = item.MeasureMaintenanceTreeSpecificName;
  303. List<TreeNode> treeNodes;
  304. RecursionTreeData(item, out treeNodes);
  305. treeNode.Nodes.AddRange(treeNodes.ToArray());
  306. treeViewSort.Nodes.Add(treeNode);
  307. }
  308. }
  309. private void RecursionGetFourmulaData(string id , out List<MeasureMaintenanceFormulaParameters> data)
  310. {
  311. MeasureMaintenanceTreeSpecificData thisData;
  312. this.appWorkspace.RecursionGetData(id, measureMaintenanceTreeData.MeasureMaintenanceTreeDataList, out thisData);
  313. this.fourmulaParametersList.TryGetValue(id, out data);
  314. if (thisData != null)
  315. {
  316. if (data == null || data.Count == 0)
  317. {
  318. RecursionGetFourmulaData(thisData.MeasureMaintenanceTreeSpecificDataParentId, out data);
  319. }
  320. }
  321. }
  322. /// <summary>
  323. /// 递归查询树状结构
  324. /// </summary>
  325. /// <param name="data"></param>
  326. /// <param name="treeNodes"></param>
  327. private void RecursionTreeData(MeasureMaintenanceTreeSpecificData data, out List<TreeNode> treeNodes)
  328. {
  329. treeNodes = new List<TreeNode>();
  330. if (data.MeasureMaintenanceTreeSpecificSonDataList == null || data.MeasureMaintenanceTreeSpecificSonDataList.Count == 0) {
  331. return;
  332. }
  333. foreach (var item in data.MeasureMaintenanceTreeSpecificSonDataList)
  334. {
  335. TreeNode treeNode = new TreeNode();
  336. treeNode.Name = item.MeasureMaintenanceTreeSpecificDataId;
  337. treeNode.Text = item.MeasureMaintenanceTreeSpecificName;
  338. if (item.MeasureMaintenanceTreeSpecificSonDataList != null && item.MeasureMaintenanceTreeSpecificSonDataList.Count > 0) {
  339. List<TreeNode> newtreeNodes;
  340. RecursionTreeData(item, out newtreeNodes);
  341. treeNode.Nodes.AddRange(newtreeNodes.ToArray());
  342. }
  343. treeNodes.Add(treeNode);
  344. if (item.MeasureMaintenanceTreeSpecificFormulaDataList != null && item.MeasureMaintenanceTreeSpecificFormulaDataList.Count > 0) {
  345. if (this.fourmulaParametersList.ContainsKey(item.MeasureMaintenanceTreeSpecificDataId))
  346. {
  347. this.fourmulaParametersList[item.MeasureMaintenanceTreeSpecificDataId] = item.MeasureMaintenanceTreeSpecificFormulaDataList;
  348. }
  349. else {
  350. this.fourmulaParametersList.Add(item.MeasureMaintenanceTreeSpecificDataId, item.MeasureMaintenanceTreeSpecificFormulaDataList);
  351. }
  352. }
  353. }
  354. }
  355. /// <summary>
  356. /// 连接menuScrip,右键菜单
  357. /// </summary>
  358. private void ContextmenuInitialize()
  359. {
  360. //為根節點鏈接新增選項
  361. //為檢驗項目鏈接編輯選項
  362. int nodesCount = treeViewSort.Nodes.Count;
  363. for (int i = 0; i < nodesCount; i++)
  364. {
  365. int erjiNodesCount = treeViewSort.Nodes[i].Nodes.Count;
  366. for (int j = 0; j < erjiNodesCount; j++)
  367. {
  368. treeViewSort.Nodes[i].Nodes[j].ContextMenuStrip = contextRootAdd;
  369. int jianyanNodesCount = treeViewSort.Nodes[i].Nodes[j].Nodes.Count;
  370. for (int k = 0; k < jianyanNodesCount; k++)
  371. {
  372. treeViewSort.Nodes[i].Nodes[j].Nodes[k].ContextMenuStrip = contextMenuEdit;
  373. }
  374. }
  375. }
  376. }
  377. /// <summary>
  378. /// 获取最大父级ID
  379. /// </summary>
  380. /// <param name="id"></param>
  381. /// <param name="data"></param>
  382. private void RecursionGetFatherData(string id, out MeasureMaintenanceTreeSpecificData data)
  383. {
  384. this.appWorkspace.RecursionGetData(id, measureMaintenanceTreeData.MeasureMaintenanceTreeDataList, out data);
  385. if (data != null)
  386. {
  387. if (data.MeasureMaintenanceTreeSpecificLevel != 1)
  388. {
  389. RecursionGetFatherData(data.MeasureMaintenanceTreeSpecificDataParentId, out data);
  390. }
  391. }
  392. }
  393. /// <summary>
  394. /// 獲取點擊時的節點與層數,和根節點名稱
  395. /// 點擊末級分類時,列表顯示預設測量綫
  396. /// 點擊測量綫別名時,顯示別名與公式
  397. /// </summary>
  398. private void treeViewSort_MouseDown(object sender, TreeNodeMouseClickEventArgs e)
  399. {
  400. listCeliangxian.DataSource = null;
  401. this.treeViewSort.SelectedNode = e.Node;
  402. var id = e.Node.Name;
  403. textzbieMing.Text = string.Empty;
  404. textBox1.Text = string.Empty;
  405. if (e.Node.Level == 3)
  406. {
  407. var chooseData = everyFourmulaList.Where(m => m.FormulaId.Equals(e.Node.Name)).FirstOrDefault();
  408. if (chooseData != null)
  409. {
  410. textzbieMing.Text = chooseData.FormulaName;
  411. textBox1.Text = chooseData.FormulaExpression;
  412. }
  413. }
  414. MeasureMaintenanceTreeSpecificData fatherData;
  415. RecursionGetFatherData(id, out fatherData);
  416. MeasureMaintenanceTreeSpecificData data;
  417. this.appWorkspace.RecursionGetData(id, measureMaintenanceTreeData.MeasureMaintenanceTreeDataList, out data);
  418. this.selectedData = data;
  419. if (data.MeasureMaintenanceTreeSpecificLevel == 2)
  420. {
  421. this.comboBox2.Visible = true;
  422. this.label4.Visible = true;
  423. this.textzbieMing.ReadOnly = true;
  424. this.textBox1.ReadOnly = true;
  425. this.buttonInsert.Text = "保存";
  426. List<mic_rulers> ruleList = Program.instance.mic_rulersAll;
  427. if (data.ruleMessage != null) {
  428. var rule = ruleList.Where(m => m.id == Convert.ToInt32(data.ruleMessage.ruleId)).FirstOrDefault();
  429. if (rule != null)
  430. {
  431. var index = ruleList.IndexOf(rule);
  432. comboBox2.SelectedIndex = index;
  433. }
  434. else {
  435. comboBox2.SelectedIndex = -1;
  436. }
  437. }
  438. else
  439. {
  440. comboBox2.SelectedIndex = -1;
  441. }
  442. }
  443. else
  444. {
  445. this.comboBox2.Visible = false;
  446. this.label4.Visible = false;
  447. this.textzbieMing.ReadOnly = false;
  448. this.textBox1.ReadOnly = false;
  449. this.buttonInsert.Text = "插入";
  450. }
  451. if (fatherData.MeasureMaintenanceTreeSpecificDataId == "9")
  452. {
  453. if (data.MeasureMaintenanceTreeSpecificLevel == 2)
  454. {
  455. this.label3.Text = "導電布:";
  456. this.comboBox1.Items.Clear();
  457. this.comboBox1.Items.AddRange(new object[] {"是", "否"});
  458. this.label3.Visible = true;
  459. this.comboBox1.Visible = true;
  460. if (this.isChoose)
  461. {
  462. this.comboBox1.SelectedIndex = 0;
  463. }
  464. else
  465. {
  466. this.comboBox1.SelectedIndex = 1;
  467. }
  468. }
  469. else {
  470. this.label3.Visible = false;
  471. this.comboBox1.Visible = false;
  472. }
  473. }
  474. else if (fatherData.MeasureMaintenanceTreeSpecificDataId == "10" && data.MeasureMaintenanceTreeSpecificDataId == "100300")
  475. {
  476. if (data.MeasureMaintenanceTreeSpecificLevel == 2)
  477. {
  478. this.label3.Text = "范围补偿:";
  479. this.comboBox1.Items.Clear();
  480. this.comboBox1.Items.AddRange(new object[] { "是", "否" });
  481. this.label3.Visible = true;
  482. this.comboBox1.Visible = true;
  483. if (this.isRect)
  484. {
  485. this.comboBox1.SelectedIndex = 0;
  486. }
  487. else
  488. {
  489. this.comboBox1.SelectedIndex = 1;
  490. }
  491. }
  492. else
  493. {
  494. this.label3.Visible = false;
  495. this.comboBox1.Visible = false;
  496. }
  497. }
  498. else if (true && fatherData.MeasureMaintenanceTreeSpecificDataId == "7" && data.MeasureMaintenanceTreeSpecificDataId == "100176")
  499. {
  500. if (data.MeasureMaintenanceTreeSpecificLevel == 2)
  501. {
  502. this.label3.Text = "二值处理:";
  503. this.comboBox1.Items.Clear();
  504. this.comboBox1.Items.AddRange(new object[] { "是", "否" });
  505. this.label3.Visible = true;
  506. this.comboBox1.Visible = true;
  507. if (this.isThreash)
  508. {
  509. this.comboBox1.SelectedIndex = 0;
  510. }
  511. else
  512. {
  513. this.comboBox1.SelectedIndex = 1;
  514. }
  515. }
  516. else
  517. {
  518. this.label3.Visible = false;
  519. this.comboBox1.Visible = false;
  520. }
  521. }
  522. else if (fatherData.MeasureMaintenanceTreeSpecificDataId == "1" || fatherData.MeasureMaintenanceTreeSpecificDataId == "2")
  523. {
  524. if (data.MeasureMaintenanceTreeSpecificLevel == 2)
  525. {
  526. this.label3.Text = "孔銅位置:";
  527. this.comboBox1.Items.Clear();
  528. this.comboBox1.Items.AddRange(new object[] { "上", "下" });
  529. this.label3.Visible = true;
  530. this.comboBox1.Visible = true;
  531. this.comboBox1.SelectedIndex = data.MeasureMaintenanceTreeSpecificIsPos ? 0 : 1;
  532. }
  533. else {
  534. this.label3.Visible = false;
  535. this.comboBox1.Visible = false;
  536. }
  537. }
  538. else
  539. {
  540. this.label3.Visible = false;
  541. this.comboBox1.Visible = false;
  542. }
  543. parametersList = new List<MeasureMaintenanceFormulaParameters>();
  544. RecursionGetFourmulaData(id, out parametersList);
  545. if (parametersList == null) {
  546. parametersList = new List<MeasureMaintenanceFormulaParameters>();
  547. }
  548. listCeliangxian.DataSource = parametersList;
  549. listCeliangxian.DisplayMember = "FormulaParameterShowName";
  550. this.selectedId = id;
  551. this.selectedTreeNode = e.Node;
  552. var fourmula = everyFourmulaList.Where(m => m.FormulaId == data.MeasureMaintenanceTreeSpecificDataId).FirstOrDefault();
  553. if (fourmula != null)
  554. {
  555. textzbieMing.Text = fourmula.FormulaName;
  556. textBox1.Text = fourmula.FormulaExpression;
  557. }
  558. }
  559. /// <summary>
  560. /// 新增檢驗項目
  561. /// </summary>
  562. private void Addjianyanxiangmu(string jianyanxiangmuName, string guige1, string guige2, string cmpre1, string cmpre2)
  563. {
  564. MeasureMaintenanceTreeSpecificData data = new MeasureMaintenanceTreeSpecificData();
  565. string id = Guid.NewGuid().ToString();
  566. data.MeasureMaintenanceTreeSpecificDataId = id;
  567. data.MeasureMaintenanceTreeSpecificDataParentId = this.selectedData.MeasureMaintenanceTreeSpecificDataId;
  568. try
  569. {
  570. double a = Convert.ToDouble(guige1);
  571. }
  572. catch (Exception)
  573. {
  574. guige1 = string.Empty;
  575. }
  576. try
  577. {
  578. double b = Convert.ToDouble(guige2);
  579. }
  580. catch (Exception)
  581. {
  582. guige2 = string.Empty;
  583. }
  584. data.MeasureMaintenanceTreeSpecificIntervalList = new List<string>() { guige1, guige2 };
  585. data.MeasureMaintenanceTreeSpecificIntervalCompareList = new List<string>() { cmpre1, cmpre2 };
  586. data.MeasureMaintenanceTreeSpecificLevel = 3;
  587. data.MeasureMaintenanceTreeSpecificName = jianyanxiangmuName;
  588. data.MeasureMaintenanceTreeSpecificSonDataList = new List<MeasureMaintenanceTreeSpecificData>();
  589. MeasureMaintenanceTreeSpecificData fatherData;
  590. this.appWorkspace.RecursionGetData(data.MeasureMaintenanceTreeSpecificDataParentId, measureMaintenanceTreeData.MeasureMaintenanceTreeDataList, out fatherData);
  591. if (fatherData != null) {
  592. fatherData.MeasureMaintenanceTreeSpecificSonDataList.Add(data);
  593. }
  594. this.treeViewSort.Focus();
  595. TreeNode treeNode = new TreeNode();
  596. treeNode.Name = data.MeasureMaintenanceTreeSpecificDataId;
  597. treeNode.Text = data.MeasureMaintenanceTreeSpecificName;
  598. treeNode.ContextMenuStrip = contextMenuEdit;
  599. this.selectedTreeNode.Nodes.Add(treeNode);
  600. this.selectedTreeNode.Expand();
  601. this.treeViewSort.SelectedNode = treeNode;
  602. this.selectedId = id;
  603. this.selectedTreeNode = treeNode;
  604. this.label3.Visible = false;
  605. this.comboBox1.Visible = false;
  606. this.comboBox2.Visible = false;
  607. this.label4.Visible = false;
  608. this.textzbieMing.ReadOnly = false;
  609. this.textBox1.ReadOnly = false;
  610. this.buttonInsert.Text = "插入";
  611. }
  612. /// <summary>
  613. /// 修改檢驗項目
  614. /// </summary>
  615. private void EditJianyanxiangmu(string jianyanxiangmuName, string guige1, string guige2, string cmpre1, string cmpre2)
  616. {
  617. this.selectedTreeNode.Text = jianyanxiangmuName;
  618. MeasureMaintenanceTreeSpecificData data;
  619. this.appWorkspace.RecursionGetData(this.selectedData.MeasureMaintenanceTreeSpecificDataId, measureMaintenanceTreeData.MeasureMaintenanceTreeDataList, out data);
  620. if (data != null)
  621. {
  622. data.MeasureMaintenanceTreeSpecificName = jianyanxiangmuName;
  623. if (data.MeasureMaintenanceTreeSpecificIntervalList == null)
  624. {
  625. data.MeasureMaintenanceTreeSpecificIntervalList = new List<string>();
  626. data.MeasureMaintenanceTreeSpecificIntervalCompareList = new List<string>();
  627. }
  628. try
  629. {
  630. double a = Convert.ToDouble(guige1);
  631. }
  632. catch (Exception)
  633. {
  634. guige1 = string.Empty;
  635. }
  636. try
  637. {
  638. double b = Convert.ToDouble(guige2);
  639. }
  640. catch (Exception)
  641. {
  642. guige2 = string.Empty;
  643. }
  644. data.MeasureMaintenanceTreeSpecificIntervalList = new List<string>() { guige1, guige2 };
  645. data.MeasureMaintenanceTreeSpecificIntervalCompareList = new List<string>() { cmpre1, cmpre2 };
  646. var list1 = everyFourmulaList.Where(m => m.FormulaParentId.Equals(data.MeasureMaintenanceTreeSpecificDataId)).ToList();
  647. for (int i = 0; i < list1.Count; i++)
  648. {
  649. list1[i].TestItems = jianyanxiangmuName;
  650. //list1[i].Specification = data.MeasureMaintenanceTreeSpecificIntervalList.Count == 2 ? $"{data.MeasureMaintenanceTreeSpecificIntervalList[0]}{data.MeasureMaintenanceTreeSpecificIntervalCompareList[0]}X{data.MeasureMaintenanceTreeSpecificIntervalCompareList[1]}{data.MeasureMaintenanceTreeSpecificIntervalList[1]}" : "-";
  651. if (string.IsNullOrEmpty(data.MeasureMaintenanceTreeSpecificIntervalList[0]) && !string.IsNullOrEmpty(data.MeasureMaintenanceTreeSpecificIntervalList[1]))
  652. {
  653. list1[i].Specification = $"X{data.MeasureMaintenanceTreeSpecificIntervalCompareList[1]}{data.MeasureMaintenanceTreeSpecificIntervalList[1]}";
  654. }
  655. else if (string.IsNullOrEmpty(data.MeasureMaintenanceTreeSpecificIntervalList[0]) && string.IsNullOrEmpty(data.MeasureMaintenanceTreeSpecificIntervalList[1]))
  656. {
  657. list1[i].Specification = $"-";
  658. }
  659. else if (string.IsNullOrEmpty(data.MeasureMaintenanceTreeSpecificIntervalList[1]) && !string.IsNullOrEmpty(data.MeasureMaintenanceTreeSpecificIntervalList[0]))
  660. {
  661. list1[i].Specification = $"{data.MeasureMaintenanceTreeSpecificIntervalList[0]}{data.MeasureMaintenanceTreeSpecificIntervalCompareList[0]}X";
  662. }
  663. else
  664. {
  665. list1[i].Specification = data.MeasureMaintenanceTreeSpecificIntervalList.Count == 2 ? $"{data.MeasureMaintenanceTreeSpecificIntervalList[0]}{data.MeasureMaintenanceTreeSpecificIntervalCompareList[0]}X{data.MeasureMaintenanceTreeSpecificIntervalCompareList[1]}{data.MeasureMaintenanceTreeSpecificIntervalList[1]}" : "-";
  666. }
  667. }
  668. }
  669. }
  670. /// <summary>
  671. /// 獲取規格
  672. /// </summary>
  673. private void GetGuige(out string guige1,out string guige2, out string compare1, out string compare2)
  674. {
  675. MeasureMaintenanceTreeSpecificData data;
  676. this.appWorkspace.RecursionGetData(this.selectedData.MeasureMaintenanceTreeSpecificDataId, measureMaintenanceTreeData.MeasureMaintenanceTreeDataList, out data);
  677. if (data != null)
  678. {
  679. if (data.MeasureMaintenanceTreeSpecificIntervalList != null && data.MeasureMaintenanceTreeSpecificIntervalList.Count == 2)
  680. {
  681. guige1 = data.MeasureMaintenanceTreeSpecificIntervalList[0];
  682. guige2 = data.MeasureMaintenanceTreeSpecificIntervalList[1];
  683. try
  684. {
  685. compare1 = data.MeasureMaintenanceTreeSpecificIntervalCompareList[0];
  686. compare2 = data.MeasureMaintenanceTreeSpecificIntervalCompareList[1];
  687. }
  688. catch (Exception ex)
  689. {
  690. data.MeasureMaintenanceTreeSpecificIntervalCompareList.Add(">");
  691. data.MeasureMaintenanceTreeSpecificIntervalCompareList.Add(">");
  692. compare1 = ">";
  693. compare2 = ">";
  694. }
  695. }
  696. else
  697. {
  698. guige1 = string.Empty;
  699. guige2 = string.Empty;
  700. compare1 = ">";
  701. compare2 = ">";
  702. }
  703. }
  704. else {
  705. guige1 = string.Empty;
  706. guige2 = string.Empty;
  707. compare1 = ">";
  708. compare2 = ">";
  709. }
  710. }
  711. /// <summary>
  712. /// 檢測項目右側編輯
  713. /// </summary>
  714. private void toolStripMenuEdit1_Click(object sender, EventArgs e)
  715. {
  716. string guige1, guige2, compare1, compare2;
  717. GetGuige(out guige1, out guige2, out compare1, out compare2);
  718. //調用委托
  719. //子窗体Form2
  720. InspectionItemMaintenance form2 = new InspectionItemMaintenance(this.selectedTreeNode.Text, guige1, guige2,compare1,compare2, "bianji");
  721. //调用子窗体中的委托,将方法给委托
  722. form2.TransferEvent += frm_TransEvent;
  723. form2.ShowDialog();
  724. }
  725. /// <summary>
  726. /// 插入按钮 新增或者修改測量綫
  727. /// </summary>
  728. private void buttonInsert_Click(object sender, EventArgs e)
  729. {
  730. if (this.treeViewSort.SelectedNode == null)
  731. {
  732. return;
  733. }
  734. if (this.treeViewSort.SelectedNode.Level == 1)
  735. {
  736. string id = this.treeViewSort.SelectedNode.Name;
  737. MeasureMaintenanceTreeSpecificData thisdata;
  738. this.appWorkspace.RecursionGetData(id, measureMaintenanceTreeData.MeasureMaintenanceTreeDataList, out thisdata);
  739. if (this.comboBox2.SelectedIndex != -1)
  740. {
  741. if (thisdata.ruleMessage == null)
  742. {
  743. thisdata.ruleMessage = new RuleMessage();
  744. }
  745. thisdata.ruleMessage.ruleId = Program.instance.mic_rulersAll[comboBox2.SelectedIndex].id.ToString();
  746. thisdata.ruleMessage.ruleName = Program.instance.mic_rulersAll[comboBox2.SelectedIndex].ruler_name;
  747. thisdata.ruleMessage.pixelLength = Program.instance.mic_rulersAll[comboBox2.SelectedIndex].pixel_length;
  748. thisdata.ruleMessage.physicalLength = Program.instance.mic_rulersAll[comboBox2.SelectedIndex].physical_length;
  749. thisdata.ruleMessage.rulerUnits = Program.instance.mic_rulersAll[comboBox2.SelectedIndex].ruler_units;
  750. }
  751. if (this.comboBox1.Visible)
  752. {
  753. if (thisdata.MeasureMaintenanceTreeSpecificDataParentId == "1" || thisdata.MeasureMaintenanceTreeSpecificDataParentId == "2")
  754. {
  755. thisdata.MeasureMaintenanceTreeSpecificIsPos = this.comboBox1.SelectedIndex == 0 ? true : false;
  756. }
  757. else {
  758. this.isChoose = this.comboBox1.SelectedIndex == 0 ? true : false;
  759. this.isRect = this.comboBox1.SelectedIndex == 0 ? true : false;
  760. this.isThreash = this.comboBox1.SelectedIndex == 0 ? true : false;
  761. thisdata.MeasureMaintenanceTreeSpecificIsCon = this.comboBox1.SelectedIndex == 0 ? true : false;
  762. thisdata.MeasureMaintenanceTreeSpecificIsRect = this.comboBox1.SelectedIndex == 0 ? true : false;
  763. thisdata.MeasureMaintenanceTreeSpecificIsThreash = this.comboBox1.SelectedIndex == 0 ? true : false;
  764. }
  765. }
  766. return;
  767. }
  768. if (this.treeViewSort.SelectedNode == null || (this.treeViewSort.SelectedNode.Level < 2)) {
  769. return;
  770. }
  771. if (string.IsNullOrEmpty(textzbieMing.Text))
  772. {
  773. MessageBox.Show(PdnResources.GetString("NewPleaseEnterAlias") + "!");
  774. return;
  775. }
  776. this.lineIDList.Clear();
  777. this.treeViewSort.Focus();
  778. int level = this.treeViewSort.SelectedNode.Level;
  779. string fatherId;
  780. if (level == 2)
  781. {
  782. fatherId = this.treeViewSort.SelectedNode.Name;
  783. }
  784. else
  785. {
  786. fatherId = this.treeViewSort.SelectedNode.Parent.Name;
  787. }
  788. //校验公式合法性
  789. if (!checkFormulaLegitimate(fatherId))
  790. {
  791. MessageBox.Show(PdnResources.GetString("NewLllegalFormula") + "!");
  792. return;
  793. }
  794. MeasureMaintenanceTreeSpecificData data;
  795. this.appWorkspace.RecursionGetData(fatherId, measureMaintenanceTreeData.MeasureMaintenanceTreeDataList, out data);
  796. MeasureMaintenanceTreeSpecificData fatherData;
  797. this.appWorkspace.RecursionGetData(data.MeasureMaintenanceTreeSpecificDataParentId, measureMaintenanceTreeData.MeasureMaintenanceTreeDataList, out fatherData);
  798. MeasureMaintenanceTreeSpecificData grandFatherData;
  799. this.appWorkspace.RecursionGetData(fatherData.MeasureMaintenanceTreeSpecificDataParentId, measureMaintenanceTreeData.MeasureMaintenanceTreeDataList, out grandFatherData);
  800. switch (level) {
  801. case 2:
  802. var treeNode = new TreeNode();
  803. treeNode.Text = textzbieMing.Text;
  804. treeNode.Name = Guid.NewGuid().ToString();
  805. this.treeViewSort.SelectedNode.Nodes.Add(treeNode);
  806. this.treeViewSort.SelectedNode.Expand();
  807. this.treeViewSort.SelectedNode = treeNode;
  808. MeasureMaintenanceFormula measureMaintenanceFormula = new MeasureMaintenanceFormula();
  809. measureMaintenanceFormula.FormulaId = treeNode.Name;
  810. measureMaintenanceFormula.FormulaName = treeNode.Text;
  811. measureMaintenanceFormula.TestItems = data.MeasureMaintenanceTreeSpecificName;
  812. measureMaintenanceFormula.HoleType = fatherData.MeasureMaintenanceTreeSpecificName;
  813. measureMaintenanceFormula.HoleTypeId = fatherData.MeasureMaintenanceTreeSpecificDataId;
  814. measureMaintenanceFormula.FatherHoleTypeId = grandFatherData.MeasureMaintenanceTreeSpecificDataId;
  815. if (data.MeasureMaintenanceTreeSpecificIntervalList.Count == 2)
  816. {
  817. if (string.IsNullOrEmpty(data.MeasureMaintenanceTreeSpecificIntervalList[0]) && !string.IsNullOrEmpty(data.MeasureMaintenanceTreeSpecificIntervalList[1]))
  818. {
  819. measureMaintenanceFormula.Specification = $"X{data.MeasureMaintenanceTreeSpecificIntervalCompareList[1]}{data.MeasureMaintenanceTreeSpecificIntervalList[1]}";
  820. }
  821. else if (string.IsNullOrEmpty(data.MeasureMaintenanceTreeSpecificIntervalList[1]) && string.IsNullOrEmpty(data.MeasureMaintenanceTreeSpecificIntervalList[0]))
  822. {
  823. measureMaintenanceFormula.Specification = "-";
  824. }
  825. else if (string.IsNullOrEmpty(data.MeasureMaintenanceTreeSpecificIntervalList[1]) && !string.IsNullOrEmpty(data.MeasureMaintenanceTreeSpecificIntervalList[0]))
  826. {
  827. measureMaintenanceFormula.Specification = $"{data.MeasureMaintenanceTreeSpecificIntervalList[0]}{data.MeasureMaintenanceTreeSpecificIntervalCompareList[0]}X";
  828. }
  829. else
  830. {
  831. measureMaintenanceFormula.Specification = $"{data.MeasureMaintenanceTreeSpecificIntervalList[0]}{data.MeasureMaintenanceTreeSpecificIntervalCompareList[0]}X{data.MeasureMaintenanceTreeSpecificIntervalCompareList[1]}{data.MeasureMaintenanceTreeSpecificIntervalList[1]}";
  832. }
  833. }
  834. else {
  835. measureMaintenanceFormula.Specification = "-";
  836. }
  837. measureMaintenanceFormula.FormulaParentId = fatherId;
  838. measureMaintenanceFormula.FormulaExpression = this.textBox1.Text;
  839. measureMaintenanceFormula.FormulaExpressionLineID.AddRange(lineIDList);
  840. if (grandFatherData.MeasureMaintenanceTreeSpecificDataId == "9") {
  841. measureMaintenanceFormula.isConductiveCloth = isChoose;
  842. }
  843. if (grandFatherData.MeasureMaintenanceTreeSpecificDataId == "10")
  844. {
  845. measureMaintenanceFormula.isFanweibuchang = isRect;
  846. }
  847. if (true && grandFatherData.MeasureMaintenanceTreeSpecificDataId == "7")
  848. {
  849. measureMaintenanceFormula.isErzhichuli = isThreash;
  850. }
  851. everyFourmulaList.Add(measureMaintenanceFormula);
  852. MeasureMaintenanceTreeSpecificData measureMaintenance = new MeasureMaintenanceTreeSpecificData();
  853. measureMaintenance.MeasureMaintenanceTreeSpecificDataId = treeNode.Name;
  854. measureMaintenance.MeasureMaintenanceTreeSpecificDataParentId = fatherId;
  855. measureMaintenance.MeasureMaintenanceTreeSpecificLevel = 4;
  856. measureMaintenance.MeasureMaintenanceTreeSpecificName = treeNode.Text;
  857. data.MeasureMaintenanceTreeSpecificSonDataList.Add(measureMaintenance);
  858. break;
  859. case 3:
  860. this.treeViewSort.SelectedNode.Text = this.textzbieMing.Text;
  861. var id = this.treeViewSort.SelectedNode.Name;
  862. #region [先删除]
  863. var chooseFData = everyFourmulaList.Where(m => m.FormulaId.Equals(id)).FirstOrDefault();
  864. var chooseIndex = everyFourmulaList.IndexOf(chooseFData);
  865. if (chooseFData != null)
  866. {
  867. everyFourmulaList.Remove(chooseFData);
  868. }
  869. if (data != null)
  870. {
  871. var chooseData = data.MeasureMaintenanceTreeSpecificSonDataList.Where(m => m.MeasureMaintenanceTreeSpecificDataId.Equals(id)).FirstOrDefault();
  872. if (chooseData != null)
  873. {
  874. data.MeasureMaintenanceTreeSpecificSonDataList.Remove(chooseData);
  875. }
  876. }
  877. #endregion
  878. #region [再添加]
  879. MeasureMaintenanceFormula newmeasureMaintenanceFormula = new MeasureMaintenanceFormula();
  880. newmeasureMaintenanceFormula.FormulaId = this.treeViewSort.SelectedNode.Name;
  881. newmeasureMaintenanceFormula.FormulaName = this.treeViewSort.SelectedNode.Text;
  882. newmeasureMaintenanceFormula.TestItems = data.MeasureMaintenanceTreeSpecificName;
  883. newmeasureMaintenanceFormula.HoleType = fatherData.MeasureMaintenanceTreeSpecificName;
  884. newmeasureMaintenanceFormula.HoleTypeId = fatherData.MeasureMaintenanceTreeSpecificDataId;
  885. newmeasureMaintenanceFormula.FatherHoleTypeId = grandFatherData.MeasureMaintenanceTreeSpecificDataId;
  886. //newmeasureMaintenanceFormula.Specification = data.MeasureMaintenanceTreeSpecificIntervalList.Count == 2 ? $"{data.MeasureMaintenanceTreeSpecificIntervalList[0]}{data.MeasureMaintenanceTreeSpecificIntervalCompareList[0]}X{data.MeasureMaintenanceTreeSpecificIntervalCompareList[1]}{data.MeasureMaintenanceTreeSpecificIntervalList[1]}" : "-";
  887. if (data.MeasureMaintenanceTreeSpecificIntervalList.Count == 2)
  888. {
  889. if (string.IsNullOrEmpty(data.MeasureMaintenanceTreeSpecificIntervalList[0]) && !string.IsNullOrEmpty(data.MeasureMaintenanceTreeSpecificIntervalList[1]))
  890. {
  891. newmeasureMaintenanceFormula.Specification = $"X{data.MeasureMaintenanceTreeSpecificIntervalCompareList[1]}{data.MeasureMaintenanceTreeSpecificIntervalList[1]}";
  892. }
  893. else if (string.IsNullOrEmpty(data.MeasureMaintenanceTreeSpecificIntervalList[1]) && string.IsNullOrEmpty(data.MeasureMaintenanceTreeSpecificIntervalList[0]))
  894. {
  895. newmeasureMaintenanceFormula.Specification = "-";
  896. }
  897. else if (string.IsNullOrEmpty(data.MeasureMaintenanceTreeSpecificIntervalList[1]) && !string.IsNullOrEmpty(data.MeasureMaintenanceTreeSpecificIntervalList[0]))
  898. {
  899. newmeasureMaintenanceFormula.Specification = $"{data.MeasureMaintenanceTreeSpecificIntervalList[0]}{data.MeasureMaintenanceTreeSpecificIntervalCompareList[0]}X";
  900. }
  901. else
  902. {
  903. newmeasureMaintenanceFormula.Specification = $"{data.MeasureMaintenanceTreeSpecificIntervalList[0]}{data.MeasureMaintenanceTreeSpecificIntervalCompareList[0]}X{data.MeasureMaintenanceTreeSpecificIntervalCompareList[1]}{data.MeasureMaintenanceTreeSpecificIntervalList[1]}";
  904. }
  905. }
  906. else {
  907. newmeasureMaintenanceFormula.Specification = "-";
  908. }
  909. newmeasureMaintenanceFormula.FormulaParentId = fatherId;
  910. newmeasureMaintenanceFormula.FormulaExpression = this.textBox1.Text;
  911. newmeasureMaintenanceFormula.FormulaExpressionLineID.AddRange(lineIDList);
  912. if (grandFatherData.MeasureMaintenanceTreeSpecificDataId == "9")
  913. {
  914. newmeasureMaintenanceFormula.isConductiveCloth = comboBox1.SelectedIndex == 0 ? true : false;
  915. }
  916. else if (grandFatherData.MeasureMaintenanceTreeSpecificDataId == "10")
  917. {
  918. newmeasureMaintenanceFormula.isFanweibuchang = comboBox1.SelectedIndex == 0 ? true : false;
  919. }
  920. else if (true && grandFatherData.MeasureMaintenanceTreeSpecificDataId == "7")
  921. {
  922. newmeasureMaintenanceFormula.isErzhichuli = comboBox1.SelectedIndex == 0 ? true : false;
  923. }
  924. everyFourmulaList.Insert(chooseIndex, newmeasureMaintenanceFormula);
  925. MeasureMaintenanceTreeSpecificData newmeasureMaintenance = new MeasureMaintenanceTreeSpecificData();
  926. newmeasureMaintenance.MeasureMaintenanceTreeSpecificDataId = this.treeViewSort.SelectedNode.Name;
  927. newmeasureMaintenance.MeasureMaintenanceTreeSpecificDataParentId = fatherId;
  928. newmeasureMaintenance.MeasureMaintenanceTreeSpecificLevel = 4;
  929. newmeasureMaintenance.MeasureMaintenanceTreeSpecificName = this.treeViewSort.SelectedNode.Text;
  930. data.MeasureMaintenanceTreeSpecificSonDataList.Add(newmeasureMaintenance);
  931. #endregion
  932. break;
  933. }
  934. }
  935. //輸入公式
  936. public List<string> gongshiText = new List<string>();
  937. private void listCeliangxian_MouseDown(object sender, MouseEventArgs e)
  938. {
  939. var treeNode = this.treeViewSort.SelectedNode;
  940. if (treeNode.Level != 3 && treeNode.Level != 2) {
  941. return;
  942. }
  943. string id;
  944. switch (treeNode.Level)
  945. {
  946. case 2:
  947. id = treeNode.Parent.Name;
  948. break;
  949. case 3:
  950. id = treeNode.Parent.Parent.Name;
  951. break;
  952. default:
  953. id = string.Empty;
  954. break;
  955. }
  956. int selectedIndex = listCeliangxian.SelectedIndex;
  957. List<MeasureMaintenanceFormulaParameters> list;
  958. this.fourmulaParametersList.TryGetValue(id, out list);
  959. string name;
  960. try
  961. {
  962. name = list[selectedIndex].FormulaParameterAliasName;
  963. gongshiText.Add(name);
  964. AddLabelButton();
  965. }
  966. catch (Exception ex)
  967. {
  968. return;
  969. }
  970. }
  971. private void buttonJIa_Click(object sender, EventArgs e)
  972. {
  973. gongshiText.Add(EnumHelper.GetEnumDesc(FormulaSymbolType.Plus));
  974. AddLabelButton();
  975. }
  976. //减号
  977. private void buttonJian_Click(object sender, EventArgs e)
  978. {
  979. gongshiText.Add(EnumHelper.GetEnumDesc(FormulaSymbolType.Less));
  980. AddLabelButton();
  981. }
  982. //乘号
  983. private void buttonCheng_Click(object sender, EventArgs e)
  984. {
  985. gongshiText.Add(EnumHelper.GetEnumDesc(FormulaSymbolType.Multiply));
  986. AddLabelButton();
  987. }
  988. //除号
  989. private void buttonChu_Click(object sender, EventArgs e)
  990. {
  991. gongshiText.Add(EnumHelper.GetEnumDesc(FormulaSymbolType.Division));
  992. AddLabelButton();
  993. }
  994. //左括号
  995. private void buttonZuokuohao_Click(object sender, EventArgs e)
  996. {
  997. gongshiText.Add(EnumHelper.GetEnumDesc(FormulaSymbolType.LeftParenthesis));
  998. AddLabelButton();
  999. }
  1000. //右括号
  1001. private void buttonYoukuohao_Click(object sender, EventArgs e)
  1002. {
  1003. gongshiText.Add(EnumHelper.GetEnumDesc(FormulaSymbolType.RightParenthesis));
  1004. AddLabelButton();
  1005. }
  1006. /// <summary>
  1007. /// 刪除檢驗項目
  1008. /// </summary>
  1009. private void toolStripMenuDelete1_Click(object sender, EventArgs e)
  1010. {
  1011. if (this.treeViewSort.SelectedNode != null && this.treeViewSort.SelectedNode.Level > 1)
  1012. {
  1013. var treeNode = this.treeViewSort.SelectedNode;
  1014. everyFourmulaList.RemoveAll(m => m.FormulaParentId.Equals(treeNode.Name));
  1015. MeasureMaintenanceTreeSpecificData data;
  1016. this.appWorkspace.RecursionGetData(treeNode.Name, measureMaintenanceTreeData.MeasureMaintenanceTreeDataList, out data);
  1017. if (data != null)
  1018. {
  1019. MeasureMaintenanceTreeSpecificData grandFatherData;
  1020. this.appWorkspace.RecursionGetData(data.MeasureMaintenanceTreeSpecificDataParentId, measureMaintenanceTreeData.MeasureMaintenanceTreeDataList, out grandFatherData);
  1021. if (grandFatherData != null) {
  1022. grandFatherData.MeasureMaintenanceTreeSpecificSonDataList.Remove(data);
  1023. }
  1024. }
  1025. this.treeViewSort.SelectedNode.Remove();
  1026. }
  1027. }
  1028. /// <summary>
  1029. /// 刪除測量綫
  1030. /// </summary>
  1031. private void buttonDelete_Click(object sender, EventArgs e)
  1032. {
  1033. if (this.treeViewSort.SelectedNode == null || this.treeViewSort.SelectedNode.Level != 3)
  1034. {
  1035. return;
  1036. }
  1037. var id = this.treeViewSort.SelectedNode.Name;
  1038. var fatherId = this.treeViewSort.SelectedNode.Parent.Name;
  1039. var chooseFData = everyFourmulaList.Where(m => m.FormulaId.Equals(id)).FirstOrDefault();
  1040. if (chooseFData != null)
  1041. {
  1042. everyFourmulaList.Remove(chooseFData);
  1043. }
  1044. MeasureMaintenanceTreeSpecificData data;
  1045. this.appWorkspace.RecursionGetData(fatherId, measureMaintenanceTreeData.MeasureMaintenanceTreeDataList, out data);
  1046. if (data != null)
  1047. {
  1048. var chooseData = data.MeasureMaintenanceTreeSpecificSonDataList.Where(m => m.MeasureMaintenanceTreeSpecificDataId.Equals(id)).FirstOrDefault();
  1049. if (chooseData != null)
  1050. {
  1051. data.MeasureMaintenanceTreeSpecificSonDataList.Remove(chooseData);
  1052. }
  1053. }
  1054. this.treeViewSort.Focus();
  1055. var treeView = this.treeViewSort.SelectedNode.Parent;
  1056. treeView.Nodes.Remove(this.treeViewSort.SelectedNode);
  1057. this.treeViewSort.SelectedNode = treeView;
  1058. }
  1059. /// <summary>
  1060. /// 确认按钮,保存到XML
  1061. /// </summary>
  1062. private void buttonDetermine_Click(object sender, EventArgs e)
  1063. {
  1064. for (int i = 0; i < everyFourmulaList.Count; i++) {
  1065. if (everyFourmulaList[i].FatherHoleTypeId == "9")
  1066. {
  1067. everyFourmulaList[i].isConductiveCloth = isChoose;
  1068. }
  1069. if (everyFourmulaList[i].FatherHoleTypeId == "10")
  1070. {
  1071. everyFourmulaList[i].isFanweibuchang = isRect;
  1072. }
  1073. if (true && everyFourmulaList[i].FatherHoleTypeId == "7")
  1074. {
  1075. everyFourmulaList[i].isErzhichuli = isThreash;
  1076. }
  1077. }
  1078. WriteXml();
  1079. TransferEvent(everyFourmulaList);
  1080. this.Close();
  1081. }
  1082. /// <summary>
  1083. /// 写入XML
  1084. /// </summary>
  1085. public void WriteXml()
  1086. {
  1087. string filePath = Application.StartupPath + "\\Config\\" + Program.instance.SettingPrefix + "\\MeasureMaintenanceType\\" + fileName + ".xml";
  1088. string stageModelXml = XmlSerializeHelper.XmlSerialize<MeasureMaintenanceTreeData>(measureMaintenanceTreeData);
  1089. FileOperationHelper.WriteStringToFile(stageModelXml, filePath, FileMode.Create);
  1090. }
  1091. /// <summary>
  1092. /// 取消按钮,不保存并关闭窗口
  1093. /// </summary>
  1094. private void buttonCancel_Click(object sender, EventArgs e)
  1095. {
  1096. DialogResult result = MessageBox.Show(PdnResources.GetString("NewConfirmation") + PdnResources.GetString("NewCancel") + "?", "", MessageBoxButtons.OKCancel);
  1097. if (result == DialogResult.OK)
  1098. {
  1099. //ClearNodes();
  1100. this.Close();
  1101. }
  1102. }
  1103. private void AddLabelButton()
  1104. {
  1105. //int abc = this.textBox1.SelectionStart;
  1106. this.textBox1.Text += gongshiText[gongshiText.Count - 1];
  1107. //this.textBox1.SelectionStart = this.textBox1.Text.Length;
  1108. }
  1109. //關閉窗口時清除節點
  1110. private void MeasureSetUp_FormClosing(object sender, FormClosingEventArgs e)
  1111. {
  1112. //ClearNodes();
  1113. }
  1114. /// <summary>
  1115. /// 判断公式是否合法
  1116. /// </summary>
  1117. private bool checkFormulaLegitimate(string fatherID)
  1118. {
  1119. #region[原先的校验方法]
  1120. //string formula = this.textBox1.Text;
  1121. ////先判断括号 是不是成对出现
  1122. //if (formula.Contains("("))
  1123. //{
  1124. // if (!formula.Contains(")"))
  1125. // {
  1126. // return false;
  1127. // }
  1128. // int leftBrackets = formula.Split('(').Length - 1;
  1129. // int rightBrackets = formula.Split(')').Length - 1;
  1130. // if (leftBrackets != rightBrackets)
  1131. // {
  1132. // //MessageBox.Show("公式不合法!");
  1133. // return false;
  1134. // }
  1135. // //去除符号的干扰
  1136. // formula = formula.Replace('(', ' ');
  1137. // formula = formula.Replace(')', ' ');
  1138. //}
  1139. //else if (formula.Contains(")"))
  1140. //{
  1141. // if (!formula.Contains("("))
  1142. // {
  1143. // return false;
  1144. // }
  1145. // int leftBrackets = formula.Split('(').Length - 1;
  1146. // int rightBrackets = formula.Split(')').Length - 1;
  1147. // if (leftBrackets != rightBrackets)
  1148. // {
  1149. // //MessageBox.Show("公式不合法!");
  1150. // return false;
  1151. // }
  1152. // //去除符号的干扰
  1153. // formula = formula.Replace('(', ' ');
  1154. // formula = formula.Replace(')', ' ');
  1155. //}
  1156. //if (formula.Contains("最大值") || formula.Contains("最小值") || formula.Contains("平均值"))
  1157. //{
  1158. // if (formula.Contains("-") || formula.Contains("*") || formula.Contains("/"))
  1159. // {
  1160. // return false;
  1161. // }
  1162. //}
  1163. //List<string> parList = new List<string>();
  1164. //foreach (var item in this.parametersList)
  1165. //{
  1166. // parList.Add(item.FormulaParameterAliasName);
  1167. //}
  1168. //string[] elementArray = formula.Split(symbolArray, StringSplitOptions.None);
  1169. //foreach (var item in elementArray)
  1170. //{
  1171. // var datastr = item.Trim();
  1172. // //判断是不是空的
  1173. // if (string.IsNullOrEmpty(datastr))
  1174. // {
  1175. // return false;
  1176. // }
  1177. // //判断是不是数字
  1178. // if (checkIsNum(datastr))
  1179. // {
  1180. // continue;
  1181. // }
  1182. // //去除最大值 最小值 平均值的干扰
  1183. // if (datastr.Contains("最大值") || datastr.Contains("最小值") || datastr.Contains("平均值"))
  1184. // {
  1185. // var str = datastr.Split('\\').ToList();
  1186. // str.RemoveAt(str.Count - 1);
  1187. // foreach (var everyStr in str)
  1188. // {
  1189. // if (!parList.Contains(everyStr))
  1190. // {
  1191. // return false;
  1192. // }
  1193. // }
  1194. // }
  1195. // else
  1196. // {
  1197. // if (!parList.Contains(datastr))
  1198. // {
  1199. // return false;
  1200. // }
  1201. // }
  1202. //}
  1203. //foreach (var item in this.parametersList)
  1204. //{
  1205. // if (formula.Contains(item.FormulaParameterAliasName))
  1206. // {
  1207. // this.lineIDList.Add(item.FormulaParametersId);
  1208. // }
  1209. //}
  1210. //return true;
  1211. #endregion
  1212. // 校验最大值 最小值 平均值
  1213. string formula = this.textBox1.Text;
  1214. string realFormula = this.textBox1.Text;
  1215. var driver = new CodeDriver();
  1216. List<string> parList = new List<string>();
  1217. if (formula.Contains("最大值") || formula.Contains("最小值") || formula.Contains("平均值"))
  1218. {
  1219. if (formula.Contains("-") || formula.Contains("*") || formula.Contains("/"))
  1220. {
  1221. return false;
  1222. }
  1223. }
  1224. foreach (var item in this.parametersList)
  1225. {
  1226. parList.Add(item.FormulaParameterAliasName);
  1227. }
  1228. string[] stat = new string[] { "最大值", "最小值", "平均值" };
  1229. string[] elementArray = formula.Split(symbolArray, StringSplitOptions.None);
  1230. foreach (var item in elementArray)
  1231. {
  1232. var datastr = item.Trim();
  1233. //去除最大值 最小值 平均值的干扰
  1234. if (datastr.Contains("最大值") || datastr.Contains("最小值") || datastr.Contains("平均值"))
  1235. {
  1236. var str = datastr.Split('\\').ToList();
  1237. str.RemoveAt(str.Count - 1);
  1238. foreach (var everyStr in str)
  1239. {
  1240. if (!parList.Contains(everyStr))
  1241. {
  1242. return false;
  1243. }
  1244. }
  1245. }
  1246. }
  1247. int parentheses = 0, Bracket = 0;
  1248. bool IsSymbol = false;
  1249. foreach(char a in formula)
  1250. {
  1251. if(a == '+' || a == '-')
  1252. {
  1253. if (IsSymbol)
  1254. {
  1255. return false;
  1256. }
  1257. IsSymbol = true;
  1258. }
  1259. else
  1260. {
  1261. IsSymbol = false;
  1262. }
  1263. }
  1264. int temp = 0, temp2 = 0;
  1265. foreach(char a in formula)
  1266. {
  1267. if(a == '(')
  1268. {
  1269. parentheses++;
  1270. }
  1271. if (a == ')')
  1272. {
  1273. parentheses--;
  1274. }
  1275. if (a == '[')
  1276. {
  1277. Bracket++;
  1278. }
  1279. if (a == ']')
  1280. {
  1281. Bracket--;
  1282. }
  1283. if (Bracket < 0 || parentheses < 0)
  1284. {
  1285. return false;
  1286. }
  1287. }
  1288. if (Bracket != 0 || parentheses != 0)
  1289. {
  1290. return false;
  1291. }
  1292. // 去除其他符号的影响校验公式的合法性
  1293. formula = formula.Replace("[", "(");
  1294. formula = formula.Replace("]", ")");
  1295. formula = formula.Replace(@"\最大值", "");
  1296. formula = formula.Replace(@"\最小值", "");
  1297. formula = formula.Replace(@"\平均值", "");
  1298. bool isError;
  1299. foreach (string param in parList)
  1300. {
  1301. formula = formula.Replace("\\" + param, "");
  1302. }
  1303. foreach (string param in parList)
  1304. {
  1305. formula = formula.Replace(param, "param");
  1306. }
  1307. formula = formula.Replace("/", "-");
  1308. driver.CompileAndRun(formula, out isError);
  1309. if (isError)
  1310. {
  1311. return false;
  1312. }
  1313. foreach (var item in this.parametersList)
  1314. {
  1315. if (realFormula.Contains(item.FormulaParameterAliasName))
  1316. {
  1317. this.lineIDList.Add(item.FormulaParametersId);
  1318. }
  1319. }
  1320. return true;
  1321. }
  1322. /// <summary>
  1323. /// 判断是否是数字
  1324. /// </summary>
  1325. /// <param name="num"></param>
  1326. /// <returns></returns>
  1327. private bool checkIsNum(string num)
  1328. {
  1329. try
  1330. {
  1331. int strNum = Convert.ToInt32(num);
  1332. return true;
  1333. }
  1334. catch (Exception)
  1335. {
  1336. return false;
  1337. }
  1338. }
  1339. /// <summary>
  1340. /// 最大值 最小值 平均值
  1341. /// </summary>
  1342. /// <param name="sender"></param>
  1343. /// <param name="e"></param>
  1344. private void button_Click(object sender, EventArgs e)
  1345. {
  1346. string buttonText = ((Button)sender).Text;
  1347. this.textBox1.Text += (button4.Text + buttonText);
  1348. }
  1349. private void button4_Click(object sender, EventArgs e)
  1350. {
  1351. string buttonText = ((Button)sender).Text;
  1352. this.textBox1.Text += buttonText;
  1353. }
  1354. private void txt_GotFocus(object sender, EventArgs e)
  1355. {
  1356. this.textBox1.Select(this.textBox1.TextLength, 0);//光标定位到文本最后
  1357. this.textBox1.ScrollToCaret();//滚动到光标处
  1358. }
  1359. private void button5_Click(object sender, EventArgs e)
  1360. {
  1361. string buttonText = ((Button)sender).Text;
  1362. this.textBox1.Text += buttonText;
  1363. }
  1364. private void buttonAbsoValLeft_Click(object sender, EventArgs e)
  1365. {
  1366. string buttonText = ((Button)sender).Text;
  1367. this.textBox1.Text += buttonText;
  1368. }
  1369. public class CodeDriver : MarshalByRefObject
  1370. {
  1371. private string prefix =
  1372. "using System;" +
  1373. "public class Driver" +
  1374. "{" +
  1375. " public static void Run()" +
  1376. " {" +
  1377. "int param = 1;" +
  1378. "int i = ";
  1379. private string postfix =
  1380. " }" +
  1381. "}";
  1382. private string semicolon = ";";
  1383. private string print = "Console.WriteLine(i.ToString());";
  1384. public int CompileAndRun(string input, out bool hasError)
  1385. {
  1386. hasError = false;
  1387. string returnData = null;
  1388. int IreturnData = 0;
  1389. CompilerResults results = null;
  1390. using (var provider = new CSharpCodeProvider())
  1391. {
  1392. var options = new CompilerParameters();
  1393. options.GenerateInMemory = true;
  1394. var sb = string.Empty;
  1395. sb += prefix;
  1396. sb += (input);
  1397. sb += (semicolon);
  1398. sb += (print);
  1399. sb += (postfix);
  1400. results = provider.CompileAssemblyFromSource(
  1401. options, sb.ToString());
  1402. }
  1403. if (results.Errors.HasErrors)
  1404. {
  1405. hasError = true;
  1406. return IreturnData;
  1407. //var errorMessage = new StringBuilder();
  1408. //foreach (CompilerError error in results.Errors)
  1409. //{
  1410. // errorMessage.AppendFormat("{0} {1}", error.Line,
  1411. // error.ErrorText);
  1412. //}
  1413. //returnData = errorMessage.ToString();
  1414. }
  1415. else
  1416. {
  1417. TextWriter temp = Console.Out;
  1418. var writer = new StringWriter();
  1419. Console.SetOut(writer);
  1420. Type driverType = results.CompiledAssembly.GetType("Driver");
  1421. try
  1422. {
  1423. driverType.InvokeMember("Run", BindingFlags.InvokeMethod |
  1424. BindingFlags.Static | BindingFlags.Public,
  1425. null, null, null);
  1426. }
  1427. catch
  1428. {
  1429. hasError = true;
  1430. return IreturnData;
  1431. }
  1432. Console.SetOut(temp);
  1433. returnData = writer.ToString();
  1434. IreturnData = Convert.ToInt32(returnData);
  1435. }
  1436. return IreturnData;
  1437. }
  1438. }
  1439. }
  1440. }