using HH.WMS.BLL.Basic;
using HH.WMS.BLL.External;
using HH.WMS.BLL.Interface;
using HH.WMS.BLL.MiddleDB;
using HH.WMS.Common;
using HH.WMS.Common.External;
using HH.WMS.Common.Response;
using HH.WMS.DAL.Pda;
using HH.WMS.Entitys;
using HH.WMS.Entitys.Autobom;
using HH.WMS.Entitys.Basic;
using HH.WMS.Entitys.Common;
using HH.WMS.Entitys.Dto;
using HH.WMS.Entitys.Entitys.Mes;
using HH.WMS.Entitys.External;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HH.WMS.BLL.Pda
{
public class GlBLL : DapperBaseBLL
{
#region 根据库区取占用的货位
///
/// 根据库区取占用的货位
///
///
///
public List GetUsedLocationByArea(string areaCode)
{
return CreateDAL().GetUsedLocationByArea(areaCode);
}
#endregion
#region 移库
///
/// 移库
///
///
public void TransferRubber(string transferType)
{
string workFlowName = string.Empty;
switch (transferType)
{
case "transferOfFinalRubber":
workFlowName = WorkFlowName.FlowNameList["Z3"];
break;
case "transferOfRawRubber":
workFlowName = WorkFlowName.FlowNameList["S2"];
break;
}
if (string.IsNullOrEmpty(workFlowName))
TransferRubberThrow(new Exception("未找到移库工作流名称"), workFlowName);
var isEnableAms = new GLTransferDto();
var _isEnableAmsStr = JsonHelper.GetValue("isSendAms");
if (!string.IsNullOrEmpty(_isEnableAmsStr))
{
isEnableAms = JsonConvert.DeserializeObject(_isEnableAmsStr);
isEnableAms = isEnableAms ?? new GLTransferDto();
}
try
{
var mapStr = JsonHelper.GetValue(transferType);
if (string.IsNullOrEmpty(mapStr))
return;
var config = JsonConvert.DeserializeObject(mapStr);
if (IsWorkTime(config))
{
var usedLocations = BLLCreator.Create().GetUsedLocationByArea(config.endArea);
if (usedLocations.Count < config.transferMax)
{
mapStr = JsonHelper.GetValue("workFlowTransType");
if (string.IsNullOrEmpty(mapStr))
return;
var workFlowTransType = JsonConvert.DeserializeObject>(mapStr);
var existsWorkFlow = workFlowTransType.Find(f => f.workFlowName == workFlowName);
if (existsWorkFlow == null)
{
TransferRubberThrow(new Exception("未找到移库方向"), workFlowName);
}
TN_WM_B_MAKE_TASKEntity makeReq = new TN_WM_B_MAKE_TASKEntity()
{
CN_S_START_AREA = config.startArea,
CN_S_END_AREA = config.endArea,
CN_S_ITEM_CODE = config.itemCode,
CN_S_NEED_AMS = Constants.Y,
CN_S_WORKFLOW_NAME = workFlowName,
CN_S_ISTRANSPORT = isEnableAms.moveStockEnableAms,
//CN_F_QUANTITY = 1
};
var externalRes = new ExternalResponse();
if (existsWorkFlow.transType == "In")
{
try
{
var res = BLLCreator.Create().GLInWorkArea(makeReq);
externalRes = JsonConvert.DeserializeObject(res);
}
catch (Exception ex)
{
TransferRubberThrow(ex, workFlowName);
}
}
else
{
try
{
var res = BLLCreator.Create().GLOutWorkArea(makeReq);
externalRes = JsonConvert.DeserializeObject(res);
}
catch (Exception ex)
{
TransferRubberThrow(ex, workFlowName);
}
}
if (!externalRes.success)
{
TransferRubberThrow(new Exception(externalRes.errMsg), workFlowName);
}
else//成功的话写移库记录
{
var ok = externalRes.okList[0];
AGV_Transfer_record _log = new AGV_Transfer_record()
{
ID = Guid.NewGuid().ToString(),
LoadNo = ok.trayCode,
MaterielCode = config.itemCode,
MaterielName = config.itemName,
Quantity = 1,
LocationName_Source = ok.startBit,
LocationName_Dest = ok.endBit,
CreateDate = DateTime.Now,
HasBeenReceived = Constants.Y
};
var _or = BLLCreator.CreateMiddleDapper().Add(_log);
if (!_or.Success)
{
TransferRubberThrow(new Exception("下达成功,写入移库记录失败:" + _or.Msg), workFlowName);
//throw new Exception("下达成功,写入移库记录失败:" + _or.Msg);
//ors.Add(OperateResult.Succeed("下达成功,写入移送任务日志失败:" + _or.Msg, req));
}
var _serviceExec = new TN_WM_SERVICE_EXECEntity()
{
CN_S_TASK_NO = Guid.NewGuid().ToString(),
CN_S_ITEM_CODE = config.itemCode,
CN_S_ITEM_NAME = config.itemName,
CN_S_TASK_TYPE = "移库",
CN_S_TRANS_TYPE = workFlowName,
CN_S_TRAY_CODE = ok.trayCode,
CN_N_PRIORITY = 1,
CN_S_START_LOCATION = ok.startBit,
CN_S_END_LOCATION = ok.endBit,
CN_T_CREATE = DateTime.Now,
CN_C_COMPLETE = Constants.Y,
CN_C_SEND_MES = Constants.Y,
CN_S_MSG = "下达成功"
};
var or = BLLCreator.CreateDapper().Add(_serviceExec);
if (!or.Success)
throw new Exception(or.Msg);
Log.DomainInfo(workFlowName + "移库成功", JsonConvert.SerializeObject(externalRes));
}
}
}
}
catch (Exception ex)
{
Log.DomainInfo(workFlowName + " Error", ex.Message);
}
}
#endregion
#region 移库异常记录
///
/// 移库异常记录
///
///
private void TransferRubberThrow(Exception ex, string workFlowName)
{
var lastServiceExec = BLLCreator.CreateDapper().GetSingleEntity(new
{
CN_S_TASK_TYPE = "移库",
CN_S_TRANS_TYPE = workFlowName,
}, " ORDER BY CN_T_CREATE DESC ");
if (lastServiceExec != null && ex.Message == lastServiceExec.CN_S_MSG)
{
BLLCreator.CreateDapper().Update(new
{
CN_T_CREATE = DateTime.Now
}, new
{
CN_S_TASK_NO = lastServiceExec.CN_S_TASK_NO
});
throw ex;
}
TN_WM_SERVICE_EXECEntity serviceExec = new TN_WM_SERVICE_EXECEntity()
{
CN_S_TASK_NO = Guid.NewGuid().ToString(),
CN_S_TASK_TYPE = "移库",
CN_S_TRANS_TYPE = workFlowName,
CN_T_CREATE = DateTime.Now,
CN_C_COMPLETE = Constants.Y,
CN_C_SEND_MES = Constants.N,
CN_S_MSG = ex.Message
};
var or = BLLCreator.CreateDapper().Add(serviceExec);
if (!or.Success)
throw new Exception(or.Msg);
throw ex;
}
#endregion
#region 移送任务
///
/// 移送任务
///
///
public List ExecTransferTask(List transportReqs)
{
var mapStr = JsonHelper.GetValue("workFlowTransType");
if (string.IsNullOrEmpty(mapStr))
throw new Exception("未找到配置:workFlowTransType");
var isEnableAms = new GLTransferDto();
var _isEnableAmsStr = JsonHelper.GetValue("isSendAms");
if (!string.IsNullOrEmpty(_isEnableAmsStr))
{
isEnableAms = JsonConvert.DeserializeObject(_isEnableAmsStr);
isEnableAms = isEnableAms ?? new GLTransferDto();
}
var workFlowTransType = JsonConvert.DeserializeObject>(mapStr);
List ors = new List();
if (transportReqs.Any())
{
foreach (var req in transportReqs)
{
string startBit = req.StartLocation;
string endBit = req.EndLocation;
string startArea = string.Empty, endArea = string.Empty;
//校验起点
if (!string.IsNullOrEmpty(startBit))
{
var _location = BLLCreator.CreateDapper().GetSingleEntity(new
{
CN_S_LOCATION_CODE = startBit
});
if (_location == null)
{
ors.Add(OperateResult.Error("未找到起始货位:" + startBit, req));
continue;
}
startArea = Util.ToString(_location.CN_S_AREA_CODE).Trim();
}
//校验终点
if (!string.IsNullOrEmpty(endBit))
{
var _location = BLLCreator.CreateDapper().GetSingleEntity(new
{
CN_S_LOCATION_CODE = endBit
});
if (_location == null)
{
ors.Add(OperateResult.Error("未找到终点货位:" + endBit, req));
continue;
}
endArea = Util.ToString(_location.CN_S_AREA_CODE).Trim();
}
if (string.IsNullOrEmpty(startArea) && string.IsNullOrEmpty(endArea))
{
ors.Add(OperateResult.Error("起点终点不可同时为空"));
continue;
}
//找作业路径
//var workRoute = BLLCreator.Create().GetSingleRoute(startArea, endArea);
//if (workRoute == null)
//{
// ors.Add(OperateResult.Error("未找到作业路径", req));
// continue;
//}
var workRoute = new TN_AB_B_WORK_AREA_PROEntity();
var workRoutes = BLLCreator.Create().GetRoute("", startArea, endArea);
if (!workRoutes.Any())
{
ors.Add(OperateResult.Error("未找到作业路径", req));
continue;
}
else
{
workRoute = workRoutes[0];
if (workRoutes.Count > 1)
{
if (workRoutes.Exists(e => Util.ToString(e.CN_S_TYPE_CODE) == "X6" || Util.ToString(e.CN_S_TYPE_CODE) == "X7"))
{
if (string.IsNullOrEmpty(req.MaterielCode))
{
workRoute = workRoutes.Find(f => f.CN_S_TYPE_CODE == "X6");
}
else
{
workRoute = workRoutes.Find(f => f.CN_S_TYPE_CODE == "X7");
}
}
}
if (workRoute == null)
{
ors.Add(OperateResult.Error("未找到作业路径", req));
continue;
}
}
var existsWorkFlow = workFlowTransType.Find(f => f.workFlowCode == workRoute.CN_S_TYPE_CODE);
if (existsWorkFlow == null)
{
ors.Add(OperateResult.Error("未找到作业方向", req));
continue;
}
TN_WM_B_MAKE_TASKEntity makeReq = new TN_WM_B_MAKE_TASKEntity()
{
CN_S_ITEM_CODE = req.MaterielCode,
CN_S_ITEM_NAME = req.MaterielName,
CN_S_START_BIT = req.StartLocation,
CN_S_START_AREA = workRoute.CN_S_START_AREA_CODE,
CN_S_END_BIT = req.EndLocation,
CN_S_END_AREA = workRoute.CN_S_END_AREA_CODE,
CN_S_TRAY_CODE = req.LoadNo,
CN_S_PRIORITY = req.TaskPriority.ToString(),
CN_S_WORKFLOW_NAME = WorkFlowName.FlowNameList[existsWorkFlow.workFlowCode],
CN_F_QUANTITY = req.Quantity,
CN_S_NEED_AMS = isEnableAms.transferEnableAms,
CN_S_ISTRANSPORT = existsWorkFlow.isTransport
};
var externalRes = new ExternalResponse();
if (existsWorkFlow.transType == "In")
{
try
{
var res = BLLCreator.Create().GLInWorkArea(makeReq);
externalRes = JsonConvert.DeserializeObject(res);
}
catch (Exception ex)
{
ors.Add(OperateResult.Error("入作业区失败:" + ex.Message, req));
continue;
}
}
else
{
try
{
var res = BLLCreator.Create().GLOutWorkArea(makeReq);
externalRes = JsonConvert.DeserializeObject(res);
}
catch (Exception ex)
{
ors.Add(OperateResult.Error("出作业区失败:" + ex.Message, req));
continue;
}
}
var _serviceExec = BLLCreator.CreateDapper().GetSingleEntity(new
{
CN_S_TASK_NO = req.TaskNo
});
if (_serviceExec != null)
{
_serviceExec.Update = true;
}
else
{
_serviceExec = new TN_WM_SERVICE_EXECEntity()
{
CN_S_TASK_NO = req.TaskNo,
CN_S_ITEM_CODE = req.MaterielCode,
CN_S_ITEM_NAME = req.MaterielName,
CN_S_TASK_TYPE = "移送",
CN_S_TRANS_TYPE = WorkFlowName.FlowNameList[existsWorkFlow.workFlowCode],
CN_S_TRAY_CODE = req.LoadNo,
CN_N_PRIORITY = req.TaskPriority,
CN_S_START_LOCATION = req.StartLocation,
CN_S_END_LOCATION = req.EndLocation,
CN_T_CREATE = DateTime.Now,
CN_C_COMPLETE = Constants.N,
CN_C_SEND_MES = Constants.N,
CN_F_QUANTITY = req.Quantity,
CN_N_REQUEST_TYPE = req.RequestType,
CN_S_TRAY_TYPE = req.LoadType
};
}
if (!externalRes.success)
{
AGV_Task_execution_record _exec = null;
//写任务执行表,并回报mes
if (externalRes.errCode == "7" || externalRes.errCode == "8")
{
_exec = new AGV_Task_execution_record()
{
TaskNo = req.TaskNo,
LoadNo = req.LoadNo,
RfldInformation = "",
CreateDate = DateTime.Now,
ExecutionTime = null,
CompleteTime = null,
AgvNo = "",
StartLocation = req.StartLocation,
EndLocation = req.EndLocation,
TransportStatus = Convert.ToInt32(externalRes.errCode),
CancellationPossible = Constants.N,
HasBeenReceived = Constants.N
};
_serviceExec.CN_C_COMPLETE = Constants.Y;
_serviceExec.CN_C_SEND_MES = Constants.Y;
_serviceExec.CN_S_MSG = externalRes.errMsg;
}
else
{
_serviceExec.CN_C_COMPLETE = Constants.N;
_serviceExec.CN_C_SEND_MES = Constants.N;
_serviceExec.CN_S_MSG = externalRes.errMsg;
}
var _or = BLLCreator.Create().TransportSuccess(null, req, _exec, _serviceExec);
if (!_or.Success)
{
Log.DomainInfo("TransportSuccess error", _or.Msg);
Log.DomainInfo("externalRes Error: " + externalRes.errMsg, JsonConvert.SerializeObject(req));
ors.Add(OperateResult.Error("TransportSuccess error", _or.Msg));
}
else
{
if (externalRes.errCode == "7" || externalRes.errCode == "8")
{
ors.Add(OperateResult.Warning("已反馈至mes,消息: " + externalRes.errMsg, req));
}
else
{
ors.Add(OperateResult.Error("externalRes Error: " + externalRes.errMsg, req));
}
}
}
else//成功的话写移送任务日志
{
var ok = externalRes.okList[0];
AGV_Transport_Request_log _log = new AGV_Transport_Request_log()
{
TaskId = Guid.NewGuid().ToString(),
TaskNo = req.TaskNo,
RequestType = req.RequestType,
LoadNo = ok.trayCode,
LoadType = req.LoadType,
TaskPriority = req.TaskPriority,
TransportStatus = 1,
StartLocation = ok.startBit,
EndLocation = ok.endBit,
TimeStamp = DateTime.Now,
CreateDate = DateTime.Now,
HasBeenReceived = Constants.N
};
_serviceExec.CN_S_START_LOCATION = ok.startBit;
_serviceExec.CN_S_END_LOCATION = ok.endBit;
_serviceExec.CN_C_COMPLETE = Constants.Y;
_serviceExec.CN_C_SEND_MES = Constants.Y;
_serviceExec.CN_S_MSG = "下达成功";
var _or = BLLCreator.Create().TransportSuccess(_log, req, null, _serviceExec);
//var _or = BLLCreator.CreateMiddleDapper().Add(_log);
if (!_or.Success)
{
ors.Add(OperateResult.Warning("下达成功,更新移送任务日志失败:" + _or.Msg, req));
continue;
}
ors.Add(OperateResult.Succeed("下达成功", req));
}
}
Log.DomainInfo("移送任务 结果", JsonConvert.SerializeObject(ors));
}
return ors;
}
#endregion
#region 判断是否在工作时间
///
/// 判断是否在工作时间
///
///
///
private bool IsWorkTime(GLTransferDto config)
{
try
{
TimeSpan dspWorkingDayAM = config.startTime.TimeOfDay;
TimeSpan dspWorkingDayPM = config.endTime.TimeOfDay;
TimeSpan dspNow = DateTime.Now.TimeOfDay;
if (dspNow >= dspWorkingDayAM && dspNow <= dspWorkingDayPM)
{
return true;
}
return false;
}
catch
{
return false;
}
}
#endregion
///
/// 入作业区
///
///
///
public string GLInWorkArea(TN_WM_B_MAKE_TASKEntity entity)
{
ExternalResponse result = new ExternalResponse();
try
{
Log.Info("处理位置信息开始:", JsonConvert.SerializeObject(entity));
//处理位置信息
CheckPosition(ref entity);
Log.Info("处理位置信息结束:", JsonConvert.SerializeObject(entity));
//传递参数
List inWorkAreaEntitys = new List();
InWorkAreaEntity model = new InWorkAreaEntity();
model.itemCode = entity.CN_S_ITEM_CODE;
model.trayCode = entity.CN_S_TRAY_CODE;
model.priority = Convert.ToInt32(entity.CN_S_PRIORITY);
model.startBit = entity.CN_S_START_BIT;
model.startArea = entity.CN_S_START_AREA;
model.startStock = entity.CN_S_START_STOCK;
model.endBit = entity.CN_S_END_BIT;
model.endArea = entity.CN_S_END_AREA;
model.endStock = entity.CN_S_END_STOCK;
model.remark = entity.CN_S_WORKFLOW_NAME;
model.isBackItem = "";
model.needCreateAMSTask = entity.CN_S_NEED_AMS;
//标记是否是退回物料(生胶、小料、母胶、终炼胶小盘料退回,余料格栅车退回,余料帘布退回)
string workFlowName = entity.CN_S_WORKFLOW_NAME;
if (workFlowName == WorkFlowName.FlowNameList["S5"] || workFlowName == WorkFlowName.FlowNameList["X7"] || workFlowName == WorkFlowName.FlowNameList["M5"] || workFlowName == WorkFlowName.FlowNameList["Z6"] || workFlowName == WorkFlowName.FlowNameList["T5"] || workFlowName == WorkFlowName.FlowNameList["L5"])
{
model.isBackItem = Constants.Y;
}
List keyList = (from q in WorkFlowName.FlowNameList
where q.Value == entity.CN_S_WORKFLOW_NAME
select q.Key).ToList(); //get all keys
var funcName = WorkFlowName.FlowNameList.FirstOrDefault(q => q.Value == entity.CN_S_WORKFLOW_NAME).Key;
if (funcName != "" && funcName != null)
{
model.funCode = funcName;
}
//物料编码不为空时 才组织Data
if (!string.IsNullOrEmpty(entity.CN_S_ITEM_CODE))
{
var item = BLLCreator.Create().GetItem(entity.CN_S_ITEM_CODE);
List DataList = new List();
DataList.Add(new ChaoYangItemDataEntity
{
itemCode = entity.CN_S_ITEM_CODE,
qty = Convert.ToInt32(entity.CN_F_QUANTITY),
itemModel = item == null ? "" : item.CN_S_MODEL,
itemPackUnit = item == null ? "" : item.CN_S_MEASURE_UNIT,
itemName = item == null ? "" : item.CN_S_ITEM_NAME,
itemState = "合格"
});
model.data = DataList;
}
inWorkAreaEntitys.Add(model);
Log.Info("开始进入入库,传参:", JsonConvert.SerializeObject(inWorkAreaEntitys));
result = BLLCreator.Create().InWorkArea(inWorkAreaEntitys);
return JsonConvert.SerializeObject(result);
}
catch (Exception ex)
{
result.errCode = "5";//程序异常
result.errMsg = ex.Message;//程序异常
Log.DomainInfo(entity.CN_S_WORKFLOW_NAME + ": InError", ex.Message);
return JsonConvert.SerializeObject(result);
}
}
///
/// 出作业区
///
///
///
public string GLOutWorkArea(TN_WM_B_MAKE_TASKEntity entity)
{
ExternalResponse result = new ExternalResponse();
try
{
Log.Info("处理位置信息开始:", JsonConvert.SerializeObject(entity));
//处理位置信息
CheckPosition(ref entity);
Log.Info("处理位置信息结束:", JsonConvert.SerializeObject(entity));
//传递参数
List outWorkAreaEntitys = new List();
List DataList = new List();
//物料编码不为空时 才组织Data
if (!string.IsNullOrEmpty(entity.CN_S_ITEM_CODE))
{
DataList.Add(new OutWorkDataEntity
{
ItemCode = entity.CN_S_ITEM_CODE,
TrayCode = entity.CN_S_TRAY_CODE,
UnitQty = Convert.ToInt32(entity.CN_F_QUANTITY)
});
}
string funCode = "";
List keyList = (from q in WorkFlowName.FlowNameList
where q.Value == entity.CN_S_WORKFLOW_NAME
select q.Key).ToList(); //get all keys
var funcName = WorkFlowName.FlowNameList.FirstOrDefault(q => q.Value == entity.CN_S_WORKFLOW_NAME).Key;
if (funcName != "" && funcName != null)
{
funCode = funcName;
}
outWorkAreaEntitys.Add(new OutWorkAreaEntity()
{
itemCode = entity.CN_S_ITEM_CODE,
trayCode = entity.CN_S_TRAY_CODE,
priority = Convert.ToInt32(entity.CN_S_PRIORITY),
startBit = entity.CN_S_START_BIT,
startArea = entity.CN_S_START_AREA,
startStock = entity.CN_S_START_STOCK,
endBit = entity.CN_S_END_BIT,
endArea = entity.CN_S_END_AREA,
endStock = entity.CN_S_END_STOCK,
remark = entity.CN_S_WORKFLOW_NAME,
Data = DataList,
needCreateAMSTask = entity.CN_S_NEED_AMS,
IsTransport = entity.CN_S_ISTRANSPORT,
funCode = string.IsNullOrEmpty(funCode) ? "" : funCode
});
Log.Info("开始进入出库,传参:", JsonConvert.SerializeObject(entity));
result = BLLCreator.Create().OutWorkArea(outWorkAreaEntitys);
return JsonConvert.SerializeObject(result);
}
catch (Exception ex)
{
result.errCode = "5";//程序异常
result.errMsg = ex.Message;//程序异常
Log.DomainInfo(entity.CN_S_WORKFLOW_NAME + ": OutError", ex.Message);
return JsonConvert.SerializeObject(result);
}
}
///
/// 处理位置信息
///
///
private void CheckPosition(ref TN_WM_B_MAKE_TASKEntity entity)
{
//防止传了起始位置,没传起始库区
if (!string.IsNullOrEmpty(entity.CN_S_START_BIT))
{
TN_WM_LOCATION_EXTEntity locationModel = BLL.BLLCreator.Create().GetExtModel(" WHERE CN_S_LOCATION_CODE='" + entity.CN_S_START_BIT + "' ");
if (locationModel != null)
{
entity.CN_S_START_AREA = locationModel.CN_S_AREA_CODE.Trim();
entity.CN_S_START_STOCK = locationModel.CN_S_STOCK_CODE.Trim();
}
}
//防止传了目的位置,没传目的库区
if (!string.IsNullOrEmpty(entity.CN_S_END_BIT))
{
TN_WM_LOCATION_EXTEntity locationModel = BLL.BLLCreator.Create().GetExtModel(" WHERE CN_S_LOCATION_CODE='" + entity.CN_S_END_BIT + "' ");
if (locationModel != null)
{
entity.CN_S_END_AREA = locationModel.CN_S_AREA_CODE.Trim();
entity.CN_S_END_STOCK = locationModel.CN_S_STOCK_CODE.Trim();
}
}
Log.Info("处理位置信息位置一:", JsonConvert.SerializeObject(entity));
if (string.IsNullOrEmpty(entity.CN_S_START_AREA) || string.IsNullOrEmpty(entity.CN_S_END_AREA))
{
//找作业路径
var workRoute = BLLCreator.Create().GetSingleRoute(entity.CN_S_START_AREA, entity.CN_S_END_AREA);
if (workRoute == null)
{
throw new Exception("失败,未找到作业路径!");
}
if (string.IsNullOrEmpty(entity.CN_S_START_AREA))
{
entity.CN_S_START_AREA = workRoute.CN_S_START_AREA_CODE;
}
if (string.IsNullOrEmpty(entity.CN_S_END_AREA))
{
entity.CN_S_END_AREA = workRoute.CN_S_END_AREA_CODE;
}
}
Log.Info("处理位置信息位置二:", JsonConvert.SerializeObject(entity));
var SareaEntity = BLLCreator.Create().GetStockAreaEntity(entity.CN_S_START_AREA.Trim());
if (SareaEntity != null)
entity.CN_S_START_STOCK = SareaEntity.CN_S_STOCK_CODE;
var EareaEntity = BLLCreator.Create().GetStockAreaEntity(entity.CN_S_END_AREA.Trim());
if (EareaEntity != null)
entity.CN_S_END_STOCK = EareaEntity.CN_S_STOCK_CODE;
Log.Info("处理位置信息位置三:", JsonConvert.SerializeObject(entity));
}
#region 服务执行记录日志分页
///
/// 服务执行记录日志分页
///
///
///
public OperateResult GetServiceExecList(SearchModel sm)
{
return CreateDAL().GetServiceExecList(sm);
}
#endregion
public void SelfManageTask()
{
try
{
//取未执行的自管任务
var tasks = BLLCreator.CreateDapper().GetList(new
{
CN_S_TASK_FLAG = Constants.TaskFlag_ZG,
CN_S_STATE = new List() { Constants.TaskState_NoExecuted, Constants.TaskState_CompleteHalf }
});
var connectBitStr = JsonHelper.GetValue("connectBit");
if (string.IsNullOrEmpty(connectBitStr))
throw new Exception("未找到配置:connectBit");
var connectBits = JsonConvert.DeserializeObject>(connectBitStr);
List ors = new List();
foreach (var task in tasks)
{
try
{
//未执行表示第一个任务
if (task.CN_S_STATE == Constants.TaskState_NoExecuted)
{
//立库货位
string lkBit = string.Empty;
//根据任务类型判断立库货位
if (task.CN_S_TASK_TYPE == Constants.Out)
{
lkBit = task.CN_S_START_BIT;
}
else if (task.CN_S_TASK_TYPE == Constants.In)
{
lkBit = task.CN_S_END_BIT;
}
else
{
throw new Exception("自管任务任务类型不正确");
}
var locationBit = BLLCreator.CreateDapper().GetSingleEntity(new
{
CN_S_LOCATION_CODE = lkBit
});
if (locationBit == null)
throw new Exception("未找到立库货位:" + lkBit);
var _bit = connectBits.Find(f => f.tunnel == Util.ToString(locationBit.CN_S_ROADWAY).Trim());
if (_bit == null)
throw new Exception("未找到配置巷道:" + locationBit.CN_S_ROADWAY + "的接驳位");
var connectBit = BLLCreator.CreateDapper().GetSingleEntity(new
{
CN_S_LOCATION_CODE = _bit.bit
});
if (connectBit == null)
throw new Exception("未找到接驳位货位:" + _bit.bit);
if (connectBit.CN_S_LOCATION_STATE != Constants.Location_State_Normal)
throw new Exception("接驳位:" + _bit.bit + "存在未执行完的任务");
//赋值接驳位
task.CN_S_CONNECT_BIT = _bit.bit;
//string postData = "{\"appCode\":\"" + Constants.appCode + "\",\"ruleName\":\"" + Constants.Rule_TransTaskNo + "\",\"orgId\":\"\",\"orgFlag\":\"0\"}";
//string taskNo = WebApiManager.HttpAutoBom_Post("api/BillRule/GenBillNo", postData);
//if (string.IsNullOrEmpty(taskNo))
// throw new Exception("任务号生成失败,请检查在AUTOBOM中是否配置转运任务号生成规则!");
string taskNo = task.CN_S_TASK_NO + "_1";
//创建第一个任务
TN_WM_TASKEntity taskEntity = new TN_WM_TASKEntity()
{
CN_S_TASK_NO = taskNo,
CN_S_TRAY_CODE = task.CN_S_TRAY_CODE,
CN_S_START_BIT = task.CN_S_START_BIT,
CN_S_END_BIT = task.CN_S_CONNECT_BIT,
CN_S_STATE = Constants.TaskState_NoExecuted,
CN_S_BF_TASK_NO = "",
CN_S_AF_TASK_NO = "",
CN_S_STOCK_CODE = task.CN_S_STOCK_CODE,
CN_S_START_AREA = task.CN_S_START_AREA,
CN_S_END_AREA = connectBit.CN_S_AREA_CODE,
CN_N_PRIORITY = 1,
CN_S_CREATOR = "sys",
CN_S_CREATOR_BY = "sys",
CN_T_CREATE = DateTime.Now,
CN_T_MODIFY = DateTime.Now,
CN_S_REMARK = "",
//CN_C_IS_AUTO = transport.CN_C_IS_AUTO,
CN_S_TASK_FLAG = task.CN_S_TASK_TYPE == Constants.Out ? Constants.TaskFlag_LG : Constants.TaskFlag_AGV,
//CN_C_START_IS_CONTROL_QTY = transport.CN_C_START_IS_CONTROL_QTY,
//CN_C_END_IS_CONTROL_QTY = transport.CN_C_END_IS_CONTROL_QTY,
//CN_S_START_CONTROL_INV = transport.CN_S_START_CONTROL_INV,
//CN_S_END_CONTROL_INV = transport.CN_S_END_CONTROL_INV,
//CN_S_START_AREA_TYPE = transport.CN_S_START_AREA_TYPE,
//CN_S_END_AREA_TYPE = transport.CN_S_END_AREA_TYPE,
};
var or = UseTransaction(trans =>
{
//增加子任务
CreateDapperDAL().Add(taskEntity, trans);
//更新接驳位状态
CreateDapperDAL().Update(new
{
CN_S_LOCATION_STATE = Constants.Location_State_OutLock
}, new
{
CN_S_LOCATION_CODE = taskEntity.CN_S_END_BIT
}, trans);
// 更新主任务接驳位 状态置为执行中
CreateDapperDAL().Update(new
{
CN_S_CONNECT_BIT = task.CN_S_CONNECT_BIT,
CN_S_STATE = Constants.TaskState_Executing
}, new
{
CN_S_TASK_NO = task.CN_S_TASK_NO
}, trans);
//立库任务 需要调用wcs接口
if (taskEntity.CN_S_TASK_FLAG == Constants.TaskFlag_LG)
{
//to do...
#region 待测试
//OperateResult re = new OtherSysApi().SendWcsCreateTask(taskEntity, _bit);
//if (!re.Success)
//{
// throw new Exception(re.Msg);
//}
#endregion
}
else//agv任务
{
//OperateResult re = new OtherSysApi().SendAmsCreateTask(taskEntity);
//if (!re.Success)
//{
// throw new Exception(re.Msg);
//}
}
});
if (!or.Success) throw new Exception(or.Msg);
}
else//执行一半的任务,开始创建第二个任务
{
//string postData = "{\"appCode\":\"" + Constants.appCode + "\",\"ruleName\":\"" + Constants.Rule_TransTaskNo + "\",\"orgId\":\"\",\"orgFlag\":\"0\"}";
//string taskNo = WebApiManager.HttpAutoBom_Post("api/BillRule/GenBillNo", postData);
//if (string.IsNullOrEmpty(taskNo))
// throw new Exception("任务号生成失败,请检查在AUTOBOM中是否配置转运任务号生成规则!");
string taskNo = task.CN_S_TASK_NO + "_2";
var connectBit = BLLCreator.CreateDapper().GetSingleEntity(new
{
CN_S_LOCATION_CODE = task.CN_S_CONNECT_BIT
});
var _bit = connectBits.Find(f => f.tunnel == Util.ToString(connectBit.CN_S_ROADWAY).Trim());
if (_bit == null)
throw new Exception("未找到配置巷道:" + connectBit.CN_S_ROADWAY + "的接驳位");
//创建第二个任务
TN_WM_TASKEntity taskEntity = new TN_WM_TASKEntity()
{
CN_S_TASK_NO = taskNo,
CN_S_TRAY_CODE = task.CN_S_TRAY_CODE,
CN_S_START_BIT = task.CN_S_CONNECT_BIT,
CN_S_END_BIT = task.CN_S_END_BIT,
CN_S_STATE = Constants.TaskState_NoExecuted,
CN_S_BF_TASK_NO = "",
CN_S_AF_TASK_NO = "",
CN_S_STOCK_CODE = task.CN_S_STOCK_CODE,
CN_S_START_AREA = connectBit.CN_S_AREA_CODE,
CN_S_END_AREA = task.CN_S_END_AREA,
CN_N_PRIORITY = 1,
CN_S_CREATOR = "sys",
CN_S_CREATOR_BY = "sys",
CN_T_CREATE = DateTime.Now,
CN_T_MODIFY = DateTime.Now,
CN_S_REMARK = "",
//CN_C_IS_AUTO = transport.CN_C_IS_AUTO,
CN_S_TASK_FLAG = task.CN_S_TASK_TYPE == Constants.Out ? Constants.TaskFlag_AGV : Constants.TaskFlag_LG,
//CN_C_START_IS_CONTROL_QTY = transport.CN_C_START_IS_CONTROL_QTY,
//CN_C_END_IS_CONTROL_QTY = transport.CN_C_END_IS_CONTROL_QTY,
//CN_S_START_CONTROL_INV = transport.CN_S_START_CONTROL_INV,
//CN_S_END_CONTROL_INV = transport.CN_S_END_CONTROL_INV,
//CN_S_START_AREA_TYPE = transport.CN_S_START_AREA_TYPE,
//CN_S_END_AREA_TYPE = transport.CN_S_END_AREA_TYPE,
};
var or = UseTransaction(trans =>
{
//增加子任务
CreateDapperDAL().Add(taskEntity, trans);
//更新接驳位状态
CreateDapperDAL().Update(new
{
CN_S_LOCATION_STATE = Constants.Location_State_InLock
}, new
{
CN_S_LOCATION_CODE = taskEntity.CN_S_START_BIT
}, trans);
// 更新主任务接驳位 状态置为执行中
CreateDapperDAL().Update(new
{
CN_S_STATE = Constants.TaskState_Executing
}, new
{
CN_S_TASK_NO = task.CN_S_TASK_NO
}, trans);
//立库任务 需要调用wcs接口
if (taskEntity.CN_S_TASK_FLAG == Constants.TaskFlag_LG)
{
//to do...
#region 待测试
//OperateResult re = new OtherSysApi().SendWcsCreateTask(taskEntity, _bit);
//if (!re.Success)
//{
// throw new Exception(re.Msg);
//}
#endregion
}
else//agv任务
{
//OperateResult re = new OtherSysApi().SendAmsCreateTask(taskEntity);
//if (!re.Success)
//{
// throw new Exception(re.Msg);
//}
}
});
if (!or.Success) throw new Exception(or.Msg);
}
ors.Add(OperateResult.Succeed("生成成功"));
}
catch (Exception ex)
{
ors.Add(OperateResult.Error(ex.Message));
}
}
Log.DomainInfo("SelfManageTask", JsonConvert.SerializeObject(ors));
}
catch (Exception ex)
{
Log.DomainInfo("SelfManageTask Error", ex.Message);
}
}
}
}