| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412 | 
							- using System;
 
- using System.Collections.Generic;
 
- using System.Linq;
 
- using System.Text;
 
- using WCS.Data;
 
- using WCS.Data.Models;
 
- using WCS.Data.Utils;
 
- using WCS.PLC;
 
- using WCS.PLC.Model.Equipment;
 
- namespace WCS.Workflow
 
- {
 
-     public class ConvPlc03 : Base_Conv
 
-     {
 
-         #region 只读变量
 
-         private readonly string Conv_1390 = "1390";
 
-         private readonly string Conv_1418 = "1418";
 
-         private readonly string Conv_1401 = "1401";
 
-         private readonly string Conv_1416 = "1416";
 
-         #endregion;
 
-         public override void Run()
 
-         {
 
-             Conv_ScanBarCodeExeTask();
 
-             ConvTaskFinish();
 
-         }
 
-         private void ConvTaskFinish()
 
-         {
 
-             ConveyorTaskFinish(PlcName, Conv_1401, false, true);
 
-             ConveyorTaskFinish(PlcName, Conv_1416, false, true);
 
-             ConveyorTaskFinish();
 
-         }
 
-         public void ConveyorTaskFinish() 
 
-         {
 
-             try
 
-             {
 
-                 //调用函数完成任务
 
-                 string result = TryCachHelper.TryExecute((db) =>
 
-                 {
 
-                     var task = db.Queryable<WCS_TASK>().First(v => v.TASK_POSIDTO == Conv_1418 && v.TASK_POSIDCUR != v.TASK_POSIDFROM);
 
-                     if (task == null) return;
 
-                     //修改任务的状态
 
-                     db.Updateable<WCS_TASK>(it => new WCS_TASK() { TASK_WKSTATUS = 99, TASK_EDITUSERNO = "WCS", TASK_EDITDATETIME = DateTime.Now })
 
-                                 .Where(it => it.TASK_NO == task.TASK_NO)
 
-                                 .ExecuteCommand();
 
-                 });
 
-                 if (!string.IsNullOrWhiteSpace(result))
 
-                 {
 
-                     throw new Exception(result);
 
-                 }
 
-             }
 
-             catch (Exception ex)
 
-             {
 
-                 LogMessageHelper.RecordLogMessage(ex);
 
-             }
 
-         }
 
-         /// <summary>
 
-         /// 输送线任务完成
 
-         /// </summary>
 
-         /// <param name="plcName">Plc</param>
 
-         /// <param name="convNo">输送线出口</param>
 
-         /// <param name="isCheckEndPos">是否检测当前地址和任务目标地址一致</param>
 
-         /// <param name="isTaskDelete">是否删除输送线任务</param>
 
-         public override void ConveyorTaskFinish(string plcName, string convNo, bool isCheckEndPos = true, bool isTaskDelete = false)
 
-         {
 
-             try
 
-             {
 
-                 var plc = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == plcName);
 
-                 var conveyorTo = plc.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == convNo);
 
-                 var cs = conveyorTo.EquSignal_Conv;
 
-                 if (cs.DB521_Tasknum > 0 && cs.DB521_Request)
 
-                 {
 
-                     if (convNo == "1401" || convNo == "1416")
 
-                     {
 
-                         Log4netHelper.Logger_Info.InfoFormat(string.Format("工位[{0}]获取删除任务请求信号成功!", convNo));
 
-                     }
 
-                     //调用函数完成任务
 
-                     string result = TryCachHelper.TryExecute((db) =>
 
-                     {
 
-                         WCS_TASK taskcur = db.Queryable<WCS_TASK>().First(v => v.TASK_NO == cs.DB521_Tasknum && v.TASK_WKSTATUS < 99);
 
-                         if (taskcur == null) return;
 
-                         if (isCheckEndPos)
 
-                         {
 
-                             if (taskcur.TASK_COMTYPE != 6 && taskcur.TASK_POSIDTO != convNo) return;
 
-                         }
 
-                         //任务类型不是出库/搬运/移动类型
 
-                         if (taskcur.TASK_COMTYPE != 2 && taskcur.TASK_COMTYPE != 4 && taskcur.TASK_COMTYPE != 5) return;
 
-                         //var task = db.Queryable<WCS_TASK>().First(v => v.TASK_WKSTATUS == 99 && v.TASK_POSIDFROM == "1390" && v.TASK_POSIDTO == taskcur.TASK_POSIDTO);
 
-                         //if (task == null)
 
-                         //{
 
-                             //修改任务的状态
 
-                             db.Updateable<WCS_TASK>(it => new WCS_TASK() { TASK_WKSTATUS = 99, TASK_EDITUSERNO = "WCS", TASK_EDITDATETIME = DateTime.Now })
 
-                               .Where(it => it.TASK_NO == taskcur.TASK_NO)
 
-                               .ExecuteCommand();
 
-                         //}
 
-                         //else 
 
-                         //{
 
-                         //    BaseWorkflow.AddLedErrorMsg(convNo, string.Format("目标工位[{0}]上一个箱子[{1}]存在未完成任务[{2}]",task.TASK_POSIDTO, task.TASK_BOXBARCODE,task.TASK_NO), 0);
 
-                         //   // LogMessageHelper.RecordLogMessage(string.Format("上一个箱子[{0}]存在未完成任务", task.TASK_BOXBARCODE, task.TASK_NO), true, LogLevelEnum.INFO.ToString());
 
-                         //    throw new Exception(string.Format("目标工位[{0}]上一个箱子[{1}]存在未完成任务[{2}]", task.TASK_POSIDTO, task.TASK_BOXBARCODE, task.TASK_NO));
 
-                            
 
-                         //}
 
-                     });
 
-                     if (!string.IsNullOrWhiteSpace(result))
 
-                     {
 
-                         throw new Exception(result);
 
-                     }
 
-                     else 
 
-                     {
 
-                         if (convNo == "1401" || convNo == "1416")
 
-                         {
 
-                             Log4netHelper.Logger_Info.InfoFormat(string.Format("工位[{0}]任务[{1}]标识完成成功!", convNo, cs.DB521_Tasknum));
 
-                         }
 
-                     }
 
-                     if (isTaskDelete)
 
-                     {
 
-                         if (cs.DB521_Tasknum > 0 && cs.DB523_Fault == false && cs.CvDB51_PH_Status == false
 
-                             //&& cs.DB521_Goodsend == Convert.ToInt32(convNo) 
 
-                             && cs.DB521_Request)
 
-                         {
 
-                             var converywrite = new WCSWriteToConveyorSignal()
 
-                             {
 
-                                 Plc = plc.Plc,
 
-                                 DBName = plc.WriteDBName,
 
-                                 ConveyorNo = convNo,
 
-                                 WriteStartAddress = cs.EquDbInfo_ReadWrite.DBReadIndox,
 
-                                 TaskDelete = true
 
-                             };
 
-                        
 
-                             WriteInfoToConv(cs, converywrite, true);
 
-                         }
 
-                     }
 
-                 }
 
-             }
 
-             catch (Exception ex)
 
-             {
 
-                 LogMessageHelper.RecordLogMessage(ex);
 
-             }
 
-         }
 
-         private void Conv_ScanBarCodeExeTask()
 
-         {
 
-             Conv_ScanningRequest(Conv_1390, Current.Pvchouseputong, Conv_1418);
 
-         }
 
-         public string TranslationBarCode(string barCode)
 
-         {
 
-             var arr = barCode.Split('}');
 
-             return arr[1];
 
-         }
 
-         protected virtual void Conv_ScanningRequest(string convPosFrom, string warehouseid, string exitNo = "")
 
-         {
 
-             try
 
-             {
 
-                 var plc = Current.PlcSet.FirstOrDefault(v => v.PLC_NAME == PlcName);
 
-                 var conveyor = plc.WCS_EquipmentInfoSet.FirstOrDefault(v => v.Equ_No == convPosFrom);
 
-                 var cs = conveyor.EquSignal_Conv;
 
-                 if (!cs.DB521_Request) return;
 
-                 if (cs.DB520_Confirm) return;
 
-                 WCS_TASK task = QueryTaskByCode(cs, convPosFrom, exitNo);
 
-                 if (task == null)
 
-                 {
 
-                     string code = TranslationBarCode(cs.BarCodeStr);
 
-                     var param = new GetInTaskParam()
 
-                     {
 
-                         ContainerBarCode = code,
 
-                         ContainerType = 1,
 
-                         MatBarCode = string.Empty,
 
-                         WareHouseId = warehouseid,
 
-                         EquipmentNo = convPosFrom,
 
-                         EndPostion = string.Empty,
 
-                         Memo2 = exitNo
 
-                     };
 
-                     task = BaseWorkflow.GetWcsInTask(param);
 
-                 }
 
-                 if (task == null) return;
 
-                 //判断任务是否已经执行
 
-                 if (task.TASK_WKSTATUS >= 2)
 
-                 {
 
-                     if (task.TASK_POSIDFROM != task.TASK_POSIDCUR)
 
-                     {
 
-                         task = SugarBase.DB.Queryable<WCS_TASK>().First(v => v.TASK_POSIDFROM == convPosFrom && v.TASK_POSIDCUR == convPosFrom && v.TASK_COMTYPE == 6);
 
-                         if (task == null)
 
-                         {
 
-                             #region 重码异常口排出
 
-                             string message = string.Format("条码[{0}]是重码。", cs.BarCodeStr);
 
-                             LogMessageHelper.RecordLogMessage(message);
 
-                             var wcstask = new WCS_TASK()
 
-                             {
 
-                                 TASK_WMSNO = "wcs_" + DateTime.Now.ToString("yyyyMMddhhmmss"),
 
-                                 TASK_COMTYPE = (int)ComTypeEnum.托盘异常退回,
 
-                                 TASK_SYSTYPE = "WCS",
 
-                                 TASK_POSIDFROM = convPosFrom,//起点地址
 
-                                 TASK_POSIDCUR = convPosFrom,
 
-                                 TASK_POSIDNEXT = convPosFrom,
 
-                                 TASK_POSIDMOVE = "",
 
-                                 TASK_PRIORITY = 1,
 
-                                 TASK_WKSTATUS = 1,
 
-                                 TASK_WHID = Current.Pvchouseputong,
 
-                                 TASK_ADDUSERNO = "WCS",
 
-                                 TASK_ADDDATETIME = DateTime.Now,
 
-                                 TASK_EDITUSERNO = "WCS",
 
-                                 TASK_EDITDATETIME = DateTime.Now,
 
-                                 TASK_NOTES = "",
 
-                                 TASK_RGVNO = "",
 
-                                 TASK_BOXBARCODE = "MultipleCoding_" + DateTime.Now.ToString("yyyyMMddhhmmss"),
 
-                                 TASK_POSIDTO = Conv_1418
 
-                             };
 
-                             string result = TryCachHelper.TryTranExecute((db) =>
 
-                             {
 
-                                 int id = db.Insertable(wcstask).ExecuteReturnIdentity();
 
-                                 if (id <= 0)
 
-                                 {
 
-                                     throw new Exception(string.Format("重码[{0}]添加异常排出任务失败。", cs.BarCodeStr));
 
-                                 }
 
-                                 else
 
-                                 {
 
-                                     wcstask.TASK_NO = id;
 
-                                 }
 
-                                 var task_dtl = new WCS_TASK_DTL()
 
-                                 {
 
-                                     ID = Guid.NewGuid().ToString(),
 
-                                     PARENTID = wcstask.TASK_NO,
 
-                                     TASKNO = wcstask.TASK_NO,
 
-                                     POSIDCUR = convPosFrom,
 
-                                     POSIDNEXT = convPosFrom,
 
-                                     DESCRIPTION = message,
 
-                                     EXECUTEDATE = DateTime.Now
 
-                                 };
 
-                                 db.Insertable(task_dtl).ExecuteReturnIdentity();
 
-                                 BaseWorkflow.AddLedErrorMsg(db, convPosFrom, message, wcstask.TASK_NO, 100);
 
-                             });
 
-                             if (!string.IsNullOrWhiteSpace(result))
 
-                             {
 
-                                 throw new Exception(result);
 
-                             }
 
-                             #endregion;
 
-                         }
 
-                     }
 
-                 }
 
-                 if (task.TASK_WKSTATUS >= 2) return;
 
-                 //WCS_PalletizingCode palletizingCode = null;
 
-                 if (task.TASK_COMTYPE != 6)
 
-                 {
 
-                     //var PalletizingCodeSet = SugarBase.DB.Queryable<WCS_PalletizingCode>().ToList();
 
-                     //palletizingCode = Current.IsAvailableRange_BoxSize(PalletizingCodeSet, task.PalletizingBoxSize, task.TASK_NO);
 
-                     //palletizingCode = PalletizingCodeSet.FirstOrDefault(v => v.IsAvailableRange_BoxSize(task.PalletizingBoxSize, task.TASK_NO));
 
-                     if (task == null)
 
-                     {
 
-                         throw new Exception(string.Format("输送线[{0}]任务[{1}]未获取到码垛清单,请维护码垛信息.", convPosFrom, task.TASK_NO));
 
-                     }
 
-                 }
 
-                 bool notask = false;
 
-                 int goodsend = 0;
 
-                 if (task.TASK_COMTYPE == (int)ComTypeEnum.托盘异常退回)
 
-                 {
 
-                     notask = true;
 
-                     goodsend = Convert.ToInt32(exitNo);
 
-                 }
 
-                 else
 
-                 {
 
-                     var routeSet = EquRouteHelper.QueryRoute(convPosFrom, task.TASK_POSIDTO);
 
-                     var routes = routeSet.Where(v => v.ROUTE_STARTPOS == convPosFrom).ToList();
 
-                     if (routes.Count() == 0)
 
-                     {
 
-                         throw new Exception(string.Format("输送线扫描位置[{0}]任务[{1}]查询路由失败。", convPosFrom, task.TASK_NO));
 
-                     }
 
-                     else
 
-                     {
 
-                         goodsend = Convert.ToInt32(routes.First().ROUTE_SONPOS);
 
-                     }
 
-                 }
 
-                 if (goodsend == 0) return;
 
-                 var converywrite = new WCSWriteToConveyorSignal()
 
-                 {
 
-                     Plc = plc.Plc,
 
-                     DBName = plc.WriteDBName,
 
-                     ConveyorNo = convPosFrom,
 
-                     WriteStartAddress = cs.EquDbInfo_ReadWrite.DBReadIndox,
 
-                     Tasknum = task.TASK_NO,
 
-                     Goodstype = Convert.ToInt32(task.TASK_POSIDTO),
 
-                     Goodssize = task.TASK_COMTYPE != 6 ? Convert.ToInt32(task.PalletizingBoxSize) : 0,
 
-                     Goodsstart = Convert.ToInt32(convPosFrom),
 
-                     //UpMatRequest = task.TASK_ORDERTYPE >= 1 ? true : false,
 
-                     TASK_WEIGHT = task.TASK_COMTYPE != 6 ? Convert.ToInt32(task.TASK_WEIGHT) : 0,
 
-                     Notask = notask,
 
-                     Goodsend = goodsend
 
-                 };
 
-                 WriteInfoToConv(cs, converywrite);
 
-             }
 
-             catch (Exception ex)
 
-             {
 
-                 BaseWorkflow.AddLedErrorMsg(convPosFrom, ex.Message, 0);
 
-                 LogMessageHelper.RecordLogMessage(ex);
 
-             }
 
-         }
 
-         protected WCS_TASK QueryTaskByCode(ConvSignal cs, string convPosFrom,string exitNo)
 
-         {
 
-             WCS_TASK task = null;
 
-             if (cs.DB521_BCR_Noread)
 
-             {
 
-                 task = Current.TaskSet.SingleOrDefault(v => v.TASK_POSIDFROM == convPosFrom && v.TASK_POSIDCUR == convPosFrom);
 
-                 if (task == null)
 
-                 {
 
-                     string errormsg = string.Format("箱式输送线[{0}]条码未读出。", convPosFrom);
 
-                     LogMessageHelper.RecordLogMessage(errormsg);
 
-                     BaseWorkflow.AddLedErrorMsg(convPosFrom, errormsg, 0);
 
-                     string wmsno = "wcs_" + DateTime.Now.ToString("yyyyMMddhhmmss");
 
-                     //wms任务异常需要生成退回托盘任务
 
-                     task = new WCS_TASK()
 
-                     {
 
-                         TASK_WMSNO = wmsno,
 
-                         TASK_COMTYPE = (int)ComTypeEnum.托盘异常退回,
 
-                         TASK_SYSTYPE = "WCS",
 
-                         TASK_POSIDFROM = convPosFrom,//起点地址
 
-                         TASK_POSIDCUR = convPosFrom,
 
-                         TASK_POSIDNEXT = convPosFrom,
 
-                         TASK_POSIDMOVE = "",
 
-                         TASK_PRIORITY = 1,
 
-                         TASK_WKSTATUS = 1,
 
-                         TASK_WHID = "PVC普通立库",
 
-                         TASK_ADDUSERNO = "WCS",
 
-                         TASK_ADDDATETIME = DateTime.Now,
 
-                         TASK_EDITUSERNO = "WCS",
 
-                         TASK_EDITDATETIME = DateTime.Now,
 
-                         TASK_NOTES = "",
 
-                         TASK_RGVNO = "",
 
-                         TASK_BOXBARCODE = wmsno,
 
-                         TASK_POSIDTO = exitNo
 
-                     };
 
-                     int id = SugarBase.DB.Insertable(task).ExecuteReturnIdentity();
 
-                     if (id <= 0)
 
-                     {
 
-                         throw new Exception(string.Format("添加WCS读码异常任务失败"));
 
-                     }
 
-                     else
 
-                     {
 
-                         task.TASK_NO = id;
 
-                     }
 
-                     
 
-                     var task_dtl = new WCS_TASK_DTL()
 
-                     {
 
-                         ID = Guid.NewGuid().ToString(),
 
-                         PARENTID = task.TASK_NO,
 
-                         TASKNO = task.TASK_NO,
 
-                         POSIDCUR = convPosFrom,
 
-                         POSIDNEXT = convPosFrom,
 
-                         DESCRIPTION = errormsg,
 
-                         EXECUTEDATE = DateTime.Now
 
-                     };
 
-                     SugarBase.DB.Insertable(task_dtl).ExecuteReturnIdentity();
 
-                 }
 
-             }
 
-             else
 
-             {
 
-                 if (string.IsNullOrWhiteSpace(cs.BarCodeStr)) throw new Exception(string.Format("输送线[{0}]存在请求信号,但没读取到条码信息。", convPosFrom));
 
-                 if (cs.BarCodeStr.ToUpper().Contains("ERROR") ||
 
-                     cs.BarCodeStr.ToUpper().Contains("N") ||
 
-                     cs.BarCodeStr.Contains("?"))
 
-                 {
 
-                     throw new Exception(string.Format("输送线[{0}]存在请求信号,但条码是:[{1}]存在报错,PLC应该报条码错误信号", convPosFrom, cs.BarCodeStr));
 
-                 }
 
-             }
 
-             if (task == null)
 
-             {
 
-                 string code = TranslationBarCode(cs.BarCodeStr);
 
-                 task = Current.TaskSet.FirstOrDefault(v => v.TASK_BOXBARCODE == code);
 
-             }
 
-             if (task == null)
 
-             {
 
-                 task = Current.TaskSet.FirstOrDefault(v => v.TASK_POSIDFROM == convPosFrom && v.TASK_POSIDCUR==convPosFrom && v.TASK_POSIDNEXT==convPosFrom && v.TASK_COMTYPE == (int)ComTypeEnum.托盘异常退回);
 
-             }
 
-             //if (task != null && task.TASK_COMTYPE == (int)ComTypeEnum.托盘异常退回 && task.TASK_WKSTATUS == 2)
 
-             //{
 
-             //    int updateResult = SugarBase.DB.Updateable<WCS_TASK>(it => new WCS_TASK() { TASK_WKSTATUS = 99, TASK_EDITUSERNO = "wcs", TASK_EDITDATETIME = DateTime.Now })
 
-             //                                .Where(it => it.TASK_NO == task.TASK_NO)
 
-             //                                .ExecuteCommand();
 
-             //    if (updateResult <= 0)
 
-             //    {
 
-             //        throw new Exception(string.Format("异常任务[{0}]结束失败。", task.TASK_NO));
 
-             //    }
 
-             //    task = null;
 
-             //}
 
-             return task;
 
-         }
 
-     }
 
- }
 
 
  |