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 WmsApiBaseBLL : 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 InWorkAreaJX(List<InWorkAreaEntity> inWorkAreaEntitys)
|
{
|
var logPara = LogType.LogPara("入作业区");
|
Log.Detail(logPara, "InWorkArea接口请求参数:" + JsonConvert.SerializeObject(inWorkAreaEntitys));
|
var result = InWorkArea(inWorkAreaEntitys, logPara);
|
Log.Detail(logPara, "InWorkArea接口返回结果:" + JsonConvert.SerializeObject(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
|
{
|
//if (result.errorCode == "1001")
|
//{
|
// response.failList.Add(result.TaskExecuteState.Error(i, "1001", result.BasisResponse.Message).FailTask);
|
//}
|
//else
|
//{
|
response.failList.Add(new TaskExecuteState().Error(i, result.errorCode, result.BasisResponse.Message).FailTask);
|
// }
|
//入库转运锁定起点的,如果执行不成功则解锁
|
if (result.RollbackLocations.Count > 0)
|
{
|
foreach (string sLocation in result.RollbackLocations)
|
{
|
OperateResult sqlResult = BLLCreator.Create<TN_WM_LOCATION_EXTBLL>().UpdateState(sLocation, Constants.Location_State_Normal, "");
|
if (sqlResult.Success && sqlResult.AffectedRows > 0)
|
{
|
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);
|
}
|
else
|
{
|
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);
|
Log.Detail(logPara, "入库转运锁定起点的,如果执行不成功则解锁,但解锁失败,货位为" + sLocation + "," + sqlResult.Msg + "," + sqlResult.AffectedRows.ToString());
|
}
|
}
|
}
|
}
|
}
|
|
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 };
|
executeInWorkAreaPara.errorCode = "1000";
|
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);
|
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.InWorkAreaEntity.projectCode != "ys001")
|
{
|
executeInWorkAreaPara.EndLocationExt = BLLCreator.Create<TN_WM_LOCATION_EXTBLL>().GetModel(" where CN_S_LOCATION_CODE = '" + executeInWorkAreaPara.InWorkAreaEntity.endBit.Trim() + "'").FirstOrDefault();
|
|
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(),
|
projectCode = executeInWorkAreaPara.InWorkAreaEntity.projectCode,
|
logicAreaCode = logicAreaCode,
|
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);
|
return executeOutWorkAreaPara;
|
}
|
//创建转运任务
|
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_S_REMARK = executeOutWorkAreaPara.OutWorkAreaEntity.remark,
|
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_EXT3 = 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_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_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_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("出作业区");
|
Log.Detail(logPara, "OutWorkArea接口请求参数:" + JsonConvert.SerializeObject(outWorkAreaList));
|
var result = JsonConvert.SerializeObject(OutWorkArea(outWorkAreaList, logPara));
|
Log.Detail(logPara, "OutWorkArea接口返回参数:" + JsonConvert.SerializeObject(result));
|
return result;
|
}
|
public virtual ExternalResponse OutWorkAreaJX(List<OutWorkAreaEntity> outWorkAreaList)
|
{
|
var logPara = LogType.LogPara("出作业区");
|
Log.Detail(logPara, "OutWorkArea接口请求参数:" + JsonConvert.SerializeObject(outWorkAreaList));
|
var result = OutWorkArea(outWorkAreaList, logPara);
|
Log.Detail(logPara, "OutWorkArea接口返回参数:" + JsonConvert.SerializeObject(result));
|
return result;
|
}
|
public virtual ExternalResponse OutWorkArea(List<OutWorkAreaEntity> outWorkAreaList, LogPara logPara)
|
{
|
|
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";
|
}
|
var result = OutWorkArea(outWorkAreaList[i], logPara);
|
//Log.Detail(logPara, "result内容:" + JsonConvert.SerializeObject(result));
|
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.errorCode, result.BasisResponse.Message).FailTask);
|
if (result.RollLocations.Count > 0)
|
{
|
foreach (string sLocation in result.RollLocations)
|
{
|
OperateResult sqlResult = BLLCreator.Create<TN_WM_LOCATION_EXTBLL>().UpdateState(sLocation, Constants.Location_State_Normal, "");
|
if (sqlResult.Success && sqlResult.AffectedRows > 0)
|
{
|
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);
|
}
|
else
|
{
|
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);
|
Log.Detail(logPara, "入库转运锁定起点的,如果执行不成功则解锁,但解锁失败,货位为" + sLocation + "," + sqlResult.Msg + "," + sqlResult.AffectedRows.ToString());
|
}
|
}
|
}
|
}
|
}
|
//Log.Detail(logPara, "response结果:" + JsonConvert.SerializeObject(response));
|
var curResult = response.failList.Any() ? response.Error(null, string.Empty, outWorkAreaList) : response.Ok(null, outWorkAreaList);
|
|
return curResult;
|
}
|
|
public virtual ExecuteOutWorkAreaPara OutWorkArea(OutWorkAreaEntity outWorkAreaEntity, LogPara logPara)
|
{
|
var executeOutWorkAreaPara = new ExecuteOutWorkAreaPara { OutWorkAreaEntity = outWorkAreaEntity };
|
executeOutWorkAreaPara.errorCode = "1000";
|
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);
|
if (!executeOutWorkAreaPara.BasisResponse.Success) return executeOutWorkAreaPara;
|
|
if (!executeOutWorkAreaPara.TransportList.Any())
|
{
|
OutWorkAreaOutAss(ref executeOutWorkAreaPara, logPara);
|
if (!executeOutWorkAreaPara.BasisResponse.Success)
|
{
|
executeOutWorkAreaPara.errorCode = "1002";
|
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
|
};
|
executeOutWorkAreaPara.TransportList.Add(entity);
|
}
|
if (string.IsNullOrEmpty(executeOutWorkAreaPara.OutWorkAreaEntity.endBit))
|
{
|
if (!InWorkAreaOutAss(ref executeOutWorkAreaPara, logPara).BasisResponse.Success)
|
{
|
executeOutWorkAreaPara.errorCode = "1002";
|
return executeOutWorkAreaPara;
|
}
|
}
|
UseTransaction(trans =>
|
{
|
OutWorkAreaCreateTask(ref executeOutWorkAreaPara, logPara);
|
OutWorkAreaProcedure(ref executeOutWorkAreaPara, logPara);
|
if (executeOutWorkAreaPara.OutWorkAreaEntity.needCreateAMSTask == "Y")
|
{
|
OperateResult re = new OtherSysApi().SendAmsCreateTask(executeOutWorkAreaPara.TransportList[0]);
|
if (!re.Success)
|
{
|
throw new Exception("SendAmsCreateTask异常:" + re.Msg);
|
}
|
}
|
});
|
}
|
catch (Exception ex)
|
{
|
executeOutWorkAreaPara.BasisResponse = BasisResponse.Error("OutWorkArea 方法异常:" + 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.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出库任务号异常!");
|
}
|
|
//获取作业区列表
|
//if (executeOutWorkAreaPara.OutWorkAreaEntity.projectCode != ProjectCodes.TaiZhouLongJi)
|
//{
|
executeOutWorkAreaPara.WorkAreaProEntitys = BLLCreator.Create<TaskTransferBLL>().GetOutWorkPosition(executeOutWorkAreaPara);
|
if (!executeOutWorkAreaPara.WorkAreaProEntitys.Any())
|
{
|
executeOutWorkAreaPara.BasisResponse = BasisResponse.Error(string.Format("未获取到当前库区:{0}货位:{1}下的作业路径!", executeOutWorkAreaPara.OutWorkAreaEntity.endArea, executeOutWorkAreaPara.OutWorkAreaEntity.endBit));
|
return executeOutWorkAreaPara;
|
}
|
// }
|
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;
|
|
|
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_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_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
|
});
|
|
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"))
|
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
|
|
#region 完工回报
|
|
public virtual string ExecuteState(ExecuteStateDto executeState)
|
{
|
var logPara = LogType.LogPara("完工回报");
|
var res = ExecuteState(executeState, logPara);
|
return JsonConvert.SerializeObject(res);
|
}
|
|
public virtual string ExecuteState(List<ExecuteStateDto> executeStates)
|
{
|
var logPara = LogType.LogPara("完工回报");
|
var res = new CommInfResult();
|
foreach (var executeState in executeStates)
|
{
|
res = ExecuteState(executeState, logPara);
|
if (!res.success) return JsonConvert.SerializeObject(new { Success = res.success, Msg = res.errMsg });
|
}
|
return JsonConvert.SerializeObject(new { Success = res.success, Message = res.errMsg });
|
}
|
public virtual CommInfResult ExecuteState(ExecuteStateDto executeState, LogPara logPara)
|
{
|
Log.Detail(logPara, "ExecuteState接口请求参数:" + JsonConvert.SerializeObject(executeState));
|
|
var result = new SqlExecuteResult();
|
var res = new CommInfResult();
|
try
|
{
|
var taskNo = executeState.taskNo;
|
var taskStateNo = executeState.stateNo;
|
var taskState = Constants.TaskStateList[taskStateNo];
|
//任务号不能为空
|
if (string.IsNullOrEmpty(taskNo) || taskStateNo == 0)
|
{
|
res.success = false;
|
res.errMsg = "失败,参数缺失!";
|
}
|
else
|
{
|
//执行事务
|
var resultNew = ExecuteState(taskNo, taskState, logPara);
|
if (resultNew.Success)
|
{
|
res.success = true;
|
}
|
else
|
{
|
res.success = false;
|
res.errMsg = resultNew.Msg;
|
}
|
}
|
}
|
catch (Exception ex)
|
{
|
res.success = false;
|
res.errMsg = "ExecuteState方法异常!" + ex.Message + ex.StackTrace;
|
}
|
|
Log.Detail(logPara, "ExecuteState接口返回参数:" + JsonConvert.SerializeObject(res));
|
return res;
|
}
|
|
public virtual OperateResult ExecuteState(string taskNo, string taskState, LogPara logPara)
|
{
|
var executeStatePara = ExecuteStateHandlePara(taskNo, taskState, logPara);
|
if (executeStatePara == null)
|
{
|
return OperateResult.Error("在任务表中未查询到该任务号信息");
|
}
|
var result = new OperateResult();
|
string project = getProjectCode();
|
switch (taskState)
|
{
|
case "执行中":
|
result = StartTask(executeStatePara, logPara);
|
break;
|
case "强制完成":
|
result = CompleteTask(executeStatePara, logPara);
|
break;
|
case "完成":
|
result = CompleteTask(executeStatePara, logPara);
|
break;
|
case "取消":
|
result = CancelTask(executeStatePara, logPara);
|
break;
|
case "空取":
|
result = BLLCreator.Create<TN_WM_TASKBLL>().EmptyFetchTask(executeStatePara);
|
break;
|
case "取货完成":
|
if (project == ProjectCodes.TaiZhouLongJi)
|
{
|
result = BLLCreator.Create<TN_WM_TASKBLL>().PickSuccLJ(executeStatePara, logPara);
|
}
|
else
|
{
|
result = BLLCreator.Create<TN_WM_TASKBLL>().PickSucc(executeStatePara, logPara);
|
}
|
break;
|
case "卸货完成":
|
if (project == ProjectCodes.TaiZhouLongJi)
|
{
|
result = BLLCreator.Create<TN_WM_TASKBLL>().UnloadingSuccLJ(executeStatePara, new Redis.ReisModel.RedisUserEntity(), logPara);
|
}
|
else
|
{
|
result = BLLCreator.Create<TN_WM_TASKBLL>().UnloadingSucc(executeStatePara, new Redis.ReisModel.RedisUserEntity(), logPara);
|
}
|
break;
|
}
|
|
return result;
|
}
|
#region 获取当前项目编号
|
|
/// <summary>
|
/// 获取当前项目编号
|
/// </summary>
|
/// <returns></returns>
|
public static string getProjectCode()
|
{
|
try
|
{
|
return System.Configuration.ConfigurationManager.AppSettings["projectCode"].ToString();
|
}
|
catch (Exception)
|
{
|
return "";
|
}
|
}
|
|
#endregion
|
public virtual ExecuteStateParaDto ExecuteStateHandlePara(string taskNo, string taskState, LogPara logPara)
|
{
|
var executeStatePara = new ExecuteStateParaDto();
|
|
//查询任务
|
executeStatePara.transportTask = CreateDAL<DapperDAL<TN_WM_TASKEntity>>().GetSingleEntity(new { CN_S_TASK_NO = taskNo });
|
|
if (executeStatePara.transportTask == null)
|
{
|
return null;
|
}
|
|
if (executeStatePara.transportTask.CN_S_START_CONTROL_INV == null) executeStatePara.transportTask.CN_S_START_CONTROL_INV = "N";
|
if (executeStatePara.transportTask.CN_S_END_CONTROL_INV == null) executeStatePara.transportTask.CN_S_END_CONTROL_INV = "N";
|
|
Log.Detail(logPara, LogDescribe.Content(executeStatePara.transportTask));
|
//起点货位是否绑定托盘
|
executeStatePara.startTrayLocation = CreateDAL<DapperDAL<TN_WM_B_TRAY_LOCATIONEntity>>().GetSingleEntity(new { CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_START_BIT, executeStatePara.transportTask.CN_S_TRAY_CODE });
|
//终点货位是否绑定托盘
|
executeStatePara.endTrayLocation = CreateDAL<DapperDAL<TN_WM_B_TRAY_LOCATIONEntity>>().GetSingleEntity(new { CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_END_BIT, executeStatePara.transportTask.CN_S_TRAY_CODE });
|
//起点货位是否绑定任务
|
executeStatePara.startIsCurrentTask = CreateDAL<DapperDAL<TN_WM_LOCATION_EXTEntity>>().GetSingleEntity(new { CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_START_BIT, CN_S_TASK_NO = taskNo });
|
//终点货位是否绑定任务
|
executeStatePara.endIsCurrentTask = CreateDAL<DapperDAL<TN_WM_LOCATION_EXTEntity>>().GetSingleEntity(new { CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_END_BIT, CN_S_TASK_NO = taskNo });
|
//托盘物料主表
|
executeStatePara.trayItemMsts = CreateDAL<DapperDAL<TN_WM_B_TRAY_ITEM_MSTEntity>>().GetList(new { executeStatePara.transportTask.CN_S_TRAY_CODE });
|
if (executeStatePara.trayItemMsts.Count > 0)
|
{
|
foreach (var trayItemMst in executeStatePara.trayItemMsts)
|
{
|
var item = CreateDAL<TN_WMS_ITEMDAL>().GetItemEntity(trayItemMst.CN_S_ITEM_CODE);
|
if (item != null)
|
trayItemMst.CN_F_INQTY = item.CN_F_NW;
|
trayItemMst.TrayItemDtlList = CreateDAL<DapperDAL<TN_WM_B_TRAY_ITEM_DTLEntity>>().GetList(new { CN_PARENT_GUID = trayItemMst.CN_GUID });
|
}
|
}
|
//起点库区
|
executeStatePara.startStockArea = CreateDAL<TN_AB_B_STOCK_AREADAL>().GetStockAreaEntity(executeStatePara.transportTask.CN_S_START_AREA.Trim());
|
//结束库区
|
executeStatePara.endStockArea = CreateDAL<TN_AB_B_STOCK_AREADAL>().GetStockAreaEntity(executeStatePara.transportTask.CN_S_END_AREA.Trim());
|
//任务状态
|
executeStatePara.taskState = taskState;
|
executeStatePara.UpHistory = new List<TN_WM_UP_HISTORYEntity>();
|
return executeStatePara;
|
}
|
|
public virtual OperateResult StartTask(ExecuteStateParaDto executeStatePara, LogPara logPara)
|
{
|
if (!executeStatePara.transportTask.CN_S_STATE.Equals(Constants.TaskState_NoExecuted))
|
return OperateResult.Error("请启动未执行的任务!");
|
return CreateDAL<DapperDAL<TN_WM_TASKEntity>>().Update(new
|
{
|
CN_S_MODIFY = "",
|
CN_S_MODIFY_BY = "",
|
CN_T_START = DateTime.Now,
|
CN_T_MODIFY = DateTime.Now,
|
CN_S_STATE = Constants.TaskState_Executing
|
}, new { CN_S_TASK_NO = executeStatePara.transportTask.CN_S_TASK_NO });
|
}
|
|
public virtual OperateResult CompleteTask(ExecuteStateParaDto executeStatePara, LogPara logPara)
|
{
|
var isControlStockQty = executeStatePara.trayItemMsts.Count > 0;
|
Log.Detail(logPara, "isControlStockQty: " + isControlStockQty);
|
|
#region 组合量表参数
|
|
//获取上架量=总量-分配量
|
//var trayInventory = CreateDAL<TN_WM_B_TRAY_ITEM_RELDAL>().GetTrayInventoryQty(executeStatePara.transportTask.CN_S_TRAY_CODE);
|
var addAreaQty = new List<TN_WM_B_AREA_QTYEntity>();
|
var addStockQty = new List<TN_WM_B_STOCK_QTYEntity>();
|
|
if (isControlStockQty)
|
{
|
foreach (var trayItemMst in executeStatePara.trayItemMsts)
|
{
|
foreach (var trayItemDtl in trayItemMst.TrayItemDtlList)
|
{
|
addAreaQty.Add(new TN_WM_B_AREA_QTYEntity()
|
{
|
CN_S_ITEM_CODE = trayItemMst.CN_S_ITEM_CODE,
|
CN_S_ITEM_NAME = trayItemMst.CN_S_ITEM_NAME,
|
CN_S_ITEM_STATE = trayItemMst.CN_S_ITEM_STATE,
|
CN_S_OWNER = trayItemMst.CN_S_OWNER,
|
CN_S_PRODUCTION_BATCH = trayItemMst.CN_S_PRODUCTION_BATCH,
|
CN_S_LOT_NO = trayItemDtl.CN_S_LOT_NO,
|
CN_F_QUANTITY = Convert.ToDecimal(trayItemDtl.CN_S_SERIAL_NO),//.CN_S_WEIGHT,//重量 Convert.ToDecimal(trayItemMst.CN_F_INQTY),//trayItemMst.CN_F_QUANTITY * trayItemMst.CN_S_WEIGHT,
|
CN_S_STOCK_CODE = executeStatePara.transportTask.CN_S_STOCK_CODE,
|
CN_F_PLANNED_QTY = trayItemMst.CN_F_INQTY,
|
CN_S_MODEL = trayItemMst.CN_S_MODEL,
|
CN_S_MEASURE_UNIT = trayItemMst.CN_S_MEASURE_UNIT,
|
CN_S_FIGURE_NO = trayItemDtl.CN_S_EXT1
|
});
|
|
addStockQty.Add(new TN_WM_B_STOCK_QTYEntity()
|
{
|
CN_S_ITEM_CODE = trayItemMst.CN_S_ITEM_CODE,
|
CN_S_ITEM_NAME = trayItemMst.CN_S_ITEM_NAME,
|
CN_S_ITEM_STATE = trayItemMst.CN_S_ITEM_STATE,
|
CN_S_OWNER = trayItemMst.CN_S_OWNER,
|
CN_S_PRODUCTION_BATCH = trayItemMst.CN_S_PRODUCTION_BATCH,
|
CN_S_LOT_NO = trayItemDtl.CN_S_LOT_NO,
|
CN_F_QUANTITY = Convert.ToDecimal(trayItemDtl.CN_S_SERIAL_NO),//CN_S_WEIGHT,//trayItemMst.CN_F_QUANTITY * trayItemMst.CN_S_WEIGHT,
|
CN_S_STOCK_CODE = executeStatePara.transportTask.CN_S_STOCK_CODE,
|
CN_S_STOCK_AREA = executeStatePara.transportTask.CN_S_END_AREA,
|
CN_F_PLANNED_QTY = trayItemMst.CN_F_INQTY,
|
CN_S_MODEL = trayItemMst.CN_S_MODEL,
|
CN_S_FIGURE_NO = trayItemDtl.CN_S_EXT1,
|
CN_S_MEASURE_UNIT = trayItemMst.CN_S_MEASURE_UNIT
|
});
|
}
|
}
|
Log.Detail(logPara, LogDescribe.Content(addAreaQty));
|
Log.Detail(logPara, LogDescribe.Content(addStockQty));
|
}
|
|
#endregion
|
|
return UseTransaction(trans =>
|
{
|
//更新任务状态
|
CreateDAL<DapperDAL<TN_WM_TASKEntity>>().Update(new
|
{
|
CN_S_MODIFY = "",
|
CN_S_MODIFY_BY = "",
|
CN_T_END = DateTime.Now,
|
CN_T_MODIFY = DateTime.Now,
|
CN_S_STATE = executeStatePara.taskState
|
}, new { executeStatePara.transportTask.CN_S_TASK_NO }, trans);
|
Log.Detail(logPara, "更新任务状态-任务号:" + executeStatePara.transportTask.CN_S_TASK_NO + "状态为:" + executeStatePara.taskState);
|
|
#region 入库 + 转运
|
|
if (executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("入库") || executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("转运"))
|
{
|
var trayLocation = new TN_WM_B_TRAY_LOCATIONEntity()
|
{
|
CN_GUID = Guid.NewGuid().ToString(),
|
CN_N_INDEX = 1,
|
CN_S_CREATOR = "",
|
CN_S_CREATOR_BY = "",
|
CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_END_BIT,
|
CN_S_STOCK_AREA = executeStatePara.transportTask.CN_S_END_AREA,
|
CN_S_STOCK_CODE = executeStatePara.transportTask.CN_S_STOCK_CODE,
|
CN_S_TRAY_CODE = executeStatePara.transportTask.CN_S_TRAY_CODE,
|
CN_T_CREATE = DateTime.Now
|
};
|
|
if (executeStatePara.startTrayLocation != null)
|
{
|
//解绑托盘与货位的关系
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_LOCATIONEntity>>().Delete(new
|
{
|
executeStatePara.transportTask.CN_S_TRAY_CODE,
|
CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_START_BIT
|
}, trans);
|
Log.Detail(logPara, "解绑任务的托盘和起点货位关联!");
|
|
#region 下架记录
|
|
if (executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("转运"))
|
{
|
CompleteTaskDownHistory(executeStatePara, logPara, trans);
|
}
|
|
if (executeStatePara.transportTask.CN_S_START_CONTROL_INV.Equals("Y") && executeStatePara.transportTask.CN_S_START_AREA != executeStatePara.transportTask.CN_S_END_AREA) //降低起点库存
|
{
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().ReduceAreaQty(addAreaQty, executeStatePara.transportTask.CN_S_START_AREA, logPara, trans);
|
}
|
|
#endregion
|
}
|
|
if (executeStatePara.endTrayLocation == null)
|
{
|
//添加托盘货位
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_LOCATIONEntity>>().Add(trayLocation, trans);
|
Log.Detail(logPara, "添加托盘货位关联,内容:" + LogDescribe.Content(trayLocation));
|
|
if (isControlStockQty)
|
{
|
#region 添加上架记录,升库存
|
|
CompleteTaskUpHistory(executeStatePara, logPara, trans);
|
|
|
if (string.IsNullOrEmpty(executeStatePara.transportTask.CN_S_END_CONTROL_INV))
|
{
|
trans.Rollback();
|
return;
|
}
|
|
if (executeStatePara.transportTask.CN_S_END_CONTROL_INV.Equals("Y") && executeStatePara.transportTask.CN_S_START_AREA != executeStatePara.transportTask.CN_S_END_AREA) //如果起点和终点在一个库区,不增加
|
{
|
//按未入库量增加结束库区量
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().AddAreaQty(addAreaQty, executeStatePara.transportTask.CN_S_END_AREA, logPara, trans);
|
if (!executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("转运"))
|
{
|
//升仓库库存
|
CreateDAL<TN_WM_B_STOCK_QTYDAL>().AddStockQty(addStockQty, trans);
|
Log.Detail(logPara, "增加仓库库存!");
|
}
|
}
|
|
#endregion
|
}
|
|
//终点
|
if (executeStatePara.endIsCurrentTask != null && executeStatePara.transportTask.CN_C_END_IS_CONTROL_QTY.Equals("Y"))
|
{
|
CreateDAL<TN_WM_TASKDAL>().UpdateState(executeStatePara.transportTask.CN_S_END_BIT, "正常", "满", "预入库锁定", trans);
|
Log.Detail(logPara, "更新预入库锁定的货位状态为正常、满,货位号:" + executeStatePara.transportTask.CN_S_END_BIT);
|
|
//货位状态变化
|
BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(executeStatePara.transportTask.CN_S_END_BIT, "预入库锁定", "正常", "状态回报入库完成-终点", "", "", "", executeStatePara.endStockArea.CN_S_STOCK_CODE, executeStatePara.endStockArea.CN_S_AREA_CODE, trans);
|
}
|
|
//起点
|
if (executeStatePara.transportTask.CN_C_START_IS_CONTROL_QTY.Equals("Y") && executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("转运"))
|
{
|
CreateDAL<TN_WM_TASKDAL>().UpdateState(executeStatePara.transportTask.CN_S_START_BIT, "正常", "空", "预出库锁定", trans);
|
Log.Detail(logPara, "更新预出库锁定的货位状态为正常、空,起点货位号:" + executeStatePara.transportTask.CN_S_START_BIT);
|
|
//货位状态变化
|
BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(executeStatePara.transportTask.CN_S_START_BIT, "预出库锁定", "正常", "状态回报转运完成-起点", "", "", "", executeStatePara.startStockArea.CN_S_STOCK_CODE, executeStatePara.startStockArea.CN_S_AREA_CODE, trans);
|
}
|
}
|
}
|
|
#endregion
|
|
#region 出库
|
|
if (executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("出库"))
|
{
|
if (executeStatePara.startTrayLocation != null)
|
{
|
BLLCreator.Create<TN_WM_B_TRAY_LOCATIONBLL>().Delete(executeStatePara.transportTask.CN_S_TRAY_CODE, executeStatePara.transportTask.CN_S_START_BIT, trans, logPara);
|
BLLCreator.Create<TN_WM_B_TRAY_ITEM_RELBLL>().Delete(" CN_S_TRAY_CODE='" + executeStatePara.transportTask.CN_S_TRAY_CODE + "' ", trans, logPara);
|
|
if (isControlStockQty)
|
{
|
#region 添加下架记录,降库存
|
|
CompleteTaskDownHistory(executeStatePara, logPara, trans);
|
|
if (executeStatePara.transportTask.CN_S_START_CONTROL_INV.Equals("Y"))
|
{
|
BLLCreator.Create<TN_WM_B_AREA_QTYBLL>().ReduceQtyAndAlloc(addAreaQty, executeStatePara.transportTask.CN_S_START_AREA, trans, logPara);
|
if (!executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("转运"))
|
BLLCreator.Create<TN_WM_B_STOCK_QTYBLL>().ReduceQtyAndAlloc(addStockQty, trans, logPara);
|
}
|
|
#endregion
|
}
|
|
if (executeStatePara.startIsCurrentTask != null && executeStatePara.transportTask.CN_C_START_IS_CONTROL_QTY.Equals("Y"))
|
{
|
BLLCreator.Create<TN_WM_TASKBLL>().UpdateState(executeStatePara.transportTask.CN_S_START_BIT, "正常", "空", "预出库锁定", trans, logPara);
|
BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(executeStatePara.transportTask.CN_S_START_BIT, "预出库锁定", "正常", "状态回报出库完成", "", "", "", executeStatePara.endStockArea.CN_S_STOCK_CODE, executeStatePara.endStockArea.CN_S_AREA_CODE, trans);
|
}
|
}
|
}
|
|
#endregion
|
|
#region 上架
|
|
if (executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("上架"))
|
{
|
var trayLocation = new TN_WM_B_TRAY_LOCATIONEntity()
|
{
|
CN_GUID = Guid.NewGuid().ToString(),
|
CN_N_INDEX = 1,
|
CN_S_CREATOR = "",
|
CN_S_CREATOR_BY = "",
|
CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_END_BIT,
|
CN_S_STOCK_AREA = executeStatePara.transportTask.CN_S_END_AREA,
|
CN_S_STOCK_CODE = executeStatePara.transportTask.CN_S_STOCK_CODE,
|
CN_S_TRAY_CODE = executeStatePara.transportTask.CN_S_TRAY_CODE,
|
CN_T_CREATE = DateTime.Now
|
};
|
|
if (executeStatePara.endTrayLocation == null)
|
{
|
//添加托盘货位
|
var addResult = BLLCreator.Create<TN_WM_B_TRAY_LOCATIONBLL>().Add(trayLocation, trans, logPara);
|
Log.Detail(logPara, "添加托盘货位结果:" + JsonConvert.SerializeObject(addResult));
|
//CreateDAL<DapperDAL<TN_WM_B_TRAY_LOCATIONEntity>>().Add(trayLocation, trans);
|
|
if (isControlStockQty)
|
{
|
//获取配置是否启用收货区
|
var strategyValue = BLLCreator.Create<DapperBaseBLL>().GetStrategy(executeStatePara.transportTask.CN_S_STOCK_CODE, StrategyKey.AreaQtyReceiveGood);
|
|
#region 添加上架记录,升库存
|
|
CompleteTaskUpHistory(executeStatePara, logPara, trans);
|
|
if (string.IsNullOrEmpty(executeStatePara.transportTask.CN_S_END_CONTROL_INV))
|
{
|
trans.Rollback();
|
return;
|
}
|
|
//启用收货区
|
if (strategyValue.Equals(Constants.Y))
|
{
|
Log.Detail(logPara, "启用收货区!");
|
|
//降低起始库区(收货区)库存
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().ReduceAreaQty(addAreaQty, executeStatePara.transportTask.CN_S_START_AREA, logPara, trans);
|
if (executeStatePara.transportTask.CN_S_END_CONTROL_INV.Equals("Y"))
|
{
|
//增加结束库区量
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().AddAreaQty(addAreaQty, executeStatePara.transportTask.CN_S_END_AREA, logPara, trans);
|
}
|
}
|
else
|
{
|
if (executeStatePara.transportTask.CN_S_END_CONTROL_INV.Equals("Y"))
|
{
|
//按未入库量增加结束库区量
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().AddAreaQty(addAreaQty, executeStatePara.transportTask.CN_S_END_AREA, logPara, trans);
|
if (!executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("转运"))
|
{
|
//升仓库库存
|
CreateDAL<TN_WM_B_STOCK_QTYDAL>().AddStockQty(addStockQty, trans);
|
Log.Detail(logPara, "增加仓库量表完成!");
|
}
|
}
|
}
|
|
#endregion
|
}
|
|
if (executeStatePara.endIsCurrentTask != null && executeStatePara.transportTask.CN_C_END_IS_CONTROL_QTY.Equals("Y"))
|
{
|
CreateDAL<TN_WM_TASKDAL>().UpdateState(executeStatePara.transportTask.CN_S_END_BIT, "正常", "满", "预入库锁定", trans);
|
Log.Detail(logPara, "更新预入库锁定的货位状态为正常、满,终点货位号:" + executeStatePara.transportTask.CN_S_END_BIT);
|
|
////更新终点货位的任务号
|
//CreateDAL<DapperDAL<TN_WM_LOCATION_EXTEntity>>().Update(new { CN_S_TASK_NO = "" }, new { CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_END_BIT }, trans);
|
//Log.Detail(logPara, "更新终点货位" + executeStatePara.transportTask.CN_S_END_BIT + "的绑定任务号为空!");
|
|
//货位状态变化
|
BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(executeStatePara.transportTask.CN_S_END_BIT, "预入库锁定", "正常", "状态回报上架完成-终点", "", "", "", executeStatePara.endStockArea.CN_S_STOCK_CODE, executeStatePara.endStockArea.CN_S_AREA_CODE, trans);
|
}
|
|
if (executeStatePara.transportTask.CN_C_START_IS_CONTROL_QTY.Equals("Y"))
|
{
|
//解绑托盘与货位的关系
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_LOCATIONEntity>>().Delete(new
|
{
|
executeStatePara.transportTask.CN_S_TRAY_CODE,
|
CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_START_BIT
|
}, trans);
|
Log.Detail(logPara, "解绑任务的托盘和起点货位" + executeStatePara.transportTask.CN_S_START_BIT + "关联!");
|
|
CreateDAL<TN_WM_TASKDAL>().UpdateState(executeStatePara.transportTask.CN_S_START_BIT, "正常", "空", "预出库锁定", trans);
|
Log.Detail(logPara, "更新预出库锁定的货位状态为正常、空,起点货位号:" + executeStatePara.transportTask.CN_S_START_BIT);
|
|
////更新起点货位的任务号
|
//CreateDAL<DapperDAL<TN_WM_LOCATION_EXTEntity>>().Update(new { CN_S_TASK_NO = "" }, new { CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_START_BIT });
|
//Log.Detail(logPara, "更新起点货位" + executeStatePara.transportTask.CN_S_START_BIT + "的绑定任务号为空!");
|
|
//货位状态变化
|
BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(executeStatePara.transportTask.CN_S_START_BIT, "预出库锁定", "正常", "状态回报上架完成-起点", "", "", "", executeStatePara.startStockArea.CN_S_STOCK_CODE, executeStatePara.startStockArea.CN_S_AREA_CODE, trans);
|
}
|
}
|
}
|
|
#endregion
|
|
#region 下架/叫料
|
|
if (executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("下架") || executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("叫料"))
|
{
|
if (executeStatePara.startTrayLocation != null)
|
{
|
BLLCreator.Create<TN_WM_B_TRAY_LOCATIONBLL>().Delete(executeStatePara.transportTask.CN_S_TRAY_CODE, executeStatePara.transportTask.CN_S_START_BIT, trans, logPara);
|
if (executeStatePara.endStockArea.CN_C_IS_CONTROL_QTY.Equals("N"))
|
{
|
BLLCreator.Create<TN_WM_B_TRAY_ITEM_RELBLL>().Delete(" CN_S_TRAY_CODE='" + executeStatePara.transportTask.CN_S_TRAY_CODE + "' ", trans, logPara);
|
}
|
|
if (isControlStockQty)
|
{
|
#region 添加下架记录,降库存
|
|
CompleteTaskDownHistory(executeStatePara, logPara, trans);
|
|
//获取配置是否启用收货区
|
var strategyValue = BLLCreator.Create<DapperBaseBLL>().GetStrategy(executeStatePara.transportTask.CN_S_STOCK_CODE, StrategyKey.AreaQtyDeliverGood);
|
|
if (strategyValue.Equals(Constants.Y))
|
{
|
if (executeStatePara.transportTask.CN_S_START_CONTROL_INV.Equals("Y"))
|
{
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().ReduceAreaQty(addAreaQty, executeStatePara.transportTask.CN_S_START_AREA, logPara, trans);
|
}
|
|
//增加终点库区(收货区)库存
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().AddAreaQty(addAreaQty, executeStatePara.transportTask.CN_S_END_AREA, logPara, trans);
|
}
|
else
|
{
|
if (executeStatePara.transportTask.CN_S_START_CONTROL_INV.Equals("Y"))
|
{
|
BLLCreator.Create<TN_WM_B_AREA_QTYBLL>().ReduceQtyAndAlloc(addAreaQty, executeStatePara.transportTask.CN_S_START_AREA, trans, logPara);
|
if (!executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("转运"))
|
BLLCreator.Create<TN_WM_B_STOCK_QTYBLL>().ReduceQtyAndAlloc(addStockQty, trans, logPara);
|
}
|
}
|
|
#endregion
|
}
|
|
if (executeStatePara.startIsCurrentTask != null && executeStatePara.transportTask.CN_C_START_IS_CONTROL_QTY.Equals("Y"))
|
{
|
BLLCreator.Create<TN_WM_TASKBLL>().UpdateState(executeStatePara.transportTask.CN_S_START_BIT, "正常", "空", "预出库锁定", trans, logPara);
|
BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(executeStatePara.transportTask.CN_S_START_BIT, "预出库锁定", "正常", "状态回报下架完成-起点", "", "", "", executeStatePara.startStockArea.CN_S_STOCK_CODE, executeStatePara.startStockArea.CN_S_AREA_CODE, trans);
|
}
|
|
if (executeStatePara.transportTask.CN_C_END_IS_CONTROL_QTY.Equals("Y"))
|
{
|
var trayLocation = new TN_WM_B_TRAY_LOCATIONEntity()
|
{
|
CN_GUID = Guid.NewGuid().ToString(),
|
CN_N_INDEX = 1,
|
CN_S_CREATOR = "",
|
CN_S_CREATOR_BY = "",
|
CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_END_BIT,
|
CN_S_STOCK_AREA = executeStatePara.transportTask.CN_S_END_AREA,
|
CN_S_STOCK_CODE = executeStatePara.transportTask.CN_S_STOCK_CODE,
|
CN_S_TRAY_CODE = executeStatePara.transportTask.CN_S_TRAY_CODE,
|
CN_T_CREATE = DateTime.Now
|
};
|
//添加托盘货位
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_LOCATIONEntity>>().Add(trayLocation, trans);
|
|
CreateDAL<TN_WM_TASKDAL>().UpdateState(executeStatePara.transportTask.CN_S_END_BIT, "正常", "满", "预入库锁定", trans);
|
|
Log.Detail(logPara, "更新预入库锁定的货位状态为正常、满,结束货位号:" + executeStatePara.transportTask.CN_S_END_BIT);
|
|
////更新终点货位的任务号
|
//CreateDAL<DapperDAL<TN_WM_LOCATION_EXTEntity>>().Update(new { CN_S_TASK_NO = "" }, new { CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_END_BIT });
|
//Log.Detail(logPara, "更新终点货位" + executeStatePara.transportTask.CN_S_END_BIT + "的绑定任务号为空!");
|
|
//货位状态变化
|
BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(executeStatePara.transportTask.CN_S_END_BIT, "预入库锁定", "正常", "状态回报下架完成-终点", "", "", "", executeStatePara.endStockArea.CN_S_STOCK_CODE, executeStatePara.endStockArea.CN_S_AREA_CODE, trans);
|
}
|
}
|
}
|
|
#endregion
|
|
#region 空托入(上架)
|
if (executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("空托入"))
|
{
|
Log.Detail(logPara, "开始执行空托入!");
|
var trayLocation = new TN_WM_B_TRAY_LOCATIONEntity()
|
{
|
CN_GUID = Guid.NewGuid().ToString(),
|
CN_N_INDEX = 1,
|
CN_S_CREATOR = "",
|
CN_S_CREATOR_BY = "",
|
CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_END_BIT,
|
CN_S_STOCK_AREA = executeStatePara.transportTask.CN_S_END_AREA,
|
CN_S_STOCK_CODE = executeStatePara.transportTask.CN_S_STOCK_CODE,
|
CN_S_TRAY_CODE = executeStatePara.transportTask.CN_S_TRAY_CODE,
|
CN_T_CREATE = DateTime.Now
|
};
|
Log.Detail(logPara, "endTrayLocation: " + JsonConvert.SerializeObject(executeStatePara.endTrayLocation));
|
if (executeStatePara.endTrayLocation == null)
|
{
|
//添加托盘货位
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_LOCATIONEntity>>().Add(trayLocation, trans);
|
|
if (isControlStockQty)
|
{
|
//获取配置是否启用收货区
|
var strategyValue = BLLCreator.Create<DapperBaseBLL>().GetStrategy(executeStatePara.transportTask.CN_S_STOCK_CODE, StrategyKey.AreaQtyReceiveGood);
|
|
#region 添加上架记录,升库存
|
|
CompleteTaskUpHistory(executeStatePara, logPara, trans);
|
|
if (string.IsNullOrEmpty(executeStatePara.transportTask.CN_S_END_CONTROL_INV))
|
{
|
trans.Rollback();
|
return;
|
}
|
|
//启用收货区
|
if (strategyValue.Equals(Constants.Y))
|
{
|
Log.Detail(logPara, "启用收货区!");
|
|
//降低起始库区(收货区)库存
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().ReduceAreaQty(addAreaQty, executeStatePara.transportTask.CN_S_START_AREA, logPara, trans);
|
if (executeStatePara.transportTask.CN_S_END_CONTROL_INV.Equals("Y"))
|
{
|
//增加结束库区量
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().AddAreaQty(addAreaQty, executeStatePara.transportTask.CN_S_END_AREA, logPara, trans);
|
}
|
}
|
else
|
{
|
if (executeStatePara.transportTask.CN_S_END_CONTROL_INV.Equals("Y"))
|
{
|
//按未入库量增加结束库区量
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().AddAreaQty(addAreaQty, executeStatePara.transportTask.CN_S_END_AREA, logPara, trans);
|
if (!executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("转运"))
|
{
|
//升仓库库存
|
CreateDAL<TN_WM_B_STOCK_QTYDAL>().AddStockQty(addStockQty, trans);
|
Log.Detail(logPara, "增加仓库量表完成!");
|
}
|
}
|
}
|
|
#endregion
|
}
|
|
if (executeStatePara.endIsCurrentTask != null && executeStatePara.transportTask.CN_C_END_IS_CONTROL_QTY.Equals("Y"))
|
{
|
CreateDAL<TN_WM_TASKDAL>().UpdateState(executeStatePara.transportTask.CN_S_END_BIT, "正常", "满", "预入库锁定", trans);
|
Log.Detail(logPara, "更新预入库锁定的货位状态为正常、满,终点货位号:" + executeStatePara.transportTask.CN_S_END_BIT);
|
|
////更新终点货位的任务号
|
//CreateDAL<DapperDAL<TN_WM_LOCATION_EXTEntity>>().Update(new { CN_S_TASK_NO = "" }, new { CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_END_BIT });
|
//Log.Detail(logPara, "更新终点货位" + executeStatePara.transportTask.CN_S_END_BIT + "的绑定任务号为空!");
|
|
//货位状态变化
|
BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(executeStatePara.transportTask.CN_S_END_BIT, "预入库锁定", "正常", "状态回报上架完成-终点", "", "", "", executeStatePara.endStockArea.CN_S_STOCK_CODE, executeStatePara.endStockArea.CN_S_AREA_CODE, trans);
|
}
|
|
if (executeStatePara.transportTask.CN_C_START_IS_CONTROL_QTY.Equals("Y"))
|
{
|
//解绑托盘与货位的关系
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_LOCATIONEntity>>().Delete(new
|
{
|
executeStatePara.transportTask.CN_S_TRAY_CODE,
|
CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_START_BIT
|
}, trans);
|
Log.Detail(logPara, "解绑任务的托盘和起点货位关联!");
|
|
CreateDAL<TN_WM_TASKDAL>().UpdateState(executeStatePara.transportTask.CN_S_START_BIT, "正常", "空", "预出库锁定", trans);
|
Log.Detail(logPara, "更新预出库锁定的货位状态为正常、空,起点货位号:" + executeStatePara.transportTask.CN_S_START_BIT);
|
|
////更新起点货位的任务号
|
//CreateDAL<DapperDAL<TN_WM_LOCATION_EXTEntity>>().Update(new { CN_S_TASK_NO = "" }, new { CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_START_BIT });
|
//Log.Detail(logPara, "更新起点货位" + executeStatePara.transportTask.CN_S_START_BIT + "的绑定任务号为空!");
|
|
//货位状态变化
|
BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(executeStatePara.transportTask.CN_S_START_BIT, "预出库锁定", "正常", "状态回报上架完成-起点", "", "", "", executeStatePara.startStockArea.CN_S_STOCK_CODE, executeStatePara.startStockArea.CN_S_AREA_CODE, trans);
|
}
|
}
|
}
|
#endregion
|
|
#region 空托出(下架)
|
if (executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("空托出"))
|
{
|
Log.Detail(logPara, "开始执行空托出!");
|
Log.Detail(logPara, "startTrayLocation: " + JsonConvert.SerializeObject(executeStatePara.startTrayLocation));
|
if (executeStatePara.startTrayLocation != null)
|
{
|
//解绑托盘与货位的关系
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_LOCATIONEntity>>().Delete(new
|
{
|
executeStatePara.transportTask.CN_S_TRAY_CODE,
|
CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_START_BIT
|
}, trans);
|
Log.Detail(logPara, "解绑任务的托盘和起点货位关联!");
|
|
////删除托盘产品关联
|
//CreateDAL<TN_WM_B_TRAY_ITEM_RELDAL>().Delete(" CN_S_TRAY_CODE='" + executeStatePara.transportTask.CN_S_TRAY_CODE + "' ");
|
//Log.Detail(logPara, "删除当前任务的托盘物料关联!");
|
|
if (isControlStockQty)
|
{
|
#region 添加下架记录,降库存
|
|
CompleteTaskDownHistory(executeStatePara, logPara, trans);
|
|
//获取配置是否启用收货区
|
var strategyValue = BLLCreator.Create<DapperBaseBLL>().GetStrategy(executeStatePara.transportTask.CN_S_STOCK_CODE, StrategyKey.AreaQtyDeliverGood);
|
|
if (strategyValue.Equals(Constants.Y))
|
{
|
if (executeStatePara.transportTask.CN_S_START_CONTROL_INV.Equals("Y"))
|
{
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().ReduceAreaQty(addAreaQty, executeStatePara.transportTask.CN_S_START_AREA, logPara, trans);
|
}
|
|
//增加终点库区(收货区)库存
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().AddAreaQty(addAreaQty, executeStatePara.transportTask.CN_S_END_AREA, logPara, trans);
|
}
|
else
|
{
|
if (executeStatePara.transportTask.CN_S_START_CONTROL_INV.Equals("Y"))
|
{
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().ReduceAreaQty(addAreaQty, executeStatePara.transportTask.CN_S_START_AREA, logPara, trans);
|
if (!executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("转运"))
|
{
|
//降低仓库库存
|
CreateDAL<TN_WM_B_STOCK_QTYDAL>().ReduceStockQty(addStockQty, trans);
|
Log.Detail(logPara, "降低仓库量表完成!");
|
}
|
}
|
}
|
|
#endregion
|
}
|
|
if (executeStatePara.startIsCurrentTask != null && executeStatePara.transportTask.CN_C_START_IS_CONTROL_QTY.Equals("Y"))
|
{
|
CreateDAL<TN_WM_TASKDAL>().UpdateState(executeStatePara.transportTask.CN_S_START_BIT, "正常", "空", "预出库锁定", trans);
|
Log.Detail(logPara, "更新预出库锁定的货位状态为正常、空,起始货位号:" + executeStatePara.transportTask.CN_S_START_BIT);
|
|
////更新起点货位的任务号
|
//CreateDAL<DapperDAL<TN_WM_LOCATION_EXTEntity>>().Update(new { CN_S_TASK_NO = "" }, new { CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_START_BIT });
|
//Log.Detail(logPara, "更新起点货位" + executeStatePara.transportTask.CN_S_START_BIT + "的绑定任务号为空!");
|
|
//货位状态变化
|
BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(executeStatePara.transportTask.CN_S_START_BIT, "预出库锁定", "正常", "状态回报下架完成-起点", "", "", "", executeStatePara.startStockArea.CN_S_STOCK_CODE, executeStatePara.startStockArea.CN_S_AREA_CODE, trans);
|
}
|
|
if (executeStatePara.transportTask.CN_C_END_IS_CONTROL_QTY.Equals("Y"))
|
{
|
var trayLocation = new TN_WM_B_TRAY_LOCATIONEntity()
|
{
|
CN_GUID = Guid.NewGuid().ToString(),
|
CN_N_INDEX = 1,
|
CN_S_CREATOR = "",
|
CN_S_CREATOR_BY = "",
|
CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_END_BIT,
|
CN_S_STOCK_AREA = executeStatePara.transportTask.CN_S_END_AREA,
|
CN_S_STOCK_CODE = executeStatePara.transportTask.CN_S_STOCK_CODE,
|
CN_S_TRAY_CODE = executeStatePara.transportTask.CN_S_TRAY_CODE,
|
CN_T_CREATE = DateTime.Now
|
};
|
////添加托盘货位
|
//CreateDAL<DapperDAL<TN_WM_B_TRAY_LOCATIONEntity>>().Add(trayLocation, trans);
|
|
CreateDAL<TN_WM_TASKDAL>().UpdateState(executeStatePara.transportTask.CN_S_END_BIT, "正常", "空", "预入库锁定", trans);
|
Log.Detail(logPara, "更新预入库锁定的货位状态为正常、满,结束货位号:" + executeStatePara.transportTask.CN_S_END_BIT);
|
|
////更新终点货位的任务号
|
//CreateDAL<DapperDAL<TN_WM_LOCATION_EXTEntity>>().Update(new { CN_S_TASK_NO = "" }, new { CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_END_BIT });
|
//Log.Detail(logPara, "更新终点货位" + executeStatePara.transportTask.CN_S_END_BIT + "的绑定任务号为空!");
|
|
//货位状态变化
|
BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(executeStatePara.transportTask.CN_S_END_BIT, "预入库锁定", "正常", "状态回报下架完成-终点", "", "", "", executeStatePara.endStockArea.CN_S_STOCK_CODE, executeStatePara.endStockArea.CN_S_AREA_CODE, trans);
|
}
|
}
|
}
|
#endregion
|
|
#region 移库
|
|
if (executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("移库"))
|
{
|
var trayLocation = new TN_WM_B_TRAY_LOCATIONEntity()
|
{
|
CN_GUID = Guid.NewGuid().ToString(),
|
CN_N_INDEX = 1,
|
CN_S_CREATOR = "",
|
CN_S_CREATOR_BY = "",
|
CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_END_BIT,
|
CN_S_STOCK_AREA = executeStatePara.transportTask.CN_S_END_AREA,
|
CN_S_STOCK_CODE = executeStatePara.transportTask.CN_S_STOCK_CODE,
|
CN_S_TRAY_CODE = executeStatePara.transportTask.CN_S_TRAY_CODE,
|
CN_T_CREATE = DateTime.Now
|
};
|
|
if (executeStatePara.startTrayLocation != null)
|
{
|
//解绑托盘与货位的关系
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_LOCATIONEntity>>().Delete(new
|
{
|
executeStatePara.transportTask.CN_S_TRAY_CODE,
|
CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_START_BIT
|
}, trans);
|
Log.Detail(logPara, "解绑任务的托盘和起点货位关联!");
|
}
|
|
if (executeStatePara.endTrayLocation == null)
|
{
|
//添加托盘货位
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_LOCATIONEntity>>().Add(trayLocation, trans);
|
Log.Detail(logPara, "添加托盘货位关联,内容:" + LogDescribe.Content(trayLocation));
|
|
if (isControlStockQty)
|
{
|
#region 下架记录
|
CompleteTaskDownHistory(executeStatePara, logPara, trans);
|
#endregion
|
|
#region 上架记录
|
|
CompleteTaskUpHistory(executeStatePara, logPara, trans);
|
|
if (string.IsNullOrEmpty(executeStatePara.transportTask.CN_S_END_CONTROL_INV))
|
{
|
Log.Detail(logPara, "终点库区" + executeStatePara.transportTask.CN_S_END_AREA + "不管控库存!executeStatePara.transportTask.CN_S_END_CONTROL_INV:" + executeStatePara.transportTask.CN_S_END_CONTROL_INV);
|
trans.Rollback();
|
return;
|
}
|
|
#endregion
|
|
#region 库存
|
if (executeStatePara.transportTask.CN_S_START_CONTROL_INV.Equals("Y")) //降低起点库存
|
{
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().ReduceAreaQtyAndAllocQty(addAreaQty, executeStatePara.transportTask.CN_S_START_AREA, logPara, trans);
|
}
|
|
if (executeStatePara.transportTask.CN_S_END_CONTROL_INV.Equals("Y")) //增加终点库存
|
{
|
//按未入库量增加结束库区量
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().AddAreaQty(addAreaQty, executeStatePara.transportTask.CN_S_END_AREA, logPara, trans);
|
}
|
#endregion
|
}
|
|
//终点
|
if (executeStatePara.endIsCurrentTask != null && executeStatePara.transportTask.CN_C_END_IS_CONTROL_QTY.Equals("Y"))
|
{
|
CreateDAL<TN_WM_TASKDAL>().UpdateState(executeStatePara.transportTask.CN_S_END_BIT, "正常", "满", "预入库锁定", trans);
|
Log.Detail(logPara, "更新预入库锁定的货位状态为正常、满,货位号:" + executeStatePara.transportTask.CN_S_END_BIT);
|
|
//货位状态变化
|
BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(executeStatePara.transportTask.CN_S_END_BIT, "预入库锁定", "正常", "状态回报入库完成-终点", "", "", "", executeStatePara.endStockArea.CN_S_STOCK_CODE, executeStatePara.endStockArea.CN_S_AREA_CODE, trans);
|
}
|
|
//起点
|
if (executeStatePara.transportTask.CN_C_START_IS_CONTROL_QTY.Equals("Y"))
|
{
|
CreateDAL<TN_WM_TASKDAL>().UpdateState(executeStatePara.transportTask.CN_S_START_BIT, "正常", "空", "预出库锁定", trans);
|
Log.Detail(logPara, "更新预出库锁定的货位状态为正常、空,起点货位号:" + executeStatePara.transportTask.CN_S_START_BIT);
|
|
//货位状态变化
|
BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(executeStatePara.transportTask.CN_S_START_BIT, "预出库锁定", "正常", "状态回报转运完成-起点", "", "", "", executeStatePara.startStockArea.CN_S_STOCK_CODE, executeStatePara.startStockArea.CN_S_AREA_CODE, trans);
|
}
|
}
|
}
|
|
#endregion
|
|
});
|
}
|
|
public virtual void CompleteTaskUpHistory(ExecuteStateParaDto executeStatePara, LogPara logPara, IDbTransaction trans)
|
{
|
var upHis = new List<TN_WM_UP_HISTORYEntity>();
|
foreach (var trayItemMst in executeStatePara.trayItemMsts)
|
{
|
upHis.Add(new TN_WM_UP_HISTORYEntity
|
{
|
CN_GUID = Guid.NewGuid().ToString(),
|
CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_END_BIT,
|
CN_S_ITEM_STATE = trayItemMst.CN_S_ITEM_STATE,
|
CN_S_TRAY_CODE = trayItemMst.CN_S_TRAY_CODE,
|
CN_S_TRAY_GRID = trayItemMst.CN_S_TRAY_GRID == null ? "" : trayItemMst.CN_S_TRAY_GRID,
|
CN_S_ITEM_CODE = trayItemMst.CN_S_ITEM_CODE,
|
CN_S_ITEM_NAME = trayItemMst.CN_S_ITEM_NAME,
|
CN_S_PRODUCTION_BATCH = trayItemMst.CN_S_LOT_NO,
|
CN_F_QUANTITY = trayItemMst.CN_F_QUANTITY,//CN_S_WEIGHT
|
CN_S_MODEL = trayItemMst.CN_S_MODEL,
|
CN_S_STOCK_AREA = executeStatePara.transportTask.CN_S_END_AREA,
|
CN_S_STOCK_CODE = executeStatePara.transportTask.CN_S_STOCK_CODE,
|
CN_T_CREATE = DateTime.Now,
|
CN_T_MODIFY = DateTime.Now,
|
CN_S_OWNER = "",
|
CN_S_MEASURE_UNIT = trayItemMst.CN_S_MEASURE_UNIT,
|
CN_S_CREATOR = executeStatePara.transportTask.CN_S_CREATOR,
|
CN_S_CREATOR_BY = executeStatePara.transportTask.CN_S_CREATOR_BY,
|
CN_S_MODIFY = "",
|
CN_S_MODIFY_BY = "",
|
CN_S_OP_FROM = "任务完成-" + executeStatePara.transportTask.CN_S_TASK_TYPE,
|
CN_S_EXT1 = trayItemMst.CN_S_UNIQUE_CODE,
|
CN_S_EXT2 = executeStatePara.transportTask.CN_S_EXT1,
|
CN_S_LOT_NO = trayItemMst.CN_S_LOT_NO,
|
CN_S_FIGURE_NO = trayItemMst.CN_S_FIGURE_NO
|
});
|
}
|
|
//上架记录
|
if (upHis.Any())
|
{
|
Log.Detail(logPara, "添加上架记录,内容:" + LogDescribe.Content(upHis));
|
CreateDAL<DapperDAL<TN_WM_UP_HISTORYEntity>>().AddRange(upHis, trans);
|
}
|
}
|
|
public virtual void CompleteTaskDownHistory(ExecuteStateParaDto executeStatePara, LogPara logPara, IDbTransaction trans)
|
{
|
var downHis = new List<TN_WM_DOWN_HISTORYEntity>();
|
|
foreach (var trayItemMst in executeStatePara.trayItemMsts)
|
{
|
downHis.Add(new TN_WM_DOWN_HISTORYEntity
|
{
|
CN_GUID = Guid.NewGuid().ToString(),
|
CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_START_BIT,
|
CN_S_ITEM_STATE = trayItemMst.CN_S_ITEM_STATE,
|
CN_S_TRAY_CODE = trayItemMst.CN_S_TRAY_CODE,
|
CN_S_TRAY_GRID = trayItemMst.CN_S_TRAY_GRID,
|
CN_S_ITEM_CODE = trayItemMst.CN_S_ITEM_CODE,
|
CN_S_ITEM_NAME = trayItemMst.CN_S_ITEM_NAME,
|
CN_S_PRODUCTION_BATCH = trayItemMst.CN_S_LOT_NO,
|
CN_F_QUANTITY = trayItemMst.CN_F_QUANTITY,//CN_S_WEIGHT,//.CN_F_QUANTITY,
|
CN_S_MODEL = trayItemMst.CN_S_MODEL,
|
CN_S_STOCK_AREA = executeStatePara.transportTask.CN_S_START_AREA,
|
CN_S_STOCK_CODE = executeStatePara.transportTask.CN_S_STOCK_CODE,
|
CN_T_CREATE = DateTime.Now,
|
CN_T_MODIFY = DateTime.Now,
|
CN_S_OWNER = "",
|
CN_S_MEASURE_UNIT = trayItemMst.CN_S_MEASURE_UNIT,
|
CN_S_CREATOR = executeStatePara.transportTask.CN_S_CREATOR,
|
CN_S_CREATOR_BY = executeStatePara.transportTask.CN_S_CREATOR_BY,
|
CN_S_MODIFY = "",
|
CN_S_MODIFY_BY = "",
|
CN_S_OP_FROM = "任务完成-" + executeStatePara.transportTask.CN_S_TASK_TYPE,
|
CN_S_EXT1 = trayItemMst.CN_S_UNIQUE_CODE,
|
CN_S_EXT2 = executeStatePara.transportTask.CN_S_EXT1,
|
CN_S_LOT_NO = trayItemMst.CN_S_LOT_NO,
|
CN_S_FIGURE_NO = trayItemMst.CN_S_FIGURE_NO
|
});
|
}
|
|
|
|
//下架记录
|
if (downHis.Any())
|
{
|
CreateDAL<DapperDAL<TN_WM_DOWN_HISTORYEntity>>().AddRange(downHis, trans);
|
Log.Detail(logPara, "添加下架记录,内容:" + LogDescribe.Content(downHis));
|
}
|
}
|
|
public virtual OperateResult CancelTask(ExecuteStateParaDto executeStatePara, LogPara logPara)
|
{
|
if (!executeStatePara.transportTask.CN_S_STATE.Equals("未执行") && !executeStatePara.transportTask.CN_S_STATE.Equals("执行中"))
|
{
|
return OperateResult.Error("只能取消未执行和执行中的任务!");
|
}
|
|
return UseTransaction(trans =>
|
{
|
//更新任务状态
|
CreateDAL<DapperDAL<TN_WM_TASKEntity>>().Update(new
|
{
|
CN_S_MODIFY = "",
|
CN_S_MODIFY_BY = "",
|
CN_T_END = DateTime.Now,
|
CN_T_MODIFY = DateTime.Now,
|
CN_S_STATE = executeStatePara.taskState
|
}, new { executeStatePara.transportTask.CN_S_TASK_NO }, trans);
|
Log.Detail(logPara, "更新任务状态为:" + executeStatePara.taskState);
|
|
//终点
|
if (executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("入库") || executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("转运")
|
|| executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("移库")
|
|| executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("上架")
|
|| executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("下架")
|
|| executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("叫料")
|
|| executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("空托入")
|
|| executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("空托出")
|
|| executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("分拣出") || executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("调拨"))
|
{
|
if (executeStatePara.endIsCurrentTask != null && executeStatePara.transportTask.CN_C_END_IS_CONTROL_QTY.Equals("Y"))
|
{
|
CreateDAL<TN_WM_LOCATION_EXTDAL>().UpdateLocationStateByCodeAndState(executeStatePara.transportTask.CN_S_END_BIT, "正常", "预入库锁定", trans);
|
Log.Detail(logPara, "更新终点货位" + executeStatePara.transportTask.CN_S_END_BIT + "的状态为正常!");
|
//更新终点货位的任务号
|
CreateDAL<DapperDAL<TN_WM_LOCATION_EXTEntity>>().Update(new { CN_S_TASK_NO = "" }, new { CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_END_BIT }, trans);
|
Log.Detail(logPara, "更新终点货位" + executeStatePara.transportTask.CN_S_END_BIT + "的绑定任务号为空!");
|
|
//货位状态变化
|
BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(executeStatePara.transportTask.CN_S_END_BIT, "预入库锁定", "正常", "状态回报入库取消", "", "", "", executeStatePara.endStockArea.CN_S_STOCK_CODE, executeStatePara.endStockArea.CN_S_AREA_CODE, trans);
|
}
|
}
|
|
//起点
|
if (executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("出库") || executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("转运")
|
|| executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("移库")
|
|| executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("上架")
|
|| executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("下架")
|
|| executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("叫料")
|
|| executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("空托入")
|
|| executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("空托出") || executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("调拨"))
|
{
|
if (executeStatePara.startIsCurrentTask != null && executeStatePara.transportTask.CN_C_START_IS_CONTROL_QTY.Equals("Y"))
|
{
|
CreateDAL<TN_WM_LOCATION_EXTDAL>().UpdateLocationStateByCodeAndState(executeStatePara.transportTask.CN_S_START_BIT, "正常", "预出库锁定", trans);
|
|
//更新起点货位的任务号
|
CreateDAL<DapperDAL<TN_WM_LOCATION_EXTEntity>>().Update(new { CN_S_TASK_NO = "" }, new { CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_END_BIT }, trans);
|
Log.Detail(logPara, "更新起点货位" + executeStatePara.transportTask.CN_S_START_BIT + "的绑定任务号为空!");
|
|
//货位状态变化
|
BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(executeStatePara.transportTask.CN_S_START_BIT, "预出库锁定", "正常", "状态回报" + executeStatePara.transportTask.CN_S_TASK_TYPE + "取消", "", "", "", executeStatePara.startStockArea.CN_S_STOCK_CODE, executeStatePara.startStockArea.CN_S_AREA_CODE, trans);
|
|
if (executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("移库") || executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("转运"))
|
{
|
//降库区分配量
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().ReduceAllocQty(executeStatePara.transportTask.CN_S_START_AREA, executeStatePara.transportTask.CN_S_TRAY_CODE, trans, logPara);
|
}
|
|
if (executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("叫料"))
|
{
|
//降仓库分配量
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().ReduceAreaAndStockAllocQty(executeStatePara.transportTask.CN_S_START_AREA, executeStatePara.transportTask.CN_S_TRAY_CODE, trans, logPara);
|
}
|
}
|
}
|
|
if (executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("移库"))
|
{
|
Log.Detail(logPara, "降移库任务" + executeStatePara.transportTask.CN_S_TASK_NO + "的移动量");
|
//降移库任务的移动量
|
var moveStockTaskDtl = CreateDAL<MoveStockTaskDAL>().GetDtlByTaskNo(executeStatePara.transportTask.CN_S_TASK_NO);
|
if (moveStockTaskDtl != null)
|
{
|
CreateDAL<MoveStockTaskDAL>().ReduceAllocQty(moveStockTaskDtl.CN_PARENT_GUID, trans);
|
//ReduceMoveQty(moveStockTaskDtl.CN_PARENT_GUID, moveStockTaskDtl.CN_F_QUANTITY.ToString(), trans);
|
|
//删除移库子表任务记录
|
CreateDAL<MoveStockTaskDAL>().DeleteDtl(" CN_S_TASK_NO='" + executeStatePara.transportTask.CN_S_TASK_NO + "' ", trans);
|
}
|
else
|
{
|
Log.Detail(logPara, "未找到移库任务" + executeStatePara.transportTask.CN_S_TASK_NO + "子表的数据");
|
}
|
}
|
});
|
}
|
|
#endregion
|
|
#region 绑定与解绑
|
|
public virtual string BindingAndUnBinding(BindingAndUnBindingDto bindEntity)
|
{
|
var logPara = LogType.LogPara("绑定与解绑");
|
BasisResponse result;
|
try
|
{
|
Log.Detail(logPara, "BindingAndUnBinding接口请求参数:" + JsonConvert.SerializeObject(bindEntity));
|
result = BindingAndUnBinding(bindEntity, logPara);
|
Log.Detail(logPara, "BindingAndUnBinding接口返回结果:" + JsonConvert.SerializeObject(result));
|
}
|
catch (Exception ex)
|
{
|
result = BasisResponse.Error("BindingAndUnBinding 方法异常:" + JsonConvert.SerializeObject(ex.Message + ex.StackTrace));
|
return JsonConvert.SerializeObject(result);
|
}
|
return JsonConvert.SerializeObject(result);
|
|
}
|
|
public virtual BasisResponse BindingAndUnBinding(BindingAndUnBindingDto binding, LogPara logPara)
|
{
|
|
|
if (binding.type == 1)
|
{
|
var result = BindingTrayLocation(binding, logPara);
|
if (!result.Success) return result;
|
}
|
else if (binding.type == 2)
|
{
|
var result = UnBindingTrayLocation(binding, logPara);
|
if (!result.Success) return result;
|
}
|
|
return BasisResponse.Normal();
|
}
|
|
public virtual BasisResponse BindingTrayLocation(BindingAndUnBindingDto binding, LogPara logPara)
|
{
|
return BasisResponse.Normal();
|
}
|
|
public virtual BasisResponse UnBindingTrayLocation(BindingAndUnBindingDto binding, LogPara logPara)
|
{
|
return BasisResponse.Normal();
|
}
|
|
#endregion
|
|
#region 同步货位状态,货位状态不一致设为异常
|
/// <summary>
|
/// 同步货位状态,货位状态不一致设为异常
|
/// </summary>
|
/// <param name="synchroLocationEntity"></param>
|
/// <returns></returns>
|
/// <history>[HanHe(zh)] CREATED 2018/5/3</history>
|
public ExternalResponse SynchroLocation(List<SynchroLocationEntity> synchroLocationList)
|
{
|
ExternalResponse result = new ExternalResponse();
|
if (synchroLocationList == null || synchroLocationList.Count == 0)
|
return result.Error<SynchroLocationEntity>(null, "接受同步货位数据为空!", synchroLocationList);
|
foreach (var item in synchroLocationList)
|
{
|
result = ExecuteSynchroLocation(item);
|
if (!result.success)
|
{
|
return result;
|
}
|
}
|
return result;
|
}
|
public ExternalResponse ExecuteSynchroLocation(SynchroLocationEntity synchroLocationEntity)
|
{
|
ExternalResponse response = new ExternalResponse();
|
try
|
{
|
AutoBomLocationEntity location = BLLCreator.Create<HH.WMS.BLL.Basic.TN_AB_STOCK_LOCATIONBLL>().GetModel(synchroLocationEntity.Location, synchroLocationEntity.StockCode);
|
if (location != null)
|
{
|
//获取库区实体
|
AutoBomStockAreaEntity stockAreaEntity = CreateDAL<HH.WMS.DAL.Basic.TN_AB_B_STOCK_AREADAL>().GetEntityByArea(location.CN_S_AREA_CODE);
|
if (stockAreaEntity == null)
|
return response.Error<SynchroLocationEntity>(synchroLocationEntity, "未找到库区");
|
|
TN_WM_LOCATION_EXTEntity locationExt = CreateDAL<DapperDAL<TN_WM_LOCATION_EXTEntity>>().GetSingleEntity(new { CN_S_LOCATION_CODE = synchroLocationEntity.Location });// CreateDAL<TN_WM_LOCATION_EXTDAL>().GetEntityByCode(synchroLocationEntity.Location, synchroLocationEntity.StockCode);
|
if (locationExt == null)
|
return response.Error<SynchroLocationEntity>(synchroLocationEntity, "货位在TN_WM_LOCATION_EXT表中不存在");
|
if (synchroLocationEntity.State == 1 || synchroLocationEntity.State == 2 || synchroLocationEntity.State == 3)
|
{
|
//是否没有故障
|
bool isNotFault = true;
|
|
switch (synchroLocationEntity.State)
|
{
|
//有货
|
case 1:
|
isNotFault = locationExt.CN_S_USE_STATE != "空";
|
break;
|
//无货
|
case 2:
|
isNotFault = locationExt.CN_S_USE_STATE == "空";
|
break;
|
//故障
|
case 3:
|
isNotFault = false;
|
break;
|
}
|
#region 同步货位状态
|
if (!isNotFault)
|
{
|
string updateState = "全部故障";
|
if (locationExt.CN_S_LOCATION_STATE == Constants.Location_State_Normal)
|
{
|
var result = CreateDAL<TN_WM_LOCATION_EXTDAL>().UpdateLocationState(synchroLocationEntity.Location, updateState, "", null);
|
if (!result.Success)
|
{
|
return response.Error<SynchroLocationEntity>(synchroLocationEntity, result.Exception.Message);
|
}
|
else
|
{
|
AutoBomLocationEntity locationModel = CreateDAL<TN_WMS_LOCATIONDAL>().GetModel(synchroLocationEntity.Location);
|
BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(synchroLocationEntity.Location, "正常", updateState, "同步货位状态发现货位存储状态不一致时将货位设置为故障状态", "AMS", "", "", locationModel.CN_S_STOCK_CODE, locationModel.CN_S_AREA_CODE, null);
|
}
|
}
|
}
|
else
|
{
|
if (locationExt.CN_S_LOCATION_STATE == Constants.Location_State_AllFault)
|
{
|
var result = CreateDAL<TN_WM_LOCATION_EXTDAL>().UpdateLocationState(synchroLocationEntity.Location, "正常", "", null);
|
if (!result.Success)
|
{
|
return response.Error<SynchroLocationEntity>(synchroLocationEntity, result.Exception.Message);
|
}
|
else
|
{
|
AutoBomLocationEntity locationModel = CreateDAL<TN_WMS_LOCATIONDAL>().GetModel(synchroLocationEntity.Location);
|
BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(synchroLocationEntity.Location, "全部故障", "正常", "同步货位状态发现货位存储状态一致时将货位设置为正常", "AMS", "", "", locationModel.CN_S_STOCK_CODE, locationModel.CN_S_AREA_CODE, null);
|
}
|
}
|
}
|
#endregion
|
}
|
else if (synchroLocationEntity.State == 4)
|
{
|
if (ProjectCodes.TaiZhouLongJi.Equals(System.Configuration.ConfigurationManager.AppSettings["projectCode"].ToString()))
|
{
|
CreateDAL<DapperDAL<TN_WM_LOCATION_EXTEntity>>().Update(new { CN_S_USE_STATE = "满", CN_T_CREATE = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")) }, new { CN_S_LOCATION_CODE = location.CN_S_LOCATION_CODE });
|
}
|
else
|
{
|
CreateDAL<DapperDAL<TN_WM_LOCATION_EXTEntity>>().Update(new { CN_S_USE_STATE = "满" }, new { CN_S_LOCATION_CODE = location.CN_S_LOCATION_CODE });
|
}
|
if (ProjectCodes.HangChaBanHan.Equals(System.Configuration.ConfigurationManager.AppSettings["projectCode"].ToString()))
|
{
|
var trayLocation = CreateDAL<DapperDAL<TN_WM_B_TRAY_LOCATIONEntity>>().GetSingleEntity(new { CN_S_LOCATION_CODE = location.CN_S_LOCATION_CODE });
|
if (trayLocation == null)
|
{
|
var postData = "{\"appCode\":\"" + Constants.appCode + "\",\"ruleName\":\"" + Constants.VirtualTray + "\",\"orgId\":\"0\",\"orgFlag\":\"\"}";
|
var trayCode = WebApiManager.HttpAutoBom_Post("api/BillRule/GenBillNo", postData);
|
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_LOCATIONEntity>>().Add(new TN_WM_B_TRAY_LOCATIONEntity
|
{
|
CN_S_TRAY_CODE = trayCode,
|
CN_S_STOCK_CODE = locationExt.CN_S_STOCK_CODE,
|
CN_S_STOCK_AREA = locationExt.CN_S_AREA_CODE,
|
CN_S_LOCATION_CODE = locationExt.CN_S_LOCATION_CODE,
|
CN_N_INDEX = 0,
|
CN_S_CREATOR = "",
|
CN_S_CREATOR_BY = "",
|
CN_T_CREATE = DateTime.Now
|
}, null);
|
}
|
}
|
}
|
else if (synchroLocationEntity.State == 5)
|
{
|
if (ProjectCodes.HangChaBanHan.Equals(System.Configuration.ConfigurationManager.AppSettings["projectCode"].ToString()))
|
{
|
BLLCreator.Create<WmsApiForHcbhBLL>().UnbindLocation(location.CN_S_LOCATION_CODE);
|
}
|
else
|
{
|
if (ProjectCodes.TaiZhouLongJi.Equals(System.Configuration.ConfigurationManager.AppSettings["projectCode"].ToString()))
|
{
|
BLLCreator.Create<WmsApiForHcbhBLL>().UnbindLocationLJ(location.CN_S_LOCATION_CODE);
|
|
}
|
else
|
{
|
CreateDAL<DapperDAL<TN_WM_LOCATION_EXTEntity>>().Update(new { CN_S_USE_STATE = "空" }, new { CN_S_LOCATION_CODE = location.CN_S_LOCATION_CODE });
|
}
|
}
|
//if (ProjectCodes.TaiZhouLongJi.Equals(System.Configuration.ConfigurationManager.AppSettings["projectCode"].ToString()))
|
//{
|
// BLLCreator.Create<WmsApiForHcbhBLL>().UnbindLocation(location.CN_S_LOCATION_CODE);
|
//}
|
//
|
}
|
else if (synchroLocationEntity.State == 6)
|
{
|
//华为项目根据同步货位初始化该库区中的数据
|
List<TN_WM_LOCATION_EXTEntity> lstLocation = CreateDAL<DapperDAL<TN_WM_LOCATION_EXTEntity>>().GetList(new { CN_S_AREA_CODE = stockAreaEntity.CN_S_AREA_CODE });
|
|
lstLocation.RemoveAll(o => o.CN_S_LOCATION_CODE == synchroLocationEntity.Location);
|
//if (lstLocation.Count() == 0)
|
//{
|
// return response.Error<SynchroLocationEntity>(synchroLocationEntity, string.Format("该库区{0}中没有需要同步货位状态的数据",stockAreaEntity.CN_S_AREA_CODE));
|
//}
|
//if (lstLocation.Where(o => o.CN_S_LOCATION_STATE == Constants.Location_State_InLock).Count() > 0)
|
//{
|
// return response.Error<SynchroLocationEntity>(synchroLocationEntity, "库区中有预入库锁定的货位,不能初始化状态");
|
//}
|
foreach (TN_WM_LOCATION_EXTEntity locationEntity in lstLocation)
|
{
|
var result = CreateDAL<TN_WM_LOCATION_EXTDAL>().UpdateLocationExtStateLock(locationEntity.CN_S_LOCATION_CODE, "正常", "", "空", "", null);
|
|
if (!result.Success)
|
{
|
return response.Error<SynchroLocationEntity>(synchroLocationEntity, result.Msg);
|
}
|
result = CreateDAL<DapperDAL<TN_WM_B_TRAY_LOCATIONEntity>>().Delete(new
|
{
|
CN_S_LOCATION_CODE = locationEntity.CN_S_LOCATION_CODE
|
}, null);
|
|
if (!result.Success)
|
{
|
return response.Error<SynchroLocationEntity>(synchroLocationEntity, result.Msg);
|
}
|
}
|
|
}
|
return response.Ok<SynchroLocationEntity>(synchroLocationEntity);
|
}
|
else
|
{
|
return response.Error<SynchroLocationEntity>(synchroLocationEntity, "在仓库中未找到该货位");
|
}
|
}
|
catch (Exception ex)
|
{
|
return response.Error<SynchroLocationEntity>(synchroLocationEntity, "ExecuteSynchroLocation方法异常;" + ex.Message + ex.StackTrace);
|
}
|
}
|
#endregion
|
|
public virtual string getCode()
|
{
|
return getName();
|
}
|
|
public virtual string getName()
|
{
|
return "基础";
|
}
|
}
|
}
|