济宁李尔接口
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

330 lines
17 KiB

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
{
/// <summary>
/// 入库请求接口
/// </summary>
public class WCS_REQUEST_IN_BLL
{
public static Dictionary<int, Dictionary<int, List<int>>> tunnels = new Dictionary<int, Dictionary<int, List<int>>>();
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);
}
}
/// <summary>
/// 入库请求接口
/// </summary>
public static void Wcs_request_in()
{
string reqJson = string.Empty;
List<IO_CONTROL_APPLY> acModelList = new List<IO_CONTROL_APPLY>();
T_BASE_DEVICE devModel = new T_BASE_DEVICE();
IO_CONTROL_APPLY caModle = new IO_CONTROL_APPLY();
IO_INTERFACE IModel = new IO_INTERFACE();
List<IO_INTERFACE> IModelList = new List<IO_INTERFACE>();
SHUTTLE_POSITION spModel = new SHUTTLE_POSITION();
IO_CONTROL model = new IO_CONTROL();
try
{
List<T_BASE_DEVICE> devModelList = new List<T_BASE_DEVICE>();
devModelList = devModel.GetModelList();
if (tunnels.Count <= 0)
{
List<int> tunnel = devModelList.Select(c => c.F_tunnel.Value).Distinct().ToList();
foreach (var temp in devModelList.Select(c => c.F_tunnel.Value).Distinct())
{
List<T_BASE_DEVICE> tempList = devModelList.Where(c => c.F_tunnel.Value == temp).ToList();
Dictionary<int, List<int>> device = new Dictionary<int, List<int>>();
foreach (var type in tempList.OrderBy(c => c.F_DeviceKindIndex).Select(c => c.F_DeviceKindIndex).Distinct())
{
List<int> 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<T_BASE_DEVICE> 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<int> equipmentID = new List<int>();//穿梭板设备编码
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<int> { 15001, 15002, 15003, 15004, 15005 };
// break;
// case "12005":
// case "12011":
// case "12017":
// equipmentID = new List<int> { 15006, 15007, 15008, 15009, 15010 };
// break;
// case "22002":
// case "22008":
// case "22014":
// equipmentID = new List<int> { 25001, 25002, 25003, 25004, 25005 };
// break;
// case "22005":
// case "22011":
// case "22017":
// equipmentID = new List<int> { 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<wms_request_out_Model> modelList = UtilityBLL.GetReceiveValuesList<wms_request_out_Model>(retJson, "data");
//roModel = UtilityBLL.GetReceiveValuesList<wms_request_out_Model>(retJson, "data").First() ;
roModel = JsonConvert.DeserializeObject<wms_request_out_Model>(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
{
/// <summary>
/// 处理状态。00,成功,01异常
/// </summary>
public String code { get; set; }
/// <summary>
/// 返回消息,描述信息
/// </summary>
public String msg { get; set; }
/// <summary>
/// 任务号
/// </summary>
public String taskId { get; set; }
/// <summary>
/// 容器号
/// </summary>
public String containerCode { get; set; }
/// <summary>
/// 货位地址(如01-03-03)
/// </summary>
public String sourceAddress { get; set; }
/// <summary>
/// 目标出库输送机编号
/// </summary>
public String targetAddress { get; set; }
/// <summary>
/// 优先级 0-10 数字越大,优先级越高
/// </summary>
public String tasklevel { get; set; }
}
}
}