wangxinhui
2025-01-10 4dd24c39a6c0e598b72c1a22eebec3ef6f66bbef
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_BasicService/Base/LocationInfoService.cs
@@ -1,4 +1,5 @@
using HslCommunication.WebSocket;
using OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup;
using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
using SqlSugar;
using System;
@@ -6,16 +7,22 @@
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
@@ -24,13 +31,14 @@
    {
        private readonly IUnitOfWorkManage _unitOfWorkManage;
        private readonly IBasicRepository _basicRepository;
        private readonly IStockInfoRepository _stockInfoRepository;
        public ILocationInfoRepository Repository => BaseDal;
        public LocationInfoService(ILocationInfoRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, IBasicRepository basicRepository) : base(BaseDal)
        public LocationInfoService(ILocationInfoRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, IBasicRepository basicRepository, IStockInfoRepository stockInfoRepository) : base(BaseDal)
        {
            _unitOfWorkManage = unitOfWorkManage;
            _basicRepository = basicRepository;
            _stockInfoRepository = stockInfoRepository;
        }
        /// <summary>
@@ -88,6 +96,118 @@
        }
        /// <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();
                        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 ?? "1",
                                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);
            var Layer = locationCode.Substring(2, 2);
            locationCode = "AGV_FL-" + Row + "-0" + Column + "-0" + Layer + "-01";
            return locationCode;
        }
        /// <summary>
        /// åˆå§‹åŒ–货位
        /// </summary>
        /// <param name="initializationLocationDTO"></param>