using DBModel; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using XS_DAL; using XS_Model; namespace XS_BLL { /// /// 入库请求接口 /// public class WCS_REQUEST_IN_BLL { public static Dictionary>> tunnels = new Dictionary>>(); public static string Wcs_request_in(string recieveJson) { try { JObject objMis = new JObject(); objMis.Add(new JProperty("method", "wcs_request_in")); objMis.Add(new JProperty("timestamp", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"))); JObject objDate = new JObject(); objDate.Add(new JProperty("code", "00"));//库号 objDate.Add(new JProperty("msg", "WMS接收WCS申请入库成功"));//入库输送站台编号 objDate.Add(new JProperty("taskId", "123461"));//容器编号 objDate.Add(new JProperty("containerCode", "T00000001")); objDate.Add(new JProperty("sourceAddress", "12003")); objDate.Add(new JProperty("targetAddress", "05-03-03")); objDate.Add(new JProperty("tasklevel", "0")); objMis.Add(new JProperty("data", objDate)); string retjson = JsonConvert.DeserializeObject(objMis.ToString()).ToString(); LogHelper.LogOperation("wcs_request_in", recieveJson, retjson); new DisplaySet().AddListBoxItem("", ""); new DisplaySet().AddListBoxItem("接收:", recieveJson); new DisplaySet().AddListBoxItem("反馈:", retjson); return retjson; } catch (Exception ex) { new DisplaySet().AddListBoxItem("wcs_request_in", ex.Message); LogHelper.LogOperation("wcs_request_in", recieveJson, ex.Message); T_RESULT rModdel = new T_RESULT(); rModdel.code = "01"; rModdel.msg = ex.Message; rModdel.taskId = ""; return JsonConvert.SerializeObject(rModdel); } } /// /// 入库请求接口 /// public static void Wcs_request_in() { string reqJson = string.Empty; List acModelList = new List(); T_BASE_DEVICE devModel = new T_BASE_DEVICE(); IO_CONTROL_APPLY caModle = new IO_CONTROL_APPLY(); IO_INTERFACE IModel = new IO_INTERFACE(); List IModelList = new List(); SHUTTLE_POSITION spModel = new SHUTTLE_POSITION(); IO_CONTROL model = new IO_CONTROL(); try { List devModelList = new List(); devModelList = devModel.GetModelList(); if (tunnels.Count <= 0) { List tunnel = devModelList.Select(c => c.F_tunnel.Value).Distinct().ToList(); foreach (var temp in devModelList.Select(c => c.F_tunnel.Value).Distinct()) { List tempList = devModelList.Where(c => c.F_tunnel.Value == temp).ToList(); Dictionary> device = new Dictionary>(); foreach (var type in tempList.OrderBy(c => c.F_DeviceKindIndex).Select(c => c.F_DeviceKindIndex).Distinct()) { List devices = tempList.Where(c => c.F_DeviceKindIndex == type).Select(c => c.F_DeviceIndex).Distinct().ToList(); device.Add(Convert.ToInt32(type), devices); } tunnels.Add(Convert.ToInt32(temp), device); } } string caw = " and DEVICE_CODE in (select F_DeviceIndex from T_Base_Device where F_DeviceKindIndex = 2 and F_DBW2Address is not null and F_tunnel in (18001,18002,18003,18004))"; //47 左侧放货时货架有货 //48 右侧放货时货架有货 //54 取货空 //56 左伸取远货时近货架有货 //57 右伸取远货时近货架有货 acModelList = caModle.GetModelList(" APPLY_TASK_STATUS = 0 " + caw); foreach (var item in acModelList) { if (item.STOCK_BARCODE == "111111111" || !item.STOCK_BARCODE.StartsWith("EU") || item.STOCK_BARCODE.Length != 9 || item.STOCK_BARCODE == "NOREAD000") { new DisplaySet().AddListBoxItem("条码异常", "条码异常\"" + item.STOCK_BARCODE + "\""); caModle.Delete(" STOCK_BARCODE = '" + item.STOCK_BARCODE + "'"); continue; } string json = string.Empty; int tunnel = devModelList.Where(c => c.F_DeviceIndex == Convert.ToInt32(item.DEVICE_CODE)).Select(c => Convert.ToInt32(c.F_tunnel)).First(); wms_request_out_Model roModel = new wms_request_out_Model(); List doors = devModel.GetModelList(" F_tunnel = " + tunnel + " and F_DeviceKindIndex = 4 and F_ErrorCode > 0"); StringBuilder sDor = new StringBuilder(); foreach (var dr in doors) { int layer = Convert.ToInt32(dr.F_DBW2Address) - 600; if (layer == 0) { sDor.Append(",1,2,3,4"); } if (layer == 1) { sDor.Append(",5,6,7,8"); } if (layer == 2) { sDor.Append(",9,10,11"); } } string ShuttleBoard = string.Empty;//穿梭板所在层 List equipmentID = new List();//穿梭板设备编码 equipmentID = tunnels[tunnel][1].FindAll(c => c.ToString().Substring(0, 2) != "35"); #region //switch (item.DEVICE_CODE) //{ // case "12002": // case "12008": // case "12014": // equipmentID = new List { 15001, 15002, 15003, 15004, 15005 }; // break; // case "12005": // case "12011": // case "12017": // equipmentID = new List { 15006, 15007, 15008, 15009, 15010 }; // break; // case "22002": // case "22008": // case "22014": // equipmentID = new List { 25001, 25002, 25003, 25004, 25005 }; // break; // case "22005": // case "22011": // case "22017": // equipmentID = new List { 25006, 25007, 25008, 25009, 25010 }; // break; //} #endregion string where = ""; if (!string.IsNullOrEmpty(sDor.ToString().Trim())) { where = "and F_Postion not in (" + string.Join(",", sDor.ToString().TrimStart(',').Split(',')) + ")"; } var ShuttleBoardAll = spModel.GetModelList("F_LaneOut = 0 and F_RunStatus in (0,1,5) " + where);//所有穿梭板 ShuttleBoard = string.Join(";", ShuttleBoardAll.Where(c => equipmentID.Contains(c.F_DeviceIndex)).Select(c => c.F_Postion).ToList()); #region json JObject objMis = new JObject(); objMis.Add(new JProperty("method", "wcs_request_in")); objMis.Add(new JProperty("timestamp", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"))); JObject objDate = new JObject(); objDate.Add(new JProperty("bankId", item.WAREHOUSE_CODE));//库号 objDate.Add(new JProperty("sourceAddress", item.DEVICE_CODE));//入库输送站台编号 objDate.Add(new JProperty("containerCode", item.STOCK_BARCODE));//容器编号 objDate.Add(new JProperty("suggestlayer", ShuttleBoard));//推荐入库层1-11(分号分隔)例如:1;2;5 //objMis.Add(new JProperty("data", JsonConvert.SerializeObject(objDate))); objMis.Add(new JProperty("data", objDate)); #endregion json = JsonConvert.DeserializeObject(objMis.ToString()).ToString(); reqJson += json; string retJson = HttpHelper.PostJson(Global.upper_WMSURL, json); string retdata = UtilityBLL.GetReceiveValues(retJson, "data"); List modelList = UtilityBLL.GetReceiveValuesList(retJson, "data"); //roModel = UtilityBLL.GetReceiveValuesList(retJson, "data").First() ; roModel = JsonConvert.DeserializeObject(retdata); #region 接口日志记录 IModel = new IO_INTERFACE(); //IModel.INTERFACE_ID = ""; IModel.INTERFACE_NAME = "wcs_request_in"; IModel.INTERFACE_FLOW = "WCS==>>WMS"; IModel.INTERFACE_REQUEST = reqJson; IModel.INTERFACE_FEEDBACK = retJson; IModel.INTERFACE_DATETIME = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); IModel.INTERFACE_MENO = ""; //IModel.Insert(); LogHelper.LogOperation("wcs_request_in", json, retJson); #endregion 接口日志记录 if (modelList != null) { if (roModel.code == "00") { int place = DBOperator.GetTableSql(string.Format("select * from ST_CELL where FLANEWAY = {0} and FCELLCODE = '{1}'", tunnel, roModel.targetAddress)).Rows.Count; if (place > 0) { #region 数据赋值 model = new IO_CONTROL(); model.CONTROL_ID = Convert.ToDecimal(roModel.taskId); model.RELATIVE_CONTROL_ID = -1; model.MANAGE_ID = 0; model.STOCK_BARCODE = roModel.containerCode; model.MANAGE_TASK_TYPE = "1"; model.CONTROL_TASK_TYPE = 1;//1:入库 2:出库 3:倒库 model.CONTROL_TASK_LEVEL = roModel.tasklevel; model.START_WAREHOUSE_CODE = "1"; model.START_DEVICE_CODE = roModel.sourceAddress; model.END_WAREHOUSE_CODE = "1"; model.END_DEVICE_CODE = roModel.targetAddress.ToString(); model.CONTROL_STATUS = 0; //model.ERROR_TEXT = ""; model.CONTROL_BEGIN_TIME = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); //model.CONTROL_END_TIME = ""; //model.CONTROL_REMARK = ""; //model.CONTORL_BATCH = ""; //model.LOGIC_AREA = ""; //model.CELL_MODEL = ""; //model.WORK_MODE = ""; //model.GOODS_BARCODE = ""; //model.GOODS_NUM = ""; #endregion 数据赋值 string staRTeTunnel = Global.deviceCell[model.START_DEVICE_CODE]; string endTunnel = Global.deviceCell[model.END_DEVICE_CODE]; if (staRTeTunnel == endTunnel) { int rows = model.GetTable(" CONTROL_ID = " + model.CONTROL_ID + " and STOCK_BARCODE = '" + model.STOCK_BARCODE + "' ").Rows.Count; ///注:条码重复处理 //if (rows <= 0 && model.Insert()) if (rows <= 0 && model.Insert()) { caModle.Update(" APPLY_TASK_STATUS = 1 ", " STOCK_BARCODE = '" + roModel.containerCode + "'"); //caModle.Delete(" STOCK_BARCODE = '" + roModel.containerCode + "'"); } else { caModle.Update(" APPLY_TASK_STATUS = 1 ", " STOCK_BARCODE = '" + roModel.containerCode + "'"); } } else { retJson = "容器:" + roModel.containerCode + " 起始地址:" + roModel.sourceAddress + "与终止地址:" + model.END_DEVICE_CODE + "不在同一巷道内!!!"; new DisplaySet().ErrorAddListBoxItem("错误:", retJson); } } else { retJson = "容器:" + roModel.containerCode + " 分配货位:" + roModel.targetAddress + "不在巷道:" + tunnel + "中。"; new DisplaySet().ErrorAddListBoxItem("错误:", retJson); } } else { bool bl = caModle.Update(" APPLY_TASK_STATUS = 2 ", " CONTROL_APPLY_ID = '" + roModel.taskId + "' and STOCK_BARCODE = '" + roModel.containerCode + "'"); string err = "容器:" + roModel.containerCode + " 分配货位:" + roModel.targetAddress + " 不在巷道:" + tunnel + "中。返回数据:" + retJson; new DisplaySet().ErrorAddListBoxItem("错误:", err); } } new DisplaySet().AddListBoxItem("", ""); new DisplaySet().AddListBoxItem("入库请求:", json); new DisplaySet().AddListBoxItem("反馈:", retJson); } IO_CONTROL_APPLY caModel = new IO_CONTROL_APPLY(); caModel.Delete(" APPLY_TASK_STATUS = 1 and STOCK_BARCODE not in (select STOCK_BARCODE from IO_CONTROL )"); } catch (Exception ex) { new DisplaySet().ErrorAddListBoxItem("wcs_request_in", ex.Message); new DisplaySet().AddListBoxItem("wcs_request_in", ex.Message); #region 接口日志记录 //IModel.INTERFACE_ID = ""; IModel.INTERFACE_NAME = "wcs_request_in"; IModel.INTERFACE_FLOW = "WCS==>>WMS"; IModel.INTERFACE_REQUEST = reqJson; IModel.INTERFACE_FEEDBACK = ex.Message; IModel.INTERFACE_DATETIME = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); IModel.INTERFACE_MENO = ""; IModel.Insert(); LogHelper.ErrorLog(ex); #endregion 接口日志记录 } } public class wms_request_out_Model { /// /// 处理状态。00,成功,01异常 /// public String code { get; set; } /// /// 返回消息,描述信息 /// public String msg { get; set; } /// /// 任务号 /// public String taskId { get; set; } /// /// 容器号 /// public String containerCode { get; set; } /// /// 货位地址(如01-03-03) /// public String sourceAddress { get; set; } /// /// 目标出库输送机编号 /// public String targetAddress { get; set; } /// /// 优先级 0-10 数字越大,优先级越高 /// public String tasklevel { get; set; } } } }