From a684834f7ea4f8f5beec5415891a3b3214078690 Mon Sep 17 00:00:00 2001 From: liujie <1793218484@qq.com> Date: 星期二, 30 九月 2025 14:33:25 +0800 Subject: [PATCH] app汇报任务 --- ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TMissionServiceImpl.java | 107 ++++++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 89 insertions(+), 18 deletions(-) diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TMissionServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TMissionServiceImpl.java index 0e94d2f..6889082 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TMissionServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TMissionServiceImpl.java @@ -1,14 +1,21 @@ package com.ruoyi.system.service.impl; +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONArray; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.google.gson.JsonArray; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.common.core.domain.BaseModel; import com.ruoyi.common.core.domain.BasePage; import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.system.dto.EquipmentDto; import com.ruoyi.system.dto.TMissionUserDto; +import com.ruoyi.system.mapper.TAppUserEquipmentMapper; import com.ruoyi.system.mapper.TMissionMapper; import com.ruoyi.system.mapper.TMissionUserMapper; +import com.ruoyi.system.model.TAppUserEquipment; import com.ruoyi.system.model.TMission; import com.ruoyi.system.model.TMissionUser; import com.ruoyi.system.query.TMissionQuery; @@ -17,6 +24,7 @@ import com.ruoyi.system.vo.TMissionReassignVO; import com.ruoyi.system.vo.TMissionVO; import com.ruoyi.system.vo.TotalHistoryVo; +import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; @@ -51,22 +59,25 @@ @Resource private RedisCache redisCache; + @Resource + private TAppUserEquipmentMapper appUserEquipmentMapper; + @Override public PageInfo<TMissionVO> pageListAssigned(TMissionQuery query) { PageInfo<TMissionVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); List<TMissionVO> list = this.baseMapper.pageListAssigned(query, pageInfo); - if(CollectionUtils.isEmpty(list)){ + if (CollectionUtils.isEmpty(list)) { return pageInfo; } // 计算时间差 for (TMissionVO tMissionVO : list) { - if(Objects.nonNull(tMissionVO.getAssignTime())){ - if(Objects.nonNull(tMissionVO.getReceiveTime())){ + if (Objects.nonNull(tMissionVO.getAssignTime())) { + if (Objects.nonNull(tMissionVO.getReceiveTime())) { // 计算LocalDateTime两个时间相差秒数 Duration duration = Duration.between(tMissionVO.getAssignTime(), tMissionVO.getReceiveTime()); tMissionVO.setResponseTimePoor(duration.getSeconds()); } - if(Objects.nonNull(tMissionVO.getFinishTime())){ + if (Objects.nonNull(tMissionVO.getFinishTime())) { // 计算LocalDateTime两个时间相差小时 Duration duration = Duration.between(tMissionVO.getReceiveTime(), tMissionVO.getFinishTime()); double minutes = (double) duration.toMinutes(); @@ -91,18 +102,18 @@ public PageInfo<TMissionVO> pageListMissionPool(TMissionQuery query) { PageInfo<TMissionVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); List<TMissionVO> list = this.baseMapper.pageListMissionPool(query, pageInfo); - if(CollectionUtils.isEmpty(list)){ + if (CollectionUtils.isEmpty(list)) { return pageInfo; } // 计算时间差 for (TMissionVO tMissionVO : list) { - if(Objects.nonNull(tMissionVO.getAssignTime())){ - if(Objects.nonNull(tMissionVO.getReceiveTime())){ + if (Objects.nonNull(tMissionVO.getAssignTime())) { + if (Objects.nonNull(tMissionVO.getReceiveTime())) { // 计算LocalDateTime两个时间相差秒数 Duration duration = Duration.between(tMissionVO.getAssignTime(), tMissionVO.getReceiveTime()); tMissionVO.setResponseTimePoor(duration.getSeconds()); } - if(Objects.nonNull(tMissionVO.getFinishTime())){ + if (Objects.nonNull(tMissionVO.getFinishTime())) { // 计算LocalDateTime两个时间相差小时 Duration duration = Duration.between(tMissionVO.getReceiveTime(), tMissionVO.getFinishTime()); double minutes = (double) duration.toMinutes(); @@ -119,7 +130,7 @@ public TotalHistoryVo totalHistory(String userId) { TotalHistoryVo totalHistoryVo = new TotalHistoryVo(); List<TMissionUser> tMissionUsers = missionUserMapper.selectList(new LambdaQueryWrapper<TMissionUser>().eq(TMissionUser::getAppUserId, userId)); - if(tMissionUsers.isEmpty()){ + if (tMissionUsers.isEmpty()) { return totalHistoryVo; } long count = tMissionUsers.stream().filter(e -> e.getStatus() == 1).count(); @@ -145,8 +156,68 @@ } @Override - public void successMission(TMissionUserDto dto) { + public void successMission(TMissionUserDto dto, String userId) { + TMissionUser user = missionUserMapper.selectById(dto.getId()); + BeanUtils.copyProperties(dto, user); + missionUserMapper.updateById(user); + // 更新装备 + TAppUserEquipment tAppUserEquipment = appUserEquipmentMapper.selectOne(new LambdaQueryWrapper<TAppUserEquipment>().eq(TAppUserEquipment::getAppUserId, userId).eq(TAppUserEquipment::getAppUserId, userId)); + if (Objects.nonNull(tAppUserEquipment)) { + String lossText = dto.getLossText(); + String victoryText = dto.getVictoryText(); + List<EquipmentDto> victoryTextDtos = JSONArray.parseArray(victoryText, EquipmentDto.class); + List<EquipmentDto> lossTextDtos = JSONArray.parseArray(lossText, EquipmentDto.class); + EquipmentDto equipmentDto = victoryTextDtos.stream().filter(e -> e.getId().equals("0")).findFirst().orElse(null); + EquipmentDto lossEquipmentDto = lossTextDtos.stream().filter(e -> e.getId().equals("0")).findFirst().orElse(null); + int count = equipmentDto.getCount() - lossEquipmentDto.getCount(); + tAppUserEquipment.setPersonCount(count); + for (EquipmentDto victoryTextDto : victoryTextDtos) { + for (EquipmentDto lossTextDto : lossTextDtos) { + if (victoryTextDto.getId().equals(lossTextDto.getId())) { + victoryTextDto.setCount(victoryTextDto.getCount() - lossTextDto.getCount()); + } + } + } + + String equipmentCount = tAppUserEquipment.getEquipmentCount(); + // 目前的装备 + List<EquipmentDto> EquipmentDtoList = JSONArray.parseArray(equipmentCount, EquipmentDto.class); + List<String> ids = EquipmentDtoList.stream().map(EquipmentDto::getId).collect(Collectors.toList()); + List<EquipmentDto> haveEquipment = victoryTextDtos.stream().filter(e -> ids.contains(e.getId())).collect(Collectors.toList()); + List<EquipmentDto> notHaveEquipment = victoryTextDtos.stream().filter(e -> !ids.contains(e.getId())).collect(Collectors.toList()); + + for (EquipmentDto equipmentDto1 : EquipmentDtoList) { + EquipmentDto equipmentDto2 = haveEquipment.stream().filter(e -> e.getId().equals(equipmentDto1.getId())).findFirst().get(); + equipmentDto1.setCount(equipmentDto1.getCount() + equipmentDto2.getCount()); + } + EquipmentDtoList.addAll(notHaveEquipment); + tAppUserEquipment.setEquipmentCount(JSON.toJSONString(EquipmentDtoList)); + appUserEquipmentMapper.updateById(tAppUserEquipment); + } else { + tAppUserEquipment = new TAppUserEquipment(); + tAppUserEquipment.setAppUserId(userId); + String lossText = dto.getLossText(); + String victoryText = dto.getVictoryText(); + + List<EquipmentDto> victoryTextDtos = JSONArray.parseArray(victoryText, EquipmentDto.class); + List<EquipmentDto> lossTextDtos = JSONArray.parseArray(lossText, EquipmentDto.class); + + EquipmentDto equipmentDto = victoryTextDtos.stream().filter(e -> e.getId().equals("0")).findFirst().orElse(null); + EquipmentDto lossEquipmentDto = lossTextDtos.stream().filter(e -> e.getId().equals("0")).findFirst().orElse(null); + int count = equipmentDto.getCount() - lossEquipmentDto.getCount(); + tAppUserEquipment.setPersonCount(count); + + for (EquipmentDto victoryTextDto : victoryTextDtos) { + for (EquipmentDto lossTextDto : lossTextDtos) { + if (victoryTextDto.getId().equals(lossTextDto.getId())) { + victoryTextDto.setCount(victoryTextDto.getCount() - lossTextDto.getCount()); + } + } + } + tAppUserEquipment.setEquipmentCount(JSON.toJSONString(victoryTextDtos)); + appUserEquipmentMapper.insert(tAppUserEquipment); + } } @Override @@ -159,17 +230,17 @@ public MissionTotalVo missionTotal(String userId) { MissionTotalVo missionTotalVo = new MissionTotalVo(); List<TMissionUser> tMissionUsers = missionUserMapper.selectList(new LambdaQueryWrapper<TMissionUser>().eq(TMissionUser::getAppUserId, userId).eq(TMissionUser::getStatus, 0)); - if(tMissionUsers.isEmpty()){ + if (tMissionUsers.isEmpty()) { return missionTotalVo; } List<String> missionIds = tMissionUsers.stream().map(TMissionUser::getMissionId).collect(Collectors.toList()); List<TMission> tMissions = this.baseMapper.selectBatchIds(missionIds); long count = tMissions.stream().filter(e -> e.getStatus() == 2).count(); missionTotalVo.setNowNum((int) count); - missionTotalVo.setWaitNum(tMissions.size()-missionTotalVo.getNowNum()); + missionTotalVo.setWaitNum(tMissions.size() - missionTotalVo.getNowNum()); List<TMissionUser> collect = tMissionUsers.stream().filter(e -> e.getStatus() == 1).collect(Collectors.toList()); - missionTotalVo.setRate(new BigDecimal(collect.size()).divide(new BigDecimal(tMissionUsers.size()),2, RoundingMode.HALF_UP)); + missionTotalVo.setRate(new BigDecimal(collect.size()).divide(new BigDecimal(tMissionUsers.size()), 2, RoundingMode.HALF_UP)); return missionTotalVo; } @@ -178,7 +249,7 @@ public String grabMission(String missionId, String userId) { try { boolean b = redisCache.trylockLoop(missionId, UUID.randomUUID().toString(), 30); - if(b){ + if (b) { TMissionUser tMissionUser = new TMissionUser(); tMissionUser.setAppUserId(userId); tMissionUser.setMissionId(missionId); @@ -188,16 +259,16 @@ return tMissionUser.getMissionId(); } - }finally { + } finally { redisCache.unlock(missionId, UUID.randomUUID().toString()); } return null; } @Override - public PageInfo<TMission> pageNowList(BasePage query,String userId) { + public PageInfo<TMission> pageNowList(BasePage query, String userId) { PageInfo<TMission> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); - List<TMission> list = this.baseMapper.pageNowList(pageInfo,userId); + List<TMission> list = this.baseMapper.pageNowList(pageInfo, userId); pageInfo.setRecords(list); return pageInfo; } @@ -212,7 +283,7 @@ @Override public PageInfo<TMission> pageHistoryList(BasePage query, String userId) { PageInfo<TMission> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); - List<TMission> list = this.baseMapper.pageHistoryList(pageInfo,userId); + List<TMission> list = this.baseMapper.pageHistoryList(pageInfo, userId); pageInfo.setRecords(list); return pageInfo; } -- Gitblit v1.7.1