From ac94b1d939373a684344764e5b00dac44feabd81 Mon Sep 17 00:00:00 2001
From: kongdeqiang <123456>
Date: 星期五, 17 二月 2023 17:38:01 +0800
Subject: [PATCH] 增加service

---
 src/main/java/com/wgcloud/service/FailureLoggingService.java       |   58 ++++
 src/main/resources/templates/failurelogging/list.html              |  131 ++++++++++
 src/main/resources/templates/common/aside.html                     |   43 +++
 src/main/java/com/wgcloud/controller/FailureLoggingController.java |  170 +++++++++++++
 src/main/java/com/wgcloud/WgcloudServiceApplication.java           |    3 
 src/main/java/com/wgcloud/mapper/FailureLoggingMapper.java         |    3 
 src/main/resources/templates/failurelogging/view.html              |  124 +++++++++
 src/main/resources/mybatis/mapper/FailureLoggingMapper.xml         |   32 ++
 src/main/resources/static/js/failurelogging.js                     |   27 ++
 src/main/java/com/wgcloud/entity/FailureLogging.java               |    2 
 src/main/resources/templates/failurelogging/add.html               |  158 ++++++++++++
 src/main/java/com/wgcloud/entity/WorkLogging.java                  |    2 
 src/main/java/com/wgcloud/entity/InspectionTask.java               |    2 
 13 files changed, 749 insertions(+), 6 deletions(-)

diff --git a/src/main/java/com/wgcloud/WgcloudServiceApplication.java b/src/main/java/com/wgcloud/WgcloudServiceApplication.java
index 51c5a67..0acffdc 100644
--- a/src/main/java/com/wgcloud/WgcloudServiceApplication.java
+++ b/src/main/java/com/wgcloud/WgcloudServiceApplication.java
@@ -10,6 +10,7 @@
 import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration;
 import org.springframework.boot.web.servlet.ServletComponentScan;
 import org.springframework.cache.annotation.EnableCaching;
 import org.springframework.context.annotation.Bean;
@@ -25,7 +26,7 @@
 import java.security.KeyStoreException;
 import java.security.NoSuchAlgorithmException;
 
-@SpringBootApplication
+@SpringBootApplication(exclude = MongoAutoConfiguration.class)
 @MapperScan("com.wgcloud.mapper")
 @ServletComponentScan("com.wgcloud.filter")
 @ComponentScan(basePackages = "com.wgcloud")
diff --git a/src/main/java/com/wgcloud/controller/FailureLoggingController.java b/src/main/java/com/wgcloud/controller/FailureLoggingController.java
new file mode 100644
index 0000000..1ec1615
--- /dev/null
+++ b/src/main/java/com/wgcloud/controller/FailureLoggingController.java
@@ -0,0 +1,170 @@
+package com.wgcloud.controller;
+
+import com.github.pagehelper.PageInfo;
+import com.wgcloud.entity.AccountInfo;
+import com.wgcloud.entity.Equipment;
+import com.wgcloud.entity.FailureLogging;
+import com.wgcloud.service.FailureLoggingService;
+import com.wgcloud.service.LogInfoService;
+import com.wgcloud.util.HostUtil;
+import com.wgcloud.util.PageUtil;
+import com.wgcloud.util.staticvar.StaticKeys;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.servlet.mvc.support.RedirectAttributes;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author kdq
+ * @version 1.0.0
+ * @ClassName FailureLoggingController.java
+ * @Description TODO
+ * @createTime 2023骞�02鏈�16鏃� 14:22:00
+ */
+@Controller
+@RequestMapping("/failurelogging")
+public class FailureLoggingController {
+
+    private static final Logger logger = LoggerFactory.getLogger(FailureLoggingController.class);
+
+    @Resource
+    private FailureLoggingService failureLoggingService;
+    @Resource
+    private LogInfoService logInfoService;
+
+    /**
+     * 鏍规嵁鏉′欢鏌ヨ璁惧鍒楄〃
+     *
+     * @param model
+     * @param request
+     * @return
+     */
+    @RequestMapping(value = "list")
+    public String failureList(FailureLogging failureLogging, Model model, HttpServletRequest request) {
+        Map<String, Object> params = new HashMap<String, Object>();
+        try {
+            StringBuffer url = new StringBuffer();
+//            if (!StringUtils.isEmpty(failureLogging.getOldDeviceName())) {
+//                url.append("&oldDeviceName=").append(failureLogging.getOldDeviceName());
+//            }
+            PageInfo pageInfo = failureLoggingService.selectByParams(params, failureLogging.getPage(), failureLogging.getPageSize());
+            PageUtil.initPageNumber(pageInfo, model);
+
+
+            model.addAttribute("pageUrl", "/failurelogging/list?1=1" + url.toString());
+            model.addAttribute("page", pageInfo);
+            model.addAttribute("failureLogging", failureLogging);
+        }catch (Exception e){
+            logger.error("鏌ヨ璁惧鏇存崲鍒楄〃閿欒", e);
+            logInfoService.save("鏌ヨ璧勪骇淇℃伅閿欒", e.toString(), StaticKeys.LOG_XTCZ);
+        }
+        return "failurelogging/list";
+    }
+
+    @RequestMapping(value = "save")
+    public String saveFailureLogging(FailureLogging failureLogging, Model model, HttpServletRequest request) {
+        try {
+            if (StringUtils.isEmpty(failureLogging.getId())) {
+                failureLoggingService.save(failureLogging);
+                failureLoggingService.saveLog(request, StaticKeys.LOG_ADD, failureLogging);
+            } else {
+                failureLoggingService.updateById(failureLogging);
+                failureLoggingService.saveLog(request, StaticKeys.LOG_UPDATE, failureLogging);
+            }
+        } catch (Exception e) {
+            logger.error("淇濆瓨璁惧鏇存崲鏁版嵁閿欒", e);
+            logInfoService.save("淇濆瓨璁惧鏇存崲鏁版嵁閿欒", e.toString(), StaticKeys.LOG_XTCZ);
+        }
+        return "redirect:/failurelogging/list";
+    }
+
+    /**
+     * 娣诲姞
+     *
+     * @param model
+     * @param request
+     * @return
+     */
+    @RequestMapping(value = "edit")
+    public String edit(Model model, HttpServletRequest request) {
+        String errorMsg = "娣诲姞璁惧";
+        String id = request.getParameter("id");
+        FailureLogging failureLogging = new FailureLogging();
+        try {
+            if (StringUtils.isEmpty(id)) {
+                model.addAttribute("failureLogging", failureLogging);
+
+                return "failureLogging/add";
+            }
+            failureLogging = failureLoggingService.selectById(id);
+            model.addAttribute("failureLogging", failureLogging);
+        } catch (Exception e) {
+            logger.error(errorMsg, e);
+            logInfoService.save(errorMsg, e.toString(), StaticKeys.LOG_XTCZ);
+        }
+        return "failurelogging/add";
+    }
+
+    /**
+     * 鏌ョ湅璇ュ簲鐢ㄧ粺璁″浘
+     *
+     * @param model
+     * @param request
+     * @return
+     */
+    @RequestMapping(value = "view")
+    public String viewChart(Model model, HttpServletRequest request) {
+        String errorMsg = "鏌ョ湅璁惧鏇存崲閿欒";
+        String id = request.getParameter("id");
+        FailureLogging failureLogging = new FailureLogging();
+        try {
+            failureLogging = failureLoggingService.selectById(id);
+            model.addAttribute("failureLogging", failureLogging);
+        } catch (Exception e) {
+            logger.error(errorMsg, e);
+            logInfoService.save(errorMsg, e.toString(), StaticKeys.LOG_XTCZ);
+        }
+        return "failurelogging/view";
+    }
+
+
+    /**
+     * 鍒犻櫎璁惧
+     *
+     * @param
+     * @param model
+     * @param request
+     * @param redirectAttributes
+     * @return
+     */
+    @RequestMapping(value = "del")
+    public String delete(Model model, HttpServletRequest request, RedirectAttributes redirectAttributes) {
+        String errorMsg = "鍒犻櫎鏇存崲璁惧閿欒";
+        FailureLogging failureLogging = new FailureLogging();
+        try {
+            if (!StringUtils.isEmpty(request.getParameter("id"))) {
+                String[] ids = request.getParameter("id").split(",");
+                for (String id : ids) {
+                    failureLogging = failureLoggingService.selectById(id);
+                    failureLoggingService.saveLog(request, StaticKeys.LOG_DEL, failureLogging);
+                }
+                failureLoggingService.deleteById(ids);
+            }
+        } catch (Exception e) {
+            logger.error(errorMsg, e);
+            logInfoService.save(errorMsg, e.toString(), StaticKeys.LOG_XTCZ);
+        }
+        return "redirect:/failurelogging/list";
+    }
+
+
+}
diff --git a/src/main/java/com/wgcloud/entity/FailureLogging.java b/src/main/java/com/wgcloud/entity/FailureLogging.java
index 62977d4..b691c0a 100644
--- a/src/main/java/com/wgcloud/entity/FailureLogging.java
+++ b/src/main/java/com/wgcloud/entity/FailureLogging.java
@@ -57,6 +57,6 @@
     /**
      * 鏇存崲鏃堕棿
      */
-    private Date personDate;
+    private String personDate;
 
 }
diff --git a/src/main/java/com/wgcloud/entity/InspectionTask.java b/src/main/java/com/wgcloud/entity/InspectionTask.java
index 29b0803..285ea84 100644
--- a/src/main/java/com/wgcloud/entity/InspectionTask.java
+++ b/src/main/java/com/wgcloud/entity/InspectionTask.java
@@ -52,5 +52,5 @@
     /**
      * 鍒涘缓鏃堕棿
      */
-    private Date createTime;
+    private String createTime;
 }
diff --git a/src/main/java/com/wgcloud/entity/WorkLogging.java b/src/main/java/com/wgcloud/entity/WorkLogging.java
index 68fe51a..c2e83d5 100644
--- a/src/main/java/com/wgcloud/entity/WorkLogging.java
+++ b/src/main/java/com/wgcloud/entity/WorkLogging.java
@@ -27,7 +27,7 @@
     /**
      * 鎿嶄綔鏃堕棿
      */
-    private Date workDate;
+    private String workDate;
 
     /**
      * 鎿嶄綔鏃ュ織
diff --git a/src/main/java/com/wgcloud/mapper/FailureLoggingMapper.java b/src/main/java/com/wgcloud/mapper/FailureLoggingMapper.java
index 1f299df..8e1d372 100644
--- a/src/main/java/com/wgcloud/mapper/FailureLoggingMapper.java
+++ b/src/main/java/com/wgcloud/mapper/FailureLoggingMapper.java
@@ -24,10 +24,11 @@
 
     public List<FailureLogging> selectByParams(Map<String, Object> params) throws Exception;
 
-    public Equipment selectById(String id) throws Exception;
+    public FailureLogging selectById(String id) throws Exception;
 
     public int deleteById(String[] id) throws Exception;
 
     public int countByParams(Map<String, Object> params) throws Exception;
 
+    public int updateById(FailureLogging failureLogging) throws Exception;
 }
diff --git a/src/main/java/com/wgcloud/service/FailureLoggingService.java b/src/main/java/com/wgcloud/service/FailureLoggingService.java
index ea3c351..4a9b7ca 100644
--- a/src/main/java/com/wgcloud/service/FailureLoggingService.java
+++ b/src/main/java/com/wgcloud/service/FailureLoggingService.java
@@ -1,6 +1,21 @@
 package com.wgcloud.service;
 
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.wgcloud.entity.Equipment;
+import com.wgcloud.entity.FailureLogging;
+import com.wgcloud.mapper.EquipmentMapper;
+import com.wgcloud.mapper.FailureLoggingMapper;
+import com.wgcloud.util.DateUtil;
+import com.wgcloud.util.HostUtil;
+import com.wgcloud.util.UUIDUtil;
+import com.wgcloud.util.staticvar.StaticKeys;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+import java.util.Map;
 
 /**
  * @author kdq
@@ -11,4 +26,47 @@
  */
 @Service
 public class FailureLoggingService {
+    @Autowired
+    private FailureLoggingMapper failureLoggingMapper;
+    @Autowired
+    private LogInfoService logInfoService;
+
+    public PageInfo selectByParams(Map<String, Object> params, Integer currPage, Integer pageSize)throws Exception  {
+        PageHelper.startPage(currPage, pageSize);
+        List<FailureLogging> list = failureLoggingMapper.selectByParams(params);
+        PageInfo<FailureLogging> pageInfo = new PageInfo<FailureLogging>(list);
+        return pageInfo;
+    }
+
+    public void save(FailureLogging failureLogging) throws Exception {
+        failureLogging.setId(UUIDUtil.getUUID());
+        failureLoggingMapper.save(failureLogging);
+    }
+
+    public void updateById(FailureLogging failureLogging)
+            throws Exception {
+        failureLoggingMapper.updateById(failureLogging);
+    }
+
+    /**
+     * 淇濆瓨鎿嶄綔鏃ュ織
+     *
+     * @param request 鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛
+     * @param action  鎿嶄綔鏍囪瘑
+     */
+    public void saveLog(HttpServletRequest request, String action, FailureLogging failureLogging) {
+        if (null == failureLogging) {
+            return;
+        }
+        logInfoService.save(HostUtil.getAccountByRequest(request).getAccount() + action + "璁惧鏇存崲鍚嶇О锛�" + failureLogging.getOldDeviceName(),
+                "璁惧鏇存崲ip锛�" + failureLogging.getOldDeviceIp(), StaticKeys.LOG_XTCZ);
+    }
+
+    public FailureLogging selectById(String id)throws Exception {
+        return failureLoggingMapper.selectById(id);
+    }
+
+    public void deleteById(String[] ids)throws Exception {
+        failureLoggingMapper.deleteById(ids);
+    }
 }
diff --git a/src/main/resources/mybatis/mapper/FailureLoggingMapper.xml b/src/main/resources/mybatis/mapper/FailureLoggingMapper.xml
index 516ef98..5fa2550 100644
--- a/src/main/resources/mybatis/mapper/FailureLoggingMapper.xml
+++ b/src/main/resources/mybatis/mapper/FailureLoggingMapper.xml
@@ -150,4 +150,36 @@
 	</select>
 
 
+	<update id="updateById" parameterType="com.wgcloud.entity.FailureLogging">
+		UPDATE FAILURE_LOGGING
+		<set>
+			<if test="oldDeviceName != null">
+				OLD_DEVICE_NAME = #{oldDeviceName},
+			</if>
+			<if test="oldDeviceIp != null">
+				OLD_DEVICE_IP = #{oldDeviceIp},
+			</if>
+			<if test="oldDeviceModel != null">
+				OLD_DEVICE_MODEL = #{oldDeviceModel},
+			</if>
+			<if test="newDeviceName != null">
+				NEW_DEVICE_NAME = #{newDeviceName},
+			</if>
+			<if test="newDeviceIp != null">
+				NEW_DEVICE_IP = #{newDeviceIp},
+			</if>
+			<if test="newDeviceModel != null">
+				NEW_DEVICE_MODEL = #{newDeviceModel},
+			</if>
+			<if test="personName != null">
+				PERSON_NAME = #{personName},
+			</if>
+			<if test="personDate != null">
+				PERSON_DATE = #{personDate}
+			</if>
+		</set>
+		WHERE ID = #{id}
+	</update>
+
+
 </mapper>
diff --git a/src/main/resources/static/js/failurelogging.js b/src/main/resources/static/js/failurelogging.js
new file mode 100644
index 0000000..39994ea
--- /dev/null
+++ b/src/main/resources/static/js/failurelogging.js
@@ -0,0 +1,27 @@
+
+function add() {
+	window.location.href = "/tssw/failurelogging/edit";
+}
+
+function searchByAccount() {
+	window.location.href = "/tssw/failurelogging/list";
+}
+
+function view(id) {
+	window.location.href = "/tssw/failurelogging/view?id="+id;
+}
+
+function edit(id){
+	window.location.href = "/tssw/failurelogging/edit?id="+id;
+}
+
+function del(id) {
+	if(confirm('浣犵‘瀹氳鍒犻櫎鍚楋紵')) {
+		window.location.href = "/tssw/failurelogging/del?id=" + id;
+	}
+}
+
+
+function cancel(){
+	history.back();
+}
diff --git a/src/main/resources/templates/common/aside.html b/src/main/resources/templates/common/aside.html
index 36de3de..eb2263b 100644
--- a/src/main/resources/templates/common/aside.html
+++ b/src/main/resources/templates/common/aside.html
@@ -414,6 +414,47 @@
                     </a>
                 </li>
 
+                <th:block th:if="${#strings.startsWith(session.menuActive,'8')}">
+                    <li class="nav-item has-treeview menu-open">
+                        <a  href="javascript:void(0);" class="nav-link active">
+                </th:block>
+                <th:block th:unless="${#strings.startsWith(session.menuActive,'8')}">
+                    <li class="nav-item has-treeview">
+                        <a  href="javascript:void(0);" class="nav-link">
+                </th:block>
+                <i class="nav-icon fas fa-network-wired"></i>
+                <p title="宸℃绠$悊">
+                    宸℃绠$悊
+                    <i class="fas fa-angle-left right"></i>
+                </p>
+                </a>
+                <ul class="nav nav-treeview">
+                    <li class="nav-item">
+                        <th:block th:if="${session.menuActive eq '81'}">
+                            <a th:href="@{'/failurelogging/tuopuListHost'}" class="nav-link active">
+                        </th:block>
+                        <th:block th:unless="${session.menuActive eq '81'}">
+                            <a th:href="@{'/failurelogging/tuopuListHost'}" class="nav-link">
+                        </th:block>
+                        <i class="nav-icon far fa-circle text-info"></i>
+                        <p>宸℃璁″垝</p>
+                        </a>
+                    </li>
+                    <li class="nav-item">
+                        <th:block th:if="${session.menuActive eq '82'}">
+                            <a th:href="@{'/failurelogging/list'}" class="nav-link active">
+                        </th:block>
+                        <th:block th:unless="${session.menuActive eq '82'}">
+                            <a th:href="@{'/failurelogging/list'}" class="nav-link">
+                        </th:block>
+                        <i class="far fa-circle nav-icon"></i>
+                        <p>澶囦欢鏇存崲</p>
+                        </a>
+                    </li>
+
+                </ul>
+                </li>
+
 
                 <!--<li class="nav-item">
                     <a target="_blank" href="http://www.wgstart.com/elasticsearch-head/index.html"
@@ -431,4 +472,4 @@
         <!-- /.sidebar-menu -->
     </div>
     <!-- /.sidebar -->
-</aside>
\ No newline at end of file
+</aside>
diff --git a/src/main/resources/templates/failurelogging/add.html b/src/main/resources/templates/failurelogging/add.html
new file mode 100644
index 0000000..9c9976f
--- /dev/null
+++ b/src/main/resources/templates/failurelogging/add.html
@@ -0,0 +1,158 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <div  th:replace="common/header.html"></div>
+
+</head>
+<body th:class="${application.sidebarCollapse}">
+<div th:replace="common/chart.html"></div>
+
+<div class="wrapper">
+
+  <div th:replace="common/navbar.html"></div>
+
+  <div th:replace="common/aside.html"></div>
+
+  <!-- Content Wrapper. Contains page content -->
+  <div class="content-wrapper" style="font-size:0.90rem">
+    <!-- Content Header (Page header) -->
+    <section class="content-header">
+      <div class="container-fluid">
+        <div class="row mb-2">
+          <div class="col-sm-6">
+            <h1></h1>
+          </div>
+            <div class="col-sm-6">
+                <ol class="breadcrumb float-sm-right">
+                    <li class="breadcrumb-item active"></li>
+                </ol>
+            </div>
+        </div>
+      </div><!-- /.container-fluid -->
+    </section>
+
+    <!-- Main content -->
+    <section class="content">
+      <div class="container-fluid">
+        <div class="row">
+
+  <div class="col-md-10">
+    <div class="card card-primary">
+      <div class="card-header">
+        <h3 class="card-title">娣诲姞鏇存崲璁″垝</h3>
+          <div class=" float-sm-right">
+              <a href="javascript:history.back()">杩斿洖</a>
+          </div>
+      </div>
+      <!-- /.card-header -->
+      <!-- form start -->
+        <form role="form" id="form1" th:action="@{'/failurelogging/save'}">
+            <input type="hidden" name="id" th:value="${failureLogging.id}"/>
+            <div class="card-body">
+                <div class="row">
+                    <div class="col-md-6">
+                        <div class="form-group">
+                            <label><font color="red">*</font>鏃ц澶囧悕绉�</label>
+                            <input type="text" autocomplete="off"  th:value="${failureLogging.oldDeviceName}" class="validate[required,maxSize[50]] form-control" name="oldDeviceName" id="oldDeviceName" placeholder="">
+                        </div>
+                        <div class="form-group">
+                            <label>鏃ц澶噄p</label>
+                            <input type="text" autocomplete="off"  th:value="${failureLogging.oldDeviceIp}" class="validate[required,maxSize[50]] form-control" name="oldDeviceIp" id="oldDeviceIp" placeholder="">
+                        </div>
+                        <div class="form-group">
+                            <label>鏃ц澶囧瀷鍙�</label>
+                            <input type="text" autocomplete="off"  th:value="${failureLogging.oldDeviceModel}" class="validate[required,maxSize[50]] form-control" name="oldDeviceModel" id="oldDeviceModel" placeholder="">
+                        </div>
+                        <div class="form-group">
+                            <label>鏇存崲浜�</label>
+                            <input type="text" autocomplete="off"  th:value="${failureLogging.personName}" class="validate[required,maxSize[50]] form-control" name="personName" id="personName" placeholder="">
+                        </div>
+
+                    </div>
+                    <div class="col-md-6">
+                        <div class="form-group">
+                            <label>鏂拌澶囧悕绉�</label>
+                            <input type="text" autocomplete="off"  th:value="${failureLogging.newDeviceName}" class="validate[required,maxSize[50]] form-control" name="newDeviceName" id="newDeviceName" placeholder="">
+                        </div>
+
+                        <div class="form-group">
+                            <label>鏂拌澶噄p</label>
+                            <input type="text" autocomplete="off"  th:value="${failureLogging.newDeviceIp}" class="validate[required,maxSize[50]] form-control" name="newDeviceIp" id="newDeviceIp" placeholder="">
+                        </div>
+                        <div class="form-group">
+                            <label>鏂拌澶囧瀷鍙�</label>
+                            <input type="text" autocomplete="off" th:value="${failureLogging.newDeviceModel}" class="validate[required,maxSize[50]] form-control" name="newDeviceModel" id="newDeviceModel" placeholder="">
+                        </div>
+                        <div class="form-group">
+                            <label>鏇存崲鏃堕棿</label>
+                            <input type="text" autocomplete="off"  th:value="${failureLogging.personDate}" class="validate[required,maxSize[50]] form-control" name="personDate" id="personDate" placeholder="">
+                        </div>
+
+                    </div>
+
+                </div>
+
+            </div>
+            <!-- /.card-body -->
+
+            <div class="card-footer">
+                <button type="submit" class="btn btn-primary btn-sm" style="margin-right:10px;">淇� 瀛�</button>
+                <button type="button"  th:onclick="goback()"  class="btn bg-gradient-danger btn-sm">杩� 鍥�</button>
+            </div>
+
+        </form>
+      <!-- /.card-body -->
+    </div>
+    <!-- /.card -->
+
+
+  </div>
+
+        </div>
+      </div>
+    </section>
+  </div>
+
+
+  <div th:replace="common/footer.html"></div>
+
+</div>
+<!-- ./wrapper -->
+<link rel="stylesheet" th:href="@{'/static/js/jQuery/validationEngine.jquery.css'}" type="text/css"/>
+<script th:src="@{'/static/js/jQuery/jquery.validationEngine-zh_CN.js'}" type="text/javascript" charset="utf-8"></script>
+<script th:src="@{'/static/js/jQuery/jquery.validationEngine.js'}" type="text/javascript" charset="utf-8"></script>
+<script th:inline="javascript">
+    $(document).ready(function(){
+        $("#form1").validationEngine();
+        var caigouDateResponse =[[${failureLogging.personDate}]];
+        var caigouDate = $('#personDate');
+        if(caigouDate!=null && caigouDate != undefined){
+            caigouDate.daterangepicker({
+                singleDatePicker: true,
+                showDropdowns: true,
+                // timePicker: true,
+                // timePicker24Hour : true,
+                // autoUpdateInput: false,
+                "opens": "center",
+                "locale": {
+                    format: 'YYYY-MM-DD',
+                    applyLabel: "搴旂敤",
+                    cancelLabel: "鍙栨秷",
+                    daysOfWeek: ['鏃�', '涓�', '浜�', '涓�', '鍥�', '浜�', '鍏�'],
+                    monthNames: ['涓�鏈�', '浜屾湀', '涓夋湀', '鍥涙湀', '浜旀湀', '鍏湀', '涓冩湀', '鍏湀', '涔濇湀', '鍗佹湀', '鍗佷竴鏈�', '鍗佷簩鏈�'],
+                }
+            });
+            if(caigouDateResponse==''  || caigouDateResponse==null){
+                caigouDate.val("");
+            }
+        }
+
+    });
+
+
+    function goback() {
+        history.back();
+    }
+</script>
+</body>
+</html>
diff --git a/src/main/resources/templates/failurelogging/list.html b/src/main/resources/templates/failurelogging/list.html
new file mode 100644
index 0000000..20412ec
--- /dev/null
+++ b/src/main/resources/templates/failurelogging/list.html
@@ -0,0 +1,131 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <div  th:replace="common/header.html"></div>
+
+
+</head>
+<body th:class="${application.sidebarCollapse}">
+<div th:replace="common/chart.html"></div>
+
+<div class="wrapper">
+
+  <div th:replace="common/navbar.html"></div>
+
+  <div th:replace="common/aside.html"></div>
+
+  <!-- Content Wrapper. Contains page content -->
+  <div class="content-wrapper" style="font-size:0.90rem">
+    <!-- Content Header (Page header) -->
+    <section class="content-header" style="height:38px">
+      <div class="container-fluid">
+        <div class="row mb-2" style="margin-top: -7px;">
+          <div class="col-sm-6"></div>
+          <div class="col-sm-6">
+            <ol class="breadcrumb float-sm-right">
+              <li class="breadcrumb-item"><a href="javascript:history.back()">杩斿洖涓婄骇</a></li>
+            </ol>
+          </div>
+        </div>
+      </div><!-- /.container-fluid -->
+    </section>
+
+    <!-- Main content -->
+    <section class="content">
+      <div class="container-fluid">
+        <div class="row">
+
+  <div class="col-md-12">
+    <div class="card">
+      <div class="card-header">
+        <h3 class="card-title"><i class="nav-icon fas fa-server"></i>&nbsp;璁惧鍒楄〃</h3>
+        <div class=" float-sm-right">
+          <!-- SEARCH FORM -->
+          <form class="form-inline ml-3" th:action="@{'/failurelogging/list'}">
+            <th:block th:if="${session.LOGIN_KEY.role != 'guest'}">
+              <button type="button" onclick="delChecks('/failurelogging/del')"  class="btn bg-danger btn-sm" style="margin-right:5px;">鍒犻櫎</button>
+              <button type="button" onclick="add()" class="btn btn-primary btn-sm" style="margin-right:5px;">娣诲姞</button>
+            </th:block>
+<!--            <div th:replace="common/accountSelect.html"></div>-->
+            <div class="input-group input-group-sm">
+<!--              <input class="form-control"  name="name" autocomplete="off" th:value="${failurelogging.oldDeviceName}" type="text" placeholder="鏃ц澶囧悕绉�">-->
+              <div class="input-group-append">
+                <button class="btn btn-primary" type="submit">
+                  <i class="fas fa-search"></i>
+                </button>
+              </div>
+            </div>
+          </form>
+
+        </div>
+      </div>
+      <!-- /.card-header -->
+      <div class="card-body">
+        <table class="table table-bordered table-hover">
+          <thead>
+          <tr>
+            <th style="width: 20px"> <input type="checkbox" value="" name="checkall" id="checkall"></th>
+            <th style="width: 60px">搴忓彿</th>
+            <th>鏃ц澶囧悕绉�</th>
+            <th>鏃ц澶噄p</th>
+            <th>鏃ц澶囧瀷鍙�</th>
+            <th>鏂拌澶囧悕绉�</th>
+            <th>鏂拌澶噄p</th>
+            <th>鏂拌澶囧瀷鍙�</th>
+            <th>鏇存崲浜�</th>
+            <th>鏇存崲鏃堕棿</th>
+<!--            <th th:if="${application.userInfoManage == 'true' && session.LOGIN_KEY.role == 'admin'}">璐﹀彿</th>-->
+              <th>鎿嶄綔</th>
+          </tr>
+          </thead>
+          <tbody>
+          <th:block th:each="item,iterStat : ${page.list}">
+            <tr>
+              <td><input type="checkbox" th:value="${item.id}" name="todo2" th:id="${item.id}+'_check'"/></td>
+              <td th:text="${iterStat.index+1}">1</td>
+              <td th:text="${item.oldDeviceName}">Update software</td>
+              <td th:text="${item.oldDeviceIp}">Update software</td>
+              <td th:text="${item.oldDeviceModel}">Update software</td>
+              <td th:text="${item.newDeviceName}">Update software</td>
+              <td th:text="${item.newDeviceIp}">Update software</td>
+              <td th:text="${item.newDeviceModel}">Update software</td>
+              <td th:text="${item.personName}">Update software</td>
+              <td th:text="${item.personDate}">Update software</td>
+              <td>
+                <th:block th:if="${session.LOGIN_KEY.role != 'guest'}">
+                  <button type="button"  th:onclick="edit([[${item.id}]])"  class="btn bg-gradient-primary btn-sm">缂栬緫</button>
+                  <button type="button"  th:onclick="del([[${item.id}]])"  class="btn bg-gradient-danger btn-sm">鍒犻櫎</button>
+                </th:block>
+                <button type="button"  th:onclick="view([[${item.id}]])"  class="btn bg-gradient-primary btn-sm">鏌ョ湅</button></td>
+            </tr>
+          </th:block>
+
+          </tbody>
+        </table>
+      </div>
+      <!-- /.card-body -->
+      <div th:replace="common/page.html"></div>
+    </div>
+    <!-- /.card -->
+
+
+  </div>
+
+        </div>
+      </div>
+    </section>
+  </div>
+
+
+  <div th:replace="common/footer.html"></div>
+
+</div>
+<!-- ./wrapper -->
+
+<script th:src="@{'/static/js/failurelogging.js?v=3.3.9'}"></script>
+
+<script th:inline="javascript">
+</script>
+
+</body>
+</html>
diff --git a/src/main/resources/templates/failurelogging/view.html b/src/main/resources/templates/failurelogging/view.html
new file mode 100644
index 0000000..5ca01ba
--- /dev/null
+++ b/src/main/resources/templates/failurelogging/view.html
@@ -0,0 +1,124 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <div  th:replace="common/header.html"></div>
+
+</head>
+<body th:class="${application.sidebarCollapse}">
+<div th:replace="common/chart.html"></div>
+
+<div class="wrapper">
+
+  <div th:replace="common/navbar.html"></div>
+
+  <div th:replace="common/aside.html"></div>
+
+  <!-- Content Wrapper. Contains page content -->
+  <div class="content-wrapper" style="font-size:0.90rem">
+    <!-- Content Header (Page header) -->
+    <section class="content-header">
+      <div class="container-fluid">
+        <div class="row mb-2">
+          <div class="col-sm-6">
+            <h1></h1>
+          </div>
+            <div class="col-sm-6">
+                <ol class="breadcrumb float-sm-right">
+                    <li class="breadcrumb-item active"></li>
+                </ol>
+            </div>
+        </div>
+      </div><!-- /.container-fluid -->
+    </section>
+
+    <!-- Main content -->
+    <section class="content">
+      <div class="container-fluid">
+        <div class="row">
+
+  <div class="col-md-10">
+    <div class="card card-primary">
+      <div class="card-header">
+        <h3 class="card-title">鏌ョ湅澶囦欢鏇存崲</h3>
+          <div class=" float-sm-right">
+              <a href="javascript:history.back()">杩斿洖</a>
+          </div>
+      </div>
+      <!-- /.card-header -->
+      <!-- form start -->
+        <form role="form" id="form1" th:action="@{'/failurelogging/save'}">
+            <input type="hidden" name="id" th:value="${failurelogging.id}"/>
+            <div class="card-body">
+                <div class="row">
+                    <div class="col-md-6">
+                        <div class="form-group">
+                            <label><font color="red">*</font>鏃ц澶囧悕绉�</label>
+                            <div  th:text="${failurelogging.oldDeviceName}" ></div>
+                        </div>
+                        <div class="form-group">
+                            <label>鏃ц澶噄p</label>
+                            <div  th:text="${failurelogging.oldDeviceIp}" ></div>
+                        </div>
+                        <div class="form-group">
+                            <label>鏃ц澶囧瀷鍙�</label>
+                            <div  th:text="${failurelogging.oldDeviceModel}" ></div>
+                        </div>
+                        <div class="form-group">
+                            <label>鏂拌澶囧悕绉�</label>
+                            <div  th:text="${failurelogging.newDeviceName}" ></div>
+                        </div>
+
+                    </div>
+                    <div class="col-md-6">
+                        <div class="form-group">
+                            <label><font color="red">*</font>鏂拌澶噄p</label>
+                            <div  th:text="${failurelogging.newDeviceIp}" ></div>
+                        </div>
+
+                        <div class="form-group">
+                            <label>鏂拌澶囧瀷鍙�</label>
+                            <div  th:text="${failurelogging.newDeviceModel}" ></div>
+                        </div>
+                        <div class="form-group">
+                            <label>鏇存崲浜�</label>
+                            <div  th:text="${failurelogging.personName}" ></div>
+                        </div>
+                        <div class="form-group">
+                            <label>鏇存崲鏃堕棿</label>
+                            <div  th:text="${failurelogging.personDate}" ></div>
+                        </div>
+
+                    </div>
+
+                </div>
+            </div>
+            <!-- /.card-body -->
+        </form>
+      <!-- /.card-body -->
+    </div>
+    <!-- /.card -->
+
+
+  </div>
+
+        </div>
+      </div>
+    </section>
+  </div>
+
+
+  <div th:replace="common/footer.html"></div>
+
+</div>
+<!-- ./wrapper -->
+<link rel="stylesheet" th:href="@{'/static/js/jQuery/validationEngine.jquery.css'}" type="text/css"/>
+<script th:src="@{'/static/js/jQuery/jquery.validationEngine-zh_CN.js'}" type="text/javascript" charset="utf-8"></script>
+<script th:src="@{'/static/js/jQuery/jquery.validationEngine.js'}" type="text/javascript" charset="utf-8"></script>
+<script th:inline="javascript">
+
+    function goback() {
+        history.back();
+    }
+</script>
+</body>
+</html>

--
Gitblit v1.9.1