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;
|
|
/// <summary>
|
/// 入库流程方法类
|
/// </summary>
|
public static class EnterWareHouseService
|
{
|
/// <summary>
|
/// 组盘
|
/// </summary>
|
/// <param name="input">组盘模型</param>
|
/// <returns></returns>
|
public static ApiModel.SimpleResult SetDisk(SetDiskDto input)
|
{
|
var result = new ApiModel.SimpleResult();
|
|
var sqlSugarClient = AdoSqlMethod<object>.QuerySqlSugarClient();
|
|
var container = ContainerHelper.GetCntr(input.cntrCode, input.type);
|
|
// 托盘不可用
|
if (container.C_ENABLE == 'N')
|
{
|
result.resultCode = -1;
|
result.resultMsg = "当前托盘不可用";
|
return result;
|
}
|
|
// 判断该托盘是否存在容器货品货位数据(即判断容器是否在库里)
|
if (AdoSqlMethod<LocCntrRel>.QueryCount(p => p.S_CNTR_CODE == input.cntrCode) > 0)
|
{
|
result.resultCode = -1;
|
result.resultMsg = "当前托盘已存在立库,请勿重复入库";
|
return result;
|
}
|
|
try
|
{
|
sqlSugarClient.BeginTran();
|
|
List<CntrItemDetail> cntrItemDetails = new List<CntrItemDetail>();
|
|
foreach (var inputSetDiskDetailDto in input.SetDiskDetailDtos)
|
{
|
// 查找该托盘的该规格(物料编码)是否存在数据
|
var containerGood = AdoSqlMethod<CntrItemDetail>
|
.QueryFirst(p => p.S_CNTR_CODE == input.cntrCode && p.S_ITEM_CODE == inputSetDiskDetailDto.specifications);
|
|
// 存在该条容器货品数据
|
if (containerGood != null)
|
{
|
containerGood.F_QTY = inputSetDiskDetailDto.number;
|
AdoSqlMethod<CntrItemDetail>.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<CntrItemDetail>.AddListTran(sqlSugarClient, cntrItemDetails);
|
|
// 修改容器状态
|
container.C_ENABLE = 'N';
|
container.S_TYPE = input.type;
|
container.T_MODIFY = DateTime.Now;
|
container.N_DETAIL_COUNT = cntrItemDetails.Count;
|
AdoSqlMethod<Container>.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;
|
}
|
|
/// <summary>
|
/// 小车任务完成
|
/// </summary>
|
/// <param name="task"></param>
|
/// <returns></returns>
|
public static void CarTaskFinished(Task task)
|
{
|
var db = new SqlHelper<object>().GetInstance();
|
|
// 修改容器货品明细数据
|
var cntrItemDetails = db.Queryable<CntrItemDetail>().Where(p => p.S_CNTR_CODE == task.S_CNTR_CODE).ToList();
|
|
// 入库
|
if (task.N_TYPE == 1 || task.N_TYPE == 3)
|
{
|
List<string> cntrs = new List<string>();
|
|
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<Container>.QueryFirst(p => p.S_CODE == task.S_CNTR_CODE);
|
|
container.C_ENABLE = 'Y';
|
container.N_LOCK_STATE = 0;
|
AdoSqlMethod<Container>.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<string> { 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<TN_Distribution_CNTR_Detail>.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<string> { 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();
|
|
OutWareHouseService.ResultDeterminationGuideOut(task);
|
}
|
// 指引出库
|
else if (task.N_TYPE == 7)
|
{
|
// 货位解锁
|
LocationHelper.UnBindingLoc(task.S_START_LOC, new List<string> { task.S_CNTR_CODE });
|
|
db.Updateable(cntrItemDetails).UpdateColumns(p => new { p.N_ALR_ENTR }).ExecuteCommand();
|
|
var container = AdoSqlMethod<Container>.QueryFirst(p => p.S_CODE == task.S_CNTR_CODE);
|
|
container.C_ENABLE = 'Y';
|
container.N_DETAIL_COUNT = 0;
|
|
AdoSqlMethod<Container>.UpdateFirst(container, p => new { p.C_ENABLE, p.N_DETAIL_COUNT });
|
}
|
}
|
|
/// <summary>
|
/// 货位解锁
|
/// </summary>
|
/// <param name="task"></param>
|
public static void LocationUnlock(Task task)
|
{
|
var queryFirst = AdoSqlMethod<Location>.QueryFirst(p => p.S_CODE == task.S_START_LOC);
|
|
queryFirst.N_LOCK_STATE = 0;
|
queryFirst.S_LOCK_STATE = "无锁";
|
queryFirst.N_CURRENT_NUM = 0;
|
|
AdoSqlMethod<Location>.UpdateFirst(queryFirst, p => new { p.S_LOCK_STATE, p.N_LOCK_STATE });
|
}
|
}
|