[CMLR-060] 修复跨表归属并新增 SignInRecordDao
This commit is contained in:
@@ -5,7 +5,7 @@
|
||||
"CMLR-030","P0","3","backend","控制器签名 Map->DTO 等价替换","仅替换 Controller 方法参数类型与取值逻辑,保持 URL、HTTP 方法、返回 VO/Map 结构不变。","18 个 Map 入参接口全部改为 DTO;全局路由无新增/删除;接口返回类型与 JSON 字段集合与基线一致。","AUTOSERVER","代码评审重点检查序列化字段、空值分支、异常处理路径是否与旧实现等价。","回归执行关键接口快照比对(字段名、字段数量、状态码),差异需附原因。","已完成","已完成","已完成","已提交","","plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:20;plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:136;plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:365;src/main/java/vvpkassistant/controller/UserController.java:73;src/main/java/vvpkassistant/controller/PkController.java:70;src/main/java/vvpkassistant/controller/AnchorsController.java:32;src/main/java/vvpkassistant/controller/SystemMessageController.java:25;src/main/java/vvpkassistant/controller/ChatController.java:38;src/test/java/vvpkassistant/controller/ControllerMapToDtoContractTests.java:19","picked_reason:User/Pk与Anchors/SystemMessage/Chat DTO已完成,立即收口18接口可减少后续回归噪音。 | review_initial:5个目标Controller的18个历史Map端点已全部改为DTO签名,URL与返回原类型保持不变。 | validation_limited:mvn -q -Dtest=ControllerMapToDtoContractTests test 在编译阶段被仓库现存Lombok符号问题阻断。 | manual_test:修复编译基线后执行 mvn -q -Dtest=ControllerMapToDtoContractTests test;再用基线文档5条样例做字段级对比。 | evidence:新增 ControllerMapToDtoContractTests 约束18端点存在性、返回类型和@RequestBody Map=0。 | evidence:静态扫描5个Controller中 @RequestBody Map 匹配为0。 | risk:medium 运行期回归尚未在可执行环境完成。 | done_at:2026-02-08"
|
||||
"CMLR-040","P0","4.1","backend","迁移 User 域注解 SQL 到 Lambda","将 UserDao 的用户表查询注解 SQL 迁移到 LambdaQuery;签到相关 SQL 的迁移与落地改由 CMLR-060(新增 SignInRecordDao)闭环承接。","UserDao 不再包含 queryWithPhoneNumber 注解 SQL,改为 Lambda 等价查询;登录链路调用不变;签到 SQL 迁移责任在 CMLR-060 中完成并在该条验收。","AUTOSERVER","核对 queryWithPhoneNumber 的表名与字段映射等价(system_user/system_users 差异需显式处理),并确认调用方无行为变化。","回归登录老用户/新用户路径;签到链路迁移与回归在 CMLR-060 执行并给出证据。","已完成","已完成","已完成","已提交","","plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:124;plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:140;plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:144;src/main/java/vvpkassistant/User/mapper/UserDao.java:16;src/main/java/vvpkassistant/User/mapper/UserDao.java:17;src/main/java/vvpkassistant/User/model/UserModel.java:14;src/main/java/vvpkassistant/controller/UserController.java:156","picked_reason:P0且影响登录与签到核心链路,优先迁移可尽早暴露表映射与时区风险。 | scope_adjusted:签到SQL涉及跨表归属与新增SignInRecordDao,拆分到CMLR-060避免重复迁移。 | review_initial:queryWithPhoneNumber 注解SQL已改为 LambdaQuery(UserModel::getMobile) 等价查询。 | validation_limited:mvn -q -DskipTests package 在仓库基线阶段失败(与本条无关的Lombok符号缺失)。 | manual_test:修复编译基线后执行 mvn -q -DskipTests package;调用 /user/loginWithPhoneNumber 覆盖老用户/新用户两条路径。 | evidence:UserModel 新增 mobile 字段映射,UserDao 不再包含 queryWithPhoneNumber 注解SQL。 | evidence:签到SQL迁移已在范围拆分中转交 CMLR-060 处理。 | risk:medium system_user/system_users 实际表名差异仍需在可运行环境验证。 | done_at:2026-02-08"
|
||||
"CMLR-050","P0","4.2","backend","迁移 PK 域注解 SQL 到 Lambda","迁移 PK 域静态注解 SQL(PkInfoDao/PkRecordDao/PkRecordDetailDao)到 Lambda;动态查询 selectPkInfoByCondition 留给 CMLR-070,跨表明细归位留给 CMLR-060。","除 selectPkInfoByCondition、fetchDetailPkDataWithId、checkIfUnfinishedPKExistsWithAnchor(跨表项)外,PK 域注解 SQL 完成 Lambda 迁移:查询可用/全部PK、删除、按主播+时间、置顶时间更新、未邀请列表、当日列表、用户相关记录、待处理邀请、单条记录、主播存在性、明细查询。","AUTOSERVER","逐方法核对 where 条件、排序、limit/时间比较语义等价;明确拆分到 CMLR-060/CMLR-070 的方法不在本条重复改动。","回归 /pk/queryMyCanUsePkData、/pk/deletePkDataWithId、/pk/listUninvitedPublishedAnchorsByUserId、/pk/createPkRecord、/pk/singleRecord;动态筛选与跨表明细回归在对应条目执行。","已完成","已完成","已完成","已提交","","plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:21;plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:183;plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:184;src/main/java/vvpkassistant/pk/mapper/PkInfoDao.java:14;src/main/java/vvpkassistant/pk/mapper/PkRecordDao.java:17;src/main/java/vvpkassistant/pk/mapper/PkRecordDetailDao.java:15;src/main/java/vvpkassistant/pk/mapper/PkInfoDao.java:47;src/main/java/vvpkassistant/pk/mapper/PkInfoDao.java:75;src/main/java/vvpkassistant/pk/mapper/PkRecordDao.java:18;src/main/java/vvpkassistant/pk/mapper/PkRecordDao.java:34;src/main/java/vvpkassistant/pk/mapper/PkRecordDetailDao.java:14","picked_reason:P0且覆盖PK主流程DAO,先迁移可提前锁定筛选/排序语义风险。 | scope_adjusted:selectPkInfoByCondition归CMLR-070,fetchDetailPkDataWithId归CMLR-060,避免重复迁移。 | scope_adjusted:checkIfUnfinishedPKExistsWithAnchor 同属跨表pk_record查询,转交CMLR-060统一归位。 | review_initial:PK域静态注解SQL已迁移为Lambda default方法,保留原条件与排序/分页语义。 | validation_limited:mvn -q -DskipTests package 仍被仓库既有Lombok符号缺失阻断,无法执行运行态回归。 | manual_test:修复编译基线后执行 mvn -q -DskipTests package;回归 /pk/queryMyCanUsePkData、/pk/deletePkDataWithId、/pk/listUninvitedPublishedAnchorsByUserId、/pk/createPkRecord、/pk/singleRecord。 | evidence:PkInfoDao/PkRecordDao/PkRecordDetailDao 静态SQL方法已改为 default+Wrappers 实现。 | evidence:selectPkInfoByCondition 与跨表明细项按拆分保留到 CMLR-070/CMLR-060。 | risk:medium pk_time 字段历史为字符串,时间比较与数据库函数差异需在联调环境复核。 | done_at:2026-02-08"
|
||||
"CMLR-060","P0","5","backend","修复跨表归属并新增 SignInRecordDao","将 UserDao 中跨表 SQL 迁移到正确 Mapper,新增 SignInRecord 实体与 Dao,迁移明细查询到 PkRecordDetailDao。","新增 `SignInRecord`+`SignInRecordDao` 并接入;`UserDao` 不再承载 `pk_record` 与 `sign_in_records` SQL;详情查询归位到 `PkRecordDetailDao`。","AUTOSERVER","评审需确认实体@TableName、字段映射、Mapper 扫描路径与事务边界正确。","执行签到链路、PK 详情链路、handlePkInfo 链路回归,确认依赖注入与事务无回归。","未开始","未开始","未开始","未提交","","plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:22;plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:91;plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:93;plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:137",""
|
||||
"CMLR-060","P0","5","backend","修复跨表归属并新增 SignInRecordDao","将 UserDao 中跨表 SQL 迁移到正确 Mapper,新增 SignInRecord 实体与 Dao,迁移明细查询到 PkRecordDetailDao。","新增 `SignInRecord`+`SignInRecordDao` 并接入;`UserDao` 不再承载 `pk_record` 与 `sign_in_records` SQL;详情查询归位到 `PkRecordDetailDao`。","AUTOSERVER","评审需确认实体@TableName、字段映射、Mapper 扫描路径与事务边界正确。","执行签到链路、PK 详情链路、handlePkInfo 链路回归,确认依赖注入与事务无回归。","已完成","已完成","已完成","已提交","","plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:22;plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:91;plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:93;plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:137;src/main/java/vvpkassistant/User/model/SignInRecord.java:1;src/main/java/vvpkassistant/User/mapper/SignInRecordDao.java:15;src/main/java/vvpkassistant/User/mapper/UserDao.java:10;src/main/java/vvpkassistant/pk/mapper/PkRecordDao.java:43;src/main/java/vvpkassistant/controller/UserController.java:252;src/main/java/vvpkassistant/controller/UserController.java:270;src/main/java/vvpkassistant/controller/PkController.java:121;src/main/java/vvpkassistant/pk/service/PKServiceImpl.java:224","picked_reason:已完成静态SQL迁移后优先处理跨表归位,避免Mapper职责继续漂移。 | review_initial:新增 SignInRecord+SignInRecordDao,并将 UserDao 中 pk_record/sign_in_records 跨表方法全部迁出。 | validation_limited:mvn -q -DskipTests package 仍因仓库既有Lombok符号缺失失败,未能执行可运行回归。 | manual_test:修复编译基线后执行 mvn -q -DskipTests package;回归 /user/signIn、/user/checkSignStatus、/user/handlePkInfo、/pk/fetchDetailPkDataWithId。 | evidence:UserController 已改调 recordDao.findCreatedPk/getMyGuestPkList 与 signInRecordDao.signIn/checkSignStatus。 | evidence:PkController 明细查询已归位 detailDao.queryDetail;PKServiceImpl 未完成记录检查改调 PkRecordDao。 | risk:medium 日期写入从数据库CURDATE改为Asia/Shanghai本地日期,需在生产时区配置下验证一致性。 | done_at:2026-02-08"
|
||||
"CMLR-070","P0","6","backend","动态查询 selectPkInfoByCondition 等价迁移","将 `selectPkInfoByCondition` 迁移为 Lambda 条件拼装并保留原排序语义,必要处使用 `last` 保序。","在相同输入下,迁移前后结果集数量、顺序、关键字段完全一致;覆盖 condition 为空/有值、有无 userId 两类场景。","AUTOSERVER","评审需检查 every condition 分支、排序表达式与 SQL 注入风险控制。","执行首页筛选、主播 ID 脱敏、置顶排序回归;输出前后结果对比记录。","未开始","未开始","未开始","未提交","","plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:23;plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:189;plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:196;src/main/java/vvpkassistant/pk/mapper/PkInfoDao.java:14",""
|
||||
"CMLR-080","P0","7","backend","完成编译与分层自动化测试","完成全量编译,并为改造影响的 Controller/DAO 补齐最低成功+失败用例,确保可持续回归。","`mvn clean test` 通过;涉及改造的每个 Controller 至少 1 个成功 + 1 个失败/校验用例;关键 DAO 有等价查询测试。","AUTOSERVER","测试需覆盖分页、幂等、非法参数、空结果等分支;失败断言使用稳定错误码/消息。","回归前后测试结果可追溯(命令+结果),新增测试不得依赖脆弱时间窗口。","未开始","未开始","未开始","未提交","","plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:24;plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:148;plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:199;plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:236",""
|
||||
"CMLR-090","P0","8","both","核心链路端到端回归","围绕分页、置顶、邀请状态、主播 ID 脱敏、签到幂等等关键路径执行联调回归,确认接口输出完全兼容。","关键路径回归清单全部通过;至少覆盖 10 条核心接口用例并完成字段级比对;无阻断级差异。","AUTOE2E","联调前固定测试数据与时间窗口,避免误判;接口对比需包含状态码与响应字段。","增加并发与边界复测(重复邀请、重复签到、置顶过期边界),确认无行为漂移。","未开始","未开始","未开始","未提交","","plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:25;plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:146;plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:197;plan/2026-02-08_19-56-54-controller-map-lambda-refactor.md:367",""
|
||||
|
||||
|
32
src/main/java/vvpkassistant/User/mapper/SignInRecordDao.java
Normal file
32
src/main/java/vvpkassistant/User/mapper/SignInRecordDao.java
Normal file
@@ -0,0 +1,32 @@
|
||||
package vvpkassistant.User.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import vvpkassistant.User.model.SignInRecord;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.time.ZoneId;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
|
||||
@Mapper
|
||||
public interface SignInRecordDao extends BaseMapper<SignInRecord> {
|
||||
|
||||
default int signIn(int userId) {
|
||||
SignInRecord record = new SignInRecord();
|
||||
record.setUserId(userId);
|
||||
record.setTime(todayInShanghai());
|
||||
return insert(record);
|
||||
}
|
||||
|
||||
default int checkSignStatus(int userId) {
|
||||
return Math.toIntExact(selectCount(Wrappers.<SignInRecord>lambdaQuery()
|
||||
.eq(SignInRecord::getUserId, userId)
|
||||
.eq(SignInRecord::getTime, todayInShanghai())));
|
||||
}
|
||||
|
||||
static int todayInShanghai() {
|
||||
return Integer.parseInt(LocalDate.now(ZoneId.of("Asia/Shanghai"))
|
||||
.format(DateTimeFormatter.BASIC_ISO_DATE));
|
||||
}
|
||||
}
|
||||
@@ -2,13 +2,8 @@ package vvpkassistant.User.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import org.apache.ibatis.annotations.Insert;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.apache.ibatis.annotations.Select;
|
||||
import vvpkassistant.User.model.UserModel;
|
||||
import vvpkassistant.pk.model.PkRecord;
|
||||
import java.util.List;
|
||||
|
||||
@Mapper
|
||||
public interface UserDao extends BaseMapper<UserModel> {
|
||||
@@ -19,20 +14,4 @@ public interface UserDao extends BaseMapper<UserModel> {
|
||||
.eq(UserModel::getMobile, phoneNumber));
|
||||
}
|
||||
|
||||
// 我邀请的pk数据
|
||||
@Select("SELECT * FROM pk_record WHERE user_id_b = #{userId} ORDER BY id DESC LIMIT #{page}, #{size};")
|
||||
List<PkRecord> getMyGuestPkList(@Param("userId") Integer userId , @Param("page") Integer page, @Param("size") Integer size);
|
||||
|
||||
// 我发起的pk数据
|
||||
@Select("SELECT * FROM pk_record WHERE user_id_a = #{userId} ORDER BY id DESC LIMIT #{page}, #{size};")
|
||||
List<PkRecord> findCreatedPk(@Param("userId") Integer userId , @Param("page") Integer page, @Param("size") Integer size);
|
||||
|
||||
// 签到
|
||||
@Insert("insert into `sign_in_records` set user_id = #{userId} , time = replace(current_date, '-', '')")
|
||||
int signIn(@Param("userId") int userId);
|
||||
|
||||
// 查询当天签到状态
|
||||
@Select("SELECT COUNT(*) FROM `sign_in_records` WHERE user_id = #{userId} AND time = REPLACE(CURDATE(), '-', '')")
|
||||
int checkSignStatus(@Param("userId") int userId);
|
||||
|
||||
}
|
||||
|
||||
15
src/main/java/vvpkassistant/User/model/SignInRecord.java
Normal file
15
src/main/java/vvpkassistant/User/model/SignInRecord.java
Normal file
@@ -0,0 +1,15 @@
|
||||
package vvpkassistant.User.model;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
@TableName("sign_in_records")
|
||||
public class SignInRecord {
|
||||
@TableId(type = IdType.AUTO)
|
||||
private Integer id;
|
||||
private Integer userId;
|
||||
private Integer time;
|
||||
}
|
||||
@@ -118,7 +118,7 @@ public class PkController {
|
||||
@PostMapping("fetchDetailPkDataWithId")
|
||||
public ResponseData<Object> fetchDetailPkDataWithId(@RequestBody PkFetchDetailDTO request) {
|
||||
Integer id = request.getId();
|
||||
List<PkRecordDetail> pkRecordDetails = recordDao.fetchDetailPkDataWithId(id);
|
||||
List<PkRecordDetail> pkRecordDetails = detailDao.queryDetail(id);
|
||||
return ResponseData.success(pkRecordDetails);
|
||||
}
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@ import vvpkassistant.Data.ResponseData;
|
||||
import vvpkassistant.Data.ResponseInfo;
|
||||
import vvpkassistant.Data.WxChatParam;
|
||||
import vvpkassistant.User.mapper.UserDao;
|
||||
import vvpkassistant.User.mapper.SignInRecordDao;
|
||||
import vvpkassistant.User.model.DTO.ScanInfoDTO;
|
||||
import vvpkassistant.User.model.DTO.UserCancelPinDTO;
|
||||
import vvpkassistant.User.model.DTO.UserHandlePkInfoDTO;
|
||||
@@ -30,6 +31,7 @@ import vvpkassistant.exception.BusinessException;
|
||||
import vvpkassistant.mail.model.MailModel;
|
||||
import vvpkassistant.mail.service.MailService;
|
||||
import vvpkassistant.pk.mapper.PkInfoDao;
|
||||
import vvpkassistant.pk.mapper.PkRecordDao;
|
||||
import vvpkassistant.pk.model.PkInfoModel;
|
||||
import vvpkassistant.pk.model.PkRecordDetail;
|
||||
import vvpkassistant.pk.mapper.PkRecordDetailDao;
|
||||
@@ -52,9 +54,15 @@ public class UserController {
|
||||
@Autowired
|
||||
private PkRecordDetailDao detailDao;
|
||||
|
||||
@Autowired
|
||||
private PkRecordDao recordDao;
|
||||
|
||||
@Autowired
|
||||
private CoinRecordsDao coinRecordsDao;
|
||||
|
||||
@Autowired
|
||||
private SignInRecordDao signInRecordDao;
|
||||
|
||||
@Autowired
|
||||
private WxChatParam wxChatParam;
|
||||
|
||||
@@ -241,10 +249,10 @@ public class UserController {
|
||||
|
||||
// 我发起的pk数据
|
||||
if (type == 1) {
|
||||
return ResponseData.success(userDao.findCreatedPk(id, page * size, size));
|
||||
return ResponseData.success(recordDao.findCreatedPk(id, page * size, size));
|
||||
}else if (type == 2){
|
||||
// 别人邀请我的pk数据
|
||||
return ResponseData.success(userDao.getMyGuestPkList(id, page * size, size));
|
||||
return ResponseData.success(recordDao.getMyGuestPkList(id, page * size, size));
|
||||
}
|
||||
throw new BusinessException(ErrorCode.SYSTEM_ERROR);
|
||||
}
|
||||
@@ -262,12 +270,12 @@ public class UserController {
|
||||
@PostMapping("signIn")
|
||||
public ResponseData<Object> signIn() {
|
||||
int userId = Integer.parseInt(StpUtil.getLoginId().toString());
|
||||
int i = userDao.checkSignStatus(userId);
|
||||
int i = signInRecordDao.checkSignStatus(userId);
|
||||
if (i != 0) {
|
||||
throw new BusinessException(ErrorCode.SIGN_IN_FAIL);
|
||||
}
|
||||
|
||||
int result = userDao.signIn(userId);
|
||||
int result = signInRecordDao.signIn(userId);
|
||||
UserModel userModel = userDao.selectById(userId);
|
||||
int count = Integer.parseInt(FunctionConfigHolder.getValue("签到增加积分"));
|
||||
|
||||
@@ -290,7 +298,7 @@ public class UserController {
|
||||
// 查询用户当天签到状态
|
||||
@GetMapping("checkSignStatus")
|
||||
public ResponseData<Object> checkSignStatus(Integer userId) {
|
||||
int i = userDao.checkSignStatus(userId);
|
||||
int i = signInRecordDao.checkSignStatus(userId);
|
||||
return i == 0 ? ResponseData.success(true) : ResponseData.success(false);
|
||||
}
|
||||
|
||||
|
||||
@@ -88,13 +88,4 @@ public interface PkInfoDao extends BaseMapper<PkInfoModel> {
|
||||
.gt(PkInfoModel::getPkTime, currentTime));
|
||||
}
|
||||
|
||||
// 查询当前用户与该主播是否存在未完成的pk记录
|
||||
@Select("SELECT COUNT(*) FROM `pk_record`\n" +
|
||||
"WHERE (user_id_a = #{userId} OR user_id_b = #{userId})\n" +
|
||||
"AND (anchor_id_a = #{anchorId} OR anchor_id_b = #{anchorId})\n" +
|
||||
"AND pk_status = 1\n" +
|
||||
"AND pk_time > UNIX_TIMESTAMP()")
|
||||
Integer checkIfUnfinishedPKExistsWithAnchor(@Param("userId") Integer userId, @Param("anchorId") String anchorId);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -3,9 +3,6 @@ package vvpkassistant.pk.mapper;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.apache.ibatis.annotations.Select;
|
||||
import vvpkassistant.pk.model.PkRecordDetail;
|
||||
import vvpkassistant.pk.model.PkRecord;
|
||||
|
||||
import java.util.List;
|
||||
@@ -43,10 +40,35 @@ public interface PkRecordDao extends BaseMapper<PkRecord> {
|
||||
return selectById(id);
|
||||
}
|
||||
|
||||
// 我邀请的pk数据
|
||||
default List<PkRecord> getMyGuestPkList(Integer userId, Integer page, Integer size) {
|
||||
return selectList(Wrappers.<PkRecord>lambdaQuery()
|
||||
.eq(PkRecord::getUserIdB, userId)
|
||||
.orderByDesc(PkRecord::getId)
|
||||
.last(String.format("limit %d, %d", page, size)));
|
||||
}
|
||||
|
||||
// 查询每场pk的详细数据
|
||||
@Select("select * from pk_record_detail where pk_record_id = #{id}")
|
||||
List<PkRecordDetail> fetchDetailPkDataWithId(@Param("id") Integer id);
|
||||
// 我发起的pk数据
|
||||
default List<PkRecord> findCreatedPk(Integer userId, Integer page, Integer size) {
|
||||
return selectList(Wrappers.<PkRecord>lambdaQuery()
|
||||
.eq(PkRecord::getUserIdA, userId)
|
||||
.orderByDesc(PkRecord::getId)
|
||||
.last(String.format("limit %d, %d", page, size)));
|
||||
}
|
||||
|
||||
// 查询当前用户与该主播是否存在未完成的pk记录
|
||||
default int checkIfUnfinishedPKExistsWithAnchor(Integer userId, String anchorId) {
|
||||
long currentTime = System.currentTimeMillis() / 1000;
|
||||
return Math.toIntExact(selectCount(Wrappers.<PkRecord>lambdaQuery()
|
||||
.and(wrapper -> wrapper.eq(PkRecord::getUserIdA, userId)
|
||||
.or()
|
||||
.eq(PkRecord::getUserIdB, userId))
|
||||
.and(wrapper -> wrapper.eq(PkRecord::getAnchorIdA, anchorId)
|
||||
.or()
|
||||
.eq(PkRecord::getAnchorIdB, anchorId))
|
||||
.eq(PkRecord::getPkStatus, 1)
|
||||
.gt(PkRecord::getPkTime, String.valueOf(currentTime))));
|
||||
}
|
||||
|
||||
// 查询主播是否存在pk记录
|
||||
default int existsPkRecordByAnchor(String id) {
|
||||
|
||||
@@ -221,7 +221,7 @@ public class PKServiceImpl extends ServiceImpl<PkInfoDao, PkInfoModel> implement
|
||||
pkInfoModel.setDisPlayId(pkInfoModel.getAnchorId());
|
||||
} else {
|
||||
// 查询是否存在未完成的pk记录
|
||||
Integer isHave = pkInfoDao.checkIfUnfinishedPKExistsWithAnchor(userId, pkInfoModel.getAnchorId());
|
||||
Integer isHave = pkRecordDao.checkIfUnfinishedPKExistsWithAnchor(userId, pkInfoModel.getAnchorId());
|
||||
if (isHave > 0) {
|
||||
pkInfoModel.setDisPlayId(pkInfoModel.getAnchorId());
|
||||
} else {
|
||||
@@ -233,7 +233,7 @@ public class PKServiceImpl extends ServiceImpl<PkInfoDao, PkInfoModel> implement
|
||||
throw new BusinessException(ErrorCode.SYSTEM_ERROR,"当前信息已无效");
|
||||
}
|
||||
} else {
|
||||
Integer isHave = pkInfoDao.checkIfUnfinishedPKExistsWithAnchor(userId, pkInfoModel.getAnchorId());
|
||||
Integer isHave = pkRecordDao.checkIfUnfinishedPKExistsWithAnchor(userId, pkInfoModel.getAnchorId());
|
||||
if (isHave > 0) {
|
||||
pkInfoModel.setDisPlayId(pkInfoModel.getAnchorId());
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user