From d1fbab35acfcf7d5cb1e3c460274625e4b0cb5e3 Mon Sep 17 00:00:00 2001 From: limqhz <540344226@qq.com> Date: Tue, 25 Jul 2023 22:59:42 +0800 Subject: [PATCH] =?UTF-8?q?=E9=85=8D=E7=BD=AE=E5=9C=BA=E9=A6=86=E5=92=8C?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E5=91=98=E6=8C=82=E9=92=A9=E5=8F=91=E9=80=81?= =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E6=B6=88=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/sv/api/controller/SmsController.java | 21 ++- .../test/java/com/sv/wx/SendMessageTest.java | 4 +- .../java/com/ydd/oms/entity/sys/WxConfig.java | 90 +++++++++++++ .../java/com/sv/mapper/WxConfigMapper.java | 22 +++ .../api/MemberLessonTicketService.java | 2 +- .../service/message/NotifyAdminMsgThread.java | 28 ++-- .../sv/service/message/WeiXinSendUtils.java | 57 +++++--- .../mybatis/mapper/sv/VenueLessonMapper.xml | 2 +- .../mybatis/mapper/sv/WxConfigMapper.xml | 126 ++++++++++++++++++ .../main/resources/tools/generatorConfig.xml | 2 +- 10 files changed, 323 insertions(+), 31 deletions(-) create mode 100644 entity/src/main/java/com/ydd/oms/entity/sys/WxConfig.java create mode 100644 service/src/main/java/com/sv/mapper/WxConfigMapper.java create mode 100644 service/src/main/resources/mybatis/mapper/sv/WxConfigMapper.xml diff --git a/api/src/main/java/com/sv/api/controller/SmsController.java b/api/src/main/java/com/sv/api/controller/SmsController.java index d5e6a2d..2f94fe4 100644 --- a/api/src/main/java/com/sv/api/controller/SmsController.java +++ b/api/src/main/java/com/sv/api/controller/SmsController.java @@ -4,6 +4,7 @@ import com.enums.VenueTypeEnum; import com.sv.entity.Constants; import com.sv.entity.Venue; import com.sv.entity.VenueLesson; +import com.sv.mapper.WxConfigMapper; import com.sv.service.api.VenueLessonService; import com.sv.service.api.VenueService; import com.sv.service.api.util.DateUtilCard; @@ -12,12 +13,14 @@ import com.sv.service.message.SendMsg; import com.sv.service.message.WeiXinSendUtils; import com.ydd.framework.core.common.dto.ResponseDTO; import com.ydd.framework.core.controller.BaseApiController; +import com.ydd.oms.entity.sys.WxConfig; import org.apache.ibatis.annotations.Param; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; @@ -65,6 +68,8 @@ public class SmsController extends BaseApiController { VenueLessonService venueLessonService; @Resource VenueService venueService; + @Resource + WeiXinSendUtils weiXinSendUtils; @RequestMapping(value = "/test/send/wx/message",method = RequestMethod.GET) public String sendTestMessage() { VenueLesson venueLesson = venueLessonService.findById(30858); @@ -82,10 +87,24 @@ public class SmsController extends BaseApiController { if (!StringUtils.isEmpty(openId)) { String[] split = openId.split(","); for (String s : split) { - WeiXinSendUtils.sendCard(sendMsg,s); + weiXinSendUtils.sendCard(sendMsg,s); } } return "OK"; } + @Resource + WxConfigMapper wxConfigMapper; + @RequestMapping(value = "/test/add/wx/openid",method = RequestMethod.GET) + public String addWxConfig(@RequestParam("open") String open,@RequestParam("id") Integer id) { + WxConfig wxConfig = new WxConfig(); + wxConfig.setWxOpenId(open); + wxConfig.setVenueId(id); + wxConfig.setCreatedId(999); + wxConfig.setModifiedId(999); + wxConfig.setVenueId(id); + wxConfigMapper.insert(wxConfig); + return "OK"; + } + } diff --git a/api/src/test/java/com/sv/wx/SendMessageTest.java b/api/src/test/java/com/sv/wx/SendMessageTest.java index 2d06757..0300489 100644 --- a/api/src/test/java/com/sv/wx/SendMessageTest.java +++ b/api/src/test/java/com/sv/wx/SendMessageTest.java @@ -26,6 +26,8 @@ public class SendMessageTest { VenueLessonService venueLessonService; @Resource VenueService venueService; + @Resource + WeiXinSendUtils weiXinSendUtils; @Test public void testTask(){ @@ -50,7 +52,7 @@ public class SendMessageTest { if (!StringUtils.isEmpty(openId)) { String[] split = openId.split(","); for (String s : split) { - WeiXinSendUtils.sendCard(sendMsg,s); + weiXinSendUtils.sendCard(sendMsg,s); } } } diff --git a/entity/src/main/java/com/ydd/oms/entity/sys/WxConfig.java b/entity/src/main/java/com/ydd/oms/entity/sys/WxConfig.java new file mode 100644 index 0000000..4d36488 --- /dev/null +++ b/entity/src/main/java/com/ydd/oms/entity/sys/WxConfig.java @@ -0,0 +1,90 @@ +package com.ydd.oms.entity.sys; + +import java.util.Date; + +public class WxConfig { + private Integer id; + + private String wxOpenId; + + private Integer venueId; + + private Integer createdId; + + private Integer modifiedId; + + private Date createdTime; + + private Date modifiedTime; + + public WxConfig(Integer id, String wxOpenId, Integer venueId, Integer createdId, Integer modifiedId, Date createdTime, Date modifiedTime, Byte deleted) { + this.id = id; + this.wxOpenId = wxOpenId; + this.venueId = venueId; + this.createdId = createdId; + this.modifiedId = modifiedId; + this.createdTime = createdTime; + this.modifiedTime = modifiedTime; + } + + public WxConfig() { + super(); + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getWxOpenId() { + return wxOpenId; + } + + public void setWxOpenId(String wxOpenId) { + this.wxOpenId = wxOpenId == null ? null : wxOpenId.trim(); + } + + public Integer getVenueId() { + return venueId; + } + + public void setVenueId(Integer venueId) { + this.venueId = venueId; + } + + public Integer getCreatedId() { + return createdId; + } + + public void setCreatedId(Integer createdId) { + this.createdId = createdId; + } + + public Integer getModifiedId() { + return modifiedId; + } + + public void setModifiedId(Integer modifiedId) { + this.modifiedId = modifiedId; + } + + public Date getCreatedTime() { + return createdTime; + } + + public void setCreatedTime(Date createdTime) { + this.createdTime = createdTime; + } + + public Date getModifiedTime() { + return modifiedTime; + } + + public void setModifiedTime(Date modifiedTime) { + this.modifiedTime = modifiedTime; + } + +} diff --git a/service/src/main/java/com/sv/mapper/WxConfigMapper.java b/service/src/main/java/com/sv/mapper/WxConfigMapper.java new file mode 100644 index 0000000..6f8ca48 --- /dev/null +++ b/service/src/main/java/com/sv/mapper/WxConfigMapper.java @@ -0,0 +1,22 @@ +package com.sv.mapper; + +import com.ydd.oms.entity.sys.WxConfig; + +import java.util.List; + +public interface WxConfigMapper { + int deleteByPrimaryKey(Integer id); + + int insert(WxConfig record); + + int insertSelective(WxConfig record); + + WxConfig selectByPrimaryKey(Integer id); + + int updateByPrimaryKeySelective(WxConfig record); + + int updateByPrimaryKey(WxConfig record); + + List list(); + +} diff --git a/service/src/main/java/com/sv/service/api/MemberLessonTicketService.java b/service/src/main/java/com/sv/service/api/MemberLessonTicketService.java index 382935a..20aec13 100644 --- a/service/src/main/java/com/sv/service/api/MemberLessonTicketService.java +++ b/service/src/main/java/com/sv/service/api/MemberLessonTicketService.java @@ -403,7 +403,7 @@ public class MemberLessonTicketService extends BaseServiceImpl { String lessonTime = DateUtilCard.getStrFromDate(venueLesson.getDate()) + " " + venueLesson.getStartTime().toString(); String typeName = VenueTypeEnum.getByValue(venue.getType()).name; String url = Constants.VENUE_VIEW_URL + venueId; - AsyncTaskUtil.INSTANCE.submit(new NotifyAdminMsgThread(venue.getName(),venueLesson.getName(),lessonTime,typeName,url)); + AsyncTaskUtil.INSTANCE.submit(new NotifyAdminMsgThread(venueId,venue.getName(),venueLesson.getName(),lessonTime,typeName,url)); } } diff --git a/service/src/main/java/com/sv/service/message/NotifyAdminMsgThread.java b/service/src/main/java/com/sv/service/message/NotifyAdminMsgThread.java index c47e4d9..b607342 100644 --- a/service/src/main/java/com/sv/service/message/NotifyAdminMsgThread.java +++ b/service/src/main/java/com/sv/service/message/NotifyAdminMsgThread.java @@ -2,21 +2,25 @@ package com.sv.service.message; import com.dw.ccm.wechat.base.utils.JsonUtils; import com.sv.mapper.ConfigMapper; +import com.sv.mapper.WxConfigMapper; import com.sv.service.utils.SpringUtils; import com.ydd.oms.entity.sys.Config; +import com.ydd.oms.entity.sys.WxConfig; import org.springframework.util.StringUtils; import java.util.List; public class NotifyAdminMsgThread extends Thread{ + private Integer venueId = 0; private String venueName = ""; private String lessonName = ""; private String lessonTime = ""; private String venueType = ""; private String url = ""; - public NotifyAdminMsgThread(String venueName, String lessonName, String lessonTime, String venueType, String url) { + public NotifyAdminMsgThread(Integer venueId,String venueName, String lessonName, String lessonTime, String venueType, String url) { + this.venueId = venueId; this.venueName = venueName; this.lessonName = lessonName; this.lessonTime = lessonTime; @@ -24,6 +28,14 @@ public class NotifyAdminMsgThread extends Thread{ this.url = url; } + public Integer getVenueId() { + return venueId; + } + + public void setVenueId(Integer venueId) { + this.venueId = venueId; + } + public String getUrl() { return url; } @@ -72,13 +84,9 @@ public class NotifyAdminMsgThread extends Thread{ if (all == null || all.size() <= 0 ){ return; } - String openId = null; String webHook = null; String dingSecret = null; for (Config config : all) { - if ("WX_ADMIN".equals(config.getKey())) { - openId = config.getValue(); - } if ("DING_WEBHOOK".equals(config.getKey())) { webHook = config.getValue(); } @@ -87,10 +95,12 @@ public class NotifyAdminMsgThread extends Thread{ } } SendMsg sendMsg = new SendMsg(venueName,lessonName,lessonTime,venueType,url); - if (!StringUtils.isEmpty(openId)) { - String[] split = openId.split(","); - for (String s : split) { - WeiXinSendUtils.sendCard(sendMsg,s); + WxConfigMapper wxConfigMapper = SpringUtils.getBean(WxConfigMapper.class); + List configs = wxConfigMapper.list(); + for (WxConfig config : configs) { + if (venueId == config.getVenueId()) { + WeiXinSendUtils xinSendUtils = SpringUtils.getBean(WeiXinSendUtils.class); + xinSendUtils.sendCard(sendMsg,config.getWxOpenId()); } } if (!StringUtils.isEmpty(webHook) && !StringUtils.isEmpty(dingSecret)) { diff --git a/service/src/main/java/com/sv/service/message/WeiXinSendUtils.java b/service/src/main/java/com/sv/service/message/WeiXinSendUtils.java index c092ffe..363958e 100644 --- a/service/src/main/java/com/sv/service/message/WeiXinSendUtils.java +++ b/service/src/main/java/com/sv/service/message/WeiXinSendUtils.java @@ -3,30 +3,53 @@ package com.sv.service.message; import com.dw.ccm.wechat.base.WeChat; import com.dw.ccm.wechat.base.WeChatHelper; import com.dw.ccm.wechat.base.message.response.AccessTokenResponse; +import com.dw.ccm.wechat.base.message.response.template.TemplateResponse; import com.dw.ccm.wechat.base.message.template.Attribute; import com.dw.ccm.wechat.base.message.template.TemplateMessage; -import org.springframework.util.StringUtils; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; import java.util.HashMap; -public class WeiXinSendUtils { +@Component +public class WeiXinSendUtils implements InitializingBean { - public static void sendCard(SendMsg sendMsg,String openId){ - AccessTokenResponse accessToken = WeChatHelper.getAccessToken("wx51d82eba3f5f4858", "d28320bcb885cc208b6fde2253d8663e"); - String token = accessToken.getAccessToken(); - if (!StringUtils.isEmpty(token)){ - WeChat weChat = WeChatHelper.getWeChat(token); - TemplateMessage templateMessage = new TemplateMessage(); - templateMessage.setTemplateId("vPRolOW7D3jnXhT4uqN4FOcIIuHcsHuresbZjlPBg9Y"); - templateMessage.setToUser(openId); - templateMessage.setUrl(sendMsg.getViewUrl()); - HashMap attr = new HashMap<>(); - attr.put("thing2",new Attribute(sendMsg.getVenueName(),"")); - attr.put("thing3",new Attribute(sendMsg.getLessonName(),"")); - attr.put("time5",new Attribute(sendMsg.getLessonTime(),"")); - attr.put("phrase7",new Attribute(sendMsg.getVenueType(),"")); - templateMessage.setAttributes(attr); + private String token; + + public void sendCard(SendMsg sendMsg,String openId){ + WeChat weChat = WeChatHelper.getWeChat(token); + TemplateMessage templateMessage = new TemplateMessage(); + templateMessage.setTemplateId("vPRolOW7D3jnXhT4uqN4FOcIIuHcsHuresbZjlPBg9Y"); + templateMessage.setToUser(openId); + templateMessage.setUrl(sendMsg.getViewUrl()); + HashMap attr = new HashMap<>(); + attr.put("thing2",new Attribute(sendMsg.getVenueName(),"")); + attr.put("thing3",new Attribute(sendMsg.getLessonName(),"")); + attr.put("time5",new Attribute(sendMsg.getLessonTime(),"")); + attr.put("phrase7",new Attribute(sendMsg.getVenueType(),"")); + templateMessage.setAttributes(attr); + TemplateResponse templateResponse = weChat.sendTemplate(templateMessage); + if (templateResponse.getErrCode() == 42001) { + //access_token expired + getToken(); weChat.sendTemplate(templateMessage); } } + + @Override + public void afterPropertiesSet() throws Exception { + getToken(); + } + + private void getToken() { + AccessTokenResponse accessToken = WeChatHelper.getAccessToken("wx51d82eba3f5f4858", "d28320bcb885cc208b6fde2253d8663e"); + token = accessToken.getAccessToken(); + } + + @Scheduled(fixedDelay=60*60*1000) + public void refreshToken() { + getToken(); + } + } diff --git a/service/src/main/resources/mybatis/mapper/sv/VenueLessonMapper.xml b/service/src/main/resources/mybatis/mapper/sv/VenueLessonMapper.xml index 3502005..4293412 100644 --- a/service/src/main/resources/mybatis/mapper/sv/VenueLessonMapper.xml +++ b/service/src/main/resources/mybatis/mapper/sv/VenueLessonMapper.xml @@ -621,7 +621,7 @@ diff --git a/service/src/main/resources/mybatis/mapper/sv/WxConfigMapper.xml b/service/src/main/resources/mybatis/mapper/sv/WxConfigMapper.xml new file mode 100644 index 0000000..38b1722 --- /dev/null +++ b/service/src/main/resources/mybatis/mapper/sv/WxConfigMapper.xml @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + id, wx_open_id, venue_id, created_id, modified_id, created_time, modified_time + + + + delete from sys_wx_config + where id = #{id,jdbcType=INTEGER} + + + insert into sys_wx_config (id, wx_open_id, venue_id, + created_id, modified_id, created_time, + modified_time) + values (#{id,jdbcType=INTEGER}, #{wxOpenId,jdbcType=VARCHAR}, #{venueId,jdbcType=INTEGER}, + #{createdId,jdbcType=INTEGER}, #{modifiedId,jdbcType=INTEGER}, #{createdTime,jdbcType=TIMESTAMP}, + #{modifiedTime,jdbcType=TIMESTAMP}) + + + insert into sys_wx_config + + + id, + + + wx_open_id, + + + venue_id, + + + created_id, + + + modified_id, + + + created_time, + + + modified_time, + + + + + #{id,jdbcType=INTEGER}, + + + #{wxOpenId,jdbcType=VARCHAR}, + + + #{venueId,jdbcType=INTEGER}, + + + #{createdId,jdbcType=INTEGER}, + + + #{modifiedId,jdbcType=INTEGER}, + + + #{createdTime,jdbcType=TIMESTAMP}, + + + #{modifiedTime,jdbcType=TIMESTAMP}, + + + + + update sys_wx_config + + + wx_open_id = #{wxOpenId,jdbcType=VARCHAR}, + + + venue_id = #{venueId,jdbcType=INTEGER}, + + + created_id = #{createdId,jdbcType=INTEGER}, + + + modified_id = #{modifiedId,jdbcType=INTEGER}, + + + created_time = #{createdTime,jdbcType=TIMESTAMP}, + + + modified_time = #{modifiedTime,jdbcType=TIMESTAMP}, + + + where id = #{id,jdbcType=INTEGER} + + + update sys_wx_config + set wx_open_id = #{wxOpenId,jdbcType=VARCHAR}, + venue_id = #{venueId,jdbcType=INTEGER}, + created_id = #{createdId,jdbcType=INTEGER}, + modified_id = #{modifiedId,jdbcType=INTEGER}, + created_time = #{createdTime,jdbcType=TIMESTAMP}, + modified_time = #{modifiedTime,jdbcType=TIMESTAMP} + where id = #{id,jdbcType=INTEGER} + + + + + diff --git a/service/src/main/resources/tools/generatorConfig.xml b/service/src/main/resources/tools/generatorConfig.xml index 8de40ba..caefbc0 100644 --- a/service/src/main/resources/tools/generatorConfig.xml +++ b/service/src/main/resources/tools/generatorConfig.xml @@ -90,7 +90,7 @@ domainObjectName 给表对应的 model 起名字 注意:大小写敏感问题。 --> -