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.
365 lines
15 KiB
365 lines
15 KiB
3 months ago
|
using DBFactory;
|
||
|
using System;
|
||
|
using System.Collections.Generic;
|
||
|
using System.Data;
|
||
|
using System.Linq;
|
||
|
using System.Net;
|
||
|
using System.Net.Http;
|
||
|
using System.Text;
|
||
|
using System.Web.Http;
|
||
|
using WcfControlMonitorLib;
|
||
|
|
||
|
namespace SDWebApi.Controllers
|
||
|
{
|
||
|
[RoutePrefix("api/wcs")]
|
||
|
public class thirdParty : ApiController
|
||
|
{
|
||
|
static DBOperator dbo = CStaticClass.dbo;
|
||
|
static DBOperator dboMan = CStaticClass.dboM;
|
||
|
static String ERROR = String.Empty;
|
||
|
[HttpPost]
|
||
|
[Route("receiveWmsTask")]
|
||
|
// POST api/<controller>
|
||
|
public string receiveWmsTaskController([FromBody] string value)
|
||
|
{
|
||
|
dbo.TransBegin(IsolationLevel.ReadCommitted);
|
||
|
try
|
||
|
{
|
||
|
//var body = this.Request.Body;
|
||
|
//int length = (int)body.Length;
|
||
|
//byte[] data = new byte[length];
|
||
|
//body.Read(data, 0, length);
|
||
|
//string jsonStr = System.Text.Encoding.Default.GetString(value);
|
||
|
CommonClassLib.CCarryConvert.WriteLog("WEBAPI", "收到报文", value.ToString(), "");
|
||
|
|
||
|
CCallService.WMS_WCS_PARAM_OUT_MOVE wms_wcs = Model.JsonHelper.Deserialize<CCallService.WMS_WCS_PARAM_OUT_MOVE>(value);
|
||
|
// CCallService.WCS_WMS_PARAM_OUT_MOVE wcs_wms = new CCallService.WCS_WMS_PARAM_OUT_MOVE(); //返回的报文
|
||
|
CCallService.OUT_MOVE_RES answer_outdata = new CCallService.OUT_MOVE_RES();//返回数据
|
||
|
string err = string.Empty;
|
||
|
string returnJson = string.Empty;
|
||
|
DataView dv = new DataView();
|
||
|
CCallService.OUT_MOVE_RES outReturn = new CCallService.OUT_MOVE_RES();
|
||
|
if (wms_wcs != null)
|
||
|
{
|
||
|
List<CCallService.OUT_MOVE_DATA> outdata = wms_wcs.tasks; //任务信息
|
||
|
int isOk = 0;
|
||
|
// CCallService.OUT_MOVE_RES outReturn = new CCallService.OUT_MOVE_RES();
|
||
|
foreach (var task in outdata)
|
||
|
{
|
||
|
|
||
|
IO_CONTROL outtask = new IO_CONTROL(task, wms_wcs.msgTime, wms_wcs.priority.ToString());
|
||
|
|
||
|
if (outtask.Insert_IOCONTROL() == false)
|
||
|
{
|
||
|
isOk++;
|
||
|
outReturn.data += "ID'" + task.taskId.ToString() + "'任务下发失败:";
|
||
|
}
|
||
|
if (isOk == 0)
|
||
|
{
|
||
|
outReturn.code = 0;
|
||
|
outReturn.msg = "";
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
outReturn.code = 1;
|
||
|
outReturn.msg = "任务接收失败";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|
||
|
returnJson = Model.JsonHelper.Serializer(outReturn);
|
||
|
CommonClassLib.CCarryConvert.WriteLog("WEBAPI", "返回报文", returnJson, "");
|
||
|
dbo.TransCommit();
|
||
|
return returnJson;
|
||
|
}
|
||
|
catch (Exception ex)
|
||
|
{
|
||
|
string errorjson = Model.JsonHelper.Serializer(new
|
||
|
{
|
||
|
code = 1,
|
||
|
msg = "WCS解析json异常",
|
||
|
data = ex.Message.ToString()
|
||
|
});
|
||
|
CommonClassLib.CCarryConvert.WriteLog("WEBAPI", "返回报文", ex.Message.ToString(), "");
|
||
|
dbo.TransRollback();
|
||
|
return errorjson;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// PUT api/<controller>/5
|
||
|
public void Put(int id, [FromBody] string value)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
// DELETE api/<controller>/5
|
||
|
public void Delete(int id)
|
||
|
{
|
||
|
}
|
||
|
}
|
||
|
|
||
|
#region 向 IO_CONTROL 插入出库倒库任务等
|
||
|
public class IO_CONTROL
|
||
|
{
|
||
|
static DBOperator dbo = CStaticClass.dbo;
|
||
|
static DBOperator dboMan = CStaticClass.dboM;
|
||
|
string wms_id;
|
||
|
int relative_id;
|
||
|
string barcode;
|
||
|
string startdevice;
|
||
|
string enddevice;
|
||
|
string begintime;
|
||
|
int control_type;
|
||
|
string warehouse = "1";
|
||
|
string tasklevel;
|
||
|
int needAgv = 0;
|
||
|
public StringBuilder error_code = new StringBuilder();
|
||
|
|
||
|
StringBuilder sql = new StringBuilder();
|
||
|
|
||
|
public IO_CONTROL(CCallService.OUT_MOVE_DATA outdata, string time, string level)//出库 移库
|
||
|
{
|
||
|
error_code.Clear();
|
||
|
wms_id = outdata.taskId;
|
||
|
relative_id = -1;
|
||
|
barcode = outdata.containerCode;
|
||
|
if (outdata.taskType == 2 || outdata.taskType == 3)
|
||
|
{ //起点是库位
|
||
|
startdevice = outdata.startRow.ToString("D2") + "-" + outdata.startColumn.ToString("D2") + "-" + outdata.startLayer.ToString("D2");
|
||
|
enddevice = outdata.endNode;
|
||
|
}
|
||
|
else if (outdata.taskType == 1 || outdata.taskType == 4) //终点是库位
|
||
|
{
|
||
|
startdevice = outdata.startNode;
|
||
|
enddevice = outdata.endRow.ToString("D2") + "-" + outdata.endColumn.ToString("D2") + "-" + outdata.endLayer.ToString("D2");
|
||
|
}
|
||
|
control_type = outdata.taskType;
|
||
|
string dTime1 = DateTime.Now.ToString("u");
|
||
|
begintime = dTime1.Substring(0, dTime1.Length - 1);
|
||
|
tasklevel = level;
|
||
|
// needAgv = outdata.carryType == 2 ? 1 : 0;
|
||
|
}
|
||
|
public IO_CONTROL(CCallService.WMS_WCS_PARAM_IN indata, string time, string level)//入库
|
||
|
{
|
||
|
error_code.Clear();
|
||
|
wms_id = indata.taskId;
|
||
|
relative_id = -1;
|
||
|
barcode = indata.containerCode;
|
||
|
if (indata.taskType == 2 || indata.taskType == 3)
|
||
|
{ //起点是库位
|
||
|
// startdevice = outdata.startRow.ToString("D2") + "-" + outdata.startColumn.ToString("D2") + "-" + outdata.startLayer.ToString("D2");
|
||
|
enddevice = indata.endNode;
|
||
|
}
|
||
|
else if (indata.taskType == 1 || indata.taskType == 4) //终点是库位
|
||
|
{
|
||
|
startdevice = indata.startNode;
|
||
|
enddevice = indata.endRow.ToString("D2") + "-" + indata.endColumn.ToString("D2") + "-" + indata.endLayer.ToString("D2");
|
||
|
}
|
||
|
control_type = 1;
|
||
|
string dTime1 = DateTime.Now.ToString("u");
|
||
|
begintime = dTime1.Substring(0, dTime1.Length - 1);
|
||
|
tasklevel = level;
|
||
|
|
||
|
}
|
||
|
|
||
|
//检查参数是否正确
|
||
|
bool CheckData()
|
||
|
{
|
||
|
Dictionary<string, WEBAPI_CKECKING> all_checking = new Dictionary<string, WEBAPI_CKECKING>();
|
||
|
|
||
|
#region 从数据库中读取要检测的SQL
|
||
|
sql.Clear();
|
||
|
sql.Append("select * from WEBAPI_CKECKING");
|
||
|
DataView dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
||
|
for (int i = 0; i < dv.Count; i++)
|
||
|
{
|
||
|
WEBAPI_CKECKING wac = new WEBAPI_CKECKING();
|
||
|
|
||
|
wac.check_id = dv[i]["CKECK_ID"].ToString();
|
||
|
wac.check_name = dv[i]["CKECK_NAME"].ToString();
|
||
|
wac.sql = dv[i]["SQL"].ToString();
|
||
|
wac.des = dv[i]["DESCRIPTION"].ToString();
|
||
|
|
||
|
all_checking.Add(wac.check_name, wac);
|
||
|
}
|
||
|
#endregion
|
||
|
|
||
|
error_code.Clear();
|
||
|
|
||
|
#region 检查是否重复,CONTROL_ID, 托盘码重复, 起始货位重复,终止货位重复(结果大于零)
|
||
|
|
||
|
sql.Clear();
|
||
|
sql.Append(string.Format(all_checking["CONTROL_ID_REPEAT"].sql, wms_id));
|
||
|
if (dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView.Count > 0)
|
||
|
{
|
||
|
error_code.Append(";").Append(all_checking["CONTROL_ID_REPEAT"].des); //fid重复
|
||
|
}
|
||
|
|
||
|
//sql.Clear();
|
||
|
//sql.Append(string.Format(all_checking["BARCODE_REPEAT"].sql, barcode));
|
||
|
//if (dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView.Count > 0)
|
||
|
//{
|
||
|
// error_code.Append(";").Append(all_checking["BARCODE_REPEAT"].des); //托盘条码重复
|
||
|
//}
|
||
|
if (string.IsNullOrEmpty(tasklevel))
|
||
|
{
|
||
|
error_code.Append(";").Append("任务优先级为空");
|
||
|
}
|
||
|
if (string.IsNullOrEmpty(wms_id))
|
||
|
{
|
||
|
error_code.Append(";").Append("任务号为空");
|
||
|
}
|
||
|
if (string.IsNullOrEmpty(barcode))
|
||
|
{
|
||
|
error_code.Append(";").Append("条码为空");
|
||
|
}
|
||
|
|
||
|
if (int.TryParse(this.wms_id, out int controlid) == false)
|
||
|
{
|
||
|
error_code.Append(";").Append(all_checking["CONTROL_ID_NOT_NUM"].des); //controlid不为数字
|
||
|
}
|
||
|
|
||
|
|
||
|
if (control_type == 2)//出库任务
|
||
|
{
|
||
|
|
||
|
sql.Clear();
|
||
|
sql.Append(string.Format(all_checking["START_CEEE_REPEAT"].sql, startdevice, control_type));
|
||
|
if (dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView.Count > 0)
|
||
|
{
|
||
|
error_code.Append(";").Append(all_checking["START_CEEE_REPEAT"].des); //起始货位重复
|
||
|
}
|
||
|
if (this.startdevice.Length != 8)
|
||
|
{
|
||
|
error_code.Append(";").Append("起点").Append(all_checking["CELL_LENGTH_ERROR"].des); //起点货位编码长度错误
|
||
|
}
|
||
|
sql.Clear();
|
||
|
sql.Append(string.Format(all_checking["CELL_NOT_EXIST"].sql, startdevice));
|
||
|
if (dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView.Count == 0)
|
||
|
{
|
||
|
error_code.Append(";").Append("起点").Append(all_checking["CELL_NOT_EXIST"].des); //起点货位不存在
|
||
|
|
||
|
}
|
||
|
|
||
|
int endGate = 0;
|
||
|
if (int.TryParse(this.enddevice, out endGate) == false)
|
||
|
{
|
||
|
error_code.Append(";").Append(all_checking["END_GATE_ERROR"].des); //终点站台不正确,无法转为整数
|
||
|
}
|
||
|
|
||
|
sql.Clear();
|
||
|
sql.Append(string.Format(all_checking["END_GATE_NOT_EXIST"].sql, enddevice));
|
||
|
if (dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView.Count == 0)
|
||
|
{
|
||
|
error_code.Append(";").Append(all_checking["END_GATE_NOT_EXIST"].des); //终点站台不存在
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
if (control_type == 1)//入库任务
|
||
|
{
|
||
|
sql.Clear();
|
||
|
sql.Append(string.Format(all_checking["END_CEEE_REPEAT"].sql, enddevice, control_type));
|
||
|
if (dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView.Count > 0)
|
||
|
{
|
||
|
error_code.Append(";").Append(all_checking["END_CEEE_REPEAT"].des); //终点货位重复
|
||
|
}
|
||
|
if (this.enddevice.Length != 8)
|
||
|
{
|
||
|
error_code.Append(";").Append("终点").Append(all_checking["CELL_LENGTH_ERROR"].des); //终点货位编码长度错误
|
||
|
}
|
||
|
|
||
|
sql.Clear();
|
||
|
sql.Append(string.Format(all_checking["CELL_NOT_EXIST"].sql, enddevice));
|
||
|
if (dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView.Count == 0)
|
||
|
{
|
||
|
error_code.Append(";").Append("终点").Append(all_checking["CELL_NOT_EXIST"].des); //终点货位不存在
|
||
|
}
|
||
|
sql.Clear();
|
||
|
sql.Append(string.Format(all_checking["START_GATE_NOT_EXIST"].sql, startdevice));
|
||
|
if (dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView.Count == 0)
|
||
|
{
|
||
|
error_code.Append(";").Append(all_checking["START_GATE_NOT_EXIST"].des); //起点站台不存在
|
||
|
}
|
||
|
}
|
||
|
#region 校验代码需优化20250310
|
||
|
if (control_type == 3) //移库任务
|
||
|
{
|
||
|
if (this.startdevice.Length != 8)
|
||
|
{
|
||
|
error_code.Append(";").Append("起点").Append(all_checking["CELL_LENGTH_ERROR"].des); //终点货位编码长度错误
|
||
|
}
|
||
|
if (this.enddevice.Length != 8)
|
||
|
{
|
||
|
error_code.Append(";").Append("终点").Append(all_checking["CELL_LENGTH_ERROR"].des); //终点货位编码长度错误
|
||
|
}
|
||
|
|
||
|
sql.Clear();
|
||
|
sql.Append(string.Format(all_checking["CELL_NOT_EXIST"].sql, startdevice));
|
||
|
if (dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView.Count == 0)
|
||
|
{
|
||
|
error_code.Append(";").Append("起点").Append(all_checking["CELL_NOT_EXIST"].des); //起点货位不存在
|
||
|
|
||
|
}
|
||
|
sql.Clear();
|
||
|
sql.Append(string.Format(all_checking["CELL_NOT_EXIST"].sql, enddevice));
|
||
|
if (dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView.Count == 0)
|
||
|
{
|
||
|
error_code.Append(";").Append("终点").Append(all_checking["CELL_NOT_EXIST"].des); //终点货位不存在
|
||
|
}
|
||
|
|
||
|
//移库任务如果不同层,校验不要移
|
||
|
if (startdevice.Substring(6, 2) != enddevice.Substring(6, 2))
|
||
|
{
|
||
|
error_code.Append(";").Append("移库任务起点终点层值不同");
|
||
|
}
|
||
|
if (startdevice == enddevice)
|
||
|
{
|
||
|
error_code.Append(";").Append("移库任务起点终点相同");
|
||
|
}
|
||
|
|
||
|
}
|
||
|
#endregion
|
||
|
#endregion
|
||
|
|
||
|
//检查托盘码
|
||
|
|
||
|
if (error_code.Length == 0)
|
||
|
{
|
||
|
return true;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//
|
||
|
public bool Insert_IOCONTROL()
|
||
|
{
|
||
|
if (CheckData() == true)
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
sql.Clear();
|
||
|
sql.Append(string.Format("INSERT INTO IO_CONTROL (CONTROL_ID, RELATIVE_CONTROL_ID, MANAGE_ID, STOCK_BARCODE, CONTROL_TASK_TYPE, CONTROL_TASK_LEVEL," +
|
||
|
" START_WAREHOUSE_CODE, START_DEVICE_CODE, END_WAREHOUSE_CODE, END_DEVICE_CODE, CONTROL_BEGIN_TIME,CONTROL_STATUS,NeedAgv) " +
|
||
|
"VALUES( {0},'{1}','{2}', '{3}', '{4}', '{5}', '{6}', '{7}', '{8}', '{9}', '{10}',{11})",
|
||
|
wms_id, -1, 0, barcode, control_type, tasklevel, warehouse, startdevice, warehouse, enddevice, begintime, 0, needAgv));
|
||
|
dbo.ExceSQL(sql.ToString());
|
||
|
return true;
|
||
|
}
|
||
|
catch (Exception ex)
|
||
|
{
|
||
|
error_code.Append("WCS插入IO_ONTROL表失败!");
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
|
||
|
}
|
||
|
#endregion
|
||
|
|
||
|
}
|