From a46b0171f379cd03149ea1e7d8c204ffd8b980a9 Mon Sep 17 00:00:00 2001 From: chenyong <chenyong@hnkhzn.com> Date: 星期四, 22 五月 2025 16:11:53 +0800 Subject: [PATCH] 新增二楼大屏接口,以及二楼大屏前端 --- Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs | 263 ++++++++++++++++++++++++++++++++-------------------- 1 files changed, 162 insertions(+), 101 deletions(-) diff --git a/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs b/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs index f497bd2..857e86e 100644 --- a/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs +++ b/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs @@ -2,6 +2,7 @@ using Masuit.Tools; using SqlSugar; using System.Text.RegularExpressions; +using System.Threading.Tasks; using WIDESEA_Cache; using WIDESEA_Core.Const; using WIDESEA_DTO.MOM; @@ -31,6 +32,7 @@ private readonly IAgingInOrOutInputService _agingInOrOutInputService; //闈欑疆\闄堝寲 private readonly IDt_StationManagerRepository _stationManagerRepository; private readonly ISys_ConfigService _configService; + private readonly IDt_ChangeoversRepository _dt_ChangeoversRepository; private readonly ISimpleCacheService _simpleCacheService; public Dt_TaskService(IDt_TaskRepository BaseDal, @@ -50,7 +52,8 @@ IStockInfoDetailRepository stockInfoDetailRepository, IDt_StationManagerRepository stationManagerRepository, ISys_ConfigService configService, - ISimpleCacheService simpleCacheService) : base(BaseDal) + ISimpleCacheService simpleCacheService, + IDt_ChangeoversRepository dt_ChangeoversRepository) : base(BaseDal) { _unitOfWorkManage = unitOfWorkManage; _stockInfoRepository = stockInfoRepository; @@ -68,6 +71,7 @@ _stationManagerRepository = stationManagerRepository; _configService = configService; _simpleCacheService = simpleCacheService; + _dt_ChangeoversRepository = dt_ChangeoversRepository; } #region 澶栭儴鎺ュ彛鏂规硶 @@ -135,14 +139,14 @@ await DeleteTaskAsync(task.TaskId); await AddTaskHtyAsync(taskHty); }); - try - { - _simpleCacheService.HashDel<DtStockInfo>(WIDESEA_Cache.CacheConst.Cache_DtStockInfo, new string[] { stock.PalletCode }); - } - catch (Exception ex) - { - LogFactory.GetLog("鍒犻櫎缂撳瓨澶辫触").Error(true, $"{stock.PalletCode}_鍒犻櫎缂撳瓨澶辫触锛屽紓甯镐俊鎭細{ex.Message}"); - } + //try + //{ + // _simpleCacheService.HashDel<DtStockInfo>(WIDESEA_Cache.CacheConst.Cache_DtStockInfo, new string[] { stock.PalletCode }); + //} + //catch (Exception ex) + //{ + // LogFactory.GetLog("鍒犻櫎缂撳瓨澶辫触").Error(true, $"{stock.PalletCode}_鍒犻櫎缂撳瓨澶辫触锛屽紓甯镐俊鎭細{ex.Message}"); + //} return content.OK("浠诲姟瀹屾垚鎴愬姛", task.Remark); } @@ -247,7 +251,7 @@ var isStockUpdated = await _locationRepository.UpdateDataAsync(info); if (!isStockUpdated) { - throw new Exception("搴撳瓨淇℃伅鏇存柊澶辫触"); + throw new Exception("搴撲綅淇℃伅鏇存柊澶辫触"); } } @@ -280,6 +284,36 @@ } #endregion 鍑哄簱浠诲姟瀹屾垚 + + #region 鐏浠诲姟瀹屾垚 + public async Task<WebResponseContent> CompleteOutFireAlarmTaskAsync(Dt_Task task, DtStockInfo stock) + { + WebResponseContent content = new WebResponseContent(); + (var loc, var tas) = UpdateStockAndTaskStatus(stock, task); + var taskHty = task.Adapt<Dt_Task_Hty>(); + taskHty.FinishTime = DateTime.Now; + taskHty.OperateType = App.User.UserName != null ? (int)OperateTypeEnum.浜哄伐瀹屾垚 : (int)OperateTypeEnum.鑷姩瀹屾垚; + taskHty.Creater = App.User.UserName != null ? App.User.UserName : "System"; + + DtStockInfo_Hty stockInfo_Hty = stock.Adapt<DtStockInfo_Hty>(); + stockInfo_Hty.ModifyDate = DateTime.Now; + + // 浜嬪姟澶勭悊 + await _unitOfWorkManage.UseTranAsync(async () => + { + if (task.TaskType != (int)TaskOutboundTypeEnum.OutQuality) + { + await DeleteStockInfoAsync(stock.Id); + await DeleteStockInfoDetailsAsync(stock.StockInfoDetails); + await AddStockInfoHtyAsync(stockInfo_Hty); + await UpdateLocationAsync(loc); //璐ㄦ浠诲姟闇�瑕佹寔缁攣瀹氬簱浣� + } + await DeleteTaskAsync(task.TaskId); + await AddTaskHtyAsync(taskHty); + }); + return content.OK("浠诲姟瀹屾垚鎴愬姛", task.Remark); + } + #endregion #region 绉诲簱浠诲姟瀹屾垚 @@ -327,7 +361,7 @@ WebResponseContent content = new WebResponseContent(); try { - if (task.TaskType == (int)TaskInboundTypeEnum.InNG || task.TaskType == (int)TaskInboundTypeEnum.InQuality) + if (task.TaskType == (int)TaskInboundTypeEnum.InNG) { task.TaskState = (int)TaskInStatusEnum.SC_InFinish; // 鍒涘缓鍘嗗彶浠诲姟瀹炰緥妯″瀷 @@ -380,16 +414,6 @@ stock.StockInfoDetails = new List<DtStockInfoDetail>() { { stock.StockInfoDetails[0] } }; stock.LocationInfo = locationInf; - //using(_simpleCacheService.AcquireLock(WIDESEA_Cache.CacheConst.Cache_DtStockInfo, 2000)) - //{ - try - { - _simpleCacheService.HashAdd(WIDESEA_Cache.CacheConst.Cache_DtStockInfo, stock.PalletCode, stock); - } - catch (Exception ex) - { - LogFactory.GetLog("娣诲姞缂撳瓨澶辫触").Error(true, $"{stock.PalletCode}_娣诲姞缂撳瓨澶辫触锛屽紓甯镐俊鎭細{ex.Message}"); - } content.OK("鍏ュ簱浠诲姟瀹屾垚鎴愬姛"); } @@ -404,6 +428,9 @@ Console.WriteLine(err.Message.ToString()); LogFactory.GetLog("浠诲姟瀹屾垚").Error(true, err); content.Error(err.Message); + task.ErrorMessage= err.Message; + task.TaskState=(int)TaskInStatusEnum.SC_InExecuting; + await BaseDal.Update(task); } return content; } @@ -609,8 +636,14 @@ case (int)TaskOutboundTypeEnum.OutTray: case (int)TaskOutboundTypeEnum.Outbound: case (int)TaskOutboundTypeEnum.OutNG: + LogFactory.GetLog("浠诲姟瀹屾垚").InfoFormat(true, "鍑哄簱浠诲姟", ""); return await CompleteStackTaskAsync(task, stock); + + case (int)TaskOutboundTypeEnum.OutFireAlarm: + + LogFactory.GetLog("浠诲姟瀹屾垚").InfoFormat(true, "鐏浠诲姟", ""); + return await CompleteOutFireAlarmTaskAsync(task, stock); case (int)TaskRelocationTypeEnum.Relocation: return await CompleteTransferTaskAsync(task, stock); @@ -724,12 +757,13 @@ else { // 澶勭悊寮傚父鐢佃姱鎯呭喌 - var serialNosError = result.SerialNos.Where(x => x.SerialNoStatus != 1 && x.SerialNoStatus != 4).ToList(); - if (serialNosError.Count > 0) - { - return await HandleErrorCells(input, area, serialNosError); - } - + #region 鐢佃姱鍒嗙粨鏋滃紓甯镐笉闇�瑕佹垜浠鐞� + //var serialNosError = result.SerialNos.Where(x => x.SerialNoStatus != 1 && x.SerialNoStatus != 4).ToList(); + //if (serialNosError.Count > 0) + //{ + // return await HandleErrorCells(input, area, serialNosError); + //} + #endregion var boxing = CreateBoxingInfo(result, input.PalletCode); if (boxing == null) return content.Error("缁勭洏澶辫触"); @@ -819,7 +853,39 @@ if (stationManagers == null) throw new Exception("鏈壘鍒扮┖鎵樼洏鍏ュ簱绔欏彴鍜屽叆搴撶珯鍙伴厤缃�"); } - List<string> strings = stationManagers.Roadway.Split(',').ToList(); + List<string> strings; + if (input.Position == "1016-3") + { + var configOne = _configService.GetByConfigKey(CateGoryConst.CONFIG_SYS_InStacker, SysConfigConst.CHInboundEmptyProductLineOne); + var configTwo = _configService.GetByConfigKey(CateGoryConst.CONFIG_SYS_InStacker, SysConfigConst.CHInboundEmptyProductLineTwo); + + List<string> productLineconfigOne = configOne.ConfigValue.Split(',').ToList(); + List<string> productLineconfigTwo = configTwo.ConfigValue.Split(',').ToList(); + + if (productLineconfigOne.Count == 0 && productLineconfigTwo.Count() == 0) + { + ConsoleHelper.WriteErrorLine($"鏈壘鍒伴厤缃枃浠朵骇绾块厤缃�"); + return content.Error("鏈壘鍒伴厤缃枃浠朵骇绾块厤缃�"); + } + if (productLineconfigOne.Contains(result.ProductionLine)) + { + strings = configOne.Remark.Split(',').ToList(); + } + else if (productLineconfigTwo.Contains(result.ProductionLine)) + { + strings = configTwo.Remark.Split(',').ToList(); + } + else + { + ConsoleHelper.WriteErrorLine($"鏈壘鍒皗result.ProductionLine}瀵瑰簲閰嶇疆宸烽亾"); + return content.Error($"鏈壘鍒皗result.ProductionLine}瀵瑰簲閰嶇疆宸烽亾"); + } + } + else + { + strings = stationManagers.Roadway.Split(',').ToList(); + } + return await CreateNewTask(input, result.ProductionLine, result.ProcessCode, strings, 1); } @@ -951,35 +1017,30 @@ return null; } - var outBoundMateriel = AppSettings.app<OutBoundMateriel>("OutBoundMateriel"); + //var outBoundMateriel = AppSettings.app<OutBoundMateriel>("OutBoundMateriel"); + var outBoundMateriel = _dt_ChangeoversRepository.QueryData(x => x.Status == "1").ToList(); + List<string>? materielCodes = outBoundMateriel.Count != 0 ? outBoundMateriel.Where(x => x.ProductionLine == productionLine && x.ProcessCode == area.AreaCode) .Select(x => x.MaterielCode) .ToList() : null; - IDictionary<string, DtStockInfo>? stockInfos = _simpleCacheService.HashGetAll<DtStockInfo>(WIDESEA_Cache.CacheConst.Cache_DtStockInfo); - List<DtStockInfo> stockInfoList = stockInfos.Values.ToList(); var result = new DtStockInfo(); - if (areaCode == "CH001") - { - LogFactory.GetLog("CH001").Info(true, JsonConvert.SerializeObject(stockInfoList[0], Formatting.Indented)); - } + result = await _stockInfoRepository.Db.Queryable<DtStockInfo>() + .Includes(x => x.LocationInfo) + .Includes(x => x.StockInfoDetails) + .Where(x => x.AreaCode == areaCode && x.OutboundTime < DateTime.Now && x.IsFull) + .WhereIF(!productionLine.IsNullOrEmpty(), x => x.ProductionLine == productionLine) + .WhereIF(!devices.IsNullOrEmpty(), x => devices.Contains(x.LocationInfo.RoadwayNo)) + .Where(x => x.LocationInfo.LocationStatus == (int)LocationEnum.InStock && x.LocationInfo.AreaId == area.AreaID && x.LocationInfo.EnalbeStatus == (int)EnableEnum.Enable) + .WhereIF(!materielCodes.IsNullOrEmpty(), x => x.StockInfoDetails.Any(y => materielCodes.Contains(y.MaterielCode))) + .OrderBy(x => x.OutboundTime) + .FirstAsync(); - result = stockInfoList.Where(x => x.AreaCode == areaCode && x.OutboundTime < DateTime.Now && x.IsFull) - .WhereIF(!productionLine.IsNullOrEmpty(), x => x.ProductionLine == productionLine) - .Where(x => x.LocationInfo != null && x.LocationInfo.LocationStatus == (int)LocationEnum.InStock && x.LocationInfo.AreaId == area.AreaID && x.LocationInfo.EnalbeStatus == (int)EnableEnum.Enable) - .WhereIF(!devices.IsNullOrEmpty(), x => devices.Contains(x.LocationInfo.RoadwayNo)) - .WhereIF(!materielCodes.IsNullOrEmpty(), x => x.StockInfoDetails != null && x.StockInfoDetails.Any(y => materielCodes.Contains(y.MaterielCode))) - .OrderBy(x => x.OutboundTime) - .FirstOrDefault(); - - - if (result != null) - _simpleCacheService.HashDel<DtStockInfo>(WIDESEA_Cache.CacheConst.Cache_DtStockInfo, new string[] { result.PalletCode }); - else - ConsoleHelper.WriteErrorLine($"{areaCode}-{productionLine}鏌ヨ瀹炵洏搴撳瓨淇℃伅澶辫触:鏈壘鍒扮鍚堟潯浠剁殑鏁版嵁"); + if (result.IsNullOrEmpty()) + ConsoleHelper.WriteErrorLine($"{area.AreaName}-{productionLine}鏌ヨ瀹炵洏搴撳瓨淇℃伅澶辫触:鏈壘鍒扮鍚堟潯浠剁殑鏁版嵁"); return result; } @@ -1011,7 +1072,8 @@ // materielCodes = outBoundMateriel.Where(x => x.ProductionLine == productionLine && x.ProcessCode == areaCodes[0]).Select(x => x.MaterielCode).ToList(); //} - var outBoundMateriel = AppSettings.app<OutBoundMateriel>("OutBoundMateriel"); + //var outBoundMateriel = AppSettings.app<OutBoundMateriel>("OutBoundMateriel"); + var outBoundMateriel = _dt_ChangeoversRepository.QueryData(x => x.Status == "1").ToList(); List<string>? materielCodes = outBoundMateriel.Count != 0 ? outBoundMateriel.Where(x => x.ProductionLine == productionLine && x.ProcessCode == areaCodes[0]) .Select(x => x.MaterielCode) @@ -1022,27 +1084,20 @@ .Where(x => x.DeviceStatus == "1") .Where(x => x.DeviceCode.Contains("CWSC")) .ToList().Select(x => x.DeviceCode).ToList(); - //var deviceCode = devices.Select(x => x.DeviceCode).ToList(); - IDictionary<string, DtStockInfo>? stockInfos = _simpleCacheService.HashGetAll<DtStockInfo>(WIDESEA_Cache.CacheConst.Cache_DtStockInfo); - List<DtStockInfo> stockInfoList = stockInfos.Values.ToList(); - - var result = stockInfoList.Where(x => areaCodes.Contains(x.AreaCode) && x.OutboundTime < DateTime.Now && x.IsFull == true) // 杩囨护鏉′欢 + var result = await _stockInfoRepository.Db.Queryable<DtStockInfo>() + .Where(x => areaCodes.Contains(x.AreaCode) && x.OutboundTime < DateTime.Now && x.IsFull == true) // 杩囨护鏉′欢 .WhereIF(!productionLine.IsNullOrEmpty(), x => x.ProductionLine == productionLine) - .Where(x => x.LocationInfo != null && x.LocationInfo.LocationStatus == (int)LocationEnum.InStock && areaId.Contains(x.LocationInfo.AreaId) && x.LocationInfo.EnalbeStatus == (int)EnableEnum.Enable) // 杩囨护鏉′欢 + .Includes(x => x.LocationInfo) .WhereIF(!deviceCode.IsNullOrEmpty(), x => deviceCode.Contains(x.LocationInfo.RoadwayNo)) - .WhereIF(!materielCodes.IsNullOrEmpty(), x => x.StockInfoDetails != null && x.StockInfoDetails.Any(y => materielCodes.Contains(y.MaterielCode))) + .Where(x => x.LocationInfo.LocationStatus == (int)LocationEnum.InStock && areaId.Contains(x.LocationInfo.AreaId) && x.LocationInfo.EnalbeStatus == (int)EnableEnum.Enable) // 杩囨护鏉′欢 + .Includes(x => x.StockInfoDetails) + .WhereIF(!materielCodes.IsNullOrEmpty(), x => x.StockInfoDetails.Any(y => materielCodes.Contains(y.MaterielCode))) .OrderBy(x => x.OutboundTime) // 鎺掑簭 - .FirstOrDefault(); // 鑾峰彇绗竴涓厓绱� + .FirstAsync(); // 鑾峰彇绗竴涓厓绱� - if (result != null) - { - _simpleCacheService.HashDel<DtStockInfo>(WIDESEA_Cache.CacheConst.Cache_DtStockInfo, new string[] { result.PalletCode }); - } - else - { - ConsoleHelper.WriteErrorLine("QueryStockInfoForRealTrayCWAsync鏌ヨ甯告俯瀹炵洏搴撳瓨淇℃伅澶辫触:鏈壘鍒扮鍚堟潯浠剁殑鏁版嵁"); - } + if (result.IsNullOrEmpty()) + ConsoleHelper.WriteErrorLine($"{JsonConvert.SerializeObject(areaCodes)}-{productionLine}鏌ヨ甯告俯瀹炵洏搴撳瓨淇℃伅澶辫触:鏈壘鍒扮鍚堟潯浠剁殑鏁版嵁"); return result; } @@ -1073,21 +1128,19 @@ .Where(x => stackers.Contains(x.DeviceCode)) .ToList().Select(x => x.DeviceCode).ToList(); - IDictionary<string, DtStockInfo>? stockInfos = _simpleCacheService.HashGetAll<DtStockInfo>(WIDESEA_Cache.CacheConst.Cache_DtStockInfo); - List<DtStockInfo> stockInfoList = stockInfos.Values.ToList(); - - var result = stockInfoList.Where(x => x.ProductionLine == station.productLine) + var result = await _stockInfoRepository.Db.Queryable<DtStockInfo>() + .Where(x => x.ProductionLine == station.productLine) .Where(x => x.AreaCode == areaCode && x.IsFull == false) - .Where(x => x.StockInfoDetails != null && x.StockInfoDetails.Any(y => y.MaterielCode == "绌烘墭鐩�")) - .Where(x => x.LocationInfo != null && x.LocationInfo.LocationStatus == (int)LocationEnum.InStock && x.LocationInfo.AreaId == area.AreaID && x.LocationInfo.EnalbeStatus == (int)EnableEnum.Enable) // 杩囨护鏉′欢 + .Includes(x => x.StockInfoDetails) + .Where(x => x.StockInfoDetails.Any(y => y.MaterielCode == "绌烘墭鐩�")) + .Includes(x => x.LocationInfo) .WhereIF(!deviceCode.IsNullOrEmpty(), x => deviceCode.Contains(x.LocationInfo.RoadwayNo)) + .Where(x => x.LocationInfo.LocationStatus == (int)LocationEnum.InStock && x.LocationInfo.AreaId == area.AreaID && x.LocationInfo.EnalbeStatus == (int)EnableEnum.Enable) // 杩囨护鏉′欢 .OrderBy(x => x.CreateDate) // 鎺掑簭 - .FirstOrDefault(); // 杞崲涓哄垪琛� + .FirstAsync(); // 杞崲涓哄垪琛� - if (result != null) - _simpleCacheService.HashDel<DtStockInfo>(WIDESEA_Cache.CacheConst.Cache_DtStockInfo, new string[] { result.PalletCode }); - else - ConsoleHelper.WriteErrorLine("QueryStockInfoForEmptyTrayAsync鏌ヨ绌虹洏搴撳瓨淇℃伅澶辫触:鏈壘鍒扮鍚堟潯浠剁殑鏁版嵁"); + if (result.IsNullOrEmpty()) + ConsoleHelper.WriteErrorLine($"{area}-{station.productLine}鏌ヨ绌虹洏搴撳瓨淇℃伅澶辫触:鏈壘鍒扮鍚堟潯浠剁殑鏁版嵁"); return result; } @@ -1231,7 +1284,15 @@ if (stockInfo.AreaCode.Contains("CH")) { // 鍒涘缓骞舵坊鍔犱换鍔″埌鏁版嵁搴� - task = CreateTask(stockInfo, "1020-1", taskType); + if(stockInfo.LocationInfo.RoadwayNo=="CHSC1"|| stockInfo.LocationInfo.RoadwayNo == "CHSC2"|| stockInfo.LocationInfo.RoadwayNo == "CHSC3") + { + task = CreateTask(stockInfo, "1020-1", taskType); + } + else + { + task = CreateTask(stockInfo, "1049-1", taskType); + } + } else { @@ -1860,32 +1921,32 @@ } #region 鏇存柊搴撳瓨淇℃伅锛堟殏鏃朵笉闇�瑕侊級 - //if (stock.IsFull) - //{ - // // 鏌ヨ绗﹀悎鏉′欢鐨勫簱瀛樹俊鎭� - // var stocks = _stockInfoRepository.QueryData(x => x.AreaCode == stock.AreaCode && x.ProductionLine == stock.ProductionLine && x.SpecialParameterDuration != stock.SpecialParameterDuration); + if (stock.IsFull) + { + // 鏌ヨ绗﹀悎鏉′欢鐨勫簱瀛樹俊鎭� + var stocks = _stockInfoRepository.QueryData(x => x.AreaCode == stock.AreaCode && x.ProductionLine == stock.ProductionLine && x.SpecialParameterDuration != stock.SpecialParameterDuration); - // // 鏌ヨ浠诲姟淇℃伅 - // var tasks = BaseDal.QueryData(x => x.PalletCode != stock.PalletCode && x.ProductionLine == stock.ProductionLine).Select(x => x.PalletCode).ToList(); + // 鏌ヨ浠诲姟淇℃伅 + var tasks = BaseDal.QueryData(x => x.PalletCode != stock.PalletCode && x.ProductionLine == stock.ProductionLine).Select(x => x.PalletCode).ToList(); - // if (stocks != null && stocks.Count > 0) - // { - // // 杩囨护鍑洪渶瑕佹洿鏂扮殑搴撳瓨淇℃伅 - // var stocksToUpdate = stocks.Where(item => !tasks.Contains(item.PalletCode)).ToList(); - // foreach (var item in stocksToUpdate) - // { - // // 鏇存柊搴撳瓨淇℃伅鐨勭壒瀹氬弬鏁� - // item.SpecialParameterDuration = stock.SpecialParameterDuration; - // item.ParameterInfos = stock.ParameterInfos; - // item.OutboundTime = Convert.ToDateTime(item.LinedProcessFeedbackTime == null ? item.CreateDate : item.LinedProcessFeedbackTime).AddHours(Convert.ToDouble(stock.SpecialParameterDuration)); - // } - // if (stocksToUpdate.Count > 0) - // { - // // 寮傛鏇存柊搴撳瓨淇℃伅 - // var isUpdates = await _stockInfoRepository.UpdateDataAsync(stocksToUpdate); - // } - // } - //} + if (stocks != null && stocks.Count > 0) + { + // 杩囨护鍑洪渶瑕佹洿鏂扮殑搴撳瓨淇℃伅 + var stocksToUpdate = stocks.Where(item => !tasks.Contains(item.PalletCode)).ToList(); + foreach (var item in stocksToUpdate) + { + // 鏇存柊搴撳瓨淇℃伅鐨勭壒瀹氬弬鏁� + item.SpecialParameterDuration = stock.SpecialParameterDuration; + item.ParameterInfos = stock.ParameterInfos; + item.OutboundTime = Convert.ToDateTime(item.LinedProcessFeedbackTime == null ? item.CreateDate : item.LinedProcessFeedbackTime).AddHours(Convert.ToDouble(stock.SpecialParameterDuration)); + } + if (stocksToUpdate.Count > 0) + { + // 寮傛鏇存柊搴撳瓨淇℃伅 + var isUpdates = await _stockInfoRepository.UpdateDataAsync(stocksToUpdate); + } + } + } #endregion // 娣诲姞鍘嗗彶浠诲姟 -- Gitblit v1.9.3