using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Reflection.Metadata;
|
using System.Security.Cryptography.X509Certificates;
|
using System.Text;
|
using System.Threading.Tasks;
|
using Newtonsoft.Json;
|
using WIDESEA_Common.LocationEnum;
|
using WIDESEA_Common.OutboundOrder;
|
using WIDESEA_Common.StockEnum;
|
using WIDESEA_Common.TaskEnum;
|
using WIDESEA_Common.Warehouse;
|
using WIDESEA_Core;
|
using WIDESEA_Core.BaseRepository;
|
using WIDESEA_Core.BaseServices;
|
using WIDESEA_Core.Helper;
|
using WIDESEA_Core.LogHelper;
|
using WIDESEA_DTO.MES;
|
using WIDESEA_DTO.Task;
|
using WIDESEA_IBasicService;
|
using WIDESEA_IStockService;
|
using WIDESEA_Model.Models;
|
using WIDESEA_Model.Models.Basic;
|
using WIDESEA_Model.Models.Outbound;
|
using WIDESEA_Model.Models.Stock;
|
using WIDESEA_Model.View;
|
using WIDESEAWCS_DTO.Stock;
|
using WIDESEAWCS_ITaskInfoService;
|
using WIDESEAWCS_Model.Models.TaskInfo;
|
|
namespace WIDESEAWCS_TaskInfoService
|
{
|
public class TaskService : ServiceBase<Dt_Task, IRepository<Dt_Task>>, ITaskService
|
{
|
private readonly ILocationInfoService _LocationInfoService;
|
private readonly IUnitOfWorkManage _unitOfWorkManage;
|
private readonly IRepository<Dt_Task_Hty> _Task_HtyRepository;
|
private readonly IRepository<Dt_LocationInfo> _LocationInfoRepository;
|
private readonly IRepository<Dt_StockInfo> _StockInfoRepository;
|
private readonly IRepository<Dt_Outstockinfo> _OutstockinfoRepository;
|
private readonly IStockService _IStockService;
|
private readonly ILocationInfoService _ILocationInfoService;
|
private readonly IRepository<Dt_Warehouse> _WarehouseRepository;
|
private readonly IRepository<Dt_Outstockinfo> _IOutstockinfoService;
|
private readonly IRepository<Dt_StockInfoDetail> _IStockInfoDetailRepository;
|
private readonly IRepository<Dt_StockInfo_hty> _IStockInfohtyRepository;
|
private readonly IRepository<Dt_StockInfoDetail_Hty> _IStockInfoDetailHtyRepository;
|
private readonly IRepository<Dt_StockInfos> _IStockInfosRepository;
|
private readonly IRepository<Dt_FillingOrder> _FillingOrderRepository;
|
private readonly IRepository<Dt_OutboundOrder> _OutboundOrderRepository;
|
private readonly IRepository<Dt_OutboundOrder_Hty> _OutboundOrderHtyRepository;
|
|
public TaskService(IRepository<Dt_Task> BaseDal, IRepository<Dt_OutboundOrder_Hty> OutboundOrderHtyRepository, IRepository<Dt_OutboundOrder> OutboundOrderRepository, IRepository<Dt_FillingOrder> FillingOrderRepository, IRepository<Dt_StockInfos> IStockInfosRepository, ILocationInfoService ILocationInfoService, IRepository<Dt_StockInfoDetail> IStockInfoDetailRepository, IRepository<Dt_StockInfo_hty> IStockInfohtyRepository, IRepository<Dt_StockInfoDetail_Hty> IStockInfoDetailHtyRepository, IRepository<Dt_Outstockinfo> IOutstockinfoService, IStockService IStockService, IRepository<Dt_Warehouse> WarehouseService, IRepository<Dt_Outstockinfo> OutstockinfoRepository, ILocationInfoService LocationInfoService, IRepository<Dt_StockInfo> StockInfoRepository, IRepository<Dt_LocationInfo> LocationInfoRepository, IRepository<Dt_Task_Hty> Task_HtyRepository, IUnitOfWorkManage unitOfWorkManage) : base(BaseDal)
|
{
|
_LocationInfoService = LocationInfoService;
|
_unitOfWorkManage = unitOfWorkManage;
|
_Task_HtyRepository = Task_HtyRepository;
|
_LocationInfoRepository = LocationInfoRepository;
|
_StockInfoRepository = StockInfoRepository;
|
_OutstockinfoRepository = OutstockinfoRepository;
|
_IStockService = IStockService;
|
_ILocationInfoService = ILocationInfoService;
|
_WarehouseRepository = WarehouseService;
|
_IOutstockinfoService = IOutstockinfoService;
|
_IStockInfoDetailRepository = IStockInfoDetailRepository;
|
_IStockInfohtyRepository = IStockInfohtyRepository;
|
_IStockInfoDetailHtyRepository = IStockInfoDetailHtyRepository;
|
_IStockInfosRepository = IStockInfosRepository;
|
_FillingOrderRepository = FillingOrderRepository;
|
_OutboundOrderRepository = OutboundOrderRepository;
|
_OutboundOrderHtyRepository = OutboundOrderHtyRepository;
|
}
|
|
public IRepository<Dt_Task> Repository => BaseDal;
|
|
|
//测试
|
public string ceshi()
|
{
|
WebResponseContent content = new WebResponseContent();
|
Dt_LocationInfo locations = _LocationInfoService.AllotLocationInfo(2);
|
return "123";
|
}
|
|
|
//空桶入库任务
|
public WebResponseContent addInTask(string location)
|
{
|
WebResponseContent content = new WebResponseContent();
|
Dt_Task task = new Dt_Task();
|
//查询当前入库空桶类型
|
Dt_Outstockinfo Warehouse = _OutstockinfoRepository.QueryFirst(x => x.Id == 1);
|
//入库分配货位
|
Dt_LocationInfo locations = _LocationInfoService.AllotLocationInfo(1);
|
locations.LocationStatus = (int)LocationStatusEnum.Lock;
|
locations.Remark = Warehouse.EmptyOutSet;
|
|
task.SourceAddress = location;
|
task.TargetAddress = locations.LocationCode;
|
task.Roadway = "SC01";
|
task.Grade = 1;
|
task.TaskType = (int)TaskTypeEnum.InEmpty;
|
task.TaskState = (int)TaskStatusEnum.InNew;
|
task.TaskNum = TaskNum(DateTime.Now.ToString("mmss").ObjToInt());
|
|
//开始数据库事务
|
_unitOfWorkManage.BeginTran();
|
_LocationInfoRepository.UpdateData(locations);
|
BaseDal.AddData(task);
|
//发送给WCS
|
string address = AppSettings.Get("WCS");
|
if (!string.IsNullOrEmpty(address))
|
{
|
HttpHelper.Post($"{address}/api/Task/WMSaddTask/", task.Serialize());
|
}
|
//提交事务
|
_unitOfWorkManage.CommitTran();
|
return content;
|
}
|
|
//满桶入库任务
|
public WebResponseContent addOutTask(Stock stock)
|
{
|
WebResponseContent content = new WebResponseContent();
|
Dt_Task task = new Dt_Task();
|
List<Dt_StockInfoDetail> stockInfoDetail = new List<Dt_StockInfoDetail>();
|
//List<MESSockInfo> MESSocks = new List<MESSockInfo>();
|
|
string materielDetailedid = stock.MaterialCode1 + DateTime.Now.ToString("mmss").ObjToInt();
|
string kk = stock.MaterialCode1.Replace("X", "");
|
//区分货区
|
int k = 1;
|
//查询物料二维编码
|
Dt_FillingOrder FillingOrder = _FillingOrderRepository.QueryFirst(x => x.BarCode == kk);
|
if (FillingOrder == null)
|
{
|
LogLock.OutLogAOP("接口日志", new string[] { "满桶入库任务生成", $"{"二维码查询异常"}" });
|
content.Message = "二维码查询异常";
|
return content;
|
}
|
if (FillingOrder.WarehouseType.Equals("食品区"))
|
{
|
k = 2;
|
}
|
else if (FillingOrder.WarehouseType.Equals("工业区"))
|
{
|
k = 3;
|
}
|
|
//入库分配货位
|
Dt_LocationInfo locations = _LocationInfoService.AllotLocationInfo(k);
|
|
//创建物料组盘
|
Dt_StockInfo stockInfo = new Dt_StockInfo();
|
stockInfo.LocationCode = locations.LocationCode;
|
stockInfo.MaterielCode1 = stock.MaterialCode1;
|
stockInfo.MaterielCode2 = stock.MaterialCode2;
|
stockInfo.MaterielCode3 = stock.MaterialCode3;
|
stockInfo.MaterielCode4 = stock.MaterialCode4;
|
stockInfo.MaterielDetailedid = materielDetailedid;
|
stockInfo.MaterielName = FillingOrder.MaterialName;
|
//创建物料详细信息
|
|
//判定入库模式
|
Dt_Outstockinfo outstockinfo = _IOutstockinfoService.QueryFirst(x => x.Id == 1);
|
//正常入库
|
if (outstockinfo.OutMode == 1)
|
{
|
locations.LocationStatus = (int)LocationStatusEnum.Lock;
|
stockInfo.StockStatus = (int)StockStatusEmun.组盘暂存;
|
|
task.SourceAddress = stock.location;
|
task.TargetAddress = locations.LocationCode;
|
task.Roadway = "SC01";
|
task.Grade = 1;
|
task.TaskType = (int)TaskTypeEnum.Infull;
|
task.TaskState = (int)TaskStatusEnum.InNew;
|
task.TaskNum = TaskNum(DateTime.Now.ToString("mmss").ObjToInt());
|
}
|
//直接出库
|
else
|
{
|
stockInfo.StockStatus = (int)StockStatusEmun.直接出库;
|
|
task.SourceAddress = "1-52-1";
|
task.TargetAddress = locations.LocationCode;
|
task.Roadway = "SC01";
|
task.Grade = 1;
|
task.TaskType = (int)TaskTypeEnum.OutDirect;
|
task.TaskState = (int)TaskStatusEnum.InNew;
|
task.TaskNum = TaskNum(DateTime.Now.ToString("mmss").ObjToInt());
|
}
|
|
//开始数据库事务
|
_unitOfWorkManage.BeginTran();
|
_LocationInfoRepository.UpdateData(locations);
|
BaseDal.AddData(task);
|
_StockInfoRepository.AddData(stockInfo);
|
_IStockInfoDetailRepository.AddData(stockInfoDetail);
|
//发送给WCS
|
string address = AppSettings.Get("WCS");
|
if (!string.IsNullOrEmpty(address))
|
{
|
HttpHelper.Post($"{address}/api/Task/WMSaddTask/", task.Serialize());
|
}
|
//提交事务
|
_unitOfWorkManage.CommitTran();
|
return content;
|
}
|
|
//WCS任务完成
|
public Stock WCSAccomplishIn(int TaskNum)
|
{
|
Stock content = new Stock();
|
//查询任务
|
Dt_Task task = SeletcTaskNum(TaskNum);
|
if (task == null)
|
{
|
return content;
|
}
|
//空桶入库
|
if (task.TaskType == (int)TaskTypeEnum.InEmpty)
|
{
|
//生成库存信息
|
//Dt_StockInfo stockInfo = new Dt_StockInfo();
|
//修改货位状态
|
Dt_LocationInfo locationInfo = _LocationInfoRepository.QueryFirst(x => x.LocationCode == task.TargetAddress);
|
locationInfo.LocationStatus = (int)LocationStatusEnum.EmptyBarrel;
|
|
//生成历史任务
|
Dt_Task_Hty taskhty = new Dt_Task_Hty();
|
taskhty.TaskNum = task.TaskNum;
|
taskhty.WMSId = task.WMSId;
|
taskhty.PalletCode = task.PalletCode;
|
taskhty.Roadway = task.Roadway;
|
taskhty.SourceAddress = task.SourceAddress;
|
taskhty.TargetAddress = task.TargetAddress;
|
taskhty.CurrentAddress = task.CurrentAddress;
|
taskhty.NextAddress = task.NextAddress;
|
taskhty.ExceptionMessage = task.ExceptionMessage;
|
taskhty.Grade = task.Grade;
|
taskhty.Remark = task.Remark;
|
taskhty.TaskType = task.TaskType;
|
taskhty.TaskState = (int)TaskStatusEnum.Task_Finish;
|
|
//开始数据库事务
|
_unitOfWorkManage.BeginTran();
|
//_StockInfoRepository.AddData(stockInfo);
|
_LocationInfoRepository.UpdateData(locationInfo);
|
_Task_HtyRepository.AddData(taskhty);
|
BaseDal.DeleteData(task);
|
//提交事务
|
_unitOfWorkManage.CommitTran();
|
}
|
//满桶入库
|
else if (task.TaskType == (int)TaskTypeEnum.Infull)
|
{
|
//修改库存信息
|
Dt_StockInfo stockInfo = _StockInfoRepository.QueryFirst(x => x.LocationCode == task.TargetAddress);
|
stockInfo.StockStatus = (int)StockStatusEmun.空闲;
|
|
//修改货位状态
|
Dt_LocationInfo locationInfo = _LocationInfoRepository.QueryFirst(x => x.LocationCode == task.TargetAddress);
|
locationInfo.LocationStatus = (int)LocationStatusEnum.InStock;
|
|
//生成历史任务
|
Dt_Task_Hty taskhty = new Dt_Task_Hty();
|
taskhty.TaskNum = task.TaskNum;
|
taskhty.WMSId = task.WMSId;
|
taskhty.PalletCode = task.PalletCode;
|
taskhty.Roadway = task.Roadway;
|
taskhty.SourceAddress = task.SourceAddress;
|
taskhty.TargetAddress = task.TargetAddress;
|
taskhty.CurrentAddress = task.CurrentAddress;
|
taskhty.NextAddress = task.NextAddress;
|
taskhty.ExceptionMessage = task.ExceptionMessage;
|
taskhty.Grade = task.Grade;
|
taskhty.Remark = task.Remark;
|
taskhty.TaskType = task.TaskType;
|
taskhty.TaskState = (int)TaskStatusEnum.Task_Finish;
|
|
//开始数据库事务
|
_unitOfWorkManage.BeginTran();
|
_StockInfoRepository.UpdateData(stockInfo);
|
_LocationInfoRepository.UpdateData(locationInfo);
|
_Task_HtyRepository.AddData(taskhty);
|
BaseDal.DeleteData(task);
|
//提交事务
|
_unitOfWorkManage.CommitTran();
|
}
|
//空桶出
|
else if (task.TaskType == (int)TaskTypeEnum.OutEmpty)
|
{
|
//删除库存信息
|
//Dt_StockInfo stockInfo = new Dt_StockInfo();
|
|
//修改货位状态
|
Dt_LocationInfo locationInfo = _LocationInfoRepository.QueryFirst(x => x.LocationCode == task.SourceAddress);
|
locationInfo.LocationStatus = (int)LocationStatusEnum.Free;
|
locationInfo.Remark = "";
|
|
//生成历史任务
|
Dt_Task_Hty taskhty = new Dt_Task_Hty();
|
taskhty.TaskNum = task.TaskNum;
|
taskhty.WMSId = task.WMSId;
|
taskhty.PalletCode = task.PalletCode;
|
taskhty.Roadway = task.Roadway;
|
taskhty.SourceAddress = task.SourceAddress;
|
taskhty.TargetAddress = task.TargetAddress;
|
taskhty.CurrentAddress = task.CurrentAddress;
|
taskhty.NextAddress = task.NextAddress;
|
taskhty.ExceptionMessage = task.ExceptionMessage;
|
taskhty.Grade = task.Grade;
|
taskhty.Remark = task.Remark;
|
taskhty.TaskType = task.TaskType;
|
taskhty.TaskState = (int)TaskStatusEnum.Task_Finish;
|
|
//开始数据库事务
|
_unitOfWorkManage.BeginTran();
|
_LocationInfoRepository.UpdateData(locationInfo);
|
_Task_HtyRepository.AddData(taskhty);
|
BaseDal.DeleteData(task);
|
//提交事务
|
_unitOfWorkManage.CommitTran();
|
}
|
//满桶出
|
else if (task.TaskType == (int)TaskTypeEnum.Outfull)
|
{
|
//删除库存信息
|
Dt_StockInfo stockInfo = _StockInfoRepository.QueryFirst(x => x.LocationCode == task.SourceAddress);
|
//生成历史库存信息
|
Dt_StockInfo_hty stockInfo_Hty = new Dt_StockInfo_hty();
|
stockInfo_Hty.PalletCode = stockInfo.PalletCode;
|
stockInfo_Hty.LocationCode = stockInfo.LocationCode;
|
stockInfo_Hty.StockStatus = (int)StockStatusEmun.已出库;
|
stockInfo_Hty.MaterielCode1 = stockInfo.MaterielCode1;
|
stockInfo_Hty.MaterielName = stockInfo.MaterielName;
|
stockInfo_Hty.Remark = stockInfo.Remark;
|
stockInfo_Hty.MaterielCode2 = stockInfo.MaterielCode2;
|
stockInfo_Hty.MaterielCode3 = stockInfo.MaterielCode3;
|
stockInfo_Hty.MaterielCode4 = stockInfo.MaterielCode4;
|
stockInfo_Hty.StockType = stockInfo.StockType;
|
stockInfo_Hty.MaterielDetailedid = stockInfo.MaterielDetailedid;
|
|
//修改货位状态
|
Dt_LocationInfo locationInfo = _LocationInfoRepository.QueryFirst(x => x.LocationCode == task.SourceAddress);
|
locationInfo.LocationStatus = (int)LocationStatusEnum.Free;
|
|
//生成历史任务
|
Dt_Task_Hty taskhty = new Dt_Task_Hty();
|
taskhty.TaskNum = task.TaskNum;
|
taskhty.WMSId = task.WMSId;
|
taskhty.PalletCode = task.PalletCode;
|
taskhty.Roadway = task.Roadway;
|
taskhty.SourceAddress = task.SourceAddress;
|
taskhty.TargetAddress = task.TargetAddress;
|
taskhty.CurrentAddress = task.CurrentAddress;
|
taskhty.NextAddress = task.NextAddress;
|
taskhty.ExceptionMessage = task.ExceptionMessage;
|
taskhty.Grade = task.Grade;
|
taskhty.Remark = task.Remark;
|
taskhty.TaskType = task.TaskType;
|
taskhty.TaskState = (int)TaskStatusEnum.Task_Finish;
|
|
//返回货物编号
|
content.MaterialCode1 = stockInfo.MaterielCode1;
|
content.MaterialCode2 = stockInfo.MaterielCode2;
|
content.MaterialCode3 = stockInfo.MaterielCode3;
|
content.MaterialCode4 = stockInfo.MaterielCode4;
|
|
//开始数据库事务
|
_unitOfWorkManage.BeginTran();
|
_StockInfoRepository.DeleteData(stockInfo);
|
_IStockInfohtyRepository.AddData(stockInfo_Hty);
|
_LocationInfoRepository.UpdateData(locationInfo);
|
_Task_HtyRepository.AddData(taskhty);
|
BaseDal.DeleteData(task);
|
//判断订单任务是否完成
|
OrderTask(task, stockInfo);
|
//提交事务
|
_unitOfWorkManage.CommitTran();
|
}
|
//直接出库
|
else if (task.TaskType == (int)TaskTypeEnum.OutDirect)
|
{
|
//删除库存信息
|
Dt_StockInfo stockInfo = _StockInfoRepository.QueryFirst(x => x.LocationCode == task.SourceAddress);
|
//生成历史库存信息
|
Dt_StockInfo_hty stockInfo_Hty = new Dt_StockInfo_hty();
|
stockInfo_Hty.PalletCode = stockInfo.PalletCode;
|
stockInfo_Hty.LocationCode = stockInfo.LocationCode;
|
stockInfo_Hty.StockStatus = (int)StockStatusEmun.直接出库;
|
stockInfo_Hty.MaterielCode1 = stockInfo.MaterielCode1;
|
stockInfo_Hty.MaterielName = stockInfo.MaterielName;
|
stockInfo_Hty.Remark = stockInfo.Remark;
|
stockInfo_Hty.MaterielCode2 = stockInfo.MaterielCode2;
|
stockInfo_Hty.MaterielCode3 = stockInfo.MaterielCode3;
|
stockInfo_Hty.MaterielCode4 = stockInfo.MaterielCode4;
|
stockInfo_Hty.StockType = stockInfo.StockType;
|
stockInfo_Hty.MaterielDetailedid = stockInfo.MaterielDetailedid;
|
|
//生成历史任务
|
Dt_Task_Hty taskhty = new Dt_Task_Hty();
|
taskhty.TaskNum = task.TaskNum;
|
taskhty.WMSId = task.WMSId;
|
taskhty.PalletCode = task.PalletCode;
|
taskhty.Roadway = task.Roadway;
|
taskhty.SourceAddress = task.SourceAddress;
|
taskhty.TargetAddress = task.TargetAddress;
|
taskhty.CurrentAddress = task.CurrentAddress;
|
taskhty.NextAddress = task.NextAddress;
|
taskhty.ExceptionMessage = task.ExceptionMessage;
|
taskhty.Grade = task.Grade;
|
taskhty.Remark = task.Remark;
|
taskhty.TaskType = task.TaskType;
|
taskhty.TaskState = (int)TaskStatusEnum.Task_Finish;
|
|
//返回货物编号
|
content.MaterialCode1 = stockInfo.MaterielCode1;
|
content.MaterialCode2 = stockInfo.MaterielCode2;
|
content.MaterialCode3 = stockInfo.MaterielCode3;
|
content.MaterialCode4 = stockInfo.MaterielCode4;
|
|
//查询当前执行的订单
|
Dt_OutboundOrder OutboundOrder = _OutboundOrderRepository.QueryFirst(x => x.BoundOrderStatue == (int)OutboundOrderEnum.Execute);
|
Dt_OutboundOrder_Hty OutboundOrder_Hty = new Dt_OutboundOrder_Hty();
|
int num = OutboundOrder.BoundTaskNum + 1;
|
OutboundOrder.BoundTaskNum = num;
|
//判断订单是否执行完成
|
if (num == OutboundOrder.num)
|
{
|
//生成历史订单
|
OutboundOrder_Hty.MaterielName = OutboundOrder.MaterielName;
|
OutboundOrder_Hty.num = OutboundOrder.num;
|
OutboundOrder_Hty.BoundOrderType = OutboundOrder.BoundOrderType;
|
OutboundOrder_Hty.BoundOrderCode = OutboundOrder.BoundOrderCode;
|
OutboundOrder_Hty.BoundOrderStatue = (int)OutboundOrderEnum.Accomplish;
|
|
//修改入库模式
|
Dt_Outstockinfo outstockinfo = _IOutstockinfoService.QueryFirst(x => x.Id == 1);
|
outstockinfo.OutMode = 0;
|
|
//开始数据库事务
|
_unitOfWorkManage.BeginTran();
|
_StockInfoRepository.DeleteData(stockInfo);
|
_IStockInfohtyRepository.AddData(stockInfo_Hty);
|
_Task_HtyRepository.AddData(taskhty);
|
BaseDal.DeleteData(task);
|
_OutboundOrderRepository.DeleteData(OutboundOrder);
|
_OutboundOrderHtyRepository.AddData(OutboundOrder_Hty);
|
_IOutstockinfoService.UpdateData(outstockinfo);
|
//提交事务
|
_unitOfWorkManage.CommitTran();
|
}
|
else
|
{
|
//开始数据库事务
|
_unitOfWorkManage.BeginTran();
|
_StockInfoRepository.DeleteData(stockInfo);
|
_IStockInfohtyRepository.AddData(stockInfo_Hty);
|
_Task_HtyRepository.AddData(taskhty);
|
BaseDal.DeleteData(task);
|
_OutboundOrderRepository.UpdateData(OutboundOrder);
|
//提交事务
|
_unitOfWorkManage.CommitTran();
|
}
|
}
|
|
return content;
|
}
|
|
//判断订单任务是否完成
|
public void OrderTask(Dt_Task task, Dt_StockInfo stock)
|
{
|
//判断是否为订单任务
|
if (task.Remark != null && task.Remark.Equals(""))
|
{
|
//判断当前订单任务是否还有未执行完成的
|
Dt_Task tasks = BaseDal.QueryFirst(x => x.Remark == task.Remark);
|
if (tasks == null)
|
{
|
Dt_OutboundOrder OutboundOrder = _OutboundOrderRepository.QueryFirst(x=>x.MaterielName == stock.MaterielName && x.BoundOrderCode == task.Remark);
|
//生成历史订单
|
Dt_OutboundOrder_Hty OutboundOrder_Hty = new Dt_OutboundOrder_Hty();
|
OutboundOrder_Hty.MaterielName = OutboundOrder.MaterielName;
|
OutboundOrder_Hty.num = OutboundOrder.num;
|
OutboundOrder_Hty.BoundOrderType = OutboundOrder.BoundOrderType;
|
OutboundOrder_Hty.BoundOrderCode = OutboundOrder.BoundOrderCode;
|
OutboundOrder_Hty.BoundOrderStatue = (int)OutboundOrderEnum.Accomplish;
|
|
//开始数据库事务
|
_unitOfWorkManage.BeginTran();
|
_OutboundOrderHtyRepository.AddData(OutboundOrder_Hty);
|
_OutboundOrderRepository.UpdateData(OutboundOrder);
|
//提交事务
|
_unitOfWorkManage.CommitTran();
|
}
|
}
|
}
|
|
//根据任务号查询任务
|
public Dt_Task SeletcTaskNum(int TaskNum)
|
{
|
Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == TaskNum);
|
return task;
|
}
|
|
//WCS同步任务状态
|
public WebResponseContent WCSTaskState(Dt_Task task)
|
{
|
WebResponseContent content = new WebResponseContent();
|
Dt_Task tasks = SeletcTaskNum(task.TaskNum);
|
|
tasks.WMSId = task.WMSId;
|
tasks.PalletCode = task.PalletCode;
|
tasks.Roadway = task.Roadway;
|
tasks.SourceAddress = task.SourceAddress;
|
tasks.TargetAddress = task.TargetAddress;
|
tasks.CurrentAddress = task.CurrentAddress;
|
tasks.NextAddress = task.NextAddress;
|
tasks.ExceptionMessage = task.ExceptionMessage;
|
tasks.Grade = task.Grade;
|
tasks.Remark = task.Remark;
|
tasks.TaskType = task.TaskType;
|
tasks.TaskState = task.TaskState;
|
|
BaseDal.UpdateData(tasks);
|
return content;
|
}
|
|
//空桶出库任务
|
public WebResponseContent addOutEmptyTask(string location)
|
{
|
WebResponseContent content = new WebResponseContent();
|
Dt_Task task = new Dt_Task();
|
//出库分配物料
|
Dt_LocationInfo locations = _LocationInfoService.AllotStock(1);
|
if (locations == null)
|
{
|
return content;
|
}
|
locations.LocationStatus = (int)LocationStatusEnum.Lock;
|
|
task.SourceAddress = locations.LocationCode;
|
task.TargetAddress = location;
|
task.Roadway = "SC01";
|
task.Grade = 1;
|
task.TaskType = (int)TaskTypeEnum.OutEmpty;
|
task.TaskState = (int)TaskStatusEnum.OutNew;
|
task.TaskNum = TaskNum(DateTime.Now.ToString("mmss").ObjToInt());
|
|
//开始数据库事务
|
_unitOfWorkManage.BeginTran();
|
_LocationInfoRepository.UpdateData(locations);
|
BaseDal.AddData(task);
|
//发送给WCS
|
string address = AppSettings.Get("WCS");
|
if (!string.IsNullOrEmpty(address))
|
{
|
HttpHelper.Post($"{address}/api/Task/WMSaddTask/", task.Serialize());
|
}
|
//提交事务
|
_unitOfWorkManage.CommitTran();
|
return content;
|
}
|
|
//根据数量和种类下发满桶出库任务
|
public WebResponseContent ArtificialTask(int Num, string Types, string? remark)
|
{
|
WebResponseContent content = new WebResponseContent();
|
List<Dt_Task> tasks = new List<Dt_Task>();
|
List<Dt_LocationInfo> LocationInfo = new List<Dt_LocationInfo>();
|
List<Dt_StockInfo> StockInfo = new List<Dt_StockInfo>();
|
|
if (Num > 0 && !Types.Equals("") && Types != null)
|
{
|
Dt_Warehouse Warehouse = _WarehouseRepository.QueryFirst(x=>x.MateriaCode == Types);
|
//满桶出库
|
if (Warehouse == null)
|
{
|
Dt_Outstockinfo outstockinfo = _OutstockinfoRepository.QueryFirst(x => x.Id == 1);
|
//满
|
if (outstockinfo.BigOrLittle == 1)
|
{
|
//获取并锁定物料
|
StockInfo = _IStockService.PriorityBig(Num, Types);
|
if (StockInfo == null || StockInfo.Count <= 0)
|
{
|
StockInfo = _IStockService.PriorityLittle(Num, Types);
|
}
|
}
|
//残
|
else
|
{
|
//获取并锁定物料
|
StockInfo = _IStockService.PriorityLittle(Num, Types);
|
if (StockInfo == null || StockInfo.Count <= 0)
|
{
|
StockInfo = _IStockService.PriorityBig(Num, Types);
|
}
|
}
|
|
//创建任务
|
if (StockInfo != null && StockInfo.Count > 0)
|
{
|
//获取并锁定货位
|
LocationInfo = _ILocationInfoService.StockLockLocation(StockInfo);
|
//创建任务
|
tasks = StocksAddTasks(StockInfo, remark);
|
}
|
else
|
{
|
return content.Error("物料不足");
|
}
|
}
|
//空桶出库
|
else
|
{
|
//获取并锁定货位
|
LocationInfo = _LocationInfoRepository.QueryData(x => x.Remark == Types && x.LocationStatus == (int)LocationStatusEnum.EmptyBarrel).Take(Num).ToList();
|
if (LocationInfo.Count() == Num)
|
{
|
string StationName = "满桶出";
|
string StationNames = SelectStationManger(StationName);
|
foreach (var item in LocationInfo)
|
{
|
item.LocationStatus = (int)LocationStatusEnum.Lock;
|
|
//创建任务
|
Dt_Task task = new Dt_Task();
|
task.SourceAddress = item.LocationCode;
|
task.TargetAddress = StationNames;
|
task.Roadway = "SC01";
|
task.Grade = 1;
|
task.TaskType = (int)TaskTypeEnum.OutEmpty;
|
task.TaskState = (int)TaskStatusEnum.OutNew;
|
task.TaskNum = TaskNum(DateTime.Now.ToString("mmss").ObjToInt());
|
tasks.Add(task);
|
}
|
}
|
else
|
{
|
return content.Error("物料不足");
|
}
|
}
|
|
//开始数据库事务
|
_unitOfWorkManage.BeginTran();
|
_LocationInfoRepository.UpdateData(LocationInfo);
|
_StockInfoRepository.UpdateData(StockInfo);
|
BaseDal.AddData(tasks);
|
//发送给WCS
|
string address = AppSettings.Get("WCS");
|
if (!string.IsNullOrEmpty(address))
|
{
|
HttpHelper.Post($"{address}/api/Task/WMSaddListTask/", tasks.Serialize());
|
}
|
//提交事务
|
_unitOfWorkManage.CommitTran();
|
}
|
else
|
{
|
LogLock.OutLogAOP("接口日志", new string[] { "下发数量或种类异常" });
|
return content.Error("下发数量或种类异常");
|
}
|
return content;
|
}
|
|
//根据多条物料创建多条出库任务
|
public List<Dt_Task> StocksAddTasks(List<Dt_StockInfo> StockInfo ,string? remark)
|
{
|
List<Dt_Task> tasks = new List<Dt_Task>();
|
int k = StockInfo.Count() - 1;
|
string StationName = "满桶出";
|
string StationNames = SelectStationManger(StationName);
|
|
for (int i = 0; i <= k; i++)
|
{
|
Dt_Task task = new Dt_Task();
|
task.SourceAddress = StockInfo[i].LocationCode;
|
task.TargetAddress = StationNames;
|
task.Roadway = "SC01";
|
task.Grade = 1;
|
task.TaskType = (int)TaskTypeEnum.Outfull;
|
task.TaskState = (int)TaskStatusEnum.OutNew;
|
task.TaskNum = TaskNum(DateTime.Now.ToString("mmss").ObjToInt() + i);
|
task.Remark = remark;
|
tasks.Add(task);
|
}
|
|
return tasks;
|
}
|
|
//根据站台名称查询站台地址
|
public string SelectStationManger(string StationName)
|
{
|
string address = AppSettings.Get("WCS");
|
string StationNames = "";
|
if (!string.IsNullOrEmpty(address))
|
{
|
StationNames = HttpHelper.Post($"{address}/api/StationManger/SelectStationManger/?StationName={StationName}", "");
|
}
|
|
return StationNames;
|
}
|
|
//手动立即完成任务
|
public WebResponseContent Complete(int taskid)
|
{
|
WebResponseContent content = new WebResponseContent();
|
Dt_Task task = BaseDal.QueryFirst(x => x.Id == taskid);
|
//生成历史任务
|
Dt_Task_Hty taskhty = new Dt_Task_Hty();
|
taskhty.TaskNum = task.TaskNum;
|
taskhty.WMSId = task.WMSId;
|
taskhty.PalletCode = task.PalletCode;
|
taskhty.Roadway = task.Roadway;
|
taskhty.SourceAddress = task.SourceAddress;
|
taskhty.TargetAddress = task.TargetAddress;
|
taskhty.CurrentAddress = task.CurrentAddress;
|
taskhty.NextAddress = task.NextAddress;
|
taskhty.ExceptionMessage = task.ExceptionMessage;
|
taskhty.Grade = task.Grade;
|
taskhty.Remark = task.Remark;
|
taskhty.TaskType = task.TaskType;
|
taskhty.TaskState = (int)TaskStatusEnum.Task_Finish;
|
|
//空桶入
|
if (task.TaskType == (int)TaskTypeEnum.InEmpty)
|
{
|
Dt_LocationInfo locationInfo = _LocationInfoRepository.QueryFirst(x => x.LocationCode == task.TargetAddress);
|
locationInfo.LocationStatus = (int)LocationStatusEnum.EmptyBarrel;
|
|
//开始数据库事务
|
_unitOfWorkManage.BeginTran();
|
_LocationInfoRepository.UpdateData(locationInfo);
|
BaseDal.DeleteData(task);
|
WCSTaskDelete(task.TaskNum);
|
_Task_HtyRepository.AddData(taskhty);
|
//提交事务
|
_unitOfWorkManage.CommitTran();
|
}
|
//空桶出
|
else if (task.TaskType == (int)TaskTypeEnum.OutEmpty)
|
{
|
Dt_LocationInfo locationInfo = _LocationInfoRepository.QueryFirst(x => x.LocationCode == task.SourceAddress);
|
locationInfo.LocationStatus = (int)LocationStatusEnum.Free;
|
locationInfo.Remark = "";
|
|
//开始数据库事务
|
_unitOfWorkManage.BeginTran();
|
_LocationInfoRepository.UpdateData(locationInfo);
|
BaseDal.DeleteData(task);
|
WCSTaskDelete(task.TaskNum);
|
_Task_HtyRepository.AddData(taskhty);
|
//提交事务
|
_unitOfWorkManage.CommitTran();
|
}
|
//满桶入
|
else if (task.TaskType == (int)TaskTypeEnum.Infull)
|
{
|
Dt_LocationInfo locationInfo = _LocationInfoRepository.QueryFirst(x => x.LocationCode == task.TargetAddress);
|
locationInfo.LocationStatus = (int)LocationStatusEnum.InStock;
|
Dt_StockInfo stockInfo = _StockInfoRepository.QueryFirst(x => x.LocationCode == task.TargetAddress);
|
stockInfo.StockStatus = (int)StockStatusEmun.空闲;
|
|
//开始数据库事务
|
_unitOfWorkManage.BeginTran();
|
_LocationInfoRepository.UpdateData(locationInfo);
|
_StockInfoRepository.UpdateData(stockInfo);
|
BaseDal.DeleteData(task);
|
WCSTaskDelete(task.TaskNum);
|
_Task_HtyRepository.AddData(taskhty);
|
//提交事务
|
_unitOfWorkManage.CommitTran();
|
}
|
//满桶出
|
else if (task.TaskType == (int)TaskTypeEnum.Outfull)
|
{
|
Dt_LocationInfo locationInfo = _LocationInfoRepository.QueryFirst(x => x.LocationCode == task.SourceAddress);
|
locationInfo.LocationStatus = (int)LocationStatusEnum.Free;
|
Dt_StockInfo stockInfo = _StockInfoRepository.QueryFirst(x => x.LocationCode == task.SourceAddress);
|
|
//开始数据库事务
|
_unitOfWorkManage.BeginTran();
|
_LocationInfoRepository.UpdateData(locationInfo);
|
_StockInfoRepository.DeleteData(stockInfo);
|
BaseDal.DeleteData(task);
|
WCSTaskDelete(task.TaskNum);
|
_Task_HtyRepository.AddData(taskhty);
|
//判断订单任务是否完成
|
OrderTask(task, stockInfo);
|
//提交事务
|
_unitOfWorkManage.CommitTran();
|
}
|
return content;
|
}
|
|
//WCS任务删除
|
public WebResponseContent WCSTaskDelete(int tasknum)
|
{
|
WebResponseContent content = new WebResponseContent();
|
if (tasknum == 0)
|
{
|
WebResponseContent.Instance.Error($"任务号不存在");
|
}
|
string address = AppSettings.Get("WCS");
|
if (!string.IsNullOrEmpty(address))
|
{
|
HttpHelper.Post($"{address}/api/Task/WCSTaskDelete/?tasknum={tasknum}", "");
|
}
|
return content;
|
}
|
|
//大屏电视查询任务
|
public List<Dt_Task> selectTask()
|
{
|
List<Dt_Task> task = new List<Dt_Task>();
|
task = BaseDal.QueryData().OrderByDescending(t => t.CreateDate).ToList();
|
return task;
|
}
|
|
//执行订单
|
public string ExecuteOrder(int k)
|
{
|
WebResponseContent content = new WebResponseContent();
|
Dt_OutboundOrder OutboundOrder = _OutboundOrderRepository.QueryFirst(x => x.Id == k);
|
//直接出库订单
|
if (OutboundOrder.BoundOrderType == 4)
|
{
|
//防止多条订单执行
|
Dt_OutboundOrder OutboundOrders = _OutboundOrderRepository.QueryFirst(x => x.BoundOrderStatue == (int)OutboundOrderEnum.Execute);
|
if (OutboundOrders == null)
|
{
|
//修改入库模式
|
Dt_Outstockinfo outstockinfo = _IOutstockinfoService.QueryFirst(x => x.Id == 1);
|
outstockinfo.OutMode = 1;
|
OutboundOrder.BoundOrderStatue = (int)OutboundOrderEnum.Execute;
|
|
//开始数据库事务
|
_unitOfWorkManage.BeginTran();
|
_IOutstockinfoService.UpdateData(outstockinfo);
|
_OutboundOrderRepository.UpdateData(OutboundOrder);
|
//提交事务
|
_unitOfWorkManage.CommitTran();
|
}
|
else
|
{
|
content.Message="请等待其他订单执行完成";
|
}
|
}
|
//其他正常出库
|
else
|
{
|
content = ArtificialTask(OutboundOrder.num, OutboundOrder.MaterielName, OutboundOrder.BoundOrderCode);
|
if (content.Message == null || content.Message.Equals(""))
|
{
|
OutboundOrder.BoundOrderStatue = (int)OutboundOrderEnum.Execute;
|
_OutboundOrderRepository.UpdateData(OutboundOrder);
|
}
|
}
|
return content.Message;
|
}
|
|
//防止任务号重复
|
public int TaskNum(int num)
|
{
|
int k = num;
|
while (true)
|
{
|
Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == k);
|
if (task == null)
|
{
|
return k;
|
}
|
else
|
{
|
k = DateTime.Now.ToString("mmss").ObjToInt();
|
continue;
|
}
|
}
|
}
|
}
|
}
|