Browse Source

add(backend) [定时任务暂定模块 1.0]

wangxiao 4 years ago
parent
commit
3fb767f108

+ 43 - 9
operation-backend/src/main/java/com/idiot/operationbackend/controller/WeChatController.java

@@ -3,8 +3,10 @@ package com.idiot.operationbackend.controller;
 import com.alibaba.fastjson.JSONObject;
 import com.idiot.operationbackend.entity.Account;
 import com.idiot.operationbackend.entity.SubscribeScene;
+import com.idiot.operationbackend.handler.WeChatMessageFactory;
 import com.idiot.operationbackend.service.facade.AccountService;
 import com.idiot.operationbackend.service.facade.SubscribeSceneService;
+import com.idiot.operationbackend.service.facade.WeChatMessageService;
 import com.idiot.operationbackend.service.facade.WeChatService;
 import com.idiot.operationbackend.support.AccountState;
 import com.idiot.operationbackend.support.Constants;
@@ -25,6 +27,8 @@ import java.io.BufferedInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.util.List;
+import java.util.Map;
+import java.util.Objects;
 
 
 /**
@@ -66,14 +70,7 @@ public class WeChatController {
         logger.info("验证票据事件,param参数依次是nonce:{},timestamp:{},encrypt_type:{},msg_signature:{}",nonce,
                 timestamp,encryptType,msgSignature);
         try {
-            BufferedInputStream bis = new BufferedInputStream(request.getInputStream());
-            ByteArrayOutputStream buf = new ByteArrayOutputStream();
-            int result = bis.read();
-            while(result != -1) {
-                buf.write((byte) result);
-                result = bis.read();
-            }
-            String postData = buf.toString("utf-8");
+            String postData =  readBody(request);;
             logger.info("微信验证票据回调,postData before decry :{}",postData);
             postData = weChatService.decryptMsg(msgSignature,timestamp,nonce,postData);
             logger.info("微信验证票据回调,postData after decry :{}",postData);
@@ -85,7 +82,7 @@ public class WeChatController {
     }
 
 
-    @GetMapping("/authCallBack")
+    @GetMapping("/authCallback")
     @ApiOperation(value = "授权地址回调")
     public void authCallBack(@RequestParam(name = "auth_code") String authCode,
                              @RequestParam(name = "expires_in") String expiresIn,
@@ -149,7 +146,44 @@ public class WeChatController {
     }
 
 
+    @PostMapping("/msgCallback/{appid}")
+    @ApiOperation(value = "确认授权的微信公众号")
+    public String receiveWeChatMessage (@PathVariable String appid,
+                                        HttpServletRequest request) throws Exception {
+        String nonce = request.getParameter("nonce");
+        String timestamp = request.getParameter("timestamp");
+        // 默认aes
+        String encryptType = request.getParameter("encrypt_type");
+        String msgSignature = request.getParameter("msg_signature");
+        logger.info("接受微信事件回调,param参数依次是nonce:{},timestamp:{},encrypt_type:{},msg_signature:{}",nonce,
+                timestamp,encryptType,msgSignature);
+        request.setCharacterEncoding("UTF-8");
+        String postData = readBody(request);
+        logger.info("接受微信事件回调,postData before decry :{}",postData);
+        postData = weChatService.decryptMsg(msgSignature,timestamp,nonce,postData);
+        logger.info("接受微信事件回调,postData after decry :{}",postData);
+        Map<String,String> xmlMap =  weChatService.xmlToMap(postData);
+        String msgType = xmlMap.get("MsgType");
+        xmlMap.put("appId",appid);
+        WeChatMessageService messageService = WeChatMessageFactory.getService(msgType);
+        if (Objects.isNull(messageService)) {
+            logger.error("接受到消息暂无处理类处理:{}",msgType);
+            return Constants.FAIL;
+        }else {
+            return messageService.processMessage(xmlMap);
+        }
+    }
 
 
+    private String readBody (HttpServletRequest request) throws IOException {
+        BufferedInputStream bis = new BufferedInputStream(request.getInputStream());
+        ByteArrayOutputStream buf = new ByteArrayOutputStream();
+        int result = bis.read();
+        while(result != -1) {
+            buf.write((byte) result);
+            result = bis.read();
+        }
+        return  buf.toString("utf-8");
+    }
 
 }

+ 14 - 5
operation-backend/src/main/java/com/idiot/operationbackend/service/facade/AccountService.java

@@ -15,7 +15,7 @@ public interface AccountService extends IService<Account> {
      *  根据授权方appId 保存或更新
      * @author wangxiao
      * @date 14:49 2020/9/12
-     * @param account
+     * @param account account
      * @return int
      */
     boolean saveOrUpdateAccount(Account account);
@@ -25,8 +25,8 @@ public interface AccountService extends IService<Account> {
      *  更新公众号的userId
      * @author wangxiao
      * @date 17:05 2020/9/12
-     * @param accountId
-     * @param userId
+     * @param accountId accountId
+     * @param userId userId
      * @return boolean
      */
     boolean updateUserIdByAccount(String accountId,String userId);
@@ -37,7 +37,7 @@ public interface AccountService extends IService<Account> {
      *  查询当前账号下的公众号 (不包含子账号)
      * @author wangxiao
      * @date 17:57 2020/9/12
-     * @param userId
+     * @param userId userId
      * @return java.util.List<com.idiot.operationbackend.entity.Account>
      */
     List<Account> queryAccountByUserId(String userId);
@@ -47,7 +47,7 @@ public interface AccountService extends IService<Account> {
      *  查询一批账号下的公众号 (不包含子账号)
      * @author wangxiao
      * @date 17:59 2020/9/12
-     * @param userIds
+     * @param userIds userIds
      * @return java.util.List<com.idiot.operationbackend.entity.Account>
      */
     List<Account> queryAccountBuSubUserIds(List<String> userIds);
@@ -59,4 +59,13 @@ public interface AccountService extends IService<Account> {
      * @return java.util.List<com.idiot.operationbackend.entity.Account>
      */
     List<Account> queryAccount();
+
+    /**
+     *  查询公众号
+     * @author wangxiao
+     * @date 17:19 2020/9/24
+     * @param appId appId
+     * @return com.idiot.operationbackend.entity.Account
+     */
+    Account queryByAppId (String appId);
 }

+ 5 - 5
operation-backend/src/main/java/com/idiot/operationbackend/service/facade/WeChatMessageService.java

@@ -9,9 +9,9 @@ import java.net.URLEncoder;
 import java.util.Map;
 
 /**
- * @author: wang xiao
- * @description: WeChatMessageService
- * @date: Created in 11:31 2020/6/18
+ * 微信消息处理类
+ * @author wang xiao
+ * @date Created in 11:31 2020/6/18
  */
 public interface WeChatMessageService extends InitializingBean {
 
@@ -19,7 +19,7 @@ public interface WeChatMessageService extends InitializingBean {
      *  处理消息回调
      * @author wangxiao
      * @date 11:33 2020/6/18
-     * @param param
+     * @param param param
      * @return java.lang.String
      */
     String processMessage(Map<String,String> param);
@@ -29,7 +29,7 @@ public interface WeChatMessageService extends InitializingBean {
      *  默认不支持消息
      * @author wangxiao
      * @date 15:27 2020/7/1 
-     * @param param
+     * @param param param
      * @return java.lang.String
      */
     default String unSupportedMessage(Map<String,String> param) {

+ 5 - 0
operation-backend/src/main/java/com/idiot/operationbackend/service/impl/AccountServiceImpl.java

@@ -59,4 +59,9 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account>
     public List<Account> queryAccount() {
         return list(Wrappers.<Account>lambdaQuery().eq(Account::getState,"1"));
     }
+
+    @Override
+    public Account queryByAppId(String appId) {
+        return getOne(Wrappers.<Account>lambdaQuery().eq(Account::getAuthorizerAppId,appId),false);
+    }
 }

+ 9 - 9
operation-backend/src/main/java/com/idiot/operationbackend/service/impl/EventMessageServiceImpl.java

@@ -16,9 +16,9 @@ import java.util.Map;
 import java.util.function.Function;
 
 /**
- * @author: wang xiao
- * @description: 微信 event 消息
- * @date: Created in 14:17 2020/6/18
+ * 微信 event 消息
+ * @author wang xiao
+ * @date Created in 14:17 2020/6/18
  */
 @Service
 public class EventMessageServiceImpl implements WeChatMessageService {
@@ -56,7 +56,7 @@ public class EventMessageServiceImpl implements WeChatMessageService {
     /**
      * 所有事件函数 集合
      */
-    private Map<String, Function<Map<String,String>,String> > eventMap = new HashMap<>();
+    private final Map<String, Function<Map<String,String>,String> > eventMap = new HashMap<>();
 
 
     /**
@@ -64,7 +64,7 @@ public class EventMessageServiceImpl implements WeChatMessageService {
      * 扫描二维码 (用户未关注时,进行关注后的事件推送)
      * @author wangxiao
      * @date 18:54 2020/7/1
-     * @param param
+     * @param param param
      * @return java.lang.String
      */
     private String subscribeEvent (Map<String,String> param) {
@@ -86,7 +86,7 @@ public class EventMessageServiceImpl implements WeChatMessageService {
      *  扫描二维码 (用户关注时)
      * @author wangxiao
      * @date 18:54 2020/7/1
-     * @param param
+     * @param param param
      * @return java.lang.String
      */
     private String scanEvent (Map<String,String> param) {
@@ -102,7 +102,7 @@ public class EventMessageServiceImpl implements WeChatMessageService {
      *  LOCATION 位置上报
      * @author wangxiao
      * @date 19:09 2020/7/1
-     * @param param
+     * @param param param
      * @return java.lang.String
      */
     private String locationEvent (Map<String,String> param) {
@@ -118,7 +118,7 @@ public class EventMessageServiceImpl implements WeChatMessageService {
      *  CLICK 自定义菜单
      * @author wangxiao
      * @date 19:09 2020/7/1
-     * @param param
+     * @param param param
      * @return java.lang.String
      */
     private String clickEvent (Map<String,String> param) {
@@ -132,7 +132,7 @@ public class EventMessageServiceImpl implements WeChatMessageService {
      *  VIEW 点击菜单跳转链接
      * @author wangxiao
      * @date 19:09 2020/7/1
-     * @param param
+     * @param param param
      * @return java.lang.String
      */
     private String viewEvent (Map<String,String> param) {

+ 0 - 1
operation-backend/src/main/java/com/idiot/operationbackend/service/impl/FansMsgServiceImpl.java

@@ -3,7 +3,6 @@ package com.idiot.operationbackend.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.idiot.operationbackend.entity.FansMsg;
 import com.idiot.operationbackend.mappers.FansMsgMapper;

+ 30 - 5
operation-backend/src/main/java/com/idiot/operationbackend/service/impl/TextMessageServiceImpl.java

@@ -2,26 +2,51 @@ package com.idiot.operationbackend.service.impl;
 
 
 
+import com.idiot.operationbackend.entity.Account;
+import com.idiot.operationbackend.entity.FansMsg;
 import com.idiot.operationbackend.handler.WeChatMessageFactory;
+import com.idiot.operationbackend.service.facade.AccountService;
+import com.idiot.operationbackend.service.facade.FansMsgService;
 import com.idiot.operationbackend.service.facade.WeChatMessageService;
-import com.idiot.operationbackend.service.facade.WeChatService;
+import com.idiot.operationbackend.support.Constants;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.Map;
 
 /**
- * @author: wang xiao
- * @description:
- * @date: Created in 14:29 2020/6/18
+ * 文本消息
+ * @author wang xiao
+ * @date Created in 14:29 2020/6/18
  */
 @Service
 public class TextMessageServiceImpl implements WeChatMessageService {
 
+    @Autowired
+    private FansMsgService fansMsgService;
+
+    @Autowired
+    private AccountService accountService;
+
+
     @Override
     public String processMessage(Map<String, String> param) {
+        String appId = param.get("appId");
+        Account account =  accountService.queryByAppId(appId);
         String content = param.get("Content");
         String msgId = param.get("MsgId");
-        return unSupportedMessage(param);
+        String fromUserName = param.get("FromUserName");
+        String createTime = param.get("CreateTime");
+        FansMsg fansMsg = new FansMsg();
+        fansMsg.setAccountId(appId);
+        fansMsg.setCreateTime(Long.parseLong(createTime));
+        fansMsg.setAccountId(account.getId());
+        fansMsg.setContent(content);
+        fansMsg.setFromUserName(fromUserName);
+        fansMsg.setMsgId(msgId);
+        fansMsg.setMsgType("text");
+        fansMsgService.save(fansMsg);
+        return Constants.SUCCESS;
     }
 
 

+ 1 - 0
operation-backend/src/main/java/com/idiot/operationbackend/support/Constants.java

@@ -13,6 +13,7 @@ import java.util.Locale;
 public class Constants {
 
     public static final String SUCCESS = "success";
+    public static final String FAIL = "fail";
 
     public static final Locale DEFAULT_LOCALE = Locale.CHINA;
 

+ 2 - 2
operation-backend/src/main/resources/application-dev.yml

@@ -44,8 +44,8 @@ wechat:
     # 开发平台配置token
     token: xxxxxx
     # authCallBackUrl 授权回调地址
-    authCallBack: https://xxxx/wechat/authCallBack
+    authCallBack: https://xxxx/wechat/authCallback
     # 消息接受地址
-    msgCallBack: https://xxxx/wechat/msgCallBack
+    msgCallBack: https://xxxx/wechat/msgCallback
 # 授权确认界面地址 前端界面路由地址
 confirm-domain: https://www.xxxx

+ 2 - 2
operation-backend/src/main/resources/application-test.yml

@@ -45,8 +45,8 @@ wechat:
     # 开发平台配置token
     token: eNoUNRR4e7V85KLb
     # authCallBackUrl 授权回调地址
-    authCallBack: http://luojigou.vip/wxoperate/wechat/authCallBack
+    authCallBack: http://luojigou.vip/wxoperate/wechat/authCallback
     # 消息接受地址
-    msgCallBack: http://luojigou.vip/wxoperate/wechat/msgCallBack
+    msgCallBack: http://luojigou.vip/wxoperate/wechat/msgCallback
 # 授权确认界面地址 前端界面路由地址
 confirm-domain: https://www.xxxx