using HH.WMS.BLL.Algorithm;
|
using HH.WMS.BLL.Basic;
|
using HH.WMS.BLL.InStock;
|
using HH.WMS.BLL.Interface;
|
using HH.WMS.BLL.SysMgr;
|
using HH.WMS.Common;
|
using HH.WMS.Common.Algorithm;
|
using HH.WMS.Common.External;
|
using HH.WMS.Common.Response;
|
using HH.WMS.DAL;
|
using HH.WMS.DAL.Algorithm;
|
using HH.WMS.DAL.Basic;
|
using HH.WMS.DAL.InStock;
|
using HH.WMS.DAL.MoveStock;
|
using HH.WMS.DAL.SysMgr;
|
using HH.WMS.Entitys;
|
using HH.WMS.Entitys.Algorithm;
|
using HH.WMS.Entitys.Basic;
|
using HH.WMS.Entitys.Common;
|
using HH.WMS.Entitys.Dto;
|
using HH.WMS.Entitys.Entitys;
|
using HH.WMS.Entitys.External;
|
using Newtonsoft.Json;
|
using System;
|
using System.Collections.Generic;
|
using System.Data;
|
using System.Globalization;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
|
namespace HH.WMS.BLL.External
|
{
|
public class WmsApiBaseBLLLJ : DapperBaseBLL
|
{
|
#region 入库
|
|
public virtual string InWorkArea(List<InWorkAreaEntity> inWorkAreaEntitys)
|
{
|
var logPara = LogType.LogPara("入作业区");
|
Log.Detail(logPara, "InWorkArea接口请求参数:" + JsonConvert.SerializeObject(inWorkAreaEntitys));
|
var result = JsonConvert.SerializeObject(InWorkArea(inWorkAreaEntitys, logPara));
|
Log.Detail(logPara, "InWorkArea接口返回结果:" + result);
|
return result;
|
}
|
|
public virtual ExternalResponse InWorkArea(List<InWorkAreaEntity> inWorkAreaEntitys, LogPara logPara)
|
{
|
var response = new ExternalResponse();
|
if (inWorkAreaEntitys == null) return new ExternalResponse { success = false, errMsg = "参数不正确" };
|
|
for (var i = 0; i < inWorkAreaEntitys.Count; i++)
|
{
|
var result = InWorkArea(inWorkAreaEntitys[i], logPara);
|
if (result.BasisResponse.Success)
|
{
|
response.success = true;
|
response.okList.Add(result.TaskExecuteState.okTask);
|
//发送到AMS
|
|
}
|
else
|
{
|
response.failList.Add(result.TaskExecuteState.Error(i, result.BasisResponse.Message).FailTask);
|
//入库转运锁定起点的,如果执行不成功则解锁
|
if (result.RollbackLocations.Count > 0)
|
{
|
foreach (string sLocation in result.RollbackLocations)
|
{
|
BLLCreator.Create<TN_WM_LOCATION_EXTBLL>().UpdateState(sLocation, Constants.Location_State_Normal, "");
|
AutoBomLocationEntity locationModel = CreateDAL<TN_WMS_LOCATIONDAL>().GetModel(sLocation);
|
BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(sLocation, "", "正常", "出库请求失败回滚过程中锁定的货位", inWorkAreaEntitys[i].sysName, "", "", locationModel.CN_S_STOCK_CODE, locationModel.CN_S_AREA_CODE, null);
|
}
|
}
|
}
|
}
|
|
var curResult = (response.failList.Any() ? response.Error(null, string.Empty, inWorkAreaEntitys) : response.Ok(null, inWorkAreaEntitys));
|
return curResult;
|
}
|
|
public virtual ExecuteInWorkAreaPara InWorkArea(InWorkAreaEntity inWorkAreaEntity, LogPara logPara)
|
{
|
if (string.IsNullOrEmpty(inWorkAreaEntity.sysName)) inWorkAreaEntity.sysName = "AMS";
|
var executeInWorkAreaPara = new ExecuteInWorkAreaPara { InWorkAreaEntity = inWorkAreaEntity };
|
try
|
{
|
if (!InWorkAreaVerifyPara(ref executeInWorkAreaPara, logPara).BasisResponse.Success) return executeInWorkAreaPara;
|
if (!InWorkAreaHandlePara(ref executeInWorkAreaPara, logPara).BasisResponse.Success) return executeInWorkAreaPara;
|
if (string.IsNullOrEmpty(inWorkAreaEntity.endBit))
|
{
|
if (!InWorkAreaCalculatePath(ref executeInWorkAreaPara, logPara).BasisResponse.Success) return executeInWorkAreaPara;
|
if (!InWorkAreaInAss(ref executeInWorkAreaPara, logPara).BasisResponse.Success) return executeInWorkAreaPara;
|
}
|
InWorkAreaCreateTask(ref executeInWorkAreaPara, logPara);
|
executeInWorkAreaPara = InWorkAreaProcedure(executeInWorkAreaPara, logPara);
|
}
|
catch (Exception ex)
|
{
|
executeInWorkAreaPara.BasisResponse = BasisResponse.Error("ExecuteInWorkArea 方法异常:" + JsonConvert.SerializeObject(ex.Message + ex.StackTrace));
|
}
|
|
return executeInWorkAreaPara;
|
}
|
|
public virtual ExecuteInWorkAreaPara InWorkAreaVerifyPara(ref ExecuteInWorkAreaPara executeInWorkAreaPara, LogPara logPara)
|
{
|
if (executeInWorkAreaPara.InWorkAreaEntity.isTransport == null) executeInWorkAreaPara.InWorkAreaEntity.isTransport = "N";
|
|
//if (executeInWorkAreaPara.InWorkAreaEntity.trayWeight != null)
|
if (executeInWorkAreaPara.InWorkAreaEntity.trayWeight > 0)
|
executeInWorkAreaPara.InWorkAreaEntity.taskType = "原料入库";
|
|
//物料编码_对象不为空时,必须存在物料编码
|
if (executeInWorkAreaPara.InWorkAreaEntity.data != null)
|
if (executeInWorkAreaPara.InWorkAreaEntity.data.Any(entity => string.IsNullOrEmpty(entity.itemCode)))
|
{
|
executeInWorkAreaPara.BasisResponse = BasisResponse.Error("物料编码为空" + JsonConvert.SerializeObject(executeInWorkAreaPara.InWorkAreaEntity.data));
|
return executeInWorkAreaPara;
|
}
|
|
//任务号_当任务号不为空时,系统判断任务号是否重复
|
if (!string.IsNullOrEmpty(executeInWorkAreaPara.InWorkAreaEntity.taskNo))
|
{
|
if (DALCreator.Create<TN_WM_TASKDAL>().GetTaskByTaskNo(executeInWorkAreaPara.InWorkAreaEntity.taskNo).Count > 0)
|
{
|
executeInWorkAreaPara.BasisResponse = BasisResponse.Error("任务号" + executeInWorkAreaPara.InWorkAreaEntity.taskNo + "重复!");
|
return executeInWorkAreaPara;
|
}
|
}
|
|
//起始库区
|
if (string.IsNullOrEmpty(executeInWorkAreaPara.InWorkAreaEntity.startBit))
|
{
|
executeInWorkAreaPara.BasisResponse = BasisResponse.Error("参数中缺少起始位置!" + executeInWorkAreaPara.InWorkAreaEntity.startBit);
|
return executeInWorkAreaPara;
|
}
|
else
|
{
|
//缓存起始库区实体
|
executeInWorkAreaPara.StartStockAreaEntity = DALCreator.Create<TN_AB_STOCK_LOCATIONDAL>().GetAreaModelByLocation(executeInWorkAreaPara.InWorkAreaEntity.startBit.Trim());
|
if (executeInWorkAreaPara.StartStockAreaEntity == null)
|
{
|
executeInWorkAreaPara.BasisResponse = BasisResponse.Error("当前起始位置未找到对应的库区!" + executeInWorkAreaPara.InWorkAreaEntity.startBit);
|
return executeInWorkAreaPara;
|
}
|
|
// 检查货位状态 是转运且管控数量时使用
|
if (executeInWorkAreaPara.StartStockAreaEntity.CN_C_IS_CONTROL_QTY.Equals("Y") && executeInWorkAreaPara.InWorkAreaEntity.isTransport.Equals("Y"))
|
{
|
executeInWorkAreaPara.StartLocationExt = BLLCreator.Create<TN_WM_LOCATION_EXTBLL>().GetModel(" where CN_S_LOCATION_CODE = '" + executeInWorkAreaPara.InWorkAreaEntity.startBit.Trim() + "'").FirstOrDefault();
|
if (!executeInWorkAreaPara.StartLocationExt.CN_S_LOCATION_STATE.Equals("正常"))
|
{
|
executeInWorkAreaPara.BasisResponse = BasisResponse.Error("当前起始货位状态为" + executeInWorkAreaPara.StartLocationExt.CN_S_LOCATION_STATE + ",货位不可用!");
|
return executeInWorkAreaPara;
|
}
|
if (!executeInWorkAreaPara.StartLocationExt.CN_S_USE_STATE.Equals("满"))
|
{
|
executeInWorkAreaPara.BasisResponse = BasisResponse.Error("当前起始货位存储状态为" + executeInWorkAreaPara.StartLocationExt.CN_S_USE_STATE + ",货位不可用!");
|
return executeInWorkAreaPara;
|
}
|
|
//锁定起点货位
|
OperateResult lockResult = BLLCreator.Create<HH.WMS.BLL.Basic.TN_WM_LOCATION_EXTBLL>().UpdateState(executeInWorkAreaPara.InWorkAreaEntity.startBit, "预出库锁定", "正常");
|
if (lockResult.Success && lockResult.AffectedRows > 0)
|
{
|
AutoBomLocationEntity locationModel = DALCreator.Create<TN_WMS_LOCATIONDAL>().GetModel(executeInWorkAreaPara.InWorkAreaEntity.startBit);
|
//添加货位状态变化
|
BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(executeInWorkAreaPara.InWorkAreaEntity.startBit, "正常", "预出库锁定", "入库并且转运需要锁定起点货位防止其他资源竞争", executeInWorkAreaPara.InWorkAreaEntity.sysName, "", "", locationModel.CN_S_STOCK_CODE, locationModel.CN_S_AREA_CODE, null);
|
executeInWorkAreaPara.RollbackLocations.Add(executeInWorkAreaPara.InWorkAreaEntity.startBit);
|
}
|
else
|
{
|
if (!lockResult.Success)
|
{
|
executeInWorkAreaPara.BasisResponse = BasisResponse.Error("锁定起点货位" + executeInWorkAreaPara.InWorkAreaEntity.startBit + "失败!详细原因为:" + lockResult.Msg);
|
}
|
else
|
{
|
executeInWorkAreaPara.BasisResponse = BasisResponse.Error("锁定起点货位" + executeInWorkAreaPara.InWorkAreaEntity.startBit + "失败!详细原因为:SqlExecuteResult影响行数为0");
|
}
|
return executeInWorkAreaPara;
|
}
|
}
|
//检查起点货位是否为报废状态
|
executeInWorkAreaPara.InWorkAreaEntity.startArea = executeInWorkAreaPara.StartStockAreaEntity.CN_S_AREA_CODE;
|
executeInWorkAreaPara.InWorkAreaEntity.startStock = executeInWorkAreaPara.StartStockAreaEntity.CN_S_STOCK_CODE;
|
}
|
return executeInWorkAreaPara;
|
}
|
|
public virtual ExecuteInWorkAreaPara InWorkAreaHandlePara(ref ExecuteInWorkAreaPara executeInWorkAreaPara, LogPara logPara)
|
{
|
//任务号 考虑是否重复?
|
if (string.IsNullOrEmpty(executeInWorkAreaPara.InWorkAreaEntity.taskNo))
|
{
|
var postData = "{\"appCode\":\"" + Constants.appCode + "\",\"ruleName\":\"" + Constants.Rule_InTaskNo + "\",\"orgId\":\"0\",\"orgFlag\":\"\"}";
|
executeInWorkAreaPara.InWorkAreaEntity.taskNo = WebApiManager.HttpAutoBom_Post("api/BillRule/GenBillNo", postData); ;
|
if (string.IsNullOrEmpty(executeInWorkAreaPara.InWorkAreaEntity.taskNo))
|
{
|
executeInWorkAreaPara.BasisResponse = BasisResponse.Error("获取AUTOBOM入库任务号异常,请检查是否维护生成规则!");
|
return executeInWorkAreaPara;
|
}
|
}
|
|
//托盘码
|
if (string.IsNullOrEmpty(executeInWorkAreaPara.InWorkAreaEntity.trayCode))
|
{
|
//转运并且不传托盘号,默认从货位中获取
|
if (executeInWorkAreaPara.InWorkAreaEntity.isTransport == "Y")
|
{
|
//查找托盘号和物料编码 and by liuying
|
var lstObj = BLLCreator.Create<TN_WM_B_TRAY_LOCATIONBLL>().GetListByLocationCode(executeInWorkAreaPara.InWorkAreaEntity.startBit);
|
|
if (lstObj.Count > 0)
|
{
|
//去除已经在任务中的托盘
|
var strTray = string.Join("','", lstObj.Select(o => o.CN_S_TRAY_CODE).ToList());
|
var lstTasks = BLLCreator.Create<TN_WM_TASKBLL>().GetTask(" AND CN_S_TRAY_CODE in ('" + strTray + "') AND (CN_S_STATE = '未执行' or CN_S_STATE = '执行中')");
|
var lstInTaskTray = lstTasks.Select(o => o.CN_S_TRAY_CODE).ToList();
|
lstObj.RemoveAll(o => lstInTaskTray.Contains(o.CN_S_TRAY_CODE));
|
|
if (lstObj.Count > 0)
|
{
|
executeInWorkAreaPara.InWorkAreaEntity.trayCode = lstObj[0].CN_S_TRAY_CODE;
|
var itemEntity = new ChaoYangItemDataEntity();
|
executeInWorkAreaPara.InWorkAreaEntity.data = new List<ChaoYangItemDataEntity>();
|
|
//根据托盘号查询托盘产品关联信息主表
|
var trayItemMst = BLLCreator.Create<TN_WM_B_TRAY_ITEM_RELBLL>().GetTrayItemMst(" AND CN_S_TRAY_CODE ='" + lstObj[0].CN_S_TRAY_CODE + "'");
|
if (trayItemMst.Count > 0)
|
{
|
//查询托盘产品关联信息子表
|
var trayItemDtl = BLLCreator.Create<TN_WM_B_TRAY_ITEM_RELBLL>().GetTrayItemDtl(" AND CN_PARENT_GUID='" + trayItemMst[0].CN_GUID + "'");
|
itemEntity.itemCode = trayItemMst[0].CN_S_ITEM_CODE;
|
itemEntity.itemName = trayItemMst[0].CN_S_ITEM_NAME;
|
itemEntity.itemPackUnit = trayItemDtl[0].CN_S_PACKING_UNIT;
|
itemEntity.qty = (decimal)(trayItemMst[0].CN_F_QUANTITY == null ? 0 : trayItemMst[0].CN_F_QUANTITY);
|
itemEntity.lotNo = trayItemDtl[0].CN_S_PRODUCTION_BATCH;
|
itemEntity.itemState = trayItemMst[0].CN_S_ITEM_STATE;
|
itemEntity.productionDate = trayItemDtl[0].CN_T_PRODUCTION;
|
itemEntity.uniqueCode = trayItemDtl[0].CN_S_UNIQUE_CODE;
|
//itemEntity.itemWeight = trayItemDtl[0].CN_S_SERIAL_NO;
|
itemEntity.itemModel = trayItemMst[0].CN_S_MODEL;
|
executeInWorkAreaPara.InWorkAreaEntity.data.Add(itemEntity);
|
}
|
}
|
else
|
{
|
executeInWorkAreaPara.BasisResponse = BasisResponse.Error("该货位" + executeInWorkAreaPara.InWorkAreaEntity.startBit + "中的托盘都已在任务中,不允许重复下达");
|
}
|
}
|
else
|
{
|
executeInWorkAreaPara.BasisResponse = BasisResponse.Error("起点货位" + executeInWorkAreaPara.InWorkAreaEntity.startBit + "没有绑定托盘");
|
return executeInWorkAreaPara;
|
}
|
}
|
else
|
{
|
var trayLocation = BLLCreator.Create<TN_WM_B_TRAY_LOCATIONBLL>().GetByLocationCode(executeInWorkAreaPara.InWorkAreaEntity.startBit);
|
if (trayLocation == null)
|
{
|
//生成虚拟托盘
|
var postData = "{\"appCode\":\"" + Constants.appCode + "\",\"ruleName\":\"" + Constants.VirtualTray + "\",\"orgId\":\"0\",\"orgFlag\":\"\"}";
|
executeInWorkAreaPara.InWorkAreaEntity.trayCode = WebApiManager.HttpAutoBom_Post("api/BillRule/GenBillNo", postData);
|
//executeInWorkAreaPara.BasisResponse = BasisResponse.Error("起点货位" + executeInWorkAreaPara.InWorkAreaEntity.startBit + "没有绑定托盘");
|
//return executeInWorkAreaPara;
|
|
}
|
else
|
{
|
executeInWorkAreaPara.InWorkAreaEntity.trayCode = trayLocation.CN_S_TRAY_CODE;
|
// if (executeInWorkAreaPara.InWorkAreaEntity.projectCode == "nt001")
|
//if (executeInWorkAreaPara.TrayInfo == null)
|
//{
|
// {
|
// executeInWorkAreaPara.BasisResponse = BasisResponse.Error("托盘信息表无当前托盘" + trayLocation.CN_S_TRAY_CODE);
|
// return executeInWorkAreaPara;
|
// }
|
//}
|
}
|
}
|
}
|
|
//处理物料编码
|
if (executeInWorkAreaPara.InWorkAreaEntity.data != null)
|
{
|
foreach (var itemData in executeInWorkAreaPara.InWorkAreaEntity.data)
|
{
|
var item = BLLCreator.Create<HH.WMS.BLL.Basic.TN_WMS_ITEMBLL>().GetItem(itemData.itemCode);
|
//BLLCreator.Create<DapperBLL<AutoBomItemEntity>>().GetSingleEntity(new { CN_S_ITEM_CODE = itemData.itemCode });
|
if (item != null)
|
{
|
itemData.itemPackUnit = item.CN_S_PACK_UNIT;
|
itemData.itemName = item.CN_S_ITEM_NAME;
|
}
|
else
|
{
|
executeInWorkAreaPara.BasisResponse = BasisResponse.Error("物料" + itemData.itemCode + "在AutoBom中没有维护");
|
return executeInWorkAreaPara;
|
}
|
}
|
}
|
|
if (!string.IsNullOrEmpty(executeInWorkAreaPara.InWorkAreaEntity.endBit))
|
{
|
executeInWorkAreaPara.EndLocationEntity = DALCreator.Create<TN_WMS_LOCATIONDAL>().GetModel(executeInWorkAreaPara.InWorkAreaEntity.endBit);
|
if (executeInWorkAreaPara.EndLocationEntity != null)
|
{
|
executeInWorkAreaPara.EndStockAreaEntity = DALCreator.Create<TN_AB_B_STOCK_AREADAL>().GetStockAreaEntity(executeInWorkAreaPara.EndLocationEntity.CN_S_AREA_CODE);
|
if (executeInWorkAreaPara.EndStockAreaEntity == null)
|
{
|
executeInWorkAreaPara.BasisResponse = BasisResponse.Error("结束位置:" + executeInWorkAreaPara.InWorkAreaEntity.endBit + ",库区:" + executeInWorkAreaPara.EndLocationEntity.CN_S_AREA_CODE + "未找到库区信息!");
|
return executeInWorkAreaPara;
|
}
|
}
|
else
|
{
|
executeInWorkAreaPara.BasisResponse = BasisResponse.Error("结束位置:" + executeInWorkAreaPara.InWorkAreaEntity.endBit + "未找到货位信息!");
|
return executeInWorkAreaPara;
|
}
|
// 检查货位状态 管控数量时使用
|
if (executeInWorkAreaPara.EndStockAreaEntity.CN_C_IS_CONTROL_QTY.Equals("Y"))
|
{
|
executeInWorkAreaPara.EndLocationExt = BLLCreator.Create<TN_WM_LOCATION_EXTBLL>().GetModel(" where CN_S_LOCATION_CODE = '" + executeInWorkAreaPara.InWorkAreaEntity.endBit.Trim() + "'").FirstOrDefault();
|
|
//if (executeInWorkAreaPara.InWorkAreaEntity.isControlEndBit.Equals("true"))
|
//{
|
if (!executeInWorkAreaPara.EndLocationExt.CN_S_LOCATION_STATE.Equals("正常"))
|
{
|
executeInWorkAreaPara.BasisResponse = BasisResponse.Error("当前终点货位状态为" + executeInWorkAreaPara.EndLocationExt.CN_S_LOCATION_STATE + ",货位不可用!");
|
return executeInWorkAreaPara;
|
}
|
if (!executeInWorkAreaPara.EndLocationExt.CN_S_USE_STATE.Equals("空"))
|
{
|
executeInWorkAreaPara.BasisResponse = BasisResponse.Error("当前终点货位存储状态为" + executeInWorkAreaPara.EndLocationExt.CN_S_USE_STATE + ",货位不可用!");
|
return executeInWorkAreaPara;
|
}
|
//}
|
|
//锁定终点货位
|
OperateResult lockResult = BLLCreator.Create<HH.WMS.BLL.Basic.TN_WM_LOCATION_EXTBLL>().UpdateState(executeInWorkAreaPara.InWorkAreaEntity.endBit, "预入库锁定", "正常");
|
if (lockResult.Success && lockResult.AffectedRows > 0)
|
{
|
AutoBomLocationEntity locationModel = DALCreator.Create<TN_WMS_LOCATIONDAL>().GetModel(executeInWorkAreaPara.InWorkAreaEntity.endBit);
|
//添加货位状态变化
|
BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(executeInWorkAreaPara.InWorkAreaEntity.endBit, "正常", "预入库锁定", "入库并且转运需要锁定终点货位防止其他资源竞争", executeInWorkAreaPara.InWorkAreaEntity.sysName, "", "", locationModel.CN_S_STOCK_CODE, locationModel.CN_S_AREA_CODE, null);
|
executeInWorkAreaPara.RollbackLocations.Add(executeInWorkAreaPara.InWorkAreaEntity.endBit);
|
}
|
else
|
{
|
if (!lockResult.Success)
|
{
|
executeInWorkAreaPara.BasisResponse = BasisResponse.Error("锁定终点货位" + executeInWorkAreaPara.InWorkAreaEntity.endBit + "失败!详细原因为:" + lockResult.Msg);
|
}
|
else
|
{
|
executeInWorkAreaPara.BasisResponse = BasisResponse.Error("锁定终点货位" + executeInWorkAreaPara.InWorkAreaEntity.endBit + "失败!详细原因为:SqlExecuteResult影响行数为0");
|
}
|
return executeInWorkAreaPara;
|
}
|
}
|
}
|
return executeInWorkAreaPara;
|
}
|
|
public virtual ExecuteInWorkAreaPara InWorkAreaCalculatePath(ref ExecuteInWorkAreaPara executeInWorkAreaPara, LogPara logPara)
|
{
|
//获取作业区列表
|
var workAreaProList = BLLCreator.Create<TaskTransferBLL>().GetInWorkPosition(executeInWorkAreaPara);
|
if (workAreaProList.Any())
|
{
|
executeInWorkAreaPara.WorkAreaProEntitys = workAreaProList;
|
}
|
else
|
{
|
executeInWorkAreaPara.BasisResponse = BasisResponse.Error("未找到该库区的作业流转流程!");
|
return executeInWorkAreaPara;
|
}
|
return executeInWorkAreaPara;
|
}
|
|
public virtual ExecuteInWorkAreaPara InWorkAreaInAss(ref ExecuteInWorkAreaPara executeInWorkAreaPara, LogPara logPara)
|
{
|
var logicAreaCode = string.Empty;
|
if (executeInWorkAreaPara.InWorkAreaEntity.data != null)
|
{
|
if (executeInWorkAreaPara.InWorkAreaEntity.data.Count() > 0)
|
{
|
//根据物料查找逻辑分区
|
if (!string.IsNullOrEmpty(executeInWorkAreaPara.InWorkAreaEntity.data[0].itemCode))
|
{
|
List<AutoBomPartition_Item_REntity> lstLogicEntityByItem = DALCreator.Create<TN_WMS_AREADAL>().GetPartitionItem(executeInWorkAreaPara.InWorkAreaEntity.data[0].itemCode, 2);
|
logicAreaCode = lstLogicEntityByItem.FirstOrDefault() != null ? lstLogicEntityByItem.First().CN_S_AREA_CODE : "";
|
}
|
}
|
}
|
|
var aEntity = new InAssignEntity()
|
{
|
objectType = InAssignEntity.ObjectType.托盘,
|
objectCode = executeInWorkAreaPara.InWorkAreaEntity.trayCode,
|
itemCode = (executeInWorkAreaPara.InWorkAreaEntity.data != null &&
|
executeInWorkAreaPara.InWorkAreaEntity.data.Count > 0)
|
? executeInWorkAreaPara.InWorkAreaEntity.data[0].itemCode
|
: "",
|
lstAreaPrior = executeInWorkAreaPara.WorkAreaProEntitys.Select(p => new areaPriorClass { areaCode = p.CN_S_END_AREA_CODE, Prior = p.CN_N_PRIORITY }).ToList(),
|
//lockLocation = endArea != null ? endArea.CN_C_IS_CONTROL_QTY.Equals("Y") : false, //不管控数量时,不锁定目的货位
|
projectCode = executeInWorkAreaPara.InWorkAreaEntity.projectCode,
|
logicAreaCode = logicAreaCode,
|
//taskNo = executeInWorkAreaPara.InWorkAreaEntity.taskNo,
|
stockCode = executeInWorkAreaPara.InWorkAreaEntity.startStock,
|
callSys = executeInWorkAreaPara.InWorkAreaEntity.sysName,
|
needCalLock = true
|
};
|
|
//根据库区获取货位
|
InAssignResultEntity resultEntity = BLLCreator.Create<In_AlgorBLL>().InAssign(aEntity);
|
if (resultEntity.Success)
|
{
|
executeInWorkAreaPara.TransportEntity.CN_S_QTY_INDEX = resultEntity.index;
|
//增加到回滚记录里面
|
if ((resultEntity.areaType == Constants.Area_Struc_PingStock || resultEntity.areaType == Constants.Area_Struc_LiStock) && resultEntity.isControlQty == "Y")
|
{
|
executeInWorkAreaPara.RollbackLocations.Add(resultEntity.locationCode);
|
}
|
|
executeInWorkAreaPara.EndLocationEntity = BLLCreator.Create<TN_AB_STOCK_LOCATIONBLL>().GetLocationModel(resultEntity.locationCode);
|
if (executeInWorkAreaPara.EndLocationEntity != null)
|
executeInWorkAreaPara.EndStockAreaEntity = BLLCreator.Create<TN_AB_B_STOCK_AREABLL>().GetStockAreaEntity(executeInWorkAreaPara.EndLocationEntity.CN_S_AREA_CODE);
|
}
|
else
|
{
|
executeInWorkAreaPara.BasisResponse = BasisResponse.Error("在" + string.Join(",", executeInWorkAreaPara.WorkAreaProEntitys.Select(o => o.CN_S_END_AREA_CODE).ToList()) + "库区中未找到合适的入库货位,详细原因:" + resultEntity.Msg);
|
}
|
return executeInWorkAreaPara;
|
}
|
public virtual ExecuteOutWorkAreaPara InWorkAreaOutAss(ref ExecuteOutWorkAreaPara executeOutWorkAreaPara, LogPara logPara)
|
{
|
var logicAreaCode = string.Empty;
|
|
var aEntity = new InAssignEntity()
|
{
|
objectType = InAssignEntity.ObjectType.托盘,
|
objectCode = executeOutWorkAreaPara.OutWorkAreaEntity.trayCode,
|
lstAreaPrior = executeOutWorkAreaPara.WorkAreaProEntitys.Select(p => new areaPriorClass { areaCode = p.CN_S_END_AREA_CODE, Prior = p.CN_N_PRIORITY }).ToList(),
|
//lockLocation = endArea != null ? endArea.CN_C_IS_CONTROL_QTY.Equals("Y") : false, //不管控数量时,不锁定目的货位
|
projectCode = executeOutWorkAreaPara.OutWorkAreaEntity.projectCode,
|
logicAreaCode = logicAreaCode,
|
stockCode = executeOutWorkAreaPara.OutWorkAreaEntity.startStock,
|
callSys = executeOutWorkAreaPara.OutWorkAreaEntity.sysName,
|
needCalLock = true
|
};
|
|
//根据库区获取货位
|
InAssignResultEntity resultEntity = BLLCreator.Create<In_AlgorBLL>().InAssign(aEntity);
|
if (resultEntity.Success)
|
{
|
executeOutWorkAreaPara.OutWorkAreaEntity.endBit = resultEntity.locationCode;
|
//增加到回滚记录里面
|
if ((resultEntity.areaType == Constants.Area_Struc_PingStock || resultEntity.areaType == Constants.Area_Struc_LiStock) && resultEntity.isControlQty == "Y")
|
{
|
executeOutWorkAreaPara.RollLocations.Add(resultEntity.locationCode);
|
}
|
|
executeOutWorkAreaPara.EndLocationEntity = BLLCreator.Create<TN_AB_STOCK_LOCATIONBLL>().GetLocationModel(resultEntity.locationCode);
|
if (executeOutWorkAreaPara.EndLocationEntity != null)
|
{
|
executeOutWorkAreaPara.EndStockAreaEntity = BLLCreator.Create<TN_AB_B_STOCK_AREABLL>().GetStockAreaEntity(executeOutWorkAreaPara.EndLocationEntity.CN_S_AREA_CODE);
|
executeOutWorkAreaPara.OutWorkAreaEntity.endArea = executeOutWorkAreaPara.EndStockAreaEntity.CN_S_AREA_CODE;
|
}
|
}
|
else
|
{
|
executeOutWorkAreaPara.BasisResponse = BasisResponse.Error("在" + string.Join(",", executeOutWorkAreaPara.WorkAreaProEntitys.Select(o => o.CN_S_END_AREA_CODE).ToList()) + "库区中未找到合适的入库货位,详细原因:" + resultEntity.Msg);
|
}
|
//创建转运任务
|
var entity = new TN_WM_TRANSPORT_TASKEntity
|
{
|
CN_S_TASK_NO = executeOutWorkAreaPara.OutWorkAreaEntity.taskNo,
|
CN_S_CIR_OBJ = "托盘",
|
CN_S_CIR_OBJ_CODE = executeOutWorkAreaPara.OutWorkAreaEntity.trayCode,
|
CN_S_START_BIT = executeOutWorkAreaPara.OutWorkAreaEntity.startBit,
|
CN_S_START_AREA = executeOutWorkAreaPara.OutWorkAreaEntity.startArea,
|
CN_S_STATE = Constants.TaskStateList[0],
|
CN_N_PRIORITY = executeOutWorkAreaPara.OutWorkAreaEntity.priority,
|
CN_S_END_AREA = executeOutWorkAreaPara.OutWorkAreaEntity.endArea,
|
CN_S_END_BIT = executeOutWorkAreaPara.OutWorkAreaEntity.endBit,
|
CN_T_START = DateTime.Now.ToString(CultureInfo.InvariantCulture),
|
CN_T_CREATE = DateTime.Now.ToString(CultureInfo.InvariantCulture),
|
CN_T_MODIFY = DateTime.Now.ToString(CultureInfo.InvariantCulture),
|
CN_S_STOCK_CODE = executeOutWorkAreaPara.OutWorkAreaEntity.startStock,
|
CN_S_TASK_TYPE = executeOutWorkAreaPara.OutWorkAreaEntity.IsTransport == "Y" ? "转运" : "出库",
|
CN_S_QTY_INDEX = resultEntity.index,
|
CN_C_END_IS_CONTROL_QTY = executeOutWorkAreaPara.EndStockAreaEntity.CN_C_IS_CONTROL_QTY,
|
CN_S_END_AREA_TYPE = executeOutWorkAreaPara.EndStockAreaEntity.CN_S_STRUCTURE,
|
CN_C_START_IS_CONTROL_QTY = executeOutWorkAreaPara.StartStockAreaEntity.CN_C_IS_CONTROL_QTY,
|
CN_S_START_AREA_TYPE = executeOutWorkAreaPara.StartStockAreaEntity.CN_S_STRUCTURE,
|
CN_S_END_CONTROL_INV = executeOutWorkAreaPara.EndStockAreaEntity.CN_C_IS_INVENTORY,
|
CN_S_START_CONTROL_INV = executeOutWorkAreaPara.StartStockAreaEntity.CN_C_IS_INVENTORY
|
};
|
executeOutWorkAreaPara.TransportList.Add(entity);
|
return executeOutWorkAreaPara;
|
}
|
public virtual ExecuteInWorkAreaPara InWorkAreaCreateTask(ref ExecuteInWorkAreaPara executeInWorkAreaPara, LogPara logPara)
|
{
|
executeInWorkAreaPara.TransportEntity.CN_S_TASK_NO = executeInWorkAreaPara.InWorkAreaEntity.taskNo;
|
executeInWorkAreaPara.TransportEntity.CN_S_CIR_OBJ = "托盘";
|
executeInWorkAreaPara.TransportEntity.CN_S_CIR_OBJ_CODE = executeInWorkAreaPara.InWorkAreaEntity.trayCode;
|
executeInWorkAreaPara.TransportEntity.CN_S_START_BIT = executeInWorkAreaPara.InWorkAreaEntity.startBit;
|
executeInWorkAreaPara.TransportEntity.CN_S_STATE = Constants.TaskStateList[0];
|
executeInWorkAreaPara.TransportEntity.CN_N_PRIORITY = executeInWorkAreaPara.InWorkAreaEntity.priority;
|
executeInWorkAreaPara.TransportEntity.CN_T_CREATE = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");//DateTime.Now.ToString();
|
executeInWorkAreaPara.TransportEntity.CN_T_MODIFY = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");//DateTime.Now.ToString();
|
executeInWorkAreaPara.TransportEntity.CN_S_REMARK = executeInWorkAreaPara.InWorkAreaEntity.remark;
|
executeInWorkAreaPara.TransportEntity.CN_S_START_AREA = executeInWorkAreaPara.InWorkAreaEntity.startArea;
|
executeInWorkAreaPara.TransportEntity.CN_S_STOCK_CODE = executeInWorkAreaPara.InWorkAreaEntity.startStock;
|
executeInWorkAreaPara.TransportEntity.CN_S_TASK_TYPE = executeInWorkAreaPara.InWorkAreaEntity.isTransport == "Y" ? "转运" : "入库";
|
executeInWorkAreaPara.TransportEntity.CN_S_START_AREA_TYPE = executeInWorkAreaPara.StartStockAreaEntity.CN_S_STRUCTURE;
|
executeInWorkAreaPara.TransportEntity.CN_C_START_IS_CONTROL_QTY = executeInWorkAreaPara.StartStockAreaEntity.CN_C_IS_CONTROL_QTY;
|
executeInWorkAreaPara.TransportEntity.CN_S_START_CONTROL_INV = executeInWorkAreaPara.StartStockAreaEntity.CN_C_IS_INVENTORY;
|
//TODO EndLocationEntity、EndStockAreaEntity需要赋值
|
executeInWorkAreaPara.TransportEntity.CN_S_END_BIT = executeInWorkAreaPara.EndLocationEntity.CN_S_LOCATION_CODE;
|
executeInWorkAreaPara.TransportEntity.CN_S_END_AREA = executeInWorkAreaPara.EndLocationEntity.CN_S_AREA_CODE;
|
executeInWorkAreaPara.TransportEntity.CN_C_END_IS_CONTROL_QTY = executeInWorkAreaPara.EndStockAreaEntity.CN_C_IS_CONTROL_QTY;
|
executeInWorkAreaPara.TransportEntity.CN_S_END_CONTROL_INV = executeInWorkAreaPara.EndStockAreaEntity.CN_C_IS_INVENTORY;
|
executeInWorkAreaPara.TransportEntity.CN_S_END_AREA_TYPE = executeInWorkAreaPara.EndStockAreaEntity.CN_S_STRUCTURE;
|
|
executeInWorkAreaPara.TransportEntity.CN_S_CREATOR = executeInWorkAreaPara.InWorkAreaEntity.creatorBy;
|
executeInWorkAreaPara.TransportEntity.CN_S_CREATOR_BY = executeInWorkAreaPara.InWorkAreaEntity.creatorBy;
|
return executeInWorkAreaPara;
|
}
|
|
public virtual ExecuteInWorkAreaPara InWorkAreaProcedure(ExecuteInWorkAreaPara executeInWorkAreaPara, LogPara logPara)
|
{
|
var result = UseTransaction(trans =>
|
{
|
|
InWorkAreaProcedureFunc(executeInWorkAreaPara, trans, logPara);
|
if (executeInWorkAreaPara.InWorkAreaEntity.needCreateAMSTask == "Y")
|
{
|
OperateResult re = new OtherSysApi().SendAmsCreateTask(executeInWorkAreaPara.TransportEntity);
|
if (!re.Success)
|
{
|
throw new Exception("SendAmsCreateTask异常:" + re.Msg);
|
}
|
}
|
|
|
});
|
if (result.Success)
|
{
|
executeInWorkAreaPara.TaskExecuteState = new TaskExecuteState().Ok(new OkTask()
|
{
|
index = executeInWorkAreaPara.index,
|
taskNo = executeInWorkAreaPara.TransportEntity.CN_S_TASK_NO,
|
startStock = executeInWorkAreaPara.TransportEntity.CN_S_STOCK_CODE,
|
startArea = executeInWorkAreaPara.TransportEntity.CN_S_START_AREA,
|
startBit = executeInWorkAreaPara.TransportEntity.CN_S_START_BIT,
|
endStock = executeInWorkAreaPara.TransportEntity.CN_S_STOCK_CODE,
|
endArea = executeInWorkAreaPara.TransportEntity.CN_S_END_AREA,
|
endBit = executeInWorkAreaPara.TransportEntity.CN_S_END_BIT,
|
priority = executeInWorkAreaPara.TransportEntity.CN_N_PRIORITY,
|
trayCode = executeInWorkAreaPara.TransportEntity.CN_S_CIR_OBJ_CODE,
|
startAreaClass = executeInWorkAreaPara.TransportEntity.CN_S_START_AREA_TYPE,
|
endAreaClass = executeInWorkAreaPara.TransportEntity.CN_S_END_AREA_TYPE
|
});
|
}
|
else
|
{
|
executeInWorkAreaPara.BasisResponse = BasisResponse.Error("ExecuteInWorkArea 方法异常:" + result.Msg);
|
}
|
return executeInWorkAreaPara;
|
}
|
|
public virtual void InWorkAreaProcedureFunc(ExecuteInWorkAreaPara executeInWorkAreaPara, IDbTransaction trans, LogPara logPara)
|
{
|
if (executeInWorkAreaPara.InWorkAreaEntity.data != null)
|
{
|
if (executeInWorkAreaPara.InWorkAreaEntity.data.Count > 0)
|
{
|
//删除托盘产品关联
|
CreateDAL<DAL.InStock.TN_WM_B_TRAY_ITEM_RELDAL>().DeleteTrayItem(" CN_S_TRAY_CODE='" + executeInWorkAreaPara.InWorkAreaEntity.trayCode + "' ", trans);
|
|
foreach (var item in executeInWorkAreaPara.InWorkAreaEntity.data)
|
{
|
var trayItemMstGuid = Guid.NewGuid().ToString();
|
//添加托盘物料关联主表
|
var transResult = CreateDAL<HH.WMS.DAL.InStock.TN_WM_B_TRAY_ITEM_RELDAL>().AddMst(new TN_WM_B_TRAY_ITEM_MSTEntity
|
{
|
CN_GUID = trayItemMstGuid,
|
CN_S_TRAY_CODE = executeInWorkAreaPara.InWorkAreaEntity.trayCode,
|
CN_S_ITEM_CODE = item.itemCode,
|
CN_S_ITEM_NAME = item.itemName,
|
CN_S_ITEM_STATE = item.itemState == null ? "" : item.itemState,
|
CN_F_QUANTITY = item.qty,
|
CN_S_MEASURE_UNIT = item.itemPackUnit,
|
CN_F_ALLOC_QTY = item.qty,
|
CN_S_MODEL = item.itemModel
|
}, trans);
|
|
if (!transResult.Success)
|
{
|
trans.Rollback();
|
return;
|
}
|
|
//添加托盘物料关联子表
|
var curResult = CreateDAL<HH.WMS.DAL.InStock.TN_WM_B_TRAY_ITEM_RELDAL>().AddDtl(new List<TN_WM_B_TRAY_ITEM_DTLEntity>()
|
{
|
new TN_WM_B_TRAY_ITEM_DTLEntity{
|
CN_PARENT_GUID = trayItemMstGuid,
|
CN_S_LOT_NO = item.lotNo,
|
CN_S_UNIQUE_CODE = item.uniqueCode,
|
CN_S_PACKING_UNIT = item.itemPackUnit,
|
CN_F_PACKING_QTY = item.qty,
|
CN_F_QUANTITY = item.qty,
|
CN_T_PRODUCTION = item.productionDate,
|
CN_S_CREATOR = "hh",
|
CN_S_CREATOR_BY = "",
|
CN_T_CREATE = DateTime.Now,
|
CN_GUID = Guid.NewGuid().ToString(),
|
sqlwhere = " WHERE CN_PARENT_GUID='" + trayItemMstGuid + "' "
|
}
|
}, trans);
|
transResult = new OperateResult { Success = curResult.Success, Msg = curResult.Success ? "" : curResult.Exception.Message };
|
if (!transResult.Success)
|
{
|
trans.Rollback();
|
return;
|
}
|
}
|
}
|
}
|
var transport = executeInWorkAreaPara.TransportEntity;
|
|
//创建任务
|
var operateResult = BLLCreator.Create<DapperBLL<TN_WM_TASKEntity>>().Add(new TN_WM_TASKEntity
|
{
|
CN_S_TASK_NO = transport.CN_S_TASK_NO,
|
CN_S_TRAY_CODE = transport.CN_S_CIR_OBJ_CODE,
|
CN_S_START_BIT = transport.CN_S_START_BIT,
|
CN_S_END_BIT = transport.CN_S_END_BIT,
|
//CN_S_PRO_CODE = transport.CN_S_PRO_CODE,
|
CN_S_STATE = transport.CN_S_STATE,
|
CN_S_BF_TASK_NO = transport.CN_S_BF_TASK_NO,
|
CN_S_AF_TASK_NO = transport.CN_S_AF_TASK_NO,
|
CN_S_STOCK_CODE = transport.CN_S_STOCK_CODE,
|
CN_S_START_AREA = transport.CN_S_START_AREA,
|
CN_S_END_AREA = transport.CN_S_END_AREA,
|
CN_N_PRIORITY = transport.CN_N_PRIORITY,
|
CN_S_CREATOR = transport.CN_S_CREATOR,
|
CN_S_CREATOR_BY = transport.CN_S_CREATOR_BY,
|
CN_T_CREATE = Convert.ToDateTime(transport.CN_T_CREATE),
|
CN_T_MODIFY = Convert.ToDateTime(transport.CN_T_MODIFY),
|
CN_S_REMARK = transport.CN_S_REMARK,
|
//CN_C_IS_AUTO = transport.CN_C_IS_AUTO,
|
CN_S_TASK_TYPE = transport.CN_S_TASK_TYPE,
|
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,
|
CN_S_FROM_OP = "入库/转运"
|
//CN_S_PROJECT_CODE = executeOutWorkAreaPara.OutWorkAreaEntity.projectCode
|
}, trans);
|
|
//更新结束点的任务号
|
if (executeInWorkAreaPara.TransportEntity.CN_C_END_IS_CONTROL_QTY.Equals("Y"))
|
{
|
CreateDAL<TN_WM_LOCATION_EXTDAL>().UpdateLocationExtState(executeInWorkAreaPara.TransportEntity.CN_S_END_BIT, "", "", executeInWorkAreaPara.TransportEntity.CN_S_TASK_NO, trans);
|
}
|
//if (executeInWorkAreaPara.TransportEntity.CN_S_END_AREA_TYPE.Equals("平库") || executeInWorkAreaPara.TransportEntity.CN_S_END_AREA_TYPE.Equals("立库")){}
|
|
//更新起点的任务号
|
if (executeInWorkAreaPara.TransportEntity.CN_C_START_IS_CONTROL_QTY.Equals("Y")) //&& executeInWorkAreaPara.InWorkAreaEntity.isTransport.Equals("Y")
|
{
|
CreateDAL<TN_WM_LOCATION_EXTDAL>().UpdateLocationExtState(executeInWorkAreaPara.TransportEntity.CN_S_START_BIT, "", "", executeInWorkAreaPara.TransportEntity.CN_S_TASK_NO, trans);
|
}
|
}
|
|
|
#endregion
|
|
#region 出库
|
public virtual string OutWorkArea(List<OutWorkAreaEntity> outWorkAreaList)
|
{
|
var logPara = LogType.LogPara("出作业区");
|
var result = JsonConvert.SerializeObject(OutWorkArea(outWorkAreaList, logPara));
|
return result;
|
}
|
|
|
public virtual ExternalResponse OutWorkArea(List<OutWorkAreaEntity> outWorkAreaList, LogPara logPara)
|
{
|
Log.Detail(logPara, "OutWorkArea接口请求参数隆基:" + JsonConvert.SerializeObject(outWorkAreaList));
|
var response = new ExternalResponse();
|
if (outWorkAreaList == null) return new ExternalResponse { success = false, errMsg = "参数不正确" };
|
for (var i = 0; i < outWorkAreaList.Count; i++)
|
{
|
if (string.IsNullOrEmpty(outWorkAreaList[i].sysName))
|
{
|
outWorkAreaList[i].sysName = "AMS";
|
}
|
Log.Detail(logPara, "循环OutWorkArea接口请求参数-隆基:准备进入OutWorkAreaLj方法");
|
var result = OutWorkArea(outWorkAreaList[i], logPara);
|
if (result.BasisResponse.Success)
|
{
|
response.success = true;
|
response.okList.Add(result.TaskExecuteState.okTask);
|
//发送到AMS
|
//SendToAms(response, logPara);
|
}
|
else
|
{
|
response.failList.Add(new TaskExecuteState().Error(i, result.BasisResponse.Message).FailTask);
|
if (result.RollLocations.Count > 0)
|
{
|
foreach (string sLocation in result.RollLocations)
|
{
|
BLLCreator.Create<TN_WM_LOCATION_EXTBLL>().UpdateState(sLocation, Constants.Location_State_Normal, "");
|
AutoBomLocationEntity locationModel = CreateDAL<TN_WMS_LOCATIONDAL>().GetModel(sLocation);
|
BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(sLocation, "", "正常", "出库请求失败回滚过程中锁定的货位", outWorkAreaList[i].sysName, "", "", locationModel.CN_S_STOCK_CODE, locationModel.CN_S_AREA_CODE, null);
|
}
|
}
|
}
|
}
|
|
var curResult = response.failList.Any() ? response.Error(null, string.Empty, outWorkAreaList) : response.Ok(null, outWorkAreaList);
|
Log.Detail(logPara, "OutWorkArea接口返回参数:" + curResult);
|
return curResult;
|
}
|
|
public virtual ExecuteOutWorkAreaPara OutWorkArea(OutWorkAreaEntity outWorkAreaEntity, LogPara logPara)
|
{
|
Log.Detail(logPara, "进入隆基OutWorkArea方法");
|
var executeOutWorkAreaPara = new ExecuteOutWorkAreaPara { OutWorkAreaEntity = outWorkAreaEntity };
|
try
|
{
|
if (!OutWorkAreaVerifyPara(ref executeOutWorkAreaPara, logPara).BasisResponse.Success) return executeOutWorkAreaPara;
|
if (!OutWorkAreaHandlePara(ref executeOutWorkAreaPara, logPara).BasisResponse.Success) return executeOutWorkAreaPara;
|
|
//算法计算货位
|
if (string.IsNullOrEmpty(executeOutWorkAreaPara.OutWorkAreaEntity.startBit))
|
{
|
OutWorkAreaCalculateLoaction(ref executeOutWorkAreaPara, logPara);//new ExternalOutWorkAreaBLL().CalculateLoaction(executeOutWorkAreaPara);
|
if (!executeOutWorkAreaPara.BasisResponse.Success) return executeOutWorkAreaPara;
|
|
if (!executeOutWorkAreaPara.TransportList.Any())
|
{
|
OutWorkAreaOutAss(ref executeOutWorkAreaPara, logPara);
|
if (!executeOutWorkAreaPara.BasisResponse.Success) return executeOutWorkAreaPara;
|
}
|
|
}
|
else
|
{
|
//创建转运任务
|
var entity = new TN_WM_TRANSPORT_TASKEntity
|
{
|
CN_S_TASK_NO = executeOutWorkAreaPara.OutWorkAreaEntity.taskNo,
|
CN_S_CIR_OBJ = "托盘",
|
CN_S_CIR_OBJ_CODE = executeOutWorkAreaPara.OutWorkAreaEntity.trayCode,
|
CN_S_START_BIT = executeOutWorkAreaPara.OutWorkAreaEntity.startBit,
|
CN_S_START_AREA = executeOutWorkAreaPara.StartStockAreaEntity.CN_S_AREA_CODE,
|
CN_S_STATE = Constants.TaskStateList[0],
|
CN_N_PRIORITY = executeOutWorkAreaPara.OutWorkAreaEntity.priority,
|
CN_S_END_AREA = executeOutWorkAreaPara.OutWorkAreaEntity.endArea,
|
CN_S_END_BIT = executeOutWorkAreaPara.OutWorkAreaEntity.endBit,
|
CN_T_START = DateTime.Now.ToString(CultureInfo.InvariantCulture),
|
CN_T_CREATE = DateTime.Now.ToString(CultureInfo.InvariantCulture),
|
CN_T_MODIFY = DateTime.Now.ToString(CultureInfo.InvariantCulture),
|
CN_S_STOCK_CODE = executeOutWorkAreaPara.OutWorkAreaEntity.startStock,
|
CN_S_TASK_TYPE = executeOutWorkAreaPara.OutWorkAreaEntity.IsTransport == "Y" ? "转运" : "出库",
|
CN_S_QTY_INDEX = "1",
|
CN_C_END_IS_CONTROL_QTY = executeOutWorkAreaPara.EndStockAreaEntity.CN_C_IS_CONTROL_QTY,
|
CN_S_END_AREA_TYPE = executeOutWorkAreaPara.EndStockAreaEntity.CN_S_STRUCTURE,
|
CN_C_START_IS_CONTROL_QTY = executeOutWorkAreaPara.StartStockAreaEntity.CN_C_IS_CONTROL_QTY,
|
CN_S_START_AREA_TYPE = executeOutWorkAreaPara.StartStockAreaEntity.CN_S_STRUCTURE,
|
CN_S_END_CONTROL_INV = executeOutWorkAreaPara.EndStockAreaEntity.CN_C_IS_INVENTORY,
|
CN_S_START_CONTROL_INV = executeOutWorkAreaPara.StartStockAreaEntity.CN_C_IS_INVENTORY,
|
CN_S_EXT3 = executeOutWorkAreaPara.OutWorkAreaEntity.moduleType,
|
CN_S_REMARK = executeOutWorkAreaPara.OutWorkAreaEntity.remark
|
};
|
executeOutWorkAreaPara.TransportList.Add(entity);
|
}
|
if (string.IsNullOrEmpty(executeOutWorkAreaPara.OutWorkAreaEntity.endBit))
|
{
|
if (!InWorkAreaOutAss(ref executeOutWorkAreaPara, logPara).BasisResponse.Success) return executeOutWorkAreaPara;
|
}
|
UseTransaction(trans =>
|
{
|
OutWorkAreaCreateTask(ref executeOutWorkAreaPara, logPara);
|
OutWorkAreaProcedure(ref executeOutWorkAreaPara, logPara);
|
if (executeOutWorkAreaPara.OutWorkAreaEntity.needCreateAMSTask == "Y")
|
{
|
OperateResult re = new OtherSysApi().SendAmsCreateTaskLJ(executeOutWorkAreaPara.TransportList[0]);
|
if (!re.Success)
|
{
|
throw new Exception("SendAmsCreateTask异常:" + re.Msg);
|
}
|
}
|
});
|
}
|
catch (Exception ex)
|
{
|
executeOutWorkAreaPara.BasisResponse = BasisResponse.Error("OutWorkAreaLj 方法异常:" + JsonConvert.SerializeObject(ex.Message + ex.StackTrace));
|
}
|
return executeOutWorkAreaPara;
|
}
|
|
public virtual ExecuteOutWorkAreaPara OutWorkAreaVerifyPara(ref ExecuteOutWorkAreaPara executeOutWorkAreaPara, LogPara logPara)
|
{
|
if (executeOutWorkAreaPara.OutWorkAreaEntity == null)
|
{
|
executeOutWorkAreaPara.BasisResponse = BasisResponse.Error("参数不合法,接收参数为null!");
|
return executeOutWorkAreaPara;
|
}
|
|
#region 检查起点位置
|
|
if (!string.IsNullOrEmpty(executeOutWorkAreaPara.OutWorkAreaEntity.startBit))
|
{
|
executeOutWorkAreaPara.StartStockAreaEntity = DALCreator.Create<TN_AB_STOCK_LOCATIONDAL>().GetAreaModelByLocation(executeOutWorkAreaPara.OutWorkAreaEntity.startBit.Trim());
|
if (executeOutWorkAreaPara.StartStockAreaEntity == null)
|
{
|
executeOutWorkAreaPara.BasisResponse = BasisResponse.Error("给定起点位置:" + executeOutWorkAreaPara.OutWorkAreaEntity.startBit + "不存在!");
|
return executeOutWorkAreaPara;
|
}
|
|
var trayLocation = BLLCreator.Create<DapperBLL<TN_WM_B_TRAY_LOCATIONEntity>>().GetSingleEntity(new { CN_S_LOCATION_CODE = executeOutWorkAreaPara.OutWorkAreaEntity.startBit });
|
if (trayLocation == null)
|
{
|
executeOutWorkAreaPara.BasisResponse = BasisResponse.Error("当前起点未绑定托盘!");
|
return executeOutWorkAreaPara;
|
}
|
|
executeOutWorkAreaPara.StartLocationExt = BLLCreator.Create<TN_WM_LOCATION_EXTBLL>().GetModel(" where CN_S_LOCATION_CODE = '" + executeOutWorkAreaPara.OutWorkAreaEntity.startBit.Trim() + "'").FirstOrDefault();
|
if (!executeOutWorkAreaPara.StartLocationExt.CN_S_LOCATION_STATE.Equals("正常"))
|
{
|
executeOutWorkAreaPara.BasisResponse = BasisResponse.Error("当前起点货位状态为:" + executeOutWorkAreaPara.StartLocationExt.CN_S_LOCATION_STATE + ",不允许出库!");
|
return executeOutWorkAreaPara;
|
}
|
BLLCreator.Create<TN_WM_LOCATION_EXTBLL>().UpdateState(executeOutWorkAreaPara.OutWorkAreaEntity.startBit, "预出库锁定", "正常");
|
executeOutWorkAreaPara.RollLocations.Add(executeOutWorkAreaPara.OutWorkAreaEntity.startBit);
|
executeOutWorkAreaPara.OutWorkAreaEntity.trayCode = trayLocation.CN_S_TRAY_CODE;
|
}
|
|
#endregion
|
|
#region 检验终点库区
|
if (string.IsNullOrEmpty(executeOutWorkAreaPara.OutWorkAreaEntity.endBit))
|
{
|
executeOutWorkAreaPara.BasisResponse = BasisResponse.Error("给定的目的位置不存在!");
|
return executeOutWorkAreaPara;
|
}
|
//获取终点库区信息
|
executeOutWorkAreaPara.EndStockAreaEntity = DALCreator.Create<TN_AB_STOCK_LOCATIONDAL>().GetAreaModelByLocation(executeOutWorkAreaPara.OutWorkAreaEntity.endBit.Trim());
|
if (executeOutWorkAreaPara.EndStockAreaEntity == null)
|
{
|
executeOutWorkAreaPara.BasisResponse = BasisResponse.Error("给定的目的位置未找到库区!");
|
return executeOutWorkAreaPara;
|
}
|
|
if (executeOutWorkAreaPara.OutWorkAreaEntity.IsTransport == null) executeOutWorkAreaPara.OutWorkAreaEntity.IsTransport = "N";
|
|
// 检查货位状态 是转运且管控数量时使用
|
if (executeOutWorkAreaPara.EndStockAreaEntity.CN_C_IS_CONTROL_QTY.Equals("Y") && executeOutWorkAreaPara.OutWorkAreaEntity.IsTransport.Equals("Y"))
|
{
|
executeOutWorkAreaPara.EndLocationExt = BLLCreator.Create<TN_WM_LOCATION_EXTBLL>().GetModel(" where CN_S_LOCATION_CODE = '" + executeOutWorkAreaPara.OutWorkAreaEntity.endBit.Trim() + "'").FirstOrDefault();
|
if (!executeOutWorkAreaPara.EndLocationExt.CN_S_LOCATION_STATE.Equals("正常"))
|
{
|
executeOutWorkAreaPara.BasisResponse = BasisResponse.Error("当前货位状态为" + executeOutWorkAreaPara.EndLocationExt.CN_S_LOCATION_STATE + ",货位不可用!");
|
return executeOutWorkAreaPara;
|
}
|
if (!executeOutWorkAreaPara.EndLocationExt.CN_S_USE_STATE.Equals("空"))
|
{
|
executeOutWorkAreaPara.BasisResponse = BasisResponse.Error("当前货位存储状态为" + executeOutWorkAreaPara.EndLocationExt.CN_S_USE_STATE + ",货位不可用!");
|
return executeOutWorkAreaPara;
|
}
|
//锁定终点货位
|
OperateResult lockResult = BLLCreator.Create<TN_WM_LOCATION_EXTBLL>().UpdateState(executeOutWorkAreaPara.OutWorkAreaEntity.endBit, "预入库锁定", "正常");
|
if (lockResult.Success)
|
{
|
AutoBomLocationEntity locationModel = DALCreator.Create<TN_WMS_LOCATIONDAL>().GetModel(executeOutWorkAreaPara.OutWorkAreaEntity.endBit);
|
BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(executeOutWorkAreaPara.OutWorkAreaEntity.endBit, "正常", "预入库锁定", "出库并且转运需要锁定终点货位防止其他资源竞争", executeOutWorkAreaPara.OutWorkAreaEntity.sysName, "", "", locationModel.CN_S_STOCK_CODE, locationModel.CN_S_AREA_CODE, null);
|
executeOutWorkAreaPara.RollLocations.Add(executeOutWorkAreaPara.OutWorkAreaEntity.endBit);
|
}
|
else
|
{
|
executeOutWorkAreaPara.BasisResponse = BasisResponse.Error("锁定终点货位" + executeOutWorkAreaPara.OutWorkAreaEntity.endBit + "失败!详细原因为:SqlExecuteResult返回false或影响row为0");
|
return executeOutWorkAreaPara;
|
}
|
}
|
executeOutWorkAreaPara.OutWorkAreaEntity.startStock = executeOutWorkAreaPara.EndStockAreaEntity.CN_S_STOCK_CODE;
|
executeOutWorkAreaPara.OutWorkAreaEntity.endArea = executeOutWorkAreaPara.EndStockAreaEntity.CN_S_AREA_CODE;
|
|
#endregion
|
|
return executeOutWorkAreaPara;
|
}
|
|
public virtual ExecuteOutWorkAreaPara OutWorkAreaHandlePara(ref ExecuteOutWorkAreaPara executeOutWorkAreaPara, LogPara logPara)
|
{
|
//任务号
|
if (string.IsNullOrEmpty(executeOutWorkAreaPara.OutWorkAreaEntity.taskNo))
|
{
|
var postData = "{\"appCode\":\"" + Constants.appCode + "\",\"ruleName\":\"" + Constants.Rule_OutTaskNo + "\",\"orgId\":\"0\",\"orgFlag\":\"\"}";
|
executeOutWorkAreaPara.OutWorkAreaEntity.taskNo = WebApiManager.HttpAutoBom_Post("api/BillRule/GenBillNo", postData);
|
if (string.IsNullOrEmpty(executeOutWorkAreaPara.OutWorkAreaEntity.taskNo))
|
executeOutWorkAreaPara.BasisResponse = BasisResponse.Error("获取AUTOBOM出库任务号异常!");
|
}
|
|
//获取作业区列表
|
//executeOutWorkAreaPara.WorkAreaProEntitys = BLLCreator.Create<TaskTransferBLL>().GetOutWorkPosition(executeOutWorkAreaPara);
|
if (!string.IsNullOrEmpty(executeOutWorkAreaPara.OutWorkAreaEntity.trayCode))
|
{
|
//根据托盘号查询托盘产品关联信息主表
|
var trayItemMst = BLLCreator.Create<TN_WM_B_TRAY_ITEM_RELBLL>().GetTrayItemMst(" AND CN_S_TRAY_CODE ='" + executeOutWorkAreaPara.OutWorkAreaEntity.trayCode + "'");
|
// Log.Detail(logPara, "OutWorkAreaHandlePara.trayItemMst:" + JsonConvert.SerializeObject(trayItemMst));
|
|
StringBuilder sbRemark = new StringBuilder();
|
if (trayItemMst.Count > 0)
|
{
|
//查询托盘产品关联信息子表
|
sbRemark.Append(trayItemMst[0].CN_S_ITEM_CODE);
|
sbRemark.Append("&");
|
sbRemark.Append(trayItemMst[0].CN_S_MODEL);
|
sbRemark.Append("&");
|
sbRemark.Append(trayItemMst[0].CN_S_OWNER);
|
sbRemark.Append("&");
|
sbRemark.Append(trayItemMst[0].CN_S_FIGURE_NO);
|
sbRemark.Append("&");
|
sbRemark.Append(trayItemMst[0].CN_S_ITEM_STATE);
|
sbRemark.Append("&");
|
sbRemark.Append(trayItemMst[0].CN_S_ITEM_NAME);
|
sbRemark.Append("&");
|
sbRemark.Append(trayItemMst[0].CN_S_MEASURE_UNIT);
|
}
|
executeOutWorkAreaPara.OutWorkAreaEntity.remark = sbRemark.ToString();
|
}
|
return executeOutWorkAreaPara;
|
}
|
|
public virtual ExecuteOutWorkAreaPara OutWorkAreaCalculateLoaction(ref ExecuteOutWorkAreaPara executeOutWorkAreaPara, LogPara logPara)
|
{
|
executeOutWorkAreaPara.ItemQueryClassList = new List<itemQueryClass>();
|
|
if (executeOutWorkAreaPara.OutWorkAreaEntity.Data != null)
|
{
|
foreach (var itemData in executeOutWorkAreaPara.OutWorkAreaEntity.Data)
|
{
|
if (!string.IsNullOrEmpty(itemData.TrayCode))
|
{
|
#region 按照托盘出库
|
//起点货位
|
executeOutWorkAreaPara.TrayObjLocation = CreateDAL<TN_WM_B_TRAY_LOCATIONDAL>().GetListByTrayCode(itemData.TrayCode).First();
|
if (executeOutWorkAreaPara.TrayObjLocation == null)
|
{
|
executeOutWorkAreaPara.BasisResponse = BasisResponse.Error(string.Format("库区:{0},未找到托盘{1} ", "", itemData.TrayCode));
|
return executeOutWorkAreaPara;
|
}
|
if (string.IsNullOrEmpty(executeOutWorkAreaPara.TrayObjLocation.CN_S_LOCATION_CODE))
|
{
|
executeOutWorkAreaPara.BasisResponse = BasisResponse.Error(string.Format("库区:{0},托盘{1} 未找到起始货位", "", itemData.TrayCode));
|
return executeOutWorkAreaPara;
|
}
|
|
|
var startStockLocation = DALCreator.Create<TN_AB_STOCK_LOCATIONDAL>().GetAreaModelByLocation(executeOutWorkAreaPara.TrayObjLocation.CN_S_LOCATION_CODE);
|
|
//获取作业流转任务
|
var entity = new TN_WM_TRANSPORT_TASKEntity
|
{
|
CN_S_TASK_NO = executeOutWorkAreaPara.OutWorkAreaEntity.taskNo,
|
CN_S_CIR_OBJ = "托盘",
|
CN_S_CIR_OBJ_CODE = itemData.TrayCode,
|
CN_S_START_BIT = executeOutWorkAreaPara.TrayObjLocation.CN_S_LOCATION_CODE,
|
CN_S_START_AREA = executeOutWorkAreaPara.TrayObjLocation.CN_S_STOCK_AREA,
|
CN_S_STATE = Constants.TaskStateList[0],
|
CN_N_PRIORITY = executeOutWorkAreaPara.OutWorkAreaEntity.priority,
|
CN_S_END_AREA = executeOutWorkAreaPara.OutWorkAreaEntity.endArea,
|
CN_S_END_BIT = executeOutWorkAreaPara.OutWorkAreaEntity.endBit,
|
CN_T_START = DateTime.Now.ToString(CultureInfo.InvariantCulture),
|
CN_T_CREATE = DateTime.Now.ToString(CultureInfo.InvariantCulture),
|
CN_T_MODIFY = DateTime.Now.ToString(CultureInfo.InvariantCulture),
|
CN_S_STOCK_CODE = executeOutWorkAreaPara.OutWorkAreaEntity.startStock,
|
CN_S_TASK_TYPE = "出库",
|
CN_C_END_IS_CONTROL_QTY = executeOutWorkAreaPara.EndStockAreaEntity.CN_C_IS_CONTROL_QTY,
|
CN_S_END_AREA_TYPE = executeOutWorkAreaPara.EndStockAreaEntity.CN_S_STRUCTURE,
|
CN_C_START_IS_CONTROL_QTY = startStockLocation.CN_C_IS_CONTROL_QTY,
|
CN_S_START_AREA_TYPE = startStockLocation.CN_S_STRUCTURE
|
};
|
|
executeOutWorkAreaPara.TransportList.Add(entity);
|
|
//锁定起点货位
|
var lockResult = CreateDAL<TN_WM_LOCATION_EXTDAL>().UpdateLocationState(executeOutWorkAreaPara.TrayObjLocation.CN_S_LOCATION_CODE, Constants.Location_State_OutLock, "出库", null);
|
if (lockResult.Success && lockResult.Row > 0)
|
{
|
executeOutWorkAreaPara.RollLocations.Add(executeOutWorkAreaPara.TrayObjLocation.CN_S_LOCATION_CODE);
|
AutoBomLocationEntity locationModel = CreateDAL<TN_WMS_LOCATIONDAL>().GetModel(executeOutWorkAreaPara.TrayObjLocation.CN_S_LOCATION_CODE);
|
BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(executeOutWorkAreaPara.TrayObjLocation.CN_S_LOCATION_CODE, "正常", "预出库锁定", "按托盘出库锁定起点货位防止其他资源竞争", executeOutWorkAreaPara.OutWorkAreaEntity.sysName, "", "", locationModel.CN_S_STOCK_CODE, locationModel.CN_S_AREA_CODE, null);
|
}
|
else
|
executeOutWorkAreaPara.BasisResponse = BasisResponse.Error("按托盘出库锁定货位失败!");
|
#endregion
|
}
|
else
|
{
|
//算法位置
|
|
return executeOutWorkAreaPara;// = OutAss(executeOutWorkAreaPara);
|
}
|
}
|
}
|
else
|
{
|
//空托出库
|
return executeOutWorkAreaPara; //= OutAss(executeOutWorkAreaPara);
|
}
|
|
if (!executeOutWorkAreaPara.BasisResponse.Success)
|
return executeOutWorkAreaPara;
|
|
//if (executeOutWorkAreaPara.TransportList.Count == 0)
|
// executeOutWorkAreaPara.BasisResponse = BasisResponse.Error("未找到合适的出库货位!");
|
|
return executeOutWorkAreaPara;
|
}
|
|
public virtual ExecuteOutWorkAreaPara OutWorkAreaOutAss(ref ExecuteOutWorkAreaPara executeOutWorkAreaPara, LogPara logPara)
|
{
|
#region 算法
|
|
//获取终点货位
|
OutAssignEnitty oEntity = new OutAssignEnitty()
|
{
|
stockCode = executeOutWorkAreaPara.OutWorkAreaEntity.startStock,
|
itemCode = executeOutWorkAreaPara.OutWorkAreaEntity.Data == null ? "" : executeOutWorkAreaPara.OutWorkAreaEntity.Data.First().ItemCode,
|
itemState = executeOutWorkAreaPara.OutWorkAreaEntity.Data == null ? "" : executeOutWorkAreaPara.OutWorkAreaEntity.Data.First().ItemState,
|
projectCode = executeOutWorkAreaPara.OutWorkAreaEntity.projectCode,
|
endBit = executeOutWorkAreaPara.OutWorkAreaEntity.endBit,
|
lstAreaPrior = executeOutWorkAreaPara.WorkAreaProEntitys.Select(e => new areaPriorClass { areaCode = e.CN_S_START_AREA_CODE, Prior = e.CN_N_PRIORITY }).ToList()
|
};
|
try
|
{
|
//执行算法
|
OutAssignResultEntity ire = BLLCreator.Create<Out_AlgorBLL>().OutAssign(oEntity);
|
if (!ire.Success)
|
{
|
executeOutWorkAreaPara.BasisResponse = BasisResponse.Error("算法返回结果" + ire.Msg);
|
return executeOutWorkAreaPara;
|
}
|
if ((ire.areaType == Constants.Area_Struc_PingStock || ire.areaType == Constants.Area_Struc_LiStock) && ire.isControlQty == "Y")
|
{
|
executeOutWorkAreaPara.RollLocations.Add(ire.locationCode);
|
}
|
|
//创建转运任务
|
var entity = new TN_WM_TRANSPORT_TASKEntity
|
{
|
CN_S_TASK_NO = executeOutWorkAreaPara.OutWorkAreaEntity.taskNo,
|
CN_S_CIR_OBJ = "托盘",
|
CN_S_CIR_OBJ_CODE = ire.trayCode,
|
CN_S_START_BIT = ire.locationCode,
|
CN_S_START_AREA = ire.areaCode,
|
CN_S_STATE = Constants.TaskStateList[0],
|
CN_N_PRIORITY = executeOutWorkAreaPara.OutWorkAreaEntity.priority,
|
CN_S_END_AREA = executeOutWorkAreaPara.OutWorkAreaEntity.endArea,
|
CN_S_END_BIT = executeOutWorkAreaPara.OutWorkAreaEntity.endBit,
|
CN_T_START = DateTime.Now.ToString(CultureInfo.InvariantCulture),
|
CN_T_CREATE = DateTime.Now.ToString(CultureInfo.InvariantCulture),
|
CN_T_MODIFY = DateTime.Now.ToString(CultureInfo.InvariantCulture),
|
CN_S_STOCK_CODE = executeOutWorkAreaPara.OutWorkAreaEntity.startStock,
|
CN_S_TASK_TYPE = executeOutWorkAreaPara.OutWorkAreaEntity.IsTransport == "Y" ? "转运" : "出库",
|
CN_S_QTY_INDEX = ire.index,
|
CN_C_END_IS_CONTROL_QTY = executeOutWorkAreaPara.EndStockAreaEntity.CN_C_IS_CONTROL_QTY,
|
CN_S_END_AREA_TYPE = executeOutWorkAreaPara.EndStockAreaEntity.CN_S_STRUCTURE,
|
CN_C_START_IS_CONTROL_QTY = ire.isControlQty,
|
CN_S_START_AREA_TYPE = ire.areaType,
|
CN_S_END_CONTROL_INV = executeOutWorkAreaPara.EndStockAreaEntity.CN_C_IS_INVENTORY,
|
CN_S_START_CONTROL_INV = ire.isControlInv
|
};
|
executeOutWorkAreaPara.TransportList.Add(entity);
|
}
|
catch (Exception ex)
|
{
|
executeOutWorkAreaPara.BasisResponse = BasisResponse.Error("未找到合适的出库货位" + ex.Message);
|
}
|
|
#endregion
|
|
return executeOutWorkAreaPara;
|
}
|
|
public virtual ExecuteOutWorkAreaPara OutWorkAreaCreateTask(ref ExecuteOutWorkAreaPara executeOutWorkAreaPara, LogPara logPara)
|
{
|
//任务
|
var transport = executeOutWorkAreaPara.TransportList.FirstOrDefault();
|
|
//添加任务
|
var sqlResult = BLLCreator.Create<DapperBLL<TN_WM_TASKEntity>>().Add(new TN_WM_TASKEntity
|
{
|
CN_S_TASK_NO = transport.CN_S_TASK_NO,
|
CN_S_TRAY_CODE = transport.CN_S_CIR_OBJ_CODE,
|
CN_S_START_BIT = transport.CN_S_START_BIT,
|
CN_S_END_BIT = transport.CN_S_END_BIT,
|
//CN_S_PRO_CODE = transport.CN_S_PRO_CODE,
|
CN_S_STATE = transport.CN_S_STATE,
|
CN_S_BF_TASK_NO = transport.CN_S_BF_TASK_NO,
|
CN_S_AF_TASK_NO = transport.CN_S_AF_TASK_NO,
|
CN_S_STOCK_CODE = transport.CN_S_STOCK_CODE,
|
CN_S_START_AREA = transport.CN_S_START_AREA,
|
CN_S_END_AREA = transport.CN_S_END_AREA,
|
CN_N_PRIORITY = transport.CN_N_PRIORITY,
|
CN_S_CREATOR = transport.CN_S_CREATOR,
|
CN_S_CREATOR_BY = transport.CN_S_CREATOR_BY,
|
CN_T_CREATE = Convert.ToDateTime(transport.CN_T_CREATE),
|
CN_T_MODIFY = Convert.ToDateTime(transport.CN_T_MODIFY),
|
CN_S_REMARK = transport.CN_S_REMARK,
|
//CN_C_IS_AUTO = transport.CN_C_IS_AUTO,
|
CN_S_TASK_TYPE = transport.CN_S_TASK_TYPE,
|
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,
|
//CN_S_PROJECT_CODE = executeOutWorkAreaPara.OutWorkAreaEntity.projectCode
|
});
|
|
if (!sqlResult.Success)
|
{
|
executeOutWorkAreaPara.BasisResponse = BasisResponse.Error("创建任务失败!" + sqlResult.Msg);
|
}
|
return executeOutWorkAreaPara;
|
}
|
|
public virtual ExecuteOutWorkAreaPara OutWorkAreaProcedure(ref ExecuteOutWorkAreaPara executeOutWorkAreaPara, LogPara logPara)
|
{
|
var sqlResult = new OperateResult { Success = true };
|
|
//任务
|
var transport = executeOutWorkAreaPara.TransportList.FirstOrDefault();
|
|
//更新起点的任务号
|
if (transport.CN_S_START_AREA_TYPE.Equals("平库") || transport.CN_S_START_AREA_TYPE.Equals("立库"))
|
{
|
if (transport.CN_C_START_IS_CONTROL_QTY.Equals("Y"))
|
{
|
sqlResult = CreateDAL<TN_WM_LOCATION_EXTDAL>().UpdateLocationExtState(transport.CN_S_START_BIT, "", "", transport.CN_S_TASK_NO, null);
|
}
|
}
|
|
//更新结束点的任务号
|
if (transport.CN_S_END_AREA_TYPE.Equals("平库") || transport.CN_S_END_AREA_TYPE.Equals("立库"))
|
{
|
if (transport.CN_C_END_IS_CONTROL_QTY.Equals("Y") && executeOutWorkAreaPara.OutWorkAreaEntity.IsTransport.Equals("Y"))
|
{
|
sqlResult = CreateDAL<TN_WM_LOCATION_EXTDAL>().UpdateLocationExtState(transport.CN_S_END_BIT, "", "", transport.CN_S_TASK_NO, null);
|
}
|
}
|
|
if (!sqlResult.Success)
|
{
|
executeOutWorkAreaPara.BasisResponse = BasisResponse.Error("执行UpdateLocationExtState失败!" + sqlResult.Msg);
|
}
|
else
|
{
|
executeOutWorkAreaPara.TaskExecuteState = new TaskExecuteState().Ok(OutWorkAreaOkTaskResponse(executeOutWorkAreaPara.TransportList[0], executeOutWorkAreaPara.OutWorkAreaEntity.itemCode, executeOutWorkAreaPara.index), null);
|
}
|
return executeOutWorkAreaPara;
|
}
|
|
public virtual OkTask OutWorkAreaOkTaskResponse(TN_WM_TRANSPORT_TASKEntity trans, string itemCode, int index)
|
{
|
if (trans.CN_S_START_AREA_TYPE == Constants.Area_Struc_LiuLiStock || trans.CN_S_START_AREA_TYPE == Constants.Area_Struc_DuiDieStock)
|
{
|
trans.CN_S_START_BIT += "_" + trans.CN_S_QTY_INDEX;
|
}
|
|
var okTask = new OkTask()
|
{
|
index = index,
|
taskNo = trans.CN_S_TASK_NO,
|
startStock = trans.CN_S_STOCK_CODE,
|
startArea = trans.CN_S_START_AREA,
|
startBit = trans.CN_S_START_BIT,
|
endStock = trans.CN_S_STOCK_CODE,
|
endArea = trans.CN_S_END_AREA,
|
endBit = trans.CN_S_END_BIT,
|
priority = trans.CN_N_PRIORITY,
|
trayCode = trans.CN_S_CIR_OBJ_CODE,
|
itemCode = itemCode
|
};
|
return okTask;
|
}
|
#endregion
|
|
|
public virtual string getName()
|
{
|
return "基础";
|
}
|
}
|
}
|