From 5b4107e212e55a5708123438e257f826fd373fd1 Mon Sep 17 00:00:00 2001 From: Yen Date: Thu, 22 Sep 2022 14:49:26 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../qs/serve/controller/WxSvcLoginApi.java | 2 +- .../modules/base/TencentYunSmsService.java | 74 +++++++++++++++++++ .../controller/QmsFormSubmitController.java | 15 ++++ .../qms/controller/QmsGroupController.java | 43 +++++++---- .../controller/api/QmsDraftApiController.java | 3 + .../api/QmsSubmitApiController.java | 11 ++- .../qs/serve/modules/qms/entity/QmsGroup.java | 3 +- .../modules/qms/entity/QmsGroupScope.java | 2 +- .../impl/QmsFormSubmitServiceImpl.java | 4 + .../impl/QmsGroupScopeServiceImpl.java | 51 +++++++++++-- .../qs/serve/modules/wx/api/WxSvcUserApi.java | 4 +- .../modules/wx/common/conf/WxMpConfig.java | 4 +- .../wx/controller/WxUserController.java | 42 +++++------ .../modules/wx/entity/dto/SmsBaseDto.java | 3 + .../wx/entity/dto/sms/WxSmsNewForm.java | 28 +++++++ .../modules/wx/service/WxPushService.java | 8 +- .../modules/wx/service/WxUserService.java | 5 ++ .../wx/service/impl/WxPushServiceImpl.java | 21 +++--- .../wx/service/impl/WxUserServiceImpl.java | 36 ++++++--- 19 files changed, 285 insertions(+), 74 deletions(-) create mode 100644 src/main/java/com/qs/serve/modules/base/TencentYunSmsService.java create mode 100644 src/main/java/com/qs/serve/modules/wx/entity/dto/sms/WxSmsNewForm.java diff --git a/src/main/java/com/qs/serve/controller/WxSvcLoginApi.java b/src/main/java/com/qs/serve/controller/WxSvcLoginApi.java index 9ce3b499..08c02d5a 100644 --- a/src/main/java/com/qs/serve/controller/WxSvcLoginApi.java +++ b/src/main/java/com/qs/serve/controller/WxSvcLoginApi.java @@ -65,7 +65,7 @@ public class WxSvcLoginApi { String token = IdUtil.fastSimpleUUID(); String key = RedisCacheKeys.LOGIN_KEY_WX + token; LoginUser loginUser = new LoginUser(wxUser.getId(),wxUser.getEmpName(),"", - ServletUtils.getIp(request), LoginUserType.SYS_USER,new ArrayList<>(),null,AuthContextUtils.getTenant()); + ServletUtils.getIp(request), LoginUserType.APP_USER,new ArrayList<>(),null,AuthContextUtils.getTenant()); redisService.set(key, JsonUtil.objectToJson(loginUser.loginUserDTO()),2, TimeUnit.DAYS); objectMap.put("token",token); return R.ok(objectMap); diff --git a/src/main/java/com/qs/serve/modules/base/TencentYunSmsService.java b/src/main/java/com/qs/serve/modules/base/TencentYunSmsService.java new file mode 100644 index 00000000..d1305899 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/base/TencentYunSmsService.java @@ -0,0 +1,74 @@ +package com.qs.serve.modules.base; + +import com.tencentcloudapi.common.Credential; +import com.tencentcloudapi.common.exception.TencentCloudSDKException; +import com.tencentcloudapi.common.profile.ClientProfile; +import com.tencentcloudapi.common.profile.HttpProfile; +import com.tencentcloudapi.sms.v20210111.SmsClient; +import com.tencentcloudapi.sms.v20210111.models.SendSmsRequest; +import com.tencentcloudapi.sms.v20210111.models.SendSmsResponse; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +/** + * @author YenHex + * @since 2022/9/20 + */ +//@Service +public class TencentYunSmsService { + + @Value("${tencent.sms.secret-id}") + private String secretId; + + @Value("${tencent.sms.secret-key}") + private String secretKey; + + @Value("${tencent.sms.sdkAppId}") + private String sdkAppId; + + @Value("${tencent.sms.signName}") + private String signName; + + @Value("${tencent.sms.templateId}") + private String templateId; + + public void send(String phone,String code) { + Credential cred = new Credential(secretId, secretKey); + HttpProfile httpProfile = new HttpProfile(); + httpProfile.setReqMethod("POST"); + httpProfile.setConnTimeout(60); + /* 指定接入地域域名,默认就近地域接入域名为 sms.tencentcloudapi.com ,也支持指定地域域名访问,例如广州地域的域名为 sms.ap-guangzhou.tencentcloudapi.com */ + httpProfile.setEndpoint("sms.ap-guangzhou.tencentcloudapi.com"); + + ClientProfile clientProfile = new ClientProfile(); + clientProfile.setSignMethod("HmacSHA256"); + clientProfile.setHttpProfile(httpProfile); + SmsClient client = new SmsClient(cred, "ap-guangzhou",clientProfile); + SendSmsRequest req = new SendSmsRequest(); + + req.setSmsSdkAppId(sdkAppId); + + req.setSignName(signName); + + req.setTemplateId(templateId); + + //todo 调整短信模板 + String[] templateParamSet = {code,code,code}; + req.setTemplateParamSet(templateParamSet); + + String[] phoneNumberSet = {"+86"+phone}; + req.setPhoneNumberSet(phoneNumberSet); + + SendSmsResponse res = null; + try { + res = client.SendSms(req); + // 输出json格式的字符串回包 + System.out.println(SendSmsResponse.toJsonString(res)); + } catch (TencentCloudSDKException e) { + e.printStackTrace(); + } + + } + + +} diff --git a/src/main/java/com/qs/serve/modules/qms/controller/QmsFormSubmitController.java b/src/main/java/com/qs/serve/modules/qms/controller/QmsFormSubmitController.java index 503d7043..bae6042d 100644 --- a/src/main/java/com/qs/serve/modules/qms/controller/QmsFormSubmitController.java +++ b/src/main/java/com/qs/serve/modules/qms/controller/QmsFormSubmitController.java @@ -60,6 +60,21 @@ public class QmsFormSubmitController { return R.ok(qmsFormSubmit); } + /** + * 获取用户提交记录 + * @param userId + * @param groupId + * @return + */ + @GetMapping("/getOne") + @SysLog(module = SystemModule.QUESTION, title = "问卷提交记录", biz = BizType.QUERY) + public R getById(String userId,String groupId){ + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.eq(QmsFormSubmit::getGroupId,groupId); + lqw.eq(QmsFormSubmit::getUserId,userId); + QmsFormSubmit qmsFormSubmit = qmsFormSubmitService.getOne(lqw,false); + return R.ok(qmsFormSubmit); + } /** diff --git a/src/main/java/com/qs/serve/modules/qms/controller/QmsGroupController.java b/src/main/java/com/qs/serve/modules/qms/controller/QmsGroupController.java index e7c0a0f4..2a211efe 100644 --- a/src/main/java/com/qs/serve/modules/qms/controller/QmsGroupController.java +++ b/src/main/java/com/qs/serve/modules/qms/controller/QmsGroupController.java @@ -23,6 +23,10 @@ import com.qs.serve.modules.sys.entity.SysUser; import com.qs.serve.modules.sys.entity.dto.SysUserSimpleVo; import com.qs.serve.modules.sys.service.SysDeptService; import com.qs.serve.modules.sys.service.SysUserService; +import com.qs.serve.modules.wx.entity.WxUser; +import com.qs.serve.modules.wx.entity.dto.sms.WxSmsNewForm; +import com.qs.serve.modules.wx.service.WxPushService; +import com.qs.serve.modules.wx.service.WxUserService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.security.access.prepost.PreAuthorize; @@ -33,10 +37,7 @@ import com.qs.serve.modules.qms.service.QmsGroupService; import javax.validation.Valid; import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; /** @@ -55,6 +56,8 @@ public class QmsGroupController { private QmsGroupScopeService qmsGroupScopeService; private SysUserService sysUserService; private SysDeptService sysDeptService; + private WxUserService wxUserService; + private WxPushService wxPushService; /** @@ -87,17 +90,16 @@ public class QmsGroupController { for (Integer scopeType : scopeValuesMap.keySet()) { List scopeValues = scopeValuesMap.get(scopeType); List ids = scopeValues.stream().map(QmsGroupScope::getScopeValue).distinct().collect(Collectors.toList()); - if(scopeType.equals(1)||scopeType.equals(3)){ - if(scopeType.equals(1)){ - qmsGroup.setScopeType(scopeType); - } + if(scopeType.equals(0)||scopeType.equals(1)||scopeType.equals(2)){ + qmsGroup.setScopeType(scopeType); + } + if(scopeType.equals(1)||scopeType.equals(3)||scopeType.equals(4)){ List userList = sysUserService.listByIds(ids); List userSimpleVos = userList.stream().map(a->a.toSimpleVo(true)).collect(Collectors.toList()); qmsGroup.setUserList(userSimpleVos); }else if(scopeType.equals(2)){ List deptList = sysDeptService.listByIds(ids); - List simpleKeyValues = deptList.stream().map(a->new SimpleKeyValue(a.getName(),a.getId(),null)).collect(Collectors.toList()); - qmsGroup.setDeptList(simpleKeyValues); + qmsGroup.setDeptList(deptList); } } return R.ok(qmsGroup); @@ -144,7 +146,6 @@ public class QmsGroupController { qmsGroup.setPublishTime(LocalDateTime.now()); qmsGroupService.updateById(qmsGroup); this.qmsGroupScopeService.publish(groupId); - //todo 发送推送 return R.ok(); } @@ -166,11 +167,22 @@ public class QmsGroupController { lqw.eq(QmsGroupScope::getFinished,0); lqw.ne(QmsGroupScope::getScopeType,0); lqw.ne(QmsGroupScope::getScopeType,2); + if(hastenBo.getUserIds()!=null && hastenBo.getUserIds().length>0){ + lqw.in(QmsGroupScope::getScopeValue, Arrays.asList(hastenBo.getUserIds())); + } List groupScopes = qmsGroupScopeService.list(lqw); List userIds = groupScopes.stream() .map(QmsGroupScope::getScopeValue) .distinct().collect(Collectors.toList()); - //todo 根据userId加载微信用户进行推送 + List wxUserList = wxUserService.getBySysUserIds(userIds); + //发送推送 + for (WxUser wxUser : wxUserList) { + WxSmsNewForm wxSmsNewForm = new WxSmsNewForm(); + wxSmsNewForm.setTitle(qmsGroup.getName()); + wxSmsNewForm.setParam5(qmsGroup.getPublishTime().toString()); + wxSmsNewForm.setRemark(qmsGroup.getRemark()); + wxPushService.sendWxMsg(wxUser,"填写问卷通知",wxSmsNewForm,true,hastenBo.getGroupId()+""); + } return R.ok(); } @@ -235,9 +247,10 @@ public class QmsGroupController { @DeleteMapping("/deleteById/{id}") @SysLog(module = SystemModule.QUESTION, title = "发布组", biz = BizType.DELETE) @PreAuthorize("hasRole('qms:group:delete')") - public R deleteById(@PathVariable("id") String id){ - boolean result = qmsGroupService.removeById(id); - return R.isTrue(result); + public R deleteById(@PathVariable("id") Long id){ + qmsGroupService.removeById(id); + qmsGroupScopeService.removeByGroupId(id); + return R.ok(); } } diff --git a/src/main/java/com/qs/serve/modules/qms/controller/api/QmsDraftApiController.java b/src/main/java/com/qs/serve/modules/qms/controller/api/QmsDraftApiController.java index 11b9baa5..430b565c 100644 --- a/src/main/java/com/qs/serve/modules/qms/controller/api/QmsDraftApiController.java +++ b/src/main/java/com/qs/serve/modules/qms/controller/api/QmsDraftApiController.java @@ -37,6 +37,9 @@ public class QmsDraftApiController { @GetMapping("/{groupId}") public R getDraft(@PathVariable("groupId") Long formId){ QmsDraft qmsDraft = qmsDraftService.getUserFormDraft(formId); + if(qmsDraft==null){ + return R.ok(); + } return R.ok(CopierUtil.copy(qmsDraft,new QmsDraftVo())); } diff --git a/src/main/java/com/qs/serve/modules/qms/controller/api/QmsSubmitApiController.java b/src/main/java/com/qs/serve/modules/qms/controller/api/QmsSubmitApiController.java index 8e9f500d..42e81744 100644 --- a/src/main/java/com/qs/serve/modules/qms/controller/api/QmsSubmitApiController.java +++ b/src/main/java/com/qs/serve/modules/qms/controller/api/QmsSubmitApiController.java @@ -60,10 +60,14 @@ public class QmsSubmitApiController { */ @GetMapping("/myGroupList") public R todoPage(String finished){ - String userId = wxUserService.getCurrentWxUser().getSysUserId(); + WxUser wxUser = wxUserService.getCurrentWxUser(); + if(wxUser.getSysUserId()==null){ + return R.byEmptyList(); + } + String userId = wxUser.getSysUserId(); PageUtil.startPage(); LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); - lqw.in(QmsGroupScope::getScopeType,1,3); + lqw.in(QmsGroupScope::getScopeType,1,3,4); lqw.eq(QmsGroupScope::getScopeValue,userId); lqw.orderByDesc(QmsGroupScope::getCreateTime); if(StringUtils.hasText(finished)){ @@ -76,6 +80,9 @@ public class QmsSubmitApiController { List result = new ArrayList<>(); for (QmsGroupScope groupScope : groupScopes) { QmsGroup qmsGroup = qmsGroupService.getById(groupScope.getGroupId()); + if(qmsGroup==null){ + continue; + } qmsGroup.setFinished(groupScope.getFinished()); result.add(qmsGroup); } diff --git a/src/main/java/com/qs/serve/modules/qms/entity/QmsGroup.java b/src/main/java/com/qs/serve/modules/qms/entity/QmsGroup.java index 883dd8e2..ebde8432 100644 --- a/src/main/java/com/qs/serve/modules/qms/entity/QmsGroup.java +++ b/src/main/java/com/qs/serve/modules/qms/entity/QmsGroup.java @@ -9,6 +9,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; import com.qs.serve.common.framework.mybatis.handler.meta.SplitStringTypeHandler; import com.qs.serve.common.model.dto.SimpleKeyValue; +import com.qs.serve.modules.sys.entity.SysDept; import com.qs.serve.modules.sys.entity.dto.SysUserSimpleVo; import lombok.Data; import org.apache.ibatis.type.JdbcType; @@ -112,7 +113,7 @@ public class QmsGroup implements Serializable { @TableField(exist = false) - private List deptList; + private List deptList; @TableField(exist = false) private QmsForm formInfo; diff --git a/src/main/java/com/qs/serve/modules/qms/entity/QmsGroupScope.java b/src/main/java/com/qs/serve/modules/qms/entity/QmsGroupScope.java index f390e0dc..76373599 100644 --- a/src/main/java/com/qs/serve/modules/qms/entity/QmsGroupScope.java +++ b/src/main/java/com/qs/serve/modules/qms/entity/QmsGroupScope.java @@ -32,7 +32,7 @@ public class QmsGroupScope implements Serializable { /** */ private Long groupId; - /** 适用范围 0-所有人可见;1-人员可见;2-部门可见;3-部门人员 */ + /** 适用范围 0-所有人可见;1-人员可见;2-部门可见;3-部门的人员ID;4-所有的人员ID */ private Integer scopeType; private Integer finished; diff --git a/src/main/java/com/qs/serve/modules/qms/service/impl/QmsFormSubmitServiceImpl.java b/src/main/java/com/qs/serve/modules/qms/service/impl/QmsFormSubmitServiceImpl.java index ea6c7a57..93ca0cd5 100644 --- a/src/main/java/com/qs/serve/modules/qms/service/impl/QmsFormSubmitServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/qms/service/impl/QmsFormSubmitServiceImpl.java @@ -3,6 +3,7 @@ package com.qs.serve.modules.qms.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.qs.serve.common.framework.security.model.LoginUser; +import com.qs.serve.common.util.Assert; import com.qs.serve.common.util.AuthContextUtils; import com.qs.serve.common.util.CopierUtil; import com.qs.serve.modules.qms.entity.QmsForm; @@ -44,6 +45,9 @@ public class QmsFormSubmitServiceImpl extends ServiceImpl lqw = new LambdaQueryWrapper<>(); lqw.eq(QmsFormSubmit::getGroupId,param.getGroupId()); diff --git a/src/main/java/com/qs/serve/modules/qms/service/impl/QmsGroupScopeServiceImpl.java b/src/main/java/com/qs/serve/modules/qms/service/impl/QmsGroupScopeServiceImpl.java index aef1a45f..978df2c8 100644 --- a/src/main/java/com/qs/serve/modules/qms/service/impl/QmsGroupScopeServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/qms/service/impl/QmsGroupScopeServiceImpl.java @@ -4,9 +4,15 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.qs.serve.common.util.Assert; import com.qs.serve.common.util.CollectionUtil; +import com.qs.serve.modules.qms.entity.QmsGroup; import com.qs.serve.modules.qms.entity.bo.QmsGroupBo; +import com.qs.serve.modules.qms.service.QmsGroupService; import com.qs.serve.modules.sys.entity.SysUser; import com.qs.serve.modules.sys.mapper.SysUserMapper; +import com.qs.serve.modules.wx.entity.WxUser; +import com.qs.serve.modules.wx.entity.dto.sms.WxSmsNewForm; +import com.qs.serve.modules.wx.service.WxPushService; +import com.qs.serve.modules.wx.service.WxUserService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -29,6 +35,9 @@ import java.util.List; public class QmsGroupScopeServiceImpl extends ServiceImpl implements QmsGroupScopeService { SysUserMapper sysUserMapper; + QmsGroupService qmsGroupService; + WxUserService wxUserService; + WxPushService wxPushService; @Override public List listByGroupId(Long groupId) { @@ -60,27 +69,37 @@ public class QmsGroupScopeServiceImpl extends ServiceImpl list = new ArrayList<>(); - for (String scopeValue : groupBo.getScopeValue()) { - boolean isPersonType = groupBo.getScopeType().equals(1); + if(groupBo.getScopeType().equals(0)){ QmsGroupScope groupScope = new QmsGroupScope(); groupScope.setGroupId(groupId); groupScope.setScopeType(groupBo.getScopeType()); - //人员类型,临时修改为-1 表示未发布 - groupScope.setFinished(isPersonType?-1:0); - groupScope.setScopeValue(scopeValue); + groupScope.setFinished(0); + groupScope.setScopeValue("0"); list.add(groupScope); + }else { + for (String scopeValue : groupBo.getScopeValue()) { + boolean isPersonType = groupBo.getScopeType().equals(1); + QmsGroupScope groupScope = new QmsGroupScope(); + groupScope.setGroupId(groupId); + groupScope.setScopeType(groupBo.getScopeType()); + //人员类型,临时修改为-1 表示未发布 + groupScope.setFinished(isPersonType?-1:0); + groupScope.setScopeValue(scopeValue); + list.add(groupScope); + } } this.saveBatch(list); } @Override public void publish(Long groupId) { + QmsGroup qmsGroup = qmsGroupService.getById(groupId); List qmsGroupScopeList = this.listByGroupId(groupId); List list = new ArrayList<>(); for (QmsGroupScope groupScope : qmsGroupScopeList) { boolean isDeptType = groupScope.getScopeType().equals(2); boolean isPersonType = groupScope.getScopeType().equals(1); - boolean isAllType = groupScope.getScopeType().equals(1); + boolean isAllType = groupScope.getScopeType().equals(0); if(isDeptType || isAllType){ LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); if(isDeptType){ @@ -96,10 +115,30 @@ public class QmsGroupScopeServiceImpl extends ServiceImpl wxUserList = wxUserService.getBySysUserId(sysUser.getId()); + //发送推送 + for (WxUser wxUser : wxUserList) { + WxSmsNewForm wxSmsNewForm = new WxSmsNewForm(); + wxSmsNewForm.setTitle(qmsGroup.getName()); + wxSmsNewForm.setParam5(qmsGroup.getPublishTime().toString()); + wxSmsNewForm.setRemark(qmsGroup.getRemark()); + wxPushService.sendWxMsg(wxUser,"填写问卷通知",wxSmsNewForm,true,groupId+""); + } } }else if (isPersonType){ + //修改状态 groupScope.setFinished(0); this.updateById(groupScope); + List wxUserList = wxUserService.getBySysUserId(groupScope.getScopeValue()); + //发送推送 + for (WxUser wxUser : wxUserList) { + WxSmsNewForm wxSmsNewForm = new WxSmsNewForm(); + wxSmsNewForm.setTitle(qmsGroup.getName()); + wxSmsNewForm.setParam5(qmsGroup.getPublishTime().toString()); + wxSmsNewForm.setRemark(qmsGroup.getRemark()); + wxPushService.sendWxMsg(wxUser,"填写问卷通知",wxSmsNewForm,true,groupId+""); + } } } this.saveBatch(list); diff --git a/src/main/java/com/qs/serve/modules/wx/api/WxSvcUserApi.java b/src/main/java/com/qs/serve/modules/wx/api/WxSvcUserApi.java index 61622f22..7bc7fad0 100644 --- a/src/main/java/com/qs/serve/modules/wx/api/WxSvcUserApi.java +++ b/src/main/java/com/qs/serve/modules/wx/api/WxSvcUserApi.java @@ -10,6 +10,7 @@ import com.qs.serve.common.model.enums.BizType; import com.qs.serve.common.model.enums.InterType; import com.qs.serve.common.util.AuthContextUtils; import com.qs.serve.common.util.IdUtil; +import com.qs.serve.modules.base.TencentYunSmsService; import com.qs.serve.modules.sys.entity.SysUser; import com.qs.serve.modules.sys.service.SysUserService; import com.qs.serve.modules.wx.entity.WxUser; @@ -36,6 +37,7 @@ public class WxSvcUserApi { private WxUserService wxUserService; private RedisService redisService; private SysUserService sysUserService; + private TencentYunSmsService tencentYunSmsService; /** * 用户信息 */ @@ -64,9 +66,9 @@ public class WxSvcUserApi { if(code==null){ code = IdUtil.genCode(6); } + //tencentYunSmsService.send(phone,code); log.debug("手机'{}'验证码:{}",phone,code); redisService.set(key,code,10, TimeUnit.MINUTES); - //TODO send msg return R.ok(); } diff --git a/src/main/java/com/qs/serve/modules/wx/common/conf/WxMpConfig.java b/src/main/java/com/qs/serve/modules/wx/common/conf/WxMpConfig.java index 59b28946..a83cf14e 100644 --- a/src/main/java/com/qs/serve/modules/wx/common/conf/WxMpConfig.java +++ b/src/main/java/com/qs/serve/modules/wx/common/conf/WxMpConfig.java @@ -9,6 +9,7 @@ import com.qs.serve.modules.wx.entity.WxApp; import com.qs.serve.modules.wx.service.WxAppService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; +import me.chanjar.weixin.common.redis.RedisTemplateWxRedisOps; import me.chanjar.weixin.mp.api.WxMpMessageRouter; import me.chanjar.weixin.mp.api.WxMpService; import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl; @@ -33,7 +34,7 @@ import static me.chanjar.weixin.mp.constant.WxMpEventConstants.POI_CHECK_NOTIFY; */ @Slf4j @AllArgsConstructor -//@Configuration(proxyBeanMethods = false) +@Configuration(proxyBeanMethods = false) public class WxMpConfig { private final LogHandler logHandler; @@ -71,6 +72,7 @@ public class WxMpConfig { // redisProperties.getPassword(), // redisProperties.getDatabase()); // configStorage = new WxMpRedisConfigImpl(new JedisWxRedisOps(jedisPool), app.getId()); + log.warn("进行公众号配置:{}",app.getId()); configStorage = new WxMpDefaultConfigImpl(); configStorage.setAppId(app.getId()); configStorage.setSecret(app.getSecret()); diff --git a/src/main/java/com/qs/serve/modules/wx/controller/WxUserController.java b/src/main/java/com/qs/serve/modules/wx/controller/WxUserController.java index c59b5c4f..55636c03 100644 --- a/src/main/java/com/qs/serve/modules/wx/controller/WxUserController.java +++ b/src/main/java/com/qs/serve/modules/wx/controller/WxUserController.java @@ -6,6 +6,7 @@ import com.qs.serve.common.model.dto.R; import com.qs.serve.common.util.PageUtil; import com.qs.serve.modules.wx.entity.WxUser; import com.qs.serve.modules.wx.service.WxUserService; +import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; @@ -19,9 +20,9 @@ import java.util.List; * @since 2022-03-07 */ @Slf4j -//@AllArgsConstructor -//@RestController -//@RequestMapping("wx/user") +@AllArgsConstructor +@RestController +@RequestMapping("wx/user") public class WxUserController { private WxUserService wxUserService; @@ -32,7 +33,6 @@ public class WxUserController { * @return */ @GetMapping("/page") - @PreAuthorize("hasRole('wx:user:query')") public R> getList(WxUser param){ PageUtil.startPage(); List list = wxUserService.list(new QueryWrapper<>(param)); @@ -45,7 +45,6 @@ public class WxUserController { * @return */ @GetMapping("/getById/{id}") - @PreAuthorize("hasRole('wx:user:query')") public R getById(@PathVariable("id") String id){ WxUser wxUser = wxUserService.getById(id); return R.ok(wxUser); @@ -56,36 +55,33 @@ public class WxUserController { * @param param * @return */ - @PostMapping("/updateById") - @PreAuthorize("hasRole('wx:user:update')") - public R updateById(@RequestBody @Valid WxUser param){ - boolean result = wxUserService.updateById(param); - return R.isTrue(result); - } +// @PostMapping("/updateById") +// public R updateById(@RequestBody @Valid WxUser param){ +// boolean result = wxUserService.updateById(param); +// return R.isTrue(result); +// } /** * 新增微信用户 * @param param * @return */ - @PostMapping("/save") - @PreAuthorize("hasRole('wx:user:insert')") - public R save(@RequestBody @Valid WxUser param){ - boolean result = wxUserService.save(param); - return R.isTrue(result); - } +// @PostMapping("/save") +// public R save(@RequestBody @Valid WxUser param){ +// boolean result = wxUserService.save(param); +// return R.isTrue(result); +// } /** * 删除微信用户 * @param id * @return */ - @DeleteMapping("/deleteById/{id}") - @PreAuthorize("hasRole('wx:user:delete')") - public R deleteById(@PathVariable("id") String id){ - boolean result = wxUserService.removeById(id); - return R.isTrue(result); - } +// @DeleteMapping("/deleteById/{id}") +// public R deleteById(@PathVariable("id") String id){ +// boolean result = wxUserService.removeById(id); +// return R.isTrue(result); +// } } diff --git a/src/main/java/com/qs/serve/modules/wx/entity/dto/SmsBaseDto.java b/src/main/java/com/qs/serve/modules/wx/entity/dto/SmsBaseDto.java index 7ffd7ec2..037cb209 100644 --- a/src/main/java/com/qs/serve/modules/wx/entity/dto/SmsBaseDto.java +++ b/src/main/java/com/qs/serve/modules/wx/entity/dto/SmsBaseDto.java @@ -5,4 +5,7 @@ package com.qs.serve.modules.wx.entity.dto; * @since 2022/7/25 */ public abstract class SmsBaseDto { + + + } diff --git a/src/main/java/com/qs/serve/modules/wx/entity/dto/sms/WxSmsNewForm.java b/src/main/java/com/qs/serve/modules/wx/entity/dto/sms/WxSmsNewForm.java new file mode 100644 index 00000000..d6900287 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/wx/entity/dto/sms/WxSmsNewForm.java @@ -0,0 +1,28 @@ +package com.qs.serve.modules.wx.entity.dto.sms; + +import com.qs.serve.modules.wx.common.model.WxSmsProp; +import com.qs.serve.modules.wx.entity.dto.SmsBaseDto; +import lombok.Data; + +/** + * @author YenHex + * @since 2022/9/21 + */ +@Data +public class WxSmsNewForm extends SmsBaseDto { + + @WxSmsProp(keyword = "first") + private String title; + @WxSmsProp(keyword = "keyword1") + private String param1; + @WxSmsProp(keyword = "keyword2") + private String param2; + @WxSmsProp(keyword = "keyword3") + private String param3; + @WxSmsProp(keyword = "keyword4") + private String param4; + @WxSmsProp(keyword = "keyword5") + private String param5; + @WxSmsProp(keyword = "remark") + private String remark; +} diff --git a/src/main/java/com/qs/serve/modules/wx/service/WxPushService.java b/src/main/java/com/qs/serve/modules/wx/service/WxPushService.java index 8b1ad2b2..18d5b630 100644 --- a/src/main/java/com/qs/serve/modules/wx/service/WxPushService.java +++ b/src/main/java/com/qs/serve/modules/wx/service/WxPushService.java @@ -16,11 +16,11 @@ public interface WxPushService { * @param message * @return 是否推送成功 */ - boolean sendWxMsg(String appId,WxMpTemplateMessage message); + void sendWxMsg(String appId,WxMpTemplateMessage message); - boolean sendWxMsg(WxUser wxUser, String title, SmsBaseDto body); + void sendWxMsg(WxUser wxUser, String title, SmsBaseDto body); - boolean sendWxMsg(WxUser wxUser,String title,SmsBaseDto body,Boolean jumpUrl); + void sendWxMsg(WxUser wxUser,String title,SmsBaseDto body,Boolean jumpUrl); /** * 通用方法 @@ -31,6 +31,6 @@ public interface WxPushService { * @param key * @return */ - boolean sendWxMsg(WxUser wxUser,String title,SmsBaseDto body,Boolean jumpUrl,String key); + void sendWxMsg(WxUser wxUser,String title,SmsBaseDto body,Boolean jumpUrl,String key); } diff --git a/src/main/java/com/qs/serve/modules/wx/service/WxUserService.java b/src/main/java/com/qs/serve/modules/wx/service/WxUserService.java index aa99d979..97d3135a 100644 --- a/src/main/java/com/qs/serve/modules/wx/service/WxUserService.java +++ b/src/main/java/com/qs/serve/modules/wx/service/WxUserService.java @@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.qs.serve.modules.wx.entity.WxUser; import com.qs.serve.modules.wx.entity.dto.WxLoginUser; +import java.util.List; + /** * 微信用户 服务接口 * @author YenHex @@ -18,6 +20,9 @@ public interface WxUserService extends IService { WxUser getCurrentWxUser(); + List getBySysUserId(String userId); + List getBySysUserIds(List userIds); + /** * 用户登录 * @param wxLoginUser diff --git a/src/main/java/com/qs/serve/modules/wx/service/impl/WxPushServiceImpl.java b/src/main/java/com/qs/serve/modules/wx/service/impl/WxPushServiceImpl.java index d4288f94..507e6594 100644 --- a/src/main/java/com/qs/serve/modules/wx/service/impl/WxPushServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/wx/service/impl/WxPushServiceImpl.java @@ -1,5 +1,6 @@ package com.qs.serve.modules.wx.service.impl; +import com.qs.serve.common.util.AuthContextUtils; import com.qs.serve.common.util.JsonUtil; import com.qs.serve.common.util.SmsReflectUtil; import com.qs.serve.modules.wx.entity.WxTemplateMsg; @@ -12,6 +13,7 @@ import lombok.extern.slf4j.Slf4j; import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.mp.api.WxMpService; import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage; +import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; /** @@ -20,7 +22,7 @@ import org.springframework.stereotype.Service; * @since 2022/3/16 */ @Slf4j -//@Service +@Service @AllArgsConstructor public class WxPushServiceImpl implements WxPushService { @@ -28,8 +30,9 @@ public class WxPushServiceImpl implements WxPushService { private final WxTemplateMsgService wxTemplateMsgService; + @Async @Override - public boolean sendWxMsg(String appId,WxMpTemplateMessage message) { + public void sendWxMsg(String appId,WxMpTemplateMessage message) { String msgId = null; try { // 发送模板消息 @@ -38,21 +41,22 @@ public class WxPushServiceImpl implements WxPushService { e.printStackTrace(); } log.warn("推送微信模板信息:{}\n{}", msgId != null ? "成功" : "失败", JsonUtil.objectToJson(message)); - return msgId != null; } @Override - public boolean sendWxMsg(WxUser wxUser, String title, SmsBaseDto body) { - return sendWxMsg(wxUser, title, body,false); + public void sendWxMsg(WxUser wxUser, String title, SmsBaseDto body) { + sendWxMsg(wxUser, title, body,false); } @Override - public boolean sendWxMsg(WxUser wxUser, String title, SmsBaseDto body, Boolean jumpUrl) { - return sendWxMsg(wxUser, title, body, jumpUrl,null); + public void sendWxMsg(WxUser wxUser, String title, SmsBaseDto body, Boolean jumpUrl) { + sendWxMsg(wxUser, title, body, jumpUrl,null); } + @Async @Override - public boolean sendWxMsg(WxUser wxUser, String title, SmsBaseDto body, Boolean jumpUrl, String key) { + public void sendWxMsg(WxUser wxUser, String title, SmsBaseDto body, Boolean jumpUrl, String key) { + AuthContextUtils.setTenant("001"); try { WxTemplateMsg wxTemplateMsg = wxTemplateMsgService.getByTitle(wxUser.getAppId(),title); if(wxTemplateMsg!=null){ @@ -70,6 +74,5 @@ public class WxPushServiceImpl implements WxPushService { } catch (Exception e) { log.warn(e.getMessage()); } - return false; } } diff --git a/src/main/java/com/qs/serve/modules/wx/service/impl/WxUserServiceImpl.java b/src/main/java/com/qs/serve/modules/wx/service/impl/WxUserServiceImpl.java index 993c3f22..91aa8383 100644 --- a/src/main/java/com/qs/serve/modules/wx/service/impl/WxUserServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/wx/service/impl/WxUserServiceImpl.java @@ -28,6 +28,8 @@ import me.chanjar.weixin.mp.bean.result.WxMpUser; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.List; + /** * 微信用户 服务实现类 * @author YenHex @@ -51,21 +53,35 @@ public class WxUserServiceImpl extends ServiceImpl impleme if(wxUser==null){ Assert.throwEx(HttpCode.LOGIN_ERR); } -// String appId = AuthContextUtils.getAppId(); -// try { -// WxMpService wxMpService = wxMpConfig.wxMpService().switchoverTo(appId); -// WxMpUser wxMpUser = wxMpService.getUserService().userInfo(wxUser.getOpenId(), GySysConst.LANG_ZH_CN); -// wxUser.setSubscribe(wxMpUser.getSubscribe()?1:0); -// wxUser.setSubscribeScene(wxMpUser.getSubscribeScene()); -// wxUser.setTagidList(JsonUtil.objectToJson(wxMpUser.getTagIds())); -// } catch (WxErrorException e) { -// e.printStackTrace(); -// } + String appId = AuthContextUtils.getAppId(); + try { + WxMpService wxMpService = wxMpConfig.wxMpService().switchoverTo(appId); + WxMpUser wxMpUser = wxMpService.getUserService().userInfo(wxUser.getOpenId(), GySysConst.LANG_ZH_CN); + wxUser.setSubscribe(wxMpUser.getSubscribe()?1:0); + wxUser.setSubscribeScene(wxMpUser.getSubscribeScene()); + wxUser.setTagidList(JsonUtil.objectToJson(wxMpUser.getTagIds())); + } catch (WxErrorException e) { + e.printStackTrace(); + } return wxUser; } return null; } + @Override + public List getBySysUserId(String userId) { + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.eq(WxUser::getSysUserId,userId); + return this.list(lqw); + } + + @Override + public List getBySysUserIds(List userIds) { + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.in(WxUser::getSysUserId,userIds); + return this.list(lqw); + } + @Override public WxUser login(WxLoginUser wxLoginUser){ String code = wxLoginUser.getCode();