ConvPlc04.cs 56 KB

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