ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TMissionController.java
@@ -5,7 +5,9 @@ import com.ruoyi.common.basic.PageInfo; import com.ruoyi.common.core.domain.BasePage; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.framework.web.service.TokenService; import com.ruoyi.system.model.TAppUser; import com.ruoyi.system.model.TMission; import com.ruoyi.system.service.TAppUserService; import com.ruoyi.system.service.TMissionService; @@ -17,6 +19,8 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.time.LocalDateTime; /** * <p> @@ -33,12 +37,14 @@ private final TokenService tokenService; private final TAppUserService appUserService; private final TMissionService missionService; private final RedisCache redisCache; @Autowired public TMissionController(TokenService tokenService, TAppUserService appUserService, TMissionService missionService) { public TMissionController(TokenService tokenService, TAppUserService appUserService, TMissionService missionService,RedisCache redisCache) { this.tokenService = tokenService; this.appUserService = appUserService; this.missionService = missionService; this.redisCache = redisCache; } @@ -54,10 +60,11 @@ */ // @PreAuthorize("@ss.hasPermi('system:mission:list')") @ApiOperation(value = "获取任务列表--待执行任务", response = TMission.class) @PostMapping(value = "/api/t-mission/pageList") @PostMapping(value = "/api/t-mission/pageNowList") public R<PageInfo<TMission>> pageList(@RequestBody String param) { BasePage query = JSON.parseObject(param, BasePage.class); return R.ok(missionService.pageList(query)); String userId = tokenService.getLoginUserApplet().getUserId(); return R.ok(missionService.pageNowList(query,userId)); } /** * 获取任务列表 @@ -67,7 +74,7 @@ @PostMapping(value = "/api/t-mission/pageGrabList") public R<PageInfo<TMission>> pageGrabList(@RequestBody String param) { BasePage query = JSON.parseObject(param, BasePage.class); return R.ok(missionService.pageList(query)); return R.ok(missionService.pageGrabList(query)); } /** * 获取任务列表 @@ -77,7 +84,69 @@ @PostMapping(value = "/api/t-mission/pageHistoryList") public R<PageInfo<TMission>> pageHistoryList(@RequestBody String param) { BasePage query = JSON.parseObject(param, BasePage.class); return R.ok(missionService.pageList(query)); String userId = tokenService.getLoginUserApplet().getUserId(); return R.ok(missionService.pageHistoryList(query,userId)); } /** * 添加任务 */ @ApiOperation(value = "获取任务列表--添加任务", response = TMission.class) @PostMapping(value = "/api/t-mission/addMission") public R<String> addMission(@RequestBody String param) { TMission tMission = JSON.parseObject(param, TMission.class); String userId = tokenService.getLoginUserApplet().getUserId(); TAppUser appUser = appUserService.getById(userId); tMission.setCommitUserId(userId); tMission.setCommitTime(LocalDateTime.now()); tMission.setCommitUserName(appUser.getNickName()); tMission.setCommitType(2); tMission.setIsMissionPool(0); missionService.save(tMission); return R.ok(tMission.getId()); } /** * 抢单任务 */ @ApiOperation(value = "获取任务列表--抢单任务", response = TMission.class) @PostMapping(value = "/api/t-mission/grabMission") public R<?> grabMission(@RequestBody String param) { String missionId = JSON.parseObject(param, String.class); String userId = tokenService.getLoginUserApplet().getUserId(); missionService.grabMission(missionId,userId); return R.ok(); } /** * 申请支援 */ @ApiOperation(value = "获取任务列表--申请支援", response = TMission.class) @PostMapping(value = "/api/t-mission/requestSupport") public R<?> requestSupport(@RequestBody String param) { String missionId = JSON.parseObject(param, String.class); String userId = tokenService.getLoginUserApplet().getUserId(); missionService.grabMission(missionId,userId); return R.ok(); } /** * 完成任务 */ @ApiOperation(value = "获取任务列表--完成任务汇报", response = TMission.class) @PostMapping(value = "/api/t-mission/successMission") public R<?> successMission(@RequestBody String param) { String missionId = JSON.parseObject(param, String.class); String userId = tokenService.getLoginUserApplet().getUserId(); missionService.successMission(missionId,userId); return R.ok(); } } ruoyi-system/src/main/java/com/ruoyi/system/mapper/TMissionMapper.java
@@ -1,7 +1,11 @@ package com.ruoyi.system.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.system.model.TMission; import org.apache.ibatis.annotations.Param; import java.util.List; /** * <p> @@ -13,4 +17,10 @@ */ public interface TMissionMapper extends BaseMapper<TMission> { List<TMission> pageNowList(@Param("pageInfo") PageInfo<TMission> pageInfo, @Param("userId") String userId); List<TMission> pageHistoryList(@Param("pageInfo") PageInfo<TMission> pageInfo, @Param("userId") String userId); } ruoyi-system/src/main/java/com/ruoyi/system/model/TMission.java
@@ -114,4 +114,7 @@ private LocalDateTime finishTime; private Integer isMissionPool; } ruoyi-system/src/main/java/com/ruoyi/system/model/TMissionUser.java
@@ -46,4 +46,6 @@ @TableField("user_type") private Integer userType; @ApiModelProperty(value = "任务状态 0待完成 1已完成") private Integer status; } ruoyi-system/src/main/java/com/ruoyi/system/service/TMissionService.java
@@ -2,8 +2,10 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.common.core.domain.BasePage; import com.ruoyi.system.model.TMission; import com.ruoyi.system.query.TMissionQuery; import com.ruoyi.system.vo.MissionTotalVo; import com.ruoyi.system.vo.TMissionVO; /** @@ -22,4 +24,18 @@ * @return */ PageInfo<TMissionVO> pageList(TMissionQuery query); MissionTotalVo missionTotal(String userId); void grabMission(String missionId, String userId); PageInfo<TMission> pageNowList(BasePage query,String userId); PageInfo<TMission> pageGrabList(BasePage query); PageInfo<TMission> pageHistoryList(BasePage query, String userId); } ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TMissionServiceImpl.java
@@ -1,13 +1,27 @@ package com.ruoyi.system.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 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.mapper.TMissionMapper; import com.ruoyi.system.mapper.TMissionUserMapper; import com.ruoyi.system.model.TMission; import com.ruoyi.system.model.TMissionUser; import com.ruoyi.system.query.TMissionQuery; import com.ruoyi.system.service.TMissionService; import com.ruoyi.system.vo.MissionTotalVo; import com.ruoyi.system.vo.TMissionVO; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.List; import java.util.UUID; import java.util.stream.Collectors; /** * <p> @@ -20,8 +34,73 @@ @Service public class TMissionServiceImpl extends ServiceImpl<TMissionMapper, TMission> implements TMissionService { @Resource private TMissionUserMapper missionUserMapper; @Resource private RedisCache redisCache; @Override public PageInfo<TMissionVO> pageList(TMissionQuery query) { return null; } @Override 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()){ 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()); 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)); return missionTotalVo; } @Override public void grabMission(String missionId, String userId) { try { boolean b = redisCache.trylockLoop(missionId, UUID.randomUUID().toString(), 30); if(b){ TMissionUser tMissionUser = new TMissionUser(); tMissionUser.setAppUserId(userId); tMissionUser.setMissionId(missionId); tMissionUser.setStatus(0); tMissionUser.setUserType(1); missionUserMapper.insert(tMissionUser); } }finally { redisCache.unlock(missionId, UUID.randomUUID().toString()); } } @Override 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); pageInfo.setRecords(list); return pageInfo; } @Override public PageInfo<TMission> pageGrabList(BasePage query) { PageInfo<TMission> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); PageInfo<TMission> tMissionPageInfo = this.baseMapper.selectPage(pageInfo, new LambdaQueryWrapper<TMission>().eq(TMission::getStatus, 1).eq(TMission::getIsMissionPool, 1).orderByDesc(BaseModel::getCreateTime)); return tMissionPageInfo; } @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); pageInfo.setRecords(list); return pageInfo; } } ruoyi-system/src/main/java/com/ruoyi/system/vo/MissionTotalVo.java
@@ -9,12 +9,12 @@ @Data @ApiModel("app任务汇总数") public class MissionTotalVo { @ApiModelProperty("执行中") private Integer nowNum; @ApiModelProperty("执行中 2=待完成") private Integer nowNum=0; @ApiModelProperty("待执行") private Integer waitNum; private Integer waitNum=0; @ApiModelProperty("进度") private BigDecimal rate; private BigDecimal rate=BigDecimal.ZERO; } ruoyi-system/src/main/resources/mapper/system/TMissionMapper.xml
@@ -39,5 +39,15 @@ address_score, time_score, person_count_score, equipment_score, attempt_score,finish_time, create_time, update_time, create_by, update_by, disabled </sql> <select id="pageNowList" resultType="com.ruoyi.system.model.TMission"> select t2.* from t_mission_user t1 left join t_mission t2 on t1.mission_id =t2.id where t1.status =0 and t1.app_user_id = #{userId} and t2.status = 2 order by t2.create_time desc </select> <select id="pageHistoryList" resultType="com.ruoyi.system.model.TMission"> select t2.* from t_mission_user t1 left join t_mission t2 on t1.mission_id =t2.id where t1.status =1 and t1.app_user_id = #{userId} order by t2.create_time desc </select> </mapper>