using HH.WCS.Mobox3.NFLZ.util; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using static HH.WCS.Mobox3.NFLZ.wms.SYSHelper; namespace HH.WCS.Mobox3.NFLZ.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, string S_AGV_NO = "") { Console.WriteLine("开始取货"); var res = false; var db = new SqlHelper().GetInstance(); task.S_B_STATE = status; if (S_AGV_NO != "") { task.S_EQ_NO = S_AGV_NO; } db.Updateable(task).UpdateColumns(it => new { it.S_B_STATE,it.N_B_STATE,it.S_EQ_NO }).ExecuteCommand(); return res; } internal static bool UpdatePrioryty(WCSTask task,int Prioryty) { var res = false; var db = new SqlHelper().GetInstance(); task.N_PRIORITY = Prioryty; task.T_MODIFY = DateTime.Now; db.Updateable(task).UpdateColumns(it => new { it.N_PRIORITY, 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 List GetTaskByStart(string bit) { var db = new SqlHelper().GetInstance(); var task = db.Queryable().Where(a => a.S_START_LOC == bit).ToList(); return task; } internal static List GetTaskByEnd(string bit) { var db = new SqlHelper().GetInstance(); var task = db.Queryable().Where(a => a.S_END_LOC== bit).ToList(); return task; } internal static List GetTaskByType(string taskType) { var db = new SqlHelper().GetInstance(); return db.Queryable().Where(a => a.S_TYPE== taskType).ToList(); } internal static bool CreateTask(string no, string from, string to, string taskType, int pri, string cntrInfo, int cntrCount = 1, int startLayer = 1, int endLayer = 1) { var fromLoc = LocationHelper.GetLocation(from); var endLoc = LocationHelper.GetLocation(to); WCSTask TN_Task = new WCSTask() { S_CODE = GenerateTaskNo(), S_START_AREA = fromLoc.S_AREA_CODE, S_END_AREA = endLoc.S_AREA_CODE, S_START_LOC = from, S_END_LOC = to, S_TYPE = taskType, S_OP_CODE = no, N_PRIORITY = pri, N_SCHEDULE_TYPE = 1, N_B_STATE = 0, S_CNTR_CODE = cntrInfo, N_START_LAYER = startLayer, N_END_LAYER = endLayer, N_CNTR_COUNT = cntrCount }; return CreateTask(TN_Task); } internal static bool CheckExist(string no) { return GetTask(no) != null; } internal static bool UpdateStatus(string no, int state) { var res = false; var db = new SqlHelper().GetInstance(); var task = db.Queryable().Where(a => a.S_CODE== no).First(); if (task != null) { task.N_B_STATE = state; task.S_B_STATE = WCSTask.GetStateStr(state); //需要判断任务是否失败或者已完成,不允许再修改 res = db.Updateable(task).UpdateColumns(it => new { it.N_B_STATE, 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 && a.N_ACTION_CODE == code) > 0; } 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; task.S_B_STATE = WCSTask.GetStateStr(task.N_B_STATE); task.T_START_TIME = DateTime.Now; db.Updateable(task).UpdateColumns(it => new { it.N_B_STATE, it.S_B_STATE, it.T_START_TIME }).ExecuteCommand(); } } } internal static void End(WCSTask task) { var db = new SqlHelper().GetInstance(); if (task != null) { task.N_B_STATE = 3; task.S_B_STATE = WCSTask.GetStateStr(task.N_B_STATE); task.T_END_TIME = DateTime.Now; db.Updateable(task).UpdateColumns(it => new { it.N_B_STATE, it.S_B_STATE, it.T_END_TIME }).ExecuteCommand(); } } internal static void Fail(WCSTask task) { var db = new SqlHelper().GetInstance(); if (task != null) { //判断有没有取货完成,没有就变成失败。有取货完成默认完成了(跟据项目而定,有些项目人工拉走了也没有放到终点)。 task.N_B_STATE = 5; task.S_B_STATE = WCSTask.GetStateStr(task.N_B_STATE); db.Updateable(task).UpdateColumns(it => new { it.N_B_STATE, it.S_B_STATE }).ExecuteCommand(); } } 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 List GetTaskListByState(string status) { var db = new SqlHelper().GetInstance(); return db.Queryable().Where(a => a.S_B_STATE== status).ToList(); } internal static List GetTaskListByState(int state) { var db = new SqlHelper().GetInstance(); return db.Queryable().Where(a => a.N_B_STATE == state).ToList(); } internal static List GetWaitingTaskList() { var db = new SqlHelper().GetInstance(); return db.Queryable().Where(a => a.N_B_STATE == 0).ToList(); } internal static void UpdateStorStatus(string S_CNTR_CODE, int v) { var db = new SqlHelper().GetInstance(); string s_state = ""; switch (v) { case 1: s_state = "配盘完成"; break; case 2: s_state = "创建作业"; break; case 3: s_state = "作业执行"; break; case 4: s_state = "完成出库"; break; case 5: s_state = "分拣完成"; break; } var oldstate = v - 1; var cn = db.Queryable().Where(a => a.S_CNTR_CODE == S_CNTR_CODE && a.N_B_STATE == oldstate).First(); if (cn != null) { cn.N_B_STATE = v; cn.S_B_STATE = s_state; db.Updateable(cn).UpdateColumns(it => new { it.N_B_STATE, it.S_B_STATE }).ExecuteCommand(); } } internal static void CreateMiddleTable() { //var order1 = new SqlHelper().CreateTable(); } #region 林芝WCS业务处理 /// /// 林芝-查询工单信息--执行中或者暂停 /// /// /// public static LinZhiWorkOrder GetLinZhiWorkOrder(string lineNo) { var db = new SqlHelper().GetInstance(); var order = db.Queryable().Where(a => a.S_PLineNo == lineNo && a.S_WorkState == "执行中").First(); //var order = new SqlHelper().Get(a => a.S_PLineNo == lineNo && (a.S_WorkState == "执行中"), a => a.T_CREATE, true); return order; } internal List GetLinJianglysisOrderWork(string orderType) { var order = new SqlHelper().GetList(a => a.S_ORDER_TYPE == orderType && a.S_WorkState == "执行中"); return order; } internal static void CreateLinJiangMiddleTableTest() { var order4 = new SqlHelper().CreateTable();//HTTP接口调用失败重发中间表 } /// /// 林芝-查询当前设备信息 /// /// /// public static LinZhiDeviceState GetLinJiangDeviceState(string deviceName) { var order = new SqlHelper().Get(a => a.DeviceName == deviceName, a => a.DeviceTime, true); return order; } internal static bool UpdateLinJiangDeviceState(LinZhiDeviceState deviceInfo, string status, string dateTime, string extData = "") { var res = false; var db = new SqlHelper().GetInstance(); deviceInfo.DeviceState = status; deviceInfo.DeviceTime = dateTime; db.Updateable(deviceInfo).UpdateColumns(it => new { it.DeviceState, it.DeviceTime }).ExecuteCommand(); return res; } /// /// 林芝-插入设备信息 /// /// /// internal static bool LinJiangInsertDeviceState(LinZhiDeviceState deviceState) { var db = new SqlHelper().GetInstance(); return db.Insertable(deviceState).ExecuteCommand() > 0; } /// /// 林芝-查询托盘信息-下线时间之前的数据 /// /// /// public static List GetLinZhiTrayInfoList(string dateTime, string deviceName) { var db = new SqlHelper().GetInstance(); var order = new SqlHelper().GetList(a => Convert.ToDateTime(a.dateTime.Trim()) < Convert.ToDateTime(dateTime) && a.deviceName == deviceName); var trayInfo = new SqlHelper().GetInstance().Queryable().ToList(); LogHelper.Info("富乐托盘表全部数据:" + JsonConvert.SerializeObject(trayInfo)); //if (order != null && order.Count > 0) //{ // //删除当前产线下线时间前10分钟的托盘数据 // for (int i = order.Count - 1; i >= 0; i--) // { // } //} return order; } /// /// 林芝-更改工单信息:托规、批次号、物料层数 /// /// /// /// internal static bool UpdateWorkInfo(LinZhiWorkOrder task, string trayRule = "", string batchNo = "", string itemLayer = "") { var res = false; var db = new SqlHelper().GetInstance(); task.S_TrayRules = trayRule; task.S_BatchNo = batchNo; task.S_ItemLayer = itemLayer; db.Updateable(task).UpdateColumns(it => new { it.S_TrayRules, it.S_BatchNo, it.S_ItemLayer }).ExecuteCommand(); return res; } /// /// 林芝-查询托盘信息-全部-为了对比当前是否为正常下线 /// /// /// public static List GetLinJiangTrayInfoAllList(string deviceName) { var order = new SqlHelper().GetList(a => a.deviceName == deviceName); return order; } #endregion } }