Browse Source

feat:"MQTT增加音量修改,机器密码修改,操作开门,重启屏幕,开关机"

soobin 3 weeks ago
parent
commit
197856a18c

+ 6 - 1
src/main/java/com/szwl/constant/OperationType.java

@@ -24,7 +24,12 @@ public enum OperationType implements IEnum<String> {
     ELIMINATE("eliminate","消除屏幕报警"),
     MATERIAL("material","物料监控开关"),
     MACHINE_STATUS("machineStatus","设备状态"),
-    PRODUCE_GOODS("produceGoods","制作商品");
+    PRODUCE_GOODS("produceGoods","制作商品"),
+    OPEN_DOOR("openDoor","开门"),
+    PASSWORD("password","修改密码"),
+    RESTART_ANDROID("restartAndroid","重启屏幕"),
+    SLEEP("sleep","休眠"),
+    EQE_STATUS("eqeStatus", "开关机");
 
     private String code;
 

+ 126 - 14
src/main/java/com/szwl/controller/TEquipmentController.java

@@ -29,10 +29,7 @@ import com.szwl.model.bo.R;
 import com.szwl.model.bo.ResponseModel;
 import com.szwl.model.bo.UserDetailBO;
 import com.szwl.model.entity.*;
-import com.szwl.model.param.DoSugarParam;
-import com.szwl.model.param.EquipmentParam;
-import com.szwl.model.param.PasswordParam;
-import com.szwl.model.param.SmokeJamParm;
+import com.szwl.model.param.*;
 import com.szwl.model.query.StatisticsParam;
 import com.szwl.model.utils.DateUtils;
 import com.szwl.model.utils.PushUtils;
@@ -337,7 +334,7 @@ public class TEquipmentController {
         String adminName = param.getAdminName();
         String equipmentName = param.getEquipmentName();
         String areaName = param.getAreaName();
-        String eqeStatus = param.getEqeStatus();
+        Integer eqeStatus = param.getEqeStatus();
         String machineType = param.getMachineType();
         String equimentType = param.getEquimentType();
         String labelId = param.getLabelId();
@@ -390,7 +387,7 @@ public class TEquipmentController {
         if (StringUtils.isNotEmpty(areaName)) {
             query.like(TEquipment::getFullName, areaName);
         }
-        if (StringUtils.isNotEmpty(eqeStatus)) {
+        if (eqeStatus != null) {
             query.eq(TEquipment::getEqeStatus, eqeStatus);
         }
         if (StringUtils.isNotEmpty(machineType)) {
@@ -2194,14 +2191,6 @@ public class TEquipmentController {
         return R.fail(ResponseCodesEnum.A0001);
     }
 
-
-    /**
-     * 上传日志
-     *
-     * @param equipmentId 设备ID,用于标识上传日志的设备
-     * @param day         日期,指定要上传日志的日期
-     * @return 返回操作结果,成功则返回成功信息,失败则返回失败原因
-     */
     @ApiOperation(value = "上传日志")
     @GetMapping("/newUploadLog")
     public ResponseModel<?> newUploadLog(String equipmentId, String day) {
@@ -2232,7 +2221,130 @@ public class TEquipmentController {
         return R.ok();
     }
 
+    @ApiOperation(value = "修改音量")
+    @PostMapping("/changeVolume")
+    public ResponseModel<?> changeVolume(@RequestBody TEquipment param) {
+        UserDetailBO userDetailBO = Optional.ofNullable(tokenManager.getLoginUserDetails())
+                .orElseThrow(() -> new BizException(ResponseCodesEnum.L0001));
+        Long adminId = userDetailBO.getId();
+        TEquipment equipment = tEquipmentService.getById(param.getId());
+        if (equipment != null) {
+            String volume = param.getVolume();
+            String message = PushUtils.buildJson(OperationType.VOLUME.getCode(), volume).toString();
+            tEquipmentService.sendRemoteMessage(equipment.getClientId(), OperationType.VOLUME, message, adminId);
+            return R.ok();
+        }
+        return R.fail(ResponseCodesEnum.A0001);
+    }
+
+    @ApiOperation(value = "修改机器密码")
+    @PostMapping("/changePassword")
+    public ResponseModel<?> changePassword(@RequestBody EquipmentParam param) {
+        UserDetailBO userDetailBO = Optional.ofNullable(tokenManager.getLoginUserDetails())
+                .orElseThrow(() -> new BizException(ResponseCodesEnum.L0001));
+        Long adminId = userDetailBO.getId();
+
+        Long id = param.getId();
+        TEquipment equipment = tEquipmentService.getById(id);
+        if (equipment != null) {
+            String adminPwd = param.getAdminPwd();
+            String guestPwd = param.getGuestPwd();
+            JSONObject kindData = new JSONObject();
+            if (StringUtils.isNotEmpty(guestPwd)) {
+                kindData.put("type", "0");
+                kindData.put("password", guestPwd);
+                String message = PushUtils.buildJson(OperationType.PASSWORD.getCode(), kindData.toString()).toString();
+                tEquipmentService.sendRemoteMessage(equipment.getClientId(), OperationType.PASSWORD, message, adminId);
+            }
+            if (StringUtils.isNotEmpty(adminPwd)) {
+                kindData.put("type", "1");
+                kindData.put("password", adminPwd);
+                String message = PushUtils.buildJson(OperationType.PASSWORD.getCode(), kindData.toString()).toString();
+                tEquipmentService.sendRemoteMessage(equipment.getClientId(), OperationType.PASSWORD, message, adminId);
+            }
+            return R.ok();
+        }
+        return R.fail(ResponseCodesEnum.A0001, "找不到设备");
+    }
+
+    @ApiOperation("操作开门")
+    @PostMapping("/newOpenDoor")
+    public ResponseModel<?> newOpenDoor(@RequestBody EquipmentDescParam param) {
+        UserDetailBO userDetailBO = Optional.ofNullable(tokenManager.getLoginUserDetails())
+                .orElseThrow(() -> new BizException(ResponseCodesEnum.L0001));
+        Long adminId = userDetailBO.getId();
+
+        Long equipmentId = param.getId();
+        TEquipment equipment = tEquipmentService.getById(equipmentId);
+        if (equipment != null) {
+            String type = param.getType();
+            String status = param.getStatus();
+            JSONObject kindData = new JSONObject();
+            kindData.put("type", type);
+            kindData.put("status", status);
+            String message = PushUtils.buildJson(OperationType.OPEN_DOOR.getCode(), kindData.toString()).toString();
+            tEquipmentService.sendRemoteMessage(equipment.getClientId(), OperationType.OPEN_DOOR, message, adminId);
+            return R.ok();
+        }
+        return R.fail(ResponseCodesEnum.A0001);
+    }
+
+    @ApiOperation(value = "重启触摸屏")
+    @GetMapping("/restartScreen")
+    public ResponseModel<?> restartScreen(String equipmentId) {
+        UserDetailBO userDetailBO = Optional.ofNullable(tokenManager.getLoginUserDetails())
+                .orElseThrow(() -> new BizException(ResponseCodesEnum.L0001));
+        Long adminId = userDetailBO.getId();
+
+        TEquipment equipment = tEquipmentService.getById(equipmentId);
+        if (equipment != null) {
+            String clientId = equipment.getClientId();
+            String message = PushUtils.buildJson(OperationType.RESTART_ANDROID.getCode(), OperationType.RESTART_ANDROID.getCode()).toString();
+            tEquipmentService.sendRemoteMessage(equipment.getClientId(), OperationType.RESTART_ANDROID, message, adminId);
+            return R.ok();
+        }
+        return R.fail(ResponseCodesEnum.A0001);
+    }
+
+    @ApiOperation(value = "机器睡眠")
+    @PostMapping("/switchSleep")
+    public ResponseModel<?> switchSleep(@RequestBody EquipmentParam param) {
+        UserDetailBO userDetailBO = Optional.ofNullable(tokenManager.getLoginUserDetails())
+                .orElseThrow(() -> new BizException(ResponseCodesEnum.L0001));
+        Long adminId = userDetailBO.getId();
 
+        TEquipment equipment = tEquipmentService.getById(param.getId());
+        if (equipment != null) {
+            String clientId = equipment.getClientId();
+            String isSleep = param.getIsSleep();
+            String message = PushUtils.buildJson(OperationType.SLEEP.getCode(), isSleep).toString();
+            tEquipmentService.sendRemoteMessage(equipment.getClientId(), OperationType.SLEEP, message, adminId);
+            return R.ok();
+        }
+        return R.fail(ResponseCodesEnum.A0001);
+    }
+
+    @ApiOperation(value = "机器开关机")
+    @PostMapping("/powerOnOff")
+    public ResponseModel<?> powerOnOff(@RequestBody EquipmentParam param) {
+        UserDetailBO userDetailBO = Optional.ofNullable(tokenManager.getLoginUserDetails())
+                .orElseThrow(() -> new BizException(ResponseCodesEnum.L0001));
+        Long adminId = userDetailBO.getId();
+
+        TEquipment equipment = tEquipmentService.getById(param.getId());
+        if (equipment != null) {
+            String clientId = equipment.getClientId();
+            Integer eqeStatus = param.getEqeStatus();
+            Long time = getNetworkTime();
+            if (time == null) {
+                time = System.currentTimeMillis();
+            }
+            String message = PushUtils.buildJson(OperationType.EQE_STATUS.getCode(), String.valueOf(eqeStatus), String.valueOf(time), "http://time.tianqi.com").toString();
+            tEquipmentService.sendRemoteMessage(equipment.getClientId(), OperationType.EQE_STATUS, message, adminId);
+            return R.ok();
+        }
+        return R.fail(ResponseCodesEnum.A0001);
+    }
 
 }
 

+ 114 - 0
src/main/java/com/szwl/handle/response/EqeStatusProcessor.java

@@ -0,0 +1,114 @@
+package com.szwl.handle.response;
+
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.szwl.constant.OperationType;
+import com.szwl.model.entity.MessageLog;
+import com.szwl.model.entity.TAdmin;
+import com.szwl.model.entity.TEquipment;
+import com.szwl.model.entity.TWechat;
+import com.szwl.model.vo.EquipmentVO;
+import com.szwl.service.TAdminService;
+import com.szwl.service.TEquipmentService;
+import com.szwl.service.TWechatService;
+import com.szwl.util.WechatSendUtil;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.util.Date;
+
+@Component
+public class EqeStatusProcessor implements ResponseProcessor {
+
+    @Resource
+    private TEquipmentService tEquipmentService;
+
+    @Resource
+    private TWechatService wechatService;
+
+    @Resource
+    private TAdminService adminService;
+
+    @Override
+    public void process(MessageLog messageLog) {
+        Integer statusCode = messageLog.getStatusCode();
+        if (statusCode == 200) {
+            String clientId = messageLog.getClientId();
+            String responseContent = messageLog.getResponseContent();
+            LambdaQueryWrapper<TEquipment> query = Wrappers.lambdaQuery();
+            query.eq(TEquipment::getClientId, clientId);
+            TEquipment tEquipment = tEquipmentService.getOne(query);
+            if (tEquipment != null) {
+                try {
+                    // 设备名称
+                    String name = tEquipment.getName();
+                    // 如果为空就拿设备编号后六位
+                    if (StringUtils.isEmpty(name)) {
+                        name = tEquipment.getClientId().substring(tEquipment.getClientId().length() - 6);
+                    }
+                    // 转换为对象
+                    EquipmentVO equipmentVO = JSON.parseObject(responseContent, EquipmentVO.class);
+                    String netTime = equipmentVO.getNetTime();
+                    Integer eqeStatus = equipmentVO.getEqeStatus();
+
+                    tEquipment.setEqeStatus(eqeStatus);
+                    tEquipment.setNetwork(netTime);
+                    tEquipment.setModifyDate(new Date());
+                    // 重置设备报警状态
+                    tEquipment.setIsAlarm(false);
+                    tEquipmentService.updateById(tEquipment);
+
+                    // 查询是否有绑定微信
+                    LambdaQueryWrapper<TWechat> wechatQuery = Wrappers.lambdaQuery();
+                    wechatQuery.eq(TWechat::getAdminId, tEquipment.getAdminId());
+                    TWechat wechat = wechatService.getOne(wechatQuery);
+                    // 查询用户
+                    TAdmin admin = adminService.getById(tEquipment.getAdminId());
+                    // 如果有绑定微信
+                    if (admin != null) {
+                        // 查询是申泽还是七云的
+                        String companyType = admin.getCompanyType();
+                        // 查询用户是否开启设备上线提醒功能
+                        String onOffNotice = admin.getOnOffNotice();
+                        if (wechat != null && StringUtils.isNotEmpty(wechat.getOpenId()) && StringUtils.isNotEmpty(onOffNotice) && onOffNotice.equals("1")) {
+                            // 微信发送设备上下线提醒消息
+                            wechatService.sendOnOffMessage(wechat.getOpenId(), tEquipment.getClientId(), netTime, companyType, name, eqeStatus);
+                        }
+                        // 查询是否国外账号,国外就发送邮件
+                        String ifForeign = admin.getIfForeign();
+                        if (StringUtils.isNotEmpty(ifForeign) && ifForeign.equals("1") && onOffNotice.equals("1")) {
+                            // 发送邮件提醒
+                            String machineType = tEquipment.getMachineType();
+                            if (StringUtils.isNotEmpty(machineType)) {
+                                machineType = "0";
+                            }
+                            String messageReceiver = tEquipment.getMessageReceiver();
+                            String timeZone = admin.getTimeZone();
+                            // 发送设备设置的报警邮箱,没有设置就发送到账户邮箱
+                            if (StringUtils.isNotEmpty(messageReceiver)) {
+                                String[] split = messageReceiver.split(",");
+                                for (String s : split) {
+                                    WechatSendUtil.sentEmail(s, name, timeZone, machineType, eqeStatus);
+                                }
+                            } else {
+                                String email = admin.getEmail();
+                                if (email != null) {
+                                    WechatSendUtil.sentEmail(admin.getEmail(), name, timeZone, machineType, eqeStatus);
+                                }
+                            }
+                        }
+                    }
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+    }
+
+    @Override
+    public String getSupportedOperationType() {
+        return OperationType.EQE_STATUS.getCode();
+    }
+}

+ 61 - 0
src/main/java/com/szwl/handle/response/OpenDoorProcessor.java

@@ -0,0 +1,61 @@
+package com.szwl.handle.response;
+
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.szwl.constant.OperationType;
+import com.szwl.model.entity.MessageLog;
+import com.szwl.model.entity.TEquipment;
+import com.szwl.model.entity.TEquipmentDesc;
+import com.szwl.model.param.EquipmentDescParam;
+import com.szwl.model.vo.EquipmentVO;
+import com.szwl.service.TEquipmentDescService;
+import com.szwl.service.TEquipmentService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component
+public class OpenDoorProcessor implements ResponseProcessor {
+
+    @Autowired
+    private TEquipmentService tEquipmentService;
+
+    @Autowired
+    private TEquipmentDescService tEquipmentDescService;
+
+    @Override
+    public void process(MessageLog messageLog) {
+        Integer statusCode = messageLog.getStatusCode();
+        if (statusCode == 200) {
+            String clientId = messageLog.getClientId();
+            String responseContent = messageLog.getResponseContent();
+            LambdaQueryWrapper<TEquipment> query = Wrappers.lambdaQuery();
+            query.eq(TEquipment::getClientId, clientId);
+            TEquipment tEquipment = tEquipmentService.getOne(query);
+            if (tEquipment != null) {
+                TEquipmentDesc equipmentDesc = tEquipmentDescService.getById(tEquipment.getId());
+                if (equipmentDesc != null) {
+                    try {
+                        EquipmentDescParam equipmentDescParam = JSON.parseObject(responseContent, EquipmentDescParam.class);
+                        if (equipmentDescParam != null) {
+                            if (equipmentDescParam.getType().equals("0")) {
+                                // 外门
+                                equipmentDesc.setOutDoor(equipmentDescParam.getStatus());
+                            } else if (equipmentDescParam.getType().equals("1")) {
+                                equipmentDesc.setInDoor(equipmentDescParam.getStatus());
+                            }
+                            tEquipmentDescService.updateById(equipmentDesc);
+                        }
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    }
+                }
+            }
+        }
+    }
+
+    @Override
+    public String getSupportedOperationType() {
+        return OperationType.OPEN_DOOR.getCode();
+    }
+}

+ 53 - 0
src/main/java/com/szwl/handle/response/PasswordProcessor.java

@@ -0,0 +1,53 @@
+package com.szwl.handle.response;
+
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.szwl.constant.OperationType;
+import com.szwl.model.entity.MessageLog;
+import com.szwl.model.entity.TEquipment;
+import com.szwl.model.vo.EquipmentVO;
+import com.szwl.service.TEquipmentService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component
+public class PasswordProcessor implements ResponseProcessor {
+
+    @Autowired
+    private TEquipmentService tEquipmentService;
+
+
+    @Override
+    public void process(MessageLog messageLog) {
+        Integer statusCode = messageLog.getStatusCode();
+        if (statusCode == 200) {
+            String clientId = messageLog.getClientId();
+            String responseContent = messageLog.getResponseContent();
+            LambdaQueryWrapper<TEquipment> query = Wrappers.lambdaQuery();
+            query.eq(TEquipment::getClientId, clientId);
+            TEquipment tEquipment = tEquipmentService.getOne(query);
+            if (tEquipment != null) {
+                try {
+                    // 转换为对象
+                    EquipmentVO equipmentVO = JSON.parseObject(responseContent, EquipmentVO.class);
+                    Integer type = equipmentVO.getType();
+                    String password = equipmentVO.getPassword();
+                    if (type == 0) {
+                        tEquipment.setAdminPwd(password);
+                    } else if (type == 1) {
+                        tEquipment.setGuestPwd(password);
+                    }
+                    tEquipmentService.updateById(tEquipment);
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+    }
+
+    @Override
+    public String getSupportedOperationType() {
+        return OperationType.PASSWORD.getCode();
+    }
+}

+ 41 - 0
src/main/java/com/szwl/handle/response/SleepProcessor.java

@@ -0,0 +1,41 @@
+package com.szwl.handle.response;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.szwl.constant.OperationType;
+import com.szwl.model.entity.MessageLog;
+import com.szwl.model.entity.TEquipment;
+import com.szwl.model.entity.TEquipmentDesc;
+import com.szwl.service.TEquipmentService;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+
+@Component
+public class SleepProcessor implements ResponseProcessor {
+
+    @Resource
+    private TEquipmentService tEquipmentService;
+
+    @Override
+    public void process(MessageLog messageLog) {
+        Integer statusCode = messageLog.getStatusCode();
+        if (statusCode == 200) {
+            Integer direction = messageLog.getDirection();
+            String clientId = messageLog.getClientId();
+            String responseContent = messageLog.getResponseContent();
+            LambdaQueryWrapper<TEquipment> query = Wrappers.lambdaQuery();
+            query.eq(TEquipment::getClientId, clientId);
+            TEquipment tEquipment = tEquipmentService.getOne(query);
+            if (tEquipment != null) {
+                tEquipment.setIsSleep(responseContent.equals("1"));
+                tEquipmentService.updateById(tEquipment);
+            }
+        }
+    }
+
+    @Override
+    public String getSupportedOperationType() {
+        return OperationType.SLEEP.getCode();
+    }
+}

+ 42 - 0
src/main/java/com/szwl/handle/response/VolumeProcessor.java

@@ -0,0 +1,42 @@
+package com.szwl.handle.response;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.szwl.constant.OperationType;
+import com.szwl.model.entity.MessageLog;
+import com.szwl.model.entity.TEquipment;
+import com.szwl.service.TEquipmentService;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+
+
+@Component
+public class VolumeProcessor implements ResponseProcessor{
+
+    @Resource
+    private TEquipmentService equipmentService;
+
+    @Override
+    public void process(MessageLog messageLog) {
+        Integer statusCode = messageLog.getStatusCode();
+        if (statusCode == 200) {
+            String clientId = messageLog.getClientId();
+            String responseContent = messageLog.getResponseContent();
+
+            // 查询设备
+            LambdaQueryWrapper<TEquipment> query = Wrappers.lambdaQuery();
+            query.eq(TEquipment::getClientId, clientId);
+            TEquipment equipment = equipmentService.getOne(query);
+            if (equipment != null) {
+                equipment.setVolume(responseContent);
+                equipmentService.updateById(equipment);
+            }
+        }
+    }
+
+    @Override
+    public String getSupportedOperationType() {
+        return OperationType.VOLUME.getCode();
+    }
+}

+ 19 - 0
src/main/java/com/szwl/model/param/EquipmentDescParam.java

@@ -0,0 +1,19 @@
+package com.szwl.model.param;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class EquipmentDescParam {
+
+    @ApiModelProperty(value = "设备唯一ID")
+    private Long id;
+
+    @ApiModelProperty(value = "开门状态;0:关闭,1:开门")
+    private String status;
+
+    @ApiModelProperty(value = "开门类型;0:外门,1:内门")
+    private String type;
+}

+ 10 - 1
src/main/java/com/szwl/model/param/EquipmentParam.java

@@ -24,7 +24,7 @@ public class EquipmentParam {
     private String equipmentName;
 
     @ApiModelProperty(value = "设备状态")
-    private String eqeStatus;
+    private Integer eqeStatus;
 
     @ApiModelProperty(value = "设备类型")
     private String machineType;
@@ -38,6 +38,15 @@ public class EquipmentParam {
     @ApiModelProperty(value = "公司类型")
     private String companyType;
 
+    @ApiModelProperty("管理员密码")
+    private String adminPwd;
+
+    @ApiModelProperty("次管理员密码")
+    private String guestPwd;
+
+    @ApiModelProperty(value = "睡眠状态,开启睡眠为1,关闭睡眠0")
+    private String isSleep;
+
     @ApiModelProperty(value = "分组id")
     private String labelId;
 

+ 12 - 0
src/main/java/com/szwl/model/vo/EquipmentVO.java

@@ -15,4 +15,16 @@ public class EquipmentVO {
     @ApiModelProperty(value = "机器名称")
     private String name;
 
+    @ApiModelProperty(value = "类型,0:管理员密码,1:游客密码")
+    private Integer type;
+
+    @ApiModelProperty(value = "机器密码")
+    private String password;
+
+    @ApiModelProperty(value = "设备状态")
+    private Integer eqeStatus;
+
+    @ApiModelProperty(value = "远程开关机的时间戳")
+    private String netTime;
+
 }