22 changed files with 817 additions and 103 deletions
@ -0,0 +1,72 @@ |
|||
package org.nl.acs.history; |
|||
|
|||
import cn.hutool.core.util.ObjectUtil; |
|||
import cn.hutool.core.util.StrUtil; |
|||
import com.alibaba.fastjson.JSONArray; |
|||
import com.alibaba.fastjson.JSONObject; |
|||
import net.dreamlu.mica.core.result.R; |
|||
import org.apache.poi.ss.formula.functions.T; |
|||
import org.nl.modules.system.domain.Dict; |
|||
import org.nl.modules.system.service.DictDetailService; |
|||
import org.nl.modules.system.service.DictService; |
|||
import org.nl.modules.system.service.dto.DictDetailDto; |
|||
import org.nl.modules.system.service.dto.DictDto; |
|||
import org.nl.modules.system.service.dto.DictQueryCriteria; |
|||
import org.nl.modules.system.service.impl.DictDetailServiceImpl; |
|||
import org.nl.modules.system.service.impl.DictServiceImpl; |
|||
import org.nl.utils.SpringContextHolder; |
|||
|
|||
import java.util.HashMap; |
|||
import java.util.List; |
|||
import java.util.Map; |
|||
import java.util.concurrent.ConcurrentHashMap; |
|||
import java.util.function.Function; |
|||
import java.util.function.Supplier; |
|||
|
|||
/** |
|||
* @author: geng by |
|||
* @createDate: 2023/3/15 |
|||
*/ |
|||
public class ErrorUtil { |
|||
|
|||
public static ConcurrentHashMap<String, List<DictDetailDto>> dictMap = new ConcurrentHashMap<>(); |
|||
|
|||
|
|||
public static String getDictDetail(String type, String error_code) { |
|||
getDict(); |
|||
List<DictDetailDto> dictDetailDtos = dictMap.get(type); |
|||
String detail = null; |
|||
if (ObjectUtil.isNotEmpty(dictDetailDtos)) { |
|||
for (int i = 0; i < dictDetailDtos.size(); i++) { |
|||
DictDetailDto dictDetailDto = dictDetailDtos.get(i); |
|||
String value = dictDetailDto.getValue(); |
|||
String label = dictDetailDto.getLabel(); |
|||
if (StrUtil.equals(value, error_code)) { |
|||
detail = label; |
|||
break; |
|||
} |
|||
} |
|||
} |
|||
return detail == null ? "字典表未配置对应的报警信息" : detail; |
|||
} |
|||
|
|||
|
|||
public static void getDict() { |
|||
if (ObjectUtil.isEmpty(dictMap)) { |
|||
DictDetailService dictDetailService = SpringContextHolder.getBean(DictDetailServiceImpl.class); |
|||
DictService dictService = SpringContextHolder.getBean(DictServiceImpl.class); |
|||
List<Dict> dictDtos = dictService.queryAll(); |
|||
for (int i = 0; i < dictDtos.size(); i++) { |
|||
Dict dictDto = dictDtos.get(i); |
|||
dictMap.put(dictDto.getName(), getDict(dictDto.getName(), t -> { |
|||
return dictDetailService.getDictByName(t); |
|||
})); |
|||
} |
|||
} |
|||
} |
|||
|
|||
public static List<DictDetailDto> getDict(String name, Function<String, List<DictDetailDto>> f) { |
|||
return f.apply(name); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,75 @@ |
|||
|
|||
package org.nl.acs.history.rest; |
|||
|
|||
|
|||
import org.nl.acs.history.service.dto.DeviceErrorLogDto; |
|||
import org.nl.acs.history.service.DeviceErrorLogService; |
|||
import org.springframework.data.domain.Pageable; |
|||
import lombok.RequiredArgsConstructor; |
|||
import org.nl.annotation.Log; |
|||
import org.springframework.http.HttpStatus; |
|||
import org.springframework.http.ResponseEntity; |
|||
import org.springframework.validation.annotation.Validated; |
|||
import org.springframework.web.bind.annotation.*; |
|||
import io.swagger.annotations.*; |
|||
import java.io.IOException; |
|||
import javax.servlet.http.HttpServletResponse; |
|||
import java.util.Map; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
|
|||
/** |
|||
* @author gengby |
|||
* @date 2023-03-15 |
|||
**/ |
|||
@RestController |
|||
@RequiredArgsConstructor |
|||
@Api(tags = "设备报警记录管理") |
|||
@RequestMapping("/api/deviceErrorLog") |
|||
@Slf4j |
|||
public class DeviceErrorLogController { |
|||
|
|||
private final DeviceErrorLogService acsDeviceErrorLogService; |
|||
|
|||
@GetMapping |
|||
@Log("查询设备报警记录") |
|||
@ApiOperation("查询设备报警记录") |
|||
//@PreAuthorize("@el.check('acsDeviceErrorLog:list')")
|
|||
public ResponseEntity<Object> query(@RequestParam Map whereJson, Pageable page){ |
|||
return new ResponseEntity<>(acsDeviceErrorLogService.queryAll(whereJson,page),HttpStatus.OK); |
|||
} |
|||
|
|||
@PostMapping |
|||
@Log("新增设备报警记录") |
|||
@ApiOperation("新增设备报警记录") |
|||
//@PreAuthorize("@el.check('acsDeviceErrorLog:add')")
|
|||
public ResponseEntity<Object> create(@Validated @RequestBody DeviceErrorLogDto dto){ |
|||
acsDeviceErrorLogService.create(dto); |
|||
return new ResponseEntity<>(HttpStatus.CREATED); |
|||
} |
|||
|
|||
@PutMapping |
|||
@Log("修改设备报警记录") |
|||
@ApiOperation("修改设备报警记录") |
|||
//@PreAuthorize("@el.check('acsDeviceErrorLog:edit')")
|
|||
public ResponseEntity<Object> update(@Validated @RequestBody DeviceErrorLogDto dto){ |
|||
acsDeviceErrorLogService.update(dto); |
|||
return new ResponseEntity<>(HttpStatus.NO_CONTENT); |
|||
} |
|||
|
|||
@Log("删除设备报警记录") |
|||
@ApiOperation("删除设备报警记录") |
|||
//@PreAuthorize("@el.check('acsDeviceErrorLog:del')")
|
|||
@DeleteMapping |
|||
public ResponseEntity<Object> delete(@RequestBody String[] ids) { |
|||
acsDeviceErrorLogService.deleteAll(ids); |
|||
return new ResponseEntity<>(HttpStatus.OK); |
|||
} |
|||
|
|||
@Log("导出设备报警记录") |
|||
@ApiOperation("导出设备报警记录") |
|||
@GetMapping(value = "/download") |
|||
//@PreAuthorize("@el.check('acsDeviceErrorLog:list')")
|
|||
public void download(HttpServletResponse response, @RequestParam Map whereJson) throws IOException { |
|||
acsDeviceErrorLogService.download(acsDeviceErrorLogService.queryAll(whereJson), response); |
|||
} |
|||
} |
@ -0,0 +1,73 @@ |
|||
|
|||
package org.nl.acs.history.service; |
|||
|
|||
import org.nl.acs.history.service.dto.DeviceErrorLogDto; |
|||
import org.springframework.data.domain.Pageable; |
|||
import java.util.Map; |
|||
import java.util.List; |
|||
import java.io.IOException; |
|||
import javax.servlet.http.HttpServletResponse; |
|||
|
|||
/** |
|||
* @description 服务接口 |
|||
* @author gengby |
|||
* @date 2023-03-15 |
|||
**/ |
|||
public interface DeviceErrorLogService { |
|||
|
|||
/** |
|||
* 查询数据分页 |
|||
* @param whereJson 条件 |
|||
* @param page 分页参数 |
|||
* @return Map<String,Object> |
|||
*/ |
|||
Map<String,Object> queryAll(Map whereJson, Pageable page); |
|||
|
|||
/** |
|||
* 查询所有数据不分页 |
|||
* @param whereJson 条件参数 |
|||
* @return List<AcsDeviceErrorLogDto> |
|||
*/ |
|||
List<DeviceErrorLogDto> queryAll(Map whereJson); |
|||
|
|||
/** |
|||
* 根据ID查询 |
|||
* @param error_log_uuid ID |
|||
* @return AcsDeviceErrorLog |
|||
*/ |
|||
DeviceErrorLogDto findById(String error_log_uuid); |
|||
|
|||
/** |
|||
* 根据编码查询 |
|||
* @param code code |
|||
* @return AcsDeviceErrorLog |
|||
*/ |
|||
DeviceErrorLogDto findByCode(String code); |
|||
|
|||
|
|||
/** |
|||
* 创建 |
|||
* @param dto / |
|||
*/ |
|||
void create(DeviceErrorLogDto dto); |
|||
|
|||
/** |
|||
* 编辑 |
|||
* @param dto / |
|||
*/ |
|||
void update(DeviceErrorLogDto dto); |
|||
|
|||
/** |
|||
* 多选删除 |
|||
* @param ids / |
|||
*/ |
|||
void deleteAll(String[] ids); |
|||
|
|||
/** |
|||
* 导出数据 |
|||
* @param dtos 待导出的数据 |
|||
* @param response / |
|||
* @throws IOException / |
|||
*/ |
|||
void download(List<DeviceErrorLogDto> dtos, HttpServletResponse response) throws IOException; |
|||
} |
@ -0,0 +1,28 @@ |
|||
package org.nl.acs.history.service.dto; |
|||
|
|||
import lombok.Data; |
|||
import java.io.Serializable; |
|||
|
|||
/** |
|||
* @description / |
|||
* @author gengby |
|||
* @date 2023-03-15 |
|||
**/ |
|||
@Data |
|||
public class DeviceErrorLogDto implements Serializable { |
|||
|
|||
/** 报警日志标识 */ |
|||
private String error_log_uuid; |
|||
|
|||
/** 设备编码 */ |
|||
private String device_code; |
|||
|
|||
/** 报警编码 */ |
|||
private String error_code; |
|||
|
|||
/** 报警信息 */ |
|||
private String error_info; |
|||
|
|||
/** 报警时间 */ |
|||
private String error_time; |
|||
} |
@ -0,0 +1,140 @@ |
|||
|
|||
package org.nl.acs.history.service.impl; |
|||
|
|||
|
|||
import cn.hutool.core.map.MapUtil; |
|||
import cn.hutool.core.util.StrUtil; |
|||
import lombok.RequiredArgsConstructor; |
|||
import org.nl.acs.device.service.dto.AcsDeviceErpmappingDto; |
|||
import org.nl.acs.history.service.DeviceErrorLogService; |
|||
import org.nl.acs.history.service.dto.DeviceErrorLogDto; |
|||
import org.nl.exception.BadRequestException; |
|||
import org.springframework.stereotype.Service; |
|||
import org.springframework.transaction.annotation.Transactional; |
|||
|
|||
import org.springframework.data.domain.Pageable; |
|||
|
|||
import java.util.List; |
|||
import java.util.Map; |
|||
import java.io.IOException; |
|||
import javax.servlet.http.HttpServletResponse; |
|||
import java.util.ArrayList; |
|||
import java.util.LinkedHashMap; |
|||
|
|||
import cn.hutool.core.date.DateUtil; |
|||
import cn.hutool.core.util.IdUtil; |
|||
import com.alibaba.fastjson.JSONArray; |
|||
import com.alibaba.fastjson.JSONObject; |
|||
import org.nl.utils.SecurityUtils; |
|||
import org.nl.wql.core.bean.ResultBean; |
|||
import org.nl.wql.core.bean.WQLObject; |
|||
import org.nl.wql.util.WqlUtil; |
|||
import org.nl.utils.FileUtil; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
|
|||
/** |
|||
* @author gengby |
|||
* @description 服务实现 |
|||
* @date 2023-03-15 |
|||
**/ |
|||
@Service |
|||
@RequiredArgsConstructor |
|||
@Slf4j |
|||
public class DeviceErrorLogServiceImpl implements DeviceErrorLogService { |
|||
|
|||
@Override |
|||
public Map<String, Object> queryAll(Map whereJson, Pageable page) { |
|||
String device_code = MapUtil.getStr(whereJson, "device_code"); |
|||
String error_code = MapUtil.getStr(whereJson, "error_code"); |
|||
String error_info = MapUtil.getStr(whereJson, "error_info"); |
|||
WQLObject wo = WQLObject.getWQLObject("acs_device_error_log"); |
|||
String where = "1 = 1 "; |
|||
if (StrUtil.isNotEmpty(device_code)) { |
|||
where += "and device_code like '%" + device_code + "%'"; |
|||
} |
|||
if (StrUtil.isNotEmpty(error_code)) { |
|||
where += "and error_code like '%" + error_code + "%'"; |
|||
} |
|||
if (StrUtil.isNotEmpty(error_info)) { |
|||
where += "and error_info like '%" + error_info + "%'"; |
|||
} |
|||
ResultBean rb = wo.pagequery(WqlUtil.getHttpContext(page), where, "error_time desc"); |
|||
final JSONObject json = rb.pageResult(); |
|||
return json; |
|||
} |
|||
|
|||
@Override |
|||
public List<DeviceErrorLogDto> queryAll(Map whereJson) { |
|||
WQLObject wo = WQLObject.getWQLObject("acs_device_error_log"); |
|||
JSONArray arr = wo.query().getResultJSONArray(0); |
|||
List<DeviceErrorLogDto> list = arr.toJavaList(DeviceErrorLogDto.class); |
|||
return list; |
|||
} |
|||
|
|||
@Override |
|||
public DeviceErrorLogDto findById(String error_log_uuid) { |
|||
WQLObject wo = WQLObject.getWQLObject("acs_device_error_log"); |
|||
JSONObject json = wo.query("error_log_uuid ='" + error_log_uuid + "'").uniqueResult(0); |
|||
final DeviceErrorLogDto obj = (DeviceErrorLogDto) JSONObject.toJavaObject(json, DeviceErrorLogDto.class); |
|||
return obj; |
|||
} |
|||
|
|||
@Override |
|||
public DeviceErrorLogDto findByCode(String code) { |
|||
WQLObject wo = WQLObject.getWQLObject("acs_device_error_log"); |
|||
JSONObject json = wo.query("code ='" + code + "'").uniqueResult(0); |
|||
final DeviceErrorLogDto obj = (DeviceErrorLogDto) JSONObject.toJavaObject(json, DeviceErrorLogDto.class); |
|||
return obj; |
|||
} |
|||
|
|||
@Override |
|||
@Transactional(rollbackFor = Exception.class) |
|||
public void create(DeviceErrorLogDto dto) { |
|||
String currentUsername = SecurityUtils.getCurrentUsername(); |
|||
String now = DateUtil.now(); |
|||
|
|||
dto.setError_log_uuid(IdUtil.simpleUUID()); |
|||
dto.setDevice_code(dto.getDevice_code()); |
|||
dto.setError_code(dto.getError_code()); |
|||
dto.setError_info(dto.getError_info()); |
|||
dto.setError_time(now); |
|||
WQLObject wo = WQLObject.getWQLObject("acs_device_error_log"); |
|||
JSONObject json = (JSONObject) JSONObject.toJSON(dto); |
|||
wo.insert(json); |
|||
} |
|||
|
|||
@Override |
|||
@Transactional(rollbackFor = Exception.class) |
|||
public void update(DeviceErrorLogDto dto) { |
|||
DeviceErrorLogDto entity = this.findById(dto.getError_log_uuid()); |
|||
if (entity == null) throw new BadRequestException("被删除或无权限,操作失败!"); |
|||
String currentUsername = SecurityUtils.getCurrentUsername(); |
|||
String now = DateUtil.now(); |
|||
WQLObject wo = WQLObject.getWQLObject("acs_device_error_log"); |
|||
JSONObject json = (JSONObject) JSONObject.toJSON(dto); |
|||
wo.update(json); |
|||
} |
|||
|
|||
@Override |
|||
@Transactional(rollbackFor = Exception.class) |
|||
public void deleteAll(String[] ids) { |
|||
WQLObject wo = WQLObject.getWQLObject("acs_device_error_log"); |
|||
for (String error_log_uuid : ids) { |
|||
wo.delete("error_log_uuid = '" + error_log_uuid + "'"); |
|||
} |
|||
} |
|||
|
|||
@Override |
|||
public void download(List<DeviceErrorLogDto> all, HttpServletResponse response) throws IOException { |
|||
List<Map<String, Object>> list = new ArrayList<>(); |
|||
for (DeviceErrorLogDto acsDeviceErrorLog : all) { |
|||
Map<String, Object> map = new LinkedHashMap<>(); |
|||
map.put("设备编码", acsDeviceErrorLog.getDevice_code()); |
|||
map.put("报警编码", acsDeviceErrorLog.getError_code()); |
|||
map.put("报警信息", acsDeviceErrorLog.getError_info()); |
|||
map.put("报警时间", acsDeviceErrorLog.getError_time()); |
|||
list.add(map); |
|||
} |
|||
FileUtil.downloadExcel(list, response); |
|||
} |
|||
} |
Binary file not shown.
@ -0,0 +1,27 @@ |
|||
import request from '@/utils/request' |
|||
|
|||
export function add(data) { |
|||
return request({ |
|||
url: 'api/deviceErrorLog', |
|||
method: 'post', |
|||
data |
|||
}) |
|||
} |
|||
|
|||
export function del(ids) { |
|||
return request({ |
|||
url: 'api/deviceErrorLog/', |
|||
method: 'delete', |
|||
data: ids |
|||
}) |
|||
} |
|||
|
|||
export function edit(data) { |
|||
return request({ |
|||
url: 'api/deviceErrorLog', |
|||
method: 'put', |
|||
data |
|||
}) |
|||
} |
|||
|
|||
export default { add, edit, del } |
@ -0,0 +1,145 @@ |
|||
<template> |
|||
<div class="app-container"> |
|||
<!--工具栏--> |
|||
<div class="head-container"> |
|||
<div v-if="crud.props.searchToggle"> |
|||
<!-- 搜索 --> |
|||
<label class="el-form-item-label">设备编码</label> |
|||
<el-input |
|||
v-model="query.device_code" |
|||
clearable |
|||
placeholder="设备编码" |
|||
style="width: 185px;" |
|||
class="filter-item" |
|||
@keyup.enter.native="crud.toQuery" |
|||
/> |
|||
<el-input |
|||
v-model="query.error_code" |
|||
clearable |
|||
placeholder="报警编码" |
|||
style="width: 185px;" |
|||
class="filter-item" |
|||
@keyup.enter.native="crud.toQuery" |
|||
/> |
|||
<el-input |
|||
v-model="query.error_info" |
|||
clearable |
|||
placeholder="报警信息" |
|||
style="width: 185px;" |
|||
class="filter-item" |
|||
@keyup.enter.native="crud.toQuery" |
|||
/> |
|||
<date-range-picker |
|||
v-model="query.error_time" |
|||
start-placeholder="error_timeStart" |
|||
end-placeholder="error_timeStart" |
|||
class="date-item" |
|||
/> |
|||
<rrOperation :crud="crud" /> |
|||
</div> |
|||
<!--如果想在工具栏加入更多按钮,可以使用插槽方式, slot = 'left' or 'right'--> |
|||
<crudOperation :permission="permission" /> |
|||
<!--表单组件--> |
|||
<el-dialog |
|||
:close-on-click-modal="false" |
|||
:before-close="crud.cancelCU" |
|||
:visible.sync="crud.status.cu > 0" |
|||
:title="crud.status.title" |
|||
width="500px" |
|||
> |
|||
<el-form ref="form" :model="form" :rules="rules" size="small" label-width="80px" /> |
|||
<div slot="footer" class="dialog-footer"> |
|||
<el-button type="text" @click="crud.cancelCU">取消</el-button> |
|||
<el-button :loading="crud.cu === 2" type="primary" @click="crud.submitCU">确认</el-button> |
|||
</div> |
|||
</el-dialog> |
|||
<!--表格渲染--> |
|||
<el-table |
|||
ref="table" |
|||
v-loading="crud.loading" |
|||
:data="crud.data" |
|||
size="small" |
|||
style="width: 100%;" |
|||
@selection-change="crud.selectionChangeHandler" |
|||
> |
|||
<el-table-column type="selection" width="55" /> |
|||
<el-table-column prop="device_code" label="设备编码" /> |
|||
<el-table-column prop="error_code" label="报警编码" /> |
|||
<el-table-column prop="error_info" label="报警信息" /> |
|||
<el-table-column prop="error_time" label="报警时间" /> |
|||
<el-table-column |
|||
v-permission="['admin','acsDeviceErrorLog:edit','acsDeviceErrorLog:del']" |
|||
label="操作" |
|||
width="150px" |
|||
align="center" |
|||
> |
|||
<template slot-scope="scope"> |
|||
<udOperation |
|||
:data="scope.row" |
|||
:permission="permission" |
|||
:disabled-edit="true" |
|||
/> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<!--分页组件--> |
|||
<pagination /> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import CRUD, { crud, form, header, presenter } from '@crud/crud' |
|||
import rrOperation from '@crud/RR.operation' |
|||
import crudOperation from '@crud/CRUD.operation' |
|||
import udOperation from '@crud/UD.operation' |
|||
import pagination from '@crud/Pagination' |
|||
import crudAcsDeviceErrorLog from '@/api/acs/history/acsDeviceErrorLog' |
|||
|
|||
const defaultForm = { error_log_uuid: null, device_code: null, error_code: null, error_info: null, error_time: null } |
|||
export default { |
|||
name: 'DeviceErrorLog', |
|||
components: { pagination, crudOperation, rrOperation, udOperation }, |
|||
mixins: [presenter(), header(), form(defaultForm), crud()], |
|||
cruds() { |
|||
return CRUD({ |
|||
title: '设备报警记录', |
|||
url: 'api/deviceErrorLog', |
|||
idField: 'error_log_uuid', |
|||
sort: 'error_log_uuid,desc', |
|||
crudMethod: { ...crudAcsDeviceErrorLog }, |
|||
optShow: { |
|||
add: false, |
|||
edit: false, |
|||
del: false, |
|||
download: false |
|||
} |
|||
}) |
|||
}, |
|||
data() { |
|||
return { |
|||
permission: { |
|||
add: ['admin', 'deviceErrorLog:add'], |
|||
edit: ['admin', 'deviceErrorLog:edit'], |
|||
del: ['admin', 'adeviceErrorLog:del'] |
|||
}, |
|||
rules: {}, |
|||
queryTypeOptions: [ |
|||
{ key: 'device_code', display_name: '设备编码' }, |
|||
{ key: 'error_code', display_name: '报警编码' }, |
|||
{ key: 'error_info', display_name: '报警信息' } |
|||
] |
|||
} |
|||
}, |
|||
methods: { |
|||
// 钩子:在获取表格数据之前执行,false 则代表不获取数据 |
|||
[CRUD.HOOK.beforeRefresh]() { |
|||
return true |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style scoped> |
|||
|
|||
</style> |
Loading…
Reference in new issue