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") src/main/java/com/wgcloud/controller/FailureLoggingController.java
New file @@ -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"; } } src/main/java/com/wgcloud/entity/FailureLogging.java
@@ -57,6 +57,6 @@ /** * 更换时间 */ private Date personDate; private String personDate; } src/main/java/com/wgcloud/entity/InspectionTask.java
@@ -52,5 +52,5 @@ /** * 创建时间 */ private Date createTime; private String createTime; } src/main/java/com/wgcloud/entity/WorkLogging.java
@@ -27,7 +27,7 @@ /** * 操作时间 */ private Date workDate; private String workDate; /** * 操作日志 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; } 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); } } 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> src/main/resources/static/js/failurelogging.js
New file @@ -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(); } 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> </aside> src/main/resources/templates/failurelogging/add.html
New file @@ -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>旧设备ip</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>新设备ip</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> src/main/resources/templates/failurelogging/list.html
New file @@ -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> 设备列表</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>旧设备ip</th> <th>旧设备型号</th> <th>新设备名称</th> <th>新设备ip</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> src/main/resources/templates/failurelogging/view.html
New file @@ -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>旧设备ip</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>新设备ip</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>