update 广播模块,新增广播按钮和跳转路径。定时任务新增开关功能
This commit is contained in:
@@ -44,7 +44,6 @@ public class ManageBroadcastController {
|
||||
|
||||
@PostMapping("/find/data/by/id")
|
||||
@ApiOperation(value = "业务系统:用于获取m2pool广播数据")
|
||||
|
||||
public R<List<ManageBroadcastDto>> findDataById(@RequestBody(required = false) ManageBaseVo manageBaseVo){
|
||||
return manageBroadcastService.findDataById(manageBaseVo);
|
||||
}
|
||||
|
||||
@@ -33,4 +33,10 @@ public class ManageBroadcastDto {
|
||||
|
||||
@ApiModelProperty(value = "创建时间",example = "2025-05-22 14:22:13")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
@ApiModelProperty(value = "按钮内容",example = "按钮内容")
|
||||
private String buttonContent;
|
||||
|
||||
@ApiModelProperty(value = "按钮跳转路径",example = "按钮跳转路径")
|
||||
private String buttonPath;
|
||||
}
|
||||
|
||||
@@ -26,7 +26,7 @@ public class ManageMiningUserOnlineDto {
|
||||
//private String minerUser;
|
||||
|
||||
@ApiModelProperty(value = "时间",example = "2025-06-27 16:30:00",required = true)
|
||||
private LocalDateTime date;
|
||||
private Date date;
|
||||
|
||||
@ApiModelProperty(value = "在线数量",example = "15")
|
||||
private Integer onlineNum;
|
||||
|
||||
@@ -7,6 +7,7 @@ import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -21,6 +22,9 @@ import java.util.List;
|
||||
@ApiModel(value = "WalletEarningsInfoDto", description = "钱包收益详情信息返回对象")
|
||||
public class WalletEarningsInfoDto {
|
||||
|
||||
@ApiModelProperty(value = "钱包余额",example = "100000.0000000000")
|
||||
private BigDecimal accountBalance;
|
||||
|
||||
@ApiModelProperty(value = "钱包历史地址集合",example = "")
|
||||
List<HistoryBalanceDto> historyBalance;
|
||||
|
||||
|
||||
@@ -36,4 +36,10 @@ public class ManageBroadcast {
|
||||
private LocalDateTime updateTime;
|
||||
|
||||
private Boolean del;
|
||||
|
||||
private String buttonContent;
|
||||
|
||||
private String buttonPath;
|
||||
|
||||
private String buttonContentEn;
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ import com.m2pool.manage.vo.ManageBaseVo;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
@@ -87,4 +88,8 @@ public interface ManageBroadcastMapper extends BaseMapper<ManageBroadcast> {
|
||||
* @return
|
||||
*/
|
||||
List<ManageBroadcastDto> getListDataByPage();
|
||||
|
||||
|
||||
@DistributionDB
|
||||
BigDecimal getAccountBalance(@Param("user") String user, @Param("coin") String coin);
|
||||
}
|
||||
|
||||
@@ -44,7 +44,7 @@ public class ManageBroadcastServiceImpl extends ServiceImpl<ManageBroadcastMappe
|
||||
@Override
|
||||
public TableDataInfo<ManageBroadcastDto> getListDataByPage(PageVo pageVo) {
|
||||
|
||||
PageHelper.startPage(pageVo.getPageNum(), pageVo.getPageSize());
|
||||
PageHelper.startPage(pageVo.getPageNum(), pageVo.getPageSize());
|
||||
List<ManageBroadcastDto> listDataByPage = manageBroadcastMapper.getListDataByPage();
|
||||
return getDataTable(listDataByPage);
|
||||
}
|
||||
@@ -81,6 +81,8 @@ public class ManageBroadcastServiceImpl extends ServiceImpl<ManageBroadcastMappe
|
||||
collect = list.stream().map(broadcast ->
|
||||
ManageBroadcastDto.builder()
|
||||
.content(broadcast.getContent())
|
||||
.buttonContent(broadcast.getButtonContent())
|
||||
.buttonPath(broadcast.getButtonPath())
|
||||
.id(broadcast.getId())
|
||||
.createUser(broadcast.getCreateUser())
|
||||
.updateUser(broadcast.getUpdateUser())
|
||||
@@ -91,12 +93,15 @@ public class ManageBroadcastServiceImpl extends ServiceImpl<ManageBroadcastMappe
|
||||
}else{
|
||||
collect = list.stream().map(broadcast -> {
|
||||
//如果英文为null,需要翻译并保存一下
|
||||
if("".equals(broadcast.getContentEn())){
|
||||
if("".equals(broadcast.getContentEn()) || "".equals(broadcast.getButtonContentEn())){
|
||||
broadcast.setContentEn(TranslateUtils.translate(broadcast.getContent(), "zh", "en"));
|
||||
broadcast.setButtonContentEn(TranslateUtils.translate(broadcast.getButtonContent(), "zh", "en"));
|
||||
manageBroadcastMapper.updateById(broadcast);
|
||||
}
|
||||
return ManageBroadcastDto.builder()
|
||||
.content(broadcast.getContentEn())
|
||||
.buttonContent(broadcast.getButtonContentEn())
|
||||
.buttonPath(broadcast.getButtonPath())
|
||||
.id(broadcast.getId())
|
||||
.createUser(broadcast.getCreateUser())
|
||||
.updateUser(broadcast.getUpdateUser())
|
||||
@@ -110,6 +115,7 @@ public class ManageBroadcastServiceImpl extends ServiceImpl<ManageBroadcastMappe
|
||||
return R.success(collect);
|
||||
}
|
||||
|
||||
private static String SEPARATE = ",yKbjIAIgFpbdESYaE7A,";
|
||||
/**
|
||||
* 新增广播信息
|
||||
*
|
||||
@@ -118,10 +124,20 @@ public class ManageBroadcastServiceImpl extends ServiceImpl<ManageBroadcastMappe
|
||||
*/
|
||||
@Override
|
||||
public R<String> addBroadcast(ManageBroadcastVo broadcastVo) {
|
||||
String translate = TranslateUtils.translate(broadcastVo.getContent(), "zh", "en");
|
||||
String contentEn = TranslateUtils.translate(broadcastVo.getContent(), "zh", "en");
|
||||
// 休眠 1 秒,确保符合 API 的 QPS 限制。可升级为高级版,qps为10。不要把两个文本放到一起同时翻译,会出问题
|
||||
try {
|
||||
Thread.sleep(1000);
|
||||
} catch (InterruptedException e) {
|
||||
Thread.currentThread().interrupt();
|
||||
}
|
||||
String buttonContentEn = TranslateUtils.translate(broadcastVo.getButtonContent(), "zh", "en");
|
||||
ManageBroadcast broadcast = ManageBroadcast.builder()
|
||||
.content(broadcastVo.getContent())
|
||||
.contentEn(translate)
|
||||
.contentEn(contentEn)
|
||||
.buttonContent(broadcastVo.getButtonContent())
|
||||
.buttonContentEn(buttonContentEn)
|
||||
.buttonPath(broadcastVo.getButtonPath())
|
||||
.createUser(SecurityUtils.getUsername())
|
||||
.updateTime(LocalDateTime.now())
|
||||
.build();
|
||||
@@ -148,11 +164,21 @@ public class ManageBroadcastServiceImpl extends ServiceImpl<ManageBroadcastMappe
|
||||
|
||||
@Override
|
||||
public R<String> updateBroadcast(ManageBroadcastVo broadcastVo) {
|
||||
String translate = TranslateUtils.translate(broadcastVo.getContent(), "zh", "en");
|
||||
String contentEn = TranslateUtils.translate(broadcastVo.getContent(), "zh", "en");
|
||||
// 休眠 1 秒,确保符合 API 的 QPS 限制。可升级为高级版,qps为10。不要把两个文本放到一起同时翻译,会出问题
|
||||
try {
|
||||
Thread.sleep(1000);
|
||||
} catch (InterruptedException e) {
|
||||
Thread.currentThread().interrupt();
|
||||
}
|
||||
String buttonContentEN = TranslateUtils.translate(broadcastVo.getButtonContent(), "zh", "en");
|
||||
boolean b = this.updateById(ManageBroadcast.builder()
|
||||
.id(broadcastVo.getId())
|
||||
.content(broadcastVo.getContent())
|
||||
.contentEn(translate)
|
||||
.contentEn(contentEn)
|
||||
.buttonContent(broadcastVo.getButtonContent())
|
||||
.buttonContentEn(buttonContentEN)
|
||||
.buttonPath(broadcastVo.getButtonPath())
|
||||
.updateUser(SecurityUtils.getUsername())
|
||||
.build());
|
||||
if (b){
|
||||
@@ -170,6 +196,8 @@ public class ManageBroadcastServiceImpl extends ServiceImpl<ManageBroadcastMappe
|
||||
return R.success(ManageBroadcastDto.builder()
|
||||
.content(byId.getContent())
|
||||
.id(byId.getId())
|
||||
.buttonPath(byId.getButtonPath())
|
||||
.buttonContent(byId.getButtonContent())
|
||||
.createUser(byId.getCreateUser())
|
||||
.updateUser(byId.getUpdateUser())
|
||||
.updateTime(byId.getUpdateTime())
|
||||
|
||||
@@ -4,6 +4,7 @@ import com.github.pagehelper.PageHelper;
|
||||
import com.github.pagehelper.PageInfo;
|
||||
import com.m2pool.common.core.Result.R;
|
||||
import com.m2pool.common.core.constant.HttpStatus;
|
||||
import com.m2pool.common.core.utils.DateUtils;
|
||||
import com.m2pool.common.core.utils.StringUtils;
|
||||
import com.m2pool.common.core.web.page.TableDataInfo;
|
||||
import com.m2pool.manage.dto.*;
|
||||
@@ -96,11 +97,13 @@ public class ManageUserServiceImpl implements ManageUserService {
|
||||
|
||||
@Override
|
||||
public R<WalletEarningsInfoDto> getUserInfo(ManageUserInfoVo manageUserInfoVo) {
|
||||
//获取账户余额
|
||||
BigDecimal accountBalance = manageBroadcastMapper.getAccountBalance(manageUserInfoVo.getMinerUser(), manageUserInfoVo.getCoin());
|
||||
//获取挖矿账户历史收益记录
|
||||
List<ManageUserInfoDto> walletInInfo = manageBroadcastMapper.getUserInfo(manageUserInfoVo.getMinerUser(), manageUserInfoVo.getCoin(), manageUserInfoVo.getStartDate(), manageUserInfoVo.getEndDate());
|
||||
//获取挖矿账户历史地址
|
||||
List<HistoryBalanceDto> historyBalance = manageBroadcastMapper.getHistoryBalance(manageUserInfoVo.getMinerUser(), manageUserInfoVo.getCoin());
|
||||
WalletEarningsInfoDto manageUserInfoDto = new WalletEarningsInfoDto(historyBalance,walletInInfo);
|
||||
WalletEarningsInfoDto manageUserInfoDto = new WalletEarningsInfoDto(accountBalance,historyBalance,walletInInfo);
|
||||
return R.success(manageUserInfoDto);
|
||||
}
|
||||
|
||||
@@ -123,7 +126,19 @@ public class ManageUserServiceImpl implements ManageUserService {
|
||||
powerUnit = new PowerUnitUtils.NetPowerUnit("GH/S", BigDecimal.valueOf(1000 * 1000 * 1000));
|
||||
}
|
||||
changeUnit(powerUnit, list,BigDecimal.valueOf(1000 * 1000));
|
||||
list = fillMissingData(list,powerUnit.getUnit(),manageMiningUserPowerVo.getMinerUser());
|
||||
if (manageMiningUserPowerVo.getStartDate()==null || manageMiningUserPowerVo.getEndDate()==null){
|
||||
|
||||
}
|
||||
|
||||
|
||||
Date endDate = manageMiningUserPowerVo.getEndDate();
|
||||
Date startDate = manageMiningUserPowerVo.getStartDate();
|
||||
if (manageMiningUserPowerVo.getStartDate()==null || manageMiningUserPowerVo.getEndDate()==null){
|
||||
endDate = DateUtils.getPreviousHalfHourOrFullHour(new Date());
|
||||
startDate = DateUtils.getOneMonthAgo(endDate);
|
||||
}
|
||||
|
||||
list = fillMissingData(list,powerUnit.getUnit(),manageMiningUserPowerVo.getMinerUser(),startDate,endDate);
|
||||
return R.success(list);
|
||||
}
|
||||
|
||||
@@ -151,21 +166,10 @@ public class ManageUserServiceImpl implements ManageUserService {
|
||||
* @param dataList
|
||||
* @return
|
||||
*/
|
||||
public static List<ManageMiningUserPowerDto> fillMissingData(List<ManageMiningUserPowerDto> dataList,String unit,String minerUser) {
|
||||
if (dataList == null || dataList.size() <= 1) {
|
||||
return dataList;
|
||||
}
|
||||
|
||||
// 对数据按时间排序
|
||||
dataList.sort(Comparator.comparing(ManageMiningUserPowerDto::getDate));
|
||||
|
||||
public static List<ManageMiningUserPowerDto> fillMissingData(List<ManageMiningUserPowerDto> dataList,String unit,String minerUser,Date startTime,Date endTime) {
|
||||
List<ManageMiningUserPowerDto> resultList = new ArrayList<>();
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
|
||||
// 获取起始和结束时间
|
||||
Date startTime = dataList.get(0).getDate();
|
||||
Date endTime = dataList.get(dataList.size() - 1).getDate();
|
||||
|
||||
calendar.setTime(startTime);
|
||||
Map<Long, ManageMiningUserPowerDto> timeDataMap = new HashMap<>();
|
||||
for (ManageMiningUserPowerDto data : dataList) {
|
||||
@@ -195,6 +199,50 @@ public class ManageUserServiceImpl implements ManageUserService {
|
||||
manageMiningUserPowerVo.getCoin(),
|
||||
manageMiningUserPowerVo.getStartDate(),
|
||||
manageMiningUserPowerVo.getEndDate());
|
||||
return R.success(minerUserOnlineStatus);
|
||||
Date endDate = manageMiningUserPowerVo.getEndDate();
|
||||
Date startDate = manageMiningUserPowerVo.getStartDate();
|
||||
if (manageMiningUserPowerVo.getStartDate()==null || manageMiningUserPowerVo.getEndDate()==null){
|
||||
endDate = DateUtils.getPreviousHalfHourOrFullHour(new Date());
|
||||
startDate = DateUtils.getOneMonthAgo(endDate);
|
||||
}
|
||||
|
||||
return R.success(fillMissingOnlineData(minerUserOnlineStatus, startDate, endDate));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 数据补零 30分钟时间端
|
||||
* @param dataList
|
||||
* @return
|
||||
*/
|
||||
public static List<ManageMiningUserOnlineDto> fillMissingOnlineData(List<ManageMiningUserOnlineDto> dataList,Date startTime,Date endTime) {
|
||||
|
||||
List<ManageMiningUserOnlineDto> resultList = new ArrayList<>();
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
|
||||
|
||||
calendar.setTime(startTime);
|
||||
Map<Long, ManageMiningUserOnlineDto> timeDataMap = new HashMap<>();
|
||||
for (ManageMiningUserOnlineDto data : dataList) {
|
||||
timeDataMap.put(data.getDate().getTime(), data);
|
||||
}
|
||||
|
||||
while (calendar.getTime().getTime() <= endTime.getTime()) {
|
||||
long currentTime = calendar.getTime().getTime();
|
||||
ManageMiningUserOnlineDto data = timeDataMap.get(currentTime);
|
||||
if (data != null) {
|
||||
resultList.add(data);
|
||||
} else {
|
||||
resultList.add(new ManageMiningUserOnlineDto(calendar.getTime(),0, 0));
|
||||
}
|
||||
// 增加 30 分钟
|
||||
calendar.add(Calendar.MINUTE, 30);
|
||||
}
|
||||
|
||||
return resultList;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -40,6 +40,7 @@ public class TranslateUtils {
|
||||
|
||||
|
||||
private static String extractDstFromResponse(String response) {
|
||||
|
||||
try {
|
||||
JsonObject jsonObject = JsonParser.parseString(response).getAsJsonObject();
|
||||
JsonArray transResultArray = jsonObject.getAsJsonArray("trans_result");
|
||||
@@ -48,7 +49,7 @@ public class TranslateUtils {
|
||||
return firstResult.get("dst").getAsString();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
System.out.println("翻译结果解析失败"+e.getMessage());
|
||||
System.out.println("翻译结果解析失败"+e.getMessage()+"翻译结果:"+response);
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
@@ -25,4 +25,10 @@ public class ManageBroadcastVo{
|
||||
|
||||
@ApiModelProperty(value = "内容",example = "广播内容")
|
||||
private String content;
|
||||
|
||||
@ApiModelProperty(value = "按钮内容",example = "按钮内容")
|
||||
private String buttonContent;
|
||||
|
||||
@ApiModelProperty(value = "按钮跳转路径",example = "按钮跳转路径")
|
||||
private String buttonPath;
|
||||
}
|
||||
|
||||
@@ -17,4 +17,5 @@ public class PageVo {
|
||||
|
||||
@ApiModelProperty(value = "每页条数",example = "20")
|
||||
private Integer pageSize;
|
||||
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
uma.coin,
|
||||
uab.balance,
|
||||
uab.active,
|
||||
COALESCE(uab.amount,0),
|
||||
COALESCE(uab.amount,0) as amount,
|
||||
uma.status
|
||||
FROM
|
||||
user_account_balance uab
|
||||
@@ -45,18 +45,14 @@
|
||||
coin = #{coin} AND `user` = #{user}
|
||||
<choose>
|
||||
<when test="startDate != null and endDate != null">
|
||||
and `create_date` >= #{startDate} AND `create_date`<![CDATA[ <= ]]> #{endDate}
|
||||
and `create_date` >= #{startDate} and `create_date`<![CDATA[ <= ]]> #{endDate}
|
||||
</when>
|
||||
|
||||
<otherwise>
|
||||
and `create_date` >= DATE_SUB(NOW(), INTERVAL 1 MONTH)
|
||||
</otherwise>
|
||||
</choose>
|
||||
|
||||
|
||||
</where>
|
||||
|
||||
|
||||
</select>
|
||||
<select id="getHistoryBalance" resultType="com.m2pool.manage.dto.HistoryBalanceDto">
|
||||
SELECT
|
||||
@@ -87,9 +83,15 @@
|
||||
${coin}_users_30m
|
||||
<where>
|
||||
`user` = #{minerUser}
|
||||
<if test="startDate != null and endDate != null">
|
||||
and `date` >= #{startDate} AND `date`<![CDATA[ <= ]]> #{endDate}
|
||||
</if>
|
||||
<choose>
|
||||
<when test="startDate != null and endDate != null">
|
||||
and `date` >= #{startDate} and `date`<![CDATA[ <= ]]> #{endDate}
|
||||
</when>
|
||||
<otherwise>
|
||||
and `date` >= DATE_SUB(NOW(), INTERVAL 1 MONTH)
|
||||
</otherwise>
|
||||
</choose>
|
||||
|
||||
</where>
|
||||
|
||||
</select>
|
||||
@@ -102,9 +104,14 @@
|
||||
${coin}_mhsv2
|
||||
<where>
|
||||
`user` = #{minerUser}
|
||||
<if test="startDate != null and endDate != null">
|
||||
and `date` >= #{startDate} AND `date`<![CDATA[ <= ]]> #{endDate}
|
||||
</if>
|
||||
<choose>
|
||||
<when test="startDate != null and endDate != null">
|
||||
and `date` >= #{startDate} and `date`<![CDATA[ <= ]]> #{endDate}
|
||||
</when>
|
||||
<otherwise>
|
||||
and `date` >= DATE_SUB(NOW(), INTERVAL 1 MONTH)
|
||||
</otherwise>
|
||||
</choose>
|
||||
</where>
|
||||
group by `date`
|
||||
</select>
|
||||
@@ -118,10 +125,20 @@
|
||||
create_user as createUser,
|
||||
update_user as updateUser,
|
||||
update_time as updateTime,
|
||||
create_time as createTime
|
||||
create_time as createTime,
|
||||
button_content as buttonContent,
|
||||
button_path as buttonPath
|
||||
FROM
|
||||
manage_broadcast
|
||||
where del =false
|
||||
</select>
|
||||
<select id="getAccountBalance" resultType="java.math.BigDecimal">
|
||||
SELECT
|
||||
SUM(amount)
|
||||
FROM
|
||||
wallet_in
|
||||
where
|
||||
coin = #{coin} AND `user` = #{user} AND state = 0
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
||||
Reference in New Issue
Block a user