Browse Source

7.2汇率合并

sunjiabei/feature-20250623130922-消费功能
huangqizhen 3 days ago
parent
commit
60bf3424c8
  1. 1
      pom.xml
  2. 69
      src/main/java/com/example/demo/controller/RateController.java
  3. 30
      src/main/java/com/example/demo/domain/vo/RateDetail.java
  4. 18
      src/main/java/com/example/demo/mapper/RateMapper.java
  5. 8
      src/main/java/com/example/demo/security/SecurityConfig.java
  6. 28
      src/main/java/com/example/demo/security/TokenFilter.java
  7. 16
      src/main/java/com/example/demo/service/RateService.java
  8. 72
      src/main/java/com/example/demo/serviceImpl/AdminServiceImpl.java
  9. 43
      src/main/java/com/example/demo/serviceImpl/RateServiceImpl.java
  10. 42
      src/main/resources/mapper/RateMapper.xml

1
pom.xml

@ -112,6 +112,7 @@
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
<version>3.3.6</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>

69
src/main/java/com/example/demo/controller/RateController.java

@ -0,0 +1,69 @@
package com.example.demo.controller;
import com.example.demo.domain.entity.Rate;
import com.example.demo.domain.vo.Page;
import com.example.demo.domain.vo.Result;
import com.example.demo.mapper.RateMapper;
import com.example.demo.service.RateService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.ObjectUtils;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
@RestController
@RequestMapping("/rate")
@RequiredArgsConstructor
@Slf4j
@CrossOrigin
public class RateController {
@Autowired
private RateService rateService;
//货币汇率列表
@PostMapping("/selectAll")
public Result selectAll(@RequestBody Page page){
if (ObjectUtils.isEmpty(page.getPageNum())) {
return Result.error("页码数为空!");
}
if (ObjectUtils.isEmpty(page.getPageSize())) {
return Result.error("页大小为空!");
} else {
return Result.success(rateService.selectAll(page.getPageNum(), page.getPageSize()));
}
}
//查询货币
@PostMapping("/selectById")
public Result selectById(@RequestBody Map<String, Object> requestBody) {
Integer id = (Integer) requestBody.get("id");
if (ObjectUtils.isEmpty(id)) {
return Result.error("id 为空!");
}
Rate rate = rateService.selectById(id);
return Result.success(rate);
}
// 编辑
@PostMapping("/update")
public Result update(@RequestBody Rate rate) {
if (ObjectUtils.isEmpty(rate.getId())) {
return Result.error("id不能为空");
}
if (ObjectUtils.isEmpty(rate.getRateName())) {
return Result.error("汇率名称不能为空");
}
if (rate.getNum() == null) {
return Result.error("汇率数值不能为空");
}
rateService.update(rate);
return Result.success("编辑成功");
}
}

30
src/main/java/com/example/demo/domain/vo/RateDetail.java

@ -0,0 +1,30 @@
package com.example.demo.domain.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
import java.util.Date;
@Data
@NoArgsConstructor
public class RateDetail {
private static final long serialVersionUID = 1L;
private Integer id;
private String rateName;
private BigDecimal num = BigDecimal.ZERO;
private Integer adminId;//提交人
@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 updateTime; // 更新时间
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date lastTime; // 最晚时间
}

18
src/main/java/com/example/demo/mapper/RateMapper.java

@ -0,0 +1,18 @@
package com.example.demo.mapper;
import com.example.demo.domain.entity.Rate;
import com.example.demo.domain.vo.RateDetail;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface RateMapper {
List<Rate> selectAll();
Rate selectById(Integer id);
void update(Rate rate);
void add(Rate rate);
}

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

@ -36,8 +36,8 @@ import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
public class SecurityConfig {
@Autowired
TokenFilter tokenFilter;
// @Autowired
// TokenFilter tokenFilter;
// 核心配置 配置一个过滤器链
@ -60,7 +60,7 @@ public class SecurityConfig {
request
.requestMatchers( HttpMethod.POST,
// 用户不登录就可以访问的路径
"/admin/login","/upload/**","/detailY/ERP","/home/java/haiwaiyanfa/gold1/**","/home/java/haiwaiyanfa/**","/**").permitAll()
"/admin/login","/upload/**","/detailY/ERP","/home/java/haiwaiyanfa/gold1/**","/home/java/haiwaiyanfa/**").permitAll()
.requestMatchers(
"/error","alipay/**","/upload/**","/home/java/haiwaiyanfa/gold1/**","/home/java/haiwaiyanfa/**"
).permitAll()
@ -70,7 +70,7 @@ public class SecurityConfig {
http.addFilterBefore(tokenFilter, UsernamePasswordAuthenticationFilter.class); // 然后是TokenFilter
// http.addFilterBefore(tokenFilter, UsernamePasswordAuthenticationFilter.class); // 然后是TokenFilter
return http.build();
}

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

@ -1,14 +1,12 @@
package com.example.demo.security;
import com.example.demo.Util.JWTUtil;
import com.example.demo.Util.RequestWrapper;
import com.example.demo.domain.entity.Admin;
import com.example.demo.domain.entity.User;
import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.core.annotation.Order;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.UserDetails;
@ -17,25 +15,25 @@ import org.springframework.stereotype.Component;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.filter.OncePerRequestFilter;
import java.io.IOException;
import java.io.IOException;
@Component
public class TokenFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
// 取Token 生成登录信息
String token = request.getHeader("token");
System.out.println(token+"123132132");
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
// 忽略登录接口的token处理防止无限递归
if (request.getRequestURI().startsWith("/admin/login")) {
filterChain.doFilter(request, response);
return;
}
// token不为空
if (StringUtils.hasText(token)){
String token = request.getHeader("token");
if (StringUtils.hasText(token)) {
try {
UserDetails userDetails = JWTUtil.getUserDetailsList(token, Admin.class);
if ( ! ObjectUtils.isEmpty(userDetails)) {
// 将这个用户注册到Security中
if (!ObjectUtils.isEmpty(userDetails)) {
UsernamePasswordAuthenticationToken authenticationToken
= new UsernamePasswordAuthenticationToken(
userDetails, null,
@ -45,10 +43,8 @@ public class TokenFilter extends OncePerRequestFilter {
}
} catch (Exception e) {
e.printStackTrace();
// Token无效
}
}
// 过滤器放行
filterChain.doFilter(request, response);
}
}

16
src/main/java/com/example/demo/service/RateService.java

@ -0,0 +1,16 @@
package com.example.demo.service;
import com.example.demo.domain.entity.Rate;
import com.example.demo.domain.vo.RateDetail;
import com.github.pagehelper.PageInfo;
public interface RateService {
PageInfo<Rate> selectAll(Integer pageNum, Integer pageSize);
Rate selectById(Integer id);
void add(Rate rate);
void update(Rate rate);
}

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

@ -15,50 +15,60 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.transaction.annotation.Transactional;
@Transactional
@Service
@RequiredArgsConstructor
public class AdminServiceImpl implements AdminService {
@Autowired
private AuthenticationManager authenticationManager;
@Autowired
private AdminMapper adminMapper;
private static final Logger log = LoggerFactory.getLogger(AdminServiceImpl.class);
private final AuthenticationManager authenticationManager;
private final AdminMapper adminMapper;
@Override
public Admin login(Admin admin) throws Exception {
try {
Admin admin1 = adminMapper.getAdmin(admin.getAccount());
String[] machineIds = admin1.getMachineId().split(",");
String account = admin.getAccount();
String inputMachineId = admin.getMachineId();
boolean flag = false;
for (String machineId : machineIds) {
if (admin.getMachineId() != null && admin.getMachineId().equals(machineId))
flag = true;
}
if (!flag) {
throw new RuntimeException("你没有使用该机器的权限!");
if (StringUtils.isBlank(account)) {
throw new IllegalArgumentException("账号不能为空");
}
System.out.println(admin.getAccount());
System.out.println(admin.getPassword()+"---------------------------");
UsernamePasswordAuthenticationToken token =
new UsernamePasswordAuthenticationToken(admin.getAccount(),admin.getPassword());
System.out.println( token+"---------------------------");
// Authentication authentication = authenticationManager.authenticate(token);
// Admin loginAdmin = (Admin) authentication.getPrincipal();
Admin loginAdmin = (Admin) authenticationManager.authenticate(token).getPrincipal();
return loginAdmin;
// Admin adminInDB = adminMapper.getAdmin(account);
// System.out.println("adminInDB:" + adminInDB);
// if (adminInDB == null) {
// throw new RuntimeException("无此精网号");
// }
}catch (NullPointerException e){
throw new RuntimeException("无此精网号");
}catch(BadCredentialsException exception){
throw new BadCredentialsException("密码错误");
}catch (Exception e){
throw new RuntimeException("你没有使用该机器的权限!");
}
// 校验机器权限
// if (!hasPermissionToMachine(adminInDB, inputMachineId)) {
// throw new RuntimeException("你没有使用该机器的权限!");
// }
// try {
System.out.println("admin:" + account);
System.out.println("admin:" + admin.getPassword());
UsernamePasswordAuthenticationToken token =
new UsernamePasswordAuthenticationToken(account,admin.getPassword());
Authentication authentication = authenticationManager.authenticate(token);
return (Admin) authentication.getPrincipal();
// } catch (Exception e) {
// System.out.println("密码错误"+e.getMessage());
// log.error("登录过程中发生异常", e);
// throw new RuntimeException("登录失败,请稍后再试", e);
// }
}
private boolean hasPermissionToMachine(Admin admin, String targetMachineId) {
if (targetMachineId == null || admin.getMachineId() == null) {
return false;
}
String[] machineIds = admin.getMachineId().split(",");
for (String id : machineIds) {
if (targetMachineId.equals(id)) {
return true;
}
}
return false;
}
}

43
src/main/java/com/example/demo/serviceImpl/RateServiceImpl.java

@ -0,0 +1,43 @@
package com.example.demo.serviceImpl;
import com.example.demo.domain.entity.Rate;
import com.example.demo.domain.vo.ConsumeUser;
import com.example.demo.domain.vo.RateDetail;
import com.example.demo.mapper.RateMapper;
import com.example.demo.service.RateService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class RateServiceImpl implements RateService {
@Autowired
private RateMapper rateMapper;
@Override
public PageInfo<Rate> selectAll(Integer pageNum, Integer pageSize) {
PageHelper.startPage(pageNum, pageSize);
List<Rate> rates = rateMapper.selectAll();
return new PageInfo<>(rates);
}
@Override
public Rate selectById(Integer id) {
return rateMapper.selectById(id);
}
@Override
public void add(Rate rate) {
rateMapper.add(rate);
}
@Override
public void update(Rate rate) {
rateMapper.update(rate);
}
}

42
src/main/resources/mapper/RateMapper.xml

@ -0,0 +1,42 @@
<?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.RateMapper">
<select id="selectAll" resultType="com.example.demo.domain.vo.RateDetail">
SELECT
*,
CASE
WHEN update_time IS NULL OR create_time > update_time THEN create_time
ELSE update_time
END AS last_time
FROM rate
</select>
<select id="selectById" resultType="com.example.demo.domain.entity.Rate">
SELECT * FROM rate WHERE id= #{id}
</select>
<update id="update">
UPDATE
rate
SET
rate_name=#{rateName},
num=#{num},
admin_id=#{adminId},
update_time=#{updateTime}
WHERE
id=#{id}
</update>
<insert id="add">
INSERT INTO rate
(rate_name, num, admin_id, create_time)
VALUES
(#{rateName}, #{num}, #{adminId}, #{createTime})
<selectKey keyProperty="id" resultType="java.lang.Integer" order="AFTER">
SELECT LAST_INSERT_ID()
</selectKey>
</insert>
</mapper>
Loading…
Cancel
Save