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; } } }