You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
223 lines
8.9 KiB
223 lines
8.9 KiB
package com.example.demo.serviceImpl.bean;
|
|
|
|
import com.example.demo.domain.vo.bean.*;
|
|
import com.example.demo.domain.vo.coin.Gold;
|
|
import com.example.demo.domain.vo.coin.GoldUser;
|
|
import com.example.demo.domain.vo.coin.RechargeUser;
|
|
import com.example.demo.domain.vo.coin.Result;
|
|
import com.example.demo.mapper.bean.BeanRechargeMapper2;
|
|
import com.example.demo.mapper.bean.BeanUserMapper;
|
|
import com.example.demo.mapper.coin.BeanRechargeMapper1;
|
|
import com.example.demo.mapper.coin.UserMapper;
|
|
import com.example.demo.mapper.pay.BeanRechargeMapper3;
|
|
import com.example.demo.service.bean.BeanRechargeService;
|
|
import com.github.pagehelper.PageHelper;
|
|
import com.github.pagehelper.PageInfo;
|
|
import lombok.RequiredArgsConstructor;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.http.ResponseEntity;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.web.client.RestTemplate;
|
|
import org.springframework.web.util.UriComponentsBuilder;
|
|
|
|
import java.math.BigDecimal;
|
|
import java.math.RoundingMode;
|
|
import java.util.List;
|
|
import java.util.Objects;
|
|
import java.util.UUID;
|
|
import java.util.stream.Collectors;
|
|
|
|
/**
|
|
* @program: gold-java
|
|
* @ClassName BeanRechargeServiceImpl
|
|
* @description:
|
|
* @author: Double
|
|
* @create: 2025−07-29 16:47
|
|
* @Version 1.0
|
|
**/
|
|
@Service
|
|
@RequiredArgsConstructor
|
|
public class BeanRechargeServiceImpl implements BeanRechargeService {
|
|
|
|
@Autowired
|
|
private RestTemplate restTemplate;
|
|
|
|
@Autowired
|
|
private BeanRechargeMapper2 beanRechargeMapper2;
|
|
|
|
@Autowired
|
|
private BeanRechargeMapper1 beanRechargeMapper1;
|
|
|
|
@Autowired
|
|
private BeanRechargeMapper3 beanRechargeMapper3;
|
|
|
|
@Autowired
|
|
private UserMapper userMapper;
|
|
|
|
@Autowired
|
|
private BeanUserMapper beanUserMapper;
|
|
|
|
//新增金豆
|
|
@Override
|
|
public Result add(BeanRecharge recharge) {
|
|
try {
|
|
// 验证精网号是否有效
|
|
if (recharge.getJwcode() == null || recharge.getJwcode().toString().isEmpty()) {
|
|
return Result.error("精网号不能为空");
|
|
}
|
|
if(recharge.getJwcode()<10000000||recharge.getJwcode()>99999999)
|
|
{
|
|
return Result.error("精网号位数小于8位或大于8位");
|
|
}
|
|
// 验证免费豆和永久豆是否为非负数
|
|
if (recharge.getFreeBean() < 0 || recharge.getPermanentBean() < 0) {
|
|
return Result.error("免费豆和永久豆不能为负数");
|
|
}
|
|
// 验证免费豆和永久豆是否为非负数
|
|
if (recharge.getFreeBean() > 999999 || recharge.getPermanentBean() > 999999) {
|
|
return Result.error("免费豆和永久豆不能超过999999");
|
|
}
|
|
// 验证免费豆和永久豆是否均为0
|
|
if (recharge.getFreeBean() == 0 && recharge.getPermanentBean() == 0) {
|
|
return Result.error("免费豆和永久豆不能同时为0");
|
|
}
|
|
BeanUserCard user = beanUserMapper.userCard(String.valueOf(recharge.getJwcode()));
|
|
if(user==null){
|
|
return Result.error("用户查找不到");
|
|
}
|
|
// 验证备注是否为空
|
|
if (recharge.getRemark() == null || recharge.getRemark().toString().isEmpty()) {
|
|
return Result.error("备注不能为空");
|
|
}
|
|
if(recharge.getAdminName() == null || recharge.getAdminName().toString().isEmpty()){
|
|
return Result.error("管理员名称不能为空");
|
|
}
|
|
|
|
beanRechargeMapper1.add(recharge);
|
|
// String jwcode = recharge.getJwcode().toString();
|
|
// String op = "recharge"; // 操作类型(根据实际业务定义,例如"recharge"表示充值)
|
|
// String content = recharge.getRemark(); // 备注作为content参数
|
|
// String orderNo = UUID.randomUUID().toString().replace("-", ""); // 生成唯一订单号(去除横线)
|
|
//
|
|
// // 2. 构建接口URL及参数
|
|
// String apiUrl = "http://47.92.148.30:3003/mock/61/hljw/api/user/gold";
|
|
// UriComponentsBuilder urlBuilder = UriComponentsBuilder.fromHttpUrl(apiUrl)
|
|
// .queryParam("jwcode", jwcode)
|
|
// .queryParam("op", op)
|
|
// .queryParam("gold", recharge.getPermanentBean())
|
|
// .queryParam("content", content)
|
|
// .queryParam("order_no", orderNo);
|
|
//
|
|
// // 3. 发送GET请求
|
|
// ResponseEntity<String> response = restTemplate.getForEntity(urlBuilder.toUriString(), String.class);
|
|
//
|
|
// // 4. 处理响应结果
|
|
// if (!response.getStatusCode().is2xxSuccessful()) {
|
|
// return Result.error("远程接口调用失败,状态码:" + response.getStatusCodeValue());
|
|
// }
|
|
return Result.success("添加成功");
|
|
} catch (Exception e) {
|
|
return Result.error("系统异常:" + e.getMessage());
|
|
}
|
|
}
|
|
|
|
//系统充值明细
|
|
@Override
|
|
public PageInfo<BeanSystemRechargeInfo> selectBySystem(Integer pageNum, Integer pageSize, BeanSystemRechargeInfo beanSystemRechargeInfo){
|
|
PageHelper.startPage(pageNum, pageSize);
|
|
List<BeanSystemRechargeInfo> beanSystemRechargeInfos = beanRechargeMapper2.selectBySystem(beanSystemRechargeInfo);
|
|
return new PageInfo<>(beanSystemRechargeInfos);
|
|
}
|
|
|
|
//统计系统金豆记录
|
|
@Override
|
|
public GoldBean statsSystemBean(BeanSystemRechargeInfo beanSystemRechargeInfo) {
|
|
GoldBean gold = new GoldBean();
|
|
List<BeanSystemRechargeInfo> beanSystemRechargeInfos = beanRechargeMapper2.selectBySystem(beanSystemRechargeInfo);
|
|
|
|
// 初始化累加器
|
|
int permanentGoldSum = 0;
|
|
int freeGoldSum = 0;
|
|
BigDecimal moneySum = new BigDecimal("0.0");
|
|
|
|
// 遍历充值记录并累加金币
|
|
for (BeanSystemRechargeInfo info : beanSystemRechargeInfos) {
|
|
// 累加永久金币
|
|
if (info.getPermanentBean() != null) {
|
|
permanentGoldSum += info.getPermanentBean();
|
|
}
|
|
// 累加免费金币
|
|
if (info.getFreeBean() != null) {
|
|
freeGoldSum += info.getFreeBean();
|
|
}
|
|
}
|
|
moneySum = new BigDecimal(permanentGoldSum).divide(new BigDecimal("50"), 2, RoundingMode.HALF_UP);
|
|
// 将累加结果设置到Gold对象
|
|
gold.setPermanentBean(permanentGoldSum);
|
|
gold.setFreeBean(freeGoldSum);
|
|
gold.setMoney(moneySum.doubleValue());
|
|
gold.setBeanNum(permanentGoldSum+freeGoldSum);
|
|
return gold;
|
|
}
|
|
|
|
@Override
|
|
public List<String> systemMarket() {
|
|
List<String> list = beanRechargeMapper2.systemMarket();
|
|
// 使用 Java 8 的 Stream API 过滤 null 和空字符串
|
|
List<String> filteredList = list.stream()
|
|
.filter(Objects::nonNull) // 过滤掉 null 值
|
|
.filter(str -> !str.trim().isEmpty()) // 过滤掉空字符串和仅包含空白字符的字符串
|
|
.collect(Collectors.toList());
|
|
return filteredList;
|
|
}
|
|
|
|
//线上充值明细
|
|
@Override
|
|
public PageInfo<BeanOnlineRechargeInfo> selectByOnline(Integer pageNum, Integer pageSize, BeanOnlineRechargeInfo beanOnlineRechargeInfo){
|
|
PageHelper.startPage(pageNum, pageSize);
|
|
List<BeanOnlineRechargeInfo> beanOnlineRechargeInfos = beanRechargeMapper3.selectByOnline(beanOnlineRechargeInfo);
|
|
return new PageInfo<>(beanOnlineRechargeInfos);
|
|
}
|
|
|
|
//统计线上金豆记录
|
|
@Override
|
|
public GoldBean statsOnlineBean(BeanOnlineRechargeInfo beanOnlineRechargeInfo) {
|
|
GoldBean gold = new GoldBean();
|
|
List<BeanOnlineRechargeInfo> beanOnlineRechargeInfos = beanRechargeMapper3.selectByOnline(beanOnlineRechargeInfo);
|
|
|
|
// 初始化累加器
|
|
int countSum = 0;
|
|
BigDecimal moneySum = new BigDecimal("0.0");
|
|
|
|
// 遍历充值记录并累加金币
|
|
for (BeanOnlineRechargeInfo info : beanOnlineRechargeInfos) {
|
|
// 累加数量
|
|
if (info.getNum() != null) {
|
|
countSum += info.getNum();
|
|
}
|
|
// 累加金额
|
|
if (info.getMoney() != null) {
|
|
moneySum = moneySum.add(new BigDecimal(info.getMoney().toString()));
|
|
}
|
|
}
|
|
|
|
// 将累加结果设置到Gold对象
|
|
gold.setBeanNum(countSum);
|
|
gold.setMoney(moneySum.doubleValue());
|
|
return gold;
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
public List<String> onlineMarket() {
|
|
List<String> list = beanRechargeMapper3.onlineMarket();
|
|
// 使用 Java 8 的 Stream API 过滤 null 和空字符串
|
|
List<String> filteredList = list.stream()
|
|
.filter(Objects::nonNull) // 过滤掉 null 值
|
|
.filter(str -> !str.trim().isEmpty()) // 过滤掉空字符串和仅包含空白字符的字符串
|
|
.collect(Collectors.toList());
|
|
return filteredList;
|
|
}
|
|
|
|
}
|