package org.sxkj.resource.controller; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springblade.core.boot.ctrl.BladeController; import org.springblade.core.cache.utils.CacheUtil; import org.springblade.core.log.annotation.ApiLog; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.secure.annotation.PreAuth; import org.springblade.core.tenant.annotation.NonDS; import org.springblade.core.tool.api.R; import org.springblade.core.tool.constant.RoleConstant; import org.springblade.core.tool.utils.DateTimeUtil; import org.springblade.core.tool.utils.Func; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; import org.sxkj.common.constant.CommonConstant; import org.sxkj.common.model.ResponseResult; import org.sxkj.common.model.TimeRange; import org.sxkj.common.utils.HeaderUtils; import org.sxkj.common.utils.TimeRangeUtils; import org.sxkj.resource.dto.WaylineJobInfoQueryDto; import org.sxkj.resource.dto.WaylineJobInfoQueryParam; import org.sxkj.resource.entity.Attach; import org.sxkj.resource.feign.IAttachClient; import org.sxkj.resource.service.IAttachService; import org.sxkj.resource.vo.*; import org.sxkj.system.vo.TreeVo; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; import java.io.IOException; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.time.LocalDateTime; import java.util.Arrays; import java.util.Date; import java.util.List; import java.util.Objects; import static org.springblade.core.cache.constant.CacheConstant.RESOURCE_CACHE; /** * 附件表 控制器 * * @author Chill */ @Slf4j @NonDS @RestController @AllArgsConstructor @RequestMapping("/attach") @Api(value = "附件表接口", tags = "附件") public class AttachController extends BladeController { private final IAttachService attachService; private final IAttachClient attachClient; /** * 详情 */ @GetMapping("/detail") @ApiOperationSupport(order = 1) @ApiOperation(value = "附件详情", notes = "传入attach") public R detail(Attach attach) { Attach detail = attachService.getOne(Condition.getQueryWrapper(attach)); return R.data(detail); } @GetMapping("/test") public R test(@RequestParam(required = true) Date startTime, @RequestParam(required = true) Date endTime) { CacheUtil.clear(RESOURCE_CACHE); attachClient.processingYesterdayVideo(startTime, endTime); return R.success("成功"); } @GetMapping("/getlotInfoList") public ResponseResult getlotInfoList(@ApiParam Long lotInfoId) { return ResponseResult.success(attachService.getlotInfoList(lotInfoId)); } /** * 分页 附件表 */ @GetMapping("/list") @ApiOperationSupport(order = 2) @ApiOperation(value = "附件分页", notes = "传入attach") public R> list(Attach attach, Query query) { List wayLineJobIds = attach.getWayLineJobIds(); QueryWrapper queryWrapper1 = Condition.getQueryWrapper(attach); QueryWrapper queryWrapper = queryWrapper1.in(!CollectionUtils.isEmpty(wayLineJobIds), "wayline_job_id", wayLineJobIds); IPage pages = attachService.page(Condition.getPage(query), queryWrapper); return R.data(pages); } /** * 自定义分页 附件表 */ @GetMapping("/page") @ApiOperationSupport(order = 3) @ApiOperation(value = "附件分页", notes = "传入attach") public R> page(AttachVO attach, Query query) { String areaCode = HeaderUtils.getAreaCode(); attach.setAreaCode(areaCode); IPage pages = attachService.selectAttachPage(Condition.getPage(query), attach); AttachVO.settingNickName(pages.getRecords()); return R.data(pages); } /** * 自定义分页 附件表 */ @PostMapping("/aiImagesPage") @ApiOperationSupport(order = 3) @ApiOperation(value = "自定义分页附件表分页", notes = "ai分页数据") public R> aiPage(@RequestBody AttachVO attach, Query query) { String areaCode = HeaderUtils.getAreaCode(); attach.setAreaCode(areaCode); List resultTypes = attach.getResultTypes(); String wordOrderType = attach.getWordOrderType(); settingResultType(attach, wordOrderType, resultTypes); if (Objects.nonNull(attach.getAiStatus()) && Objects.nonNull(attach.getResultTypes()) && attach.getResultTypes().contains(Attach.RESULT_TYPE_AI)) { attach.setResultTypes(Arrays.asList(Attach.RESULT_TYPE_AI)); } List aiEventMd5s = attachService.findAiEventMd5s(attach.getEventRecordIds()); attach.setMd5s(aiEventMd5s); if (!CollectionUtils.isEmpty(attach.getEventRecordIds())) { attach.setResultTypes(Arrays.asList(Attach.RESULT_TYPE_AI, Attach.RESULT_TYPE_IMG)); } IPage page = Condition.getPage(query); List aiAttachImages = attachService.findAiAttachImages(page, attach); AttachVO.settingNickName(aiAttachImages); page.setRecords(aiAttachImages); return R.data(page); } /** * 后台数据中心列表接口 */ @PostMapping("/attachmentsPage") @ApiOperationSupport(order = 4) @ApiOperation(value = "后台数据中心列表接口") public R> attachmentsPage(@RequestBody AttachVO attach, Query query) { IPage page = Condition.getPage(query); IPage attachPage = attachService.findAttachImages(page, attach); return R.data(attachPage); } private static void settingResultType(AttachVO attach, String wordOrderType, List resultTypes) { if (!StringUtils.isEmpty(wordOrderType) && !CollectionUtils.isEmpty(resultTypes)) { if ("-1".equals(wordOrderType)) { attach.setWordOrderType(null); if (resultTypes.contains(Attach.RESULT_TYPE_IMG)) { resultTypes = Arrays.asList(Attach.RESULT_TYPE_IMG); } } else { if (resultTypes.contains(Attach.RESULT_TYPE_AI)) { resultTypes = Arrays.asList(Attach.RESULT_TYPE_AI); } } attach.setResultTypes(resultTypes); } } /** * 新增 附件表 */ @PostMapping("/save") @ApiOperationSupport(order = 4) @ApiOperation(value = "新增", notes = "传入attach") public R save(@Valid @RequestBody Attach attach) { return R.status(attachService.save(attach)); } /** * 修改 附件表 */ @PostMapping("/update") @ApiOperationSupport(order = 5) @ApiOperation(value = "修改", notes = "传入attach") public R update(@Valid @RequestBody Attach attach) { return R.status(attachService.updateById(attach)); } /** * 新增或修改 附件表 */ @PostMapping("/submit") @ApiOperationSupport(order = 6) @ApiOperation(value = "新增或修改", notes = "传入attach") public R submit(@Valid @RequestBody Attach attach) { return R.status(attachService.saveOrUpdate(attach)); } /** * 删除 附件表 */ @PostMapping("/remove") @ApiOperationSupport(order = 7) @ApiOperation(value = "附件逻辑删除", notes = "传入ids") public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) { return R.status(attachService.update(Wrappers.lambdaUpdate(Attach.class) .set(Attach::getIsDeleted, true) .in(Attach::getId, Func.toLongList(ids)))); } /** * 删除 附件表及对应的附件信息 * * @param ids * @return */ @PostMapping("/removeAttachAndData") @ApiOperationSupport(order = 9) @ApiOperation(value = "删除", notes = "传入ids") @PreAuth(RoleConstant.HAS_ROLE_ADMINISTRATOR) public R removeAttachAndData(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) { return R.status(attachService.removeBatchAndDataByIds(Func.toLongList(ids))); } @GetMapping("/deptSize") @ApiOperationSupport(order = 8) @ApiOperation(value = "获取部门文件大小") public R> getDeptSize(@RequestParam String startTime, @RequestParam String endTime) { return R.data(attachService.getDeptAllSize(startTime, endTime)); } /** * 历史正射图片处理 * * @return */ @GetMapping("/hisOrtPicHandler") @ApiOperationSupport(order = 9) @ApiOperation(value = "历史正射图片处理") public R hisOrtPicHandler() { return R.data(attachService.hisOrtPicHandler()); } /** * 自动更新附件表md5值 * * @return */ @GetMapping("saveMd5") public R saveMd5() { attachService.saveMd5(); return R.success(""); } @ApiOperation(value = "地图位置上图片数据", notes = "") @PostMapping("/mapAttachs") public ResponseResult mapEvents(@RequestBody AttachQueryParam dto) { if (Objects.nonNull(dto.getDateEnum())) { TimeRange timeRange = TimeRangeUtils.getTimeRange(dto.getDateEnum()); dto.setStartDate(timeRange.getStartTime()); dto.setEndDate(timeRange.getEndTime()); } if (Objects.nonNull(dto.getStartDate())) { dto.setStartTime(TimeRangeUtils.getEpochMilli(dto.getStartDate())); } if (Objects.nonNull(dto.getEndDate())) { dto.setEndTime(TimeRangeUtils.getEpochMilli(dto.getEndDate())); } String areaCode = HeaderUtils.getHeader(CommonConstant.AREA_CODE).orElse(null); dto.setAreaCode(!StringUtils.isEmpty(dto.getAreaCode()) ? dto.getAreaCode() : areaCode); TreeVo treeVo = attachService.mapAttachEvents(dto); return ResponseResult.success(treeVo); } /** * 图片分析对比 前后图片对比 * * @param id 图片id * @return */ @GetMapping("contrastiveAnalysis") public ResponseResult contrastiveAnalysis(@RequestParam() Long id) { List list = attachService.contrastiveAnalysis(id); return ResponseResult.success(list); } @ApiOperation(value = "附件详情", notes = "") @GetMapping("/getAttachInfo") public ResponseResult getAttachInfo(@ApiParam(value = "附件iD") @RequestParam("id") Long id) throws IOException { return ResponseResult.success(attachService.getAttachInfo(id)); } @ApiOperation(value = "通过任务id查询附件详情集合", notes = "") @GetMapping("/getAttachInfoByJobId") public ResponseResult> getAttachInfoByJobId(@ApiParam(value = "任务id") @RequestParam("jobId") String jobId) throws IOException { return ResponseResult.success(attachService.getAttachInfoByJobId(jobId)); } @ApiLog("修改文件名称") @PostMapping("/updateFileName") public ResponseResult updateFileName(@RequestParam Long id, @RequestParam String nickName) { if (attachService.updateFileName(id, nickName) > 0) { return ResponseResult.success(); } return ResponseResult.error("修改失败"); } /** * 删除无用的404状态的链接地址 * * @return */ @GetMapping("deletedNotExistsUrl") public ResponseResult deletedNotExistsUrl() { attachService.deletedNotExistsUrl(); return ResponseResult.success(); } @ApiLog("删除图片视频") @DeleteMapping("/deleteMediaFile") public ResponseResult deleteMediaFile(@RequestBody List ids) { attachService.deleteMediaFile(ids); return ResponseResult.success(); } /** * 附件统计 */ @ApiOperation(value = "附件统计", notes = "") @PostMapping("/attachTypeStatistics") public ResponseResult> attachTypeStatistics(@RequestBody AttachStatisticsVo attachStatisticsVo) { List result = attachService.attachTypeStatistics(attachStatisticsVo); return ResponseResult.success(result); } /** * 个人中心附件统计 */ @ApiOperation(value = "个人中心附件统计", notes = "") @PostMapping("/getManageAttachTypeStatistics") public ResponseResult> getManageAttachTypeStatistics(@RequestBody WaylineJobInfoQueryDto dto) { WaylineJobInfoQueryParam param = new WaylineJobInfoQueryParam(dto); param.setFormatTime(ChartDataVo.getTimeFormatByEnum(param.getDateEnum())); List result = attachService.getManageAttachTypeStatistics(param); return ResponseResult.success(result); } }