From f3da46e4810c933c25c012f9814db5ab5c16172f Mon Sep 17 00:00:00 2001 From: mh Date: Tue, 3 Dec 2024 16:16:26 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E5=BE=AE=E4=BF=A1=E6=8E=A8=E9=80=81?= =?UTF-8?q?=E6=A8=A1=E6=9D=BF=E6=B6=88=E6=81=AF=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/mh/user/job/PushDataToWechatJob.java | 42 +++++++++++++++- .../mapper/DataResultFifteenMiMapper.java | 6 ++- .../user/mapper/DataResultFiveMiMapper.java | 7 ++- .../com/mh/user/mapper/MeterManageMapper.java | 4 ++ .../mapper/provider/DataResultProvider.java | 16 +++--- .../mh/user/mapper/wechat/WechatMapper.java | 25 ++++++++++ .../mh/user/service/DataResultService.java | 6 +-- .../service/impl/DataResultServiceImpl.java | 32 ++++++------ .../mh/user/service/wechat/WechatService.java | 4 ++ .../wechat/impl/WechatServiceImpl.java | 49 ++++++++++++------- .../src/main/resources/application-prod.yml | 14 ++++++ .../src/main/resources/application-test.yml | 14 ++++++ .../src/main/resources/application.yml | 2 +- .../src/test/java/com/mh/user/WechatTest.java | 10 ++++ 微信推送模板消息.sql | 42 ++++++++++++++++ 15 files changed, 222 insertions(+), 51 deletions(-) create mode 100644 user-service/src/main/java/com/mh/user/mapper/wechat/WechatMapper.java create mode 100644 微信推送模板消息.sql diff --git a/user-service/src/main/java/com/mh/user/job/PushDataToWechatJob.java b/user-service/src/main/java/com/mh/user/job/PushDataToWechatJob.java index f5e0f39..ea1448e 100644 --- a/user-service/src/main/java/com/mh/user/job/PushDataToWechatJob.java +++ b/user-service/src/main/java/com/mh/user/job/PushDataToWechatJob.java @@ -2,15 +2,19 @@ package com.mh.user.job; import com.mh.user.entity.EnergyDataEntity; import com.mh.user.entity.ProjectInfoEntity; +import com.mh.user.entity.wechat.*; import com.mh.user.service.EnergyDataService; import com.mh.user.service.ProjectInfoService; +import com.mh.user.service.wechat.WechatService; import com.mh.user.utils.DateUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import java.util.Calendar; import java.util.List; +import java.util.Map; /** * @author LJF @@ -29,10 +33,18 @@ public class PushDataToWechatJob { @Autowired private EnergyDataService energyDataService; - @Scheduled(cron = "25 0/2 * * * ?") //每2分钟一次 + @Autowired + private WechatService wechatService; + + @Scheduled(cron = " 0 0 8 * * ? ") //每天八点钟推送上一天的数据能耗 public void pushDataToWechat() { log.info("推送给微信公众号"); - String curDate = DateUtil.dateToString(DateUtil.getNowDate(), "yyyy-MM-dd"); + // 获取当前日期 + Calendar calendar = Calendar.getInstance(); + // 减去一天 + calendar.add(Calendar.DAY_OF_YEAR, -1); + // 将日期转换为字符串 + String curDate = DateUtil.dateToString(calendar.getTime(), "yyyy-MM-dd"); // 查询有多少项目 List projectInfoEntities = projectInfoService.queryProjectInfo("1"); for (ProjectInfoEntity projectInfoEntity : projectInfoEntities) { @@ -42,6 +54,32 @@ public class PushDataToWechatJob { } else { log.info("有数据"); // 开始推送数据 + PushMsgEntity pushMsgEntity = new PushMsgEntity(); + List> wechatUserList = wechatService.queryWechatUser(String.valueOf(projectInfoEntity.getId())); + for (Map map : wechatUserList) { + pushMsgEntity.setTouser(map.get("open_id").toString()); + pushMsgEntity.setTemplateId(map.get("template_id").toString()); + pushMsgEntity.setUrl("http://jnd2.mhwsh.net:8765/"); + First first = new First(); + first.setValue("设备用量采集结果通知"); + pushMsgEntity.setFirst(first); + Key1 key1 = new Key1(); + key1.setValue(projectInfoEntity.getProjectName()); + pushMsgEntity.setKey1(key1); + Key2 key2 = new Key2(); + key2.setValue(String.valueOf(energyDataEntity.getElect()) + " kwh"); + pushMsgEntity.setKey2(key2); + Key3 key3 = new Key3(); + key3.setValue(String.valueOf(energyDataEntity.getCl()) + " kwr"); + pushMsgEntity.setKey3(key3); + Key4 key4 = new Key4(); + key4.setValue(String.valueOf(energyDataEntity.getCop()) + " kwr/kwh"); + pushMsgEntity.setKey4(key4); + Key5 key5 = new Key5(); + key5.setValue(String.valueOf(energyDataEntity.getCurDate())); + pushMsgEntity.setKey5(key5); + wechatService.PushMsg(pushMsgEntity); + } } } } diff --git a/user-service/src/main/java/com/mh/user/mapper/DataResultFifteenMiMapper.java b/user-service/src/main/java/com/mh/user/mapper/DataResultFifteenMiMapper.java index c9bfc88..7ee7084 100644 --- a/user-service/src/main/java/com/mh/user/mapper/DataResultFifteenMiMapper.java +++ b/user-service/src/main/java/com/mh/user/mapper/DataResultFifteenMiMapper.java @@ -26,13 +26,15 @@ public interface DataResultFifteenMiMapper extends BaseMapper=#{startDate} and curDate<=#{curDate} ") @SelectProvider(type = DataResultProvider.class,method = "dataResultFifteenMiCount") int dataResultFifteenMiCount(@Param("projectId") String projectId, @Param("startDate") String startDate, @Param("curDate") String curDate, - @Param("registerAddr") String registerAddr); + @Param("registerAddr") String registerAddr, + @Param("mtNum") String mtNum); } diff --git a/user-service/src/main/java/com/mh/user/mapper/DataResultFiveMiMapper.java b/user-service/src/main/java/com/mh/user/mapper/DataResultFiveMiMapper.java index cdf8042..d7be2fa 100644 --- a/user-service/src/main/java/com/mh/user/mapper/DataResultFiveMiMapper.java +++ b/user-service/src/main/java/com/mh/user/mapper/DataResultFiveMiMapper.java @@ -25,7 +25,9 @@ public interface DataResultFiveMiMapper extends BaseMapper=#{startDate} and curDate<=#{curDate} ") @@ -33,5 +35,6 @@ public interface DataResultFiveMiMapper extends BaseMapper { @Param("deviceType") String deviceType, @Param("projectId") String projectId, @Param("registerAddr") String registerAddr); + + @Select("select top 1 mt_num from meter_manage where project_id=#{projectId} and register_addr=#{registerAddr} and func_code = '03' order by cur_value ") + String selectRegisterAddr(@Param("projectId") String projectId, + @Param("registerAddr") String registerAddr); } diff --git a/user-service/src/main/java/com/mh/user/mapper/provider/DataResultProvider.java b/user-service/src/main/java/com/mh/user/mapper/provider/DataResultProvider.java index 3e1aa06..bd52ac7 100644 --- a/user-service/src/main/java/com/mh/user/mapper/provider/DataResultProvider.java +++ b/user-service/src/main/java/com/mh/user/mapper/provider/DataResultProvider.java @@ -95,7 +95,7 @@ public class DataResultProvider { //时间显示间隔为5分钟 - public String queryDataResultFiveMi(String projectId,String startDate,String curDate, int page, int limit, String registerAddr){ + public String queryDataResultFiveMi(String projectId,String startDate,String curDate, int page, int limit, String registerAddr, String mtNum){ StringBuffer sql = new StringBuffer(""); sql.append("select t2.cur_date,t2.cur_value,t2.project_id,t3.project_name "); if (registerAddr!= null && !registerAddr.isEmpty()) { @@ -120,7 +120,7 @@ public class DataResultProvider { if (registerAddr!= null && !registerAddr.equals("")){ sql.append(" AND register_addr = #{registerAddr} "); if (Constant.INT_TEMP.equals(registerAddr) || Constant.OUT_TEMP.equals(registerAddr)) { - sql.append(" and device_addr = (select top 1 mt_num from meter_manage where mt_type = 2 and register_addr = #{registerAddr} and project_id = #{projectId} ) "); + sql.append(" and device_addr = #{mtNum} "); } } sql.append("group by cur_date,project_id "); @@ -135,7 +135,7 @@ public class DataResultProvider { return sql.toString(); } - public String dataResultFiveMiCount(String projectId, String startDate,String curDate, String registerAddr){ + public String dataResultFiveMiCount(String projectId, String startDate,String curDate, String registerAddr, String mtNum){ StringBuffer sql = new StringBuffer(""); sql.append("select count(1) from ( " + " select project_id,cur_date,sum(cast(cur_value as decimal(18,2))) as cur_value"); @@ -156,7 +156,7 @@ public class DataResultProvider { if (registerAddr!= null && !registerAddr.equals("")){ sql.append(" AND register_addr = #{registerAddr} "); if (Constant.INT_TEMP.equals(registerAddr) || Constant.OUT_TEMP.equals(registerAddr)) { - sql.append(" and device_addr = (select top 1 mt_num from meter_manage where mt_type = 2 and register_addr = #{registerAddr} and project_id = #{projectId} ) "); + sql.append(" and device_addr = #{mtNum} "); } } sql.append("group by cur_date,project_id "); @@ -168,7 +168,7 @@ public class DataResultProvider { } //时间显示间隔为15分钟 - public String queryDataResultFifteenMi(String projectId,String startDate,String curDate, int page, int limit, String registerAddr){ + public String queryDataResultFifteenMi(String projectId,String startDate,String curDate, int page, int limit, String registerAddr, String mtNum){ StringBuffer sql = new StringBuffer(""); sql.append("select t2.cur_date,t2.cur_value,t2.project_id,t3.project_name "); if (registerAddr!= null && !registerAddr.isEmpty()) { @@ -193,7 +193,7 @@ public class DataResultProvider { if (registerAddr!= null && !registerAddr.equals("")){ sql.append(" AND register_addr = #{registerAddr} "); if (Constant.INT_TEMP.equals(registerAddr) || Constant.OUT_TEMP.equals(registerAddr)) { - sql.append(" and device_addr = (select top 1 mt_num from meter_manage where mt_type = 2 and register_addr = #{registerAddr} and project_id = #{projectId} ) "); + sql.append(" and device_addr = #{mtNum} "); } } sql.append("group by cur_date,project_id "); @@ -208,7 +208,7 @@ public class DataResultProvider { return sql.toString(); } - public String dataResultFifteenMiCount(String projectId, String startDate,String curDate, String registerAddr){ + public String dataResultFifteenMiCount(String projectId, String startDate,String curDate, String registerAddr, String mtNum){ StringBuffer sql = new StringBuffer(""); sql.append("select count(1) from ( " + " select project_id,cur_date,sum(cast(cur_value as decimal(18,2))) as cur_value"); @@ -229,7 +229,7 @@ public class DataResultProvider { if (registerAddr!= null && !registerAddr.equals("")){ sql.append(" AND register_addr = #{registerAddr} "); if (Constant.INT_TEMP.equals(registerAddr) || Constant.OUT_TEMP.equals(registerAddr)) { - sql.append(" and device_addr = (select top 1 mt_num from meter_manage where mt_type = 2 and register_addr = #{registerAddr} and project_id = #{projectId} ) "); + sql.append(" and device_addr = #{mtNum} "); } } sql.append("group by cur_date,project_id "); diff --git a/user-service/src/main/java/com/mh/user/mapper/wechat/WechatMapper.java b/user-service/src/main/java/com/mh/user/mapper/wechat/WechatMapper.java new file mode 100644 index 0000000..0e6bc68 --- /dev/null +++ b/user-service/src/main/java/com/mh/user/mapper/wechat/WechatMapper.java @@ -0,0 +1,25 @@ +package com.mh.user.mapper.wechat; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +import java.util.List; +import java.util.Map; + +/** + * @author LJF + * @version 1.0 + * @project mh_esi + * @description 微信相关mapper + * @date 2024-12-03 14:35:32 + */ +@Mapper +public interface WechatMapper { + + @Select("select wt.template_id, wui.open_id from wechat_template_project wtp " + + " join wechat_template wt on wtp.template_id = wt.id " + + " join wechat_user_info wui on wtp.wechat_user_id = wui.id" + + " where wtp.project_id = #{projectId} ") + List> queryWechatUser(@Param("projectId") String projectId); +} diff --git a/user-service/src/main/java/com/mh/user/service/DataResultService.java b/user-service/src/main/java/com/mh/user/service/DataResultService.java index 9515d1f..9da98d8 100644 --- a/user-service/src/main/java/com/mh/user/service/DataResultService.java +++ b/user-service/src/main/java/com/mh/user/service/DataResultService.java @@ -46,15 +46,15 @@ public interface DataResultService { void updateDataResultCh(DataResultChEntity dataResultChEntity); //查询按分钟的时间间隔 - List queryDataResultMi(String projectId,String startDate,String curDate,int page,int limit, int type, String registerAddr); + List queryDataResultMi(String projectId,String startDate,String curDate,int page,int limit, int type, String registerAddr, String mtNum); HttpResult queryDataResultMiData(String projectId, String curDate, int page, int limit, int type, String dateType); int dataResultOneMiCount(String projectId,String startDate,String curDate); - int dataResultFiveMiCount(String projectId,String startDate,String curDate, String registerAddr); + int dataResultFiveMiCount(String projectId,String startDate,String curDate, String registerAddr, String mtNum); - int dataResultFifteenMiCount(String projectId,String startDate,String curDate, String registerAddr); + int dataResultFifteenMiCount(String projectId,String startDate,String curDate, String registerAddr, String mtNum); //查询按秒的时间间隔 List queryDataResultSec(String projectId,String startDate,String curDate); diff --git a/user-service/src/main/java/com/mh/user/service/impl/DataResultServiceImpl.java b/user-service/src/main/java/com/mh/user/service/impl/DataResultServiceImpl.java index 9f0d7d2..2f5ddc4 100644 --- a/user-service/src/main/java/com/mh/user/service/impl/DataResultServiceImpl.java +++ b/user-service/src/main/java/com/mh/user/service/impl/DataResultServiceImpl.java @@ -224,13 +224,13 @@ public class DataResultServiceImpl implements DataResultService { } @Override - public List queryDataResultMi(String projectId, String startDate, String curDate, int page, int limit, int type, String registerAddr) { + public List queryDataResultMi(String projectId, String startDate, String curDate, int page, int limit, int type, String registerAddr, String mtNum) { if (type == 0) { return dataResultOneMiMapper.queryDataResultOneMi(projectId, startDate, curDate, page, limit); } else if (type == 1) { - return dataResultFiveMiMapper.queryDataResultFiveMi(projectId, startDate, curDate, page, limit, registerAddr); + return dataResultFiveMiMapper.queryDataResultFiveMi(projectId, startDate, curDate, page, limit, registerAddr, mtNum); } else if (type == 2) { - return dataResultFifteenMiMapper.queryDataResultFifteenMi(projectId, startDate, curDate, page, limit, registerAddr); + return dataResultFifteenMiMapper.queryDataResultFifteenMi(projectId, startDate, curDate, page, limit, registerAddr, mtNum); } else { return dataResultOneMiMapper.queryDataResultOneMi(projectId, startDate, curDate, page, limit); } @@ -247,14 +247,16 @@ public class DataResultServiceImpl implements DataResultService { if (projectId != null && !projectId.isEmpty()) { String startDate = ""; curDate = curDate.substring(0, 16) + ":00"; + // 查询温度低的冷量计 + String registerAddr = meterManageMapper.selectRegisterAddr(projectId, Constant.INT_TEMP); if (dateType.equals("1小时")) { startDate = ExchangeStringUtil.dateRoll(1, curDate); - List records = queryDataResultMi(projectId, startDate, curDate, page, limit, 0, Constant.MOMENT_COOLING); + List records = queryDataResultMi(projectId, startDate, curDate, page, limit, 0, Constant.MOMENT_COOLING, registerAddr); int count = dataResultOneMiCount(projectId, startDate, curDate); return HttpResult.ok(count, records); } else if (dateType.equals("2小时")) { startDate = ExchangeStringUtil.dateRoll(2, curDate); - List records = queryDataResultMi(projectId, startDate, curDate, page, limit, 0, Constant.MOMENT_COOLING); + List records = queryDataResultMi(projectId, startDate, curDate, page, limit, 0, Constant.MOMENT_COOLING, registerAddr); int count = dataResultOneMiCount(projectId, startDate, curDate); return HttpResult.ok(count, records); } else if (dateType.equals("8小时") || dateType.equals("12小时") || dateType.equals("24小时")) { @@ -268,11 +270,11 @@ public class DataResultServiceImpl implements DataResultService { queryType = 2; } // 查询瞬时冷量 - List records = queryDataResultMi(projectId, startDate, curDate, page, limit, queryType, Constant.MOMENT_COOLING); + List records = queryDataResultMi(projectId, startDate, curDate, page, limit, queryType, Constant.MOMENT_COOLING, null); // 查询进水温度值(及冷冻水出水温度) - List intTempRecords = queryDataResultMi(projectId, startDate, curDate, page, limit, queryType, Constant.OUT_TEMP); + List intTempRecords = queryDataResultMi(projectId, startDate, curDate, page, limit, queryType, Constant.OUT_TEMP, registerAddr); // 查询出水温度值(及冷冻水进水温度) - List outTempRecords = queryDataResultMi(projectId, startDate, curDate, page, limit, queryType, Constant.INT_TEMP); + List outTempRecords = queryDataResultMi(projectId, startDate, curDate, page, limit, queryType, Constant.INT_TEMP, registerAddr); // 拼接数据 // 将数据按时间分组 Map momentCoolingMap = records.stream() @@ -326,9 +328,9 @@ public class DataResultServiceImpl implements DataResultService { }); int count = 0; if (dateType.equals("24小时")) { - count = dataResultFifteenMiCount(projectId, startDate, curDate, Constant.MOMENT_COOLING); + count = dataResultFifteenMiCount(projectId, startDate, curDate, Constant.MOMENT_COOLING, registerAddr); } else { - count = dataResultFiveMiCount(projectId, startDate, curDate, Constant.MOMENT_COOLING); + count = dataResultFiveMiCount(projectId, startDate, curDate, Constant.MOMENT_COOLING, registerAddr); } return HttpResult.ok(count, mergedRecords); } @@ -346,7 +348,7 @@ public class DataResultServiceImpl implements DataResultService { // } else { //1小时 startDate = ExchangeStringUtil.dateRoll(1, curDate); - List records = queryDataResultMi(projectId, startDate, curDate, page, limit, 0, Constant.MOMENT_COOLING); + List records = queryDataResultMi(projectId, startDate, curDate, page, limit, 0, Constant.MOMENT_COOLING, registerAddr); int count = dataResultOneMiCount(projectId, startDate, curDate); return HttpResult.ok(count, records); } @@ -360,13 +362,13 @@ public class DataResultServiceImpl implements DataResultService { } @Override - public int dataResultFiveMiCount(String projectId, String startDate, String curDate, String registerAddr) { - return dataResultFiveMiMapper.dataResultFiveMiCount(projectId, startDate, curDate, registerAddr); + public int dataResultFiveMiCount(String projectId, String startDate, String curDate, String registerAddr, String mtNum) { + return dataResultFiveMiMapper.dataResultFiveMiCount(projectId, startDate, curDate, registerAddr, mtNum); } @Override - public int dataResultFifteenMiCount(String projectId, String startDate, String curDate, String registerAddr) { - return dataResultFifteenMiMapper.dataResultFifteenMiCount(projectId, startDate, curDate, registerAddr); + public int dataResultFifteenMiCount(String projectId, String startDate, String curDate, String registerAddr, String mtNum) { + return dataResultFifteenMiMapper.dataResultFifteenMiCount(projectId, startDate, curDate, registerAddr, mtNum); } @Override diff --git a/user-service/src/main/java/com/mh/user/service/wechat/WechatService.java b/user-service/src/main/java/com/mh/user/service/wechat/WechatService.java index 6e2423b..07eacdf 100644 --- a/user-service/src/main/java/com/mh/user/service/wechat/WechatService.java +++ b/user-service/src/main/java/com/mh/user/service/wechat/WechatService.java @@ -2,6 +2,9 @@ package com.mh.user.service.wechat; import com.mh.user.entity.wechat.PushMsgEntity; +import java.util.List; +import java.util.Map; + /** * @author chison * @date 2020-09-14 10:48 @@ -11,4 +14,5 @@ public interface WechatService { void PushMsg(PushMsgEntity pushMsgEntity); + List> queryWechatUser(String projectId); } diff --git a/user-service/src/main/java/com/mh/user/service/wechat/impl/WechatServiceImpl.java b/user-service/src/main/java/com/mh/user/service/wechat/impl/WechatServiceImpl.java index 9a53c61..25fedfb 100644 --- a/user-service/src/main/java/com/mh/user/service/wechat/impl/WechatServiceImpl.java +++ b/user-service/src/main/java/com/mh/user/service/wechat/impl/WechatServiceImpl.java @@ -4,6 +4,7 @@ import com.alibaba.fastjson2.JSONObject; import com.github.benmanes.caffeine.cache.Cache; import com.mh.user.config.wechat.WechatMpConfig; import com.mh.user.entity.wechat.PushMsgEntity; +import com.mh.user.mapper.wechat.WechatMapper; import com.mh.user.service.wechat.WechatService; import com.mh.user.utils.CacheUtil; import lombok.extern.slf4j.Slf4j; @@ -13,6 +14,9 @@ import org.springframework.http.HttpHeaders; import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; +import java.util.Collections; +import java.util.List; +import java.util.Map; import java.util.concurrent.TimeUnit; /** @@ -32,24 +36,33 @@ public class WechatServiceImpl implements WechatService { @Autowired private WechatMpConfig wechatMpConfig; + @Autowired + private WechatMapper wechatMapper; + + @Override + public List> queryWechatUser(String projectId) { + return wechatMapper.queryWechatUser(projectId); + } + @Override public void PushMsg(PushMsgEntity pushMsgEntity) { // 判断cache中是否存在access_token CacheUtil instance = CacheUtil.getInstance(); Cache cache = instance.getCache("accessToken"); - String accessToken = ""; - if (cache != null ) { - log.info("cache中存在access_token,直接使用"); - accessToken = cache.getIfPresent("accessToken").toString(); - } else { - String tokenResult = restTemplate.getForObject(wechatMpConfig.getAccessTokenUrl(),String.class); - JSONObject jsonObj = JSONObject.parseObject(tokenResult); - if (jsonObj == null || !jsonObj.containsKey("access_token")) { - return; - } - accessToken = jsonObj.get("access_token").toString(); - instance.createCache("accessToken", 6000, TimeUnit.SECONDS); - } + String accessToken = "86_6rbcAo1LkDnWs4F6gDeTQErw741yVj8NPBMsYqRIM13mW4Jx7F1OeaKbcHS7lNyjSqSxhJj1INRLAfA-ygtzncC-G3lWtrqLnSfO6lOX47EQ_O4TjqrCy4mVnfcEUPcAIAAQL"; +// if (cache != null ) { +// log.info("cache中存在access_token,直接使用"); +// accessToken = cache.getIfPresent("accessToken").toString(); +// } else { +// String tokenResult = restTemplate.getForObject(wechatMpConfig.getAccessTokenUrl(),String.class); +// JSONObject jsonObj = JSONObject.parseObject(tokenResult); +// if (jsonObj == null || !jsonObj.containsKey("access_token")) { +// return; +// } +// accessToken = jsonObj.get("access_token").toString(); +// log.info("获取access_token==>{}", accessToken); +// instance.createCache("accessToken", 6000, TimeUnit.SECONDS); +// } // 封装推送内容 JSONObject jsonObject = new JSONObject(); jsonObject.put("touser",pushMsgEntity.getTouser()); @@ -57,11 +70,11 @@ public class WechatServiceImpl implements WechatService { jsonObject.put("url",pushMsgEntity.getUrl()); JSONObject data = new JSONObject(); data.put("first",pushMsgEntity.getFirst()); - data.put("keyword1",pushMsgEntity.getKey1()); - data.put("keyword2",pushMsgEntity.getKey2()); - data.put("keyword3",pushMsgEntity.getKey3()); - data.put("keyword4",pushMsgEntity.getKey4()); - data.put("keyword5",pushMsgEntity.getKey5()); + data.put("thing1",pushMsgEntity.getKey1()); + data.put("character_string2",pushMsgEntity.getKey2()); + data.put("character_string3",pushMsgEntity.getKey3()); + data.put("character_string4",pushMsgEntity.getKey4()); + data.put("time5",pushMsgEntity.getKey5()); data.put("remark",pushMsgEntity.getRemark()); jsonObject.put("data",data); HttpHeaders headers = new HttpHeaders(); diff --git a/user-service/src/main/resources/application-prod.yml b/user-service/src/main/resources/application-prod.yml index 65e73a3..221c48b 100644 --- a/user-service/src/main/resources/application-prod.yml +++ b/user-service/src/main/resources/application-prod.yml @@ -103,3 +103,17 @@ pagehelper: reasonable: true support-methods-arguments: true params: countSql + +wechat: + mpAppId: wx5653d0f930e98414 + mpAppSecret: 3473cbd80e891e4e7da1b1b71ae3a5a2 + redirectUri: http://jnd2.mhwsh.net:8766/wechat/userInfo + # 生成微信授权 + authorizedUrl: https://open.weixin.qq.com/connect/oauth2/authorize?appid=mpAppId&redirect_uri=REDIRECT_URI&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect + # 获取code后,请求以下链接获取access_token + access_token: https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=SECRET + # 拉取用户信息(需scope为 snsapi_userinfo) + userinfo: https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN + # 消息推送url + pushUrl: https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN + baseUrl: http://jnd2.mhwsh.net:8766 diff --git a/user-service/src/main/resources/application-test.yml b/user-service/src/main/resources/application-test.yml index f476a16..b3fc3ac 100644 --- a/user-service/src/main/resources/application-test.yml +++ b/user-service/src/main/resources/application-test.yml @@ -103,3 +103,17 @@ pagehelper: reasonable: true support-methods-arguments: true params: countSql + +wechat: + mpAppId: wx5653d0f930e98414 + mpAppSecret: 3473cbd80e891e4e7da1b1b71ae3a5a2 + redirectUri: https://35gm72cu2458.vicp.fun/wechat/userInfo + # 生成微信授权 + authorizedUrl: https://open.weixin.qq.com/connect/oauth2/authorize?appid=mpAppId&redirect_uri=REDIRECT_URI&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect + # 获取code后,请求以下链接获取access_token + access_token: https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=SECRET + # 拉取用户信息(需scope为 snsapi_userinfo) + userinfo: https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN + # 消息推送url + pushUrl: https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN + baseUrl: https://35gm72cu2458.vicp.fun diff --git a/user-service/src/main/resources/application.yml b/user-service/src/main/resources/application.yml index 193cf91..b841e42 100644 --- a/user-service/src/main/resources/application.yml +++ b/user-service/src/main/resources/application.yml @@ -1,6 +1,6 @@ spring: profiles: - active: dev + active: prod servlet: multipart: max-file-size: 50MB diff --git a/user-service/src/test/java/com/mh/user/WechatTest.java b/user-service/src/test/java/com/mh/user/WechatTest.java index 2daa4f6..e88edcb 100644 --- a/user-service/src/test/java/com/mh/user/WechatTest.java +++ b/user-service/src/test/java/com/mh/user/WechatTest.java @@ -2,6 +2,7 @@ package com.mh.user; import com.alibaba.fastjson2.JSONObject; import com.google.gson.JsonObject; +import com.mh.user.job.PushDataToWechatJob; import com.mh.user.service.wechat.WechatUserInfoService; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Test; @@ -38,4 +39,13 @@ public class WechatTest extends UserServiceApplicationTests{ wechatUserInfoService.existsUser(jsonObject); } + + @Autowired + private PushDataToWechatJob pushDataToWechatJob; + + @Test + public void pushWechatMsg() + { + pushDataToWechatJob.pushDataToWechat(); + } } diff --git a/微信推送模板消息.sql b/微信推送模板消息.sql new file mode 100644 index 0000000..b286f9d --- /dev/null +++ b/微信推送模板消息.sql @@ -0,0 +1,42 @@ +-- 微信模板消息表 +CREATE TABLE wechat_template ( + id bigint IDENTITY(1,1) NOT NULL, + template_id varchar(100) COLLATE Chinese_PRC_CI_AS NULL, + template_name varchar(100) COLLATE Chinese_PRC_CI_AS NULL, + title varchar(100) COLLATE Chinese_PRC_CI_AS NULL, + content1 varchar(100) COLLATE Chinese_PRC_CI_AS NULL, + content2 varchar(100) COLLATE Chinese_PRC_CI_AS NULL, + content3 varchar(200) COLLATE Chinese_PRC_CI_AS NULL, + content4 varchar(100) COLLATE Chinese_PRC_CI_AS NULL, + content5 varchar(100) COLLATE Chinese_PRC_CI_AS NULL, + remark varchar(200) COLLATE Chinese_PRC_CI_AS NULL, + create_time datetime NULL, + update_time datetime NULL, + grade int NULL +); + +-- Extended properties +EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'微信模板ID', @level0type=N'Schema', @level0name=N'dbo', @level1type=N'Table', @level1name=N'wechat_template', @level2type=N'Column', @level2name=N'template_id'; +EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'模板名称', @level0type=N'Schema', @level0name=N'dbo', @level1type=N'Table', @level1name=N'wechat_template', @level2type=N'Column', @level2name=N'template_name'; +EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'内容抬头', @level0type=N'Schema', @level0name=N'dbo', @level1type=N'Table', @level1name=N'wechat_template', @level2type=N'Column', @level2name=N'title'; +EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'内容1', @level0type=N'Schema', @level0name=N'dbo', @level1type=N'Table', @level1name=N'wechat_template', @level2type=N'Column', @level2name=N'content1'; +EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'内容2', @level0type=N'Schema', @level0name=N'dbo', @level1type=N'Table', @level1name=N'wechat_template', @level2type=N'Column', @level2name=N'content2'; +EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'内容3', @level0type=N'Schema', @level0name=N'dbo', @level1type=N'Table', @level1name=N'wechat_template', @level2type=N'Column', @level2name=N'content3'; +EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'内容4', @level0type=N'Schema', @level0name=N'dbo', @level1type=N'Table', @level1name=N'wechat_template', @level2type=N'Column', @level2name=N'content4'; +EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'内容5', @level0type=N'Schema', @level0name=N'dbo', @level1type=N'Table', @level1name=N'wechat_template', @level2type=N'Column', @level2name=N'content5'; +EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'备注', @level0type=N'Schema', @level0name=N'dbo', @level1type=N'Table', @level1name=N'wechat_template', @level2type=N'Column', @level2name=N'remark'; +EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'创建时间', @level0type=N'Schema', @level0name=N'dbo', @level1type=N'Table', @level1name=N'wechat_template', @level2type=N'Column', @level2name=N'create_time'; +EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'更新时间', @level0type=N'Schema', @level0name=N'dbo', @level1type=N'Table', @level1name=N'wechat_template', @level2type=N'Column', @level2name=N'update_time'; +EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'标志位', @level0type=N'Schema', @level0name=N'dbo', @level1type=N'Table', @level1name=N'wechat_template', @level2type=N'Column', @level2name=N'grade'; + +-- 项目,微信用户,模板关联表 +create table wechat_template_project( + id bigint IDENTITY(1,1) not null, + project_id bigint, + template_id bigint, + wechat_user_id bigint, + create_time datetime, + update_time datetime, + grade int +); +