Przeglądaj źródła

Merge branch 'server-165' of http://47.111.81.118:3000/uskycloud/usky-modules into fu-dev

fuyuhchuan 1 rok temu
rodzic
commit
53d4e39bd0
47 zmienionych plików z 1855 dodań i 25 usunięć
  1. 1 1
      service-fire/service-fire-biz/src/main/java/com/usky/fire/service/impl/PatrolInspectionPlanSonServiceImpl.java
  2. 5 0
      service-iot/service-iot-biz/pom.xml
  3. 17 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/RuoYiSystemApplication.java
  4. 29 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/constant/constant.java
  5. 22 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/MceContentController.java
  6. 21 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/MceMbuserController.java
  7. 105 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/MceReceiveController.java
  8. 66 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/MceSettingController.java
  9. 21 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/SysWxOpuserController.java
  10. 378 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/WeChatController.java
  11. 76 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/MceContent.java
  12. 68 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/MceMbuser.java
  13. 91 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/MceReceive.java
  14. 76 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/MceSetting.java
  15. 63 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/SysWxOpuser.java
  16. 3 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/DmpDeviceTypeMapper.java
  17. 16 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/MceContentMapper.java
  18. 16 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/MceMbuserMapper.java
  19. 16 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/MceReceiveMapper.java
  20. 16 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/MceSettingMapper.java
  21. 16 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/SysWxOpuserMapper.java
  22. 16 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/MceContentService.java
  23. 16 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/MceMbuserService.java
  24. 32 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/MceReceiveService.java
  25. 24 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/MceSettingService.java
  26. 16 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/SysWxOpuserService.java
  27. 23 19
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/BaseAlarmServiceImpl.java
  28. 8 2
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/BaseFacilityTypeServiceImpl.java
  29. 13 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/DmpDeviceTypeServiceImpl.java
  30. 20 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/MceContentServiceImpl.java
  31. 20 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/MceMbuserServiceImpl.java
  32. 210 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/MceReceiveServiceImpl.java
  33. 97 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/MceSettingServiceImpl.java
  34. 20 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/SysWxOpuserServiceImpl.java
  35. 5 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/vo/BaseAlarmListVO.java
  36. 31 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/vo/SendWeChatMessageRequestVO.java
  37. 17 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/vo/SignUpRequestVO.java
  38. 48 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/vo/TemplateMsgEntityVO.java
  39. 12 0
      service-iot/service-iot-biz/src/main/resources/mapper/iot/DmpDeviceTypeMapper.xml
  40. 19 0
      service-iot/service-iot-biz/src/main/resources/mapper/iot/MceContentMapper.xml
  41. 18 0
      service-iot/service-iot-biz/src/main/resources/mapper/iot/MceMbuserMapper.xml
  42. 22 0
      service-iot/service-iot-biz/src/main/resources/mapper/iot/MceReceiveMapper.xml
  43. 19 0
      service-iot/service-iot-biz/src/main/resources/mapper/iot/MceSettingMapper.xml
  44. 17 0
      service-iot/service-iot-biz/src/main/resources/mapper/iot/SysWxOpuserMapper.xml
  45. 1 1
      service-meeting/service-meeting-biz/src/main/java/com/usky/meeting/repository/MeetingInfoRepository.java
  46. 6 2
      service-meeting/service-meeting-biz/src/main/java/com/usky/meeting/service/impl/MeetingRoomServiceImpl.java
  47. 3 0
      service-meeting/service-meeting-biz/src/main/java/com/usky/meeting/service/vo/MeetingRoomReservationVO.java

+ 1 - 1
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/impl/PatrolInspectionPlanSonServiceImpl.java

@@ -397,7 +397,7 @@ public class PatrolInspectionPlanSonServiceImpl extends AbstractCrudService<Patr
     public List<PatrolInspectionSite> siteList(String startTime, String endTime) {
         LambdaQueryWrapper<PatrolInspectionSite> queryWrapper = Wrappers.lambdaQuery();
         queryWrapper.eq(PatrolInspectionSite::getTenantId, SecurityUtils.getTenantId());
-        queryWrapper.eq(PatrolInspectionSite::getCollector, SecurityUtils.getUsername());
+        queryWrapper.eq(PatrolInspectionSite::getCollector, SecurityUtils.getLoginUser().getSysUser().getNickName());
         queryWrapper.eq(PatrolInspectionSite::getEnable, 1);
         if (startTime != null && !"".equals(startTime) && endTime != null && !"".equals(endTime)) {
             queryWrapper.between(PatrolInspectionSite::getCollectTime, startTime, endTime);

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

@@ -66,6 +66,11 @@
             <version>0.0.1</version>
             <scope>compile</scope>
         </dependency>
+        <dependency>
+            <groupId>com.github.binarywang</groupId>
+            <artifactId>weixin-java-mp</artifactId>
+            <version>4.3.0</version>
+        </dependency>
     </dependencies>
 
     <build>

+ 17 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/RuoYiSystemApplication.java

@@ -2,7 +2,12 @@ package com.usky.iot;
 
 
 
+import com.usky.iot.constant.constant;
 import io.swagger.annotations.SwaggerDefinition;
+import lombok.val;
+import me.chanjar.weixin.mp.api.WxMpService;
+import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
+import me.chanjar.weixin.mp.config.impl.WxMpMapConfigImpl;
 import org.mybatis.spring.annotation.MapperScan;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -10,6 +15,7 @@ import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.cloud.openfeign.EnableFeignClients;
 import org.springframework.context.ConfigurableApplicationContext;
+import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.ComponentScan;
 import org.springframework.core.env.Environment;
 
@@ -31,6 +37,17 @@ public class RuoYiSystemApplication
 {
     private static final Logger LOGGER = LoggerFactory.getLogger(RuoYiSystemApplication.class);
 
+    @Bean
+    public WxMpService wxMpService(){
+        WxMpMapConfigImpl wxMpMapConfig = new WxMpMapConfigImpl();
+        wxMpMapConfig.setAppId(constant.WE_CHAT_APP_ID);
+        wxMpMapConfig.setSecret(constant.WE_CHAT_SECRET);
+        val wxMpService = new WxMpServiceImpl();
+        wxMpService.setWxMpConfigStorage(wxMpMapConfig);
+
+        return wxMpService;
+    }
+
     public static void main(String[] args) throws UnknownHostException {
         ConfigurableApplicationContext application = SpringApplication.run(RuoYiSystemApplication.class, args);
         Environment env = application.getEnvironment();

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

@@ -0,0 +1,29 @@
+package com.usky.iot.constant;
+
+public class constant {
+    // 微信公众号的 app_id
+    public static final String WE_CHAT_APP_ID = "wx24286e0c45f8da1c";
+    // 微信公众号的 secret
+    public static final String WE_CHAT_SECRET = "d605d3efaaad559a8e6a327870b48ce8";
+    // 微信公众号的 access_token
+    public static final String WE_CHAT_ACCESS_TOKEN = "**********";
+    // 微信公众号code获取地址
+    public static final String WE_CHAT_CODE_URL = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=%s&redirect_uri=%s&response_type=code&scope=%s&state=STATE#wechat_redirect";
+    // 回调地址,获取open_id
+    public static final String WE_CHAT_CALL_BACK_DOMAIN_URL = "http://localhost:9887/weChat/getWeChatOpenId";
+    // 回调域名
+    public static final String call_back_domain = "manager.usky.cn";
+    // 微信公众号的token获取地址
+    public static final String WE_CHAT_ACCESS_TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s";
+    // 微信公众号消息推送地址
+    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_CUSTOMER_CALL_URL = "http://manager.usky.cn/mobile/#/pages/infoDetails?id=%s";
+    // 微信公众号的主题颜色
+    public static final String WE_CHAT_TOP_COLOR = "#A349A4";
+    // 微信公众号微信用户授权地址
+    public static final String WE_CHAT_AUTHORIZATION_URL = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=%s&secret=%s&code=%s&grant_type=authorization_code";
+
+}

+ 22 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/MceContentController.java

@@ -0,0 +1,22 @@
+package com.usky.iot.controller.web;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 消息内容表 前端控制器
+ * </p>
+ *
+ * @author han
+ * @since 2024-04-19
+ */
+@RestController
+@RequestMapping("/mceContent")
+public class MceContentController {
+
+}
+

+ 21 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/MceMbuserController.java

@@ -0,0 +1,21 @@
+package com.usky.iot.controller.web;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.stereotype.Controller;
+
+/**
+ * <p>
+ * 消息中心_移动端注册表 前端控制器
+ * </p>
+ *
+ * @author han
+ * @since 2024-04-26
+ */
+@Controller
+@RequestMapping("/mceMbuser")
+public class MceMbuserController {
+
+}
+

+ 105 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/MceReceiveController.java

@@ -0,0 +1,105 @@
+package com.usky.iot.controller.web;
+
+
+import com.usky.common.core.bean.ApiResult;
+import com.usky.common.core.bean.CommonPage;
+import com.usky.iot.domain.MceReceive;
+import com.usky.iot.service.MceReceiveService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Map;
+
+/**
+ * <p>
+ * 消息接收表 前端控制器
+ * </p>
+ *
+ * @author han
+ * @since 2024-04-19
+ */
+@RestController
+@RequestMapping("/mceReceive")
+public class MceReceiveController {
+
+    @Autowired
+    private MceReceiveService mceReceiveService;
+
+    /**
+     * 消息列表分页
+     * @param infoTitle  消息标题
+     * @param infoType  消息标题
+     * @param startTime  开始时间
+     * @param endTime  开始时间
+     * @param current      当前页
+     * @param size     每页条数
+     * @return
+     */
+    @GetMapping("/mceList")
+    public ApiResult<CommonPage<Object>> mceList(@RequestParam(value = "infoTitle", required = false) String infoTitle,
+                                                 @RequestParam(value = "infoType", required = false) String infoType,
+                                                        @RequestParam(value = "startTime", required = false) String startTime,
+                                                        @RequestParam(value = "endTime", required = false) String endTime,
+                                                        @RequestParam(value = "current", required = false, defaultValue = "1") Integer current,
+                                                        @RequestParam(value = "size", required = false, defaultValue = "10") Integer size)
+    {
+        return ApiResult.success(mceReceiveService.mceList(infoTitle, infoType,startTime, endTime, current, size));
+    }
+
+    /**
+     * 消息管理
+     * @param infoTitle  消息标题
+     * @param infoType  消息标题
+     * @param startTime  开始时间
+     * @param endTime  开始时间
+     * @param current      当前页
+     * @param size     每页条数
+     * @return
+     */
+    @GetMapping("/mceManageList")
+    public ApiResult<CommonPage<Object>> mceManageList(@RequestParam(value = "infoTitle", required = false) String infoTitle,
+                                                 @RequestParam(value = "infoType", required = false) String infoType,
+                                                 @RequestParam(value = "startTime", required = false) String startTime,
+                                                 @RequestParam(value = "endTime", required = false) String endTime,
+                                                 @RequestParam(value = "current", required = false, defaultValue = "1") Integer current,
+                                                 @RequestParam(value = "size", required = false, defaultValue = "10") Integer size)
+    {
+        return ApiResult.success(mceReceiveService.mceManageList(infoTitle, infoType,startTime, endTime, current, size));
+    }
+
+    /**
+     * 消息管理通过ID查询接口
+     * @param id  消息内容主键ID
+     * @param current      当前页
+     * @param size     每页条数
+     * @return
+     */
+    @GetMapping("/mceManageById")
+    public ApiResult<CommonPage<MceReceive>> mceManageById(@RequestParam(value = "id") Integer id,
+                                                           @RequestParam(value = "current", required = false, defaultValue = "1") Integer current,
+                                                           @RequestParam(value = "size", required = false, defaultValue = "10") Integer size)
+    {
+        return ApiResult.success(mceReceiveService.mceManageById(id,current,size));
+    }
+
+    /**
+     * 消息接收分类统计接口
+     * @return
+     */
+    @GetMapping("/mceReceiveStatic")
+    public ApiResult<Map<String, Object>> mceReceiveStatic()
+    {
+        return ApiResult.success(mceReceiveService.mceReceiveStatic());
+    }
+
+    /**
+     * 已读
+     * @return
+     */
+    @PutMapping
+    ApiResult<Void> updateMceReceive(@RequestBody MceReceive mceReceive){
+        mceReceiveService.updateMceReceive(mceReceive);
+        return ApiResult.success();
+    }
+}
+

+ 66 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/MceSettingController.java

@@ -0,0 +1,66 @@
+package com.usky.iot.controller.web;
+
+
+import com.usky.common.core.bean.ApiResult;
+import com.usky.common.core.bean.CommonPage;
+import com.usky.iot.domain.BaseAlarm;
+import com.usky.iot.domain.MceSetting;
+import com.usky.iot.service.MceSettingService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 消息设置表 前端控制器
+ * </p>
+ *
+ * @author han
+ * @since 2024-04-19
+ */
+@RestController
+@RequestMapping("/mceSetting")
+public class MceSettingController {
+
+    @Autowired
+    private MceSettingService mceSettingService;
+
+    /**
+     * 消息设置回显
+     * @return
+     */
+    @GetMapping("/mceSettingInfo")
+    public ApiResult<Map<String, Object>> mceSettingInfo(){
+        return ApiResult.success(mceSettingService.mceSettingInfo());
+    }
+
+    /**
+     * 消息设置列表
+     * @param createBy     创建人
+     * @param current      当前页
+     * @param size     每页条数
+     * @return
+     */
+    @GetMapping("/mceSettingList")
+    public ApiResult<CommonPage<Map<String, Object>>> mceSettingList(@RequestParam(value = "createBy", required = false) String createBy,
+                                                                     @RequestParam(value = "current", required = false, defaultValue = "1") Integer current,
+                                                                     @RequestParam(value = "size", required = false, defaultValue = "10") Integer size){
+        return ApiResult.success(mceSettingService.mceSettingList(createBy,current,size));
+    }
+
+    /**
+     * 新增、修改
+     * @param mceSetting
+     * @return
+     */
+    @PostMapping("/addMceSetting")
+    public ApiResult<Void> add(@RequestBody MceSetting mceSetting){
+        mceSettingService.add(mceSetting);
+        return ApiResult.success();
+    }
+}
+

+ 21 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/SysWxOpuserController.java

@@ -0,0 +1,21 @@
+package com.usky.iot.controller.web;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.stereotype.Controller;
+
+/**
+ * <p>
+ * 微信用户openid信息表 前端控制器
+ * </p>
+ *
+ * @author han
+ * @since 2024-04-03
+ */
+@Controller
+@RequestMapping("/sysWxOpuser")
+public class SysWxOpuserController {
+
+}
+

+ 378 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/WeChatController.java

@@ -0,0 +1,378 @@
+package com.usky.iot.controller.web;
+
+import cn.hutool.http.HttpUtil;
+import cn.hutool.json.JSONUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+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.iot.constant.constant;
+import com.usky.iot.domain.SysWxOpuser;
+import com.usky.iot.service.SysWxOpuserService;
+import com.usky.iot.service.vo.SendWeChatMessageRequestVO;
+import com.usky.iot.service.vo.SignUpRequestVO;
+import com.usky.iot.service.vo.TemplateMsgEntityVO;
+import lombok.extern.slf4j.Slf4j;
+import ma.glasnost.orika.impl.util.StringUtil;
+import me.chanjar.weixin.common.api.WxConsts;
+import me.chanjar.weixin.common.bean.oauth2.WxOAuth2AccessToken;
+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.web.bind.annotation.*;
+import org.springframework.web.servlet.view.RedirectView;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+import java.io.IOException;
+import java.net.URLDecoder;
+import java.net.URLEncoder;
+import java.time.LocalDateTime;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+
+@RestController
+@RequestMapping("/weChat")
+@Slf4j
+public class WeChatController {
+    @Autowired
+    private WxMpService wxMpService;
+    @Resource
+    private HttpServletRequest request;
+    @Resource
+    private HttpServletResponse response;
+    @Autowired
+    private SysWxOpuserService sysWxOpuserService;
+    @Autowired
+    private RedisHelper redisHelper;
+
+    /**
+     * 调用的第一个接口,获取微信公众号CODE,获取openid
+     */
+    @GetMapping("/getFirst1")
+    public void getFirst1(){
+        String http = "https://";
+        String code = request.getParameter("code");
+        String userAgent = request.getHeader("User-Agent");
+
+        if(userAgent.contains("MicroMessenger")){ //wx
+            request.getSession().setAttribute("type","wx");
+            if(StringUtils.isBlank(code)){
+                String url = URLDecoder.decode(http+constant.call_back_domain+"/mobile/#/pages"+request.getRequestURI());
+                String sendUrl = "https://open.weixin.qq.com/connect/oauth2/authorize?appid="+constant.WE_CHAT_APP_ID+"&redirect_uri="+url+"&response_type=code&scope=snsapi_base&state=abc123#wechat_redirect";
+                try{
+                    System.out.println("sendUrl: "+sendUrl);
+                    response.sendRedirect(sendUrl);
+                }catch (IOException e){
+                    throw new BusinessException(e.getMessage());
+                }
+            }else{
+                System.out.println("code:  "+code);
+                try {
+                    WxOAuth2AccessToken wxOAuth2AccessToken = wxMpService.getOAuth2Service().getAccessToken(code);
+
+                    String openid = wxOAuth2AccessToken.getOpenId();
+                    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);
+                    if(one != null){
+                        request.getSession().setAttribute("phone",one.getPhone());
+                    }
+
+                    response.sendRedirect("https://manager.usky.cn/mobile/#/pages/login?flag=true");
+                } catch (Exception e) {
+                    throw new BusinessException(e.getMessage());
+                }
+            }
+
+        }else{ //app
+            request.getSession().setAttribute("type","app");
+            request.getSession().setAttribute("app_token","");
+            try{
+                response.sendRedirect("");
+            }catch (IOException e){
+                throw new BusinessException(e.getMessage());
+            }
+
+        }
+    }
+
+    /**
+     * 跳转首页权限
+     */
+    @GetMapping("/getPageAuthorization")
+    public void getPageAuthorization(){
+        String http = "https://";
+        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);
+            if(one != null){
+                String sendUrl = "https://manager.usky.cn/mobile/#/pages/index?op="+one.getOpenid();
+                try{
+                    System.out.println("sendUrl: "+sendUrl);
+                    response.sendRedirect(sendUrl);
+                }catch (IOException e){
+                    throw new BusinessException(e.getMessage());
+                }
+            }
+
+        }else{
+            if(!userAgent.contains("MicroMessenger")){
+                try{
+                    response.sendRedirect("https://manager.usky.cn/mobile/#/pages/login");
+                }catch (IOException e){
+                    throw new BusinessException(e.getMessage());
+                }
+
+            }else{
+                if((null == request.getSession().getAttribute("openid")) && (StringUtils.isBlank(request.getSession().getAttribute("openid").toString()))){
+                    if(StringUtils.isBlank(code)){
+                        String url = URLDecoder.decode(http+constant.call_back_domain+request.getRequestURI());
+                        String sendUrl = "https://open.weixin.qq.com/connect/oauth2/authorize?appid="+constant.WE_CHAT_APP_ID+"&redirect_uri="+url+"&response_type=code&scope=snsapi_base&state=abc123#wechat_redirect";
+                        try{
+                            System.out.println("sendUrl: "+sendUrl);
+                            response.sendRedirect(sendUrl);
+                        }catch (IOException e){
+                            throw new BusinessException(e.getMessage());
+                        }
+                    }else{
+                        System.out.println("code:  "+code);
+                        try {
+                            WxOAuth2AccessToken wxOAuth2AccessToken = wxMpService.getOAuth2Service().getAccessToken(code);
+
+                            String openid = wxOAuth2AccessToken.getOpenId();
+                            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);
+                            if(one != null){
+                                request.getSession().setAttribute("phone",one.getPhone());
+
+                                String sendUrl = "https://manager.usky.cn/mobile/#/pages/index?op="+one.getOpenid();
+                                response.sendRedirect(sendUrl);
+                            }else{
+                                request.getSession().removeAttribute("openid");
+                                request.getSession().removeAttribute("phone");
+
+                                response.sendRedirect("https://manager.usky.cn/mobile/#/pages/login");
+                            }
+
+
+                        } catch (Exception e) {
+                            throw new BusinessException(e.getMessage());
+                        }
+                    }
+                }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);
+                        if(one != null){
+                            request.getSession().setAttribute("phone",one.getPhone());
+                            String sendUrl = "https://manager.usky.cn/mobile/#/pages/index?op="+one.getOpenid();
+                            response.sendRedirect(sendUrl);
+                        }else{
+                            request.getSession().removeAttribute("openid");
+                            request.getSession().removeAttribute("phone");
+
+                            response.sendRedirect("https://manager.usky.cn/mobile/#/pages/login");
+                        }
+                    }catch (IOException e){
+                        throw new BusinessException(e.getMessage());
+                    }
+
+                }
+            }
+        }
+
+    }
+
+
+    /**
+     * 登录并注册
+     */
+    @PostMapping("/signUp")
+    public Map<String,Object> signUp(@RequestBody SignUpRequestVO requestVO){
+        String phone = requestVO.getPhone();
+        String verify = requestVO.getVerify();
+        Map<String,Object> map = new HashMap<>();
+
+        //手机验证码登录
+        if (StringUtils.isBlank(phone)) {
+            throw new BusinessException("手机号不能为空");
+        }
+        if (StringUtils.isBlank(verify)) {
+            throw new BusinessException("验证码不能为空");
+        }
+        if (!verify.equals(redisHelper.get(phone))) {
+            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);
+        if(CollectionUtils.isEmpty(list)){
+            SysWxOpuser one = new SysWxOpuser();
+            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);
+
+            if(sysWxOpuserService.save(one)){
+
+            }else{
+                map.put("msg","注册失败,请重新注册");
+                map.put("flag",true);
+                return map;
+            }
+        }else {
+            request.getSession().setAttribute("openid",list.get(0).getOpenid());
+        }
+
+        request.getSession().setAttribute("phone",phone);
+
+        map.put("msg","验证成功,正在登录");
+        map.put("flag",true);
+        return map;
+    }
+
+
+
+    /**
+     * Description:[获取微信公众号的Access_Token]
+     *
+     * @return JSONResult
+     * @date 2019-05-19
+     * @author huazai
+     */
+    @GetMapping("/getWeChatAccessToken")
+    public String getWeChatAccessToken() {
+        try {
+            // 微信公众号官方获取AccessToken
+            String accessToken = wxMpService.getAccessToken();
+
+            return accessToken;
+        } catch (Exception e) {
+
+        }
+        return null;
+    }
+
+
+//    /**
+//     * 微信消息提醒
+//     * @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;
+//
+//    }
+
+    /**
+     * 微信消息提醒
+     * @return
+     */
+    @PostMapping("sendWeChatMessage")
+    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();
+
+        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()));
+
+        content.put("touser",openId);
+        content.put("url",messageVo.getTUrl());
+        content.put("template_id",messageVo.getTemplateId());
+        content.put("data",data);
+        String resp = HttpUtil.post(requestUrl, JSONUtil.parseObj(content).toString());
+        System.out.println(content.toString());
+        System.out.println(JSONUtil.parseObj(content));
+        JSONObject result = JSONObject.parseObject(resp);
+        System.out.println("发送消息:" + resp);
+        return result;
+    }
+
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+ 76 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/MceContent.java

@@ -0,0 +1,76 @@
+package com.usky.iot.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 消息内容表
+ * </p>
+ *
+ * @author han
+ * @since 2024-04-19
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class MceContent implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 消息标题
+     */
+    private String infoTitle;
+
+    /**
+     * 消息内容
+     */
+    private String infoContent;
+
+    /**
+     * 消息类型
+     */
+    private String infoType;
+
+    /**
+     * 租户号
+     */
+    private Integer tenantId;
+
+    /**
+     * 组织机构ID
+     */
+    private Integer deptId;
+
+    /**
+     * 创建人
+     */
+    private String createBy;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 更新人
+     */
+    private String updateBy;
+
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+
+
+}

+ 68 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/MceMbuser.java

@@ -0,0 +1,68 @@
+package com.usky.iot.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 消息中心_移动端注册表
+ * </p>
+ *
+ * @author han
+ * @since 2024-04-26
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class MceMbuser implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 电话号码
+     */
+    private String phone;
+
+    /**
+     * 微信用户id
+     */
+    private String openid;
+
+    /**
+     * 用户ID
+     */
+    private Long userId;
+
+    /**
+     * 应用ID
+     */
+    private String cids;
+
+    /**
+     * 创建人
+     */
+    private String createBy;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 更新人
+     */
+    private String updateBy;
+
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+
+
+}

+ 91 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/MceReceive.java

@@ -0,0 +1,91 @@
+package com.usky.iot.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 消息接收表
+ * </p>
+ *
+ * @author han
+ * @since 2024-04-19
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class MceReceive implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 接收人ID
+     */
+    private Integer receiverId;
+
+    /**
+     * 接收人
+     */
+    private String receiverName;
+
+    /**
+     * 消息类型
+     */
+    private String infoType;
+
+    /**
+     * 是否已读;0、未读,1、已读
+     */
+    private Integer readFlag;
+
+    /**
+     * 消息内容ID
+     */
+    private Integer contentId;
+
+    /**
+     * 子模块记录ID
+     */
+    private Integer moduleId;
+
+    /**
+     * 租户号
+     */
+    private Integer tenantId;
+
+    /**
+     * 组织机构ID
+     */
+    private Integer deptId;
+
+    /**
+     * 创建人
+     */
+    private String createBy;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 更新人
+     */
+    private String updateBy;
+
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+
+
+}

+ 76 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/MceSetting.java

@@ -0,0 +1,76 @@
+package com.usky.iot.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 消息设置表
+ * </p>
+ *
+ * @author han
+ * @since 2024-04-19
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class MceSetting implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * APP通知方式
+     */
+    private String appMode;
+
+    /**
+     * PC端通知方式
+     */
+    private String pcMode;
+
+    /**
+     * 微信端通知方式
+     */
+    private String wcMode;
+
+    /**
+     * 租户号
+     */
+    private Integer tenantId;
+
+    /**
+     * 组织机构ID
+     */
+    private Integer deptId;
+
+    /**
+     * 创建人
+     */
+    private String createBy;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 更新人
+     */
+    private String updateBy;
+
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+
+
+}

+ 63 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/domain/SysWxOpuser.java

@@ -0,0 +1,63 @@
+package com.usky.iot.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 微信用户openid信息表
+ * </p>
+ *
+ * @author han
+ * @since 2024-04-03
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class SysWxOpuser implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 电话号码
+     */
+    private String phone;
+
+    /**
+     * 微信用户id
+     */
+    private String openid;
+
+    /**
+     * 类型: wx 微信,app 手机
+     */
+    private String type;
+
+    /**
+     * 注册时间
+     */
+    private LocalDateTime createdTime;
+
+    /**
+     * 状态:0.不启用 1.启用
+     */
+    private Integer status;
+
+    /**
+     * 组织机构ID
+     */
+    private Integer deptId;
+
+    /**
+     * 租户ID
+     */
+    private Integer tenantId;
+
+
+}

+ 3 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/DmpDeviceTypeMapper.java

@@ -4,6 +4,7 @@ import com.usky.common.security.utils.SecurityUtils;
 import com.usky.iot.domain.DmpDeviceType;
 import com.usky.common.mybatis.core.CrudMapper;
 import com.usky.iot.domain.DmpProductInfo;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 
 import java.util.List;
@@ -19,4 +20,6 @@ import java.util.List;
 @Repository
 public interface DmpDeviceTypeMapper extends CrudMapper<DmpDeviceType> {
     List<DmpProductInfo> getProductInfo(Integer tenantId);
+
+    List<DmpProductInfo> getProductInfoList(@Param("typeCode") String typeCode);
 }

+ 16 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/MceContentMapper.java

@@ -0,0 +1,16 @@
+package com.usky.iot.mapper;
+
+import com.usky.iot.domain.MceContent;
+import com.usky.common.mybatis.core.CrudMapper;
+
+/**
+ * <p>
+ * 消息内容表 Mapper 接口
+ * </p>
+ *
+ * @author han
+ * @since 2024-04-19
+ */
+public interface MceContentMapper extends CrudMapper<MceContent> {
+
+}

+ 16 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/MceMbuserMapper.java

@@ -0,0 +1,16 @@
+package com.usky.iot.mapper;
+
+import com.usky.iot.domain.MceMbuser;
+import com.usky.common.mybatis.core.CrudMapper;
+
+/**
+ * <p>
+ * 消息中心_移动端注册表 Mapper 接口
+ * </p>
+ *
+ * @author han
+ * @since 2024-04-26
+ */
+public interface MceMbuserMapper extends CrudMapper<MceMbuser> {
+
+}

+ 16 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/MceReceiveMapper.java

@@ -0,0 +1,16 @@
+package com.usky.iot.mapper;
+
+import com.usky.iot.domain.MceReceive;
+import com.usky.common.mybatis.core.CrudMapper;
+
+/**
+ * <p>
+ * 消息接收表 Mapper 接口
+ * </p>
+ *
+ * @author han
+ * @since 2024-04-19
+ */
+public interface MceReceiveMapper extends CrudMapper<MceReceive> {
+
+}

+ 16 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/MceSettingMapper.java

@@ -0,0 +1,16 @@
+package com.usky.iot.mapper;
+
+import com.usky.iot.domain.MceSetting;
+import com.usky.common.mybatis.core.CrudMapper;
+
+/**
+ * <p>
+ * 消息设置表 Mapper 接口
+ * </p>
+ *
+ * @author han
+ * @since 2024-04-19
+ */
+public interface MceSettingMapper extends CrudMapper<MceSetting> {
+
+}

+ 16 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/SysWxOpuserMapper.java

@@ -0,0 +1,16 @@
+package com.usky.iot.mapper;
+
+import com.usky.iot.domain.SysWxOpuser;
+import com.usky.common.mybatis.core.CrudMapper;
+
+/**
+ * <p>
+ * 微信用户openid信息表 Mapper 接口
+ * </p>
+ *
+ * @author han
+ * @since 2024-04-03
+ */
+public interface SysWxOpuserMapper extends CrudMapper<SysWxOpuser> {
+
+}

+ 16 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/MceContentService.java

@@ -0,0 +1,16 @@
+package com.usky.iot.service;
+
+import com.usky.iot.domain.MceContent;
+import com.usky.common.mybatis.core.CrudService;
+
+/**
+ * <p>
+ * 消息内容表 服务类
+ * </p>
+ *
+ * @author han
+ * @since 2024-04-19
+ */
+public interface MceContentService extends CrudService<MceContent> {
+
+}

+ 16 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/MceMbuserService.java

@@ -0,0 +1,16 @@
+package com.usky.iot.service;
+
+import com.usky.iot.domain.MceMbuser;
+import com.usky.common.mybatis.core.CrudService;
+
+/**
+ * <p>
+ * 消息中心_移动端注册表 服务类
+ * </p>
+ *
+ * @author han
+ * @since 2024-04-26
+ */
+public interface MceMbuserService extends CrudService<MceMbuser> {
+
+}

+ 32 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/MceReceiveService.java

@@ -0,0 +1,32 @@
+package com.usky.iot.service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.usky.common.core.bean.CommonPage;
+import com.usky.iot.domain.BaseBuild;
+import com.usky.iot.domain.DmpDeviceInfo;
+import com.usky.iot.domain.MceReceive;
+import com.usky.common.mybatis.core.CrudService;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 消息接收表 服务类
+ * </p>
+ *
+ * @author han
+ * @since 2024-04-19
+ */
+public interface MceReceiveService extends CrudService<MceReceive> {
+
+    CommonPage<Object> mceList(String infoTitle, String infoType, String startTime, String endTime, Integer current, Integer size);
+
+    CommonPage<Object> mceManageList(String infoTitle, String infoType, String startTime, String endTime, Integer current, Integer size);
+
+    CommonPage<MceReceive> mceManageById(Integer id, Integer current, Integer size);
+
+    Map<String, Object> mceReceiveStatic();
+
+    void updateMceReceive(MceReceive mceReceive);
+}

+ 24 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/MceSettingService.java

@@ -0,0 +1,24 @@
+package com.usky.iot.service;
+
+import com.usky.common.core.bean.CommonPage;
+import com.usky.iot.domain.MceSetting;
+import com.usky.common.mybatis.core.CrudService;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 消息设置表 服务类
+ * </p>
+ *
+ * @author han
+ * @since 2024-04-19
+ */
+public interface MceSettingService extends CrudService<MceSetting> {
+    void add(MceSetting mceSetting);
+
+    Map<String, Object> mceSettingInfo();
+
+    CommonPage<Map<String, Object>> mceSettingList(String createBy,Integer current, Integer size);
+}

+ 16 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/SysWxOpuserService.java

@@ -0,0 +1,16 @@
+package com.usky.iot.service;
+
+import com.usky.iot.domain.SysWxOpuser;
+import com.usky.common.mybatis.core.CrudService;
+
+/**
+ * <p>
+ * 微信用户openid信息表 服务类
+ * </p>
+ *
+ * @author han
+ * @since 2024-04-03
+ */
+public interface SysWxOpuserService extends CrudService<SysWxOpuser> {
+
+}

+ 23 - 19
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/BaseAlarmServiceImpl.java

@@ -3,9 +3,11 @@ package com.usky.iot.service.impl;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.usky.backend.client.DataQueryClient;
 import com.usky.backend.domain.StatusVO;
 import com.usky.common.core.bean.ApiResult;
@@ -187,7 +189,7 @@ public class BaseAlarmServiceImpl extends AbstractCrudService<BaseAlarmMapper, B
 
     public CommonPage<BaseAlarm> page(BaseAlarmListVO baseAlarmListVO){
         List<BaseAlarm> list = new ArrayList<>();
-
+        IPage<BaseAlarm> page = new Page<>(baseAlarmListVO.getCurrent(), baseAlarmListVO.getSize());
         LambdaQueryWrapper<BaseAlarm> queryWrapper = Wrappers.lambdaQuery();
         queryWrapper.eq(StringUtils.isNotBlank(baseAlarmListVO.getDeviceId()),BaseAlarm::getDeviceId,baseAlarmListVO.getDeviceId())
                 .eq(StringUtils.isNotBlank(baseAlarmListVO.getProductCode()),BaseAlarm::getProductCode,baseAlarmListVO.getProductCode())
@@ -195,7 +197,8 @@ public class BaseAlarmServiceImpl extends AbstractCrudService<BaseAlarmMapper, B
                         baseAlarmListVO.getAlarmType())
                 .eq(null != baseAlarmListVO.getHandleStatus(),BaseAlarm::getHandleStatus,baseAlarmListVO.getHandleStatus())
                 .between(StringUtils.isNotBlank(baseAlarmListVO.getStartTime()) && StringUtils.isNotBlank(baseAlarmListVO.getEndTime()),BaseAlarm::getAlarmTime,baseAlarmListVO.getStartTime(),baseAlarmListVO.getEndTime())
-                .eq(BaseAlarm::getTenantId,SecurityUtils.getTenantId());
+                .eq(BaseAlarm::getTenantId,SecurityUtils.getTenantId())
+                .eq(Objects.nonNull(baseAlarmListVO.getId()),BaseAlarm::getId,baseAlarmListVO.getId());
         if (StringUtils.isNotBlank(baseAlarmListVO.getTypeCode())){
             if (baseAlarmListVO.getTypeCode().equals("1")){
                 queryWrapper.eq(BaseAlarm::getAlarmGrade,1)
@@ -207,11 +210,12 @@ public class BaseAlarmServiceImpl extends AbstractCrudService<BaseAlarmMapper, B
         }else {
             queryWrapper.orderByDesc(BaseAlarm::getId);
         }
-        List<BaseAlarm> records = this.list(queryWrapper);
-        if(records.size()>0){
+        page = this.page(page,queryWrapper);
+//        List<BaseAlarm> records = this.list(queryWrapper);
+        if(page.getRecords().size()>0){
             List<String> devList = new ArrayList<>();
-            for(int i=0;i<records.size();i++){
-                devList.add(records.get(i).getDeviceId());
+            for(int i=0;i<page.getRecords().size();i++){
+                devList.add(page.getRecords().get(i).getDeviceId());
             }
 
             if(devList.size() > 0){
@@ -224,17 +228,17 @@ public class BaseAlarmServiceImpl extends AbstractCrudService<BaseAlarmMapper, B
                 lambdaQuery1.in(BaseFacilityDevice::getDeviceId,devList);
                 List<BaseFacilityDevice> records1 = baseFacilityDeviceService.list(lambdaQuery1);
                 if(CollectionUtils.isNotEmpty(deviceInfo)){
-                    for(int i=0;i<records.size();i++){
+                    for(int i=0;i<page.getRecords().size();i++){
                         for(int j=0;j<deviceInfo.size();j++){
-                            if(records.get(i).getDeviceId().equals(deviceInfo.get(j).getDeviceId())){
-                                records.get(i).setDeviceName(deviceInfo.get(j).getDeviceName());
-                                records.get(i).setDeviceType(deviceInfo.get(j).getDeviceType());
+                            if(page.getRecords().get(i).getDeviceId().equals(deviceInfo.get(j).getDeviceId())){
+                                page.getRecords().get(i).setDeviceName(deviceInfo.get(j).getDeviceName());
+                                page.getRecords().get(i).setDeviceType(deviceInfo.get(j).getDeviceType());
                                 break;
                             }
                         }
                         for(int k=0;k<records1.size();k++){
-                            if(records.get(i).getDeviceId().equals(records1.get(k).getDeviceId())){
-                                records.get(i).setFacilityId(records1.get(k).getFacilityId());
+                            if(page.getRecords().get(i).getDeviceId().equals(records1.get(k).getDeviceId())){
+                                page.getRecords().get(i).setFacilityId(records1.get(k).getFacilityId());
                                 break;
                             }
                         }
@@ -244,10 +248,10 @@ public class BaseAlarmServiceImpl extends AbstractCrudService<BaseAlarmMapper, B
 
             List<BaseAlarmType> alarmTypeList = baseMapper.getAlarmTypeList();
             if(CollectionUtils.isNotEmpty(alarmTypeList)){
-                for(int i=0;i<records.size();i++){
+                for(int i=0;i<page.getRecords().size();i++){
                     for(int j=0;j<alarmTypeList.size();j++){
-                        if(records.get(i).getAlarmType().equals(alarmTypeList.get(j).getTypeCode())){
-                            records.get(i).setTypeImg(alarmTypeList.get(j).getTypeImg());
+                        if(page.getRecords().get(i).getAlarmType().equals(alarmTypeList.get(j).getTypeCode())){
+                            page.getRecords().get(i).setTypeImg(alarmTypeList.get(j).getTypeImg());
                             break;
                         }
                     }
@@ -257,11 +261,11 @@ public class BaseAlarmServiceImpl extends AbstractCrudService<BaseAlarmMapper, B
         }
 
         if(StringUtils.isNotBlank(baseAlarmListVO.getDeviceName())){
-            list = records.stream().filter(e -> baseAlarmListVO.getDeviceName().equals(e.getDeviceName())).collect(Collectors.toList());
+            list = page.getRecords().stream().filter(e -> baseAlarmListVO.getDeviceName().equals(e.getDeviceName())).collect(Collectors.toList());
         }else {
-            if(records.size()>0){
-                for(int k=0;k<records.size();k++){
-                    list.add(records.get(k));
+            if(page.getRecords().size()>0){
+                for(int k=0;k<page.getRecords().size();k++){
+                    list.add(page.getRecords().get(k));
                 }
             }
 

+ 8 - 2
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/BaseFacilityTypeServiceImpl.java

@@ -143,12 +143,18 @@ public class BaseFacilityTypeServiceImpl extends AbstractCrudService<BaseFacilit
 
     @Override
     public boolean remove(Integer id) {
+        BaseFacilityType one = this.getById(id);
+        if(one == null){
+            throw new BusinessException("设施类型不存在");
+        }
+
         LambdaQueryWrapper<BaseGgpFacility> queryWrapper1 = Wrappers.lambdaQuery();
-        queryWrapper1.eq(BaseGgpFacility::getFacilityType, id);
+        queryWrapper1.eq(BaseGgpFacility::getFacilityType, one.getTypeCode());
         int facilityNum = baseGgpFacilityService.getBaseMapper().selectCount(queryWrapper1);
         if (facilityNum>0) {
-            throw new BusinessException("设施类型删除失败,该设施类型下有设施绑定");
+            throw new BusinessException("当前类型已有关联设施,不可删除");
         }
+
         return this.removeById(id);
     }
 }

+ 13 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/DmpDeviceTypeServiceImpl.java

@@ -51,6 +51,9 @@ public class DmpDeviceTypeServiceImpl extends AbstractCrudService<DmpDeviceTypeM
     @Transactional(rollbackFor = Exception.class)
     @Override
     public void edit(DmpDeviceType dmpDeviceType) {
+        if (checkNameUnique(dmpDeviceType)) {
+            throw new BusinessException("修改设备类型'" + dmpDeviceType.getTypeName() + "'失败,该设备类型已经存在");
+        }
         dmpDeviceType.setUpdatedBy(SecurityUtils.getUsername());
         dmpDeviceType.setUpdatedTime(LocalDateTime.now());
         this.updateById(dmpDeviceType);
@@ -67,6 +70,16 @@ public class DmpDeviceTypeServiceImpl extends AbstractCrudService<DmpDeviceTypeM
 
     @Override
     public void remove(Integer id) {
+        DmpDeviceType one = this.getById(id);
+        if(one == null){
+            throw new BusinessException("设备类型不存在");
+        }
+
+        List<DmpProductInfo> list = baseMapper.getProductInfoList(one.getTypeCode());
+        if(list.size() > 0){
+            throw new BusinessException("当前类型已有关联产品,不可删除");
+        }
+
         this.removeById(id);
     }
 

+ 20 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/MceContentServiceImpl.java

@@ -0,0 +1,20 @@
+package com.usky.iot.service.impl;
+
+import com.usky.iot.domain.MceContent;
+import com.usky.iot.mapper.MceContentMapper;
+import com.usky.iot.service.MceContentService;
+import com.usky.common.mybatis.core.AbstractCrudService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 消息内容表 服务实现类
+ * </p>
+ *
+ * @author han
+ * @since 2024-04-19
+ */
+@Service
+public class MceContentServiceImpl extends AbstractCrudService<MceContentMapper, MceContent> implements MceContentService {
+
+}

+ 20 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/MceMbuserServiceImpl.java

@@ -0,0 +1,20 @@
+package com.usky.iot.service.impl;
+
+import com.usky.iot.domain.MceMbuser;
+import com.usky.iot.mapper.MceMbuserMapper;
+import com.usky.iot.service.MceMbuserService;
+import com.usky.common.mybatis.core.AbstractCrudService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 消息中心_移动端注册表 服务实现类
+ * </p>
+ *
+ * @author han
+ * @since 2024-04-26
+ */
+@Service
+public class MceMbuserServiceImpl extends AbstractCrudService<MceMbuserMapper, MceMbuser> implements MceMbuserService {
+
+}

+ 210 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/MceReceiveServiceImpl.java

@@ -0,0 +1,210 @@
+package com.usky.iot.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.usky.common.core.bean.ApiResult;
+import com.usky.common.core.bean.CommonPage;
+import com.usky.common.security.utils.SecurityUtils;
+import com.usky.iot.domain.BaseBuild;
+import com.usky.iot.domain.MceContent;
+import com.usky.iot.domain.MceReceive;
+import com.usky.iot.mapper.MceReceiveMapper;
+import com.usky.iot.service.MceContentService;
+import com.usky.iot.service.MceReceiveService;
+import com.usky.common.mybatis.core.AbstractCrudService;
+import com.usky.system.RemoteUserService;
+import com.usky.system.domain.SysUser;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 消息接收表 服务实现类
+ * </p>
+ *
+ * @author han
+ * @since 2024-04-19
+ */
+@Service
+public class MceReceiveServiceImpl extends AbstractCrudService<MceReceiveMapper, MceReceive> implements MceReceiveService {
+
+    @Autowired
+    private MceContentService mceContentService;
+
+    @Autowired
+    private RemoteUserService remoteUserService;
+
+    @Override
+    public CommonPage<Object> mceList(String infoTitle, String infoType, String startTime, String endTime, Integer current, Integer size) {
+        List<Object> list = new ArrayList<>();
+        LambdaQueryWrapper<MceContent> lambdaQuery1 = Wrappers.lambdaQuery();
+        lambdaQuery1.select(MceContent::getId, MceContent::getInfoTitle, MceContent::getInfoContent)
+                .like(StringUtils.isNotBlank(infoTitle),MceContent::getInfoTitle,infoTitle);
+        List<MceContent> list1 = mceContentService.list(lambdaQuery1);
+        IPage<MceReceive> page = new Page<>(current, size);
+        List<Integer> contentIds = new ArrayList<>();
+        if (CollectionUtils.isNotEmpty(list1)){
+            for(int i=0;i<list1.size();i++){
+                contentIds.add(list1.get(i).getId());
+            }
+            LambdaQueryWrapper<MceReceive> lambdaQuery = Wrappers.lambdaQuery();
+            lambdaQuery.select(MceReceive::getId, MceReceive::getInfoType,
+                    MceReceive::getContentId, MceReceive::getReadFlag, MceReceive::getCreateTime,
+                    MceReceive::getReceiverId,MceReceive::getModuleId)
+                    .between(StringUtils.isNotBlank(startTime)&&StringUtils.isNotBlank(endTime),MceReceive::getCreateTime,
+                            startTime,endTime)
+                    .eq(StringUtils.isNotBlank(infoType),MceReceive::getInfoType, infoType)
+//                .eq(MceReceive::getReceiverId, SecurityUtils.getUserId())
+                    .in(CollectionUtils.isNotEmpty(contentIds),MceReceive::getContentId,contentIds);
+//                .inSql(StringUtils.isNotBlank(infoTitle),MceReceive::getContentId,"SELECT id FROM mce_content WHERE " +
+//                        "info_title like '%" + infoTitle + "%' AND tenant_id = "+SecurityUtils.getTenantId()+"");
+            page = this.page(page,lambdaQuery);
+            if (CollectionUtils.isNotEmpty(page.getRecords())) {
+                for (int i = 0; i < page.getRecords().size(); i++) {
+                    Map<String, Object> map = new HashMap<>();
+                    map.put("id", page.getRecords().get(i).getId());
+                    map.put("infoType", page.getRecords().get(i).getInfoType());
+                    map.put("readFlag", page.getRecords().get(i).getReadFlag());
+                    map.put("moduleId", page.getRecords().get(i).getModuleId());
+                    map.put("createTime", page.getRecords().get(i).getCreateTime());
+                    if (CollectionUtils.isNotEmpty(list1)) {
+                        for (int j = 0; j < list1.size(); j++) {
+                            if (page.getRecords().get(i).getContentId().equals(list1.get(j).getId())) {
+                                map.put("infoTitle", list1.get(j).getInfoTitle());
+                                map.put("infoContent", list1.get(j).getInfoContent());
+                            }
+                        }
+                    }
+                    list.add(map);
+                }
+            }
+        }
+        return new CommonPage<>(list,page.getTotal(),page.getCurrent(),page.getSize());
+    }
+
+    @Override
+    public CommonPage<Object> mceManageList(String infoTitle, String infoType, String startTime, String endTime, Integer current, Integer size) {
+        List<Object> list = new ArrayList<>();
+        IPage<MceContent> page = new Page<>(current, size);
+        LambdaQueryWrapper<MceContent> lambdaQuery1 = Wrappers.lambdaQuery();
+        lambdaQuery1.select(MceContent::getId, MceContent::getInfoTitle, MceContent::getInfoContent,
+                MceContent::getCreateTime,MceContent::getInfoType)
+                .like(StringUtils.isNotBlank(infoTitle),MceContent::getInfoTitle,infoTitle)
+                .between(StringUtils.isNotBlank(startTime)&&StringUtils.isNotBlank(endTime),MceContent::getCreateTime,
+                        startTime,endTime)
+                .eq(StringUtils.isNotBlank(infoType),MceContent::getInfoType, infoType)
+                .eq(MceContent::getCreateBy,SecurityUtils.getUsername())
+                .eq(MceContent::getTenantId,SecurityUtils.getTenantId());
+        page = mceContentService.page(page,lambdaQuery1);
+        if (CollectionUtils.isNotEmpty(page.getRecords())) {
+            List<Integer> contentIds = new ArrayList<>();
+            for (int i = 0; i < page.getRecords().size(); i++) {
+                contentIds.add(page.getRecords().get(i).getId());
+            }
+            QueryWrapper<MceReceive> queryWrapper = Wrappers.query();
+            queryWrapper.select("content_id AS contentId","COUNT(read_flag=0 or null) as notReadCount","COUNT(read_flag=1 or null) as readCount")
+                    .in("content_id",contentIds)
+                    .groupBy("content_id");
+            List<Map<String,Object>> readStatisticList = this.listMaps(queryWrapper);
+            for (int i = 0; i < page.getRecords().size(); i++) {
+                Map<String, Object> map = new HashMap<>();
+                map.put("id", page.getRecords().get(i).getId());
+                map.put("infoTitle", page.getRecords().get(i).getInfoTitle());
+                map.put("infoContent", page.getRecords().get(i).getInfoContent());
+                map.put("infoType", page.getRecords().get(i).getInfoType());
+                map.put("createTime", page.getRecords().get(i).getCreateTime());
+                for (int j = 0; j < readStatisticList.size(); j++) {
+                    if (page.getRecords().get(i).getId().equals(readStatisticList.get(j).get("contentId"))){
+                        map.put("notReadCount", readStatisticList.get(j).get("notReadCount"));
+                        map.put("readCount", readStatisticList.get(j).get("readCount"));
+                    }
+                }
+                list.add(map);
+            }
+        }
+        return new CommonPage<>(list,page.getTotal(),page.getCurrent(),page.getSize());
+    }
+
+    @Override
+    public CommonPage<MceReceive> mceManageById(Integer id, Integer current, Integer size) {
+        IPage<MceReceive> page = new Page<>(current, size);
+        LambdaQueryWrapper<MceReceive> lambdaQuery = Wrappers.lambdaQuery();
+        lambdaQuery.eq(MceReceive::getContentId,id);
+        page = this.page(page,lambdaQuery);
+//        if (CollectionUtils.isNotEmpty(page.getRecords())) {
+//            List<Integer> userIds = new ArrayList<>();
+//            for (int i = 0; i < page.getRecords().size(); i++) {
+//                userIds.add(page.getRecords().get(i).getReceiverId());
+//            }
+//            List<Integer> distinctUserIds = userIds.stream()
+//                    .distinct()
+//                    .collect(Collectors.toList());
+//            ApiResult<List<SysUser>> userApi = remoteUserService.userByIdList(distinctUserIds);
+//            List<SysUser> list1 = userApi.getData();
+//            for (int j = 0; j < page.getRecords().size(); j++) {
+//                if (CollectionUtils.isNotEmpty(list1)){
+//                    for (int k = 0; k < list1.size(); k++) {
+//                        long longValue = list1.get(k).getUserId();
+//                        Integer intValue = (int) longValue;
+//                        if (page.getRecords().get(j).getReceiverId().equals(intValue)){
+//                            page.getRecords().get(j).setUpdateBy(list1.get(k).getUserName());
+//                        }
+//                    }
+//                }
+//            }
+//        }
+        return new CommonPage<>(page.getRecords(),page.getTotal(),page.getCurrent(),page.getSize());
+    }
+
+    @Override
+    public Map<String, Object> mceReceiveStatic() {
+        LocalDateTime currentDate = LocalDateTime.now();
+        LocalDateTime oneYearAgo = currentDate.minusYears(1);
+        LocalDateTime zeroTime = oneYearAgo.withHour(0).withMinute(0).withSecond(0);
+        QueryWrapper<MceReceive> queryWrapper = Wrappers.query();
+        queryWrapper.select("COUNT(read_flag=0 or null) as notReadCount","COUNT(read_flag=1 or null) as readCount"
+                ,"info_type AS infoType")
+                .eq("receiver_id",SecurityUtils.getUserId())
+                .between("create_time",zeroTime,currentDate)
+                .groupBy("info_type");
+        List<Map<String,Object>> readStatisticList = this.listMaps(queryWrapper);
+        LambdaQueryWrapper<MceReceive> lambdaQuery = Wrappers.lambdaQuery();
+        lambdaQuery.eq(MceReceive::getReceiverId,SecurityUtils.getUserId())
+                .eq(MceReceive::getReadFlag,0);
+        Integer notReadCount = this.count(lambdaQuery);
+        Map<String, Object> map = new HashMap<>();
+        map.put("notReadCount", notReadCount);
+        map.put("infoTypeStatic", readStatisticList);
+        return map;
+    }
+
+    @Override
+    public void updateMceReceive(MceReceive mceReceive){
+        LambdaUpdateWrapper<MceReceive> updateWrapper = new UpdateWrapper<MceReceive>().lambda();
+        if (Objects.nonNull(mceReceive.getId())&&!mceReceive.getId().equals(0)){
+            updateWrapper.eq(MceReceive::getId,mceReceive.getId())
+                    .set(MceReceive::getReadFlag,1)
+                    .set(MceReceive::getUpdateBy,SecurityUtils.getUsername())
+                    .set(MceReceive::getUpdateTime,LocalDateTime.now());
+        }else {
+            updateWrapper.eq(MceReceive::getReceiverId,SecurityUtils.getUserId())
+                    .eq(MceReceive::getReadFlag,0)
+                    .set(MceReceive::getReadFlag,1)
+                    .set(MceReceive::getUpdateBy,SecurityUtils.getUsername())
+                    .set(MceReceive::getUpdateTime,LocalDateTime.now());
+        }
+        this.update(updateWrapper);
+    }
+}

+ 97 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/MceSettingServiceImpl.java

@@ -0,0 +1,97 @@
+package com.usky.iot.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.usky.common.core.bean.CommonPage;
+import com.usky.common.security.utils.SecurityUtils;
+import com.usky.iot.domain.MceContent;
+import com.usky.iot.domain.MceReceive;
+import com.usky.iot.domain.MceSetting;
+import com.usky.iot.mapper.MceSettingMapper;
+import com.usky.iot.service.MceSettingService;
+import com.usky.common.mybatis.core.AbstractCrudService;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 消息设置表 服务实现类
+ * </p>
+ *
+ * @author han
+ * @since 2024-04-19
+ */
+@Service
+public class MceSettingServiceImpl extends AbstractCrudService<MceSettingMapper, MceSetting> implements MceSettingService {
+    @Override
+    public void add(MceSetting mceSetting){
+        if (mceSetting.getId().equals(0)){
+            mceSetting.setCreateBy(SecurityUtils.getUsername());
+            mceSetting.setCreateTime(LocalDateTime.now());
+            mceSetting.setTenantId(SecurityUtils.getTenantId());
+            long longValue = SecurityUtils.getLoginUser().getSysUser().getDeptId();
+            Integer intValue = (int) longValue;
+            mceSetting.setDeptId(intValue);
+            this.save(mceSetting);
+        }else {
+            mceSetting.setUpdateBy(SecurityUtils.getUsername());
+            mceSetting.setUpdateTime(LocalDateTime.now());
+            this.updateById(mceSetting);
+        }
+    }
+    @Override
+    public Map<String, Object> mceSettingInfo() {
+        LambdaQueryWrapper<MceSetting> lambdaQuery = Wrappers.lambdaQuery();
+        lambdaQuery.eq(MceSetting::getCreateBy, SecurityUtils.getUsername())
+                .eq(MceSetting::getTenantId,SecurityUtils.getTenantId());
+        List<MceSetting> list1 = this.list(lambdaQuery);
+        Map<String, Object> map = new HashMap<>();
+        if (CollectionUtils.isEmpty(list1)) {
+            Map<String, Object> map1 = new HashMap<>();
+            map1.put("1", true);
+            map1.put("2", true);
+            map1.put("3", true);
+            map1.put("4", true);
+            map.put("appMode",map1);
+            map.put("pcMode",map1);
+            map.put("wcMode",map1);
+        }else {
+            map.put("appMode",JSONObject.parseObject(list1.get(0).getAppMode()));
+            map.put("pcMode",JSONObject.parseObject(list1.get(0).getPcMode()));
+            map.put("wcMode",JSONObject.parseObject(list1.get(0).getWcMode()));
+        }
+        return map;
+    }
+
+    @Override
+    public CommonPage<Map<String, Object>> mceSettingList(String createBy,Integer current, Integer size) {
+        IPage<MceSetting> page = new Page<>(current, size);
+        List<Map<String, Object>> list = new ArrayList<>();
+        LambdaQueryWrapper<MceSetting> lambdaQuery = Wrappers.lambdaQuery();
+        lambdaQuery.eq(MceSetting::getTenantId,SecurityUtils.getTenantId())
+                .like(StringUtils.isNotBlank(createBy),MceSetting::getCreateBy,createBy);
+        page = this.page(page,lambdaQuery);
+        if (CollectionUtils.isNotEmpty(page.getRecords())) {
+            for (int i = 0; i < page.getRecords().size(); i++) {
+                Map<String, Object> map = new HashMap<>();
+                map.put("id",page.getRecords().get(i).getId());
+                map.put("createBy",page.getRecords().get(i).getCreateBy());
+                map.put("appMode",JSONObject.parseObject(page.getRecords().get(i).getAppMode()));
+                map.put("pcMode",JSONObject.parseObject(page.getRecords().get(i).getPcMode()));
+                map.put("wcMode",JSONObject.parseObject(page.getRecords().get(i).getWcMode()));
+                list.add(map);
+            }
+        }
+        return new CommonPage<>(list,page.getTotal(),page.getCurrent(),page.getSize());
+    }
+}

+ 20 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/SysWxOpuserServiceImpl.java

@@ -0,0 +1,20 @@
+package com.usky.iot.service.impl;
+
+import com.usky.iot.domain.SysWxOpuser;
+import com.usky.iot.mapper.SysWxOpuserMapper;
+import com.usky.iot.service.SysWxOpuserService;
+import com.usky.common.mybatis.core.AbstractCrudService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 微信用户openid信息表 服务实现类
+ * </p>
+ *
+ * @author han
+ * @since 2024-04-03
+ */
+@Service
+public class SysWxOpuserServiceImpl extends AbstractCrudService<SysWxOpuserMapper, SysWxOpuser> implements SysWxOpuserService {
+
+}

+ 5 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/vo/BaseAlarmListVO.java

@@ -15,6 +15,11 @@ public class BaseAlarmListVO {
      */
     private Integer size;
 
+    /**
+     * 主键ID
+     */
+    private Integer id;
+
     /**
      * 产品编码
      */

+ 31 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/vo/SendWeChatMessageRequestVO.java

@@ -0,0 +1,31 @@
+package com.usky.iot.service.vo;
+
+import lombok.Data;
+
+@Data
+public class SendWeChatMessageRequestVO {
+    /**
+     * 消息类型
+     */
+    String infoType;
+
+    /**
+     * 消息标题
+     */
+    String infoTitle;
+
+    /**
+     * 消息内容
+     */
+    String infoContent;
+
+    /**
+     * 消息Id
+     */
+    Integer infoId;
+
+    /**
+     * openId
+     */
+    String openId;
+}

+ 17 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/vo/SignUpRequestVO.java

@@ -0,0 +1,17 @@
+package com.usky.iot.service.vo;
+
+import lombok.Data;
+
+@Data
+public class SignUpRequestVO {
+
+    /**
+     * 验证码
+     */
+    private String verify;
+
+    /**
+     * 手机号
+     */
+    private String phone;
+}

+ 48 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/vo/TemplateMsgEntityVO.java

@@ -0,0 +1,48 @@
+package com.usky.iot.service.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class TemplateMsgEntityVO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 标题
+     */
+    private String tTitle;
+    /**
+     * 第一行
+     */
+    private String tKeyword1;
+    /**
+     * 第二行
+     */
+    private String tKeyword2;
+    /**
+     * 第三行
+     */
+    private String tKeyword3;
+    /**
+     * 第四行
+     */
+    private String tKeyword4;
+    /**
+     * 备注
+     */
+    private String tRemark;
+    /**
+     * 跳转连接
+     */
+    private String tUrl;
+    /**
+     * 模板Id
+     */
+    private String templateId;
+    /**
+     * 状态
+     */
+    private int tStatus;
+
+}

+ 12 - 0
service-iot/service-iot-biz/src/main/resources/mapper/iot/DmpDeviceTypeMapper.xml

@@ -31,5 +31,17 @@
             </if>
         </where>
     </select>
+    <select id="getProductInfoList" resultType="com.usky.iot.domain.DmpProductInfo">
+        select *
+        from dmp_product
+        <where>
+            <if test="typeCode != null">
+                and device_type = #{typeCode}
+            </if>
+            <if test="1 == 1">
+                and delete_flag = 0
+            </if>
+        </where>
+    </select>
 
 </mapper>

+ 19 - 0
service-iot/service-iot-biz/src/main/resources/mapper/iot/MceContentMapper.xml

@@ -0,0 +1,19 @@
+<?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="com.usky.iot.mapper.MceContentMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.usky.iot.domain.MceContent">
+        <id column="id" property="id" />
+        <result column="info_title" property="infoTitle" />
+        <result column="info_content" property="infoContent" />
+        <result column="info_type" property="infoType" />
+        <result column="tenant_id" property="tenantId" />
+        <result column="dept_id" property="deptId" />
+        <result column="create_by" property="createBy" />
+        <result column="create_time" property="createTime" />
+        <result column="update_by" property="updateBy" />
+        <result column="update_time" property="updateTime" />
+    </resultMap>
+
+</mapper>

+ 18 - 0
service-iot/service-iot-biz/src/main/resources/mapper/iot/MceMbuserMapper.xml

@@ -0,0 +1,18 @@
+<?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="com.usky.iot.mapper.MceMbuserMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.usky.iot.domain.MceMbuser">
+        <id column="id" property="id" />
+        <result column="phone" property="phone" />
+        <result column="openid" property="openid" />
+        <result column="user_id" property="userId" />
+        <result column="cids" property="cids" />
+        <result column="create_by" property="createBy" />
+        <result column="create_time" property="createTime" />
+        <result column="update_by" property="updateBy" />
+        <result column="update_time" property="updateTime" />
+    </resultMap>
+
+</mapper>

+ 22 - 0
service-iot/service-iot-biz/src/main/resources/mapper/iot/MceReceiveMapper.xml

@@ -0,0 +1,22 @@
+<?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="com.usky.iot.mapper.MceReceiveMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.usky.iot.domain.MceReceive">
+        <id column="id" property="id" />
+        <result column="receiver_id" property="receiverId" />
+        <result column="receiver_name" property="receiverName" />
+        <result column="info_type" property="infoType" />
+        <result column="read_flag" property="readFlag" />
+        <result column="content_id" property="contentId" />
+        <result column="module_id" property="moduleId" />
+        <result column="tenant_id" property="tenantId" />
+        <result column="dept_id" property="deptId" />
+        <result column="create_by" property="createBy" />
+        <result column="create_time" property="createTime" />
+        <result column="update_by" property="updateBy" />
+        <result column="update_time" property="updateTime" />
+    </resultMap>
+
+</mapper>

+ 19 - 0
service-iot/service-iot-biz/src/main/resources/mapper/iot/MceSettingMapper.xml

@@ -0,0 +1,19 @@
+<?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="com.usky.iot.mapper.MceSettingMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.usky.iot.domain.MceSetting">
+        <id column="id" property="id" />
+        <result column="app_mode" property="appMode" />
+        <result column="pc_mode" property="pcMode" />
+        <result column="wc_mode" property="wcMode" />
+        <result column="tenant_id" property="tenantId" />
+        <result column="dept_id" property="deptId" />
+        <result column="create_by" property="createBy" />
+        <result column="create_time" property="createTime" />
+        <result column="update_by" property="updateBy" />
+        <result column="update_time" property="updateTime" />
+    </resultMap>
+
+</mapper>

+ 17 - 0
service-iot/service-iot-biz/src/main/resources/mapper/iot/SysWxOpuserMapper.xml

@@ -0,0 +1,17 @@
+<?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="com.usky.iot.mapper.SysWxOpuserMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.usky.iot.domain.SysWxOpuser">
+        <id column="id" property="id" />
+        <result column="phone" property="phone" />
+        <result column="openid" property="openid" />
+        <result column="type" property="type" />
+        <result column="created_time" property="createdTime" />
+        <result column="status" property="status" />
+        <result column="dept_id" property="deptId" />
+        <result column="tenant_id" property="tenantId" />
+    </resultMap>
+
+</mapper>

+ 1 - 1
service-meeting/service-meeting-biz/src/main/java/com/usky/meeting/repository/MeetingInfoRepository.java

@@ -160,7 +160,7 @@ public interface MeetingInfoRepository extends JpaRepository<MeetingInfo, Long>,
             " date_format(a.end_date,'%Y-%m-%d %H:%i:%s') as endDate" +
             " from meeting_info as a" +
             " where a.room_id = :roomId" +
-            " and ((start_date <= :startDate and end_date >= :startDate and end_date != :startDate) or (start_date <= :endDate and end_date >= :endDate and start_date != :endDate))" +
+            " and ((a.start_date <= :startDate and a.end_date >= :startDate and a.end_date != :startDate) or (a.start_date <= :endDate and a.end_date >= :endDate and a.start_date != :endDate))" +
             " and if(:meetingId != '',a.meeting_id != :meetingId,1=1)" +
             " and a.is_cancel = 0 and a.meeting_status != 2 and a.approve_status != 2",nativeQuery = true)
     List<Map<String,String>> checkDmRoomMeetingDate(@Param("roomId") Long roomId,

+ 6 - 2
service-meeting/service-meeting-biz/src/main/java/com/usky/meeting/service/impl/MeetingRoomServiceImpl.java

@@ -192,8 +192,10 @@ public class MeetingRoomServiceImpl extends AbstractCrudService<MeetingRoomMappe
         map.put("userName", userName);
         List<MeetingAttendee> list = meetingAttendeeRepository.findMeetingAttendeeList(meetingId, userId, tenantId);
         if (org.springframework.util.CollectionUtils.isEmpty(list)) {
+            map.put("status","0");
             map.put("msg", "您当前没有需要参加的会议");
         } else {
+            map.put("status","1");
             map.put("msg", "验证成功");
         }
         return map;
@@ -203,10 +205,12 @@ public class MeetingRoomServiceImpl extends AbstractCrudService<MeetingRoomMappe
     public List<DmMeetingRoomDto> getMeetingRoomReservationList(MeetingRoomReservationVO reservationVO) throws ParseException {
         List<DmMeetingRoomDto> list = new ArrayList<>();
         List<DmMeetingRoomDto> newDmMeetingRoomDtoList = new ArrayList<>();
+        String meetingRoomName = reservationVO.getMeetingRoomName();
         Long meetingRoomId = reservationVO.getMeetingRoomId();
         LambdaQueryWrapper<MeetingRoom> queryWrapper = Wrappers.lambdaQuery();
-        queryWrapper.eq(meetingRoomId != null, MeetingRoom::getRoomId, meetingRoomId)
-                .eq(MeetingRoom::getTenantId, SecurityUtils.getTenantId());
+        queryWrapper.eq(meetingRoomId != null,MeetingRoom::getRoomId,reservationVO.getMeetingRoomId())
+                .like(StringUtils.isNotBlank(meetingRoomName),MeetingRoom::getRoomName,meetingRoomName)
+                .eq(MeetingRoom::getTenantId,SecurityUtils.getTenantId());
         List<MeetingRoom> list1 = this.list(queryWrapper);
         List<Long> floorIdList = new ArrayList<>();
         if (CollectionUtils.isNotEmpty(list1)) {

+ 3 - 0
service-meeting/service-meeting-biz/src/main/java/com/usky/meeting/service/vo/MeetingRoomReservationVO.java

@@ -1,5 +1,7 @@
 package com.usky.meeting.service.vo;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.squareup.moshi.Json;
 import lombok.Data;
 
 @Data
@@ -8,6 +10,7 @@ public class MeetingRoomReservationVO {
     /**
      * 会议室id
      */
+    @JsonFormat(shape = JsonFormat.Shape.STRING)
     private Long meetingRoomId;
 
     /**