--- title: "07-如何对大麦网的数据进行重置" created: 2025-12-10 aliases: - 如何对大麦网的数据进行重置 tags: - 项目 --- # 如何对大麦网的数据进行重置 有的小伙伴在学习项目时,会进行多次支付,当次数很多了后,就会有节目的余票没有了,不能在进行支付的情况,为了解决这个问题,本人额外写了一个重置的接口,只要调用此接口,节目相关的所有数据就会进行重置为初始状态 接口地址 参数传递 请求头 ```text no_verify = true ``` 请求体 ```json { "programId":"1" } ``` 这里把重置的流程代码也贴出来,如果小伙伴想知道如何进行重置的,也可以查看 ### 重置流程 com.damai.controller.ProgramResetController#resetExecute ```java @RestController @RequestMapping("/program/reset") @Api(tags = "program-reset", value = "节目数据重置") public class ProgramResetController { @Autowired private ProgramService programService; @ApiOperation(value = "执行重置(根据节目id)") @PostMapping(value = "/execute") public ApiResponse resetExecute(@Valid @RequestBody ProgramResetExecuteDto programResetExecuteDto) { return ApiResponse.ok(programService.resetExecute(programResetExecuteDto)); } } ``` com.damai.service.ProgramService#resetExecute ```java @Transactional(rollbackFor = Exception.class) public Boolean resetExecute(ProgramResetExecuteDto programResetExecuteDto) { Long programId = programResetExecuteDto.getProgramId(); //查出该节目下锁定和已售卖的座位 LambdaQueryWrapper seatQueryWrapper = Wrappers.lambdaQuery(Seat.class).eq(Seat::getProgramId, programId) .in(Seat::getSellStatus,SellStatus.LOCK.getCode(),SellStatus.SOLD.getCode()); List seatList = seatMapper.selectList(seatQueryWrapper); if (CollectionUtil.isNotEmpty(seatList)) { //执行到这里说明有锁定和已售卖的座位,那么就把该节目下的座位都重置一遍 LambdaUpdateWrapper seatUpdateWrapper = Wrappers.lambdaUpdate(Seat.class).eq(Seat::getProgramId, programId); Seat seatUpdate = new Seat(); seatUpdate.setSellStatus(SellStatus.NO_SOLD.getCode()); seatMapper.update(seatUpdate,seatUpdateWrapper); } //查询该节目下的票档 LambdaQueryWrapper ticketCategoryQueryWrapper = Wrappers.lambdaQuery(TicketCategory.class).eq(TicketCategory::getProgramId, programId); List ticketCategories = ticketCategoryMapper.selectList(ticketCategoryQueryWrapper); if (CollectionUtil.isNotEmpty(ticketCategories)) { for (TicketCategory ticketCategory : ticketCategories) { Long remainNumber = ticketCategory.getRemainNumber(); Long totalNumber = ticketCategory.getTotalNumber(); //如果总数和剩余数不一致,则进行重置 if (!(remainNumber.equals(totalNumber))) { TicketCategory ticketCategoryUpdate = new TicketCategory(); ticketCategoryUpdate.setRemainNumber(totalNumber); LambdaUpdateWrapper ticketCategoryUpdateWrapper = Wrappers.lambdaUpdate(TicketCategory.class) .eq(TicketCategory::getProgramId, programId) .eq(TicketCategory::getId,ticketCategory.getId()); ticketCategoryMapper.update(ticketCategoryUpdate,ticketCategoryUpdateWrapper); } } } //删除缓存相关数据 delRedisData(programId); //删除本地缓存数据 delLocalCache(programId); return true; } ``` ```java private void delRedisData(Long programId){ //删除节目缓存 redisCache.del(RedisKeyBuild.createRedisKey(RedisKeyManage.PROGRAM,programId)); //删除节目演出时间缓存 redisCache.del(RedisKeyBuild.createRedisKey(RedisKeyManage.PROGRAM_SHOW_TIME,programId)); //删除未售卖座位缓存 redisCache.del(RedisKeyBuild.createRedisKey(RedisKeyManage.PROGRAM_SEAT_NO_SOLD_HASH, programId)); //删除锁定座位缓存 redisCache.del(RedisKeyBuild.createRedisKey(RedisKeyManage.PROGRAM_SEAT_LOCK_HASH, programId)); //删除已售卖座位缓存 redisCache.del(RedisKeyBuild.createRedisKey(RedisKeyManage.PROGRAM_SEAT_SOLD_HASH, programId)); //删除节目票档缓存 redisCache.del(RedisKeyBuild.createRedisKey(RedisKeyManage.PROGRAM_TICKET_CATEGORY_LIST, programId)); //删除余票缓存 redisCache.del(RedisKeyBuild.createRedisKey(RedisKeyManage.PROGRAM_TICKET_REMAIN_NUMBER_HASH, programId)); } ``` ```java public void delLocalCache(Long programId){ log.info("删除本地缓存 programId : {}",programId); localCacheProgram.del(RedisKeyBuild.createRedisKey(RedisKeyManage.PROGRAM, programId).getRelKey()); localCacheProgramGroup.del(RedisKeyBuild.createRedisKey(RedisKeyManage.PROGRAM_GROUP, programId).getRelKey()); localCacheProgramShowTime.del(RedisKeyBuild.createRedisKey(RedisKeyManage.PROGRAM_SHOW_TIME, programId).getRelKey()); localCacheTicketCategory.del(programId); } ``` --- **企业级项目导航**:⬅️ [[06-如何安装ngrok|06-如何安装ngrok]] | 07-如何对大麦网的数据进行重置 | ➡️ [[08-项目的接口文档|08-项目的接口文档]]