´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/62b5ac34-861b-44ca-8306-87349bba393f.vsidxBinary files differ
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/.vs/WIDESEAWCS_Server/FileContentIndex/b8abb72d-5a76-4a3b-bd9c-ecbcde909f62.vsidxBinary files differ
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/Enum/TaskEnum.cs
@@ -164,7 +164,7 @@ public enum OutTaskStatusEnum { /// <summary> /// æ°å»ºä»»å¡ /// æ°å»ºåºåºä»»å¡ /// </summary> [Description("æ°å»º")] OutNew = 100, ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -50,6 +50,7 @@ private Dictionary<string, OrderByType> _taskOrderBy = new() { {nameof(Dt_Task.Grade),OrderByType.Asc }, {nameof(Dt_Task.Roadway),OrderByType.Asc }, {nameof(Dt_Task.CreateDate),OrderByType.Asc}, }; @@ -201,7 +202,7 @@ /// <returns>è¿åä»»å¡å®ä½å¯¹è±¡ï¼å¯è½ä¸ºnull</returns> public Dt_Task? QueryStackerCraneTask(string deviceNo, string currentAddress = "") { return BaseDal.QueryFirst(x => x.TaskStatus == (int)InTaskStatusEnum.InNew || x.TaskStatus == (int)OutTaskStatusEnum.OutNew || x.TaskStatus == (int)RelocationTaskStatusEnum.RelocationNew, TaskOrderBy); return BaseDal.QueryFirst(x => x.Roadway.Contains(deviceNo) && (x.TaskStatus == (int)InTaskStatusEnum.InNew || x.TaskStatus == (int)OutTaskStatusEnum.OutNew || x.TaskStatus == (int)RelocationTaskStatusEnum.RelocationNew), TaskOrderBy); } /// <summary> @@ -212,37 +213,40 @@ /// <returns>è¿åä»»å¡å®ä½å¯¹è±¡ï¼å¯è½ä¸ºnull</returns> public Dt_Task QueryStackerCraneInTask(string deviceNo, string currentAddress = "") { Dt_Task taskGrade = BaseDal.QueryFirst(x => true, TaskOrderBy); if (taskGrade != null) { return taskGrade; } else { Dt_Task task = BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskOutStatusEnum.OutNew, TaskOrderBy); Dt_Task tasks = BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskInStatusEnum.InNew, TaskOrderBy); if (task != null && tasks == null) { if (string.IsNullOrEmpty(currentAddress)) return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskOutStatusEnum.OutNew, TaskOrderBy); else return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskOutStatusEnum.OutNew && x.CurrentAddress == currentAddress, TaskOrderBy); } else if (task == null && tasks != null) { if (string.IsNullOrEmpty(currentAddress)) return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskInStatusEnum.InNew, TaskOrderBy); else return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskInStatusEnum.InNew && x.CurrentAddress == currentAddress, TaskOrderBy); } else { if (string.IsNullOrEmpty(currentAddress)) return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskInStatusEnum.InNew, TaskOrderBy); else return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskInStatusEnum.InNew && x.CurrentAddress == currentAddress, TaskOrderBy); } } return BaseDal.QueryFirst(x => x.Roadway.Contains(deviceNo) && x.TaskStatus == (int)InTaskStatusEnum.InNew, TaskOrderBy); #region MyRegion //Dt_Task taskGrade = BaseDal.QueryFirst(x => true, TaskOrderBy); //if (taskGrade != null) //{ // return taskGrade; //} //else //{ // Dt_Task task = BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskOutStatusEnum.OutNew, TaskOrderBy); // Dt_Task tasks = BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskInStatusEnum.InNew, TaskOrderBy); // if (task != null && tasks == null) // { // if (string.IsNullOrEmpty(currentAddress)) // return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskOutStatusEnum.OutNew, TaskOrderBy); // else // return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskOutStatusEnum.OutNew && x.CurrentAddress == currentAddress, TaskOrderBy); // } // else if (task == null && tasks != null) // { // if (string.IsNullOrEmpty(currentAddress)) // return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskInStatusEnum.InNew, TaskOrderBy); // else // return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskInStatusEnum.InNew && x.CurrentAddress == currentAddress, TaskOrderBy); // } // else // { // if (string.IsNullOrEmpty(currentAddress)) // return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskInStatusEnum.InNew, TaskOrderBy); // else // return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskInStatusEnum.InNew && x.CurrentAddress == currentAddress, TaskOrderBy); // } //} #endregion } /// <summary> /// æ ¹æ®è®¾å¤ç¼å·ãå½åå°åæç §ä¼å 级以åå建æ¶é´æåºæ¥è¯¢ä»»å¡æ± åºåºç±»åçæ°å¢çä»»å¡ @@ -252,38 +256,41 @@ /// <returns>è¿åä»»å¡å®ä½å¯¹è±¡ï¼å¯è½ä¸ºnull</returns> public Dt_Task QueryStackerCraneOutTask(string deviceNo, string currentAddress = "") { Dt_Task taskGrade = BaseDal.QueryFirst(x => true, TaskOrderBy); if (taskGrade != null) { return taskGrade; } else { Dt_Task task = BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskOutStatusEnum.OutNew, TaskOrderBy); Dt_Task tasks = BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskInStatusEnum.InNew, TaskOrderBy); if (task != null && tasks == null) { if (string.IsNullOrEmpty(currentAddress)) return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskOutStatusEnum.OutNew, TaskOrderBy); else return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskOutStatusEnum.OutNew && x.CurrentAddress == currentAddress, TaskOrderBy); } else if (task == null && tasks != null) { if (string.IsNullOrEmpty(currentAddress)) return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskInStatusEnum.InNew, TaskOrderBy); else return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskInStatusEnum.InNew && x.CurrentAddress == currentAddress, TaskOrderBy); } else { if (string.IsNullOrEmpty(currentAddress)) return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskOutStatusEnum.OutNew, TaskOrderBy); else return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskOutStatusEnum.OutNew && x.CurrentAddress == currentAddress, TaskOrderBy); } return BaseDal.QueryFirst(x => x.Roadway.Contains(deviceNo) && x.TaskStatus == (int)OutTaskStatusEnum.OutNew, TaskOrderBy); #region MyRegion //Dt_Task taskGrade = BaseDal.QueryFirst(x => true, TaskOrderBy); //if (taskGrade != null) //{ // return taskGrade; //} //else //{ // Dt_Task task = BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskOutStatusEnum.OutNew, TaskOrderBy); // Dt_Task tasks = BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskInStatusEnum.InNew, TaskOrderBy); // if (task != null && tasks == null) // { // if (string.IsNullOrEmpty(currentAddress)) // return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskOutStatusEnum.OutNew, TaskOrderBy); // else // return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskOutStatusEnum.OutNew && x.CurrentAddress == currentAddress, TaskOrderBy); // } // else if (task == null && tasks != null) // { // if (string.IsNullOrEmpty(currentAddress)) // return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskInStatusEnum.InNew, TaskOrderBy); // else // return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskInStatusEnum.InNew && x.CurrentAddress == currentAddress, TaskOrderBy); // } // else // { // if (string.IsNullOrEmpty(currentAddress)) // return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskOutStatusEnum.OutNew, TaskOrderBy); // else // return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskTypeEnums.Contains(x.TaskType) && x.TaskStatus == (int)TaskOutStatusEnum.OutNew && x.CurrentAddress == currentAddress, TaskOrderBy); // } } //} #endregion } /// <summary> ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/StackerCraneJob/CommonStackerCraneJob.cs
@@ -107,12 +107,18 @@ private Dt_Task? GetTask(SpeStackerCrane speStackerCrane) { Dt_Task? task; string DeviceCode = speStackerCrane.DeviceCode.Contains("CP") ? "CP" : "FL"; if (speStackerCrane.LastTaskType == null) { task = _taskService.QueryStackerCraneTask(speStackerCrane.DeviceCode); task = _taskService.QueryStackerCraneTask(DeviceCode); } else { if (speStackerCrane.LastTaskType == TaskTypeEnum.Relocation.ObjToInt()) { task = _taskService.QueryStackerCraneTask(DeviceCode); if (task != null) return task; } bool flag = speStackerCrane.LastTaskType == TaskTypeEnum.Inbound.ObjToInt() || speStackerCrane.LastTaskType == TaskTypeEnum.PalletInbound.ObjToInt(); if (flag == false) { ´úÂë¹ÜÀí/WMS/WIDESEA_WMSClient/src/views/Home.vue
@@ -1,24 +1,373 @@ <template> <div class="title"></div> <div class="container"> <div class="header"> <h2 class="title">è´§ä½æå¾</h2> </div> <div class="content-wrapper"> <!-- æ§å¶é¢æ¿åºå --> <div class="control-panel"> <div class="form-group"> <label>åºåï¼</label> <el-select size="mini" filterable v-model="Area.shelf_code" placeholder="è¯·éæ©" class="full-width" > <el-option v-for="item in slectData" :value="item.shelf_code" :label="item.house_name" :key="item.house_name" ></el-option> </el-select> </div> <div class="form-group"> <label>æï¼</label> <el-select size="mini" clearable filterable @change="SCChange" v-model="Area.tunnel" placeholder="è¯·éæ©" class="full-width" > <el-option v-for="item in scList" :value="item" :label="item" :key="item" ></el-option> </el-select> </div> <el-button type="success" class="refresh-btn" @click="GetViewData"> å·æ° </el-button> <div class="legend-section"> <h4>说æ</h4> <div class="legend-grid"> <div class="legend-item" v-for="item in infoMsg" :key="item.bgcolor" > <span class="color-box" :style="{ 'background-color': item.bgcolor }" ></span> <span class="legend-label">{{ item.msg }}</span> </div> </div> </div> </div> <!-- è´§ä½å±ç¤ºåºå --> <div class="location-view"> <div class="layer-container" v-for="layer in locationData" :key="layer.index" > <h3 class="layer-title">第{{ layer.index }}å±</h3> <div class="row" v-for="row in layer.rows" :key="row.index"> <div class="location-cell" :style="{ 'background-color': GetBgColor(col) }" v-for="col in row.cols" :key="col.index" @mouseenter="showTooltip(col, $event)" @mouseleave="hideTooltip" > {{ row.index }}-{{ col.index }}-{{ layer.index }} </div> </div> </div> </div> <!-- æ¬æµ®æç¤ºæ¡ --> <div v-if="showTooltipFlag" class="location-tooltip" :style="{ left: tooltipPosition.x + 'px', top: tooltipPosition.y + 'px', }" > <div v-if="currentLocation"> <p><strong>è´§ä½å·:</strong>{{ currentLocation.locationCode }}</p> <p> <strong>è´§ä½æåå±:</strong> {{ currentLocation.row }}æ{{ currentLocation.layer }}å{{ currentLocation.index }}å± </p> <p><strong>ç¶æ:</strong> {{ getStatusText(currentLocation) }}</p> <p> <strong>ç¦ç¨:</strong> {{ currentLocation.location_lock == 3 ? "æ¯" : "å¦" }} </p> </div> </div> </div> </div> </template> <script> import { ref, reactive } from 'vue' import { ElButton } from "element-plus"; export default { setup() { data() { return { slectData: [], scList: [], Area: { house_name: "", tunnel: "", shelf_code: "" }, mian_height: "", infoMsg: [ { bgcolor: "orange", msg: "空货ä½", state: 0 }, { bgcolor: "lightgreen", msg: "æè´§", state: 2 }, { bgcolor: "#2BB3D5", msg: "éå®", state: "InAssigned" }, { bgcolor: "#ccc", msg: "ç¦ç¨", state: 3 }, { bgcolor: "#b7ba6b", msg: "å ¶å®", state: "else" }, ], locationData: [], showTooltipFlag: false, currentLocation: null, tooltipPosition: { x: 0, y: 0 }, }; }, computed: { GetBgColor() { return (col) => { var bgColor = "#b7ba6b"; //ä¼å æ¾ç¤ºç¦ç¨ç¶æ if (col.location_lock == 3) { this.infoMsg.forEach((el) => { if (el.state == col.location_lock) { bgColor = el.bgcolor; } }); } else { this.infoMsg.forEach((el) => { if (col.location_state == 1 || col.location_state == 98) { if (el.state == "InAssigned") { bgColor = el.bgcolor; } } else if (el.state == col.location_state) { bgColor = el.bgcolor; } }); } return bgColor; }; }, }, watch: { //忢åºåº "Area.shelf_code"(newValue, oldValue) { this.scList = []; this.slectData.forEach((e) => { if (e.shelf_code == newValue) { this.Area.tunnel = e.tunnel[0]; this.scList = e.tunnel; } }); this.GetViewData(); }, }, methods: { GetViewData() { var _this = this; this.http .post("/api/LocationInfoRow/GetLocationStatu", _this.Area, "æ¥è¯¢ä¸") .then((x) => { _this.locationData = x; console.log("å端è¿å:", x); }); }, // 忢æ SCChange() { this.GetViewData(); }, showTooltip(location, event) { this.currentLocation = location; this.showTooltipFlag = true; } } } // 设置æç¤ºæ¡ä½ç½®ï¼ç¨å¾®åç§»é¿å 鮿¡é¼ æ this.tooltipPosition = { x: event.clientX + 10, y: event.clientY + 10, }; }, hideTooltip() { this.showTooltipFlag = false; this.currentLocation = null; }, getStatusText(location) { if (location.location_state === 0) return "空货ä½"; if (location.location_state === 1) return "éå®"; if (location.location_state === 2) return "æè´§"; if (location.location_state === 98) return "空æéå®"; if (location.location_state === 99) return "空æç"; return "å ¶ä»"; }, }, mounted() { var mainHeight = document.getElementById("vol-main"); this.mian_height = mainHeight.offsetHeight - 40 + "px"; var _this = this; //å è½½ä¸æé项 this.http.get("/api/LocationInfoRow/GetArea", {}, "æ¥è¯¢ä¸").then((x) => { _this.slectData = x; //å 载第ä¸ä¸ªåºåï¼ç¬¬ä¸æ _this.Area.shelf_code = _this.slectData[0].shelf_code; _this.scList = _this.slectData[0].tunnel; }); }, components: { ElButton }, }; </script> <style scoped> .title { line-height: 70vh; .container { display: flex; flex-direction: column; height: 100%; padding: 10px; } .header { text-align: center; font-size: 28px; color: orange; margin-bottom: 20px; } .title { font-size: 20px; font-weight: bold; margin: 0; } .content-wrapper { display: flex; flex: 1; min-height: 0; } .control-panel { width: 220px; padding: 15px; background-color: #f5f7fa; border-radius: 4px; margin-right: 15px; display: flex; flex-direction: column; } .form-group { margin-bottom: 15px; } .full-width { width: 100%; } .refresh-btn { margin-top: 10px; width: 100%; } .legend-section { margin-top: 30px; } .legend-section h4 { margin-bottom: 10px; } .legend-grid { display: grid; grid-template-columns: 1fr; gap: 8px; } .legend-item { display: flex; align-items: center; } .color-box { display: inline-block; width: 20px; height: 20px; margin-right: 8px; border-radius: 3px; } .legend-label { font-size: 13px; } .location-view { flex: 1; overflow: auto; padding: 10px; background-color: white; border-radius: 4px; } .layer-container { margin-bottom: 25px; } .layer-title { margin: 0 0 10px 0; font-size: 16px; color: #333; } .row { display: flex; flex-wrap: wrap; margin-bottom: 8px; } .location-cell { width: 66px; height: 38px; margin: 3px; text-align: center; font-size: 14px; border-radius: 3px; line-height: 38px; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); } .location-tooltip { position: fixed; z-index: 9999; background-color: white; border: 1px solid #ddd; border-radius: 4px; padding: 10px; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); pointer-events: none; max-width: 250px; } .location-tooltip p { margin: 5px 0; font-size: 13px; line-height: 1.4; } .location-tooltip strong { display: inline-block; width: 70px; color: #666; } </style> ´úÂë¹ÜÀí/WMS/WIDESEA_WMSClient/src/views/basic/materielInfo.vue
@@ -33,6 +33,7 @@ materielDes: "", isMixBatch: "", isMixMateriel: "", unit:"" }); const editFormOptions = ref([ [ ´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/060c68c1-8229-4582-8d09-21f436f63adf.vsidxBinary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/0a5d4cfb-1461-4c61-96e9-484d536b0fb2.vsidxBinary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/0b22719c-a0d4-4fe6-9ae9-4eb7a870198d.vsidxBinary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/12584657-ebd1-4698-830a-6e4c8ce29c77.vsidxBinary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/af454f43-a2e0-43b7-b5ea-099c1370dd5d.vsidxBinary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/bb78fc9b-06de-44ce-9686-fc2d98a53e1b.vsidxBinary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/bf268493-a788-4833-aa05-92fb21936af2.vsidxBinary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/.vs/WIDESEA_WMSServer/FileContentIndex/dd95cbb2-97f5-4145-b96e-1575d7826b96.vsidxBinary files differ
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_DTO/Basic/LocationArea.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,60 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace WIDESEA_DTO.Basic { public class LocationArea { /// <summary> /// åºåºåç§° /// </summary> public string house_name { get; set; } /// <summary> /// åºåºç¼å· /// </summary> public int shelf_code { get; set; } /// <summary> /// /// </summary> public int tunnel { get; set; } } public class LocationLayer { public int index { get; set; } public List<LocationRow> rows { get; set; } } public class LocationRow { public int index { get; set; } public List<LocationCol> cols { get; set; } } public class LocationCol { public string locationCode { get; set; } public int row { get; set; } public int layer { get; set; } public int index { get; set; } /// <summary> /// æ£æµæç¶æ /// </summary> public string remark { get; set; } /// <summary> /// è´§ä½ç¶æ /// </summary> public int location_state { get; set; } /// <summary> /// éå®ç¶æ /// </summary> public int location_lock { get; set; } } } ´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Basic/LocationInfoRowController.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,106 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using System.Collections.Generic; using WIDESEA_Core; using WIDESEA_Core.BaseController; using WIDESEA_Core.Enums; using WIDESEA_DTO.Basic; using WIDESEA_IBasicRepository; using WIDESEA_IBasicService; using WIDESEA_ISystemRepository; using WIDESEA_Model.Models; namespace WIDESEA_WMSServer.Controllers.Basic { /// <summary> /// è´§ä½ /// </summary> [Route("api/LocationInfoRow")] [ApiController] public class LocationInfoRowController : ApiBaseController<ILocationInfoService, Dt_LocationInfo> { private readonly ILocationInfoRepository _repository; private readonly IAreaInfoRepository _areaInfoRepository; private readonly ILocationInfoRepository _locationInfoRepository; public LocationInfoRowController(ILocationInfoService service, ILocationInfoRepository repository, IAreaInfoRepository areaInfoRepository, ILocationInfoRepository locationInfoRepository) : base(service) { _repository = repository; _areaInfoRepository = areaInfoRepository; _locationInfoRepository = locationInfoRepository; } /// <summary> /// è·ååºåºæé /// </summary> /// <returns></returns> [HttpGet, HttpPost, Route("GetArea"), AllowAnonymous] public object GetArea() { List<object> list = new List<object>(); List<Dt_LocationInfo>? locations = _locationInfoRepository.QueryData(); List<Dt_AreaInfo> areaInfos = _areaInfoRepository.QueryData(x => locations.Select(x => x.AreaId).ToList().Contains(x.Id)); foreach (var areaInfo in areaInfos) { var Rows = locations.Where(x => x.AreaId == areaInfo.Id).GroupBy(x => x.Row).Select(x => x.Key).OrderBy(x => x).ToList(); var obj = new { house_name = areaInfo.AreaName, shelf_code = areaInfo.Id, tunnel = Rows }; list.Add(obj); } return list; } /// <summary> /// è·åè´§ä½ä¿¡æ¯ /// </summary> /// <param name="area"></param> /// <returns></returns> [HttpPost, Route("GetLocationStatu"), AllowAnonymous] public object GetLocationStatu([FromBody] LocationArea area) { List<LocationLayer> layers = new List<LocationLayer>(); var data = _locationInfoRepository.QueryData(x => x.AreaId == area.shelf_code && x.Row == area.tunnel); foreach (var layer in data.GroupBy(t => t.Layer)) { var rows = new List<LocationRow>(); var data_rows = layer.GroupBy(t => t.Row); foreach (var data_row in data_rows) { var cols = new List<LocationCol>(); foreach (var data_col in data_row) { cols.Add(new LocationCol() { //å row = data_col.Row, layer = data_col.Layer, index = data_col.Column, locationCode = data_col.LocationCode, location_state = data_col.LocationStatus, location_lock = data_col.EnableStatus, remark = data_col.Remark }); } cols = cols.OrderBy(t => t.index).ToList(); rows.Add(new LocationRow() { //è¡ index = data_row.Key, cols = cols }); } rows = rows.OrderBy(t => t.index).ToList(); layers.Add(new LocationLayer() { //å± index = layer.Key, rows = rows }); } layers = layers.OrderBy(t => t.index).ToList(); return layers; } } }