using Magicodes.IE.Core;
|
using System;
|
using System.Threading.Tasks;
|
using WIDESEA_Core;
|
using WIDESEA_Core.Enums;
|
using WIDESEA_Core.Helper;
|
using WIDESEA_DTO.Inbound;
|
using WIDESEA_DTO.WCSInfo;
|
using WIDESEA_Model.Models;
|
using WIDESEAWCS_DTO.WCSInfo;
|
|
namespace WIDESEA_TaskInfoService
|
{
|
public partial class TaskService
|
{
|
|
/// <summary>
|
/// 产线申请
|
/// </summary>
|
/// <param name="productionlineDTO"></param>
|
/// <returns></returns>
|
public WebResponseContent ProductionlineRequest(ProductionlineDTO productionlineDTO)
|
{
|
WebResponseContent content = new WebResponseContent();
|
try
|
{
|
switch (productionlineDTO.traytype)
|
{
|
case 1://放空托
|
case 3://放空盒
|
//case 5://放满盒
|
{
|
//查找物料所有库存
|
var stockInfos = _stockService.StockInfoService.Repository.GetStockInfos(productionlineDTO.traytype.ToString());
|
//查找先入物料货位最后入库物料
|
var stockInfo = stockInfos.Where(x => x.LocationCode == stockInfos.OrderBy(x => x.InDate).FirstOrDefault()?.LocationCode).OrderByDescending(x => x.InDate).FirstOrDefault();
|
if (stockInfo == null) throw new Exception($"无物料编号【{productionlineDTO.traytype}】的库存");
|
var location = _basicService.LocationInfoService.GetLocation(stockInfo.LocationCode);
|
#region 生成出库任务
|
Dt_Task dt_Task = new Dt_Task()
|
{
|
CurrentAddress = stockInfo.LocationCode,
|
NextAddress = "SC01",
|
SourceAddress = stockInfo.LocationCode,
|
TargetAddress = productionlineDTO.stationCode,
|
Creater = "System",
|
PalletCode = stockInfo.PalletCode,
|
OrderNo = null,
|
Roadway = "SC01",
|
TaskNum = Convert.ToInt32(DateTime.Now.ToString("HHmmss")),
|
TaskState = OutTaskStatusEnum.OutNew.ObjToInt(),
|
TaskType = productionlineDTO.traytype == 1 ? TaskTypeEnum.PalletOutbound.ObjToInt() : TaskTypeEnum.PalletFillOutbound.ObjToInt(),
|
IsPickPlace = location.MaxQty - location.CurrentQty == 0,
|
CreateDate = DateTime.Now,
|
Dispatchertime = DateTime.Now,
|
};
|
#endregion
|
location.CurrentQty--;
|
location.LocationStatus = LocationStatusEnum.Outbounding.ObjToInt();
|
stockInfo.StockStatus = StockStatusEmun.出库锁定.ObjToInt();
|
stockInfo.Details.FirstOrDefault().Status = StockStatusEmun.出库锁定.ObjToInt();
|
|
Db.Ado.BeginTran();
|
AddData(dt_Task);
|
_basicService.LocationInfoService.UpdateData(location);
|
_stockService.StockInfoService.Repository.UpdateDataWithDetail(stockInfo);
|
content.OK(data: dt_Task);
|
Db.Ado.CommitTran();
|
}
|
break;
|
case 2://取空托
|
case 4://取满盒
|
case 6://取空盒
|
{
|
Dt_StockInfo stockInfo = _stockService.StockInfoService.Repository.GetStockInfo(productionlineDTO.Barcode);
|
if (stockInfo != null) throw new Exception($"托盘【{productionlineDTO.Barcode}】已存在库存信息");
|
productionlineDTO.QtySum = Array.ConvertAll(productionlineDTO.productQty.Split(","), s => decimal.Parse(s)).Sum();//入库总数
|
stockInfo = new Dt_StockInfo();
|
stockInfo.Details = new List<Dt_StockInfoDetail>();
|
Dt_InboundOrder inboundOrder = null;
|
#region 生成入库任务
|
Dt_Task dt_Task = new Dt_Task()
|
{
|
CurrentAddress = productionlineDTO.stationCode,
|
NextAddress = "SC01",
|
SourceAddress = productionlineDTO.stationCode,
|
TargetAddress = "SC01",
|
Creater = "System",
|
PalletCode = productionlineDTO.Barcode,
|
Roadway = "SC01",
|
TaskNum = Convert.ToInt32(DateTime.Now.ToString("HHmmss")),
|
TaskState = InTaskStatusEnum.InNew.ObjToInt(),
|
TaskType = productionlineDTO.traytype == 2 ? TaskTypeEnum.PalletInbound.ObjToInt() : TaskTypeEnum.PalletReturnInbound.ObjToInt(),
|
CreateDate = DateTime.Now,
|
Dispatchertime = DateTime.Now,
|
};
|
#endregion
|
if (productionlineDTO.traytype == 4)
|
{
|
var OrderNo = productionlineDTO.batchNo.Split('T')[0];
|
inboundOrder = _inboundService.InbounOrderService.GetInboundOrder(OrderNo);
|
if (inboundOrder == null) throw new Exception($"未找到入库单【{OrderNo}】");
|
Dt_InboundOrderDetail inboundOrderDetail = inboundOrder.Details.FirstOrDefault(x => x.BatchNo == productionlineDTO.batchNo);
|
if (inboundOrderDetail == null) throw new Exception($"未找到批号【{productionlineDTO.batchNo}】的入库详情");
|
if (inboundOrderDetail.OrderQuantity - inboundOrderDetail.ReceiptQuantity < 1) throw new Exception($"批号【{productionlineDTO.batchNo}】组盘数量超出");
|
|
dt_Task.OrderNo = OrderNo;
|
dt_Task.TaskType = TaskTypeEnum.Inbound.ObjToInt();
|
}
|
content = _stockService.StockInfoService.AddStockInfo(ref stockInfo, ref inboundOrder, productionlineDTO);
|
if (!content.Status) throw new Exception(content.Message);
|
Db.Ado.BeginTran();
|
if (inboundOrder != null) _inboundService.InbounOrderService.UpdateDataWithDetail(inboundOrder);
|
_stockService.StockInfoService.AddMaterielGroup(stockInfo);
|
AddData(dt_Task);
|
content.OK(data: dt_Task);
|
Db.Ado.CommitTran();
|
}
|
break;
|
default:
|
throw new Exception("未定义托盘类型");
|
}
|
}
|
catch (Exception ex)
|
{
|
Db.Ado.RollbackTran();
|
content.Error(ex.Message);
|
}
|
return content;
|
}
|
/// <summary>
|
/// 产线申请
|
/// </summary>
|
/// <param name="lineDTO"></param>
|
/// <returns></returns>
|
public WebResponseContent ProductionlineRequest(ConveyorLineDTO lineDTO)
|
{
|
WebResponseContent content = new WebResponseContent();
|
try
|
{
|
var task = BaseDal.QueryFirst(x => x.PalletCode == lineDTO.Barcode);
|
if (task != null && task.TaskType == TaskTypeEnum.Inbound.ObjToInt())
|
return content.OK(data: task);
|
if (task != null) throw new Exception($"托盘号[{lineDTO.Barcode}]已存在任务");
|
Dt_StockInfo stockInfo = _stockService.StockInfoService.Repository.GetStockInfo(lineDTO.Barcode);
|
(bool, string) result = CheckRequestInbound(lineDTO.stationCode, lineDTO.Barcode, true, stockInfo);
|
if (!result.Item1) return content = WebResponseContent.Instance.Error(result.Item2);
|
var StockInfoDetails = stockInfo.Details.Where(x => x.StockId == stockInfo.Id).ToList();
|
#region 生成入库任务
|
Dt_Task dt_Task = new Dt_Task()
|
{
|
CurrentAddress = lineDTO.stationCode,
|
NextAddress = "SC01",
|
SourceAddress = lineDTO.stationCode,
|
TargetAddress = "SC01",
|
CreateDate = DateTime.Now,
|
Creater = "System",
|
PalletCode = lineDTO.Barcode,
|
OrderNo = StockInfoDetails.Count() == 1 ? StockInfoDetails.First().OrderNo : null,
|
Roadway = "SC01",
|
TaskNum = Convert.ToInt32(DateTime.Now.ToString("HHmmss")),
|
TaskState = InTaskStatusEnum.InNew.ObjToInt(),
|
TaskType = TaskTypeEnum.Inbound.ObjToInt(),
|
};
|
dt_Task.Dispatchertime = dt_Task.CreateDate;
|
Db.Ado.BeginTran();
|
BaseDal.AddData(dt_Task);
|
task = BaseDal.QueryFirst(x => x.PalletCode == lineDTO.Barcode && x.TaskType == TaskTypeEnum.Inbound.ObjToInt());
|
//content.Data = dt_Task;
|
Db.Ado.CommitTran();
|
if (task != null) return content.OK(data: task);
|
#endregion
|
}
|
catch (Exception ex)
|
{
|
Db.Ado.RollbackTran();
|
content.Error(ex.Message);
|
}
|
return content;
|
}
|
}
|
}
|