分支自 SuZhouGuanHong/TaiYuanTaiZhong

huanghongfeng
2024-07-19 bb929bd0809eefc1108dd779846ff07d997f7ef0
´úÂë¹ÜÀí/WMS/WMS_Server/WIDESEA_WMS/Services/Taskinfo/Partial/dt_agvtaskService.cs
@@ -25,6 +25,12 @@
using WIDESEA_Core.ManageUser;
using WIDESEA_Comm.LogInfo;
using StackExchange.Redis;
using WIDESEA_Comm;
using WIDESEA_Entity.DomainModels.Mes;
using WIDESEA_WMS.Common;
using System.Reflection.Emit;
using System.Threading.Tasks;
using System.Net;
namespace WIDESEA_WMS.Services
{
@@ -46,61 +52,285 @@
            //base.Init(dbRepository);
        }
        /// <summary>
        /// æ·»åŠ ä»»åŠ¡
        /// ä»»åŠ¡æš‚åœ
        /// </summary>
        /// <param name="saveDataModel"></param>
        /// <param name="saveModel"></param>
        /// <returns></returns>
        public WebResponseContent PauseTask(SaveModel saveModel)
        {
            WebResponseContent response = new WebResponseContent().OK();
            foreach (var Key in saveModel.DelKeys)
            {
                try
                {
                    var task = repository.Find(x => x.agv_id.ToString() == Key.ToString()).FirstOrDefault();
                    if (task.agv_taskstate == AGVTaskStateEnum.Queue.ToString())
                    {
                        task.agv_taskstate = AGVTaskStateEnum.Pause.ToString();
                        repository.Update(task, x => new { x.agv_taskstate }, true);
                        response.OK(response.Message += $"{task.agv_tasknum}暂停成功!");
                    }
                }
                catch (Exception ex)
                {
                    response.Error(response.Message += ex.Message);
                }
            }
            return response;
        }
        /// <summary>
        /// ä»»åŠ¡ç»§ç»­
        /// </summary>
        /// <param name="saveModel"></param>
        /// <returns></returns>
        public WebResponseContent ContinueTask(SaveModel saveModel)
        {
            WebResponseContent response = new WebResponseContent().OK();
            foreach (var Key in saveModel.DelKeys)
            {
                try
                {
                    var task = repository.Find(x => x.agv_id.ToString() == Key.ToString()).FirstOrDefault();
                    if (task.agv_taskstate == AGVTaskStateEnum.Pause.ToString())
                    {
                        task.agv_taskstate = AGVTaskStateEnum.Queue.ToString();
                        repository.Update(task, x => new { x.agv_taskstate }, true);
                        response.OK(response.Message += $"{task.agv_tasknum}恢复成功!");
                    }
                }
                catch (Exception ex)
                {
                    response.Error(response.Message += ex.Message);
                }
            }
            return response;
        }
        public override WebResponseContent Del(object[] keys, bool delList = true)
        {
            #region æ‰¹é‡ä¿®æ”¹è´§ä½çŠ¶æ€
            //VOLContext context = new VOLContext();
            //Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(context);
            //var fromaddress = repository.Find(x => keys.Contains(x.agv_id)).Select(x => x.agv_fromaddress).ToList();
            //var stations = stationinfoRepository.Find(x => fromaddress.Contains(x.stationCode)).ToList();
            //foreach (var station in stations)
            //{
            //    station.location_state = LocationStateEnum.Stroge.ToString();
            //    //station.tray_type= TrayTypeEnum.SmallTray.ToString();
            //    //station.tray_status= TrayStateEnum.StrogeTray.ToString();
            //}
            //stationinfoRepository.UpdateRange(stations, x => new { x.location_state }, true);
            #endregion
            VOLContext volContext = new VOLContext();
            Idt_agvtask_htyRepository agvtask_HtyRepository = new dt_agvtask_htyRepository(volContext);
            var agvtasks = repository.Find(x => keys.Contains(x.agv_id)).ToList();
            List<dt_agvtask_hty> dt_Agvtask_Hties = new List<dt_agvtask_hty>();
            foreach (var task in agvtasks)
            {
                dt_agvtask_hty agvtask_Hty = new dt_agvtask_hty()
                {
                    hty_pkid = Guid.NewGuid(),
                    agv_id = task.agv_id,
                    agv_tasknum = task.agv_tasknum,
                    agv_materielid = task.agv_materielid,
                    agv_qty = task.agv_qty,
                    agv_createtime = task.agv_createtime,
                    agv_realesstime = task.agv_realesstime,
                    agv_executingBeginTime = task.agv_executingBeginTime,
                    agv_executingEndTime = task.agv_executingEndTime,
                    agv_completeBeginTime = task.agv_completeBeginTime,
                    agv_finishedtime = task.agv_finishedtime,
                    agv_taskstate = task.agv_taskstate,
                    agv_tasktype = task.agv_tasktype,
                    agv_fromaddress = task.agv_fromaddress,
                    agv_toaddress = task.agv_toaddress,
                    agv_operatetype = "Del",
                    agv_compeletor = UserContext.Current.UserName,
                    agv_completedate = DateTime.Now,
                    agv_grade = task.agv_grade,
                    agv_userid = task.agv_userid,
                    agv_Traytype = task.agv_Traytype,
                    agv_TrayStatus = task.agv_TrayStatus,
                    agv_worktype = task.agv_worktype,
                    agv_remark = task.agv_remark,
                    bindSN = task.bindSN,
                    jobID = task.jobID,
                    agv_materbarcode = task.agv_materbarcode,
                };
                dt_Agvtask_Hties.Add(agvtask_Hty);
            }
            agvtask_HtyRepository.AddRange(dt_Agvtask_Hties, true);
            return base.Del(keys, delList);
        }
        public WebResponseContent addNgTask(MesRequestTemp requestTemp)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                var fromaddress = requestTemp.from_address;
                VOLContext context = new VOLContext();
                Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(context);
                IVV_Mes_WorkinfoRepository workinfoRepository = new VV_Mes_WorkinfoRepository(context);
                var station = stationinfoRepository.Find(x => x.stationCode == fromaddress).FirstOrDefault();
                if (_repository.Find(x => x.agv_fromaddress == fromaddress || x.agv_toaddress == fromaddress).Any())
                    throw new Exception($"货位{fromaddress}已存在任务!");
                if (station == null) throw new Exception($"未找到货位{fromaddress}!");
                if (!station.enable) throw new Exception($"货位{fromaddress}未启用!");
                if (station.quantity < 1) throw new Exception($"货位{fromaddress}无车轮!");
                var Work = workinfoRepository.Find(x => x.workOrder == station.Number && x.processCode == "17").FirstOrDefault();
                if (Work == null) throw new Exception($"未找到货位{fromaddress}的机加工工单信息");
                dt_agvtask agvtask = new dt_agvtask()
                {
                    agv_fromaddress = station.stationCode,
                    agv_id = Guid.NewGuid(),
                    agv_tasknum = IdenxManager.GetTaskNo("KH-", "WMS"),
                    agv_grade = 2,
                    agv_createtime = DateTime.Now,
                    agv_taskstate = "Queue",
                    agv_materielid = station.stationType,
                    agv_qty = station.quantity,
                    agv_tasktype = "TaskType_OutsourceInbound",
                    agv_toaddress = "",
                    agv_userid = UserContext.Current.UserName,
                    bindSN = station.bindSN,
                    agv_worktype = Convert.ToInt32(Work.processCode),
                    agv_materbarcode = Work.materialCode,
                    agv_Traytype = station.tray_type,
                    jobID = station.Number,
                    agv_TrayStatus = station.tray_status
                };
                _repository.Add(agvtask, true);
                station.location_state = LocationStateEnum.InBusy.ToString();
                stationinfoRepository.Update(station, true);
                content.OK();
            }
            catch (Exception ex)
            {
                content.Message = ex.Message;
            }
            return content;
        }
        public override WebResponseContent Update(SaveModel saveModel)
        {
            WebResponseContent content = new WebResponseContent();
            var agv_id = saveModel.MainData["agv_id"].ToString();
            var task = _repository.Find(x => x.agv_id.ToString() == agv_id).FirstOrDefault();
            if (task.agv_taskstate != AGVTaskStateEnum.Queue.ToString()) return content.Error("当前任务不可更改!");
            WriteDBLog.Success($"手动修改任务", new { æ•°æ® = saveModel }, "WMS", UserContext.Current.UserName);
            return base.Update(saveModel);
        }
        #region æ·»åŠ NG任务
        public override WebResponseContent Add(SaveModel saveDataModel)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                var fromaddress = saveDataModel.MainData["agv_fromaddress"].ToString();
                VOLContext context = new VOLContext();
                Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(context);
                var fromaddress = saveDataModel.MainData["agv_fromaddress"].ToString();
                var toaddress = saveDataModel.MainData["agv_toaddress"].ToString();
                var tasktype = saveDataModel.MainData["agv_tasktype"].ToString();
                var grade = saveDataModel.MainData["agv_grade"].ToInt();
                var worktype = saveDataModel.MainData["agv_worktype"].ToInt();
                var station1 = stationinfoRepository.FindFirst(x => x.stationCode == fromaddress);
                var station2 = stationinfoRepository.FindFirst(x => x.stationCode == toaddress);
                if (station1 == null || station2 == null)
                    throw new Exception($"起点地址{fromaddress}或终点地址{toaddress}不存在!");
                if (string.IsNullOrEmpty(station1.stationType))
                    throw new Exception($"起点{fromaddress}未绑定物料类型!");
                var task = _repository.Find(t => t.agv_fromaddress == fromaddress
                       || t.agv_fromaddress == toaddress
                       || t.agv_toaddress == fromaddress
                       || t.agv_toaddress == toaddress
                       ).Any();
                if (task)
                    throw new Exception("起始或目的地址,已存在任务中!");
                dt_agvtask agvtask = new dt_agvtask();
                agvtask.agv_id = Guid.NewGuid();
                agvtask.agv_fromaddress = fromaddress;
                agvtask.agv_toaddress = toaddress;
                agvtask.agv_tasknum = IdenxManager.GetTaskNo("KH-");
                agvtask.agv_code = "AGV";
                agvtask.agv_taskstate = AGVTaskStateEnum.Create.ToString();
                agvtask.agv_tasktype = tasktype;
                agvtask.agv_worktype = worktype;//工作类型
                agvtask.bindSN = station1.bindSN;
                agvtask.agv_materielid = station1.stationType;//物料类型
                agvtask.agv_qty = station1.quantity;
                agvtask.agv_createtime = DateTime.Now;
                agvtask.agv_grade = grade;//任务优先级
                agvtask.agv_userid = UserContext.Current.UserName;
                IVV_Mes_WorkinfoRepository workinfoRepository = new VV_Mes_WorkinfoRepository(context);
                var station = stationinfoRepository.Find(x => x.stationCode == fromaddress).FirstOrDefault();
                if (_repository.Find(x => x.agv_fromaddress == fromaddress || x.agv_toaddress == fromaddress).Any())
                    throw new Exception($"货位{fromaddress}已存在任务!");
                if (station == null) throw new Exception($"未找到货位{fromaddress}!");
                if (!station.enable) throw new Exception($"货位{fromaddress}未启用!");
                if (station.quantity < 1) throw new Exception($"货位{fromaddress}无车轮!");
                var Work = workinfoRepository.Find(x => x.workOrder == station.Number && x.processCode == "17").FirstOrDefault();
                if (Work == null) throw new Exception($"未找到货位{fromaddress}的机加工工单信息");
                dt_agvtask agvtask = new dt_agvtask()
                {
                    agv_fromaddress = station.stationCode,
                    agv_id = Guid.NewGuid(),
                    agv_tasknum = IdenxManager.GetTaskNo("KH-", "WMS"),
                    agv_grade = 2,
                    agv_createtime = DateTime.Now,
                    agv_taskstate = "Queue",
                    agv_materielid = station.stationType,
                    agv_qty = station.quantity,
                    agv_tasktype = "TaskType_OutsourceInbound",
                    agv_toaddress = "",
                    agv_userid = UserContext.Current.UserName,
                    bindSN = station.bindSN,
                    agv_worktype = Convert.ToInt32(Work.processCode),
                    agv_materbarcode = Work.materialCode,
                    agv_Traytype = station.tray_type,
                    jobID = station.Number,
                    agv_TrayStatus = station.tray_status
                };
                _repository.Add(agvtask, true);
                station.location_state = LocationStateEnum.InBusy.ToString();
                stationinfoRepository.Update(station, true);
                content.OK();
                WriteDBLog.Success($"手动添加任务", new { æ•°æ® = saveDataModel }, "WMS", UserContext.Current.UserName);
            }
            catch (Exception ex)
            {
                WriteDBLog.Error($"手动添加任务", new { æ•°æ® = saveDataModel, å¼‚常信息 = ex.Message }, "WMS", UserContext.Current.UserName);
                content.Error(ex.Message);
                content.Message = ex.Message;
            }
            return content;
        }
        #endregion
        #region æ·»åŠ ä»»åŠ¡
        /// <summary>
        /// æ·»åŠ ä»»åŠ¡
        /// </summary>
        /// <param name="saveDataModel"></param>
        /// <returns></returns>
        //public override WebResponseContent Add(SaveModel saveDataModel)
        //{
        //    WebResponseContent content = new WebResponseContent();
        //    try
        //    {
        //        VOLContext context = new VOLContext();
        //        Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(context);
        //        var fromaddress = saveDataModel.MainData["agv_fromaddress"].ToString();
        //        var toaddress = saveDataModel.MainData["agv_toaddress"].ToString();
        //        var tasktype = saveDataModel.MainData["agv_tasktype"].ToString();
        //        var grade = saveDataModel.MainData["agv_grade"].ToInt();
        //        var worktype = saveDataModel.MainData["agv_worktype"].ToInt();
        //        var station1 = stationinfoRepository.FindFirst(x => x.stationCode == fromaddress);
        //        var station2 = stationinfoRepository.FindFirst(x => x.stationCode == toaddress);
        //        if (station1 == null || station2 == null)
        //            throw new Exception($"起点地址{fromaddress}或终点地址{toaddress}不存在!");
        //        if (string.IsNullOrEmpty(station1.stationType))
        //            throw new Exception($"起点{fromaddress}未绑定物料类型!");
        //        var task = _repository.Find(t => t.agv_fromaddress == fromaddress
        //               || t.agv_fromaddress == toaddress
        //               || t.agv_toaddress == fromaddress
        //               || t.agv_toaddress == toaddress
        //               ).Any();
        //        if (task)
        //            throw new Exception("起始或目的地址,已存在任务中!");
        //        dt_agvtask agvtask = new dt_agvtask();
        //        agvtask.agv_id = Guid.NewGuid();
        //        agvtask.agv_fromaddress = fromaddress;
        //        agvtask.agv_toaddress = toaddress;
        //        agvtask.agv_tasknum = IdenxManager.GetTaskNo("KH-");
        //        agvtask.agv_TrayStatus = station1.tray_status;
        //        agvtask.agv_Traytype = station1.tray_type;
        //        agvtask.agv_taskstate = AGVTaskStateEnum.Create.ToString();
        //        agvtask.agv_tasktype = tasktype;
        //        agvtask.agv_worktype = worktype;//工作类型
        //        agvtask.bindSN = station1.bindSN;
        //        agvtask.agv_materielid = station1.stationType;//物料类型
        //        agvtask.agv_qty = station1.quantity;
        //        agvtask.agv_createtime = DateTime.Now;
        //        agvtask.agv_grade = grade;//任务优先级
        //        agvtask.agv_userid = UserContext.Current.UserName;
        //        _repository.Add(agvtask, true);
        //        content.OK();
        //        WriteDBLog.Success($"手动添加任务", new { æ•°æ® = saveDataModel }, "WMS", UserContext.Current.UserName);
        //    }
        //    catch (Exception ex)
        //    {
        //        WriteDBLog.Error($"手动添加任务", new { æ•°æ® = saveDataModel, å¼‚常信息 = ex.Message }, "WMS", UserContext.Current.UserName);
        //        content.Error(ex.Message);
        //    }
        //    return content;
        //}
        #endregion
    }
}