using HH.WCS.HangYang.wms;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace HH.WCS.HangYang.core {
internal class WMSCore {
///
/// 遍历定版的发货单,生产分拣单主表和子表(也可以手动调接口触发)
///
internal static void CheckShippingOrder() {
//1.0、获取已经定版的发货单,生产分拣单子表和主表,设置【发货单】的业务状态 N_B_STATE = 1(待分拣)
//2.0、如果发货单C_AUTO_SORTING=Y,则自动将分拣单状态设置为开始配货
}
///
/// 开始配货创建分拣单明细(改成调接口触发)
///
internal static void CheckSortingOrder() {
//new SortingOrder().N_B_STATE
//1.0、获取 N_B_STATE = 1 (开始配货)状态的分拣单
//2.0、遍历分拣单子表,创建分拣单明细,更新分拣单子表的明细汇总F_ACC_S_QTY
//3.0、全部分拣单子表的明细创建完毕,子表明细汇总和子表数量一致,更新分拣单状态,N_B_STATE = 2配货完成
//4.0、如果分拣单是自动作业,就直接更新到 N_B_STATE = 3开始作业
//WMSHelper.GetWaitingSortingOrderList();
}
///
/// 遍历分拣单明细创建出库作业
///
internal static void CheckSortingTask() {
//new SortingOrder().N_B_STATE
//遍历N_B_STATE = 3的分拣单创建作业
//或 遍历分拣单明细创建分拣作业,因为一个分拣单里面的明细都是批量生成的
var list = WMSHelper.GetWaitingSortingOperationList();
if (list.Count > 0) {
list.ForEach(a => {
if (a.Details != null) {
WMSHelper.CreateSortingOperation(a);
}
});
}
}
///
/// 作业启动,创建子任务
///
internal static void Start() {
List list = WMSHelper.GetWaitingOperationList();
if (list.Count > 0) {
//如果是出库的作业锁定托盘的时候已经明确起点了,如果发货单或分拣单指定了终点,
//如果没有作业、任务的顺序限制就可以启动,创建子任务了
list.ForEach(a => {
if (a.N_TYPE == 1) {
//入库有终点就可以执行
if (string.IsNullOrEmpty(a.S_END_LOC)) {
//计算终点
Location end = WMSHelper.GetEnd(a);
if (end != null) {
a.S_END_LOC = end.S_CODE;
WMSHelper.UpdateTaskEnd(a);
LocationHelper.LockLoc(end.S_CODE, 1);
}
}
if (!string.IsNullOrEmpty(a.S_END_LOC)) {
//创建wcs任务
var wcsTask = new WCSTask
{
S_OP_CODE = a.S_CODE,
S_OP_NAME = "入库",
S_CODE = WCSHelper.GenerateTaskNo(),
S_TYPE = "堆垛机入库",
S_START_LOC = a.S_START_LOC,
S_END_LOC = a.S_END_LOC,
S_SCHEDULE_TYPE = "杭奥",
S_CNTR_CODE = a.S_CNTR_CODE,
};
if (WCSHelper.CreateTask(wcsTask)) {
//更新作业状态为执行
a.N_B_STATE = 1;
a.S_B_STATE = "执行";
WMSHelper.UpdateTaskState(a);
}
}
}
else if (a.N_TYPE == 2) {
//出库有起点就可以执行
if (string.IsNullOrEmpty(a.S_END_LOC)) {
//首先获取起点的逻辑库区,找到逻辑库区的功能区
FunctionArea fa = null;
var zones = LocationHelper.GetZoneByLoc(a.S_START_LOC);
for (int i = 0; i < zones.Count; i++) {
fa = LocationHelper.GetFunctionAreas("Zone", zones[i].S_ZONE_CODE, 11).FirstOrDefault();
if (fa != null) {
break;
}
}
if (fa != null) {
var loc = LocationHelper.GetLoc(fa.S_FA_CODE);
if (loc != null) {
a.S_END_LOC = loc.S_CODE;
WMSHelper.UpdateTaskEnd(a);
LocationHelper.LockLoc(loc.S_CODE, 1);
}
}
if (!string.IsNullOrEmpty(a.S_END_LOC)) {
//创建wcs任务
var wcsTask = new WCSTask
{
S_OP_CODE = a.S_CODE,
S_OP_NAME = "出库",
S_CODE = WCSHelper.GenerateTaskNo(),
S_TYPE = "堆垛机出库",
S_START_LOC = a.S_START_LOC,
S_END_LOC = a.S_END_LOC,
S_SCHEDULE_TYPE = "杭奥",
S_CNTR_CODE = a.S_CNTR_CODE,
};
if (WCSHelper.CreateTask(wcsTask)) {
//更新作业状态为执行
a.N_B_STATE = 1;
a.S_B_STATE = "执行";
WMSHelper.UpdateTaskState(a);
}
}
}
}
});
}
}
}
}