using HH.Redis.ReisModel;
|
using HH.WMS.BLL.Basic;
|
using HH.WMS.BLL.External;
|
using HH.WMS.BLL.Interface;
|
using HH.WMS.Common;
|
using HH.WMS.Common.External;
|
using HH.WMS.DAL;
|
using HH.WMS.DAL.Basic;
|
using HH.WMS.DAL.InStock;
|
using HH.WMS.DAL.SysMgr;
|
using HH.WMS.Entitys;
|
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 Newtonsoft.Json.Converters;
|
using Newtonsoft.Json.Linq;
|
using System;
|
using System.Collections.Generic;
|
using System.Data;
|
using System.Linq;
|
using System.Text;
|
|
namespace HH.WMS.BLL.SysMgr
|
{
|
public class TN_WM_TASKBLL : DapperBaseBLL
|
{
|
#region GET
|
|
public OperateResult GetList(SearchModel searchModel)
|
{
|
StringBuilder sqlWhere = new StringBuilder();
|
sqlWhere.Append(" WHERE 1=1 ");
|
var stockCode = Util.ToString(searchModel.SearchCondition.CN_S_STOCK_CODE);
|
var taskNo = Util.ToString(searchModel.SearchCondition.CN_S_TASK_NO);
|
var taskType = Util.ToString(searchModel.SearchCondition.CN_S_TASK_TYPE);
|
var trayCode = Util.ToString(searchModel.SearchCondition.CN_S_TRAY_CODE);
|
var state = Util.ToString(searchModel.SearchCondition.CN_S_TASK_STATE);
|
var startArea = Util.ToString(searchModel.SearchCondition.CN_S_START_AREA);
|
var endArea = Util.ToString(searchModel.SearchCondition.CN_S_END_AREA);
|
var startTime = Util.ToString(searchModel.SearchCondition.CN_T_START);
|
var endTime = Util.ToString(searchModel.SearchCondition.CN_T_END);
|
|
if (!string.IsNullOrEmpty(stockCode))
|
{
|
sqlWhere.Append(" AND CN_S_STOCK_CODE = '" + stockCode + "'");
|
}
|
if (!string.IsNullOrEmpty(taskNo))
|
{
|
sqlWhere.Append(" AND CN_S_TASK_NO = '" + taskNo + "'");
|
}
|
if (!string.IsNullOrEmpty(taskType))
|
{
|
sqlWhere.Append(" AND CN_S_TASK_TYPE = '" + taskType + "'");
|
}
|
if (!string.IsNullOrEmpty(trayCode))
|
{
|
sqlWhere.Append(" AND CN_S_TRAY_CODE = '" + trayCode + "'");
|
}
|
if (!string.IsNullOrEmpty(state))
|
{
|
sqlWhere.Append(" AND CN_S_STATE = '" + state + "'");
|
}
|
if (!string.IsNullOrEmpty(startArea))
|
{
|
sqlWhere.Append(" AND CN_S_START_AREA = '" + startArea + "'");
|
}
|
if (!string.IsNullOrEmpty(endArea))
|
{
|
sqlWhere.Append(" AND CN_S_END_AREA = '" + endArea + "'");
|
}
|
if (!string.IsNullOrEmpty(startTime))
|
{
|
sqlWhere.Append(" AND CN_T_CREATE >= '" + Convert.ToDateTime(startTime.ToString()).ToString("yyyy-MM-dd") + "' ");
|
}
|
|
if (!string.IsNullOrEmpty(endTime))
|
{
|
sqlWhere.Append(" AND CN_T_CREATE <= '" + Convert.ToDateTime(endTime).ToString("yyyy-MM-dd") + "' ");
|
}
|
var orderBy = " order by CN_T_CREATE desc";
|
|
long total = 0;
|
var dt = CreateDAL<TN_WM_TASKDAL>().GetList(searchModel.PageIndex, searchModel.PageSize, out total, sqlWhere.ToString(), orderBy);
|
dt.Columns["CN_S_START_AREA"].ReadOnly = false;
|
dt.Columns["CN_S_END_AREA"].ReadOnly = false;
|
foreach (DataRow dr in dt.Rows)
|
{
|
var startAreaEntity = BLLCreator.Create<TN_AB_B_STOCK_AREABLL>().GetStockAreaEntity(dr["CN_S_START_AREA"].ToString().Trim());
|
if (startAreaEntity != null)
|
{
|
dr["CN_S_START_AREA"] = startAreaEntity.CN_S_AREA_NAME;
|
}
|
var endAreaEntity = BLLCreator.Create<TN_AB_B_STOCK_AREABLL>().GetStockAreaEntity(dr["CN_S_END_AREA"].ToString().Trim());
|
if (endAreaEntity != null)
|
{
|
dr["CN_S_END_AREA"] = endAreaEntity.CN_S_AREA_NAME;
|
}
|
}
|
|
//IsoDateTimeConverter timeFormat = new IsoDateTimeConverter();
|
//timeFormat.DateTimeFormat = "yyyy-MM-dd HH:mm:ss";
|
return OperateResult.Succeed(null, new
|
{
|
rows = dt,
|
total = total
|
});
|
}
|
|
public List<TN_WM_TASKEntity> GetTaskByAreaCode(string areaCode)
|
{
|
return DALCreator.Create<TN_WM_TASKDAL>().GetTaskByAreaCode(areaCode);
|
}
|
public List<TN_WM_TASKEntity> GetTaskByAreaCodeList(string areaCode)
|
{
|
return DALCreator.Create<TN_WM_TASKDAL>().GetTaskByAreaCodeList(areaCode);
|
}
|
|
#endregion
|
|
#region ADD
|
|
#endregion
|
|
#region UPDATE
|
|
public OperateResult UpdateState(string locationCode, string afterLocationSate, string useState, string beforeLocationState, IDbTransaction trans, LogPara logPara = null)
|
{
|
var result = DALCreator.Create<TN_WM_TASKDAL>()
|
.UpdateState(locationCode, afterLocationSate, useState, beforeLocationState, trans);
|
if (logPara != null)
|
Log.Detail(logPara, "更新货位" + locationCode + "且状态是" + beforeLocationState + "为:" + afterLocationSate + "," + useState + result.Describe());
|
return result;
|
}
|
|
public OperateResult UpdateWay(TN_WM_TASKEntity task, AutoBomLocationEntity locationModel, AutoBomStockAreaEntity locationArea, string type)
|
{
|
var oldLocationCode = type.Equals("start") ? task.CN_S_START_BIT : task.CN_S_END_BIT;
|
return UseTransaction(trans =>
|
{
|
//锁定改道后的货位使用状态和锁定状态
|
if (locationArea.CN_C_IS_CONTROL_QTY.Equals("Y"))
|
CreateDAL<TN_WM_LOCATION_EXTDAL>().UpdateStateAndTaskNo(task.CN_S_TASK_NO, locationModel.CN_S_LOCATION_CODE, Constants.Location_State_InLock, "", null, "");
|
if (type.Equals("start"))
|
{
|
//修改任务库区和货位
|
CreateDAL<DapperDAL<TN_WM_TASKEntity>>().Update(new
|
{
|
CN_S_START_BIT = locationModel.CN_S_LOCATION_CODE,
|
CN_S_START_AREA = locationModel.CN_S_AREA_CODE,
|
CN_C_START_IS_CONTROL_QTY = locationArea.CN_C_IS_CONTROL_QTY,
|
CN_S_START_CONTROL_INV = locationArea.CN_C_IS_INVENTORY,
|
CN_S_TASK_TYPE = "改道"
|
},
|
new { CN_S_TASK_NO = task.CN_S_TASK_NO });
|
}
|
else
|
{
|
CreateDAL<DapperDAL<TN_WM_TASKEntity>>().Update(new
|
{
|
CN_S_END_BIT = locationModel.CN_S_LOCATION_CODE,
|
CN_S_END_AREA = locationModel.CN_S_AREA_CODE,
|
CN_C_END_IS_CONTROL_QTY = locationArea.CN_C_IS_CONTROL_QTY,
|
CN_S_END_CONTROL_INV = locationArea.CN_C_IS_INVENTORY,
|
CN_S_TASK_TYPE = "改道"
|
},
|
new { CN_S_TASK_NO = task.CN_S_TASK_NO });
|
}
|
//将原来的货位置为正常
|
CreateDAL<DapperDAL<TN_WM_LOCATION_EXTEntity>>().Update(new { CN_S_LOCATION_STATE = Constants.Location_State_Normal }, new { CN_S_LOCATION_CODE = oldLocationCode }, trans);
|
});
|
}
|
|
#endregion
|
|
#region DELETE
|
|
#endregion
|
|
#region 启动任务
|
/// <summary>
|
/// 启动任务
|
/// </summary>
|
/// <param name="taskNo"></param>
|
/// <returns></returns>
|
/// <History>[HANHE(dbs)] CREATED BY 2019-3-13</History>
|
public OperateResult StartTask(string taskNo, RedisUserEntity user)
|
{
|
var model = CreateDAL<DapperDAL<TN_WM_TASKEntity>>().GetSingleEntity(new { CN_S_TASK_NO = taskNo });
|
if (!model.CN_S_STATE.Equals(Constants.TaskState_NoExecuted))
|
{
|
return OperateResult.Error("请启动未执行的任务!");
|
}
|
|
return CreateDAL<DapperDAL<TN_WM_TASKEntity>>().Update(new
|
{
|
CN_S_MODIFY = user.CN_S_LOGIN,
|
CN_S_MODIFY_BY = user.CN_S_NAME,
|
CN_T_START = DateTime.Now,
|
CN_T_MODIFY = DateTime.Now,
|
CN_S_STATE = Constants.TaskState_Executing
|
}, new { CN_S_TASK_NO = taskNo });
|
}
|
#endregion
|
|
#region 完成任务
|
/// <summary>
|
/// 完成任务
|
/// </summary>
|
/// <param name="taskNo"></param>
|
/// <param name="user"></param>
|
/// <returns></returns>
|
/// <History>[HANHE(dbs)] CREATED BY 2019-3-13</History>
|
public OperateResult EndTask(string taskNo, RedisUserEntity user)
|
{
|
TN_WM_TASKEntity model = CreateDAL<DapperDAL<TN_WM_TASKEntity>>().GetSingleEntity(new { CN_S_TASK_NO = taskNo });
|
|
AutoBomStockAreaEntity startArea = CreateDAL<TN_AB_B_STOCK_AREADAL>().GetStockAreaEntity(model.CN_S_START_AREA.Trim());
|
AutoBomStockAreaEntity endArea = CreateDAL<TN_AB_B_STOCK_AREADAL>().GetStockAreaEntity(model.CN_S_END_AREA.Trim());
|
|
//获取上架量=总量-分配量
|
DataTable trayInventory = CreateDAL<TN_WM_B_TRAY_ITEM_RELDAL>().GetTrayInventoryQty(model.CN_S_TRAY_CODE);
|
|
#region 组装库区增加量
|
List<TN_WM_B_AREA_QTYEntity> addAreaQty = new List<TN_WM_B_AREA_QTYEntity>();
|
trayInventory.AsEnumerable().ToList().ForEach(x =>
|
{
|
addAreaQty.Add(new TN_WM_B_AREA_QTYEntity()
|
{
|
CN_GUID = System.Guid.NewGuid().ToString().ToUpper(),
|
CN_S_ITEM_CODE = x.Field<string>("CN_S_ITEM_CODE"),
|
CN_S_ITEM_NAME = x.Field<string>("CN_S_ITEM_NAME"),
|
CN_S_ITEM_STATE = x.Field<string>("CN_S_ITEM_STATE"),
|
CN_S_OWNER = x.Field<string>("CN_S_OWNER"),
|
CN_S_PRODUCTION_BATCH = x.Field<string>("CN_S_PRODUCTION_BATCH"),
|
CN_S_LOT_NO = x.Field<string>("CN_S_LOT_NO"),
|
CN_F_QUANTITY = x.Field<decimal>("CN_F_QUANTITY"),
|
CN_S_STOCK_CODE = model.CN_S_STOCK_CODE,
|
CN_S_STOCK_AREA = model.CN_S_END_AREA
|
});
|
});
|
#endregion
|
|
#region 组织托盘与货位关系
|
TN_WM_B_TRAY_LOCATIONEntity trayLocation = new TN_WM_B_TRAY_LOCATIONEntity()
|
{
|
CN_GUID = Guid.NewGuid().ToString(),
|
CN_N_INDEX = 1,
|
CN_S_CREATOR = user.CN_S_LOGIN,
|
CN_S_CREATOR_BY = user.CN_S_NAME,
|
CN_S_LOCATION_CODE = model.CN_S_END_BIT,
|
CN_S_STOCK_AREA = model.CN_S_END_AREA,
|
CN_S_STOCK_CODE = model.CN_S_STOCK_CODE,
|
CN_S_TRAY_CODE = model.CN_S_TRAY_CODE,
|
CN_T_CREATE = DateTime.Now
|
};
|
#endregion
|
return UseTransaction(trans =>
|
{
|
#region 更新任务状态为“完成”
|
CreateDAL<DapperDAL<TN_WM_TASKEntity>>().Update(new
|
{
|
CN_S_MODIFY = user.CN_S_LOGIN,
|
CN_S_MODIFY_BY = user.CN_S_NAME,
|
CN_T_END = DateTime.Now,
|
CN_T_MODIFY = DateTime.Now,
|
CN_S_STATE = Constants.TaskState_Complete
|
}, new { CN_S_TASK_NO = taskNo }, trans);
|
#endregion
|
|
#region 释放起点、结束点货位
|
if (startArea.CN_C_IS_CONTROL_QTY.Equals("Y"))
|
CreateDAL<TN_WM_LOCATION_EXTDAL>().UnLockTaskStartBit(model.CN_S_TASK_NO, model.CN_S_START_BIT, trans);
|
if (endArea.CN_C_IS_CONTROL_QTY.Equals("Y"))
|
CreateDAL<TN_WM_LOCATION_EXTDAL>().UnLockTaskEndBit(model.CN_S_TASK_NO, model.CN_S_END_BIT, trans);
|
#endregion
|
|
switch (model.CN_S_TASK_TYPE)
|
{
|
case "上架":
|
//按未入库量增加结束库区量
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().AddAreaQty(addAreaQty, trans);
|
//降低起点库区量
|
addAreaQty.ForEach(x => { x.CN_S_STOCK_AREA = model.CN_S_START_AREA; });
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().ReduceAreaQty(addAreaQty, trans);
|
break;
|
case "分拣回":
|
//按未入库量增加结束库区量
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().AddAreaQty(addAreaQty, trans);
|
//降低起点库区量
|
addAreaQty.ForEach(x => { x.CN_S_STOCK_AREA = model.CN_S_END_AREA; });
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().ReduceAreaQty(addAreaQty, trans);
|
break;
|
case "盘点回":
|
//按未入库量增加结束库区量
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().AddAreaQty(addAreaQty, trans);
|
addAreaQty.ForEach(x => { x.CN_S_STOCK_AREA = model.CN_S_END_AREA; });
|
//降低起点库区量
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().ReduceAreaQty(addAreaQty, trans);
|
break;
|
case "入库":
|
//按未入库量增加结束库区量
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().AddAreaQty(addAreaQty, trans);
|
break;
|
case "分拣出":
|
//按未入库量增加结束库区量
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().AddAreaQty(addAreaQty, trans);
|
//降低起点库区量
|
addAreaQty.ForEach(x => { x.CN_S_STOCK_AREA = model.CN_S_END_AREA; });
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().ReduceAreaQty(addAreaQty, trans);
|
break;
|
case "盘点出":
|
//按未入库量增加结束库区量
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().AddAreaQty(addAreaQty, trans);
|
//降低起点库区量
|
addAreaQty.ForEach(x => { x.CN_S_STOCK_AREA = model.CN_S_END_AREA; });
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().ReduceAreaQty(addAreaQty, trans);
|
break;
|
case "移库":
|
//ToDo 判断起点库区和终点库区是否一致
|
break;
|
}
|
//解绑起点货位
|
if (startArea.CN_C_IS_CONTROL_QTY.Equals("Y"))
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_LOCATIONEntity>>().Delete(new
|
{
|
CN_S_LOCATION_CODE = model.CN_S_START_BIT,
|
CN_S_TRAY_CODE = model.CN_S_TRAY_CODE
|
}, trans);
|
//绑定终点货位与托盘关系
|
if (endArea.CN_C_IS_CONTROL_QTY.Equals("Y"))
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_LOCATIONEntity>>().Add(trayLocation, trans);
|
});
|
}
|
|
#endregion
|
#region 上架记录(完成任务)
|
|
private void UpHistoryByEndTaskQzhk(ExecuteStateParaDto executeStatePara, LogPara logPara, IDbTransaction trans)
|
{
|
var upHis = new List<TN_WM_UP_HISTORYEntity>();
|
if (executeStatePara.trayItemMsts.Count > 0)
|
{
|
foreach (var trayItemMst in executeStatePara.trayItemMsts)
|
{
|
foreach (var trayItemDtl in trayItemMst.TrayItemDtlList)
|
{
|
|
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 = trayItemDtl.CN_S_PRODUCTION_BATCH,
|
CN_F_QUANTITY = trayItemMst.CN_F_QUANTITY,
|
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 = "",
|
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 = ""
|
});
|
}
|
}
|
}
|
else
|
{
|
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())
|
{
|
CreateDAL<DapperDAL<TN_WM_UP_HISTORYEntity>>().AddRange(upHis, trans);
|
Log.Detail(logPara, "添加上架记录,内容:" + LogDescribe.Content(upHis));
|
}
|
}
|
|
#endregion
|
#region 上架记录(完成任务)隆基
|
|
private void UpHistoryByEndTaskLJ(ExecuteStateParaDto executeStatePara, LogPara logPara, IDbTransaction trans)
|
{
|
var upHis = new List<TN_WM_UP_HISTORYEntity>();
|
foreach (var trayItemMst in executeStatePara.trayItemMsts)
|
{
|
var uniqueCode = "";
|
if (trayItemMst.TrayItemDtlList != null)
|
{
|
if (trayItemMst.TrayItemDtlList.Count > 0)
|
{
|
trayItemMst.TrayItemDtlList.ForEach(e =>
|
{
|
uniqueCode += (e.CN_S_UNIQUE_CODE + ",");
|
});
|
}
|
|
if (!string.IsNullOrEmpty(uniqueCode))
|
{
|
uniqueCode = uniqueCode.Substring(0, uniqueCode.Length - 1);
|
}
|
}
|
|
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_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 = "",
|
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 = uniqueCode
|
});
|
}
|
|
|
//上架记录
|
if (upHis.Any())
|
{
|
CreateDAL<DapperDAL<TN_WM_UP_HISTORYEntity>>().AddRange(upHis, trans);
|
Log.Detail(logPara, "添加上架记录,内容:" + LogDescribe.Content(upHis));
|
}
|
}
|
|
#endregion
|
#region 上架记录(完成任务)
|
|
private void UpHistoryByEndTask(ExecuteStateParaDto executeStatePara, LogPara logPara, IDbTransaction trans)
|
{
|
var upHis = new List<TN_WM_UP_HISTORYEntity>();
|
if (executeStatePara.trayItemMsts.Count > 0)
|
{
|
foreach (var trayItemMst in executeStatePara.trayItemMsts)
|
{
|
var uniqueCode = "";
|
if (trayItemMst.TrayItemDtlList != null)
|
{
|
if (trayItemMst.TrayItemDtlList.Count > 0)
|
{
|
trayItemMst.TrayItemDtlList.ForEach(e =>
|
{
|
uniqueCode += (e.CN_S_UNIQUE_CODE + ",");
|
});
|
}
|
|
if (!string.IsNullOrEmpty(uniqueCode))
|
{
|
uniqueCode = uniqueCode.Substring(0, uniqueCode.Length - 1);
|
}
|
}
|
|
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_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 = "",
|
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 = uniqueCode
|
});
|
}
|
}
|
else
|
{
|
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())
|
{
|
CreateDAL<DapperDAL<TN_WM_UP_HISTORYEntity>>().AddRange(upHis, trans);
|
Log.Detail(logPara, "添加上架记录,内容:" + LogDescribe.Content(upHis));
|
}
|
}
|
|
#endregion
|
|
#region 下架记录(完成任务)隆基
|
|
private void DownHistoryByEndTaskLJ(ExecuteStateParaDto executeStatePara, LogPara logPara, IDbTransaction trans)
|
{
|
var downHis = new List<TN_WM_DOWN_HISTORYEntity>();
|
|
foreach (var trayItemMst in executeStatePara.trayItemMsts)
|
{
|
var uniqueCode = "";
|
if (trayItemMst.TrayItemDtlList != null)
|
{
|
if (trayItemMst.TrayItemDtlList.Count > 0)
|
{
|
trayItemMst.TrayItemDtlList.ForEach(e =>
|
{
|
uniqueCode += (e.CN_S_UNIQUE_CODE + ",");
|
});
|
//uniqueCode = trayItemMst.TrayItemDtlList.Where(e => e.CN_S_ITEM_CODE.Equals(trayItemMst.CN_S_ITEM_CODE)).FirstOrDefault().CN_S_UNIQUE_CODE;
|
}
|
|
if (!string.IsNullOrEmpty(uniqueCode))
|
{
|
uniqueCode = uniqueCode.Substring(0, uniqueCode.Length - 1);
|
}
|
}
|
|
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_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 = "",
|
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 = uniqueCode //executeStatePara.uniqueCodes
|
});
|
}
|
|
//下架记录
|
if (downHis.Any())
|
{
|
CreateDAL<DapperDAL<TN_WM_DOWN_HISTORYEntity>>().AddRange(downHis, trans);
|
Log.Detail(logPara, "添加下架记录,内容:" + LogDescribe.Content(downHis));
|
}
|
}
|
|
#endregion
|
|
#region 下架记录(完成任务)
|
|
private void DownHistoryByEndTask(ExecuteStateParaDto executeStatePara, LogPara logPara, IDbTransaction trans)
|
{
|
var downHis = new List<TN_WM_DOWN_HISTORYEntity>();
|
if (executeStatePara.trayItemMsts.Count > 0)
|
{
|
foreach (var trayItemMst in executeStatePara.trayItemMsts)
|
{
|
var uniqueCode = "";
|
if (trayItemMst.TrayItemDtlList != null)
|
{
|
if (trayItemMst.TrayItemDtlList.Count > 0)
|
{
|
trayItemMst.TrayItemDtlList.ForEach(e =>
|
{
|
uniqueCode += (e.CN_S_UNIQUE_CODE + ",");
|
});
|
//uniqueCode = trayItemMst.TrayItemDtlList.Where(e => e.CN_S_ITEM_CODE.Equals(trayItemMst.CN_S_ITEM_CODE)).FirstOrDefault().CN_S_UNIQUE_CODE;
|
}
|
|
if (!string.IsNullOrEmpty(uniqueCode))
|
{
|
uniqueCode = uniqueCode.Substring(0, uniqueCode.Length - 1);
|
}
|
}
|
|
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_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 = "",
|
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 = uniqueCode //executeStatePara.uniqueCodes
|
});
|
}
|
}
|
else
|
{
|
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
|
|
#region 根据上架指引组装搬运任务
|
/// <summary>
|
/// 根据上架指引组装搬运任务
|
/// </summary>
|
/// <param name="lstAllocQuery">指引数据</param>
|
/// <param name="endBit">目的位置</param>
|
/// <returns></returns>
|
/// <History>[HANHE(dbs)] CREATED BY 2019-3-13</History>
|
public List<TN_WM_TASKEntity> InstallTasks(List<TN_WM_TRAY_ALLOCEntity> lstAllocQuery, string endBit)
|
{
|
List<TN_WM_TASKEntity> tasks = new List<TN_WM_TASKEntity>();
|
List<string> trays = lstAllocQuery.GroupBy(x => x.CN_S_TRAY_CODE).Select(x => x.Key).ToList();
|
|
foreach (string m in trays)
|
{
|
string postData = "{\"appCode\":\"" + Constants.appCode + "\",\"ruleName\":\"" + Constants.TaskNo_Out + "\",\"orgId\":\"\",\"orgFlag\":\"0\"}";
|
string taskNo = WebApiManager.HttpAutoBom_Post("api/BillRule/GenBillNo", postData);
|
if (string.IsNullOrEmpty(taskNo))
|
{
|
Log.Info("===>出库任务号生成失败!", "");
|
return null;
|
}
|
|
TN_WM_B_TRAY_LOCATIONEntity trayLocationRel = CreateDAL<DapperDAL<TN_WM_B_TRAY_LOCATIONEntity>>().GetSingleEntity(new { CN_S_TRAY_CODE = m });
|
|
TN_WM_LOCATION_EXTEntity locationModel = CreateDAL<DapperDAL<TN_WM_LOCATION_EXTEntity>>().GetSingleEntity(new { CN_S_LOCATION_CODE = endBit });
|
|
|
tasks.Add(new TN_WM_TASKEntity()
|
{
|
CN_S_TASK_NO = taskNo,
|
CN_N_PRIORITY = 1,
|
CN_S_TASK_TYPE = "指引出库",
|
CN_S_FROM_OP = "出库",
|
CN_S_STOCK_CODE = trayLocationRel.CN_S_STOCK_CODE,
|
CN_S_START_AREA = trayLocationRel.CN_S_STOCK_AREA,
|
CN_S_START_BIT = trayLocationRel.CN_S_LOCATION_CODE,
|
CN_S_END_AREA = locationModel.CN_S_AREA_CODE,//分拣台所在库区
|
CN_S_END_BIT = locationModel.CN_S_LOCATION_CODE,//分拣台所在位置
|
CN_S_STATE = Constants.TaskState_NoExecuted,
|
CN_S_TRAY_CODE = m,
|
CN_S_CREATOR = lstAllocQuery[0].CN_S_CREATOR,
|
CN_S_CREATOR_BY = lstAllocQuery[0].CN_S_CREATOR_BY,
|
CN_T_CREATE = DateTime.Now,
|
CN_S_MODIFY = lstAllocQuery[0].CN_S_CREATOR,
|
CN_S_MODIFY_BY = lstAllocQuery[0].CN_S_CREATOR_BY,
|
CN_T_MODIFY = DateTime.Now
|
|
});
|
}
|
return tasks;
|
}
|
#endregion
|
|
#region 创建任务
|
/// <summary>
|
/// 创建任务
|
/// </summary>
|
/// <param name="task"></param>
|
/// <returns></returns>
|
/// <History>[HANHE(dbs)] CREATED BY 2019-3-13</History>
|
public OperateResult CreateTask(TN_WM_TASKEntity task)
|
{
|
return UseTransaction(trans =>
|
{
|
//生成任务
|
CreateDAL<DapperDAL<TN_WM_TASKEntity>>().Add(task, trans);
|
|
//删除预分配
|
CreateDAL<DapperDAL<TN_WM_TRAY_ALLOCEntity>>().Delete(new { CN_S_TRAY_CODE = task.CN_S_TRAY_CODE }, trans);
|
|
//锁定货位
|
CreateDAL<DapperDAL<TN_WM_LOCATION_EXTEntity>>().Update(new
|
{
|
CN_S_LOCATION_STATE = "预入库锁定",
|
CN_S_TASK_NO = task.CN_S_TASK_NO,
|
CN_T_MODIFY = DateTime.Now,
|
CN_S_MODIFY = task.CN_S_CREATOR,
|
CN_S_MODIFY_BY = task.CN_S_CREATOR_BY
|
}, new { CN_S_USE_STATE = "空", CN_S_LOCATION_CODE = task.CN_S_END_BIT }, trans);
|
});
|
}
|
#endregion
|
|
#region 取货完成
|
/// <summary>
|
/// 取货完成
|
/// </summary>
|
/// <param name="taskNo">任务号</param>
|
/// <param name="user">用户信息</param>
|
/// <returns></returns>
|
/// <History>[HANHE(dbs)] CREATED BY 2019-3-14</History>
|
public OperateResult PickSucc(ExecuteStateParaDto executeStatePara, LogPara logPara)
|
{
|
//if (executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("入库"))
|
// return new OperateResult { Success = false, Msg = "当前任务类型为入库,不允许执行取货完成!" };
|
var locationExt = BLLCreator.Create<DapperBLL<TN_WM_LOCATION_EXTEntity>>().GetSingleEntity(new { CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_START_BIT });
|
if (locationExt == null)
|
{
|
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.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);
|
//添加下架记录
|
DownHistoryByEndTask(executeStatePara, logPara, trans);
|
}
|
|
if (executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("出库"))
|
{
|
//删除托盘产品关联
|
CreateDAL<TN_WM_B_TRAY_ITEM_RELDAL>().DeleteTrayItem(" CN_S_TRAY_CODE='" + executeStatePara.transportTask.CN_S_TRAY_CODE + "' ", trans);
|
}
|
|
//起点是否属于当前任务
|
if (executeStatePara.startIsCurrentTask != null && executeStatePara.transportTask.CN_C_START_IS_CONTROL_QTY.Equals("Y"))
|
{
|
if (locationExt.CN_S_LOCATION_STATE.Equals("预出库锁定"))
|
{
|
CreateDAL<DapperDAL<TN_WM_LOCATION_EXTEntity>>().Update(new { CN_S_LOCATION_STATE = "正常", CN_S_USE_STATE = "空" },
|
new { CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_START_BIT }, trans);
|
}
|
//货位状态变化
|
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 取货完成 - 隆基
|
/// <summary>
|
/// 取货完成
|
/// </summary>
|
/// <param name="taskNo">任务号</param>
|
/// <param name="user">用户信息</param>
|
/// <returns></returns>
|
/// <History>[HANHE(dbs)] CREATED BY 2019-3-14</History>
|
public OperateResult PickSuccLJ(ExecuteStateParaDto executeStatePara, LogPara logPara)
|
{
|
//if (executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("入库"))
|
// return new OperateResult { Success = false, Msg = "当前任务类型为入库,不允许执行取货完成!" };
|
var locationExt = BLLCreator.Create<DapperBLL<TN_WM_LOCATION_EXTEntity>>().GetSingleEntity(new { CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_START_BIT });
|
if (locationExt == null)
|
{
|
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.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);
|
//添加下架记录
|
DownHistoryByEndTaskLJ(executeStatePara, logPara, trans);
|
}
|
|
if (executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("出库"))
|
{
|
//删除托盘产品关联
|
CreateDAL<TN_WM_B_TRAY_ITEM_RELDAL>().DeleteTrayItem(" CN_S_TRAY_CODE='" + executeStatePara.transportTask.CN_S_TRAY_CODE + "' ", trans);
|
}
|
|
//起点是否属于当前任务
|
if (executeStatePara.startIsCurrentTask != null && executeStatePara.transportTask.CN_C_START_IS_CONTROL_QTY.Equals("Y"))
|
{
|
if (locationExt.CN_S_LOCATION_STATE.Equals("预出库锁定"))
|
{
|
CreateDAL<DapperDAL<TN_WM_LOCATION_EXTEntity>>().Update(new { CN_S_LOCATION_STATE = "正常", CN_S_USE_STATE = "空" },
|
new { CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_START_BIT }, trans);
|
}
|
//货位状态变化
|
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 卸货完成
|
/// <summary>
|
/// 卸货完成
|
/// </summary>
|
/// <param name="taskNo">任务号</param>
|
/// <param name="user">用户信息</param>
|
/// <returns></returns>
|
/// <History>[HANHE(dbs)] CREATED BY 2019-3-14</History>
|
public OperateResult UnloadingSucc(ExecuteStateParaDto executeStatePara, RedisUserEntity user, LogPara logPara)
|
{
|
if (executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("出库"))
|
return new OperateResult { Success = false, Msg = "当前任务类型为出库,不允许执行卸货完成!" };
|
|
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);
|
|
if (executeStatePara.endIsCurrentTask != null && executeStatePara.transportTask.CN_C_END_IS_CONTROL_QTY.Equals("Y"))
|
{
|
Log.Detail(logPara, "恢复终点货位状态为正常!");
|
CreateDAL<DapperDAL<TN_WM_LOCATION_EXTEntity>>()
|
.Update(new { CN_S_LOCATION_STATE = "正常", CN_S_USE_STATE = "满" },
|
new { CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_END_BIT }, trans);
|
//货位状态变化
|
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.endTrayLocation == null)
|
{
|
if (!executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("改道"))
|
{
|
//添加托盘与货位的关系
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_LOCATIONEntity>>().Add(new TN_WM_B_TRAY_LOCATIONEntity
|
{
|
CN_GUID = Guid.NewGuid().ToString(),
|
CN_S_TRAY_CODE = executeStatePara.transportTask.CN_S_TRAY_CODE,
|
CN_S_STOCK_AREA = executeStatePara.transportTask.CN_S_END_AREA,
|
CN_S_STOCK_CODE = executeStatePara.transportTask.CN_S_STOCK_CODE,
|
CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_END_BIT,
|
CN_N_INDEX = 0,
|
CN_T_CREATE = DateTime.Now
|
}, trans);
|
|
//添加上架记录
|
UpHistoryByEndTask(executeStatePara, logPara, trans);
|
}
|
|
|
}
|
});
|
|
|
}
|
#endregion
|
|
|
#region 卸货完成 - 隆基
|
/// <summary>
|
/// 卸货完成
|
/// </summary>
|
/// <param name="taskNo">任务号</param>
|
/// <param name="user">用户信息</param>
|
/// <returns></returns>
|
/// <History>[HANHE(dbs)] CREATED BY 2019-3-14</History>
|
public OperateResult UnloadingSuccLJ(ExecuteStateParaDto executeStatePara, RedisUserEntity user, LogPara logPara)
|
{
|
if (executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("出库"))
|
return new OperateResult { Success = false, Msg = "当前任务类型为出库,不允许执行卸货完成!" };
|
|
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);
|
|
if (executeStatePara.endIsCurrentTask != null && executeStatePara.transportTask.CN_C_END_IS_CONTROL_QTY.Equals("Y"))
|
{
|
Log.Detail(logPara, "恢复终点货位状态为正常!");
|
CreateDAL<DapperDAL<TN_WM_LOCATION_EXTEntity>>()
|
.Update(new { CN_S_LOCATION_STATE = "正常", CN_S_USE_STATE = "满" },
|
new { CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_END_BIT }, trans);
|
//货位状态变化
|
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.endTrayLocation == null)
|
{
|
if (executeStatePara.transportTask.CN_S_EXT2 == "Y")
|
{
|
|
//添加托盘与货位的关系
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_LOCATIONEntity>>().Add(new TN_WM_B_TRAY_LOCATIONEntity
|
{
|
CN_GUID = Guid.NewGuid().ToString(),
|
CN_S_TRAY_CODE = executeStatePara.transportTask.CN_S_TRAY_CODE,
|
CN_S_STOCK_AREA = executeStatePara.transportTask.CN_S_END_AREA,
|
CN_S_STOCK_CODE = executeStatePara.transportTask.CN_S_STOCK_CODE,
|
CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_END_BIT,
|
CN_N_INDEX = 0,
|
CN_T_CREATE = DateTime.Now
|
}, trans);
|
|
//添加上架记录
|
UpHistoryByEndTaskLJ(executeStatePara, logPara, trans);
|
}
|
|
|
}
|
});
|
|
|
}
|
#endregion
|
|
#region 卸货完成 - 华凯科技
|
/// <summary>
|
/// 卸货完成
|
/// </summary>
|
/// <param name="taskNo">任务号</param>
|
/// <param name="user">用户信息</param>
|
/// <returns></returns>
|
/// <History>[HANHE(dbs)] CREATED BY 2019-3-14</History>
|
public OperateResult UnloadingSuccQzhk(ExecuteStateParaDto executeStatePara, RedisUserEntity user, LogPara logPara)
|
{
|
if (executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("分拣回"))
|
return new OperateResult { Success = false, Msg = "当前任务类型为分拣回,不允许执行卸货完成!" };
|
|
var isControlStockQty = executeStatePara.trayItemMsts.Count > 0;
|
Log.Detail(logPara, "UnloadingSuccQzhk-isControlStockQty: " + isControlStockQty);
|
|
#region 组合量表参数
|
|
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 = trayItemDtl.CN_S_PRODUCTION_BATCH,
|
CN_S_LOT_NO = trayItemDtl.CN_S_LOT_NO,
|
CN_F_QUANTITY = trayItemMst.CN_F_QUANTITY,//.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 = trayItemDtl.CN_S_PRODUCTION_BATCH,
|
CN_S_LOT_NO = trayItemDtl.CN_S_LOT_NO,
|
CN_F_QUANTITY = trayItemMst.CN_F_QUANTITY,//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);
|
|
if (executeStatePara.endIsCurrentTask != null && executeStatePara.transportTask.CN_C_END_IS_CONTROL_QTY.Equals("Y"))
|
{
|
Log.Detail(logPara, "恢复终点货位状态为正常!");
|
CreateDAL<DapperDAL<TN_WM_LOCATION_EXTEntity>>()
|
.Update(new { CN_S_LOCATION_STATE = "正常", CN_S_USE_STATE = "满" },
|
new { CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_END_BIT }, trans);
|
//货位状态变化
|
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.endTrayLocation == null)
|
{
|
if (!executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("改道"))
|
{
|
//添加托盘与货位的关系
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_LOCATIONEntity>>().Add(new TN_WM_B_TRAY_LOCATIONEntity
|
{
|
CN_GUID = Guid.NewGuid().ToString(),
|
CN_S_TRAY_CODE = executeStatePara.transportTask.CN_S_TRAY_CODE,
|
CN_S_STOCK_AREA = executeStatePara.transportTask.CN_S_END_AREA,
|
CN_S_STOCK_CODE = executeStatePara.transportTask.CN_S_STOCK_CODE,
|
CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_END_BIT,
|
CN_N_INDEX = 0,
|
CN_T_CREATE = DateTime.Now
|
}, trans);
|
|
}
|
|
if (executeStatePara.transportTask.CN_S_END_CONTROL_INV.Equals("Y"))
|
{
|
|
//添加上架记录
|
UpHistoryByEndTaskQzhk(executeStatePara, logPara, trans);
|
//按未入库量增加结束库区量
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().AddAreaQty(addAreaQty, executeStatePara.transportTask.CN_S_END_AREA, logPara, trans);
|
//升仓库库存
|
CreateDAL<TN_WM_B_STOCK_QTYDAL>().AddStockQty(addStockQty, trans);
|
Log.Detail(logPara, "增加仓库库存!");
|
|
}
|
|
|
}
|
});
|
|
|
}
|
#endregion
|
|
#region 取消
|
|
public OperateResult CancelTask(ExecuteStateParaDto executeStatePara, LogPara logPara)
|
{
|
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("空托出"))
|
{
|
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, "正常", "预入库锁定", null);
|
|
//更新终点货位的任务号
|
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, null);
|
}
|
}
|
|
//起点
|
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("空托出"))
|
{
|
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, "正常", "预出库锁定", null);
|
|
//更新起点货位的任务号
|
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_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, null);
|
}
|
}
|
});
|
}
|
|
#endregion
|
|
#region 空取
|
|
public OperateResult EmptyFetchTask(ExecuteStateParaDto executeStatePara)
|
{
|
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);
|
|
if (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<DapperDAL<TN_WM_LOCATION_EXTEntity>>()
|
.Update(new { CN_S_LOCATION_STATE = "正常" },
|
new { CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_END_BIT }, trans);
|
//货位状态变化
|
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("转运"))
|
{
|
if (executeStatePara.startIsCurrentTask != null && executeStatePara.transportTask.CN_C_START_IS_CONTROL_QTY.Equals("Y"))
|
{
|
CreateDAL<DapperDAL<TN_WM_LOCATION_EXTEntity>>()
|
.Update(new { CN_S_LOCATION_STATE = "空取异常" },
|
new { CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_START_BIT }, trans);
|
//货位状态变化
|
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 获取正在执行中或者未执行的任务
|
|
/// <summary>
|
/// 获取正在执行中或者未执行的任务
|
/// </summary>
|
/// <param name="trayCode"></param>
|
/// <returns></returns>
|
public List<TN_WM_TASKEntity> GetTaskByTray(string trayCode)
|
{
|
return CreateDAL<TN_WM_TASKDAL>().GetTaskByTray(trayCode);
|
}
|
|
#endregion
|
|
#region PDA专用 生成任务
|
/// <summary>
|
/// PDA专用 生成任务
|
/// </summary>
|
/// <param name="startPosition"></param>
|
/// <param name="endPosition"></param>
|
/// <param name="taskPriority"></param>
|
/// <param name="objLocationEntity"></param>
|
/// <param name="taskNo"></param>
|
/// <param name="SendAms"></param>
|
/// <returns></returns>
|
public OperateResult CreateTransTask(string startPosition, string endPosition, string taskPriority, string tranType, string projectCode, RedisUserEntity userEntity)
|
{
|
OperateResult result = new OperateResult();
|
#region 货位逻辑判断检测
|
|
TN_WM_LOCATION_EXTEntity startlocation = BLLCreator.Create<TN_WM_LOCATION_EXTBLL>().GetExtModel(" where CN_S_LOCATION_CODE='" + startPosition + "'");
|
if (startlocation == null)
|
{
|
return OperateResult.Error("在表TN_WM_LOCATION_EXT中未查询到该起点货位!");
|
}
|
if (startlocation.CN_S_LOCATION_STATE != Constants.Location_State_Normal)
|
{
|
return OperateResult.Error(string.Format("当前起点位置状态为{0},不允许从该位置取料!", startlocation.CN_S_LOCATION_STATE));
|
}
|
AutoBomStockAreaEntity startArea = CreateDAL<TN_AB_STOCK_LOCATIONDAL>().GetAreaModelByLocation(startPosition);
|
if (startArea == null)
|
{
|
//非法的目的货位
|
return OperateResult.Error(string.Format("在mongo(TN_AB_B_STOCK_AREA或TN_AB_STOCK_LOCATION表)中未查询到该起点货位{0}的库区信息!", startPosition));
|
}
|
|
if (startArea.CN_C_IS_CONTROL_QTY.Equals("Y"))
|
{
|
if (startlocation.CN_S_USE_STATE != Constants.Use_State_Full)
|
{
|
return OperateResult.Error(string.Format("起点库区管控数量并且货位存储状态为{0},不允许从该位置取料!", startlocation.CN_S_USE_STATE));
|
|
}
|
}
|
//判断货位是否绑定托盘
|
List<TN_WM_B_TRAY_LOCATIONEntity> lstStartTray = CreateDAL<TN_WM_B_TRAY_LOCATIONDAL>().GetListByLocationCode(startPosition);
|
if (lstStartTray.Count == 0)
|
{
|
return OperateResult.Error("在该起点位置上未绑定托盘物料信息!");
|
}
|
|
|
TN_WM_LOCATION_EXTEntity endlocation = BLLCreator.Create<TN_WM_LOCATION_EXTBLL>().GetExtModel(" where CN_S_LOCATION_CODE='" + endPosition + "'");
|
if (endlocation == null)
|
{
|
return OperateResult.Error("在表TN_WM_LOCATION_EXT未查询到该目的货位!");
|
}
|
if (endlocation.CN_S_LOCATION_STATE != Constants.Location_State_Normal)
|
{
|
return OperateResult.Error(string.Format("当前起点位置状态为{0},不允许往该位置卸料!", endlocation.CN_S_LOCATION_STATE));
|
|
}
|
AutoBomStockAreaEntity endArea = CreateDAL<TN_AB_STOCK_LOCATIONDAL>().GetAreaModelByLocation(endPosition);
|
if (endArea == null)
|
{
|
//非法的目的货位
|
return OperateResult.Error(string.Format("在mongo(TN_AB_B_STOCK_AREA或TN_AB_STOCK_LOCATION表)中未查询到该目的货位{0}的库区信息!", startPosition));
|
}
|
if (endArea.CN_C_IS_CONTROL_QTY.Equals("Y") && endlocation.CN_S_USE_STATE != Constants.Use_State_Empty)
|
{
|
return OperateResult.Error(string.Format("终点库区管控数量并且货位存储状态为{0},不允许往该位置卸料!", endlocation.CN_S_USE_STATE));
|
}
|
|
//判断货位是否绑定托盘
|
List<TN_WM_B_TRAY_LOCATIONEntity> lstEndTray = CreateDAL<TN_WM_B_TRAY_LOCATIONDAL>().GetListByLocationCode(endPosition);
|
if (lstEndTray.Count > 0)
|
{
|
return OperateResult.Error("该目的位置上已绑定其他托盘物料信息!");
|
}
|
|
|
#endregion
|
|
//生成入库任务
|
TN_WM_TASKEntity taskEntity = new TN_WM_TASKEntity();
|
string postData = "{\"appCode\":\"" + Constants.appCode + "\",\"ruleName\":\"" + Constants.Rule_TransTaskNo + "\",\"orgId\":\"\",\"orgFlag\":\"0\"}";
|
string taskNo = WebApiManager.HttpAutoBom_Post("api/BillRule/GenBillNo", postData);
|
if (string.IsNullOrEmpty(taskNo))
|
{
|
return OperateResult.Error("任务号生成失败,请检查autobom中是否配置了转运任务号生成规则!");
|
}
|
taskEntity.CN_S_TASK_NO = taskNo;
|
taskEntity.CN_S_STATE = Constants.TaskStateList[Constants.TaskExecState_NoExec];
|
taskEntity.CN_T_CREATE = DateTime.Now;
|
taskEntity.CN_S_TASK_TYPE = tranType;
|
taskEntity.CN_S_TRAY_CODE = lstStartTray[0].CN_S_TRAY_CODE;
|
taskEntity.CN_S_START_BIT = startPosition;
|
taskEntity.CN_S_END_BIT = endPosition;
|
taskEntity.CN_N_PRIORITY = int.Parse(taskPriority);
|
taskEntity.CN_S_PROJECT_CODE = projectCode;
|
taskEntity.CN_S_END_AREA = endArea.CN_S_AREA_CODE;
|
taskEntity.CN_S_START_AREA = startArea.CN_S_AREA_CODE;
|
taskEntity.CN_S_STOCK_CODE = startArea.CN_S_STOCK_CODE;
|
taskEntity.CN_S_START_AREA_TYPE = startArea.CN_S_STRUCTURE;
|
taskEntity.CN_S_END_AREA_TYPE = endArea.CN_S_STRUCTURE;
|
taskEntity.CN_C_START_IS_CONTROL_QTY = startArea.CN_C_IS_CONTROL_QTY;
|
taskEntity.CN_C_END_IS_CONTROL_QTY = endArea.CN_C_IS_CONTROL_QTY;
|
taskEntity.CN_S_START_CONTROL_INV = startArea.CN_C_IS_INVENTORY;
|
taskEntity.CN_S_END_CONTROL_INV = endArea.CN_C_IS_INVENTORY;
|
taskEntity.CN_S_CREATOR = userEntity.CN_S_LOGIN;
|
taskEntity.CN_S_CREATOR_BY = userEntity.CN_S_NAME;
|
taskEntity.CN_T_CREATE = DateTime.Now;
|
taskEntity.CN_S_MODIFY = userEntity.CN_S_LOGIN;
|
taskEntity.CN_S_MODIFY_BY = userEntity.CN_S_NAME;
|
taskEntity.CN_T_MODIFY = DateTime.Now;
|
result = UseTransaction(trans =>
|
{
|
#region 事务
|
OperateResult re = new OtherSysApi().SendAmsCreateTask(taskEntity);
|
if (!re.Success)
|
{
|
throw new Exception(re.Msg);
|
}
|
//新增任务
|
CreateDAL<DapperDAL<TN_WM_TASKEntity>>().Add(taskEntity, trans);
|
|
|
//锁定目的位置货位-预入库锁定
|
if (endArea.CN_C_IS_CONTROL_QTY.Equals("Y"))
|
{
|
result = CreateDAL<TN_WM_LOCATION_EXTDAL>().UpdateLocationExtStateLock(taskEntity.CN_S_END_BIT, Constants.Location_State_InLock, Constants.Location_State_Normal, "", taskNo, trans);
|
if (result.AffectedRows == 0)
|
{
|
throw new Exception("更新目的货位状态并发冲突,该货位状态可能已经发生变化");
|
}
|
BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(endPosition, "正常", "预入库锁定", "PDA生成任务锁定终点货位", "PDA", userEntity.CN_S_LOGIN, taskNo, endArea.CN_S_STOCK_CODE, endArea.CN_S_AREA_CODE, trans);
|
}
|
if (startArea.CN_C_IS_CONTROL_QTY.Equals("Y"))
|
{
|
//锁定起始位置货位-预出库锁定
|
result = CreateDAL<TN_WM_LOCATION_EXTDAL>().UpdateLocationExtStateLock(taskEntity.CN_S_START_BIT, Constants.Location_State_OutLock, Constants.Location_State_Normal, "", taskNo, trans);
|
|
if (result.AffectedRows == 0)
|
{
|
throw new Exception("更新起点货位状态并发冲突,该货位状态可能已经发生变化");
|
}
|
BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(startPosition, "正常", "预出库锁定", "PDA生成任务锁定起点货位", "PDA", userEntity.CN_S_LOGIN, taskNo, startArea.CN_S_STOCK_CODE, startArea.CN_S_AREA_CODE, trans);
|
}
|
|
|
#endregion
|
});
|
return result;
|
|
}
|
#endregion
|
|
#region 改道(起点)
|
|
public OperateResult UpdateStartWay(string taskNo, string oldLocation, string newLocation, string area, string reasonCode)
|
{
|
return UseTransaction(trans =>
|
{
|
//更新任务起点货位
|
CreateDAL<DapperDAL<TN_WM_TASKEntity>>().Update(new
|
{
|
CN_S_START_BIT = newLocation,
|
CN_S_START_AREA = area
|
}, new { CN_S_TASK_NO = taskNo }, trans);
|
|
if (string.IsNullOrEmpty(reasonCode)) return;
|
if (reasonCode.Equals("2001")) //处理重入异常
|
{
|
//更新货位状态
|
CreateDAL<DapperDAL<TN_WM_LOCATION_EXTEntity>>().Update(new { CN_S_LOCATION_STATE = "重入异常" }, new { CN_S_LOCATION_CODE = oldLocation }, trans);
|
var locationModel = CreateDAL<DapperDAL<AutoBomLocationEntity>>().GetSingleEntity(new { CN_S_LOCATION_CODE = oldLocation });
|
BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(oldLocation, "", "重入异常", "因重入异常AMS调用改道接口成功后将原货位设置为重入异常", "AMS", "", taskNo, locationModel.CN_S_STOCK_CODE, locationModel.CN_S_AREA_CODE, trans);
|
}
|
});
|
}
|
|
#endregion
|
|
#region 改道(终点)
|
|
public OperateResult UpdateEndWay(string taskNo, string oldLocation, string newLocation, string area, string reasonCode)
|
{
|
return UseTransaction(trans =>
|
{
|
//更新任务起点货位
|
CreateDAL<DapperDAL<TN_WM_TASKEntity>>().Update(new
|
{
|
CN_S_END_BIT = newLocation,
|
CN_S_START_AREA = area
|
}, new { CN_S_TASK_NO = taskNo }, trans);
|
|
if (string.IsNullOrEmpty(reasonCode)) return;
|
if (reasonCode.Equals("2001")) //处理重入异常
|
{
|
//更新货位状态
|
CreateDAL<DapperDAL<TN_WM_LOCATION_EXTEntity>>().Update(new { CN_S_LOCATION_STATE = "重入异常" }, new { CN_S_LOCATION_CODE = oldLocation }, trans);
|
var locationModel = CreateDAL<DapperDAL<AutoBomLocationEntity>>().GetSingleEntity(new { CN_S_LOCATION_CODE = oldLocation });
|
BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(oldLocation, "", "重入异常", "因重入异常AMS调用改道接口成功后将原货位设置为重入异常", "AMS", "", taskNo, locationModel.CN_S_STOCK_CODE, locationModel.CN_S_AREA_CODE, trans);
|
}
|
});
|
}
|
|
#endregion
|
|
#region 按条件查询任务
|
|
public List<TN_WM_TASKEntity> GetTask(string sqlWhere)
|
{
|
return DALCreator.Create<TN_WM_TASKDAL>().GetTask(sqlWhere);
|
}
|
|
#endregion
|
|
#region 流转任务下达AMS指令
|
/// <summary>
|
/// 下达任务给AMS
|
/// </summary>
|
/// <param name="list"></param>
|
/// <returns></returns>
|
/// <History>[Hanhe(DBS)] 2018-5-5</History>
|
public SqlExecuteResult SendTask(List<TN_WM_TRANSPORT_TASKEntity> list, string businessType)
|
{
|
try
|
{
|
string strTrayType = string.Empty;
|
|
List<JObject> sendParams = new List<JObject>();
|
foreach (TN_WM_TRANSPORT_TASKEntity m in list)
|
{
|
|
JObject sendParam = new JObject();
|
sendParam.Add("businessType", businessType);
|
sendParam.Add("whNoFrom", m.CN_S_STOCK_CODE);
|
sendParam.Add("whNoTo", m.CN_S_STOCK_CODE);
|
sendParam.Add("sysName", "WMS");
|
sendParam.Add("deviceName", "WMS");
|
sendParam.Add("taskNo", m.CN_S_TASK_NO);
|
sendParam.Add("locationFrom", m.CN_S_START_BIT);
|
sendParam.Add("locationTo", m.CN_S_END_BIT);
|
sendParam.Add("priority", m.CN_N_PRIORITY);
|
sendParam.Add("areaTo", JsonConvert.SerializeObject(m.END_AREAS));
|
sendParams.Add(sendParam);
|
}
|
return new InfRequest().SendTask(sendParams, "");
|
}
|
catch (Exception ex)
|
{
|
|
return new SqlExecuteResult() { Exception = ex };
|
}
|
}
|
#endregion
|
|
}
|
}
|