Browse Source

Merge remote-tracking branch 'refs/remotes/origin/lijianlin/feature-20250728171217-三期金豆消费相关' into milestone-20250727-金币重构三期

huangqizheng/feature-20250803175216-导出完毕
lijianlin 2 weeks ago
parent
commit
ed40a383cd
  1. 2
      src/main/java/com/example/demo/Util/BaseDES2.java
  2. 5
      src/main/java/com/example/demo/config/AppConfig.java
  3. 12
      src/main/java/com/example/demo/controller/bean/BeanConsumeController.java
  4. 26
      src/main/java/com/example/demo/domain/vo/bean/BeanConsume.java
  5. 2
      src/main/java/com/example/demo/mapper/bean/BeanUserMapper.java
  6. 9
      src/main/java/com/example/demo/service/bean/BeanConsumeService.java
  7. 76
      src/main/java/com/example/demo/serviceImpl/bean/BeanAuditServiceImpl.java
  8. 87
      src/main/java/com/example/demo/serviceImpl/bean/BeanConsumeServiceImpl.java
  9. 2
      src/main/java/com/example/demo/serviceImpl/bean/BeanUserServiceImpl.java
  10. 3
      src/main/resources/application-dev.yml
  11. 2
      src/main/resources/application-prod.yml
  12. 2
      src/main/resources/application-test.yml
  13. 3
      src/main/resources/application.yml
  14. 7
      src/main/resources/mapper/AuditMapper.xml

2
src/main/java/com/example/demo/Util/BaseDES2.java

@ -91,7 +91,7 @@ public class BaseDES2 {
public static void main(String args[]) {
try {
BaseDES2 d = new BaseDES2();
String encryptedText = d.encrypt("30003761");
String encryptedText = d.encrypt("90035176");
System.out.println("加密结果:" + encryptedText);
} catch (Exception e) {
e.printStackTrace();

5
src/main/java/com/example/demo/config/AppConfig.java

@ -2,6 +2,7 @@ package com.example.demo.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.client.RestTemplate;
@Configuration
@ -9,6 +10,8 @@ public class AppConfig {
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
return restTemplate;
}
}

12
src/main/java/com/example/demo/controller/bean/BeanConsumeController.java

@ -1,6 +1,8 @@
package com.example.demo.controller.bean;
import com.example.demo.domain.vo.bean.BeanConsume;
import com.example.demo.domain.vo.bean.BeanConsumeGold;
import com.example.demo.domain.vo.bean.BeanRecharge;
import com.example.demo.domain.vo.coin.Page;
import com.example.demo.domain.vo.coin.Result;
import com.example.demo.service.bean.BeanConsumeService;
@ -45,6 +47,16 @@ public class BeanConsumeController {
return Result.success(deptList);
}
//减少金豆
@PostMapping("/reduce")
public Result reduce(@RequestBody BeanConsume consume) {
try {
return beanConsumeService.reduce(consume);
} catch (Exception e) {
return Result.error("减少失败");
}
}
//筛选查询直播消费记录
@PostMapping("/selectLiveBy")
public Result selectLiveBy(@RequestBody Page page){

26
src/main/java/com/example/demo/domain/vo/bean/BeanConsume.java

@ -0,0 +1,26 @@
package com.example.demo.domain.vo.bean;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @program: gold-java
* @ClassName BeanConsume
* @description:
* @author: Ethan
* @create: 202508-02 11:32
* @Version 1.0
**/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class BeanConsume {
private Integer id;//id
private String jwcode; // 精网号
private Integer freeBean; // 免费豆
private Integer permanentBean; // 永久豆
private String remark; //备注
private Integer money; // 金额
private String adminName; // 管理员名称
}

2
src/main/java/com/example/demo/mapper/bean/BeanUserMapper.java

@ -23,7 +23,7 @@ public interface BeanUserMapper {
List<BeanUser> selectUserBy(@Param("beanUser") BeanUser beanUser);
//查询用户卡片
BeanUserCard userCard(@Param("jwcode")String jwcode, @Param("markets")List<String> markets);
BeanUserCard userCard(@Param("jwcode")String jwcode);
//查询客户金豆余额合计
BeanUserCard SumUserBy(@Param("beanUser")BeanUser beanUser);
//查询客户分部

9
src/main/java/com/example/demo/service/bean/BeanConsumeService.java

@ -3,6 +3,7 @@ package com.example.demo.service.bean;
import com.example.demo.domain.vo.bean.*;
import com.example.demo.domain.vo.coin.Gold;
import com.example.demo.domain.vo.coin.Page;
import com.example.demo.domain.vo.coin.Result;
import java.util.List;
@ -18,6 +19,10 @@ import java.util.List;
public interface BeanConsumeService {
//获取消费用户的分部
List<String> getDept();
//获取直播客户地区
List<String> getLiveDept();
//减少金豆
Result reduce(BeanConsume consume);
//筛选查询直播消费
Object selectLiveBy(Integer pageNum, Integer pageSize, BeanConsumeLive beanConsumeLive);
//筛选查询铁粉消费
@ -31,6 +36,6 @@ public interface BeanConsumeService {
//获取直播频道
List<String> getLiveChannel();
//获取直播客户地区
List<String> getLiveDept();
}

76
src/main/java/com/example/demo/serviceImpl/bean/BeanAuditServiceImpl.java

@ -1,5 +1,6 @@
package com.example.demo.serviceImpl.bean;
import com.example.demo.Util.BaseDES2;
import com.example.demo.domain.vo.bean.BeanAuditInfo;
import com.example.demo.domain.vo.bean.BeanRechargeInfo;
import com.example.demo.domain.vo.bean.GoldBean;
@ -11,13 +12,22 @@ import com.github.pagehelper.PageInfo;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
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;
/**
@ -41,7 +51,7 @@ public class BeanAuditServiceImpl implements BeanAuditService {
// 2. 构建接口URL及参数
@Value("${file.upload.url}")
@Value("${bean.url}")
String apiUrl;
//查找审核信息
@ -57,36 +67,50 @@ public class BeanAuditServiceImpl implements BeanAuditService {
public Result updateStatus1(BeanAuditInfo info) {
BeanAuditInfo beanAuditInfo = beanAuditMapper.selectById(info.getId());
String jwcode = beanAuditInfo.getJwcode().toString();
String op = "recharge"; // 操作类型根据实际业务定义例如"recharge"表示充值
// String jwcode = "2e35cadd48a15cc4cd834d35e38faa71";
try {
BaseDES2 d = new BaseDES2();
jwcode = d.encrypt(jwcode);
} catch (Exception e) {
return Result.error("加密失败");
}
String content = beanAuditInfo.getRemark(); // 备注作为content参数
String orderNo = UUID.randomUUID().toString().replace("-", ""); // 生成唯一订单号去除横线
UriComponentsBuilder urlBuilder1 = UriComponentsBuilder.fromHttpUrl(apiUrl)
.queryParam("jwcode", jwcode)
.queryParam("op", op)
.queryParam("gold", beanAuditInfo.getFreeBean())
.queryParam("content", content);
UriComponentsBuilder urlBuilder2 = UriComponentsBuilder.fromHttpUrl(apiUrl)
.queryParam("jwcode", jwcode)
.queryParam("op", op)
.queryParam("gold", beanAuditInfo.getPermanentBean())
.queryParam("content", content)
.queryParam("order_no", orderNo);
// 3. 发送GET请求
ResponseEntity<String> response1 = restTemplate.getForEntity(urlBuilder1.toUriString(), String.class);
// 4. 处理响应结果
if (!response1.getStatusCode().is2xxSuccessful()) {
return Result.error("免费远程接口调用失败,状态码:" + response1.getStatusCodeValue());
}
// 3. 发送GET请求
ResponseEntity<String> response2 = restTemplate.getForEntity(urlBuilder2.toUriString(), String.class);
// 1. 创建请求参数对象使用Map或自定义实体类
Map<String, String> params = new HashMap<>();
params.put("jwcode", jwcode);
params.put("gold_buy", beanAuditInfo.getPermanentBean().toString());
params.put("gold_free", beanAuditInfo.getFreeBean().toString());
params.put("content", content);
params.put("order_no", orderNo);
// 2. 构建请求头指定Content-Type为JSON
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON); // 关键设置为JSON格式
// 4. 处理响应结果
if (!response2.getStatusCode().is2xxSuccessful()) {
return Result.error("付费远程接口调用失败,状态码:" + response2.getStatusCodeValue());
// 3. 构建请求实体参数+头信息
HttpEntity<Map<String, String>> requestEntity = new HttpEntity<>(params, headers);
try {
// 4. 发送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());
}
beanAuditMapper.updateStatus1(info);
return Result.success();

87
src/main/java/com/example/demo/serviceImpl/bean/BeanConsumeServiceImpl.java

@ -1,19 +1,21 @@
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.Page;
import com.example.demo.domain.vo.coin.RechargeAudit;
import com.example.demo.domain.vo.coin.RechargeUser;
import com.example.demo.domain.vo.coin.*;
import com.example.demo.mapper.bean.BeanConsumeMapper;
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.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.util.UriComponentsBuilder;
import java.util.List;
import java.util.UUID;
/**
* @program: gold-java
@ -29,6 +31,11 @@ public class BeanConsumeServiceImpl implements BeanConsumeService {
private BeanConsumeMapper beanConsumeMapper;
@Autowired
private LiveMapper liveMapper;
@Autowired
private UserMapper userMapper;
@Autowired
private RestTemplate restTemplate;
//获取消费用户分部
@Override
@ -36,6 +43,72 @@ public class BeanConsumeServiceImpl implements BeanConsumeService {
List<String> deptList = beanConsumeMapper.getDept();
return deptList;
}
//获取直播消费客户分部
@Override
public List<String> getLiveDept() {
List<String> liveDeptList = liveMapper.getDept();
return liveDeptList;
}
//减少金豆
@Override
public Result reduce(BeanConsume consume) {
try {
// 验证精网号是否有效
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");
}
// 验证备注是否为空
if (consume.getRemark() == null || consume.getRemark().toString().isEmpty()) {
return Result.error("备注不能为空");
}
if(consume.getAdminName() == null || consume.getAdminName().toString().isEmpty()){
return Result.error("管理员名称不能为空");
}
GoldUser goldUser = userMapper.selectUser(consume.getJwcode().toString());
if(goldUser==null){
return Result.error("用户不存在");
}
// String jwcode = consume.getJwcode();
String jwcode = "2e35cadd48a15cc4cd834d35e38faa71";
String op = "cost"; // 操作类型根据实际业务定义例如"recharge"表示充值
String content = consume.getRemark(); // 备注作为content参数
String orderNo = UUID.randomUUID().toString().replace("-", ""); // 生成唯一订单号去除横线
// 2. 构建接口URL及参数
String apiUrl = "http://39.101.133.168:8828/mock/61/hljw/api/user/gold";
UriComponentsBuilder urlBuilder = UriComponentsBuilder.fromHttpUrl(apiUrl)
.queryParam("jwcode", jwcode)
.queryParam("op", op)
.queryParam("gold", consume.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 Object selectLiveBy(Integer pageNum, Integer pageSize, BeanConsumeLive beanConsumeLive) {
@ -87,9 +160,5 @@ public class BeanConsumeServiceImpl implements BeanConsumeService {
return liveMapper.getLiveChannel();
}
@Override
public List<String> getLiveDept() {
List<String> liveDeptList = liveMapper.getDept();
return liveDeptList;
}
}

2
src/main/java/com/example/demo/serviceImpl/bean/BeanUserServiceImpl.java

@ -45,7 +45,7 @@ public class BeanUserServiceImpl implements BeanUserService {
Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class);
if (admin != null) {
List<String> list = Arrays.asList(admin.getMarkets().split(","));
BeanUserCard user = beanUserMapper.userCard(jwcode,list);
BeanUserCard user = beanUserMapper.userCard(jwcode);
return Result.success(user);
}
else{

3
src/main/resources/application-dev.yml

@ -51,7 +51,8 @@ file:
feishu:
webhook:
url: https://open.feishu.cn/open-apis/bot/v2/hook/384c78aa-8df1-498b-9c47-04e890ed9877
bean:
url: http://39.101.133.168:8828/hljwgo/api/wallet/recharge
server:
port: 8081

2
src/main/resources/application-prod.yml

@ -54,7 +54,7 @@ feishu:
url: https://open.feishu.cn/open-apis/bot/v2/hook/1a515b19-b64f-46b7-9486-35842b9539fe
bean:
url: http://47.92.148.30:3003/mock/61/hljw/api/user/gold
url: http://39.101.133.168:8828/hljwgo/api/wallet/recharge
server:
port: 10704

2
src/main/resources/application-test.yml

@ -54,7 +54,7 @@ feishu:
url: https://open.feishu.cn/open-apis/bot/v2/hook/384c78aa-8df1-498b-9c47-04e890ed9877
bean:
url: http://47.92.148.30:3003/mock/61/hljw/api/user/gold
url: http://39.101.133.168:8828/hljwgo/api/wallet/recharge
server:
port: 8081

3
src/main/resources/application.yml

@ -103,7 +103,8 @@ file:
upload:
url: http://39.101.133.168:8828/hljw/api/aws/upload
bean:
url: http://47.92.148.30:3003/mock/61/hljw/api/user/gold
# url: http://47.92.148.30:3003/mock/61/hljw/api/user/gold
url: http://39.101.133.168:8828/hljwgo/api/wallet/recharge
server:
port: 8081

7
src/main/resources/mapper/AuditMapper.xml

@ -47,13 +47,14 @@
SELECT ugr.*,
(COALESCE(ugr.free_june, 0) + COALESCE(ugr.free_december, 0)) AS freeGold,
u.name as name,
u.market as market,
m.name as market,
a1.admin_name as adminName,
a2.admin_name as auditName
FROM user_gold_record as ugr
LEFT JOIN user u ON ugr.jwcode = u.jwcode
LEFT JOIN admin a1 ON ugr.admin_id = a1.id
LEFT JOIN admin a2 ON ugr.audit_id = a2.id
left join market m ON u.market = m.id
<where>
<if test="rechargeAudit.jwcode != null and rechargeAudit.jwcode != ''">
AND ugr.jwcode = #{rechargeAudit.jwcode}
@ -64,7 +65,7 @@
<if test="rechargeAudit.markets != null and rechargeAudit.markets.size() > 0 and '1' not in rechargeAudit.markets">
AND (
<foreach collection="rechargeAudit.markets" item="market" separator=" OR ">
u.market LIKE CONCAT('%', #{market}, '%')
m.name LIKE CONCAT('%', #{market}, '%')
</foreach>
)
</if>
@ -75,7 +76,7 @@
AND ugr.rate_id = #{rechargeAudit.rateId}
</if>-->
<if test="rechargeAudit.market != null and rechargeAudit.market != ''">
AND u.market = #{rechargeAudit.market}
AND m.name = #{rechargeAudit.market}
</if>
<if test="rechargeAudit.startTime != null and rechargeAudit.endTime != null ">
AND ugr.pay_time between #{rechargeAudit.startTime} and #{rechargeAudit.endTime}

Loading…
Cancel
Save