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.SysMgr;
|
using HH.WMS.Entitys;
|
using HH.WMS.Entitys.Autobom;
|
using HH.WMS.Entitys.Basic;
|
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
|
{
|
/// <summary>
|
/// WMS对外接口-巨星海宁
|
/// </summary>
|
public class WmsApiForJxhnBLL : WmsApiBaseBLL
|
{
|
#region 针对巨星需求定制的出入库代码
|
public override ExecuteInWorkAreaPara InWorkAreaVerifyPara(ref ExecuteInWorkAreaPara executeInWorkAreaPara, LogPara logPara)
|
{
|
// if (executeInWorkAreaPara.InWorkAreaEntity.isTransport == null) executeInWorkAreaPara.InWorkAreaEntity.isTransport = "N";
|
|
//任务号_当任务号不为空时,系统判断任务号是否重复
|
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);
|
executeInWorkAreaPara.errorCode = "1001";
|
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 + ",货位不可用!");
|
executeInWorkAreaPara.errorCode = "1001";
|
return executeInWorkAreaPara;
|
}
|
if (!executeInWorkAreaPara.StartLocationExt.CN_S_USE_STATE.Equals("满"))
|
{
|
executeInWorkAreaPara.BasisResponse = BasisResponse.Error("当前起始货位存储状态为" + executeInWorkAreaPara.StartLocationExt.CN_S_USE_STATE + ",货位不可用!");
|
executeInWorkAreaPara.errorCode = "1001";
|
return executeInWorkAreaPara;
|
}
|
}
|
executeInWorkAreaPara.InWorkAreaEntity.startArea = executeInWorkAreaPara.StartStockAreaEntity.CN_S_AREA_CODE;
|
executeInWorkAreaPara.InWorkAreaEntity.startStock = executeInWorkAreaPara.StartStockAreaEntity.CN_S_STOCK_CODE;
|
}
|
return executeInWorkAreaPara;
|
}
|
public override 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入库任务号异常,请检查是否维护生成规则!");
|
}
|
|
//托盘码
|
if (string.IsNullOrEmpty(executeInWorkAreaPara.InWorkAreaEntity.trayCode))
|
{
|
//转运并且不传托盘号,默认从货位中获取
|
if (executeInWorkAreaPara.InWorkAreaEntity.isTransport == "Y")
|
{
|
//查找托盘号和物料编码 and by liuying
|
#region 装运从货位中读取托盘号
|
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.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;
|
}
|
#endregion
|
}
|
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);
|
}
|
else
|
{
|
executeInWorkAreaPara.InWorkAreaEntity.trayCode = trayLocation.CN_S_TRAY_CODE;
|
}
|
}
|
}
|
else
|
{
|
if (executeInWorkAreaPara.InWorkAreaEntity.isTransport == "Y")
|
{
|
var trayLocation = BLLCreator.Create<TN_WM_B_TRAY_LOCATIONBLL>().GetByLocationCodeAndTrayCode(executeInWorkAreaPara.InWorkAreaEntity.startBit, executeInWorkAreaPara.InWorkAreaEntity.trayCode);
|
if (trayLocation == null)
|
{
|
executeInWorkAreaPara.BasisResponse = BasisResponse.Error("该托盘:" + executeInWorkAreaPara.InWorkAreaEntity.trayCode + "没有与起点绑定。");
|
executeInWorkAreaPara.errorCode = "1001";
|
return executeInWorkAreaPara;
|
}
|
}
|
var lstTasks = BLLCreator.Create<TN_WM_TASKBLL>().GetTask(" AND CN_S_TRAY_CODE = '" + executeInWorkAreaPara.InWorkAreaEntity.trayCode + "' AND CN_S_STATE in ('未执行','执行中','取货完成','卸货完成')");
|
if (lstTasks.Count > 0)
|
{
|
executeInWorkAreaPara.BasisResponse = BasisResponse.Error("该托盘:" + executeInWorkAreaPara.InWorkAreaEntity.trayCode + "已在任务中,请勿重复下达任务。");
|
executeInWorkAreaPara.errorCode = "1001";
|
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 + "未找到库区信息!");
|
executeInWorkAreaPara.errorCode = "1001";
|
return executeInWorkAreaPara;
|
}
|
}
|
else
|
{
|
executeInWorkAreaPara.BasisResponse = BasisResponse.Error("结束位置:" + executeInWorkAreaPara.InWorkAreaEntity.endBit + "未找到货位信息!");
|
executeInWorkAreaPara.errorCode = "1001";
|
return executeInWorkAreaPara;
|
}
|
// 检查货位状态
|
if (executeInWorkAreaPara.EndStockAreaEntity.CN_C_IS_CONTROL_QTY.Equals("Y"))
|
{
|
#region 终点管控货位
|
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 + ",货位不可用!");
|
executeInWorkAreaPara.errorCode = "1001";
|
return executeInWorkAreaPara;
|
}
|
if (!executeInWorkAreaPara.EndLocationExt.CN_S_USE_STATE.Equals("空"))
|
{
|
executeInWorkAreaPara.BasisResponse = BasisResponse.Error("当前终点货位存储状态为" + executeInWorkAreaPara.EndLocationExt.CN_S_USE_STATE + ",货位不可用!");
|
executeInWorkAreaPara.errorCode = "1001";
|
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;
|
}
|
#endregion
|
}
|
executeInWorkAreaPara.InWorkAreaEntity.endArea = executeInWorkAreaPara.EndStockAreaEntity.CN_S_AREA_CODE;
|
executeInWorkAreaPara.InWorkAreaEntity.endStock = executeInWorkAreaPara.EndStockAreaEntity.CN_S_STOCK_CODE;
|
}
|
|
return executeInWorkAreaPara;
|
}
|
|
public override ExecuteInWorkAreaPara InWorkAreaCalculatePath(ref ExecuteInWorkAreaPara executeInWorkAreaPara, LogPara logPara)
|
{
|
//获取作业区列表
|
List<TN_AB_B_WORK_AREA_PROEntity> workAreaProList = new List<TN_AB_B_WORK_AREA_PROEntity>();
|
|
if (executeInWorkAreaPara.InWorkAreaEntity.endArea == null)
|
{
|
executeInWorkAreaPara.BasisResponse = BasisResponse.Error("输入参数终点库区不能为空!");
|
return executeInWorkAreaPara;
|
}
|
string[] arrArea = executeInWorkAreaPara.InWorkAreaEntity.endArea.Split(',');
|
int prior = 0;
|
foreach (string endA in arrArea)
|
{
|
prior = prior + 1;
|
TN_AB_B_WORK_AREA_PROEntity workAreaPro = new TN_AB_B_WORK_AREA_PROEntity();
|
workAreaPro.CN_S_START_AREA_CODE = executeInWorkAreaPara.InWorkAreaEntity.startArea;
|
workAreaPro.CN_S_END_AREA_CODE = endA;
|
workAreaPro.CN_N_PRIORITY = prior;
|
workAreaProList.Add(workAreaPro);
|
}
|
if (workAreaProList.Any())
|
{
|
executeInWorkAreaPara.WorkAreaProEntitys = workAreaProList;
|
}
|
else
|
{
|
executeInWorkAreaPara.BasisResponse = BasisResponse.Error("输入参数终点库区不能为空!");
|
return executeInWorkAreaPara;
|
}
|
return executeInWorkAreaPara;
|
}
|
|
public override ExecuteInWorkAreaPara InWorkAreaInAss(ref ExecuteInWorkAreaPara executeInWorkAreaPara, LogPara logPara)
|
{
|
var logicAreaCode = executeInWorkAreaPara.InWorkAreaEntity.locationGear;
|
//增加货位档位逻辑判断 小档位可以放在大档位的货位中
|
// List<InAssignEntity> lstInEntity = new List<InAssignEntity>();
|
var aEntity = new InAssignEntity()
|
{
|
objectType = InAssignEntity.ObjectType.托盘,
|
objectCode = executeInWorkAreaPara.InWorkAreaEntity.trayCode,
|
itemCode = (executeInWorkAreaPara.InWorkAreaEntity.data != null &&
|
executeInWorkAreaPara.InWorkAreaEntity.data.Count > 0)
|
? executeInWorkAreaPara.InWorkAreaEntity.data[0].itemCode
|
: "",
|
lstAreaPrior = executeInWorkAreaPara.WorkAreaProEntitys.Select(p => new areaPriorClass { areaCode = p.CN_S_END_AREA_CODE, Prior = p.CN_N_PRIORITY }).ToList(),
|
//lockLocation = endArea != null ? endArea.CN_C_IS_CONTROL_QTY.Equals("Y") : false, //不管控数量时,不锁定目的货位
|
projectCode = executeInWorkAreaPara.InWorkAreaEntity.projectCode,
|
logicAreaCode = logicAreaCode,
|
stockCode = executeInWorkAreaPara.InWorkAreaEntity.startStock,
|
callSys = executeInWorkAreaPara.InWorkAreaEntity.sysName,
|
needCalLock = true
|
};
|
//根据库区获取货位
|
InAssignResultEntity resultEntity = new InAssignResultEntity();
|
resultEntity.Success = false;
|
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
|
{
|
if (resultEntity.errCode == "1002")
|
{
|
executeInWorkAreaPara.BasisResponse = BasisResponse.Error("在" + string.Join(",", executeInWorkAreaPara.WorkAreaProEntitys.Select(o => o.CN_S_END_AREA_CODE).ToList()) + "库区中计算货位异常,详细原因:" + resultEntity.Msg);
|
}
|
}
|
if (!resultEntity.Success && resultEntity.errCode == "1001")
|
{
|
executeInWorkAreaPara.BasisResponse = BasisResponse.Error("在" + string.Join(",", executeInWorkAreaPara.WorkAreaProEntitys.Select(o => o.CN_S_END_AREA_CODE).ToList()) + "库区中未找到合适的入库货位,详细原因:" + resultEntity.Msg);
|
}
|
executeInWorkAreaPara.errorCode = "1002";
|
return executeInWorkAreaPara;
|
}
|
public override 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
|
{
|
if (resultEntity.errCode == "1002")
|
{
|
executeOutWorkAreaPara.BasisResponse = BasisResponse.Error("在" + string.Join(",", executeOutWorkAreaPara.WorkAreaProEntitys.Select(o => o.CN_S_END_AREA_CODE).ToList()) + "库区中计算货位异常,详细原因:" + resultEntity.Msg);
|
}
|
else if (resultEntity.errCode == "1001")
|
{
|
executeOutWorkAreaPara.BasisResponse = BasisResponse.Error("在" + string.Join(",", executeOutWorkAreaPara.WorkAreaProEntitys.Select(o => o.CN_S_END_AREA_CODE).ToList()) + "库区中未找到合适的入库货位,详细原因:" + resultEntity.Msg);
|
}
|
else
|
{
|
executeOutWorkAreaPara.BasisResponse = BasisResponse.Error("在" + string.Join(",", executeOutWorkAreaPara.WorkAreaProEntitys.Select(o => o.CN_S_END_AREA_CODE).ToList()) + "库区中计算货位异常,详细原因:" + resultEntity.Msg);
|
}
|
executeOutWorkAreaPara.errorCode = "1002";
|
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 override ExecuteInWorkAreaPara InWorkAreaCreateTask(ref ExecuteInWorkAreaPara executeInWorkAreaPara, LogPara logPara)
|
{
|
executeInWorkAreaPara.TransportEntity.CN_S_TASK_NO = executeInWorkAreaPara.InWorkAreaEntity.taskNo;
|
executeInWorkAreaPara.TransportEntity.CN_S_CIR_OBJ = "托盘";
|
executeInWorkAreaPara.TransportEntity.CN_S_CIR_OBJ_CODE = executeInWorkAreaPara.InWorkAreaEntity.trayCode;
|
executeInWorkAreaPara.TransportEntity.CN_S_START_BIT = executeInWorkAreaPara.InWorkAreaEntity.startBit;
|
executeInWorkAreaPara.TransportEntity.CN_S_STATE = Constants.TaskStateList[0];
|
executeInWorkAreaPara.TransportEntity.CN_N_PRIORITY = executeInWorkAreaPara.InWorkAreaEntity.priority;
|
executeInWorkAreaPara.TransportEntity.CN_T_CREATE = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");//DateTime.Now.ToString();
|
executeInWorkAreaPara.TransportEntity.CN_T_MODIFY = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");//DateTime.Now.ToString();
|
executeInWorkAreaPara.TransportEntity.CN_S_REMARK = executeInWorkAreaPara.InWorkAreaEntity.remark;
|
executeInWorkAreaPara.TransportEntity.CN_S_START_AREA = executeInWorkAreaPara.InWorkAreaEntity.startArea;
|
executeInWorkAreaPara.TransportEntity.CN_S_STOCK_CODE = executeInWorkAreaPara.InWorkAreaEntity.startStock;
|
executeInWorkAreaPara.TransportEntity.CN_S_TASK_TYPE = executeInWorkAreaPara.InWorkAreaEntity.isTransport == "Y" ? "调拨" : "入库";
|
executeInWorkAreaPara.TransportEntity.CN_S_START_AREA_TYPE = executeInWorkAreaPara.StartStockAreaEntity.CN_S_STRUCTURE;
|
executeInWorkAreaPara.TransportEntity.CN_C_START_IS_CONTROL_QTY = executeInWorkAreaPara.StartStockAreaEntity.CN_C_IS_CONTROL_QTY;
|
executeInWorkAreaPara.TransportEntity.CN_S_START_CONTROL_INV = executeInWorkAreaPara.StartStockAreaEntity.CN_C_IS_INVENTORY;
|
//TODO EndLocationEntity、EndStockAreaEntity需要赋值
|
executeInWorkAreaPara.TransportEntity.CN_S_END_BIT = executeInWorkAreaPara.EndLocationEntity.CN_S_LOCATION_CODE;
|
executeInWorkAreaPara.TransportEntity.CN_S_END_AREA = executeInWorkAreaPara.EndLocationEntity.CN_S_AREA_CODE;
|
executeInWorkAreaPara.TransportEntity.CN_C_END_IS_CONTROL_QTY = executeInWorkAreaPara.EndStockAreaEntity.CN_C_IS_CONTROL_QTY;
|
executeInWorkAreaPara.TransportEntity.CN_S_END_CONTROL_INV = executeInWorkAreaPara.EndStockAreaEntity.CN_C_IS_INVENTORY;
|
executeInWorkAreaPara.TransportEntity.CN_S_END_AREA_TYPE = executeInWorkAreaPara.EndStockAreaEntity.CN_S_STRUCTURE;
|
executeInWorkAreaPara.TransportEntity.CN_S_END_STOCK_CODE = executeInWorkAreaPara.EndStockAreaEntity.CN_S_STOCK_CODE;
|
executeInWorkAreaPara.TransportEntity.CN_S_CREATOR = executeInWorkAreaPara.InWorkAreaEntity.creatorBy;
|
executeInWorkAreaPara.TransportEntity.CN_S_CREATOR_BY = executeInWorkAreaPara.InWorkAreaEntity.creatorBy;
|
return executeInWorkAreaPara;
|
}
|
public override ExecuteInWorkAreaPara InWorkAreaProcedure(ExecuteInWorkAreaPara executeInWorkAreaPara, LogPara logPara)
|
{
|
var result = UseTransaction(trans =>
|
{
|
InWorkAreaProcedureFunc(executeInWorkAreaPara, trans, logPara);
|
|
});
|
if (result.Success)
|
{
|
if (executeInWorkAreaPara.InWorkAreaEntity.needCreateAMSTask == "Y")
|
{
|
OperateResult re = new OtherSysApi().SendAmsCreateTaskJX(executeInWorkAreaPara.TransportEntity);
|
if (!re.Success)
|
{
|
// throw new Exception("SendAmsCreateTaskJX异常:" + re.Msg);
|
executeInWorkAreaPara.BasisResponse = BasisResponse.Error("SendAmsCreateTaskJX异常:" + re.Msg);
|
return executeInWorkAreaPara;
|
}
|
}
|
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_END_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 override 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);
|
//添加托盘物料关联子表
|
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);
|
}
|
}
|
}
|
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_END_STOCK_CODE,
|
CN_S_START_AREA = transport.CN_S_START_AREA,
|
CN_S_END_AREA = transport.CN_S_END_AREA,
|
CN_N_PRIORITY = transport.CN_N_PRIORITY,
|
CN_S_CREATOR = transport.CN_S_CREATOR,
|
CN_S_CREATOR_BY = transport.CN_S_CREATOR_BY,
|
CN_T_CREATE = Convert.ToDateTime(transport.CN_T_CREATE),
|
CN_T_MODIFY = Convert.ToDateTime(transport.CN_T_MODIFY),
|
CN_S_REMARK = transport.CN_S_REMARK,
|
//CN_C_IS_AUTO = transport.CN_C_IS_AUTO,
|
CN_S_TASK_TYPE = transport.CN_S_TASK_TYPE,
|
CN_C_START_IS_CONTROL_QTY = transport.CN_C_START_IS_CONTROL_QTY,
|
CN_C_END_IS_CONTROL_QTY = transport.CN_C_END_IS_CONTROL_QTY,
|
CN_S_START_CONTROL_INV = transport.CN_S_START_CONTROL_INV,
|
CN_S_END_CONTROL_INV = transport.CN_S_END_CONTROL_INV,
|
CN_S_START_AREA_TYPE = transport.CN_S_START_AREA_TYPE,
|
CN_S_END_AREA_TYPE = transport.CN_S_END_AREA_TYPE,
|
CN_S_FROM_OP = "入库/转运",
|
//巨星项目中用于标记是否回传托盘所入货位的信息
|
CN_S_EXT1 = "N"
|
//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"))
|
{
|
OperateResult updateResult = CreateDAL<TN_WM_LOCATION_EXTDAL>().UpdateLocationExtState(executeInWorkAreaPara.TransportEntity.CN_S_START_BIT, Constants.Location_State_OutLock, Constants.Location_State_Normal, executeInWorkAreaPara.TransportEntity.CN_S_TASK_NO, trans);
|
if (!updateResult.Success || updateResult.AffectedRows == 0)
|
{
|
trans.Rollback();
|
}
|
}
|
}
|
public override ExecuteOutWorkAreaPara OutWorkArea(OutWorkAreaEntity outWorkAreaEntity, LogPara logPara)
|
{
|
var executeOutWorkAreaPara = new ExecuteOutWorkAreaPara { OutWorkAreaEntity = outWorkAreaEntity };
|
executeOutWorkAreaPara.errorCode = "1000";
|
try
|
{
|
// Log.Detail(logPara, "1");
|
if (!OutWorkAreaVerifyPara(ref executeOutWorkAreaPara, logPara).BasisResponse.Success) return executeOutWorkAreaPara;
|
// Log.Detail(logPara, "2");
|
if (!OutWorkAreaHandlePara(ref executeOutWorkAreaPara, logPara).BasisResponse.Success) return executeOutWorkAreaPara;
|
// Log.Detail(logPara, "3");
|
if (string.IsNullOrEmpty(executeOutWorkAreaPara.OutWorkAreaEntity.endBit))
|
{
|
if (!InWorkAreaOutAss(ref executeOutWorkAreaPara, logPara).BasisResponse.Success)
|
{
|
return executeOutWorkAreaPara;
|
}
|
|
}
|
// Log.Detail(logPara, "4");
|
var result = UseTransaction(trans =>
|
{
|
// Log.Detail(logPara, "5");
|
//任务
|
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,
|
//CN_S_PROJECT_CODE = executeOutWorkAreaPara.OutWorkAreaEntity.projectCode
|
}, trans);
|
|
|
//更新结束点的任务号
|
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, trans);
|
}
|
}
|
//锁定起点货位
|
sqlResult = CreateDAL<TN_WM_LOCATION_EXTDAL>().UpdateLocationExtState(transport.CN_S_START_BIT, "预出库锁定", "正常", transport.CN_S_TASK_NO, trans);
|
if (sqlResult.Success && sqlResult.AffectedRows > 0)
|
{
|
BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(executeOutWorkAreaPara.OutWorkAreaEntity.startBit, "正常", "预出库锁定", "出库并且转运需要锁定起点货位防止其他资源竞争", executeOutWorkAreaPara.OutWorkAreaEntity.sysName, "", "", transport.CN_S_STOCK_CODE, transport.CN_S_END_AREA, trans);
|
}
|
else
|
{
|
if (sqlResult.AffectedRows == 0)
|
{
|
throw new Exception("锁定起点货位时SqlExecuteResult影响行数为0");
|
}
|
}
|
if (!sqlResult.Success)
|
{
|
return;
|
}
|
|
});
|
if (result.Success)
|
{
|
if (executeOutWorkAreaPara.OutWorkAreaEntity.needCreateAMSTask == "Y")
|
{
|
OperateResult re = new OtherSysApi().SendAmsCreateTaskJX(executeOutWorkAreaPara.TransportList[0]);
|
if (!re.Success)
|
{
|
executeOutWorkAreaPara.BasisResponse = BasisResponse.Error("SendAmsCreateTaskJX异常:" + re.Msg);
|
return executeOutWorkAreaPara;
|
}
|
}
|
executeOutWorkAreaPara.TaskExecuteState = new TaskExecuteState().Ok(OutWorkAreaOkTaskResponse(executeOutWorkAreaPara.TransportList[0], executeOutWorkAreaPara.OutWorkAreaEntity.itemCode, executeOutWorkAreaPara.index), null);
|
}
|
else
|
{
|
executeOutWorkAreaPara.BasisResponse = BasisResponse.Error("执行事务失败!" + result.Msg);
|
}
|
}
|
catch (Exception ex)
|
{
|
executeOutWorkAreaPara.BasisResponse = BasisResponse.Error("OutWorkArea 方法异常:" + JsonConvert.SerializeObject(ex.Message + ex.StackTrace));
|
}
|
Log.Detail(logPara, "OutWorkArea方法返回参数:" + JsonConvert.SerializeObject(executeOutWorkAreaPara));
|
return executeOutWorkAreaPara;
|
}
|
public override ExecuteOutWorkAreaPara OutWorkAreaVerifyPara(ref ExecuteOutWorkAreaPara executeOutWorkAreaPara, LogPara logPara)
|
{
|
if (executeOutWorkAreaPara.OutWorkAreaEntity == null)
|
{
|
executeOutWorkAreaPara.BasisResponse = BasisResponse.Error("参数不合法,接收参数为null!");
|
return executeOutWorkAreaPara;
|
}
|
if (executeOutWorkAreaPara.OutWorkAreaEntity.IsTransport == null) executeOutWorkAreaPara.OutWorkAreaEntity.IsTransport = "Y";
|
if (string.IsNullOrEmpty(executeOutWorkAreaPara.OutWorkAreaEntity.endArea) && string.IsNullOrEmpty(executeOutWorkAreaPara.OutWorkAreaEntity.endBit))
|
{
|
executeOutWorkAreaPara.BasisResponse = BasisResponse.Error("参数终点货位或终点库区至少输入一个!");
|
return executeOutWorkAreaPara;
|
}
|
#region 检验起点货位状态并锁定(起点为巨星WMS传递给汉和)
|
|
if (string.IsNullOrEmpty(executeOutWorkAreaPara.OutWorkAreaEntity.startBit))
|
{
|
var trayLocation = BLLCreator.Create<TN_WM_B_TRAY_LOCATIONBLL>().GetByTrayCode(executeOutWorkAreaPara.OutWorkAreaEntity.trayCode);
|
if (trayLocation == null)
|
{
|
executeOutWorkAreaPara.BasisResponse = BasisResponse.Error("根据托盘号" + executeOutWorkAreaPara.OutWorkAreaEntity.trayCode + "没有找到对应绑定的货位。");
|
executeOutWorkAreaPara.errorCode = "1001";
|
return executeOutWorkAreaPara;
|
}
|
else
|
{
|
executeOutWorkAreaPara.OutWorkAreaEntity.startBit = trayLocation.CN_S_LOCATION_CODE;
|
}
|
}
|
executeOutWorkAreaPara.StartStockAreaEntity = DALCreator.Create<TN_AB_STOCK_LOCATIONDAL>().GetAreaModelByLocation(executeOutWorkAreaPara.OutWorkAreaEntity.startBit.Trim());
|
if (executeOutWorkAreaPara.StartStockAreaEntity == null)
|
{
|
executeOutWorkAreaPara.BasisResponse = BasisResponse.Error("给定的起点位置未找到库区!");
|
executeOutWorkAreaPara.errorCode = "1001";
|
return executeOutWorkAreaPara;
|
}
|
else
|
{
|
if (executeOutWorkAreaPara.StartStockAreaEntity.CN_C_IS_CONTROL_QTY.Equals("Y"))
|
{
|
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 + ",货位不可用!");
|
executeOutWorkAreaPara.errorCode = "1001";
|
return executeOutWorkAreaPara;
|
}
|
if (executeOutWorkAreaPara.StartLocationExt.CN_S_USE_STATE.Equals("空"))
|
{
|
executeOutWorkAreaPara.BasisResponse = BasisResponse.Error("当前起点货位存储状态为" + executeOutWorkAreaPara.StartLocationExt.CN_S_USE_STATE + ",货位不可用!");
|
executeOutWorkAreaPara.errorCode = "1001";
|
return executeOutWorkAreaPara;
|
}
|
//如果起点为缓冲区,则判断是否有托盘阻挡或与预入库任务冲突
|
if (executeOutWorkAreaPara.StartStockAreaEntity.CN_S_AREA_CLASS == "缓冲区")
|
{
|
|
}
|
|
}
|
executeOutWorkAreaPara.OutWorkAreaEntity.startStock = executeOutWorkAreaPara.StartStockAreaEntity.CN_S_STOCK_CODE;
|
executeOutWorkAreaPara.OutWorkAreaEntity.startArea = executeOutWorkAreaPara.StartStockAreaEntity.CN_S_AREA_CODE;
|
}
|
|
#endregion
|
|
#region 检验终点货位状态并锁定 (巨星WMS传递给汉和终点位置)
|
//获取终点库区信息
|
if (!string.IsNullOrEmpty(executeOutWorkAreaPara.OutWorkAreaEntity.endBit))
|
{
|
executeOutWorkAreaPara.EndStockAreaEntity = DALCreator.Create<TN_AB_STOCK_LOCATIONDAL>().GetAreaModelByLocation(executeOutWorkAreaPara.OutWorkAreaEntity.endBit.Trim());
|
if (executeOutWorkAreaPara.EndStockAreaEntity == null)
|
{
|
executeOutWorkAreaPara.BasisResponse = BasisResponse.Error("给定的目的位置未找到库区!");
|
return executeOutWorkAreaPara;
|
}
|
else
|
{
|
// 检查货位状态 是转运且管控数量时使用
|
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 + ",货位不可用!");
|
executeOutWorkAreaPara.errorCode = "1001";
|
return executeOutWorkAreaPara;
|
}
|
if (!executeOutWorkAreaPara.EndLocationExt.CN_S_USE_STATE.Equals("空"))
|
{
|
executeOutWorkAreaPara.BasisResponse = BasisResponse.Error("当前终点货位存储状态为" + executeOutWorkAreaPara.EndLocationExt.CN_S_USE_STATE + ",货位不可用!");
|
executeOutWorkAreaPara.errorCode = "1001";
|
return executeOutWorkAreaPara;
|
}
|
//锁定终点货位
|
OperateResult lockResult = BLLCreator.Create<TN_WM_LOCATION_EXTBLL>().UpdateState(executeOutWorkAreaPara.OutWorkAreaEntity.endBit, "预入库锁定", "正常");
|
if (lockResult.Success && lockResult.AffectedRows > 0)
|
{
|
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
|
{
|
if (lockResult.AffectedRows == 0)
|
{
|
executeOutWorkAreaPara.BasisResponse = BasisResponse.Error("锁定终点货位" + executeOutWorkAreaPara.OutWorkAreaEntity.endBit + "失败!详细原因为:SqlExecuteResult影响row为0");
|
return executeOutWorkAreaPara;
|
}
|
else
|
{
|
executeOutWorkAreaPara.BasisResponse = BasisResponse.Error("锁定终点货位" + executeOutWorkAreaPara.OutWorkAreaEntity.endBit + "失败!详细原因为:" + lockResult.Msg);
|
return executeOutWorkAreaPara;
|
}
|
}
|
}
|
executeOutWorkAreaPara.OutWorkAreaEntity.startStock = executeOutWorkAreaPara.EndStockAreaEntity.CN_S_STOCK_CODE;
|
executeOutWorkAreaPara.OutWorkAreaEntity.endArea = executeOutWorkAreaPara.EndStockAreaEntity.CN_S_AREA_CODE;
|
|
}
|
}
|
#endregion
|
|
return executeOutWorkAreaPara;
|
}
|
public override 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出库任务号异常!");
|
}
|
var trayLocation = BLLCreator.Create<TN_WM_B_TRAY_LOCATIONBLL>().GetByLocationCodeAndTrayCode(executeOutWorkAreaPara.OutWorkAreaEntity.startBit, executeOutWorkAreaPara.OutWorkAreaEntity.trayCode);
|
if (trayLocation == null)
|
{
|
executeOutWorkAreaPara.BasisResponse = BasisResponse.Error("该托盘:" + executeOutWorkAreaPara.OutWorkAreaEntity.trayCode + "没有与起点绑定。");
|
executeOutWorkAreaPara.errorCode = "1001";
|
return executeOutWorkAreaPara;
|
}
|
//获取作业区列表
|
List<TN_AB_B_WORK_AREA_PROEntity> workAreaProList = new List<TN_AB_B_WORK_AREA_PROEntity>();
|
|
if (!string.IsNullOrEmpty(executeOutWorkAreaPara.OutWorkAreaEntity.endArea))
|
{
|
string[] arrArea = executeOutWorkAreaPara.OutWorkAreaEntity.endArea.Split(',');
|
int prior = 0;
|
foreach (string endA in arrArea)
|
{
|
prior = prior + 1;
|
TN_AB_B_WORK_AREA_PROEntity workAreaPro = new TN_AB_B_WORK_AREA_PROEntity();
|
workAreaPro.CN_S_START_AREA_CODE = executeOutWorkAreaPara.OutWorkAreaEntity.startArea;
|
workAreaPro.CN_S_END_AREA_CODE = endA;
|
workAreaPro.CN_N_PRIORITY = prior;
|
workAreaProList.Add(workAreaPro);
|
}
|
if (workAreaProList.Any())
|
{
|
executeOutWorkAreaPara.WorkAreaProEntitys = workAreaProList;
|
}
|
else
|
{
|
executeOutWorkAreaPara.BasisResponse = BasisResponse.Error("输入参数终点库区不能为空!");
|
return executeOutWorkAreaPara;
|
}
|
|
}
|
//创建转运任务
|
if (!string.IsNullOrEmpty(executeOutWorkAreaPara.OutWorkAreaEntity.endBit))
|
{
|
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 = "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);
|
}
|
return executeOutWorkAreaPara;
|
}
|
#endregion
|
|
#region 绑定与解绑
|
|
public override BasisResponse BindingTrayLocation(BindingAndUnBindingDto binding, LogPara logPara)
|
{
|
if (string.IsNullOrEmpty(binding.locationCode))
|
{
|
return BasisResponse.Error("货位号不能为空!");
|
}
|
if (string.IsNullOrEmpty(binding.trayCode))
|
{
|
return BasisResponse.Error("托盘号不能为空!");
|
}
|
// string[] arrBindLocation = binding.locationCode.Split(',');
|
List<TN_WM_B_TRAY_LOCATIONEntity> lstTrayLocation = new List<TN_WM_B_TRAY_LOCATIONEntity>();
|
List<TN_WM_UP_HISTORYEntity> upHis = new List<TN_WM_UP_HISTORYEntity>();
|
AutoBomStockAreaEntity areaModel = new AutoBomStockAreaEntity();
|
#region 检查托盘与货位是否满足绑定条件
|
//检查该托盘是否在(未执行或执行中的)任务中
|
List<TN_WM_TASKEntity> lstInTask = CreateDAL<TN_WM_TASKDAL>().GetTaskByTray(binding.trayCode);
|
if (lstInTask.Count > 0)
|
{
|
return BasisResponse.Error(string.Format("当前托盘已在搬运任务{0}中,不允许绑定未执行或执行中的任务!", lstInTask[0].CN_S_TASK_NO));
|
}
|
//检查该托盘是否绑定了其他货位
|
List<TN_WM_B_TRAY_LOCATIONEntity> lstEntity = CreateDAL<TN_WM_B_TRAY_LOCATIONDAL>().GetListByTrayCode(binding.trayCode);
|
if (lstEntity.Count > 0)
|
{
|
return BasisResponse.Error(string.Format("当前托盘已绑定货位{0},不允许重复绑定!", lstEntity[0].CN_S_LOCATION_CODE));
|
}
|
//判断该托盘绑定的货位是否阻挡了入库任务
|
List<TN_WM_LOCATIONCODE_EXT_Entity> locationInLock = CreateDAL<TN_WM_LOCATION_EXTDAL>().GetLockLocationByState(areaModel.CN_S_STOCK_CODE, areaModel.CN_S_AREA_CODE, null, Constants.Location_State_InLock);
|
|
List<TN_WM_LOCATIONCODE_EXT_Entity> tmpLocation = new List<TN_WM_LOCATIONCODE_EXT_Entity>();
|
//foreach (string strLocation in arrBindLocation)
|
//{
|
List<TN_WM_LOCATION_EXTEntity> GetModel = BLLCreator.Create<TN_WM_LOCATION_EXTBLL>(this.userInfo).GetModel("where CN_S_LOCATION_CODE='" + binding.locationCode + "'");
|
if (GetModel.Count == 0)
|
{
|
return BasisResponse.Error(string.Format("在表TN_WM_LOCATION_EXT中未查询到货位{0}!", binding.locationCode));
|
}
|
areaModel = CreateDAL<TN_AB_STOCK_LOCATIONDAL>().GetAreaModelByLocation(binding.locationCode);
|
if (areaModel == null)
|
{
|
//非法的目的货位
|
return BasisResponse.Error(string.Format("在mongo(TN_AB_B_STOCK_AREA或TN_AB_STOCK_LOCATION表)中未查询到货位{0}信息!", binding.locationCode));
|
}
|
if (areaModel.CN_C_IS_CONTROL_QTY.Equals("Y"))
|
{
|
//货位存储状态:非空
|
if (GetModel[0].CN_S_USE_STATE != Constants.Use_State_Empty)
|
{
|
return BasisResponse.Error(string.Format("货位{0}的存储状态为{1},不允许继续放置托盘!", binding.locationCode, GetModel[0].CN_S_USE_STATE));
|
}
|
}
|
//根据货位状态判断货位是否可用
|
if (GetModel[0].CN_S_LOCATION_STATE != Constants.Location_State_Normal)
|
{
|
return BasisResponse.Error(string.Format("货位{0}的状态为{1},不允许继续放置托盘!", binding.locationCode, GetModel[0].CN_S_LOCATION_STATE));
|
}
|
lstEntity = CreateDAL<TN_WM_B_TRAY_LOCATIONDAL>().GetListByLocationCode(binding.locationCode);
|
if (lstEntity.Count > 0)
|
{
|
return BasisResponse.Error(string.Format("货位{0}已绑定托盘{1},不允许重复绑定!", binding.locationCode, lstEntity[0].CN_S_TRAY_CODE));
|
}
|
if (areaModel.CN_S_AREA_CLASS == "地堆")
|
{
|
int maxInLockCol = 0;
|
if (locationInLock.Where(o => o.CN_S_ROW == GetModel[0].CN_S_ROW).Count() > 0)
|
{
|
tmpLocation = locationInLock.Where(o => o.CN_S_ROW == GetModel[0].CN_S_ROW).OrderByDescending(a => int.Parse(a.CN_S_COL)).ToList();
|
maxInLockCol = int.Parse(tmpLocation.FirstOrDefault().CN_S_COL);
|
if (int.Parse(GetModel[0].CN_S_COL) < maxInLockCol)
|
{
|
return BasisResponse.Error(string.Format("绑定货位{0}阻挡货位{1}的入库任务,不允许绑定!", binding.locationCode, tmpLocation.FirstOrDefault().CN_S_LOCATION_CODE));
|
}
|
}
|
}
|
lstTrayLocation.Add(new TN_WM_B_TRAY_LOCATIONEntity
|
{
|
CN_GUID = System.Guid.NewGuid().ToString().ToUpper(),
|
CN_S_TRAY_CODE = binding.trayCode,
|
CN_S_STOCK_CODE = areaModel.CN_S_STOCK_CODE,
|
CN_S_STOCK_AREA = areaModel.CN_S_AREA_CODE,
|
CN_S_LOCATION_CODE = binding.locationCode,
|
CN_N_INDEX = 1,
|
CN_S_CREATOR = "hh",
|
CN_S_CREATOR_BY = "hh",
|
CN_T_CREATE = DateTime.Now
|
});
|
upHis.Add(new TN_WM_UP_HISTORYEntity()
|
{
|
CN_GUID = Guid.NewGuid().ToString(),
|
CN_F_PACKING_QTY = 0,
|
CN_S_CREATOR = "",
|
CN_S_CREATOR_BY = "",
|
CN_S_FIGURE_NO = "",
|
CN_S_ITEM_CODE = "",
|
CN_F_QUANTITY = 0,
|
CN_S_ITEM_NAME = "",
|
CN_S_ITEM_STATE = "",
|
CN_S_LOCATION_CODE = binding.locationCode,
|
CN_S_LOT_NO = "",
|
CN_S_MEASURE_UNIT = "",
|
CN_S_MODEL = "",
|
CN_S_MODIFY = "",
|
CN_S_MODIFY_BY = "",
|
CN_S_OWNER = "",
|
CN_S_PACKING_UNIT = "",
|
CN_S_PRODUCTION_BATCH = "",
|
CN_S_STOCK_AREA = areaModel.CN_S_AREA_CODE,
|
CN_S_STOCK_CODE = areaModel.CN_S_STOCK_CODE,
|
CN_S_EXT1 = "",
|
CN_S_TRAY_CODE = binding.trayCode,
|
CN_S_TRAY_GRID = "1",
|
CN_T_CREATE = DateTime.Now,
|
CN_T_MODIFY = DateTime.Now,
|
CN_S_OP_FROM = "PDA绑定上架",
|
});
|
//}
|
#endregion
|
|
OperateResult result = UseTransaction(trans =>
|
{
|
result = CreateDAL<DapperDAL<TN_WM_B_TRAY_LOCATIONEntity>>().AddRange(lstTrayLocation, trans);
|
if (areaModel.CN_C_IS_CONTROL_QTY.Equals("Y"))
|
{
|
CreateDAL<DapperDAL<TN_WM_UP_HISTORYEntity>>().AddRange(upHis, trans);
|
//foreach (string strLocation in arrBindLocation)
|
//{
|
//更新货位贮存状态及货位状态
|
OperateResult operateResult = CreateDAL<DapperDAL<TN_WM_LOCATION_EXTEntity>>().Update(
|
new { CN_S_USE_STATE = Constants.Use_State_Full },
|
new { CN_S_LOCATION_CODE = binding.locationCode, CN_S_LOCATION_STATE = Constants.Location_State_Normal }, trans);
|
|
Log.Detail(logPara, "BindingAndUnBinding接口绑定货位:" + binding.locationCode + "," + JsonConvert.SerializeObject(operateResult));
|
if (operateResult.AffectedRows == 0)
|
{
|
throw new Exception("更新货位存储状态并发冲突,该货位状态可能已经发生变化");
|
}
|
// }
|
}
|
|
});
|
if (result.Success)
|
{
|
return BasisResponse.Normal();
|
}
|
else
|
{
|
return BasisResponse.Error(result.Msg);
|
}
|
}
|
|
public override BasisResponse UnBindingTrayLocation(BindingAndUnBindingDto binding, LogPara logPara)
|
{
|
if (string.IsNullOrEmpty(binding.locationCode) && string.IsNullOrEmpty(binding.trayCode))
|
{
|
return BasisResponse.Error("货位号和托盘号不能同时为空!");
|
}
|
if (!string.IsNullOrEmpty(binding.locationCode) && !string.IsNullOrEmpty(binding.trayCode))
|
{
|
List<TN_WM_B_TRAY_LOCATIONEntity> lstEntity = CreateDAL<TN_WM_B_TRAY_LOCATIONDAL>().GetListByTrayCode(binding.trayCode, binding.locationCode);
|
if (lstEntity.Count == 0)
|
{
|
return BasisResponse.Error("当前传入托盘号与传入货位号没有绑定关系,请检查!");
|
}
|
}
|
List<TN_WM_DOWN_HISTORYEntity> downHis = new List<TN_WM_DOWN_HISTORYEntity>();
|
OperateResult operateResult = new OperateResult();
|
AutoBomStockAreaEntity areaModel = new AutoBomStockAreaEntity();
|
if (binding.rowFlag)
|
{
|
if (string.IsNullOrEmpty(binding.locationCode))
|
{
|
return BasisResponse.Error("排解绑传入货位码不能为空!");
|
}
|
#region 根据货位码删除
|
//获取同排的货位
|
List<TN_WM_LOCATION_EXTEntity> lstLocation = BLLCreator.Create<TN_WM_LOCATION_EXTBLL>(this.userInfo).GetModel("where CN_S_LOCATION_CODE='" + binding.locationCode + "'");
|
if (lstLocation.Count == 0)
|
{
|
return BasisResponse.Error(string.Format("在表TN_WM_LOCATION_EXT中未查询到该货位{0}!", binding.locationCode));
|
}
|
List<TN_WM_LOCATION_EXTEntity> lstSameRowLocation = BLLCreator.Create<TN_WM_LOCATION_EXTBLL>().GetModelByRow(lstLocation[0].CN_S_ROW, lstLocation[0].CN_S_AREA_CODE);
|
|
foreach (TN_WM_LOCATION_EXTEntity locationEntity in lstSameRowLocation)
|
{
|
lstLocation = BLLCreator.Create<TN_WM_LOCATION_EXTBLL>(this.userInfo).GetModel("where CN_S_LOCATION_CODE='" + locationEntity.CN_S_LOCATION_CODE + "'");
|
if (lstLocation.Count == 0)
|
{
|
return BasisResponse.Error(string.Format("在表TN_WM_LOCATION_EXT中未查询到关联的货位{0}!", locationEntity.CN_S_LOCATION_CODE));
|
}
|
List<TN_WM_B_TRAY_LOCATIONEntity> lstEntity = CreateDAL<TN_WM_B_TRAY_LOCATIONDAL>().GetListByLocationCode(locationEntity.CN_S_LOCATION_CODE);
|
if (lstEntity.Count == 0)
|
{
|
continue;
|
}
|
//检查该托盘是否在(未执行或执行中的)任务中
|
List<TN_WM_TASKEntity> lstInTask = CreateDAL<TN_WM_TASKDAL>().GetTaskByTray(lstEntity[0].CN_S_TRAY_CODE);
|
if (lstInTask.Count > 0)
|
{
|
return BasisResponse.Error(string.Format("当前货位所在排关联的托盘已在搬运任务{0}中,不允许解绑未执行或执行中的任务!", lstInTask[0].CN_S_TASK_NO));
|
}
|
areaModel = CreateDAL<TN_AB_STOCK_LOCATIONDAL>().GetAreaModelByLocation(lstLocation[0].CN_S_LOCATION_CODE);
|
if (areaModel == null)
|
{
|
return BasisResponse.Error(string.Format("在mongo(TN_AB_B_STOCK_AREA或TN_AB_STOCK_LOCATION表)中未查询到货位{0}的库区信息!", lstLocation[0].CN_S_LOCATION_CODE));
|
}
|
if (areaModel.CN_C_IS_CONTROL_QTY.Equals("Y"))
|
{
|
//货位存储状态:非空
|
if (lstLocation[0].CN_S_USE_STATE != Constants.Use_State_Full)
|
{
|
return BasisResponse.Error(string.Format("该关联的货位{0}存储状态为{1},不允许从该位置解绑!", lstLocation[0].CN_S_LOCATION_CODE, lstLocation[0].CN_S_USE_STATE));
|
}
|
}
|
//货位状态:正常
|
if (lstLocation[0].CN_S_LOCATION_STATE != Constants.Location_State_Normal)
|
{
|
return BasisResponse.Error(string.Format("关联的货位{0}状态为{1},不允许从该位置解绑!", lstLocation[0].CN_S_LOCATION_CODE, lstLocation[0].CN_S_LOCATION_STATE));
|
}
|
#region 拼接下架记录表
|
TN_WM_DOWN_HISTORYEntity down = new TN_WM_DOWN_HISTORYEntity();
|
down.CN_GUID = Guid.NewGuid().ToString();
|
down.CN_S_CREATOR = "";
|
down.CN_S_CREATOR_BY = "";
|
down.CN_S_MODIFY = "";
|
down.CN_S_MODIFY_BY = "";
|
down.CN_F_QUANTITY = 1;
|
down.CN_F_PACKING_QTY = 0;
|
down.CN_S_LOT_NO = "";
|
down.CN_S_FIGURE_NO = "";
|
down.CN_S_ITEM_CODE = "";
|
down.CN_S_ITEM_NAME = "";
|
down.CN_S_ITEM_STATE = "";
|
down.CN_S_LOCATION_CODE = lstLocation[0].CN_S_LOCATION_CODE;
|
down.CN_S_MEASURE_UNIT = "";
|
down.CN_S_MODEL = "";
|
down.CN_S_OWNER = "";
|
down.CN_S_PACKING_UNIT = "";
|
down.CN_S_PRODUCTION_BATCH = "";
|
down.CN_S_STOCK_AREA = areaModel.CN_S_AREA_CODE;
|
down.CN_S_STOCK_CODE = areaModel.CN_S_STOCK_CODE;
|
down.CN_S_EXT1 = "";
|
down.CN_S_TRAY_CODE = lstEntity[0].CN_S_TRAY_CODE;
|
down.CN_S_TRAY_GRID = "1";
|
down.CN_T_CREATE = down.CN_T_MODIFY = DateTime.Now;
|
down.CN_S_OP_FROM = "PDA解绑下架";
|
downHis.Add(down);
|
#endregion
|
|
}
|
if (downHis.Count ==0)
|
{
|
return BasisResponse.Error(string.Format("该货位{0}所在的排不需要解绑托盘!", binding.locationCode));
|
}
|
operateResult = UseTransaction(trans =>
|
{
|
if (areaModel.CN_C_IS_CONTROL_QTY.Equals("Y"))
|
{
|
CreateDAL<DapperDAL<TN_WM_DOWN_HISTORYEntity>>().AddRange(downHis, trans);
|
foreach (TN_WM_DOWN_HISTORYEntity hisEntity in downHis)
|
{
|
//根据货位删除关联
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_LOCATIONEntity>>().Delete(new { CN_S_LOCATION_CODE = hisEntity.CN_S_LOCATION_CODE }, trans);
|
//更新货位贮存状态
|
operateResult = CreateDAL<DapperDAL<TN_WM_LOCATION_EXTEntity>>().Update(
|
new { CN_S_USE_STATE = Constants.Use_State_Empty },
|
new { CN_S_LOCATION_CODE = hisEntity.CN_S_LOCATION_CODE, CN_S_LOCATION_STATE = Constants.Location_State_Normal }, trans);
|
Log.Detail(logPara, "BindingAndUnBinding接口解绑货位状态:" + hisEntity.CN_S_LOCATION_CODE + "," + JsonConvert.SerializeObject(operateResult));
|
if (operateResult.AffectedRows == 0)
|
{
|
throw new Exception("更新货位状态并发冲突,该货位状态可能已经发生变化");
|
}
|
}
|
}
|
});
|
#endregion
|
}
|
else
|
{
|
#region 根据托盘码删除
|
if (!string.IsNullOrEmpty(binding.trayCode))
|
{
|
#region 判断托盘与货位是否满足解绑条件
|
//检查该托盘是否在(未执行或执行中的)任务中
|
List<TN_WM_TASKEntity> lstInTask = CreateDAL<TN_WM_TASKDAL>().GetTaskByTray(binding.trayCode);
|
if (lstInTask.Count > 0)
|
{
|
return BasisResponse.Error(string.Format("当前托盘已在搬运任务{0}中,不允许绑定未执行或执行中的任务!", lstInTask[0].CN_S_TASK_NO));
|
}
|
//判断托盘是否绑定货位
|
List<TN_WM_B_TRAY_LOCATIONEntity> lstEntity = CreateDAL<TN_WM_B_TRAY_LOCATIONDAL>().GetListByTrayCode(binding.trayCode);
|
if (lstEntity.Count == 0)
|
{
|
return BasisResponse.Error("当前托盘没有绑定货位,不需要解绑!");
|
}
|
else if (lstEntity.Count > 1)
|
{
|
return BasisResponse.Error("当前托盘绑定多个货位,请检查数据!");
|
}
|
else
|
{
|
List<TN_WM_LOCATION_EXTEntity> GetModel = BLLCreator.Create<TN_WM_LOCATION_EXTBLL>(this.userInfo).GetModel("where CN_S_LOCATION_CODE='" + lstEntity[0].CN_S_LOCATION_CODE + "'");
|
|
if (GetModel.Count == 0)
|
{
|
return BasisResponse.Error(string.Format("在表TN_WM_LOCATION_EXT中未查询到该托盘关联的货位{0}!", lstEntity[0].CN_S_LOCATION_CODE));
|
}
|
areaModel = CreateDAL<TN_AB_STOCK_LOCATIONDAL>().GetAreaModelByLocation(lstEntity[0].CN_S_LOCATION_CODE);
|
if (areaModel == null)
|
{
|
return BasisResponse.Error(string.Format("在mongo(TN_AB_B_STOCK_AREA或TN_AB_STOCK_LOCATION表)中未查询到货位{0}的库区信息!", lstEntity[0].CN_S_LOCATION_CODE));
|
}
|
if (areaModel.CN_C_IS_CONTROL_QTY.Equals("Y"))
|
{
|
//货位存储状态:非空
|
if (GetModel[0].CN_S_USE_STATE != Constants.Use_State_Full)
|
{
|
return BasisResponse.Error(string.Format("该托盘关联的货位{0}存储状态为{1},不允许从该位置解绑!", lstEntity[0].CN_S_LOCATION_CODE, GetModel[0].CN_S_USE_STATE));
|
}
|
}
|
//货位状态:正常
|
if (GetModel[0].CN_S_LOCATION_STATE != Constants.Location_State_Normal)
|
{
|
return BasisResponse.Error(string.Format("该托盘关联的货位{0}状态为{1},不允许从该位置解绑!", lstEntity[0].CN_S_LOCATION_CODE, GetModel[0].CN_S_LOCATION_STATE));
|
}
|
#region 拼接下架记录表
|
TN_WM_DOWN_HISTORYEntity down = new TN_WM_DOWN_HISTORYEntity();
|
down.CN_GUID = Guid.NewGuid().ToString();
|
down.CN_S_CREATOR = "";
|
down.CN_S_CREATOR_BY = "";
|
down.CN_S_MODIFY = "";
|
down.CN_S_MODIFY_BY = "";
|
down.CN_F_QUANTITY = 1;
|
down.CN_F_PACKING_QTY = 0;
|
down.CN_S_LOT_NO = "";
|
down.CN_S_FIGURE_NO = "";
|
down.CN_S_ITEM_CODE = "";
|
down.CN_S_ITEM_NAME = "";
|
down.CN_S_ITEM_STATE = "";
|
down.CN_S_LOCATION_CODE = lstEntity[0].CN_S_LOCATION_CODE;
|
down.CN_S_MEASURE_UNIT = "";
|
down.CN_S_MODEL = "";
|
down.CN_S_OWNER = "";
|
down.CN_S_PACKING_UNIT = "";
|
down.CN_S_PRODUCTION_BATCH = "";
|
down.CN_S_STOCK_AREA = areaModel.CN_S_AREA_CODE;
|
down.CN_S_STOCK_CODE = areaModel.CN_S_STOCK_CODE;
|
down.CN_S_EXT1 = "";
|
down.CN_S_TRAY_CODE = binding.trayCode;
|
down.CN_S_TRAY_GRID = "1";
|
down.CN_T_CREATE = down.CN_T_MODIFY = DateTime.Now;
|
down.CN_S_OP_FROM = "PDA解绑下架";
|
downHis.Add(down);
|
#endregion
|
}
|
|
|
|
#endregion
|
|
operateResult = UseTransaction(trans =>
|
{
|
//根据托盘删除关联
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_LOCATIONEntity>>().Delete(new { CN_S_TRAY_CODE = binding.trayCode }, trans);
|
if (areaModel.CN_C_IS_CONTROL_QTY.Equals("Y"))
|
{
|
CreateDAL<DapperDAL<TN_WM_DOWN_HISTORYEntity>>().AddRange(downHis, trans);
|
foreach (TN_WM_DOWN_HISTORYEntity hisEntity in downHis)
|
{
|
//更新货位贮存状态
|
operateResult = CreateDAL<DapperDAL<TN_WM_LOCATION_EXTEntity>>().Update(
|
new { CN_S_USE_STATE = Constants.Use_State_Empty },
|
new { CN_S_LOCATION_CODE = lstEntity[0].CN_S_LOCATION_CODE.ToString(), CN_S_LOCATION_STATE = Constants.Location_State_Normal }, trans);
|
Log.Detail(logPara, "BindingAndUnBinding接口解绑货位:" + lstEntity[0].CN_S_LOCATION_CODE.ToString() + "," + JsonConvert.SerializeObject(operateResult));
|
if (operateResult.AffectedRows == 0)
|
{
|
throw new Exception("更新货位状态并发冲突,该货位状态可能已经发生变化");
|
|
}
|
}
|
}
|
});
|
if (!operateResult.Success) return BasisResponse.Error(operateResult.Msg);
|
return BasisResponse.Normal();
|
}
|
#endregion
|
|
#region 根据货位码删除
|
if (!string.IsNullOrEmpty(binding.locationCode))
|
{
|
List<TN_WM_B_TRAY_LOCATIONEntity> lstEntity = CreateDAL<TN_WM_B_TRAY_LOCATIONDAL>().GetListByLocationCode(binding.locationCode);
|
if (lstEntity.Count == 0)
|
{
|
return BasisResponse.Error("当前货位没有绑定托盘,不需要解绑!");
|
}
|
else if (lstEntity.Count > 1)
|
{
|
return BasisResponse.Error("当前货位绑定多个托盘,请检查数据!");
|
}
|
else
|
{
|
//判断托盘是否绑定货位
|
binding.trayCode = lstEntity[0].CN_S_TRAY_CODE;
|
//检查该托盘是否在(未执行或执行中的)任务中
|
List<TN_WM_TASKEntity> lstInTask = CreateDAL<TN_WM_TASKDAL>().GetTaskByTray(binding.trayCode);
|
if (lstInTask.Count > 0)
|
{
|
return BasisResponse.Error(string.Format("当前货位关联的托盘已在搬运任务{0}中,不允许解绑未执行或执行中的任务!", lstInTask[0].CN_S_TASK_NO));
|
}
|
List<TN_WM_LOCATION_EXTEntity> GetModel = BLLCreator.Create<TN_WM_LOCATION_EXTBLL>(this.userInfo).GetModel("where CN_S_LOCATION_CODE='" + binding.locationCode + "'");
|
|
if (GetModel.Count == 0)
|
{
|
return BasisResponse.Error(string.Format("在表TN_WM_LOCATION_EXT中未查询到关联的货位{0}!", binding.locationCode));
|
}
|
areaModel = CreateDAL<TN_AB_STOCK_LOCATIONDAL>().GetAreaModelByLocation(binding.locationCode);
|
if (areaModel == null)
|
{
|
return BasisResponse.Error(string.Format("在mongo(TN_AB_B_STOCK_AREA或TN_AB_STOCK_LOCATION表)中未查询到货位{0}的库区信息!", binding.locationCode));
|
}
|
if (areaModel.CN_C_IS_CONTROL_QTY.Equals("Y"))
|
{
|
//货位存储状态:非空
|
if (GetModel[0].CN_S_USE_STATE != Constants.Use_State_Full)
|
{
|
return BasisResponse.Error(string.Format("该关联的货位{0}存储状态为{1},不允许从该位置解绑!", binding.locationCode, GetModel[0].CN_S_USE_STATE));
|
}
|
}
|
//货位状态:正常
|
if (GetModel[0].CN_S_LOCATION_STATE != Constants.Location_State_Normal)
|
{
|
return BasisResponse.Error(string.Format("关联的货位{0}状态为{1},不允许从该位置解绑!", binding.locationCode, GetModel[0].CN_S_LOCATION_STATE));
|
}
|
#region 拼接下架记录表
|
TN_WM_DOWN_HISTORYEntity down = new TN_WM_DOWN_HISTORYEntity();
|
down.CN_GUID = Guid.NewGuid().ToString();
|
down.CN_S_CREATOR = "";
|
down.CN_S_CREATOR_BY = "";
|
down.CN_S_MODIFY = "";
|
down.CN_S_MODIFY_BY = "";
|
down.CN_F_QUANTITY = 1;
|
down.CN_F_PACKING_QTY = 0;
|
down.CN_S_LOT_NO = "";
|
down.CN_S_FIGURE_NO = "";
|
down.CN_S_ITEM_CODE = "";
|
down.CN_S_ITEM_NAME = "";
|
down.CN_S_ITEM_STATE = "";
|
down.CN_S_LOCATION_CODE = binding.locationCode;
|
down.CN_S_MEASURE_UNIT = "";
|
down.CN_S_MODEL = "";
|
down.CN_S_OWNER = "";
|
down.CN_S_PACKING_UNIT = "";
|
down.CN_S_PRODUCTION_BATCH = "";
|
down.CN_S_STOCK_AREA = areaModel.CN_S_AREA_CODE;
|
down.CN_S_STOCK_CODE = areaModel.CN_S_STOCK_CODE;
|
down.CN_S_EXT1 = "";
|
down.CN_S_TRAY_CODE = binding.trayCode;
|
down.CN_S_TRAY_GRID = "1";
|
down.CN_T_CREATE = down.CN_T_MODIFY = DateTime.Now;
|
down.CN_S_OP_FROM = "PDA解绑下架";
|
downHis.Add(down);
|
#endregion
|
}
|
|
// lstEntity = CreateDAL<TN_WM_B_TRAY_LOCATIONDAL>().GetListByTrayCode(lstEntity[0].CN_S_TRAY_CODE);
|
|
operateResult = UseTransaction(trans =>
|
{
|
//根据货位删除关联
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_LOCATIONEntity>>().Delete(new { CN_S_TRAY_CODE = binding.trayCode }, trans);
|
if (areaModel.CN_C_IS_CONTROL_QTY.Equals("Y"))
|
{
|
CreateDAL<DapperDAL<TN_WM_DOWN_HISTORYEntity>>().AddRange(downHis, trans);
|
foreach (TN_WM_DOWN_HISTORYEntity hisEntity in downHis)
|
{
|
//更新货位贮存状态
|
operateResult = CreateDAL<DapperDAL<TN_WM_LOCATION_EXTEntity>>().Update(
|
new { CN_S_USE_STATE = Constants.Use_State_Empty },
|
new { CN_S_LOCATION_CODE = hisEntity.CN_S_LOCATION_CODE, CN_S_LOCATION_STATE = Constants.Location_State_Normal }, trans);
|
Log.Detail(logPara, "BindingAndUnBinding接口解绑货位状态:" + hisEntity.CN_S_LOCATION_CODE + "," + JsonConvert.SerializeObject(operateResult));
|
if (operateResult.AffectedRows == 0)
|
{
|
throw new Exception("更新货位状态并发冲突,该货位状态可能已经发生变化");
|
}
|
}
|
}
|
});
|
}
|
#endregion
|
}
|
if (!operateResult.Success) return BasisResponse.Error(operateResult.Msg);
|
return BasisResponse.Normal();
|
}
|
|
#endregion
|
|
#region 完工回报定制代码
|
public override OperateResult CompleteTask(ExecuteStateParaDto executeStatePara, LogPara logPara)
|
{
|
var isControlStockQty = executeStatePara.trayItemMsts.Count > 0;
|
Log.Detail(logPara, "isControlStockQty: " + isControlStockQty);
|
|
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("转运") || 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, "解绑任务的托盘和起点货位关联!");
|
CompleteTaskDownHistory(executeStatePara, logPara, trans);
|
}
|
|
if (executeStatePara.endTrayLocation == null && executeStatePara.transportTask.CN_C_END_IS_CONTROL_QTY.Equals("Y"))
|
{
|
//添加托盘货位
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_LOCATIONEntity>>().Add(trayLocation, trans);
|
Log.Detail(logPara, "添加托盘货位关联,内容:" + LogDescribe.Content(trayLocation));
|
CompleteTaskUpHistory(executeStatePara, logPara, trans);
|
}
|
//终点
|
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.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);
|
//货位状态变化
|
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("出库"))
|
{
|
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)
|
{
|
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);
|
CompleteTaskDownHistory(executeStatePara, logPara, trans);
|
}
|
if (executeStatePara.endTrayLocation == null)
|
{
|
//添加托盘货位
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_LOCATIONEntity>>().Add(trayLocation, trans);
|
Log.Detail(logPara, "添加托盘货位关联,内容:" + LogDescribe.Content(trayLocation));
|
CompleteTaskUpHistory(executeStatePara, logPara, trans);
|
|
}
|
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);
|
Log.Detail(logPara, "更新预出库锁定的货位状态为正常、空,终点货位号:" + executeStatePara.transportTask.CN_S_START_BIT);
|
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);
|
}
|
//终点
|
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.startStockArea.CN_S_STOCK_CODE, executeStatePara.startStockArea.CN_S_AREA_CODE, trans);
|
}
|
}
|
|
#endregion
|
});
|
}
|
public override void CompleteTaskUpHistory(ExecuteStateParaDto executeStatePara, LogPara logPara, IDbTransaction trans)
|
{
|
var upHis = new List<TN_WM_UP_HISTORYEntity>();
|
|
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 = "",
|
CN_S_TRAY_CODE = executeStatePara.transportTask.CN_S_TRAY_CODE,
|
CN_S_TRAY_GRID = "1",
|
CN_S_ITEM_CODE = "",
|
CN_S_ITEM_NAME = "",
|
CN_S_PRODUCTION_BATCH = "",
|
CN_F_QUANTITY = 1,//CN_S_WEIGHT
|
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 = "",
|
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 = "",
|
CN_S_EXT2 = executeStatePara.transportTask.CN_S_EXT1,
|
CN_S_LOT_NO = "",
|
CN_S_FIGURE_NO = ""
|
});
|
|
|
//上架记录
|
if (upHis.Any())
|
{
|
Log.Detail(logPara, "添加上架记录,内容:" + LogDescribe.Content(upHis));
|
CreateDAL<DapperDAL<TN_WM_UP_HISTORYEntity>>().AddRange(upHis, trans);
|
}
|
}
|
|
public override void CompleteTaskDownHistory(ExecuteStateParaDto executeStatePara, LogPara logPara, IDbTransaction trans)
|
{
|
var downHis = new List<TN_WM_DOWN_HISTORYEntity>();
|
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 = "",
|
CN_S_TRAY_CODE = executeStatePara.transportTask.CN_S_TRAY_CODE,
|
CN_S_TRAY_GRID = "1",
|
CN_S_ITEM_CODE = "",
|
CN_S_ITEM_NAME = "",
|
CN_S_PRODUCTION_BATCH = "",
|
CN_F_QUANTITY = 1,//CN_S_WEIGHT,//.CN_F_QUANTITY,
|
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 = "",
|
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 = "",
|
CN_S_EXT2 = executeStatePara.transportTask.CN_S_EXT1,
|
CN_S_LOT_NO = "",
|
CN_S_FIGURE_NO = ""
|
});
|
|
|
//下架记录
|
if (downHis.Any())
|
{
|
CreateDAL<DapperDAL<TN_WM_DOWN_HISTORYEntity>>().AddRange(downHis, trans);
|
Log.Detail(logPara, "添加下架记录,内容:" + LogDescribe.Content(downHis));
|
}
|
}
|
#endregion
|
|
}
|
}
|