using System; using System.Collections.Generic; using System.Linq; using System.Web.Http; using HH.WCS.Mobox3.AnGang.dispatch; using HH.WCS.Mobox3.AnGang.models; using HH.WCS.Mobox3.AnGang.util; using HH.WCS.Mobox3.AnGang.wms; using Newtonsoft.Json; using SqlSugar; using static HH.WCS.Mobox3.AnGang.api.ApiModel; 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() { try { var db = new SqlHelper().GetInstance(); var entityTypes = new Type[] { }; //db.CodeFirst.InitTables(entityTypes); } catch (Exception ex) { LogHelper.Info($"发生了异常"); return "初始化数据库错误" + ex.Message; } return "成功"; } /// /// DEBUG:根据任务号设置物料重量 /// /// /// [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 "找不到对应的物料信息"; } var task = db.Queryable() .Where(t => t.S_CODE == model.TaskNo).First(); if (cgDetail == null) { return "找不到对应的任务号"; } cgDetail.F_WEIGHT = model.Weight; task.F_WEIGHT = model.Weight; try { using (var tran = db.Ado.UseTran()) { if (db.Updateable(cgDetail).UpdateColumns(it => it.F_WEIGHT) .ExecuteCommand() <= 0) { tran.RollbackTran(); return "修改失败"; } if (db.Updateable(task).UpdateColumns(it => it.F_WEIGHT).ExecuteCommand() <= 0) { tran.RollbackTran(); return "修改失败"; } tran.CommitTran(); } LogHelper.Info($"模拟AGV传递物料重量:修改任务号{task.S_CODE}重量为{model.Weight}", "HosttoagvTask"); return "修改成功"; } catch (Exception ex) { return ex.Message; } } [HttpPost] public string AddCntrData() { var db = new SqlHelper().GetInstance(); try { //var locCntrRelList = db.Queryable(); //var result = db.Queryable() // .GroupBy(d => d.S_CNTR_CODE) // 按 S_CNTR_CODE 分组 // .Select(d => new CntrCodeCountResult { // S_CNTR_CODE = d.S_CNTR_CODE, // Count = SqlFunc.AggregateCount(d.S_ITEM_CODE) // 计算每组的条目数 // }) // .ToList(); //var cntrList = locCntrRelList.Select(c => c.S_CNTR_CODE); var result = db.Queryable() .LeftJoin((detail, container) => detail.S_CNTR_CODE == container.S_CNTR_CODE) .GroupBy(detail => detail.S_CNTR_CODE) .Select((detail, container) => new CntrCodeCountResult { S_CNTR_CODE = detail.S_CNTR_CODE, Count = SqlFunc.AggregateCount(detail.S_ITEM_CODE) }) .ToList(); var cntrList = db.Queryable().ToList(); var cntrListToUpdate = new List(); var cntrListToInsert = new List(); foreach (var cntr in result) { var oldCntr = cntrList.Where(c => c.S_CODE == cntr.S_CNTR_CODE).First(); if (oldCntr == null) { cntrListToUpdate.Add(new TN_Container { S_CODE = cntr.S_CNTR_CODE, N_DETAIL_COUNT = cntr.Count }); } if (oldCntr.N_DETAIL_COUNT != cntr.Count) { cntrListToUpdate.Add(new TN_Container { S_CODE = cntr.S_CNTR_CODE, N_DETAIL_COUNT = cntr.Count }); } } using (var tran = db.Ado.UseTran()) { if (cntrListToUpdate.Count > 0 && db.Updateable(cntrListToUpdate).ExecuteCommand() <= 0) { tran.RollbackTran(); return "更新失败"; } if (cntrListToInsert.Count > 0 && db.Insertable(cntrListToInsert).ExecuteCommand() <= 0) { tran.RollbackTran(); return "插入失败"; } tran.CommitTran(); } } catch (Exception ex) { return ex.Message; } return "success"; } } public class CntrCodeCountResult { public string S_CNTR_CODE { get; set; } // 容器代码 public int Count { get; set; } // 该容器代码对应的条目数 } public class ReturnResults { public List ResultList { set; get; } } public class GzResults { public List GzResultList { set; get; } } /// /// 模拟 AGV 传递信号,用于更改任务状态 /// public class UpdateTaskState { /// /// 任务ID /// public string TaskID { set; get; } /// /// AGV 小车号 /// public string ForkliftNo { set; get; } /// /// AGV 下一个状态 /// public int NextState { set; get; } } public class SetTaskWeightInfo { public string TaskNo { set; get; } public float Weight { set; get; } } }