using SqlSugar.Extensions; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEA_Common.APIEnum; 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_Core.Enums; 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.BatchNo == 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.Outbound, 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); //加入库存变动记录 //_recordService.StockQuantityChangeRecordService.AddStockChangeRecord(stockInfo, stockInfoDetails, beforeQuantity, totalQuantity, StockChangeTypeEnum.MaterielGroup); _unitOfWorkManage.CommitTran(); //将任务推送到WCS PushTasksToWCS(new List() { taskOut },"AGV"); responseContent.OK(); } catch (Exception ex) { _unitOfWorkManage.RollbackTran(); responseContent.Error(ex.Message); } return responseContent; } /// /// 测试架退库 /// /// public MesResponseContent TestToolBack(TestToolBackModel backModel) { 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.BatchNo == backModel.TestToolCode)).First(); if (stockInfo==null) { return responseContent.Error($"{backModel.TestToolCode}库存信息不存在"); } //生成退库任务 Dt_Task taskIn = new() { CurrentAddress = backModel.SourceAddressCode, Grade = 0, PalletCode = stockInfo.PalletCode, NextAddress = "", Roadway = "", SourceAddress = backModel.SourceAddressCode, TargetAddress = "", TaskStatus = (int)TaskStatusEnum.New, TaskType = (int)TaskTypeEnum.Outbound, TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)), PalletType = stockInfo.PalletType, WarehouseId = stockInfo.WarehouseId, }; //更改库存状态 stockInfo.StockStatus = StockStatusEmun.入库确认.ObjToInt(); _unitOfWorkManage.BeginTran(); _stockRepository.StockInfoRepository.UpdateData(stockInfo); _unitOfWorkManage.CommitTran(); responseContent.OK(); } catch (Exception ex) { _unitOfWorkManage.RollbackTran(); 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 && x.StockStatus==StockStatusEmun.出库完成.ObjToInt()) .Includes(x => x.Details).Where(x => x.Details.Any(x => x.BatchNo == toolScrap.ToolCode)).First(); if (stockInfo == null) { return responseContent.Error($"{toolScrap.ToolCode}库存信息不存在"); } //清除库存信息 _unitOfWorkManage.BeginTran(); _stockRepository.StockInfoRepository.DeleteData(stockInfo); _stockRepository.StockInfoDetailRepository.DeleteData(stockInfo.Details); _stockRepository.StockInfoRepository.DeleteAndMoveIntoHty(stockInfo,OperateTypeEnum.自动删除); _stockRepository.StockInfoDetailRepository.DeleteAndMoveIntoHty(stockInfo.Details, OperateTypeEnum.自动删除); _unitOfWorkManage.CommitTran(); } catch (Exception ex) { _unitOfWorkManage.RollbackTran(); responseContent.Error(ex.Message); } return responseContent; } /// /// 同步测试架寿命 /// /// /// public WebResponseContent TestSynStock(TestToolSynInfo toolSynInfo) { WebResponseContent content= new WebResponseContent(); try { Dt_ApiInfo apiInfo = _apiInfoRepository.QueryFirst(x=>x.ApiCode==APIEnum.WMS_MES_TestToolSync.ToString()); Root root = new Root() { From = "WMS", DateTime = DateTime.Now.ToString(), Content=toolSynInfo }; //调用接口 } catch (Exception ex) { content.Error(ex.Message); } return content; } } }