山东时代原料后WCS代码
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

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
}