using System; using System.Collections.Generic; using System.Linq; using System.Web.Http; using HH.WCS.Mobox3.AnGang.dispatch; using HH.WCS.Mobox3.AnGang.wms; using HH.WCS.Mobox3.AnGang.models; using Newtonsoft.Json; using static HH.WCS.Mobox3.AnGang.api.ApiModel; using HH.WCS.Mobox3.AnGang.util; namespace HH.WCS.Mobox3.AnGang.api { /// /// 测试用,如果项目中要和设备对接,前期设备无法测试,用接口模拟 /// [RoutePrefix("api")] public class DebugController : System.Web.Http.ApiController { /// /// AGV状态一键回报1462-国自 /// /// [HttpPost] [Route("AGVSeriesReports")] public GzResults AGVSeriesReports(UpdateTaskState model) { GzResults gzResults = new GzResults(); gzResults.GzResultList = new List(); var orderStatus = new orderStatusReportParme() { orderName = model.TaskID, agvIDList = model.ForkliftNo, orderStatus = "waiting", }; var temp1 = GZRobot.orderStatusReport(orderStatus); gzResults.GzResultList.Add(temp1); orderStatus.orderStatus = "source_finish"; var temp2 = GZRobot.orderStatusReport(orderStatus); gzResults.GzResultList.Add(temp2); orderStatus.orderStatus = "dest_finish"; var temp3 = GZRobot.orderStatusReport(orderStatus); gzResults.GzResultList.Add(temp3); orderStatus.orderStatus = "finish"; var temp4 = GZRobot.orderStatusReport(orderStatus); gzResults.GzResultList.Add(temp4); return gzResults; } /// /// AGV状态一键回报14-国自 /// /// [HttpPost] [Route("AGVSeriesReports-14")] public GzResults AGVSeriesReports14(UpdateTaskState model) { GzResults gzResults = new GzResults(); gzResults.GzResultList = new List(); var orderStatus = new orderStatusReportParme() { orderName = model.TaskID, agvIDList = model.ForkliftNo, orderStatus = "waiting", }; var temp1 = GZRobot.orderStatusReport(orderStatus); gzResults.GzResultList.Add(temp1); orderStatus.orderStatus = "source_finish"; var temp2 = GZRobot.orderStatusReport(orderStatus); gzResults.GzResultList.Add(temp2); return gzResults; } /// /// AGV状态一键回报62-国自 /// /// [HttpPost] [Route("AGVSeriesReports-62")] public GzResults AGVSeriesReports62(UpdateTaskState model) { GzResults gzResults = new GzResults(); gzResults.GzResultList = new List(); var orderStatus = new orderStatusReportParme() { orderName = model.TaskID, agvIDList = model.ForkliftNo, orderStatus = "dest_finish", }; var temp3 = GZRobot.orderStatusReport(orderStatus); gzResults.GzResultList.Add(temp3); orderStatus.orderStatus = "finish"; var temp4 = GZRobot.orderStatusReport(orderStatus); gzResults.GzResultList.Add(temp4); return gzResults; } /// /// 初始化数据库 /// /// [HttpPost] [Route("CreateDatabase")] public string CreateDatabase(CoverInfo model) { try { var db = new SqlHelper().GetInstance(); var cover = model.IsCover; var entityTypes = new Type[] { typeof(TN_CAR_IN), typeof(TN_CG_Detail), typeof(TN_Container), typeof(TN_Loc_Container), typeof(TN_Location), typeof(TN_Task), typeof(TN_Task_Action), typeof(SYSHelper.OI_SYS_MAXID), }; using (var tran = db.Ado.UseTran()) { if (cover) { // 删除所有表(按依赖关系倒序) var tables = db.DbMaintenance.GetTableInfoList(); foreach (var table in tables.OrderByDescending(t => t.Name)) { db.DbMaintenance.DropTable(table.Name); } // 创建新表 db.CodeFirst.InitTables(entityTypes); //db.CodeFirst.BackupTable().InitTables(entityTypes); } else { db.CodeFirst.InitTables(entityTypes); } tran.CommitTran(); } } catch (Exception ex) { LogHelper.Info($"发生了异常"); return "初始化数据库错误" + ex.Message; } return "成功"; } /// /// DEBUG:插入货位、容器、货品信息 /// /// [HttpPost] [Route("InsertLocCntrCg")] public string InsertLocCntrCg(LocCntrCg locCntrCg) { var db = new SqlHelper().GetInstance(); try { using (var tran = db.UseTran()) { LogHelper.Info("LogCntrCg:" + JsonConvert.SerializeObject(locCntrCg)); if (string.IsNullOrEmpty(locCntrCg.LocCode)) { return "参数非法"; } var loc = db.Queryable().First(a => a.S_CODE == locCntrCg.LocCode); if (loc == null) { var newLoc = new TN_Location { S_CODE = locCntrCg.LocCode, S_AREA_CODE = locCntrCg.LocArea ?? "" }; if (db.Insertable(newLoc).ExecuteCommand() <= 0) { tran.RollbackTran(); LogHelper.Info($"插入位置{locCntrCg.LocCode}失败"); return "插入失败"; } loc = newLoc; } //if (loc.N_CURRENT_NUM == 0) { // loc.N_CURRENT_NUM = 1; // if (db.Updateable(loc).UpdateColumns( // it => new { it.N_CURRENT_NUM, it.T_MODIFY }).ExecuteCommand() <= 0) { // tran.RollbackTran(); // LogHelper.Info($"修改位置{locCntrCg.LocCode}失败"); // continue; // } //} if (string.IsNullOrEmpty(locCntrCg.CntrCode)) { tran.CommitTran(); LogHelper.Info("容器号为空,不再读取后面的数据"); return "容器号为空,不再读取后面的数据"; } var locCntrRel = db.Queryable().First(a => a.S_LOC_CODE == locCntrCg.LocCode && a.S_CNTR_CODE == locCntrCg.CntrCode); if (locCntrRel == null) { var newLocCntrRel = new TN_Loc_Container { S_LOC_CODE = locCntrCg.LocCode, S_CNTR_CODE = locCntrCg.CntrCode }; loc.N_CURRENT_NUM = 1; if (db.Insertable(newLocCntrRel).ExecuteCommand() <= 0 && db.Updateable(loc).UpdateColumns(c => c.N_CURRENT_NUM).ExecuteCommand() <= 0) { tran.RollbackTran(); LogHelper.Info($"插入位置托盘关系{locCntrCg.LocCode}-{locCntrCg.CntrCode}失败"); return "插入失败"; } } if (string.IsNullOrEmpty(locCntrCg.ItemCode)) { tran.CommitTran(); LogHelper.Info("物料号为空,不再读取后面的数据"); return "物料号为空,不再读取后面的数据"; } var cgDetail = db.Queryable().First(a => a.S_CNTR_CODE == locCntrCg.CntrCode && a.S_ITEM_CODE == locCntrCg.ItemCode); if (cgDetail == null) { var locList = new List(); locList.Add(new TN_CG_Detail { S_CNTR_CODE = locCntrCg.CntrCode, S_ITEM_CODE = locCntrCg.ItemCode, S_BATCH_NO = locCntrCg.BatchNo ?? "" }); if (db.Insertable(locList).ExecuteCommand() <= 0) { tran.RollbackTran(); LogHelper.Info($"插入托盘物料关系{locCntrCg.CntrCode}-{locCntrCg}失败"); return "插入失败"; } } tran.CommitTran(); } return "插入数据成功"; } catch (Exception ex) { return $"{ex.Message}"; } } [HttpPost] [Route("SetTaskWeight")] public string SetTaskWeight(SetTaskWeightInfo model) { var db = new SqlHelper().GetInstance(); var cgDetail = db.Queryable((d, t) => d.S_CNTR_CODE == t.S_CNTR_CODE) .Where((d, t) => t.S_CODE == model.TaskNo).First(); if (cgDetail == null) { return "找不到对应的物料信息"; } cgDetail.F_QTY = model.Weight; try { if (db.Updateable(cgDetail).UpdateColumns(it => it.F_QTY) .ExecuteCommand() <= 0) { return "修改失败"; } return "修改成功"; } catch (Exception ex) { return ex.Message; } } } public class ReturnResults { public List ResultList { set; get; } } public class GzResults { public List GzResultList { set; get; } } public class LocCntrCg { public string LocCode { get; set; } public string LocArea { get; set; } public string CntrCode { get; set; } public string ItemCode { get; set; } public string BatchNo { get; set; } } /// /// 模拟 AGV 传递信号,用于更改任务状态 /// public class UpdateTaskState { /// /// 任务ID /// public string TaskID { set; get; } /// /// AGV 小车号 /// public string ForkliftNo { set; get; } /// /// AGV 下一个状态 /// public int NextState { set; get; } } public class CoverInfo { public bool IsCover { set; get; } = true; } public class SetTaskWeightInfo { public string TaskNo { set; get; } public float Weight { set; get; } } }