using HH.WCS.Mobox3.YNJT_BZP.models; using HH.WCS.Mobox3.YNJT_BZP.util; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace HH.WCS.Mobox3.YNJT_BZP.wms { internal class WCSHelper { internal static string GenerateTaskNo() { var id = SYSHelper.GetSerialNumber("任务号", "TN"); var date = DateTime.Now.ToString("yyMMdd"); return $"TN{date}{id.ToString().PadLeft(4, '0')}"; } internal static bool UpdateStatus(WCSTask task, string status) { var res = false; var db = new SqlHelper().GetInstance(); task.S_B_STATE = status; db.Updateable(task).UpdateColumns(it => new { it.N_B_STATE,it.S_B_STATE }).ExecuteCommand(); return res; } internal static bool UpdateStatus(WCSTask task) { var res = false; var db = new SqlHelper().GetInstance(); task.S_B_STATE = WCSTask.GetStateStr(task.N_B_STATE); task.T_MODIFY = DateTime.Now; db.Updateable(task).UpdateColumns(it => new {it.N_B_STATE, it.S_B_STATE,it.T_MODIFY ,it.S_EQ_NO }).ExecuteCommand(); return res; } internal static bool UpdateTaskEnd(WCSTask task) { var res = false; var db = new SqlHelper().GetInstance(); task.T_MODIFY = DateTime.Now; db.Updateable(task).UpdateColumns(it => new { it.S_END_LOC, it.S_END_AREA, it.T_MODIFY }).ExecuteCommand(); return res; } internal static bool UpdateInfo(WCSTask task, string sourceNo, string endBit, string status) { var res = false; var db = new SqlHelper().GetInstance(); task.S_B_STATE = status; task.S_OP_CODE = sourceNo; task.S_END_LOC = endBit; db.Updateable(task).UpdateColumns(it => new { it.S_B_STATE, it.S_OP_CODE, it.S_END_LOC }).ExecuteCommand(); return res; } internal static WCSTask GetTask(string no) { var db = new SqlHelper().GetInstance(); var task = db.Queryable().Where(a => a.S_CODE== no).First(); return task; } internal static WCSTask GetTaskBySrcNo(string no) { var db = new SqlHelper().GetInstance(); var task = db.Queryable().Where(a => a.S_OP_CODE== no).First(); return task; } internal static WCSTask GetTaskBySrcNoAndScheduleType(string no ,string scheduleType) { var db = new SqlHelper().GetInstance(); var task = db.Queryable().Where(a => a.S_OP_CODE == no && a.S_SCHEDULE_TYPE == scheduleType && a.N_B_STATE < 3).First(); return task; } internal static List GetTaskListBySrcNo(string no) { var db = new SqlHelper().GetInstance(); var task = db.Queryable().Where(a => a.S_OP_CODE == no && a.N_B_STATE < 3).ToList(); return task; } internal static bool checkWmsTaskFinish(string no) { bool result = false; var db = new SqlHelper().GetInstance(); var wmsTask = db.Queryable().Where(a => a.S_CODE == no).First(); if (wmsTask != null) { var bo1 = db.Queryable().Where(a => a.S_OP_CODE == no && a.N_B_STATE < 3).Count() == 0; var bo2 = db.Queryable().Where(a => a.S_OP_CODE == no && a.S_END_LOC == wmsTask.S_END_LOC && a.N_B_STATE == 3).Count() == 1; if (bo1 && bo2) { result = true; } } return result; } internal static WCSTask GetTaskByEqNo(string eqNo) { var db = new SqlHelper().GetInstance(); var task = db.Queryable().Where(a => a.S_EQ_NO == eqNo).OrderByDescending(a => a.T_CREATE).First(); return task; } internal static WCSTask GetTaskByStart(string bit) { var db = new SqlHelper().GetInstance(); var task = db.Queryable().Where(a => a.S_START_LOC == bit.Trim() && a.N_B_STATE < 3).First(); return task; } internal static WCSTask GetTaskByEnd(string bit) { var db = new SqlHelper().GetInstance(); var task = db.Queryable().Where(a => a.S_END_LOC.Trim() == bit.Trim() && a.N_B_STATE < 3).First(); return task; } internal static WCSTask GetTaskByStartAndEnd(string bit) { var db = new SqlHelper().GetInstance(); return db.Queryable().Where(a => (a.S_START_LOC.Trim() == bit.Trim() || a.S_END_LOC.Trim() == bit.Trim()) && a.N_B_STATE < 3).First(); } internal static int GetTaskCountByStartAndEnd(string bit) { var db = new SqlHelper().GetInstance(); return db.Queryable().Where(a => (a.S_START_LOC.Trim() == bit.Trim() || a.S_END_LOC.Trim() == bit.Trim()) && a.N_B_STATE < 3).Count(); } internal static List GetTaskByType(string taskType) { var db = new SqlHelper().GetInstance(); return db.Queryable().Where(a => a.S_TYPE.Trim() == taskType).ToList(); } internal static List GetExecuteTaskByAreaAndRow(string endArea , int row) { var db = new SqlHelper().GetInstance(); var task = db.Queryable() .LeftJoin((a,b) => a.S_END_LOC == b.S_CODE) .Where((a, b) => a.N_B_STATE < 3 && b.S_AREA_CODE == endArea.Trim() && b.N_ROW == row) .ToList(); return task; } internal static bool UpdateStatus(string no, string status) { var res = false; var db = new SqlHelper().GetInstance(); var task = db.Queryable().Where(a => a.S_CODE.Trim() == no).First(); if (task != null) { task.S_B_STATE = status; //需要判断任务是否失败或者已完成,不允许再修改 res = db.Updateable(task).UpdateColumns(it => new { it.S_B_STATE }).ExecuteCommand() > 0; } return res; } internal static bool AddActionRecord(string no, int state, string forkliftNo, string extData) { var db = new SqlHelper().GetInstance(); var action = new TaskAction() { N_ACTION_CODE = state, S_TASK_CODE = no, S_EQ_CODE = forkliftNo, S_EQ_TYPE = "agv", S_DATA = extData }; return db.Insertable(action).ExecuteCommand() > 0; } internal static bool CheckActionRecordExist(string no, int code) { var db = new SqlHelper().GetInstance(); return db.Queryable().Count(a => a.S_TASK_CODE == no.Trim() && a.N_ACTION_CODE == code) > 0; } internal static TaskAction getActionRecord(string no, int code) { var db = new SqlHelper().GetInstance(); return db.Queryable().Where(a => a.S_TASK_CODE == no.Trim() && a.N_ACTION_CODE == code).First(); } internal static void Begin(WCSTask task) { var db = new SqlHelper().GetInstance(); if (task != null) { if (task.N_B_STATE==1) { task.N_B_STATE = 2; WCSHelper.UpdateStatus(task); } } } internal static void End(WCSTask task) { var db = new SqlHelper().GetInstance(); if (task != null) { task.N_B_STATE = 3; WCSHelper.UpdateStatus(task); var mst = WMSHelper.GetWmsTask(task.S_OP_CODE); if (mst != null) { var bo = WCSHelper.checkWmsTaskFinish(mst.S_CODE); if (bo) { mst.N_B_STATE = 2; WMSHelper.UpdateTaskState(mst); } } } } internal static void Fail(WCSTask task) { var db = new SqlHelper().GetInstance(); if (task != null) { //判断有没有取货完成,没有就变成失败。有取货完成默认完成了(跟据项目而定,有些项目人工拉走了也没有放到终点)。 task.N_B_STATE = 4; WCSHelper.UpdateStatus(task); } } /// /// 取消 /// 判断有没有取货完成,没有就变成取消。有取货完成默认强制完成了(跟据项目而定,有些项目人工拉走了也没有放到终点)。 /// /// internal static void Cancel(WCSTask task) { var db = new SqlHelper().GetInstance(); if (task != null) { task.N_B_STATE = 4; if (WCSHelper.CheckActionRecordExist(task.S_CODE, 4)) { WCSHelper.UpdateStatus(task, "强制完成"); } else { WCSHelper.UpdateStatus(task, "取消"); } } } internal static bool CreateTask(WCSTask TN_Task) { try { var db = new SqlHelper().GetInstance(); return db.Insertable(TN_Task).ExecuteCommand() > 0; } catch (Exception ex) { Console.WriteLine(ex.Message); throw; } } internal static bool UpdateWorkOrderStatus(string workNo, string status) { var res = false; var db = new SqlHelper().GetInstance(); var workOrder = db.Queryable().Where(x => x.S_CODE == workNo).First(); if (workOrder != null) { workOrder.S_STATUS = status; db.Updateable(workOrder).UpdateColumns(it => new { it.S_STATUS }).ExecuteCommand(); return true; } return res; } /// /// 根据任务状态获取任务 /// /// /// internal static List GetTaskListByState(string state) { var db = new SqlHelper().GetInstance(); return db.Queryable().Where(a => a.S_B_STATE.Trim() == state && a.S_FACTORY == Settings.FacCode).ToList(); } internal static List GetTaskListByState(int state) { var db = new SqlHelper().GetInstance(); return db.Queryable().Where(a => a.N_B_STATE == state && a.S_FACTORY == Settings.FacCode).ToList(); } internal static List GetWaitingTaskList() { var db = new SqlHelper().GetInstance(); return db.Queryable().Where(a => a.N_B_STATE == 0 && a.S_FACTORY == Settings.FacCode).OrderBy(a => a.T_CREATE).ToList(); } } }