package com.tievd.jyz.controller; import cn.hutool.core.util.NumberUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.tievd.cube.commons.annotations.AutoLog; import com.tievd.cube.commons.annotations.DictApi; import com.tievd.cube.commons.base.CubeController; import com.tievd.cube.commons.base.Result; import com.tievd.cube.commons.constant.CommonConst; import com.tievd.cube.commons.mybatisplus.QueryGenerator; import com.tievd.cube.commons.utils.SystemContextUtil; import com.tievd.cube.modules.system.model.LoginUser; import com.tievd.cube.modules.system.model.SysDepartTreeModel; import com.tievd.cube.modules.system.service.ISysDepartService; import com.tievd.jyz.cache.DeviceCache; import com.tievd.jyz.constants.SystemConstant; import com.tievd.jyz.dto.DeviceDTO; import com.tievd.jyz.entity.Device; import com.tievd.jyz.handler.BaseDataSyncHandler; import com.tievd.jyz.handler.DeviceStatusHandler; import com.tievd.jyz.service.IDeviceService; import io.swagger.v3.oas.annotations.Parameter; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.List; import java.util.Map; /** * Device * * @author cube * @version V2.0.0 * @since 2023-02-27 */ @Slf4j @DictApi @RestController @RequestMapping("/jyz/device") public class DeviceController extends CubeController { @Autowired private IDeviceService deviceService; @Autowired private DeviceCache deviceCache; @Autowired private ISysDepartService sysDepartService; @Autowired private BaseDataSyncHandler baseDataSyncHandler; /** * 分页列表查询 */ @GetMapping("/list") public Result queryPageList(Device device, @RequestParam(defaultValue = "1") Integer pageNo, @RequestParam(defaultValue = "10") Integer pageSize, HttpServletRequest req) { QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(device, req.getParameterMap()); Page page = new Page<>(pageNo, pageSize); IPage pageList = deviceService.page(page, queryWrapper); return Result.ok(pageList); } @GetMapping("/tables") public Result tables(Device device, @RequestParam(defaultValue = "1") Integer pageNo, @RequestParam(defaultValue = "10") Integer pageSize, @RequestParam(required = false) String searchKey, @RequestParam(required = false) String parentCode, @RequestParam(required = false) Byte status) { QueryWrapper queryWrapper = new QueryWrapper<>(); if (StringUtils.isNotBlank(searchKey)) { queryWrapper.like("name", searchKey); } if (StringUtils.isNotBlank(parentCode)) { queryWrapper.likeRight("org_code", parentCode); } if (status != null) { queryWrapper.eq("status", status); } Page page = new Page<>(pageNo, pageSize); IPage pageList = deviceService.tables(page, queryWrapper); Map cameraStatusMap = DeviceStatusHandler.getCameraStatusMap(); for (DeviceDTO deviceDTO : pageList.getRecords()) { String sn = deviceDTO.getSn(); int onlineCount = 0; for (Map.Entry entry : cameraStatusMap.entrySet()) { if (entry.getKey().contains(sn)) { if (NumberUtil.parseInt(entry.getValue()) == SystemConstant.DEVICE_ONLINE) { onlineCount++; } } } deviceDTO.setCameraOnlineCount(onlineCount); } return Result.ok(pageList); } @GetMapping("/allList") public Result allList(Device device, HttpServletRequest req) { QueryWrapper queryWrapper = new QueryWrapper<>(device); List deviceList = deviceService.list(queryWrapper); return Result.ok(deviceList); } /** * 添加 */ @AutoLog("Device-添加") @PostMapping("/add") public Result add(@RequestBody Device device) { device.setStatus(SystemConstant.DEVICE_OFFLINE); deviceService.save(device); deviceCache.init(); return Result.ok(); } /** * 同步网关基础数据 * @param deviceSn 网关序列号 * @return */ @AutoLog("拉取/同步网关基础数据") @GetMapping("/syncData") public Result syncData(@RequestParam String deviceSn) { //同步网关基础数据 baseDataSyncHandler.pullData(SystemConstant.ALL_REQ_SOURCE,deviceSn); return Result.ok(); } /** * 编辑 */ @AutoLog("Device-编辑") @PutMapping("/edit") public Result edit(@RequestBody Device device) { deviceService.updateById(device); deviceCache.init(); return Result.ok(); } /** * 通过id删除 */ @AutoLog("Device-通过id删除") @DeleteMapping("/delete") public Result delete(@RequestParam String id) { deviceService.deleteById(id); deviceCache.init(); return Result.ok(); } /** * 通过id查询 */ @GetMapping("/queryById") public Result queryById(@RequestParam String id) { Device device = deviceService.getById(id); return Result.ok(device); } /** * 导出excel */ @RequestMapping("/exportXls") public void exportXls(HttpServletRequest request, HttpServletResponse response, Device device) throws IOException { super.exportXls(request, response, device, "Device"); } /** * 通过excel导入数据 */ @PostMapping("/importExcel") public Result importExcel(HttpServletRequest request) throws Exception { Result result = super.importExcel(request, Device.class); deviceCache.init(); return result; } @GetMapping("/queryTreeList") public Result queryTreeList(@RequestParam(required = false) boolean myself) { List list; if (myself) { LoginUser user = SystemContextUtil.currentLoginUser(); list = sysDepartService.queryMyDeptTreeList(user.getDepartIds()); } else { list = sysDepartService.queryTreeList(); } deviceService.assembleDevice(list); return Result.ok(list); } @GetMapping("/searchBy") public Result> searchBy(@Parameter(name = "关键词") String keyWord, @Parameter(name = "我的部门下搜索") @RequestParam(required = false) String myDeptSearch) { //部门查询,myDeptSearch为1时为我的部门查询,登录用户为上级时查只查负责部门下数据 LoginUser user = SystemContextUtil.currentLoginUser(); String departIds = null; if (user.getUserIdentity() != null && user.getUserIdentity().equals(CommonConst.USER_IDENTITY_2)) { departIds = user.getDepartIds(); } List treeList = sysDepartService.searchBy(keyWord, myDeptSearch, departIds); if (treeList == null || treeList.size() == 0) { return Result.error("未查询匹配数据!"); } deviceService.assembleDevice(treeList); return Result.ok(treeList); } }