锐腾搅拌上料功能
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

324 lines
14 KiB

5 months ago
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Text;
  7. using System.Windows.Forms;
  8. using DevExpress.XtraEditors;
  9. using ICSSoft.Frame.WorkPoint.Entity;
  10. using ICSSoft.Frame.WorkPoint.BLL;
  11. using ICSSoft.Base.Config.AppConfig;
  12. using ICSSoft.Base.Config.DBHelper;
  13. using System.Text.RegularExpressions;
  14. using ICSSoft.Frame.Data.Entity;
  15. using ICSSoft.Base.ReferForm.AppReferForm;
  16. using ICSSoft.Frame.Data.BLL;
  17. using ICSSoft.Frame.Helper;
  18. using System.Linq;
  19. namespace ICSSoft.Frame.APP
  20. {
  21. public partial class FromICSEQPWeeklyMaintenanceAdd : DevExpress.XtraEditors.XtraForm
  22. {
  23. string EQPID = "";
  24. DataTable dtSource = null;
  25. /// <summary>
  26. /// add new
  27. /// </summary>
  28. public FromICSEQPWeeklyMaintenanceAdd()
  29. {
  30. InitializeComponent();
  31. InitEQ();
  32. dtSource = InitDateDiff();
  33. grdDetail.DataSource = dtSource;
  34. grvDetail.BestFitColumns();
  35. txtEQPCODE.Enabled = true;
  36. }
  37. /// <summary>
  38. /// edit
  39. /// </summary>
  40. /// <param name="cPersonCode"></param>
  41. public FromICSEQPWeeklyMaintenanceAdd(string EQPID)
  42. {
  43. InitializeComponent();
  44. this.EQPID = EQPID;
  45. InitEQ();
  46. dtSource = InitDateDiff();
  47. grdDetail.DataSource = dtSource;
  48. grvDetail.BestFitColumns();
  49. txtEQPCODE.Enabled = string.IsNullOrEmpty(EQPID);
  50. }
  51. private void btnOK_Click(object sender, EventArgs e)
  52. {
  53. if (EQPID == "")
  54. {
  55. ICSBaseSimpleCode.AppshowMessageBox("请先选择设备");
  56. return;
  57. }
  58. DevExpress.Utils.WaitDialogForm _wait = new DevExpress.Utils.WaitDialogForm("正在执行...请稍等...");
  59. _wait.Show();
  60. try
  61. {
  62. DateTime dtNow = AppConfig.GetSeverDateTime("yyyy-MM-dd HH:mm:ss");
  63. List<ICSEQPWeeklyMaintenance> list = new List<ICSEQPWeeklyMaintenance>();
  64. var queryErr = from a in dtSource.AsEnumerable()
  65. join b in dtSource.AsEnumerable() on new { wn = a.Field<string>("WEEKDAYNAME"), s = a.Field<bool>("isSelect"), ava = a.Field<bool>("Available") } equals new { wn = b.Field<string>("WEEKDAYNAME"), s = b.Field<bool>("isSelect"), ava = b.Field<bool>("Available") }
  66. where a.Field<string>("DATEDIFFID") != b.Field<string>("DATEDIFFID")
  67. && (a.Field<TimeSpan>("BEGINTIME") >= b.Field<TimeSpan>("BEGINTIME") && a.Field<TimeSpan>("BEGINTIME") < b.Field<TimeSpan>("ENDTIME") || a.Field<TimeSpan>("ENDTIME") > b.Field<TimeSpan>("BEGINTIME") && a.Field<TimeSpan>("ENDTIME") <= b.Field<TimeSpan>("ENDTIME"))
  68. select new
  69. {
  70. = a.Field<string>("WEEKDAYNAME"),
  71. = a.Field<TimeSpan>("BEGINTIME"),
  72. = a.Field<TimeSpan>("ENDTIME")
  73. };
  74. var errList = queryErr.ToList();
  75. if (errList.Count > 0)
  76. {
  77. throw new Exception("勾选的生效的时间区间有重叠\r\n" + String.Join("\r\n", errList));
  78. }
  79. foreach (DataRow dr1 in dtSource.Rows)
  80. {
  81. bool select1 = Convert.ToBoolean(dr1["isSelect"]);
  82. if (!select1)
  83. {
  84. continue;
  85. }
  86. //string DATEDIFFID1 = dr1["DATEDIFFID"].ToString();
  87. //bool ava1 = Convert.ToBoolean(dr1["Available"]);
  88. //string 星期_1 = dr1["WEEKDAYNAME"].ToString();
  89. //string 时间区间1 = dr1["时间区间"].ToString();
  90. //string[] arrBeginTime1 = 时间区间1.Split('~')[0].Split(':');
  91. //string[] arrEndTime1 = 时间区间1.Split('~')[1].Split(':');
  92. //TimeSpan dt1s = new TimeSpan(Convert.ToInt32(arrBeginTime1[0]), Convert.ToInt32(arrBeginTime1[1]), Convert.ToInt32(arrBeginTime1[2]));
  93. //TimeSpan dt1e = new TimeSpan(Convert.ToInt32(arrEndTime1[0]), Convert.ToInt32(arrEndTime1[1]), Convert.ToInt32(arrEndTime1[2]));
  94. //foreach (DataRow dr2 in dtSource.Rows)
  95. //{
  96. // string DATEDIFFID2 = dr2["DATEDIFFID"].ToString();
  97. // if (DATEDIFFID1 == DATEDIFFID2)
  98. // {
  99. // continue;
  100. // }
  101. // bool select2 = Convert.ToBoolean(dr2["isSelect"]);
  102. // bool ava2 = Convert.ToBoolean(dr2["Available"]);
  103. // string 星期_2 = dr2["WEEKDAYNAME"].ToString();
  104. // string 时间区间2 = dr2["时间区间"].ToString();
  105. // string[] arrBeginTime2 = 时间区间2.Split('~')[0].Split(':');
  106. // string[] arrEndTime2 = 时间区间2.Split('~')[1].Split(':');
  107. // TimeSpan dt2s = new TimeSpan(Convert.ToInt32(arrBeginTime2[0]), Convert.ToInt32(arrBeginTime2[1]), Convert.ToInt32(arrBeginTime2[2]));
  108. // TimeSpan dt2e = new TimeSpan(Convert.ToInt32(arrEndTime2[0]), Convert.ToInt32(arrEndTime2[1]), Convert.ToInt32(arrEndTime2[2]));
  109. // if (星期_1 == 星期_2 && select2 && ava1 && ava2)
  110. // {
  111. // if (dt1s >= dt2e || dt1e <= dt2s)
  112. // {
  113. // continue;
  114. // }
  115. // throw new Exception("勾选的生效的时间区间有重叠\r\n" + 时间区间1 + "\r\n" + 时间区间2);
  116. // }
  117. //}
  118. ICSEQPWeeklyMaintenance info = new ICSEQPWeeklyMaintenance();
  119. info.ID = AppConfig.GetGuid();
  120. info.EQPID = EQPID;
  121. info.DATEDIFFID = dr1["DATEDIFFID"].ToString();
  122. info.Available = Convert.ToBoolean(dr1["Available"]);
  123. info.MTIME = dtNow;
  124. info.MUSERName = AppConfig.UserName;
  125. info.WorkPoint = AppConfig.WorkPointCode;
  126. list.Add(info);
  127. }
  128. ICSEQPWeeklyMaintenanceBLL.Edit4OneEQ(EQPID, list, AppConfig.AppConnectString);
  129. this.Close();
  130. _wait.Close();
  131. ICSBaseSimpleCode.AppshowMessageBox("操作成功");
  132. }
  133. catch (Exception ex)
  134. {
  135. _wait.Close();
  136. ICSBaseSimpleCode.AppshowMessageBox(ex.Message);
  137. }
  138. }
  139. private DataTable InitDateDiff()
  140. {
  141. string sql = @"
  142. SELECT
  143. CONVERT(BIT,CASE WHEN B.ID IS NULL THEN 0 ELSE 1 END) AS isSelect,
  144. CONVERT(BIT,CASE WHEN B.ID IS NULL THEN 0 ELSE B.Available END) AS Available,
  145. A.ID AS DATEDIFFID,
  146. A.WEEKDAYNAME,
  147. CONVERT(NVARCHAR(10),A.BEGINTIME,120)+'~'+CONVERT(NVARCHAR(10),A.ENDTIME,120) AS ,
  148. A.BEGINTIME,
  149. A.ENDTIME
  150. FROM [dbo].[ICSDateDiff] A
  151. LEFT JOIN [dbo].[ICSEQPWeeklyMaintenance] B ON B.DATEDIFFID=A.ID AND B.EQPID='{0}'
  152. WHERE A.WorkPoint='{1}' AND A.[TYPE]='RPS' AND A.Available=1
  153. ORDER BY A.WEEKDAYNAME,A.BEGINTIME,A.ENDTIME
  154. ";
  155. sql = string.Format(sql, EQPID, AppConfig.WorkPointCode);
  156. DataTable dt = DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql).Tables[0];
  157. if (dt.Rows.Count == 0)
  158. {
  159. throw new Exception("没有可用的时间段,请先维护 '时间段'");
  160. }
  161. return dt;
  162. }
  163. private void InitEQ()
  164. {
  165. string sql = "SELECT EQPCode 设备编码,EQPName 设备名称,EQPID FROM dbo.ICSEquipment WHERE WorkPoint='" + AppConfig.WorkPointCode + "' ";
  166. if (EQPID != "")
  167. {
  168. sql += (" AND EQPID='" + EQPID + "'");
  169. }
  170. else
  171. {
  172. sql += " ORDER BY EQPCode ";
  173. }
  174. DataTable dt = DBHelper.ExecuteDataset(AppConfig.AppConnectString.ToString(), CommandType.Text, sql).Tables[0];
  175. if (dt.Rows.Count == 0)
  176. {
  177. throw new Exception("未获取到设备信息");
  178. }
  179. txtEQPCODE.Properties.ValueMember = "设备编码";
  180. txtEQPCODE.Properties.DisplayMember = "设备编码";
  181. txtEQPCODE.Properties.DataSource = dt;
  182. txtEQPCODE.Properties.NullText = "";//空时的值
  183. txtEQPCODE.Properties.ImmediatePopup = true;//输入值是否马上弹出窗体
  184. txtEQPCODE.Properties.ValidateOnEnterKey = true;//回车确认
  185. txtEQPCODE.Properties.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.Standard;//要使用户可以输入,这里须设为Standard
  186. txtEQPCODE.Properties.AllowNullInput = DevExpress.Utils.DefaultBoolean.True; //可用Ctrl + Delete清空选择內容
  187. //自适应宽度
  188. txtEQPCODE.Properties.BestFitMode = DevExpress.XtraEditors.Controls.BestFitMode.BestFitResizePopup;
  189. //txtEQPCODE.Properties.View.Columns["EQPID"].Visible = false;
  190. string tempStr = string.Empty; //列名
  191. this.txtEQPCODE.Properties.View.Columns.Clear();
  192. for (int i = 0; i < dt.Columns.Count; i++)
  193. {
  194. tempStr = dt.Columns[i].ColumnName;
  195. DevExpress.XtraGrid.Columns.GridColumn col = this.txtEQPCODE.Properties.View.Columns.AddField(tempStr);
  196. col.VisibleIndex = i;
  197. col.Caption = tempStr;
  198. if (tempStr.Equals("EQPID")) col.Visible = false;
  199. }
  200. if (!string.IsNullOrEmpty(EQPID))
  201. {
  202. txtEQPCODE.Text = dt.Rows[0]["设备编码"].ToString();
  203. }
  204. }
  205. private void txtEQPCODE_EditValueChanged(object sender, EventArgs e)
  206. {
  207. try
  208. {
  209. GridLookUpEdit lookUP = sender as GridLookUpEdit;
  210. if (!string.IsNullOrWhiteSpace(lookUP.EditValue.ToString()))
  211. {
  212. var o = lookUP.Properties.GetRowByKeyValue(lookUP.EditValue);
  213. if (o is DataRowView)
  214. {
  215. DataRowView view = o as DataRowView;
  216. EQPID = view.Row["EQPID"].ToString();
  217. txtEQPID.Text = EQPID;
  218. txtEQPNAME.Text = view.Row["设备名称"].ToString();
  219. }
  220. else
  221. {
  222. EQPID = "";
  223. txtEQPNAME.Text = "";
  224. txtEQPID.Text = "";
  225. }
  226. }
  227. }
  228. catch (Exception ex)
  229. {
  230. ICSBaseSimpleCode.AppshowMessageBox(ex.Message);
  231. }
  232. }
  233. #region 移动窗体
  234. private const int WM_NCHITTEST = 0x84;
  235. private const int HTCLIENT = 0x1;
  236. private const int HTCAPTION = 0x2;
  237. //首先必须了解Windows的消息传递机制,当有鼠标活动消息时,
  238. //系统发送WM_NCHITTEST 消息给窗体作为判断消息发生地的根据。 nchittest
  239. //假如你点击的是标题栏,窗体收到的消息值就是 HTCAPTION ,
  240. //同样地,若接受到的消息是 HTCLIENT,说明用户点击的是客户区,也就是鼠标消息发生在客户区。
  241. //重写窗体,使窗体可以不通过自带标题栏实现移动
  242. protected override void WndProc(ref Message m)
  243. {
  244. //当重载窗体的 WndProc 方法时,可以截获 WM_NCHITTEST 消息并改些该消息,
  245. //当判断鼠标事件发生在客户区时,改写改消息,发送 HTCAPTION 给窗体,
  246. //这样,窗体收到的消息就时 HTCAPTION ,在客户区通过鼠标来拖动窗体就如同通过标题栏来拖动一样。
  247. //注意:当你重载 WndProc 并改写鼠标事件后,整个窗体的鼠标事件也就随之改变了。
  248. switch (m.Msg)
  249. {
  250. case WM_NCHITTEST:
  251. base.WndProc(ref m);
  252. if ((int)m.Result == HTCLIENT)
  253. m.Result = (IntPtr)HTCAPTION;
  254. return;
  255. }
  256. //拦截双击标题栏、移动窗体的系统消息
  257. if (m.Msg != 0xA3)
  258. {
  259. base.WndProc(ref m);
  260. }
  261. }
  262. #endregion
  263. #region 关闭
  264. private void btnCancle_Click(object sender, EventArgs e)
  265. {
  266. this.Close();
  267. this.DialogResult = DialogResult.Cancel;
  268. }
  269. private void btnClose_Click(object sender, EventArgs e)
  270. {
  271. this.Close();
  272. this.DialogResult = DialogResult.Cancel;
  273. }
  274. #endregion
  275. private void grvDetail_Click(object sender, EventArgs e)
  276. {
  277. if (grvDetail.FocusedRowHandle < 0)
  278. {
  279. return;
  280. }
  281. if (grvDetail.FocusedColumn == colisSelect)
  282. {
  283. bool oriSelected = Convert.ToBoolean(grvDetail.GetRowCellValue(grvDetail.FocusedRowHandle, colisSelect));
  284. if (oriSelected)
  285. {
  286. grvDetail.SetRowCellValue(grvDetail.FocusedRowHandle, colisSelect, false);
  287. }
  288. else
  289. {
  290. grvDetail.SetRowCellValue(grvDetail.FocusedRowHandle, colisSelect, true);
  291. grvDetail.SetRowCellValue(grvDetail.FocusedRowHandle, colAVA, true);
  292. }
  293. }
  294. else if (grvDetail.FocusedColumn == colAVA)
  295. {
  296. bool ava = Convert.ToBoolean(grvDetail.GetRowCellValue(grvDetail.FocusedRowHandle, colAVA));
  297. grvDetail.SetRowCellValue(grvDetail.FocusedRowHandle, colAVA, !ava);
  298. }
  299. }
  300. private void txtEQPID_EditValueChanged(object sender, EventArgs e)
  301. {
  302. dtSource = InitDateDiff();
  303. //grdDetail.DataSource = dtSource;
  304. }
  305. }
  306. }