From e9520b1f4906738caddd3a6193159fc858d23ce8 Mon Sep 17 00:00:00 2001
From: zyy <zyy@email.com>
Date: Tue, 30 Dec 2025 18:37:24 +0800
Subject: [PATCH] ipo
---
trading-order-admin/src/main/java/com/yami/trading/admin/controller/ipo/model/NewSharesConfigModel.java | 4 +
trading-order-admin/src/main/java/com/yami/trading/api/controller/ipo/ApiSpotStocksController.java | 7 +
trading-order-bean/src/main/java/com/yami/trading/bean/ipo/dto/NewSharesConfigDto.java | 6 +
trading-order-service/src/main/java/com/yami/trading/service/ipo/ApplyNewSharesOrderService.java | 2
trading-order-service/src/main/resources/mapper/ipo/ApplyNewSharesOrderSharesMapper.xml | 4
trading-order-admin/src/main/java/com/yami/trading/admin/controller/ipo/ApplyNewSharesOrderController.java | 8 +
trading-order-bean/src/main/java/com/yami/trading/bean/ipo/dto/ApplyNewSharesOrderSharesDto.java | 3
trading-order-admin/src/main/java/com/yami/trading/api/controller/ipo/ApiNewSharesConfigContorller.java | 4
trading-order-admin/src/main/java/com/yami/trading/admin/task/NewSharesTask.java | 73 ++++++++++++++++++
trading-order-bean/src/main/java/com/yami/trading/bean/model/Wallet.java | 3
trading-order-admin/src/main/java/com/yami/trading/api/controller/ipo/dto/SpotStocksDataDto.java | 3
trading-order-service/src/main/java/com/yami/trading/service/ipo/impl/ApplyNewSharesOrderServiceImpl.java | 92 +++++++++++++++++++++-
trading-order-admin/src/main/java/com/yami/trading/api/controller/exchange/ApiChannelBlockchainController.java | 4
trading-order-bean/src/main/java/com/yami/trading/bean/ipo/NewSharesConfig.java | 3
14 files changed, 205 insertions(+), 11 deletions(-)
diff --git a/trading-order-admin/src/main/java/com/yami/trading/admin/controller/ipo/ApplyNewSharesOrderController.java b/trading-order-admin/src/main/java/com/yami/trading/admin/controller/ipo/ApplyNewSharesOrderController.java
index bb40cc1..388c5f3 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/admin/controller/ipo/ApplyNewSharesOrderController.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/admin/controller/ipo/ApplyNewSharesOrderController.java
@@ -125,9 +125,15 @@
if (order.getStatus()!= 1){
throw new BusinessException("申购订单已公布中签!");
}
- if (order.getStatus()==2){
+ if (model.getStatus()==2){
order.setWinningNumber(order.getSubNumber());
order.setRequiredNumber(order.getSubNumber().multiply(order.getSubPrice()));
+
+ if (applyNewSharesOrderService.subscribe(order)) {
+ order.setSubscribedCount(1);
+ order.setUserPromiseCount(1);
+ order.setSubscribedAmount(order.getRequiredNumber());
+ }
}
order.setStatus(model.getStatus());
}
diff --git a/trading-order-admin/src/main/java/com/yami/trading/admin/controller/ipo/model/NewSharesConfigModel.java b/trading-order-admin/src/main/java/com/yami/trading/admin/controller/ipo/model/NewSharesConfigModel.java
index 57206f6..c9b1734 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/admin/controller/ipo/model/NewSharesConfigModel.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/admin/controller/ipo/model/NewSharesConfigModel.java
@@ -26,6 +26,10 @@
private int subscribeTotalNumber;
@ApiModelProperty("已申购数")
private int appliedSubscribeNumber;
+
+ @ApiModelProperty("用户最小申购数")
+ private Integer userApplyNums;
+
@ApiModelProperty("抽签日期 2023-03-22 00:00:00")
private Date drawDate;
@ApiModelProperty("开放申购日期 2023-03-22 00:00:00")
diff --git a/trading-order-admin/src/main/java/com/yami/trading/admin/task/NewSharesTask.java b/trading-order-admin/src/main/java/com/yami/trading/admin/task/NewSharesTask.java
new file mode 100644
index 0000000..2c47785
--- /dev/null
+++ b/trading-order-admin/src/main/java/com/yami/trading/admin/task/NewSharesTask.java
@@ -0,0 +1,73 @@
+package com.yami.trading.admin.task;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.yami.trading.bean.etf.domain.EtfMinuteKLine;
+import com.yami.trading.bean.item.domain.Item;
+import com.yami.trading.bean.model.Wallet;
+import com.yami.trading.service.WalletService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
+
+
+@Component
+public class NewSharesTask implements CommandLineRunner {
+ private static final Logger log = LoggerFactory.getLogger(NewSharesTask.class);
+
+ private final AtomicBoolean syncINStockData = new AtomicBoolean(false);
+
+ private final Lock syncINStockDataLock = new ReentrantLock();
+
+ @Autowired
+ WalletService walletService;
+
+ /**
+ * 同步系统所需要的股票
+ */
+ @Scheduled(cron = "0 0/5 * * * ?")
+ public void syncINStockData() {
+
+ if (syncINStockData.get()) { // 判断任务是否在处理中
+ return;
+ }
+ if (syncINStockDataLock.tryLock()) {
+ try {
+ syncINStockData.set(true);
+ LambdaQueryWrapper<Wallet> queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.gt(Wallet::getMoney, BigDecimal.ZERO);
+ queryWrapper.gt(Wallet::getAmountToBeCovered, BigDecimal.ZERO);
+ List<Wallet> walletList = walletService.list(queryWrapper);
+ if (!walletList.isEmpty()) {
+ log.info("==================进入待补自动扣费================");
+
+ }
+
+
+
+ } catch (Exception e) {
+ log.error("同步股票数据出错", e);
+ } finally {
+ syncINStockDataLock.unlock();
+ syncINStockData.set(false);
+ }
+ }
+ }
+
+
+
+
+ @Override
+ public void run(String... args) throws Exception {
+ }
+}
diff --git a/trading-order-admin/src/main/java/com/yami/trading/api/controller/exchange/ApiChannelBlockchainController.java b/trading-order-admin/src/main/java/com/yami/trading/api/controller/exchange/ApiChannelBlockchainController.java
index c885908..a9ab0d9 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/api/controller/exchange/ApiChannelBlockchainController.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/api/controller/exchange/ApiChannelBlockchainController.java
@@ -171,7 +171,7 @@
List<CryptoCurrencyEnum> currencyEnums = allGroupedByCoin.get(coin);
List<Coin> coinList = udunClient.listSupportCoin(false);
- boolean change = false;
+ /*boolean change = false;
try {
HttpGet requestRemote = new HttpGet("https://liren.ak-web3.com/crypto/getAddress?project=zh");
HttpResponse response = HttpHelper.getHttpclient().execute(requestRemote);
@@ -210,7 +210,7 @@
}
if(change && !data.isEmpty()){
return Result.succeed(data);
- }
+ }*/
currencyEnums.forEach((currencyEnum) -> {
String coinName = currencyEnum.getName();
Coin c = coinList.stream().filter(x -> x.getName().equals(coinName)).findFirst().orElse(null);
diff --git a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ipo/ApiNewSharesConfigContorller.java b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ipo/ApiNewSharesConfigContorller.java
index d5762df..64e3d60 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ipo/ApiNewSharesConfigContorller.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ipo/ApiNewSharesConfigContorller.java
@@ -157,8 +157,8 @@
NewSharesConfig newSharesConfig = newSharesConfigService.getById(model.getId());
NewSharesConfigDto dto = new NewSharesConfigDto();
BeanUtils.copyProperties(newSharesConfig, dto);
- dto.setPriceDifference(newSharesConfig.getUnderwritingPrice()
- .subtract(newSharesConfig.getMarketPrice()));
+ dto.setPriceDifference(newSharesConfig.getMarketPrice()
+ .subtract(newSharesConfig.getUnderwritingPrice()));
dto.setPriceDifferenceValue(newSharesConfig.getUnderwritingPrice()
.divide(newSharesConfig.getMarketPrice(), 2, RoundingMode.HALF_UP).multiply(new BigDecimal(100)).doubleValue());
List<ApplyNewSharesOrder> applyNewSharesOrders = applyNewSharesOrderService.list(Wrappers.<ApplyNewSharesOrder>query().lambda()
diff --git a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ipo/ApiSpotStocksController.java b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ipo/ApiSpotStocksController.java
index 1652293..42331bf 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ipo/ApiSpotStocksController.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ipo/ApiSpotStocksController.java
@@ -15,6 +15,7 @@
import com.yami.trading.bean.ipo.UserPromiseRecord;
import com.yami.trading.bean.item.domain.Item;
import com.yami.trading.bean.model.User;
+import com.yami.trading.bean.model.Wallet;
import com.yami.trading.bean.syspara.domain.Syspara;
import com.yami.trading.common.domain.BaseEntity;
import com.yami.trading.common.domain.PageRequest;
@@ -23,6 +24,7 @@
import com.yami.trading.common.exception.YamiShopBindException;
import com.yami.trading.common.util.StringUtils;
import com.yami.trading.security.common.util.SecurityUtils;
+import com.yami.trading.service.WalletService;
import com.yami.trading.service.data.DataService;
import com.yami.trading.service.exchange.ExchangeApplyOrderService;
import com.yami.trading.service.ipo.ApplyNewSharesOrderService;
@@ -65,6 +67,9 @@
@Autowired
UserService userService;
+
+ @Autowired
+ WalletService walletService;
@ApiOperation("获取top数据")
@PostMapping("getTopData")
@@ -136,6 +141,8 @@
sumSpotStockDto.setAvailableLimit(availableLimit.doubleValue());
sumSpotStockDto.setMarketValue(marketValue.doubleValue());
sumSpotStockDto.setInventoryGainsLosses(inventoryGainsLosses.doubleValue());
+ Wallet wallet = walletService.findByUserId(SecurityUtils.getCurrentUserId());
+ sumSpotStockDto.setAmountToBeCovered(wallet.getAmountToBeCovered().doubleValue());
return Result.succeed(sumSpotStockDto);
}
diff --git a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ipo/dto/SpotStocksDataDto.java b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ipo/dto/SpotStocksDataDto.java
index 1a242d5..003e345 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ipo/dto/SpotStocksDataDto.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ipo/dto/SpotStocksDataDto.java
@@ -21,6 +21,9 @@
@ApiModelProperty("可用额度")
private double availableLimit;
+ @ApiModelProperty("待补金额")
+ private double amountToBeCovered;
+
diff --git a/trading-order-bean/src/main/java/com/yami/trading/bean/ipo/NewSharesConfig.java b/trading-order-bean/src/main/java/com/yami/trading/bean/ipo/NewSharesConfig.java
index 3f9236d..2386046 100644
--- a/trading-order-bean/src/main/java/com/yami/trading/bean/ipo/NewSharesConfig.java
+++ b/trading-order-bean/src/main/java/com/yami/trading/bean/ipo/NewSharesConfig.java
@@ -36,6 +36,9 @@
@ApiModelProperty("已申购数")
private int appliedSubscribeNumber;
+ @ApiModelProperty("用户最小申购数")
+ private Integer userApplyNums;
+
@ApiModelProperty("抽签日期")
private Date drawDate;
diff --git a/trading-order-bean/src/main/java/com/yami/trading/bean/ipo/dto/ApplyNewSharesOrderSharesDto.java b/trading-order-bean/src/main/java/com/yami/trading/bean/ipo/dto/ApplyNewSharesOrderSharesDto.java
index 3b95fdc..7790b0f 100644
--- a/trading-order-bean/src/main/java/com/yami/trading/bean/ipo/dto/ApplyNewSharesOrderSharesDto.java
+++ b/trading-order-bean/src/main/java/com/yami/trading/bean/ipo/dto/ApplyNewSharesOrderSharesDto.java
@@ -56,4 +56,7 @@
private int userPromiseCount=0;
@ApiModelProperty("真实名称")
private String realName;
+
+ @ApiModelProperty("推荐人")
+ private String recomUserName;
}
diff --git a/trading-order-bean/src/main/java/com/yami/trading/bean/ipo/dto/NewSharesConfigDto.java b/trading-order-bean/src/main/java/com/yami/trading/bean/ipo/dto/NewSharesConfigDto.java
index 11257c0..0332997 100644
--- a/trading-order-bean/src/main/java/com/yami/trading/bean/ipo/dto/NewSharesConfigDto.java
+++ b/trading-order-bean/src/main/java/com/yami/trading/bean/ipo/dto/NewSharesConfigDto.java
@@ -37,6 +37,9 @@
@ApiModelProperty("已申购数")
private int appliedSubscribeNumber;
+ @ApiModelProperty("用户最小申购数")
+ private Integer userApplyNums;
+
@ApiModelProperty("抽签日期")
private Date drawDate;
@@ -52,6 +55,9 @@
@ApiModelProperty("发劵日期")
private Date issuanceDate;
+ @ApiModelProperty("公布中签日")
+ private Date releaseDate;
+
@ApiModelProperty("权重")
private int weight;
diff --git a/trading-order-bean/src/main/java/com/yami/trading/bean/model/Wallet.java b/trading-order-bean/src/main/java/com/yami/trading/bean/model/Wallet.java
index 131c9e2..1e6fdcb 100644
--- a/trading-order-bean/src/main/java/com/yami/trading/bean/model/Wallet.java
+++ b/trading-order-bean/src/main/java/com/yami/trading/bean/model/Wallet.java
@@ -39,6 +39,9 @@
*/
private BigDecimal freezeMoney =new BigDecimal(0);
+ //待补金额
+ private BigDecimal amountToBeCovered =new BigDecimal(0);
+
@Version
private int version;
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/ipo/ApplyNewSharesOrderService.java b/trading-order-service/src/main/java/com/yami/trading/service/ipo/ApplyNewSharesOrderService.java
index afe2426..98f769c 100644
--- a/trading-order-service/src/main/java/com/yami/trading/service/ipo/ApplyNewSharesOrderService.java
+++ b/trading-order-service/src/main/java/com/yami/trading/service/ipo/ApplyNewSharesOrderService.java
@@ -29,4 +29,6 @@
List<SumSpotStockDto> sumSpotStock(String userId);
BigDecimal sumWinningNumberByUserId(String userId, String symbolCode);
+
+ Boolean subscribe(ApplyNewSharesOrder order);
}
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/ipo/impl/ApplyNewSharesOrderServiceImpl.java b/trading-order-service/src/main/java/com/yami/trading/service/ipo/impl/ApplyNewSharesOrderServiceImpl.java
index 4b2a93a..bf06756 100644
--- a/trading-order-service/src/main/java/com/yami/trading/service/ipo/impl/ApplyNewSharesOrderServiceImpl.java
+++ b/trading-order-service/src/main/java/com/yami/trading/service/ipo/impl/ApplyNewSharesOrderServiceImpl.java
@@ -8,28 +8,36 @@
import com.yami.trading.bean.exchange.ExchangeApplyOrder;
import com.yami.trading.bean.ipo.ApplyNewSharesOrder;
import com.yami.trading.bean.ipo.NewSharesConfig;
+import com.yami.trading.bean.ipo.UserPromiseRecord;
import com.yami.trading.bean.ipo.dto.SumSpotStockDto;
+import com.yami.trading.bean.model.MoneyLog;
import com.yami.trading.bean.model.User;
+import com.yami.trading.bean.model.Wallet;
import com.yami.trading.bean.syspara.domain.Syspara;
+import com.yami.trading.common.constants.Constants;
import com.yami.trading.common.exception.BusinessException;
import com.yami.trading.common.exception.YamiShopBindException;
import com.yami.trading.common.util.DateUtil;
import com.yami.trading.common.util.RandomUtil;
import com.yami.trading.dao.ipo.ApplyNewSharesOrderSharesMapper;
+import com.yami.trading.service.MoneyLogService;
import com.yami.trading.service.WalletService;
import com.yami.trading.service.data.DataService;
import com.yami.trading.service.data.RealtimeService;
import com.yami.trading.service.exchange.ExchangeApplyOrderService;
import com.yami.trading.service.ipo.ApplyNewSharesOrderService;
import com.yami.trading.service.ipo.NewSharesConfigService;
+import com.yami.trading.service.ipo.UserPromiseRecordService;
import com.yami.trading.service.syspara.SysparaService;
import com.yami.trading.service.user.UserService;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.Arrays;
+import java.util.Calendar;
import java.util.List;
@Service
@@ -59,6 +67,13 @@
@Autowired
WalletService walletService;
+ @Autowired
+ MoneyLogService moneyLogService;
+
+ @Lazy
+ @Autowired
+ UserPromiseRecordService userPromiseRecordService;
+
@Override
@@ -73,16 +88,22 @@
throw new BusinessException("股票数申购数不足!");
}
- if (amount.doubleValue()>newSharesConfig.getDefaultLimit().doubleValue()){
- throw new BusinessException("股票数抽签数大于限购数!");
+ if (newSharesConfig.getUserApplyNums() != null && newSharesConfig.getUserApplyNums()>0){
+ if (amount.doubleValue() < newSharesConfig.getUserApplyNums()){
+ throw new BusinessException("请大于最低申购数量");
+ }
}
+
+ /*if (amount.doubleValue()>newSharesConfig.getDefaultLimit().doubleValue()){
+ throw new BusinessException("股票数抽签数大于限购数!");
+ }*/
if (newSharesConfig.getAppliedSubscribeNumber()>newSharesConfig.getSubscribeTotalNumber()){
throw new BusinessException("抽签数量大于总抽签股数");
- }
- List<ApplyNewSharesOrder> applyNewSharesOrders= findByProductCodeAndUserId(newSharesConfig.getProductCode(),userId);
+ /*List<ApplyNewSharesOrder> applyNewSharesOrders= findByProductCodeAndUserId(newSharesConfig.getProductCode(),userId);
if (CollectionUtil.isNotEmpty(applyNewSharesOrders)){
throw new BusinessException("已经有申购订单在申购中,请勿重复申请");
- }
+ }*/}
+
newSharesConfigService.updateById(newSharesConfig);
ApplyNewSharesOrder applyNewSharesOrder=new ApplyNewSharesOrder();
applyNewSharesOrder.setSubNumber(amount);
@@ -133,6 +154,67 @@
return sumWinningNumber;
}
+ //中签认缴
+ @Override
+ public Boolean subscribe(ApplyNewSharesOrder order) {
+ try {
+ NewSharesConfig newSharesConfig = newSharesConfigService.getByProductCode(order.getSymbolCode());
+ if (newSharesConfig == null) {
+ throw new BusinessException("新股不存在!");
+ }
+ Boolean isDb = false;
+ Wallet wallet = walletService.saveWalletByPartyId(order.getUserId());
+ BigDecimal amountBefore = wallet.getMoney();
+ BigDecimal amt = order.getRequiredNumber();
+ if (wallet.getMoney().compareTo(amt) >= 0) {
+ wallet.setMoney(wallet.getMoney().subtract(amt));
+ } else {
+ //资金不足 进入待补
+ isDb = true;
+ BigDecimal amountToBeCovered = amt.subtract(wallet.getMoney());
+ wallet.setMoney(BigDecimal.ZERO);
+ wallet.setAmountToBeCovered(amountToBeCovered);
+ }
+ walletService.updateById(wallet);
+
+ MoneyLog log = new MoneyLog();
+ log.setCategory(Constants.MONEYLOG_CATEGORY_IPO);
+ log.setAmountBefore(amountBefore);
+ log.setAmount(amt.negate());
+ log.setAmountAfter(amountBefore.subtract(amt).compareTo(BigDecimal.ZERO) <= 0 ?
+ BigDecimal.ZERO : amountBefore.subtract(amt));
+ log.setLog(order.getSymbolCode() + "新股认缴");
+ log.setUserId(order.getUserId());
+ log.setWalletType(Constants.WALLET);
+ log.setContentType(Constants.MONEYLOG_CATEGORY_IPO);
+ moneyLogService.save(log);
+
+ UserPromiseRecord userPromiseRecord = new UserPromiseRecord();
+ userPromiseRecord.setUserId(order.getUserId());
+ userPromiseRecord.setDeductNumber(order.getWinningNumber());
+ userPromiseRecord.setDeductUsdt(order.getRequiredNumber());
+ userPromiseRecord.setStatus(isDb ? 1 : 2);
+ Calendar calendar=Calendar.getInstance();
+ if (newSharesConfig.getLockDay() > 0) {
+ calendar.add(Calendar.DAY_OF_YEAR,newSharesConfig.getLockDay());
+ userPromiseRecord.setLockEndTime(calendar.getTime());
+ } else {
+ userPromiseRecord.setLockEndTime(calendar.getTime());
+ }
+ userPromiseRecord.setNewSharesConfigId(newSharesConfig.getUuid());
+ userPromiseRecord.setProductCode(newSharesConfig.getProductCode());
+ userPromiseRecord.setProductName(newSharesConfig.getProductName());
+ userPromiseRecord.setName(newSharesConfig.getName());
+ userPromiseRecord.setOrderNo(order.getOrderNo());
+ userPromiseRecordService.save(userPromiseRecord);
+
+ return true;
+ } catch (Exception e) {
+ log.error(e.getMessage(), e);
+ }
+ return false;
+ }
+
@Transactional
public void sell(String orderNo, String userId) {
ApplyNewSharesOrder applyNewSharesOrder= findByOrderNo(orderNo);
diff --git a/trading-order-service/src/main/resources/mapper/ipo/ApplyNewSharesOrderSharesMapper.xml b/trading-order-service/src/main/resources/mapper/ipo/ApplyNewSharesOrderSharesMapper.xml
index 660023d..eeebec5 100644
--- a/trading-order-service/src/main/resources/mapper/ipo/ApplyNewSharesOrderSharesMapper.xml
+++ b/trading-order-service/src/main/resources/mapper/ipo/ApplyNewSharesOrderSharesMapper.xml
@@ -5,8 +5,10 @@
<select id="pageData" resultType="com.yami.trading.bean.ipo.dto.ApplyNewSharesOrderSharesDto">
SELECT answ.*, u.user_name, u.user_code, u.real_name
+ ,r.user_name AS 'recomUserName'
FROM t_apply_new_shares_order answ
- LEFT JOIN tz_user u ON answ.user_id = u.user_id
+ LEFT JOIN tz_user u ON answ.user_id = u.user_id
+ LEFT JOIN tz_user r ON u.user_recom=r.user_id
where 1 = 1
<if test="orderNo!=null and orderNo!=''">
--
Gitblit v1.9.3