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 { 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); } 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); } object[] para1 = { clientKey1, clientKey2, ds.Tables[0].Rows[0]["TrnSeqNo"].ToString(), inWorkAreaEntitys[0].trayCode, "", "80", "8", "hh" }; Log.Detail(logPara, "调用巨星接口SetAGVJobStatus输入参数:" + JsonConvert.SerializeObject(para1)); object returnObject1 = jxAgent.Invoke("SetAGVJobStatus", para); // HH.WMS.JX.JXWMSServices.WebServiceSoapClient jxServices = new JX.JXWMSServices.WebServiceSoapClient(); // jxServices.SetAGVJobStatus("GreatStar", "HNWSRFID", transportTask.CN_S_TRAY_CODE, transportTask.CN_S_END_BIT, "", ""); Log.Detail(logPara, "returnFromJuxing,SetAGVJobStatus,8:" + returnObject1.ToString()); } 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(); } 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) { Log.Detail(logPara, "调用巨星WebService接口反馈托盘搬运货位异动"); //更新是否传递给巨星任务完成 WebServiceAgent jxAgent = new WebServiceAgent(jxWebUrl); 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接口反馈托盘搬运货位异动:" + ex.Message + ex.StackTrace); } result = JsonConvert.SerializeObject(resultJX); break; case ProjectCodes.NanTongSangDe: //南通桑德 ExternalResponse result1 = BLLCreator.Create().InWorkArea(inWorkAreaEntitys); result = JsonConvert.SerializeObject(result1); break; case ProjectCodes.QuZhouHuaKai: //衢州华凯 ExternalResponse result2 = BLLCreator.Create().InWorkArea(inWorkAreaEntitys); result = JsonConvert.SerializeObject(result2); 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); } } } } } ExternalResponse result4 = BLLCreator.Create().InWorkArea(inWorkAreaEntitys); result = JsonConvert.SerializeObject(result4); break; case ProjectCodes.TaiZhouLongJi: //泰州隆基 ExternalResponse result5 = BLLCreator.Create().InWorkArea(inWorkAreaEntitys); result = JsonConvert.SerializeObject(result5); break; default: ExternalResponse result6 = BLLCreator.Create().InWorkArea(inWorkAreaEntitys); result = JsonConvert.SerializeObject(result6); break; } return result; } #endregion #region 出库 public static string OutWorkArea(List outWorkAreaEntitys) { var result = string.Empty; var projectCode = getProjectCode(); foreach (var OutWorkAreaEntity in outWorkAreaEntitys) { OutWorkAreaEntity.projectCode = projectCode; } switch (projectCode) { case ProjectCodes.JuXingHaiNing: //巨星海宁 //调用巨星接口获取入库库区 var logPara = LogType.LogPara("巨星-出作业区"); //if (string.IsNullOrEmpty(outWorkAreaEntitys[0].endBit)) //{ // //调用巨星接口获取托盘入库库区 // JXWebService.WebServiceSoapClient jxService = new JXWebService.WebServiceSoapClient(); // DataSet ds = jxService.GetJobDetail("GreatStar", "HNWSRFID", "A", outWorkAreaEntitys[0].trayCode, "", "I", "N", null, null); // Log.Detail(logPara, "出库调用巨星接口获取托盘入库库区:" + JsonConvert.SerializeObject(ds)); // outWorkAreaEntitys[0].endArea = ds.Tables[0].Rows[0]["ToAreaCode"].ToString(); // if (string.IsNullOrEmpty(outWorkAreaEntitys[0].endArea)) // { // ExternalResponse eResponse = new ExternalResponse { success = false, errMsg = string.Format("托盘号{0}调用巨星WMS的GetAGVJobDetail未获取到目的库区!", outWorkAreaEntitys[0].trayCode) }; // 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 result7 = BLLCreator.Create().OutWorkArea(outWorkAreaEntitys); result = JsonConvert.SerializeObject(result7); break; case ProjectCodes.NanTongSangDe: //南通桑德 ExternalResponse result8 = BLLCreator.Create().OutWorkArea(outWorkAreaEntitys); result = JsonConvert.SerializeObject(result8); 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; } } } } ExternalResponse result9 = BLLCreator.Create().OutWorkArea(outWorkAreaEntitys); result = JsonConvert.SerializeObject(result9); break; case ProjectCodes.TaiZhouLongJi: //泰州隆基 ExternalResponse result10 = BLLCreator.Create().OutWorkArea(outWorkAreaEntitys); result = JsonConvert.SerializeObject(result10); break; default: ExternalResponse result11 = BLLCreator.Create().OutWorkArea(outWorkAreaEntitys); result = JsonConvert.SerializeObject(result11); 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; 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; 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 } }