| | |
| | | |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.web.bind.annotation.GetMapping; |
| | | import org.springframework.web.bind.annotation.PostMapping; |
| | | import org.springframework.web.bind.annotation.RequestMapping; |
| | | import org.springframework.web.bind.annotation.RequestParam; |
| | | import org.springframework.web.bind.annotation.RestController; |
| | | import com.ruoyi.common.core.controller.BaseController; |
| | | import com.ruoyi.common.core.domain.AjaxResult; |
| | | import com.ruoyi.common.config.WechatConfig; |
| | | import com.ruoyi.common.utils.WechatUtils; |
| | | import com.ruoyi.common.annotation.Anonymous; |
| | | import com.ruoyi.common.utils.StringUtils; |
| | | import com.ruoyi.system.domain.SysTask; |
| | | import com.ruoyi.system.domain.SysTaskEmergency; |
| | | import com.ruoyi.system.mapper.SysTaskMapper; |
| | | import com.ruoyi.system.mapper.SysTaskEmergencyMapper; |
| | | import com.ruoyi.system.mapper.SysUserMapper; |
| | | import com.ruoyi.common.core.domain.entity.SysUser; |
| | | import com.ruoyi.common.utils.DateUtils; |
| | | import com.ruoyi.system.service.IWechatTaskNotifyService; |
| | | import com.ruoyi.system.service.IWechatAccessTokenService; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * 微信接口Controller |
| | |
| | | |
| | | @Autowired |
| | | private WechatConfig wechatConfig; |
| | | |
| | | @Autowired |
| | | private SysTaskMapper sysTaskMapper; |
| | | |
| | | @Autowired |
| | | private SysTaskEmergencyMapper sysTaskEmergencyMapper; |
| | | |
| | | @Autowired |
| | | private SysUserMapper sysUserMapper; |
| | | |
| | | @Autowired |
| | | private IWechatTaskNotifyService wechatTaskNotifyService; |
| | | |
| | | @Autowired |
| | | private IWechatAccessTokenService wechatAccessTokenService; |
| | | |
| | | /** |
| | | * 获取微信AccessToken |
| | | * 获取微信AccessToken(使用应用级缓存) |
| | | */ |
| | | @GetMapping("/accessToken") |
| | | public AjaxResult getAccessToken() { |
| | | try { |
| | | String accessToken = WechatUtils.getAccessToken( |
| | | wechatConfig.getAppId(), |
| | | wechatConfig.getAppSecret() |
| | | ); |
| | | String accessToken = wechatAccessTokenService.getAppAccessToken(); |
| | | if (accessToken == null || accessToken.isEmpty()) { |
| | | return error("获取微信AccessToken失败"); |
| | | } |
| | |
| | | return error("获取微信AccessToken异常:" + e.getMessage()); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 获取微信配置信息(匿名访问) |
| | | * 返回前端需要的配置信息,如订阅消息模板ID等 |
| | | */ |
| | | @Anonymous |
| | | @GetMapping("/config") |
| | | public AjaxResult getConfig() { |
| | | Map<String, String> config = new HashMap<>(); |
| | | config.put("taskNotifyTemplateId", wechatConfig.getTaskNotifyTemplateId()); |
| | | config.put("taskDetailPage", wechatConfig.getTaskDetailPage()); |
| | | return success(config); |
| | | } |
| | | |
| | | /** |
| | | * 匿名接口:根据任务ID手动触发一次任务微信通知 |
| | | * 方便通过Postman调试,前提是任务已有执行人/创建人并绑定了openId |
| | | */ |
| | | @Anonymous |
| | | @PostMapping("/task/notify") |
| | | public AjaxResult notifyTaskByWechat(@RequestParam("taskId") Long taskId) { |
| | | if (taskId == null) { |
| | | return error("任务ID不能为空"); |
| | | } |
| | | |
| | | SysTask task = sysTaskMapper.selectSysTaskByTaskId(taskId); |
| | | if (task == null) { |
| | | return error("任务不存在"); |
| | | } |
| | | |
| | | // 简化:给任务创建人发一条(如果绑定了openId),方便快速验证模板和跳转 |
| | | if (task.getCreatorId() == null) { |
| | | return error("任务未指定创建人"); |
| | | } |
| | | |
| | | SysUser creator = sysUserMapper.selectUserById(task.getCreatorId()); |
| | | if (creator == null || StringUtils.isEmpty(creator.getOpenId())) { |
| | | return error("创建人未绑定微信openId"); |
| | | } |
| | | |
| | | // 调用统一的微信通知服务 |
| | | List<Long> userIds = new ArrayList<>(); |
| | | userIds.add(task.getCreatorId()); |
| | | int successCount = wechatTaskNotifyService.sendTaskNotifyMessage(taskId, userIds); |
| | | |
| | | if (successCount == 0) { |
| | | return error("微信通知发送失败"); |
| | | } |
| | | |
| | | return success("已触发微信通知,成功发送条数:" + successCount); |
| | | } |
| | | } |