From 23e4f986644298cb23ac43173414b7e1404b6657 Mon Sep 17 00:00:00 2001
From: dengjunjie <dengjunjie@hnkhzn.com>
Date: 星期六, 15 六月 2024 17:26:23 +0800
Subject: [PATCH] 任务逻辑优化
---
代码管理/WMS/WMS_Server/WIDESEA_WMS/Services/system/Partial/dt_stationinfoService.cs | 229 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 225 insertions(+), 4 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 c7891fa..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"
@@ -23,6 +23,12 @@
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
{
@@ -59,7 +65,7 @@
WebResponseContent webResponse = new WebResponseContent();
try
{
- var Tel = UserContext.Current.UserInfo.Tel;//缂撳瓨鏋舵潈闄�
+ 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();
@@ -84,22 +90,193 @@
.ExecuteAffrows();
var msg = data.type == 1 ? "鍚敤" : "绂佺敤";
- WriteDBLog.Write($"鎵嬪姩{msg}绔欑偣 ", $"{string.Join('銆�', updateList.Select(t => t.stationCode).ToArray())}", LogState.Sucess, "WCS", UserContext.Current.UserName);
+ 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, "WCS", UserContext.Current.UserName);
+ 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)
{
@@ -119,8 +296,34 @@
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_status= saveModel.MainData["tray_status"].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();
@@ -129,5 +332,23 @@
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