using System; using System.Collections.Generic; using System.Runtime.ConstrainedExecution; using System.Web.Http; using HH.WCS.Mobox3.DSZSH.core; using HH.WCS.Mobox3.DSZSH.models; using HH.WCS.Mobox3.DSZSH.util; using Newtonsoft.Json; using static HH.WCS.Mobox3.DSZSH.api.ApiModel; namespace HH.WCS.Mobox3.DSZSH.api { /// /// 测试用:如果项目中要和设备对接,前期设备无法测试,用接口模拟 /// [RoutePrefix("api")] public class DebugController : ApiController { /// /// AGV状态一键回报134562 /// /// 容器号 /// [HttpPost] [Route("AGVSeriesReports")] public ReturnResults AGVSeriesReports(UpdateTaskState model) { var agvTaskState = new AgvTaskState() { task_no = model.TaskID, forklift_no = model.ForkliftNo, state = 1 }; ReturnResults returnResult = new ReturnResults(); returnResult.ResultList = new List(); var temp1 = WCSCore.OperateAgvTaskStatus(agvTaskState); returnResult.ResultList.Add(temp1); agvTaskState.state = 3; var temp3 = WCSCore.OperateAgvTaskStatus(agvTaskState); returnResult.ResultList.Add(temp3); agvTaskState.state = 4; var temp4 = WCSCore.OperateAgvTaskStatus(agvTaskState); returnResult.ResultList.Add(temp4); agvTaskState.state = 5; var temp5 = WCSCore.OperateAgvTaskStatus(agvTaskState); returnResult.ResultList.Add(temp5); agvTaskState.state = 6; var temp6 = WCSCore.OperateAgvTaskStatus(agvTaskState); returnResult.ResultList.Add(temp6); agvTaskState.state = 2; var temp2 = WCSCore.OperateAgvTaskStatus(agvTaskState); returnResult.ResultList.Add(temp2); return returnResult; } /// /// 初始化数据库 /// /// [HttpPost] [Route("CreateDatabase")] public string CreateDatabase(CoverInfo model) { var cover = model.IsCover; try { var db = new SqlHelper().GetInstance(); 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), //typeof(TN_Inbound_Order), typeof(TN_Check_Detail), //typeof(TN_Check_Order), //typeof(TN_CNTR_ITEM), //typeof(TN_Outbound_Detail), //typeof(TN_Outbound_Order), //typeof(TN_Shift_Order), //typeof(TN_Shift_Detail) }; 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 (string.IsNullOrEmpty(locCntrCg.CntrCode)) { 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, S_CNTR_TYPE = locCntrCg.CntrType ?? "" }; 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)) { 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 $"Error reading CSV file: {ex.Message}"; } } } /// /// 模拟 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; } = false; } /// /// /// public class ReturnResults { public List ResultList { set; get; } } public class LocCntrCg { public string Note { get; set; } // 仅用于备注 public string LocCode { get; set; } public string LocArea { get; set; } public string CntrCode { get; set; } public string CntrType { get; set; } public string ItemCode { get; set; } public string BatchNo { get; set; } } }