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.
205 lines
7.8 KiB
205 lines
7.8 KiB
package com.example.demo.serviceImpl.bean;
|
|
|
|
import com.example.demo.Util.BaseDES2;
|
|
import com.example.demo.domain.vo.bean.*;
|
|
import com.example.demo.domain.vo.coin.*;
|
|
import com.example.demo.mapper.bean.BeanConsumeMapper;
|
|
import com.example.demo.mapper.bean.BeanUserMapper;
|
|
import com.example.demo.mapper.coin.UserMapper;
|
|
import com.example.demo.mapper.live.LiveMapper;
|
|
import com.example.demo.service.bean.BeanConsumeService;
|
|
import com.github.pagehelper.PageHelper;
|
|
import com.github.pagehelper.PageInfo;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
import org.springframework.http.HttpEntity;
|
|
import org.springframework.http.HttpHeaders;
|
|
import org.springframework.http.MediaType;
|
|
import org.springframework.http.ResponseEntity;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
import org.springframework.web.client.RestClientException;
|
|
import org.springframework.web.client.RestTemplate;
|
|
import org.springframework.web.util.UriComponentsBuilder;
|
|
|
|
import java.util.HashMap;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.UUID;
|
|
|
|
/**
|
|
* @program: gold-java
|
|
* @ClassName BeanConsumeServiceImpl
|
|
* @description:
|
|
* @author: Ethan
|
|
* @create: 2025−07-30 11:53
|
|
* @Version 1.0
|
|
**/
|
|
@Service
|
|
public class BeanConsumeServiceImpl implements BeanConsumeService {
|
|
@Autowired
|
|
private BeanConsumeMapper beanConsumeMapper;
|
|
@Autowired
|
|
private LiveMapper liveMapper;
|
|
@Autowired
|
|
private UserMapper userMapper;
|
|
@Autowired
|
|
private RestTemplate restTemplate;
|
|
// 构建接口URL及参数
|
|
@Value("${bean.consume.url}")
|
|
String apiUrl;
|
|
@Autowired
|
|
private BeanUserMapper beanUserMapper;
|
|
|
|
//获取消费用户分部
|
|
@Override
|
|
public List<String> getDept() {
|
|
List<String> deptList = beanConsumeMapper.getDept();
|
|
return deptList;
|
|
}
|
|
//获取直播消费客户分部
|
|
@Override
|
|
public List<String> getLiveDept() {
|
|
List<String> liveDeptList = liveMapper.getDept();
|
|
return liveDeptList;
|
|
}
|
|
//减少金豆
|
|
@Transactional
|
|
@Override
|
|
public Result reduce(BeanConsume consume) {
|
|
|
|
|
|
// 验证精网号是否有效
|
|
if (consume.getJwcode() == null || consume.getJwcode().isEmpty()) {
|
|
return Result.error("精网号不能为空");
|
|
}
|
|
|
|
// 验证免费豆和永久豆是否为非负数
|
|
if (consume.getFreeBean() < 0 || consume.getPermanentBean() < 0) {
|
|
return Result.error("免费豆和永久豆不能为负数");
|
|
}
|
|
// 验证免费豆和永久豆是否为非负数
|
|
if (consume.getFreeBean() > 999999 || consume.getPermanentBean() > 999999) {
|
|
return Result.error("免费豆和永久豆不能超过999999");
|
|
}
|
|
// 验证免费豆和永久豆是否均为0
|
|
if (consume.getFreeBean() == 0 && consume.getPermanentBean() == 0) {
|
|
return Result.error("免费豆和永久豆不能同时为0");
|
|
}
|
|
//获取用户当前余额
|
|
BeanUserCard user= beanUserMapper.userCard(consume.getJwcode());
|
|
if (user.getFreeBean() < consume.getFreeBean()) {
|
|
return Result.error("用户免费金豆余额不足");
|
|
}
|
|
if (user.getPermanentBean() < consume.getPermanentBean()) {
|
|
return Result.error("用户永久金豆余额不足");
|
|
}
|
|
// 验证备注是否为空
|
|
if (consume.getRemark() == null || consume.getRemark().isEmpty()) {
|
|
return Result.error("备注不能为空");
|
|
}
|
|
|
|
String jwcode = consume.getJwcode();
|
|
//String jwcode = "1bf7194c2dc63c45cd834d35e38faa71";
|
|
try {
|
|
BaseDES2 d = new BaseDES2();
|
|
jwcode = d.encrypt(jwcode);
|
|
} catch (Exception e) {
|
|
return Result.error("加密失败");
|
|
}
|
|
String content = consume.getRemark(); // 备注作为content参数
|
|
|
|
|
|
// 2. 创建请求参数对象(使用Map或自定义实体类)
|
|
Map<String, String> params = new HashMap<>();
|
|
params.put("jwcode", jwcode);
|
|
int total = consume.getPermanentBean() + consume.getFreeBean();
|
|
params.put("total", String.valueOf(total));
|
|
params.put("buy", consume.getPermanentBean().toString());
|
|
params.put("free", consume.getFreeBean().toString());
|
|
params.put("content", content);
|
|
|
|
// 3. 构建请求头,指定Content-Type为JSON
|
|
HttpHeaders headers = new HttpHeaders();
|
|
headers.setContentType(MediaType.APPLICATION_JSON); // 关键:设置为JSON格式
|
|
|
|
// 4. 构建请求实体(参数+头信息)
|
|
HttpEntity<Map<String, String>> requestEntity = new HttpEntity<>(params, headers);
|
|
|
|
try {
|
|
// 5. 发送POST请求
|
|
ResponseEntity<String> response = restTemplate.postForEntity(
|
|
apiUrl,
|
|
requestEntity,
|
|
String.class
|
|
);
|
|
|
|
System.out.println("请求参数:" + params);
|
|
System.out.println("响应状态码:" + response.getStatusCodeValue());
|
|
System.out.println("响应内容:" + response.getBody());
|
|
|
|
if (!response.getStatusCode().is2xxSuccessful()) {
|
|
return Result.error("远程接口接口调用失败,状态码:" + response.getStatusCodeValue() + ",响应:" + response.getBody());
|
|
}
|
|
} catch (RestClientException e) {
|
|
e.printStackTrace();
|
|
return Result.error("请求发送失败:" + e.getMessage());
|
|
}
|
|
|
|
return Result.success();
|
|
|
|
|
|
}
|
|
//筛选查询直播消费
|
|
@Override
|
|
public Object selectLiveBy(Integer pageNum, Integer pageSize, BeanConsumeLive beanConsumeLive) {
|
|
PageHelper.startPage(pageNum, pageSize);
|
|
List<BeanConsumeLive> beanConsumeLives = liveMapper.selectLiveBy(beanConsumeLive);
|
|
return new PageInfo<>(beanConsumeLives);
|
|
}
|
|
//筛选查询铁粉消费
|
|
@Override
|
|
public Object selectFanBy(Integer pageNum, Integer pageSize, BeanConsumeFan beanConsumeFan) {
|
|
PageHelper.startPage(pageNum, pageSize);
|
|
List<BeanConsumeFan> beanConsumeFans = beanConsumeMapper.selectFanBy(beanConsumeFan);
|
|
return new PageInfo<>(beanConsumeFans);
|
|
}
|
|
//筛选查询文章消费
|
|
@Override
|
|
public Object selectArticleBy(Integer pageNum, Integer pageSize, BeanConsumeArticle beanConsumeArticle) {
|
|
PageHelper.startPage(pageNum, pageSize);
|
|
List<BeanConsumeArticle> beanConsumeArticles = beanConsumeMapper.selectArticleBy(beanConsumeArticle);
|
|
return new PageInfo<>(beanConsumeArticles);
|
|
}
|
|
|
|
@Override
|
|
public BeanConsumeGold sumConsumeGold(Page page) {
|
|
BeanConsumeGold gold = new BeanConsumeGold();
|
|
Integer payType = page.getPayType();
|
|
if (payType==1) {
|
|
//直播消费合计
|
|
gold = liveMapper.selectSumLiveBy(page.getBeanConsumeLive());
|
|
}else if (payType==7) {
|
|
//充值消费合计
|
|
gold = beanConsumeMapper.selectSumFansBy(page.getBeanConsumeFan());
|
|
}else if (payType==8) {
|
|
//文章消费合计
|
|
gold = beanConsumeMapper.selectSumArticleBy(page.getBeanConsumeArticle());
|
|
}
|
|
|
|
return gold;
|
|
}
|
|
//查询直播礼物
|
|
@Override
|
|
public List<String> getLiveGift() {
|
|
|
|
return liveMapper.getLiveGift();
|
|
}
|
|
//查询直播全部频道
|
|
@Override
|
|
public List<String> getLiveChannel() {
|
|
return liveMapper.getLiveChannel();
|
|
}
|
|
|
|
|
|
}
|