From 5af11cc200dd5ebe474b9c0475883b0e6d1e3759 Mon Sep 17 00:00:00 2001
From: wanshenmean <cathay_xy@163.com>
Date: 星期三, 11 三月 2026 10:00:49 +0800
Subject: [PATCH] 重构整个项目:改进代码质量和架构
---
Code/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/LocationInfoService.cs | 213 +++++++++++++++++++++++++++++++++--------------------
1 files changed, 133 insertions(+), 80 deletions(-)
diff --git a/Code/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/LocationInfoService.cs b/Code/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/LocationInfoService.cs
index c48396e..aeff75f 100644
--- a/Code/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/LocationInfoService.cs
+++ b/Code/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/LocationInfoService.cs
@@ -1,4 +1,4 @@
-锘縰sing WIDESEA_Common.LocationEnum;
+using WIDESEA_Common.LocationEnum;
using WIDESEA_Common.TaskEnum;
using WIDESEA_Core;
using WIDESEA_Core.BaseRepository;
@@ -7,25 +7,43 @@
using WIDESEA_DTO.Basic;
using WIDESEA_IBasicService;
using WIDESEA_Model.Models;
+using WIDESEA_Common.CommonEnum;
namespace WIDESEA_BasicService
{
+ /// <summary>
+ /// 璐т綅淇℃伅鏈嶅姟瀹炵幇绫�
+ /// </summary>
public partial class LocationInfoService : ServiceBase<Dt_LocationInfo, IRepository<Dt_LocationInfo>>, ILocationInfoService
{
- public IRepository<Dt_LocationInfo> Repository => BaseDal;
- public IRepository<Dt_Task> _taskRepository { get; }
+ private readonly IRepository<Dt_Task> _taskRepository;
+ private readonly IRepository<Dt_StockInfo> _stockInfoRepository;
- public IRepository<Dt_StockInfo> _stockInfoRepository { get; set; }
-
- public LocationInfoService(IRepository<Dt_LocationInfo> BaseDal, IRepository<Dt_Task> taskRepository, IRepository<Dt_StockInfo> stockInfoRepository) : base(BaseDal)
+ /// <summary>
+ /// 鏋勯�犲嚱鏁�
+ /// </summary>
+ /// <param name="baseDal">鍩虹鏁版嵁璁块棶瀵硅薄</param>
+ /// <param name="taskRepository">浠诲姟浠撳偍</param>
+ /// <param name="stockInfoRepository">搴撳瓨淇℃伅浠撳偍</param>
+ public LocationInfoService(
+ IRepository<Dt_LocationInfo> baseDal,
+ IRepository<Dt_Task> taskRepository,
+ IRepository<Dt_StockInfo> stockInfoRepository) : base(baseDal)
{
_taskRepository = taskRepository;
_stockInfoRepository = stockInfoRepository;
}
/// <summary>
+ /// 鑾峰彇璐т綅淇℃伅浠撳偍
+ /// </summary>
+ public IRepository<Dt_LocationInfo> Repository => BaseDal;
+
+ /// <summary>
/// 鎵归噺鍚敤璐т綅
/// </summary>
+ /// <param name="keys">璐т綅涓婚敭鏁扮粍</param>
+ /// <returns>鎿嶄綔缁撴灉</returns>
public WebResponseContent LocationEnableStatus(int[] keys)
{
var locationInfos = Repository.QueryData(x => keys.Contains(x.Id));
@@ -37,6 +55,8 @@
/// <summary>
/// 鎵归噺绂佺敤璐т綅
/// </summary>
+ /// <param name="keys">璐т綅涓婚敭鏁扮粍</param>
+ /// <returns>鎿嶄綔缁撴灉</returns>
public WebResponseContent LocationDisableStatus(int[] keys)
{
var locationInfos = Repository.QueryData(x => keys.Contains(x.Id));
@@ -48,16 +68,22 @@
/// <summary>
/// 鍗曚釜鍚敤璐т綅
/// </summary>
+ /// <param name="key">璐т綅涓婚敭</param>
+ /// <returns>鎿嶄綔缁撴灉</returns>
public WebResponseContent LocationEnableStatus(int key) => LocationEnableStatus(new[] { key });
/// <summary>
/// 鍗曚釜绂佺敤璐т綅
/// </summary>
+ /// <param name="key">璐т綅涓婚敭</param>
+ /// <returns>鎿嶄綔缁撴灉</returns>
public WebResponseContent LocationDisableStatus(int key) => LocationDisableStatus(new[] { key });
/// <summary>
/// 鍒濆鍖栬揣浣�
/// </summary>
+ /// <param name="dto">鍒濆鍖栬揣浣嶆暟鎹紶杈撳璞�</param>
+ /// <returns>鎿嶄綔缁撴灉</returns>
public WebResponseContent InitializationLocation(InitializationLocationDTO dto)
{
try
@@ -91,36 +117,11 @@
}
}
- private static int CalculateDepth(int row, int maxRow, int maxDepth, int currentDepth)
- {
- int mod = row % maxRow;
- if (mod == 1) return maxDepth;
- if (mod == maxDepth + 1) return 1;
- if (mod > 1 && mod <= maxDepth) return currentDepth - 1;
- return currentDepth + 1;
- }
-
- private static Dt_LocationInfo CreateLocationInfo(string roadwayNo, int row, int col, int layer, int depth)
- {
- return new Dt_LocationInfo
- {
- WarehouseId = 0,
- Row = row,
- Column = col,
- Layer = layer,
- Depth = depth,
- RoadwayNo = roadwayNo,
- EnableStatus = EnableStatusEnum.Normal.GetHashCode(),
- LocationStatus = LocationStatusEnum.Free.GetHashCode(),
- LocationType = LocationTypeEnum.Undefined.GetHashCode(),
- LocationCode = $"{row:D3}-{col:D3}-{layer:D3}", //$"{roadwayNo}-{row:D3}-{col:D3}-{layer:D3}-{depth:D2}"
- LocationName = $"{roadwayNo}宸烽亾{row:D3}琛寋col:D3}鍒梴layer:D3}灞倇depth:D2}娣�"
- };
- }
-
/// <summary>
- /// 鑾峰彇绌洪棽璐т綅淇℃伅(鏍规嵁宸烽亾鏌ヨ)
+ /// 鏍规嵁宸烽亾鑾峰彇绌洪棽璐т綅淇℃伅
/// </summary>
+ /// <param name="roadwayNo">宸烽亾缂栧彿</param>
+ /// <returns>绌洪棽璐т綅淇℃伅锛屽鏋滄湭鎵惧埌鍒欒繑鍥瀗ull</returns>
public async Task<Dt_LocationInfo?> GetLocationInfo(string roadwayNo)
{
var locations = await BaseDal.QueryDataAsync(x =>
@@ -137,13 +138,21 @@
}
/// <summary>
- /// 鑾峰彇璐т綅淇℃伅(鏍规嵁宸烽亾鍜岃揣浣嶇紪鐮佹煡璇�)
+ /// 鏍规嵁宸烽亾鍜岃揣浣嶇紪鐮佽幏鍙栫┖闂茶揣浣嶄俊鎭�
/// </summary>
+ /// <param name="roadwayNo">宸烽亾缂栧彿</param>
+ /// <param name="locationCode">璐т綅缂栫爜</param>
+ /// <returns>璐т綅淇℃伅锛屽鏋滄湭鎵惧埌鍒欒繑鍥瀗ull</returns>
public async Task<Dt_LocationInfo?> GetLocationInfo(string roadwayNo, string locationCode)
{
return await BaseDal.QueryFirstAsync(x => x.RoadwayNo == roadwayNo && x.LocationCode == locationCode);
}
+ /// <summary>
+ /// 鏍规嵁璐т綅缂栫爜鑾峰彇璐т綅淇℃伅
+ /// </summary>
+ /// <param name="locationCode">璐т綅缂栫爜</param>
+ /// <returns>璐т綅淇℃伅</returns>
public async Task<Dt_LocationInfo> GetLocationInfoAsync(string locationCode)
{
return await BaseDal.QueryFirstAsync(x => x.LocationCode == locationCode);
@@ -152,6 +161,8 @@
/// <summary>
/// 鏇存柊璐т綅淇℃伅
/// </summary>
+ /// <param name="locationInfo">璐т綅淇℃伅瀵硅薄</param>
+ /// <returns>鏇存柊鏄惁鎴愬姛</returns>
public async Task<bool> UpdateLocationInfoAsync(Dt_LocationInfo locationInfo)
{
return await BaseDal.UpdateDataAsync(locationInfo);
@@ -160,24 +171,24 @@
/// <summary>
/// 妫�鏌ュ苟鐢熸垚绉诲簱浠诲姟鎴栬繑鍥炲嚭搴撲换鍔�
/// </summary>
- /// <param name="locationID">浠诲姟鍙�</param>
- /// <returns>浠诲姟瀵硅薄</returns>
+ /// <param name="taskNum">浠诲姟鍙�</param>
+ /// <returns>浠诲姟淇℃伅</returns>
public async Task<WebResponseContent> TransferCheckAsync(int taskNum)
{
- WebResponseContent content = new WebResponseContent();
+ var content = new WebResponseContent();
try
{
// 鏍规嵁浠诲姟鍙疯幏鍙栦换鍔�
var outboundTask = await _taskRepository.QueryFirstAsync(x => x.TaskNum == taskNum);
if (outboundTask == null)
- return null;
+ return content.Error("浠诲姟涓嶅瓨鍦�");
- var location = await BaseDal.QueryFirstAsync(x => x.LocationCode == outboundTask.SourceAddress);
+ var location = await BaseDal.QueryFirstAsync(x => x.LocationCode == outboundTask.SourceAddress && x.RoadwayNo == outboundTask.Roadway);
// 妫�鏌ユ槸鍚﹂渶瑕佽繘琛岀Щ搴�
if (CheckForInternalTransfer(location))
{
- // 璁$畻瀵瑰簲浣嶇疆鐨勭浉瀵瑰簱浣� 锛堝鏁拌鐨勪笅涓�琛屾垨鑰呭伓鏁拌鐨勪笂涓�琛岋級
+ // 璁$畻瀵瑰簲浣嶇疆鐨勭浉瀵瑰簱浣嶏紙濂囨暟琛岀殑涓嬩竴琛屾垨鑰呭伓鏁拌鐨勪笂涓�琛岋級
var newLocationID = GetRelativeLocationID(location);
// 鑾峰彇鏂扮殑搴撲綅鐨勪换鍔�
@@ -202,14 +213,14 @@
}
}
- #region 绉诲簱鏂规硶
+ #region 绉佹湁鏂规硶
/// <summary>
/// 璁$畻鐩稿鐨勫簱浣岻D
/// </summary>
- /// <param name="locationID">褰撳墠搴撲綅ID</param>
+ /// <param name="locationInfo">璐т綅淇℃伅</param>
/// <returns>鐩稿鐨勫簱浣岻D</returns>
- private string GetRelativeLocationID(Dt_LocationInfo locationInfo)
+ private static string GetRelativeLocationID(Dt_LocationInfo locationInfo)
{
int line = locationInfo.Row;
@@ -232,63 +243,105 @@
{
// 鍒ゆ柇璇ヤ綅缃槸鍚︽湁搴撳瓨
var stockInfo = await _stockInfoRepository.QueryFirstAsync(x => x.LocationCode == newLocationID);
+ if (stockInfo == null)
+ {
+ // 濡傛灉娌℃湁搴撳瓨锛岀洿鎺ヨ繑鍥炲綋鍓嶅嚭搴撲换鍔�
+ return outboundTask;
+ }
if (stockInfo == null)
{
// 濡傛灉娌℃湁搴撳瓨锛岀洿鎺ヨ繑鍥炲綋鍓嶅嚭搴撲换鍔�
return outboundTask;
}
- else
- {
- // 濡傛灉鏈夊簱瀛橈紝鐢熸垚绉诲簱浠诲姟
- var emptyLocation = await GetTransferLocationEmptyAsync(outboundTask.Roadway);
- var taskNo = await _taskRepository.GetTaskNo();
- Dt_Task newTransferTask = new Dt_Task()
- {
- CreateDate = DateTime.Now,
- Creater = App.User.UserName,
- CurrentAddress = originalLocationID,
- Grade = 99,
- NextAddress = emptyLocation.LocationCode,
- PalletCode = stockInfo.PalletCode,
- Remark = "绉诲簱",
- Roadway = stockInfo.LocationDetails.RoadwayNo,
- SourceAddress = originalLocationID,
- TaskNum = taskNo,
- TargetAddress = emptyLocation.LocationCode,
- TaskType = TaskTypeEnum.Relocation.GetHashCode(),
- };
- return await _taskRepository.Db.Insertable(newTransferTask).ExecuteReturnEntityAsync();
- }
+ // 濡傛灉鏈夊簱瀛橈紝鐢熸垚绉诲簱浠诲姟
+ var emptyLocation = await GetTransferLocationEmptyAsync(outboundTask.Roadway);
+ var taskNo = await _taskRepository.GetTaskNo();
+
+ var newTransferTask = new Dt_Task
+ {
+ CreateDate = DateTime.Now,
+ Creater = App.User.UserName,
+ CurrentAddress = originalLocationID,
+ Grade = 99,
+ NextAddress = emptyLocation.LocationCode,
+ PalletCode = stockInfo.PalletCode,
+ Remark = "绉诲簱",
+ Roadway = stockInfo.LocationDetails.RoadwayNo,
+ SourceAddress = originalLocationID,
+ TaskNum = taskNo,
+ TargetAddress = emptyLocation.LocationCode,
+ TaskType = TaskTypeEnum.Relocation.GetHashCode()
+ };
+
+ return await _taskRepository.Db.Insertable(newTransferTask).ExecuteReturnEntityAsync();
}
/// <summary>
- /// 鏍规嵁璐т綅鏄惁闇�瑕佺Щ搴�
+ /// 妫�鏌ヨ揣浣嶆槸鍚﹂渶瑕佺Щ搴�
/// </summary>
- /// <param name="locationID">璐т綅ID</param>
+ /// <param name="location">璐т綅淇℃伅</param>
/// <returns>鏄惁闇�瑕佺Щ搴�</returns>
- private bool CheckForInternalTransfer(Dt_LocationInfo location)
+ private static bool CheckForInternalTransfer(Dt_LocationInfo location)
{
- return location.Depth == 2 ? true : false;
+ return location.Depth == 2;
}
/// <summary>
/// 鏍规嵁宸烽亾鑾峰彇浜屾繁浣嶇殑绌哄簱浣�
/// </summary>
- /// <param name="roadway">宸烽亾</param>
+ /// <param name="roadway">宸烽亾缂栧彿</param>
/// <returns>璐т綅瀵硅薄</returns>
private async Task<Dt_LocationInfo> GetTransferLocationEmptyAsync(string roadway)
{
- return await BaseDal.QueryFirstAsync(x => x.Depth == 2 && x.LocationStatus == (LocationStatusEnum.Free.GetHashCode()) && x.RoadwayNo == roadway);
-
- //Db.Queryable<Dt_LocationInfo>()
- //.Where(x => x.Status == LocationEnum.Free.ObjToInt())
- //.Where(x => x.Depth == 2.ToString())
- //.Where(x => x.Roadway == roadway)
- //.First();
+ return await BaseDal.QueryFirstAsync(x => x.Depth == 2 && x.LocationStatus == LocationStatusEnum.Free.GetHashCode() && x.RoadwayNo == roadway);
}
- #endregion 绉诲簱鏂规硶
+ /// <summary>
+ /// 璁$畻娣卞害
+ /// </summary>
+ /// <param name="row">琛屽彿</param>
+ /// <param name="maxRow">鏈�澶ц鏁�</param>
+ /// <param name="maxDepth">鏈�澶ф繁搴�</param>
+ /// <param name="currentDepth">褰撳墠娣卞害</param>
+ /// <returns>璁$畻鍚庣殑娣卞害</returns>
+ private static int CalculateDepth(int row, int maxRow, int maxDepth, int currentDepth)
+ {
+ int mod = row % maxRow;
+ if (mod == 1) return maxDepth;
+ if (mod == maxDepth + 1) return 1;
+ if (mod > 1 && mod <= maxDepth) return currentDepth - 1;
+ return currentDepth + 1;
+ }
+
+ /// <summary>
+ /// 鍒涘缓璐т綅淇℃伅
+ /// </summary>
+ /// <param name="roadwayNo">宸烽亾缂栧彿</param>
+ /// <param name="row">琛屽彿</param>
+ /// <param name="col">鍒楀彿</param>
+ /// <param name="layer">灞傛暟</param>
+ /// <param name="depth">娣卞害</param>
+ /// <returns>璐т綅淇℃伅瀵硅薄</returns>
+ private static Dt_LocationInfo CreateLocationInfo(string roadwayNo, int row, int col, int layer, int depth)
+ {
+ return new Dt_LocationInfo
+ {
+ WarehouseId = 0,
+ Row = row,
+ Column = col,
+ Layer = layer,
+ Depth = depth,
+ RoadwayNo = roadwayNo,
+ EnableStatus = EnableStatusEnum.Normal.GetHashCode(),
+ LocationStatus = LocationStatusEnum.Free.GetHashCode(),
+ LocationType = LocationTypeEnum.Undefined.GetHashCode(),
+ LocationCode = $"{row:D3}-{col:D3}-{layer:D3}",
+ LocationName = $"{roadwayNo}宸烽亾{row:D3}琛寋col:D3}鍒梴layer:D3}灞倇depth:D2}娣�"
+ };
+ }
+
+ #endregion 绉佹湁鏂规硶
}
-}
\ No newline at end of file
+}
--
Gitblit v1.9.3