BaseWorkflow.cs 74 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639
  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.PLC;
  8. using WCS_Client.Frm;
  9. using WCS_Client.Models;
  10. using WCS_Client.Utility;
  11. namespace WCS_Client
  12. {
  13. public enum TaskStatusType
  14. {
  15. 重下堆垛机 = 1,
  16. 重下输送机 = 2,
  17. 重下RGV上料 = 3,
  18. 重下RGV下料 = 4,
  19. 重下任务 = 5
  20. }
  21. public enum WkStatus
  22. {
  23. 未下发 = 0,
  24. 未执行 = 1,
  25. 输送机执行 = 2,
  26. RGV上料执行 = 3,
  27. RGV下料执行 = 4,
  28. 堆垛机执行 = 5,
  29. 堆垛机完成 = 6,
  30. RGV执行中 = 7,
  31. RGV移动 = 8,
  32. RGV完成 = 9,
  33. 任务已下发AGV = 10,
  34. AGV取货完成输送中 = 11,
  35. AGV任务完成 = 12,
  36. 熟化房熟化中 = 13,
  37. 熟化房熟化完成 = 14,
  38. 完成任务 = 99,
  39. 取消任务 = 106,
  40. 手动过账 = 109
  41. }
  42. public class BaseWorkflow
  43. {
  44. public static bool Login(string use_No, string use_Pwd, out string errMsg)
  45. {
  46. bool result = false;
  47. errMsg = string.Empty;
  48. string errorMsg = string.Empty;
  49. try
  50. {
  51. TryCachHelper.TryExecute((db) =>
  52. {
  53. var user = db.Queryable<WCS_Users>().First(v => v.USER_NO == use_No);
  54. if (user == null)
  55. {
  56. errorMsg = LangConst.UserNotExists;
  57. }
  58. else
  59. {
  60. if (user.USER_PWD == Md5Helper.Md5Hash(use_Pwd))
  61. {
  62. string user_textStr = BinaryHelper.ByteArray2BinaryStr(user.USER_TEXT);
  63. string jiemastr = BinaryHelper.jiema(user_textStr);
  64. WCS_Users userinfo = jiemastr.ToObject<WCS_Users>();
  65. userinfo.Use_LoginTime = DateTime.Now;
  66. string userjson = userinfo.ToJson();
  67. user.USER_TEXT = BinaryHelper.BinaryStr2ByteArray(BinaryHelper.bianma(userjson));
  68. if (db.Updateable(user).UpdateColumns(it => it.USER_TEXT).ExecuteCommand() > 0)
  69. {
  70. user.GetUserInfo(userinfo);
  71. CurrentHelper.User = user;
  72. result = true;
  73. }
  74. else
  75. {
  76. errorMsg = LangConst.UpdateError;
  77. }
  78. }
  79. else
  80. {
  81. errorMsg = LangConst.PasswordError;
  82. }
  83. }
  84. });
  85. //using (MAction action = new MAction(TableEnum.WCS_Users))
  86. //{
  87. // MDataTable mdt = action.Select();
  88. // var users = mdt.ToList<WCS_Users>();
  89. // var user = users.FirstOrDefault(v => v.USER_NO == use_No);
  90. // if (user == null)
  91. // {
  92. // errMsg = LangConst.UserNotExists;
  93. // }
  94. // else
  95. // {
  96. // if (user.USER_PWD == Md5Helper.Md5Hash(use_Pwd))
  97. // {
  98. // string user_textStr = BinaryHelper.ByteArray2BinaryStr(user.USER_TEXT);
  99. // string jiemastr = BinaryHelper.jiema(user_textStr);
  100. // WCS_Users userinfo = jiemastr.ToObject<WCS_Users>();
  101. // userinfo.Use_LoginTime = DateTime.Now;
  102. // string userjson = userinfo.ToJson();
  103. // user.USER_TEXT = BinaryHelper.BinaryStr2ByteArray(BinaryHelper.bianma(userjson));
  104. // action.Set("USER_TEXT", user.USER_TEXT);
  105. // string where = string.Format("USER_NO = '{0}'", user.USER_NO);
  106. // if (action.Update(where, false))
  107. // {
  108. // user.GetUserInfo(userinfo);
  109. // CurrentHelper.User = user;
  110. // //CurrentHelper.User.UserInfoItem = BinaryHelper.jiema(CurrentHelper.User.User_Text).ToObject<UserInfo>();
  111. // result = true;
  112. // }
  113. // else
  114. // {
  115. // errMsg = LangConst.UpdateError;
  116. // }
  117. // }
  118. // else
  119. // {
  120. // errMsg = LangConst.PasswordError;
  121. // }
  122. // }
  123. //}
  124. }
  125. catch (Exception ex)
  126. {
  127. LogHelper.Sys_Log.WriteLog(ex.ToString());
  128. throw new Exception(LangConst.SysError);
  129. }
  130. return result;
  131. }
  132. public static PageData QueryDatatble(DataTable dt, int PageIndex, int PageSize)
  133. {
  134. if (PageSize <= 0) PageSize = 2000;
  135. int startRecord = (PageIndex - 1) * PageSize + 1;
  136. int endRecord = startRecord + PageSize - 1;
  137. try
  138. {
  139. int count = dt.Rows.Count;
  140. int PageCount = count / PageSize;
  141. if (count % PageSize > 0)
  142. PageCount += 1;
  143. if (dt != null && dt.Rows.Count > 0)
  144. {
  145. PageData PageDataItem = new PageData();
  146. PageDataItem.PageIndex = PageIndex;
  147. PageDataItem.PageSize = PageSize;
  148. PageDataItem.PageCount = PageCount;
  149. PageDataItem.RowsCount = count;
  150. dt.TableName = "table";
  151. PageDataItem.Dt = dt;
  152. return PageDataItem;
  153. }
  154. }
  155. catch (Exception ex)
  156. {
  157. }
  158. return null;
  159. }
  160. public static PageData QueryPageData(string _SQLText, string orderText, List<string> WhereStringList, int PageIndex, int PageSize)
  161. {
  162. var sb = new StringBuilder();
  163. sb.Append(_SQLText);
  164. if (WhereStringList != null && WhereStringList.Count > 0)
  165. {
  166. foreach (var item in WhereStringList)
  167. {
  168. sb.Append(" and ");
  169. sb.Append(item);
  170. }
  171. }
  172. return QueryPageSql(sb.ToString(), orderText, PageIndex, PageSize);
  173. }
  174. private static PageData QueryPageSql(string SQLText, string OrderText, int PageIndex, int PageSize)
  175. {
  176. if (PageSize <= 0) PageSize = 2000;
  177. int startRecord = (PageIndex - 1) * PageSize + 1;
  178. int endRecord = startRecord + PageSize - 1;
  179. 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);
  180. string CountStr = string.Format("Select Count(1) From ({0}) t", SQLText);
  181. try
  182. {
  183. DataTable dt = null;
  184. int count = 0;
  185. TryCachHelper.TryExecute((db) =>
  186. {
  187. dt = db.Ado.GetDataTable(sql);
  188. count = Convert.ToInt32(db.Ado.GetScalar(CountStr));
  189. });
  190. int PageCount = count / PageSize;
  191. if (count % PageSize > 0)
  192. PageCount += 1;
  193. if (dt != null && dt.Rows.Count > 0)
  194. {
  195. PageData PageDataItem = new PageData();
  196. PageDataItem.PageIndex = PageIndex;
  197. PageDataItem.PageSize = PageSize;
  198. PageDataItem.PageCount = PageCount;
  199. PageDataItem.RowsCount = count;
  200. dt.TableName = "table";
  201. PageDataItem.Dt = dt;
  202. return PageDataItem;
  203. }
  204. }
  205. catch (Exception ex)
  206. {
  207. }
  208. return null;
  209. }
  210. public static PageData QueryPageData2(string _SQLText, string orderText, List<string> WhereStringList, int PageIndex, int PageSize)
  211. {
  212. var sb = new StringBuilder();
  213. sb.Append(_SQLText);
  214. if (WhereStringList != null && WhereStringList.Count > 0)
  215. {
  216. sb.Append(" and ");
  217. sb.Append(WhereStringList[0]);
  218. }
  219. return QueryPageSql2(sb.ToString(), orderText, PageIndex, PageSize);
  220. }
  221. private static PageData QueryPageSql2(string SQLText, string OrderText, int PageIndex, int PageSize)
  222. {
  223. if (PageSize <= 0) PageSize = 2000;
  224. int startRecord = (PageIndex - 1) * PageSize + 1;
  225. int endRecord = startRecord + PageSize - 1;
  226. 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);
  227. string CountStr = string.Format("Select Count(1) From ({0}) t", SQLText);
  228. try
  229. {
  230. DataTable dt = null;
  231. int count = 0;
  232. TryCachHelper.TryExecute((db) =>
  233. {
  234. List<WCS_Users> usersList = db.SqlQueryable<WCS_Users>(sql).ToList();
  235. foreach (var item in usersList)
  236. {
  237. string binaryStr = BinaryHelper.ByteArray2BinaryStr(item.USER_TEXT);
  238. string jsonstr = BinaryHelper.jiema(binaryStr);
  239. var user = jsonstr.ToObject<WCS_Users>();
  240. item.GetUserInfo(user);
  241. }
  242. dt = DatatableConvertHelper.ToDataTable(usersList);
  243. count = Convert.ToInt32(db.Ado.GetScalar(CountStr));
  244. });
  245. //using (MProc proc = new MProc(sql))
  246. //{
  247. // MDataTable mdt = proc.ExeMDataTable().ToDataTable();
  248. // List<WCS_Users> usersList= mdt.ToList<WCS_Users>();
  249. // foreach (var item in usersList)
  250. // {
  251. // string binaryStr = BinaryHelper.ByteArray2BinaryStr(item.USER_TEXT);
  252. // string jsonstr = BinaryHelper.jiema(binaryStr);
  253. // var user = jsonstr.ToObject<WCS_Users>();
  254. // item.GetUserInfo(user);
  255. // }
  256. // dt = DatatableConvertHelper.ToDataTable(usersList);
  257. // proc.ResetProc(CountStr);
  258. // count = proc.ExeScalar<int>();
  259. //}
  260. int PageCount = count / PageSize;
  261. if (count % PageSize > 0)
  262. PageCount += 1;
  263. if (dt != null && dt.Rows.Count > 0)
  264. {
  265. PageData PageDataItem = new PageData();
  266. PageDataItem.PageIndex = PageIndex;
  267. PageDataItem.PageSize = PageSize;
  268. PageDataItem.PageCount = PageCount;
  269. PageDataItem.RowsCount = count;
  270. dt.TableName = "table";
  271. PageDataItem.Dt = dt;
  272. return PageDataItem;
  273. }
  274. }
  275. catch (Exception ex)
  276. {
  277. }
  278. return null;
  279. }
  280. public static DataTable CommonQueryUser(string sql)
  281. {
  282. DataTable dt = null;
  283. try
  284. {
  285. TryCachHelper.TryExecute((db) =>
  286. {
  287. List<WCS_Users> usersList = db.SqlQueryable<WCS_Users>(sql).ToList();
  288. foreach (var item in usersList)
  289. {
  290. var binaryStr = BinaryHelper.ByteArray2BinaryStr(item.USER_TEXT);
  291. string jsonstr = BinaryHelper.jiema(binaryStr);
  292. var user = jsonstr.ToObject<WCS_Users>();
  293. item.GetUserInfo(user);
  294. }
  295. dt = DatatableConvertHelper.ToDataTable(usersList);
  296. });
  297. //using (MProc prc = new MProc(sql))
  298. //{
  299. // var mdt = prc.ExeMDataTable();
  300. // List<WCS_Users> usersList = mdt.ToList<WCS_Users>();
  301. // foreach (var item in usersList)
  302. // {
  303. // var binaryStr = BinaryHelper.ByteArray2BinaryStr(item.USER_TEXT);
  304. // string jsonstr = BinaryHelper.jiema(binaryStr);
  305. // var user = jsonstr.ToObject<WCS_Users>();
  306. // item.GetUserInfo(user);
  307. // }
  308. // dt = DatatableConvertHelper.ToDataTable(usersList);
  309. //}
  310. }
  311. catch (Exception ex)
  312. {
  313. LogHelper.Sys_Log.WriteLog(ex.ToString());
  314. }
  315. return dt;
  316. }
  317. public static DataTable CommonQuery(string sql)
  318. {
  319. DataTable dt = null;
  320. TryCachHelper.TryExecute((db) =>
  321. {
  322. dt = db.Ado.GetDataTable(sql);
  323. });
  324. return dt;
  325. }
  326. public static string AddEditUser(WCS_Users user)
  327. {
  328. string result = string.Empty;
  329. try
  330. {
  331. if (user.USER_NO == LangConst.DefaultUser)
  332. {
  333. result = LangConst.DefaultUserError;
  334. }
  335. else
  336. {
  337. var json = user.ToJson();
  338. string binarystr = BinaryHelper.bianma(json);
  339. user.USER_TEXT = BinaryHelper.BinaryStr2ByteArray(binarystr);
  340. TryCachHelper.TryExecute((db) =>
  341. {
  342. var wcs_user = db.Queryable<WCS_Users>().First(v => v.USER_NO == user.USER_NO);
  343. if (wcs_user == null)
  344. {
  345. //默认密码
  346. user.USER_PWD = Md5Helper.Md5Hash(LangConst.DefaultPwd);
  347. db.Insertable(user).ExecuteCommand();
  348. }
  349. else
  350. {
  351. wcs_user.USER_TEXT = user.USER_TEXT;
  352. db.Updateable(wcs_user).UpdateColumns(it => it.USER_TEXT).ExecuteCommand();
  353. }
  354. });
  355. //using (MAction action = new MAction(TableEnum.WCS_Users))
  356. //{
  357. // if (action.Exists(user.USER_NO))
  358. // {
  359. // action.Set(WCS_UsersEnum.User_Text, user.USER_TEXT);
  360. // string where = string.Format("USER_NO = '{0}'", user.USER_NO);
  361. // action.Update(where, false);
  362. // }
  363. // else
  364. // {
  365. // //默认密码
  366. // user.USER_PWD = Md5Helper.Md5Hash(LangConst.DefaultPwd);
  367. // action.Set(WCS_UsersEnum.User_No, user.USER_NO);
  368. // action.Set(WCS_UsersEnum.User_Pwd, user.USER_PWD);
  369. // action.Set(WCS_UsersEnum.User_Text, user.USER_TEXT);
  370. // //插入信息
  371. // bool insertresult = action.Insert(InsertOp.None);
  372. // }
  373. //}
  374. }
  375. }
  376. catch (Exception ex)
  377. {
  378. LogHelper.Sys_Log.WriteLog(ex.ToString());
  379. result = string.Format("{0}或{1}", LangConst.AddError, LangConst.UpdateError);
  380. }
  381. return result;
  382. }
  383. public static string DeleteUser(string user_no)
  384. {
  385. string result = string.Empty;
  386. try
  387. {
  388. if (user_no == LangConst.DefaultUser)
  389. {
  390. result = LangConst.DefaultUserError;
  391. }
  392. else
  393. {
  394. TryCachHelper.TryExecute((db) =>
  395. {
  396. db.Deleteable<WCS_Users>().Where(v => v.USER_NO == user_no).ExecuteCommand();
  397. });
  398. }
  399. }
  400. catch (Exception ex)
  401. {
  402. LogHelper.Sys_Log.WriteLog(ex.ToString());
  403. result = LangConst.DeleteError;
  404. }
  405. return result;
  406. }
  407. public static string AdminModifyPwd(string user_no,string user_pwd)
  408. {
  409. string result = string.Empty;
  410. try
  411. {
  412. TryCachHelper.TryExecute((db) =>
  413. {
  414. var user = db.Queryable<WCS_Users>().First(v => v.USER_NO == user_no);
  415. if (user == null)
  416. {
  417. result = LangConst.UserNotExists;
  418. }
  419. else
  420. {
  421. var binaryStr = BinaryHelper.ByteArray2BinaryStr(user.USER_TEXT);
  422. var useritem = BinaryHelper.jiema(binaryStr).ToObject<WCS_Users>();
  423. useritem.Use_EditUserNo = CurrentHelper.User.USER_NO;
  424. useritem.Use_EditDateTime = DateTime.Now;
  425. var binStr = BinaryHelper.bianma(useritem.ToJson());
  426. user.USER_TEXT = BinaryHelper.BinaryStr2ByteArray(binStr);
  427. user.USER_PWD = Md5Helper.Md5Hash(user_pwd);
  428. db.Updateable(user).UpdateColumns(it => new { it.USER_TEXT, it.USER_PWD }).ExecuteCommand();
  429. }
  430. });
  431. //using (MAction action = new MAction(TableEnum.WCS_Users))
  432. //{
  433. // if (action.Exists(user_no))
  434. // {
  435. // MDataTable mdt = action.Select(user_no);
  436. // var user = mdt.ToList<WCS_Users>()[0];
  437. // var binaryStr = BinaryHelper.ByteArray2BinaryStr(user.USER_TEXT);
  438. // var useritem = BinaryHelper.jiema(binaryStr).ToObject<WCS_Users>();
  439. // useritem.Use_EditUserNo = CurrentHelper.User.USER_NO;
  440. // useritem.Use_EditDateTime = DateTime.Now;
  441. // // useritem.User_Pwd = Md5Helper.Md5Hash(user_pwd);
  442. // var binStr = BinaryHelper.bianma(useritem.ToJson());
  443. // user.USER_TEXT = BinaryHelper.BinaryStr2ByteArray(binStr);
  444. // action.Set(WCS_UsersEnum.User_Pwd, Md5Helper.Md5Hash(user_pwd));
  445. // action.Set(WCS_UsersEnum.User_Text, user.USER_TEXT);
  446. // string where = string.Format("User_No = '{0}'", user.USER_NO);
  447. // action.Update(where, false);
  448. // }
  449. // else
  450. // {
  451. // result = LangConst.UserNotExists;
  452. // }
  453. //}
  454. }
  455. catch (Exception ex)
  456. {
  457. LogHelper.Sys_Log.WriteLog(ex.ToString());
  458. result = LangConst.UpdateError;
  459. }
  460. return result;
  461. }
  462. public static DataTable QuerySex()
  463. {
  464. return CommonQuery(string.Format("SELECT * FROM WCS_Mappingentry where Mep_MappingType='Sex'"));
  465. }
  466. public static DataTable QueryUse_Role()
  467. {
  468. return CommonQuery(string.Format("SELECT * FROM WCS_Mappingentry where Mep_MappingType='RoleId'"));
  469. }
  470. public static DataTable QueryTaskType()
  471. {
  472. return CommonQuery(string.Format("SELECT * FROM WCS_Mappingentry where Mep_MappingType='COMTYPE'"));
  473. }
  474. public static void AddWCS_TASK_DTL(SqlSugarClient db, int task_id, int task_no, string posIdCur, string posIdNext, string msg)
  475. {
  476. var task_dtl = new WCS_TASK_DTL();
  477. task_dtl.ID = Guid.NewGuid().ToString();
  478. task_dtl.PARENTID = task_id;
  479. task_dtl.TASKNO = task_no.ToString();
  480. task_dtl.POSIDCUR = posIdCur;
  481. task_dtl.POSIDNEXT = posIdNext;
  482. task_dtl.DESCRIPTION = msg;
  483. task_dtl.EXECUTEDATE = DateTime.Now;
  484. db.Insertable(task_dtl).ExecuteCommand();
  485. }
  486. public static string UpdateTask(int taskid, TaskStatusType taskStatusType)
  487. {
  488. string result = string.Empty;
  489. try
  490. {
  491. TryCachHelper.TryExecute((db) =>
  492. {
  493. var task = db.Queryable<WCS_TASK>().First(v => v.TASK_NO == taskid);
  494. if (taskStatusType == TaskStatusType.重下堆垛机)
  495. {
  496. if (task.TASK_WKSTATUS == (int)WkStatus.堆垛机执行)
  497. {
  498. if (task.TASK_COMTYPE == 2 || task.TASK_COMTYPE == 3)//出库,移库
  499. {
  500. task.TASK_WKSTATUS = 0;
  501. task.TASK_POSIDNEXT = task.TASK_POSIDFROM;
  502. }
  503. else if (task.TASK_COMTYPE == 1)//入库
  504. {
  505. task.TASK_WKSTATUS = 2;
  506. }
  507. task.TASK_EDITUSERNO = CurrentHelper.User.USER_NO;
  508. task.TASK_EDITDATETIME = DateTime.Now;
  509. db.Updateable(task).UpdateColumns(it => new { it.TASK_WKSTATUS, it.TASK_POSIDNEXT, it.TASK_EDITUSERNO, it.TASK_EDITDATETIME }).ExecuteCommand();
  510. result = string.Format("任务[{0}]重下堆垛机成功。", task.TASK_NO);
  511. AddWCS_TASK_DTL(db, task.TASK_NO, task.TASK_NO, task.TASK_POSIDCUR, task.TASK_POSIDNEXT, result + "操作用户:" + CurrentHelper.User.USER_NO);
  512. }
  513. else
  514. {
  515. result = string.Format("任务[{0}]不需要重下堆垛机。", task.TASK_NO);
  516. }
  517. }
  518. else if (taskStatusType == TaskStatusType.重下输送机)
  519. {
  520. if (task.TASK_WKSTATUS != (int)WkStatus.堆垛机执行)
  521. {
  522. if (task.TASK_COMTYPE == 1 || task.TASK_COMTYPE == 4)//入库,移动
  523. {
  524. task.TASK_WKSTATUS = 0;
  525. task.TASK_POSIDNEXT = task.TASK_POSIDFROM;
  526. task.TASK_POSIDCUR = task.TASK_POSIDFROM;
  527. task.TASK_EDITUSERNO = CurrentHelper.User.USER_NO;
  528. task.TASK_EDITDATETIME = DateTime.Now;
  529. db.Updateable(task).UpdateColumns(it => new { it.TASK_WKSTATUS, it.TASK_POSIDNEXT, it.TASK_POSIDCUR, it.TASK_EDITUSERNO, it.TASK_EDITDATETIME }).ExecuteCommand();
  530. result = string.Format("任务[{0}]重下输送机成功。");
  531. AddWCS_TASK_DTL(db, task.TASK_NO, task.TASK_NO, task.TASK_POSIDCUR, task.TASK_POSIDNEXT, result + "操作用户:" + CurrentHelper.User.USER_NO);
  532. }
  533. else
  534. {
  535. //出库,移库
  536. result = string.Format("出库和移库任务[{0}]不能重下输送机。", task.TASK_NO);
  537. }
  538. }
  539. else
  540. {
  541. result = string.Format("任务[{0}]状态为[堆垛机执行]不能重下输送机。", task.TASK_NO);
  542. }
  543. }
  544. else if (taskStatusType == TaskStatusType.重下RGV上料 && task.TASK_WKSTATUS == (int)WkStatus.RGV上料执行)
  545. {
  546. task.TASK_WKSTATUS = 2;
  547. task.TASK_EDITUSERNO = CurrentHelper.User.USER_NO;
  548. task.TASK_EDITDATETIME = DateTime.Now;
  549. db.Updateable(task).UpdateColumns(it => new { it.TASK_WKSTATUS, it.TASK_EDITUSERNO, it.TASK_EDITDATETIME }).ExecuteCommand();
  550. var task_dtlSet = db.Queryable<WCS_TASK_DTL>().Where(v => v.PARENTID == task.TASK_NO).ToList();
  551. var task_dtl = task_dtlSet.FirstOrDefault(v => v.DESCRIPTION.Contains("上料到RGV工位"));
  552. int index = task_dtl.DESCRIPTION.IndexOf("上料到RGV工位");
  553. int tempindex = task_dtl.DESCRIPTION.IndexOf('[', index);
  554. string conveyerNo = task_dtl.DESCRIPTION.Substring(tempindex + 1, 4);
  555. //解锁
  556. db.Updateable<WCS_EQUIPMENTLOCK>().UpdateColumns(it => new WCS_EQUIPMENTLOCK { ISLOCK = false }).Where(v => v.EQUIPMENTNO == conveyerNo).ExecuteCommand();
  557. result = string.Format("任务[{0}]重下RGV上料成功。");
  558. AddWCS_TASK_DTL(db, task.TASK_NO, task.TASK_NO, task.TASK_POSIDCUR, task.TASK_POSIDNEXT, result + "操作用户:" + CurrentHelper.User.USER_NO);
  559. }
  560. else if (taskStatusType == TaskStatusType.重下RGV下料 && task.TASK_WKSTATUS == (int)WkStatus.RGV下料执行)
  561. {
  562. var task_dtlSet = db.Queryable<WCS_TASK_DTL>().Where(v => v.PARENTID == task.TASK_NO).ToList();
  563. var task_dtl = task_dtlSet.FirstOrDefault(v => v.DESCRIPTION.Contains("上料到RGV工位"));
  564. task.TASK_WKSTATUS = 3;
  565. task.TASK_POSIDNEXT = task_dtl.POSIDNEXT;
  566. task.TASK_EDITUSERNO = CurrentHelper.User.USER_NO;
  567. task.TASK_EDITDATETIME = DateTime.Now;
  568. db.Updateable(task).UpdateColumns(it => new { it.TASK_WKSTATUS, it.TASK_POSIDNEXT, it.TASK_EDITUSERNO, it.TASK_EDITDATETIME }).ExecuteCommand();
  569. int index = task_dtl.DESCRIPTION.IndexOf("上料到RGV工位");
  570. int tempindex = task_dtl.DESCRIPTION.IndexOf('[', index);
  571. string conveyerNo = task_dtl.DESCRIPTION.Substring(tempindex + 1, 4);
  572. //解锁
  573. db.Updateable<WCS_EQUIPMENTLOCK>().UpdateColumns(it => new WCS_EQUIPMENTLOCK { ISLOCK = false }).Where(v => v.EQUIPMENTNO == conveyerNo).ExecuteCommand();
  574. result = string.Format("任务[{0}]重下RGV下料成功。", task.TASK_NO);
  575. AddWCS_TASK_DTL(db, task.TASK_NO, task.TASK_NO, task.TASK_POSIDCUR, task.TASK_POSIDNEXT, result + "操作用户:" + CurrentHelper.User.USER_NO);
  576. }
  577. else if (taskStatusType == TaskStatusType.重下任务)
  578. {
  579. if (task.TASK_COMTYPE == 1)//入库
  580. {
  581. if (task.TASK_POSIDTO.Length < 10)
  582. {
  583. //未分配货位,可重下
  584. task.TASK_WKSTATUS = 0;
  585. task.TASK_POSIDNEXT = task.TASK_POSIDFROM;
  586. task.TASK_POSIDCUR = task.TASK_POSIDFROM;
  587. task.TASK_EDITUSERNO = CurrentHelper.User.USER_NO;
  588. task.TASK_EDITDATETIME = DateTime.Now;
  589. db.Updateable(task).UpdateColumns(it => new { it.TASK_WKSTATUS, it.TASK_POSIDNEXT, it.TASK_POSIDCUR, it.TASK_EDITUSERNO, it.TASK_EDITDATETIME }).ExecuteCommand();
  590. result = string.Format("任务[{0}]重新下发成功。", task.TASK_NO);
  591. AddWCS_TASK_DTL(db, task.TASK_NO, task.TASK_NO, task.TASK_POSIDCUR, task.TASK_POSIDNEXT, result + "操作用户:" + CurrentHelper.User.USER_NO);
  592. }
  593. }
  594. else if (task.TASK_COMTYPE == 4)//移动
  595. {
  596. if (task.TASK_WKSTATUS == 0)
  597. {
  598. result = string.Format("任务[{0}]未下发,不需要重下任务。", task.TASK_NO);
  599. }
  600. else
  601. {
  602. //移动任务,可重下
  603. task.TASK_WKSTATUS = 0;
  604. task.TASK_POSIDNEXT = task.TASK_POSIDFROM;
  605. task.TASK_POSIDCUR = task.TASK_POSIDFROM;
  606. task.TASK_EDITUSERNO = CurrentHelper.User.USER_NO;
  607. task.TASK_EDITDATETIME = DateTime.Now;
  608. db.Updateable(task).UpdateColumns(it => new { it.TASK_WKSTATUS, it.TASK_POSIDNEXT, it.TASK_POSIDCUR, it.TASK_EDITUSERNO, it.TASK_EDITDATETIME }).ExecuteCommand();
  609. result = string.Format("任务[{0}]重新下发成功。", task.TASK_NO);
  610. AddWCS_TASK_DTL(db, task.TASK_NO, task.TASK_NO, task.TASK_POSIDCUR, task.TASK_POSIDNEXT, result + "操作用户:" + CurrentHelper.User.USER_NO);
  611. }
  612. }
  613. else if (task.TASK_COMTYPE == 2 || task.TASK_COMTYPE == 3)//出库,移库
  614. {
  615. result = string.Format("任务[{0}]是出库或移库任务,请使用[重下堆垛机]功能。", task.TASK_NO);
  616. }
  617. }
  618. if (string.IsNullOrWhiteSpace(result))
  619. {
  620. throw new Exception(string.Format("任务[{0}]该状态下不支持[{1}]", task.TASK_NO, taskStatusType));
  621. }
  622. });
  623. }
  624. catch (Exception ex)
  625. {
  626. result = ex.Message;
  627. LogHelper.Sys_Log.WriteLog(ex.ToString());
  628. }
  629. return result;
  630. }
  631. public static string TaskFinish(string taskno)
  632. {
  633. string result = string.Empty;
  634. try
  635. {
  636. WCS_TASK task = null;
  637. TryCachHelper.TryExecute((db) =>
  638. {
  639. int task_no = Convert.ToInt32(taskno);
  640. task = db.Queryable<WCS_TASK>().First(v => v.TASK_NO == task_no);
  641. });
  642. if (task != null)
  643. {
  644. if (task.TASK_COMTYPE == 1 || task.TASK_COMTYPE == 3)
  645. {
  646. if (task.TASK_WKSTATUS == (int)WkStatus.堆垛机执行 && task.TASK_POSIDTO.Length > 10)
  647. {
  648. result = TaskComplete(task.TASK_NO, task.TASK_COMTYPE);
  649. }
  650. else
  651. {
  652. result = string.Format("任务[{0}]当前状态不可手动完成。", taskno);
  653. }
  654. }
  655. else if (task.TASK_COMTYPE == 2 || task.TASK_COMTYPE == 4)
  656. {
  657. if (task.TASK_WKSTATUS == (int)WkStatus.堆垛机执行 || task.TASK_WKSTATUS <= 1)
  658. {
  659. result = string.Format("任务[{0}]当前状态不可手动完成。", taskno);
  660. }
  661. else
  662. {
  663. int tasktype = 4;
  664. result = TaskComplete(task.TASK_NO, tasktype);
  665. }
  666. }
  667. }
  668. }
  669. catch (Exception ex)
  670. {
  671. result = ex.Message;
  672. LogHelper.Sys_Log.WriteLog(ex.ToString());
  673. }
  674. return result;
  675. }
  676. /// <summary>
  677. /// 任务完成
  678. /// </summary>
  679. /// <param name="db"></param>
  680. /// <param name="conveyorOut">设备编号</param>
  681. /// <param name="taskno">任务号</param>
  682. /// <param name="temptype">类型 1:入库任务完成 2:堆垛机出库任务完成 3.移库完成 4:出库任务完成 5:任务取消 6:码盘 6:拆盘</param>
  683. public static string TaskComplete(int taskno, int temptype)
  684. {
  685. string result = string.Empty;
  686. string errorresult = TryCachHelper.TryExecute((db) =>
  687. {
  688. string status = "N";
  689. string MESSAGE = string.Empty;
  690. var outputResult = db.Ado.UseStoredProcedure<dynamic>(() =>
  691. {
  692. string spName = "BZ_TASKCOMPLETE";
  693. var p1 = new SugarParameter("@TEMPTASKNO", taskno);// 任务号
  694. var p2 = new SugarParameter("@TEMPTYPE", temptype);//类型(出库任务完成)
  695. var p3 = new SugarParameter("@STATUS", null, true);//反馈状态 Y:成功 N:失败
  696. var p4 = new SugarParameter("@MESSAGE", null, true);//反馈消息
  697. var dbResult = db.Ado.ExecuteCommand(spName, new SugarParameter[] { p1, p2, p3, p4 });
  698. status = p3.Value.ToString();
  699. MESSAGE = p4.Value.ToString();
  700. return dbResult;
  701. });
  702. if (status.Trim().ToUpper() == "N")
  703. {
  704. result = string.Format("任务[{0}]手动完成失败,传递参数:任务号[{1}]类型[{2}]反馈消息:[{3}]",
  705. taskno, taskno, temptype, MESSAGE);
  706. }
  707. else
  708. {
  709. result = string.Format("任务[{0}]手动完成成功。", taskno);
  710. }
  711. });
  712. if (!string.IsNullOrEmpty(errorresult)) result = errorresult;
  713. return result;
  714. }
  715. public static DateTime QuerySystemDate()
  716. {
  717. DateTime dt = DateTime.MinValue;
  718. TryCachHelper.TryExecute((db) =>
  719. {
  720. dt = db.Ado.GetDateTime("select sysdate from dual");
  721. });
  722. return dt;
  723. }
  724. public static void Equipment_UpdateLock(string equipmentNo, bool islock)
  725. {
  726. TryCachHelper.TryExecute((db) =>
  727. {
  728. db.Updateable<WCS_EQUIPMENTLOCK>().UpdateColumns(it => new WCS_EQUIPMENTLOCK() { ISLOCK = islock, UPDATETIME = DateTime.Now })
  729. .Where(it => it.EQUIPMENTNO == equipmentNo).ExecuteCommand();
  730. });
  731. }
  732. public static List<Frm.WCS_EQUIPMENTINFO> QueryStackerdData(List<string> plcnameSet)
  733. {
  734. var stackerdDataSet = new List<Frm.WCS_EQUIPMENTINFO>();
  735. TryCachHelper.TryExecute((db) =>
  736. {
  737. stackerdDataSet = db.Queryable<Frm.WCS_EQUIPMENTINFO>().Where(v => plcnameSet.Contains(v.Equ_PlcName)).ToList();
  738. });
  739. return stackerdDataSet;
  740. }
  741. public static List<WCS_TASK> QueryTasks()
  742. {
  743. var tasks = new List<WCS_TASK>();
  744. TryCachHelper.TryExecute((db) =>
  745. {
  746. tasks = db.Queryable<WCS_TASK>().ToList();
  747. });
  748. return tasks;
  749. }
  750. public static void TaskUpdatePriority(SqlSugarClient db, int task_no, int priority)
  751. {
  752. if (db.Updateable<WCS_TASK>()
  753. .UpdateColumns(it => new WCS_TASK
  754. {
  755. TASK_PRIORITY = priority,
  756. })
  757. .Where(v => v.TASK_NO == task_no).ExecuteCommand() < 0)
  758. {
  759. throw new Exception(string.Format("任务[{0}]修改优先级为[{0}]失败", task_no, priority));
  760. }
  761. }
  762. /// <summary>
  763. /// 任务完成
  764. /// </summary>
  765. /// <param name="task_no"></param>
  766. /// <param name="finishType"></param>
  767. /// <param name="message"></param>
  768. /// <returns></returns>
  769. public static bool BZ_TASKCOMPLETE(int task_no, int finishType, out string message)
  770. {
  771. message = string.Empty;
  772. return true;
  773. }
  774. /// <summary>
  775. /// 任务取消
  776. /// </summary>
  777. /// <param name="task_no">任务号</param>
  778. /// <param name="msg">消息</param>
  779. /// <returns>是否取消成功</returns>
  780. public static bool TaskCancel(int task_no, out string msg)
  781. {
  782. msg = string.Empty;
  783. return true;
  784. }
  785. public static string RestartTask(int task_no)
  786. {
  787. string result = TryCachHelper.TryExecute((db) =>
  788. {
  789. var task = db.Queryable<WCS_TASK>().First(v => v.TASK_NO == task_no);
  790. if (task == null)
  791. {
  792. throw new Exception(string.Format("未查询到[{0}]信息", task_no));
  793. }
  794. else
  795. {
  796. if ((task.TASK_WKSTATUS == 2 && task.TASK_POSIDCUR == task.TASK_POSIDFROM) || task.TASK_WKSTATUS == 5)
  797. {
  798. if (db.Updateable<WCS_TASK>()
  799. .UpdateColumns(it => new WCS_TASK
  800. {
  801. TASK_WKSTATUS = 1,
  802. TASK_EDITDATETIME = DateTime.Now
  803. })
  804. .Where(v => v.TASK_NO == task_no).ExecuteCommand() < 0)
  805. {
  806. throw new Exception(string.Format("任务[{0}]重置失败", task_no));
  807. }
  808. }
  809. else
  810. {
  811. throw new Exception(string.Format("任务[{0}]不能执行[重下任务]", task_no));
  812. }
  813. }
  814. });
  815. return result;
  816. }
  817. public static string SrmInfoSet(string convNo, bool isStop)
  818. {
  819. string result = TryCachHelper.TryExecute((db) =>
  820. {
  821. var srmoutinInfo = db.Queryable<WCS_SRMOUTININFO>().First(v => v.SRMOUTIN_CONVNO == convNo);
  822. if (srmoutinInfo == null)
  823. {
  824. throw new Exception(string.Format("未查询到堆垛机出入口[{0}]信息", convNo));
  825. }
  826. else
  827. {
  828. if (db.Updateable<WCS_SRMOUTININFO>()
  829. .UpdateColumns(it => new WCS_SRMOUTININFO
  830. {
  831. SRMOUTIN_ISSTOP = isStop,
  832. SRMOUTIN_ISUPDATE = true
  833. })
  834. .Where(v => v.SRMOUTIN_CONVNO == convNo).ExecuteCommand() < 0)
  835. {
  836. throw new Exception(string.Format("堆垛机出入口[{0}]禁(启)用失败", convNo));
  837. }
  838. //else
  839. //{
  840. // //与AGV共口也需禁用掉
  841. // var rgvoutinInfo = db.Queryable<WCS_RGVOutInInfo>().First(v => v.RGVOUTIN_CONVNO == convNo);
  842. // if (rgvoutinInfo != null)
  843. // {
  844. // if (db.Updateable<WCS_RGVOutInInfo>()
  845. // .UpdateColumns(it => new WCS_RGVOutInInfo
  846. // {
  847. // RGVOUTIN_ISSTOP = isStop
  848. // })
  849. // .Where(v => v.RGVOUTIN_CONVNO == convNo).ExecuteCommand() < 0)
  850. // {
  851. // throw new Exception(string.Format("AGV出入口[{0}]禁(启)用失败", convNo));
  852. // }
  853. // }
  854. //}
  855. }
  856. });
  857. return result;
  858. }
  859. public static string AgvSet(int convNo, bool enable,string LCName)
  860. {
  861. string result = TryCachHelper.TryExecute((db) =>
  862. {
  863. var srmoutinInfo = db.Queryable<WCS_AGV_Config>().First(v => v.WORKSHOP == convNo);
  864. if (srmoutinInfo == null)
  865. {
  866. throw new Exception(string.Format("未查询到车间[{0}]信息", convNo));
  867. }
  868. else
  869. {
  870. if (LCName == "btn_InEnable")
  871. {
  872. if (db.Updateable<WCS_AGV_Config>()
  873. .UpdateColumns(it => new WCS_AGV_Config
  874. {
  875. INENABLE = enable,
  876. TASK_EDITUSERNO = CurrentHelper.User.USER_NO,
  877. TASK_EDITDATETIME = DateTime.Now,
  878. TASK_EDIT_FUNC = "入库启用"
  879. })
  880. .Where(v => v.WORKSHOP == convNo).ExecuteCommand() < 0)
  881. {
  882. throw new Exception(string.Format("车间[{0}]入库启用失败", convNo));
  883. }
  884. }
  885. else if (LCName == "btn_OutEnable")
  886. {
  887. if (db.Updateable<WCS_AGV_Config>()
  888. .UpdateColumns(it => new WCS_AGV_Config
  889. {
  890. OUTENABLE = enable,
  891. TASK_EDITUSERNO = CurrentHelper.User.USER_NO,
  892. TASK_EDITDATETIME = DateTime.Now,
  893. TASK_EDIT_FUNC="出库启用"
  894. })
  895. .Where(v => v.WORKSHOP == convNo).ExecuteCommand() < 0)
  896. {
  897. throw new Exception(string.Format("车间[{0}]出库启用失败", convNo));
  898. }
  899. }
  900. else if (LCName == "btn_InStop")
  901. {
  902. if (db.Updateable<WCS_AGV_Config>()
  903. .UpdateColumns(it => new WCS_AGV_Config
  904. {
  905. INENABLE = enable,
  906. TASK_EDITUSERNO = CurrentHelper.User.USER_NO,
  907. TASK_EDITDATETIME = DateTime.Now,
  908. TASK_EDIT_FUNC = "入库停用"
  909. })
  910. .Where(v => v.WORKSHOP == convNo).ExecuteCommand() < 0)
  911. {
  912. throw new Exception(string.Format("车间[{0}]入库停用失败", convNo));
  913. }
  914. }
  915. else if (LCName == "btn_OutStop")
  916. {
  917. if (db.Updateable<WCS_AGV_Config>()
  918. .UpdateColumns(it => new WCS_AGV_Config
  919. {
  920. OUTENABLE = enable,
  921. TASK_EDITUSERNO = CurrentHelper.User.USER_NO,
  922. TASK_EDITDATETIME = DateTime.Now,
  923. TASK_EDIT_FUNC = "出库停用"
  924. })
  925. .Where(v => v.WORKSHOP == convNo).ExecuteCommand() < 0)
  926. {
  927. throw new Exception(string.Format("车间[{0}]出库停用失败", convNo));
  928. }
  929. }
  930. }
  931. });
  932. return result;
  933. }
  934. public static string ScanConvInfoSet(string convNo, bool isUsed)
  935. {
  936. string result = TryCachHelper.TryExecute((db) =>
  937. {
  938. var srmoutinInfo = db.Queryable<WCS_SCANN>().First(v => v.SCANN_STATIONNO == convNo);
  939. if (srmoutinInfo == null)
  940. {
  941. throw new Exception(string.Format("未查询到扫码入口[{0}]信息", convNo));
  942. }
  943. else
  944. {
  945. if (db.Updateable<WCS_SCANN>()
  946. .UpdateColumns(it => new WCS_SCANN
  947. {
  948. SCANN_ISUSED = isUsed
  949. })
  950. .Where(v => v.SCANN_STATIONNO == convNo).ExecuteCommand() < 0)
  951. {
  952. throw new Exception(string.Format("扫码入口[{0}]禁(启)用失败", convNo));
  953. }
  954. }
  955. });
  956. return result;
  957. }
  958. public static string OnUpMatRestart(int task_no)
  959. {
  960. string result = TryCachHelper.TryExecute((db) =>
  961. {
  962. var task = db.Queryable<WCS_TASK>().First(v => v.TASK_NO == task_no);
  963. if (task == null)
  964. {
  965. throw new Exception(string.Format("未查询到[{0}]信息", task_no));
  966. }
  967. else
  968. {
  969. if (task.TASK_WKSTATUS == 7)
  970. {
  971. if (db.Updateable<WCS_TASK>()
  972. .UpdateColumns(it => new WCS_TASK
  973. {
  974. TASK_WKSTATUS = 2,
  975. TASK_RGVNO = "",
  976. TASK_POSIDCUR = task.TASK_ITEM4,
  977. TASK_POSIDNEXT = task.TASK_ITEM4,
  978. TASK_EDITDATETIME = DateTime.Now
  979. })
  980. .Where(v => v.TASK_NO == task_no).ExecuteCommand() < 0)
  981. {
  982. throw new Exception(string.Format("任务[{0}]上下料重下RGV失败", task_no));
  983. }
  984. }
  985. else
  986. {
  987. throw new Exception(string.Format("任务[{0}]不能执行[上下料重下RGV].", task_no));
  988. }
  989. }
  990. });
  991. return result;
  992. }
  993. public static string OnMatRestart(int task_no)
  994. {
  995. string result = TryCachHelper.TryExecute((db) =>
  996. {
  997. var task = db.Queryable<WCS_TASK>().First(v => v.TASK_NO == task_no);
  998. if (task == null)
  999. {
  1000. throw new Exception(string.Format("未查询到[{0}]信息", task_no));
  1001. }
  1002. else
  1003. {
  1004. if (task.TASK_WKSTATUS == 3|| task.TASK_WKSTATUS == 7 || task.TASK_WKSTATUS == 8)
  1005. {
  1006. if (db.Updateable<WCS_TASK>()
  1007. .UpdateColumns(it => new WCS_TASK
  1008. {
  1009. TASK_WKSTATUS = 2,
  1010. TASK_RGVNO = "",
  1011. //TASK_POSIDCUR = task.TASK_POSIDNEXT,
  1012. TASK_POSIDCUR = task.TASK_ITEM4,//rgv取货地址
  1013. TASK_POSIDNEXT = task.TASK_ITEM4,
  1014. TASK_EDITUSERNO = "wcs",
  1015. TASK_EDITDATETIME = DateTime.Now
  1016. })
  1017. .Where(v => v.TASK_NO == task_no).ExecuteCommand() < 0)
  1018. {
  1019. throw new Exception(string.Format("任务[{0}]上料重下RGV失败", task_no));
  1020. }
  1021. }
  1022. else
  1023. {
  1024. throw new Exception(string.Format("任务[{0}]不能执行[上料重下RGV].", task_no));
  1025. }
  1026. }
  1027. });
  1028. return result;
  1029. }
  1030. public static string UpMatRestart(int task_no)
  1031. {
  1032. string result = TryCachHelper.TryExecute((db) =>
  1033. {
  1034. var task = db.Queryable<WCS_TASK>().First(v => v.TASK_NO == task_no);
  1035. if (task == null)
  1036. {
  1037. throw new Exception(string.Format("未查询到[{0}]信息", task_no));
  1038. }
  1039. else
  1040. {
  1041. if (task.TASK_WKSTATUS == 4)
  1042. {
  1043. if (db.Updateable<WCS_TASK>()
  1044. .UpdateColumns(it => new WCS_TASK
  1045. {
  1046. TASK_WKSTATUS = 3,
  1047. TASK_RGVNO = "",
  1048. TASK_POSIDCUR = task.TASK_RGVNO,
  1049. TASK_POSIDNEXT = task.TASK_ITEM4,//起点地址
  1050. TASK_EDITUSERNO = "wcs",
  1051. TASK_EDITDATETIME = DateTime.Now
  1052. })
  1053. .Where(v => v.TASK_NO == task_no).ExecuteCommand() < 0)
  1054. {
  1055. throw new Exception(string.Format("任务[{0}]下料重下RGV失败", task_no));
  1056. }
  1057. }
  1058. else
  1059. {
  1060. throw new Exception(string.Format("任务[{0}]不能执行[下料重下RGV].", task_no));
  1061. }
  1062. }
  1063. });
  1064. return result;
  1065. }
  1066. public static string FinishTask(int task_no)
  1067. {
  1068. string result = TryCachHelper.TryExecute((db) =>
  1069. {
  1070. var task = db.Queryable<WCS_TASK>().First(v => v.TASK_NO == task_no);
  1071. if (task == null)
  1072. {
  1073. throw new Exception(string.Format("未查询到[{0}]信息", task_no));
  1074. }
  1075. else
  1076. {
  1077. if (task.TASK_COMTYPE == 1)
  1078. {
  1079. if (task.TASK_POSIDTO.Length >= 10 && task.TASK_WKSTATUS > 1)
  1080. {
  1081. if (db.Updateable<WCS_TASK>()
  1082. .UpdateColumns(it => new WCS_TASK
  1083. {
  1084. TASK_WKSTATUS = 109,
  1085. TASK_EDITUSERNO = CurrentHelper.User.USER_NO,
  1086. TASK_EDITDATETIME = DateTime.Now
  1087. })
  1088. .Where(v => v.TASK_NO == task_no).ExecuteCommand() < 0)
  1089. {
  1090. throw new Exception(string.Format("任务[{0}]手动完成失败", task_no));
  1091. }
  1092. }
  1093. else
  1094. {
  1095. throw new Exception(string.Format("任务[{0}]未分配货位,不能执行[手动完成].", task_no));
  1096. }
  1097. }
  1098. else
  1099. {
  1100. if (task.TASK_COMTYPE == 2 && (task.TASK_POSIDTO == "1072" || task.TASK_POSIDTO == "1036" || task.TASK_POSIDTO == "1035"))
  1101. {
  1102. throw new Exception(string.Format("任务[{0}]和二坐标相关,不能手动完成。", task.TASK_NO));
  1103. }
  1104. if (task.TASK_WKSTATUS > 1)
  1105. {
  1106. if (db.Updateable<WCS_TASK>()
  1107. .UpdateColumns(it => new WCS_TASK
  1108. {
  1109. TASK_WKSTATUS = 109,
  1110. TASK_EDITUSERNO = CurrentHelper.User.USER_NO,
  1111. TASK_EDITDATETIME = DateTime.Now
  1112. })
  1113. .Where(v => v.TASK_NO == task_no).ExecuteCommand() < 0)
  1114. {
  1115. throw new Exception(string.Format("任务[{0}]手动完成失败", task_no));
  1116. }
  1117. }
  1118. else
  1119. {
  1120. throw new Exception(string.Format("任务[{0}]未执行,不能执行[手动完成].", task_no));
  1121. }
  1122. }
  1123. }
  1124. });
  1125. return result;
  1126. }
  1127. public static string FinishAGVTask(int task_no)
  1128. {
  1129. string result = TryCachHelper.TryExecute((db) =>
  1130. {
  1131. var task = db.Queryable<WCS_TASK>().First(v => v.TASK_NO == task_no);
  1132. if (task == null)
  1133. {
  1134. throw new Exception(string.Format("未查询到[{0}]信息", task_no));
  1135. }
  1136. else
  1137. {
  1138. if (task.TASK_WKSTATUS == (int)WkStatus.RGV上料执行|| task.TASK_WKSTATUS == (int)WkStatus.RGV下料执行|| task.TASK_WKSTATUS == (int)WkStatus.RGV移动|| task.TASK_WKSTATUS == (int)WkStatus.RGV执行中)
  1139. {
  1140. if (db.Updateable<WCS_TASK>()
  1141. .UpdateColumns(it => new WCS_TASK
  1142. {
  1143. TASK_WKSTATUS = (int)WkStatus.RGV完成,
  1144. TASK_RGVNO = "",
  1145. TASK_POSIDCUR = task.TASK_POSIDNEXT,
  1146. TASK_EDITUSERNO = CurrentHelper.User.USER_NO,
  1147. TASK_EDITDATETIME = DateTime.Now
  1148. })
  1149. .Where(v => v.TASK_NO == task_no).ExecuteCommand() < 0)
  1150. {
  1151. throw new Exception(string.Format("任务[{0}]手动完成RGV任务失败", task_no));
  1152. }
  1153. }
  1154. else
  1155. {
  1156. throw new Exception(string.Format("任务[{0}]状态不符合手动完成rgv任务条件,不能执行[手动完成RGV任务].", task_no));
  1157. }
  1158. }
  1159. });
  1160. return result;
  1161. }
  1162. public static string ClearTask(int task_no)
  1163. {
  1164. string result = TryCachHelper.TryTranExecute((db) =>
  1165. {
  1166. var task = db.Queryable<WCS_TASK>().First(v => v.TASK_NO == task_no);
  1167. if (task == null)
  1168. {
  1169. throw new Exception(string.Format("未查询到[{0}]信息", task_no));
  1170. }
  1171. else
  1172. {
  1173. if (task.TASK_COMTYPE == 2)
  1174. {
  1175. if (task.TASK_COMTYPE == 2 && (task.TASK_POSIDTO == "1072" || task.TASK_POSIDTO == "1036" || task.TASK_POSIDTO == "1035"))
  1176. {
  1177. throw new Exception(string.Format("任务[{0}]和二坐标相关,不能取消任务。", task.TASK_NO));
  1178. }
  1179. if (task.TASK_WKSTATUS <= 1 || task.TASK_WKSTATUS == 5)
  1180. {
  1181. if (db.Updateable<WCS_TASK>()
  1182. .UpdateColumns(it => new WCS_TASK
  1183. {
  1184. TASK_WKSTATUS = 106,
  1185. TASK_EDITDATETIME = DateTime.Now
  1186. })
  1187. .Where(v => v.TASK_NO == task_no).ExecuteCommand() < 0)
  1188. {
  1189. throw new Exception(string.Format("任务[{0}]取消失败", task_no));
  1190. }
  1191. int task_id = string.IsNullOrWhiteSpace(task.TASK_ITEM8) ? 0 : Convert.ToInt32(task.TASK_ITEM8);
  1192. //检测是否存在agv任务,有则取消
  1193. var agvtask = db.Queryable<WCS.Data.Models.Middle_AGVTask>().First(v => v.Task_Id == task_id && (v.Task_WcsStatus == 0 || v.Task_WcsStatus == 5));
  1194. if (agvtask != null)
  1195. {
  1196. if (db.Updateable<WCS.Data.Models.Middle_AGVTask>()
  1197. .UpdateColumns(it => new WCS.Data.Models.Middle_AGVTask
  1198. {
  1199. Task_WcsStatus = 106,
  1200. Task_UpdateUser = "wcs",
  1201. Task_UpdateDate = DateTime.Now
  1202. })
  1203. .Where(v => v.Task_Id == task_id).ExecuteCommand() < 0)
  1204. {
  1205. throw new Exception(string.Format("agv任务[{0}]取消失败", task_no));
  1206. }
  1207. }
  1208. }
  1209. else
  1210. {
  1211. throw new Exception(string.Format("任务[{0}]当前状态不允许取消", task_no));
  1212. }
  1213. }
  1214. else
  1215. {
  1216. if (task.TASK_WKSTATUS < 99)
  1217. {
  1218. if (db.Updateable<WCS_TASK>()
  1219. .UpdateColumns(it => new WCS_TASK
  1220. {
  1221. TASK_WKSTATUS = 106,
  1222. TASK_EDITDATETIME = DateTime.Now
  1223. })
  1224. .Where(v => v.TASK_NO == task_no).ExecuteCommand() < 0)
  1225. {
  1226. throw new Exception(string.Format("任务[{0}]取消失败", task_no));
  1227. }
  1228. }
  1229. else
  1230. {
  1231. throw new Exception(string.Format("任务[{0}]已完成或已取消,不能执行取消动作。", task_no));
  1232. }
  1233. }
  1234. }
  1235. });
  1236. return result;
  1237. }
  1238. public static string UdpateEndAddress(int task_no, string whid, string srm)
  1239. {
  1240. string nextAddress = string.Empty;
  1241. var dicSet = new Dictionary<string, string>();
  1242. string result = TryCachHelper.TryTranExecute((db) =>
  1243. {
  1244. if (string.IsNullOrWhiteSpace(srm))
  1245. {
  1246. throw new Exception(string.Format("请选择要变更的堆垛机"));
  1247. }
  1248. if (whid == "原料库")
  1249. {
  1250. dicSet.Add("srm01", "1092");
  1251. dicSet.Add("srm02", "1094");
  1252. dicSet.Add("srm03", "1096");
  1253. dicSet.Add("srm04", "1098");
  1254. dicSet.Add("srm05", "1100");
  1255. }
  1256. else if (whid == "成品库")
  1257. {
  1258. dicSet.Add("srm06", "2324");
  1259. dicSet.Add("srm07", "2320");
  1260. dicSet.Add("srm08", "2316");
  1261. dicSet.Add("srm09", "2312");
  1262. dicSet.Add("srm10", "2308");
  1263. dicSet.Add("srm11", "2304");
  1264. }
  1265. else
  1266. {
  1267. throw new Exception(string.Format("仓库[{0}]错误。", whid));
  1268. }
  1269. nextAddress = dicSet[srm];
  1270. var task = db.Queryable<WCS_TASK>().First(v => v.TASK_NO == task_no);
  1271. if (task == null)
  1272. {
  1273. throw new Exception(string.Format("未查询到[{0}]信息", task_no));
  1274. }
  1275. else
  1276. {
  1277. if (task.TASK_POSIDTO.Length >= 10)
  1278. {
  1279. throw new Exception(string.Format("任务[{0}]已经分配货位,不能变更目标地址。", task_no));
  1280. }
  1281. else
  1282. {
  1283. if (db.Updateable<WCS_TASK>()
  1284. .UpdateColumns(it => new WCS_TASK
  1285. {
  1286. TASK_POSIDNEXT = nextAddress,
  1287. TASK_POSIDTO = srm,
  1288. TASK_SRMNO = srm,
  1289. TASK_EndTunnelNum = srm,
  1290. TASK_EDITUSERNO = CurrentHelper.User.Use_Name,
  1291. TASK_EDITDATETIME = DateTime.Now
  1292. })
  1293. .Where(v => v.TASK_NO == task_no).ExecuteCommand() < 0)
  1294. {
  1295. throw new Exception(string.Format("任务[{0}]修改目标地址失败", task_no));
  1296. }
  1297. string msg = string.Format("任务[{0}]手动修改下个地址为[{1}]目标地址为[{2}]成功。", task_no, nextAddress, srm);
  1298. var task_dtl = new WCS_TASK_DTL();
  1299. task_dtl.ID = Guid.NewGuid().ToString();
  1300. task_dtl.PARENTID = task_no;
  1301. task_dtl.TASKNO = task_no.ToString();
  1302. task_dtl.POSIDCUR = task.TASK_POSIDCUR;
  1303. task_dtl.POSIDNEXT = nextAddress;
  1304. task_dtl.DESCRIPTION = msg;
  1305. task_dtl.EXECUTEDATE = DateTime.Now;
  1306. db.Insertable(task_dtl).ExecuteCommand();
  1307. }
  1308. }
  1309. });
  1310. if (string.IsNullOrWhiteSpace(result))
  1311. {
  1312. result = string.Format("任务[{0}]修改下个地址为[{1}]目标地址为[{2}]成功。", task_no, nextAddress, srm);
  1313. }
  1314. return result;
  1315. }
  1316. public static string UpdateTaskPriority(int task_no,int priority)
  1317. {
  1318. string result = TryCachHelper.TryTranExecute((db) =>
  1319. {
  1320. var task = db.Queryable<WCS_TASK>().First(v => v.TASK_NO == task_no);
  1321. if (task == null)
  1322. {
  1323. throw new Exception(string.Format("未查询到WCS任务[{0}]信息", task_no));
  1324. }
  1325. else
  1326. {
  1327. if (db.Updateable<WCS_TASK>()
  1328. .UpdateColumns(it => new WCS_TASK
  1329. {
  1330. TASK_PRIORITY = priority,
  1331. TASK_EDITUSERNO = CurrentHelper.User.Use_Name,
  1332. TASK_EDITDATETIME = DateTime.Now
  1333. })
  1334. .Where(v => v.TASK_NO == task_no).ExecuteCommand() < 0)
  1335. {
  1336. throw new Exception(string.Format("WCS任务[{0}]调整优先级失败", task_no));
  1337. }
  1338. string msg = string.Format("任务[{0}]调整优先级为[{1}]成功。", task_no, priority);
  1339. var task_dtl = new WCS_TASK_DTL();
  1340. task_dtl.ID = Guid.NewGuid().ToString();
  1341. task_dtl.PARENTID = task_no;
  1342. task_dtl.TASKNO = task_no.ToString();
  1343. task_dtl.POSIDCUR = task.TASK_POSIDCUR;
  1344. task_dtl.POSIDNEXT = task.TASK_POSIDNEXT;
  1345. task_dtl.DESCRIPTION = msg;
  1346. task_dtl.EXECUTEDATE = DateTime.Now;
  1347. db.Insertable(task_dtl).ExecuteCommand();
  1348. }
  1349. });
  1350. if (string.IsNullOrWhiteSpace(result))
  1351. {
  1352. result = string.Format("任务[{0}]调整优先级[{1}]成功。", task_no, priority);
  1353. }
  1354. return result;
  1355. }
  1356. public static string UdpateEndAddress(int task_no, string task_posidto)
  1357. {
  1358. string result = TryCachHelper.TryTranExecute((db) =>
  1359. {
  1360. var task = db.Queryable<WCS_TASK>().First(v => v.TASK_NO == task_no);
  1361. if (task == null)
  1362. {
  1363. throw new Exception(string.Format("未查询到WCS任务[{0}]信息", task_no));
  1364. }
  1365. else
  1366. {
  1367. string msg = "";
  1368. string taskPosidcur = task.TASK_POSIDCUR == task.TASK_POSIDFROM ? task.TASK_SRMNO : task.TASK_POSIDCUR;
  1369. var routeSet = QueryRoute(taskPosidcur, task_posidto)
  1370. .Where(v => v.ROUTE_STARTPOS == taskPosidcur)
  1371. .Select(t => t.ROUTE_SONPOS).ToList();
  1372. if (routeSet.Count == 0)
  1373. throw new Exception(string.Format("WCS任务[{0}]调整目标地址失败,路径不通!", task_no));
  1374. if (db.Updateable<WCS_TASK>()
  1375. .UpdateColumns(it => new WCS_TASK
  1376. {
  1377. TASK_POSIDTO = task_posidto,
  1378. TASK_EDITUSERNO = CurrentHelper.User.Use_Name,
  1379. TASK_EDITDATETIME = DateTime.Now
  1380. })
  1381. .Where(v => v.TASK_ITEM8 == task.TASK_ITEM8 && v.TASK_POSIDTO == task.TASK_POSIDTO).ExecuteCommand() < 0)
  1382. {
  1383. throw new Exception(string.Format("WCS任务[{0}]调整目标地址失败,修改任务表失败!", task_no));
  1384. }
  1385. if (db.Queryable<WCS.Data.Models.Middle_AGVTask>().Any(v => v.Task_Id == int.Parse(task.TASK_ITEM8)))
  1386. {
  1387. string workshopno = task_posidto.Split('_')[1];
  1388. string prolineno = GetTaskProLineNo(task_posidto);
  1389. string posidfrom = "";
  1390. if (workshopno == "4")
  1391. posidfrom = "1097";
  1392. else if (workshopno == "5")
  1393. posidfrom = "1104";
  1394. else if (workshopno == "6")
  1395. posidfrom = "1107";
  1396. else if (workshopno == "7")
  1397. posidfrom = "1112";
  1398. else if (workshopno == "18")
  1399. posidfrom = "1199";
  1400. if (db.Updateable<WCS.Data.Models.Middle_AGVTask>()
  1401. .UpdateColumns(it => new WCS.Data.Models.Middle_AGVTask
  1402. {
  1403. Task_PosidFrom = posidfrom,
  1404. Task_WorkshopNo = workshopno,
  1405. Task_ProLineNo = prolineno,
  1406. Task_PosidTo = task_posidto
  1407. })
  1408. .Where(v => v.Task_Id == int.Parse(task.TASK_ITEM8)).ExecuteCommand() < 0)
  1409. {
  1410. throw new Exception(string.Format("WCS任务[{0}]调整目标地址失败,修改AGV中建表失败!", task_no));
  1411. }
  1412. }
  1413. msg = string.Format("任务[{0}]人工调整目标地址为[{1}]成功。", task_no, task_posidto);
  1414. var task_dtl = new WCS_TASK_DTL();
  1415. task_dtl.ID = Guid.NewGuid().ToString();
  1416. task_dtl.PARENTID = task_no;
  1417. task_dtl.TASKNO = task_no.ToString();
  1418. task_dtl.POSIDCUR = task.TASK_POSIDCUR;
  1419. task_dtl.POSIDNEXT = task.TASK_POSIDNEXT;
  1420. task_dtl.DESCRIPTION = msg;
  1421. task_dtl.EXECUTEDATE = DateTime.Now;
  1422. db.Insertable(task_dtl).ExecuteCommand();
  1423. }
  1424. });
  1425. if (string.IsNullOrWhiteSpace(result))
  1426. {
  1427. result = string.Format("任务[{0}]调整目标地址[{1}]成功。", task_no, task_posidto);
  1428. }
  1429. return result;
  1430. }
  1431. public static string GetTaskProLineNo(string taskposidto)
  1432. {
  1433. string sencond = taskposidto.Split('_')[1];
  1434. string three = taskposidto.Split('_')[2];
  1435. if (three.Contains("Empty"))
  1436. {
  1437. if (sencond == "4")
  1438. {
  1439. return "A、B、C";
  1440. }
  1441. else if (sencond == "5")
  1442. {
  1443. return "D、E、F";
  1444. }
  1445. else if (sencond == "6")
  1446. {
  1447. return "H、G、J";
  1448. }
  1449. else if (sencond == "7")
  1450. {
  1451. return "AK、AA、AB";
  1452. }
  1453. else
  1454. return "";
  1455. }
  1456. else
  1457. {
  1458. return three;
  1459. }
  1460. }
  1461. public static string AddWorkShopTask(string txtcbworkshopno,string txtcbprolineno)
  1462. {
  1463. string result = TryCachHelper.TryTranExecute((db) =>
  1464. {
  1465. var setvalue = db.Queryable<WCS_SYSSET>().Where(v => v.SET_ID.Contains("Agv") && v.SET_ID.Contains(txtcbworkshopno)).First().SET_VALUE;
  1466. if (setvalue == "0")
  1467. {
  1468. throw new Exception("车间agv必须禁用才能使用该功能!");
  1469. }
  1470. //创建AGV任务
  1471. var agvtask = new WCS.Data.Models.Middle_AGVTask()
  1472. {
  1473. Task_Type = 1,
  1474. Task_Whid = "PVC普通立库",
  1475. Task_WorkshopNo = txtcbworkshopno,
  1476. Task_ProLineNo = "",
  1477. Task_WcsStatus = 0,
  1478. Task_PosidTo = txtcbprolineno,
  1479. Task_CreateDate = DateTime.Now,
  1480. Task_CreateUser = "wcs",
  1481. Task_UpdateUser = "wcs",
  1482. Task_UpdateDate = DateTime.Now
  1483. };
  1484. if (agvtask.Task_WorkshopNo == "4")
  1485. agvtask.Task_PosidFrom = "1097";
  1486. else if (agvtask.Task_WorkshopNo == "5")
  1487. agvtask.Task_PosidFrom = "1104";
  1488. else if (agvtask.Task_WorkshopNo == "6")
  1489. agvtask.Task_PosidFrom = "1107";
  1490. else if (agvtask.Task_WorkshopNo == "7")
  1491. agvtask.Task_PosidFrom = "1112";
  1492. else if (agvtask.Task_WorkshopNo == "18")
  1493. agvtask.Task_PosidFrom = "1199";
  1494. int task_id = db.Insertable(agvtask).ExecuteReturnIdentity();
  1495. if (task_id <= 0)
  1496. {
  1497. throw new Exception(string.Format("WCS任务[{0}]添加agv任务失败", task_id));
  1498. }
  1499. });
  1500. if (string.IsNullOrWhiteSpace(result))
  1501. {
  1502. result = string.Format("车间叫料成功!");
  1503. }
  1504. return result;
  1505. }
  1506. public static List<WCS_EQUIPMENTROUTE> QueryRoute(string startPos, string toPos)
  1507. {
  1508. var list = new List<WCS_EQUIPMENTROUTE>();
  1509. string result = TryCachHelper.TryTranExecute((db) =>
  1510. {
  1511. var equRouteS = db.Queryable<WCS_EQUIPMENTROUTE>().Where(v => v.ROUTE_STARTPOS == startPos).ToList().OrderByDescending(v => v.ISEND).ToList();//查询下一个路由地址
  1512. var endroute = equRouteS.Where(v => v.ROUTE_SONPOS == toPos || v.ROUTE_NEXTPOS == toPos);
  1513. if (endroute.Count() > 0)
  1514. {
  1515. //查询到最后的目标地址
  1516. foreach (var item in endroute)
  1517. {
  1518. if (list.Any(v => v.ROUTE_ID == item.ROUTE_ID) == false)
  1519. {
  1520. list.Add(item);
  1521. }
  1522. }
  1523. }
  1524. else
  1525. {
  1526. foreach (var equRoute in equRouteS)
  1527. {
  1528. if (equRoute.ISEND && equRoute.ROUTE_NEXTPOS != toPos && equRoute.ROUTE_NEXTPOS != toPos && equRoute.ROUTE_NOTES != "1")
  1529. {
  1530. //该路由地址为终点出口,并且不是任务的终点位置,则忽略该路由轨迹
  1531. continue;
  1532. }
  1533. var equRoutes = QueryRoute(equRoute.ROUTE_NEXTPOS, toPos);
  1534. foreach (var item in equRoutes)
  1535. {
  1536. if (list.Any(v => v.ROUTE_ID == item.ROUTE_ID) == false)
  1537. {
  1538. list.Add(item);
  1539. }
  1540. if (list.Any(v => v.ROUTE_ID == equRoute.ROUTE_ID) == false)
  1541. {
  1542. list.Add(equRoute);
  1543. }
  1544. }
  1545. }
  1546. }
  1547. });
  1548. return list;
  1549. }
  1550. }
  1551. public class WCS_SCANN
  1552. {
  1553. [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
  1554. public string SCANN_ID { get; set; }
  1555. /// <summary>
  1556. /// 扫描位置编号
  1557. /// </summary>
  1558. public string SCANN_STATIONNO { get; set; }
  1559. /// <summary>
  1560. /// 扫描到的条码
  1561. /// </summary>
  1562. public string SCANN_BARCODE { get; set; }
  1563. /// <summary>
  1564. /// 顺序
  1565. /// </summary>
  1566. public int SCANN_SEQUENCE { get; set; }
  1567. /// <summary>
  1568. /// PLC名称
  1569. /// </summary>
  1570. public string SCANN_PLCNAME { get; set; }
  1571. /// <summary>
  1572. /// 起点地址
  1573. /// </summary>
  1574. public int SCANN_STARTADDRESS { get; set; }
  1575. /// <summary>
  1576. /// 扫描长度
  1577. /// </summary>
  1578. public int SCANN_LENGTH { get; set; }
  1579. public int SCANN_DB_ID { get; set; }
  1580. public int SCANN_VALIDTIMEINTERVAL { get; set; }
  1581. public DateTime SCANN_UPDATETIME { get; set; }
  1582. public bool SCANN_ISUSED { get; set; }
  1583. }
  1584. }