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/ 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(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 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//5 public void Put(int id, [FromBody] string value) { } // DELETE api//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 all_checking = new Dictionary(); #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 }