Переглянути джерело

Merge branch 'usky-zyj' of uskycloud/usky-modules into server-165

James 11 місяців тому
батько
коміт
fa64ae3c0c

+ 5 - 5
service-iot/service-iot-api/src/main/java/com/usky/iot/RemoteMceService.java

@@ -1,22 +1,22 @@
 package com.usky.iot;
 
 import com.usky.common.core.bean.ApiResult;
-import com.usky.iot.factory.RemoteMceFallbackFactory;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 
 /**
  * @author han
  * @date 2024/04/26 14:07
  */
-@FeignClient(contextId = "remoteMceService", value = "service-iot", fallbackFactory =
-        RemoteMceFallbackFactory.class)
+@FeignClient(contextId = "remoteMceService", value = "service-iot")
 public interface RemoteMceService {
     /**
      * 新增消息
      *
      * @return 消息结果
      */
-    @PostMapping("/addMce")
-    ApiResult<Void> addMce(String mceReceive);
+    @RequestMapping(value = "addMce")
+    ApiResult<Void> addMce(@RequestParam(value = "mceReceive",required = false) String mceReceive);
 }

+ 17 - 17
service-iot/service-iot-api/src/main/java/com/usky/iot/factory/RemoteMceFallbackFactory.java

@@ -13,20 +13,20 @@ import org.springframework.stereotype.Component;
  * @author han
  * @date 2024/04/02 15:07
  */
-@Component
-public class RemoteMceFallbackFactory implements FallbackFactory<RemoteMceService> {
-    private static final Logger log = LoggerFactory.getLogger(RemoteMceFallbackFactory.class);
-
-    @Override
-    public RemoteMceService create(Throwable throwable)
-    {
-        log.error("iot服务调用失败:{}", throwable.getMessage());
-        return new RemoteMceService()
-        {
-            @Override
-            public ApiResult<Void> addMce(String mceReceive) {
-                throw new FeignBadRequestException(500,"新增消息异常"+throwable.getMessage());
-            }
-        };
-    }
-}
+//@Component
+//public class RemoteMceFallbackFactory implements FallbackFactory<RemoteMceService> {
+//    private static final Logger log = LoggerFactory.getLogger(RemoteMceFallbackFactory.class);
+//
+//    @Override
+//    public RemoteMceService create(Throwable throwable)
+//    {
+//        log.error("iot服务调用失败:{}", throwable.getMessage());
+//        return new RemoteMceService()
+//        {
+//            @Override
+//            public ApiResult<Void> addMce(String mceReceive) {
+//                throw new FeignBadRequestException(500,"新增消息异常"+throwable.getMessage());
+//            }
+//        };
+//    }
+//}

+ 7 - 0
service-iot/service-iot-biz/pom.xml

@@ -71,6 +71,13 @@
             <artifactId>weixin-java-mp</artifactId>
             <version>4.3.0</version>
         </dependency>
+        <dependency>
+            <groupId>net.sf.json-lib</groupId>
+            <artifactId>json-lib</artifactId>
+            <version>2.2.3</version>
+            <classifier>jdk15</classifier>
+        </dependency>
+
     </dependencies>
 
     <build>

+ 2 - 2
service-iot/service-iot-biz/src/main/java/com/usky/iot/constant/constant.java

@@ -18,9 +18,9 @@ public class constant {
     // 微信公众号消息推送地址
     public static final String WE_CHAT_REQUEST_URL = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=%s";
     // 微信公众号推送消息模板id
-    public static final String WE_CHAT_TEMPLATE_ID = "jbgHt8W8RNpRN2KZwvAMty40iiZU2sa9dqnFXOsCvqw";
+    public static final String WE_CHAT_TEMPLATE_ID = "FmrNuMzgh0E8bWg1j8a2R3zTmRarHYtZ72TSzPrF9Iw";
     // 微信公众号的消息回调地址(这儿可根据业务需求自定义动作,可选)
-    public static final String WE_CHAT_CUSTOMER_CALL_URL = "http://manager.usky.cn/mobile/#/pages/infoDetails?id=%s";
+    public static final String WE_CHAT_CUSTOMER_CALL_URL = "http://manager.usky.cn/mobile/#/pages/common/textview/index?id=%s";
     // 微信公众号的主题颜色
     public static final String WE_CHAT_TOP_COLOR = "#A349A4";
     // 微信公众号微信用户授权地址

+ 75 - 64
service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/WeChatController.java

@@ -11,11 +11,13 @@ import com.usky.common.core.bean.ApiResult;
 import com.usky.common.core.exception.BusinessException;
 import com.usky.common.core.util.HttpUtils;
 import com.usky.common.redis.core.RedisHelper;
+import com.usky.common.security.utils.SecurityUtils;
 import com.usky.iot.constant.constant;
-import com.usky.iot.domain.SysWxOpuser;
-import com.usky.iot.service.SysWxOpuserService;
+import com.usky.iot.domain.MceMbuser;
+import com.usky.iot.service.MceMbuserService;
 import com.usky.iot.service.vo.SendWeChatMessageRequestVO;
 import com.usky.iot.service.vo.SignUpRequestVO;
+import com.usky.iot.service.vo.TemplateData;
 import com.usky.iot.service.vo.TemplateMsgEntityVO;
 import lombok.extern.slf4j.Slf4j;
 import ma.glasnost.orika.impl.util.StringUtil;
@@ -25,7 +27,9 @@ import me.chanjar.weixin.mp.api.WxMpService;
 import me.chanjar.weixin.mp.enums.WxMpApiUrl;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.ExitCodeEvent;
+import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.client.RestTemplate;
 import org.springframework.web.servlet.view.RedirectView;
 
 import javax.annotation.Resource;
@@ -35,7 +39,10 @@ import javax.servlet.http.HttpSession;
 import java.io.IOException;
 import java.net.URLDecoder;
 import java.net.URLEncoder;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
 import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -52,7 +59,7 @@ public class WeChatController {
     @Resource
     private HttpServletResponse response;
     @Autowired
-    private SysWxOpuserService sysWxOpuserService;
+    private MceMbuserService mceMbuserService;
     @Autowired
     private RedisHelper redisHelper;
 
@@ -85,11 +92,10 @@ public class WeChatController {
                     String access_token = wxOAuth2AccessToken.getAccessToken();
                     System.out.println("openid:  "+openid);
                     request.getSession().setAttribute("openid",openid);
-                    LambdaQueryWrapper<SysWxOpuser> queryWrapper = Wrappers.lambdaQuery();
-                    queryWrapper.select(SysWxOpuser::getPhone)
-                            .eq(SysWxOpuser::getStatus,1)
-                            .eq(SysWxOpuser::getOpenid,openid);
-                    SysWxOpuser one = sysWxOpuserService.getOne(queryWrapper);
+                    LambdaQueryWrapper<MceMbuser> queryWrapper = Wrappers.lambdaQuery();
+                    queryWrapper.select(MceMbuser::getPhone)
+                            .eq(MceMbuser::getOpenid,openid);
+                    MceMbuser one = mceMbuserService.getOne(queryWrapper);
                     if(one != null){
                         request.getSession().setAttribute("phone",one.getPhone());
                     }
@@ -121,11 +127,9 @@ public class WeChatController {
         String code = request.getParameter("code");
         String userAgent = request.getHeader("User-Agent");
         if(null != request.getSession().getAttribute("app_token") && (null != request.getSession().getAttribute("phone"))){
-            LambdaQueryWrapper<SysWxOpuser> queryWrapper = Wrappers.lambdaQuery();
-            queryWrapper.eq(SysWxOpuser::getPhone,request.getSession().getAttribute("phone"))
-                    .eq(SysWxOpuser::getStatus,1)
-                    .eq(SysWxOpuser::getType,"app");
-            SysWxOpuser one = sysWxOpuserService.getOne(queryWrapper);
+            LambdaQueryWrapper<MceMbuser> queryWrapper = Wrappers.lambdaQuery();
+            queryWrapper.eq(MceMbuser::getPhone,request.getSession().getAttribute("phone"));
+            MceMbuser one = mceMbuserService.getOne(queryWrapper);
             if(one != null){
                 String sendUrl = "https://manager.usky.cn/mobile/#/pages/index?op="+one.getOpenid();
                 try{
@@ -164,11 +168,9 @@ public class WeChatController {
                             String access_token = wxOAuth2AccessToken.getAccessToken();
                             System.out.println("openid:  "+openid);
                             request.getSession().setAttribute("openid",openid);
-                            LambdaQueryWrapper<SysWxOpuser> queryWrapper = Wrappers.lambdaQuery();
-                            queryWrapper.eq(SysWxOpuser::getType,"wx")
-                                    .eq(SysWxOpuser::getStatus,1)
-                                    .eq(SysWxOpuser::getOpenid,openid);
-                            SysWxOpuser one = sysWxOpuserService.getOne(queryWrapper);
+                            LambdaQueryWrapper<MceMbuser> queryWrapper = Wrappers.lambdaQuery();
+                            queryWrapper.eq(MceMbuser::getOpenid,openid);
+                            MceMbuser one = mceMbuserService.getOne(queryWrapper);
                             if(one != null){
                                 request.getSession().setAttribute("phone",one.getPhone());
 
@@ -188,11 +190,9 @@ public class WeChatController {
                     }
                 }else{
                     try{
-                        LambdaQueryWrapper<SysWxOpuser> queryWrapper = Wrappers.lambdaQuery();
-                        queryWrapper.eq(SysWxOpuser::getType,"wx")
-                                .eq(SysWxOpuser::getStatus,1)
-                                .eq(SysWxOpuser::getOpenid,request.getSession().getAttribute("openid"));
-                        SysWxOpuser one = sysWxOpuserService.getOne(queryWrapper);
+                        LambdaQueryWrapper<MceMbuser> queryWrapper = Wrappers.lambdaQuery();
+                        queryWrapper.eq(MceMbuser::getOpenid,request.getSession().getAttribute("openid"));
+                        MceMbuser one = mceMbuserService.getOne(queryWrapper);
                         if(one != null){
                             request.getSession().setAttribute("phone",one.getPhone());
                             String sendUrl = "https://manager.usky.cn/mobile/#/pages/index?op="+one.getOpenid();
@@ -234,23 +234,22 @@ public class WeChatController {
             throw new BusinessException("验证码错误");
         }
 
-        LambdaQueryWrapper<SysWxOpuser> queryWrapper = Wrappers.lambdaQuery();
-        queryWrapper.eq(SysWxOpuser::getPhone,phone)
-                .eq(SysWxOpuser::getType,request.getSession().getAttribute("type"));
-        List<SysWxOpuser> list = sysWxOpuserService.list(queryWrapper);
+        LambdaQueryWrapper<MceMbuser> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.eq(MceMbuser::getPhone,phone);
+        List<MceMbuser> list = mceMbuserService.list(queryWrapper);
         if(CollectionUtils.isEmpty(list)){
-            SysWxOpuser one = new SysWxOpuser();
+            MceMbuser one = new MceMbuser();
             one.setPhone(phone);
             if(request.getSession().getAttribute("type") == "app"){
                 one.setOpenid(request.getSession().getAttribute("app_token").toString());
             }else{
                 one.setOpenid(request.getSession().getAttribute("openid").toString());
             }
-            one.setType(request.getSession().getAttribute("type").toString());
-            one.setCreatedTime(LocalDateTime.now());
-            one.setStatus(1);
+            one.setCreateBy(SecurityUtils.getUsername());
+            one.setUserId(SecurityUtils.getUserId());
+            one.setCreateTime(LocalDateTime.now());
 
-            if(sysWxOpuserService.save(one)){
+            if(mceMbuserService.save(one)){
 
             }else{
                 map.put("msg","注册失败,请重新注册");
@@ -281,70 +280,82 @@ public class WeChatController {
     public String getWeChatAccessToken() {
         try {
             // 微信公众号官方获取AccessToken
-            String accessToken = wxMpService.getAccessToken();
+            RestTemplate restTemplate = new RestTemplate();
+            String requestParams = String.format(constant.WE_CHAT_ACCESS_TOKEN_URL, constant.WE_CHAT_APP_ID, constant.WE_CHAT_SECRET);
+            ResponseEntity<String> responseEntity = restTemplate.getForEntity(requestParams, String.class);
+
+            String accessToken = JSONObject.parseObject(responseEntity.getBody()).getString("access_token");
+            log.info("we_chat_access_token: " + accessToken);
 
             return accessToken;
         } catch (Exception e) {
-
+            log.info("异常信息:{}", e);
         }
         return null;
     }
 
+    public static long getTimeDifference(String oldTime,String newTime) throws ParseException {
 
-//    /**
-//     * 微信消息提醒
-//     * @return
-//     */
-//    @PostMapping("sendWeChatMessage")
-//    public Map<String,Object> sendWeChatMessage(@RequestBody SendWeChatMessageRequestVO requestVO){
-//        String infoType = requestVO.getInfoType();
-//        String infoTitle = requestVO.getInfoTitle();
-//        String infoContent = requestVO.getInfoContent();
-//        Map<String,Object> map = new HashMap<>();
-//
-//        String s = null;
-//        try {
-//            s = HttpUtils.postForm(URL, body, null);
-//        }catch (Exception e){
-//            log.info("发送微信推送报警出错"+e);
-//        }
-//        return map;
-//
-//    }
+        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        long NTime =df.parse(newTime).getTime();
+        //从对象中拿到时间
+        long OTime = df.parse(oldTime).getTime();
+        long diff=(NTime-OTime)/1000/60;
+        return diff;
+    }
 
     /**
      * 微信消息提醒
      * @return
      */
     @PostMapping("sendWeChatMessage")
-    public JSONObject sendWeChatMessage(@RequestBody SendWeChatMessageRequestVO requestVO){
+    public JSONObject sendWeChatMessage(@RequestBody SendWeChatMessageRequestVO requestVO) {
 
         String infoType = requestVO.getInfoType();
         String infoTitle = requestVO.getInfoTitle();
         String infoContent = requestVO.getInfoContent();
         Integer infoId = requestVO.getInfoId();
         String openId = requestVO.getOpenId();
-        String token = this.getWeChatAccessToken();
+
+        //access_token时效校验,判断获取access_token获取时间是否超过有效时间,超过就调用更新,保证一直有效
+        if(!redisHelper.hasKey("access_key")){
+            redisHelper.set("access_time",LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+            redisHelper.set("access_key",this.getWeChatAccessToken());
+        }else{
+            try{
+                String access_time = redisHelper.get("access_time").toString();
+                String now_time = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+                long i = getTimeDifference(access_time,now_time);
+                if(i > 115){ //大于115分钟
+                    redisHelper.set("access_time",LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+                    redisHelper.set("access_key",this.getWeChatAccessToken());
+                }
+            }catch (Exception e){
+                throw new BusinessException(e.getMessage());
+            }
+
+        }
+
+
+        String token = redisHelper.get("access_key").toString();
 
         TemplateMsgEntityVO messageVo=new TemplateMsgEntityVO();
         messageVo.setTTitle(infoTitle);
         messageVo.setTKeyword1("测试1");
         messageVo.setTKeyword2("测试2");
         messageVo.setTKeyword3("测试3");
-        messageVo.setTKeyword4("测试4");
         messageVo.setTRemark(infoContent);
         messageVo.setTUrl(String.format(constant.WE_CHAT_CUSTOMER_CALL_URL,infoId));
         messageVo.setTemplateId(constant.WE_CHAT_TEMPLATE_ID);
 
         String requestUrl = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token="  + token;
         Map<String,Object> content=new HashMap<>();
-        JSONObject data = new JSONObject();
-        data.put("first",new JSONObject().put("value",messageVo.getTTitle()));
-        data.put("keyword1",new JSONObject().put("value",messageVo.getTKeyword1()));
-        data.put("keyword2",new JSONObject().put("value",messageVo.getTKeyword2()));
-        data.put("keyword3",new JSONObject().put("value",messageVo.getTKeyword3()));
-        data.put("keyword4",new JSONObject().put("value",messageVo.getTKeyword4()));
-        data.put("remark",new JSONObject().put("value",messageVo.getTRemark()));
+        Map<String, TemplateData> data = new HashMap<>();
+        data.put("first",new TemplateData(messageVo.getTTitle(),"#44b549"));
+        data.put("keyword1",new TemplateData(messageVo.getTKeyword1(),"#173177"));
+        data.put("keyword2",new TemplateData(messageVo.getTKeyword2(),"#173177"));
+        data.put("keyword3",new TemplateData(messageVo.getTKeyword3(),"#173177"));
+        data.put("remark",new TemplateData(messageVo.getTRemark(),"#173177"));
 
         content.put("touser",openId);
         content.put("url",messageVo.getTUrl());

+ 4 - 1
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/MceReceiveServiceImpl.java

@@ -1,5 +1,7 @@
 package com.usky.iot.service.impl;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -223,7 +225,8 @@ public class MceReceiveServiceImpl extends AbstractCrudService<MceReceiveMapper,
         mceContent.setInfoType(mceReceiveVO.get("infoType").toString());
         mceContent.setCreateBy(SecurityUtils.getUsername());
         mceContent.setCreateTime(LocalDateTime.now());
-        mceContent.setDeptId(SecurityUtils.getLoginUser().getSysUser().getDeptId().intValue());
+//        mceContent.setDeptId(SecurityUtils.getLoginUser().getSysUser().getDeptId().intValue());
+
         mceContent.setTenantId(SecurityUtils.getTenantId());
         mceContentService.save(mceContent);
         Integer contentId = mceContent.getId();

+ 11 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/vo/TemplateData.java

@@ -0,0 +1,11 @@
+package com.usky.iot.service.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+
+@AllArgsConstructor
+@Data
+public class TemplateData {
+    private String value;
+    private String color;
+}