package com.tievd.jyz.controller; import cn.hutool.core.lang.Snowflake; 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.github.yulichang.wrapper.MPJLambdaWrapper; 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.easyexcel.model.ImportExcel; import com.tievd.cube.commons.utils.SystemContextUtil; import com.tievd.cube.modules.system.entity.SysDepart; import com.tievd.jyz.cache.DeviceCache; import com.tievd.jyz.entity.Camera; import com.tievd.jyz.entity.Device; import com.tievd.jyz.handler.BaseDataSyncHandler; import com.tievd.jyz.handler.DeviceStatusHandler; import com.tievd.jyz.service.ICameraService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; 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 org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; /** * Camera * * @author cube * @version V2.0.0 * @since 2023-02-27 */ @Slf4j @DictApi @RestController @RequestMapping("/jyz/camera") @Tag(name = "视频终端相关接口") public class CameraController extends CubeController { @Autowired private ICameraService cameraService; @Autowired private BaseDataSyncHandler baseDataSyncHandler; /** * 分页列表查询 */ @GetMapping("/list") public Result queryPageList(Camera camera, @RequestParam(defaultValue = "1") Integer pageNo, @RequestParam(defaultValue = "10") Integer pageSize, HttpServletRequest req) { MPJLambdaWrapper wrapper = new MPJLambdaWrapper<>(camera) .selectAll(Camera.class) .leftJoin(Device.class, Device::getId, Camera::getDeviceId) .selectAs(Device::getName, Camera::getDeviceName) .leftJoin(SysDepart.class, SysDepart::getOrgCode, Camera::getOrgCode) .selectAs(SysDepart::getDepartName, Camera::getOrgName); Page page = new Page<>(pageNo, pageSize); IPage pageList = cameraService.page(page, wrapper); List upStatus = new ArrayList<>(); for(Camera tmpCamera :pageList.getRecords()){ try { String status = DeviceStatusHandler.getCameraStatus(DeviceCache.getDeviceById(tmpCamera.getDeviceId()).getSn(),tmpCamera.getCode()); if(StringUtils.isNotEmpty(status)){ byte statusBt = Byte.valueOf(status); if (statusBt != tmpCamera.getStatus()) { //懒更新状态 upStatus.add(new Camera().setId(tmpCamera.getId()).setStatus(statusBt)); } tmpCamera.setStatus(statusBt); } }catch (Exception ex){ log.error("终端状态获取失败",ex); } } if (upStatus.size() != 0) { cameraService.updateBatchById(upStatus); } return Result.ok(pageList); } @GetMapping("/allList") @Operation(summary = "查询所有视频终端") @Parameter(name = "orgCode", description = "机构编码") public Result> allList(Camera camera) { List cameraList = cameraService.list(new QueryWrapper<>(camera)); for(Camera tmpCamera :cameraList){ try { String status = DeviceStatusHandler.getCameraStatus(DeviceCache.getDeviceById(tmpCamera.getDeviceId()).getSn(),tmpCamera.getCode()); if(StringUtils.isNotEmpty(status)){ tmpCamera.setStatus(Byte.valueOf(status)); } }catch (Exception ex){ log.error("终端状态获取失败",ex); } } return Result.ok(cameraList); } /** * 添加 */ @AutoLog("Camera-添加") @PostMapping("/add") public Result add(@RequestBody Camera camera) { long id = new Snowflake().nextId(); camera.setId(id).setCode(String.valueOf(id)); cameraService.save(camera); return Result.ok(); } /** * 编辑 */ @AutoLog("Camera-编辑") @PutMapping("/edit") public Result edit(@RequestBody Camera camera) { cameraService.updateById(camera); return Result.ok(); } /** * 通过id删除 */ @AutoLog("Camera-通过id删除") @DeleteMapping("/delete") public Result delete(@RequestParam String id) { Camera delCamera = cameraService.getById(id); cameraService.removeById(id); return Result.ok(); } /** * 批量删除 */ @AutoLog("Camera-批量删除") @DeleteMapping("/deleteBatch") public Result deleteBatch(@RequestParam String ids) { List idList = Arrays.asList(ids.split(",")); this.cameraService.removeByIds(idList); return Result.ok(); } /** * 通过id查询 */ @GetMapping("/queryById") public Result queryById(@RequestParam String id) { Camera camera = cameraService.getById(id); try { String status = DeviceStatusHandler.getCameraStatus(DeviceCache.getDeviceById(camera.getDeviceId()).getSn(),camera.getCode()); if(StringUtils.isNotEmpty(status)){ camera.setStatus(Byte.valueOf(status)); } }catch (Exception ex){ log.error("终端状态获取失败",ex); } return Result.ok(camera); } /** * 导出excel */ @RequestMapping("/exportXls") public void exportXls(HttpServletRequest request, HttpServletResponse response, Camera camera) throws IOException { super.exportXls(request, response, camera, "Camera"); } /** * 通过excel导入数据 */ @PostMapping("/importExcel") public Result importExcel(HttpServletRequest request) throws Exception { List cameraList = readExcel(request, Camera.class); cameraList.stream().forEach(c -> { long id = new Snowflake().nextId(); c.setId(id).setCode(String.valueOf(id)); }); cameraService.saveBatch(cameraList); return Result.ok("文件导入成功!"); } protected List readExcel(HttpServletRequest request, Class clazz) throws Exception { MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; Map fileMap = multipartRequest.getFileMap(); List list = new ArrayList<>(); for (Map.Entry entity : fileMap.entrySet()) { MultipartFile file = entity.getValue();// 获取上传文件对象 ImportExcel excel = new ImportExcel(); excel.setInputStream(file.getInputStream()); List data = easyExcel.read(clazz, excel, SystemContextUtil.dictTranslator()); list.addAll(data); } return list; } }