BaseWorkflow.cs 56 KB

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