From cbf06cbb2e7988fdee53507dede034756ebfbf59 Mon Sep 17 00:00:00 2001
From: hutongqing <hutongqing@hnkhzn.com>
Date: 星期二, 14 一月 2025 15:47:40 +0800
Subject: [PATCH] 1
---
代码管理/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Base/LocationInfoService.cs | 224 +++++++++++++++++++++++++++++++++++++++++++++-----------
1 files changed, 180 insertions(+), 44 deletions(-)
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Base/LocationInfoService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Base/LocationInfoService.cs"
index f071b2d..b291525 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Base/LocationInfoService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Base/LocationInfoService.cs"
@@ -1,47 +1,51 @@
-锘縰sing SqlSugar;
+锘縰sing HslCommunication.WebSocket;
+using OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup;
+using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
+using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
+using WIDESEA_Common.CommonEnum;
+using WIDESEA_Common.LocationEnum;
+using WIDESEA_Common.StockEnum;
using WIDESEA_Core;
+using WIDESEA_Core.BaseRepository;
using WIDESEA_Core.BaseServices;
+using WIDESEA_Core.Const;
+using WIDESEA_Core.DB;
using WIDESEA_Core.Enums;
using WIDESEA_Core.Helper;
+using WIDESEA_Core.Seed;
using WIDESEA_Core.Utilities;
using WIDESEA_DTO.Basic;
using WIDESEA_IBasicRepository;
using WIDESEA_IBasicService;
+using WIDESEA_IStockRepository;
using WIDESEA_Model.Models;
namespace WIDESEA_BasicService
{
public partial class LocationInfoService : ServiceBase<Dt_LocationInfo, ILocationInfoRepository>, ILocationInfoService
{
+ private readonly IUnitOfWorkManage _unitOfWorkManage;
private readonly IBasicRepository _basicRepository;
+ private readonly IStockInfoRepository _stockInfoRepository;
public ILocationInfoRepository Repository => BaseDal;
- public LocationInfoService(ILocationInfoRepository BaseDal, IBasicRepository basicRepository) : base(BaseDal)
+ public LocationInfoService(ILocationInfoRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, IBasicRepository basicRepository, IStockInfoRepository stockInfoRepository) : base(BaseDal)
{
+ _unitOfWorkManage = unitOfWorkManage;
_basicRepository = basicRepository;
+ _stockInfoRepository = stockInfoRepository;
}
- public override WebResponseContent AddData(SaveModel saveModel)
- {
- Dt_LocationInfo locationInfo = saveModel.MainData.DicToModel<Dt_LocationInfo>();
- return base.AddData(locationInfo);
- }
-
- public override WebResponseContent UpdateData(SaveModel saveModel)
- {
- return base.UpdateData(saveModel);
- }
-
- public override WebResponseContent DeleteData(object[] keys)
- {
- return base.DeleteData(keys);
- }
-
+ /// <summary>
+ /// 鎵归噺鍚敤璐т綅
+ /// </summary>
+ /// <param name="keys">璐т綅涓婚敭鏁扮粍</param>
+ /// <returns></returns>
public WebResponseContent LocationEnableStatus(int[] keys)
{
List<Dt_LocationInfo> locationInfos = Repository.QueryData(x => keys.Contains(x.Id));
@@ -54,6 +58,11 @@
return WebResponseContent.Instance.OK();
}
+ /// <summary>
+ /// 鎵归噺绂佺敤璐т綅
+ /// </summary>
+ /// <param name="keys">璐т綅涓婚敭鏁扮粍</param>
+ /// <returns></returns>
public WebResponseContent LocationDisableStatus(int[] keys)
{
List<Dt_LocationInfo> locationInfos = Repository.QueryData(x => keys.Contains(x.Id));
@@ -66,16 +75,146 @@
return WebResponseContent.Instance.OK();
}
+ /// <summary>
+ /// 鍗曚釜鍚敤璐т綅
+ /// </summary>
+ /// <param name="key">璐т綅涓婚敭</param>
+ /// <returns></returns>
public WebResponseContent LocationEnableStatus(int key)
{
return LocationEnableStatus(new int[] { key });
}
+ /// <summary>
+ /// 鍗曚釜绂佺敤璐т綅
+ /// </summary>
+ /// <param name="key">璐т綅涓婚敭</param>
+ /// <returns></returns>
public WebResponseContent LocationDisableStatus(int key)
{
return LocationDisableStatus(new int[] { key });
}
+ /// <summary>
+ /// 鑾峰彇杈呮枡浠撳簱瀛�
+ /// </summary>
+ /// <returns></returns>
+ public WebResponseContent GetContainerInfo()
+ {
+ try
+ {
+ SqlSugarClient TesugarClient = new SqlSugarClient(new ConnectionConfig
+ {
+ ConfigId = MainDb.CurrentDbConnId,
+ ConnectionString = AppSettings.Get("TeConnectionString").DecryptDES(AppSecret.DB),
+ IsAutoCloseConnection = true,
+ DbType = MainDb.DbType,
+ });
+
+ var ContainerInfos = TesugarClient.Queryable("ContainerInfo", "x").Where("WaId", "=", 8).Where("UpState", "=", 2).ToList();
+ if (ContainerInfos != null)
+ {
+ List<Dt_StockInfo> stockInfos = new List<Dt_StockInfo>();
+ foreach (var item in ContainerInfos)
+ {
+ dynamic ruleConfig = item;
+ int id = ruleConfig.CId;//涓婚敭
+ string BoxNo = ruleConfig.BoxNo;//绠卞彿
+ string LNo = ruleConfig.LNo;//璐т綅缂栧彿
+ Dt_StockInfo stockInfo = new Dt_StockInfo()
+ {
+ LocationCode = LNo == "骞冲簱浣�" ? LNo : GetLocationCode(LNo),
+ PalletCode = BoxNo,
+ StockStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt(),
+ WarehouseId = 5,
+ PalletType = PalletTypeEnum.LargestPallet.ObjToInt(),
+ Details = new List<Dt_StockInfoDetail>()
+ };
+ var ContainerDetailsInfos = TesugarClient.Queryable("ContainerDetailsInfo", "x").Where("CId", "=", id).ToList();
+ if (ContainerDetailsInfos.Count < 1) stockInfo.PalletType = PalletTypeEnum.Empty.ObjToInt();
+ foreach (var ContainerDetailsInfo in ContainerDetailsInfos)
+ {
+ dynamic ruleConfig1 = ContainerDetailsInfo;
+ string MaterialCode = ruleConfig1.MaterialCode;//鐗╂枡缂栧彿
+ string MaterialName = ruleConfig1.MaterialName;//鐗╂枡鍚嶇О
+ string MaterialLot = ruleConfig1.MaterialLot;//鐗╂枡鎵瑰彿
+ var PackQty = ruleConfig1.PackQty;//鏁伴噺
+ string ProduceData = ruleConfig1.ProduceData;//鐢熸垚鏃ユ湡
+ string ValidData = ruleConfig1.ValidData;//鏈夋晥鏈�
+ string Unit = ruleConfig1.Unit;//鍗曚綅
+ string Standard = ruleConfig1.Standard;//澶囨敞
+ int MId = ruleConfig1.MId;//鍏ュ簱鍗曟槑缁嗚鍙�
+ string Model = ruleConfig1.Model;//鍗曟嵁缂栧彿
+ Dt_StockInfoDetail stockInfoDetail = new Dt_StockInfoDetail()
+ {
+ MaterielCode = MaterialCode,
+ MaterielName = MaterialName,
+ BatchNo = MaterialLot,
+ OrderNo = Model,
+ SerialNumber = "",
+ StockQuantity = (float)PackQty,
+ OutboundQuantity = 0,
+ Unit = Unit,
+ Status = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt(),
+ ProductionDate = ProduceData,
+ EffectiveDate = ValidData ?? DateTime.Parse(ProduceData).AddYears(2).ToString("yyyy-MM-dd"),
+ Remark = Standard,
+ InboundOrderRowNo = MId,
+ };
+ stockInfo.Details.Add(stockInfoDetail);
+ }
+ stockInfos.Add(stockInfo);
+ }
+ var LocationCodes = stockInfos.Where(x => x.LocationCode != "骞冲簱浣�").Select(stockInfo => stockInfo.LocationCode).ToList();
+ List<Dt_LocationInfo> locationInfos = Repository.QueryData(x => LocationCodes.Contains(x.LocationCode));
+ locationInfos.ForEach(x =>
+ {
+ x.LocationStatus = LocationStatusEnum.InStock.ObjToInt();
+ x.EnableStatus = EnableStatusEnum.Normal.ObjToInt();
+ });
+ _unitOfWorkManage.BeginTran();
+ _stockInfoRepository.Db.InsertNav(stockInfos).Include(x => x.Details).ExecuteCommand();
+ Repository.UpdateData(locationInfos);
+ _unitOfWorkManage.CommitTran();
+ }
+ }
+ catch (Exception ex)
+ {
+ _unitOfWorkManage.RollbackTran();
+ return WebResponseContent.Instance.Error(ex.Message);
+ }
+ return WebResponseContent.Instance.OK();
+ }
+ /// <summary>
+ /// 鑾峰彇璐т綅缂栧彿
+ /// </summary>
+ /// <param name="locationCode"></param>
+ /// <returns></returns>
+ string GetLocationCode(string locationCode)
+ {
+ var a = locationCode.Substring(0, 1);
+ var Row = a switch
+ {
+ "A" => "001",
+ "B" => "002",
+ "C" => "003",
+ "D" => "004",
+ "E" => "005",
+ _ => throw new Exception($"鏈畾涔夌殑鎺�,鍦板潃:銆恵locationCode}銆�"),
+ };
+ var Column = locationCode.Substring(4, 2);
+ if (locationCode.Length == 7)
+ Column = locationCode.Substring(5, 2);
+ var Layer = locationCode.Substring(2, 2);
+ locationCode = "AGV_FL-" + Row + "-0" + Column + "-0" + Layer + "-01";
+ return locationCode;
+ }
+
+ /// <summary>
+ /// 鍒濆鍖栬揣浣�
+ /// </summary>
+ /// <param name="initializationLocationDTO"></param>
+ /// <returns></returns>
public WebResponseContent InitializationLocation(InitializationLocationDTO initializationLocationDTO)
{
try
@@ -83,51 +222,48 @@
(bool, string, object?) result = ModelValidate.ValidateModelData(initializationLocationDTO);
if (!result.Item1) return WebResponseContent.Instance.Error(result.Item2);
- int side = 1;
+ int depth = initializationLocationDTO.Depth;
List<Dt_LocationInfo> locationInfos = new List<Dt_LocationInfo>();
for (int i = 0; i < initializationLocationDTO.MaxRow; i++)
{
+ if ((i + 1) % initializationLocationDTO.MaxRow == 1)
+ {
+ depth = initializationLocationDTO.Depth;
+ }
+ else if ((i + 1) % initializationLocationDTO.MaxRow == initializationLocationDTO.Depth + 1)
+ {
+ depth = 1;
+ }
+ else if ((i + 1) % initializationLocationDTO.MaxRow > 1 && (i + 1) % initializationLocationDTO.MaxRow <= initializationLocationDTO.Depth)
+ {
+ depth -= 1;
+ }
+ else
+ {
+ depth += 1;
+ }
for (int j = 0; j < initializationLocationDTO.MaxColumn; j++)
{
for (int k = 0; k < initializationLocationDTO.MaxLayer; k++)
{
Dt_LocationInfo locationInfo = new Dt_LocationInfo()
{
- AreaId = 0,
+ WarehouseId = 0,
Column = j + 1,
EnableStatus = EnableStatusEnum.Normal.ObjToInt(),
Layer = k + 1,
LocationStatus = LocationStatusEnum.Free.ObjToInt(),
- LocationType = LocationTypeEnum.Cube.ObjToInt(),
- RoadwayNo = initializationLocationDTO.Roadway,
+ LocationType = LocationTypeEnum.Undefined.ObjToInt(),
+ RoadwayNo = $"{initializationLocationDTO.Roadway.ToString()}",
Row = i + 1,
+ Depth = depth,
};
-
- if (initializationLocationDTO.IsSingleDepth)
- {
- locationInfo.Depth = 1;
- locationInfo.LocationCode = $"R{initializationLocationDTO.Roadway.ToString().PadLeft(2, '0')}-{locationInfo.Row.ToString().PadLeft(3, '0')}-{locationInfo.Column.ToString().PadLeft(3, '0')}-{locationInfo.Layer.ToString().PadLeft(3, '0')}-{locationInfo.Depth.ToString().PadLeft(2, '0')}";
- locationInfo.LocationName = $"R{initializationLocationDTO.Roadway.ToString().PadLeft(2, '0')}宸烽亾{locationInfo.Row.ToString().PadLeft(3, '0')}琛寋locationInfo.Column.ToString().PadLeft(3, '0')}鍒梴locationInfo.Layer.ToString().PadLeft(3, '0')}灞倇locationInfo.Depth.ToString().PadLeft(2, '0')}娣�";
- }
- else
- {
- if (initializationLocationDTO.FirstDepthRows.Contains(i + 1))
- {
- locationInfo.Depth = 1;
- }
- else
- {
- locationInfo.Depth = 2;
- }
- locationInfo.LocationCode = $"R{initializationLocationDTO.Roadway.ToString().PadLeft(2, '0')}-{locationInfo.Row.ToString().PadLeft(3, '0')}-{locationInfo.Column.ToString().PadLeft(3, '0')}-{locationInfo.Layer.ToString().PadLeft(3, '0')}-{locationInfo.Depth.ToString().PadLeft(2, '0')}";
- locationInfo.LocationName = $"R{initializationLocationDTO.Roadway.ToString().PadLeft(2, '0')}宸烽亾{locationInfo.Row.ToString().PadLeft(3, '0')}琛寋locationInfo.Column.ToString().PadLeft(3, '0')}鍒梴locationInfo.Layer.ToString().PadLeft(3, '0')}灞倇locationInfo.Depth.ToString().PadLeft(2, '0')}娣�";
- }
-
+ locationInfo.LocationCode = $"{locationInfo.RoadwayNo}-{locationInfo.Row.ToString().PadLeft(3, '0')}-{locationInfo.Column.ToString().PadLeft(3, '0')}-{locationInfo.Layer.ToString().PadLeft(3, '0')}-{locationInfo.Depth.ToString().PadLeft(2, '0')}";
+ locationInfo.LocationName = $"{locationInfo.RoadwayNo}宸烽亾{locationInfo.Row.ToString().PadLeft(3, '0')}琛寋locationInfo.Column.ToString().PadLeft(3, '0')}鍒梴locationInfo.Layer.ToString().PadLeft(3, '0')}灞倇locationInfo.Depth.ToString().PadLeft(2, '0')}娣�";
locationInfos.Add(locationInfo);
}
}
}
-
BaseDal.AddData(locationInfos);
return WebResponseContent.Instance.OK();
}
--
Gitblit v1.9.3