Browse Source

Merge branch 'milestone-20250727-金币重构三期' of http://39.101.133.168:8807/huangqizhen/gold-java into milestone-20250727-金币重构三期

lihuilin/hotfix-20250810160509-余额地区传参
lihuilin 2 weeks ago
parent
commit
276978169d
  1. 76
      src/main/java/com/example/demo/controller/bean/BeanAuditController.java
  2. 2
      src/main/java/com/example/demo/controller/bean/BeanRechargeController.java
  3. 48
      src/main/java/com/example/demo/domain/vo/bean/BeanAuditInfo.java
  4. 1
      src/main/java/com/example/demo/domain/vo/coin/Page.java
  5. 31
      src/main/java/com/example/demo/mapper/coin/BeanAuditMapper.java
  6. 24
      src/main/java/com/example/demo/service/bean/BeanAuditService.java
  7. 98
      src/main/java/com/example/demo/serviceImpl/bean/BeanAuditServiceImpl.java
  8. 8
      src/main/java/com/example/demo/serviceImpl/bean/BeanRechargeServiceImpl.java
  9. 1
      src/main/java/com/example/demo/serviceImpl/coin/ExportExcelServiceImpl.java
  10. 2
      src/main/resources/application-dev.yml
  11. 3
      src/main/resources/application-prod.yml
  12. 3
      src/main/resources/application-test.yml
  13. 5
      src/main/resources/application.yml
  14. 93
      src/main/resources/mapper/BeanAuditMapper.xml

76
src/main/java/com/example/demo/controller/bean/BeanAuditController.java

@ -0,0 +1,76 @@
package com.example.demo.controller.bean;
import com.example.demo.domain.vo.bean.BeanAuditInfo;
import com.example.demo.domain.vo.coin.Page;
import com.example.demo.domain.vo.coin.Result;
import com.example.demo.service.bean.BeanAuditService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* @program: gold-java
* @ClassName BeanAuditController
* @description:
* @author: Double
* @create: 202508-01 11:03
* @Version 1.0
**/
@RestController
@RequestMapping("/beanAudit")
@RequiredArgsConstructor
@Slf4j
@CrossOrigin
public class BeanAuditController {
@Autowired
private BeanAuditService beanAuditService;
//审核查找
@PostMapping("/selectBy")
public Result selectBy(@RequestBody Page page) {
try {
if (ObjectUtils.isEmpty(page.getPageNum())) {
return Result.error("页码数为空!");
}
if (ObjectUtils.isEmpty(page.getPageSize())) {
return Result.error("页大小为空!");
} else {
if (page.getBeanAuditInfo().getStatus() == null) {
return Result.error("状态不能为空");
}
return Result.success(beanAuditService.selectBy(page.getPageNum(), page.getPageSize(), page.getBeanAuditInfo()));
}
} catch (Exception e) {
e.printStackTrace();
return Result.error("请检查筛选数据的格式");
}
}
@PostMapping("/status1")
public Result updateStatus1(@RequestBody BeanAuditInfo beanAuditInfo) {
try {
return beanAuditService.updateStatus1(beanAuditInfo.getId());
} catch (Exception e) {
e.printStackTrace();
return Result.error("更新失败,查看id");
}
}
@PostMapping("/status2")
public Result updateStatus2(@RequestBody BeanAuditInfo beanAuditInfo) {
try {
beanAuditService.updateStatus2(beanAuditInfo.getId());
return Result.success();
} catch (Exception e) {
return Result.error("更新失败,查看id");
}
}
}

2
src/main/java/com/example/demo/controller/bean/BeanRechargeController.java

@ -12,6 +12,8 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.ObjectUtils; import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.List;
/** /**
* @program: gold-java * @program: gold-java
* @ClassName BeanRechrageController * @ClassName BeanRechrageController

48
src/main/java/com/example/demo/domain/vo/bean/BeanAuditInfo.java

@ -0,0 +1,48 @@
package com.example.demo.domain.vo.bean;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* @program: gold-java
* @ClassName BeanAuditInfo
* @description:
* @author: Double
* @create: 202508-01 11:33
* @Version 1.0
**/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class BeanAuditInfo {
private Long id; // id
private Integer jwcode; // 精网号
private String name; // 姓名
private String market; // 所属地区
private Integer freeBean; // 免费豆
private Integer permanentBean; // 永久豆
private String remark; // 备注
private String submitName; // 提交人名称
private String auditName; // 审核人名称
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date createTime; //创建时间
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date auditTime; //审核时间
private String status; // 状态
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date createStartTime; // 开始时间
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date createEndTime; // 结束时间
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date auditStartTime; // 开始时间
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date auditEndTime; // 结束时间
private String sortField; // 排序字段
private String sortOrder; // 排序顺序
}

1
src/main/java/com/example/demo/domain/vo/coin/Page.java

@ -38,4 +38,5 @@ public class Page {
private BeanConsumeGold beanConsumeGold; //金豆消费合计数 private BeanConsumeGold beanConsumeGold; //金豆消费合计数
private BeanUser beanUser; //客户金豆余额明细 private BeanUser beanUser; //客户金豆余额明细
private BeanUserCard beanUserCard; //客户金豆卡片 private BeanUserCard beanUserCard; //客户金豆卡片
private BeanAuditInfo beanAuditInfo; //金豆审核信息
} }

31
src/main/java/com/example/demo/mapper/coin/BeanAuditMapper.java

@ -0,0 +1,31 @@
package com.example.demo.mapper.coin;
import com.example.demo.domain.vo.bean.BeanAuditInfo;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
* @program: gold-java
* @ClassName BeanAuditMapper
* @description:
* @author: Double
* @create: 202508-01 11:44
* @Version 1.0
**/
@Mapper
public interface BeanAuditMapper {
//查找审核信息
List<BeanAuditInfo> selectBy(BeanAuditInfo beanAuditInfo);
//根据id查询审核信息
BeanAuditInfo selectById(Long id);
//根据id更新状态为1
void updateStatus1(Long id);
//根据id更新状态为2
void updateStatus2(Long id);
}

24
src/main/java/com/example/demo/service/bean/BeanAuditService.java

@ -0,0 +1,24 @@
package com.example.demo.service.bean;
import com.example.demo.domain.vo.bean.BeanAuditInfo;
import com.example.demo.domain.vo.bean.BeanRechargeInfo;
import com.example.demo.domain.vo.coin.Result;
import com.github.pagehelper.PageInfo;
/**
* @program: gold-java
* @ClassName BeanAuditService
* @description:
* @author: Double
* @create: 202508-01 11:36
* @Version 1.0
**/
public interface BeanAuditService {
//查找审核信息
PageInfo<BeanAuditInfo> selectBy(Integer pageNum, Integer pageSize, BeanAuditInfo beanAuditInfo);
Result updateStatus1(Long id);
void updateStatus2(Long id);
}

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

@ -0,0 +1,98 @@
package com.example.demo.serviceImpl.bean;
import com.example.demo.domain.vo.bean.BeanAuditInfo;
import com.example.demo.domain.vo.bean.BeanRechargeInfo;
import com.example.demo.domain.vo.coin.Result;
import com.example.demo.mapper.coin.BeanAuditMapper;
import com.example.demo.service.bean.BeanAuditService;
import com.github.pagehelper.PageHelper;
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.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.util.UriComponentsBuilder;
import java.util.List;
import java.util.UUID;
/**
* @program: gold-java
* @ClassName BeanAuditServiceImpl
* @description:
* @author: Double
* @create: 202508-01 11:37
* @Version 1.0
**/
@Service
@RequiredArgsConstructor
public class BeanAuditServiceImpl implements BeanAuditService {
@Autowired
private BeanAuditMapper beanAuditMapper;
@Autowired
private RestTemplate restTemplate;
// 2. 构建接口URL及参数
@Value("${file.upload.url}")
String apiUrl;
//查找审核信息
@Override
public PageInfo<BeanAuditInfo> selectBy(Integer pageNum, Integer pageSize, BeanAuditInfo beanAuditInfo) {
PageHelper.startPage(pageNum, pageSize);
List<BeanAuditInfo> beanAuditInfos = beanAuditMapper.selectBy(beanAuditInfo);
return new PageInfo<>(beanAuditInfos);
}
@Transactional
@Override
public Result updateStatus1(Long id) {
BeanAuditInfo beanAuditInfo = beanAuditMapper.selectById(id);
String jwcode = beanAuditInfo.getJwcode().toString();
String op = "recharge"; // 操作类型根据实际业务定义例如"recharge"表示充值
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);
// 4. 处理响应结果
if (!response2.getStatusCode().is2xxSuccessful()) {
return Result.error("付费远程接口调用失败,状态码:" + response2.getStatusCodeValue());
}
beanAuditMapper.updateStatus1(id);
return Result.success();
}
@Override
public void updateStatus2(Long id) {
beanAuditMapper.updateStatus2(id);
}
}

8
src/main/java/com/example/demo/serviceImpl/bean/BeanRechargeServiceImpl.java

@ -4,10 +4,12 @@ import com.example.demo.domain.vo.bean.BeanRecharge;
import com.example.demo.domain.vo.bean.BeanRechargeInfo; import com.example.demo.domain.vo.bean.BeanRechargeInfo;
import com.example.demo.domain.vo.bean.GoldBean; import com.example.demo.domain.vo.bean.GoldBean;
import com.example.demo.domain.vo.coin.Gold; 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.RechargeUser;
import com.example.demo.domain.vo.coin.Result; import com.example.demo.domain.vo.coin.Result;
import com.example.demo.mapper.bean.BeanRechargeMapper2; import com.example.demo.mapper.bean.BeanRechargeMapper2;
import com.example.demo.mapper.coin.BeanRechargeMapper1; 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.mapper.pay.BeanRechargeMapper3;
import com.example.demo.service.bean.BeanRechargeService; import com.example.demo.service.bean.BeanRechargeService;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageHelper;
@ -48,6 +50,8 @@ public class BeanRechargeServiceImpl implements BeanRechargeService {
@Autowired @Autowired
private BeanRechargeMapper3 beanRechargeMapper3; private BeanRechargeMapper3 beanRechargeMapper3;
@Autowired
private UserMapper userMapper;
//新增金豆 //新增金豆
@Override @Override
@ -77,6 +81,10 @@ public class BeanRechargeServiceImpl implements BeanRechargeService {
if(recharge.getAdminName() == null || recharge.getAdminName().toString().isEmpty()){ if(recharge.getAdminName() == null || recharge.getAdminName().toString().isEmpty()){
return Result.error("管理员名称不能为空"); return Result.error("管理员名称不能为空");
} }
GoldUser goldUser = userMapper.selectUser(recharge.getJwcode().toString());
if(goldUser==null){
return Result.error("用户不存在");
}
beanRechargeMapper1.add(recharge); beanRechargeMapper1.add(recharge);
// String jwcode = recharge.getJwcode().toString(); // String jwcode = recharge.getJwcode().toString();
// String op = "recharge"; // 操作类型根据实际业务定义例如"recharge"表示充值 // String op = "recharge"; // 操作类型根据实际业务定义例如"recharge"表示充值

1
src/main/java/com/example/demo/serviceImpl/coin/ExportExcelServiceImpl.java

@ -16,7 +16,6 @@ import com.example.demo.domain.entity.Export;
import com.example.demo.domain.entity.User; import com.example.demo.domain.entity.User;
import com.example.demo.domain.export.Goldmingxi; import com.example.demo.domain.export.Goldmingxi;
import com.example.demo.domain.vo.bean.BeanConsumeLive; import com.example.demo.domain.vo.bean.BeanConsumeLive;
import com.example.demo.domain.vo.bean.BeanPage;
import com.example.demo.domain.vo.coin.*; import com.example.demo.domain.vo.coin.*;
import com.example.demo.mapper.coin.ExportMapper; import com.example.demo.mapper.coin.ExportMapper;

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

@ -53,7 +53,7 @@ feishu:
url: https://open.feishu.cn/open-apis/bot/v2/hook/384c78aa-8df1-498b-9c47-04e890ed9877 url: https://open.feishu.cn/open-apis/bot/v2/hook/384c78aa-8df1-498b-9c47-04e890ed9877
server: server:
port: 10704
port: 8081
logging: logging:
level: level:

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

@ -53,7 +53,8 @@ feishu:
webhook: webhook:
url: https://open.feishu.cn/open-apis/bot/v2/hook/1a515b19-b64f-46b7-9486-35842b9539fe 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
server: server:
port: 8081 port: 8081

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

@ -53,7 +53,8 @@ feishu:
webhook: webhook:
url: https://open.feishu.cn/open-apis/bot/v2/hook/384c78aa-8df1-498b-9c47-04e890ed9877 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
server: server:
port: 8081 port: 8081

5
src/main/resources/application.yml

@ -1,6 +1,6 @@
spring: spring:
profiles: profiles:
active: test
active: dev
jackson: jackson:
deserialization: deserialization:
fail-on-unknown-properties: false fail-on-unknown-properties: false
@ -86,7 +86,8 @@ upload:
file: file:
upload: upload:
url: http://39.101.133.168:8828/hljw/api/aws/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
server: server:
port: 8081 port: 8081

93
src/main/resources/mapper/BeanAuditMapper.xml

@ -0,0 +1,93 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.mapper.coin.BeanAuditMapper">
<select id="selectBy" resultType="com.example.demo.domain.vo.bean.BeanAuditInfo">
SELECT a.id AS id,
a.jwcode AS jwcode,
u.name AS name,
m.name AS market,
a.buy_jd AS permanentBean,
a.free_jd AS freeBean,
a.remark AS remark,
a.admin_name AS submitName,
a.audit_name AS auditName,
a.create_time AS createTime,
a.audit_time AS auditTime
FROM audit a
LEFT JOIN user u ON a.jwcode = u.jwcode
LEFT JOIN market m ON u.market = m.id
<where>
a.audit_status = #{status}
<if test="jwcode != null and jwcode != ''">
AND a.jwcode = #{jwcode}
</if>
<if test="market != null and market != ''">
AND m.name = #{market}
</if>
<if test="createStartTime != null and createEndTime != null">
AND a.create_time BETWEEN #{createStartTime} AND #{createEndTime}
</if>
<if test="auditStartTime != null and auditEndTime != null">
AND a.audit_time BETWEEN #{auditStartTime} AND #{auditEndTime}
</if>
</where>
<trim prefix="ORDER BY" suffixOverrides=",">
<choose>
<!-- 当指定排序字段时使用指定字段排序 -->
<when test="sortField != null and sortField != ''">
<choose>
<!-- 对金币数量的排序处理 -->
<when test="sortField == 'permanentBean'">a.buy_jd</when>
<when test="sortField == 'freeBean'">a.free_jd</when>
<!-- 对时间字段的排序处理 -->
<when test="sortField == 'createTime'">a.create_time</when>
<when test="sortField == 'auditTime'">a.audit_time</when>
<!-- 其他字段不支持排序,使用默认排序 -->
<otherwise>a.create_time</otherwise>
</choose>
<!-- 排序方向处理 -->
<if test="sortOrder != null and sortOrder != ''">
<choose>
<when test="sortOrder == 'ASC'">ASC</when>
<when test="sortOrder == 'DESC'">DESC</when>
<otherwise>DESC</otherwise>
</choose>
</if>
<if test="sortOrder == null or sortOrder == ''">
DESC
</if>
</when>
<!-- 未指定排序字段时,使用默认的时间降序排序 -->
<otherwise>
a.create_time DESC
</otherwise>
</choose>
</trim>
</select>
<update id="updateStatus1">
update audit
set audit_status = 1
where id = #{id}
</update>
<update id="updateStatus2">
update audit
set audit_status = 2
where id = #{id}
</update>
<select id="selectById" resultType="com.example.demo.domain.vo.bean.BeanAuditInfo">
select
jwcode AS jwcode,
buy_jd AS permanentBean,
free_jd AS freeBean,
remark AS remark,
admin_name AS submitName,
audit_name AS auditName
from audit where id = #{id}
</select>
</mapper>
Loading…
Cancel
Save