Browse Source

Merge branch 'milestone-20250711-金币重构二期' into sunjiabei/feature-20250710132313-二期模块

huangqizheng/feature-20250718222252-导出修改完毕
sunjiabei 1 month ago
parent
commit
8be4cb5cc5
  1. 43
      src/main/java/com/example/demo/Util/StringToListTypeHandler.java
  2. 15
      src/main/java/com/example/demo/controller/AdminController.java
  3. 6
      src/main/java/com/example/demo/controller/RoleController.java
  4. 2
      src/main/java/com/example/demo/controller/WorkbenchController.java
  5. 9
      src/main/java/com/example/demo/domain/entity/Admin.java
  6. 3
      src/main/java/com/example/demo/domain/vo/WorkbenchCard.java
  7. 7
      src/main/java/com/example/demo/domain/vo/WorkbenchMarketCard.java
  8. 2
      src/main/java/com/example/demo/mapper/RoleMapper.java
  9. 2
      src/main/java/com/example/demo/service/RoleService.java
  10. 7
      src/main/java/com/example/demo/serviceImpl/AdminServiceImpl.java
  11. 1
      src/main/java/com/example/demo/serviceImpl/PermissionServiceImpl.java
  12. 5
      src/main/java/com/example/demo/serviceImpl/RoleServiceImpl.java
  13. 22
      src/main/java/com/example/demo/serviceImpl/WorkbenchServiceImpl.java
  14. 29
      src/main/resources/mapper/AdminMapper.xml
  15. 7
      src/main/resources/mapper/RoleMapper.xml

43
src/main/java/com/example/demo/Util/StringToListTypeHandler.java

@ -0,0 +1,43 @@
package com.example.demo.Util;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.TypeHandler;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.List;
public class StringToListTypeHandler extends BaseTypeHandler<List<String>> {
@Override
public void setNonNullParameter(PreparedStatement ps, int i, List<String> parameter, JdbcType jdbcType) throws SQLException {
// List<String> 转换为字符串
ps.setString(i, String.join(",", parameter));
}
@Override
public List<String> getNullableResult(ResultSet rs, String columnName) throws SQLException {
return parseStringToList(rs.getString(columnName));
}
@Override
public List<String> getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
return parseStringToList(rs.getString(columnIndex));
}
@Override
public List<String> getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
return parseStringToList(cs.getString(columnIndex));
}
private List<String> parseStringToList(String str) {
if (str == null || str.isEmpty()) {
return null;
}
return Arrays.asList(str.split(","));
}
}

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

@ -1,13 +1,11 @@
package com.example.demo.controller; package com.example.demo.controller;
import com.example.demo.Util.JWTUtil; import com.example.demo.Util.JWTUtil;
import com.example.demo.Util.TokenPayload;
import com.example.demo.domain.entity.Admin; import com.example.demo.domain.entity.Admin;
import com.example.demo.domain.vo.Password; import com.example.demo.domain.vo.Password;
import com.example.demo.domain.vo.Result; import com.example.demo.domain.vo.Result;
import com.example.demo.mapper.AdminMapper;
import com.example.demo.service.AdminService; import com.example.demo.service.AdminService;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -30,15 +28,24 @@ import org.springframework.web.bind.annotation.*;
public class AdminController { public class AdminController {
@Autowired @Autowired
private AdminService adminService; private AdminService adminService;
@Autowired
private AdminMapper adminMapper;
@PostMapping("/test")
public void testGetAdmin() {
Admin admin = adminMapper.getAdmin("14518");
System.out.println(admin.getMarkets()); // 应该输出 "马来西亚,新加坡,美国"
}
@PostMapping("/login") @PostMapping("/login")
public Result login(@RequestBody Admin admin) {
public Result login(@RequestBody Admin admin) {
try { try {
admin = adminService.login(admin); admin = adminService.login(admin);
String token = JWTUtil.createJWT(admin); String token = JWTUtil.createJWT(admin);
System.out.println(token); System.out.println(token);
admin.setPassword(null); admin.setPassword(null);
return Result.success(token, admin); return Result.success(token, admin);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();

6
src/main/java/com/example/demo/controller/RoleController.java

@ -46,6 +46,12 @@ public class RoleController {
List<RoleVo> list = roleService.selectAllRole(); List<RoleVo> list = roleService.selectAllRole();
return Result.success(list); return Result.success(list);
} }
//获取上级角色的下属角色列表
@PostMapping("/selectSub")
public List<RoleVo> selectSub(Integer fatherId) {
return roleService.selectSubRole(fatherId);
}
} }

2
src/main/java/com/example/demo/controller/WorkbenchController.java

@ -43,7 +43,7 @@ public class WorkbenchController {
*/ */
@PostMapping("getCard") @PostMapping("getCard")
public ResponseEntity<WorkbenchCard> card1(@RequestBody WorkbenchCard workbench){ public ResponseEntity<WorkbenchCard> card1(@RequestBody WorkbenchCard workbench){
WorkbenchCard result =workbenchService.getCardCache(workbench.getMarkets());
WorkbenchCard result =workbenchService.getCard(workbench.getMarkets());
return ResponseEntity.ok(result); return ResponseEntity.ok(result);
} }
/* /*

9
src/main/java/com/example/demo/domain/entity/Admin.java

@ -24,7 +24,9 @@ public class Admin implements UserDetails, Serializable {
private String password; // 密码 private String password; // 密码
private String machineId; // 机器码限两个 private String machineId; // 机器码限两个
private Byte adminStatus; // 状态启用/不启用 private Byte adminStatus; // 状态启用/不启用
private List<String> market; // 地区
private List<String> market; // 地区列表
private String markets; // 地区
private String postiton; // 职位 private String postiton; // 职位
private String remark; // 备注 private String remark; // 备注
@ -34,7 +36,10 @@ public class Admin implements UserDetails, Serializable {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date updateTime; // 更新时间 private Date updateTime; // 更新时间
private Integer roleId; private Integer roleId;
// 添加一个方法来方便测试和调试
// public void setMarket(String marketStr) {
// this.market = Arrays.asList(marketStr.split(","));
//}
@Override @Override
@JsonIgnore @JsonIgnore

3
src/main/java/com/example/demo/domain/vo/WorkbenchCard.java

@ -32,6 +32,9 @@ public class WorkbenchCard implements Serializable {
private Date endDate; // 结束时间 private Date endDate; // 结束时间
private Integer sumWow; // 总周同比% private Integer sumWow; // 总周同比%
private Integer sumDaily; // 总日环比% private Integer sumDaily; // 总日环比%
//更新时间
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date updateTime;
} }

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

@ -38,7 +38,7 @@ public class WorkbenchMarketCard implements Serializable {
private Integer yearlyRecharge; // 全年累计充值金币数 private Integer yearlyRecharge; // 全年累计充值金币数
private Integer yearlyMoney; // 全年累计金额 private Integer yearlyMoney; // 全年累计金额
// 卡片三日消费/退款/消耗相关
// 卡片三日消费/退款/消耗相关
private Integer consumePermanent; // 昨日新增消费永久 private Integer consumePermanent; // 昨日新增消费永久
private Integer consumeFreeJune; // 昨日新增消费六月免费 private Integer consumeFreeJune; // 昨日新增消费六月免费
private Integer consumeFreeDecember; // 昨日新增消费十二月免费 private Integer consumeFreeDecember; // 昨日新增消费十二月免费
@ -54,6 +54,7 @@ public class WorkbenchMarketCard implements Serializable {
// 卡片四人头数相关 // 卡片四人头数相关
private Integer rechargeNum; // 当日充值人数 private Integer rechargeNum; // 当日充值人数
private Integer ydayRechargeNum; // 当日充值人数
private Integer firstRecharge; // 当日首充人数 private Integer firstRecharge; // 当日首充人数
private Integer wow; // 周同比% private Integer wow; // 周同比%
private Integer daily; // 日环比% private Integer daily; // 日环比%
@ -61,8 +62,8 @@ public class WorkbenchMarketCard implements Serializable {
private Integer sumDaily; // 总日环比% private Integer sumDaily; // 总日环比%
private Integer yearlyRechargeNum; // 全年累计充值人头数 private Integer yearlyRechargeNum; // 全年累计充值人头数
/* //更新时间
//更新时间
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date updateTime;*/
private Date updateTime;
} }

2
src/main/java/com/example/demo/mapper/RoleMapper.java

@ -31,4 +31,6 @@ public interface RoleMapper {
//新建角色 //新建角色
void addRole(RoleVo roleVo); void addRole(RoleVo roleVo);
//根据父级id查下属角色
List<RoleVo> selectByFatherId(Integer fatherId);
} }

2
src/main/java/com/example/demo/service/RoleService.java

@ -22,4 +22,6 @@ public interface RoleService {
//查找全部角色 //查找全部角色
List<RoleVo> selectAllRole(); List<RoleVo> selectAllRole();
//根据父级id查找下属角色
List<RoleVo> selectSubRole(Integer fatherId);
} }

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

@ -11,14 +11,10 @@ import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.BadCredentialsException; import org.springframework.security.authentication.BadCredentialsException;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication; import org.springframework.security.core.Authentication;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.time.LocalDateTime;
import java.util.Date; import java.util.Date;
import java.util.regex.Pattern; import java.util.regex.Pattern;
@ -41,6 +37,7 @@ public class AdminServiceImpl implements AdminService {
Admin adminInDB = adminMapper.getAdmin(account); Admin adminInDB = adminMapper.getAdmin(account);
System.out.println("adminInDB:" + adminInDB); System.out.println("adminInDB:" + adminInDB);
System.out.println("adminInDB markets: " + adminInDB.getMarkets()); // 添加日志检查
if (adminInDB == null) { if (adminInDB == null) {
throw new RuntimeException("无此精网号"); throw new RuntimeException("无此精网号");
} }
@ -56,6 +53,8 @@ public class AdminServiceImpl implements AdminService {
UsernamePasswordAuthenticationToken token = UsernamePasswordAuthenticationToken token =
new UsernamePasswordAuthenticationToken(account, admin.getPassword()); new UsernamePasswordAuthenticationToken(account, admin.getPassword());
Authentication authentication = authenticationManager.authenticate(token); Authentication authentication = authenticationManager.authenticate(token);
Admin authenticatedAdmin = (Admin) authentication.getPrincipal();
System.out.println("authenticatedAdmin markets: " + authenticatedAdmin.getMarkets()); // 添加日志检查
return (Admin) authentication.getPrincipal(); return (Admin) authentication.getPrincipal();
} catch (Exception e) { } catch (Exception e) {

1
src/main/java/com/example/demo/serviceImpl/PermissionServiceImpl.java

@ -90,6 +90,7 @@ public class PermissionServiceImpl implements PermissionService {
} else { } else {
BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
admin.setPassword(passwordEncoder.encode(("123456"))); admin.setPassword(passwordEncoder.encode(("123456")));
// 将地区列表转换为逗号分隔的字符串 // 将地区列表转换为逗号分隔的字符串
String markets = String.join(",", admin.getMarket()); String markets = String.join(",", admin.getMarket());
admin.setMarket(Collections.singletonList(markets)); admin.setMarket(Collections.singletonList(markets));

5
src/main/java/com/example/demo/serviceImpl/RoleServiceImpl.java

@ -69,6 +69,11 @@ public class RoleServiceImpl implements RoleService {
public List<RoleVo> selectAllRole() { public List<RoleVo> selectAllRole() {
return roleMapper.selectAllRole(); return roleMapper.selectAllRole();
} }
@Override
public List<RoleVo> selectSubRole(Integer fatherId) {
return roleMapper.selectByFatherId(fatherId);
}
} }

22
src/main/java/com/example/demo/serviceImpl/WorkbenchServiceImpl.java

@ -92,8 +92,9 @@ public class WorkbenchServiceImpl implements WorkbenchService {
.collect(Collectors.toList()); .collect(Collectors.toList());
Integer sumWow= calculateAllWeekOverWeek(date); Integer sumWow= calculateAllWeekOverWeek(date);
Integer sumDaily=calculateAllDayOverDay(date); Integer sumDaily=calculateAllDayOverDay(date);
Date updateTime = findLatestUpdateTime(currentStatsList);
return new WorkbenchCard(marketCards, new ArrayList<>(), markets, new Date(), new Date(),sumWow,sumDaily);
return new WorkbenchCard(marketCards, new ArrayList<>(), markets, new Date(), new Date(),sumWow,sumDaily,updateTime);
} }
@Override @Override
@ -163,14 +164,15 @@ public class WorkbenchServiceImpl implements WorkbenchService {
card.setYearlyReduce(card.getYearlyConsume() - card.getYearlyRefund());//年累计消耗 card.setYearlyReduce(card.getYearlyConsume() - card.getYearlyRefund());//年累计消耗
// 卡片四人头数相关 // 卡片四人头数相关
card.setRechargeNum(currentStatistics.getRechargeNum()); card.setRechargeNum(currentStatistics.getRechargeNum());
card.setYdayRechargeNum(ydayStatistics.getRechargeNum());
card.setFirstRecharge(currentStatistics.getFirstRecharge()); card.setFirstRecharge(currentStatistics.getFirstRecharge());
card.setYearlyRechargeNum(currentStatistics.getYearlyRechargeNum()); card.setYearlyRechargeNum(currentStatistics.getYearlyRechargeNum());
// 周环比日同比 // 周环比日同比
card.setWow(calculateWeekOverWeek(market, currentDate)); card.setWow(calculateWeekOverWeek(market, currentDate));
card.setDaily(calculateDayOverDay(market, currentDate)); card.setDaily(calculateDayOverDay(market, currentDate));
/* //更新时间
card.setUpdateTime(currentStatistics.getUpdateTime());*/
//更新时间
card.setUpdateTime(currentStatistics.getUpdateTime());
} }
return card; return card;
} }
@ -178,7 +180,7 @@ public class WorkbenchServiceImpl implements WorkbenchService {
@Override @Override
public WorkbenchCard getGraph( Date startDate, Date endDate, List<String> markets) { public WorkbenchCard getGraph( Date startDate, Date endDate, List<String> markets) {
if (markets == null || markets.isEmpty()) { if (markets == null || markets.isEmpty()) {
return new WorkbenchCard(new ArrayList<>(), new ArrayList<>(), markets, startDate, endDate,0,0);
return new WorkbenchCard(new ArrayList<>(), new ArrayList<>(), markets, startDate, endDate,0,0,new Date());
} }
// 单次批量查询 // 单次批量查询
@ -216,7 +218,7 @@ public class WorkbenchServiceImpl implements WorkbenchService {
marketGraphs.add(graph); marketGraphs.add(graph);
} }
return new WorkbenchCard(new ArrayList<>(), marketGraphs, markets, startDate, endDate,0,0);
return new WorkbenchCard(new ArrayList<>(), marketGraphs, markets, startDate, endDate,0,0,new Date());
} }
/* /*
@ -365,6 +367,16 @@ public class WorkbenchServiceImpl implements WorkbenchService {
.atStartOfDay(ZoneId.systemDefault()) .atStartOfDay(ZoneId.systemDefault())
.toInstant()); .toInstant());
} }
//获取最近的更新时间
private Date findLatestUpdateTime(List<Statistics> statsList) {
// 使用流式处理来找到最新的 updateTime
Optional<Date> latestUpdateTime = statsList.stream()
.map(Statistics::getUpdateTime)
.filter(Objects::nonNull)
.max(Date::compareTo);
return latestUpdateTime.orElse(new Date(0)); // 如果没有找到则返回一个较早的时间点
}
} }

29
src/main/resources/mapper/AdminMapper.xml

@ -3,11 +3,36 @@
<mapper namespace="com.example.demo.mapper.AdminMapper"> <mapper namespace="com.example.demo.mapper.AdminMapper">
<select id="getAdmin" resultType="com.example.demo.domain.entity.Admin"> <select id="getAdmin" resultType="com.example.demo.domain.entity.Admin">
select * from admin
select
id as id,
admin_name as adminName,
account as account,
password as password,
machine_id as machineId,
admin_status as adminStatus,
market as markets,
postiton as postiton,
remark as remark,
create_time as createTime,
update_time as updateTime,
role_id as roleId
from admin
where account=#{account} where account=#{account}
</select> </select>
<select id="selectByName" resultType="com.example.demo.domain.entity.Admin"> <select id="selectByName" resultType="com.example.demo.domain.entity.Admin">
select * from admin
select id as id,
admin_name as adminName,
account as account,
password as password,
machine_id as machineId,
admin_status as adminStatus,
market as markets,
postiton as postiton,
remark as remark,
create_time as createTime,
update_time as updateTime,
role_id as roleId
from admin
where account= #{account} where account= #{account}
</select> </select>
<select id="getId" resultType="java.lang.Integer"> <select id="getId" resultType="java.lang.Integer">

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

@ -20,6 +20,13 @@
<select id="selectAllRole" resultType="com.example.demo.domain.vo.RoleVo"> <select id="selectAllRole" resultType="com.example.demo.domain.vo.RoleVo">
SELECT id,role_name FROM role SELECT id,role_name FROM role
</select> </select>
<select id="selectByFatherId" resultType="com.example.demo.domain.vo.RoleVo">
SELECT id,role_name FROM role
<where>
father_id = #{fatherId}
</where>
ORDER BY priority
</select>
<!-- 插入角色信息 --> <!-- 插入角色信息 -->
<insert id="addRole" parameterType="com.example.demo.domain.vo.RoleVo" useGeneratedKeys="true" keyProperty="id"> <insert id="addRole" parameterType="com.example.demo.domain.vo.RoleVo" useGeneratedKeys="true" keyProperty="id">

Loading…
Cancel
Save