using Epost.BLL; using Epost.Common; using Epost.Model; using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Linq; using System.Net; using System.Net.Http; using System.Web.Http; using static System.Net.WebRequestMethods; namespace Epost.DPS.Controllers { [RoutePrefix("api/TaskAPI")]//WMS=>WCS public class TaskAPIController : ApiController { InboundOrdersBLL inOrderBLL = new InboundOrdersBLL(); PalletinfoBLL palletBLL = new PalletinfoBLL(); Sys_operate_logBLL logBLL = new Sys_operate_logBLL(); HttpHelper http = new HttpHelper(); AgvHelper agv = new AgvHelper(); string bindCtnrAndBinUrl = ConfigurationManager.AppSettings["bindCtnrAndBinUrl"]; [Route("agvPutTask")]//WMS=>WCS生成任务接口 [HttpPost] public RetMesModel agvPutTask([FromBody] TaskModel model) { RetMesModel retMes = new RetMesModel(); ResponseModel response = new ResponseModel(); ReturnRes res = new ReturnRes(); try { LogHelper.WriteLogInfo("请求报文" + JsonHelper.SerializeObject(model)); if (model.data.header.Any()) { foreach (TaskHeader item in model.data.header) { if (string.IsNullOrEmpty(item.wmsDocNo) || string.IsNullOrEmpty(item.taskType)) { res.returnDesc = "请求参数错误!"; res.returnCode = "0001"; res.returnFlag = "0"; } else { DataTable orderdt = inOrderBLL.GetOrdersList(item.wmsDocNo); if (orderdt != null && orderdt.Rows.Count > 0) { res.returnDesc = "订单已存在!"; res.returnCode = "0001"; res.returnFlag = "0"; } else { #region datatable创建 DataTable dataTable = new DataTable(); dataTable.TableName = "InboundOrders"; dataTable.Columns.Add(new DataColumn("wmsDocNo", typeof(string))); dataTable.Columns.Add(new DataColumn("groupTaskId", typeof(string))); dataTable.Columns.Add(new DataColumn("palletId", typeof(string))); dataTable.Columns.Add(new DataColumn("spositionCode", typeof(string))); dataTable.Columns.Add(new DataColumn("dpositionCode", typeof(string))); dataTable.Columns.Add(new DataColumn("priority", typeof(string))); dataTable.Columns.Add(new DataColumn("taskType", typeof(string))); dataTable.Columns.Add(new DataColumn("userId", typeof(string))); dataTable.Columns.Add(new DataColumn("userName", typeof(string))); dataTable.Columns.Add(new DataColumn("notes", typeof(string))); dataTable.Columns.Add(new DataColumn("warehouseId", typeof(string))); dataTable.Columns.Add(new DataColumn("addtime", typeof(DateTime))); dataTable.Columns.Add(new DataColumn("state", typeof(int))); #endregion if (item.details.Any()) { foreach (TaskDetail detail in item.details) { #region datatable DataRow dataRow = dataTable.NewRow(); dataRow["wmsDocNo"] = item.wmsDocNo; dataRow["groupTaskId"] = detail.groupTaskId; dataRow["palletId"] = detail.palletId; dataRow["spositionCode"] = detail.spositionCode; dataRow["dpositionCode"] = detail.dpositionCode; dataRow["priority"] = item.priority; dataRow["taskType"] = item.taskType; dataRow["userId"] = item.userId; dataRow["userName"] = item.userName; dataRow["notes"] = detail.notes; dataRow["warehouseId"] = item.warehouseId; dataRow["addtime"] = DateTime.Now.ToString(); dataRow["state"] = "0"; dataTable.Rows.Add(dataRow); #endregion } } #region Dictionary Dictionary diclist = new Dictionary(); diclist.Add("wmsDocNo", "wmsDocNo"); diclist.Add("groupTaskId", "groupTaskId"); diclist.Add("palletId", "palletId"); diclist.Add("spositionCode", "spositionCode"); diclist.Add("dpositionCode", "dpositionCode"); diclist.Add("priority", "priority"); diclist.Add("taskType", "taskType"); diclist.Add("userId", "userId"); diclist.Add("userName", "userName"); diclist.Add("notes", "notes"); diclist.Add("warehouseId", "warehouseId"); diclist.Add("addtime", "addtime"); diclist.Add("state", "state"); #endregion bool bo = inOrderBLL.InsertOrder(dataTable, diclist); if (bo) { //添加托盘明细 InsertPallet(item); res.returnCode = "0000"; res.returnDesc = "成功!"; res.returnFlag = "1"; } else { res.returnCode = "0001"; res.returnDesc = "请求失败,请重试!"; res.returnFlag = "0"; } } } } } } catch (Exception ex) { LogHelper.WriteLogInfo("agvPutTask异常:" + ex.ToString(), LogHelper.Log_Type.ERROR); res.returnDesc = "请求接口异常!"; res.returnCode = "0001"; res.returnFlag = "0"; } response.returnnode = res; retMes.Response = response; string resinfo = JsonHelper.SerializeObject(retMes) ; logBLL.InsertLog("生成任务单", "agvPutTask", "/api/TaskAPI/agvPutTask", JsonHelper.SerializeObject(model), resinfo, 0, res.returnDesc, DateTime.Now); return retMes; } #region 添加托盘明细 public bool InsertPallet(TaskHeader item) { try { #region datatable创建 DataTable dataTable2 = new DataTable(); dataTable2.TableName = "Palletinfo"; dataTable2.Columns.Add(new DataColumn("wmsDocNo", typeof(string))); dataTable2.Columns.Add(new DataColumn("groupTaskId", typeof(string))); dataTable2.Columns.Add(new DataColumn("palletId", typeof(string))); dataTable2.Columns.Add(new DataColumn("sku", typeof(string))); dataTable2.Columns.Add(new DataColumn("skuDescr1", typeof(string))); dataTable2.Columns.Add(new DataColumn("qty", typeof(string))); dataTable2.Columns.Add(new DataColumn("taskType", typeof(string))); dataTable2.Columns.Add(new DataColumn("notes", typeof(string))); dataTable2.Columns.Add(new DataColumn("addtime", typeof(DateTime))); #endregion if (item.details2.Any()) { foreach (TaskDetails2 detail in item.details2) { #region datatable DataRow dataRow1 = dataTable2.NewRow(); dataRow1["wmsDocNo"] = item.wmsDocNo; dataRow1["groupTaskId"] = detail.groupTaskId; dataRow1["palletId"] = detail.palletId; dataRow1["sku"] = detail.sku; dataRow1["skuDescr1"] = detail.skuDescr1; dataRow1["qty"] = detail.qty; dataRow1["notes"] = item.notes; dataRow1["taskType"] = item.taskType; dataRow1["addtime"] = DateTime.Now.ToString(); dataTable2.Rows.Add(dataRow1); #endregion } } #region Dictionary Dictionary diclist1 = new Dictionary(); diclist1.Add("wmsDocNo", "wmsDocNo"); diclist1.Add("groupTaskId", "groupTaskId"); diclist1.Add("palletId", "palletId"); diclist1.Add("sku", "sku"); diclist1.Add("skuDescr1", "skuDescr1"); diclist1.Add("qty", "qty"); diclist1.Add("notes", "notes"); diclist1.Add("taskType", "taskType"); diclist1.Add("addtime", "addtime"); #endregion bool bo = palletBLL.InsertPallet(dataTable2, diclist1); LogHelper.WriteLogInfo(item.wmsDocNo + "添加托盘明细:" + bo); return true; } catch (Exception ex) { LogHelper.WriteLogInfo("添加托盘明细异常:" + ex.ToString(), LogHelper.Log_Type.ERROR); return false; } } #endregion [Route("agvCancleTask")]//WMS=>WCS取消任务 [HttpPost] public RetMesModel agvCancleTask([FromBody]AgvCancleModel model) { RetMesModel retMes = new RetMesModel(); ResponseModel response = new ResponseModel(); ReturnRes res = new ReturnRes(); try { LogHelper.WriteLogInfo("agvCancleTask请求报文" + JsonHelper.SerializeObject(model)); if (model.data.header.Any()) { foreach (CancleHeader item in model.data.header) { if (string.IsNullOrEmpty(item.groupTaskId) || string.IsNullOrEmpty(item.palletId)) { res.returnDesc = "请求参数错误!"; res.returnCode = "0001"; res.returnFlag = "0"; } else { DataTable orderdt = inOrderBLL.GetInOrderList(" and groupTaskId='"+item.groupTaskId+ "' and palletId='"+ item.palletId + "' and state=0"); if (orderdt != null && orderdt.Rows.Count > 0) { bool bo= inOrderBLL.UpInOrderList(orderdt.Rows[0]["id"].ToString(), "88", ""); if (bo) { res.returnCode = "0000"; res.returnDesc = "成功!"; res.returnFlag = "1"; } else { res.returnCode = "0001"; res.returnDesc = "取消失败!!"; res.returnFlag = "0"; } } else { res.returnDesc = "订单不存在/订单已执行!"; res.returnCode = "0001"; res.returnFlag = "0"; } } } } } catch (Exception ex) { LogHelper.WriteLogInfo("agvCancleTask异常:" + ex.ToString(), LogHelper.Log_Type.ERROR); res.returnDesc = "请求接口异常!"; res.returnCode = "0001"; res.returnFlag = "0"; } response.returnnode = res; retMes.Response = response; string resinfo = JsonHelper.SerializeObject(retMes) ; logBLL.InsertLog("WMS=>WCS取消任务接口", "agvCancleTask", "/api/TaskAPI/agvCancleTask", JsonHelper.SerializeObject(model), resinfo, 0, res.returnDesc, DateTime.Now); return retMes; } [Route("agvBindPodAndBerth")]//WMS=>WCS绑定解绑 [HttpPost] public RetMesModel agvBindPodAndBerth([FromBody] agvBindPodModel model) { RetMesModel retMes = new RetMesModel(); ResponseModel response = new ResponseModel(); ReturnRes res = new ReturnRes(); try { LogHelper.WriteLogInfo("请求报文" + JsonHelper.SerializeObject(model)); if (model.data.header.Any()) { foreach (agvBindHeader item in model.data.header) { if (string.IsNullOrEmpty(item.indBind) || string.IsNullOrEmpty(item.palletId) || string.IsNullOrEmpty(item.positionCode)) { res.returnDesc = "请求参数错误!"; res.returnCode = "0001"; res.returnFlag = "0"; } else { bindCtnrAndBinReq reqModel = new bindCtnrAndBinReq(); reqModel.reqCode = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString(); reqModel.ctnrTyp = "1";//agv提供 reqModel.indBind = item.indBind; string type = string.Empty; string agvloc = inOrderBLL.GetLocation(" and wmsloc = '" + item.positionCode + "'",out type ); reqModel.stgBinCode = agvloc; if (item.indBind == "1") { reqModel.ctnrCode = agvloc; } string reqstr = JsonHelper.SerializeObject(reqModel); string resultStr = http.HttpPost_Old(bindCtnrAndBinUrl, reqstr); //string resultStr = "{\"code\":\"0\",\"data\":\"\",\"interrupt\":false,\"reqCode\":\"66ee6\"}"; logBLL.InsertLog("WCS->AGV绑定解绑", "bindCtnrAndBin", bindCtnrAndBinUrl, reqstr, resultStr, 0, "", DateTime.Now); if (!string.IsNullOrEmpty(resultStr)) { bindCtnrAndBinResponse resModel = JsonHelper.DeserializeObject(resultStr); if (resModel.code == "0") { res.returnCode = "0000"; res.returnDesc = "绑定/解绑成功!"; res.returnFlag = "1"; } else { res.returnCode = "0000"; res.returnDesc = "绑定/解绑失败!"; res.returnFlag = "1"; } } } } } } catch (Exception ex) { LogHelper.WriteLogInfo("agvBindPodAndBerth异常:" + ex.ToString(), LogHelper.Log_Type.ERROR); res.returnDesc = "请求接口异常!"; res.returnCode = "0001"; res.returnFlag = "0"; } response.returnnode = res; retMes.Response = response; string resinfo = JsonHelper.SerializeObject(retMes); logBLL.InsertLog("WMS=>WCS绑定解绑接口", "agvBindPodAndBerth", "/api/TaskAPI/agvBindPodAndBerth", JsonHelper.SerializeObject(model), resinfo, 0, res.returnDesc, DateTime.Now); return retMes; } } }