锐腾搅拌上料功能
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.

1588 lines
71 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 System.Data.SqlClient;
  10. using ICSSoft.Frame.Data.BLL;
  11. using ICSSoft.Base.Language.Tool;
  12. using ICSSoft.Base.UserControl.MessageControl;
  13. using ICSSoft.Base.Report.Filter;
  14. using ICSSoft.Base.Config.DBHelper;
  15. using ICSSoft.Base.UserControl.FormControl;
  16. using ICSSoft.Base.ReferForm.AppReferForm;
  17. using ICSSoft.Base.Lable.PrintTool;
  18. using ICSSoft.Base.Config.AppConfig;
  19. using ICSSoft.Base.Report.GridReport;
  20. using ICSSoft.Frame.APP.Entity;
  21. using ICSSoft.Frame.Data.Entity;
  22. using DevExpress.XtraGrid.Views.BandedGrid;
  23. using System.Text.RegularExpressions;
  24. using System.Data.Linq;
  25. namespace ICSSoft.Frame.APP
  26. {
  27. using NPOI.HSSF.UserModel;
  28. using NPOI.SS.UserModel;
  29. using NPOI.XSSF.UserModel;
  30. using System.IO;
  31. public partial class FormICSEQPSTP : DevExpress.XtraEditors.XtraForm
  32. {
  33. List<FormReadExcelUIModelColumns> colNameList = new List<FormReadExcelUIModelColumns>();
  34. private string sqlFilter = "";
  35. private string connFilter = "";
  36. String guid = AppConfig.GetGuid();
  37. private DataTable dataSource = null;
  38. #region 构造函数
  39. public FormICSEQPSTP()
  40. {
  41. InitializeComponent();
  42. this.MaximumSize = new Size(Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.WorkingArea.Height);
  43. this.WindowState = FormWindowState.Maximized;
  44. }
  45. #endregion
  46. #region 加载
  47. private void FormICSFACTORY_Load(object sender, EventArgs e)
  48. {
  49. colNameList.Add(new FormReadExcelUIModelColumns("存货编码", true));
  50. colNameList.Add(new FormReadExcelUIModelColumns("工序代码", true));
  51. colNameList.Add(new FormReadExcelUIModelColumns("是否固定设备Y/N", false));
  52. colNameList.Add(new FormReadExcelUIModelColumns("设备编号", false));
  53. colNameList.Add(new FormReadExcelUIModelColumns("调机工时/准备工时", true));
  54. colNameList.Add(new FormReadExcelUIModelColumns("加工工时/标准工时", true));
  55. colNameList.Add(new FormReadExcelUIModelColumns("夹装工时", true));
  56. colNameList.Add(new FormReadExcelUIModelColumns("检验工时", true));
  57. colNameList.Add(new FormReadExcelUIModelColumns("是否启用Y/N", true));
  58. colNameList.Add(new FormReadExcelUIModelColumns("类型", false));
  59. colNameList.Add(new FormReadExcelUIModelColumns("轴数", false));
  60. colNameList.Add(new FormReadExcelUIModelColumns("刀柄", false));
  61. colNameList.Add(new FormReadExcelUIModelColumns("刀库", false));
  62. colNameList.Add(new FormReadExcelUIModelColumns("可加工外形", false));
  63. colNameList.Add(new FormReadExcelUIModelColumns("精度", false));
  64. colNameList.Add(new FormReadExcelUIModelColumns("工序等级", true));
  65. colNameList.Add(new FormReadExcelUIModelColumns("委外工时(天)", true));
  66. grvDetail.CustomDrawRowIndicator += new DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventHandler(grvDetail_CustomDrawRowIndicator);
  67. btnFilter_Click(sender, e);
  68. }
  69. #endregion
  70. #region 权限
  71. /// <summary>
  72. /// 操作权限
  73. /// </summary>
  74. /// <returns></returns>
  75. public DataTable RightOfExute()
  76. {
  77. DataTable rData = new DataTable();
  78. rData.Columns.Add("BtnName");
  79. rData.Columns.Add("ActionName");
  80. //查看权限(必须有)
  81. DataRow seeRow = rData.NewRow();
  82. seeRow["BtnName"] = "see";
  83. seeRow["ActionName"] = "查看";
  84. rData.Rows.Add(seeRow);
  85. foreach (Control ctr in panelControl3.Controls)
  86. {
  87. if (ctr.Name == btnFilter.Name || ctr.Name == btnConfig.Name ||
  88. ctr.Name == btnSelect.Name || ctr.Name == btnCanSelect.Name ||
  89. ctr.Name == btnImportMould.Name || ctr.Name == btnOutPut.Name ||
  90. ctr.Name == btnFalsh.Name || ctr.Name == lblTitle.Name || ctr.Name == btnClose.Name)
  91. continue;
  92. DataRow dr = rData.NewRow();
  93. dr["BtnName"] = ctr.Name;
  94. dr["ActionName"] = ctr.Text;
  95. rData.Rows.Add(dr);
  96. }
  97. //List<Control> ControlList = new List<Control>();
  98. //ControlList.Add(btnConfig);
  99. //ControlList.Add(btnAdd);
  100. //ControlList.Add(btnEdit);
  101. //ControlList.Add(btnDelLable);
  102. //foreach (Control ctr in ControlList)
  103. //{
  104. // if (ctr.GetType() == typeof(SimpleButton))
  105. // {
  106. // DataRow dr = rData.NewRow();
  107. // dr["BtnName"] = ctr.Name;
  108. // dr["ActionName"] = ctr.Text;
  109. // rData.Rows.Add(dr);
  110. // }
  111. //}
  112. rData.AcceptChanges();
  113. return rData;
  114. }
  115. /// <summary>
  116. /// 数据权限
  117. /// </summary>
  118. /// <returns></returns>
  119. public DataTable RightOfData()
  120. {
  121. DataTable rData = new DataTable();
  122. rData.Columns.Add("BodyName");
  123. rData.Columns.Add("ControlName");
  124. rData.Columns.Add("ControlCaption");
  125. rData.AcceptChanges();
  126. return rData;
  127. }
  128. #endregion
  129. #region 退出
  130. private void btnClose_Click(object sender, EventArgs e)
  131. {
  132. AppConfig.CloseFormShow(this.Text);
  133. this.Close();
  134. }
  135. private void btnExit_Click(object sender, EventArgs e)
  136. {
  137. AppConfig.CloseFormShow(this.Text);
  138. this.Close();
  139. }
  140. #endregion
  141. #region 选择
  142. #region 全选
  143. private void btnSelect_Click(object sender, EventArgs e)
  144. {
  145. grvDetail.PostEditor();
  146. this.Validate();
  147. for (int i = 0; i < grvDetail.RowCount; i++)
  148. {
  149. grvDetail.SetRowCellValue(i, colisSelect, "Y");
  150. }
  151. }
  152. #endregion
  153. #region 全消
  154. private void btnCanSelect_Click(object sender, EventArgs e)
  155. {
  156. grvDetail.PostEditor();
  157. this.Validate();
  158. for (int i = 0; i < grvDetail.RowCount; i++)
  159. {
  160. grvDetail.SetRowCellValue(i, colisSelect, "");
  161. }
  162. }
  163. #endregion
  164. #region 双击选择
  165. private void grvDetail_DoubleClick(object sender, EventArgs e)
  166. {
  167. if (grvDetail.FocusedRowHandle < 0)
  168. {
  169. return;
  170. }
  171. if (grvDetail.FocusedColumn == colisSelect)
  172. {
  173. if (grvDetail.GetRowCellValue(grvDetail.FocusedRowHandle, colisSelect).ToString() == "")
  174. {
  175. grvDetail.SetRowCellValue(grvDetail.FocusedRowHandle, colisSelect, "Y");
  176. }
  177. else
  178. {
  179. grvDetail.SetRowCellValue(grvDetail.FocusedRowHandle, colisSelect, "");
  180. }
  181. }
  182. }
  183. #endregion
  184. #endregion
  185. #region 数据源相关
  186. #region 过滤
  187. private string tempTableName = "";
  188. private void btnFilter_Click(object sender, EventArgs e)
  189. {
  190. FormFilter filter = new FormFilter(AppConfig.GetSourceId(this.Tag.ToString(), btnConfig.Name));
  191. filter.OldTempTableName = tempTableName;
  192. if (filter.ShowDialog() == DialogResult.OK)
  193. {
  194. DevExpress.Utils.WaitDialogForm _wait = new DevExpress.Utils.WaitDialogForm("正在查找...请稍等...");
  195. try
  196. {
  197. _wait.Show();
  198. tempTableName = filter.NewTempTableName;
  199. sqlFilter = filter.SqlText;
  200. connFilter = filter.FilterConnectString;
  201. dataSource = filter.FilterData.Tables[0];
  202. grdDetail.DataSource = dataSource;
  203. foreach (DevExpress.XtraGrid.Columns.GridColumn col in grvDetail.Columns)
  204. {
  205. if (col.Name == "colITEMCODE" || col.Name == "colITEMNAME")
  206. {
  207. col.BestFit();
  208. }
  209. }
  210. //grvDetail.BestFitColumns();
  211. rptPage.RecordNum = dataSource.Rows.Count;
  212. rptPage.PageSize = 490;
  213. rptPage.PageIndex = 1;
  214. rptPage.ReLoad();
  215. rptPage.PageIndex = 1;
  216. rptPage.PageSize = 500;
  217. rptPage.ReLoad();
  218. _wait.Close();
  219. }
  220. catch (Exception ex)
  221. {
  222. MessageBox.Show("异常:" + ex.Message, "异常", MessageBoxButtons.OK, MessageBoxIcon.Error);
  223. _wait.Close();
  224. }
  225. }
  226. }
  227. #endregion
  228. #region 绑定数据源
  229. private void btnConfig_Click(object sender, EventArgs e)//绑定数据源
  230. {
  231. if (AppConfig.UserCode.ToLower() != "demo")
  232. {
  233. //ICSBaseSimpleCode.AppshowMessageBox("您没有权限设置数据源,请联系软件提供商!");
  234. return;
  235. }
  236. FormDataSource fdata = new FormDataSource(AppConfig.GetMenuId(this.Tag.ToString()), btnConfig.Name);
  237. fdata.ShowDialog();
  238. }
  239. #endregion
  240. #region 列表
  241. private void grvDetail_CustomDrawRowIndicator(object sender, DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs e)
  242. {
  243. if (e.Info.IsRowIndicator && e.RowHandle >= 0)
  244. e.Info.DisplayText = (e.RowHandle + 1).ToString();
  245. }
  246. #endregion
  247. #region 分页
  248. private void rptPage_PageIndexChanged(object Sender, EventArgs e)
  249. {
  250. DataTable data = AppConfig.GetPageData(dataSource, rptPage.PageIndex, rptPage.PageSize).Copy();
  251. //DataTable data = AppConfig.GetPageDataByDb(tempTableName, "pagerowindex", rptPage.PageSize, rptPage.PageIndex, dataSource.Rows.Count);
  252. grdDetail.DataSource = data;
  253. }
  254. #endregion
  255. #endregion
  256. #region CRUD
  257. #region 增加
  258. private void btnAdd_Click(object sender, EventArgs e)
  259. {
  260. SimpleButton btntemp = (SimpleButton)sender;
  261. if (AppConfig.GetUserExcuteRight(this.Tag.ToString(), btntemp.Name) == false)
  262. {
  263. ICSBaseSimpleCode.AppshowMessageBox("对不起您没有:" + btntemp.Text + "权限,请联系系统管理员!");
  264. return;
  265. }
  266. FormICSEQPSTPAdd add = new FormICSEQPSTPAdd();
  267. add.ShowDialog();
  268. btnFalsh_Click(null, null);
  269. }
  270. #endregion
  271. #region 修改
  272. private void btnEdit_Click(object sender, EventArgs e)
  273. {
  274. SimpleButton btntemp = (SimpleButton)sender;
  275. if (AppConfig.GetUserExcuteRight(this.Tag.ToString(), btntemp.Name) == false)
  276. {
  277. ICSBaseSimpleCode.AppshowMessageBox("对不起您没有:" + btntemp.Text + "权限,请联系系统管理员!");
  278. return;
  279. }
  280. int count = 0;
  281. for (int i = 0; i < grvDetail.RowCount; i++)
  282. {
  283. if (grvDetail.GetRowCellValue(i, colisSelect).ToString() == "Y")
  284. {
  285. count++;
  286. }
  287. }
  288. if (count != 1)
  289. {
  290. ICSBaseSimpleCode.AppshowMessageBox("请选择数据,且只能选择一条进行编辑!!!");
  291. return;
  292. }
  293. try
  294. {
  295. string id;
  296. for (int i = 0; i < grvDetail.RowCount; i++)
  297. {
  298. if (grvDetail.GetRowCellValue(i, colisSelect).ToString() == "Y")
  299. {
  300. id = grvDetail.GetRowCellValue(i, colID).ToString();
  301. FormICSEQPSTPAdd add = new FormICSEQPSTPAdd(id);
  302. add.ShowDialog();
  303. }
  304. }
  305. btnFalsh_Click(null, null);
  306. }
  307. catch (Exception ex)
  308. {
  309. //throw ex;
  310. ICSBaseSimpleCode.AppshowMessageBox(ex.Message);
  311. }
  312. }
  313. #endregion
  314. #region 删除
  315. private void btnDel_Click(object sender, EventArgs e)
  316. {
  317. SimpleButton btntemp = (SimpleButton)sender;
  318. if (AppConfig.GetUserExcuteRight(this.Tag.ToString(), btntemp.Name) == false)
  319. {
  320. ICSBaseSimpleCode.AppshowMessageBox("对不起您没有:" + btntemp.Text + "权限,请联系系统管理员!");
  321. return;
  322. }
  323. List<string> routecodeList = new List<string>();
  324. for (int i = 0; i < grvDetail.RowCount; i++)
  325. {
  326. if (grvDetail.GetRowCellValue(i, colisSelect).ToString() == "Y")
  327. {
  328. routecodeList.Add(grvDetail.GetRowCellValue(i, colID).ToString());
  329. }
  330. }
  331. if (routecodeList.Count == 0 || routecodeList == null)
  332. {
  333. ICSBaseSimpleCode.AppshowMessageBox("请选择数据");
  334. return;
  335. }
  336. if (ICSBaseSimpleCode.AppshowMessageBoxRepose("确定删除吗?删除后无法恢复,确定吗?") != DialogResult.OK)
  337. {
  338. btnCanSelect_Click(sender, e);
  339. return;
  340. }
  341. ICSEQPSTPBLL.deleteInfo(routecodeList, AppConfig.AppConnectString);
  342. ICSBaseSimpleCode.AppshowMessageBox("删除成功");
  343. btnFalsh_Click(null, null);
  344. }
  345. #endregion
  346. #region 刷新
  347. private void btnFalsh_Click(object sender, EventArgs e)
  348. {
  349. if (connFilter == null || connFilter == "")
  350. {
  351. return;
  352. }
  353. DevExpress.Utils.WaitDialogForm _wait = new DevExpress.Utils.WaitDialogForm("正在查找...请稍等...");
  354. try
  355. {
  356. _wait.Show();
  357. FormFilter filter = new FormFilter(AppConfig.GetSourceId(this.Tag.ToString(), btnConfig.Name), false);
  358. filter.OldTempTableName = tempTableName;
  359. //tempTableName = filter.NewTempTableName;
  360. //DataTable data = DBHelper.ExecuteDataset(AppConfig.FrameConnectString, CommandType.Text, "select * from " + tempTableName).Tables[0];
  361. dataSource = DBHelper.ExecuteDataset(connFilter, CommandType.Text, sqlFilter).Tables[0];
  362. grdDetail.DataSource = dataSource;
  363. rptPage.RecordNum = dataSource.Rows.Count;
  364. rptPage.PageIndex = 1;
  365. rptPage.ReLoad();
  366. _wait.Close();
  367. }
  368. catch (Exception ex)
  369. {
  370. MessageBox.Show("异常:" + ex.Message, "异常", MessageBoxButtons.OK, MessageBoxIcon.Error);
  371. _wait.Close();
  372. }
  373. }
  374. #endregion
  375. #region 审核
  376. private void btnCheck_Click(object sender, EventArgs e)
  377. {
  378. SimpleButton btntemp = (SimpleButton)sender;
  379. if (AppConfig.GetUserExcuteRight(this.Tag.ToString(), btntemp.Name) == false)
  380. {
  381. ICSBaseSimpleCode.AppshowMessageBox("对不起您没有:" + btntemp.Text + "权限,请联系系统管理员!");
  382. return;
  383. }
  384. List<string> routecodeList = new List<string>();
  385. for (int i = 0; i < grvDetail.RowCount; i++)
  386. {
  387. if (grvDetail.GetRowCellValue(i, colisSelect).ToString() == "Y")
  388. {
  389. routecodeList.Add(grvDetail.GetRowCellValue(i, colID).ToString());
  390. }
  391. }
  392. if (routecodeList.Count == 0 || routecodeList == null)
  393. {
  394. ICSBaseSimpleCode.AppshowMessageBox("请选择数据");
  395. return;
  396. }
  397. if (ICSBaseSimpleCode.AppshowMessageBoxRepose("确定审核吗?") != DialogResult.OK)
  398. {
  399. btnCanSelect_Click(sender, e);
  400. return;
  401. }
  402. ICSEQPSTPBLL.checkInfo(routecodeList, AppConfig.AppConnectString);
  403. ICSBaseSimpleCode.AppshowMessageBox("审核成功");
  404. btnFalsh_Click(null, null);
  405. }
  406. #endregion
  407. #endregion
  408. #region 导入导出
  409. #region 导出
  410. private void btnOutPut_Click(object sender, EventArgs e)
  411. {
  412. FormOutExcel foe = new FormOutExcel(this.Tag.ToString(), grdDetail);
  413. foe.ShowDialog();
  414. }
  415. #endregion
  416. #region 导入
  417. bool = true;
  418. bool = true;
  419. bool = true;
  420. bool = true;
  421. private void btnImportData_Click(object sender, EventArgs e)
  422. {
  423. DateTime dtNow = AppConfig.GetSeverDateTime("yyyy-MM-dd HH:mm:ss");
  424. Regex reg = new Regex("^(0|([1-9]\\d*))(\\.\\d+)?$");
  425. SimpleButton btntemp = (SimpleButton)sender;
  426. if (AppConfig.GetUserExcuteRight(this.Tag.ToString(), btntemp.Name) == false)
  427. {
  428. ICSBaseSimpleCode.AppshowMessageBox("对不起您没有:" + btntemp.Text + "权限,请联系系统管理员!");
  429. return;
  430. }
  431. DevExpress.Utils.WaitDialogForm _wait = new DevExpress.Utils.WaitDialogForm();
  432. _wait.Hide();
  433. try
  434. {
  435. FormReadExcel fre = new FormReadExcel();
  436. if (fre.ShowDialog() != DialogResult.OK)
  437. {
  438. return;
  439. }
  440. DataTable dataSource = fre._excelData;
  441. if (dataSource == null)
  442. {
  443. throw new Exception("excel数据取得失败");
  444. }
  445. _wait.Show();
  446. _wait.Caption = "判断模版是否正确......";
  447. //判断模版是否正确
  448. foreach (FormReadExcelUIModelColumns columnsName in colNameList)
  449. {
  450. if (!dataSource.Columns.Contains(columnsName.columnsName))
  451. {
  452. throw new Exception("模版不正确,缺少列" + columnsName.columnsName);
  453. }
  454. }
  455. _wait.Caption = "数据整理中......";
  456. //获取基础验证信息
  457. DataSet ds4Check = GetVerificationInfo();
  458. List<ICSEQPSTP> InitInvInfoList = new List<ICSEQPSTP>();
  459. foreach (DataRow dr in dataSource.Rows)
  460. {
  461. int Rindex = dataSource.Rows.IndexOf(dr);
  462. bool = false;
  463. bool = false;
  464. string ITEMCODE = "";
  465. string OPCODE = "";
  466. string EQPCODE = "";
  467. string EQPTypeCode = "";
  468. string cClass = "";
  469. string cHandles = "";
  470. string cAxis = "";
  471. string cToolMagazine = "";
  472. string cMachinableProfiles = "";
  473. string cAccuracy = "";
  474. string ISREF = "";
  475. string JiaGongTime = "";
  476. string TiaoJiTime = "";
  477. string JiaZhuangTime = "";
  478. string JianYanTime = "";
  479. string WTIME = "";
  480. decimal? wtime = null;
  481. string OPLVL = null;
  482. //判断必输项目是否为空
  483. foreach (FormReadExcelUIModelColumns col in colNameList)
  484. {
  485. if (col.NotNull)
  486. {
  487. if (string.IsNullOrEmpty(dr[col.columnsName].ToString().Trim()))
  488. {
  489. throw new Exception("列" + col.columnsName + "没有输入值");
  490. }
  491. }
  492. }
  493. = dr["是否固定设备Y/N"].ToString().Trim().ToUpper() == "Y";
  494. ITEMCODE = dr["存货编码"].ToString().Trim().ToUpper();
  495. OPCODE = dr["工序代码"].ToString().Trim().ToUpper();
  496. ISREF = dr["是否启用Y/N"].ToString().Trim().ToUpper() == "Y" ? "是" : "否";
  497. TiaoJiTime = dr["调机工时/准备工时"].ToString().Trim().ToUpper();
  498. JiaGongTime = dr["加工工时/标准工时"].ToString().Trim().ToUpper();
  499. JiaZhuangTime = dr["夹装工时"].ToString().Trim().ToUpper();
  500. JianYanTime = dr["检验工时"].ToString().Trim().ToUpper();
  501. OPLVL = dr["工序等级"].ToString().Trim().ToUpper();
  502. WTIME = dr["委外工时(天)"].ToString().Trim().ToUpper();
  503. //物料档案检查
  504. if ()
  505. {
  506. if (ds4Check.Tables["存货档案"].Select("存货编码='" + ITEMCODE + "'").Length == 0)
  507. {
  508. throw new Exception("存货档案,不包含此存货编码: " + ITEMCODE);
  509. }
  510. }
  511. //工序档案检查
  512. if ()
  513. {
  514. DataRow[] opdr = ds4Check.Tables["工序档案"].Select("工序代码='" + OPCODE + "'");
  515. if (opdr.Length == 0)
  516. {
  517. throw new Exception("工序档案,不包含此工序: " + OPCODE);
  518. }
  519. = Convert.ToBoolean(opdr[0]["委外"]);
  520. }
  521. //时间规范检查
  522. if (!reg.IsMatch(TiaoJiTime))
  523. {
  524. throw new Exception("调机工时/准备工时错误,只能输入非负数,行" + Rindex.ToString());
  525. }
  526. if (!reg.IsMatch(JiaGongTime))
  527. {
  528. throw new Exception("加工工时/标准工时错误,只能输入非负数,行" + Rindex.ToString());
  529. }
  530. if (!reg.IsMatch(JiaZhuangTime))
  531. {
  532. throw new Exception("夹装工时错误,只能输入非负数,行" + Rindex.ToString());
  533. }
  534. if (!reg.IsMatch(JianYanTime))
  535. {
  536. throw new Exception("检验工时错误,只能输入非负数,行" + Rindex.ToString());
  537. }
  538. if ()
  539. {
  540. EQPTypeCode = "委外";
  541. OPLVL = null;
  542. if (string.IsNullOrEmpty(WTIME))
  543. {
  544. throw new Exception("物料:" + ITEMCODE + "工序:" + OPCODE + ",是委外工序,但委外工时为空");
  545. }
  546. decimal wwtime = 0;
  547. bool w = decimal.TryParse(WTIME, out wwtime);
  548. if (!w || wwtime <= 0)
  549. {
  550. throw new Exception("物料:" + ITEMCODE + "工序:" + OPCODE + ",委外工时维护错误:" + WTIME);
  551. }
  552. }
  553. else
  554. {
  555. wtime = null;
  556. if ()
  557. {
  558. EQPTypeCode = "固定设备";
  559. EQPCODE = dr["设备编号"].ToString().Trim().ToUpper();
  560. if (string.IsNullOrEmpty(EQPCODE))
  561. {
  562. throw new Exception("非委外工序" + OPCODE + "固定设备为'Y'时,设备编码必须填写");
  563. }
  564. //设备代码检查
  565. if ()
  566. {
  567. if (ds4Check.Tables["设备档案"].Select("设备代码='" + EQPCODE + "'").Length == 0)
  568. {
  569. throw new Exception("设备档案.不包含设备: " + EQPCODE);
  570. }
  571. }
  572. }
  573. else
  574. {
  575. EQPTypeCode = "设备类型";
  576. cClass = dr["类型"].ToString().Trim().ToUpper();
  577. cHandles = dr["刀柄"].ToString().Trim().ToUpper();
  578. cAxis = dr["轴数"].ToString().Trim().ToUpper();
  579. cToolMagazine = dr["刀库"].ToString().Trim().ToUpper();
  580. cMachinableProfiles = dr["可加工外形"].ToString().Trim().ToUpper();
  581. cAccuracy = dr["精度"].ToString().Trim().ToUpper();
  582. if (string.IsNullOrEmpty(cClass)
  583. || string.IsNullOrEmpty(cHandles)
  584. || string.IsNullOrEmpty(cAxis)
  585. || string.IsNullOrEmpty(cToolMagazine)
  586. || string.IsNullOrEmpty(cMachinableProfiles)
  587. || string.IsNullOrEmpty(cAccuracy))
  588. {
  589. throw new Exception("非委外工序" + OPCODE + "固定设备为'N'时,设备类型对应的六大维度必须填写");
  590. }
  591. if ()
  592. {
  593. int dcToolMagazine = 0;
  594. int dcMachinableProfiles = 0;
  595. //六大维度检查
  596. if (ds4Check.Tables["类型"].Select("类型='" + cClass + "'").Length == 0)
  597. {
  598. throw new Exception("六大维度-类型.不包含: " + cClass);
  599. }
  600. if (ds4Check.Tables["刀柄"].Select("刀柄='" + cHandles + "'").Length == 0)
  601. {
  602. throw new Exception("六大维度-刀柄.不包含: " + cHandles);
  603. }
  604. if (ds4Check.Tables["轴数"].Select("轴数='" + cAxis + "'").Length == 0)
  605. {
  606. throw new Exception("六大维度-轴数.不包含: " + cAxis);
  607. }
  608. if (int.TryParse(cToolMagazine, out dcToolMagazine))
  609. {
  610. throw new Exception("刀库数" + dcToolMagazine + "必须为正整数");
  611. }
  612. if (dcToolMagazine <= 0)
  613. {
  614. throw new Exception("刀库数" + dcToolMagazine + "必须为正整数");
  615. }
  616. if (int.TryParse(cMachinableProfiles, out dcMachinableProfiles))
  617. {
  618. throw new Exception("可加工外形: " + cToolMagazine + "必须为正整数");
  619. }
  620. if (dcMachinableProfiles <= 0)
  621. {
  622. throw new Exception("可加工外形: " + cToolMagazine + "必须为正整数");
  623. }
  624. //if (ds4Check.Tables["刀库数"].Select("刀库数='" + cToolMagazine + "'").Length == 0)
  625. //{
  626. // throw new Exception("六大维度-刀库数.不包含: " + cToolMagazine);
  627. //}
  628. //if (ds4Check.Tables["可加工外形"].Select("可加工外形='" + cMachinableProfiles + "'").Length == 0)
  629. //{
  630. // throw new Exception("六大维度-可加工外形.不包含: " + cMachinableProfiles);
  631. //}
  632. if (ds4Check.Tables["精度"].Select("精度='" + cAccuracy + "'").Length == 0)
  633. {
  634. throw new Exception("六大维度-精度.不包含: " + cAccuracy);
  635. }
  636. }
  637. }
  638. }
  639. ICSEQPSTP Info = new ICSEQPSTP();
  640. Info.ID = "";
  641. Info.ITEMCODE = ITEMCODE;
  642. Info.OPCODE = OPCODE;
  643. Info.EQPCODE = EQPCODE;
  644. Info.EQPTypeCode = EQPTypeCode;
  645. Info.ISREF = ISREF;
  646. Info.Status = "New";
  647. Info.cClass = cClass;
  648. Info.cHandles = cHandles;
  649. Info.cAxis = cAxis;
  650. Info.cAccuracy = cAccuracy;
  651. Info.cMachinableProfiles = cMachinableProfiles;
  652. Info.cToolMagazine = cToolMagazine;
  653. Info.TiaoJiTime = Info.RTIME = Math.Round(Convert.ToDecimal(TiaoJiTime), 2);
  654. Info.JiaGongTime = Info.STIME = Math.Round(Convert.ToDecimal(JiaGongTime), 2);
  655. Info.JiaZhuangTime = Math.Round(Convert.ToDecimal(JiaZhuangTime), 2);
  656. Info.JianYanTime = Math.Round(Convert.ToDecimal(JianYanTime), 2);
  657. Info.OPLVL = OPLVL;
  658. Info.WTIME = wtime;
  659. Info.MUSER = AppConfig.UserCode;
  660. Info.MUSERName = AppConfig.UserName;
  661. Info.MTIME = dtNow;
  662. Info.WorkPoint = AppConfig.WorkPointCode;
  663. //Info.EATTRIBUTE1 = "";
  664. //Info.ETTRCODE = dr["自定义项"].ToString();
  665. //Info.OutsourcingProperties = dr["外协属性"].ToString();
  666. //Info.BladeModelAndBrand = dr["刀片型号和品牌"].ToString();
  667. //Info.ToolingNo = dr["工装编号"].ToString();
  668. InitInvInfoList.Add(Info);
  669. }
  670. _wait.Caption = "导入数据......";
  671. ICSEQPSTPBLL.Import(InitInvInfoList, AppConfig.AppConnectString);
  672. _wait.Close();
  673. ICSBaseSimpleCode.AppshowMessageBox("数据导入成功!");
  674. btnFalsh_Click(null, null);
  675. }
  676. catch (Exception ex)
  677. {
  678. _wait.Close();
  679. ICSBaseSimpleCode.AppshowMessageBox("数据导入失败:" + ex.Message);
  680. }
  681. }
  682. #endregion
  683. #region 导入模板下载
  684. private void btnImportMould_Click(object sender, EventArgs e)
  685. {
  686. DevExpress.Utils.WaitDialogForm _wait = new DevExpress.Utils.WaitDialogForm();
  687. _wait.Hide();
  688. string anjianExcelFileName = Environment.CommandLine.Substring(1, Environment.CommandLine.LastIndexOf("\\")) + "Output\\";
  689. try
  690. {
  691. _wait.Show();
  692. _wait.Caption = "模板下载中......";
  693. SaveFileDialog dlgSaveFileDialog = new SaveFileDialog(); //弹框提示保存
  694. dlgSaveFileDialog.InitialDirectory = anjianExcelFileName; //默认打开目录
  695. dlgSaveFileDialog.FilterIndex = 1;
  696. dlgSaveFileDialog.RestoreDirectory = true;
  697. dlgSaveFileDialog.FileName = "标准工时导入模板.xlsx"; //默认保存名称
  698. dlgSaveFileDialog.Filter = "Excel文件(*.xlsx)|*.xlsx";
  699. if (dlgSaveFileDialog.ShowDialog() == DialogResult.OK)
  700. {
  701. string fileName = dlgSaveFileDialog.FileName; //获取弹出框选择或填写的文件名称
  702. FileUtil.exportToExcelFile(fileName, colNameList);
  703. _wait.Close();
  704. ICSBaseSimpleCode.AppshowMessageBox("模板下载成功!");
  705. }
  706. _wait.Close();
  707. }
  708. catch (Exception ex)
  709. {
  710. _wait.Close();
  711. ICSBaseSimpleCode.AppshowMessageBox("模板下载失败:" + ex.Message);
  712. }
  713. }
  714. #endregion
  715. #region 获取检查依据
  716. DataSet GetVerificationInfo()
  717. {
  718. DataSet ds = new DataSet();
  719. #region 存货
  720. if ()
  721. {
  722. string sqlItemCode = @"
  723. SELECT DISTINCT A.ITEMCODE AS ,B.INVNAME AS FROM dbo.ICSITEMROUTE2OP A
  724. LEFT JOIN ICSINVENTORY B ON A.ITEMCODE=B.INVCODE AND A.WorkPoint=B.WorkPoint
  725. WHERE A.WorkPoint='{0}' ORDER BY A.ITEMCODE ASC";
  726. sqlItemCode = string.Format(sqlItemCode, AppConfig.WorkPointCode);
  727. DataTable dtItemCode = DBHelper.ExecuteDataset(AppConfig.AppConnectString.ToString(), CommandType.Text, sqlItemCode).Tables[0];
  728. if (dtItemCode.Rows.Count == 0)
  729. {
  730. throw new Exception("存货档案无数据");
  731. }
  732. dtItemCode.TableName = "存货档案";
  733. ds.Tables.Add(dtItemCode.Copy());
  734. }
  735. #endregion
  736. #region 六大维度
  737. if ()
  738. {
  739. string sql6 = @"SELECT LTRIM(RTRIM(EnumText)) as 类型 FROM Sys_EnumValues WHERE EnumKey='30001' AND LTRIM(RTRIM(EnumText))<>'' AND WorkPointCode='" + AppConfig.WorkPointCode + "' ORDER BY EnumValue";
  740. DataTable dt30001 = DBHelper.ExecuteDataset(AppConfig.AppConnectString.ToString(), CommandType.Text, sql6).Tables[0];
  741. if (dt30001.Rows.Count == 0)
  742. {
  743. throw new Exception("自定义项,设备类型(六大维度)-类型,未维护");
  744. }
  745. dt30001.TableName = "类型";
  746. ds.Tables.Add(dt30001.Copy());
  747. sql6 = @"SELECT LTRIM(RTRIM(EnumText)) as 刀柄 FROM Sys_EnumValues WHERE EnumKey='30002' AND LTRIM(RTRIM(EnumText))<>'' AND WorkPointCode='" + AppConfig.WorkPointCode + "' ORDER BY EnumValue";
  748. DataTable dt30002 = DBHelper.ExecuteDataset(AppConfig.AppConnectString.ToString(), CommandType.Text, sql6).Tables[0];
  749. if (dt30002.Rows.Count == 0)
  750. {
  751. throw new Exception("自定义项,设备类型(六大维度)-刀柄,未维护");
  752. }
  753. dt30002.TableName = "刀柄";
  754. ds.Tables.Add(dt30002.Copy());
  755. sql6 = @"SELECT LTRIM(RTRIM(EnumText)) as 轴数 FROM Sys_EnumValues WHERE EnumKey='30003' AND LTRIM(RTRIM(EnumText))<>'' AND WorkPointCode='" + AppConfig.WorkPointCode + "' ORDER BY EnumValue";
  756. DataTable dt30003 = DBHelper.ExecuteDataset(AppConfig.AppConnectString.ToString(), CommandType.Text, sql6).Tables[0];
  757. if (dt30003.Rows.Count == 0)
  758. {
  759. throw new Exception("自定义项,设备类型(六大维度)-轴数,未维护");
  760. }
  761. dt30003.TableName = "轴数";
  762. ds.Tables.Add(dt30003.Copy());
  763. sql6 = @"SELECT LTRIM(RTRIM(EnumText)) as 刀库数 FROM Sys_EnumValues WHERE EnumKey='30004' AND LTRIM(RTRIM(EnumText))<>'' AND WorkPointCode='" + AppConfig.WorkPointCode + "' ORDER BY EnumValue";
  764. DataTable dt30004 = DBHelper.ExecuteDataset(AppConfig.AppConnectString.ToString(), CommandType.Text, sql6).Tables[0];
  765. if (dt30004.Rows.Count == 0)
  766. {
  767. throw new Exception("自定义项,设备类型(六大维度)-刀库数,未维护");
  768. }
  769. dt30004.TableName = "刀库数";
  770. ds.Tables.Add(dt30004.Copy());
  771. sql6 = @"SELECT LTRIM(RTRIM(EnumText)) as 可加工外形 FROM Sys_EnumValues WHERE EnumKey='30005' AND LTRIM(RTRIM(EnumText))<>'' AND WorkPointCode='" + AppConfig.WorkPointCode + "' ORDER BY EnumValue";
  772. DataTable dt30005 = DBHelper.ExecuteDataset(AppConfig.AppConnectString.ToString(), CommandType.Text, sql6).Tables[0];
  773. if (dt30005.Rows.Count == 0)
  774. {
  775. throw new Exception("自定义项,设备类型(六大维度)-可加工外形,未维护");
  776. }
  777. dt30005.TableName = "可加工外形";
  778. ds.Tables.Add(dt30005.Copy());
  779. sql6 = @"SELECT LTRIM(RTRIM(EnumText)) as 精度 FROM Sys_EnumValues WHERE EnumKey='30006' AND LTRIM(RTRIM(EnumText))<>'' AND WorkPointCode='" + AppConfig.WorkPointCode + "' ORDER BY EnumValue";
  780. DataTable dt30006 = DBHelper.ExecuteDataset(AppConfig.AppConnectString.ToString(), CommandType.Text, sql6).Tables[0];
  781. if (dt30006.Rows.Count == 0)
  782. {
  783. throw new Exception("自定义项,设备类型(六大维度)-精度,未维护");
  784. }
  785. dt30006.TableName = "精度";
  786. ds.Tables.Add(dt30006.Copy());
  787. }
  788. #endregion
  789. #region 设备
  790. if ()
  791. {
  792. string sqlEqpCode = @"SELECT EQPCODE AS 设备代码,EQPNAME AS 设备名称 FROM [dbo].[ICSEquipment] WHERE WorkPoint='" + AppConfig.WorkPointCode + "' ORDER BY EQPCode";
  793. DataTable dtEqpCode = DBHelper.ExecuteDataset(AppConfig.AppConnectString.ToString(), CommandType.Text, sqlEqpCode).Tables[0];
  794. if (dtEqpCode.Rows.Count == 0)
  795. {
  796. throw new Exception("设备档案没有可用数据");
  797. }
  798. dtEqpCode.TableName = "设备档案";
  799. ds.Tables.Add(dtEqpCode.Copy());
  800. }
  801. #endregion
  802. #region 工序
  803. if ()
  804. {
  805. string sqlOPCode = @"SELECT OPCODE AS 工序代码,CONVERT(BIT,ISNULL(EATTRIBUTE1,'0')) AS 委外 FROM dbo.ICSOP WHERE WorkPoint='" + AppConfig.WorkPointCode + "' AND EnableFlag=1 ORDER BY OPCODE";
  806. DataTable dtOPCode = DBHelper.ExecuteDataset(AppConfig.AppConnectString.ToString(), CommandType.Text, sqlOPCode).Tables[0];
  807. if (dtOPCode.Rows.Count == 0)
  808. {
  809. throw new Exception("工序档案没有可用数据");
  810. }
  811. dtOPCode.TableName = "工序档案";
  812. ds.Tables.Add(dtOPCode.Copy());
  813. }
  814. #endregion
  815. return ds;
  816. }
  817. #endregion
  818. #endregion
  819. #region 移动窗体
  820. private const int WM_NCHITTEST = 0x84;
  821. private const int HTCLIENT = 0x1;
  822. private const int HTCAPTION = 0x2;
  823. //首先必须了解Windows的消息传递机制,当有鼠标活动消息时,
  824. //系统发送WM_NCHITTEST 消息给窗体作为判断消息发生地的根据。 nchittest
  825. //假如你点击的是标题栏,窗体收到的消息值就是 HTCAPTION ,
  826. //同样地,若接受到的消息是 HTCLIENT,说明用户点击的是客户区,也就是鼠标消息发生在客户区。
  827. //重写窗体,使窗体可以不通过自带标题栏实现移动
  828. protected override void WndProc(ref Message m)
  829. {
  830. //当重载窗体的 WndProc 方法时,可以截获 WM_NCHITTEST 消息并改些该消息,
  831. //当判断鼠标事件发生在客户区时,改写改消息,发送 HTCAPTION 给窗体,
  832. //这样,窗体收到的消息就时 HTCAPTION ,在客户区通过鼠标来拖动窗体就如同通过标题栏来拖动一样。
  833. //注意:当你重载 WndProc 并改写鼠标事件后,整个窗体的鼠标事件也就随之改变了。
  834. switch (m.Msg)
  835. {
  836. case WM_NCHITTEST:
  837. base.WndProc(ref m);
  838. if ((int)m.Result == HTCLIENT)
  839. m.Result = (IntPtr)HTCAPTION;
  840. return;
  841. }
  842. //拦截双击标题栏、移动窗体的系统消息
  843. if (m.Msg != 0xA3)
  844. {
  845. base.WndProc(ref m);
  846. }
  847. }
  848. #endregion
  849. #region erp工序工艺工时导入
  850. DataTable dtEQ = new DataTable();
  851. DataTable dtINV = new DataTable();
  852. private void btnImportAll_Click(object sender, EventArgs e)
  853. {
  854. //ICSBaseSimpleCode.AppshowMessageBox("erp数据未整理完成, 此功能当前不可用");
  855. //return;
  856. //C 25 40 12 0180A
  857. //类型,刀柄,轴,刀库,外形,精度
  858. string filename = "";
  859. using (OpenFileDialog ofd = new OpenFileDialog())
  860. {
  861. ofd.Filter = "Excel 97-2003(*.xls)|*.xls|Excel 2007(*.xlsx)|*.xlsx";
  862. if (ofd.ShowDialog() == DialogResult.OK)
  863. {
  864. filename = ofd.FileName.ToLower();
  865. if (!filename.EndsWith(".xls") && !filename.EndsWith(".xlsx"))
  866. {
  867. return;
  868. }
  869. }
  870. }
  871. IWorkbook workbook = null;
  872. DataTable dtMain = new DataTable();
  873. DataTable dtSub = new DataTable();
  874. DataTable dtBaseOP = new DataTable();
  875. DevExpress.Utils.WaitDialogForm _wait = new DevExpress.Utils.WaitDialogForm("正在获取Excel数据...");
  876. try
  877. {
  878. //start
  879. _wait.Show();
  880. FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read);
  881. if (filename.ToLower().EndsWith(".xls"))
  882. {
  883. workbook = new HSSFWorkbook(fs);
  884. }
  885. else
  886. {
  887. workbook = new XSSFWorkbook(fs);
  888. }
  889. //取第一个sheet页的数据
  890. ISheet sheet = workbook.GetSheetAt(0);
  891. int start = 1;
  892. //主表
  893. dtMain = GetDataFromSheet(sheet, ref start);
  894. // 子表
  895. dtSub = GetDataFromSheet(sheet, ref start);
  896. //资源释放
  897. workbook.Close();
  898. if (dtMain.Rows.Count == 0)
  899. {
  900. throw new Exception("主表格式错误,获取数据 0 行, 注意:表头不能为空");
  901. }
  902. if (dtSub.Rows.Count == 0)
  903. {
  904. throw new Exception("子表格式错误,获取数据 0 行, 注意:表头不能为空");
  905. }
  906. //获取基本数据
  907. _wait.SetCaption("获取基础数据...");
  908. //if (dtEQ.Rows.Count == 0)
  909. //{
  910. // dtEQ = GetEQ(AppConfig.AppConnectString, AppConfig.WorkPointCode);
  911. //}
  912. //if (dtINV.Rows.Count == 0)
  913. //{
  914. // dtINV = GetINV(AppConfig.AppConnectString, AppConfig.WorkPointCode);
  915. //}
  916. dtBaseOP = GetBaseOP(AppConfig.AppConnectString, AppConfig.WorkPointCode);
  917. dtEQ = GetFIXEQ(AppConfig.AppConnectString, AppConfig.WorkPointCode);
  918. dtINV = GetINV(AppConfig.AppConnectString, AppConfig.WorkPointCode);
  919. //检查数据并转为实体
  920. _wait.SetCaption("数据整理...");
  921. List<ITEM2ROUTE2OP2TIMEawt> list = InitData(dtMain, dtSub, dtINV, dtEQ, dtBaseOP);
  922. //上传
  923. _wait.SetCaption("数据上传...");
  924. ICSEQPSTPBLL.ImportFromErp(AppConfig.AppConnectString, list);
  925. //end
  926. _wait.Close();
  927. ICSBaseSimpleCode.AppshowMessageBox("导入成功!");
  928. }
  929. catch (Exception ex)
  930. {
  931. if (workbook != null)
  932. {
  933. workbook.Close();
  934. }
  935. _wait.Close();
  936. ICSBaseSimpleCode.AppshowMessageBox(ex.Message);
  937. }
  938. }
  939. /// <summary>
  940. /// 读取nc模板
  941. /// </summary>
  942. /// <param name="sheet">sheet</param>
  943. /// <param name="start">起始行</param>
  944. /// <returns>子表起始行</returns>
  945. private DataTable GetDataFromSheet(ISheet sheet, ref int start)
  946. {
  947. DataTable dt1 = new DataTable();
  948. //获取第start行数据
  949. IRow dt1firstRow = sheet.GetRow(start);
  950. //获取数据列的数量
  951. int columnCount = dt1firstRow.LastCellNum;
  952. for (int i = dt1firstRow.FirstCellNum; i < columnCount; i++)
  953. {
  954. //获取单元格
  955. ICell cell = dt1firstRow.GetCell(i);
  956. if (cell != null)
  957. {
  958. //将第start行数据作为表头
  959. string cellValue = cell.StringCellValue;
  960. if (i == dt1firstRow.FirstCellNum)
  961. {
  962. if (!cellValue.StartsWith("\"head_$head") && !cellValue.StartsWith("\"rtitems"))
  963. {
  964. throw new Exception("不是标准模板,禁止导入!");
  965. }
  966. dt1.Columns.Add("主序号");
  967. continue;
  968. }
  969. if (!string.IsNullOrEmpty(cellValue))
  970. {
  971. dt1.Columns.Add(cellValue.Trim('*').Trim());
  972. }
  973. }
  974. }
  975. //获取数据行的数量
  976. int rowCount = sheet.LastRowNum;
  977. int rowStart = start + 1;
  978. for (int i = rowStart; i <= rowCount; i++)
  979. {
  980. //获取行
  981. IRow row = sheet.GetRow(i);
  982. //主子表有空行间隔
  983. if (row == null)
  984. {
  985. //主表结束,返回子表起始行号
  986. start = i + 1;
  987. break;
  988. }
  989. DataRow dataRow = dt1.NewRow();
  990. for (int j = row.FirstCellNum; j < dt1.Columns.Count; j++)
  991. {
  992. if (row.GetCell(j) != null)
  993. {
  994. //这里减FirstCellNum可以去除空白列数据
  995. dataRow[j - row.FirstCellNum] = row.GetCell(j).ToString().Trim().ToUpper();
  996. }
  997. }
  998. dt1.Rows.Add(dataRow);
  999. }
  1000. if (start == 1)
  1001. {
  1002. throw new Exception("不是标准模板,禁止导入!");
  1003. }
  1004. return dt1;
  1005. }
  1006. private List<ITEM2ROUTE2OP2TIMEawt> InitData(DataTable dtMain, DataTable dtSub, DataTable dtINV, DataTable dtEQ, DataTable dtBaseOP)
  1007. {
  1008. DateTime timeNow = AppConfig.GetSeverDateTime("yyyy-MM-dd HH:mm:ss");
  1009. //DateTime timeNow = Convert.ToDateTime("1999-09-09 09:09:09");
  1010. string[] wpnames = AppConfig.WorkPointName.Split(new char[] { '(', ')', '(', ')' });
  1011. string wpname = wpnames[wpnames.Length - 1];
  1012. string ITEMID = "";
  1013. string ITEMCODE = "";
  1014. string ROUTECODE = "";
  1015. string defaultRoute = "";
  1016. string avaRoute = "";
  1017. string workPoint = "";
  1018. decimal ROUTEVER = 1.0m;
  1019. ////1.工艺路线
  1020. //List<ICSROUTE> list_route = new List<ICSROUTE>();
  1021. ////2.工序
  1022. //List<ICSOP> list_op = new List<ICSOP>();
  1023. ////3.工艺绑定工序
  1024. //List<ICSROUTE2OP> list_r2o = new List<ICSROUTE2OP>();
  1025. ////4.1物料绑定工艺
  1026. //List<ICSITEM2ROUTE> list_i2r = new List<ICSITEM2ROUTE>();
  1027. ////4.2 ICSITEMROUTE2OP
  1028. ////5.物料工艺工时
  1029. //List<ICSEQPSTP> list_stp = new List<ICSEQPSTP>();
  1030. string msgHead = "";
  1031. List<ITEM2ROUTE2OP2TIMEawt> list = new List<ITEM2ROUTE2OP2TIMEawt>();
  1032. foreach (DataRow drMain in dtMain.Rows)
  1033. {
  1034. string MgrRoute = drMain["工艺负责人"].ToString().Trim();
  1035. string = drMain["主序号"].ToString();//0
  1036. ITEMCODE = ROUTECODE = drMain["物料编码"].ToString();//R01NAGV46201,工艺路线默认物料+流水号,保存时获取流水号
  1037. string factoryName = drMain["工厂"].ToString();//上海阿为特精密机械股份有限公司
  1038. defaultRoute = drMain["默认"].ToString();//Y
  1039. avaRoute = drMain["版本类型"].ToString();//有效版本
  1040. string sROUTEVER = drMain["工艺路线版本"].ToString();
  1041. if (avaRoute != "有效版本" && defaultRoute != "Y")
  1042. {
  1043. continue;
  1044. }
  1045. if (!factoryName.Contains(wpname))
  1046. {
  1047. throw new Exception("工厂错误, 只能导入当前登录账套的信息:" + AppConfig.WorkPointName);
  1048. }
  1049. if (!decimal.TryParse(sROUTEVER, out ROUTEVER))
  1050. {
  1051. throw new Exception("工艺路线版本错误" + sROUTEVER);
  1052. }
  1053. if (string.IsNullOrEmpty(MgrRoute))
  1054. {
  1055. throw new Exception("工艺负责人不能为空" + ITEMCODE);
  1056. }
  1057. DataRow[] drINV = dtINV.Select("ITEMCODE='" + ITEMCODE + "'");
  1058. if (drINV.Length == 0)
  1059. {
  1060. throw new Exception("物料不存在:" + ITEMCODE);
  1061. }
  1062. ITEMID = drINV[0]["ITEMID"].ToString();
  1063. DataRow[] drSubNew = dtSub.Select("主序号='" + + "'");
  1064. if (drSubNew.Length == 0)
  1065. {
  1066. continue;
  1067. }
  1068. DataTable dtSubNew = drSubNew.CopyToDataTable();
  1069. DataTable dtNew = dtSub.Clone();
  1070. dtNew.Columns["Ahwit工序号"].DataType = typeof(int);
  1071. foreach (DataRow s in dtSubNew.Rows)
  1072. {
  1073. dtNew.ImportRow(s);
  1074. }
  1075. dtNew.DefaultView.Sort = "Ahwit工序号 ASC";
  1076. dtNew = dtNew.DefaultView.ToTable();
  1077. ITEM2ROUTE2OP2TIMEawt info = null;
  1078. bool existsInfo = false;
  1079. for (int i = 0; i < list.Count; i++)
  1080. {
  1081. if (list[i].ITEMCODE == ITEMCODE)
  1082. {
  1083. existsInfo = true;
  1084. info = list[i];
  1085. break;
  1086. }
  1087. }
  1088. if (!existsInfo)
  1089. {
  1090. info = new ITEM2ROUTE2OP2TIMEawt();
  1091. info.ITEMID = ITEMID;
  1092. info.ITEMCODE = ITEMCODE;
  1093. info.MTIME = timeNow;
  1094. info.USERID = AppConfig.UserId;
  1095. info.USERCODE = AppConfig.UserCode;
  1096. info.USERNAME = AppConfig.UserName;
  1097. info.WorkPoint = AppConfig.WorkPointCode;
  1098. info.listRoute = new List<ROUTEawt>();
  1099. list.Add(info);
  1100. }
  1101. ROUTEawt route = null;
  1102. bool existsRoute = false;
  1103. foreach (ROUTEawt item in info.listRoute)
  1104. {
  1105. if (item.ROUTECODE == ROUTECODE + "_" + ROUTEVER.ToString("f1"))
  1106. {
  1107. existsRoute = true;
  1108. route = item;
  1109. break;
  1110. }
  1111. }
  1112. if (!existsRoute)
  1113. {
  1114. route = new ROUTEawt();
  1115. route.ROUTEVER = ROUTEVER.ToString("f1");
  1116. route.ROUTECODE = ROUTECODE + "_" + route.ROUTEVER;//工艺编码:物料+工艺版本
  1117. route.MGR_USER = MgrRoute;
  1118. route.ROUTETYPE = "Normal";
  1119. route.ENABLED = "生效";
  1120. route.EFFDATE = Convert.ToDateTime("2000-01-01 00:00:00.000");
  1121. route.IVLDATE = Convert.ToDateTime("2099-12-31 23:59:00.000");
  1122. route.listOP = new List<OPTIMEawt>();
  1123. info.listRoute.Add(route);
  1124. }
  1125. foreach (DataRow dr in dtNew.Rows)
  1126. {
  1127. //
  1128. int OPSEQ = 0;
  1129. string OPCODE = "";
  1130. string EQPTypeCode = "";
  1131. string EQPID = "";
  1132. string EQPCODE = "";
  1133. string EQPNAME = "";
  1134. string cClass = "Z";
  1135. int cHandles = 0;
  1136. int cAxis = 0;
  1137. int cToolMagazine = 0;
  1138. int cMachinableProfiles = 0;
  1139. string cAccuracy = "Z";
  1140. decimal? WTIME = 3;
  1141. decimal RTIME = 0;
  1142. decimal STIME = 0;
  1143. decimal JYTIME = 0;
  1144. decimal ZJTIME = 0;
  1145. string OPLVL = "";
  1146. string OPMemo = "";
  1147. string OPAttr = "";
  1148. string CtrlType = "";
  1149. string CostCenter = "";
  1150. string OriOPCODE = dr["工序编码"].ToString();
  1151. string OriOPNAME = "";
  1152. string cxtype = "";
  1153. string cxjd = "";
  1154. string cxbrand1 = "";
  1155. string cxbrand2 = "";
  1156. string cxbrand3 = "";
  1157. if (OriOPCODE == "I01" || OriOPCODE == "W01" || OriOPCODE == "W02" || OriOPCODE == "")
  1158. {
  1159. continue;
  1160. }
  1161. var BaseOP = dtBaseOP.Select("OirOPCODE='" + OriOPCODE + "'");
  1162. if (BaseOP.Length == 0)
  1163. {
  1164. throw new Exception("没有找到基础工序" + OriOPCODE + "请先维护");
  1165. }
  1166. OriOPNAME = BaseOP[0]["OriOPNAME"].ToString().Trim();
  1167. if (string.IsNullOrEmpty(OriOPNAME))
  1168. {
  1169. throw new Exception("基础工序" + OriOPCODE + "名称是空");
  1170. }
  1171. //string sOPSEQ = dr["系统工序号"].ToString();//10,20,30等
  1172. string sOPSEQ = dr["Ahwit工序号"].ToString();
  1173. string EQ6 = dr["Ahwit机器需求"].ToString();//C2540120180A
  1174. OPMemo = dr["工艺描述"].ToString();
  1175. CostCenter = dr["工作中心编码"].ToString();
  1176. string sISWW = dr["委外工序"].ToString();//Y,N
  1177. string sRTIME = dr["调机(准备)时间"].ToString();
  1178. sRTIME = string.IsNullOrEmpty(sRTIME) ? "0" : sRTIME;
  1179. string sSTIME = dr["加工时间"].ToString();
  1180. sSTIME = string.IsNullOrEmpty(sSTIME) ? "0" : sSTIME;
  1181. string sJYTIME = dr["检验(等待)时间"].ToString();
  1182. sJYTIME = string.IsNullOrEmpty(sJYTIME) ? "0" : sJYTIME;
  1183. string sZJTIME = dr["装夹(拆卸)时间"].ToString();
  1184. sZJTIME = string.IsNullOrEmpty(sZJTIME) ? "0" : sZJTIME;
  1185. string sWTIME = "3";//默认3天
  1186. OPLVL = dr["Ahwit难易程度"].ToString();
  1187. //阿威特生效时效绑定到了工序上,与程序框架不符,忽略此项. 默认工艺路线生效时效为2000-2999
  1188. //string s = dr["生效日期"].ToString();
  1189. //string e = dr["失效日期"].ToString();
  1190. msgHead = "主序号" + + ",物料编码" + ITEMCODE + ",Ahwit工序号" + sOPSEQ + ",工序编码" + OriOPCODE;
  1191. try
  1192. {
  1193. bool opsucc = Int32.TryParse(sOPSEQ, out OPSEQ);
  1194. if (!opsucc || OPSEQ < 0)
  1195. {
  1196. throw new Exception("[Ahwit工序号] 必须是正整数");
  1197. }
  1198. if (sISWW == "Y")
  1199. {
  1200. OPAttr = "委外";
  1201. CtrlType = "串行";
  1202. sWTIME = sSTIME;
  1203. OPLVL = null;
  1204. EQPTypeCode = "委外";
  1205. if (sWTIME == "" || sWTIME == "0")
  1206. {
  1207. throw new Exception("委外工序时,委外工时必须填写");
  1208. }
  1209. WTIME = Convert.ToDecimal(sWTIME);
  1210. if (WTIME <= 0)
  1211. {
  1212. throw new Exception("委外工时必须大于 0");
  1213. }
  1214. }
  1215. else
  1216. {
  1217. OPAttr = "自制";
  1218. CtrlType = "并行";
  1219. if (OPLVL == "高级")
  1220. {
  1221. OPLVL = "A";
  1222. }
  1223. else if (OPLVL == "中级")
  1224. {
  1225. OPLVL = "B";
  1226. }
  1227. else
  1228. {
  1229. OPLVL = "C";
  1230. }
  1231. //工时判断
  1232. RTIME = Convert.ToDecimal(sRTIME);
  1233. STIME = Convert.ToDecimal(sSTIME);
  1234. JYTIME = Convert.ToDecimal(sJYTIME);
  1235. ZJTIME = Convert.ToDecimal(sZJTIME);
  1236. if (RTIME < 0 || STIME < 0 || JYTIME < 0 || ZJTIME < 0)
  1237. {
  1238. throw new Exception("非委外工序工时必须>=0");
  1239. }
  1240. WTIME = 3;
  1241. //6大维度
  1242. //if (string.IsNullOrEmpty(EQ6))
  1243. //{
  1244. // throw new Exception("非委外工序必须维护 [Ahwit机器需求]");
  1245. //}
  1246. if (EQ6.Length == 12)
  1247. {
  1248. //6 截取规则:类型1刀柄2轴数1刀具3外形4精度1
  1249. EQPTypeCode = "加工中心";
  1250. cClass = EQ6.Substring(0, 1);
  1251. string scHandles = EQ6.Substring(1, 2);
  1252. string scAxis = EQ6.Substring(3, 1);
  1253. string scToolMagazine = EQ6.Substring(4, 3);
  1254. string scMachinableProfiles = EQ6.Substring(7, 4);
  1255. cAccuracy = EQ6.Substring(11, 1);
  1256. if (string.IsNullOrEmpty(cClass))
  1257. {
  1258. throw new Exception("类别不能为空!");
  1259. }
  1260. if (string.IsNullOrEmpty(scHandles))
  1261. {
  1262. throw new Exception("刀柄不能为空!");
  1263. }
  1264. if (string.IsNullOrEmpty(scAxis))
  1265. {
  1266. throw new Exception("轴数不能为空!");
  1267. }
  1268. if (string.IsNullOrEmpty(scToolMagazine))
  1269. {
  1270. throw new Exception("刀库不能为空!");
  1271. }
  1272. if (string.IsNullOrEmpty(scMachinableProfiles))
  1273. {
  1274. throw new Exception("可加工外形不能为空!");
  1275. }
  1276. if (string.IsNullOrEmpty(cAccuracy))
  1277. {
  1278. throw new Exception("精度不能为空!");
  1279. }
  1280. try
  1281. {
  1282. cHandles = Convert.ToInt32(scHandles);
  1283. cAxis = Convert.ToInt32(scAxis);
  1284. cToolMagazine = Convert.ToInt32(scToolMagazine);
  1285. cMachinableProfiles = Convert.ToInt32(scMachinableProfiles);
  1286. }
  1287. catch (Exception)
  1288. {
  1289. throw new Exception("刀柄,轴数,刀库,可加工外形只能由数字组成: " + scHandles + "," + scAxis + "," + scToolMagazine + "," + scMachinableProfiles);
  1290. }
  1291. }
  1292. else if (EQ6.Length == 8) {
  1293. //设备
  1294. EQPTypeCode = "车削中心";
  1295. cxtype= EQ6.Substring(0, 1);
  1296. cxbrand1= EQ6.Substring(2, 2);
  1297. cxbrand2 = EQ6.Substring(4, 2);
  1298. cxbrand3 = EQ6.Substring(6, 2);
  1299. cxjd = EQ6.Substring(8, 1);
  1300. if (string.IsNullOrEmpty(cxtype)) {
  1301. throw new Exception("车削类别不能为空!");
  1302. }
  1303. if (string.IsNullOrEmpty(cxjd))
  1304. {
  1305. throw new Exception("车削精度不能为空!");
  1306. }
  1307. if (string.IsNullOrEmpty(cxbrand1)&& string.IsNullOrEmpty(cxbrand2)&& string.IsNullOrEmpty(cxbrand3))
  1308. {
  1309. throw new Exception("请至少维护一个车床品牌!");
  1310. }
  1311. }
  1312. else if (EQ6.Length == 0)
  1313. {
  1314. //设备
  1315. EQPTypeCode = "固定设备";
  1316. var drEQ1 = dtEQ.AsEnumerable().Where(a => ("," + a.Field<string>("FIXOP").Trim().Trim(',') + ",").Contains("," + OriOPCODE + ","));
  1317. //var drEQ1 = dtEQ.Select("FIXOP like '%" + OriOPCODE + "%'");
  1318. var cErpEQ = drEQ1.AsDataView().Count;
  1319. if (cErpEQ == 0)
  1320. {
  1321. throw new Exception("erp工序:" + OriOPCODE + "没有对应的固定设备");
  1322. }
  1323. if (cErpEQ > 1)
  1324. {
  1325. throw new Exception("erp工序:" + OriOPCODE + "对应多个固定设备");
  1326. }
  1327. var drEQ = drEQ1.CopyToDataTable();
  1328. EQPID = drEQ.Rows[0]["EQPID"].ToString().Trim();
  1329. EQPCODE = drEQ.Rows[0]["EQPCODE"].ToString().Trim();
  1330. EQPNAME = drEQ.Rows[0]["EQPNAME"].ToString().Trim();
  1331. }
  1332. else
  1333. {
  1334. throw new Exception("[Ahwit机器需求] : " + EQ6 + ",只能是12位(六大维度)或空(固定设备)或8位(车削中心) .当前位数:" + EQ6.Length.ToString());
  1335. }
  1336. }
  1337. }
  1338. catch (Exception ex)
  1339. {
  1340. throw new Exception(msgHead + "\r\n" + ex.Message);
  1341. }
  1342. OPTIMEawt op = new OPTIMEawt();
  1343. op.ID = AppConfig.GetGuid();
  1344. op.OPSEQ = OPSEQ;
  1345. op.OriOPCODE = OriOPCODE;
  1346. int flow = 1;
  1347. foreach (OPTIMEawt item in route.listOP)
  1348. {
  1349. if (item.OriOPCODE == op.OriOPCODE)
  1350. {
  1351. // OPCODE=OriOPCODE+本工序出现次数
  1352. flow++;
  1353. }
  1354. }
  1355. op.OPCODE = op.OriOPCODE + flow.ToString().PadLeft(2, '0');
  1356. op.OPNAME = op.OPDESC = OriOPNAME + flow.ToString().PadLeft(2, '0');
  1357. op.OPCOLLECTION = "人工收集";
  1358. op.OPCONTROL = "10000000000000";
  1359. op.CostCenter = CostCenter;//阿威特没有用到加工中心
  1360. op.OpFrom = "NC";
  1361. op.EnableFlag = true;
  1362. op.OPLVL = OPLVL;
  1363. op.OPAttr = OPAttr;
  1364. op.CtrlType = CtrlType;
  1365. //--//
  1366. op. = "是";
  1367. op.WTIME = WTIME;
  1368. op.RTIME = RTIME;
  1369. op.STIME = STIME;
  1370. op.ZJTime = ZJTIME;
  1371. op.JYTime = JYTIME;
  1372. op.Type = EQPTypeCode;
  1373. op.Status = "New";
  1374. op.cClass = cClass;
  1375. op.cHandles = cHandles;
  1376. op.cAxis = cAxis;
  1377. op.cToolMagazine = cToolMagazine;
  1378. op.cMachinableProfiles = cMachinableProfiles;
  1379. op.cAccuracy = cAccuracy;
  1380. op.Memo = OPMemo;
  1381. op.EQPCODE = EQPCODE;
  1382. op.CXBrand1 = cxbrand1;
  1383. op.CXBrand2 = cxbrand2;
  1384. op.CXBrand3 = cxbrand3;
  1385. op.CXJD = cxjd;
  1386. op.CXTYPE = cxtype;
  1387. route.listOP.Add(op);
  1388. #region 旧实体
  1389. // ICSOP INFO_OP = new ICSOP();
  1390. //INFO_OP.ID = AppConfig.GetGuid();
  1391. //INFO_OP.OPCODE = OPCODE;
  1392. //INFO_OP.OPDESC = INFO_OP.OPNAME = OPCODE;//NAME同CODE
  1393. //INFO_OP.OPCOLLECTION = "人工收集";
  1394. //INFO_OP.OPCONTROL = "10000000000000";
  1395. //INFO_OP.CostCenter = CostCenter;
  1396. //INFO_OP.OpFrom = "NC";
  1397. //INFO_OP.EnableFlag = true;
  1398. //INFO_OP.MTIME = timeNow;
  1399. //INFO_OP.EATTRIBUTE1 = OPAttr == "自制" ? "0" : "1";
  1400. //INFO_OP.MUSER = AppConfig.UserId;
  1401. //INFO_OP.MUSERName = AppConfig.UserName;
  1402. //INFO_OP.WorkPoint = AppConfig.WorkPointCode;
  1403. //ICSROUTE INFO_ROUTE = new ICSROUTE();
  1404. //INFO_ROUTE.ID = AppConfig.GetGuid();
  1405. //INFO_ROUTE.ROUTECODE = ROUTECODE;//动态
  1406. //INFO_ROUTE.ROUTEDESC = ROUTECODE;
  1407. //INFO_ROUTE.ROUTETYPE = "Normal";
  1408. //INFO_ROUTE.ENABLED = "生效";
  1409. //INFO_ROUTE.EFFDATE = Convert.ToDateTime("2000-01-01 00:00:00.000");
  1410. //INFO_ROUTE.IVLDATE = Convert.ToDateTime("2099-12-31 23:59:00.000");
  1411. //INFO_ROUTE.EATTRIBUTE1 = null;
  1412. //INFO_ROUTE.MTIME = timeNow;
  1413. //INFO_ROUTE.MUSER = AppConfig.UserId;
  1414. //INFO_ROUTE.MUSERName = AppConfig.UserName;
  1415. //INFO_ROUTE.WorkPoint = AppConfig.WorkPointCode;
  1416. //ICSROUTE2OP INFO_R2OP = new ICSROUTE2OP();
  1417. //INFO_R2OP.ID = AppConfig.GetGuid();
  1418. //INFO_R2OP.ROUTEID = null;//保存后获取
  1419. //INFO_R2OP.OPID = null;//保存后获取
  1420. //INFO_R2OP.ROUTECODE = ROUTECODE;//动态
  1421. //INFO_R2OP.OPCODE = OPCODE;
  1422. //INFO_R2OP.OPSEQ = OPSEQ;
  1423. //INFO_R2OP.OPCONTROL = "10000000000000";
  1424. //INFO_R2OP.OPAttr = OPAttr;
  1425. //INFO_R2OP.CtrlType = CtrlType;
  1426. //INFO_R2OP.MUSER = AppConfig.UserCode;
  1427. //INFO_R2OP.MUSERName = AppConfig.UserName;
  1428. //INFO_R2OP.MTIME = DateTime.Now;
  1429. //INFO_R2OP.WORKPOINT = AppConfig.WorkPointCode;
  1430. //ICSEQPSTP INFO_EQPSTP = new ICSEQPSTP();
  1431. //INFO_EQPSTP.ID = AppConfig.GetGuid();
  1432. //INFO_EQPSTP.ITEMCODE = ITEMCODE;
  1433. //INFO_EQPSTP.OPCODE = OPCODE;
  1434. //INFO_EQPSTP.EQPCODE = EQPCODE;
  1435. //INFO_EQPSTP.ETTRCODE = "";
  1436. //INFO_EQPSTP.ISREF = "是";
  1437. //INFO_EQPSTP.Status = "New";
  1438. //INFO_EQPSTP.JiaGongTime = INFO_EQPSTP.STIME = STIME;
  1439. //INFO_EQPSTP.TiaoJiTime = INFO_EQPSTP.RTIME = RTIME;
  1440. //INFO_EQPSTP.JiaZhuangTime = ZJTIME;
  1441. //INFO_EQPSTP.JianYanTime = JYTIME;
  1442. //INFO_EQPSTP.EQPTypeCode = EQPTypeCode;//此处不在存设备类型,设备类型是6大维度决定
  1443. //INFO_EQPSTP.cClass = cClass;
  1444. //INFO_EQPSTP.cHandles = cHandles;
  1445. //INFO_EQPSTP.cAxis = cAxis;
  1446. //INFO_EQPSTP.cToolMagazine = cToolMagazine;
  1447. //INFO_EQPSTP.cMachinableProfiles = cMachinableProfiles;
  1448. //INFO_EQPSTP.cAccuracy = cAccuracy;
  1449. //INFO_EQPSTP.OPLVL = OPLVL;
  1450. //INFO_EQPSTP.WTIME = WTIME;
  1451. //INFO_EQPSTP.EATTRIBUTE1 = ROUTECODE;
  1452. //INFO_EQPSTP.ToolingNo = OPMemo;
  1453. //INFO_EQPSTP.MUSER = AppConfig.UserCode;
  1454. //INFO_EQPSTP.MUSERName = AppConfig.UserName;
  1455. //INFO_EQPSTP.MTIME = DateTime.Now;
  1456. //INFO_EQPSTP.WorkPoint = AppConfig.WorkPointCode;
  1457. //list_stp.Add(INFO_EQPSTP);
  1458. #endregion
  1459. }
  1460. }
  1461. return list;
  1462. }
  1463. private DataTable GetFIXEQ(string conn, string wp)
  1464. {
  1465. return ICSEQPSTPBLL.GetFIXEQ(conn, wp);
  1466. }
  1467. private DataTable GetINV(string conn, string wp)
  1468. {
  1469. return ICSEQPSTPBLL.GetINV(conn, wp);
  1470. }
  1471. private DataTable GetBaseOP(string conn, string wp)
  1472. {
  1473. return ICSEQPSTPBLL.GetBaseOP(conn, wp);
  1474. }
  1475. #endregion
  1476. }
  1477. }