From 388c43ee7b741eebafa98cd8ef992005f1aa56f4 Mon Sep 17 00:00:00 2001
From: 陈勇 <chenyong@hnkhzn.com>
Date: 星期二, 12 三月 2024 14:52:40 +0800
Subject: [PATCH] PDA源程序
---
代码管理/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/StationTask.cs | 248 ++++++++++++++++++++++++++++++++++++-------------
1 files changed, 182 insertions(+), 66 deletions(-)
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/StationTask.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/StationTask.cs"
index 04209b7..5159d0f 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/StationTask.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/PCS/WCS_Server/WIDESEA_WCS/JobsPart/Common/StationTask.cs"
@@ -10,75 +10,113 @@
using WIDESEA_Entity.DomainModels;
using WIDESEA_Comm;
using static System.Collections.Specialized.BitVector32;
+using WIDESEA_Comm.TaskNo;
namespace WIDESEA_WCS.JobsPart.Common
{
public class StationTask
{
- FreeDB freeDB = new FreeDB();
- public void CreateTask()
+ static FreeDB freeDB = new FreeDB();
+ /// <summary>
+ /// 鍒涘缓鍏ュ簱浠诲姟
+ /// </summary>
+ public static void CreateTask()
{
- VOLContext context = new VOLContext();
- Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(context);
- Idt_WorkinfoRepository workinfoRepository = new dt_WorkinfoRepository(context);
-
- List<dt_stationinfo> stationinfos = stationinfoRepository.Find(x => x.stationCode.Contains('X'));
-
- foreach (var item in stationinfos)
+ try
{
- //鏍规嵁涓嬫枡鍙g殑缁戝畾淇℃伅鏌ヨ瀵瑰簲宸ュ崟锛屾娴嬫宸ュ崟鏄惁宸插畬鎴� 瀹屾垚鍗冲彲灏嗗叾閫佸叆搴�
+ VOLContext context = new VOLContext();
+ Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(context);
+ Idt_WorkinfoRepository workinfoRepository = new dt_WorkinfoRepository(context);
- dt_mes_head mesinfo = freeDB.Select<dt_mes_head>().Where(x => x.jobID == item.Number).First();
- int CompeletedNum = Convert.ToInt32(mesinfo.quantity) - Convert.ToInt32(mesinfo.finishNum);
+ List<dt_stationinfo> stationinfos = stationinfoRepository.Find(x => x.stationCode.Contains('X'));
- //鍒ゅ畾浠诲姟鏄惁宸插垱寤�//濡傚凡瀛樺湪
- if (freeDB.Select<dt_agvtask>().Where(x => x.agv_fromaddress == item.stationCode).Count() > 0)
- continue;
-
- if (item.quantity == 5 || CompeletedNum == 0) //寰幆璇诲彇杞﹁疆鏁颁负5鎴栬�呰鍗曞凡瀹屾垚鏁伴噺鐨勪笅鏂欏彛 鈫掑伐鍗曚汉宸ュ叧闂殑宸ュ崟
+ foreach (var item in stationinfos)
{
- if (mesinfo.quantity <= 50) //灏忎簬50浠剁洿鎺ュ嚭搴�
- {
- //todo 瀵绘壘鍙斁璐у鍗忔斁璐у彴
- dt_agvtask agvtask = new dt_agvtask()
- {
- agv_fromaddress = item.stationCode,
- agv_id = Guid.NewGuid(),
- agv_grade = 0,
- agv_barcode = "",
- agv_createtime = DateTime.Now,
- agv_taskstate = TaskStatus.Created.ToString(),
- //agv_toaddress = ,
+ //鏍规嵁涓嬫枡鍙g殑缁戝畾淇℃伅鏌ヨ瀵瑰簲宸ュ崟锛屾娴嬫宸ュ崟鏄惁宸插畬鎴� 瀹屾垚鍗冲彲灏嗗叾閫佸叆搴�
- };
- freeDB.Add(agvtask);
- }
- else
- {
- dt_stationinfo TargetLocation = GetEmptyLocation(stationinfoRepository, mesinfo, item);
+ dt_mes_head mesinfo = freeDB.Select<dt_mes_head>().Where(x => x.jobID == item.Number).First();
+ dt_geometry_data dt_Geometry_Data = freeDB.Select<dt_geometry_data>().Where(x => x.Description == mesinfo.drawingNo).First();
+ int CompeletedNum = Convert.ToInt32(mesinfo.quantity) - Convert.ToInt32(mesinfo.finishNum);
- if (TargetLocation != null)
+
+ //鍒ゅ畾浠诲姟鏄惁宸插垱寤�//濡傚凡瀛樺湪
+ if (freeDB.Select<dt_agvtask>().Where(x => x.agv_fromaddress == item.stationCode).Count() > 0)
+ continue;
+
+ if (item.quantity == 5 || CompeletedNum == 0) //寰幆璇诲彇杞﹁疆鏁颁负5鎴栬�呰鍗曞凡瀹屾垚鏁伴噺鐨勪笅鏂欏彛 鈫掑伐鍗曚汉宸ュ叧闂殑宸ュ崟
+ {
+
+
+ if (mesinfo.quantity <= 50 || item.stationCode.Contains("3")) //灏忎簬50浠剁洿鎺ュ嚭搴�
{
- //todo: 璋冪敤WMS鎺ュ彛鍒涘缓浠诲姟
- dt_agvtask agvtask = new dt_agvtask()
+ dt_stationinfo TargetLocation = GetEmptyLocation(stationinfoRepository);
+ //todo 瀵绘壘鍙斁璐у鍗忔斁璐у彴
+ if (TargetLocation != null)
{
- agv_fromaddress = item.stationCode,
- agv_id = Guid.NewGuid(),
- agv_grade = 0,
- agv_barcode = "",
- agv_createtime = DateTime.Now,
- agv_taskstate = TaskStatus.Created.ToString(),
- agv_toaddress = TargetLocation.stationCode,
- };
+ dt_agvtask agvtask = new dt_agvtask()
+ {
+ agv_fromaddress = item.stationCode,
+ agv_id = Guid.NewGuid(),
+ agv_tasknum = IdenxManager.GetTaskNo("KH-", "WMS"),
+ agv_grade = 1,
+ agv_createtime = DateTime.Now,
+ agv_taskstate = "Create",
+ agv_materielid = item.stationType,
+ agv_qty = item.quantity,
+ agv_tasktype = "TaskType_OutsourceInbound",
+ agv_toaddress = TargetLocation.stationCode,
+ agv_userid = "绯荤粺",
+ bindSN = item.bindSN,
+ agv_worktype = Convert.ToInt32(mesinfo.processCode),
+ agv_materbarcode = mesinfo.materialCode,
+ agv_barcode=item.tray_type
+ };
- freeDB.Add(agvtask);
- TargetLocation.location_state = LocationStateEnum.Busy.ToString();
- freeDB.Update(TargetLocation);
+ freeDB.Add(agvtask);
+ TargetLocation.location_state = LocationStateEnum.Busy.ToString();
+ freeDB.Update(TargetLocation);
+ }
+ }
+ else
+ {
+ dt_stationinfo TargetLocation = GetEmptyLocation(stationinfoRepository, mesinfo, item, CompeletedNum, dt_Geometry_Data.e);
+
+ if (TargetLocation != null)
+ {
+ //todo: 璋冪敤WMS鎺ュ彛鍒涘缓浠诲姟
+ dt_agvtask agvtask = new dt_agvtask()
+ {
+ agv_fromaddress = item.stationCode,
+ agv_id = Guid.NewGuid(),
+ agv_tasknum = IdenxManager.GetTaskNo("KH-", "WMS"),
+ agv_grade = 1,
+ agv_createtime = DateTime.Now,
+ agv_taskstate = "Create",
+ agv_materielid = item.stationType,
+ agv_qty = item.quantity,
+ agv_tasktype = "TaskType_Inbound",
+ agv_toaddress = TargetLocation.stationCode,
+ agv_userid = "绯荤粺",
+ bindSN = item.bindSN,
+ agv_worktype = Convert.ToInt32(mesinfo.processCode),
+ agv_materbarcode = mesinfo.materialCode,
+ agv_barcode=item.tray_type
+ };
+
+ freeDB.Add(agvtask);
+ TargetLocation.location_state = LocationStateEnum.Busy.ToString();
+ freeDB.Update(TargetLocation);
+ }
}
}
}
}
+ catch (Exception ex)
+ {
+
+ }
+
}
/// <summary>
@@ -88,11 +126,10 @@
/// <param name="workinfo">璁㈠崟</param>
/// <param name="stationinfo">涓嬫枡鍙d俊鎭�</param>
/// <returns></returns>
- private dt_stationinfo GetEmptyLocation(Idt_stationinfoRepository stationinfoRepository, dt_mes_head mesinfo, dt_stationinfo stationinfo)
+ private static dt_stationinfo GetEmptyLocation(Idt_stationinfoRepository stationinfoRepository, dt_mes_head mesinfo, dt_stationinfo stationinfo, int CompeletedNum, float e)
{
//鏀捐揣浣�
dt_stationinfo TargetLocation = null;
-
#region 鏍规嵁璁㈠崟鏁伴噺鏉ュ鎵惧搴斿簱鍖轰笖鍚岀墿鏂欑被鍨嬪簱浣�
//if (workinfo.PlannedQuantity < 50) //搴撳尯1 鐗╂枡绫诲瀷澶�
@@ -169,22 +206,73 @@
//}
#endregion
- //鏍规嵁璁㈠崟鐐夊彿/宸ュ崟鍙�/绫诲瀷
- if (mesinfo.quantity >= 180)
+ var detail = freeDB.Select<dt_mes_detail>().Where(x => x.jobID == mesinfo.jobID).First();
+ dt_inventory inventory = null;
+ if (detail.heatID != null)
{
- //鏌ヨ搴撳瓨璁板綍涓槸鍚﹀瓨鍦ㄥ悓绫诲瀷/宸ュ崟/鐐夊彿鐨勮褰� 濡傛湁鍒欐斁缃悓涓�琛岋紝鏃犲垯瀵绘壘鏂板簱浣�
- var detail = freeDB.Select<dt_mes_detail>().Where(x => x.jobID == mesinfo.jobID).First();
- var inventory = freeDB.Select<dt_inventory>().Where(x => x.HeatNumber == detail.heatID /*&& x.*/).First();
- if (inventory != null)
+ inventory = freeDB.Select<dt_inventory>().Where(x => x.HeatNumber == detail.heatID && x.FigureNumber == mesinfo.drawingNo && x.jobID == mesinfo.jobID).First();
+ }
+ else
+ {
+ inventory = freeDB.Select<dt_inventory>().Where(x => x.FigureNumber == mesinfo.drawingNo && x.jobID == mesinfo.jobID).First();
+ }
+
+ if (inventory != null)
+ {
+ var station = stationinfoRepository.FindFirst(x => x.stationCode == inventory.stationCode);
+ if (CompeletedNum <= 15 || station.area == "1")
{
- int line = Convert.ToInt16(inventory.stationCode.Split("-")[0]);
- TargetLocation = stationinfoRepository.Find(x => x.line == line && x.location_state == LocationStateEnum.Empty.ToString() && x.area == inventory.area).FirstOrDefault();
+ TargetLocation = stationinfoRepository.Find(x => x.column == station.column && x.location_state == LocationStateEnum.Empty.ToString() && x.enable && x.area == inventory.area).OrderBy(x => x.line).FirstOrDefault();
}
else
{
- TargetLocation = stationinfoRepository.Find(x => x.area == "2" && x.location_state == LocationStateEnum.Empty.ToString() && x.enable).OrderBy(x => x.line).ThenBy(x => x.column).FirstOrDefault();
+ TargetLocation = stationinfoRepository.Find(x => x.line == station.line && x.location_state == LocationStateEnum.Empty.ToString() && x.enable && x.area == inventory.area).OrderBy(x => x.column).FirstOrDefault();
}
+ if (TargetLocation != null) return TargetLocation;
}
+
+ if (CompeletedNum <= 15)
+ {
+ TargetLocation = stationinfoRepository.Find(x => x.line == 1 && x.location_state == LocationStateEnum.Empty.ToString() && x.enable && x.area == "1").OrderBy(x => x.column).FirstOrDefault();
+ }
+ else
+ {
+ //if (50 < mesinfo.quantity && mesinfo.quantity <= 180 && e < 1100)
+ // TargetLocation = stationinfoRepository.Find(x => x.column == 1 && x.area == "2" && x.location_state == LocationStateEnum.Empty.ToString() && x.enable).OrderBy(x => x.line).FirstOrDefault();
+ //else if (180 < mesinfo.quantity && mesinfo.quantity <= 225 && e < 1100)
+ // TargetLocation = stationinfoRepository.Find(x => x.column == 1 && x.area == "3" && x.location_state == LocationStateEnum.Empty.ToString() && x.enable).OrderBy(x => x.line).FirstOrDefault();
+ //if (50 < mesinfo.quantity && e > 1100 || TargetLocation == null)
+ var area = GetArea(mesinfo.quantity, e);
+ TargetLocation = stationinfoRepository.Find(x => x.column == 1 && x.area == area && x.location_state == LocationStateEnum.Empty.ToString() && x.enable).OrderBy(x => x.line).FirstOrDefault();
+ if (TargetLocation == null)
+ TargetLocation = stationinfoRepository.Find(x => x.column == 1 && x.area == "4" && x.location_state == LocationStateEnum.Empty.ToString() && x.enable).OrderBy(x => x.line).FirstOrDefault();
+ }
+
+ #region
+
+ //鏍规嵁璁㈠崟鐐夊彿/宸ュ崟鍙�/绫诲瀷
+ //if (mesinfo.quantity >= 180)
+ //{
+ // //鏌ヨ搴撳瓨璁板綍涓槸鍚﹀瓨鍦ㄥ悓绫诲瀷/宸ュ崟/鐐夊彿鐨勮褰� 濡傛湁鍒欐斁缃悓涓�琛岋紝鏃犲垯瀵绘壘鏂板簱浣�
+ // var detail = freeDB.Select<dt_mes_detail>().Where(x => x.jobID == mesinfo.jobID).First();
+ // var inventory = freeDB.Select<dt_inventory>().Where(x => x.HeatNumber == detail.heatID && x.FigureNumber == mesinfo.drawingNo && x.jobID == mesinfo.jobID).First();
+ // if (inventory != null)
+ // {
+ // //int line = Convert.ToInt16(inventory.stationCode.Split("-")[0]);
+ // var line = stationinfoRepository.FindFirst(x => x.stationCode == inventory.stationCode).line;
+ // TargetLocation = stationinfoRepository.Find(x => x.line == line && x.location_state == LocationStateEnum.Empty.ToString() && x.enable && x.area == inventory.area).OrderBy(x => x.column).FirstOrDefault();
+ // if (TargetLocation == null && CompeletedNum <= 15)
+ // {
+ // TargetLocation = stationinfoRepository.Find(x => x.area == "1" && x.location_state == LocationStateEnum.Empty.ToString() && x.enable).OrderBy(x => x.line).ThenBy(x => x.column).FirstOrDefault();
+ // }
+ // }
+ // else
+ // {
+ // TargetLocation = stationinfoRepository.Find(x => x.area == "2" && x.location_state == LocationStateEnum.Empty.ToString() && x.enable).OrderBy(x => x.line).ThenBy(x => x.column).FirstOrDefault();
+
+ // }
+ //}
+ #endregion
if (TargetLocation == null)
{
@@ -193,19 +281,47 @@
return TargetLocation;
}
+ private static dt_stationinfo GetEmptyLocation(Idt_stationinfoRepository stationinfoRepository)
+ {
+ dt_stationinfo TargetLocation = null;
+ List<string> target = new List<string>() { "W01001001", "W01001002", "W01001003" };
+ foreach (var item in target)
+ {
+ TargetLocation = stationinfoRepository.FindFirst(x => x.stationCode == item && x.location_state == LocationStateEnum.Empty.ToString() && x.enable);
+ if (TargetLocation != null) continue;
+ }
+
+ if (TargetLocation == null)
+ {
+ throw new Exception("澶栧崗鍏ュ簱鍙e凡婊�");
+ }
+ return TargetLocation;
+ }
/// <summary>
/// 鏍规嵁璁㈠崟鏁伴噺杩斿洖搴撳尯(鏆傛椂寮冪敤) //鏇存崲涓哄簱浣嶇被鍨嬪尮閰�
/// </summary>
/// <param name="quantity"></param>
/// <returns></returns>
- private string GetArea(int quantity)
+ private static string GetArea(int quantity, float e)
{
- if (quantity >= 50 && quantity < 180)
- return "2";
- else if (quantity >= 180 && quantity < 180)
- return "3";
- else if (quantity >= 180 && quantity < 220)
+ if (e < 1100)
+ {
+ if (quantity <= 180)
+ return "2";
+ else if (quantity <= 225)
+ return "3";
+ }
+ else
+ {
return "4";
+ }
+
+ //if (quantity > 50 && quantity <= 180 && e < 1100)
+ // return "2";
+ //else if (quantity > 180 && quantity <= 225 && e < 1100)
+ // return "3";
+ //else if (quantity > 50 && e > 1100)
+ // return "4";
return null;
}
}
--
Gitblit v1.9.3