添加推送信息

This commit is contained in:
yangjun 2023-12-07 08:16:09 +08:00
parent 1058aca925
commit 7c52002edb
13 changed files with 433 additions and 34 deletions

View File

@ -173,4 +173,17 @@ public class KcBdgxbcopyController extends JeecgController<KcBdgxbcopy, IKcBdgxb
return super.importExcel(request, response, KcBdgxbcopy.class);
}
@ApiOperation(value="根据姓名获取openid", notes="根据姓名获取openid")
@GetMapping(value = "/getOpenIdByName")
public Result<KcBdgxbcopy> getOpenIdByName(@RequestParam(name="name",required=true) String name) {
KcBdgxbcopy kcBdgxbcopy = kcBdgxbcopyService.getOpenIdByName(name);
// KcBdgxbcopy kcBdgxbcopy = new KcBdgxbcopy();
// kcBdgxbcopy.setOpenid("oak6lwKGlGQQwt83nuynZnP4HUR4");
if(kcBdgxbcopy==null) {
return Result.error("未找到对应数据");
}
return Result.OK(kcBdgxbcopy);
}
}

View File

@ -21,4 +21,6 @@ public interface KcBdgxbcopyMapper extends BaseMapper<KcBdgxbcopy> {
void saveStudentMrtx(KcBdgxbcopy kcBdgxbcopy);
void saveTeacherMrtx(KcBdgxbcopy kcBdgxbcopy);
KcBdgxbcopy getOpenIdByName(@Param("name") String name);
}

View File

@ -185,5 +185,9 @@
kt.skjs,
WEEK
</insert>
<select id="getOpenIdByName" resultType="org.jeecg.modules.kc.KcBdgxbcopy.entity.KcBdgxbcopy">
SELECT a.* from choice.bdgxbcopy a
left join xxhbuser b on a.userid = b.gh where b.xm = #{name} and a.openid is not null limit 1
</select>
</mapper>

View File

@ -18,4 +18,6 @@ public interface IKcBdgxbcopyService extends IService<KcBdgxbcopy> {
void saveStudentMrtx(KcBdgxbcopy kcBdgxbcopy);
void saveTeacherMrtx(KcBdgxbcopy kcBdgxbcopy);
KcBdgxbcopy getOpenIdByName(String name);
}

View File

@ -35,4 +35,9 @@ public class KcBdgxbcopyServiceImpl extends ServiceImpl<KcBdgxbcopyMapper, KcBdg
public void saveTeacherMrtx(KcBdgxbcopy kcBdgxbcopy) {
baseMapper.saveTeacherMrtx(kcBdgxbcopy);
}
@Override
public KcBdgxbcopy getOpenIdByName(String name) {
return baseMapper.getOpenIdByName(name);
}
}

View File

@ -0,0 +1,243 @@
package org.jeecg.modules.kc.kcWechatSendLog.controller;
import java.util.*;
import java.util.stream.Collectors;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.alibaba.fastjson.JSONObject;
import com.xkcoding.http.HttpUtil;
import org.apache.commons.lang3.StringUtils;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.util.DateUtils;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.kc.KcBdgxbcopy.entity.KcBdgxbcopy;
import org.jeecg.modules.kc.kcWechatSendLog.entity.KcWechatSendLog;
import org.jeecg.modules.kc.kcWechatSendLog.service.IKcWechatSendLogService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.modules.kc.ktgl.entity.KcKetangbiao;
import org.jeecg.modules.system.entity.SysUser;
import org.jeecg.modules.wxgzh.WeChatTemplateMsg;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
import org.jeecg.common.system.base.controller.JeecgController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
import com.alibaba.fastjson.JSON;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.jeecg.common.aspect.annotation.AutoLog;
import org.apache.shiro.authz.annotation.RequiresPermissions;
/**
* @Description: 手动微信推送
* @Author: jeecg-boot
* @Date: 2023-12-06
* @Version: V1.0
*/
@Api(tags="手动微信推送")
@RestController
@RequestMapping("/kcWechatSendLog/kcWechatSendLog")
@Slf4j
public class KcWechatSendLogController extends JeecgController<KcWechatSendLog, IKcWechatSendLogService> {
@Autowired
private IKcWechatSendLogService kcWechatSendLogService;
/**
* 分页列表查询
*
* @param kcWechatSendLog
* @param pageNo
* @param pageSize
* @param req
* @return
*/
//@AutoLog(value = "手动微信推送-分页列表查询")
@ApiOperation(value="手动微信推送-分页列表查询", notes="手动微信推送-分页列表查询")
@GetMapping(value = "/list")
public Result<IPage<KcWechatSendLog>> queryPageList(KcWechatSendLog kcWechatSendLog,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<KcWechatSendLog> queryWrapper = QueryGenerator.initQueryWrapper(kcWechatSendLog, req.getParameterMap());
Page<KcWechatSendLog> page = new Page<KcWechatSendLog>(pageNo, pageSize);
IPage<KcWechatSendLog> pageList = kcWechatSendLogService.page(page, queryWrapper);
return Result.OK(pageList);
}
/**
* 添加
*
* @param kcWechatSendLog
* @return
*/
@AutoLog(value = "手动微信推送-添加")
@ApiOperation(value="手动微信推送-添加", notes="手动微信推送-添加")
@PostMapping(value = "/add")
public Result<String> add(@RequestBody KcWechatSendLog kcWechatSendLog) {
kcWechatSendLogService.save(kcWechatSendLog);
sendWxmessage(kcWechatSendLog);
return Result.OK("添加成功!");
}
// appId
private static final String appId = "wx59920eb69d611d7f";//东师
// appIdSecret
private static final String appIdSecret = "bf0c19af0e956f447ede4dd902ea63b7";//东师
//微信通知点击后跳转的页面
private static final String domainTo = "https://zxkccx.webvpn.nenu.edu.cn";
public void sendWxmessage(KcWechatSendLog kcWechatSendLog) {
String openId = kcWechatSendLog.getOpenid();//曹老师账号
System.out.println("openId:"+openId+"");
if(StringUtils.isNotEmpty(openId)){
try {
String urlToken = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+ appId +"&secret=" + appIdSecret;
System.out.println("urlToken "+ urlToken);
String res = HttpUtil.get(urlToken);
JSONObject jsonObjectToken = JSONObject.parseObject(res);
System.out.println("jsonObjectToken{}"+ jsonObjectToken);
String accessToken = jsonObjectToken.getString("access_token");
System.out.println("accessToken{}"+ accessToken);
// 模板参数
Map<String, WeChatTemplateMsg> sendMag = new HashMap<String, WeChatTemplateMsg>();
// 微信的基础accessToken
String url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken;
// 1xx老师你好您本学期2023秋听课要求为5次当前实际听课次数3次请尽快完成本学期的听课任务
// 如需听评课请点击课程信息中心链接
sendMag.put("thing2", new WeChatTemplateMsg(kcWechatSendLog.getTeacherName()));//授课老师
sendMag.put("time3", new WeChatTemplateMsg(DateUtils.formatDate(new Date(),"yyyy-MM-dd")));//上课时间
sendMag.put("const1", new WeChatTemplateMsg("应听"+kcWechatSendLog.getYtkcs()+"次,实际听课:"+kcWechatSendLog.getSjtkcs()+""));//课程名称
System.out.println("getSkjs : " + kcWechatSendLog.getTeacherName() + ", getSkrq: " );
RestTemplate restTemplate = new RestTemplate();
//拼接base参数
Map<String, Object> sendBody = new HashMap<>();
sendBody.put("touser", openId); // openId
sendBody.put("url", domainTo); // 点击模板信息跳转地址
sendBody.put("topcolor", "#FF0000"); // 顶色
sendBody.put("data", sendMag); // 模板参数
sendBody.put("template_id", "zybkRmDuTePoC67FViLZGo3O2f5Q-t23M0ILnCH_0K8"); // 模板Id
ResponseEntity<String> forEntity = restTemplate.postForEntity(url, sendBody, String.class);
JSONObject jsonObject2 = JSONObject.parseObject(forEntity.getBody());
System.out.println("jsonObject2 : " + jsonObject2);
String messageCode = jsonObject2.getString("errcode");
String msgId = jsonObject2.getString("msgid");
System.out.println("messageCode : " + messageCode + ", msgId: " +msgId);
kcWechatSendLog.setRemark(jsonObject2.toString());
kcWechatSendLogService.updateById(kcWechatSendLog);
}catch (Exception e) {
e.printStackTrace();
kcWechatSendLog.setRemark(e.getMessage());
kcWechatSendLogService.updateById(kcWechatSendLog);
}
}else{
kcWechatSendLog.setRemark("未获取到openid");
kcWechatSendLogService.updateById(kcWechatSendLog);
}
}
/**
* 编辑
*
* @param kcWechatSendLog
* @return
*/
@AutoLog(value = "手动微信推送-编辑")
@ApiOperation(value="手动微信推送-编辑", notes="手动微信推送-编辑")
@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
public Result<String> edit(@RequestBody KcWechatSendLog kcWechatSendLog) {
kcWechatSendLogService.updateById(kcWechatSendLog);
return Result.OK("编辑成功!");
}
/**
* 通过id删除
*
* @param id
* @return
*/
@AutoLog(value = "手动微信推送-通过id删除")
@ApiOperation(value="手动微信推送-通过id删除", notes="手动微信推送-通过id删除")
@DeleteMapping(value = "/delete")
public Result<String> delete(@RequestParam(name="id",required=true) String id) {
kcWechatSendLogService.removeById(id);
return Result.OK("删除成功!");
}
/**
* 批量删除
*
* @param ids
* @return
*/
@AutoLog(value = "手动微信推送-批量删除")
@ApiOperation(value="手动微信推送-批量删除", notes="手动微信推送-批量删除")
@DeleteMapping(value = "/deleteBatch")
public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
this.kcWechatSendLogService.removeByIds(Arrays.asList(ids.split(",")));
return Result.OK("批量删除成功!");
}
/**
* 通过id查询
*
* @param id
* @return
*/
//@AutoLog(value = "手动微信推送-通过id查询")
@ApiOperation(value="手动微信推送-通过id查询", notes="手动微信推送-通过id查询")
@GetMapping(value = "/queryById")
public Result<KcWechatSendLog> queryById(@RequestParam(name="id",required=true) String id) {
KcWechatSendLog kcWechatSendLog = kcWechatSendLogService.getById(id);
if(kcWechatSendLog==null) {
return Result.error("未找到对应数据");
}
return Result.OK(kcWechatSendLog);
}
/**
* 导出excel
*
* @param request
* @param kcWechatSendLog
*/
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, KcWechatSendLog kcWechatSendLog) {
return super.exportXls(request, kcWechatSendLog, KcWechatSendLog.class, "手动微信推送");
}
/**
* 通过excel导入数据
*
* @param request
* @param response
* @return
*/
@RequiresPermissions("kcWechatSendLog:kc_wechat_send_log:importExcel")
@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
return super.importExcel(request, response, KcWechatSendLog.class);
}
}

View File

@ -0,0 +1,84 @@
package org.jeecg.modules.kc.kcWechatSendLog.entity;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableLogic;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecg.common.aspect.annotation.Dict;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* @Description: 手动微信推送
* @Author: jeecg-boot
* @Date: 2023-12-06
* @Version: V1.0
*/
@Data
@TableName("kc_wechat_send_log")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="kc_wechat_send_log对象", description="手动微信推送")
public class KcWechatSendLog implements Serializable {
private static final long serialVersionUID = 1L;
/**主键*/
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "主键")
private java.lang.String id;
/**创建人*/
@ApiModelProperty(value = "创建人")
private java.lang.String createBy;
/**创建日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "创建日期")
private java.util.Date createTime;
/**更新人*/
@ApiModelProperty(value = "更新人")
private java.lang.String updateBy;
/**更新日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "更新日期")
private java.util.Date updateTime;
/**所属部门*/
@ApiModelProperty(value = "所属部门")
private java.lang.String sysOrgCode;
/**openid*/
@Excel(name = "openid", width = 15)
@ApiModelProperty(value = "openid")
private java.lang.String openid;
/**教师姓名*/
@Excel(name = "教师姓名", width = 15)
@ApiModelProperty(value = "教师姓名")
private java.lang.String teacherName;
/**学期学年*/
@Excel(name = "学期学年", width = 15)
@ApiModelProperty(value = "学期学年")
private java.lang.String xqxn;
/**应听课次数*/
@Excel(name = "应听课次数", width = 15)
@ApiModelProperty(value = "应听课次数")
private java.lang.String ytkcs;
/**实际听课次数*/
@Excel(name = "实际听课次数", width = 15)
@ApiModelProperty(value = "实际听课次数")
private java.lang.String sjtkcs;
/**推送id*/
@Excel(name = "推送id", width = 15)
@ApiModelProperty(value = "推送id")
private java.lang.String msgid;
private String remark;
}

View File

@ -0,0 +1,17 @@
package org.jeecg.modules.kc.kcWechatSendLog.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.kc.kcWechatSendLog.entity.KcWechatSendLog;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @Description: 手动微信推送
* @Author: jeecg-boot
* @Date: 2023-12-06
* @Version: V1.0
*/
public interface KcWechatSendLogMapper extends BaseMapper<KcWechatSendLog> {
}

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.jeecg.modules.kc.kcWechatSendLog.mapper.KcWechatSendLogMapper">
</mapper>

View File

@ -0,0 +1,14 @@
package org.jeecg.modules.kc.kcWechatSendLog.service;
import org.jeecg.modules.kc.kcWechatSendLog.entity.KcWechatSendLog;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @Description: 手动微信推送
* @Author: jeecg-boot
* @Date: 2023-12-06
* @Version: V1.0
*/
public interface IKcWechatSendLogService extends IService<KcWechatSendLog> {
}

View File

@ -0,0 +1,19 @@
package org.jeecg.modules.kc.kcWechatSendLog.service.impl;
import org.jeecg.modules.kc.kcWechatSendLog.entity.KcWechatSendLog;
import org.jeecg.modules.kc.kcWechatSendLog.mapper.KcWechatSendLogMapper;
import org.jeecg.modules.kc.kcWechatSendLog.service.IKcWechatSendLogService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
/**
* @Description: 手动微信推送
* @Author: jeecg-boot
* @Date: 2023-12-06
* @Version: V1.0
*/
@Service
public class KcWechatSendLogServiceImpl extends ServiceImpl<KcWechatSendLogMapper, KcWechatSendLog> implements IKcWechatSendLogService {
}

View File

@ -501,7 +501,8 @@
${ew.customSqlSegment}
</select>
<select id="getOpenId" resultType="org.jeecg.modules.kc.qa.entity.KcEvaluation">
SELECT * from choice.bdgxbcopy where
<select id="getOpenId" resultType="org.jeecg.modules.kc.KcBdgxbcopy.entity.KcBdgxbcopy">
SELECT a.* from choice.bdgxbcopy a
left join xxhbuser b on a.userid = b.gh where b.xm = #{username} and a.openid is not null limit 1
</select>
</mapper>

View File

@ -115,9 +115,9 @@ public class KcEvaluationServiceImpl extends ServiceImpl<KcEvaluationMapper, KcE
changeTingKeTongJi.updateTingKeTongJiAndPingKeByUserId(String.valueOf(kcEvaluation.getUpuserid()),kcEvaluation.getMinkcid());
// String ketangbiaoid = kcEvaluation.getKetangbiaoid();//课堂表id
// KcKetangbiao kcKetangbiao = kcKetangbiaoService.getById(ketangbiaoid);
// sendWxmessage(kcKetangbiao);
String ketangbiaoid = kcEvaluation.getMinkcid();//课堂表id
KcKetangbiao kcKetangbiao = kcKetangbiaoService.getById(ketangbiaoid);
sendWxmessage(kcKetangbiao);
}
@Override
@ -174,17 +174,20 @@ public class KcEvaluationServiceImpl extends ServiceImpl<KcEvaluationMapper, KcE
public void sendWxmessage(KcKetangbiao kcKetangbiao) {
String skjs = kcKetangbiao.getSkjs();
QueryWrapper<SysUser> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("realname",skjs);
List<SysUser> sysUserList = sysUserService.list(queryWrapper);
// QueryWrapper<SysUser> queryWrapper = new QueryWrapper<>();
// queryWrapper.eq("realname",skjs);
// List<SysUser> sysUserList = sysUserService.list(queryWrapper);
String openId = "";
for(SysUser SysUserPar : sysUserList){
KcBdgxbcopy kcBdgxbcopy=baseMapper.getOpenId(SysUserPar.getUsername());
try{
System.out.println("skjs:"+skjs+"");
KcBdgxbcopy kcBdgxbcopy=baseMapper.getOpenId(skjs);
if(kcBdgxbcopy !=null){
System.out.println("kcBdgxbcopy.getOpenid():"+kcBdgxbcopy.getOpenid()+"");
openId = kcBdgxbcopy.getOpenid();
break;
}
}
}catch (Exception e){e.printStackTrace();}
System.out.println("openId:"+openId+"");
// openId = "oak6lwKGlGQQwt83nuynZnP4HUR4";//曹老师账号
if(StringUtils.isNotEmpty(openId)){
String urlToken = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+ appId +"&secret=" + appIdSecret;
System.out.println("urlToken "+ urlToken);
@ -197,29 +200,15 @@ public class KcEvaluationServiceImpl extends ServiceImpl<KcEvaluationMapper, KcE
// 模板参数
Map<String, WeChatTemplateMsg> sendMag = new HashMap<String, WeChatTemplateMsg>();
// openId = "oak6lwKGlGQQwt83nuynZnP4HUR4";//曹老师账号
// 微信的基础accessToken
String url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken;
/**
* 其他模板可以从模板库中自己添加
* 模板ID
* KtWw0lwQ8FOgJdKgrmya0eoafGkMfMN8ECdZs8oSJys
* 开发者调用模板消息接口时需提供模板ID
* 标题 上课提醒
* 行业 教育 - 院校
* 详细内容
* {{first.DATA}}
* 课程{{keyword1.DATA}}
* 时间{{keyword2.DATA}}
* 地点{{keyword3.DATA}}
* {{remark.DATA}}
*/
sendMag.put("first", new WeChatTemplateMsg("有课程即将开始"));
sendMag.put("keyword1", new WeChatTemplateMsg("线性代数"));
sendMag.put("keyword2", new WeChatTemplateMsg("[1,2节] 08:30-10:00"));
sendMag.put("keyword3", new WeChatTemplateMsg("上课地点N304"));
sendMag.put("remark", new WeChatTemplateMsg("请开发者为用户提供定制提醒的选项,以免打扰。"));
// xx老师你好您于2023.12.01在逸夫楼101室任教的马克思列宁主义课程收到一条听课评价评价分数为5分满分5分
// 如需查看请点击课程信息中心链接
System.out.println("getSkjs : " + kcKetangbiao.getSkjs() + ", getSkrq: " +kcKetangbiao.getSkrq()+ ", getKcmc: " +kcKetangbiao.getKcmc());
sendMag.put("thing10", new WeChatTemplateMsg(kcKetangbiao.getSkjs()));//授课老师
sendMag.put("time4", new WeChatTemplateMsg(kcKetangbiao.getSkrq()));//上课时间
sendMag.put("thing3", new WeChatTemplateMsg(kcKetangbiao.getKcmc()));//课程名称
sendMag.put("thing7", new WeChatTemplateMsg("评价分数为5分满分5分"));//课后作业
RestTemplate restTemplate = new RestTemplate();
//拼接base参数
Map<String, Object> sendBody = new HashMap<>();
@ -227,9 +216,10 @@ public class KcEvaluationServiceImpl extends ServiceImpl<KcEvaluationMapper, KcE
sendBody.put("url", domainTo); // 点击模板信息跳转地址
sendBody.put("topcolor", "#FF0000"); // 顶色
sendBody.put("data", sendMag); // 模板参数
sendBody.put("template_id", templateId); // 模板Id
sendBody.put("template_id", "-XCApC7nfBDmwEqP8b1WC1BfF3mXjtSTRPwUTJRtz2I"); // 模板Id
ResponseEntity<String> forEntity = restTemplate.postForEntity(url, sendBody, String.class);
JSONObject jsonObject2 = JSONObject.parseObject(forEntity.getBody());
System.out.println("jsonObject2 : " + jsonObject2);
String messageCode = jsonObject2.getString("errcode");
String msgId = jsonObject2.getString("msgid");
System.out.println("messageCode : " + messageCode + ", msgId: " +msgId);