using HH.WMS.BLL; using HH.WMS.BLL.External; using HH.WMS.Common; using HH.WMS.Common.External; using HH.WMS.Common.Response; using HH.WMS.Entitys.Dto; using HH.WMS.Entitys.External; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Web; namespace HH.WMS.WebApi.App_Start { public class WmsApiBLLRoute { #region 入库 public static string InWorkArea(List inWorkAreaEntitys) { var result = string.Empty; var projectCode = getProjectCode(); string jxWebUrl = string.Empty; foreach (var inWorkArea in inWorkAreaEntitys) { inWorkArea.projectCode = projectCode; } switch (projectCode) { case ProjectCodes.JuXingHaiNing: //巨星海宁 //调用巨星接口获取入库库区 var logPara = LogType.LogPara("巨星-入作业区"); DataSet ds = new DataSet(); string clientKey1 = string.Empty; string clientKey2 = string.Empty; //调用巨星接口获取托盘入库库区 try { jxWebUrl = System.Configuration.ConfigurationManager.AppSettings["jxWebUrl"].ToString(); } catch (Exception ep) { ExternalResponse eResponse = new ExternalResponse { success = false, errMsg = "异常:获取webconfig中jxWebUrl配置异常!" + ep.Message }; Log.Detail(logPara, "InWorkArea接口返回结果:" + JsonConvert.SerializeObject(eResponse)); return JsonConvert.SerializeObject(eResponse); } try { clientKey1 = System.Configuration.ConfigurationManager.AppSettings["clientKey1"].ToString(); } catch (Exception ep) { ExternalResponse eResponse = new ExternalResponse { success = false, errMsg = "异常:获取webconfig中clientKey1配置异常!" + ep.Message }; Log.Detail(logPara, "InWorkArea接口返回结果:" + JsonConvert.SerializeObject(eResponse)); return JsonConvert.SerializeObject(eResponse); } try { clientKey2 = System.Configuration.ConfigurationManager.AppSettings["clientKey2"].ToString(); } catch (Exception ep) { ExternalResponse eResponse = new ExternalResponse { success = false, errMsg = "异常:获取webconfig中clientKey2配置异常!" + ep.Message }; Log.Detail(logPara, "InWorkArea接口返回结果:" + JsonConvert.SerializeObject(eResponse)); return JsonConvert.SerializeObject(eResponse); } if (inWorkAreaEntitys[0].needCallJobDetail.Equals("Y")) { #region 需要调巨星接口获取转运任务号 try { WebServiceAgent jxAgent = new WebServiceAgent(jxWebUrl); object[] para = { clientKey1, clientKey2, "AGV", inWorkAreaEntitys[0].trayCode, "", "I", "N", null, null }; Log.Detail(logPara, "调用巨星接口获取托盘入库库区输入参数:" + JsonConvert.SerializeObject(para)); object returnObject = jxAgent.Invoke("GetJobDetail", para); ds = (DataSet)returnObject; Log.Detail(logPara, "调用巨星接口获取托盘入库库区:" + JsonConvert.SerializeObject(ds)); if (ds.Tables[0].Rows.Count == 0) { ExternalResponse eResponse = new ExternalResponse { success = false, errMsg = string.Format("托盘号{0}调用巨星WMS的GetJobDetail未获取到数据!", inWorkAreaEntitys[0].trayCode) }; Log.Detail(logPara, "InWorkArea接口返回结果:" + JsonConvert.SerializeObject(eResponse)); return JsonConvert.SerializeObject(eResponse); } } catch (Exception ex) { ExternalResponse eResponse = new ExternalResponse { success = false, errMsg = string.Format("调用巨星WMS的GetJobDetail接口异常:{0}!", ex.Message) }; Log.Detail(logPara, "InWorkArea接口返回结果:" + JsonConvert.SerializeObject(eResponse)); return JsonConvert.SerializeObject(eResponse); } if (string.IsNullOrEmpty(inWorkAreaEntitys[0].endBit)) { inWorkAreaEntitys[0].endArea = ds.Tables[0].Rows[0]["ToAreaCode"].ToString(); inWorkAreaEntitys[0].remark = ds.Tables[0].Rows[0]["TrnSeqNo"].ToString(); } else { inWorkAreaEntitys[0].remark = ds.Tables[0].Rows[0]["TrnSeqNo"].ToString(); } #endregion } else { inWorkAreaEntitys[0].remark = inWorkAreaEntitys[0].trnSeqNo; } string needCreateAMSTask = string.Empty; try { needCreateAMSTask = System.Configuration.ConfigurationManager.AppSettings["needCreateAMSTask"].ToString(); } catch (Exception ep) { ExternalResponse eResponse = new ExternalResponse { success = false, errMsg = "异常:获取webconfig中needCreateAMSTask配置异常!" + ep.Message }; Log.Detail(logPara, "InWorkArea接口返回结果:" + JsonConvert.SerializeObject(eResponse)); return JsonConvert.SerializeObject(eResponse); } inWorkAreaEntitys[0].needCreateAMSTask = needCreateAMSTask; ExternalResponse resultJX = BLLCreator.Create().InWorkAreaJX(inWorkAreaEntitys); try { if (resultJX.success) { //更新是否传递给巨星任务完成 WebServiceAgent jxAgent = new WebServiceAgent(jxWebUrl); //object[] para1 = { clientKey1, clientKey2, inWorkAreaEntitys[0].remark, inWorkAreaEntitys[0].trayCode, resultJX.okList[0].endBit, "80", "8", "hh" }; object[] para1 = { clientKey1, clientKey2, inWorkAreaEntitys[0].remark, inWorkAreaEntitys[0].trayCode, "", "80", "8", "hh" }; Log.Detail(logPara, "入库调用巨星接口SetAGVJobStatus输入参数:" + JsonConvert.SerializeObject(para1)); object returnObject1 = jxAgent.Invoke("SetAGVJobStatus", para1); Log.Detail(logPara, "returnFromJuxing,SetAGVJobStatus,8:" + returnObject1.ToString()); Log.Detail(logPara, "调用巨星WebService接口反馈托盘搬运货位异动"); object[] para = { clientKey1, clientKey2, inWorkAreaEntitys[0].remark, resultJX.okList[0].trayCode, resultJX.okList[0].startBit, "", "I", "hh" }; object returnObject = jxAgent.Invoke("SetLocation", para); } } catch (Exception ex) { Log.Detail(LogType.LogPara("调用巨星WMS接口反馈状态"), "调用巨星WMS接口SetAGVJobStatus反馈状态异常:" + ex.Message + ex.StackTrace); } result = JsonConvert.SerializeObject(resultJX); break; case ProjectCodes.NanTongSangDe: //南通桑德 result = BLLCreator.Create().InWorkArea(inWorkAreaEntitys); break; case ProjectCodes.QuZhouHuaKai: //衢州华凯 result = BLLCreator.Create().InWorkArea(inWorkAreaEntitys); break; case ProjectCodes.HangChaBanHan: //杭叉板焊 var locationMapStr = JsonHelper.GetValue("locationMapping"); var locationMaps = JsonConvert.DeserializeObject>(locationMapStr); var rowMapStr = JsonHelper.GetValue("rowMapping"); var rowMaps = JsonConvert.DeserializeObject>(rowMapStr); foreach (var inWorkAreaEntity in inWorkAreaEntitys) { foreach (var location in rowMaps) { if (!string.IsNullOrEmpty(inWorkAreaEntity.startBit)) { if (inWorkAreaEntity.startBit.Equals(location.endBit)) { //判断当前叫料工位到空托区的起点是否为2个特殊工位(AGV配料区工位) var locationExt = BLLCreator.Create>().GetSingleEntity(new { CN_S_LOCATION_CODE = location.endBit }); //判断当前起点货位是否已绑定空托盘 if (locationExt.CN_S_USE_STATE.Equals("空")) { var response = new ExternalResponse(); response.success = false; response.errMsg = "货位:" + inWorkAreaEntity.startBit + "当前已无空托盘!"; return JsonConvert.SerializeObject(response); } } } } foreach (var locationMap in locationMaps) { if (!string.IsNullOrEmpty(inWorkAreaEntity.startBit)) { //判断当前叫料工位到空托区的起点是否为8个普通工位(人工配料区工位) if (inWorkAreaEntity.startBit.Equals(locationMap.endBit)) { //判断当前工位对应的起点是否为满,必须要先绑定托盘。 var locationExt = BLLCreator.Create>().GetSingleEntity(new { CN_S_LOCATION_CODE = locationMap.startBit }); if (!locationExt.CN_S_USE_STATE.Equals("满")) { var response = new ExternalResponse(); response.success = false; response.errMsg = "货位:" + inWorkAreaEntity.startBit + ",为空,请先同步货位!"; return JsonConvert.SerializeObject(response); } } } } } result = BLLCreator.Create().InWorkArea(inWorkAreaEntitys); break; case ProjectCodes.TaiZhouLongJi: //泰州隆基 result = BLLCreator.Create().InWorkArea(inWorkAreaEntitys); break; case ProjectCodes.HuanSheng://环晟 result = BLLCreator.Create().InWorkArea(inWorkAreaEntitys); break; case ProjectCodes.LYL: result = BLLCreator.Create().InWorkArea(inWorkAreaEntitys); break; default: result = BLLCreator.Create().InWorkArea(inWorkAreaEntitys); break; } return result; } #endregion #region 出库 public static string OutWorkArea(List outWorkAreaEntitys) { var result = string.Empty; string jxWebUrl = string.Empty; var projectCode = getProjectCode(); foreach (var OutWorkAreaEntity in outWorkAreaEntitys) { OutWorkAreaEntity.projectCode = projectCode; } switch (projectCode) { case ProjectCodes.JuXingHaiNing: //巨星海宁 //调用巨星接口获取入库库区 var logPara = LogType.LogPara("巨星-出作业区"); string clientKey1 = ""; string clientKey2 = ""; try { jxWebUrl = System.Configuration.ConfigurationManager.AppSettings["jxWebUrl"].ToString(); } catch (Exception ep) { ExternalResponse eResponse = new ExternalResponse { success = false, errMsg = "异常:获取webconfig中jxWebUrl配置异常!" + ep.Message }; Log.Detail(logPara, "OutWorkArea接口返回结果:" + JsonConvert.SerializeObject(eResponse)); return JsonConvert.SerializeObject(eResponse); } try { clientKey1 = System.Configuration.ConfigurationManager.AppSettings["clientKey1"].ToString(); } catch (Exception ep) { ExternalResponse eResponse = new ExternalResponse { success = false, errMsg = "异常:获取webconfig中clientKey1配置异常!" + ep.Message }; Log.Detail(logPara, "OutWorkArea接口返回结果:" + JsonConvert.SerializeObject(eResponse)); return JsonConvert.SerializeObject(eResponse); } try { clientKey2 = System.Configuration.ConfigurationManager.AppSettings["clientKey2"].ToString(); } catch (Exception ep) { ExternalResponse eResponse = new ExternalResponse { success = false, errMsg = "异常:获取webconfig中clientKey2配置异常!" + ep.Message }; Log.Detail(logPara, "OutWorkArea接口返回结果:" + JsonConvert.SerializeObject(eResponse)); return JsonConvert.SerializeObject(eResponse); } string needCreateAMSTask = string.Empty; try { needCreateAMSTask = System.Configuration.ConfigurationManager.AppSettings["needCreateAMSTask"].ToString(); } catch (Exception ep) { ExternalResponse eResponse = new ExternalResponse { success = false, errMsg = "异常:获取webconfig中needCreateAMSTask配置异常!" + ep.Message }; Log.Detail(logPara, "OutWorkArea接口返回结果:" + JsonConvert.SerializeObject(eResponse)); return JsonConvert.SerializeObject(eResponse); } outWorkAreaEntitys[0].needCreateAMSTask = needCreateAMSTask; ExternalResponse resultJX = BLLCreator.Create().OutWorkAreaJX(outWorkAreaEntitys); result = JsonConvert.SerializeObject(resultJX); try { if (resultJX.success) { WebServiceAgent jxAgent = new WebServiceAgent(jxWebUrl); object[] para = { clientKey1, clientKey2, outWorkAreaEntitys[0].remark, outWorkAreaEntitys[0].trayCode, "", "80", "8", "hh" }; Log.Detail(logPara, "出库调用巨星接口SetAGVJobStatus输入参数:" + JsonConvert.SerializeObject(para)); object returnObject1 = jxAgent.Invoke("SetAGVJobStatus", para); Log.Detail(logPara, "returnFromJuxing,SetAGVJobStatus,8:" + returnObject1.ToString()); } } catch (Exception ex) { Log.Detail(LogType.LogPara("调用巨星WMS接口反馈状态"), "出库调用巨星WMS接口SetAGVJobStatus:" + ex.Message + ex.StackTrace); } break; case ProjectCodes.NanTongSangDe: //南通桑德 result = BLLCreator.Create().OutWorkArea(outWorkAreaEntitys); break; case ProjectCodes.HangChaBanHan: //杭叉板焊 var locationMapStr = JsonHelper.GetValue("locationMapping"); var locationMaps = JsonConvert.DeserializeObject>(locationMapStr); foreach (var outWorkAreaEntity in outWorkAreaEntitys) { foreach (var locationMap in locationMaps) { if (!string.IsNullOrEmpty(outWorkAreaEntity.startBit)) { if (outWorkAreaEntity.startBit.Equals(locationMap.startBit)) { outWorkAreaEntity.endBit = locationMap.endBit; } } //AMS从工位叫料后,根据匹配关系找到起点,8个工位与起点是一一对应的。 if (!string.IsNullOrEmpty(outWorkAreaEntity.endBit)) { if (outWorkAreaEntity.endBit.Equals(locationMap.endBit)) { outWorkAreaEntity.startBit = locationMap.startBit; } } } } result = BLLCreator.Create().OutWorkArea(outWorkAreaEntitys); break; case ProjectCodes.TaiZhouLongJi: //泰州隆基 result = BLLCreator.Create().OutWorkArea(outWorkAreaEntitys); break; default: result = BLLCreator.Create().OutWorkArea(outWorkAreaEntitys); break; } return result; } #endregion #region 完工回报 public static string ExecuteState(ExecuteStateDto executeState) { var result = string.Empty; switch (getProjectCode()) { case ProjectCodes.WuXiYuShou: //无锡宇寿 result = BLLCreator.Create().ExecuteState(executeState); break; case ProjectCodes.JuXingHaiNing: //巨星海宁 result = BLLCreator.Create().ExecuteState(executeState); break; case ProjectCodes.NanTongSangDe: //南通桑德 result = BLLCreator.Create().ExecuteState(executeState); break; case ProjectCodes.TaiZhouLongJi: //泰州隆基 result = BLLCreator.Create().ExecuteState(executeState); break; case ProjectCodes.QuZhouHuaKai: //衢州华凯 result = BLLCreator.Create().ExecuteState(executeState); break; case ProjectCodes.MaAnShanYueMei: //马鞍山粤美 result = BLLCreator.Create().ExecuteState(executeState); break; case ProjectCodes.HuanSheng: //huansheng result = BLLCreator.Create().ExecuteState(executeState); break; default: result = BLLCreator.Create().ExecuteState(executeState); break; } return result; } public static string ExecuteState(List executeStates) { var result = string.Empty; switch (getProjectCode()) { case ProjectCodes.WuXiYuShou: //无锡宇寿 result = BLLCreator.Create().ExecuteState(executeStates); break; case ProjectCodes.JuXingHaiNing: //巨星海宁 result = BLLCreator.Create().ExecuteState(executeStates); break; case ProjectCodes.NanTongSangDe: //南通桑德 result = BLLCreator.Create().ExecuteState(executeStates); break; case ProjectCodes.TaiZhouLongJi: //泰州隆基 result = BLLCreator.Create().ExecuteState(executeStates); break; case ProjectCodes.QuZhouHuaKai: //衢州华凯 result = BLLCreator.Create().ExecuteState(executeStates); break; case ProjectCodes.MaAnShanYueMei: //马鞍山粤美 result = BLLCreator.Create().ExecuteState(executeStates); break; default: result = BLLCreator.Create().ExecuteState(executeStates); break; } return result; } #endregion #region 绑定与解绑 public static string BindingAndUnBinding(BindingAndUnBindingDto bindEntity) { var result = string.Empty; switch (getProjectCode()) { case ProjectCodes.JuXingHaiNing: //巨星海宁 result = BLLCreator.Create().BindingAndUnBinding(bindEntity); break; default: break; } return result; } #endregion #region 解绑货位 public static BasisResponse UnbindLocation(string locationCode) { var result = BasisResponse.Normal(); var projectCode = getProjectCode(); switch (projectCode) { case ProjectCodes.HangChaBanHan: result = BLLCreator.Create().UnbindLocation(locationCode); break; } return result; } #endregion #region 获取当前项目编号 /// /// 获取当前项目编号 /// /// public static string getProjectCode() { try { return System.Configuration.ConfigurationManager.AppSettings["projectCode"].ToString(); } catch (Exception) { return ""; } } #endregion } }