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
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; }
|
|
|
|
}
|
|
}
|
|
}
|