.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/389a9ecd-a526-48f5-a8fc-7674b5b1ccbb.vsidxBinary files differ
.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/5bebbc83-b7b9-4df0-ac76-c479ffe00afd.vsidxBinary files differ
.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/60d0bfba-4866-48d3-9cce-4f08e36a5c1a.vsidxBinary files differ
.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/72b74e1b-3ce7-462f-a4d7-ab0ffca83287.vsidxBinary files differ
.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/8fff2f95-d6df-452f-ad7d-079ab21a0f28.vsidxBinary files differ
.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/d49484c3-00c1-4b7d-9deb-0d030288ff5a.vsidxBinary files differ
.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/f0bbbb2f-3b58-4dfe-8ac7-534413626ac1.vsidxBinary files differ
api/ApiHelper.cs
@@ -1515,8 +1515,7 @@ S_ITEM_CODE = model.cpdm, S_BATCH = model.ph, N_END_NUM = (int)model.pzsl, //F_OUT_QTY = cgDetailList.Sum(a => a.N_QTY), S_END_AREA = model.ysfs == "汽车" ? "QCCKQ" : "HCCKQ", // 暂时用运输方式(火车/汽车)来区分终点货区 S_END_AREA = "QCCKQ", // ERP下发出库任务为汽车出库区 S_BS_NO = model.jhdh, S_BS_TYPE = "ERP", }; api/ApiModel.cs
@@ -699,8 +699,265 @@ } public class PickUpReturnErpInfo { public string LocCode { get; set; } /// <summary> /// 计划单号(唯一标识) /// </summary> public string jhdh { get; set; } /// <summary> /// 出库状态 /// </summary> public string ckzt { get; set; } /// <summary> /// 计划类别 /// </summary> public string jhlb { get; set; } /// <summary> /// 参考单号 /// </summary> public string ckdh { get; set; } /// <summary> /// 车牌号 /// </summary> public string cph { get; set; } /// <summary> /// 运输方式 /// </summary> public string ysfs { get; set; } /// <summary> /// 产品状态 /// </summary> public string cpzt { get; set; } /// <summary> /// 买断单位 /// </summary> public string mddw { get; set; } /// <summary> /// 产品代码 /// </summary> public string cpdm { get; set; } /// <summary> /// 产品类别 /// </summary> public string cplb { get; set; } /// <summary> /// 产品类别明细 /// </summary> public string cplbmx { get; set; } /// <summary> /// 品牌 /// </summary> public string pp { get; set; } /// <summary> /// 等级 /// </summary> public string dj { get; set; } /// <summary> /// 罐号 /// </summary> public string gh { get; set; } /// <summary> /// 批号 /// </summary> public string ph { get; set; } /// <summary> /// 包装类型 /// </summary> public string bzlx { get; set; } /// <summary> /// 派装单号 /// </summary> public string pzdh { get; set; } /// <summary> /// 派装单单位 /// </summary> public string pzd_dw { get; set; } /// <summary> /// 派装单调运编号 /// </summary> public string pzd_dybh { get; set; } /// <summary> /// 派装件数 /// </summary> public double pzjs { get; set; } /// <summary> /// 派装数量 /// </summary> public decimal pzsl { get; set; } /// <summary> /// 派装日期(yyyy-mm-dd) /// </summary> public string pz_rq { get; set; } /// <summary> /// 派装操作日期 /// </summary> public long pz_czrq { get; set; } /// <summary> /// 派装作废标记 /// </summary> public int pz_zfbj { get; set; } /// <summary> /// 派装作废日期 /// </summary> public long pz_zfrq { get; set; } /// <summary> /// 派装备注 /// </summary> public string pz_bz { get; set; } /// <summary> /// 出库单编号 /// </summary> public string ckdbh { get; set; } /// <summary> /// 实发件数 /// </summary> public double sfjs { get; set; } /// <summary> /// 实发数量 /// </summary> public decimal sfsl { get; set; } /// <summary> /// 实发车数 /// </summary> public int sfcs { get; set; } /// <summary> /// 装车时间 /// </summary> public string zcsj { get; set; } /// <summary> /// 计量单位 /// </summary> public string jldw { get; set; } /// <summary> /// 发货日期 /// </summary> public long fhrq { get; set; } /// <summary> /// 仓库代码 /// </summary> public string ckdm { get; set; } /// <summary> /// 发货人 /// </summary> public string fhr { get; set; } /// <summary> /// 操作员 /// </summary> public string czydm { get; set; } /// <summary> /// 审核人 /// </summary> public string shr_username { get; set; } /// <summary> /// 审核日期 /// </summary> public long shrq { get; set; } /// <summary> /// 作废标记 /// </summary> public long zfbj { get; set; } /// <summary> /// 作废日期 /// </summary> public long zfrq { get; set; } /// <summary> /// 结算单位 /// </summary> public string jsdw { get; set; } /// <summary> /// 收货单位 /// </summary> public string shdw { get; set; } /// <summary> /// 运输单位 /// </summary> public string ysdw { get; set; } /// <summary> /// 联系人 /// </summary> public string lxr { get; set; } /// <summary> /// 装卸工 /// </summary> public string ry_zxg { get; set; } /// <summary> /// 叉车司机 /// </summary> public string ry_ccsj { get; set; } /// <summary> /// erp交货单号 /// </summary> public string erphx_jhdh { get; set; } /// <summary> /// erp物料编码 /// </summary> public string erphx_wlbm { get; set; } /// <summary> /// erp物料名称 /// </summary> public string erphx_wlmc { get; set; } /// <summary> /// erp创建日期 /// </summary> public string erphx_cjrq { get; set; } /// <summary> /// 货位 /// </summary> public string hw { get; set; } /// <summary> /// 货位状态 /// </summary> public string hwzt { get; set; } } } } api/DebugController.cs
@@ -11,6 +11,8 @@ using Newtonsoft.Json; using SqlSugar; using static HH.WCS.Mobox3.DSZSH.api.ApiModel; using static HH.WCS.Mobox3.DSZSH.core.Monitor; @@ -19,8 +21,7 @@ /// 测试用:如果项目中要和设备对接,前期设备无法测试,用接口模拟 /// </summary> [RoutePrefix("api")] public class DebugController : ApiController { public class DebugController : ApiController { /// <summary> /// AGV状态一键回报134562 /// </summary> @@ -29,22 +30,15 @@ [HttpPost] [Route("AGVSeriesReports")] public ReturnResults AGVSeriesReports(UpdateTaskState model) { //var db = new SqlHelper<object>().GetInstance(); //var task = db.Queryable<TN_Task>().Where(t => t.S_CODE == model.TaskID).First(); //if (task == null) return new ReturnResults(); //if (task.S_B_STATE == "完成" && task.N_B_STATE == 3 || task.S_B_STATE == "错误" && task.N_B_STATE == 4) { // return new ReturnResults(); //} ReturnResults returnResult = new ReturnResults(); returnResult.ResultList = new List<ReturnResult>(); var agvTaskState = new AgvTaskState() { task_no = model.TaskID, forklift_no = model.ForkliftNo, state = 1 }; ReturnResults returnResult = new ReturnResults(); returnResult.ResultList = new List<ReturnResult>(); agvTaskState.state = 1; var temp1 = WCSCore.OperateAgvTaskStatus(agvTaskState); returnResult.ResultList.Add(temp1); @@ -67,6 +61,67 @@ agvTaskState.state = 2; var temp2 = WCSCore.OperateAgvTaskStatus(agvTaskState); returnResult.ResultList.Add(temp2); return returnResult; } [HttpPost] [Route("AgvReports")] public ReturnResults AgvReports(AgvReportsInfo model) { var db = new SqlHelper<object>().GetInstance(); ReturnResults returnResult = new ReturnResults(); returnResult.ResultList = new List<ReturnResult>(); var agvTaskState = new AgvTaskState() { task_no = model.TaskId, forklift_no = model.ForkliftNo, }; var taskAction = db.Queryable<TN_Task_Action>() .Where(t => t.S_TASK_CODE == model.TaskId) .OrderBy(t => new { create = SqlFunc.Desc(t.T_CREATE) }).First(); // 最后一个Action状态 var lastState = taskAction?.N_ACTION_CODE ?? 0; if (model.NextState <= 0 || model.NextState >= 7) { LogHelper.Info("小车回报状态不在134562的范围内"); } // 0 ==> 1,3,4,5,6,2 if (lastState == 0 && model.NextState >= 1) { agvTaskState.state = 1; var temp = WCSCore.OperateAgvTaskStatus(agvTaskState); returnResult.ResultList.Add(temp); } // 0,1 ==> 3,4,5,6,2 if (lastState < 2 && model.NextState >= 2) { agvTaskState.state = 3; var temp = WCSCore.OperateAgvTaskStatus(agvTaskState); returnResult.ResultList.Add(temp); } // 0,1,3 ==> 4,5,6,2 if (lastState < 4 && lastState != 2 && (model.NextState >= 3 || model.NextState == 2)) { agvTaskState.state = 4; var temp = WCSCore.OperateAgvTaskStatus(agvTaskState); returnResult.ResultList.Add(temp); } // 0,1,3,4 ==> 5,6,2 if (lastState < 5 && lastState != 2 && (model.NextState >= 4 || model.NextState == 2)) { agvTaskState.state = 5; var temp = WCSCore.OperateAgvTaskStatus(agvTaskState); returnResult.ResultList.Add(temp); } // 0,1,3,4,5 ==> 6,2 if (lastState < 6 && lastState != 2 && (model.NextState >= 5 || model.NextState == 2)) { agvTaskState.state = 6; var temp = WCSCore.OperateAgvTaskStatus(agvTaskState); returnResult.ResultList.Add(temp); } // 0,1,3,4,5,6 ==> 2 if (lastState != 2 && model.NextState == 2) { agvTaskState.state = 2; var temp = WCSCore.OperateAgvTaskStatus(agvTaskState); returnResult.ResultList.Add(temp); } return returnResult; } @@ -137,46 +192,12 @@ /// <returns></returns> [HttpPost] [Route("CreateDatabase")] public string CreateDatabase(FalseOk model) { public string CreateDatabase() { try { if (model.JumpOut) { return "跳出"; } var db = new SqlHelper<object>().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) //typeof(TN_Container_Item), }; //using (var tran = db.Ado.UseTran()) { // //db.CodeFirst.InitTables(entityTypes); // if (db.Insertable<TN_Location>(locationList).ExecuteCommand() <= 0) { // tran.RollbackTran(); // return "失败"; // } // tran.CommitTran(); //} } catch (Exception ex) { @@ -203,45 +224,8 @@ const string cntrType = "托盘"; try { //var itemCode = model.ItemCode; //var batchNo = model.BatchNo; var cntrCode = model.CntrCode; var startLocCode = model.StartLoc; //var cgDetail = new TN_CG_Detail { // S_ITEM_CODE = itemCode, // S_BATCH_NO = batchNo, // S_CNTR_CODE = cntrCode, //}; //var needInsertContainer = false; //var needUpdateContainer = false; // 查容器信息表是否已经有这个容器 //var cntr = db.Queryable<TN_Container>() // .Where(c => c.S_CODE == cntrCode).First(); // 如果找不到该容器,需要添加,并且将容器来源设置为任务名称 //if (cntr == null) { // needInsertContainer = true; // LogHelper.Info($"轮询:{taskName}:容器:{cntrCode},在容器表中没有登记,登记并设置容器来源为:{taskName}"); // cntr = new TN_Container { // S_CODE = cntrCode, // S_TYPE = "托盘", // S_SPEC = itemCode, // S_SOURCE = taskName, // }; //} //else { // // 如果找到该容器,但容器物料类型与下线物料不符,记录并直接覆盖(待定) // if (!string.IsNullOrEmpty(cntr.S_SPEC) && cntr.S_SPEC != itemCode) { // needUpdateContainer = true; // LogHelper.Info($"轮询:{taskName}:容器表中容器{cntrCode}对应的物料信息:{cntr.S_SPEC}," + // $"与所需要的物料信息{itemCode}不符,直接覆盖结果"); // cntr.S_SPEC = itemCode; // cntr.S_SOURCE = taskName; // } //} var startLoc = db.Queryable<TN_Location>() .Where(l => l.S_CODE == startLocCode) @@ -297,29 +281,6 @@ return info; } } //if (db.Insertable<TN_CG_Detail>(cgDetail).ExecuteCommand() <= 0) { // tran.RollbackTran(); // info = $"插入容器货品信息表失败:物料编码{cgDetail.S_ITEM_CODE},容器编码{cgDetail.S_CNTR_CODE}"; // LogHelper.Info(info); // return info; //} //if (needInsertContainer) { // if (db.Insertable<TN_Container>(cntr).ExecuteCommand() <= 0) { // info = $"插入容器表失败:" + JsonConvert.SerializeObject(cntr); // tran.RollbackTran(); // LogHelper.Info(info); // return info; // } //} //else if (needUpdateContainer) { // if (db.Updateable<TN_Container>(cntr).ExecuteCommand() <= 0) { // info = $"更新容器表失败:" + JsonConvert.SerializeObject(cntr); // tran.RollbackTran(); // LogHelper.Info(info); // return info; // } //} if (db.Insertable<TN_Loc_Container>(locCntrRel).ExecuteCommand() <= 0) { tran.RollbackTran(); @@ -405,6 +366,21 @@ //public int NextState { set; get; } } public class AgvReportsInfo { /// <summary> /// 任务号 /// </summary> public string TaskId { set; get; } /// <summary> /// AGV 小车号 /// </summary> public string ForkliftNo { get; set; } /// <summary> /// AGV 下一状态(任务回报号) /// </summary> public int NextState { set; get; } = 0; } public class FalseOk { public bool JumpOut { set; get; } = true; } config/config.comment.json
@@ -1,9 +1,11 @@ { //"WebApiUrl": "http://192.168.1.141:8901", //"WebApiUrl": "http://192.168.1.67:8901", "WebApiUrl": "http://127.0.0.1:8901", "NdcApiUrl": "http://127.0.0.1:5201/api/order/", "ErpApiUrl": "http://127.0.0.1:8085/api/", "SqlServer": "Data Source=192.168.1.87;Initial Catalog=AMS_OIMobox;User ID=sa;Password=123456;", //"SqlServer": "Data Source=192.168.1.87;Initial Catalog=AMS_OIMobox;User ID=sa;Password=123456;", "SqlServer": "Data Source=(local);Initial Catalog=DSZSHTest;User ID=sa;Password=123456;", "TcpServerIp": "127.0.0.1", "TcpServerPort": 8085, "Areas": [ config/config.json
@@ -2,7 +2,7 @@ "WebApiUrl": "http://127.0.0.1:8901", "NdcApiUrl": "http://127.0.0.1:5201/api/order/", "ErpApiUrl": "http://127.0.0.1:8085/api/", "SqlServer": "Data Source=192.168.1.87;Initial Catalog=AMS_OIMobox;User ID=sa;Password=123456;", "SqlServer": "Data Source=(local);Initial Catalog=DSZSHTest;User ID=sa;Password=123456;", "TcpServerIp": "127.0.0.1", "TcpServerPort": 8085, "Areas": [ core/Monitor.cs
@@ -65,41 +65,6 @@ var startLocCode = prod.OffLoc[0]; // 用于测试 //var startLocCode = "CX01"; // 用于测试 //var cgDetail = new TN_CG_Detail { // 空托上线时就绑定好了 // S_ITEM_CODE = itemCode, // S_BATCH_NO = batchNo, // S_CNTR_CODE = cntrCode, //}; //var needInsertContainer = false; //var needUpdateContainer = false; // TEMP 自动触发的托盘下线暂时不考虑判断,默认没有时写入 // 查容器信息表是否已经有这个容器 //var cntr = db.Queryable<TN_Container>() // .Where(c => c.S_CODE == cntrCode).First(); // 如果找不到该容器,需要添加,并且将容器来源设置为任务名称 //if (cntr == null) { // needInsertContainer = true; // LogHelper.Info($"轮询:{taskName}:容器:{cntrCode},在容器表中没有登记,登记并设置容器来源为:{taskName}"); // cntr = new TN_Container { // S_CODE = cntrCode, // S_TYPE = cntrType, // S_SPEC = itemCode, // }; //} //else { // 如果找到该容器,但容器物料类型与下线物料不符,记录并直接覆盖(待定) // if (!string.IsNullOrEmpty(cntr.S_SPEC) && cntr.S_SPEC != itemCode) { // needUpdateContainer = true; // LogHelper.Info($"轮询:{taskName}:容器表中容器{cntrCode}对应的物料信息:{cntr.S_SPEC}," + // $"与所需要的物料信息{itemCode}不符,直接覆盖结果"); // cntr.S_SPEC = itemCode; // } //} var startLoc = db.Queryable<TN_Location>() .Where(l => l.S_CODE == startLocCode) .Where(l => Settings.AreaMap[startAreaName].Contains(l.S_AREA_CODE)) @@ -142,9 +107,6 @@ LocationHelper.LockStartLoc(ref startLoc); // 起点出库锁 LocationHelper.LockEndLoc(ref endLoc); // 终点入库锁 //cntr.S_SOURCE = task.S_CODE; //cntr.T_MODIFY = DateTime.Now; using (var tran = db.Ado.UseTran()) { if (locCntrRelOld != null) { if (db.Deleteable<TN_Loc_Container>(locCntrRelOld).ExecuteCommand() <= 0 && @@ -155,30 +117,6 @@ continue; } } //if (needInsertContainer) { // if (db.Insertable<TN_Container>(cntr).ExecuteCommand() <= 0) { // info = $"插入容器表失败:" + JsonConvert.SerializeObject(cntr); // tran.RollbackTran(); // LogHelper.Info(info); // continue; // } //} //else if (needUpdateContainer) { // if (db.Updateable<TN_Container>(cntr) // .UpdateColumns(c => new { c.S_SPEC, c.S_SOURCE, c.T_MODIFY }).ExecuteCommand() <= 0) { // info = $"更新容器表失败:" + JsonConvert.SerializeObject(cntr); // tran.RollbackTran(); // LogHelper.Info(info); // continue; // } //} //if (db.Insertable<TN_CG_Detail>(cgDetail).ExecuteCommand() <= 0) { // tran.RollbackTran(); // info = $"插入容器货品信息表失败:物料编码{cgDetail.S_ITEM_CODE},容器编码{cgDetail.S_CNTR_CODE}"; // LogHelper.Info(info); // continue; //} if (db.Insertable<TN_Loc_Container>(locCntrRel).ExecuteCommand() <= 0) { tran.RollbackTran(); @@ -374,6 +312,8 @@ LogHelper.Info(info); continue; } } core/WCSCore.cs
@@ -20,7 +20,7 @@ public static ReturnResult OperateAgvTaskStatus(AgvTaskState model) { var result = new ReturnResult(); try { if (model.state > 0 && model.state < 1000) { if (model.state > 0) { // AGV 执行任务的逻辑处理 if (!AgvTaskProcessOk(model)) { // 执行不OK,说明没有找到任务 @@ -38,7 +38,7 @@ } catch (Exception ex) { result.ResultCode = -1; result.ResultMsg = $"发生了异常:+{ex.Message}"; result.ResultMsg = $"发生了异常:{ex.Message}"; LogHelper.Info(result.ResultMsg, "Error"); return result; } @@ -76,9 +76,9 @@ var nextOutboundTask = Task.Run(() => { UpdateOutboundTaskState(3); }); //var pickUpReturnErpTask = Task.Run(() => { // PickUpReturnErp(TN_Task); //}); var pickUpReturnErpTask = Task.Run(() => { PickUpReturnErp(TN_Task); }); } break; @@ -323,13 +323,40 @@ } public static void PickUpReturnErp(TN_Task task) { var db = new SqlHelper<object>().GetInstance(); var info = ""; var httpH = new HttpHelper(); var model = new OtherModel.PickUpReturnErpInfo(); model.LocCode = task.S_START_LOC; try { var plan = db.Queryable<TN_Outbound_Plan>() .Where(p => p.JHDH == task.S_BS_NO) .First(); if (plan == null) { info = $"计划单号{task.S_BS_NO}不存在!"; LogHelper.Info(info); } var cgDetail = db.Queryable<TN_CG_Detail>() .Where(d => d.S_CNTR_CODE == task.S_CNTR_CODE) .First(); if (cgDetail == null) { info = $"物料编码不存在!"; LogHelper.Info(info); } // TODO var model = new OtherModel.PickUpReturnErpInfo(); model.sfjs = cgDetail.N_ITEM_NUM; model.sfsl = 0; //model.hw = task.S_START_LOC; //model.hwzt = ""; var jsonInfo = JsonConvert.SerializeObject(model); var result = httpH.WebPost(Settings.ErpApiUrl + "PickUpReturn", jsonInfo); // TODO LogHelper.InfoApi("取货完成反馈ERP接口", model); } catch (Exception ex) { LogHelper.InfoEx(ex); wms/WCSHelper.cs
@@ -29,7 +29,7 @@ var db = new SqlHelper<TN_Task>().GetInstance(); task.S_B_STATE = TN_Task.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 }).ExecuteCommand(); res = db.Updateable(task).UpdateColumns(it => new { it.N_B_STATE, it.S_B_STATE, it.T_MODIFY }).ExecuteCommand() > 0; return res; } internal static bool UpdateEQNo(TN_Task task) { @@ -174,7 +174,6 @@ task.S_EQ_NO = forklift_no; db.Updateable(task).UpdateColumns(it => new { it.N_B_STATE, it.S_B_STATE, it.T_START_TIME, it.S_EQ_NO }).ExecuteCommand(); } } } internal static void End(TN_Task task) {