sgj
8 小时以前 67b2e6a3b7e4254be92e3ecbcd7b6e9f61b3aae3
添加批复处理页面
已修改5个文件
已添加1个文件
426 ■■■■■ 文件已修改
fzzy-igdss-core/src/main/java/com/fzzy/igds/service/SnapReplyService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-web/src/main/java/com/fzzy/appwx/controller/WeChatController.java 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-web/src/main/java/com/fzzy/appwx/manager/WeChatManager.java 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-web/src/main/java/com/fzzy/appwx/param/WeChatBaseParam.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-web/src/main/resources/templates/wx/warn-detail.html 216 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-web/src/main/resources/templates/wx/warn-list.html 54 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-core/src/main/java/com/fzzy/igds/service/SnapReplyService.java
@@ -42,11 +42,12 @@
        }
        //是否处理检索
        if (StringUtils.isNotBlank(param.getName())) {
            queryWrapper.eq("is_handle", param.getName());
        if (StringUtils.isNotBlank(param.getKey())) {
            queryWrapper.eq("is_handle", param.getKey());
        }
        queryWrapper.orderByDesc("create_time");
        queryWrapper.orderByDesc("id");
        snapReplyMapper.selectPage(page, queryWrapper);
    }
fzzy-igdss-web/src/main/java/com/fzzy/appwx/controller/WeChatController.java
@@ -1,11 +1,13 @@
package com.fzzy.appwx.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fzzy.appwx.constant.WeChatConst;
import com.fzzy.appwx.manager.WeChatManager;
import com.fzzy.appwx.param.WeChatBaseParam;
import com.fzzy.igds.data.ConfigData;
import com.fzzy.igds.data.PageResponse;
import com.fzzy.igds.domain.SnapReply;
import com.ruoyi.common.core.domain.entity.SysUser;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
@@ -43,7 +45,7 @@
        if (StringUtils.isEmpty(tag)) {
            tag = "home";
        }
//
        String newUrl = WeChatConst.USER_AUTH_UPR
                .replace("APPID", configData.getWxAppId())
                .replace("REDIRECT_URI", URLEncoder.encode(url, "UTF-8"))
@@ -99,7 +101,7 @@
        }
        mv.setViewName("/wx/" + state);
//        //测试代码开启
////        //测试代码开启
//        String openid = "testOpenId";
//        mv.addObject("openid", openid);
//        SysUser user = weChatManager.getUser(openid);
@@ -108,7 +110,11 @@
//                userName = user.getUserName();
//            }
//        }
//        //测试代码结束
//
//        if (StringUtils.isNotEmpty(userName)) {
//            mv.addObject("userName", userName);
//        }
////        //测试代码结束
        return mv;
    }
@@ -154,4 +160,45 @@
        return weChatManager.unBandOpenId(param);
    }
    /**
     * èŽ·å–å‡ºå…¥åº“å‘Šè­¦æ‰¹å¤åˆ†é¡µæ•°æ®
     *
     * @param param
     * @author sgj
     * @since 2026/04/11
     */
    @PostMapping(value = "/getSnapReplyPage")
    @ResponseBody
    public PageResponse<Page<SnapReply>> getSnapReplyPage(@RequestBody WeChatBaseParam param) {
        return weChatManager.getSnapReplyPage(param);
    }
    /**
     * æ ¹æ®id获取告警批复详细内容
     *
     * @param param
     * @author sgj
     * @since 2026/04/11
     */
    @PostMapping(value = "/getSnapReplyInfoById")
    @ResponseBody
    public PageResponse<SnapReply> getSnapReplyInfoById(@RequestBody WeChatBaseParam param) {
        return weChatManager.getSnapReplyInfoById(param);
    }
    /**
     * æ ¹æ®id获取告警批复详细内容
     *
     * @param param
     * @author sgj
     * @since 2026/04/11
     */
    @PostMapping(value = "/handleSnapReply")
    @ResponseBody
    public PageResponse<String> handleSnapReply(@RequestBody WeChatBaseParam param) {
        return weChatManager.handleSnapReply(param);
    }
}
fzzy-igdss-web/src/main/java/com/fzzy/appwx/manager/WeChatManager.java
@@ -1,14 +1,22 @@
package com.fzzy.appwx.manager;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fzzy.appwx.param.WeChatBaseParam;
import com.fzzy.appwx.util.WeChatUtil;
import com.fzzy.igds.constant.Constant;
import com.fzzy.igds.constant.RespCodeEnum;
import com.fzzy.igds.data.IgdsBaseParam;
import com.fzzy.igds.data.PageResponse;
import com.fzzy.igds.domain.SnapReply;
import com.fzzy.igds.service.SnapReplyService;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.system.service.ISysUserService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.Date;
@Component
public class WeChatManager {
@@ -17,6 +25,8 @@
    private WeChatUtil weChatUtil;
    @Autowired
    private ISysUserService sysUserService;
    @Resource
    private SnapReplyService snapReplyService;
    public String getOpenid(String code) {
@@ -150,4 +160,87 @@
    }
    public PageResponse<Page<SnapReply>> getSnapReplyPage(WeChatBaseParam param) {
        if (null == param) {
            return new PageResponse<Page<SnapReply>>(RespCodeEnum.CODE_1007.getCode(), "参数不完整,请核查");
        }
        SysUser user;
        //微信公众号
        if (StringUtils.isEmpty(param.getOpenid())) {
            return new PageResponse<Page<SnapReply>>(RespCodeEnum.CODE_1007.getCode(), "参数不完整,请核查");
        }
        //根据openid查询用户是否已经绑定
        user = sysUserService.selectUserByOpenId(param.getOpenid());
        if (user == null) {
            return new PageResponse<Page<SnapReply>>(RespCodeEnum.CODE_1006.getCode(), "尚未绑定服务,请先绑定!");
        }
        //分页拼接
        Page<SnapReply> page = new Page<>(param.getPageNo(), param.getPageSize());
        //查询参数组装
        IgdsBaseParam queryParam = new IgdsBaseParam();
        queryParam.setDeptId(String.valueOf(user.getDeptId()));
        queryParam.setCompanyId(user.getCompanyId());
        queryParam.setKey(Constant.YN_N);
        snapReplyService.listPage(page, queryParam);
        return new PageResponse<Page<SnapReply>>(RespCodeEnum.CODE_0000.getCode(), "请求成功", page);
    }
    public PageResponse<SnapReply> getSnapReplyInfoById(WeChatBaseParam param) {
        //判断参数
        if (null == param || StringUtils.isEmpty(param.getId())) {
            return new PageResponse<SnapReply>(RespCodeEnum.CODE_1007.getCode(), "参数不完整,请核查");
        }
        SnapReply warn = snapReplyService.getById(param.getId());
        if (warn == null) {
            return new PageResponse<SnapReply>(RespCodeEnum.CODE_1007.getCode(), "未获取到该警告信息!");
        }
        return new PageResponse<SnapReply>(RespCodeEnum.CODE_0000.getCode(), "请求成功", warn);
    }
    public PageResponse<String> handleSnapReply(WeChatBaseParam param) {
        //判断参数
        if (null == param || StringUtils.isEmpty(param.getId())) {
            return new PageResponse<String>(RespCodeEnum.CODE_1007.getCode(), "参数不完整,请核查");
        }
        //处理时间
        Date date = new Date();
//        if(StringUtils.isEmpty(companyId)){
//            companyId = ShiroUtils.getLoginUserCompanyId();
//        }
        String info = (String) param.getRemark();
        String id = param.getId();
        String userName = param.getUserName();
        //告警处理
        SnapReply warn = snapReplyService.getById(id);
        if(Constant.YN_N.equals(warn.getIsHandle())){
            return new PageResponse<String>(RespCodeEnum.CODE_1008.getCode(), "改告警已处理,无需重复批复!");
        }
        warn.setId(id);
        warn.setUpdateBy(userName);
        warn.setUpdateTime(date);
        warn.setIsHandle(Constant.YN_Y);
        warn.setReplyText(info);
        warn.setDays(param.getDays());
        snapReplyService.updateData(warn);
        return new PageResponse<String>(RespCodeEnum.CODE_0000.getCode(), "请求成功");
    }
}
fzzy-igdss-web/src/main/java/com/fzzy/appwx/param/WeChatBaseParam.java
@@ -32,4 +32,9 @@
     */
    private String id;
    private  String remark;
    private Integer days;
}
fzzy-igdss-web/src/main/resources/templates/wx/warn-detail.html
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,216 @@
<!DOCTYPE html>
<html lang="zh-cn" xmlns:th=http://www.thymeleaf.org>
<head>
    <meta charset="utf-8">
    <title>警告详细</title>
    <meta name="viewport"
          content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no"/>
    <link rel="stylesheet" th:href="@{/ajax/libs/mui/css/mui.min.css}">
    <style>
        .mui-content {
            margin: 0 5px;
        }
        .mui-table-view {
            position: unset;
            margin-top: 10px;
            border-radius: 6px;
        }
        .mui-table-view-chevron .mui-table-view-cell {
            padding-right: 10px;
        }
        .mui-table-view-cell {
            padding: 10px 10px;
        }
        .mui-table-view-cell p {
            font-size: 17px;
        }
        .mui-ellipsis {
            margin-top: 5px;
            margin-bottom: 10px;
            font-size: 18px;
        }
        .first {
            font-size: 15px;
            float: right;
        }
        .sec {
            border-radius: 6px;
            margin-top: 10px;
            margin-bottom: 10px;
            list-style: none;
            background: #FFFFFF;
        }
        .four {
            padding: 7px 10px;
        }
        .sec-2 {
            margin-top: 10px;
            margin-bottom: 10px;
            font-size: 18px;
        }
        input[type=color], input[type=date], input[type=datetime-local], input[type=datetime], input[type=email], input[type=month], input[type=number], input[type=password], input[type=search], input[type=tel], input[type=text], input[type=time], input[type=url], input[type=week], select, textarea {
            border-radius: 4px;
            padding: 10px 10px;
            margin-bottom: unset;
            background-color: #eee;
            border: 1px solid #eee;
        }
        .title {
            text-align: center;
            background: #8bd2f5;
            border-radius: 6px 6px 0 0;
            font-size: 15px;
        }
        .mui-btn {
            font-size: 22px;
            padding: 6px 20px;
            border-radius: 6px;
        }
        .mui-button-row {
            margin-bottom: 10px;
        }
        .head {
            margin-top: 44px;
        }
    </style>
</head>
<body>
<div id="head">
    <header class="mui-bar mui-bar-nav">
        <a class="mui-action-back mui-icon mui-icon-left-nav mui-pull-left"></a>
        <h1 class="mui-title">警告详细</h1>
    </header>
</div>
<div id="content" class="mui-content head">
    <div>
        <ul class="mui-table-view mui-table-view-chevron">
            <div class="title">警告信息</div>
            <li id="handle1" class="mui-table-view-cell">
                <!--                <h4 class="mui-ellipsis">高温警告<span class="first">未处理</span></h4>-->
                <!--                <h5 class="mui-ellipsis">温湿度#1</h5>-->
                <!--                <h5 class="mui-ellipsis">2020-10-10 10:10:10</h5>-->
                <!--                <p >您好,你的设备温湿度#1于2020-10-10 10:10:10触发高温告警,请及时处理!</p>-->
            </li>
        </ul>
    </div>
    <div class="sec">
        <div class="title">处理信息</div>
        <div id="handle2" class="four">
            <!--            <h5 class="sec-2">张三</h5>-->
            <!--            <h5 class="sec-2">2020-10-10 10:10:10</h5>-->
            <!--            <textarea id="textarea" rows="5" placeholder="处理说明"></textarea>-->
        </div>
    </div>
    <div class="mui-button-row">
        <button id="btn1" type="button" class="mui-btn mui-btn-primary" onclick="toHandle()">处理</button>&nbsp;&nbsp;
        <button type="button" class="mui-btn mui-btn-danger" onclick="toPage()">返回</button>
    </div>
</div>
<script th:src="@{/js/jquery.min.js}"></script>
<script th:src="@{/wx/wx-common.js}"></script>
<script th:src="@{/ajax/libs/mui/js/mui.js}"></script>
<script th:inline="javascript">
    var warnId = [[${id}]];  //设备id
    var companyId = [[${companyId}]];  //组织编码
    var userName = [[${userName}]];    //当前操作人账号
    var loginType = [[${loginType}]];  //登录方式
    $(function () {
        mui.init();
        try {
            getDeviceList();
        } catch (e) {
            mui.alert(e, '提示', ["确定"], function () {
            }, "div");
        }
        // getDeviceList()
    });
    //获取用户设备信息
    function getDeviceList() {
        var data = {
            "id": warnId,
        };
        wxCommon.postJson("../wx/getSnapReplyInfoById", data, function (result) {
            if (result.code == "0000") {
                initData(result.data);
            } else {
                $("#listData").html('');
                mui.alert(result.msg, '提示', ["确定"], function () {
                }, "div");
            }
        });
    }
    //初始化页面数据
    function initData(data) {
        var html1 = '';
        var html2 = '';
        html1 += '<h4 class="mui-ellipsis">' + data.id;
        html1 += '<span class="first">' + data.deptId + '</span></h4>';
        html1 += '<h5 class="mui-ellipsis">' + data.createTime + '</h5>';
        html1 += '<p>' + data.content + '</p>';
        //未处理
        if(data.isHandle && data.isHandle == "N"){
            html2 += '<input id="days" type="number" min="1" step="1" placeholder="未来正常天数" style="width: 100%; margin-top: 10px;margin-bottom: 10px" oninput="this.value = this.value.replace(/\\D|^0/g, \'\')" />';
            html2 += '<textarea id="remark" rows="5" placeholder="处理说明"></textarea>';
        }else{
            html2 += '<p>' + '未来正常天数:'+ data.days + '</p>';
            html2 += '<p>' + '处理说明:'+ data.remark + '</p>';
        }
        $("#handle1").html(html1);
        $("#handle2").html(html2);
    }
    //警告处理提交
    function toHandle() {
        var remarkDetail = $("#remark").val();
        var days = $("#days").val();
        var data = {
            "id": warnId,
            "userName": userName,
            "remark": remarkDetail,
            "days": days
        };
        wxCommon.postJson("../wx/handleSnapReply", data, function (result) {
            if (result.code == "0000") {
                mui.toast("处理成功!");
                toPage();
            } else {
                mui.alert(result.msg, '提示', ["确定"], function () {
                }, "div");
            }
        });
    }
    //返回警报列表
    function toPage() {
        location.reload();
        // è¿”回上一页
        // å¾®ä¿¡ H5 çŽ¯å¢ƒï¼šä½¿ç”¨ localStorage æ ‡è®°
        localStorage.setItem('needRefresh', 'true');
        mui.back();
    }
</script>
</body>
</html>
fzzy-igdss-web/src/main/resources/templates/wx/warn-list.html
@@ -72,7 +72,6 @@
<script th:src="@{/wx/wx-common.js}"></script>
<script th:src="@{/ajax/libs/mui/js/mui.js}"></script>
<script th:inline="javascript">
    var loginType = [[${loginType}]];  //登录方式
    var userName = [[${userName}]];
    openid = [[${openid}]];  //用户的openid
@@ -82,6 +81,17 @@
    var total;
    var pageCount;  //总页码数
    var warnList;  //每页数据
    $(function () {
        // ç›‘听页面显示事件(微信 H5 çŽ¯å¢ƒï¼‰
        window.addEventListener('pageshow', function() {
            if (localStorage.getItem('needRefresh') === 'true') {
                localStorage.removeItem('needRefresh');
                refreshData();
            }
        });
    });
    mui.init({
        pullRefresh: {
@@ -101,12 +111,22 @@
        }
    });
    //初始出加载页面数据
    function pullupRefresh() {
            $("#pullrefresh").addClass("head1");
        //请求获取数据
        getWarnData();
    }
    function refreshData() {
        // é‡ç½®åˆ†é¡µå‚æ•°
        pageNo = 1;
        // è°ƒç”¨æµè§ˆå™¨åˆ·æ–°
        location.reload();
    }
    //初始化页面数据
    function initData() {
@@ -123,15 +143,10 @@
            li.className = 'mui-table-view-cell';
            var html = '';
            html += '<div onclick="toWarnDetail(\'' + warnList[i].id +'\',\'' + warnList[i].companyId + '\')" class="mui-table">';
            html += '<div class="mui-table-cell mui-col-xs-10"><h4 class="mui-ellipsis">' + warnList[i].warnTitle;
            // if(warnList[i].warnStatus == '10' || warnList[i].warnStatus == '20'){
            //     html += '<span class="first1">' + warnList[i].warnStatusName;
            // }else {
            //     html += '<span class="first2">' + warnList[i].warnStatusName;
            // }
            html += '</span></h4><h5>所属库区:<span>' + warnList[i].deviceName;
            html += '</span></h5><h5>警告时间:<span>' + warnList[i].warnTime;
            html += '</span></h5><p class="mui-h6 mui-ellipsis">警告说明:' +warnList[i].warnInfo;
            html += '<div class="mui-table-cell mui-col-xs-10"><h4 class="mui-ellipsis">' + warnList[i].id;
            html += '</span></h4><h5>所属库区:<span>' + warnList[i].deptId;
            html += '</span></h5><h5>警告时间:<span>' + warnList[i].createTime;
            html += '</span></h5><p class="mui-h6 mui-ellipsis">警告说明:' +warnList[i].content;
            li.innerHTML = html;
            table.appendChild(li);
        }
@@ -140,26 +155,14 @@
    //请求获取警告数据
    function getWarnData() {
        var data = JSON.stringify({
            "interfaceId": "app_1008",
            "sign": "01",
            "outId": "01-01",
            "reqDateTime": new Date(),
            "data": {
        var data = {
                "userName": userName,
                "loginType": loginType,
                "openid": openid,
                "pageSize": pageSize,
                "pageNo": pageNo
            }
        });
        $.ajax({
            type: "POST",
            url: "../wx/gateway",
            dataType: "json",
            contentType: "application/json;charset=UTF-8",
            data: data,
            success: function (result) {
        };
        wxCommon.postJson("../wx/getSnapReplyPage", data,function (result) {
                if (result.code == "0000") {
                    warnList = null;
                    warnList = result.data.records;
@@ -167,7 +170,6 @@
                    initData();
                } else {
                    mui.toast("没有更多数据了!");
                }
            }
        });
    }