Browse Source

1、微信推送模板消息;

dev
mh 5 months ago
parent
commit
f3da46e481
  1. 42
      user-service/src/main/java/com/mh/user/job/PushDataToWechatJob.java
  2. 6
      user-service/src/main/java/com/mh/user/mapper/DataResultFifteenMiMapper.java
  3. 7
      user-service/src/main/java/com/mh/user/mapper/DataResultFiveMiMapper.java
  4. 4
      user-service/src/main/java/com/mh/user/mapper/MeterManageMapper.java
  5. 16
      user-service/src/main/java/com/mh/user/mapper/provider/DataResultProvider.java
  6. 25
      user-service/src/main/java/com/mh/user/mapper/wechat/WechatMapper.java
  7. 6
      user-service/src/main/java/com/mh/user/service/DataResultService.java
  8. 32
      user-service/src/main/java/com/mh/user/service/impl/DataResultServiceImpl.java
  9. 4
      user-service/src/main/java/com/mh/user/service/wechat/WechatService.java
  10. 49
      user-service/src/main/java/com/mh/user/service/wechat/impl/WechatServiceImpl.java
  11. 14
      user-service/src/main/resources/application-prod.yml
  12. 14
      user-service/src/main/resources/application-test.yml
  13. 2
      user-service/src/main/resources/application.yml
  14. 10
      user-service/src/test/java/com/mh/user/WechatTest.java
  15. 42
      微信推送模板消息.sql

42
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.EnergyDataEntity;
import com.mh.user.entity.ProjectInfoEntity; import com.mh.user.entity.ProjectInfoEntity;
import com.mh.user.entity.wechat.*;
import com.mh.user.service.EnergyDataService; import com.mh.user.service.EnergyDataService;
import com.mh.user.service.ProjectInfoService; import com.mh.user.service.ProjectInfoService;
import com.mh.user.service.wechat.WechatService;
import com.mh.user.utils.DateUtil; import com.mh.user.utils.DateUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled; import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.Calendar;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* @author LJF * @author LJF
@ -29,10 +33,18 @@ public class PushDataToWechatJob {
@Autowired @Autowired
private EnergyDataService energyDataService; private EnergyDataService energyDataService;
@Scheduled(cron = "25 0/2 * * * ?") //每2分钟一次 @Autowired
private WechatService wechatService;
@Scheduled(cron = " 0 0 8 * * ? ") //每天八点钟推送上一天的数据能耗
public void pushDataToWechat() { public void pushDataToWechat() {
log.info("推送给微信公众号"); 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<ProjectInfoEntity> projectInfoEntities = projectInfoService.queryProjectInfo("1"); List<ProjectInfoEntity> projectInfoEntities = projectInfoService.queryProjectInfo("1");
for (ProjectInfoEntity projectInfoEntity : projectInfoEntities) { for (ProjectInfoEntity projectInfoEntity : projectInfoEntities) {
@ -42,6 +54,32 @@ public class PushDataToWechatJob {
} else { } else {
log.info("有数据"); log.info("有数据");
// 开始推送数据 // 开始推送数据
PushMsgEntity pushMsgEntity = new PushMsgEntity();
List<Map<String, Object>> wechatUserList = wechatService.queryWechatUser(String.valueOf(projectInfoEntity.getId()));
for (Map<String, Object> 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);
}
} }
} }
} }

6
user-service/src/main/java/com/mh/user/mapper/DataResultFifteenMiMapper.java

@ -26,13 +26,15 @@ public interface DataResultFifteenMiMapper extends BaseMapper<DataResultFifteenM
@Param("curDate") String curDate, @Param("curDate") String curDate,
@Param("page") int page, @Param("page") int page,
@Param("limit") int limit, @Param("limit") int limit,
@Param("registerAddr") String registerAddr); @Param("registerAddr") String registerAddr,
@Param("mtNum") String mtNum);
//@Select("select count(*) from data_result_fifteen_mi where projectId=#{projectId} and curDate>=#{startDate} and curDate<=#{curDate} ") //@Select("select count(*) from data_result_fifteen_mi where projectId=#{projectId} and curDate>=#{startDate} and curDate<=#{curDate} ")
@SelectProvider(type = DataResultProvider.class,method = "dataResultFifteenMiCount") @SelectProvider(type = DataResultProvider.class,method = "dataResultFifteenMiCount")
int dataResultFifteenMiCount(@Param("projectId") String projectId, int dataResultFifteenMiCount(@Param("projectId") String projectId,
@Param("startDate") String startDate, @Param("startDate") String startDate,
@Param("curDate") String curDate, @Param("curDate") String curDate,
@Param("registerAddr") String registerAddr); @Param("registerAddr") String registerAddr,
@Param("mtNum") String mtNum);
} }

7
user-service/src/main/java/com/mh/user/mapper/DataResultFiveMiMapper.java

@ -25,7 +25,9 @@ public interface DataResultFiveMiMapper extends BaseMapper<DataResultFiveMiEntit
@Param("curDate") String curDate, @Param("curDate") String curDate,
@Param("page") int page, @Param("page") int page,
@Param("limit") int limit, @Param("limit") int limit,
@Param("registerAddr") String registerAddr); @Param("registerAddr") String registerAddr,
@Param("mtNum") String mtNum
);
// @Select("select count(*) from data_result_five_mi where projectId=#{projectId} and curDate>=#{startDate} and curDate<=#{curDate} ") // @Select("select count(*) from data_result_five_mi where projectId=#{projectId} and curDate>=#{startDate} and curDate<=#{curDate} ")
@ -33,5 +35,6 @@ public interface DataResultFiveMiMapper extends BaseMapper<DataResultFiveMiEntit
int dataResultFiveMiCount(@Param("projectId") String projectId, int dataResultFiveMiCount(@Param("projectId") String projectId,
@Param("startDate") String startDate, @Param("startDate") String startDate,
@Param("curDate") String curDate, @Param("curDate") String curDate,
@Param("registerAddr") String registerAddr); @Param("registerAddr") String registerAddr,
@Param("mtNum") String mtNum);
} }

4
user-service/src/main/java/com/mh/user/mapper/MeterManageMapper.java

@ -24,4 +24,8 @@ public interface MeterManageMapper extends BaseMapper<MeterManageEntity> {
@Param("deviceType") String deviceType, @Param("deviceType") String deviceType,
@Param("projectId") String projectId, @Param("projectId") String projectId,
@Param("registerAddr") String registerAddr); @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);
} }

16
user-service/src/main/java/com/mh/user/mapper/provider/DataResultProvider.java

@ -95,7 +95,7 @@ public class DataResultProvider {
//时间显示间隔为5分钟 //时间显示间隔为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(""); StringBuffer sql = new StringBuffer("");
sql.append("select t2.cur_date,t2.cur_value,t2.project_id,t3.project_name "); sql.append("select t2.cur_date,t2.cur_value,t2.project_id,t3.project_name ");
if (registerAddr!= null && !registerAddr.isEmpty()) { if (registerAddr!= null && !registerAddr.isEmpty()) {
@ -120,7 +120,7 @@ public class DataResultProvider {
if (registerAddr!= null && !registerAddr.equals("")){ if (registerAddr!= null && !registerAddr.equals("")){
sql.append(" AND register_addr = #{registerAddr} "); sql.append(" AND register_addr = #{registerAddr} ");
if (Constant.INT_TEMP.equals(registerAddr) || Constant.OUT_TEMP.equals(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 "); sql.append("group by cur_date,project_id ");
@ -135,7 +135,7 @@ public class DataResultProvider {
return sql.toString(); 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(""); StringBuffer sql = new StringBuffer("");
sql.append("select count(1) from ( " + sql.append("select count(1) from ( " +
" select project_id,cur_date,sum(cast(cur_value as decimal(18,2))) as cur_value"); " 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("")){ if (registerAddr!= null && !registerAddr.equals("")){
sql.append(" AND register_addr = #{registerAddr} "); sql.append(" AND register_addr = #{registerAddr} ");
if (Constant.INT_TEMP.equals(registerAddr) || Constant.OUT_TEMP.equals(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 "); sql.append("group by cur_date,project_id ");
@ -168,7 +168,7 @@ public class DataResultProvider {
} }
//时间显示间隔为15分钟 //时间显示间隔为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(""); StringBuffer sql = new StringBuffer("");
sql.append("select t2.cur_date,t2.cur_value,t2.project_id,t3.project_name "); sql.append("select t2.cur_date,t2.cur_value,t2.project_id,t3.project_name ");
if (registerAddr!= null && !registerAddr.isEmpty()) { if (registerAddr!= null && !registerAddr.isEmpty()) {
@ -193,7 +193,7 @@ public class DataResultProvider {
if (registerAddr!= null && !registerAddr.equals("")){ if (registerAddr!= null && !registerAddr.equals("")){
sql.append(" AND register_addr = #{registerAddr} "); sql.append(" AND register_addr = #{registerAddr} ");
if (Constant.INT_TEMP.equals(registerAddr) || Constant.OUT_TEMP.equals(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 "); sql.append("group by cur_date,project_id ");
@ -208,7 +208,7 @@ public class DataResultProvider {
return sql.toString(); 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(""); StringBuffer sql = new StringBuffer("");
sql.append("select count(1) from ( " + sql.append("select count(1) from ( " +
" select project_id,cur_date,sum(cast(cur_value as decimal(18,2))) as cur_value"); " 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("")){ if (registerAddr!= null && !registerAddr.equals("")){
sql.append(" AND register_addr = #{registerAddr} "); sql.append(" AND register_addr = #{registerAddr} ");
if (Constant.INT_TEMP.equals(registerAddr) || Constant.OUT_TEMP.equals(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 "); sql.append("group by cur_date,project_id ");

25
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<Map<String, Object>> queryWechatUser(@Param("projectId") String projectId);
}

6
user-service/src/main/java/com/mh/user/service/DataResultService.java

@ -46,15 +46,15 @@ public interface DataResultService {
void updateDataResultCh(DataResultChEntity dataResultChEntity); void updateDataResultCh(DataResultChEntity dataResultChEntity);
//查询按分钟的时间间隔 //查询按分钟的时间间隔
List<DataResultChEntity> queryDataResultMi(String projectId,String startDate,String curDate,int page,int limit, int type, String registerAddr); List<DataResultChEntity> 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); HttpResult queryDataResultMiData(String projectId, String curDate, int page, int limit, int type, String dateType);
int dataResultOneMiCount(String projectId,String startDate,String curDate); 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<DataResultChEntity> queryDataResultSec(String projectId,String startDate,String curDate); List<DataResultChEntity> queryDataResultSec(String projectId,String startDate,String curDate);

32
user-service/src/main/java/com/mh/user/service/impl/DataResultServiceImpl.java

@ -224,13 +224,13 @@ public class DataResultServiceImpl implements DataResultService {
} }
@Override @Override
public List<DataResultChEntity> queryDataResultMi(String projectId, String startDate, String curDate, int page, int limit, int type, String registerAddr) { public List<DataResultChEntity> queryDataResultMi(String projectId, String startDate, String curDate, int page, int limit, int type, String registerAddr, String mtNum) {
if (type == 0) { if (type == 0) {
return dataResultOneMiMapper.queryDataResultOneMi(projectId, startDate, curDate, page, limit); return dataResultOneMiMapper.queryDataResultOneMi(projectId, startDate, curDate, page, limit);
} else if (type == 1) { } 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) { } else if (type == 2) {
return dataResultFifteenMiMapper.queryDataResultFifteenMi(projectId, startDate, curDate, page, limit, registerAddr); return dataResultFifteenMiMapper.queryDataResultFifteenMi(projectId, startDate, curDate, page, limit, registerAddr, mtNum);
} else { } else {
return dataResultOneMiMapper.queryDataResultOneMi(projectId, startDate, curDate, page, limit); return dataResultOneMiMapper.queryDataResultOneMi(projectId, startDate, curDate, page, limit);
} }
@ -247,14 +247,16 @@ public class DataResultServiceImpl implements DataResultService {
if (projectId != null && !projectId.isEmpty()) { if (projectId != null && !projectId.isEmpty()) {
String startDate = ""; String startDate = "";
curDate = curDate.substring(0, 16) + ":00"; curDate = curDate.substring(0, 16) + ":00";
// 查询温度低的冷量计
String registerAddr = meterManageMapper.selectRegisterAddr(projectId, Constant.INT_TEMP);
if (dateType.equals("1小时")) { if (dateType.equals("1小时")) {
startDate = ExchangeStringUtil.dateRoll(1, curDate); startDate = ExchangeStringUtil.dateRoll(1, curDate);
List<DataResultChEntity> records = queryDataResultMi(projectId, startDate, curDate, page, limit, 0, Constant.MOMENT_COOLING); List<DataResultChEntity> records = queryDataResultMi(projectId, startDate, curDate, page, limit, 0, Constant.MOMENT_COOLING, registerAddr);
int count = dataResultOneMiCount(projectId, startDate, curDate); int count = dataResultOneMiCount(projectId, startDate, curDate);
return HttpResult.ok(count, records); return HttpResult.ok(count, records);
} else if (dateType.equals("2小时")) { } else if (dateType.equals("2小时")) {
startDate = ExchangeStringUtil.dateRoll(2, curDate); startDate = ExchangeStringUtil.dateRoll(2, curDate);
List<DataResultChEntity> records = queryDataResultMi(projectId, startDate, curDate, page, limit, 0, Constant.MOMENT_COOLING); List<DataResultChEntity> records = queryDataResultMi(projectId, startDate, curDate, page, limit, 0, Constant.MOMENT_COOLING, registerAddr);
int count = dataResultOneMiCount(projectId, startDate, curDate); int count = dataResultOneMiCount(projectId, startDate, curDate);
return HttpResult.ok(count, records); return HttpResult.ok(count, records);
} else if (dateType.equals("8小时") || dateType.equals("12小时") || dateType.equals("24小时")) { } else if (dateType.equals("8小时") || dateType.equals("12小时") || dateType.equals("24小时")) {
@ -268,11 +270,11 @@ public class DataResultServiceImpl implements DataResultService {
queryType = 2; queryType = 2;
} }
// 查询瞬时冷量 // 查询瞬时冷量
List<DataResultChEntity> records = queryDataResultMi(projectId, startDate, curDate, page, limit, queryType, Constant.MOMENT_COOLING); List<DataResultChEntity> records = queryDataResultMi(projectId, startDate, curDate, page, limit, queryType, Constant.MOMENT_COOLING, null);
// 查询进水温度值(及冷冻水出水温度) // 查询进水温度值(及冷冻水出水温度)
List<DataResultChEntity> intTempRecords = queryDataResultMi(projectId, startDate, curDate, page, limit, queryType, Constant.OUT_TEMP); List<DataResultChEntity> intTempRecords = queryDataResultMi(projectId, startDate, curDate, page, limit, queryType, Constant.OUT_TEMP, registerAddr);
// 查询出水温度值(及冷冻水进水温度) // 查询出水温度值(及冷冻水进水温度)
List<DataResultChEntity> outTempRecords = queryDataResultMi(projectId, startDate, curDate, page, limit, queryType, Constant.INT_TEMP); List<DataResultChEntity> outTempRecords = queryDataResultMi(projectId, startDate, curDate, page, limit, queryType, Constant.INT_TEMP, registerAddr);
// 拼接数据 // 拼接数据
// 将数据按时间分组 // 将数据按时间分组
Map<String, DataResultChEntity> momentCoolingMap = records.stream() Map<String, DataResultChEntity> momentCoolingMap = records.stream()
@ -326,9 +328,9 @@ public class DataResultServiceImpl implements DataResultService {
}); });
int count = 0; int count = 0;
if (dateType.equals("24小时")) { if (dateType.equals("24小时")) {
count = dataResultFifteenMiCount(projectId, startDate, curDate, Constant.MOMENT_COOLING); count = dataResultFifteenMiCount(projectId, startDate, curDate, Constant.MOMENT_COOLING, registerAddr);
} else { } else {
count = dataResultFiveMiCount(projectId, startDate, curDate, Constant.MOMENT_COOLING); count = dataResultFiveMiCount(projectId, startDate, curDate, Constant.MOMENT_COOLING, registerAddr);
} }
return HttpResult.ok(count, mergedRecords); return HttpResult.ok(count, mergedRecords);
} }
@ -346,7 +348,7 @@ public class DataResultServiceImpl implements DataResultService {
// } // }
else { //1小时 else { //1小时
startDate = ExchangeStringUtil.dateRoll(1, curDate); startDate = ExchangeStringUtil.dateRoll(1, curDate);
List<DataResultChEntity> records = queryDataResultMi(projectId, startDate, curDate, page, limit, 0, Constant.MOMENT_COOLING); List<DataResultChEntity> records = queryDataResultMi(projectId, startDate, curDate, page, limit, 0, Constant.MOMENT_COOLING, registerAddr);
int count = dataResultOneMiCount(projectId, startDate, curDate); int count = dataResultOneMiCount(projectId, startDate, curDate);
return HttpResult.ok(count, records); return HttpResult.ok(count, records);
} }
@ -360,13 +362,13 @@ public class DataResultServiceImpl implements DataResultService {
} }
@Override @Override
public int dataResultFiveMiCount(String projectId, String startDate, String curDate, String registerAddr) { public int dataResultFiveMiCount(String projectId, String startDate, String curDate, String registerAddr, String mtNum) {
return dataResultFiveMiMapper.dataResultFiveMiCount(projectId, startDate, curDate, registerAddr); return dataResultFiveMiMapper.dataResultFiveMiCount(projectId, startDate, curDate, registerAddr, mtNum);
} }
@Override @Override
public int dataResultFifteenMiCount(String projectId, String startDate, String curDate, String registerAddr) { public int dataResultFifteenMiCount(String projectId, String startDate, String curDate, String registerAddr, String mtNum) {
return dataResultFifteenMiMapper.dataResultFifteenMiCount(projectId, startDate, curDate, registerAddr); return dataResultFifteenMiMapper.dataResultFifteenMiCount(projectId, startDate, curDate, registerAddr, mtNum);
} }
@Override @Override

4
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 com.mh.user.entity.wechat.PushMsgEntity;
import java.util.List;
import java.util.Map;
/** /**
* @author chison * @author chison
* @date 2020-09-14 10:48 * @date 2020-09-14 10:48
@ -11,4 +14,5 @@ public interface WechatService {
void PushMsg(PushMsgEntity pushMsgEntity); void PushMsg(PushMsgEntity pushMsgEntity);
List<Map<String, Object>> queryWechatUser(String projectId);
} }

49
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.github.benmanes.caffeine.cache.Cache;
import com.mh.user.config.wechat.WechatMpConfig; import com.mh.user.config.wechat.WechatMpConfig;
import com.mh.user.entity.wechat.PushMsgEntity; 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.service.wechat.WechatService;
import com.mh.user.utils.CacheUtil; import com.mh.user.utils.CacheUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -13,6 +14,9 @@ import org.springframework.http.HttpHeaders;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate; import org.springframework.web.client.RestTemplate;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
/** /**
@ -32,24 +36,33 @@ public class WechatServiceImpl implements WechatService {
@Autowired @Autowired
private WechatMpConfig wechatMpConfig; private WechatMpConfig wechatMpConfig;
@Autowired
private WechatMapper wechatMapper;
@Override
public List<Map<String, Object>> queryWechatUser(String projectId) {
return wechatMapper.queryWechatUser(projectId);
}
@Override @Override
public void PushMsg(PushMsgEntity pushMsgEntity) { public void PushMsg(PushMsgEntity pushMsgEntity) {
// 判断cache中是否存在access_token // 判断cache中是否存在access_token
CacheUtil instance = CacheUtil.getInstance(); CacheUtil instance = CacheUtil.getInstance();
Cache<Object, Object> cache = instance.getCache("accessToken"); Cache<Object, Object> cache = instance.getCache("accessToken");
String accessToken = ""; String accessToken = "86_6rbcAo1LkDnWs4F6gDeTQErw741yVj8NPBMsYqRIM13mW4Jx7F1OeaKbcHS7lNyjSqSxhJj1INRLAfA-ygtzncC-G3lWtrqLnSfO6lOX47EQ_O4TjqrCy4mVnfcEUPcAIAAQL";
if (cache != null ) { // if (cache != null ) {
log.info("cache中存在access_token,直接使用"); // log.info("cache中存在access_token,直接使用");
accessToken = cache.getIfPresent("accessToken").toString(); // accessToken = cache.getIfPresent("accessToken").toString();
} else { // } else {
String tokenResult = restTemplate.getForObject(wechatMpConfig.getAccessTokenUrl(),String.class); // String tokenResult = restTemplate.getForObject(wechatMpConfig.getAccessTokenUrl(),String.class);
JSONObject jsonObj = JSONObject.parseObject(tokenResult); // JSONObject jsonObj = JSONObject.parseObject(tokenResult);
if (jsonObj == null || !jsonObj.containsKey("access_token")) { // if (jsonObj == null || !jsonObj.containsKey("access_token")) {
return; // return;
} // }
accessToken = jsonObj.get("access_token").toString(); // accessToken = jsonObj.get("access_token").toString();
instance.createCache("accessToken", 6000, TimeUnit.SECONDS); // log.info("获取access_token==>{}", accessToken);
} // instance.createCache("accessToken", 6000, TimeUnit.SECONDS);
// }
// 封装推送内容 // 封装推送内容
JSONObject jsonObject = new JSONObject(); JSONObject jsonObject = new JSONObject();
jsonObject.put("touser",pushMsgEntity.getTouser()); jsonObject.put("touser",pushMsgEntity.getTouser());
@ -57,11 +70,11 @@ public class WechatServiceImpl implements WechatService {
jsonObject.put("url",pushMsgEntity.getUrl()); jsonObject.put("url",pushMsgEntity.getUrl());
JSONObject data = new JSONObject(); JSONObject data = new JSONObject();
data.put("first",pushMsgEntity.getFirst()); data.put("first",pushMsgEntity.getFirst());
data.put("keyword1",pushMsgEntity.getKey1()); data.put("thing1",pushMsgEntity.getKey1());
data.put("keyword2",pushMsgEntity.getKey2()); data.put("character_string2",pushMsgEntity.getKey2());
data.put("keyword3",pushMsgEntity.getKey3()); data.put("character_string3",pushMsgEntity.getKey3());
data.put("keyword4",pushMsgEntity.getKey4()); data.put("character_string4",pushMsgEntity.getKey4());
data.put("keyword5",pushMsgEntity.getKey5()); data.put("time5",pushMsgEntity.getKey5());
data.put("remark",pushMsgEntity.getRemark()); data.put("remark",pushMsgEntity.getRemark());
jsonObject.put("data",data); jsonObject.put("data",data);
HttpHeaders headers = new HttpHeaders(); HttpHeaders headers = new HttpHeaders();

14
user-service/src/main/resources/application-prod.yml

@ -103,3 +103,17 @@ pagehelper:
reasonable: true reasonable: true
support-methods-arguments: true support-methods-arguments: true
params: countSql 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

14
user-service/src/main/resources/application-test.yml

@ -103,3 +103,17 @@ pagehelper:
reasonable: true reasonable: true
support-methods-arguments: true support-methods-arguments: true
params: countSql 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

2
user-service/src/main/resources/application.yml

@ -1,6 +1,6 @@
spring: spring:
profiles: profiles:
active: dev active: prod
servlet: servlet:
multipart: multipart:
max-file-size: 50MB max-file-size: 50MB

10
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.alibaba.fastjson2.JSONObject;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import com.mh.user.job.PushDataToWechatJob;
import com.mh.user.service.wechat.WechatUserInfoService; import com.mh.user.service.wechat.WechatUserInfoService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
@ -38,4 +39,13 @@ public class WechatTest extends UserServiceApplicationTests{
wechatUserInfoService.existsUser(jsonObject); wechatUserInfoService.existsUser(jsonObject);
} }
@Autowired
private PushDataToWechatJob pushDataToWechatJob;
@Test
public void pushWechatMsg()
{
pushDataToWechatJob.pushDataToWechat();
}
} }

42
微信推送模板消息.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
);
Loading…
Cancel
Save