using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using WIDESEA.Common;
using WIDESEA.Core.ManageUser;
using WIDESEA.Core.Services;
using WIDESEA.Core.Utilities;
using WIDESEA.Entity.DomainModels;
using WIDESEA.Services.IRepositories;
using WIDESEA.Services.Repositories;
using WIDESEA_Common.LogEnum;
using WIDESEA_Services;
namespace WIDESEA.Services.Services
{
public partial class CommonFunction
{
///
/// 移库出库
///
///
///
public static WebResponseContent AddCheckTaskAction(SaveModel saveModel)
{
WebResponseContent content = new WebResponseContent();
try
{
Dt_general_info general_Info = Dt_general_infoRepository.Instance.FindFirst(x => true);
if ("应急模式".Equals(general_Info.general_inline_current_model))
{
Dt_taskinfo task = Dt_taskinfoRepository.Instance.FindFirst(r => LayerToStation.inboundStations.Contains(r.task_endstation)
|| LayerToStation.outboundStations.Contains(r.task_beginstation));
if (null != task || saveModel.DelKeys.Count > 1)
return content.Error("应急模式只能出1个任务.");
}
IVV_ContainerInfoRepository repository = VV_ContainerInfoRepository.Instance;
List locationState = new List()
{
LocationState.LocationState_Stored.ToString(),
LocationState.LocationState_Error.ToString(),
};
List listContainer = new List();
foreach (var item in saveModel.DelKeys)
{
Guid id = new Guid(item.ToString());
VV_ContainerInfo containerInfo = repository.FindFirst(x => x.containerdtl_id == id);
if (null != containerInfo)
{
if (!locationState.Contains(containerInfo.location_state) || containerInfo.location_islocked)
throw new Exception($"只能复核有货状态和解锁的库存,货位号:{containerInfo.location_id}");
listContainer.Add(containerInfo);
}
}
content = repository.DbContextBeginTransaction(() =>
{
List listTask = new List();
foreach (var containerInfo in listContainer)
{
//更改货位状态
Dt_locationinfo locationinfo = Dt_locationinfoRepository.Instance.FindFirst(x => x.location_id == containerInfo.location_id);
if (containerInfo.location_state.Equals(LocationState.LocationState_Stored.ToString()))
locationinfo.location_state = LocationState.LocationState_CheckOutbound.ToString();
else if (containerInfo.location_state.Equals(LocationState.LocationState_Error.ToString()))
locationinfo.location_state = LocationState.LocationState_ErrorCheckOutbound.ToString();
else
throw new Exception("无效货位状态." + containerInfo.location_state);
Dt_locationinfoRepository.Instance.Update(locationinfo, x => x.location_state, true);
string target = CommonFunction.GetOutboundAddress(general_Info, locationinfo.location_layer);
//生成WMS任务
Dt_taskinfo taskinfo = new Dt_taskinfo();
taskinfo.task_id = Guid.NewGuid();
taskinfo.task_type = TaskType.TaskType_CheckOutbound.ToString();
taskinfo.task_state = TaskState.TaskState_Create.ToString();
taskinfo.task_barcode = containerInfo.containerdtl_barcode;
taskinfo.task_materielid = containerInfo.materiel_id;
taskinfo.task_weight = containerInfo.containerdtl_goodsWeight;
taskinfo.task_sn = containerInfo.containerdtl_goodsCode;
taskinfo.task_materielType = containerInfo.containerdtl_type;
//起始货位
taskinfo.task_fromlocationid = containerInfo.location_id;
//目的货位,应该是穿梭车的放货站台 (50301-50308)
taskinfo.task_tolocationid = target;
//测量出库任务穿梭车的放货站台(50301-50308)
taskinfo.task_beginstation = target;
//目的站台
taskinfo.task_endstation = "20101";
taskinfo.task_grade = 0;
taskinfo.task_creator = UserContext.Current.UserTrueName;
taskinfo.task_createtime = DateTime.Now;
taskinfo.task_weight = containerInfo.containerdtl_goodsWeight;
taskinfo.task_materielType = containerInfo.containerdtl_type;
taskinfo.task_sn = containerInfo.containerdtl_number;
Dt_taskinfoRepository.Instance.Add(taskinfo, true);
dt_checkRecord checkRecord = new dt_checkRecord()
{
record_barcode = containerInfo.containerdtl_barcode,
record_createTime = DateTime.Now,
record_id = Guid.NewGuid(),
record_locationId = containerInfo.location_id,
record_madeUnit = containerInfo.containerdtl_madeUnit,
record_materielId = containerInfo.materiel_id,
record_materielNumber = containerInfo.containerdtl_number,
record_materielType = containerInfo.containerdtl_type,
record_result = "",
record_standa = containerInfo.containerdtl_standard,
record_userName = UserContext.Current.UserTrueName,
record_weight = string.IsNullOrEmpty(containerInfo.containerdtl_goodsWeight) ? 0 : decimal.Parse(containerInfo.containerdtl_goodsWeight)
};
dt_checkRecordRepository.Instance.Add(checkRecord, true);
listTask.Add(taskinfo);
LogRecord.WriteLog((int)LogEnum.Check, $"{UserContext.Current.UserName}【手动添加复核任务】给货位:【{locationinfo.location_id}】、托盘号:【{containerInfo.containerdtl_barcode}】的轴承添加了复核任务");
}
content = WCSApi.SendTaskToWCS(listTask);
if (content.Status)
content.OK($"测量复核回库任务下发给WCS成功.");
else
content.Error($"测量复核回库任务下发给WCS失败,原因 => {content.Message}");
return content.OK("手动增加测量任务成功.");
});
}
catch (Exception ex)
{
content.Error("创建复核任务失败:" + ex.Message);
}
finally
{
Logger.AddLog(Core.Enums.LoggerType.Add, saveModel, content, content);
}
return content;
}
}
}