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<InWorkAreaEntity> 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<WmsApiForJxhnBLL>().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<WmsApiForNtsdBLL>().InWorkArea(inWorkAreaEntitys);
|
break;
|
case ProjectCodes.QuZhouHuaKai: //衢州华凯
|
result = BLLCreator.Create<WmsApiForQzhkBLL>().InWorkArea(inWorkAreaEntitys);
|
break;
|
case ProjectCodes.HangChaBanHan: //杭叉板焊
|
var locationMapStr = JsonHelper.GetValue("locationMapping");
|
var locationMaps = JsonConvert.DeserializeObject<List<LocationMapDto>>(locationMapStr);
|
var rowMapStr = JsonHelper.GetValue("rowMapping");
|
var rowMaps = JsonConvert.DeserializeObject<List<RowMapDto>>(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<DapperBLL<HH.WMS.Entitys.Basic.TN_WM_LOCATION_EXTEntity>>().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<DapperBLL<HH.WMS.Entitys.Basic.TN_WM_LOCATION_EXTEntity>>().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<WmsApiForHcbhBLL>().InWorkArea(inWorkAreaEntitys);
|
break;
|
case ProjectCodes.TaiZhouLongJi: //泰州隆基
|
result = BLLCreator.Create<WmsApiForTzljBLL>().InWorkArea(inWorkAreaEntitys);
|
break;
|
case ProjectCodes.HuanSheng://环晟
|
result = BLLCreator.Create<WmsApiForHsBLL>().InWorkArea(inWorkAreaEntitys);
|
break;
|
case ProjectCodes.LYL:
|
result = BLLCreator.Create<WmsApiForLylBLL>().InWorkArea(inWorkAreaEntitys);
|
break;
|
default:
|
result = BLLCreator.Create<WmsApiBaseBLL>().InWorkArea(inWorkAreaEntitys);
|
break;
|
}
|
return result;
|
}
|
|
#endregion
|
|
#region 出库
|
|
public static string OutWorkArea(List<OutWorkAreaEntity> 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<WmsApiForJxhnBLL>().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<WmsApiForNtsdBLL>().OutWorkArea(outWorkAreaEntitys);
|
break;
|
case ProjectCodes.HangChaBanHan: //杭叉板焊
|
var locationMapStr = JsonHelper.GetValue("locationMapping");
|
var locationMaps = JsonConvert.DeserializeObject<List<LocationMapDto>>(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<WmsApiForHcbhBLL>().OutWorkArea(outWorkAreaEntitys);
|
break;
|
case ProjectCodes.TaiZhouLongJi: //泰州隆基
|
result = BLLCreator.Create<WmsApiForTzljBLL>().OutWorkArea(outWorkAreaEntitys);
|
break;
|
default:
|
result = BLLCreator.Create<WmsApiBaseBLL>().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<WmsApiForWxysBLL>().ExecuteState(executeState);
|
break;
|
case ProjectCodes.JuXingHaiNing: //巨星海宁
|
result = BLLCreator.Create<WmsApiForJxhnBLL>().ExecuteState(executeState);
|
break;
|
case ProjectCodes.NanTongSangDe: //南通桑德
|
result = BLLCreator.Create<WmsApiForNtsdBLL>().ExecuteState(executeState);
|
break;
|
case ProjectCodes.TaiZhouLongJi: //泰州隆基
|
result = BLLCreator.Create<WmsApiForTzljBLL>().ExecuteState(executeState);
|
break;
|
case ProjectCodes.QuZhouHuaKai: //衢州华凯
|
result = BLLCreator.Create<WmsApiForQzhkBLL>().ExecuteState(executeState);
|
break;
|
case ProjectCodes.MaAnShanYueMei: //马鞍山粤美
|
result = BLLCreator.Create<WmsApiForMasymBLL>().ExecuteState(executeState);
|
break;
|
case ProjectCodes.HuanSheng: //huansheng
|
result = BLLCreator.Create<WmsApiForHsBLL>().ExecuteState(executeState);
|
break;
|
default:
|
result = BLLCreator.Create<WmsApiBaseBLL>().ExecuteState(executeState);
|
break;
|
}
|
return result;
|
}
|
|
public static string ExecuteState(List<ExecuteStateDto> executeStates)
|
{
|
var result = string.Empty;
|
switch (getProjectCode())
|
{
|
case ProjectCodes.WuXiYuShou: //无锡宇寿
|
result = BLLCreator.Create<WmsApiForWxysBLL>().ExecuteState(executeStates);
|
break;
|
case ProjectCodes.JuXingHaiNing: //巨星海宁
|
result = BLLCreator.Create<WmsApiForJxhnBLL>().ExecuteState(executeStates);
|
break;
|
case ProjectCodes.NanTongSangDe: //南通桑德
|
result = BLLCreator.Create<WmsApiForNtsdBLL>().ExecuteState(executeStates);
|
break;
|
case ProjectCodes.TaiZhouLongJi: //泰州隆基
|
result = BLLCreator.Create<WmsApiForTzljBLL>().ExecuteState(executeStates);
|
break;
|
case ProjectCodes.QuZhouHuaKai: //衢州华凯
|
result = BLLCreator.Create<WmsApiForQzhkBLL>().ExecuteState(executeStates);
|
break;
|
case ProjectCodes.MaAnShanYueMei: //马鞍山粤美
|
result = BLLCreator.Create<WmsApiForMasymBLL>().ExecuteState(executeStates);
|
break;
|
default:
|
result = BLLCreator.Create<WmsApiBaseBLL>().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<WmsApiForJxhnBLL>().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<WmsApiForHcbhBLL>().UnbindLocation(locationCode);
|
break;
|
}
|
return result;
|
}
|
|
#endregion
|
|
#region 获取当前项目编号
|
|
/// <summary>
|
/// 获取当前项目编号
|
/// </summary>
|
/// <returns></returns>
|
public static string getProjectCode()
|
{
|
try
|
{
|
return System.Configuration.ConfigurationManager.AppSettings["projectCode"].ToString();
|
}
|
catch (Exception)
|
{
|
return "";
|
}
|
}
|
|
#endregion
|
|
}
|
}
|