From 58bd958f1fa8a85d0a3ac33a1ab1e2cab5d63dd2 Mon Sep 17 00:00:00 2001 From: dengjunjie <dengjunjie@hnkhzn.com> Date: 星期四, 20 六月 2024 20:18:46 +0800 Subject: [PATCH] 按照SN号查询最新的工单 --- 代码管理/WMS/WMS_Server/WIDESEA_WMS/Services/system/Partial/dt_stationinfoService.cs | 315 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 314 insertions(+), 1 deletions(-) diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Services/system/Partial/dt_stationinfoService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Services/system/Partial/dt_stationinfoService.cs" index 6bfdcaa..befac78 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Services/system/Partial/dt_stationinfoService.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WMS/Services/system/Partial/dt_stationinfoService.cs" @@ -17,9 +17,26 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.AspNetCore.Http; using WIDESEA_WMS.IRepositories; +using Newtonsoft.Json; +using WIDESEA_Comm.LogInfo; +using WIDESEA_Core.FreeDB; +using WIDESEA_Core.ManageUser; +using OfficeOpenXml.FormulaParsing.Excel.Functions.Text; +using static System.Collections.Specialized.BitVector32; +using WIDESEA_Core.EFDbContext; +using WIDESEA_WMS.Repositories; +using WIDESEA_Comm; +using WIDESEA_Comm.TaskNo; +using WIDESEA_Common; +using static FreeSql.Internal.GlobalFilter; namespace WIDESEA_WMS.Services { + public class Parm + { + public List<string> data { get; set; } + public int type { get; set; } + } public partial class dt_stationinfoService { private readonly IHttpContextAccessor _httpContextAccessor; @@ -37,5 +54,301 @@ //澶氱鎴蜂細鐢ㄥ埌杩檌nit浠g爜锛屽叾浠栨儏鍐靛彲浠ヤ笉鐢� //base.Init(dbRepository); } - } + FreeDB freeDB = new FreeDB(); + /// <summary> + /// 璁剧疆缂撳瓨鏋剁鐢ㄥ惎鐢� + /// </summary> + /// <param name="json"></param> + /// <returns></returns> + public WebResponseContent SetStationEnable(object json) + { + WebResponseContent webResponse = new WebResponseContent(); + try + { + var Tel = UserContext.Current.UserInfo.Tel; + var data = JsonConvert.DeserializeObject<Parm>(json.ToString()); + //var updateList = FreeDB.DB.Select<dt_stationinfo>().Where(t => data.data.Contains(t.id.ToString())).ToList(); + var updateList = _repository.Find(x => data.data.Contains(x.id.ToString())).ToList(); + if (!string.IsNullOrEmpty(Tel)) + { + var types = Tel.Split(','); + foreach (var update in updateList) + { + var OK = false; + foreach (var type in types) + { + if (update.stationCode.Contains(type)) + OK = true; + } + if (!OK) throw new Exception("褰撳墠璐﹀彿鏃犵鐢ㄦ潈闄�!"); + } + } + + var res = freeDB.Update<dt_stationinfo>() + .Set(t => t.enable, data.type == 1) + .Where(t => data.data.Contains(t.id.ToString())) + .ExecuteAffrows(); + + var msg = data.type == 1 ? "鍚敤" : "绂佺敤"; + WriteDBLog.Write($"鎵嬪姩{msg}绔欑偣 ", $"{string.Join('銆�', updateList.Select(t => t.stationCode).ToArray())}", LogState.Sucess, "WMS", UserContext.Current.UserName); + + webResponse.OK(); + } + catch (Exception ex) + { + WriteDBLog.Write($"鎵嬪姩鍚敤鎴栫鐢ㄧ珯鐐� ", new { 閿欒淇℃伅 = ex.Message, 鏁版嵁 = json }, LogState.Error, "WMS", UserContext.Current.UserName); + webResponse.Error(ex.Message); + } + return webResponse; + } + /// <summary> + /// 鍒囨崲鎵樼洏 + /// </summary> + /// <param name="saveModel"></param> + /// <returns></returns> + public WebResponseContent Trayswitching(SaveModel saveModel) + { + WebResponseContent webResponse = new WebResponseContent(); + VOLContext context = new VOLContext(); + Idt_agvtaskRepository agvtaskRepository = new dt_agvtaskRepository(context); + IVV_Mes_WorkinfoRepository workinfoRepository = new VV_Mes_WorkinfoRepository(context); + foreach (var Key in saveModel.DelKeys) + { + try + { + var station = repository.Find(x => x.id.ToString() == Key.ToString()).FirstOrDefault(); + if (!station.stationCode.Contains("X") && !station.stationCode.Contains("W01001004") && !station.stationCode.Contains("W01001005")) throw new Exception($"鏃爗station.stationCode}浣跨敤鏉冮檺锛�"); + if (!station.enable) throw new Exception($"{station.stationCode}鏈惎鐢紒"); + if (station.location_state == LocationStateEnum.Abnormal.ToString()) throw new Exception($"{station.stationCode}鐘舵�佸紓甯革紒"); + if (station.location_state == LocationStateEnum.Empty.ToString()) throw new Exception($"{station.stationCode}鐘舵�佷负绌猴紒"); + if (station.remark == "妗佹灦涓嬫枡") throw new Exception($"{station.stationCode}妗佹灦姝e湪涓嬫枡锛�"); + + var task = agvtaskRepository.Find(x => x.agv_toaddress == station.stationCode).FirstOrDefault(); + if (task != null) + { + if (task.agv_taskstate != AGVTaskStateEnum.Queue.ToString()) throw new Exception($"{station.stationCode}瀛樺湪浠诲姟锛�"); + task.agv_Traytype = station.tray_type == TrayTypeEnum.SmallTray.ToString() ? TrayTypeEnum.LargeTray.ToString() : TrayTypeEnum.SmallTray.ToString(); + agvtaskRepository.Update(task, x => new { x.agv_Traytype }, true); + } + else if (!agvtaskRepository.Find(x => x.agv_fromaddress == station.stationCode).Any()) + { + #region 涓虹┖鎵樺苟涓旀暟閲忎负0,鍒涘缓鍙栫┖鎵樹换鍔� + if (station.tray_status == TrayStateEnum.EmptyTray.ToString() && station.quantity == 0) + { + dt_agvtask agvtask = new dt_agvtask() + { + agv_fromaddress = station.stationCode, + agv_id = Guid.NewGuid(), + agv_tasknum = IdenxManager.GetTaskNo("KH-", "WMS"), + agv_grade = 1, + agv_createtime = DateTime.Now, + agv_taskstate = AGVTaskStateEnum.Queue.ToString(), + agv_qty = 1, + StarQuantity = 0, + EndQuantity = 0,//EmptyStation.quantity, + agv_tasktype = AGVTaskTypeEnum.TaskType_EmptyPallet.ToString(), + agv_toaddress = "", + agv_userid = UserContext.Current.UserName, + agv_TrayStatus = station.tray_status, + agv_Traytype = station.tray_type + }; + agvtaskRepository.Add(agvtask, true); + + station.location_state = LocationStateEnum.Busy.ToString(); + } + #endregion + + #region 鍒涘缓鍏ュ簱浠诲姟 + else if (station.location_state == LocationStateEnum.Stroge.ToString() && station.quantity > 0) + { + var Work = workinfoRepository.Find(x => x.workOrder == station.Number && x.processCode == "17").FirstOrDefault(); + if (Work == null) throw new Exception($"鏈壘鍒拌揣浣峽station.stationCode}鐨勬満鍔犲伐宸ュ崟淇℃伅锛�"); + dt_agvtask agvtask = new dt_agvtask() + { + agv_fromaddress = station.stationCode, + agv_id = Guid.NewGuid(), + agv_tasknum = IdenxManager.GetTaskNo("KH-", "WMS"), + agv_grade = 1, + agv_createtime = DateTime.Now, + agv_taskstate = AGVTaskStateEnum.Queue.ToString(), + agv_materielid = station.stationType, + agv_qty = station.quantity, + agv_tasktype = station.stationCode.Contains("3") ? AGVTaskTypeEnum.TaskType_OutsourceInbound.ToString() : AGVTaskTypeEnum.TaskType_Inbound.ToString(), + 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 + }; + agvtaskRepository.Add(agvtask, true); + + station.location_state = LocationStateEnum.InBusy.ToString(); + } + #endregion + } + + station.tray_type = station.tray_type == TrayTypeEnum.SmallTray.ToString() ? TrayTypeEnum.LargeTray.ToString() : TrayTypeEnum.SmallTray.ToString(); + repository.Update(station, x => new { x.location_state, x.tray_type }, true); + + webResponse.OK(webResponse.Message += $"{station.stationCode}鍒囨崲鎴愬姛!"); + } + catch (Exception ex) + { + webResponse.Error(webResponse.Message += ex.Message); + } + } + WriteDBLog.Write($"鎵嬪姩鍒囨崲鎵樼洏 ", new { 淇℃伅 = webResponse.Message }, LogState.Sucess, "WMS", UserContext.Current.UserName); + return webResponse; + } + /// <summary> + /// 涓嬫枡浠诲姟 + /// </summary> + /// <param name="saveModel"></param> + /// <returns></returns> + public WebResponseContent SendAGVTask(SaveModel saveModel) + { + WebResponseContent webResponse = new WebResponseContent(); + VOLContext context = new VOLContext(); + Idt_agvtaskRepository agvtaskRepository = new dt_agvtaskRepository(context); + IVV_Mes_WorkinfoRepository workinfoRepository = new VV_Mes_WorkinfoRepository(context); + string completor = UserContext.Current.UserName; + //List<object> jsons = null; + foreach (var Key in saveModel.DelKeys) + { + try + { + var station = repository.Find(x => x.id.ToString() == Key.ToString()).FirstOrDefault(); + if (!station.stationCode.Contains("X")) throw new Exception($"鏃爗station.stationCode}浣跨敤鏉冮檺锛�"); + if (!station.enable) throw new Exception($"{station.stationCode}鏈惎鐢紒"); + if (station.location_state == LocationStateEnum.Abnormal.ToString()) throw new Exception($"{station.stationCode}鐘舵�佸紓甯革紒"); + if (station.location_state == LocationStateEnum.Empty.ToString()) throw new Exception($"{station.stationCode}鐘舵�佷负绌猴紒"); + if (station.tray_status == TrayStateEnum.EmptyTray.ToString()) throw new Exception($"{station.stationCode}涓虹┖鎵樼洏锛�"); + if (station.quantity < 1) throw new Exception($"{station.stationCode}鏁伴噺灏戜簬1锛�"); + if (station.remark == "妗佹灦涓嬫枡") throw new Exception($"{station.stationCode}妗佹灦姝e湪涓嬫枡锛�"); + //if (station.location_state.Contains("Busy")) throw new Exception($"{station.stationCode}鍗犵敤锛�"); + if (agvtaskRepository.Find(x => x.agv_fromaddress == station.stationCode || x.agv_fromaddress == station.stationCode).Any()) throw new Exception($"{station.stationCode}瀛樺湪浠诲姟锛�"); + var Work = workinfoRepository.Find(x => x.workOrder == station.Number && x.processCode == "17").FirstOrDefault(); + if (Work == null) throw new Exception($"鏈壘鍒拌揣浣峽station.stationCode}鐨勬満鍔犲伐宸ュ崟淇℃伅锛�"); + string tasktype = AGVTaskTypeEnum.TaskType_Inbound.ToString(); + if (!string.IsNullOrEmpty(Work.area) || station.stationCode.Contains("3")) + tasktype = AGVTaskTypeEnum.TaskType_OutsourceInbound.ToString(); + dt_agvtask agvtask = new dt_agvtask() + { + agv_fromaddress = station.stationCode, + agv_id = Guid.NewGuid(), + agv_tasknum = IdenxManager.GetTaskNo("KH-", "WMS"), + agv_grade = 1, + agv_createtime = DateTime.Now, + agv_taskstate = AGVTaskStateEnum.Queue.ToString(), + agv_materielid = station.stationType, + agv_qty = station.quantity, + agv_tasktype = tasktype, + agv_toaddress = "", + agv_userid = completor, + 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 + }; + //jsons.Add(agvtask); + agvtaskRepository.Add(agvtask, true); + station.location_state = LocationStateEnum.InBusy.ToString(); + repository.Update(station, x => new { x.location_state }, true); + webResponse.OK(webResponse.Message += $"{station.stationCode}浠诲姟娣诲姞鎴愬姛!"); + } + catch (Exception ex) + { + webResponse.Error(webResponse.Message += ex.Message); + } + } + WriteDBLog.Write($"鎵嬪姩涓嬫枡浠诲姟 ", new { 淇℃伅 = webResponse.Message }, LogState.Sucess, "WMS", completor); + return webResponse; + } + + public override WebResponseContent Add(SaveModel saveDataModel) + { + + return base.Add(saveDataModel); + } + + + + public override WebResponseContent Update(SaveModel saveModel) + { + WebResponseContent webResponse = new WebResponseContent(); + var station = _repository.FindFirst(x => x.id.ToString() == saveModel.MainData["id"].ToString()); + station.location_state = saveModel.MainData["location_state"].ToString(); + //station.bindSN = saveModel.MainData["bindSN"].ToString(); + var SNS = saveModel.MainData["bindSN"].ToString().Split(","); + List<string> list = new List<string>(); + foreach (var SN in SNS) + { + if (!string.IsNullOrEmpty(SN)) + list.Add(SN); + } + station.bindSN = string.Join(",", list); + station.quantity = list.Count; + station.stationType = saveModel.MainData["stationType"].ToString(); + station.heatNumber = saveModel.MainData["heatNumber"].ToString(); + station.Number = saveModel.MainData["Number"].ToString(); + station.billetID = saveModel.MainData["billetID"].ToString(); + station.remark = saveModel.MainData["remark"].ToString(); + station.tray_type = saveModel.MainData["tray_type"].ToString(); + if (list.Count == 0) + { + //station.tray_status = "EmptyTray"; + station.stationType = string.Empty; + station.heatNumber = string.Empty; + station.Number = string.Empty; + } + station.tray_status = string.IsNullOrEmpty(station.stationType) ? "EmptyTray" : "StrogeTray"; + if (station.location_state == "Empty" && !string.IsNullOrEmpty(station.stationType)) + { + webResponse.Error("鍥惧彿涓嶄负绌�,璐т綅鐘舵�佷笉鑳借缃负绌鸿揣浣嶏紒"); + } + //station.tray_status = list.Count == 0 ? "EmptyTray" : "StrogeTray"; + if (station.location_state == "Empty") + { + station.stationType = string.Empty; + station.heatNumber = string.Empty; + station.Number = string.Empty; + station.billetID = string.Empty; + station.tray_status = string.Empty; + station.bindSN = string.Empty; + station.quantity = 0; + //if (!station.stationCode.Contains("S") && !station.stationCode.Contains("X") && !station.stationCode.Contains("W01001004") && !station.stationCode.Contains("W01001005")) + // station.tray_type = string.Empty; + } + var count = _repository.Update(station, true); + if (count > 0) + webResponse.OK(); + else + webResponse.Error(); + return webResponse; + } + + + public WebResponseContent dt_stationinfolist() + { + WebResponseContent content = new WebResponseContent(); + VOLContext volContext = new VOLContext(); + Idt_stationinfoRepository dsta = new dt_stationinfoRepository(volContext); + string[] stationCodes = { "A", "S", "X", "W", "DD", "B", "C", "D01" }; + List<Tuple<List<dt_stationinfo>, int>> responseData = new List<Tuple<List<dt_stationinfo>, int>>(); + foreach (string code in stationCodes) + { + var data = dsta.Find(_ => true).Where(a => a.stationCode.Contains(code)).OrderBy(a => a.stationCode).ToList(); + int inst = dsta.Find(_ => true).Where(a => a.stationCode.Contains(code)).GroupBy(a => a.line).Count(); + responseData.Add(Tuple.Create(data, inst)); + } + content.Data = responseData; + return content; + } + + } } -- Gitblit v1.9.3