Browse Source

后端整合模块

detached
huangqizhen 5 months ago
parent
commit
04c7cd75c8
  1. 2
      src/main/java/com/example/demo/Util/RequestWrapper.java
  2. 4
      src/main/java/com/example/demo/controller/AdminController.java
  3. 5
      src/main/java/com/example/demo/controller/ConsumeController.java
  4. 28
      src/main/java/com/example/demo/controller/UploadController.java
  5. 3
      src/main/java/com/example/demo/domain/entity/Detail.java
  6. 1
      src/main/java/com/example/demo/domain/entity/Recharge.java
  7. 7
      src/main/java/com/example/demo/domain/vo/ConsumeDetail.java
  8. 7
      src/main/java/com/example/demo/domain/vo/DetailVo.java
  9. 7
      src/main/java/com/example/demo/domain/vo/RechargeVo.java
  10. 56
      src/main/java/com/example/demo/domain/vo/SumCoin.java
  11. 4
      src/main/java/com/example/demo/mapper/ConsumeMapper.java
  12. 4
      src/main/java/com/example/demo/mapper/DetailMapper.java
  13. 4
      src/main/java/com/example/demo/mapper/RechargeMapper.java
  14. 4
      src/main/java/com/example/demo/mapper/RefundMapper.java
  15. 9
      src/main/java/com/example/demo/mapper/UserMapper.java
  16. 7
      src/main/java/com/example/demo/security/SecurityConfig.java
  17. 14
      src/main/java/com/example/demo/security/TokenFilter.java
  18. 33
      src/main/java/com/example/demo/security/UploadFilter.java
  19. 2
      src/main/java/com/example/demo/serviceImpl/AdminServiceImpl.java
  20. 4
      src/main/java/com/example/demo/serviceImpl/AuditServiceImpl.java
  21. 8
      src/main/java/com/example/demo/serviceImpl/ConsumeServiceImpl.java
  22. 2
      src/main/java/com/example/demo/serviceImpl/DetailServiceImpl.java
  23. 9
      src/main/java/com/example/demo/serviceImpl/RechargeServiceImpl.java
  24. 3
      src/main/java/com/example/demo/serviceImpl/RefundServiceImpl.java
  25. 4
      src/main/java/com/example/demo/serviceImpl/UserDetailServiceImpl.java

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

@ -26,7 +26,7 @@ public class RequestWrapper extends HttpServletRequestWrapper {
// 将body数据存储起来
String bodyStr = getBodyString(request);
body = bodyStr.getBytes(Charset.defaultCharset());
System.out.println(new String(body, Charset.defaultCharset()) + "+**+*+*+*++*+*+*+");
// System.out.println(new String(body, Charset.defaultCharset()) + "+**+*+*+*++*+*+*+");
}

4
src/main/java/com/example/demo/controller/AdminController.java

@ -36,9 +36,7 @@ public class AdminController {
@PostMapping("/login")
public Result login(@RequestBody Admin admin){
if(ObjectUtils.isEmpty(admin)){
System.out.println("他是空");
}
try {
System.out.println(admin+"*-*-*-*-*-*-*-*-*-*-1");

5
src/main/java/com/example/demo/controller/ConsumeController.java

@ -1,6 +1,5 @@
package com.example.demo.controller;
import com.example.demo.domain.entity.Detail;
import com.example.demo.domain.vo.DetailVo;
import com.example.demo.domain.vo.Page;
@ -16,8 +15,6 @@ import org.springframework.web.bind.annotation.*;
import java.util.Arrays;
import static java.lang.Integer.parseInt;
@RestController
@RequestMapping("/consume")
//SpringMVC的为当前类的所有处理器方法添加路径映射的前缀
@ -50,8 +47,6 @@ public class ConsumeController {
// }
}
@PostMapping("/select")
public Result search(@RequestBody Page page){
Integer pageNum = page.getPageNum();

28
src/main/java/com/example/demo/controller/UploadController.java

@ -19,27 +19,11 @@ public class UploadController {
@Value("${upload.path}")
private String path;
// @PostMapping
// public Result upload(MultipartFile file) {
// String fileName = UploadUtil.save(file,path);
// return Result.success(fileName);
// }
@PostMapping("/upload")
public String handleFileUpload(@RequestParam("imageData") MultipartFile file) {
if (!file.isEmpty()) {
try {
// 清理文件名
String fileName = StringUtils.cleanPath(file.getOriginalFilename());
// 将文件保存到服务器的某个位置
String destinationPath = path + File.separator + fileName;
file.transferTo(new File(destinationPath));
return "File uploaded successfully: " + fileName;
} catch (IOException e) {
e.printStackTrace();
return "File upload failed: " + e.getMessage();
@PostMapping
public Result upload(MultipartFile file) {
System.out.println(file+"file11111111111111111111");
String fileName = UploadUtil.save(file,path);
return Result.success(fileName);
}
} else {
return "Please select a file to upload";
}
}
}

3
src/main/java/com/example/demo/domain/entity/Detail.java

@ -48,7 +48,8 @@ public class Detail implements Serializable {
private String userName;
private String auditStatus;
private String auditReson;
private String orderCode;
private Integer refundFlag;
// @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")

1
src/main/java/com/example/demo/domain/entity/Recharge.java

@ -31,5 +31,6 @@ public class Recharge {
private Date createTime;
private Date startDate;
private Date endDate;
private String orderCode;
}

7
src/main/java/com/example/demo/domain/vo/ConsumeDetail.java

@ -5,6 +5,7 @@ import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.util.Date;
@Data
@NoArgsConstructor
@ -24,9 +25,9 @@ public class ConsumeDetail {
private String refundGoods;
private Integer contactId;
private String remark;
private Double rechargeCoin;
private Double freeCoin;
private Double taskCoin;
private BigDecimal rechargeCoin;
private BigDecimal freeCoin;
private BigDecimal taskCoin;
private String conmmitName;
private Integer status;
private String updateType;

7
src/main/java/com/example/demo/domain/vo/DetailVo.java

@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Date;
@ -23,9 +24,9 @@ public class DetailVo {
private String refundGoods;
private Integer contactId;
private String remark;
private Double rechargeCoin;
private Double freeCoin;
private Double taskCoin;
private BigDecimal rechargeCoin;
private BigDecimal freeCoin;
private BigDecimal taskCoin;
private Integer adminId;
private Integer status;
private String updateType;

7
src/main/java/com/example/demo/domain/vo/RechargeVo.java

@ -5,6 +5,7 @@ import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.util.Date;
@Data
@NoArgsConstructor
@ -13,9 +14,9 @@ public class RechargeVo {
private Integer rechargeId;
private String jwcode;
private Integer activityId;
private Double paidGold;
private Double freeGold;
private Double rechargeGold;
private BigDecimal paidGold;
private BigDecimal freeGold;
private BigDecimal rechargeGold;
private String payWay;
private String rechargeWay;
private Date rechargeTime;

56
src/main/java/com/example/demo/domain/vo/SumCoin.java

@ -3,60 +3,62 @@ package com.example.demo.domain.vo;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
@Data
@NoArgsConstructor
public class SumCoin {
//当前金币余量 充值金币
private Double todayRecharge;
private BigDecimal todayRecharge;
//当前金币余量 免费金币
private Double todayFree;
private BigDecimal todayFree;
//当前金币余量 任务金币
private Double todayTask;
private BigDecimal todayTask;
//当前金币余量 总金币
private Double todayTotalCoin;
private BigDecimal todayTotalCoin;
//前一天金币余量 充值金币
private Double yesterdayRecharge;
private BigDecimal yesterdayRecharge;
//前一天金币余量 免费金币
private Double yesterdayFree;
private BigDecimal yesterdayFree;
//前一天金币余量 任务金币
private Double yesterdayTask;
private BigDecimal yesterdayTask;
//前一天金币余量 总金币
private Double yesterdayTotalCoin;
private BigDecimal yesterdayTotalCoin;
//当前金币余量与前一天金币余量之差
private Double coinDifference;
private BigDecimal coinDifference;
//全年累计消耗金币数 消费总数
private Double yearConsumeCoin;
private BigDecimal yearConsumeCoin;
//全年累计消耗金币数 退款金币
private Double yearRefundCoin;
private BigDecimal yearRefundCoin;
//全年累计消耗金币数 消耗总金币
private Double yearsumCoin;
private BigDecimal yearsumCoin;
//全年累计消耗金币数--昨日新增消耗 消费金币
private Double dayConsumeCoin;
private BigDecimal dayConsumeCoin;
//全年累计消耗金币数--昨日新增消耗 退款总金币
private Double dayRefundCoin;
private BigDecimal dayRefundCoin;
//全年累计消耗金币数--昨日新增消耗 消耗总金币
private Double daysumCoin;
private BigDecimal daysumCoin;
//全年累计消耗金币数--下面 消耗充值金币
private Double yearSumRechargeCoin;
private BigDecimal yearSumRechargeCoin;
//全年累计消耗金币数--下面 消耗免费金币
private Double yearSumFreeCoin;
private BigDecimal yearSumFreeCoin;
//全年累计消耗金币数--下面 消耗任务金币
private Double yearSumTaskCoin;
private BigDecimal yearSumTaskCoin;
//中间-11个月 每月充值金币
private Double rechargeSumCoin;
private BigDecimal rechargeSumCoin;
//中间-11个月 每月免费金币
private Double freeSumCoin;
private BigDecimal freeSumCoin;
//中间-11个月 每月任务金币
private Double taskSumCoin;
private BigDecimal taskSumCoin;
private String month;
@ -64,10 +66,10 @@ public class SumCoin {
private String area;
private Double totalRechargeRefund;
private Double totalTaskRefund;
private Double totalFreeRefund;
private Double totalRecharge;
private Double totalFree;
private Double totalTask;
private BigDecimal totalRechargeRefund;
private BigDecimal totalTaskRefund;
private BigDecimal totalFreeRefund;
private BigDecimal totalRecharge;
private BigDecimal totalFree;
private BigDecimal totalTask;
}

4
src/main/java/com/example/demo/mapper/ConsumeMapper.java

@ -27,9 +27,9 @@ public interface ConsumeMapper {
//新增消费记录
@Insert({
"insert into detail",
"(jwcode,activity_id,recharge_way,product_id,consume_platform,consume_type,refund_type,refund_goods,contact_id,remark,recharge_coin,free_coin,task_coin,admin_id,update_type,detail_flag,create_time)",
"(jwcode,activity_id,recharge_way,product_id,consume_platform,consume_type,refund_type,refund_goods,contact_id,remark,recharge_coin,free_coin,task_coin,admin_id,update_type,detail_flag,create_time,refund_flag)",
"values",
"(#{jwcode},#{activityId},#{rechargeWay},#{productId},'金币系统','购买商品',#{refundType},#{refundGoods},#{contactId},#{remark},#{rechargeCoin},#{freeCoin},#{taskCoin},#{adminId},#{updateType},1,now())"
"(#{jwcode},#{activityId},#{rechargeWay},#{productId},'金币系统','购买商品',#{refundType},#{refundGoods},#{contactId},#{remark},#{rechargeCoin},#{freeCoin},#{taskCoin},#{adminId},#{updateType},1,now(),1)"
})
// 获取自增主键
@Options(useGeneratedKeys = true,keyColumn = "detail_id",keyProperty = "detailId")

4
src/main/java/com/example/demo/mapper/DetailMapper.java

@ -14,10 +14,10 @@ public interface DetailMapper {
@Insert({
"insert into detail",
"(jwcode,activity_id,recharge_way,product_id,consume_platform,consume_type,refund_type,refund_goods," +
"(jwcode,order_code,activity_id,recharge_way,product_id,consume_platform,consume_type,refund_type,refund_goods," +
"contact_id,remark,recharge_coin,free_coin,task_coin,admin_id,update_type,detail_flag,create_time,first_recharge)",
"values ",
"(#{jwcode},#{activityId},#{rechargeWay},#{productId},#{consumePlatform},#{consumeType},#{refundType}" +
"(#{jwcode},#{orderCode},#{activityId},#{rechargeWay},#{productId},#{consumePlatform},#{consumeType},#{refundType}" +
",#{refundGoods},#{contactId},#{remark},#{rechargeCoin}" +
",#{freeCoin},#{taskCoin},#{adminId},#{updateType},1,now(),#{firstRecharge})"
})

4
src/main/java/com/example/demo/mapper/RechargeMapper.java

@ -12,9 +12,9 @@ public interface RechargeMapper {
@Insert({
"INSERT INTO recharge",
"(jwcode,activity_id,paid_gold,free_gold,recharge_gold,pay_way,recharge_way,recharge_time,recharge_voucher,admin_id,remark,flag)",
"(jwcode,order_code,activity_id,paid_gold,free_gold,recharge_gold,pay_way,recharge_way,recharge_time,recharge_voucher,admin_id,remark,flag)",
"values ",
"(#{jwcode},#{activityId},#{paidGold},#{freeGold},#{rechargeGold},#{payWay},#{rechargeWay},#{rechargeTime},#{rechargeVoucher},#{adminId},#{remark},1)"
"(#{jwcode},#{orderCode},#{activityId},#{paidGold},#{freeGold},#{rechargeGold},#{payWay},#{rechargeWay},#{rechargeTime},#{rechargeVoucher},#{adminId},#{remark},1)"
})
@Options(useGeneratedKeys = true,keyColumn = "recharge_id",keyProperty = "rechargeId")
int insert(Recharge recharge);

4
src/main/java/com/example/demo/mapper/RefundMapper.java

@ -11,9 +11,9 @@ public interface RefundMapper {
@Insert({
"insert into detail",
"(jwcode,refund_type,refund_goods,contact_id,recharge_coin,free_coin,task_coin,remark,admin_id,create_time,update_type)",
"(jwcode,order_code,refund_type,refund_goods,contact_id,recharge_coin,free_coin,task_coin,remark,admin_id,create_time,update_type)",
"values",
"(#{jwcode},#{refundType},#{refundGoods},#{contactId},#{rechargeCoin},#{freeCoin},#{taskCoin},#{remark},#{adminId},now(),'退款')"
"(#{jwcode},#{orderCode},#{refundType},#{refundGoods},#{contactId},#{rechargeCoin},#{freeCoin},#{taskCoin},#{remark},#{adminId},now(),'退款')"
})
@Options(useGeneratedKeys = true, keyColumn = "detail_id", keyProperty = "detailId")
int insert(Detail detail);

9
src/main/java/com/example/demo/mapper/UserMapper.java

@ -20,6 +20,15 @@ public interface UserMapper {
"</script>"
})
User select(String user);
@Select({
"<script>",
"select * from user",
"<where>",
"<if test='jwcode!=null and jwcode.length>0'>and jwcode=#{jwcode}</if>",
"</where>",
"</script>"
})
User get(String jwcode);
@Select({
"SELECT\n" +

7
src/main/java/com/example/demo/security/SecurityConfig.java

@ -38,6 +38,8 @@ public class SecurityConfig {
@Autowired
TokenFilter tokenFilter;
// @Autowired
// UploadFilter uploadFilter;
// 核心配置 配置一个过滤器链
@Bean
@ -59,14 +61,15 @@ public class SecurityConfig {
request
.requestMatchers( HttpMethod.POST,
// 用户不登录就可以访问的路径
"/admin/login","/upload/**").permitAll()
"/admin/login","/upload").permitAll()
.requestMatchers(
"/error","alipay/**","/upload/**"
"/error","alipay/**"
).permitAll()
.anyRequest().authenticated() // 其它路径必须要登录后才能访问
);
// 配置Token过滤器, 将过滤器加入到执行链中
http.addFilterBefore(tokenFilter, UsernamePasswordAuthenticationFilter.class);
// http.addFilterBefore(uploadFilter, UsernamePasswordAuthenticationFilter.class);
return http.build();
}

14
src/main/java/com/example/demo/security/TokenFilter.java

@ -63,6 +63,7 @@ import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.security.access.prepost.PreFilter;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.UserDetails;
@ -77,11 +78,20 @@ import java.io.InputStream;
@Component
public class TokenFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
// 使用RequestWrapper包装原始的HttpServletRequest使其输入流可以被重复读取
RequestWrapper requestWrapper = new RequestWrapper(request);
boolean isUploadOrRechargeRequest = requestWrapper.getRequestURI().contains("upload") ;
System.out.println(isUploadOrRechargeRequest);
// 如果是上传请求或添加新的充值请求则跳过令牌检查
if (isUploadOrRechargeRequest) {
filterChain.doFilter(requestWrapper, response);
System.out.println(response+"000000000000");
return;
}
// 确保请求体只被读取一次
boolean hasRequestBody = "POST".equals(requestWrapper.getMethod());
System.out.println(hasRequestBody);

33
src/main/java/com/example/demo/security/UploadFilter.java

@ -0,0 +1,33 @@
//package com.example.demo.security;
//
//import jakarta.servlet.FilterChain;
//import jakarta.servlet.ServletException;
//import jakarta.servlet.http.HttpServletRequest;
//import jakarta.servlet.http.HttpServletResponse;
//import org.springframework.web.filter.OncePerRequestFilter;
//
//import java.io.IOException;
//
//public class UploadFilter extends OncePerRequestFilter {
//
// @Override
// protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
// throws ServletException, IOException {
//
// // 检查请求是否为上传请求这里假设上传请求的路径以 "/upload" 开头
// boolean isUploadRequest = request.getRequestURI().startsWith("/upload");
//
// if (isUploadRequest) {
// // 如果是上传请求直接将请求传递给下一个过滤器或目标资源
// filterChain.doFilter(request, response);
// } else {
// // 如果不是上传请求执行一些自定义逻辑
// // 例如可以在这里添加令牌验证或其他安全检查
//
// // 继续执行过滤器链
// filterChain.doFilter(request, response);
// }
// }
//
//
//}

2
src/main/java/com/example/demo/serviceImpl/AdminServiceImpl.java

@ -74,6 +74,8 @@ public class AdminServiceImpl implements AdminService {
@Override
public Admin login(Admin admin) throws Exception {
System.out.println("第一步");
System.out.println(admin.getJwcode());
System.out.println(admin.getPassword());
UsernamePasswordAuthenticationToken token =
new UsernamePasswordAuthenticationToken(admin.getJwcode(),admin.getPassword());
System.out.println(token+"第二步");

4
src/main/java/com/example/demo/serviceImpl/AuditServiceImpl.java

@ -29,12 +29,12 @@ public class AuditServiceImpl implements AuditService {
public int add(Audit audit) {
return auditMapper.insert(audit);
}
@CacheEvict(value = "audit",allEntries = true)
@CacheEvict(value = "recharge",allEntries = true)
@Override
public int edit(Audit audit) {
return auditMapper.update(audit);
}
@Cacheable(key="#root.method.name")
@Override
public List<Audit> search(Audit audit) {
return auditMapper.select(audit);

8
src/main/java/com/example/demo/serviceImpl/ConsumeServiceImpl.java

@ -22,6 +22,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.List;
import java.util.UUID;
@Service
@Transactional
@ -40,10 +41,10 @@ public class ConsumeServiceImpl implements ConsumeService {
BigDecimal freeGold1 =detail.getRechargeCoin();
BigDecimal taskGold1 =detail.getTaskCoin();
String jwcode = detail.getJwcode();
User user = userMapper.select(jwcode);
User user = userMapper.get(jwcode);
BigDecimal Sumgold =user.getSumgold();
Sumgold = Sumgold.subtract(freeGold1).subtract(paidGold1).subtract(taskGold1);
Sumgold = Sumgold.add(freeGold1).add(paidGold1).add(taskGold1);
// 设置更新后的Sumgold回到user对象
user.setSumgold(Sumgold);
@ -52,6 +53,9 @@ public class ConsumeServiceImpl implements ConsumeService {
if (result != 1) {
throw new Exception("Failed to insert another entity");
}
// 生成UUID作为订单编号
String uuid = UUID.randomUUID().toString().replace("-", ""); // 去掉UUID中的'-'
detail.setOrderCode(uuid);
//添加表单数据
result =consumeMapper.insert(detail);
return result;

2
src/main/java/com/example/demo/serviceImpl/DetailServiceImpl.java

@ -42,7 +42,7 @@ public class DetailServiceImpl implements DetailService {
return null;
}
@Cacheable(key="#root.method.name")
@Cacheable(key="#root.method.name+ #detail.hashCode()")
@Override
public List<Detail> getAllDetail(Detail detail) {
return detailMapper.select(detail);

9
src/main/java/com/example/demo/serviceImpl/RechargeServiceImpl.java

@ -23,6 +23,8 @@ import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.List;
import java.util.UUID;
@Transactional
@Service
@RequiredArgsConstructor
@ -43,7 +45,8 @@ public class RechargeServiceImpl implements RechargeService {
public int add(Recharge recharge) throws Exception {
// return rechargeMapper.insert(recharge);
String uuid = UUID.randomUUID().toString().replace("-", ""); // 去掉UUID中的'-'
recharge.setOrderCode(uuid);
int result = rechargeMapper.insert(recharge);
if (result != 1) {
throw new Exception("Failed to insert recharge data");
@ -94,6 +97,10 @@ public class RechargeServiceImpl implements RechargeService {
detail.setRemark(remark);
detail.setUpdateType("充值");
detail.setAdminId(adminId);
System.out.println(uuid+"/*/*/*-/-*/-/*-/-*/-/*-/*-/-*");
detail.setOrderCode(uuid);
System.out.println(detail);
result = detailMapper.add(detail);
if (result != 1) {

3
src/main/java/com/example/demo/serviceImpl/RefundServiceImpl.java

@ -15,6 +15,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.UUID;
@RequiredArgsConstructor
@ -27,6 +28,8 @@ public class RefundServiceImpl implements RefundService {
@Override
public int add(Detail detail) {
String uuid = UUID.randomUUID().toString().replace("-", ""); // 去掉UUID中的'-'
detail.setOrderCode(uuid);
return refundMapper.insert(detail);
}

4
src/main/java/com/example/demo/serviceImpl/UserDetailServiceImpl.java

@ -16,11 +16,11 @@ import org.springframework.util.ObjectUtils;
@Transactional
@Service
@RequiredArgsConstructor
@CacheConfig(cacheNames = "userDetail")
public class UserDetailServiceImpl implements UserDetailsService {
@Autowired
private AdminMapper adminMapper;
@Cacheable(key="#root.method.name")
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
Admin admin=adminMapper.selectByName(username);

Loading…
Cancel
Save