using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA_Common.CommonEnum;
using WIDESEA_Common.LocationEnum;
using WIDESEA_Common.OtherEnum;
using WIDESEA_Common.StockEnum;
using WIDESEA_Common.TaskEnum;
using WIDESEA_Common.WareHouseEnum;
using WIDESEA_Core;
using WIDESEA_Core.BaseServices;
using WIDESEA_DTO;
using WIDESEA_DTO.ERP;
using WIDESEA_DTO.MES;
using WIDESEA_ITaskInfoRepository;
using WIDESEA_ITaskInfoService;
using WIDESEA_Model.Models;
namespace WIDESEA_TaskInfoService
{
public partial class TaskService
{
///
/// 测试架出仓
///
///
///
public MesResponseContent TestToolOut(TestToolOutModel model)
{
MesResponseContent responseContent = new MesResponseContent();
try
{
Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x=>x.WarehouseCode==WarehouseEnum.HA64.ToString());
//获取库存记录
Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.Db.Queryable().Where(x =>
x.WarehouseId == warehouse.WarehouseId &&
x.StockStatus==(int)StockStatusEmun.入库完成)
.Includes(x => x.Details).Where(x => x.Details.Any(x => x.MaterielCode == model.ToolCode)).First();
if (stockInfo==null)
{
return responseContent.Error($"测试架:{model.ToolCode}无可用库存");
}
Dt_LocationInfo locationInfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == stockInfo.LocationCode &&
x.WarehouseId == stockInfo.WarehouseId &&
x.LocationStatus == (int)LocationStatusEnum.InStock &&
(x.EnableStatus == (int)EnableStatusEnum.Normal || x.EnableStatus == (int)EnableStatusEnum.OnlyOut));
if (locationInfo==null)
{
return responseContent.Error($"测试架货位:{stockInfo.LocationCode}出库条件不满足");
}
//生成测试架出库任务 锁定库存 更改货位状态
Dt_Task taskOut = new()
{
CurrentAddress = stockInfo.LocationCode,
Grade = 0,
PalletCode = stockInfo.PalletCode,
NextAddress = "",
Roadway = locationInfo.RoadwayNo,
SourceAddress = stockInfo.LocationCode,
TargetAddress = "",
TaskStatus = (int)TaskStatusEnum.New,
TaskType = (int)TaskTypeEnum.TestOutbound,
TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
PalletType = stockInfo.PalletType,
WarehouseId = stockInfo.WarehouseId,
};
stockInfo.StockStatus = (int)StockStatusEmun.出库锁定;
LocationStatusEnum locationStatus = (LocationStatusEnum)locationInfo.LocationStatus;
locationInfo.LocationStatus = (int)LocationStatusEnum.Lock;
//判断是否有出库单信息
_unitOfWorkManage.BeginTran();
//更新库存状态
_stockRepository.StockInfoRepository.UpdateData(stockInfo);
//更新货位状态
_basicService.LocationInfoService.UpdateLocationStatus(locationInfo, (PalletTypeEnum)stockInfo.PalletType, LocationStatusEnum.Lock, stockInfo.WarehouseId);
//新建任务
BaseDal.AddData(taskOut);
//加入货位变动记录
_recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, locationStatus, LocationChangeType.OutboundAssignLocation, stockInfo.Details.FirstOrDefault()?.OrderNo ?? "", taskOut.TaskNum);
_unitOfWorkManage.CommitTran();
//将任务推送到WCS
PushTasksToWCS();
responseContent.OK();
}
catch (Exception ex)
{
_unitOfWorkManage.RollbackTran();
responseContent.Error(ex.Message);
}
return responseContent;
}
///
/// 测试架退库
///
///
public MesResponseContent TestReturnStock(TestToolBackModel backModel)
{
MesResponseContent responseContent = new MesResponseContent();
try
{
}
catch (Exception ex)
{
responseContent.Error(ex.Message);
}
return responseContent;
}
///
/// 测试架报废
///
///
public MesResponseContent TestScrap(TestToolScrap toolScrap)
{
MesResponseContent responseContent = new MesResponseContent();
try
{
//获取测试架批次号库存
Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA64.ToString());
//获取库存记录
Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.Db.Queryable().Where(x =>
x.WarehouseId == warehouse.WarehouseId)
.Includes(x => x.Details).Where(x => x.Details.Any(x => x.MaterielCode == toolScrap.ToolCode)).First();
}
catch (Exception ex)
{
responseContent.Error(ex.Message);
}
return responseContent;
}
///
/// 同步测试架寿命
///
///
///
public WebResponseContent TestSynStock(TestToolSynInfo toolSynInfo)
{
WebResponseContent content= new WebResponseContent();
try
{
Root root = new Root()
{
};
}
catch (Exception ex)
{
content.Error(ex.Message);
}
return content;
}
}
}