Browse Source

feat:“海外添加设备上下线邮件提醒功能"

soobin 9 months ago
parent
commit
d881be23fd

+ 0 - 4
src/main/java/com/szwl/config/MqttConfig.java

@@ -10,7 +10,6 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.ApplicationEventPublisher;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
-import org.springframework.data.redis.core.StringRedisTemplate;
 
 import java.net.InetAddress;
 import java.net.UnknownHostException;
@@ -41,9 +40,6 @@ public class MqttConfig {
     @Autowired
     private MqttTopicsService mqttTopicsService;
 
-    @Autowired
-    private StringRedisTemplate redisTemplate;
-
     @Bean
     public MqttClient mqttClient() throws MqttException, UnknownHostException {
         serverAddress = InetAddress.getLocalHost().getHostAddress();

+ 25 - 7
src/main/java/com/szwl/controller/IndexController.java

@@ -27,6 +27,7 @@ import com.szwl.model.utils.PushUtils;
 import com.szwl.service.*;
 import com.szwl.service.es.EsTEquipmentService;
 import com.szwl.util.IDGenerator;
+import com.szwl.util.WechatSendUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.io.IOUtils;
@@ -1450,16 +1451,33 @@ public class IndexController {
                 // 查询用户是否开启设备上线提醒功能
                 String onOffNotice = admin.getOnOffNotice();
                 if (StringUtils.isNotEmpty(onOffNotice) && onOffNotice.equals("1")) {
-                    // 发送设备上下线提醒消息
+                    // 微信发送设备上下线提醒消息
                     wechatService.sendOnOffMessage(wechat.getOpenId(), equipment.getClientId(), netTime, companyType, name, eqeStatus);
                 }
+                // 查询是否国外账号,国外就发送邮件
+                String ifForeign = admin.getIfForeign();
+                if(StringUtils.isNotEmpty(ifForeign) && ifForeign.equals("1")) {
+                    // 发送邮件提醒
+                    String machineType = equipment.getMachineType();
+                    if (StringUtils.isNotEmpty(machineType)) {
+                        machineType = "0";
+                    }
+                    String messageReceiver = equipment.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);
+                        }
+                    }
+                }
             }
-//            if (eqeStatus == 0) {
-//                equipment.setCabinetTm("0");
-//                equipment.setCabinetHd("0");
-//                equipment.setFurnaceTm("0");
-//                equipment.setFurnaceSp("0");
-//            }
             equipmentService.updateById(equipment);
         }
         return "修改成功";

+ 20 - 0
src/main/java/com/szwl/controller/TAdminController.java

@@ -1164,5 +1164,25 @@ public class TAdminController {
         TAdmin admin = tAdminService.getOne(query);
         return R.ok(admin);
     }
+
+    @ApiOperation("获取用户信息")
+    @GetMapping("/getAdminVo")
+    public ResponseModel<?> getAdminVo(String adminId) {
+        TAdmin admin = tAdminService.getById(adminId);
+        TAdmin tAdmin = new TAdmin();
+        if (admin != null) {
+            tAdmin.setId(admin.getId());
+            tAdmin.setUsername(admin.getUsername());
+            tAdmin.setName(admin.getName());
+            tAdmin.setPhone(admin.getPhone());
+            tAdmin.setEmail(admin.getEmail());
+            tAdmin.setCompanyType(admin.getCompanyType());
+            tAdmin.setIfForeign(admin.getIfForeign());
+            tAdmin.setType(admin.getType());
+            tAdmin.setAreaId(admin.getAreaId());
+            return R.ok(tAdmin);
+        }
+        return R.ok();
+    }
 }
 

+ 49 - 0
src/main/java/com/szwl/controller/TEquipmentController.java

@@ -1,6 +1,8 @@
 package com.szwl.controller;
 
 
+import cn.afterturn.easypoi.excel.ExcelExportUtil;
+import cn.afterturn.easypoi.excel.entity.ExportParams;
 import cn.com.crbank.ommo.bean.ResultMessage;
 import cn.com.crbank.ommo.esUtil.BeanUtils;
 import cn.hutool.core.util.NumberUtil;
@@ -28,6 +30,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.EquipmentParam;
 import com.szwl.model.param.PasswordParam;
 import com.szwl.model.query.StatisticsParam;
 import com.szwl.model.utils.DateUtils;
@@ -38,6 +41,7 @@ import com.szwl.util.DownloadUtils;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.lang.StringUtils;
+import org.apache.poi.ss.usermodel.Workbook;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
@@ -45,8 +49,10 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
+import java.io.OutputStream;
 import java.net.URL;
 import java.net.URLConnection;
+import java.net.URLEncoder;
 import java.nio.file.Files;
 import java.nio.file.Paths;
 import java.text.SimpleDateFormat;
@@ -1842,5 +1848,48 @@ public class TEquipmentController {
         return R.ok();
     }
 
+    @ApiOperation("获取设备总数")
+    @GetMapping("/getEquipmentTotal")
+    public ResponseModel<String> getEquipmentTotal(String adminId) {
+        LambdaQueryWrapper<TEquipment> query = Wrappers.lambdaQuery();
+        query.eq(TEquipment::getAdminId, adminId);
+        List<TEquipment> list = tEquipmentService.list(query);
+        return R.ok(String.valueOf(list.size()));
+    }
+
+    @ApiOperation("导出设备列表")
+    @GetMapping("/exportEquipment")
+    public void exportEquipment(HttpServletResponse response) {
+        LambdaQueryWrapper<TEquipment> query = Wrappers.lambdaQuery();
+        query.between(TEquipment::getLastUpdateTime, "2024-10-01", "2024-11-08");
+        List<TEquipment> list = tEquipmentService.list(query);
+        ExportParams exportParams = new ExportParams("设备列表", "sheet1");
+        List<EquipmentParam> orderByAdminTargetList = list.stream().map(tEquipment -> {
+            EquipmentParam equipmentParam = new EquipmentParam();
+            equipmentParam.setEquipmentName(tEquipment.getName());
+            equipmentParam.setAreaName(tEquipment.getFullName());
+            equipmentParam.setClientId(tEquipment.getClientId());
+            return equipmentParam;
+        }).collect(Collectors.toList());
+        Workbook workbook = ExcelExportUtil.exportExcel(exportParams, EquipmentParam.class, orderByAdminTargetList);
+        if (workbook != null) {
+            OutputStream os = null;
+            try {
+                os = response.getOutputStream();
+                response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("设备列表" + ".xls", "UTF-8"));
+                workbook.write(os);
+            } catch (Exception e) {
+                e.printStackTrace();
+            } finally {
+                try {
+                    os.close();
+                    workbook.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+    }
+
 }
 

+ 17 - 0
src/main/java/com/szwl/model/param/EquipmentParam.java

@@ -0,0 +1,17 @@
+package com.szwl.model.param;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import lombok.Data;
+
+@Data
+public class EquipmentParam {
+
+    @Excel(name = "设备编号", width = 20.0D)
+    private String clientId;
+
+    @Excel(name = "设备名称", width = 20.0D)
+    private String equipmentName;
+
+    @Excel(name = "定位位置", width = 20.0D)
+    private String areaName;
+}

+ 4 - 4
src/main/java/com/szwl/service/impl/TEquipmentServiceImpl.java

@@ -311,10 +311,10 @@ public class TEquipmentServiceImpl extends ServiceImpl<TEquipmentMapper, TEquipm
                 long updateTime = equipment.getModifyDate().getTime();
                 if (nowTime > updateTime && (nowTime - updateTime) > 600000) {
                     // 判断为异常关机或者断网,通知客户
-                    equipment.setCabinetTm("0");
-                    equipment.setCabinetHd("0");
-                    equipment.setFurnaceTm("0");
-                    equipment.setFurnaceSp("0");
+//                    equipment.setCabinetTm("0");
+//                    equipment.setCabinetHd("0");
+//                    equipment.setFurnaceTm("0");
+//                    equipment.setFurnaceSp("0");
                     equipment.setEqeStatus(0);
                     equipmentService.updateById(equipment);
                     // 说明机器没有上传信号,判断为网络不好或者关机,发送信号通知客户 查机器归属国内还是国外

+ 45 - 0
src/main/java/com/szwl/util/WechatSendUtil.java

@@ -94,4 +94,49 @@ public class WechatSendUtil {
         System.out.println("邮件发送成功");
     }
 
+    /**
+     * 发送设备上下线邮件
+     * @param email
+     * @param name
+     * @param zoneID
+     */
+    public static void sentEmail(String email, String name, String zoneID, String machineType, Integer eqeStatus) {
+        String machineTypeStr = "";
+        switch (machineType) {
+            case "0":
+                machineTypeStr = "Cotton Candy";  // 棉花糖
+                break;
+            case "1":
+                machineTypeStr = "Popcorn";  // 爆米花
+                break;
+            case "2":
+                machineTypeStr = "Ice Cream";  // 冰淇淋
+                break;
+            default:
+                machineTypeStr = "";
+        }
+        String eqeStatusStr = "";
+        if (eqeStatus == 0) {
+            eqeStatusStr = "Offline";
+        } else {
+            eqeStatusStr = "Online";
+        }
+        String subject = eqeStatusStr + " message from " + machineTypeStr + " Machine";
+        StringBuffer content = new StringBuffer();
+        String str1 = " <b>Machine name: </b>";
+        String str3 = "<br>" + " <b>Time&Date: </b>";
+        String timeByZoneID = TimezoneFmtUtil.getTimeByZoneID(zoneID);
+        String str4 = "<br>" + "<br>" + "Dear customer:<br>";
+        String str5 = " This email is just a reminder, you don't need to reply. <br>";
+        String str6 = "<br>" + " Thank you for choosing our machine!<br>" +
+                "<br>" +
+                "<br>" +
+                "Best Regards.<br>" +
+                "<b>Cotton Candy Service Team</b>";
+        content.append(str1).append(name).append(str3).append(timeByZoneID).append(str4).append(str5).append(str6);
+        MailUtil mailUtil = new MailUtil();
+        mailUtil.send(email, subject, content.toString());
+        System.out.println("邮件发送成功");
+    }
+
 }