From 3033ccf3878fae2c204df53be2a283f29f5853ed Mon Sep 17 00:00:00 2001 From: liujie <1793218484@qq.com> Date: 星期五, 10 十月 2025 18:17:02 +0800 Subject: [PATCH] Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/haizhentong --- ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TSysEducationalInfoController.java | 30 + ruoyi-admin/src/main/resources/application-test.yml | 2 ruoyi-system/src/main/java/com/ruoyi/system/utils/wx/template/wxTemplateAppLiveResult/WxOfficeTemplateAppLiveResultRequestData.java | 18 ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TSysProductIntroductionController.java | 10 ruoyi-system/src/main/java/com/ruoyi/system/service/TSysProductIntroductionService.java | 3 ruoyi-system/src/main/java/com/ruoyi/system/service/TSysActivityService.java | 3 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TSysLiveController.java | 32 + ruoyi-system/src/main/java/com/ruoyi/system/vo/TSysLiveVO.java | 2 ruoyi-system/src/main/resources/mapper/system/TSysProductIntroductionMapper.xml | 2 ruoyi-system/src/main/java/com/ruoyi/system/mapper/TSysProductIntroductionMapper.java | 3 ruoyi-system/src/main/java/com/ruoyi/system/model/TSysLive.java | 3 ruoyi-system/src/main/java/com/ruoyi/system/query/TSysEducationalInfoQuery.java | 3 ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java | 4 ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java | 2 ruoyi-system/src/main/resources/mapper/system/TSysActivityMapper.xml | 2 ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/WxLoginController.java | 2 ruoyi-system/src/main/java/com/ruoyi/system/mapper/TSysActivityMapper.java | 3 ruoyi-applet/src/main/resources/application-test.yml | 2 ruoyi-admin/src/main/resources/application-prod.yml | 2 ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TSysEducationalInfoController.java | 10 ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TSysLiveController.java | 29 + ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TSysAppUserController.java | 4 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TSysActivityController.java | 30 + ruoyi-system/src/main/java/com/ruoyi/system/utils/wx/template/wxTemplateAppLiveResult/WxOfficeTemplateAppLiveResultRequest.java | 26 + ruoyi-system/src/main/java/com/ruoyi/system/model/TSysAppUser.java | 4 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TSysProductIntroductionServiceImpl.java | 27 + ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml | 8 ruoyi-system/src/main/java/com/ruoyi/system/task/jobs/LivePushJob.java | 27 + ruoyi-system/src/main/java/com/ruoyi/system/vo/TSysProductIntroductionVO.java | 15 ruoyi-system/src/main/java/com/ruoyi/system/query/TSysProductIntroductionQuery.java | 3 ruoyi-system/src/main/resources/mapper/system/TSysEducationalInfoMapper.xml | 2 ruoyi-system/src/main/java/com/ruoyi/system/query/TSysActivityQuery.java | 3 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TSysConfigController.java | 5 ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TSysActivityController.java | 10 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TSysActivityServiceImpl.java | 28 + ruoyi-system/src/main/java/com/ruoyi/system/utils/wx/model/WeixinProperties.java | 28 + ruoyi-system/src/main/java/com/ruoyi/system/vo/TSysEducationalInfoVO.java | 15 ruoyi-applet/src/main/resources/application-prod.yml | 2 ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java | 3 ruoyi-system/src/main/java/com/ruoyi/system/utils/wx/template/wxTemplateAppLiveResult/WxTemplateAppLiveResultRequest.java | 20 + ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java | 29 + ruoyi-system/src/main/java/com/ruoyi/system/task/base/AbstractJob.java | 10 ruoyi-system/src/main/resources/mapper/system/TSysAppUserMapper.xml | 7 ruoyi-system/src/main/resources/mapper/system/TSysLiveMapper.xml | 3 ruoyi-system/src/main/java/com/ruoyi/system/listener/PublishTopicLiveInfoEventListener.java | 97 +++++ ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TSysProductIntroductionController.java | 30 + ruoyi-system/src/main/java/com/ruoyi/system/utils/util/TemplateMessageSendUtil.java | 124 ++++++ ruoyi-system/src/main/java/com/ruoyi/system/utils/wx/tools/WxAppletTools.java | 47 ++ ruoyi-system/src/main/java/com/ruoyi/system/model/TSysOtherConfig.java | 6 ruoyi-system/src/main/java/com/ruoyi/system/mapper/TSysEducationalInfoMapper.java | 3 ruoyi-system/src/main/java/com/ruoyi/system/utils/wx/config/JacksonConfig.java | 35 + ruoyi-system/src/main/java/com/ruoyi/system/utils/wx/template/Template.java | 19 + ruoyi-system/src/main/java/com/ruoyi/system/listener/event/PublishTopicLiveInfoEvent.java | 17 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TSysEducationalInfoServiceImpl.java | 28 + ruoyi-system/src/main/java/com/ruoyi/system/service/TSysEducationalInfoService.java | 3 ruoyi-system/src/main/java/com/ruoyi/system/utils/wx/template/wxTemplateAppLiveResult/WxTemplateAppLiveResultRequestData.java | 18 ruoyi-system/src/main/java/com/ruoyi/system/vo/TSysActivityVO.java | 15 ruoyi-system/src/main/java/com/ruoyi/system/utils/util/JsonUtils.java | 110 +++++ ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java | 5 ruoyi-system/src/main/resources/mapper/system/TSysOtherConfigMapper.xml | 4 ruoyi-system/src/main/java/com/ruoyi/system/query/TSysLiveQuery.java | 6 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TSysLiveServiceImpl.java | 40 +- 62 files changed, 1,010 insertions(+), 73 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TSysActivityController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TSysActivityController.java index d19c332..5089e07 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TSysActivityController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TSysActivityController.java @@ -4,19 +4,24 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.basic.PageInfo; +import com.ruoyi.common.constant.Constants; import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.framework.web.service.TokenService; import com.ruoyi.system.model.TSysActivity; import com.ruoyi.system.query.TSysActivityQuery; import com.ruoyi.system.service.TSysActivityService; +import com.ruoyi.system.vo.TSysActivityVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import java.util.HashSet; import java.util.List; +import java.util.Set; /** * <p> @@ -33,10 +38,12 @@ private final TSysActivityService sysActivityService; private final TokenService tokenService; + private final RedisCache redisCache; @Autowired - public TSysActivityController(TSysActivityService sysActivityService, TokenService tokenService) { + public TSysActivityController(TSysActivityService sysActivityService, TokenService tokenService, RedisCache redisCache) { this.sysActivityService = sysActivityService; this.tokenService = tokenService; + this.redisCache = redisCache; } /** @@ -44,10 +51,12 @@ */ @ApiOperation(value = "获取热门活动分页列表") @PostMapping(value = "/pageList") - public R<PageInfo<TSysActivity>> pageList(@RequestBody TSysActivityQuery query) { + public R<PageInfo<TSysActivityVO>> pageList(@RequestBody TSysActivityQuery query) { Integer roleType = tokenService.getLoginUser().getUser().getRoleType(); + Long userId = tokenService.getLoginUser().getUserId(); if(roleType == 5){ query.setRoleType(roleType); + query.setUserId(userId); } return R.ok(sysActivityService.pageList(query)); } @@ -87,7 +96,22 @@ @ApiOperation(value = "查看热门活动详情") @GetMapping(value = "/getDetailById") public R<TSysActivity> getDetailById(@RequestParam String id) { - return R.ok(sysActivityService.getById(id)); + TSysActivity sysActivity = sysActivityService.getById(id); + // 查询次数自增 使用数据库原子更新操作 + sysActivityService.update( + Wrappers.<TSysActivity>lambdaUpdate() + .setSql("click_count = click_count + 1") + .eq(TSysActivity::getId, id) + ); + // 如果是诊所 + Integer roleType = tokenService.getLoginUser().getUser().getRoleType(); + if(roleType == 5){ + Long userId = tokenService.getLoginUser().getUserId(); + Set<Long> clickCount = new HashSet<>(); + clickCount.add(userId); + redisCache.setCacheSet(Constants.SYS_ACTIVITY_CLICK_COUNT+id,clickCount); + } + return R.ok(sysActivity); } /** diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TSysAppUserController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TSysAppUserController.java index 0c373bf..7dcd5a9 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TSysAppUserController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TSysAppUserController.java @@ -182,8 +182,8 @@ /** * 分公司管理解冻冻结 */ - @Log(title = "用户管理信息-分公司管理解冻冻结", businessType = BusinessType.UPDATE) - @ApiOperation(value = "分公司管理解冻冻结",notes = "状态 1=使用中 2=冻结") + @Log(title = "用户管理信息-用户管理解冻冻结", businessType = BusinessType.UPDATE) + @ApiOperation(value = "用户管理解冻冻结",notes = "状态 1=使用中 2=冻结") @PutMapping(value = "/thawOrFreeze") public R<Boolean> thawOrFreeze(@RequestParam(value = "id")String id, @RequestParam(value = "status")Integer status) { diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TSysConfigController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TSysConfigController.java index 339ccb9..84325a5 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TSysConfigController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TSysConfigController.java @@ -39,7 +39,10 @@ @ApiOperation(value = "修改系统配置-协议管理管理") @PostMapping(value = "/update") public R<Boolean> update(@Validated @RequestBody TSysConfig dto) { - return R.ok(sysConfigService.updateById(dto)); + TSysConfig sysConfig = sysConfigService.getOne(Wrappers.<TSysConfig>lambdaQuery().eq(TSysConfig::getConfigType, dto.getConfigType()) + .last("LIMIT 1")); + sysConfig.setContent(dto.getContent()); + return R.ok(sysConfigService.updateById(sysConfig)); } /** diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TSysEducationalInfoController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TSysEducationalInfoController.java index aa2dff6..d0455ca 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TSysEducationalInfoController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TSysEducationalInfoController.java @@ -4,19 +4,24 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.basic.PageInfo; +import com.ruoyi.common.constant.Constants; import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.framework.web.service.TokenService; import com.ruoyi.system.model.TSysEducationalInfo; import com.ruoyi.system.query.TSysEducationalInfoQuery; import com.ruoyi.system.service.TSysEducationalInfoService; +import com.ruoyi.system.vo.TSysEducationalInfoVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import java.util.HashSet; import java.util.List; +import java.util.Set; /** * <p> @@ -33,10 +38,12 @@ private final TSysEducationalInfoService sysEducationalInfoService; private final TokenService tokenService; + private final RedisCache redisCache; @Autowired - public TSysEducationalInfoController(TSysEducationalInfoService sysEducationalInfoService, TokenService tokenService) { + public TSysEducationalInfoController(TSysEducationalInfoService sysEducationalInfoService, TokenService tokenService, RedisCache redisCache) { this.sysEducationalInfoService = sysEducationalInfoService; this.tokenService = tokenService; + this.redisCache = redisCache; } /** @@ -44,10 +51,12 @@ */ @ApiOperation(value = "获取教育资讯分页列表") @PostMapping(value = "/pageList") - public R<PageInfo<TSysEducationalInfo>> pageList(@RequestBody TSysEducationalInfoQuery query) { + public R<PageInfo<TSysEducationalInfoVO>> pageList(@RequestBody TSysEducationalInfoQuery query) { Integer roleType = tokenService.getLoginUser().getUser().getRoleType(); + Long userId = tokenService.getLoginUser().getUserId(); if(roleType == 5){ query.setRoleType(roleType); + query.setUserId(userId); } return R.ok(sysEducationalInfoService.pageList(query)); } @@ -87,7 +96,22 @@ @ApiOperation(value = "查看教育资讯详情") @GetMapping(value = "/getDetailById") public R<TSysEducationalInfo> getDetailById(@RequestParam String id) { - return R.ok(sysEducationalInfoService.getById(id)); + TSysEducationalInfo sysEducationalInfo = sysEducationalInfoService.getById(id); + // 查询次数自增 使用数据库原子更新操作 + sysEducationalInfoService.update( + Wrappers.<TSysEducationalInfo>lambdaUpdate() + .setSql("click_count = click_count + 1") + .eq(TSysEducationalInfo::getId, id) + ); + // 如果是诊所 + Integer roleType = tokenService.getLoginUser().getUser().getRoleType(); + if(roleType == 5){ + Long userId = tokenService.getLoginUser().getUserId(); + Set<Long> clickCount = new HashSet<>(); + clickCount.add(userId); + redisCache.setCacheSet(Constants.SYS_EDUCATION_CLICK_COUNT+id,clickCount); + } + return R.ok(sysEducationalInfo); } /** diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TSysLiveController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TSysLiveController.java index 54d7251..ac6147e 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TSysLiveController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TSysLiveController.java @@ -4,11 +4,14 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.basic.PageInfo; +import com.ruoyi.common.constant.Constants; import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.framework.web.service.TokenService; import com.ruoyi.system.model.TSysLive; +import com.ruoyi.system.model.TSysProductIntroduction; import com.ruoyi.system.query.TSysLiveQuery; import com.ruoyi.system.service.TSysLiveService; import com.ruoyi.system.vo.TSysLiveVO; @@ -19,7 +22,9 @@ import org.springframework.web.bind.annotation.*; import java.time.LocalDateTime; +import java.util.HashSet; import java.util.List; +import java.util.Set; /** * <p> @@ -36,10 +41,12 @@ private final TSysLiveService sysLiveService; private final TokenService tokenService; + private final RedisCache redisCache; @Autowired - public TSysLiveController(TSysLiveService sysLiveService, TokenService tokenService) { + public TSysLiveController(TSysLiveService sysLiveService, TokenService tokenService, RedisCache redisCache) { this.sysLiveService = sysLiveService; this.tokenService = tokenService; + this.redisCache = redisCache; } /** @@ -48,6 +55,12 @@ @ApiOperation(value = "获取直播管理分页列表") @PostMapping(value = "/pageList") public R<PageInfo<TSysLiveVO>> pageList(@RequestBody TSysLiveQuery query) { + Integer roleType = tokenService.getLoginUser().getUser().getRoleType(); + Long userId = tokenService.getLoginUser().getUserId(); + if(roleType == 5){ + query.setRoleType(roleType); + query.setUserId(userId); + } return R.ok(sysLiveService.pageList(query)); } @@ -98,7 +111,22 @@ @ApiOperation(value = "查看直播管理详情") @GetMapping(value = "/getDetailById") public R<TSysLive> getDetailById(@RequestParam String id) { - return R.ok(sysLiveService.getById(id)); + TSysLive sysLive = sysLiveService.getById(id); + // 查询次数自增 使用数据库原子更新操作 + sysLiveService.update( + Wrappers.<TSysLive>lambdaUpdate() + .setSql("click_count = click_count + 1") + .eq(TSysLive::getId, id) + ); + // 如果是诊所 + Integer roleType = tokenService.getLoginUser().getUser().getRoleType(); + if(roleType == 5){ + Long userId = tokenService.getLoginUser().getUserId(); + Set<Long> clickCount = new HashSet<>(); + clickCount.add(userId); + redisCache.setCacheSet(Constants.SYS_LIVE_COUNT+id,clickCount); + } + return R.ok(sysLive); } /** diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TSysProductIntroductionController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TSysProductIntroductionController.java index ddc021a..cb12276 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TSysProductIntroductionController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TSysProductIntroductionController.java @@ -4,19 +4,24 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.basic.PageInfo; +import com.ruoyi.common.constant.Constants; import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.framework.web.service.TokenService; import com.ruoyi.system.model.TSysProductIntroduction; import com.ruoyi.system.query.TSysProductIntroductionQuery; import com.ruoyi.system.service.TSysProductIntroductionService; +import com.ruoyi.system.vo.TSysProductIntroductionVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import java.util.HashSet; import java.util.List; +import java.util.Set; /** * <p> @@ -33,10 +38,12 @@ private final TSysProductIntroductionService sysProductIntroductionService; private final TokenService tokenService; + private final RedisCache redisCache; @Autowired - public TSysProductIntroductionController(TSysProductIntroductionService sysProductIntroductionService, TokenService tokenService) { + public TSysProductIntroductionController(TSysProductIntroductionService sysProductIntroductionService, TokenService tokenService, RedisCache redisCache) { this.sysProductIntroductionService = sysProductIntroductionService; this.tokenService = tokenService; + this.redisCache = redisCache; } /** @@ -44,10 +51,12 @@ */ @ApiOperation(value = "获取产品介绍分页列表") @PostMapping(value = "/pageList") - public R<PageInfo<TSysProductIntroduction>> pageList(@RequestBody TSysProductIntroductionQuery query) { + public R<PageInfo<TSysProductIntroductionVO>> pageList(@RequestBody TSysProductIntroductionQuery query) { Integer roleType = tokenService.getLoginUser().getUser().getRoleType(); + Long userId = tokenService.getLoginUser().getUserId(); if(roleType == 5){ query.setRoleType(roleType); + query.setUserId(userId); } return R.ok(sysProductIntroductionService.pageList(query)); } @@ -87,7 +96,22 @@ @ApiOperation(value = "查看产品介绍详情") @GetMapping(value = "/getDetailById") public R<TSysProductIntroduction> getDetailById(@RequestParam String id) { - return R.ok(sysProductIntroductionService.getById(id)); + TSysProductIntroduction sysProductIntroduction = sysProductIntroductionService.getById(id); + // 查询次数自增 使用数据库原子更新操作 + sysProductIntroductionService.update( + Wrappers.<TSysProductIntroduction>lambdaUpdate() + .setSql("click_count = click_count + 1") + .eq(TSysProductIntroduction::getId, id) + ); + // 如果是诊所 + Integer roleType = tokenService.getLoginUser().getUser().getRoleType(); + if(roleType == 5){ + Long userId = tokenService.getLoginUser().getUserId(); + Set<Long> clickCount = new HashSet<>(); + clickCount.add(userId); + redisCache.setCacheSet(Constants.SYS_PRODUCT_CLICK_COUNT+id,clickCount); + } + return R.ok(sysProductIntroduction); } /** diff --git a/ruoyi-admin/src/main/resources/application-prod.yml b/ruoyi-admin/src/main/resources/application-prod.yml index e909611..a2aa9e9 100644 --- a/ruoyi-admin/src/main/resources/application-prod.yml +++ b/ruoyi-admin/src/main/resources/application-prod.yml @@ -207,6 +207,8 @@ conf: appId: wx75922efb57320f77 secretId: 7a2aa1f837b7aeb3bc24a6b569c65110 + appLiveResultTemplateId: 1wheNdyQ88Cz9Z7L1EXxR2L0u4X4LaeXoZVtZwHCagk + officeAppLiveResultTemplateId: 7w1JVe3S4ClFnff7g8us7x-hqFuV3f2SKjKclP_X2FI #OSS及短信配置 code: config: diff --git a/ruoyi-admin/src/main/resources/application-test.yml b/ruoyi-admin/src/main/resources/application-test.yml index e6e0738..64023cd 100644 --- a/ruoyi-admin/src/main/resources/application-test.yml +++ b/ruoyi-admin/src/main/resources/application-test.yml @@ -198,6 +198,8 @@ conf: appId: wxa17e8d1331e50934 secretId: 79c234527fd3b6553679d52be5e29b19 + appLiveResultTemplateId: 1wheNdyQ88Cz9Z7L1EXxR2L0u4X4LaeXoZVtZwHCagk + officeAppLiveResultTemplateId: 7w1JVe3S4ClFnff7g8us7x-hqFuV3f2SKjKclP_X2FI lakala: MerchantNo: 822290059430BFA TermNo: D9261078 diff --git a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TSysActivityController.java b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TSysActivityController.java index 8a47196..b5d00c3 100644 --- a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TSysActivityController.java +++ b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TSysActivityController.java @@ -17,6 +17,7 @@ import org.springframework.web.bind.annotation.*; import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; /** * <p> @@ -63,7 +64,14 @@ @ApiOperation(value = "查看热门活动详情") @GetMapping(value = "/getDetailById") public R<TSysActivity> getDetailById(@RequestParam String id) { - return R.ok(sysActivityService.getById(id)); + TSysActivity sysActivity = sysActivityService.getById(id); + // 查询次数自增 使用数据库原子更新操作 + sysActivityService.update( + Wrappers.<TSysActivity>lambdaUpdate() + .setSql("click_count = click_count + 1") + .eq(TSysActivity::getId, id) + ); + return R.ok(sysActivity); } } diff --git a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TSysEducationalInfoController.java b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TSysEducationalInfoController.java index f4ca8ff..aa364e4 100644 --- a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TSysEducationalInfoController.java +++ b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TSysEducationalInfoController.java @@ -7,6 +7,7 @@ import com.ruoyi.common.core.domain.R; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.framework.web.service.TokenService; +import com.ruoyi.system.model.TSysActivity; import com.ruoyi.system.model.TSysEducationalInfo; import com.ruoyi.system.query.TSysEducationalInfoQuery; import com.ruoyi.system.service.TSysEducationalInfoService; @@ -63,7 +64,14 @@ @ApiOperation(value = "查看教育资讯详情") @GetMapping(value = "/getDetailById") public R<TSysEducationalInfo> getDetailById(@RequestParam String id) { - return R.ok(sysEducationalInfoService.getById(id)); + TSysEducationalInfo sysEducationalInfo = sysEducationalInfoService.getById(id); + // 查询次数自增 使用数据库原子更新操作 + sysEducationalInfoService.update( + Wrappers.<TSysEducationalInfo>lambdaUpdate() + .setSql("click_count = click_count + 1") + .eq(TSysEducationalInfo::getId, id) + ); + return R.ok(sysEducationalInfo); } } diff --git a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TSysLiveController.java b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TSysLiveController.java index da74297..ee1a30e 100644 --- a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TSysLiveController.java +++ b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TSysLiveController.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.google.common.collect.ImmutableMap; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.common.constant.Constants; @@ -9,11 +10,15 @@ import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.redis.service.RedisService; +import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.framework.web.service.TokenService; import com.ruoyi.system.model.TSysLive; import com.ruoyi.system.query.TSysLiveQuery; import com.ruoyi.system.service.TSysLiveService; +import com.ruoyi.system.task.base.QuartzManager; +import com.ruoyi.system.task.base.TimeJobType; +import com.ruoyi.system.task.jobs.LivePushJob; import com.ruoyi.system.vo.TSysLiveVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -24,6 +29,7 @@ import java.time.LocalDateTime; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Set; /** @@ -64,7 +70,14 @@ @ApiOperation(value = "查看直播管理详情") @GetMapping(value = "/getDetailById") public R<TSysLive> getDetailById(@RequestParam String id) { - return R.ok(sysLiveService.getById(id)); + TSysLive sysLive = sysLiveService.getById(id); + // 查询次数自增 使用数据库原子更新操作 + sysLiveService.update( + Wrappers.<TSysLive>lambdaUpdate() + .setSql("click_count = click_count + 1") + .eq(TSysLive::getId, id) + ); + return R.ok(sysLive); } /** @@ -82,6 +95,20 @@ Set<String> appointmentPush = new HashSet<>(); appointmentPush.add(userId); redisCache.setCacheSet(Constants.LIVE_APPOINTMENT_PUSH + id, appointmentPush); + + TSysLive sysLive = sysLiveService.getById(id); + Map<String, ? extends Object> maps = + new ImmutableMap.Builder<String, String>(). + put("id", sysLive.getId()) + .build(); + QuartzManager.addJob( + LivePushJob.class, + (LivePushJob.name+sysLive.getId()).toUpperCase(), + TimeJobType.LIVE_PUSH, + DateUtils.localDateTimeToDate(sysLive.getStartTime().minusHours(1)), + maps + ); + return R.ok(); } diff --git a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TSysProductIntroductionController.java b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TSysProductIntroductionController.java index a2d1793..affec12 100644 --- a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TSysProductIntroductionController.java +++ b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/TSysProductIntroductionController.java @@ -7,6 +7,7 @@ import com.ruoyi.common.core.domain.R; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.framework.web.service.TokenService; +import com.ruoyi.system.model.TSysEducationalInfo; import com.ruoyi.system.model.TSysProductIntroduction; import com.ruoyi.system.query.TSysProductIntroductionQuery; import com.ruoyi.system.service.TSysProductIntroductionService; @@ -63,7 +64,14 @@ @ApiOperation(value = "查看产品介绍详情") @GetMapping(value = "/getDetailById") public R<TSysProductIntroduction> getDetailById(@RequestParam String id) { - return R.ok(sysProductIntroductionService.getById(id)); + TSysProductIntroduction sysProductIntroduction = sysProductIntroductionService.getById(id); + // 查询次数自增 使用数据库原子更新操作 + sysProductIntroductionService.update( + Wrappers.<TSysProductIntroduction>lambdaUpdate() + .setSql("click_count = click_count + 1") + .eq(TSysProductIntroduction::getId, id) + ); + return R.ok(sysProductIntroduction); } } diff --git a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/WxLoginController.java b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/WxLoginController.java index a7c591a..cd12cba 100644 --- a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/WxLoginController.java +++ b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/api/WxLoginController.java @@ -177,7 +177,7 @@ @PostMapping("/getWXToken") public R<String> getWXToken(){ WxAppletTools appletTools = new WxAppletTools(wxRestTemplate, wxConfig, redisService); - String accessToken = appletTools.getAccessToken(""); + String accessToken = appletTools.getAccessToken(); return R.ok(accessToken); } diff --git a/ruoyi-applet/src/main/resources/application-prod.yml b/ruoyi-applet/src/main/resources/application-prod.yml index 2e0d44b..4533348 100644 --- a/ruoyi-applet/src/main/resources/application-prod.yml +++ b/ruoyi-applet/src/main/resources/application-prod.yml @@ -208,6 +208,8 @@ conf: appId: wx75922efb57320f77 secretId: 7a2aa1f837b7aeb3bc24a6b569c65110 + appLiveResultTemplateId: 1wheNdyQ88Cz9Z7L1EXxR2L0u4X4LaeXoZVtZwHCagk + officeAppLiveResultTemplateId: 7w1JVe3S4ClFnff7g8us7x-hqFuV3f2SKjKclP_X2FI #OSS及短信配置 code: config: diff --git a/ruoyi-applet/src/main/resources/application-test.yml b/ruoyi-applet/src/main/resources/application-test.yml index 66506dc..7395a35 100644 --- a/ruoyi-applet/src/main/resources/application-test.yml +++ b/ruoyi-applet/src/main/resources/application-test.yml @@ -199,6 +199,8 @@ conf: appId: wxa17e8d1331e50934 secretId: 79c234527fd3b6553679d52be5e29b19 + appLiveResultTemplateId: 1wheNdyQ88Cz9Z7L1EXxR2L0u4X4LaeXoZVtZwHCagk + officeAppLiveResultTemplateId: 7w1JVe3S4ClFnff7g8us7x-hqFuV3f2SKjKclP_X2FI payment: wx: # 微信appid diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java b/ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java index 354adaa..168cac4 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java @@ -178,4 +178,33 @@ * 用户检测缓存 */ public static final String AI_USER_INSPECTION = "ai_user_inspection:"; + /** + * 热门活动点击缓存 + */ + public static final String SYS_ACTIVITY_CLICK_COUNT = "sys_activity_click_count:"; + /** + * 产品介绍点击缓存 + */ + public static final String SYS_EDUCATION_CLICK_COUNT = "sys_education_click_count:"; + /** + * 教育咨询点击缓存 + */ + public static final String SYS_PRODUCT_CLICK_COUNT = "sys_product_click_count:"; + /** + * 直播点击缓存 + */ + public static final String SYS_LIVE_COUNT = "sys_live_count:"; + + + + + + /** + * 小程序订阅消息发送地址 + */ + public static final String TEMPLATE_URL = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=ACCESS_TOKEN"; + /** + * 模板消息发送地址 + */ + public static final String OFFICIAL_ACCOUNT_TEMPLATE_URL = "https://api.weixin.qq.com/cgi-bin/message/template/subscribe?access_token=ACCESS_TOKEN"; } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java index d4a3725..9c79238 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java @@ -135,7 +135,9 @@ @ApiModelProperty(value = "角色类型 1=平台 2=分公司 3=业务员 4=供应商 5=诊所端 6=仓库员") @TableField(value = "role_type") private Integer roleType; - + @ApiModelProperty(value = "微信openid") + @TableField("open_id") + private String openId; public String getRoleName() { return roleName; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/listener/PublishTopicLiveInfoEventListener.java b/ruoyi-system/src/main/java/com/ruoyi/system/listener/PublishTopicLiveInfoEventListener.java new file mode 100644 index 0000000..1b8cdd9 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/listener/PublishTopicLiveInfoEventListener.java @@ -0,0 +1,97 @@ +package com.ruoyi.system.listener; + +import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.system.listener.event.PublishTopicLiveInfoEvent; +import com.ruoyi.system.model.TCrmClinic; +import com.ruoyi.system.model.TCrmSalesperson; +import com.ruoyi.system.model.TSysAppUser; +import com.ruoyi.system.model.TSysLive; +import com.ruoyi.system.service.*; +import com.ruoyi.system.utils.util.TemplateMessageSendUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.event.EventListener; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * @author xiaochen + * @ClassName PublishTopicUpdateCollectEventListener + * @Description + * @date 2021-08-11 18:44 + */ +@Slf4j +@Component +public class PublishTopicLiveInfoEventListener { + + @Autowired + private TemplateMessageSendUtil templateMessageSendUtil; + @Autowired + private TCrmClinicService crmClinicService; + @Autowired + private TSysAppUserService sysAppUserService; + @Autowired + private TCrmSalespersonService crmSalespersonService; + @Autowired + private TSysLiveService sysLiveService; + @Autowired + private ISysUserService sysUserService; + + @Async + @EventListener(PublishTopicLiveInfoEvent.class) + public void PublishTopicLiveInfoEventListener(PublishTopicLiveInfoEvent event) { + String pushTypeAndId = (String) event.getSource(); + String[] split = pushTypeAndId.split("_"); + String pushType = split[0]; + String liveId = split[1]; + try { + // 查询直播信息 + TSysLive sysLive = sysLiveService.getById(liveId); + if(Objects.isNull(sysLive)){ + log.error("模板消息发送--未查询到直播信息"); + return; + } + String liveTitle = sysLive.getLiveTitle(); + String liveStartTime = DateUtils.localDateTimeToString(sysLive.getStartTime()); + log.info("开始发送直播信息"); + if(pushType.contains("1")){ + // 诊所 + List<TCrmClinic> clinicList = crmClinicService.list(); + if(!CollectionUtils.isEmpty(clinicList)){ + List<Long> userIds = clinicList.stream().map(TCrmClinic::getUserId).collect(Collectors.toList()); + List<SysUser> sysUserList = sysUserService.selectUserListByIds(userIds); + for (SysUser user : sysUserList) { + templateMessageSendUtil.wxOfficeTemplateAppLiveRequest(user.getOpenId(),liveTitle,liveStartTime); + } + } + } + if(pushType.contains("2")){ + // 用户 + List<TSysAppUser> sysAppUsers = sysAppUserService.list(); + for (TSysAppUser sysAppUser : sysAppUsers) { + templateMessageSendUtil.wxOfficeTemplateAppLiveRequest(sysAppUser.getOfficeOpenId(),liveTitle,liveStartTime); + } + } + if(pushType.contains("3")){ + // 业务员 + List<TCrmSalesperson> crmSalespeopleList = crmSalespersonService.list(); + if(!CollectionUtils.isEmpty(crmSalespeopleList)){ + List<Long> userIds = crmSalespeopleList.stream().map(TCrmSalesperson::getUserId).collect(Collectors.toList()); + List<SysUser> sysUserList = sysUserService.selectUserListByIds(userIds); + for (SysUser user : sysUserList) { + templateMessageSendUtil.wxOfficeTemplateAppLiveRequest(user.getOpenId(),liveTitle,liveStartTime); + } + } + } + } catch (Exception e) { + log.error("发送直播信息失败:{}", e.getMessage()); + } + } + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/listener/event/PublishTopicLiveInfoEvent.java b/ruoyi-system/src/main/java/com/ruoyi/system/listener/event/PublishTopicLiveInfoEvent.java new file mode 100644 index 0000000..f80ed05 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/listener/event/PublishTopicLiveInfoEvent.java @@ -0,0 +1,17 @@ +package com.ruoyi.system.listener.event; + +import org.springframework.context.ApplicationEvent; + +/** + * @author xiaochen + * @ClassName member微信用户信息的注册修改的发布事件 + * @Description 微信用户信息的注册修改的发布事件 + * @date 2021-06-24 15:04 + */ +public class PublishTopicLiveInfoEvent extends ApplicationEvent { + + public PublishTopicLiveInfoEvent(String source) { + super(source); + } + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java index e13fbc8..405cff1 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java @@ -180,4 +180,6 @@ List<SysUser> selectBatchIds(@Param("personIds") List<Integer> personIds); void updateUserStatusByUserIds(@Param("userIds")List<Long> userIds, @Param("status")String status); + + List<SysUser> selectUserListByIds(@Param("userIds")List<Long> userIds); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TSysActivityMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TSysActivityMapper.java index 3ca60cb..dfc4d77 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TSysActivityMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TSysActivityMapper.java @@ -4,6 +4,7 @@ import com.ruoyi.common.basic.PageInfo; import com.ruoyi.system.model.TSysActivity; import com.ruoyi.system.query.TSysActivityQuery; +import com.ruoyi.system.vo.TSysActivityVO; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -25,7 +26,7 @@ * @param pageInfo * @return */ - List<TSysActivity> pageList(@Param("query") TSysActivityQuery query, @Param("pageInfo")PageInfo<TSysActivity> pageInfo); + List<TSysActivityVO> pageList(@Param("query") TSysActivityQuery query, @Param("pageInfo")PageInfo<TSysActivityVO> pageInfo); /** * 分页查询 * diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TSysEducationalInfoMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TSysEducationalInfoMapper.java index 5e06362..8a80deb 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TSysEducationalInfoMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TSysEducationalInfoMapper.java @@ -4,6 +4,7 @@ import com.ruoyi.common.basic.PageInfo; import com.ruoyi.system.model.TSysEducationalInfo; import com.ruoyi.system.query.TSysEducationalInfoQuery; +import com.ruoyi.system.vo.TSysEducationalInfoVO; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -24,7 +25,7 @@ * @param pageInfo * @return */ - List<TSysEducationalInfo> pageList(@Param("query") TSysEducationalInfoQuery query, @Param("pageInfo")PageInfo<TSysEducationalInfo> pageInfo); + List<TSysEducationalInfoVO> pageList(@Param("query") TSysEducationalInfoQuery query, @Param("pageInfo")PageInfo<TSysEducationalInfoVO> pageInfo); /** * 获取教育资讯分页列表 * @param query diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TSysProductIntroductionMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TSysProductIntroductionMapper.java index 637bf5d..1e386ab 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TSysProductIntroductionMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/TSysProductIntroductionMapper.java @@ -4,6 +4,7 @@ import com.ruoyi.common.basic.PageInfo; import com.ruoyi.system.model.TSysProductIntroduction; import com.ruoyi.system.query.TSysProductIntroductionQuery; +import com.ruoyi.system.vo.TSysProductIntroductionVO; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -25,7 +26,7 @@ * @param pageInfo * @return */ - List<TSysProductIntroduction> pageList(@Param("query") TSysProductIntroductionQuery query, @Param("pageInfo")PageInfo<TSysProductIntroduction> pageInfo); + List<TSysProductIntroductionVO> pageList(@Param("query") TSysProductIntroductionQuery query, @Param("pageInfo")PageInfo<TSysProductIntroductionVO> pageInfo); /** * 分页查询 * diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/TSysAppUser.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/TSysAppUser.java index 27942c1..9c5b2cf 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/model/TSysAppUser.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/TSysAppUser.java @@ -51,6 +51,10 @@ @TableField("open_id") private String openId; + @ApiModelProperty(value = "公众号openId") + @TableField("office_open_id") + private String officeOpenId; + @ApiModelProperty(value = "慢性病id,逗号分割") @TableField("chronic_disease_id") private String chronicDiseaseId; diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/TSysLive.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/TSysLive.java index 7dca2d8..3e6fd15 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/model/TSysLive.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/TSysLive.java @@ -84,4 +84,7 @@ @TableField("push_type") private String pushType; + @ApiModelProperty(value = "点击次数") + @TableField("click_count") + private Integer clickCount; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/TSysOtherConfig.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/TSysOtherConfig.java index 324006d..53b23d9 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/model/TSysOtherConfig.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/model/TSysOtherConfig.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.annotation.*; import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.core.domain.BaseModel; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -23,7 +24,7 @@ @EqualsAndHashCode(callSuper = false) @TableName("t_sys_other_config") @ApiModel(value="TSysOtherConfig对象", description="其他设置") -public class TSysOtherConfig implements Serializable { +public class TSysOtherConfig extends BaseModel { private static final long serialVersionUID = 1L; @@ -51,9 +52,8 @@ private BigDecimal aiPrice; @ApiModelProperty(value = "自动收货时间") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @TableField("delivery_time") - private LocalDateTime deliveryTime; + private Integer deliveryTime; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/TSysActivityQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/TSysActivityQuery.java index 6c37033..daf7473 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/query/TSysActivityQuery.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/TSysActivityQuery.java @@ -21,4 +21,7 @@ @ApiModelProperty(value = "角色类型") private Integer roleType; + + @ApiModelProperty(value = "用户id") + private Long userId; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/TSysEducationalInfoQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/TSysEducationalInfoQuery.java index 0605524..071df4d 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/query/TSysEducationalInfoQuery.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/TSysEducationalInfoQuery.java @@ -20,4 +20,7 @@ @ApiModelProperty(value = "角色类型") private Integer roleType; + + @ApiModelProperty(value = "用户id") + private Long userId; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/TSysLiveQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/TSysLiveQuery.java index 867ad6e..ce927ca 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/query/TSysLiveQuery.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/TSysLiveQuery.java @@ -17,4 +17,10 @@ @ApiModelProperty(value = "前端忽略") private String appUserId; + + @ApiModelProperty(value = "角色类型") + private Integer roleType; + + @ApiModelProperty(value = "用户id") + private Long userId; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/TSysProductIntroductionQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/TSysProductIntroductionQuery.java index 12b4b5e..f4a439e 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/query/TSysProductIntroductionQuery.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/TSysProductIntroductionQuery.java @@ -21,4 +21,7 @@ @ApiModelProperty(value = "角色类型") private Integer roleType; + + @ApiModelProperty(value = "用户id") + private Long userId; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java index 9551d0a..d5eecd4 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java @@ -1,6 +1,7 @@ package com.ruoyi.system.service; import java.util.List; +import java.util.Set; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.common.core.domain.entity.SysUser; @@ -263,4 +264,6 @@ long selectIdByPhone(String phonenumber); void updateUserStatusByUserIds(List<Long> userIds, String status); + + List<SysUser> selectUserListByIds(List<Long> userIds); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/TSysActivityService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/TSysActivityService.java index b0a6a77..5b9e32c 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/TSysActivityService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/TSysActivityService.java @@ -4,6 +4,7 @@ import com.ruoyi.common.basic.PageInfo; import com.ruoyi.system.model.TSysActivity; import com.ruoyi.system.query.TSysActivityQuery; +import com.ruoyi.system.vo.TSysActivityVO; /** * <p> @@ -20,7 +21,7 @@ * @param query * @return */ - PageInfo<TSysActivity> pageList(TSysActivityQuery query); + PageInfo<TSysActivityVO> pageList(TSysActivityQuery query); /** * 获取热门活动分页列表 * @param query diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/TSysEducationalInfoService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/TSysEducationalInfoService.java index 7421efa..5227307 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/TSysEducationalInfoService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/TSysEducationalInfoService.java @@ -4,6 +4,7 @@ import com.ruoyi.common.basic.PageInfo; import com.ruoyi.system.model.TSysEducationalInfo; import com.ruoyi.system.query.TSysEducationalInfoQuery; +import com.ruoyi.system.vo.TSysEducationalInfoVO; /** * <p> @@ -20,7 +21,7 @@ * @param query * @return */ - PageInfo<TSysEducationalInfo> pageList(TSysEducationalInfoQuery query); + PageInfo<TSysEducationalInfoVO> pageList(TSysEducationalInfoQuery query); /** * 获取教育资讯分页列表 * @param query diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/TSysProductIntroductionService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/TSysProductIntroductionService.java index 1e978e6..d19d6fc 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/TSysProductIntroductionService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/TSysProductIntroductionService.java @@ -4,6 +4,7 @@ import com.ruoyi.common.basic.PageInfo; import com.ruoyi.system.model.TSysProductIntroduction; import com.ruoyi.system.query.TSysProductIntroductionQuery; +import com.ruoyi.system.vo.TSysProductIntroductionVO; /** * <p> @@ -20,7 +21,7 @@ * @param query * @return */ - PageInfo<TSysProductIntroduction> pageList(TSysProductIntroductionQuery query); + PageInfo<TSysProductIntroductionVO> pageList(TSysProductIntroductionQuery query); /** * 获取产品介绍分页列表 * @param query diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java index 6e244da..547decd 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java @@ -669,6 +669,11 @@ userMapper.updateUserStatusByUserIds(userIds, status); } + @Override + public List<SysUser> selectUserListByIds(List<Long> userIds) { + return userMapper.selectUserListByIds(userIds); + } + // @Override // public UserInfoVo userInfo(Long userId) { // return userMapper.userInfo(userId); diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TSysActivityServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TSysActivityServiceImpl.java index 113ab49..17b0a55 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TSysActivityServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TSysActivityServiceImpl.java @@ -2,14 +2,21 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.basic.PageInfo; +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.system.mapper.TSysActivityMapper; import com.ruoyi.system.model.TSysActivity; import com.ruoyi.system.model.TSysEducationalInfo; import com.ruoyi.system.query.TSysActivityQuery; import com.ruoyi.system.service.TSysActivityService; +import com.ruoyi.system.vo.TSysActivityVO; +import com.ruoyi.system.vo.TSysProductIntroductionVO; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; import java.util.List; +import java.util.Set; /** * <p> @@ -21,11 +28,24 @@ */ @Service public class TSysActivityServiceImpl extends ServiceImpl<TSysActivityMapper, TSysActivity> implements TSysActivityService { - + @Autowired + private RedisCache redisCache; @Override - public PageInfo<TSysActivity> pageList(TSysActivityQuery query) { - PageInfo<TSysActivity> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); - List<TSysActivity> list = this.baseMapper.pageList(query,pageInfo); + public PageInfo<TSysActivityVO> pageList(TSysActivityQuery query) { + PageInfo<TSysActivityVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); + List<TSysActivityVO> list = this.baseMapper.pageList(query,pageInfo); + if (CollectionUtils.isEmpty(list)){ + return pageInfo; + } + if(query.getRoleType() == 5){ + Long userId = query.getUserId(); + for (TSysActivityVO sysActivityVO : list) { + Set<Long> cacheSet = redisCache.getCacheSet(Constants.SYS_ACTIVITY_CLICK_COUNT + sysActivityVO.getId()); + if(cacheSet.contains(userId)){ + sysActivityVO.setIsView(true); + } + } + } pageInfo.setRecords(list); return pageInfo; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TSysEducationalInfoServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TSysEducationalInfoServiceImpl.java index 14bd192..daade89 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TSysEducationalInfoServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TSysEducationalInfoServiceImpl.java @@ -1,15 +1,22 @@ package com.ruoyi.system.service.impl; import com.ruoyi.common.basic.PageInfo; +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.system.model.TErpGoodsType; import com.ruoyi.system.model.TSysEducationalInfo; import com.ruoyi.system.mapper.TSysEducationalInfoMapper; import com.ruoyi.system.query.TSysEducationalInfoQuery; import com.ruoyi.system.service.TSysEducationalInfoService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.system.vo.TSysEducationalInfoVO; +import com.ruoyi.system.vo.TSysProductIntroductionVO; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; import java.util.List; +import java.util.Set; /** * <p> @@ -21,11 +28,24 @@ */ @Service public class TSysEducationalInfoServiceImpl extends ServiceImpl<TSysEducationalInfoMapper, TSysEducationalInfo> implements TSysEducationalInfoService { - + @Autowired + private RedisCache redisCache; @Override - public PageInfo<TSysEducationalInfo> pageList(TSysEducationalInfoQuery query) { - PageInfo<TSysEducationalInfo> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); - List<TSysEducationalInfo> list = this.baseMapper.pageList(query,pageInfo); + public PageInfo<TSysEducationalInfoVO> pageList(TSysEducationalInfoQuery query) { + PageInfo<TSysEducationalInfoVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); + List<TSysEducationalInfoVO> list = this.baseMapper.pageList(query,pageInfo); + if (CollectionUtils.isEmpty(list)){ + return pageInfo; + } + if(query.getRoleType() == 5){ + Long userId = query.getUserId(); + for (TSysEducationalInfoVO sysEducationalInfoVO : list) { + Set<Long> cacheSet = redisCache.getCacheSet(Constants.SYS_EDUCATION_CLICK_COUNT + sysEducationalInfoVO.getId()); + if(cacheSet.contains(userId)){ + sysEducationalInfoVO.setIsView(true); + } + } + } pageInfo.setRecords(list); return pageInfo; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TSysLiveServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TSysLiveServiceImpl.java index 1e8bbd3..3b15301 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TSysLiveServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TSysLiveServiceImpl.java @@ -7,6 +7,8 @@ import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.system.listener.PublishTopicLiveInfoEventListener; +import com.ruoyi.system.listener.event.PublishTopicLiveInfoEvent; import com.ruoyi.system.mapper.TSysLiveMapper; import com.ruoyi.system.model.TSysEducationalInfo; import com.ruoyi.system.model.TSysLive; @@ -15,16 +17,16 @@ import com.ruoyi.system.task.base.QuartzManager; import com.ruoyi.system.task.base.TimeJobType; import com.ruoyi.system.task.jobs.LivePushJob; +import com.ruoyi.system.utils.util.TemplateMessageSendUtil; +import com.ruoyi.system.vo.TSysActivityVO; import com.ruoyi.system.vo.TSysLiveVO; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import java.time.LocalDateTime; -import java.util.Date; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.util.*; /** * <p> @@ -39,7 +41,8 @@ @Autowired private RedisCache redisCache; - + @Autowired + private ApplicationContext applicationContext; @Override public R pushUser(String id, String pushType) { TSysLive sysLive = this.getById(id); @@ -50,18 +53,8 @@ } sysLive.setPushType(pushType); this.updateById(sysLive); - // 添加定时任务 直播开始推送 - Map<String, ? extends Object> maps = - new ImmutableMap.Builder<String, String>(). - put("id", sysLive.getId()) - .build(); - QuartzManager.addJob( - LivePushJob.class, - (LivePushJob.name+sysLive.getId()).toUpperCase(), - TimeJobType.LIVE_PUSH, - DateUtils.localDateTimeToDate(sysLive.getStartTime()), - maps - ); + // 直播开始推送公众号消息 + applicationContext.publishEvent(new PublishTopicLiveInfoEvent(pushType+"_"+id)); } return R.ok(); } @@ -85,8 +78,17 @@ sysLive.setLiveStatus(3); } // 查看是否包含该值 - boolean memberInSet = redisCache.isMemberInSet(Constants.LIVE_APPOINTMENT_PUSH + sysLive.getId(), query.getAppUserId()); - sysLive.setAppointmentStatus(memberInSet ? 2 : 1); +// boolean memberInSet = redisCache.isMemberInSet(Constants.LIVE_APPOINTMENT_PUSH + sysLive.getId(), query.getAppUserId()); +// sysLive.setAppointmentStatus(memberInSet ? 2 : 1); + + if(query.getRoleType() == 5){ + Long userId = query.getUserId(); + Set<Long> cacheSet = redisCache.getCacheSet(Constants.SYS_ACTIVITY_CLICK_COUNT + sysLive.getId()); + if(cacheSet.contains(userId)){ + sysLive.setIsView(true); + } + } + } pageInfo.setRecords(list); return pageInfo; diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TSysProductIntroductionServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TSysProductIntroductionServiceImpl.java index 7915b86..7c69cb3 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TSysProductIntroductionServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TSysProductIntroductionServiceImpl.java @@ -2,14 +2,20 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.basic.PageInfo; +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.system.mapper.TSysProductIntroductionMapper; import com.ruoyi.system.model.TSysEducationalInfo; import com.ruoyi.system.model.TSysProductIntroduction; import com.ruoyi.system.query.TSysProductIntroductionQuery; import com.ruoyi.system.service.TSysProductIntroductionService; +import com.ruoyi.system.vo.TSysProductIntroductionVO; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; import java.util.List; +import java.util.Set; /** * <p> @@ -22,10 +28,25 @@ @Service public class TSysProductIntroductionServiceImpl extends ServiceImpl<TSysProductIntroductionMapper, TSysProductIntroduction> implements TSysProductIntroductionService { + @Autowired + private RedisCache redisCache; + @Override - public PageInfo<TSysProductIntroduction> pageList(TSysProductIntroductionQuery query) { - PageInfo<TSysProductIntroduction> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); - List<TSysProductIntroduction> list = this.baseMapper.pageList(query,pageInfo); + public PageInfo<TSysProductIntroductionVO> pageList(TSysProductIntroductionQuery query) { + PageInfo<TSysProductIntroductionVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); + List<TSysProductIntroductionVO> list = this.baseMapper.pageList(query,pageInfo); + if (CollectionUtils.isEmpty(list)){ + return pageInfo; + } + if(query.getRoleType() == 5){ + Long userId = query.getUserId(); + for (TSysProductIntroductionVO tSysProductIntroduction : list) { + Set<Long> cacheSet = redisCache.getCacheSet(Constants.SYS_PRODUCT_CLICK_COUNT + tSysProductIntroduction.getId()); + if(cacheSet.contains(userId)){ + tSysProductIntroduction.setIsView(true); + } + } + } pageInfo.setRecords(list); return pageInfo; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/task/base/AbstractJob.java b/ruoyi-system/src/main/java/com/ruoyi/system/task/base/AbstractJob.java index e738867..c572fce 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/task/base/AbstractJob.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/task/base/AbstractJob.java @@ -2,9 +2,13 @@ import com.aizuda.bpm.mybatisplus.mapper.FlwTaskActorMapper; import com.aizuda.bpm.mybatisplus.mapper.FlwTaskMapper; +import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.redis.service.RedisService; import com.ruoyi.system.service.ISysUserService; +import com.ruoyi.system.service.TSysAppUserService; import com.ruoyi.system.service.TSysLiveService; import com.ruoyi.system.task.utils.SpringContextsUtil; +import com.ruoyi.system.utils.util.TemplateMessageSendUtil; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; @@ -19,10 +23,16 @@ protected ISysUserService sysUserService; protected TSysLiveService sysLiveService; + protected RedisCache redisCache; + protected TSysAppUserService sysAppUserService; + protected TemplateMessageSendUtil templateMessageSendUtil; public AbstractJob(){ this.sysUserService = SpringContextsUtil.getBean(ISysUserService.class); this.sysLiveService = SpringContextsUtil.getBean(TSysLiveService.class); + this.redisCache = SpringContextsUtil.getBean(RedisCache.class); + this.sysAppUserService = SpringContextsUtil.getBean(TSysAppUserService.class); + this.templateMessageSendUtil = SpringContextsUtil.getBean(TemplateMessageSendUtil.class); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/task/jobs/LivePushJob.java b/ruoyi-system/src/main/java/com/ruoyi/system/task/jobs/LivePushJob.java index defd05a..de9f809 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/task/jobs/LivePushJob.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/task/jobs/LivePushJob.java @@ -1,9 +1,20 @@ package com.ruoyi.system.task.jobs; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.system.model.TSysAppUser; +import com.ruoyi.system.model.TSysLive; import com.ruoyi.system.task.base.AbstractJob; import org.quartz.JobDataMap; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Objects; +import java.util.Set; /** * 直播推送定时任务 @@ -18,9 +29,23 @@ public void execute(JobExecutionContext context) throws JobExecutionException { JobDataMap maps = context.getMergedJobDataMap(); - Long liveId = maps.getLong("id"); + String liveId = maps.getString("id"); + Set<String> userIds = redisCache.getCacheSet(Constants.LIVE_APPOINTMENT_PUSH + liveId); + if(CollectionUtils.isEmpty(userIds)){ + return; + } try { System.out.println("开始执行直播推送任务"); + TSysLive sysLive = sysLiveService.getById(liveId); + if(Objects.nonNull(sysLive)){ + String liveTitle = sysLive.getLiveTitle(); + String startTime = DateUtils.localDateTimeToString(sysLive.getStartTime()); + List<TSysAppUser> sysAppUsers = sysAppUserService.list(Wrappers.lambdaQuery(TSysAppUser.class) + .in(TSysAppUser::getId, userIds)); + for(TSysAppUser sysAppUser : sysAppUsers){ + templateMessageSendUtil.wxTemplateAppLiveResultRequest(sysAppUser.getOpenId(), liveTitle, startTime); + } + } }catch(Exception e){ e.printStackTrace(); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/utils/util/JsonUtils.java b/ruoyi-system/src/main/java/com/ruoyi/system/utils/util/JsonUtils.java new file mode 100644 index 0000000..5d4b0ea --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/utils/util/JsonUtils.java @@ -0,0 +1,110 @@ +package com.ruoyi.system.utils.util; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.system.utils.wx.config.JacksonConfig; +import lombok.extern.slf4j.Slf4j; + +import java.io.IOException; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +/** + * Json转换工具类 + * 参考:https://blog.csdn.net/weixin_38413579/article/details/82562634 + * @author madman + */ +@Slf4j +public final class JsonUtils { + + private static final ObjectMapper OM = new ObjectMapper(); + private static final JavaTimeModule timeModule = new JavaTimeModule(); + + /** + * 转换LocalDateTime + */ + static class LocalDateTimeSerializer extends JsonSerializer<LocalDateTime> { + @Override + public void serialize(LocalDateTime localDateTime, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { + jsonGenerator.writeString(localDateTime.format(DateTimeFormatter.ofPattern(JacksonConfig.dateTimeFormat))); + } + } + + /** + * 转换LocalDate + */ + static class LocalDateSerializer extends JsonSerializer<LocalDate> { + @Override + public void serialize(LocalDate localDate, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { + jsonGenerator.writeString(localDate.format(DateTimeFormatter.ofPattern(JacksonConfig.dateFormat))); + } + } + + /** + * 设置 ObjectMapper + * + * @return + */ + private static ObjectMapper getObjectMapper() { + // 序列化 + timeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer()); + timeModule.addSerializer(LocalDate.class, new LocalDateSerializer()); + // 反序列化 + timeModule.addDeserializer(LocalDateTime.class, + new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(JacksonConfig.dateTimeFormat))); + timeModule.addDeserializer(LocalDate.class, + new LocalDateDeserializer(DateTimeFormatter.ofPattern(JacksonConfig.dateFormat))); + // 允许对象忽略json中不存在的属性 + OM.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + OM.registerModule(timeModule); + return OM; + } + + /** + * 将对象序列化 + */ + public static <T> String toJsonString(T obj) { + try { + ObjectMapper om = getObjectMapper(); + return om.writeValueAsString(obj); + } catch (JsonProcessingException e) { + log.error("转json字符串失败:{}", obj); + return null; + } + } + + /** + * 反序列化对象字符串 + */ + public static <T> T parseObject(String json, Class<T> clazz) { + try { + ObjectMapper om = getObjectMapper(); + return om.readValue(json, clazz); + } catch (JsonProcessingException e) { + throw new ServiceException("反序列化对象字符串失败"); + } + } + + /** + * 反序列化字符串成为对象 + */ + public static <T> T parseObject(String json, TypeReference<T> valueTypeRef) { + try { + ObjectMapper om = getObjectMapper(); + return om.readValue(json, valueTypeRef); + } catch (JsonProcessingException e) { + throw new ServiceException("反序列化字符串成为对象失败"); + } + } + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/utils/util/TemplateMessageSendUtil.java b/ruoyi-system/src/main/java/com/ruoyi/system/utils/util/TemplateMessageSendUtil.java new file mode 100644 index 0000000..3bb4d12 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/utils/util/TemplateMessageSendUtil.java @@ -0,0 +1,124 @@ +package com.ruoyi.system.utils.util; + + +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.core.utils.HttpUtils; +import com.ruoyi.common.redis.service.RedisService; +import com.ruoyi.system.utils.wx.model.WeixinProperties; +import com.ruoyi.system.utils.wx.template.Template; +import com.ruoyi.system.utils.wx.template.wxTemplateAppLiveResult.WxOfficeTemplateAppLiveResultRequest; +import com.ruoyi.system.utils.wx.template.wxTemplateAppLiveResult.WxOfficeTemplateAppLiveResultRequestData; +import com.ruoyi.system.utils.wx.template.wxTemplateAppLiveResult.WxTemplateAppLiveResultRequest; +import com.ruoyi.system.utils.wx.template.wxTemplateAppLiveResult.WxTemplateAppLiveResultRequestData; +import com.ruoyi.system.utils.wx.tools.WxAppletTools; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.util.StringUtils; +import org.springframework.web.client.RestTemplate; + +import javax.annotation.Resource; +import java.io.Serializable; + +/** + * 消息模板发送 + */ +@Slf4j +@Component +public class TemplateMessageSendUtil implements Serializable { + private final static String ACCESS_TOKEN_CACHE_KEY = "accessToken:"; + @Autowired + private RedisCache redisCache; + @Autowired + private RestTemplate wxRestTemplate; + @Autowired + private WeixinProperties weixinProperties; + @Resource + private RedisService redisService; + + /** + * 直播开始小程序订阅通知 + * @param openId 用户openId + * @param liveTitle 标题 + * @param startTime 开始时间 + */ + public String wxTemplateAppLiveResultRequest(String openId,String liveTitle,String startTime) { + WxAppletTools appletTools = new WxAppletTools(wxRestTemplate, weixinProperties, redisService); + // 1,获取access_token + String accessToken = redisCache.getCacheObject(ACCESS_TOKEN_CACHE_KEY); + if (!StringUtils.hasLength(accessToken)) { + accessToken = appletTools.getAccessToken(); + } + try { + log.info("直播开始提醒通知:------------------------"); + // 创建请求实体 + WxTemplateAppLiveResultRequest wxTemplateAppLiveResultRequest = new WxTemplateAppLiveResultRequest(); + wxTemplateAppLiveResultRequest.setTouser(openId); + wxTemplateAppLiveResultRequest.setTemplate_id(weixinProperties.getAppLiveResultTemplateId()); + // 标题 + Template thing1 = new Template(); + thing1.setValue(liveTitle); + // 开始时间 + Template time2 = new Template(); + time2.setValue(startTime); + // 发送模板消息参数实体封装 + WxTemplateAppLiveResultRequestData wxTemplateAppLiveResultRequestData = new WxTemplateAppLiveResultRequestData(); + wxTemplateAppLiveResultRequestData.setThing1(thing1); + wxTemplateAppLiveResultRequestData.setTime2(time2); + wxTemplateAppLiveResultRequest.setData(wxTemplateAppLiveResultRequestData); + // 4,发送消息给用户 + String url = Constants.TEMPLATE_URL.replace("ACCESS_TOKEN", accessToken); + String result = HttpUtils.sendPost(url, JsonUtils.toJsonString(wxTemplateAppLiveResultRequest)); + log.info("直播开始通知模板消息返回数据:{}", result); + return result; + } catch (Exception e) { + log.error("直播开始通知失败;"); + } + return null; + } + + + /** + * 微信公众号模板消息发送 + * @param openId 用户openId + * @param liveTitle 标题 + * @param startTime 开始时间 + */ + public String wxOfficeTemplateAppLiveRequest(String openId,String liveTitle,String startTime) { + WxAppletTools appletTools = new WxAppletTools(wxRestTemplate, weixinProperties, redisService); + // 1,获取access_token + String accessToken = redisCache.getCacheObject(ACCESS_TOKEN_CACHE_KEY); + if (!StringUtils.hasLength(accessToken)) { + accessToken = appletTools.getAccessToken(); + } + try { + log.info("模板消息发送提醒通知:------------------------"); + // 创建请求实体 + WxOfficeTemplateAppLiveResultRequest wxOfficeTemplateAppLiveResultRequest = new WxOfficeTemplateAppLiveResultRequest(); + wxOfficeTemplateAppLiveResultRequest.setTouser(openId); + wxOfficeTemplateAppLiveResultRequest.setTemplate_id(weixinProperties.getOfficeAppLiveResultTemplateId()); + // 标题 + Template thing1 = new Template(); + thing1.setValue(liveTitle); + // 开始时间 + Template time18 = new Template(); + time18.setValue(startTime); + // 发送模板消息参数实体封装 + WxOfficeTemplateAppLiveResultRequestData wxOfficeTemplateAppLiveResultRequestData = new WxOfficeTemplateAppLiveResultRequestData(); + wxOfficeTemplateAppLiveResultRequestData.setThing1(thing1); + wxOfficeTemplateAppLiveResultRequestData.setTime18(time18); + wxOfficeTemplateAppLiveResultRequest.setData(wxOfficeTemplateAppLiveResultRequestData); + // 4,发送消息给用户 + String url = Constants.OFFICIAL_ACCOUNT_TEMPLATE_URL.replace("ACCESS_TOKEN", accessToken); + String result = HttpUtils.sendPost(url, JsonUtils.toJsonString(wxOfficeTemplateAppLiveResultRequest)); + log.info("模板消息发送通知模板消息返回数据:{}", result); + return result; + } catch (Exception e) { + log.error("模板消息发送通知失败;"); + } + return null; + } + + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/utils/wx/config/JacksonConfig.java b/ruoyi-system/src/main/java/com/ruoyi/system/utils/wx/config/JacksonConfig.java new file mode 100644 index 0000000..f96bb5a --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/utils/wx/config/JacksonConfig.java @@ -0,0 +1,35 @@ +package com.ruoyi.system.utils.wx.config; + +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; +import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.time.format.DateTimeFormatter; + +/** + * @author liheng + * @ClassName LocalDateTimeSerializerConfig + * @Description + * @date 2020-09-22 11:22 + */ +@Configuration +public class JacksonConfig { + public static final String dateFormat = "yyyy-MM-dd"; + public static final String dateTimeFormat = "yyyy-MM-dd HH:mm:ss"; + + @Bean + public Jackson2ObjectMapperBuilderCustomizer jsonCustomizer() { + return builder -> { + // Long型精度丢失问题 + // builder.serializerByType(Long.TYPE, ToStringSerializer.instance); + builder.serializerByType(Long.class, ToStringSerializer.instance); + // 时间格式化 + builder.simpleDateFormat(dateTimeFormat); + builder.serializers(new LocalDateSerializer(DateTimeFormatter.ofPattern(dateFormat))); + builder.serializers(new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(dateTimeFormat))); + }; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/utils/wx/model/WeixinProperties.java b/ruoyi-system/src/main/java/com/ruoyi/system/utils/wx/model/WeixinProperties.java index fdeb5ab..a3e8ccf 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/utils/wx/model/WeixinProperties.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/utils/wx/model/WeixinProperties.java @@ -37,6 +37,34 @@ * @return secret ID */ private String secretId; + /** + * 获取 appLiveResultTemplateId 小程序订阅消息 + * + * @return appLiveResultTemplateId + */ + private String appLiveResultTemplateId; + /** + * 获取 officeAppLiveResultTemplateId 公众号模板消息 + * + * @return officeAppLiveResultTemplateId + */ + private String officeAppLiveResultTemplateId; + + public String getOfficeAppLiveResultTemplateId() { + return officeAppLiveResultTemplateId; + } + + public void setOfficeAppLiveResultTemplateId(String officeAppLiveResultTemplateId) { + this.officeAppLiveResultTemplateId = officeAppLiveResultTemplateId; + } + + public String getAppLiveResultTemplateId() { + return appLiveResultTemplateId; + } + + public void setAppLiveResultTemplateId(String appLiveResultTemplateId) { + this.appLiveResultTemplateId = appLiveResultTemplateId; + } public String getSecretId() { return secretId; diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/utils/wx/template/Template.java b/ruoyi-system/src/main/java/com/ruoyi/system/utils/wx/template/Template.java new file mode 100644 index 0000000..b2c9659 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/utils/wx/template/Template.java @@ -0,0 +1,19 @@ +package com.ruoyi.system.utils.wx.template; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * @Description 微信消息模板参数实体 + * @Author xiaochen + * @Date 2021/11/8 10:30 + */ +@Data +public class Template implements Serializable{ + + @ApiModelProperty(value = "消息内容") + private String value; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/utils/wx/template/wxTemplateAppLiveResult/WxOfficeTemplateAppLiveResultRequest.java b/ruoyi-system/src/main/java/com/ruoyi/system/utils/wx/template/wxTemplateAppLiveResult/WxOfficeTemplateAppLiveResultRequest.java new file mode 100644 index 0000000..d890571 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/utils/wx/template/wxTemplateAppLiveResult/WxOfficeTemplateAppLiveResultRequest.java @@ -0,0 +1,26 @@ +package com.ruoyi.system.utils.wx.template.wxTemplateAppLiveResult; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +@Data +public class WxOfficeTemplateAppLiveResultRequest implements Serializable { + + @ApiModelProperty(value = "用户openid") + private String touser; + + @ApiModelProperty(value = "消息模板id") + private String template_id; + + @ApiModelProperty(value = "订阅场景值") + private String scene = "1000"; + + @ApiModelProperty(value = "订阅通知") + private String title = "课程预约结果通知"; + + @ApiModelProperty(value = "消息模板data数据") + private WxOfficeTemplateAppLiveResultRequestData data; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/utils/wx/template/wxTemplateAppLiveResult/WxOfficeTemplateAppLiveResultRequestData.java b/ruoyi-system/src/main/java/com/ruoyi/system/utils/wx/template/wxTemplateAppLiveResult/WxOfficeTemplateAppLiveResultRequestData.java new file mode 100644 index 0000000..3422252 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/utils/wx/template/wxTemplateAppLiveResult/WxOfficeTemplateAppLiveResultRequestData.java @@ -0,0 +1,18 @@ +package com.ruoyi.system.utils.wx.template.wxTemplateAppLiveResult; + +import com.ruoyi.system.utils.wx.template.Template; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +@Data +public class WxOfficeTemplateAppLiveResultRequestData implements Serializable { + + @ApiModelProperty(value = "标题") + private Template thing1; + + @ApiModelProperty(value = "开始时间") + private Template time18; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/utils/wx/template/wxTemplateAppLiveResult/WxTemplateAppLiveResultRequest.java b/ruoyi-system/src/main/java/com/ruoyi/system/utils/wx/template/wxTemplateAppLiveResult/WxTemplateAppLiveResultRequest.java new file mode 100644 index 0000000..1a5fec5 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/utils/wx/template/wxTemplateAppLiveResult/WxTemplateAppLiveResultRequest.java @@ -0,0 +1,20 @@ +package com.ruoyi.system.utils.wx.template.wxTemplateAppLiveResult; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +@Data +public class WxTemplateAppLiveResultRequest implements Serializable { + + @ApiModelProperty(value = "用户openid") + private String touser; + + @ApiModelProperty(value = "消息模板id") + private String template_id; + + @ApiModelProperty(value = "消息模板data数据") + private WxTemplateAppLiveResultRequestData data; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/utils/wx/template/wxTemplateAppLiveResult/WxTemplateAppLiveResultRequestData.java b/ruoyi-system/src/main/java/com/ruoyi/system/utils/wx/template/wxTemplateAppLiveResult/WxTemplateAppLiveResultRequestData.java new file mode 100644 index 0000000..8173b5f --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/utils/wx/template/wxTemplateAppLiveResult/WxTemplateAppLiveResultRequestData.java @@ -0,0 +1,18 @@ +package com.ruoyi.system.utils.wx.template.wxTemplateAppLiveResult; + +import com.ruoyi.system.utils.wx.template.Template; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +@Data +public class WxTemplateAppLiveResultRequestData implements Serializable { + + @ApiModelProperty(value = "标题") + private Template thing1; + + @ApiModelProperty(value = "开始时间") + private Template time2; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/utils/wx/tools/WxAppletTools.java b/ruoyi-system/src/main/java/com/ruoyi/system/utils/wx/tools/WxAppletTools.java index 2298a44..8877ce5 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/utils/wx/tools/WxAppletTools.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/utils/wx/tools/WxAppletTools.java @@ -43,6 +43,24 @@ /** * 请求参数 * 属性 类型 默认值 必填 说明 + * appid string 是 公众号 appId + * secret string 是 公众号 appSecret + * code string 是 登录时获取的 code + * grant_type string 是 授权类型,此处只需填写 authorization_cod + * <p> + * 返回值: + * <p> + * 属性 类型 说明 + * openid string 用户唯一标识 + * session_key string 会话密钥 + * unionid string 用户在开放平台的唯一标识符,若当前小程序已绑定到微信开放平台帐号下会返回,详见 UnionID 机制说明。 + * errcode number 错误码 + * errmsg string 错误信息 + */ + private static final String CODE_2_SESSION_URL = "https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type=authorization_code"; + /** + * 请求参数 + * 属性 类型 默认值 必填 说明 * grant_type string 是 填写 client_credential * appid string 是 小程序唯一凭证,即 AppID,可在「微信公众平台 - 设置 - 开发设置」页中获得。(需要已经成为开发者,且帐号没有异常状态) * secret string 是 小程序唯一凭证密钥,即 AppSecret,获取方式同 appid @@ -101,10 +119,33 @@ } /** + * 微信公众号获取openId + * @param resqBody * @return */ - public String getAccessToken(String version) { - String accessToken = redisService.getCacheObject(ACCESSTOKEN_CACHE_KEY + version); + public Code2SessionRespBody getOpenIdByCode2session(Code2SessionResqBody resqBody) { + long start = System.currentTimeMillis(); + String requestUrl = MessageFormat.format(CODE_2_SESSION_URL, wxConfig.getAppId(), wxConfig.getSecretId(), resqBody.getJsCode()); + long end = System.currentTimeMillis(); + log.info("code换取sessionKey时间:{}", (end - start)); + String respBody = wxRestTemplate.getForEntity(requestUrl, String.class).getBody(); + end = System.currentTimeMillis(); + log.info("code换取sessionKey时间:{}", (end - start)); + log.info("Jscode2session:{}", respBody); + Code2SessionRespBody code2SessionRespBody = WxJsonUtils.parseObject(respBody, Code2SessionRespBody.class); + // 判断有误异常 + if (StringUtils.hasLength(code2SessionRespBody.getErrorMsg())) { + // 抛出错误 + throw new WxException(code2SessionRespBody.getErrorCode() + ":" + code2SessionRespBody.getErrorMsg()); + } + return code2SessionRespBody; + } + + /** + * @return + */ + public String getAccessToken() { + String accessToken = redisService.getCacheObject(ACCESSTOKEN_CACHE_KEY); if (StringUtils.hasLength(accessToken)) { return accessToken; } @@ -116,7 +157,7 @@ // 抛出错误 throw new WxException(accessTokenRespBody.getErrorCode() + ":" + accessTokenRespBody.getErrorMsg()); } - redisService.setCacheObject(ACCESSTOKEN_CACHE_KEY + version, accessTokenRespBody.getAccessToken(), 7200L, TimeUnit.SECONDS); + redisService.setCacheObject(ACCESSTOKEN_CACHE_KEY, accessTokenRespBody.getAccessToken(), 7200L, TimeUnit.SECONDS); return accessTokenRespBody.getAccessToken(); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/TSysActivityVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/TSysActivityVO.java new file mode 100644 index 0000000..b09e2d8 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/TSysActivityVO.java @@ -0,0 +1,15 @@ +package com.ruoyi.system.vo; + +import com.ruoyi.system.model.TSysActivity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +@ApiModel(value = "热门活动信息TSysActivityVO") +public class TSysActivityVO extends TSysActivity { + + @ApiModelProperty(value = "当前用户是否查看 true=是") + private Boolean isView = false; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/TSysEducationalInfoVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/TSysEducationalInfoVO.java new file mode 100644 index 0000000..b90a08d --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/TSysEducationalInfoVO.java @@ -0,0 +1,15 @@ +package com.ruoyi.system.vo; + +import com.ruoyi.system.model.TSysEducationalInfo; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +@ApiModel(value = "TSysEducationalInfoVO对象", description = "教育资讯") +public class TSysEducationalInfoVO extends TSysEducationalInfo { + + @ApiModelProperty(value = "当前用户是否查看 true=是") + private Boolean isView = false; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/TSysLiveVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/TSysLiveVO.java index 3eeef7b..1f8547b 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/vo/TSysLiveVO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/TSysLiveVO.java @@ -15,5 +15,7 @@ @ApiModelProperty(value = "预约状态 1=未预约 2=已预约") private Integer appointmentStatus; + @ApiModelProperty(value = "当前用户是否查看 true=是") + private Boolean isView = false; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/TSysProductIntroductionVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/TSysProductIntroductionVO.java new file mode 100644 index 0000000..54bb33b --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/TSysProductIntroductionVO.java @@ -0,0 +1,15 @@ +package com.ruoyi.system.vo; + +import com.ruoyi.system.model.TSysProductIntroduction; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +@ApiModel(value = "产品介绍视图对象TSysProductIntroductionVO") +public class TSysProductIntroductionVO extends TSysProductIntroduction { + + @ApiModelProperty(value = "当前用户是否查看 true=是") + private Boolean isView = false; + +} diff --git a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml index be96a75..454dcb3 100644 --- a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml @@ -273,8 +273,14 @@ <select id="selectIdByPhone" resultType="java.lang.Long"> select user_id from sys_user where phonenumber = #{phonenumber} and status = 0 and del_flag = 0 </select> + <select id="selectUserListByIds" resultType="com.ruoyi.common.core.domain.entity.SysUser"> + select * from sys_user where open_id IS NOT NULL AND user_id in + <foreach item="userId" collection="userIds" separator="," close=")" open="("> + #{userId} + </foreach> + </select> - <insert id="insertUser" parameterType="com.ruoyi.common.core.domain.entity.SysUser" useGeneratedKeys="true" keyProperty="userId"> + <insert id="insertUser" parameterType="com.ruoyi.common.core.domain.entity.SysUser" useGeneratedKeys="true" keyProperty="userId"> insert into sys_user( <if test="userId != null and userId != 0">user_id,</if> <if test="deptId != null and deptId != 0">dept_id,</if> diff --git a/ruoyi-system/src/main/resources/mapper/system/TSysActivityMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TSysActivityMapper.xml index 313f876..f8a0e57 100644 --- a/ruoyi-system/src/main/resources/mapper/system/TSysActivityMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/TSysActivityMapper.xml @@ -24,7 +24,7 @@ <sql id="Base_Column_List"> id, activity_name, show_type, activity_introduction, activity_cover, activity_detail, status, sort_by, click_count, create_time, update_time, create_by, update_by, disabled </sql> - <select id="pageList" resultType="com.ruoyi.system.model.TSysActivity"> + <select id="pageList" resultType="com.ruoyi.system.vo.TSysActivityVO"> SELECT <include refid="Base_Column_List"/> FROM t_sys_activity diff --git a/ruoyi-system/src/main/resources/mapper/system/TSysAppUserMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TSysAppUserMapper.xml index 7d02f3c..5c3c9f3 100644 --- a/ruoyi-system/src/main/resources/mapper/system/TSysAppUserMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/TSysAppUserMapper.xml @@ -10,6 +10,7 @@ <result column="birth_time" property="birthTime" /> <result column="sex" property="sex" /> <result column="open_id" property="openId" /> + <result column="office_open_id" property="officeOpenId" /> <result column="chronic_disease_id" property="chronicDiseaseId" /> <result column="status" property="status" /> <result column="last_reminder_time" property="lastReminderTime" /> @@ -22,10 +23,10 @@ <!-- 通用查询结果列 --> <sql id="Base_Column_List"> - id, nick_name, phone, birth_time, sex, open_id,chronic_disease_id,status,last_reminder_time, create_time, update_time, create_by, update_by, disabled + id, nick_name, phone, birth_time, sex, open_id,chronic_disease_id,status,last_reminder_time,office_open_id, create_time, update_time, create_by, update_by, disabled </sql> <select id="pageList" resultType="com.ruoyi.system.vo.TSysAppUserVO"> - select tsau.id, tsau.nick_name, tsau.phone, tsau.birth_time, tsau.sex, tsau.open_id, + select tsau.id, tsau.nick_name, tsau.phone, tsau.birth_time, tsau.sex, tsau.open_id,tsau.office_open_id, tsau.chronic_disease_id,tsau.status,tsau.last_reminder_time, tsau.create_time, tsau.update_time, tsau.create_by, tsau.update_by, tsau.disabled, tsi.lastInspectionTime from t_sys_app_user tsau @@ -54,7 +55,7 @@ ORDER BY tsau.create_time DESC </select> <select id="pageChronicDiseaseUserList" resultType="com.ruoyi.system.vo.TSysAppUserVO"> - select tsau.id, tsau.nick_name, tsau.phone, tsau.birth_time, tsau.sex, tsau.open_id, + select tsau.id, tsau.nick_name, tsau.phone, tsau.birth_time, tsau.sex, tsau.open_id,tsau.office_open_id, tsau.chronic_disease_id,tsau.status,tsau.last_reminder_time, tsau.create_time, tsau.update_time, tsau.create_by, tsau.update_by, tsau.disabled from t_sys_app_user tsau diff --git a/ruoyi-system/src/main/resources/mapper/system/TSysEducationalInfoMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TSysEducationalInfoMapper.xml index 0da46f1..1024367 100644 --- a/ruoyi-system/src/main/resources/mapper/system/TSysEducationalInfoMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/TSysEducationalInfoMapper.xml @@ -23,7 +23,7 @@ <sql id="Base_Column_List"> id, info_title, show_type, info_cover, info_content, status, sort_by, click_count, create_time, update_time, create_by, update_by, disabled </sql> - <select id="pageList" resultType="com.ruoyi.system.model.TSysEducationalInfo"> + <select id="pageList" resultType="com.ruoyi.system.vo.TSysEducationalInfoVO"> select <include refid="Base_Column_List" /> from t_sys_educational_info diff --git a/ruoyi-system/src/main/resources/mapper/system/TSysLiveMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TSysLiveMapper.xml index c127795..0fb1ec0 100644 --- a/ruoyi-system/src/main/resources/mapper/system/TSysLiveMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/TSysLiveMapper.xml @@ -18,6 +18,7 @@ <result column="live_url" property="liveUrl" /> <result column="live_detail" property="liveDetail" /> <result column="push_type" property="pushType" /> + <result column="click_count" property="clickCount" /> <result column="create_time" property="createTime" /> <result column="update_time" property="updateTime" /> <result column="create_by" property="createBy" /> @@ -28,7 +29,7 @@ <!-- 通用查询结果列 --> <sql id="Base_Column_List"> id, live_title, live_cover, live_introduction, start_time,end_time, expected_duration, live_way, live_mode,live_url, - live_lecturer, live_type, password, live_detail, push_type, create_time, update_time, create_by, update_by, disabled + live_lecturer, live_type, password, live_detail, push_type,click_count, create_time, update_time, create_by, update_by, disabled </sql> <select id="pageList" resultType="com.ruoyi.system.vo.TSysLiveVO"> SELECT diff --git a/ruoyi-system/src/main/resources/mapper/system/TSysOtherConfigMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TSysOtherConfigMapper.xml index 7066009..85a2535 100644 --- a/ruoyi-system/src/main/resources/mapper/system/TSysOtherConfigMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/TSysOtherConfigMapper.xml @@ -7,7 +7,7 @@ <id column="id" property="id" /> <result column="procurement_conditions" property="procurementConditions" /> <result column="points_expiration" property="pointsExpiration" /> - <result column="expira_unit" property="expiraUnit" /> + <result column="expire_unit" property="expireUnit" /> <result column="msg_count" property="msgCount" /> <result column="ai_price" property="aiPrice" /> <result column="delivery_time" property="deliveryTime" /> @@ -21,7 +21,7 @@ <!-- 通用查询结果列 --> <sql id="Base_Column_List"> - id, procurement_conditions, points_expiration, expira_unit, msg_count, ai_price, delivery_time, create_time, update_time, create_by, update_by, disabled, create_id + id, procurement_conditions, points_expiration, expire_unit, msg_count, ai_price, delivery_time, create_time, update_time, create_by, update_by, disabled, create_id </sql> </mapper> diff --git a/ruoyi-system/src/main/resources/mapper/system/TSysProductIntroductionMapper.xml b/ruoyi-system/src/main/resources/mapper/system/TSysProductIntroductionMapper.xml index 08d0756..ea39518 100644 --- a/ruoyi-system/src/main/resources/mapper/system/TSysProductIntroductionMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/TSysProductIntroductionMapper.xml @@ -24,7 +24,7 @@ <sql id="Base_Column_List"> id, product_name, show_type, product_introduction, product_cover, product_detail, status, sort_by, click_count, create_time, update_time, create_by, update_by, disabled </sql> - <select id="pageList" resultType="com.ruoyi.system.model.TSysProductIntroduction"> + <select id="pageList" resultType="com.ruoyi.system.vo.TSysProductIntroductionVO"> SELECT <include refid="Base_Column_List"/> FROM t_sys_product_introduction -- Gitblit v1.7.1