.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/0e784c8d-2ea0-45e5-8726-82d212591fce.vsidxBinary files differ
.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/3908d945-9e88-4170-b92a-f2cf0dcb5e54.vsidxBinary files differ
.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/541e9f47-0b5c-4a4e-9982-872d7ed880d7.vsidxBinary files differ
.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/687ebc79-98fe-4ac4-b909-c9e972afad42.vsidxBinary files differ
.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/c746dfc7-35d0-465f-9364-9d1f640d45c0.vsidxBinary files differ
.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/e95c9dfb-066e-4e8f-a68a-626ca63d579a.vsidxBinary files differ
.vs/HH.WCS.Mobox3.DSZSH/FileContentIndex/fb5893ae-54ab-4004-9fc4-c8a740b25317.vsidxBinary files differ
Models/TN_Location.cs
@@ -61,7 +61,7 @@ public int N_ROADWAY { get; set; } = 1; public string S_PURPOSE { get; set; } = "存储"; public string S_TYPE { get; set; } = "常规"; public string S_WH_CODE { get; set; } = "独山子石化"; public string S_WH_CODE { get; set; } = "DSZSH"; // END /// <summary> api/ApiHelper.cs
@@ -1,55 +1,49 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using HH.WCS.Mobox3.DSZSH.models; using HH.WCS.Mobox3.DSZSH.util; using HH.WCS.Mobox3.DSZSH.wms; using Newtonsoft.Json; using Org.BouncyCastle.Asn1.Tsp; using SqlSugar; using Swashbuckle.Swagger; using static HH.WCS.Mobox3.DSZSH.api.ApiModel; using static HH.WCS.Mobox3.DSZSH.api.OtherModel; using static HH.WCS.Mobox3.DSZSH.Config; namespace HH.WCS.Mobox3.DSZSH.api { public class ApiHelper { /// <summary> /// 好运箱-满箱下线入库(PDA) /// </summary> /// <param name="model"></param> /// <param name="model">包含:物料信息、起点货位</param> /// <returns></returns> public static SimpleResult GoodpackOffline(GoodpackOfflineInfo model) { var db = new SqlHelper<object>().GetInstance(); var info = ""; var taskName = TaskName.H好运箱_满箱下线入库; // 用于生成任务类型、打印日志信息 var startAreaName = AreaName.M满箱操作区; var endAreaName = AreaName.M满箱货架区; var startAreaName = AreaName.M满箱操作区; // 起点货区 var endAreaName = AreaName.M满箱货架区; // 终点货区 try { // 贴标机会提前将物料信息写入CG_Detail表中 // 将PDA提供的物料编码与贴标机的信息比对 var cgDetail = db.Queryable<TN_CG_Detail>() .Where(d => d.S_ITEM_CODE == model.ItemCode && d.S_BATCH_NO == model.BatchNo) // 指定:物料编码、批次号 .Where(d => d.N_ITEM_STATE == 1 && d.S_ITEM_STATE == "待检") // 新增物料,故物料状态应该为 1待检 // TODO model 中 数量、规格是否也参与比对 待后续要求 .First(); // 如果找不到指定的物料,说明信息不一致,报错 if (cgDetail == null) { info = $"PDA扫码物料信息与贴标机传递的信息不一致:" + JsonConvert.SerializeObject(model); LogHelper.Info(info); return NewSimpleResult(2, info); } // 起点货位绑定后,可以不立即设置N_CURRENT_NUM为1 // 因为AGV取货后就会恢复0,而且货位上锁后不会被访问到 // 查询起点货位,是否符合要求(初次下线要求货位无容器) var startLoc = db.Queryable<TN_Location>() .Where(l => l.S_CODE == model.StartLoc) // 指定:起点货位号 .Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "无" && l.C_ENABLE == "Y") // 筛选:未上锁 @@ -63,7 +57,7 @@ return NewSimpleResult(3, info); } // 绑定货位和容器号 // 绑定货位和容器号(满箱下线到操作区,此时尚未绑定) var locCntrRel = new TN_Loc_Container { S_LOC_CODE = model.StartLoc, S_CNTR_CODE = cgDetail.S_CNTR_CODE, @@ -87,8 +81,8 @@ var cntId = locCntrRel.S_CNTR_CODE; var task = WCSHelper.BuildTask(startLoc, endLoc, cntId, taskName); LocationHelper.LockLoc(ref startLoc, 2); // 起点出库锁 LocationHelper.LockLoc(ref endLoc, 1); // 终点入库锁 LocationHelper.LockStartLoc(ref startLoc); // 起点出库锁 LocationHelper.LockEndLoc(ref endLoc); // 终点入库锁 using (var tran = db.Ado.UseTran()) { if (db.Insertable<TN_Loc_Container>(locCntrRel).ExecuteCommand() <= 0) { @@ -165,12 +159,28 @@ .First(); if (startLoc == null) { info = $"起点位置{model.StartLoc}不存在或不具备取货要求"; info = $"在'{startAreaName}'中没有找到起点货位{model.StartLoc},或不具备要求:未上锁、绑定前无货物"; LogHelper.Info(info); return NewSimpleResult(2, info); } // 绑定货位和容器号 //// 查看容器是否已有物料绑定 //var cgDetail = db.Queryable<TN_CG_Detail>() // .Where(d => d.S_CNTR_CODE == model.CntrCode).First(); //// 如果有绑定物料,报错,因为空托不应该有物料 //if (cgDetail != null) { // info = $"容器{model.CntrCode}已经绑定了物料{cgDetail.S_ITEM_CODE},不是空托无法入库"; // LogHelper.Info(info); // return NewSimpleResult(3, info); //} // 假定人工不会将有物料的箱子放在空箱入库接驳位,没有必要检查 // 如果人工将出库后的托盘入库,这时物料信息并没有删除,需要将托盘物料的关系解除 var cgDetail = db.Queryable<TN_CG_Detail>() .Where(d => d.S_CNTR_CODE == model.CntrCode).First(); var needDeleteDetail = cgDetail != null; // 绑定货位和容器号(PDA在接驳位绑定 var locCntrRel = new TN_Loc_Container { S_LOC_CODE = model.StartLoc, S_CNTR_CODE = model.CntrCode, @@ -194,15 +204,15 @@ var cntId = locCntrRel.S_CNTR_CODE; var task = WCSHelper.BuildTask(startLoc, endLoc, cntId, taskName); LocationHelper.LockLoc(ref startLoc, 2); // 起点出库锁 LocationHelper.LockLoc(ref endLoc, 1); // 终点入库锁 LocationHelper.LockStartLoc(ref startLoc); // 起点出库锁 LocationHelper.LockEndLoc(ref endLoc); // 终点入库锁 using (var tran = db.Ado.UseTran()) { if (db.Insertable<TN_Loc_Container>(locCntrRel).ExecuteCommand() <= 0) { info = $"插入货位容器关系失败:" + JsonConvert.SerializeObject(locCntrRel); tran.RollbackTran(); LogHelper.Info(info); return NewSimpleResult(4, info); return NewSimpleResult(5, info); } if (db.Updateable<TN_Location>(startLoc).UpdateColumns(it => new { @@ -214,7 +224,7 @@ tran.RollbackTran(); info = $"生成任务'{taskName}'失败:更新起点货位{startLoc.S_CODE}锁状态失败"; LogHelper.Info(info); return NewSimpleResult(4, info); return NewSimpleResult(5, info); } if (db.Updateable<TN_Location>(endLoc).UpdateColumns(it => new { @@ -226,14 +236,14 @@ tran.RollbackTran(); info = $"生成任务'{taskName}'失败:更新终点货位{endLoc.S_CODE}锁状态失败"; LogHelper.Info(info); return NewSimpleResult(4, info); return NewSimpleResult(5, info); } if (db.Insertable<TN_Task>(task).ExecuteCommand() <= 0) { tran.RollbackTran(); info = $"生成任务'{taskName}'失败,容器号{cntId},起点{startLoc.S_CODE},终点货架{endLoc.S_CODE}"; LogHelper.Info(info); return NewSimpleResult(4, info); return NewSimpleResult(5, info); } tran.CommitTran(); @@ -275,6 +285,16 @@ return NewSimpleResult(2, info); } // 查看容器是否已有物料绑定 var cgDetail = db.Queryable<TN_CG_Detail>() .Where(d => d.S_CNTR_CODE == model.CntrCode).First(); // 如果有绑定物料,报错,因为空箱不应该有物料 if (cgDetail != null) { info = $"容器{model.CntrCode}已经绑定了物料{cgDetail.S_ITEM_CODE},不是空箱无法入库"; LogHelper.Info(info); return NewSimpleResult(3, info); } // 绑定货位和容器号 var locCntrRel = new TN_Loc_Container { S_LOC_CODE = model.StartLoc, @@ -299,8 +319,8 @@ var cntId = locCntrRel.S_CNTR_CODE; var task = WCSHelper.BuildTask(startLoc, endLoc, cntId, taskName); LocationHelper.LockLoc(ref startLoc, 2); // 起点出库锁 LocationHelper.LockLoc(ref endLoc, 1); // 终点入库锁 LocationHelper.LockStartLoc(ref startLoc); // 起点出库锁 LocationHelper.LockEndLoc(ref endLoc); // 终点入库锁 using (var tran = db.Ado.UseTran()) { if (db.Insertable<TN_Loc_Container>(locCntrRel).ExecuteCommand() <= 0) { @@ -365,6 +385,7 @@ var taskName = TaskName.T托盘_空托上线; var startAreaName = AreaName.K空托存放区; var endAreaName = AreaName.B包装区; try { // 查容器-物料类型表 @@ -394,7 +415,7 @@ } var endLoc = db.Queryable<TN_Location>() //.Where(l => Settings.AreaMap[AreaName.B包装区].Contains(l.S_AREA_CODE)) .Where(l => Settings.AreaMap[endAreaName].Contains(l.S_AREA_CODE)) .Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "无" && l.C_ENABLE == "Y") // 筛选:未上锁 .Where(l => l.N_CURRENT_NUM == 0) // 筛选:空货位 .First(); @@ -408,8 +429,8 @@ var cntId = model.CntId; var task = WCSHelper.BuildTask(startLoc, endLoc, cntId, taskName); LocationHelper.LockLoc(ref startLoc, 2); // 起点出库锁 LocationHelper.LockLoc(ref endLoc, 1); // 终点入库锁 LocationHelper.LockStartLoc(ref startLoc); // 起点出库锁 LocationHelper.LockEndLoc(ref endLoc); // 终点入库锁 using (var tran = db.Ado.UseTran()) { if (db.Updateable<TN_Location>(startLoc).UpdateColumns(it => new { @@ -467,6 +488,7 @@ var taskName = TaskName.H好运箱_空箱上线; var startAreaName = AreaName.K空托存放区; var endAreaName = AreaName.K空箱操作区; try { var startLoc = db.Queryable<TN_Location>() @@ -484,7 +506,7 @@ } var endLoc = db.Queryable<TN_Location>() //.Where(l => Settings.AreaMap[AreaName.B包装区].Contains(l.S_AREA_CODE)) .Where(l => Settings.AreaMap[endAreaName].Contains(l.S_AREA_CODE)) .Where(l => l.N_LOCK_STATE == 0 && l.S_LOCK_STATE == "无" && l.C_ENABLE == "Y") // 筛选:未上锁 .Where(l => l.N_CURRENT_NUM == 0) .First(); @@ -498,8 +520,8 @@ var cntId = model.CntId; var task = WCSHelper.BuildTask(startLoc, endLoc, cntId, taskName); LocationHelper.LockLoc(ref startLoc, 2); // 起点出库锁 LocationHelper.LockLoc(ref endLoc, 1); // 终点入库锁 LocationHelper.LockStartLoc(ref startLoc); // 起点出库锁 LocationHelper.LockEndLoc(ref endLoc); // 终点入库锁 using (var tran = db.Ado.UseTran()) { if (db.Updateable<TN_Location>(startLoc).UpdateColumns(it => new { @@ -616,8 +638,8 @@ var cntId = locCntrRel.S_CNTR_CODE; var task = WCSHelper.BuildTask(startLoc, endLoc, cntId, taskName); LocationHelper.LockLoc(ref startLoc, 2); // 起点出库锁 LocationHelper.LockLoc(ref endLoc, 1); // 终点入库锁 LocationHelper.LockStartLoc(ref startLoc); // 起点出库锁 LocationHelper.LockEndLoc(ref endLoc); // 终点入库锁 using (var tran = db.Ado.UseTran()) { if (db.Updateable<TN_CG_Detail>(cgDetail).UpdateColumns(it => @@ -672,9 +694,11 @@ } } public static SimpleResult UnqualifiedShift(UnqualifiedShiftInfo model) { var taskName = TaskName.C抽检_不合格移库; var db = new SqlHelper<object>().GetInstance(); var info = ""; var taskName = TaskName.C抽检_不合格移库; try { if (!Settings.AreaMap[AreaName.C抽检异常区].Contains(model.EndArea)) { @@ -731,8 +755,8 @@ var cntId = locCntrRel.S_CNTR_CODE; var task = WCSHelper.BuildTask(startLoc, endLoc, cntId, taskName); LocationHelper.LockLoc(ref startLoc, 2); // 起点出库锁 LocationHelper.LockLoc(ref endLoc, 1); // 终点入库锁 LocationHelper.LockStartLoc(ref startLoc); // 起点出库锁 LocationHelper.LockEndLoc(ref endLoc); // 终点入库锁 using (var tran = db.Ado.UseTran()) { if (db.Updateable<TN_CG_Detail>(cgDetail).UpdateColumns(it => @@ -788,9 +812,11 @@ } public static SimpleResult RestBack(RestBackInfo model) { var taskName = TaskName.W尾箱回库; var db = new SqlHelper<object>().GetInstance(); var info = ""; var taskName = TaskName.W尾箱回库; try { var startLoc = db.Queryable<TN_Location>() .Where(l => l.S_CODE == model.StartLoc) @@ -835,8 +861,8 @@ var cntId = locCntrRel.S_CNTR_CODE; var task = WCSHelper.BuildTask(startLoc, endLoc, cntId, taskName); LocationHelper.LockLoc(ref startLoc, 2); // 起点出库锁 LocationHelper.LockLoc(ref endLoc, 1); // 终点入库锁 LocationHelper.LockStartLoc(ref startLoc); // 起点出库锁 LocationHelper.LockEndLoc(ref endLoc); // 终点入库锁 using (var tran = db.Ado.UseTran()) { if (db.Updateable<TN_Location>(startLoc).UpdateColumns(it => new { @@ -885,7 +911,7 @@ } /// <summary> /// 成品胶出库(WMS) /// 成品胶出库(PDA) /// </summary> /// <remarks> /// WMS提供出库的物料类型与数量,调用接口由WCS生成具体的出库任务,然后WCS后台轮询处理 @@ -894,14 +920,12 @@ /// <returns></returns> public static SimpleResult FinishedOutbound(FinishedOutboundInfo model) { var db = new SqlHelper<object>().GetInstance(); var orderNo = GenerateOrderNo("出库单号", "ON"); var info = ""; var taskName = TaskName.C成品胶出库; try { if (string.IsNullOrEmpty(orderNo)) { info = "出库单号不能为空"; LogHelper.Info(info); return NewSimpleResult(2, info); } var orderNo = GenerateOrderNo("出库单号", "ON"); var cgDetailList = SelectCgByTotalQty(model); @@ -916,7 +940,6 @@ S_ITEM_CODE = model.ItemCode, S_BATCH = model.BatchNo, N_END_NUM = model.Qty, //F_OUT_QTY = cgDetailList.Sum(a => a.N_QTY), S_END_AREA = model.EndArea }; @@ -951,7 +974,9 @@ tran.CommitTran(); } return NewSimpleResult(0, "生成出库单成功"); info = "生成出库单成功"; LogHelper.Info(info); return NewSimpleResult(0, info); } catch (Exception ex) { info = $"发生了异常:{ex.Message}"; @@ -966,34 +991,19 @@ /// <returns></returns> public static SimpleResult FinishedOutboundForce(FinishedOutboundInfo model) { var db = new SqlHelper<object>().GetInstance(); var orderNo = GenerateOrderNo("出库单号", "ON"); var info = ""; try { if (string.IsNullOrEmpty(orderNo)) { return NewSimpleResult(2, "出库单号不能为空"); } using (var tran = db.Ado.UseTran()) { var taskName = TaskName.C成品胶出库; try { var orderNo = GenerateOrderNo("出库单号", "ON"); var cgDetailList = SelectCgByTotalQty(model); if (cgDetailList.Count == 0) { return NewSimpleResult(3, "没有合适的物料可以出库"); } foreach (var cgDetail in cgDetailList) { var detail = new TN_Outbound_Detail { S_OO_NO = orderNo, S_ITEM_CODE = cgDetail.S_ITEM_CODE, S_BATCH_NO = cgDetail.S_BATCH_NO, S_CNTR_CODE = cgDetail.S_CNTR_CODE, S_END_AREA = model.EndArea }; if (db.Insertable<TN_Outbound_Detail>(detail).ExecuteCommand() <= 0) { tran.RollbackTran(); return NewSimpleResult(4, "生成出库单明细失败:" + JsonConvert.SerializeObject(detail)); } info = "没有合适的物料可以出库"; LogHelper.Info(info); return NewSimpleResult(3, info); } var order = new TN_Outbound_Order { @@ -1001,19 +1011,43 @@ S_ITEM_CODE = model.ItemCode, S_BATCH = model.BatchNo, N_END_NUM = model.Qty, //F_OUT_QTY = cgDetailList.Sum(a => a.N_QTY), S_END_AREA = model.EndArea }; var detailList = new List<TN_Outbound_Detail>(); foreach (var cgDetail in cgDetailList) { var detail = new TN_Outbound_Detail { S_OO_NO = orderNo, S_ITEM_CODE = cgDetail.S_ITEM_CODE, S_BATCH_NO = cgDetail.S_BATCH_NO, S_CNTR_CODE = cgDetail.S_CNTR_CODE, N_COUNT = cgDetail.N_ITEM_NUM, S_END_AREA = model.EndArea }; detailList.Add(detail); } using (var tran = db.Ado.UseTran()) { if (db.Insertable<TN_Outbound_Order>(order).ExecuteCommand() <= 0) { tran.RollbackTran(); return NewSimpleResult(5, "生成出库单失败:" + JsonConvert.SerializeObject(order)); info = "生成出库单失败:" + JsonConvert.SerializeObject(order); LogHelper.Info(info); return NewSimpleResult(2, info); } if (db.Insertable<TN_Outbound_Detail>(detailList).ExecuteCommand() <= 0) { tran.RollbackTran(); info = "生成出库单明细失败"; LogHelper.Info(info); return NewSimpleResult(4, info); } tran.CommitTran(); } return NewSimpleResult(0, "生成出库单成功"); info = "生成出库单成功"; LogHelper.Info(info); return NewSimpleResult(0, info); } catch (Exception ex) { info = $"发生了异常:{ex.Message}"; api/ApiModel.cs
@@ -106,8 +106,6 @@ /// 订单当前的目的地 /// </summary> public string currentDes { get; set; } /// <summary> /// 当前指令 /// </summary> @@ -151,9 +149,8 @@ } public class OtherModel { #region PDA 数据 /// <summary> /// 好运箱-满托下线入库(PDA)数据类 /// 好运箱-满箱下线入库(PDA)数据类 /// </summary> public class GoodpackOfflineInfo { /// <summary> @@ -161,11 +158,6 @@ /// </summary> [JsonProperty("s_item_code")] public string ItemCode { get; set; } ///// <summary> ///// 物料名称 ///// </summary> //[JsonProperty("item_name")] //public string ItemName { get; set; } /// <summary> /// 批次号 /// </summary> @@ -182,71 +174,12 @@ [JsonProperty("n_num")] public int Num { get; set; } /// <summary> /// 起点货位信息 /// 起点货位信息(起点货位货区要求:MXCZQ 满箱操作区) /// </summary> [JsonProperty("s_start_loc")] public string StartLoc { get; set; } } /// <summary> /// 空托/空箱入库绑定(PDA)数据类 /// </summary> public class EmptyBindInfo { /// <summary> /// 容器编码 /// </summary> [JsonProperty("s_cntr_code")] public string CntrCode { get; set; } /// <summary> /// 容器类型 /// </summary> [JsonProperty("s_cntr_type")] public string CntrType { get; set; } ///// <summary> ///// 托盘数量(仅当容器类型为托盘时使用) ///// </summary> //[JsonProperty("pallet_count", NullValueHandling = NullValueHandling.Ignore)] //public int PalletCount { get; set; } /// <summary> /// 货位编码 /// </summary> [JsonProperty("s_loc_code")] public string LocCode { get; set; } } /// <summary> /// 空托绑定 /// </summary> public class EmptyBindPalletInfo { /// <summary> /// 容器编码 /// </summary> public string CntrCode { get; set; } /// <summary> /// 托盘数量 /// </summary> public int PalletCount { get; set; } /// <summary> /// 货位编码 /// </summary> public string LocCode { get; set; } } /// <summary> /// 空箱绑定 /// </summary> public class EmptyBindGoodpackInfo { /// <summary> /// 容器编码 /// </summary> public string CntrCode { get; set; } /// <summary> /// 货位编码 /// </summary> public string LocCode { get; set; } } /// <summary> /// 空托/空箱入库(PDA)数据类 /// </summary> @@ -257,77 +190,57 @@ [JsonProperty("cntr_code")] public string CntrCode { get; set; } /// <summary> /// 容器类型 /// 容器类型(必须为 '空托盘’ 或 ‘空好运箱') /// </summary> [JsonProperty("cntr_type")] public string CntrType { get; set; } /// <summary> /// 终点库区编码 /// 终点库区编码(托盘是 KTCFQ 空托存放区;好运箱是 CXHJQ 空箱货架区) /// </summary> [JsonProperty("end_area")] public string EndArea { get; set; } /// <summary> /// 起点货位 /// 起点货位(托盘是 KTJBQ 空托入库接驳区;好运箱是 KXJBQ 空箱入库接驳区) /// </summary> [JsonProperty("start_loc")] public string StartLoc { get; set; } } public class EmptyOnlinePalletInfo { [JsonProperty("item_code")] public string ItemCode { get; set; } [JsonProperty("batch_no")] public string BatchNo { get; set; } [JsonProperty("spe")] public string Spec { get; set; } // 物料规格 [JsonProperty("cnt_id")] public string CntId { get; set; } // 容器类型 = 托盘 } public class EmptyOnlineGoodpackInfo { [JsonProperty("cnt_id")] public string CntId { get; set; } // 容器类型 = 好运箱 } /// <summary> /// 抽检-创建抽检单(WMS)数据类 /// 空箱上线信息 /// </summary> public class CreateCheckOrderInfo { public class EmptyOnlinePalletInfo { /// <summary> /// 物料编码 /// </summary> [JsonProperty("item_code")] public string ItemCode { get; set; } /// <summary> /// 批次号 /// </summary> [JsonProperty("batch_no")] public string BatchNo { get; set; } /// <summary> /// 物料规格 /// </summary> [JsonProperty("spe")] public string Spe { get; set; } public string Spec { get; set; } /// <summary> /// 批次号 /// 容器号 /// </summary> [JsonProperty("batch_no")] public string BatchNo { get; set; } /// <summary> /// 需出库数量 /// </summary> [JsonProperty("qty")] public int Qty { get; set; } /// <summary> /// 容器类型 /// </summary> [JsonProperty("cntr_type")] public string CntrType { get; set; } /// <summary> /// 出库终点货区 /// </summary> [JsonProperty("end_area")] public string EndArea { get; set; } [JsonProperty("cnt_id")] public string CntId { get; set; } // 容器类型 = 托盘 } /// <summary> /// 空好运箱上线信息 /// </summary> public class EmptyOnlineGoodpackInfo { /// <summary> /// 容器号 /// </summary> [JsonProperty("cnt_id")] public string CntId { get; set; } // 容器类型 = 好运箱 } /// <summary> /// 抽检-合格回库(PDA) 数据类 /// </summary> @@ -344,21 +257,17 @@ public string CntrCode { get; set; } } /// <summary> /// 不合格移库数据类 /// </summary> public class UnqualifiedShiftInfo : QualifiedBackInfo { /// <summary> /// 不合格移库终点库区 /// 不合格移库终点库区(必须是 CJYCQ 抽检异常区) /// </summary> [JsonProperty("end_area")] public string EndArea { get; set; } } public class CheckShiftInfo : UnqualifiedShiftInfo { public bool Qualified { get; set; } } #endregion #region WMS 数据 /// <summary> /// 成品胶出库(PDA) /// </summary> @@ -368,11 +277,6 @@ /// </summary> [JsonProperty("item_code")] public string ItemCode { get; set; } ///// <summary> ///// 物料名称 ///// </summary> //[JsonProperty("item_name")] //public string ItemName { get; set; } /// <summary> /// 物料规格 /// </summary> @@ -404,35 +308,6 @@ [JsonProperty("force_out")] public bool ForcedOut { get; set; } } /// <summary> /// 移库-创建移库任务数据类 /// </summary> public class CreateShiftOrderInfo { /// <summary> /// 物料编码 /// </summary> [JsonProperty("item_code")] public string ItemCode { get; set; } ///// <summary> ///// 物料名称 ///// </summary> // //[JsonProperty("item_name")] //public string ItemName { get; set; } /// <summary> /// 批次号 /// </summary> [JsonProperty("batch_no")] public string BatchNo { get; set; } /// <summary> /// 移库终点货区 /// </summary> [JsonProperty("end_area")] public string EndArea { get; set; } } /// <summary> /// 余料尾箱回库(PDA)数据类 @@ -444,16 +319,24 @@ [JsonProperty("start_loc")] public string StartLoc { get; set; } } #endregion /// <summary> /// 物料信息下发同步 数据类 /// </summary> public class CgInfoSyncInfo { /// <summary> /// 物料名称 /// </summary> [JsonProperty("itemName")] public string ItemName { get; set; } /// <summary> /// 物料编码 /// </summary> [JsonProperty("itemCode")] public string ItemCode { get; set; } /// <summary> /// 批次号 /// </summary> [JsonProperty("batchNo")] public string BatchNo { get; set; } @@ -531,11 +414,6 @@ /// </summary> [JsonProperty("item_code")] public string ItemCode { get; set; } ///// <summary> ///// 物料名称 ///// </summary> //[JsonProperty("item_name")] //public string ItemName { get; set; } /// <summary> /// 物料规格 /// </summary> api/DebugController.cs
@@ -64,6 +64,66 @@ } /// <summary> /// AGV状态一键回报134 /// </summary> /// <param name="model">容器号</param> /// <returns></returns> [HttpPost] [Route("AGVSeriesReports14")] public ReturnResults AGVSeriesReports14(UpdateTaskState model) { var agvTaskState = new AgvTaskState() { task_no = model.TaskID, forklift_no = model.ForkliftNo, state = 1 }; ReturnResults returnResult = new ReturnResults(); returnResult.ResultList = new List<ReturnResult>(); 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); return returnResult; } /// <summary> /// AGV状态一键回报562 /// </summary> /// <param name="model">容器号</param> /// <returns></returns> [HttpPost] [Route("AGVSeriesReports62")] public ReturnResults AGVSeriesReports62(UpdateTaskState model) { var agvTaskState = new AgvTaskState() { task_no = model.TaskID, forklift_no = model.ForkliftNo, state = 5 }; ReturnResults returnResult = new ReturnResults(); returnResult.ResultList = new List<ReturnResult>(); 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; } /// <summary> /// 初始化数据库 /// </summary> /// <returns></returns> @@ -186,7 +246,6 @@ var db = new SqlHelper<object>().GetInstance(); try { using (var tran = db.UseTran()) { LogHelper.Info("LogCntrCg:" + JsonConvert.SerializeObject(locCntrCg)); @@ -322,6 +381,11 @@ } } /// <summary> /// DEBUG:模拟输送线产线满托盘下线流程 /// </summary> /// <param name="model"></param> /// <returns></returns> [HttpPost] [Route("AddInboundTask")] public string AddInboundTask(AddInboundTaskInfo model) { @@ -397,8 +461,8 @@ var cntId = locCntrRel.S_CNTR_CODE; var task = WCSHelper.BuildTask(startLoc, endLoc, cntId, taskName); LocationHelper.LockLoc(ref startLoc, 2); // 起点出库锁 LocationHelper.LockLoc(ref endLoc, 1); // 终点入库锁 LocationHelper.LockStartLoc(ref startLoc); // 起点出库锁 LocationHelper.LockEndLoc(ref endLoc); // 终点入库锁 using (var tran = db.Ado.UseTran()) { if (db.Insertable<TN_CG_Detail>(cgDetail).ExecuteCommand() <= 0) { @@ -480,9 +544,21 @@ } public class AddInboundTaskInfo { /// <summary> /// 物料编码 /// </summary> public string ItemCode { get; set; } /// <summary> /// 批次号 /// </summary> public string BatchNo { get; set; } /// <summary> /// 容器编码 /// </summary> public string CntrCode { get; set; } /// <summary> /// 起始货位 /// </summary> public string StartLoc { get; set; } } core/Monitor.cs
@@ -124,8 +124,8 @@ var cntId = locCntrRel.S_CNTR_CODE; var task = WCSHelper.BuildTask(startLoc, endLoc, cntId, taskName); LocationHelper.LockLoc(ref startLoc, 2); // 起点出库锁 LocationHelper.LockLoc(ref endLoc, 1); // 终点入库锁 LocationHelper.LockStartLoc(ref startLoc); // 起点出库锁 LocationHelper.LockEndLoc(ref endLoc); // 终点入库锁 using (var tran = db.Ado.UseTran()) { if (db.Insertable<TN_CG_Detail>(cgDetail).ExecuteCommand() <= 0) { @@ -294,8 +294,8 @@ var cntId = detail.S_CNTR_CODE; var task = WCSHelper.BuildTask(startLoc, endLoc, cntId, taskName); LocationHelper.LockLoc(ref startLoc, 2); // 起点出库锁 LocationHelper.LockLoc(ref endLoc, 1); // 终点入库锁 LocationHelper.LockStartLoc(ref startLoc); // 起点出库锁 LocationHelper.LockEndLoc(ref endLoc); // 终点入库锁 using (var tran = db.Ado.UseTran()) { if (db.Updateable<TN_Outbound_Detail>(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand() <= 0) { @@ -451,8 +451,8 @@ var cntId = detail.S_CNTR_CODE; var task = WCSHelper.BuildTask(startLoc, endLoc, cntId, taskName); LocationHelper.LockLoc(ref startLoc, 2); // 起点出库锁 LocationHelper.LockLoc(ref endLoc, 1); // 终点入库锁 LocationHelper.LockStartLoc(ref startLoc); // 起点出库锁 LocationHelper.LockEndLoc(ref endLoc); // 终点入库锁 using (var tran = db.Ado.UseTran()) { if (db.Updateable<TN_SpotCheck_Detail>(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand() <= 0) { @@ -575,8 +575,8 @@ var cntId = detail.S_CNTR_CODE; var task = WCSHelper.BuildTask(startLoc, endLoc, cntId, taskName); LocationHelper.LockLoc(ref startLoc, 2); // 起点出库锁 LocationHelper.LockLoc(ref endLoc, 1); // 终点入库锁 LocationHelper.LockStartLoc(ref startLoc); // 起点出库锁 LocationHelper.LockEndLoc(ref endLoc); // 终点入库锁 using (var tran = db.Ado.UseTran()) { if (db.Updateable<TN_RelocationList_Detail>(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand() <= 0) { core/WCSCore.cs
@@ -131,6 +131,7 @@ private static void RecordTaskTable(TN_Task task) { var db = new SqlHelper<object>().GetInstance(); var info = ""; try { var cgDetail = new TN_CG_Detail(); @@ -172,6 +173,7 @@ T_RECORD_TIME = DateTime.Now, S_TYPE = task.S_TYPE, S_BS_CODE = task.S_BS_TYPE, N_QTY = cgDetail.N_ITEM_NUM, }; if (db.Insertable<TN_Record_Table>(record).ExecuteCommand() <= 0) { wms/LocationHelper.cs
@@ -127,21 +127,34 @@ } /// <summary> /// 入库锁定终点,出库锁定起点 /// 你创建任务锁定货位的时候,把锁的来源就是任务号也写上去(加锁的方法加个参数,可空的参数),解锁的时候把来源置空。 /// 起点出库锁 /// </summary> /// <param name="loc"></param> /// <param name="lockState">1:入库锁、2:出库锁、3:其它锁</param> /// <param name="lockSource">锁的来源=任务号</param> /// <param name="lockSource"></param> /// <returns></returns> public static bool LockLoc(ref TN_Location loc, int lockState, string lockSource = "") { public static bool LockStartLoc(ref TN_Location loc, string lockSource = "") { if (loc == null || loc.N_LOCK_STATE != 0) { return false; } if (loc != null && loc.N_LOCK_STATE == 0) { loc.N_LOCK_STATE = lockState; loc.S_LOCK_STATE = TN_Location.GetLockStateStr(lockState); loc.N_LOCK_STATE = 2; // 起点出库锁 loc.S_LOCK_STATE = TN_Location.GetLockStateStr(2); // 起点出库锁 loc.S_LOCK_OP = lockSource; loc.T_MODIFY = System.DateTime.Now; } return true; } public static bool LockEndLoc(ref TN_Location loc, string lockSource = "") { if (loc == null || loc.N_LOCK_STATE != 0) { return false; } if (loc != null && loc.N_LOCK_STATE == 0) { loc.N_LOCK_STATE = 1; // 终点出库锁 loc.S_LOCK_STATE = TN_Location.GetLockStateStr(1); // 终点出库锁 loc.S_LOCK_OP = lockSource; loc.T_MODIFY = System.DateTime.Now; } @@ -159,7 +172,7 @@ /// <param name="lockState">1:入库锁、2:出库锁、3:其它锁</param> /// <param name="lockSource">锁的来源=任务号</param> /// <returns></returns> public static bool LockLoc(string loc, int lockState, string lockSource = "") private static bool LockLoc(string loc, int lockState, string lockSource = "") { var res = false; var db = new SqlHelper<object>().GetInstance(); wms/SYSHelper.cs
@@ -27,38 +27,8 @@ sId.CN_T_LAST = DateTime.Now; if (db.Ado.ExecuteCommand($"update OI_SYS_MAXID set CN_N_MAX={sId.CN_N_MAX}, CN_T_LAST='{sId.CN_T_LAST}' where CN_S_TYPE='{snType}' and CN_S_PRE='{prefix}' ") > 0) { //LogHelper.Info($"set cn_n_max {sId.CN_N_MAX}"); result = sId.CN_N_MAX; } //if (db.Updateable<OI_SYS_MAXID>(sId).UpdateColumns(it => new { it.CN_N_MAX, it.CN_T_LAST}).ExecuteCommand() > 0) { // result = sId.CN_N_MAX; //} //if (db.Updateable<OI_SYS_MAXID>() // .SetColumns(it => it.CN_N_MAX == sId.CN_N_MAX && it.CN_T_LAST == sId.CN_T_LAST) // .Where(it => it.CN_S_TYPE == sId.CN_S_TYPE && it.CN_S_PRE == sId.CN_S_TYPE) // .ExecuteCommand() > 0) { // result = sId.CN_N_MAX; //} //var parameters = new[] { // new SugarParameter("@CN_N_MAX", sId.CN_N_MAX), // new SugarParameter("@CN_T_LAST", sId.CN_T_LAST), // new SugarParameter("@CN_S_TYPE", sId.CN_S_TYPE), // new SugarParameter("@CN_S_PRE", sId.CN_S_TYPE) //}; //var sql = @"UPDATE OI_SYS_MAXID // SET CN_N_MAX = @CN_N_MAX, CN_T_LAST = @CN_T_LAST // WHERE CN_S_TYPE = @CN_S_TYPE AND CN_S_PRE = @CN_S_PRE"; //if (db.Ado.ExecuteCommand(sql, parameters) > 0) { // result = sId.CN_N_MAX; // LogHelper.Info($"set cn_n_max {sId.CN_N_MAX}"); //} } else { //插入表 wms/WCSHelper.cs
@@ -82,25 +82,6 @@ return TN_Task; } public static TN_Task BuildTask(TN_Loc_Container locCntrRel, TN_Location endLoc, string cntId, string type) { var fromLoc = LocationHelper.GetLocation(locCntrRel.S_LOC_CODE); TN_Task TN_Task = new TN_Task() { S_CODE = GenerateTaskNo(), S_START_AREA = fromLoc.S_AREA_CODE, S_END_AREA = endLoc.S_AREA_CODE, S_START_LOC = fromLoc.S_CODE, S_END_LOC = endLoc.S_CODE, S_TYPE = type, N_PRIORITY = 3, // 初始优先级默认为:3 N_SCHEDULE_TYPE = 3, // 国自 N_B_STATE = 0, S_CNTR_CODE = cntId, }; return TN_Task; } /// <summary> /// 创建搬送任务 /// </summary>