ConvPlc04.cs 52 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024
  1. using SqlSugar;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Threading;
  6. using WCS.Data;
  7. using WCS.Data.Models;
  8. using WCS.Data.Utils;
  9. using WCS.PLC;
  10. using WCS.PLC.Model.Equipment;
  11. namespace WCS.Workflow
  12. {
  13. public class ConvPlc04 : Base_Conv
  14. {
  15. #region 只读变量
  16. private readonly string Conv_1143 = "1143";//4堆垛机出口
  17. private readonly string Conv_1141 = "1141";//5堆垛机出口
  18. private readonly string Conv_1508 = "1508";//熟化房一
  19. private readonly string Conv_1509 = "1509";//熟化房二
  20. private readonly string Conv_1164 = "1164";//熟化房一
  21. private readonly string Conv_1165 = "1165";//熟化房二
  22. private readonly string Conv_1136 = "1136";//熟化房入口一
  23. private readonly string Conv_1138 = "1138";//熟化房入口二
  24. private readonly string Conv_1137 = "1137";//熟化房出口一
  25. private readonly string Conv_1139 = "1139";//熟化房出口二
  26. private readonly string Conv_1161 = "1161";//2号堆垛机出库(3楼男面)
  27. private readonly string Conv_1159 = "1159";//3号堆垛机出库(3楼男面)
  28. private readonly string Conv_1160 = "1160";//3号堆垛机出库(3楼男面)
  29. private readonly string Conv_1152 = "1152";//4号堆垛机出库(3楼男面)
  30. private readonly string Conv_1151 = "1151";//5号堆垛机出库(3楼男面)
  31. private readonly string Conv_1155 = "1155";
  32. private readonly string Conv_1156 = "1156";
  33. private readonly string Conv_1157 = "1157";
  34. private readonly string Conv_1158 = "1158";
  35. #endregion 只读变量
  36. #region 重载实现
  37. public override void Run()
  38. {
  39. //刷新任务数据
  40. WCSWorkflow.RefreshData();
  41. //上传熟化开始结束时间信息
  42. ThreadHelper.TaskThread(MatureSignalGet);
  43. //MatureSignalGet();
  44. //更新熟化连续模式
  45. ThreadHelper.TaskThread(UploadMatureMode);
  46. //堆垛机出口执行
  47. SrmOutConvExeTask();
  48. //输送线执行
  49. ConveyorWriteTaskExecute();
  50. //扫描入库
  51. Conv_ScanBarCodeExeTask();
  52. //更新熟化房当前信息到数据库
  53. ThreadHelper.TaskThread(MatureRoomRefresh);
  54. //任务完成
  55. ConvTaskFinish();
  56. //熟化房申请出库熟化
  57. ThreadHelper.TaskThread(ReqestInByMatureRoom);
  58. //进入熟化房请求确认
  59. RequestInByMatureConv(Conv_1136, Conv_1508);
  60. RequestInByMatureConv(Conv_1138, Conv_1509);
  61. //熟化房完成
  62. MatureConvFinish(Conv_1137, Conv_1508);
  63. MatureConvFinish(Conv_1139, Conv_1509);
  64. //熟化房输送线请求入库
  65. RequestOutByMatureConv(Conv_1137, Conv_1508);
  66. RequestOutByMatureConv(Conv_1139, Conv_1509);
  67. }
  68. #endregion 重载实现
  69. #region 功能实现
  70. private static int _atureRoomRefresh = 0;
  71. private void MatureRoomRefresh()
  72. {
  73. if (Interlocked.Exchange(ref _atureRoomRefresh, 1) == 0)
  74. {
  75. try
  76. {
  77. Thread.Sleep(6000);
  78. var matureRoomSet = SugarBase.DB.Queryable<MatureRoomInfo>().ToList();
  79. List<string> list = new List<string>() { Conv_1508, Conv_1509 };
  80. foreach (var item in list)
  81. {
  82. var plc = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == PlcName);
  83. var conveyor = plc.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == item);
  84. var cs = conveyor.EquSignal_Conv;
  85. bool isOnLine = cs.DB521_Goodstype == 0 ? false : true;
  86. string faultMsg = cs.MatureRoomFault.ToString();
  87. var matureRoom = matureRoomSet.FirstOrDefault(v => v.MatureRoomNo == item);
  88. //修改熟化房的状态
  89. SugarBase.DB.Updateable<MatureRoomInfo>(it => new MatureRoomInfo()
  90. {
  91. MatureRoomTemperat = cs.DB521_Res04,
  92. MatureRoomDate = cs.DB521_Goodssize,
  93. MatureRoomIsOnLine = isOnLine,
  94. MatureRoomMode = cs.DB521_Goodsstart,
  95. MatureRoomTangentStatus = cs.DB521_Goodsend,
  96. MatureRoomAlaramsMsg = faultMsg
  97. })
  98. .Where(it => it.MatureRoomNo == item)
  99. .ExecuteCommand();
  100. }
  101. }
  102. catch (Exception ex)
  103. {
  104. LogMessageHelper.RecordLogMessage(ex);
  105. }
  106. finally
  107. {
  108. Interlocked.Exchange(ref _atureRoomRefresh, 0);
  109. }
  110. }
  111. }
  112. private static int _matureSignalGet = 0;
  113. private void MatureSignalGet()
  114. {
  115. if (Interlocked.Exchange(ref _matureSignalGet, 1) == 0)
  116. {
  117. try
  118. {
  119. List<string> list = new List<string>() { Conv_1164, Conv_1165 };
  120. foreach (var item in list)//1164、1165
  121. {
  122. var plc = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == PlcName);
  123. var conveyor = plc.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == item);
  124. var cs = conveyor.EquSignal_Conv;
  125. // 开始与结束信号已被PLC复位,同时开始与结束确认信号为置位状态,开始复位确认信号
  126. if (!cs.DB521_B_Outside && !cs.DB521_L_Outside && cs.DB520_Confirm && cs.DB520_TaskDelete)
  127. {
  128. var converywrite = new WCSWriteToConveyorSignal();
  129. converywrite.Plc = plc.Plc;
  130. converywrite.DBName = plc.WriteDBName;
  131. converywrite.ConveyorNo = item;
  132. converywrite.WriteStartAddress = cs.EquDbInfo_ReadWrite.DBReadIndox;
  133. converywrite.Confirm = false;
  134. converywrite.TaskDelete = false;
  135. WriteTaskToBuffer(converywrite);
  136. }
  137. string matureNo = item == "1164" ? "A" : "B";
  138. if (!cs.DB521_B_Outside && !cs.DB521_L_Outside) return;
  139. int isContinueMode = cs.DB521_F_Outside == true ? 1 : 0;//是否连续熟化模式
  140. int num = cs.DB521_Goodstype;//熟化架数量
  141. if (cs.DB521_B_Outside && !cs.DB520_Confirm)//开始熟化标志 DB520_Confirm 开始确认标志
  142. {
  143. //调用上传WMS的接口上传熟化房信息
  144. var param = new GetMatureContinueParam
  145. {
  146. MatureRoomNo = matureNo,
  147. IsContinueMode = isContinueMode,
  148. MatureStartTime = DateTime.Now,
  149. MatureEndTime = null,
  150. MatureFrameNum = num
  151. };
  152. //BaseWorkflow.GetMatureContinueMode(param, cs, plc, 1, item);
  153. if (BaseWorkflow.GetMatureContinueMode(param))
  154. {
  155. var converywrite = new WCSWriteToConveyorSignal();
  156. converywrite.Plc = plc.Plc;
  157. converywrite.DBName = plc.WriteDBName;
  158. converywrite.ConveyorNo = item;
  159. converywrite.WriteStartAddress = cs.EquDbInfo_ReadWrite.DBReadIndox;
  160. converywrite.Confirm = true;
  161. WriteTaskToBuffer(converywrite);
  162. }
  163. }
  164. if (cs.DB521_L_Outside && !cs.DB520_TaskDelete)////结束熟化标志 DB520_TaskDelete 结束确认标志
  165. {
  166. //调用上传WMS的接口上传熟化房信息
  167. var param = new GetMatureContinueParam
  168. {
  169. MatureRoomNo = matureNo,
  170. IsContinueMode = isContinueMode,
  171. MatureStartTime = null,
  172. MatureEndTime = DateTime.Now,
  173. MatureFrameNum = num
  174. };
  175. //BaseWorkflow.GetMatureContinueMode(param, cs, plc, 2, item);
  176. if (BaseWorkflow.GetMatureContinueMode(param))
  177. {
  178. var converywrite = new WCSWriteToConveyorSignal();
  179. converywrite.Plc = plc.Plc;
  180. converywrite.DBName = plc.WriteDBName;
  181. converywrite.ConveyorNo = item;
  182. converywrite.WriteStartAddress = cs.EquDbInfo_ReadWrite.DBReadIndox;
  183. converywrite.TaskDelete = true;
  184. WriteTaskToBuffer(converywrite);
  185. }
  186. }
  187. }
  188. }
  189. catch (Exception ex)
  190. {
  191. LogMessageHelper.RecordLogMessage(ex);
  192. }
  193. finally
  194. {
  195. Interlocked.Exchange(ref _matureSignalGet, 0);
  196. }
  197. }
  198. }
  199. //private void MatureSignalGet()
  200. //{
  201. // try
  202. // {
  203. // List<string> list = new List<string>() { Conv_1164, Conv_1165 };
  204. // foreach (var item in list)//1164、1165
  205. // {
  206. // var plc = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == PlcName);
  207. // var conveyor = plc.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == item);
  208. // var cs = conveyor.EquSignal_Conv;
  209. // // 开始与结束信号已被PLC复位,同时开始与结束确认信号为置位状态,开始复位确认信号
  210. // if (!cs.DB521_B_Outside && !cs.DB521_L_Outside && cs.DB520_Confirm && cs.DB520_TaskDelete)
  211. // {
  212. // var converywrite = new WCSWriteToConveyorSignal();
  213. // converywrite.Plc = plc.Plc;
  214. // converywrite.DBName = plc.WriteDBName;
  215. // converywrite.ConveyorNo = item;
  216. // converywrite.WriteStartAddress = cs.EquDbInfo_ReadWrite.DBReadIndox;
  217. // converywrite.Confirm = false;
  218. // converywrite.TaskDelete = false;
  219. // WriteTaskToBuffer(converywrite);
  220. // }
  221. // string matureNo = item == "1164" ? "A" : "B";
  222. // if (!cs.DB521_B_Outside && !cs.DB521_L_Outside) return;
  223. // int isContinueMode = cs.DB521_F_Outside == true ? 1 : 0;//是否连续熟化模式
  224. // int num = cs.DB521_Goodstype;//熟化架数量
  225. // if (cs.DB521_B_Outside && !cs.DB520_Confirm)//开始熟化标志 DB520_Confirm 开始确认标志
  226. // {
  227. // //调用上传WMS的接口上传熟化房信息
  228. // var param = new GetMatureContinueParam
  229. // {
  230. // MatureRoomNo = matureNo,
  231. // IsContinueMode = isContinueMode,
  232. // MatureStartTime = DateTime.Now,
  233. // MatureEndTime = null,
  234. // MatureFrameNum = num
  235. // };
  236. // //BaseWorkflow.GetMatureContinueMode(param, cs, plc, 1, item);
  237. // if (BaseWorkflow.GetMatureContinueMode(param))
  238. // {
  239. // var converywrite = new WCSWriteToConveyorSignal();
  240. // converywrite.Plc = plc.Plc;
  241. // converywrite.DBName = plc.WriteDBName;
  242. // converywrite.ConveyorNo = item;
  243. // converywrite.WriteStartAddress = cs.EquDbInfo_ReadWrite.DBReadIndox;
  244. // converywrite.Confirm = true;
  245. // WriteTaskToBuffer(converywrite);
  246. // }
  247. // }
  248. // if (cs.DB521_L_Outside && !cs.DB520_TaskDelete)////结束熟化标志 DB520_TaskDelete 结束确认标志
  249. // {
  250. // //调用上传WMS的接口上传熟化房信息
  251. // var param = new GetMatureContinueParam
  252. // {
  253. // MatureRoomNo = matureNo,
  254. // IsContinueMode = isContinueMode,
  255. // MatureStartTime = null,
  256. // MatureEndTime = DateTime.Now,
  257. // MatureFrameNum = num
  258. // };
  259. // //BaseWorkflow.GetMatureContinueMode(param, cs, plc, 2, item);
  260. // if (BaseWorkflow.GetMatureContinueMode(param))
  261. // {
  262. // var converywrite = new WCSWriteToConveyorSignal();
  263. // converywrite.Plc = plc.Plc;
  264. // converywrite.DBName = plc.WriteDBName;
  265. // converywrite.ConveyorNo = item;
  266. // converywrite.WriteStartAddress = cs.EquDbInfo_ReadWrite.DBReadIndox;
  267. // converywrite.TaskDelete = true;
  268. // WriteTaskToBuffer(converywrite);
  269. // }
  270. // }
  271. // }
  272. // }
  273. // catch (Exception ex)
  274. // {
  275. // LogMessageHelper.RecordLogMessage(ex);
  276. // }
  277. //}
  278. private static int _uploadMode = 0;
  279. private void UploadMatureMode()
  280. {
  281. if (Interlocked.Exchange(ref _uploadMode, 1) == 0)
  282. {
  283. try
  284. {
  285. List<string> list = new List<string>() { Conv_1164, Conv_1165 };
  286. string s = "BakeMode_";
  287. foreach (var item in list)
  288. {
  289. var plc = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == PlcName);
  290. var conveyor = plc.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == item);
  291. var cs = conveyor.EquSignal_Conv;
  292. string matureNo = item == "1164" ? "A" : "B";
  293. var value = s + matureNo;
  294. //获取连续模式值
  295. var plcValue = cs.DB521_F_Outside ? "1" : "0";
  296. var sysset = SugarBase.DB.Queryable<WCS_SYSSET>().Where(v => v.SET_ID == value).First();
  297. if (sysset != null)
  298. {
  299. if (plcValue != sysset.SET_VALUE)
  300. {
  301. string result = TryCachHelper.TryTranExecute((db) =>
  302. {
  303. db.Updateable<WCS_SYSSET>(it => new WCS_SYSSET()
  304. {
  305. SET_VALUE = plcValue,
  306. })
  307. .Where(it => it.SET_ID == value)
  308. .ExecuteCommand();
  309. });
  310. if (!string.IsNullOrWhiteSpace(result))
  311. {
  312. throw new Exception(result);
  313. }
  314. }
  315. }
  316. }
  317. }
  318. catch (Exception ex)
  319. {
  320. LogMessageHelper.RecordLogMessage(ex);
  321. }
  322. finally
  323. {
  324. Interlocked.Exchange(ref _uploadMode, 0);
  325. }
  326. }
  327. }
  328. private void Conv_ScanBarCodeExeTask()
  329. {
  330. Conv_ScanningIn(Conv_1155, Conv_1155);
  331. //Conv_ScanningIn(Conv_1156, Conv_1156);
  332. //Conv_ScanningIn(Conv_1157, Conv_1157);
  333. Conv_ScanningIn(Conv_1158, Conv_1158);
  334. }
  335. private void ConvTaskFinish()
  336. {
  337. ConveyorTaskFinish(PlcName, Conv_1155, false, true);
  338. ConveyorTaskFinish(PlcName, Conv_1156, false, true);
  339. ConveyorTaskFinish(PlcName, Conv_1157, false, true);
  340. ConveyorTaskFinish(PlcName, Conv_1158, false, true);
  341. }
  342. protected override WCS_TASK ScanningCallWmsInterface(GetInTaskParam param)
  343. {
  344. if (param.EquipmentNo == Conv_1155 || param.EquipmentNo == Conv_1156 || param.EquipmentNo == Conv_1157 || param.EquipmentNo == Conv_1158)
  345. {
  346. param.Memo1 = "1";
  347. }
  348. return base.ScanningCallWmsInterface(param);
  349. }
  350. private void Conv_ScanningIn(string convNo, string exceptionConvNo, bool isCurAddressByNext = true)
  351. {
  352. try
  353. {
  354. var plc = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == PlcName);
  355. var conveyor = plc.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == convNo);
  356. var cs = conveyor.EquSignal_Conv;
  357. if (!cs.DB521_Request) return;
  358. if (cs.DB520_Confirm) return;
  359. var task = QueryTaskByBarcode(cs, convNo);
  360. if ((convNo == Conv_1155 || convNo == Conv_1158) && cs.DB521_Goodstype == 0)
  361. {
  362. LogMessageHelper.RecordLogMessage(string.Format("输送线[{0}]外捡高度为零,WCS默认标识为1", convNo), true, LogLevelEnum.INFO.ToString());
  363. }
  364. if (task == null)
  365. {
  366. if (WcsScanConvIsUsed(convNo))
  367. {
  368. var param = new GetInTaskParam();
  369. param.ContainerBarCode = cs.BarCodeStr;
  370. param.ContainerType = cs.DB521_Goodstype > 0 ? cs.DB521_Goodstype : 1;
  371. param.MatBarCode = string.Empty;
  372. param.WareHouseId = Current.Pvchouseputong;
  373. param.EquipmentNo = convNo;
  374. param.EndPostion = srm;
  375. param.Memo1 = "1";
  376. param.Memo2 = exceptionConvNo;
  377. task = ThreadHelper.TaskThread(BaseWorkflow.GetWcsInTask, param);
  378. }
  379. }
  380. //判断任务是否存在,或已经执行
  381. if (task == null || task.TASK_WKSTATUS >= 2) return;
  382. var converywrite = new WCSWriteToConveyorSignal();
  383. converywrite.Plc = plc.Plc;
  384. converywrite.DBName = plc.WriteDBName;
  385. converywrite.ConveyorNo = convNo;
  386. converywrite.WriteStartAddress = cs.EquDbInfo_ReadWrite.DBReadIndox;
  387. converywrite.Tasknum = task.TASK_NO;
  388. converywrite.Goodssize = 0;//
  389. converywrite.Goodsstart = Convert.ToInt32(convNo);
  390. if (task.TASK_COMTYPE == (int)ComTypeEnum.托盘异常退回)
  391. {
  392. converywrite.Notask = true;
  393. converywrite.Goodsend = Convert.ToInt32(exceptionConvNo);
  394. }
  395. else if (SugarBase.DB.Queryable<WCS_TASK>().Any(v => v.TASK_COMTYPE == 2 && v.TASK_POSIDNEXT == convNo))
  396. {
  397. converywrite.Notask = true;
  398. converywrite.Goodsend = Convert.ToInt32(exceptionConvNo);
  399. LogMessageHelper.RecordLogMessage(string.Format("输送线[{0}]条码[{1}]不能入库,存在出库到该位置的任务。", convNo, cs.BarCodeStr), true, LogLevelEnum.INFO.ToString());
  400. }
  401. else
  402. {
  403. if (isCurAddressByNext)
  404. {
  405. converywrite.Goodsend = Convert.ToInt32(convNo);
  406. }
  407. else
  408. {
  409. var routeSet = EquRouteHelper.QueryRoute(convNo, task.TASK_POSIDTO);
  410. var route = routeSet.SingleOrDefault(v => v.ROUTE_STARTPOS == convNo);
  411. converywrite.Goodsend = Convert.ToInt32(route.ROUTE_SONPOS);
  412. }
  413. }
  414. if (convNo == Conv_1155)
  415. {
  416. LogMessageHelper.RecordLogMessage(string.Format("输送线[{0}]任务[{1}]条码[{2}]外检高度[{3}](零值默认为1)。", convNo, task.TASK_NO, cs.BarCodeStr, cs.DB521_Goodstype), true, LogLevelEnum.INFO.ToString());
  417. }
  418. WriteInfoToConv(cs, converywrite);
  419. }
  420. catch (Exception ex)
  421. {
  422. LogMessageHelper.RecordLogMessage(ex);
  423. }
  424. }
  425. private void MatureConvFinish(string convNo, string matureRoomNo)
  426. {
  427. try
  428. {
  429. var plc = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == PlcName);
  430. var conveyor = plc.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == convNo);
  431. var cs = conveyor.EquSignal_Conv;
  432. if (!cs.DB521_Request) return;
  433. if (cs.DB523_Fault) return;
  434. if (cs.DB521_Tasknum > 10000) return;
  435. //if (cs.DB521_BCR_Noread) throw new Exception(string.Format("输送线[{0}]报读码错误,但是存在请求。", convNo));
  436. //if (string.IsNullOrWhiteSpace(cs.BarCodeStr)) throw new Exception(string.Format("输送线[{0}]存在请求信号,但没读取到条码信息。", convNo));
  437. MatureRoomCache atureRooCache = null;
  438. string barcode = cs.BarCodeStr;
  439. if (barcode.ToUpper().Contains("ERROR") ||
  440. barcode.ToUpper().Contains("N") ||
  441. barcode.Contains("?") ||
  442. string.IsNullOrWhiteSpace(barcode))
  443. {
  444. if (SugarBase.DB.Queryable<WCS_TASK>().Any(v => v.TASK_COMTYPE == 1 && v.TASK_POSIDFROM == matureRoomNo &&
  445. (v.TASK_WKSTATUS <= 1 || v.TASK_WKSTATUS == 7 || v.TASK_WKSTATUS == 9 || (v.TASK_WKSTATUS == 2 && v.TASK_POSIDNEXT == convNo))))
  446. {
  447. throw new Exception(string.Format("扫码失败,熟化房[{0}]输送线[{1}]存在未完成的任务,不能重复请求生成任务,请检查熟化房与输送线对接是否存在问题。", matureRoomNo, convNo));
  448. }
  449. if (Current.TaskSet.Any(v => v.TASK_COMTYPE == 1 && v.TASK_OutMatureRoomDate != null &&
  450. (v.TASK_WKSTATUS <= 1 || v.TASK_WKSTATUS == 7 || v.TASK_WKSTATUS == 9 || (v.TASK_WKSTATUS == 2 && v.TASK_POSIDNEXT == convNo))))
  451. {
  452. throw new Exception(string.Format("扫码失败,熟化房[{0}]输送线[{1}]存在未完成的任务,不能重复请求生成任务,请检查熟化房与输送线对接是否存在问题。", matureRoomNo, convNo));
  453. }
  454. atureRooCache = SugarBase.DB.Queryable<MatureRoomCache>().Where(v => v.MatureRoomNo.Contains(matureRoomNo) && SqlFunc.IsNullOrEmpty(v.Remark)).OrderBy(v => v.InMatureRoomDate).First();
  455. barcode = atureRooCache.BARCODE;
  456. //throw new Exception(string.Format("扫码失败,熟化房[{0}]输送线[{1}]请求入库查询到队列中的条码[{2}]", matureRoomNo, convNo, barcode));
  457. LogMessageHelper.RecordLogMessage(string.Format("扫码失败,熟化房[{0}]输送线[{1}]请求入库查询到队列中的条码[{2}]", matureRoomNo, convNo, barcode), true);
  458. }
  459. else
  460. {
  461. atureRooCache = SugarBase.DB.Queryable<MatureRoomCache>().Where(v => v.MatureRoomNo.Contains(matureRoomNo) && SqlFunc.IsNullOrEmpty(v.Remark)).OrderBy(v => v.InMatureRoomDate).First();
  462. if (barcode != atureRooCache.BARCODE)
  463. {
  464. throw new Exception(string.Format("扫码成功,熟化房[{0}]读取到条码[{1}]但是与熟化房队列条码[{2}]不一致,请检查是否存在问题。", matureRoomNo, barcode, atureRooCache.BARCODE));
  465. }
  466. LogMessageHelper.RecordLogMessage(string.Format("扫码成功,读取到条码[{0}]熟化房[{1}]", barcode, matureRoomNo));
  467. }
  468. var task = Current.TaskSet.FirstOrDefault(v => v.TASK_BOXBARCODE == barcode);
  469. if (task == null) return;
  470. if (task.TASK_WKSTATUS == (int)WkStatus.熟化房熟化完成) return;
  471. if (task.TASK_WKSTATUS == (int)WkStatus.完成任务) return;
  472. if (task.TASK_WKSTATUS != (int)WkStatus.熟化房熟化中) return;
  473. if (task.TASK_WKSTATUS <= 1) return;
  474. //var matureTask = Current.TaskSet.Where(v => v.TASK_WKSTATUS == (int)WkStatus.熟化房熟化中).OrderBy(v => v.TASK_InMatureRoomDate).FirstOrDefault();
  475. //if (task.TASK_BOXBARCODE.Trim() != matureTask.TASK_BOXBARCODE.Trim())
  476. //{
  477. // throw new Exception(string.Format("熟化房[{0}]出口[{1}]扫描条码[{2}]与任务列表中条码[{3}]不一致,请检查条码问题。", matureRoomNo, convNo, cs.BarCodeStr, matureTask.TASK_BOXBARCODE));
  478. //}
  479. var roomNo = plc.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == matureRoomNo);
  480. var roomNocs = roomNo.EquSignal_Conv;
  481. int hours = roomNocs.DB521_Goodssize - 4;
  482. //DateTime inMaturedate = task.TASK_InMatureRoomDate.GetValueOrDefault().AddHours(hours);
  483. //if (inMaturedate > SugarBase.DB.GetDate())
  484. //{
  485. // throw new Exception(string.Format("条码[{0}]开始熟化时间[{1}]比要求烘烤时间低于4小时以上(严重错误),不能出库完成,请检查熟化是否存在问题。", task.TASK_BOXBARCODE, task.TASK_InMatureRoomDate, hours));
  486. //}
  487. //修改状态
  488. string result = TryCachHelper.TryTranExecute((db) =>
  489. {
  490. DateTime dt = db.GetDate();
  491. int wkstatus = task.TASK_COMTYPE == 1 ? 14 : 99;
  492. if (atureRooCache.CurrentMatureNum < atureRooCache.MatureNum)
  493. {
  494. wkstatus = 14;
  495. //修改任务的状态
  496. db.Updateable<WCS_TASK>(it => new WCS_TASK()
  497. {
  498. TASK_WKSTATUS = wkstatus,
  499. TASK_POSIDCUR = convNo,
  500. TASK_EDITUSERNO = "WCS",
  501. TASK_EDITDATETIME = DateTime.Now
  502. })
  503. .Where(it => it.TASK_NO == task.TASK_NO)
  504. .ExecuteCommand();
  505. }
  506. else
  507. {
  508. //修改任务的状态
  509. db.Updateable<WCS_TASK>(it => new WCS_TASK()
  510. {
  511. TASK_WKSTATUS = wkstatus,
  512. TASK_POSIDCUR = convNo,
  513. TASK_OutMatureRoomDate = dt,
  514. TASK_EDITUSERNO = "WCS",
  515. TASK_EDITDATETIME = DateTime.Now
  516. })
  517. .Where(it => it.TASK_NO == task.TASK_NO)
  518. .ExecuteCommand();
  519. }
  520. //添加修改明细
  521. string msg = string.Format("任务[{0}]熟化房熟化完成", task.TASK_NO);
  522. CommonData.AddWCS_TASK_DTL(db, task.TASK_NO, task.TASK_NO, task.TASK_POSIDCUR, task.TASK_POSIDTO, msg);
  523. });
  524. if (!string.IsNullOrWhiteSpace(result))
  525. {
  526. throw new Exception(result);
  527. }
  528. }
  529. catch (Exception ex)
  530. {
  531. LogMessageHelper.RecordLogMessage(ex);
  532. }
  533. }
  534. private void RequestOutByMatureConv(string convNo, string matureRoomNo)
  535. {
  536. try
  537. {
  538. var plc = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == PlcName);
  539. var conveyor = plc.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == convNo);
  540. var cs = conveyor.EquSignal_Conv;
  541. if (!cs.DB521_Request) return;
  542. if (cs.DB523_Fault) return;
  543. if (cs.DB521_Tasknum > 10000) return;
  544. //if (cs.DB521_BCR_Noread) throw new Exception(string.Format("输送线[{0}]报读码错误,但是存在请求。", convNo));
  545. //if (string.IsNullOrWhiteSpace(cs.BarCodeStr)) throw new Exception(string.Format("输送线[{0}]存在请求信号,但没读取到条码信息。", convNo));
  546. string barcode = cs.BarCodeStr;
  547. WCS_TASK task = null;
  548. if (cs.BarCodeStr.ToUpper().Contains("ERROR") ||
  549. cs.BarCodeStr.ToUpper().Contains("N") ||
  550. cs.BarCodeStr.Contains("?") ||
  551. string.IsNullOrWhiteSpace(cs.BarCodeStr))
  552. {
  553. task = Current.TaskSet.SingleOrDefault(v => v.TASK_COMTYPE == 1 && v.TASK_POSIDFROM == matureRoomNo && (v.TASK_POSIDCUR == matureRoomNo || v.TASK_POSIDCUR == convNo));
  554. if (task == null)
  555. {
  556. task = Current.TaskSet.SingleOrDefault(v => v.TASK_WKSTATUS == (int)WkStatus.熟化房熟化完成 && (v.TASK_POSIDCUR == convNo || v.TASK_POSIDCUR == matureRoomNo));
  557. }
  558. }
  559. else
  560. {
  561. task = Current.TaskSet.FirstOrDefault(v => v.TASK_BOXBARCODE == barcode && v.TASK_COMTYPE == 1);
  562. if (task == null)
  563. {
  564. var matureRoom = SugarBase.DB.Queryable<MatureRoomCache>().First(v => v.BARCODE == barcode);
  565. if (matureRoom.MatureNum > 1 && matureRoom.CurrentMatureNum < matureRoom.MatureNum)
  566. {
  567. //是多次熟化任务(只支持48小时多次熟化)
  568. task = Current.TaskSet.FirstOrDefault(v => v.TASK_BOXBARCODE == barcode && v.MatureNum.GetValueOrDefault() == 4 && v.TASK_COMTYPE == 2);
  569. }
  570. }
  571. }
  572. if (task == null || task.TASK_POSIDNEXT == convNo) return;
  573. //下发任务
  574. var converywrite = new WCSWriteToConveyorSignal();
  575. converywrite.Plc = plc.Plc;
  576. converywrite.DBName = plc.WriteDBName;
  577. converywrite.ConveyorNo = convNo;
  578. converywrite.WriteStartAddress = cs.EquDbInfo_ReadWrite.DBReadIndox;
  579. converywrite.Tasknum = task.TASK_NO;
  580. converywrite.Goodssize = 0;//
  581. converywrite.Goodsstart = Convert.ToInt32(convNo);
  582. converywrite.Goodsend = converywrite.Goodsstart;
  583. WriteInfoToConvMRoom(cs, converywrite);
  584. }
  585. catch (Exception ex)
  586. {
  587. LogMessageHelper.RecordLogMessage(ex);
  588. }
  589. }
  590. private void ConveyorWriteTaskExecute()
  591. {
  592. }
  593. private void SrmOutConvExeTask()
  594. {
  595. SrmOutConvExeTask(Conv_1143, true);
  596. SrmOutConvExeTask(Conv_1141, true);
  597. SrmOutConvExeTask(Conv_1161, true);
  598. SrmOutConvExeTask(Conv_1160, false);
  599. SrmOutConvExeTask(Conv_1152, true);
  600. SrmOutConvExeTask(Conv_1151, true);
  601. }
  602. /// <summary>
  603. /// 堆垛机出口输送线任务执行(任务目标地址的下个地址只支持单一地址)
  604. /// </summary>
  605. private void SrmOutConvExeTask(string convNo, bool endPosIsCurConv = false)
  606. {
  607. try
  608. {
  609. var plc = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == PlcName);
  610. var conveyor = plc.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == convNo);
  611. var cs = conveyor.EquSignal_Conv;
  612. if (!cs.DB521_Request) return;
  613. if (cs.DB523_Fault) return;
  614. var taskSet = Current.TaskSet.Where(v => v.TASK_POSIDNEXT == convNo).ToList();
  615. var task = taskSet.SingleOrDefault(v => v.TASK_WKSTATUS == (int)WkStatus.堆垛机完成);
  616. if (task == null)
  617. {
  618. throw new Exception(string.Format("堆垛机出口输送线[{0}]存在请求信号,但没查询到任务信息。", convNo));
  619. }
  620. var converywrite = new WCSWriteToConveyorSignal();
  621. converywrite.Plc = plc.Plc;
  622. converywrite.DBName = plc.WriteDBName;
  623. converywrite.ConveyorNo = convNo;
  624. converywrite.WriteStartAddress = cs.EquDbInfo_ReadWrite.DBReadIndox;
  625. converywrite.Tasknum = task.TASK_NO;
  626. converywrite.Goodscode = 0;
  627. converywrite.Goodstype = 0;
  628. converywrite.Goodssize = 0;
  629. converywrite.Goodsstart = Convert.ToInt32(convNo);
  630. if (endPosIsCurConv)
  631. {
  632. converywrite.Goodsend = converywrite.Goodsstart;
  633. }
  634. else
  635. {
  636. var routeSet = EquRouteHelper.QueryRoute(convNo, task.TASK_POSIDTO);
  637. var routes = routeSet.Where(v => v.ROUTE_STARTPOS == convNo).ToList();
  638. if (routes.Count == 1)
  639. {
  640. converywrite.Goodsend = Convert.ToInt32(routes[0].ROUTE_SONPOS);
  641. }
  642. else
  643. {
  644. throw new Exception(string.Format("输送线[{0}]任务[{1}]请求该函数不支持多个分支输送地址,请编写扩展函数。", convNo, task.TASK_NO));
  645. }
  646. }
  647. WriteInfoToConv(cs, converywrite);
  648. }
  649. catch (Exception ex)
  650. {
  651. LogMessageHelper.RecordLogMessage(ex);
  652. }
  653. }
  654. private static int _reqestInByMatureRoom = 0;
  655. /// <summary>
  656. /// 熟化房申请出库熟化
  657. /// </summary>
  658. private void ReqestInByMatureRoom()
  659. {
  660. if (Interlocked.Exchange(ref _reqestInByMatureRoom, 1) == 0)
  661. {
  662. try
  663. {
  664. Thread.Sleep(60000);
  665. //if ((DateTime.Now.Hour == 8 && DateTime.Now.Minute >= 30) || (DateTime.Now.Hour > 8 && DateTime.Now.Hour < 14))
  666. //{
  667. if (Current.SysSets.FirstOrDefault(v => v.SET_ID == Conv_1508).SET_VALUE == "0")
  668. {
  669. ReqestInByMatureRoomItem(Conv_1508, Conv_1136);
  670. }
  671. if (Current.SysSets.FirstOrDefault(v => v.SET_ID == Conv_1509).SET_VALUE == "0")
  672. {
  673. ReqestInByMatureRoomItem(Conv_1509, Conv_1138);
  674. }
  675. //}
  676. }
  677. catch (Exception ex)
  678. {
  679. LogMessageHelper.RecordLogMessage(ex);
  680. }
  681. finally
  682. {
  683. Interlocked.Exchange(ref _reqestInByMatureRoom, 0);
  684. }
  685. }
  686. }
  687. private void ReqestInByMatureRoomItem(string convNo, string matureInConvNo)
  688. {
  689. bool a = false;
  690. //检测是否存在去熟化房的未执行任务
  691. TryCachHelper.TryTranExecute((db) =>
  692. {
  693. a = db.Queryable<WCS_TASK>().Any(v => v.TASK_POSIDTO == convNo && v.TASK_WKSTATUS < 13);
  694. });
  695. if (a) return;
  696. var matureinConvNo = ConveyorHelper.GetConveyorSignal(PlcName, matureInConvNo);
  697. //if (matureinConvNo.DB521_Tasknum > 0 || matureinConvNo.CvDB51_PH_Status) return;
  698. var conv_1141 = ConveyorHelper.GetConveyorSignal(PlcName, "1141");
  699. var conv_1143 = ConveyorHelper.GetConveyorSignal(PlcName, "1143");
  700. if ((conv_1141.DB521_Tasknum > 0 || conv_1141.CvDB51_PH_Status) && (conv_1143.DB521_Tasknum > 0 || conv_1143.CvDB51_PH_Status)) return;
  701. var plc = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == PlcName);
  702. var conveyor = plc.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == convNo);
  703. var cs = conveyor.EquSignal_Conv;
  704. if (cs.DB521_Goodstype != 1) return;//检测是否在线
  705. if (cs.DB521_Goodssize < 2) return;//检测烘烤时间是否正确
  706. //if (cs.DB521_Goodsstart != 1) return;//检测是否自动状态
  707. //if (cs.DB521_Goodsend == 1) return;//切线中,不能出库到熟化
  708. if (cs.DB521_Res04 == 0) return;//熟化房温度不能为零
  709. //int mature_Count = Current.TaskSet.Count(v => v.TASK_WKSTATUS == (int)WkStatus.熟化房熟化中 && v.TASK_POSIDNEXT == convNo);
  710. var mature_InTaskCount = Current.TaskSet.Count(v => v.TASK_MatureDate == cs.DB521_Goodssize && v.TASK_MatureTemperat <= cs.DB521_Res04 && v.TASK_MatureType == 1);
  711. //var mature_InTaskCount = Current.TaskSet.Count(v => v.TASK_MatureDate == cs.DB521_Goodssize && v.TASK_MatureType == 1);
  712. var mature_OutTaskCount = Current.TaskSet.Count(v => v.TASK_POSIDTO == matureInConvNo);
  713. if ((mature_InTaskCount + mature_OutTaskCount) < 60)
  714. {
  715. var param = new GetOutTaskParam();
  716. param.OutId = convNo;
  717. param.OutEndPostion = convNo;
  718. param.OutType = 1;
  719. param.WareHouseId = Current.Pvchouseputong;
  720. param.TASK_MatureDate = cs.DB521_Goodssize;
  721. param.TASK_MatureTemperat = cs.DB521_Res04;
  722. //调用WMS接口生成出库任务
  723. ThreadHelper.TaskThread(BaseWorkflow.GetOutTask, param, 2000);
  724. }
  725. }
  726. private void RequestInByMatureConv(string convNo, string matureRoomNo)
  727. {
  728. try
  729. {
  730. var plc = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == PlcName);
  731. var conveyor = plc.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == convNo);
  732. var cs = conveyor.EquSignal_Conv;
  733. if (!cs.DB521_Request) return;
  734. if (cs.DB523_Fault) return;
  735. if (cs.CvDB51_PH_Status) return;
  736. if (cs.DB521_Tasknum == 0) return;
  737. var task = Current.TaskSet.SingleOrDefault(v => v.TASK_NO == cs.DB521_Tasknum);
  738. var converywrite = new WCSWriteToConveyorSignal();
  739. converywrite.Plc = plc.Plc;
  740. converywrite.DBName = plc.WriteDBName;
  741. converywrite.ConveyorNo = convNo;
  742. converywrite.WriteStartAddress = cs.EquDbInfo_ReadWrite.DBReadIndox;
  743. converywrite.Remark_TaskNo = cs.DB521_Tasknum.ToString();
  744. converywrite.Remark = matureRoomNo;
  745. WriteInfoToConv_Room(cs, converywrite);
  746. }
  747. catch (Exception ex)
  748. {
  749. LogMessageHelper.RecordLogMessage(ex);
  750. }
  751. }
  752. /// <summary>
  753. /// 写入任务信息到输送机
  754. /// </summary>
  755. /// <param name="converySignal"></param>
  756. /// <param name="converywrite"></param>
  757. /// <param name="isNotTask"></param>
  758. public void WriteInfoToConv_Room(ConvSignal converySignal, WCSWriteToConveyorSignal converywrite)
  759. {
  760. if (converySignal.DB520_Tasknum == converywrite.Tasknum &&
  761. converySignal.DB520_Goodscode == converywrite.Goodscode &&
  762. converySignal.DB520_Goodstype == converywrite.Goodstype &&
  763. converySignal.DB520_Goodssize == converywrite.Goodssize &&
  764. converySignal.DB520_Goodsstart == converywrite.Goodsstart &&
  765. converySignal.DB520_Goodsend == converywrite.Goodsend &&
  766. converySignal.DB520_Notask == converywrite.Notask &&
  767. converySignal.DB520_TaskDelete == converywrite.TaskDelete &&
  768. converySignal.DB520_RollerTurn == converywrite.UpMatRequest &&
  769. converySignal.DB520_Res01 == converywrite.Res01 &&
  770. converySignal.DB520_Res02 == converywrite.Res02 &&
  771. converySignal.DB520_Res03 == converywrite.Res03 &&
  772. converySignal.DB520_Res04 == converywrite.Res04)
  773. {
  774. string result = TryCachHelper.TryTranExecute((db) =>
  775. {
  776. var task = db.Queryable<WCS_TASK>().First(v => v.TASK_NO == Convert.ToInt32(converywrite.Remark_TaskNo));
  777. if (task == null) throw new Exception(string.Format("任务[{0}]未查询到信息.输送线[{1}]执行失败。", converywrite.Remark_TaskNo, converywrite.ConveyorNo));
  778. int wkstatus = (int)WkStatus.熟化房熟化中;
  779. var matureRoomItem = db.Queryable<MatureRoomCache>().First(v => v.BARCODE == task.TASK_BOXBARCODE);
  780. if (matureRoomItem == null)
  781. {
  782. DateTime dt = db.GetDate();
  783. int updatecount = db.Updateable<WCS_TASK>(it => new WCS_TASK()
  784. {
  785. TASK_WKSTATUS = wkstatus,
  786. TASK_POSIDCUR = converywrite.Remark,
  787. TASK_POSIDNEXT = converywrite.Remark,
  788. TASK_EDITUSERNO = "WCS",
  789. TASK_EDITDATETIME = DateTime.Now,
  790. TASK_InMatureRoomDate = dt
  791. })
  792. .Where(it => it.TASK_NO == task.TASK_NO).ExecuteCommand();
  793. if (updatecount <= 0)
  794. {
  795. throw new Exception(string.Format("任务[{0}]进入熟化房确认修改任务信息失败。", task.TASK_NO));
  796. }
  797. var matureRoom = new MatureRoomCache();
  798. matureRoom.BARCODE = task.TASK_BOXBARCODE;
  799. matureRoom.MatureRoomNo = converywrite.Remark;
  800. matureRoom.MatureRoomName = matureRoom.MatureRoomNo == "1509" ? "B" : "A";
  801. matureRoom.InMatureRoomDate = db.GetDate();
  802. matureRoom.CurrentMatureNum = 1;
  803. matureRoom.MatureNum = task.MatureNum.GetValueOrDefault();
  804. if (db.Insertable(matureRoom).ExecuteCommand() <= 0)
  805. {
  806. throw new Exception(string.Format("任务[{0}]进入熟化房添加熟化房条码[{1}]进入队列失败。", task.TASK_NO, task.TASK_BOXBARCODE));
  807. }
  808. }
  809. else if (matureRoomItem.CurrentMatureNum >= matureRoomItem.MatureNum)
  810. {
  811. throw new Exception(string.Format("任务[{0}]条码[{1}]进入熟化房次数不正确,请检查问题。", task.TASK_NO, task.TASK_BOXBARCODE));
  812. }
  813. else
  814. {
  815. int updatecount = db.Updateable<WCS_TASK>(it => new WCS_TASK()
  816. {
  817. TASK_WKSTATUS = wkstatus,
  818. TASK_POSIDCUR = converywrite.Remark,
  819. TASK_POSIDNEXT = converywrite.Remark,
  820. TASK_EDITUSERNO = "WCS",
  821. TASK_EDITDATETIME = DateTime.Now
  822. })
  823. .Where(it => it.TASK_NO == task.TASK_NO).ExecuteCommand();
  824. if (updatecount <= 0)
  825. {
  826. throw new Exception(string.Format("任务[{0}]进入熟化房确认修改任务信息失败。", task.TASK_NO));
  827. }
  828. int matureNum = matureRoomItem.CurrentMatureNum + 1;
  829. DateTime lastdt = db.GetDate();
  830. int updateMature = db.Updateable<MatureRoomCache>(it => new MatureRoomCache()
  831. {
  832. CurrentMatureNum = matureNum,
  833. InMatureRoomDate = lastdt,
  834. Remark = ""
  835. })
  836. .Where(it => it.BARCODE == task.TASK_BOXBARCODE).ExecuteCommand();
  837. if (updateMature <= 0)
  838. {
  839. throw new Exception(string.Format("任务[{0}]进入熟化房确认修改熟化次数信息失败。", task.TASK_NO));
  840. }
  841. }
  842. string msg = string.Format("任务[{0}]已从输送线[{1}]进入熟化房[{2}]中", converywrite.Remark_TaskNo, converywrite.ConveyorNo, converywrite.Remark);
  843. CommonData.AddWCS_TASK_DTL(db, task.TASK_NO, task.TASK_NO, task.TASK_POSIDCUR, converywrite.Remark, msg);
  844. ConfirmTask(converySignal, converywrite);
  845. });
  846. if (!string.IsNullOrWhiteSpace(result))
  847. {
  848. throw new Exception(string.Format("任务[{0}]输送机[{1}]执行失败,原因:[{1}]", converywrite.Remark_TaskNo, converywrite.ConveyorNo, result));
  849. }
  850. }
  851. else
  852. {
  853. WriteTaskToBuffer(converywrite);
  854. }
  855. }
  856. /// <summary>
  857. /// 写入任务信息到输送机
  858. /// </summary>
  859. /// <param name="converySignal"></param>
  860. /// <param name="converywrite"></param>
  861. /// <param name="isNotTask"></param>
  862. public void WriteInfoToConvMRoom(ConvSignal converySignal, WCSWriteToConveyorSignal converywrite)
  863. {
  864. if (converySignal.DB520_Tasknum == converywrite.Tasknum &&
  865. converySignal.DB520_Goodscode == converywrite.Goodscode &&
  866. converySignal.DB520_Goodstype == converywrite.Goodstype &&
  867. converySignal.DB520_Goodssize == converywrite.Goodssize &&
  868. converySignal.DB520_Goodsstart == converywrite.Goodsstart &&
  869. converySignal.DB520_Goodsend == converywrite.Goodsend &&
  870. converySignal.DB520_Notask == converywrite.Notask &&
  871. converySignal.DB520_TaskDelete == converywrite.TaskDelete &&
  872. converySignal.DB520_RollerTurn == converywrite.UpMatRequest &&
  873. converySignal.DB520_Res01 == converywrite.Res01 &&
  874. converySignal.DB520_Res02 == converywrite.Res02 &&
  875. converySignal.DB520_Res03 == converywrite.Res03 &&
  876. converySignal.DB520_Res04 == converywrite.Res04)
  877. {
  878. string result = TryCachHelper.TryTranExecute((db) =>
  879. {
  880. var task = db.Queryable<WCS_TASK>().First(v => v.TASK_NO == converywrite.Tasknum);
  881. int updatecount = db.Updateable<WCS_TASK>(it => new WCS_TASK()
  882. {
  883. TASK_WKSTATUS = (int)WkStatus.输送机执行,
  884. TASK_POSIDNEXT = converywrite.Goodsend.ToString(),
  885. //TASK_ITEM5 = converywrite.Goodsstart.ToString(),
  886. TASK_EDITUSERNO = "WCS",
  887. TASK_EDITDATETIME = DateTime.Now
  888. })
  889. .Where(it => it.TASK_NO == task.TASK_NO).ExecuteCommand();
  890. if (updatecount <= 0)
  891. {
  892. throw new Exception(string.Format("任务[{0}]出熟化房确认修改任务信息失败。", task.TASK_NO));
  893. }
  894. var matureroom = db.Queryable<MatureRoomCache>().Single(v => v.BARCODE == task.TASK_BOXBARCODE);
  895. if (matureroom == null)
  896. {
  897. throw new Exception(string.Format("任务[{0}]条码[{1}]出熟化房确认修改任务信息失败,队列中未找到该条码", task.TASK_NO));
  898. }
  899. else if (matureroom.CurrentMatureNum >= matureroom.MatureNum)
  900. {
  901. var matureRoom_dis = new MatureRoomCache_Dis();
  902. matureRoom_dis.BARCODE = task.TASK_BOXBARCODE;
  903. matureRoom_dis.MatureRoomNo = matureroom.MatureRoomNo;
  904. matureRoom_dis.MatureRoomName = matureroom.MatureRoomName;
  905. matureRoom_dis.InMatureRoomDate = matureroom.InMatureRoomDate;
  906. matureRoom_dis.OutMatureRoomDate = db.GetDate();
  907. matureRoom_dis.CurrentMatureNum = matureroom.CurrentMatureNum;
  908. matureRoom_dis.MatureNum = matureroom.MatureNum;
  909. if (db.Deleteable(matureroom).ExecuteCommand() <= 0)
  910. {
  911. throw new Exception(string.Format("任务[{0}]出熟化房删除熟化房条码[{1}]失败。", task.TASK_NO, task.TASK_BOXBARCODE));
  912. }
  913. if (db.Insertable(matureRoom_dis).ExecuteCommand() <= 0)
  914. {
  915. throw new Exception(string.Format("任务[{0}]出熟化房添加熟化房条码[{1}]到历史队列失败。", task.TASK_NO, task.TASK_BOXBARCODE));
  916. }
  917. }
  918. else
  919. {
  920. int updateMatureRoom = db.Updateable<MatureRoomCache>(it => new MatureRoomCache()
  921. {
  922. Remark = "1"
  923. })
  924. .Where(it => it.BARCODE == task.TASK_BOXBARCODE).ExecuteCommand();
  925. if (updateMatureRoom <= 0)
  926. {
  927. throw new Exception(string.Format("任务[{0}]出熟化房确认修改熟化房信息失败。", task.TASK_NO));
  928. }
  929. }
  930. string msg = string.Format("任务已下发给输送机[{0}]执行,起点地址[{1}]目标地址[{2}]", converywrite.ConveyorNo, converywrite.Goodsstart, converywrite.Goodsend);
  931. CommonData.AddWCS_TASK_DTL(db, task.TASK_NO, task.TASK_NO, task.TASK_POSIDCUR, converywrite.Goodsend.ToString(), msg);
  932. ConfirmTask(converySignal, converywrite);
  933. });
  934. if (!string.IsNullOrWhiteSpace(result))
  935. {
  936. throw new Exception(string.Format("任务[{0}]输送机[{1}]执行失败,原因:[{1}]", converywrite.Tasknum, converywrite.ConveyorNo, result));
  937. }
  938. }
  939. else
  940. {
  941. WriteTaskToBuffer(converywrite);
  942. }
  943. }
  944. #endregion 功能实现
  945. }
  946. }