using HH.WMS.BLL.Basic;
|
using HH.WMS.BLL.InStock;
|
using HH.WMS.BLL.MoveStock;
|
using HH.WMS.BLL.SysMgr;
|
using HH.WMS.Common;
|
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.MoveStock;
|
using HH.WMS.DAL.SysMgr;
|
using HH.WMS.Entitys;
|
using HH.WMS.Entitys.Basic;
|
using HH.WMS.Entitys.Dto;
|
using HH.WMS.Entitys.Entitys;
|
using HH.WMS.Entitys.External;
|
using Newtonsoft.Json;
|
using Newtonsoft.Json.Converters;
|
using System;
|
using System.Collections.Generic;
|
using System.Data;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
|
namespace HH.WMS.BLL.External
|
{
|
public class WmsApiForWxysBLL : WmsApiBaseBLL
|
{
|
|
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入库任务号异常,请检查是否维护生成规则!");
|
return executeInWorkAreaPara;
|
}
|
}
|
|
//托盘码
|
if (string.IsNullOrEmpty(executeInWorkAreaPara.InWorkAreaEntity.trayCode))
|
{
|
//转运并且不传托盘号,默认从货位中获取
|
if (executeInWorkAreaPara.InWorkAreaEntity.isTransport == "Y")
|
{
|
//查找托盘号和物料编码 and by liuying
|
var lstObj = BLLCreator.Create<TN_WM_B_TRAY_LOCATIONBLL>().GetListByLocationCode(executeInWorkAreaPara.InWorkAreaEntity.startBit);
|
|
if (lstObj.Count > 0)
|
{
|
//去除已经在任务中的托盘
|
var strTray = string.Join("','", lstObj.Select(o => o.CN_S_TRAY_CODE).ToList());
|
var lstTasks = BLLCreator.Create<TN_WM_TASKBLL>().GetTask(" AND CN_S_TRAY_CODE in ('" + strTray + "') AND (CN_S_STATE = '未执行' or CN_S_STATE = '执行中')");
|
var lstInTaskTray = lstTasks.Select(o => o.CN_S_TRAY_CODE).ToList();
|
lstObj.RemoveAll(o => lstInTaskTray.Contains(o.CN_S_TRAY_CODE));
|
|
if (lstObj.Count > 0)
|
{
|
executeInWorkAreaPara.InWorkAreaEntity.trayCode = lstObj[0].CN_S_TRAY_CODE;
|
var itemEntity = new ChaoYangItemDataEntity();
|
executeInWorkAreaPara.InWorkAreaEntity.data = new List<ChaoYangItemDataEntity>();
|
|
//根据托盘号查询托盘产品关联信息主表
|
var trayItemMst = BLLCreator.Create<TN_WM_B_TRAY_ITEM_RELBLL>().GetTrayItemMst(" AND CN_S_TRAY_CODE ='" + lstObj[0].CN_S_TRAY_CODE + "'");
|
if (trayItemMst.Count > 0)
|
{
|
//查询托盘产品关联信息子表
|
var trayItemDtl = BLLCreator.Create<TN_WM_B_TRAY_ITEM_RELBLL>().GetTrayItemDtl(" AND CN_PARENT_GUID='" + trayItemMst[0].CN_GUID + "'");
|
itemEntity.itemCode = trayItemMst[0].CN_S_ITEM_CODE;
|
itemEntity.itemName = trayItemMst[0].CN_S_ITEM_NAME;
|
itemEntity.itemPackUnit = trayItemDtl[0].CN_S_PACKING_UNIT;
|
itemEntity.qty = (decimal)(trayItemMst[0].CN_F_QUANTITY == null ? 0 : trayItemMst[0].CN_F_QUANTITY);
|
itemEntity.lotNo = trayItemDtl[0].CN_S_PRODUCTION_BATCH;
|
itemEntity.itemState = trayItemMst[0].CN_S_ITEM_STATE;
|
itemEntity.productionDate = trayItemDtl[0].CN_T_PRODUCTION;
|
itemEntity.uniqueCode = trayItemDtl[0].CN_S_UNIQUE_CODE;
|
//itemEntity.itemWeight = trayItemDtl[0].CN_S_SERIAL_NO;
|
itemEntity.itemModel = trayItemMst[0].CN_S_MODEL;
|
executeInWorkAreaPara.InWorkAreaEntity.data.Add(itemEntity);
|
}
|
}
|
else
|
{
|
executeInWorkAreaPara.BasisResponse = BasisResponse.Error("该货位" + executeInWorkAreaPara.InWorkAreaEntity.startBit + "中的托盘都已在任务中,不允许重复下达");
|
}
|
}
|
else
|
{
|
executeInWorkAreaPara.BasisResponse = BasisResponse.Error("起点货位" + executeInWorkAreaPara.InWorkAreaEntity.startBit + "没有绑定托盘");
|
return executeInWorkAreaPara;
|
}
|
}
|
else
|
{
|
var trayLocation = BLLCreator.Create<TN_WM_B_TRAY_LOCATIONBLL>().GetByLocationCode(executeInWorkAreaPara.InWorkAreaEntity.startBit);
|
if (trayLocation == null)
|
{
|
//生成虚拟托盘
|
var postData = "{\"appCode\":\"" + Constants.appCode + "\",\"ruleName\":\"" + Constants.VirtualTray + "\",\"orgId\":\"0\",\"orgFlag\":\"\"}";
|
executeInWorkAreaPara.InWorkAreaEntity.trayCode = WebApiManager.HttpAutoBom_Post("api/BillRule/GenBillNo", postData);
|
//executeInWorkAreaPara.BasisResponse = BasisResponse.Error("起点货位" + executeInWorkAreaPara.InWorkAreaEntity.startBit + "没有绑定托盘");
|
//return executeInWorkAreaPara;
|
|
}
|
else
|
{
|
executeInWorkAreaPara.InWorkAreaEntity.trayCode = trayLocation.CN_S_TRAY_CODE;
|
// if (executeInWorkAreaPara.InWorkAreaEntity.projectCode == "nt001")
|
//if (executeInWorkAreaPara.TrayInfo == null)
|
//{
|
// {
|
// executeInWorkAreaPara.BasisResponse = BasisResponse.Error("托盘信息表无当前托盘" + trayLocation.CN_S_TRAY_CODE);
|
// return executeInWorkAreaPara;
|
// }
|
//}
|
}
|
}
|
}
|
|
//处理物料编码
|
if (executeInWorkAreaPara.InWorkAreaEntity.data != null)
|
{
|
foreach (var itemData in executeInWorkAreaPara.InWorkAreaEntity.data)
|
{
|
var item = BLLCreator.Create<HH.WMS.BLL.Basic.TN_WMS_ITEMBLL>().GetItem(itemData.itemCode);
|
//BLLCreator.Create<DapperBLL<AutoBomItemEntity>>().GetSingleEntity(new { CN_S_ITEM_CODE = itemData.itemCode });
|
if (item != null)
|
{
|
itemData.itemPackUnit = item.CN_S_PACK_UNIT;
|
itemData.itemName = item.CN_S_ITEM_NAME;
|
}
|
else
|
{
|
executeInWorkAreaPara.BasisResponse = BasisResponse.Error("物料" + itemData.itemCode + "在AutoBom中没有维护");
|
return executeInWorkAreaPara;
|
}
|
}
|
}
|
|
executeInWorkAreaPara.EndLocationEntity = DALCreator.Create<TN_WMS_LOCATIONDAL>().GetModel(executeInWorkAreaPara.InWorkAreaEntity.endBit);
|
if (executeInWorkAreaPara.EndLocationEntity != null)
|
{
|
executeInWorkAreaPara.EndStockAreaEntity = DALCreator.Create<TN_AB_B_STOCK_AREADAL>().GetStockAreaEntity(executeInWorkAreaPara.EndLocationEntity.CN_S_AREA_CODE);
|
if (executeInWorkAreaPara.EndStockAreaEntity == null)
|
{
|
executeInWorkAreaPara.BasisResponse = BasisResponse.Error("结束位置:" + executeInWorkAreaPara.InWorkAreaEntity.endBit + ",库区:" + executeInWorkAreaPara.EndLocationEntity.CN_S_AREA_CODE + "未找到库区信息!");
|
return executeInWorkAreaPara;
|
}
|
}
|
else
|
{
|
executeInWorkAreaPara.BasisResponse = BasisResponse.Error("结束位置:" + executeInWorkAreaPara.InWorkAreaEntity.endBit + "未找到货位信息!");
|
return executeInWorkAreaPara;
|
}
|
if (executeInWorkAreaPara.EndStockAreaEntity.CN_C_IS_CONTROL_QTY.Equals("Y"))
|
{
|
executeInWorkAreaPara.RollbackLocations.Add(executeInWorkAreaPara.InWorkAreaEntity.endBit);
|
}
|
|
return executeInWorkAreaPara;
|
}
|
|
|
|
|
#region 完工回报
|
|
public override OperateResult ExecuteState(string taskNo, string taskState, LogPara logPara)
|
{
|
var executeStatePara = ExecuteStateHandlePara(taskNo, taskState, logPara);
|
if (!executeStatePara.result.Success) return executeStatePara.result;
|
|
if (executeStatePara.transportTask.CN_S_STATE == "完成")
|
{
|
return OperateResult.Error("已完成的任务不能再回报状态!");
|
}
|
var result = new OperateResult();
|
|
switch (taskState)
|
{
|
case "执行中":
|
result = StartTask(executeStatePara, logPara);
|
break;
|
case "完成":
|
result = CompleteTask(executeStatePara, logPara);
|
if (result.Success)
|
BLLCreator.Create<MoveStockTaskBLL>().CheckComplete(taskNo, null, logPara);
|
break;
|
case "取消":
|
result = CancelTask(executeStatePara, logPara);
|
break;
|
case "空取":
|
result = BLLCreator.Create<TN_WM_TASKBLL>().EmptyFetchTask(executeStatePara);
|
break;
|
case "取货完成":
|
result = BLLCreator.Create<TN_WM_TASKBLL>().PickSucc(executeStatePara, logPara);
|
break;
|
case "卸货完成":
|
result = BLLCreator.Create<TN_WM_TASKBLL>().UnloadingSucc(executeStatePara, new Redis.ReisModel.RedisUserEntity(), logPara);
|
break;
|
}
|
|
return result;
|
}
|
|
/// <summary>
|
/// 完工回报-处理参数
|
/// </summary>
|
/// <param name="taskNo"></param>
|
/// <param name="taskState"></param>
|
/// <param name="logPara"></param>
|
/// <returns></returns>
|
public override ExecuteStateParaDto ExecuteStateHandlePara(string taskNo, string taskState, LogPara logPara)
|
{
|
var executeStatePara = new ExecuteStateParaDto();
|
executeStatePara.result = OperateResult.Succeed();
|
|
//查询任务
|
executeStatePara.transportTask = CreateDAL<DapperDAL<TN_WM_TASKEntity>>().GetSingleEntity(new { CN_S_TASK_NO = taskNo });
|
//Log.Detail(logPara, LogDescribe.Content(executeStatePara.transportTask));
|
if (executeStatePara.transportTask == null)
|
{
|
executeStatePara.result = OperateResult.Error("未找到任务:" + taskNo);
|
return executeStatePara;
|
}
|
|
//起点货位是否绑定托盘
|
executeStatePara.startTrayLocation = CreateDAL<DapperDAL<TN_WM_B_TRAY_LOCATIONEntity>>().GetSingleEntity(new { CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_START_BIT, executeStatePara.transportTask.CN_S_TRAY_CODE });
|
//终点货位是否绑定托盘
|
executeStatePara.endTrayLocation = CreateDAL<DapperDAL<TN_WM_B_TRAY_LOCATIONEntity>>().GetSingleEntity(new { CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_END_BIT, executeStatePara.transportTask.CN_S_TRAY_CODE });
|
//起点货位是否绑定任务
|
executeStatePara.startIsCurrentTask = CreateDAL<DapperDAL<TN_WM_LOCATION_EXTEntity>>().GetSingleEntity(new { CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_START_BIT, CN_S_TASK_NO = taskNo });
|
//终点货位是否绑定任务
|
executeStatePara.endIsCurrentTask = CreateDAL<DapperDAL<TN_WM_LOCATION_EXTEntity>>().GetSingleEntity(new { CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_END_BIT, CN_S_TASK_NO = taskNo });
|
//托盘物料主表
|
executeStatePara.trayItemMsts = CreateDAL<DapperDAL<TN_WM_B_TRAY_ITEM_MSTEntity>>().GetList(new { executeStatePara.transportTask.CN_S_TRAY_CODE });
|
if (executeStatePara.trayItemMsts.Count > 0)
|
{
|
foreach (var trayItemMst in executeStatePara.trayItemMsts)
|
{
|
var item = CreateDAL<TN_WMS_ITEMDAL>().GetItemEntity(trayItemMst.CN_S_ITEM_CODE);
|
trayItemMst.CN_F_INQTY = item.CN_F_NW;
|
trayItemMst.CN_F_QUANTITY = 0;//CN_S_WEIGHT = 0;//= item.CN_F_NW;
|
//trayItemMst.CN_F_INQTY = 0;
|
trayItemMst.TrayItemDtlList = CreateDAL<DapperDAL<TN_WM_B_TRAY_ITEM_DTLEntity>>().GetList(new { CN_PARENT_GUID = trayItemMst.CN_GUID });
|
|
//if (trayItemMst.TrayItemDtlList.Count() > 0)
|
//{
|
// foreach (var trayItemDtl in trayItemMst.TrayItemDtlList)
|
// {
|
// trayItemMst.CN_F_QUANTITY += Convert.ToDecimal(trayItemDtl.CN_S_SERIAL_NO);
|
// trayItemMst.CN_S_UNIQUE_CODE += (trayItemDtl.CN_S_UNIQUE_CODE + ",");
|
// trayItemMst.CN_S_LOT_NO += (trayItemDtl.CN_S_LOT_NO + ",");
|
// trayItemMst.CN_S_FIGURE_NO += (trayItemDtl.CN_S_EXT1 + ",");
|
// }
|
// if (trayItemMst.CN_S_UNIQUE_CODE.Length > 0)
|
// trayItemMst.CN_S_UNIQUE_CODE = trayItemMst.CN_S_UNIQUE_CODE.Substring(0, trayItemMst.CN_S_UNIQUE_CODE.Length - 1);
|
// if (trayItemMst.CN_S_LOT_NO.Length > 0)
|
// trayItemMst.CN_S_LOT_NO = trayItemMst.CN_S_LOT_NO.Substring(0, trayItemMst.CN_S_LOT_NO.Length - 1);
|
// if (trayItemMst.CN_S_FIGURE_NO.Length > 0)
|
// trayItemMst.CN_S_FIGURE_NO = trayItemMst.CN_S_FIGURE_NO.Substring(0, trayItemMst.CN_S_FIGURE_NO.Length - 1);
|
//}
|
}
|
}
|
Log.Detail(logPara, "托盘物料关联表数据:" + LogDescribe.Content(executeStatePara.trayItemMsts));
|
|
//起点库区
|
executeStatePara.startStockArea = CreateDAL<TN_AB_B_STOCK_AREADAL>().GetStockAreaEntity(executeStatePara.transportTask.CN_S_START_AREA.Trim());
|
//结束库区
|
executeStatePara.endStockArea = CreateDAL<TN_AB_B_STOCK_AREADAL>().GetStockAreaEntity(executeStatePara.transportTask.CN_S_END_AREA.Trim());
|
//任务状态
|
executeStatePara.taskState = taskState;
|
return executeStatePara;
|
}
|
|
public override OperateResult CompleteTask(ExecuteStateParaDto executeStatePara, LogPara logPara)
|
{
|
var isControlStockQty = executeStatePara.trayItemMsts.Count > 0;
|
Log.Detail(logPara, "isControlStockQty: " + isControlStockQty);
|
|
#region 组合量表参数
|
|
//获取上架量=总量-分配量
|
//var trayInventory = CreateDAL<TN_WM_B_TRAY_ITEM_RELDAL>().GetTrayInventoryQty(executeStatePara.transportTask.CN_S_TRAY_CODE);
|
var addAreaQty = new List<TN_WM_B_AREA_QTYEntity>();
|
var addStockQty = new List<TN_WM_B_STOCK_QTYEntity>();
|
|
if (isControlStockQty)
|
{
|
foreach (var trayItemMst in executeStatePara.trayItemMsts)
|
{
|
foreach (var trayItemDtl in trayItemMst.TrayItemDtlList)
|
{
|
addAreaQty.Add(new TN_WM_B_AREA_QTYEntity()
|
{
|
CN_S_ITEM_CODE = trayItemMst.CN_S_ITEM_CODE,
|
CN_S_ITEM_NAME = trayItemMst.CN_S_ITEM_NAME,
|
CN_S_ITEM_STATE = trayItemMst.CN_S_ITEM_STATE,
|
CN_S_OWNER = trayItemMst.CN_S_OWNER,
|
CN_S_PRODUCTION_BATCH = trayItemMst.CN_S_PRODUCTION_BATCH,
|
CN_S_LOT_NO = trayItemDtl.CN_S_LOT_NO,
|
//CN_F_QUANTITY = Convert.ToDecimal(trayItemDtl.CN_S_SERIAL_NO),//.CN_S_WEIGHT,//重量 Convert.ToDecimal(trayItemMst.CN_F_INQTY),//trayItemMst.CN_F_QUANTITY * trayItemMst.CN_S_WEIGHT,
|
CN_F_QUANTITY = Convert.ToDecimal(trayItemDtl.CN_F_PACKING_QTY),
|
CN_S_STOCK_CODE = executeStatePara.transportTask.CN_S_STOCK_CODE,
|
CN_F_PLANNED_QTY = trayItemMst.CN_F_INQTY,
|
CN_S_MODEL = trayItemMst.CN_S_MODEL,
|
CN_S_MEASURE_UNIT = trayItemMst.CN_S_MEASURE_UNIT,
|
CN_S_FIGURE_NO = trayItemDtl.CN_S_EXT1
|
});
|
|
addStockQty.Add(new TN_WM_B_STOCK_QTYEntity()
|
{
|
CN_S_ITEM_CODE = trayItemMst.CN_S_ITEM_CODE,
|
CN_S_ITEM_NAME = trayItemMst.CN_S_ITEM_NAME,
|
CN_S_ITEM_STATE = trayItemMst.CN_S_ITEM_STATE,
|
CN_S_OWNER = trayItemMst.CN_S_OWNER,
|
CN_S_PRODUCTION_BATCH = trayItemMst.CN_S_PRODUCTION_BATCH,
|
CN_S_LOT_NO = trayItemDtl.CN_S_LOT_NO,
|
//CN_F_QUANTITY = Convert.ToDecimal(trayItemDtl.CN_S_SERIAL_NO),//CN_S_WEIGHT,//trayItemMst.CN_F_QUANTITY * trayItemMst.CN_S_WEIGHT,
|
CN_F_QUANTITY = Convert.ToDecimal(trayItemDtl.CN_F_PACKING_QTY),
|
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
|
|
var or = UseTransaction(trans =>
|
{
|
//更新任务状态
|
CreateDAL<DapperDAL<TN_WM_TASKEntity>>().Update(new
|
{
|
CN_S_MODIFY = "",
|
CN_S_MODIFY_BY = "",
|
CN_T_END = DateTime.Now,
|
CN_T_MODIFY = DateTime.Now,
|
CN_S_STATE = executeStatePara.taskState
|
}, new { executeStatePara.transportTask.CN_S_TASK_NO }, trans);
|
Log.Detail(logPara, "更新任务状态-任务号:" + executeStatePara.transportTask.CN_S_TASK_NO + "状态为:" + executeStatePara.taskState);
|
|
#region 入库 + 转运
|
|
if (executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("入库") || executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("转运"))
|
{
|
var trayLocation = new TN_WM_B_TRAY_LOCATIONEntity()
|
{
|
CN_GUID = Guid.NewGuid().ToString(),
|
CN_N_INDEX = 1,
|
CN_S_CREATOR = "",
|
CN_S_CREATOR_BY = "",
|
CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_END_BIT,
|
CN_S_STOCK_AREA = executeStatePara.transportTask.CN_S_END_AREA,
|
CN_S_STOCK_CODE = executeStatePara.transportTask.CN_S_STOCK_CODE,
|
CN_S_TRAY_CODE = executeStatePara.transportTask.CN_S_TRAY_CODE,
|
CN_T_CREATE = DateTime.Now
|
};
|
|
if (executeStatePara.startTrayLocation != null)
|
{
|
//解绑托盘与货位的关系
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_LOCATIONEntity>>().Delete(new
|
{
|
executeStatePara.transportTask.CN_S_TRAY_CODE,
|
CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_START_BIT
|
}, trans);
|
Log.Detail(logPara, "解绑任务的托盘和起点货位关联!");
|
|
#region 下架记录
|
|
if (executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("转运"))
|
{
|
CompleteTaskDownHistory(executeStatePara, logPara, trans);
|
}
|
|
if (executeStatePara.transportTask.CN_S_START_CONTROL_INV.Equals("Y") && executeStatePara.transportTask.CN_S_START_AREA != executeStatePara.transportTask.CN_S_END_AREA) //降低起点库存
|
{
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().ReduceAreaQty(addAreaQty, executeStatePara.transportTask.CN_S_START_AREA, logPara, trans);
|
}
|
|
#endregion
|
}
|
|
if (executeStatePara.endTrayLocation == null)
|
{
|
//添加托盘货位
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_LOCATIONEntity>>().Add(trayLocation, trans);
|
Log.Detail(logPara, "添加托盘货位关联,内容:" + LogDescribe.Content(trayLocation));
|
|
if (isControlStockQty)
|
{
|
#region 添加上架记录,升库存
|
|
CompleteTaskUpHistory(executeStatePara, logPara, trans);
|
|
|
if (string.IsNullOrEmpty(executeStatePara.transportTask.CN_S_END_CONTROL_INV))
|
{
|
trans.Rollback();
|
return;
|
}
|
|
if (executeStatePara.transportTask.CN_S_END_CONTROL_INV.Equals("Y") && executeStatePara.transportTask.CN_S_START_AREA != executeStatePara.transportTask.CN_S_END_AREA) //如果起点和终点在一个库区,不增加
|
{
|
//按未入库量增加结束库区量
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().AddAreaQty(addAreaQty, executeStatePara.transportTask.CN_S_END_AREA, logPara, trans);
|
if (!executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("转运"))
|
{
|
//升仓库库存
|
CreateDAL<TN_WM_B_STOCK_QTYDAL>().AddStockQty(addStockQty, trans);
|
Log.Detail(logPara, "增加仓库库存!");
|
}
|
}
|
|
#endregion
|
}
|
|
//终点
|
if (executeStatePara.endIsCurrentTask != null && executeStatePara.transportTask.CN_C_END_IS_CONTROL_QTY.Equals("Y"))
|
{
|
CreateDAL<TN_WM_TASKDAL>().UpdateState(executeStatePara.transportTask.CN_S_END_BIT, "正常", "满", "预入库锁定", trans);
|
Log.Detail(logPara, "更新预入库锁定的货位状态为正常、满,货位号:" + executeStatePara.transportTask.CN_S_END_BIT);
|
|
//货位状态变化
|
BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(executeStatePara.transportTask.CN_S_END_BIT, "预入库锁定", "正常", "状态回报入库完成-终点", "", "", "", executeStatePara.endStockArea.CN_S_STOCK_CODE, executeStatePara.endStockArea.CN_S_AREA_CODE, trans);
|
}
|
|
//起点
|
if (executeStatePara.transportTask.CN_C_START_IS_CONTROL_QTY.Equals("Y") && executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("转运"))
|
{
|
CreateDAL<TN_WM_TASKDAL>().UpdateState(executeStatePara.transportTask.CN_S_START_BIT, "正常", "空", "预出库锁定", trans);
|
Log.Detail(logPara, "更新预出库锁定的货位状态为正常、空,起点货位号:" + executeStatePara.transportTask.CN_S_START_BIT);
|
|
//货位状态变化
|
BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(executeStatePara.transportTask.CN_S_START_BIT, "预出库锁定", "正常", "状态回报转运完成-起点", "", "", "", executeStatePara.startStockArea.CN_S_STOCK_CODE, executeStatePara.startStockArea.CN_S_AREA_CODE, trans);
|
}
|
}
|
}
|
|
#endregion
|
|
#region 出库
|
|
if (executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("出库"))
|
{
|
if (executeStatePara.startTrayLocation != null)
|
{
|
BLLCreator.Create<TN_WM_B_TRAY_LOCATIONBLL>().Delete(executeStatePara.transportTask.CN_S_TRAY_CODE, executeStatePara.transportTask.CN_S_START_BIT, trans, logPara);
|
BLLCreator.Create<TN_WM_B_TRAY_ITEM_RELBLL>().Delete(" CN_S_TRAY_CODE='" + executeStatePara.transportTask.CN_S_TRAY_CODE + "' ", trans, logPara);
|
|
if (isControlStockQty)
|
{
|
#region 添加下架记录,降库存
|
|
CompleteTaskDownHistory(executeStatePara, logPara, trans);
|
|
if (executeStatePara.transportTask.CN_S_START_CONTROL_INV.Equals("Y"))
|
{
|
BLLCreator.Create<TN_WM_B_AREA_QTYBLL>().ReduceQtyAndAlloc(addAreaQty, executeStatePara.transportTask.CN_S_START_AREA, trans, logPara);
|
if (!executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("转运"))
|
BLLCreator.Create<TN_WM_B_STOCK_QTYBLL>().ReduceQtyAndAlloc(addStockQty, trans, logPara);
|
}
|
|
#endregion
|
}
|
|
if (executeStatePara.startIsCurrentTask != null && executeStatePara.transportTask.CN_C_START_IS_CONTROL_QTY.Equals("Y"))
|
{
|
BLLCreator.Create<TN_WM_TASKBLL>().UpdateState(executeStatePara.transportTask.CN_S_START_BIT, "正常", "空", "预出库锁定", trans, logPara);
|
BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(executeStatePara.transportTask.CN_S_START_BIT, "预出库锁定", "正常", "状态回报出库完成", "", "", "", executeStatePara.endStockArea.CN_S_STOCK_CODE, executeStatePara.endStockArea.CN_S_AREA_CODE, trans);
|
}
|
}
|
}
|
|
#endregion
|
|
#region 上架
|
|
if (executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("上架"))
|
{
|
var trayLocation = new TN_WM_B_TRAY_LOCATIONEntity()
|
{
|
CN_GUID = Guid.NewGuid().ToString(),
|
CN_N_INDEX = 1,
|
CN_S_CREATOR = "",
|
CN_S_CREATOR_BY = "",
|
CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_END_BIT,
|
CN_S_STOCK_AREA = executeStatePara.transportTask.CN_S_END_AREA,
|
CN_S_STOCK_CODE = executeStatePara.transportTask.CN_S_STOCK_CODE,
|
CN_S_TRAY_CODE = executeStatePara.transportTask.CN_S_TRAY_CODE,
|
CN_T_CREATE = DateTime.Now
|
};
|
|
if (executeStatePara.endTrayLocation == null)
|
{
|
//添加托盘货位
|
var addResult = BLLCreator.Create<TN_WM_B_TRAY_LOCATIONBLL>().Add(trayLocation, trans, logPara);
|
Log.Detail(logPara, "添加托盘货位结果:" + JsonConvert.SerializeObject(addResult));
|
//CreateDAL<DapperDAL<TN_WM_B_TRAY_LOCATIONEntity>>().Add(trayLocation, trans);
|
|
if (isControlStockQty)
|
{
|
//获取配置是否启用收货区
|
var strategyValue = BLLCreator.Create<DapperBaseBLL>().GetStrategy(executeStatePara.transportTask.CN_S_STOCK_CODE, StrategyKey.AreaQtyReceiveGood);
|
|
#region 添加上架记录,升库存
|
|
CompleteTaskUpHistory(executeStatePara, logPara, trans);
|
|
if (string.IsNullOrEmpty(executeStatePara.transportTask.CN_S_END_CONTROL_INV))
|
{
|
trans.Rollback();
|
return;
|
}
|
|
//启用收货区
|
if (strategyValue.Equals(Constants.Y))
|
{
|
Log.Detail(logPara, "启用收货区!");
|
|
//降低起始库区(收货区)库存
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().ReduceAreaQty(addAreaQty, executeStatePara.transportTask.CN_S_START_AREA, logPara, trans);
|
if (executeStatePara.transportTask.CN_S_END_CONTROL_INV.Equals("Y"))
|
{
|
//增加结束库区量
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().AddAreaQty(addAreaQty, executeStatePara.transportTask.CN_S_END_AREA, logPara, trans);
|
}
|
}
|
else
|
{
|
if (executeStatePara.transportTask.CN_S_END_CONTROL_INV.Equals("Y"))
|
{
|
//按未入库量增加结束库区量
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().AddAreaQty(addAreaQty, executeStatePara.transportTask.CN_S_END_AREA, logPara, trans);
|
if (!executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("转运"))
|
{
|
//升仓库库存
|
CreateDAL<TN_WM_B_STOCK_QTYDAL>().AddStockQty(addStockQty, trans);
|
Log.Detail(logPara, "增加仓库量表完成!");
|
}
|
}
|
}
|
|
#endregion
|
}
|
|
if (executeStatePara.endIsCurrentTask != null && executeStatePara.transportTask.CN_C_END_IS_CONTROL_QTY.Equals("Y"))
|
{
|
CreateDAL<TN_WM_TASKDAL>().UpdateState(executeStatePara.transportTask.CN_S_END_BIT, "正常", "满", "预入库锁定", trans);
|
Log.Detail(logPara, "更新预入库锁定的货位状态为正常、满,终点货位号:" + executeStatePara.transportTask.CN_S_END_BIT);
|
|
////更新终点货位的任务号
|
//CreateDAL<DapperDAL<TN_WM_LOCATION_EXTEntity>>().Update(new { CN_S_TASK_NO = "" }, new { CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_END_BIT }, trans);
|
//Log.Detail(logPara, "更新终点货位" + executeStatePara.transportTask.CN_S_END_BIT + "的绑定任务号为空!");
|
|
//货位状态变化
|
BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(executeStatePara.transportTask.CN_S_END_BIT, "预入库锁定", "正常", "状态回报上架完成-终点", "", "", "", executeStatePara.endStockArea.CN_S_STOCK_CODE, executeStatePara.endStockArea.CN_S_AREA_CODE, trans);
|
}
|
|
if (executeStatePara.transportTask.CN_C_START_IS_CONTROL_QTY.Equals("Y"))
|
{
|
//解绑托盘与货位的关系
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_LOCATIONEntity>>().Delete(new
|
{
|
executeStatePara.transportTask.CN_S_TRAY_CODE,
|
CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_START_BIT
|
}, trans);
|
Log.Detail(logPara, "解绑任务的托盘和起点货位" + executeStatePara.transportTask.CN_S_START_BIT + "关联!");
|
|
CreateDAL<TN_WM_TASKDAL>().UpdateState(executeStatePara.transportTask.CN_S_START_BIT, "正常", "空", "预出库锁定", trans);
|
Log.Detail(logPara, "更新预出库锁定的货位状态为正常、空,起点货位号:" + executeStatePara.transportTask.CN_S_START_BIT);
|
|
////更新起点货位的任务号
|
//CreateDAL<DapperDAL<TN_WM_LOCATION_EXTEntity>>().Update(new { CN_S_TASK_NO = "" }, new { CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_START_BIT });
|
//Log.Detail(logPara, "更新起点货位" + executeStatePara.transportTask.CN_S_START_BIT + "的绑定任务号为空!");
|
|
//货位状态变化
|
BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(executeStatePara.transportTask.CN_S_START_BIT, "预出库锁定", "正常", "状态回报上架完成-起点", "", "", "", executeStatePara.startStockArea.CN_S_STOCK_CODE, executeStatePara.startStockArea.CN_S_AREA_CODE, trans);
|
}
|
}
|
}
|
|
#endregion
|
|
#region 下架/叫料
|
|
if (executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("下架") || executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("叫料"))
|
{
|
if (executeStatePara.startTrayLocation != null)
|
{
|
BLLCreator.Create<TN_WM_B_TRAY_LOCATIONBLL>().Delete(executeStatePara.transportTask.CN_S_TRAY_CODE, executeStatePara.transportTask.CN_S_START_BIT, trans, logPara);
|
if (executeStatePara.endStockArea.CN_C_IS_CONTROL_QTY.Equals("N"))
|
{
|
BLLCreator.Create<TN_WM_B_TRAY_ITEM_RELBLL>().Delete(" CN_S_TRAY_CODE='" + executeStatePara.transportTask.CN_S_TRAY_CODE + "' ", trans, logPara);
|
}
|
Log.Detail(logPara, "解除起点货位和托盘的绑定!");
|
|
if (isControlStockQty)
|
{
|
#region 添加下架记录,降库存
|
|
CompleteTaskDownHistory(executeStatePara, logPara, trans);
|
|
//获取配置是否启用收货区
|
var strategyValue = BLLCreator.Create<DapperBaseBLL>().GetStrategy(executeStatePara.transportTask.CN_S_STOCK_CODE, StrategyKey.AreaQtyDeliverGood);
|
|
if (strategyValue.Equals(Constants.Y))
|
{
|
if (executeStatePara.transportTask.CN_S_START_CONTROL_INV.Equals("Y"))
|
{
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().ReduceAreaQty(addAreaQty, executeStatePara.transportTask.CN_S_START_AREA, logPara, trans);
|
}
|
|
//增加终点库区(收货区)库存
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().AddAreaQty(addAreaQty, executeStatePara.transportTask.CN_S_END_AREA, logPara, trans);
|
}
|
else
|
{
|
if (executeStatePara.transportTask.CN_S_START_CONTROL_INV.Equals("Y"))
|
{
|
BLLCreator.Create<TN_WM_B_AREA_QTYBLL>().ReduceQtyAndAlloc(addAreaQty, executeStatePara.transportTask.CN_S_START_AREA, trans, logPara);
|
if (!executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("转运"))
|
BLLCreator.Create<TN_WM_B_STOCK_QTYBLL>().ReduceQtyAndAlloc(addStockQty, trans, logPara);
|
}
|
}
|
|
#endregion
|
}
|
|
if (executeStatePara.startIsCurrentTask != null && executeStatePara.transportTask.CN_C_START_IS_CONTROL_QTY.Equals("Y"))
|
{
|
BLLCreator.Create<TN_WM_TASKBLL>().UpdateState(executeStatePara.transportTask.CN_S_START_BIT, "正常", "空", "预出库锁定", trans, logPara);
|
BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(executeStatePara.transportTask.CN_S_START_BIT, "预出库锁定", "正常", "状态回报下架完成-起点", "", "", "", executeStatePara.startStockArea.CN_S_STOCK_CODE, executeStatePara.startStockArea.CN_S_AREA_CODE, trans);
|
}
|
|
if (executeStatePara.transportTask.CN_C_END_IS_CONTROL_QTY.Equals("Y"))
|
{
|
var trayLocation = new TN_WM_B_TRAY_LOCATIONEntity()
|
{
|
CN_GUID = Guid.NewGuid().ToString(),
|
CN_N_INDEX = 1,
|
CN_S_CREATOR = "",
|
CN_S_CREATOR_BY = "",
|
CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_END_BIT,
|
CN_S_STOCK_AREA = executeStatePara.transportTask.CN_S_END_AREA,
|
CN_S_STOCK_CODE = executeStatePara.transportTask.CN_S_STOCK_CODE,
|
CN_S_TRAY_CODE = executeStatePara.transportTask.CN_S_TRAY_CODE,
|
CN_T_CREATE = DateTime.Now
|
};
|
//添加托盘货位
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_LOCATIONEntity>>().Add(trayLocation, trans);
|
|
CreateDAL<TN_WM_TASKDAL>().UpdateState(executeStatePara.transportTask.CN_S_END_BIT, "正常", "满", "预入库锁定", trans);
|
Log.Detail(logPara, "更新预入库锁定的货位状态为正常、满,结束货位号:" + executeStatePara.transportTask.CN_S_END_BIT);
|
|
////更新终点货位的任务号
|
//CreateDAL<DapperDAL<TN_WM_LOCATION_EXTEntity>>().Update(new { CN_S_TASK_NO = "" }, new { CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_END_BIT });
|
//Log.Detail(logPara, "更新终点货位" + executeStatePara.transportTask.CN_S_END_BIT + "的绑定任务号为空!");
|
|
//货位状态变化
|
BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(executeStatePara.transportTask.CN_S_END_BIT, "预入库锁定", "正常", "状态回报下架完成-终点", "", "", "", executeStatePara.endStockArea.CN_S_STOCK_CODE, executeStatePara.endStockArea.CN_S_AREA_CODE, trans);
|
}
|
else
|
{
|
Log.Detail(logPara, "终点位置未管控数量!");
|
}
|
}
|
else
|
{
|
Log.Detail(logPara, "起点位置与托盘已经解绑!");
|
}
|
}
|
|
#endregion
|
|
#region 空托入(上架)
|
if (executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("空托入"))
|
{
|
Log.Detail(logPara, "开始执行空托入!");
|
var trayLocation = new TN_WM_B_TRAY_LOCATIONEntity()
|
{
|
CN_GUID = Guid.NewGuid().ToString(),
|
CN_N_INDEX = 1,
|
CN_S_CREATOR = "",
|
CN_S_CREATOR_BY = "",
|
CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_END_BIT,
|
CN_S_STOCK_AREA = executeStatePara.transportTask.CN_S_END_AREA,
|
CN_S_STOCK_CODE = executeStatePara.transportTask.CN_S_STOCK_CODE,
|
CN_S_TRAY_CODE = executeStatePara.transportTask.CN_S_TRAY_CODE,
|
CN_T_CREATE = DateTime.Now
|
};
|
Log.Detail(logPara, "endTrayLocation: " + JsonConvert.SerializeObject(executeStatePara.endTrayLocation));
|
if (executeStatePara.endTrayLocation == null)
|
{
|
//添加托盘货位
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_LOCATIONEntity>>().Add(trayLocation, trans);
|
|
if (isControlStockQty)
|
{
|
//获取配置是否启用收货区
|
var strategyValue = BLLCreator.Create<DapperBaseBLL>().GetStrategy(executeStatePara.transportTask.CN_S_STOCK_CODE, StrategyKey.AreaQtyReceiveGood);
|
|
#region 添加上架记录,升库存
|
|
CompleteTaskUpHistory(executeStatePara, logPara, trans);
|
|
if (string.IsNullOrEmpty(executeStatePara.transportTask.CN_S_END_CONTROL_INV))
|
{
|
trans.Rollback();
|
return;
|
}
|
|
//启用收货区
|
if (strategyValue.Equals(Constants.Y))
|
{
|
Log.Detail(logPara, "启用收货区!");
|
|
//降低起始库区(收货区)库存
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().ReduceAreaQty(addAreaQty, executeStatePara.transportTask.CN_S_START_AREA, logPara, trans);
|
if (executeStatePara.transportTask.CN_S_END_CONTROL_INV.Equals("Y"))
|
{
|
//增加结束库区量
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().AddAreaQty(addAreaQty, executeStatePara.transportTask.CN_S_END_AREA, logPara, trans);
|
}
|
}
|
else
|
{
|
if (executeStatePara.transportTask.CN_S_END_CONTROL_INV.Equals("Y"))
|
{
|
//按未入库量增加结束库区量
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().AddAreaQty(addAreaQty, executeStatePara.transportTask.CN_S_END_AREA, logPara, trans);
|
if (!executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("转运"))
|
{
|
//升仓库库存
|
CreateDAL<TN_WM_B_STOCK_QTYDAL>().AddStockQty(addStockQty, trans);
|
Log.Detail(logPara, "增加仓库量表完成!");
|
}
|
}
|
}
|
|
#endregion
|
}
|
|
if (executeStatePara.endIsCurrentTask != null && executeStatePara.transportTask.CN_C_END_IS_CONTROL_QTY.Equals("Y"))
|
{
|
CreateDAL<TN_WM_TASKDAL>().UpdateState(executeStatePara.transportTask.CN_S_END_BIT, "正常", "满", "预入库锁定", trans);
|
Log.Detail(logPara, "更新预入库锁定的货位状态为正常、满,终点货位号:" + executeStatePara.transportTask.CN_S_END_BIT);
|
|
////更新终点货位的任务号
|
//CreateDAL<DapperDAL<TN_WM_LOCATION_EXTEntity>>().Update(new { CN_S_TASK_NO = "" }, new { CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_END_BIT });
|
//Log.Detail(logPara, "更新终点货位" + executeStatePara.transportTask.CN_S_END_BIT + "的绑定任务号为空!");
|
|
//货位状态变化
|
BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(executeStatePara.transportTask.CN_S_END_BIT, "预入库锁定", "正常", "状态回报上架完成-终点", "", "", "", executeStatePara.endStockArea.CN_S_STOCK_CODE, executeStatePara.endStockArea.CN_S_AREA_CODE, trans);
|
}
|
|
if (executeStatePara.transportTask.CN_C_START_IS_CONTROL_QTY.Equals("Y"))
|
{
|
//解绑托盘与货位的关系
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_LOCATIONEntity>>().Delete(new
|
{
|
executeStatePara.transportTask.CN_S_TRAY_CODE,
|
CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_START_BIT
|
}, trans);
|
Log.Detail(logPara, "解绑任务的托盘和起点货位关联!");
|
|
CreateDAL<TN_WM_TASKDAL>().UpdateState(executeStatePara.transportTask.CN_S_START_BIT, "正常", "空", "预出库锁定", trans);
|
Log.Detail(logPara, "更新预出库锁定的货位状态为正常、空,起点货位号:" + executeStatePara.transportTask.CN_S_START_BIT);
|
|
////更新起点货位的任务号
|
//CreateDAL<DapperDAL<TN_WM_LOCATION_EXTEntity>>().Update(new { CN_S_TASK_NO = "" }, new { CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_START_BIT });
|
//Log.Detail(logPara, "更新起点货位" + executeStatePara.transportTask.CN_S_START_BIT + "的绑定任务号为空!");
|
|
//货位状态变化
|
BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(executeStatePara.transportTask.CN_S_START_BIT, "预出库锁定", "正常", "状态回报上架完成-起点", "", "", "", executeStatePara.startStockArea.CN_S_STOCK_CODE, executeStatePara.startStockArea.CN_S_AREA_CODE, trans);
|
}
|
}
|
}
|
#endregion
|
|
#region 空托出(下架)
|
if (executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("空托出"))
|
{
|
Log.Detail(logPara, "开始执行空托出!");
|
Log.Detail(logPara, "startTrayLocation: " + JsonConvert.SerializeObject(executeStatePara.startTrayLocation));
|
if (executeStatePara.startTrayLocation != null)
|
{
|
//解绑托盘与货位的关系
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_LOCATIONEntity>>().Delete(new
|
{
|
executeStatePara.transportTask.CN_S_TRAY_CODE,
|
CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_START_BIT
|
}, trans);
|
Log.Detail(logPara, "解绑任务的托盘和起点货位关联!");
|
|
////删除托盘产品关联
|
//CreateDAL<TN_WM_B_TRAY_ITEM_RELDAL>().Delete(" CN_S_TRAY_CODE='" + executeStatePara.transportTask.CN_S_TRAY_CODE + "' ");
|
//Log.Detail(logPara, "删除当前任务的托盘物料关联!");
|
|
if (isControlStockQty)
|
{
|
#region 添加下架记录,降库存
|
|
CompleteTaskDownHistory(executeStatePara, logPara, trans);
|
|
//获取配置是否启用收货区
|
var strategyValue = BLLCreator.Create<DapperBaseBLL>().GetStrategy(executeStatePara.transportTask.CN_S_STOCK_CODE, StrategyKey.AreaQtyDeliverGood);
|
|
if (strategyValue.Equals(Constants.Y))
|
{
|
if (executeStatePara.transportTask.CN_S_START_CONTROL_INV.Equals("Y"))
|
{
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().ReduceAreaQty(addAreaQty, executeStatePara.transportTask.CN_S_START_AREA, logPara, trans);
|
}
|
|
//增加终点库区(收货区)库存
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().AddAreaQty(addAreaQty, executeStatePara.transportTask.CN_S_END_AREA, logPara, trans);
|
}
|
else
|
{
|
if (executeStatePara.transportTask.CN_S_START_CONTROL_INV.Equals("Y"))
|
{
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().ReduceAreaQty(addAreaQty, executeStatePara.transportTask.CN_S_START_AREA, logPara, trans);
|
if (!executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("转运"))
|
{
|
//降低仓库库存
|
CreateDAL<TN_WM_B_STOCK_QTYDAL>().ReduceStockQty(addStockQty, trans);
|
Log.Detail(logPara, "降低仓库量表完成!");
|
}
|
}
|
}
|
|
#endregion
|
}
|
|
if (executeStatePara.startIsCurrentTask != null && executeStatePara.transportTask.CN_C_START_IS_CONTROL_QTY.Equals("Y"))
|
{
|
CreateDAL<TN_WM_TASKDAL>().UpdateState(executeStatePara.transportTask.CN_S_START_BIT, "正常", "空", "预出库锁定", trans);
|
Log.Detail(logPara, "更新预出库锁定的货位状态为正常、空,起始货位号:" + executeStatePara.transportTask.CN_S_START_BIT);
|
|
////更新起点货位的任务号
|
//CreateDAL<DapperDAL<TN_WM_LOCATION_EXTEntity>>().Update(new { CN_S_TASK_NO = "" }, new { CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_START_BIT });
|
//Log.Detail(logPara, "更新起点货位" + executeStatePara.transportTask.CN_S_START_BIT + "的绑定任务号为空!");
|
|
//货位状态变化
|
BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(executeStatePara.transportTask.CN_S_START_BIT, "预出库锁定", "正常", "状态回报下架完成-起点", "", "", "", executeStatePara.startStockArea.CN_S_STOCK_CODE, executeStatePara.startStockArea.CN_S_AREA_CODE, trans);
|
}
|
|
if (executeStatePara.transportTask.CN_C_END_IS_CONTROL_QTY.Equals("Y"))
|
{
|
var trayLocation = new TN_WM_B_TRAY_LOCATIONEntity()
|
{
|
CN_GUID = Guid.NewGuid().ToString(),
|
CN_N_INDEX = 1,
|
CN_S_CREATOR = "",
|
CN_S_CREATOR_BY = "",
|
CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_END_BIT,
|
CN_S_STOCK_AREA = executeStatePara.transportTask.CN_S_END_AREA,
|
CN_S_STOCK_CODE = executeStatePara.transportTask.CN_S_STOCK_CODE,
|
CN_S_TRAY_CODE = executeStatePara.transportTask.CN_S_TRAY_CODE,
|
CN_T_CREATE = DateTime.Now
|
};
|
////添加托盘货位
|
//CreateDAL<DapperDAL<TN_WM_B_TRAY_LOCATIONEntity>>().Add(trayLocation, trans);
|
|
CreateDAL<TN_WM_TASKDAL>().UpdateState(executeStatePara.transportTask.CN_S_END_BIT, "正常", "空", "预入库锁定", trans);
|
Log.Detail(logPara, "更新预入库锁定的货位状态为正常、满,结束货位号:" + executeStatePara.transportTask.CN_S_END_BIT);
|
|
////更新终点货位的任务号
|
//CreateDAL<DapperDAL<TN_WM_LOCATION_EXTEntity>>().Update(new { CN_S_TASK_NO = "" }, new { CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_END_BIT });
|
//Log.Detail(logPara, "更新终点货位" + executeStatePara.transportTask.CN_S_END_BIT + "的绑定任务号为空!");
|
|
//货位状态变化
|
BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(executeStatePara.transportTask.CN_S_END_BIT, "预入库锁定", "正常", "状态回报下架完成-终点", "", "", "", executeStatePara.endStockArea.CN_S_STOCK_CODE, executeStatePara.endStockArea.CN_S_AREA_CODE, trans);
|
}
|
}
|
}
|
#endregion
|
|
#region 移库
|
|
if (executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("移库"))
|
{
|
var trayLocation = new TN_WM_B_TRAY_LOCATIONEntity()
|
{
|
CN_GUID = Guid.NewGuid().ToString(),
|
CN_N_INDEX = 1,
|
CN_S_CREATOR = "",
|
CN_S_CREATOR_BY = "",
|
CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_END_BIT,
|
CN_S_STOCK_AREA = executeStatePara.transportTask.CN_S_END_AREA,
|
CN_S_STOCK_CODE = executeStatePara.transportTask.CN_S_STOCK_CODE,
|
CN_S_TRAY_CODE = executeStatePara.transportTask.CN_S_TRAY_CODE,
|
CN_T_CREATE = DateTime.Now
|
};
|
|
if (executeStatePara.startTrayLocation != null)
|
{
|
//解绑托盘与货位的关系
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_LOCATIONEntity>>().Delete(new
|
{
|
executeStatePara.transportTask.CN_S_TRAY_CODE,
|
CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_START_BIT
|
}, trans);
|
Log.Detail(logPara, "解绑任务的托盘和起点货位关联!");
|
}
|
|
if (executeStatePara.endTrayLocation == null)
|
{
|
//添加托盘货位
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_LOCATIONEntity>>().Add(trayLocation, trans);
|
Log.Detail(logPara, "添加托盘货位关联,内容:" + LogDescribe.Content(trayLocation));
|
|
if (isControlStockQty)
|
{
|
#region 下架记录
|
CompleteTaskDownHistory(executeStatePara, logPara, trans);
|
#endregion
|
|
#region 上架记录
|
|
CompleteTaskUpHistory(executeStatePara, logPara, trans);
|
|
if (string.IsNullOrEmpty(executeStatePara.transportTask.CN_S_END_CONTROL_INV))
|
{
|
Log.Detail(logPara, "终点库区" + executeStatePara.transportTask.CN_S_END_AREA + "不管控库存!executeStatePara.transportTask.CN_S_END_CONTROL_INV:" + executeStatePara.transportTask.CN_S_END_CONTROL_INV);
|
trans.Rollback();
|
return;
|
}
|
|
#endregion
|
|
#region 库存
|
if (executeStatePara.transportTask.CN_S_START_CONTROL_INV.Equals("Y")) //降低起点库存
|
{
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().ReduceAreaQtyAndAllocQty(addAreaQty, executeStatePara.transportTask.CN_S_START_AREA, logPara, trans);
|
}
|
|
if (executeStatePara.transportTask.CN_S_END_CONTROL_INV.Equals("Y")) //增加终点库存
|
{
|
//按未入库量增加结束库区量
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().AddAreaQty(addAreaQty, executeStatePara.transportTask.CN_S_END_AREA, logPara, trans);
|
}
|
#endregion
|
}
|
|
//终点
|
if (executeStatePara.endIsCurrentTask != null && executeStatePara.transportTask.CN_C_END_IS_CONTROL_QTY.Equals("Y"))
|
{
|
CreateDAL<TN_WM_TASKDAL>().UpdateState(executeStatePara.transportTask.CN_S_END_BIT, "正常", "满", "预入库锁定", trans);
|
Log.Detail(logPara, "更新预入库锁定的货位状态为正常、满,货位号:" + executeStatePara.transportTask.CN_S_END_BIT);
|
|
//货位状态变化
|
BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(executeStatePara.transportTask.CN_S_END_BIT, "预入库锁定", "正常", "状态回报入库完成-终点", "", "", "", executeStatePara.endStockArea.CN_S_STOCK_CODE, executeStatePara.endStockArea.CN_S_AREA_CODE, trans);
|
}
|
|
//起点
|
if (executeStatePara.transportTask.CN_C_START_IS_CONTROL_QTY.Equals("Y"))
|
{
|
CreateDAL<TN_WM_TASKDAL>().UpdateState(executeStatePara.transportTask.CN_S_START_BIT, "正常", "空", "预出库锁定", trans);
|
Log.Detail(logPara, "更新预出库锁定的货位状态为正常、空,起点货位号:" + executeStatePara.transportTask.CN_S_START_BIT);
|
|
//货位状态变化
|
BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(executeStatePara.transportTask.CN_S_START_BIT, "预出库锁定", "正常", "状态回报转运完成-起点", "", "", "", executeStatePara.startStockArea.CN_S_STOCK_CODE, executeStatePara.startStockArea.CN_S_AREA_CODE, trans);
|
}
|
}
|
}
|
|
#endregion
|
|
});
|
if (!or.Success) return or;
|
|
string isSendMes = Util.ToString(System.Configuration.ConfigurationManager.AppSettings["IsSendMes"]).Trim();
|
if (isSendMes == Constants.Y)
|
{
|
if (sendTypes.Exists(e => e == executeStatePara.transportTask.CN_S_EXT1))
|
{
|
var mesFeedingDtos = new List<WxysMesFeedingDto>();
|
if (executeStatePara.UpHistory != null && executeStatePara.UpHistory.Any())
|
{
|
foreach (var item in executeStatePara.UpHistory)
|
{
|
WxysMesFeedingDto dto = new WxysMesFeedingDto()
|
{
|
sendDate = DateTime.Now,
|
sendWorkCentre = "",
|
sendMaterialNo = item.CN_S_ITEM_CODE,
|
sendMaterialCon = item.CN_S_ITEM_NAME,
|
sendModel = item.CN_S_MODEL,
|
sendUnit = item.CN_S_MEASURE_UNIT,
|
sendNum = item.CN_F_PACKING_QTY ?? 0,
|
sendInstructNo = item.CN_S_LOT_NO,
|
sendOrder = item.CN_S_FIGURE_NO,
|
sendWeight = item.CN_F_QUANTITY,
|
sendType = executeStatePara.transportTask.CN_S_EXT1,
|
sendNo = ""
|
};
|
mesFeedingDtos.Add(dto);
|
}
|
}
|
if (executeStatePara.DownHistory != null && executeStatePara.DownHistory.Any())
|
{
|
foreach (var item in executeStatePara.DownHistory)
|
{
|
WxysMesFeedingDto dto = new WxysMesFeedingDto()
|
{
|
sendDate = DateTime.Now,
|
sendWorkCentre = "",
|
sendMaterialNo = item.CN_S_ITEM_CODE,
|
sendMaterialCon = item.CN_S_ITEM_NAME,
|
sendModel = item.CN_S_MODEL,
|
sendUnit = item.CN_S_MEASURE_UNIT,
|
sendNum = item.CN_F_PACKING_QTY ?? 0,
|
sendInstructNo = item.CN_S_LOT_NO,
|
sendOrder = item.CN_S_FIGURE_NO,
|
sendWeight = item.CN_F_QUANTITY,
|
sendType = executeStatePara.transportTask.CN_S_EXT1,
|
sendNo = ""
|
};
|
mesFeedingDtos.Add(dto);
|
}
|
}
|
if (mesFeedingDtos.Any())
|
{
|
IsoDateTimeConverter timeFormat = new IsoDateTimeConverter();
|
timeFormat.DateTimeFormat = "yyyy-MM-dd HH:mm:ss";
|
var req = JsonConvert.SerializeObject(mesFeedingDtos, timeFormat);
|
Log.Info("送料完成反馈 " + executeStatePara.transportTask.CN_S_EXT1, req);
|
var res = WebApiManager.HttpMes_Post("sbimes/YsFeeding/api/getFeeding", req);
|
Log.Info("送料完成反馈 " + executeStatePara.transportTask.CN_S_EXT1 + " 结果", res);
|
}
|
}
|
}
|
return OperateResult.Succeed();
|
}
|
|
public override OperateResult CancelTask(ExecuteStateParaDto executeStatePara, LogPara logPara)
|
{
|
if (!executeStatePara.transportTask.CN_S_STATE.Equals("未执行") && !executeStatePara.transportTask.CN_S_STATE.Equals("执行中"))
|
{
|
return OperateResult.Error("只能取消未执行和执行中的任务!");
|
}
|
var isControlStockQty = executeStatePara.trayItemMsts.Count > 0;
|
Log.Detail(logPara, "isControlStockQty: " + isControlStockQty);
|
|
#region 组合量表参数
|
|
//获取上架量=总量-分配量
|
//var trayInventory = CreateDAL<TN_WM_B_TRAY_ITEM_RELDAL>().GetTrayInventoryQty(executeStatePara.transportTask.CN_S_TRAY_CODE);
|
var addAreaQty = new List<TN_WM_B_AREA_QTYEntity>();
|
var addStockQty = new List<TN_WM_B_STOCK_QTYEntity>();
|
if (isControlStockQty)
|
{
|
foreach (var trayItemMst in executeStatePara.trayItemMsts)
|
{
|
foreach (var trayItemDtl in trayItemMst.TrayItemDtlList)
|
{
|
addAreaQty.Add(new TN_WM_B_AREA_QTYEntity()
|
{
|
CN_S_ITEM_CODE = trayItemMst.CN_S_ITEM_CODE,
|
CN_S_ITEM_NAME = trayItemMst.CN_S_ITEM_NAME,
|
CN_S_ITEM_STATE = trayItemMst.CN_S_ITEM_STATE,
|
CN_S_OWNER = trayItemMst.CN_S_OWNER,
|
CN_S_PRODUCTION_BATCH = trayItemMst.CN_S_PRODUCTION_BATCH,
|
CN_S_LOT_NO = trayItemDtl.CN_S_LOT_NO,
|
// CN_F_QUANTITY = Convert.ToDecimal(trayItemDtl.CN_S_SERIAL_NO),
|
CN_F_QUANTITY = Convert.ToDecimal(trayItemDtl.CN_F_PACKING_QTY),
|
CN_S_STOCK_CODE = executeStatePara.transportTask.CN_S_STOCK_CODE,
|
CN_S_STOCK_AREA = executeStatePara.transportTask.CN_S_STOCK_CODE,
|
CN_F_PLANNED_QTY = trayItemMst.CN_F_INQTY,
|
CN_S_MODEL = trayItemMst.CN_S_MODEL,
|
CN_S_MEASURE_UNIT = trayItemMst.CN_S_MEASURE_UNIT,
|
CN_S_FIGURE_NO = trayItemDtl.CN_S_EXT1
|
});
|
|
addStockQty.Add(new TN_WM_B_STOCK_QTYEntity()
|
{
|
CN_S_ITEM_CODE = trayItemMst.CN_S_ITEM_CODE,
|
CN_S_ITEM_NAME = trayItemMst.CN_S_ITEM_NAME,
|
CN_S_ITEM_STATE = trayItemMst.CN_S_ITEM_STATE,
|
CN_S_OWNER = trayItemMst.CN_S_OWNER,
|
CN_S_PRODUCTION_BATCH = trayItemMst.CN_S_PRODUCTION_BATCH,
|
CN_S_LOT_NO = trayItemDtl.CN_S_LOT_NO,
|
//CN_F_QUANTITY = Convert.ToDecimal(trayItemDtl.CN_S_SERIAL_NO),
|
CN_F_QUANTITY = Convert.ToDecimal(trayItemDtl.CN_F_PACKING_QTY),
|
CN_S_STOCK_CODE = executeStatePara.transportTask.CN_S_STOCK_CODE,
|
CN_S_STOCK_AREA = executeStatePara.transportTask.CN_S_END_AREA,
|
CN_F_PLANNED_QTY = trayItemMst.CN_F_INQTY,
|
CN_S_MODEL = trayItemMst.CN_S_MODEL,
|
CN_S_FIGURE_NO = trayItemDtl.CN_S_EXT1,
|
CN_S_MEASURE_UNIT = trayItemMst.CN_S_MEASURE_UNIT
|
});
|
}
|
}
|
Log.Detail(logPara, LogDescribe.Content(addAreaQty));
|
Log.Detail(logPara, LogDescribe.Content(addStockQty));
|
}
|
#endregion
|
return UseTransaction(trans =>
|
{
|
//更新任务状态
|
CreateDAL<DapperDAL<TN_WM_TASKEntity>>().Update(new
|
{
|
CN_S_MODIFY = "",
|
CN_S_MODIFY_BY = "",
|
CN_T_END = DateTime.Now,
|
CN_T_MODIFY = DateTime.Now,
|
CN_S_STATE = executeStatePara.taskState
|
}, new { executeStatePara.transportTask.CN_S_TASK_NO }, trans);
|
Log.Detail(logPara, "更新任务状态为:" + executeStatePara.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, "正常", "预入库锁定", trans);
|
Log.Detail(logPara, "更新终点货位" + executeStatePara.transportTask.CN_S_END_BIT + "的状态为正常!");
|
//更新终点货位的任务号
|
CreateDAL<DapperDAL<TN_WM_LOCATION_EXTEntity>>().Update(new { CN_S_TASK_NO = "" }, new { CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_END_BIT }, trans);
|
Log.Detail(logPara, "更新终点货位" + executeStatePara.transportTask.CN_S_END_BIT + "的绑定任务号为空!");
|
|
//货位状态变化
|
BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(executeStatePara.transportTask.CN_S_END_BIT, "预入库锁定", "正常", "状态回报入库取消", "", "", "", executeStatePara.endStockArea.CN_S_STOCK_CODE, executeStatePara.endStockArea.CN_S_AREA_CODE, trans);
|
}
|
}
|
|
//起点
|
if (executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("出库") || executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("转运")
|
|| executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("移库")
|
|| executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("上架")
|
|| executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("下架")
|
|| executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("叫料")
|
|| executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("空托入")
|
|| executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("空托出"))
|
{
|
if (executeStatePara.startIsCurrentTask != null && executeStatePara.transportTask.CN_C_START_IS_CONTROL_QTY.Equals("Y"))
|
{
|
CreateDAL<TN_WM_LOCATION_EXTDAL>().UpdateLocationStateByCodeAndState(executeStatePara.transportTask.CN_S_START_BIT, "正常", "预出库锁定", trans);
|
|
//更新起点货位的任务号
|
CreateDAL<DapperDAL<TN_WM_LOCATION_EXTEntity>>().Update(new { CN_S_TASK_NO = "" }, new { CN_S_LOCATION_CODE = executeStatePara.transportTask.CN_S_END_BIT }, trans);
|
Log.Detail(logPara, "更新起点货位" + executeStatePara.transportTask.CN_S_START_BIT + "的绑定任务号为空!");
|
|
//货位状态变化
|
BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(executeStatePara.transportTask.CN_S_START_BIT, "预出库锁定", "正常", "状态回报" + executeStatePara.transportTask.CN_S_TASK_TYPE + "取消", "", "", "", executeStatePara.startStockArea.CN_S_STOCK_CODE, executeStatePara.startStockArea.CN_S_AREA_CODE, trans);
|
|
if (executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("移库"))
|
{
|
//降库区分配量
|
// CreateDAL<TN_WM_B_AREA_QTYDAL>().ReduceQtyAndAlloc(addAreaQty, executeStatePara.transportTask.CN_S_START_AREA, logPara, trans);
|
BLLCreator.Create<TN_WM_B_AREA_QTYBLL>().ReduceQtyAlloc(addAreaQty, executeStatePara.transportTask.CN_S_START_AREA, trans, logPara);
|
}
|
|
if (executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("叫料"))
|
{
|
//降仓库分配量
|
BLLCreator.Create<TN_WM_B_AREA_QTYBLL>().ReduceQtyAlloc(addAreaQty, executeStatePara.transportTask.CN_S_START_AREA, trans, logPara);
|
BLLCreator.Create<TN_WM_B_STOCK_QTYBLL>().ReduceStockAlloc(addStockQty, trans, logPara);
|
}
|
}
|
}
|
|
if (executeStatePara.transportTask.CN_S_TASK_TYPE.Equals("移库"))
|
{
|
Log.Detail(logPara, "降移库任务" + executeStatePara.transportTask.CN_S_TASK_NO + "的移动量");
|
//降移库任务的移动量
|
var moveStockTaskDtl = CreateDAL<MoveStockTaskDAL>().GetDtlByTaskNo(executeStatePara.transportTask.CN_S_TASK_NO);
|
if (moveStockTaskDtl != null)
|
{
|
CreateDAL<MoveStockTaskDAL>().ReduceAllocQty(moveStockTaskDtl.CN_PARENT_GUID, trans);
|
//ReduceMoveQty(moveStockTaskDtl.CN_PARENT_GUID, moveStockTaskDtl.CN_F_QUANTITY.ToString(), trans);
|
|
//删除移库子表任务记录
|
CreateDAL<MoveStockTaskDAL>().DeleteDtl(" CN_S_TASK_NO='" + executeStatePara.transportTask.CN_S_TASK_NO + "' ", trans);
|
}
|
else
|
{
|
Log.Detail(logPara, "未找到移库任务" + executeStatePara.transportTask.CN_S_TASK_NO + "子表的数据");
|
}
|
}
|
});
|
}
|
|
public override void CompleteTaskUpHistory(ExecuteStateParaDto executeStatePara, LogPara logPara, IDbTransaction trans)
|
{
|
var upHis = new List<TN_WM_UP_HISTORYEntity>();
|
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 = trayItemMst.CN_S_LOT_NO,
|
CN_F_QUANTITY = Convert.ToDecimal(trayItemDtl.CN_S_SERIAL_NO),
|
CN_F_PACKING_QTY = Convert.ToDecimal(trayItemDtl.CN_F_PACKING_QTY),
|
CN_S_MODEL = trayItemMst.CN_S_MODEL,
|
CN_S_STOCK_AREA = executeStatePara.transportTask.CN_S_END_AREA,
|
CN_S_STOCK_CODE = executeStatePara.transportTask.CN_S_STOCK_CODE,
|
CN_T_CREATE = DateTime.Now,
|
CN_T_MODIFY = DateTime.Now,
|
CN_S_OWNER = "",
|
CN_S_MEASURE_UNIT = trayItemMst.CN_S_MEASURE_UNIT,
|
CN_S_CREATOR = executeStatePara.transportTask.CN_S_CREATOR,
|
CN_S_CREATOR_BY = executeStatePara.transportTask.CN_S_CREATOR_BY,
|
CN_S_MODIFY = "",
|
CN_S_MODIFY_BY = "",
|
CN_S_OP_FROM = "任务完成-" + executeStatePara.transportTask.CN_S_TASK_TYPE,
|
CN_S_EXT1 = trayItemDtl.CN_S_UNIQUE_CODE,//trayItemMst.CN_S_UNIQUE_CODE,
|
CN_S_EXT2 = executeStatePara.transportTask.CN_S_EXT1,
|
CN_S_LOT_NO = trayItemDtl.CN_S_LOT_NO,
|
CN_S_FIGURE_NO = trayItemDtl.CN_S_EXT1
|
});
|
}
|
}
|
|
//上架记录
|
if (upHis.Any())
|
{
|
Log.Detail(logPara, "添加上架记录,内容:" + LogDescribe.Content(upHis));
|
CreateDAL<DapperDAL<TN_WM_UP_HISTORYEntity>>().AddRange(upHis, trans);
|
|
executeStatePara.UpHistory = executeStatePara.UpHistory ?? new List<TN_WM_UP_HISTORYEntity>();
|
executeStatePara.UpHistory.AddRange(upHis);
|
}
|
}
|
|
List<string> sendTypes = new List<string>() { "正常入库", "退料入库", "其他入库", "正常出库", "其他出库" };
|
public override void CompleteTaskDownHistory(ExecuteStateParaDto executeStatePara, LogPara logPara, IDbTransaction trans)
|
{
|
var downHis = new List<TN_WM_DOWN_HISTORYEntity>();
|
|
foreach (var trayItemMst in executeStatePara.trayItemMsts)
|
{
|
foreach (var trayItemDtl in trayItemMst.TrayItemDtlList)
|
{
|
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 = Convert.ToDecimal(trayItemDtl.CN_S_SERIAL_NO),
|
CN_F_PACKING_QTY = Convert.ToDecimal(trayItemDtl.CN_F_PACKING_QTY),
|
CN_S_MODEL = trayItemMst.CN_S_MODEL,
|
CN_S_STOCK_AREA = executeStatePara.transportTask.CN_S_START_AREA,
|
CN_S_STOCK_CODE = executeStatePara.transportTask.CN_S_STOCK_CODE,
|
CN_T_CREATE = DateTime.Now,
|
CN_T_MODIFY = DateTime.Now,
|
CN_S_OWNER = "",
|
CN_S_MEASURE_UNIT = trayItemMst.CN_S_MEASURE_UNIT,
|
CN_S_CREATOR = executeStatePara.transportTask.CN_S_CREATOR,
|
CN_S_CREATOR_BY = executeStatePara.transportTask.CN_S_CREATOR_BY,
|
CN_S_MODIFY = "",
|
CN_S_MODIFY_BY = "",
|
CN_S_OP_FROM = "任务完成-" + executeStatePara.transportTask.CN_S_TASK_TYPE,
|
CN_S_EXT1 = trayItemDtl.CN_S_UNIQUE_CODE,
|
CN_S_EXT2 = executeStatePara.transportTask.CN_S_EXT1,
|
CN_S_LOT_NO = trayItemDtl.CN_S_LOT_NO,
|
CN_S_FIGURE_NO = trayItemDtl.CN_S_EXT1
|
});
|
}
|
}
|
|
//下架记录
|
if (downHis.Any())
|
{
|
CreateDAL<DapperDAL<TN_WM_DOWN_HISTORYEntity>>().AddRange(downHis, trans);
|
Log.Detail(logPara, "添加下架记录,内容:" + LogDescribe.Content(downHis));
|
|
executeStatePara.DownHistory = executeStatePara.DownHistory ?? new List<TN_WM_DOWN_HISTORYEntity>();
|
executeStatePara.DownHistory.AddRange(downHis);
|
}
|
}
|
|
#endregion
|
|
|
public OperateResult CallMaterial(TN_WM_B_CALL_MATERIALEntity callMaterialEntity)
|
{
|
var response = new OperateResult();
|
if (callMaterialEntity == null) return OperateResult.Error("参数不全!");
|
response = CreateDAL<DapperDAL<TN_WM_B_CALL_MATERIALEntity>>().Add(callMaterialEntity, null);
|
return response;
|
}
|
public OperateResult SendMaterial(TN_WM_B_SEND_MATERIALEntity sendMaterialEntity)
|
{
|
var response = new OperateResult();
|
if (sendMaterialEntity == null) return OperateResult.Error("参数不全!");
|
response = CreateDAL<DapperDAL<TN_WM_B_SEND_MATERIALEntity>>().Add(sendMaterialEntity, null);
|
return response;
|
}
|
public List<TN_WM_B_AREA_QTY_YSEntity> GetStockQtyInfo(string itemName, string itemCode, string stockCode, string areaCode)
|
{
|
StringBuilder sb = new StringBuilder();
|
if (!string.IsNullOrEmpty(itemName))
|
{
|
sb.Append(" AND CN_S_ITEM_NAME = '" + itemName + "'");
|
}
|
if (!string.IsNullOrEmpty(itemCode))
|
{
|
sb.Append(" AND CN_S_ITEM_CODE = '" + itemCode + "'");
|
}
|
if (!string.IsNullOrEmpty(stockCode))
|
{
|
sb.Append(" AND CN_S_STOCK_CODE = '" + stockCode + "'");
|
}
|
if (!string.IsNullOrEmpty(areaCode))
|
{
|
sb.Append(" AND CN_S_STOCK_AREA = '" + areaCode + "'");
|
}
|
List<TN_WM_B_AREA_QTY_YSEntity> lstAreaQty = CreateDAL<TN_WM_B_AREA_QTYDAL>().GetStockQtyInfo(sb.ToString());
|
foreach (TN_WM_B_AREA_QTY_YSEntity areaQty in lstAreaQty)
|
{
|
var item = CreateDAL<TN_WMS_ITEMDAL>().GetItemEntity(areaQty.itemCode);
|
|
areaQty.safeQty = item.CN_F_SAFETY_STOCK.ToString();
|
if (item.CN_F_NW.Equals(0))
|
{
|
areaQty.availableQty = "0";
|
}
|
else
|
{
|
areaQty.availableQty = Math.Round((Decimal.Parse(areaQty.availableWeight) / item.CN_F_NW), 0).ToString();
|
}
|
|
}
|
return lstAreaQty;
|
|
}
|
public List<TN_WM_B_STOCK_DETAIL_YSEntity> GetStockQtyDetailList(string itemName, string itemCode, string stockCode, string areaCode)
|
{
|
StringBuilder sb = new StringBuilder();
|
if (!string.IsNullOrEmpty(itemName))
|
{
|
sb.Append(" AND CN_S_ITEM_NAME = '" + itemName + "'");
|
}
|
if (!string.IsNullOrEmpty(itemCode))
|
{
|
sb.Append(" AND CN_S_ITEM_CODE = '" + itemCode + "'");
|
}
|
if (!string.IsNullOrEmpty(stockCode))
|
{
|
sb.Append(" AND CN_S_STOCK_CODE = '" + stockCode + "'");
|
}
|
if (!string.IsNullOrEmpty(areaCode))
|
{
|
sb.Append(" AND CN_S_STOCK_AREA = '" + areaCode + "'");
|
}
|
List<TN_WM_B_STOCK_DETAIL_YSEntity> lstStockDetail = CreateDAL<TN_WM_B_AREA_QTYDAL>().GetStockQtyDetailList(sb.ToString());
|
|
foreach (TN_WM_B_STOCK_DETAIL_YSEntity entity in lstStockDetail)
|
{
|
var item = CreateDAL<TN_WMS_ITEMDAL>().GetItemEntity(entity.itemCode);
|
if (item.CN_F_NW.Equals(0))
|
{
|
entity.itemQty = "0";
|
}
|
else
|
{
|
entity.itemQty = Math.Round((Decimal.Parse(entity.itemWeight) / item.CN_F_NW), 0).ToString();
|
}
|
|
}
|
|
|
return lstStockDetail;
|
|
}
|
//public override string getCode()
|
//{
|
// return getName();
|
//}
|
|
public override string getName()
|
{
|
return "无锡宇寿";
|
}
|
|
|
#region 盘点
|
|
|
|
#endregion
|
}
|
}
|