using System;
using System.Collections.Generic;
using System.Linq;
using HH.WCS.Mobox3.RiDong.dto;
using HH.WCS.Mobox3.RiDong.generalMethod;
using HH.WCS.Mobox3.RiDong.models;
using HH.WCS.Mobox3.RiDong.util;
using HH.WCS.Mobox3.RiDong.wms;
namespace HH.WCS.Mobox3.RiDong.apiMethod;
///
/// 入库流程方法类
///
public static class EnterWareHouseService
{
///
/// 组盘
///
/// 组盘模型
///
public static ApiModel.SimpleResult SetDisk(SetDiskDto input)
{
var result = new ApiModel.SimpleResult();
var sqlSugarClient = AdoSqlMethod.QuerySqlSugarClient();
var container = ContainerHelper.GetCntr(input.cntrCode, input.type);
// 托盘不可用
if (container.C_ENABLE == 'N')
{
result.resultCode = -1;
result.resultMsg = "当前托盘不可用";
return result;
}
// 判断该托盘是否存在容器货品货位数据(即判断容器是否在库里)
if (AdoSqlMethod.QueryCount(p => p.S_CNTR_CODE == input.cntrCode) > 0)
{
result.resultCode = -1;
result.resultMsg = "当前托盘已存在立库,请勿重复入库";
return result;
}
try
{
sqlSugarClient.BeginTran();
List cntrItemDetails = new List();
foreach (var inputSetDiskDetailDto in input.SetDiskDetailDtos)
{
// 查找该托盘的该规格(物料编码)是否存在数据
var containerGood = AdoSqlMethod
.QueryFirst(p => p.S_CNTR_CODE == input.cntrCode && p.S_ITEM_CODE == inputSetDiskDetailDto.specifications);
// 存在该条容器货品数据
if (containerGood != null)
{
containerGood.F_QTY = inputSetDiskDetailDto.number;
AdoSqlMethod.UpdateFirstTran(sqlSugarClient, containerGood, p => new { p.F_QTY });
}
// 不存在该条容器货品数据
else
{
// 新增容器货品数据
containerGood = new CntrItemDetail()
{
S_CNTR_CODE = input.cntrCode,
S_ITEM_CODE = inputSetDiskDetailDto.specifications,
F_QTY = inputSetDiskDetailDto.number,
S_UOM = "台",
S_BS_NO = inputSetDiskDetailDto.od,
S_BATCH_NO = inputSetDiskDetailDto.lot,
S_ITEM_NAME = inputSetDiskDetailDto.itemname,
S_ITEM_SPEC = inputSetDiskDetailDto.itemspec,
D_PRD_DATE = DateTime.Now.ToString("yyyy-MM-dd"),
S_ADDRESS_CODE = input.address,
S_EXT_ATTR3 = input.islastbox,
S_EXT_ATTR2 = inputSetDiskDetailDto.color,
S_EXT_ATTR4 = inputSetDiskDetailDto.customer,
S_EXT_ATTR1 = inputSetDiskDetailDto.type,
};
cntrItemDetails.Add(containerGood);
}
}
AdoSqlMethod.AddListTran(sqlSugarClient, cntrItemDetails);
// 修改容器状态
container.C_ENABLE = 'N';
container.S_TYPE = input.type;
container.T_MODIFY = DateTime.Now;
container.N_DETAIL_COUNT = cntrItemDetails.Count;
AdoSqlMethod.UpdateFirstTran(sqlSugarClient, container, p => new { p.C_ENABLE, p.T_MODIFY, p.N_DETAIL_COUNT, p.S_TYPE });
sqlSugarClient.CommitTran();
result.resultCode = 1;
result.resultMsg = "码盘成功";
}
catch (Exception e)
{
sqlSugarClient.RollbackTran();
result.resultCode = -1;
result.resultMsg = "码盘失败";
LogHelper.Info(e.Message, "出入库流程记录");
}
return result;
}
///
/// 小车任务完成
///
///
///
public static void CarTaskFinished(Task task)
{
var db = new SqlHelper().GetInstance();
// 修改容器货品明细数据
var cntrItemDetails = db.Queryable().Where(p => p.S_CNTR_CODE == task.S_CNTR_CODE).ToList();
// 入库
if (task.N_TYPE == 1 || task.N_TYPE == 3)
{
List cntrs = new List();
cntrs.Add(task.S_CNTR_CODE);
// 仓库管理,货位管理
LocationHelper.BindingLoc(task.S_END_LOC, cntrs);
if (task.N_TYPE == 1)
{
// 仓库管理
ContainerHelper.Enable(task.S_CNTR_CODE, task.S_END_LOC);
}
else if (task.N_TYPE == 3)
{
var container = AdoSqlMethod.QueryFirst(p => p.S_CODE == task.S_CNTR_CODE);
container.C_ENABLE = 'Y';
container.N_LOCK_STATE = 0;
AdoSqlMethod.UpdateFirst(container,
p => new { p.C_ENABLE, p.T_MODIFY, p.N_LOCK_STATE });
}
foreach (var cntrItemDetail in cntrItemDetails)
{
cntrItemDetail.N_ALR_ENTR = 2;
cntrItemDetail.T_INBOUND_TIME = DateTime.Now;
}
db.Updateable(cntrItemDetails).UpdateColumns(p => new { p.N_ALR_ENTR, p.T_INBOUND_TIME }).ExecuteCommand();
}
// 出库
else if (task.N_TYPE == 2 || task.N_TYPE == 4 || task.N_TYPE == 6)
{
// 货位解锁
LocationHelper.UnBindingLoc(task.S_START_LOC, new List { task.S_CNTR_CODE });
foreach (var cntrItemDetail in cntrItemDetails)
{
cntrItemDetail.N_ALR_ENTR = 1;
}
db.Updateable(cntrItemDetails).UpdateColumns(p => new { p.N_ALR_ENTR }).ExecuteCommand();
if (task.S_OP_NAME == "整托出库" && task.N_TYPE != 4)
{
// 结果确定,根据当前任务号找到对应的配盘明细数据
var tnDistributionCntrDetails = AdoSqlMethod.QueryList(p => p.S_CNTR_CODE == task.S_CNTR_CODE && p.IS_SORTING == "N");
var resultDeterminationDto = new ResultDeterminationDto();
resultDeterminationDto.cntrCode = task.S_CNTR_CODE;
resultDeterminationDto.ids = tnDistributionCntrDetails.Select(p => p.S_ID).ToList();
OutWareHouseService.ResultDetermination(resultDeterminationDto);
}
}
// 指引出库
else if (task.N_TYPE == 5)
{
// 货位解锁
LocationHelper.UnBindingLoc(task.S_START_LOC, new List { task.S_CNTR_CODE });
foreach (var cntrItemDetail in cntrItemDetails)
{
cntrItemDetail.N_ALR_ENTR = 1;
}
db.Updateable(cntrItemDetails).UpdateColumns(p => new { p.N_ALR_ENTR }).ExecuteCommand();
var container = AdoSqlMethod.QueryFirst(p => p.S_CODE == task.S_CNTR_CODE);
container.C_ENABLE = 'Y';
container.S_TYPE = null;
AdoSqlMethod.UpdateFirst(container, p => new { p.C_ENABLE, p.S_TYPE });
OutWareHouseService.ResultDeterminationGuideOut(task);
}
// 空托出库
else if (task.N_TYPE == 7)
{
// 货位解锁
LocationHelper.UnBindingLoc(task.S_START_LOC, new List { task.S_CNTR_CODE });
db.Updateable(cntrItemDetails).UpdateColumns(p => new { p.N_ALR_ENTR }).ExecuteCommand();
var container = AdoSqlMethod.QueryFirst(p => p.S_CODE == task.S_CNTR_CODE);
container.C_ENABLE = 'Y';
container.N_DETAIL_COUNT = 0;
container.S_TYPE = null;
AdoSqlMethod.UpdateFirst(container, p => new { p.C_ENABLE, p.N_DETAIL_COUNT, p.S_TYPE });
}
}
///
/// 货位解锁
///
///
public static void LocationUnlock(Task task)
{
var queryFirst = AdoSqlMethod.QueryFirst(p => p.S_CODE == task.S_START_LOC);
queryFirst.N_LOCK_STATE = 0;
queryFirst.S_LOCK_STATE = "无锁";
queryFirst.N_CURRENT_NUM = 0;
AdoSqlMethod.UpdateFirst(queryFirst, p => new { p.S_LOCK_STATE, p.N_LOCK_STATE });
}
}