BaseWorkflow.cs 49 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120
  1. using SqlSugar;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Data;
  5. using System.Linq;
  6. using System.Text;
  7. using WCS_Client.Models;
  8. using WCS_Client.Utility;
  9. using WCS_Client.Workflow;
  10. using WCS_TASK = WCS_Client.Models.WCS_TASK;
  11. namespace WCS_Client
  12. {
  13. public class BaseWorkflow
  14. {
  15. public static bool Login(string use_No, string use_Pwd, out string errMsg)
  16. {
  17. bool result = false;
  18. errMsg = string.Empty;
  19. string errorMsg = string.Empty;
  20. try
  21. {
  22. TryCachHelper.TryExecute((db) =>
  23. {
  24. var user = db.Queryable<WCS_Users>().First(v => v.USER_NO == use_No);
  25. if (user == null)
  26. {
  27. errorMsg = LangConst.UserNotExists;
  28. }
  29. else
  30. {
  31. if (user.USER_PWD == Md5Helper.Md5Hash(use_Pwd))
  32. {
  33. string user_textStr = BinaryHelper.ByteArray2BinaryStr(user.USER_TEXT);
  34. string jiemastr = BinaryHelper.jiema(user_textStr);
  35. WCS_Users userinfo = jiemastr.ToObject<WCS_Users>();
  36. userinfo.Use_LoginTime = DateTime.Now;
  37. string userjson = userinfo.ToJson();
  38. user.USER_TEXT = BinaryHelper.BinaryStr2ByteArray(BinaryHelper.bianma(userjson));
  39. if (db.Updateable(user).UpdateColumns(it => it.USER_TEXT).ExecuteCommand() > 0)
  40. {
  41. user.GetUserInfo(userinfo);
  42. CurrentHelper.User = user;
  43. result = true;
  44. }
  45. else
  46. {
  47. errorMsg = LangConst.UpdateError;
  48. }
  49. }
  50. else
  51. {
  52. errorMsg = LangConst.PasswordError;
  53. }
  54. }
  55. });
  56. //using (MAction action = new MAction(TableEnum.WCS_Users))
  57. //{
  58. // MDataTable mdt = action.Select();
  59. // var users = mdt.ToList<WCS_Users>();
  60. // var user = users.FirstOrDefault(v => v.USER_NO == use_No);
  61. // if (user == null)
  62. // {
  63. // errMsg = LangConst.UserNotExists;
  64. // }
  65. // else
  66. // {
  67. // if (user.USER_PWD == Md5Helper.Md5Hash(use_Pwd))
  68. // {
  69. // string user_textStr = BinaryHelper.ByteArray2BinaryStr(user.USER_TEXT);
  70. // string jiemastr = BinaryHelper.jiema(user_textStr);
  71. // WCS_Users userinfo = jiemastr.ToObject<WCS_Users>();
  72. // userinfo.Use_LoginTime = DateTime.Now;
  73. // string userjson = userinfo.ToJson();
  74. // user.USER_TEXT = BinaryHelper.BinaryStr2ByteArray(BinaryHelper.bianma(userjson));
  75. // action.Set("USER_TEXT", user.USER_TEXT);
  76. // string where = string.Format("USER_NO = '{0}'", user.USER_NO);
  77. // if (action.Update(where, false))
  78. // {
  79. // user.GetUserInfo(userinfo);
  80. // CurrentHelper.User = user;
  81. // //CurrentHelper.User.UserInfoItem = BinaryHelper.jiema(CurrentHelper.User.User_Text).ToObject<UserInfo>();
  82. // result = true;
  83. // }
  84. // else
  85. // {
  86. // errMsg = LangConst.UpdateError;
  87. // }
  88. // }
  89. // else
  90. // {
  91. // errMsg = LangConst.PasswordError;
  92. // }
  93. // }
  94. //}
  95. }
  96. catch (Exception ex)
  97. {
  98. LogHelper.Sys_Log.WriteLog(ex.ToString());
  99. throw new Exception(LangConst.SysError);
  100. }
  101. return result;
  102. }
  103. public static PageData QueryDatatble(DataTable dt, int PageIndex, int PageSize)
  104. {
  105. if (PageSize <= 0) PageSize = 2000;
  106. int startRecord = (PageIndex - 1) * PageSize + 1;
  107. int endRecord = startRecord + PageSize - 1;
  108. try
  109. {
  110. int count = dt.Rows.Count;
  111. int PageCount = count / PageSize;
  112. if (count % PageSize > 0)
  113. PageCount += 1;
  114. if (dt != null && dt.Rows.Count > 0)
  115. {
  116. PageData PageDataItem = new PageData();
  117. PageDataItem.PageIndex = PageIndex;
  118. PageDataItem.PageSize = PageSize;
  119. PageDataItem.PageCount = PageCount;
  120. PageDataItem.RowsCount = count;
  121. dt.TableName = "table";
  122. PageDataItem.Dt = dt;
  123. return PageDataItem;
  124. }
  125. }
  126. catch (Exception ex)
  127. {
  128. }
  129. return null;
  130. }
  131. public static PageData QueryPageData(string _SQLText, string orderText, List<string> WhereStringList, int PageIndex, int PageSize)
  132. {
  133. var sb = new StringBuilder();
  134. sb.Append(_SQLText);
  135. if (WhereStringList != null && WhereStringList.Count > 0)
  136. {
  137. foreach (var item in WhereStringList)
  138. {
  139. sb.Append(" and ");
  140. sb.Append(item);
  141. }
  142. }
  143. return QueryPageSql(sb.ToString(), orderText, PageIndex, PageSize);
  144. }
  145. private static PageData QueryPageSql(string SQLText, string OrderText, int PageIndex, int PageSize)
  146. {
  147. if (PageSize <= 0) PageSize = 2000;
  148. int startRecord = (PageIndex - 1) * PageSize + 1;
  149. int endRecord = startRecord + PageSize - 1;
  150. string sql = string.Format("select * from (select ROW_NUMBER() Over (Order By {0}) as RN,a.* from ({1}) a) b where b.RN between {2} and {3}", OrderText, SQLText, startRecord, endRecord);
  151. string CountStr = string.Format("Select Count(1) From ({0}) t", SQLText);
  152. try
  153. {
  154. DataTable dt = null;
  155. int count = 0;
  156. TryCachHelper.TryExecute((db) =>
  157. {
  158. dt = db.Ado.GetDataTable(sql);
  159. if (sql.Contains("dbo.WCS_TASK")) TaskWorkflow.DataTableAddColumn(dt, db);
  160. //else if (sql.Contains("[dbo].[WCS_EXCEPTION]")) ExceptionLogWorkflow.DataTableAddColumn(dt, db);
  161. count = Convert.ToInt32(db.Ado.GetScalar(CountStr));
  162. });
  163. int PageCount = count / PageSize;
  164. if (count % PageSize > 0)
  165. PageCount += 1;
  166. if (dt != null && dt.Rows.Count > 0)
  167. {
  168. PageData PageDataItem = new PageData();
  169. PageDataItem.PageIndex = PageIndex;
  170. PageDataItem.PageSize = PageSize;
  171. PageDataItem.PageCount = PageCount;
  172. PageDataItem.RowsCount = count;
  173. dt.TableName = "table";
  174. PageDataItem.Dt = dt;
  175. return PageDataItem;
  176. }
  177. }
  178. catch (Exception ex)
  179. {
  180. }
  181. return null;
  182. }
  183. public static PageData QueryPageData2(string _SQLText, string orderText, List<string> WhereStringList, int PageIndex, int PageSize)
  184. {
  185. var sb = new StringBuilder();
  186. sb.Append(_SQLText);
  187. if (WhereStringList != null && WhereStringList.Count > 0)
  188. {
  189. sb.Append(" and ");
  190. sb.Append(WhereStringList[0]);
  191. }
  192. return QueryPageSql2(sb.ToString(), orderText, PageIndex, PageSize);
  193. }
  194. private static PageData QueryPageSql2(string SQLText, string OrderText, int PageIndex, int PageSize)
  195. {
  196. if (PageSize <= 0) PageSize = 2000;
  197. int startRecord = (PageIndex - 1) * PageSize + 1;
  198. int endRecord = startRecord + PageSize - 1;
  199. string sql = string.Format("select * from (select ROW_NUMBER() Over (Order By {0}) as RN,a.* from ({1}) a) b where b.RN between {2} and {3}", OrderText, SQLText, startRecord, endRecord);
  200. string CountStr = string.Format("Select Count(1) From ({0}) t", SQLText);
  201. try
  202. {
  203. DataTable dt = null;
  204. int count = 0;
  205. TryCachHelper.TryExecute((db) =>
  206. {
  207. List<WCS_Users> usersList = db.SqlQueryable<WCS_Users>(sql).ToList();
  208. foreach (var item in usersList)
  209. {
  210. string binaryStr = BinaryHelper.ByteArray2BinaryStr(item.USER_TEXT);
  211. string jsonstr = BinaryHelper.jiema(binaryStr);
  212. var user = jsonstr.ToObject<WCS_Users>();
  213. item.GetUserInfo(user);
  214. }
  215. dt = DatatableConvertHelper.ToDataTable(usersList);
  216. count = Convert.ToInt32(db.Ado.GetScalar(CountStr));
  217. });
  218. int PageCount = count / PageSize;
  219. if (count % PageSize > 0)
  220. PageCount += 1;
  221. if (dt != null && dt.Rows.Count > 0)
  222. {
  223. PageData PageDataItem = new PageData();
  224. PageDataItem.PageIndex = PageIndex;
  225. PageDataItem.PageSize = PageSize;
  226. PageDataItem.PageCount = PageCount;
  227. PageDataItem.RowsCount = count;
  228. dt.TableName = "table";
  229. PageDataItem.Dt = dt;
  230. return PageDataItem;
  231. }
  232. }
  233. catch (Exception ex)
  234. {
  235. }
  236. return null;
  237. }
  238. public static DataTable CommonQueryUser(string sql)
  239. {
  240. DataTable dt = null;
  241. try
  242. {
  243. TryCachHelper.TryExecute((db) =>
  244. {
  245. List<WCS_Users> usersList = db.SqlQueryable<WCS_Users>(sql).ToList();
  246. foreach (var item in usersList)
  247. {
  248. var binaryStr = BinaryHelper.ByteArray2BinaryStr(item.USER_TEXT);
  249. string jsonstr = BinaryHelper.jiema(binaryStr);
  250. var user = jsonstr.ToObject<WCS_Users>();
  251. item.GetUserInfo(user);
  252. }
  253. dt = DatatableConvertHelper.ToDataTable(usersList);
  254. });
  255. }
  256. catch (Exception ex)
  257. {
  258. LogHelper.Sys_Log.WriteLog(ex.ToString());
  259. }
  260. return dt;
  261. }
  262. public static DataTable CommonQuery(string sql)
  263. {
  264. DataTable dt = null;
  265. TryCachHelper.TryExecute((db) =>
  266. {
  267. dt = db.Ado.GetDataTable(sql);
  268. });
  269. return dt;
  270. }
  271. public static string AddEditUser(WCS_Users user)
  272. {
  273. string result = string.Empty;
  274. try
  275. {
  276. if (user.USER_NO == LangConst.DefaultUser)
  277. {
  278. result = LangConst.DefaultUserError;
  279. }
  280. else
  281. {
  282. var json = user.ToJson();
  283. string binarystr = BinaryHelper.bianma(json);
  284. user.USER_TEXT = BinaryHelper.BinaryStr2ByteArray(binarystr);
  285. TryCachHelper.TryExecute((db) =>
  286. {
  287. var wcs_user = db.Queryable<WCS_Users>().First(v => v.USER_NO == user.USER_NO);
  288. if (wcs_user == null)
  289. {
  290. //默认密码
  291. user.USER_PWD = Md5Helper.Md5Hash(LangConst.DefaultPwd);
  292. db.Insertable(user).ExecuteCommand();
  293. }
  294. else
  295. {
  296. wcs_user.USER_TEXT = user.USER_TEXT;
  297. db.Updateable(wcs_user).UpdateColumns(it => it.USER_TEXT).ExecuteCommand();
  298. }
  299. });
  300. //using (MAction action = new MAction(TableEnum.WCS_Users))
  301. //{
  302. // if (action.Exists(user.USER_NO))
  303. // {
  304. // action.Set(WCS_UsersEnum.User_Text, user.USER_TEXT);
  305. // string where = string.Format("USER_NO = '{0}'", user.USER_NO);
  306. // action.Update(where, false);
  307. // }
  308. // else
  309. // {
  310. // //默认密码
  311. // user.USER_PWD = Md5Helper.Md5Hash(LangConst.DefaultPwd);
  312. // action.Set(WCS_UsersEnum.User_No, user.USER_NO);
  313. // action.Set(WCS_UsersEnum.User_Pwd, user.USER_PWD);
  314. // action.Set(WCS_UsersEnum.User_Text, user.USER_TEXT);
  315. // //插入信息
  316. // bool insertresult = action.Insert(InsertOp.None);
  317. // }
  318. //}
  319. }
  320. }
  321. catch (Exception ex)
  322. {
  323. LogHelper.Sys_Log.WriteLog(ex.ToString());
  324. result = string.Format("{0}或{1}", LangConst.AddError, LangConst.UpdateError);
  325. }
  326. return result;
  327. }
  328. public static string DeleteUser(string user_no)
  329. {
  330. string result = string.Empty;
  331. try
  332. {
  333. if (user_no == LangConst.DefaultUser)
  334. {
  335. result = LangConst.DefaultUserError;
  336. }
  337. else
  338. {
  339. TryCachHelper.TryExecute((db) =>
  340. {
  341. db.Deleteable<WCS_Users>().Where(v => v.USER_NO == user_no).ExecuteCommand();
  342. });
  343. }
  344. }
  345. catch (Exception ex)
  346. {
  347. LogHelper.Sys_Log.WriteLog(ex.ToString());
  348. result = LangConst.DeleteError;
  349. }
  350. return result;
  351. }
  352. public static string AdminModifyPwd(string user_no, string user_pwd)
  353. {
  354. string result = string.Empty;
  355. try
  356. {
  357. TryCachHelper.TryExecute((db) =>
  358. {
  359. var user = db.Queryable<WCS_Users>().First(v => v.USER_NO == user_no);
  360. if (user == null)
  361. {
  362. result = LangConst.UserNotExists;
  363. }
  364. else
  365. {
  366. var binaryStr = BinaryHelper.ByteArray2BinaryStr(user.USER_TEXT);
  367. var useritem = BinaryHelper.jiema(binaryStr).ToObject<WCS_Users>();
  368. useritem.Use_EditUserNo = CurrentHelper.User.USER_NO;
  369. useritem.Use_EditDateTime = DateTime.Now;
  370. var binStr = BinaryHelper.bianma(useritem.ToJson());
  371. user.USER_TEXT = BinaryHelper.BinaryStr2ByteArray(binStr);
  372. user.USER_PWD = Md5Helper.Md5Hash(user_pwd);
  373. db.Updateable(user).UpdateColumns(it => new { it.USER_TEXT, it.USER_PWD }).ExecuteCommand();
  374. }
  375. });
  376. //using (MAction action = new MAction(TableEnum.WCS_Users))
  377. //{
  378. // if (action.Exists(user_no))
  379. // {
  380. // MDataTable mdt = action.Select(user_no);
  381. // var user = mdt.ToList<WCS_Users>()[0];
  382. // var binaryStr = BinaryHelper.ByteArray2BinaryStr(user.USER_TEXT);
  383. // var useritem = BinaryHelper.jiema(binaryStr).ToObject<WCS_Users>();
  384. // useritem.Use_EditUserNo = CurrentHelper.User.USER_NO;
  385. // useritem.Use_EditDateTime = DateTime.Now;
  386. // // useritem.User_Pwd = Md5Helper.Md5Hash(user_pwd);
  387. // var binStr = BinaryHelper.bianma(useritem.ToJson());
  388. // user.USER_TEXT = BinaryHelper.BinaryStr2ByteArray(binStr);
  389. // action.Set(WCS_UsersEnum.User_Pwd, Md5Helper.Md5Hash(user_pwd));
  390. // action.Set(WCS_UsersEnum.User_Text, user.USER_TEXT);
  391. // string where = string.Format("User_No = '{0}'", user.USER_NO);
  392. // action.Update(where, false);
  393. // }
  394. // else
  395. // {
  396. // result = LangConst.UserNotExists;
  397. // }
  398. //}
  399. }
  400. catch (Exception ex)
  401. {
  402. LogHelper.Sys_Log.WriteLog(ex.ToString());
  403. result = LangConst.UpdateError;
  404. }
  405. return result;
  406. }
  407. public static DataTable QuerySex()
  408. {
  409. return CommonQuery(string.Format("SELECT * FROM WCS_Mappingentry where Mep_MappingType='Sex'"));
  410. }
  411. public static DataTable QueryUse_Role()
  412. {
  413. return CommonQuery(string.Format("SELECT * FROM WCS_Mappingentry where Mep_MappingType='RoleId'"));
  414. }
  415. public static DataTable QueryTaskType()
  416. {
  417. return CommonQuery(string.Format("SELECT * FROM WCS_Mappingentry where Mep_MappingType='COMTYPE'"));
  418. }
  419. public static void AddWCS_TASK_DTL(SqlSugarClient db, int task_id, int task_no, string posIdCur, string posIdNext, string msg)
  420. {
  421. var task_dtl = new WCS_TASK_DTL();
  422. task_dtl.ID = Guid.NewGuid().ToString();
  423. task_dtl.PARENTID = task_id;
  424. task_dtl.TASKNO = task_no.ToString();
  425. task_dtl.POSIDCUR = posIdCur;
  426. task_dtl.POSIDNEXT = posIdNext;
  427. task_dtl.DESCRIPTION = msg;
  428. task_dtl.EXECUTEDATE = DateTime.Now;
  429. db.Insertable(task_dtl).ExecuteCommand();
  430. }
  431. public static string UpdateTask(int taskid, TaskStatusType taskStatusType)
  432. {
  433. string result = string.Empty;
  434. try
  435. {
  436. TryCachHelper.TryExecute((db) =>
  437. {
  438. var task = db.Queryable<WCS_TASK>().First(v => v.TASK_NO == taskid);
  439. if (taskStatusType == TaskStatusType.重下堆垛机)
  440. {
  441. if (task.TASK_WKSTATUS == (int)WkStatus.堆垛机执行)
  442. {
  443. if (task.TASK_COMTYPE == 2 || task.TASK_COMTYPE == 3)//出库,移库
  444. {
  445. task.TASK_WKSTATUS = 0;
  446. task.TASK_POSIDNEXT = task.TASK_POSIDFROM;
  447. }
  448. else if (task.TASK_COMTYPE == 1)//入库
  449. {
  450. task.TASK_WKSTATUS = 2;
  451. }
  452. task.TASK_EDITUSERNO = CurrentHelper.User.USER_NO;
  453. task.TASK_EDITDATETIME = DateTime.Now;
  454. db.Updateable(task).UpdateColumns(it => new { it.TASK_WKSTATUS, it.TASK_POSIDNEXT, it.TASK_EDITUSERNO, it.TASK_EDITDATETIME }).ExecuteCommand();
  455. result = string.Format("任务[{0}]重下堆垛机成功。", task.TASK_NO);
  456. AddWCS_TASK_DTL(db, task.TASK_NO, task.TASK_NO, task.TASK_POSIDCUR, task.TASK_POSIDNEXT, result + "操作用户:" + CurrentHelper.User.USER_NO);
  457. }
  458. else
  459. {
  460. result = string.Format("任务[{0}]不需要重下堆垛机。", task.TASK_NO);
  461. }
  462. }
  463. else if (taskStatusType == TaskStatusType.重下输送机)
  464. {
  465. if (task.TASK_WKSTATUS != (int)WkStatus.堆垛机执行)
  466. {
  467. if (task.TASK_COMTYPE == 1 || task.TASK_COMTYPE == 4)//入库,移动
  468. {
  469. task.TASK_WKSTATUS = 0;
  470. task.TASK_POSIDNEXT = task.TASK_POSIDFROM;
  471. task.TASK_POSIDCUR = task.TASK_POSIDFROM;
  472. task.TASK_EDITUSERNO = CurrentHelper.User.USER_NO;
  473. task.TASK_EDITDATETIME = DateTime.Now;
  474. db.Updateable(task).UpdateColumns(it => new { it.TASK_WKSTATUS, it.TASK_POSIDNEXT, it.TASK_POSIDCUR, it.TASK_EDITUSERNO, it.TASK_EDITDATETIME }).ExecuteCommand();
  475. result = string.Format("任务[{0}]重下输送机成功。");
  476. AddWCS_TASK_DTL(db, task.TASK_NO, task.TASK_NO, task.TASK_POSIDCUR, task.TASK_POSIDNEXT, result + "操作用户:" + CurrentHelper.User.USER_NO);
  477. }
  478. else
  479. {
  480. //出库,移库
  481. result = string.Format("出库和移库任务[{0}]不能重下输送机。", task.TASK_NO);
  482. }
  483. }
  484. else
  485. {
  486. result = string.Format("任务[{0}]状态为[堆垛机执行]不能重下输送机。", task.TASK_NO);
  487. }
  488. }
  489. else if (taskStatusType == TaskStatusType.重下RGV上料 && task.TASK_WKSTATUS == (int)WkStatus.RGV上料执行)
  490. {
  491. task.TASK_WKSTATUS = 2;
  492. task.TASK_EDITUSERNO = CurrentHelper.User.USER_NO;
  493. task.TASK_EDITDATETIME = DateTime.Now;
  494. db.Updateable(task).UpdateColumns(it => new { it.TASK_WKSTATUS, it.TASK_EDITUSERNO, it.TASK_EDITDATETIME }).ExecuteCommand();
  495. var task_dtlSet = db.Queryable<WCS_TASK_DTL>().Where(v => v.PARENTID == task.TASK_NO).ToList();
  496. var task_dtl = task_dtlSet.FirstOrDefault(v => v.DESCRIPTION.Contains("上料到RGV工位"));
  497. int index = task_dtl.DESCRIPTION.IndexOf("上料到RGV工位");
  498. int tempindex = task_dtl.DESCRIPTION.IndexOf('[', index);
  499. string conveyerNo = task_dtl.DESCRIPTION.Substring(tempindex + 1, 4);
  500. //解锁
  501. db.Updateable<WCS_EQUIPMENTLOCK>().UpdateColumns(it => new WCS_EQUIPMENTLOCK { ISLOCK = false }).Where(v => v.EQUIPMENTNO == conveyerNo).ExecuteCommand();
  502. result = string.Format("任务[{0}]重下RGV上料成功。");
  503. AddWCS_TASK_DTL(db, task.TASK_NO, task.TASK_NO, task.TASK_POSIDCUR, task.TASK_POSIDNEXT, result + "操作用户:" + CurrentHelper.User.USER_NO);
  504. }
  505. else if (taskStatusType == TaskStatusType.重下RGV下料 && task.TASK_WKSTATUS == (int)WkStatus.RGV下料执行)
  506. {
  507. var task_dtlSet = db.Queryable<WCS_TASK_DTL>().Where(v => v.PARENTID == task.TASK_NO).ToList();
  508. var task_dtl = task_dtlSet.FirstOrDefault(v => v.DESCRIPTION.Contains("上料到RGV工位"));
  509. task.TASK_WKSTATUS = 3;
  510. task.TASK_POSIDNEXT = task_dtl.POSIDNEXT;
  511. task.TASK_EDITUSERNO = CurrentHelper.User.USER_NO;
  512. task.TASK_EDITDATETIME = DateTime.Now;
  513. db.Updateable(task).UpdateColumns(it => new { it.TASK_WKSTATUS, it.TASK_POSIDNEXT, it.TASK_EDITUSERNO, it.TASK_EDITDATETIME }).ExecuteCommand();
  514. int index = task_dtl.DESCRIPTION.IndexOf("上料到RGV工位");
  515. int tempindex = task_dtl.DESCRIPTION.IndexOf('[', index);
  516. string conveyerNo = task_dtl.DESCRIPTION.Substring(tempindex + 1, 4);
  517. //解锁
  518. db.Updateable<WCS_EQUIPMENTLOCK>().UpdateColumns(it => new WCS_EQUIPMENTLOCK { ISLOCK = false }).Where(v => v.EQUIPMENTNO == conveyerNo).ExecuteCommand();
  519. result = string.Format("任务[{0}]重下RGV下料成功。", task.TASK_NO);
  520. AddWCS_TASK_DTL(db, task.TASK_NO, task.TASK_NO, task.TASK_POSIDCUR, task.TASK_POSIDNEXT, result + "操作用户:" + CurrentHelper.User.USER_NO);
  521. }
  522. else if (taskStatusType == TaskStatusType.重下任务)
  523. {
  524. if (task.TASK_COMTYPE == 1)//入库
  525. {
  526. if (task.TASK_POSIDTO.Length < 10)
  527. {
  528. //未分配货位,可重下
  529. task.TASK_WKSTATUS = 0;
  530. task.TASK_POSIDNEXT = task.TASK_POSIDFROM;
  531. task.TASK_POSIDCUR = task.TASK_POSIDFROM;
  532. task.TASK_EDITUSERNO = CurrentHelper.User.USER_NO;
  533. task.TASK_EDITDATETIME = DateTime.Now;
  534. db.Updateable(task).UpdateColumns(it => new { it.TASK_WKSTATUS, it.TASK_POSIDNEXT, it.TASK_POSIDCUR, it.TASK_EDITUSERNO, it.TASK_EDITDATETIME }).ExecuteCommand();
  535. result = string.Format("任务[{0}]重新下发成功。", task.TASK_NO);
  536. AddWCS_TASK_DTL(db, task.TASK_NO, task.TASK_NO, task.TASK_POSIDCUR, task.TASK_POSIDNEXT, result + "操作用户:" + CurrentHelper.User.USER_NO);
  537. }
  538. }
  539. else if (task.TASK_COMTYPE == 4)//移动
  540. {
  541. if (task.TASK_WKSTATUS == 0)
  542. {
  543. result = string.Format("任务[{0}]未下发,不需要重下任务。", task.TASK_NO);
  544. }
  545. else
  546. {
  547. //移动任务,可重下
  548. task.TASK_WKSTATUS = 0;
  549. task.TASK_POSIDNEXT = task.TASK_POSIDFROM;
  550. task.TASK_POSIDCUR = task.TASK_POSIDFROM;
  551. task.TASK_EDITUSERNO = CurrentHelper.User.USER_NO;
  552. task.TASK_EDITDATETIME = DateTime.Now;
  553. db.Updateable(task).UpdateColumns(it => new { it.TASK_WKSTATUS, it.TASK_POSIDNEXT, it.TASK_POSIDCUR, it.TASK_EDITUSERNO, it.TASK_EDITDATETIME }).ExecuteCommand();
  554. result = string.Format("任务[{0}]重新下发成功。", task.TASK_NO);
  555. AddWCS_TASK_DTL(db, task.TASK_NO, task.TASK_NO, task.TASK_POSIDCUR, task.TASK_POSIDNEXT, result + "操作用户:" + CurrentHelper.User.USER_NO);
  556. }
  557. }
  558. else if (task.TASK_COMTYPE == 2 || task.TASK_COMTYPE == 3)//出库,移库
  559. {
  560. result = string.Format("任务[{0}]是出库或移库任务,请使用[重下堆垛机]功能。", task.TASK_NO);
  561. }
  562. }
  563. if (string.IsNullOrWhiteSpace(result))
  564. {
  565. throw new Exception(string.Format("任务[{0}]该状态下不支持[{1}]", task.TASK_NO, taskStatusType));
  566. }
  567. });
  568. }
  569. catch (Exception ex)
  570. {
  571. result = ex.Message;
  572. LogHelper.Sys_Log.WriteLog(ex.ToString());
  573. }
  574. return result;
  575. }
  576. public static string TaskFinish(string taskno)
  577. {
  578. string result = string.Empty;
  579. try
  580. {
  581. WCS_TASK task = null;
  582. TryCachHelper.TryExecute((db) =>
  583. {
  584. int task_no = Convert.ToInt32(taskno);
  585. task = db.Queryable<WCS_TASK>().First(v => v.TASK_NO == task_no);
  586. });
  587. if (task != null)
  588. {
  589. if (task.TASK_COMTYPE == 1 || task.TASK_COMTYPE == 3)
  590. {
  591. if (task.TASK_WKSTATUS == (int)WkStatus.堆垛机执行 && task.TASK_POSIDTO.Length > 10)
  592. {
  593. result = TaskComplete(task.TASK_NO, task.TASK_COMTYPE);
  594. }
  595. else
  596. {
  597. result = string.Format("任务[{0}]当前状态不可手动完成。", taskno);
  598. }
  599. }
  600. else if (task.TASK_COMTYPE == 2 || task.TASK_COMTYPE == 4)
  601. {
  602. if (task.TASK_WKSTATUS == (int)WkStatus.堆垛机执行 || task.TASK_WKSTATUS <= 1)
  603. {
  604. result = string.Format("任务[{0}]当前状态不可手动完成。", taskno);
  605. }
  606. else
  607. {
  608. int tasktype = 4;
  609. result = TaskComplete(task.TASK_NO, tasktype);
  610. }
  611. }
  612. }
  613. }
  614. catch (Exception ex)
  615. {
  616. result = ex.Message;
  617. LogHelper.Sys_Log.WriteLog(ex.ToString());
  618. }
  619. return result;
  620. }
  621. /// <summary>
  622. /// 任务完成
  623. /// </summary>
  624. /// <param name="db"></param>
  625. /// <param name="conveyorOut">设备编号</param>
  626. /// <param name="taskno">任务号</param>
  627. /// <param name="temptype">类型 1:入库任务完成 2:堆垛机出库任务完成 3.移库完成 4:出库任务完成 5:任务取消 6:码盘 6:拆盘</param>
  628. public static string TaskComplete(int taskno, int temptype)
  629. {
  630. string result = string.Empty;
  631. string errorresult = TryCachHelper.TryExecute((db) =>
  632. {
  633. string status = "N";
  634. string MESSAGE = string.Empty;
  635. var outputResult = db.Ado.UseStoredProcedure<dynamic>(() =>
  636. {
  637. string spName = "BZ_TASKCOMPLETE";
  638. var p1 = new SugarParameter("@TEMPTASKNO", taskno);// 任务号
  639. var p2 = new SugarParameter("@TEMPTYPE", temptype);//类型(出库任务完成)
  640. var p3 = new SugarParameter("@STATUS", null, true);//反馈状态 Y:成功 N:失败
  641. var p4 = new SugarParameter("@MESSAGE", null, true);//反馈消息
  642. var dbResult = db.Ado.ExecuteCommand(spName, new SugarParameter[] { p1, p2, p3, p4 });
  643. status = p3.Value.ToString();
  644. MESSAGE = p4.Value.ToString();
  645. return dbResult;
  646. });
  647. if (status.Trim().ToUpper() == "N")
  648. {
  649. result = string.Format("任务[{0}]手动完成失败,传递参数:任务号[{1}]类型[{2}]反馈消息:[{3}]",
  650. taskno, taskno, temptype, MESSAGE);
  651. }
  652. else
  653. {
  654. result = string.Format("任务[{0}]手动完成成功。", taskno);
  655. }
  656. });
  657. if (!string.IsNullOrEmpty(errorresult)) result = errorresult;
  658. return result;
  659. }
  660. public static DateTime QuerySystemDate()
  661. {
  662. DateTime dt = DateTime.MinValue;
  663. TryCachHelper.TryExecute((db) =>
  664. {
  665. dt = db.Ado.GetDateTime("select sysdate from dual");
  666. });
  667. return dt;
  668. }
  669. public static void Equipment_UpdateLock(string equipmentNo, bool islock)
  670. {
  671. TryCachHelper.TryExecute((db) =>
  672. {
  673. db.Updateable<WCS_EQUIPMENTLOCK>().UpdateColumns(it => new WCS_EQUIPMENTLOCK() { ISLOCK = islock, UPDATETIME = DateTime.Now })
  674. .Where(it => it.EQUIPMENTNO == equipmentNo).ExecuteCommand();
  675. });
  676. }
  677. public static List<Frm.WCS_SC521> QueryStackerdDataDDJ(List<string> plcnameSet)
  678. {
  679. var stackerdDataSet = new List<Frm.WCS_SC521>();
  680. TryCachHelper.TryExecute((db) =>
  681. {
  682. stackerdDataSet = db.Queryable<Frm.WCS_SC521>().Where(v => plcnameSet.Contains(v.DEVICECODE) && v.ISLAST == true).ToList();
  683. });
  684. return stackerdDataSet;
  685. }
  686. public static List<Frm.WCS_RGV521> QueryStackerdDataRGV(List<string> plcnameSet)
  687. {
  688. var stackerdDataSet = new List<Frm.WCS_RGV521>();
  689. TryCachHelper.TryExecute((db) =>
  690. {
  691. stackerdDataSet = db.Queryable<Frm.WCS_RGV521>().Where(v => plcnameSet.Contains(v.DEVICECODE) && v.ISLAST == true).ToList();
  692. });
  693. return stackerdDataSet;
  694. }
  695. public static List<WCS_TASK> QueryTasks()
  696. {
  697. var tasks = new List<WCS_TASK>();
  698. TryCachHelper.TryExecute((db) =>
  699. {
  700. tasks = db.Queryable<WCS_TASK>().ToList();
  701. });
  702. return tasks;
  703. }
  704. public static void TaskUpdatePriority(SqlSugarClient db, int task_no, int priority)
  705. {
  706. if (db.Updateable<WCS_TASK>()
  707. .UpdateColumns(it => new WCS_TASK
  708. {
  709. TASK_PRIORITY = priority,
  710. })
  711. .Where(v => v.TASK_NO == task_no).ExecuteCommand() < 0)
  712. {
  713. throw new Exception(string.Format("任务[{0}]修改优先级为[{0}]失败", task_no, priority));
  714. }
  715. }
  716. /// <summary>
  717. /// 任务完成
  718. /// </summary>
  719. /// <param name="task_no"></param>
  720. /// <param name="finishType"></param>
  721. /// <param name="message"></param>
  722. /// <returns></returns>
  723. public static bool BZ_TASKCOMPLETE(int task_no, int finishType, out string message)
  724. {
  725. message = string.Empty;
  726. return true;
  727. }
  728. /// <summary>
  729. /// 任务取消
  730. /// </summary>
  731. /// <param name="task_no">任务号</param>
  732. /// <param name="msg">消息</param>
  733. /// <returns>是否取消成功</returns>
  734. public static bool TaskCancel(int task_no, out string msg)
  735. {
  736. msg = string.Empty;
  737. return true;
  738. }
  739. public static string RestartTask(int task_no)
  740. {
  741. string result = TryCachHelper.TryExecute((db) =>
  742. {
  743. var task = db.Queryable<Frm.WCS_TASK>().First(v => v.ID == task_no);
  744. if (task == null)
  745. {
  746. throw new Exception(string.Format("未查询到[{0}]信息", task_no));
  747. }
  748. else
  749. {
  750. if (task.TYPE == Frm.TaskType.出库 && task.STATUS > 0 && task.STATUS < 99)
  751. {
  752. if (db.Updateable<Frm.WCS_TASK>()
  753. .UpdateColumns(it => new Frm.WCS_TASK
  754. {
  755. STATUS = 0,
  756. UPDATETIME = DateTime.Now
  757. })
  758. .Where(v => v.ID == task_no).ExecuteCommand() < 0)
  759. {
  760. throw new Exception(string.Format("任务[{0}]重置失败", task_no));
  761. }
  762. }
  763. else
  764. {
  765. throw new Exception(string.Format("任务[{0}]不是出库任务或者是已完成的出库不能执行[重下任务]", task_no));
  766. }
  767. }
  768. });
  769. return result;
  770. }
  771. public static string OnUpMatRestart(int task_no)
  772. {
  773. string result = TryCachHelper.TryExecute((db) =>
  774. {
  775. var task = db.Queryable<WCS_TASK>().First(v => v.TASK_NO == task_no);
  776. if (task == null)
  777. {
  778. throw new Exception(string.Format("未查询到[{0}]信息", task_no));
  779. }
  780. else
  781. {
  782. if (task.TASK_WKSTATUS == 7)
  783. {
  784. if (db.Updateable<WCS_TASK>()
  785. .UpdateColumns(it => new WCS_TASK
  786. {
  787. TASK_WKSTATUS = 2,
  788. TASK_RGVNO = "",
  789. TASK_POSIDCUR = task.TASK_ITEM4,
  790. TASK_POSIDNEXT = task.TASK_ITEM4,
  791. TASK_EDITDATETIME = DateTime.Now
  792. })
  793. .Where(v => v.TASK_NO == task_no).ExecuteCommand() < 0)
  794. {
  795. throw new Exception(string.Format("任务[{0}]上下料重下RGV失败", task_no));
  796. }
  797. }
  798. else
  799. {
  800. throw new Exception(string.Format("任务[{0}]不能执行[上下料重下RGV].", task_no));
  801. }
  802. }
  803. });
  804. return result;
  805. }
  806. public static string OnMatRestart(int task_no)
  807. {
  808. string result = TryCachHelper.TryExecute((db) =>
  809. {
  810. var task = db.Queryable<WCS_TASK>().First(v => v.TASK_NO == task_no);
  811. if (task == null)
  812. {
  813. throw new Exception(string.Format("未查询到[{0}]信息", task_no));
  814. }
  815. else
  816. {
  817. if (task.TASK_WKSTATUS == 3)
  818. {
  819. if (db.Updateable<WCS_TASK>()
  820. .UpdateColumns(it => new WCS_TASK
  821. {
  822. TASK_WKSTATUS = 2,
  823. TASK_RGVNO = "",
  824. TASK_POSIDCUR = task.TASK_POSIDNEXT,
  825. TASK_EDITUSERNO = "wcs",
  826. TASK_EDITDATETIME = DateTime.Now
  827. })
  828. .Where(v => v.TASK_NO == task_no).ExecuteCommand() < 0)
  829. {
  830. throw new Exception(string.Format("任务[{0}]上料重下RGV失败", task_no));
  831. }
  832. }
  833. else
  834. {
  835. throw new Exception(string.Format("任务[{0}]不能执行[上料重下RGV].", task_no));
  836. }
  837. }
  838. });
  839. return result;
  840. }
  841. public static string UpMatRestart(int task_no)
  842. {
  843. string result = TryCachHelper.TryExecute((db) =>
  844. {
  845. var task = db.Queryable<WCS_TASK>().First(v => v.TASK_NO == task_no);
  846. if (task == null)
  847. {
  848. throw new Exception(string.Format("未查询到[{0}]信息", task_no));
  849. }
  850. else
  851. {
  852. if (task.TASK_WKSTATUS == 4)
  853. {
  854. if (db.Updateable<WCS_TASK>()
  855. .UpdateColumns(it => new WCS_TASK
  856. {
  857. TASK_WKSTATUS = 3,
  858. TASK_RGVNO = "",
  859. TASK_POSIDCUR = task.TASK_RGVNO,
  860. TASK_POSIDNEXT = task.TASK_ITEM4,//起点地址
  861. TASK_EDITUSERNO = "wcs",
  862. TASK_EDITDATETIME = DateTime.Now
  863. })
  864. .Where(v => v.TASK_NO == task_no).ExecuteCommand() < 0)
  865. {
  866. throw new Exception(string.Format("任务[{0}]下料重下RGV失败", task_no));
  867. }
  868. }
  869. else
  870. {
  871. throw new Exception(string.Format("任务[{0}]不能执行[下料重下RGV].", task_no));
  872. }
  873. }
  874. });
  875. return result;
  876. }
  877. public static string FinishTask(int task_no)
  878. {
  879. string result = TryCachHelper.TryExecute((db) =>
  880. {
  881. var task = db.Queryable<Frm.WCS_TASK>().First(v => v.ID == task_no);
  882. if (task == null)
  883. {
  884. throw new Exception(string.Format("未查询到[{0}]信息", task_no));
  885. }
  886. else
  887. {
  888. if (task.STATUS > 1)
  889. {
  890. if (db.Updateable<Frm.WCS_TASK>()
  891. .UpdateColumns(it => new Frm.WCS_TASK
  892. {
  893. STATUS = 99,
  894. UPDATEUSER = CurrentHelper.User.USER_NO,
  895. UPDATETIME = DateTime.Now
  896. })
  897. .Where(v => v.ID == task_no).ExecuteCommand() < 0)
  898. {
  899. throw new Exception(string.Format("任务[{0}]手动完成失败", task_no));
  900. }
  901. }
  902. else
  903. {
  904. throw new Exception(string.Format("任务[{0}]未执行,不能执行[手动完成].", task_no));
  905. }
  906. }
  907. });
  908. return result;
  909. }
  910. public static string ClearTask(int task_no)
  911. {
  912. string result = TryCachHelper.TryTranExecute((db) =>
  913. {
  914. var task = db.Queryable<Frm.WCS_TASK>().First(v => v.ID == task_no);
  915. if (task == null)
  916. {
  917. throw new Exception(string.Format("未查询到[{0}]信息", task_no));
  918. }
  919. else
  920. {
  921. if (task.STATUS < 99)
  922. {
  923. if (db.Updateable<Frm.WCS_TASK>()
  924. .UpdateColumns(it => new Frm.WCS_TASK
  925. {
  926. STATUS = 106,
  927. UPDATETIME = DateTime.Now
  928. })
  929. .Where(v => v.ID == task_no).ExecuteCommand() < 0)
  930. {
  931. throw new Exception(string.Format("任务[{0}]取消失败", task_no));
  932. }
  933. }
  934. else
  935. {
  936. throw new Exception(string.Format("任务[{0}]已完成或已取消,不能执行取消动作。", task_no));
  937. }
  938. }
  939. });
  940. return result;
  941. }
  942. public static string UdpateEndAddress(int task_no, string whid, string srm)
  943. {
  944. string nextAddress = string.Empty;
  945. var dicSet = new Dictionary<string, string>();
  946. string result = TryCachHelper.TryTranExecute((db) =>
  947. {
  948. if (string.IsNullOrWhiteSpace(srm))
  949. {
  950. throw new Exception(string.Format("请选择要变更的堆垛机"));
  951. }
  952. if (whid == "原料库")
  953. {
  954. dicSet.Add("srm01", "1092");
  955. dicSet.Add("srm02", "1094");
  956. dicSet.Add("srm03", "1096");
  957. dicSet.Add("srm04", "1098");
  958. dicSet.Add("srm05", "1100");
  959. }
  960. else if (whid == "成品库")
  961. {
  962. dicSet.Add("srm06", "2324");
  963. dicSet.Add("srm07", "2320");
  964. dicSet.Add("srm08", "2316");
  965. dicSet.Add("srm09", "2312");
  966. dicSet.Add("srm10", "2308");
  967. dicSet.Add("srm11", "2304");
  968. }
  969. else
  970. {
  971. throw new Exception(string.Format("仓库[{0}]错误。", whid));
  972. }
  973. nextAddress = dicSet[srm];
  974. var task = db.Queryable<WCS_TASK>().First(v => v.TASK_NO == task_no);
  975. if (task == null)
  976. {
  977. throw new Exception(string.Format("未查询到[{0}]信息", task_no));
  978. }
  979. else
  980. {
  981. if (task.TASK_POSIDTO.Length >= 10)
  982. {
  983. throw new Exception(string.Format("任务[{0}]已经分配货位,不能变更目标地址。", task_no));
  984. }
  985. else
  986. {
  987. if (db.Updateable<WCS_TASK>()
  988. .UpdateColumns(it => new WCS_TASK
  989. {
  990. TASK_POSIDNEXT = nextAddress,
  991. TASK_POSIDTO = srm,
  992. TASK_SRMNO = srm,
  993. TASK_EndTunnelNum = srm,
  994. TASK_EDITUSERNO = CurrentHelper.User.Use_Name,
  995. TASK_EDITDATETIME = DateTime.Now
  996. })
  997. .Where(v => v.TASK_NO == task_no).ExecuteCommand() < 0)
  998. {
  999. throw new Exception(string.Format("任务[{0}]修改目标地址失败", task_no));
  1000. }
  1001. string msg = string.Format("任务[{0}]手动修改下个地址为[{1}]目标地址为[{2}]成功。", task_no, nextAddress, srm);
  1002. var task_dtl = new WCS_TASK_DTL();
  1003. task_dtl.ID = Guid.NewGuid().ToString();
  1004. task_dtl.PARENTID = task_no;
  1005. task_dtl.TASKNO = task_no.ToString();
  1006. task_dtl.POSIDCUR = task.TASK_POSIDCUR;
  1007. task_dtl.POSIDNEXT = nextAddress;
  1008. task_dtl.DESCRIPTION = msg;
  1009. task_dtl.EXECUTEDATE = DateTime.Now;
  1010. db.Insertable(task_dtl).ExecuteCommand();
  1011. }
  1012. }
  1013. });
  1014. if (string.IsNullOrWhiteSpace(result))
  1015. {
  1016. result = string.Format("任务[{0}]修改下个地址为[{1}]目标地址为[{2}]成功。", task_no, nextAddress, srm);
  1017. }
  1018. return result;
  1019. }
  1020. public static string UpdateTaskPriority(int task_no, int priority)
  1021. {
  1022. string result = TryCachHelper.TryTranExecute((db) =>
  1023. {
  1024. var task = db.Queryable<Frm.WCS_TASK>().First(v => v.ID == task_no);
  1025. if (task == null)
  1026. {
  1027. throw new Exception(string.Format("未查询到WCS任务[{0}]信息", task_no));
  1028. }
  1029. else
  1030. {
  1031. if (db.Updateable<Frm.WCS_TASK>()
  1032. .UpdateColumns(it => new Frm.WCS_TASK
  1033. {
  1034. Priority = priority,
  1035. UPDATEUSER = CurrentHelper.User.Use_Name,
  1036. UPDATETIME = DateTime.Now
  1037. })
  1038. .Where(v => v.ID == task_no).ExecuteCommand() < 0)
  1039. {
  1040. throw new Exception(string.Format("WCS任务[{0}]调整优先级失败", task_no));
  1041. }
  1042. string msg = string.Format("任务[{0}]调整优先级为[{1}]成功。", task_no, priority);
  1043. }
  1044. });
  1045. if (string.IsNullOrWhiteSpace(result))
  1046. {
  1047. result = string.Format("任务[{0}]调整优先级[{1}]成功。", task_no, priority);
  1048. }
  1049. return result;
  1050. }
  1051. }
  1052. }