From 70225b084dc19db41a9f210bb3e64c27ed25d25c Mon Sep 17 00:00:00 2001 From: liujie <1793218484@qq.com> Date: 星期一, 29 九月 2025 17:09:08 +0800 Subject: [PATCH] app任务 --- ruoyi-system/src/main/resources/mapper/system/TMissionMapper.xml | 10 ++ ruoyi-system/src/main/java/com/ruoyi/system/vo/MissionTotalVo.java | 8 +- ruoyi-system/src/main/java/com/ruoyi/system/model/TMission.java | 3 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TMissionServiceImpl.java | 79 +++++++++++++++++++ ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TMissionController.java | 79 ++++++++++++++++++- ruoyi-system/src/main/java/com/ruoyi/system/mapper/TMissionMapper.java | 10 ++ ruoyi-system/src/main/java/com/ruoyi/system/model/TMissionUser.java | 2 ruoyi-system/src/main/java/com/ruoyi/system/service/TMissionService.java | 16 ++++ 8 files changed, 198 insertions(+), 9 deletions(-) diff --git a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TMissionController.java b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TMissionController.java index c788fb5..fb814ab 100644 --- a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TMissionController.java +++ b/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(); } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TMissionMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TMissionMapper.java index a74e4a0..edf9533 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TMissionMapper.java +++ b/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); + + + } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/TMission.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/TMission.java index 4981d32..fa682b1 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/model/TMission.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/TMission.java @@ -114,4 +114,7 @@ private LocalDateTime finishTime; + private Integer isMissionPool; + + } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/TMissionUser.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/TMissionUser.java index fa63aa2..d485ad1 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/model/TMissionUser.java +++ b/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; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/TMissionService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/TMissionService.java index d9d0ebe..b0ecfa1 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/TMissionService.java +++ b/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); + + } 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 3179cbb..b4a0014 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,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; + } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/MissionTotalVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/MissionTotalVo.java index 24ebdbf..4231fc9 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/MissionTotalVo.java +++ b/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; } diff --git a/ruoyi-system/src/main/resources/mapper/system/TMissionMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TMissionMapper.xml index 58f3223..5921528 100644 --- a/ruoyi-system/src/main/resources/mapper/system/TMissionMapper.xml +++ b/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> -- Gitblit v1.7.1