package com.tievd.jyz.controller; 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.mybatisplus.QueryGenerator; import com.tievd.jyz.entity.OilRecord; import com.tievd.jyz.entity.vo.OilVolumeVo; import com.tievd.jyz.service.IOilRecordService; import com.tievd.jyz.util.MultiMinioUtil; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.enums.ParameterIn; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.responses.ApiResponse; 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.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.IOException; import java.util.Arrays; import java.util.HashMap; import java.util.Map; import java.util.Random; /** * OilRecord * * @author cube * @since 2023-02-27 * @version V2.0.0 */ @Slf4j @DictApi @RestController @RequestMapping("/jyz/oilRecord") @Tag(name = "加油记录相关接口") public class OilRecordController extends CubeController { @Autowired private IOilRecordService oilRecordService; @Value("${init.local.image-path}") private String localImagePath; @Value("${server.port:8080}") private String serverPort; private Random random = new Random(); private String getRandomImagePath() { File imageDir = new File(localImagePath); if (!imageDir.exists() || !imageDir.isDirectory()) { log.warn("本地图片目录不存在: {}", localImagePath); return null; } File[] imageFiles = imageDir.listFiles((dir, name) -> { String lowerName = name.toLowerCase(); return lowerName.endsWith(".jpg") || lowerName.endsWith(".jpeg") || lowerName.endsWith(".png") || lowerName.endsWith(".bmp"); }); if (imageFiles == null || imageFiles.length == 0) { log.warn("本地图片目录中没有图片文件: {}", localImagePath); return null; } int randomIndex = random.nextInt(imageFiles.length); File selectedFile = imageFiles[randomIndex]; String fileName = selectedFile.getName(); return "http://localhost:" + serverPort + "/cube/jyz/images/" + fileName; } /** * 分页列表查询 */ @GetMapping("/list") @Operation(summary = "一车一档加油记录分页") public Result> queryPageList(OilRecord oilRecord, @RequestParam(defaultValue="1") Integer pageNo, @RequestParam(defaultValue="10") Integer pageSize, HttpServletRequest req) { QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(oilRecord, req.getParameterMap()); Page page = new Page<>(pageNo, pageSize); queryWrapper.orderByDesc("start_time"); IPage pageList = oilRecordService.page(page, queryWrapper); // // for(OilRecord tmpOilRecord:pageList.getRecords()){ // try{ // if(StringUtils.isNotEmpty(tmpOilRecord.getImgPath())){ // String[] arr = tmpOilRecord.getImgPath().split(":"); // tmpOilRecord.setImgPath(MultiMinioUtil.getObjectURL(arr[0],arr[1],3600)); // } // if(StringUtils.isNotEmpty(tmpOilRecord.getOutImgPath())){ // String[] arr = tmpOilRecord.getOutImgPath().split(":"); // tmpOilRecord.setOutImgPath(MultiMinioUtil.getObjectURL(arr[0],arr[1],3600)); // } // }catch (Exception ex){ // log.error("生成s3资源链接地址失败",ex); // } // } for(OilRecord tmpOilRecord:pageList.getRecords()){ try{ String randomImagePath = getRandomImagePath(); if(randomImagePath != null){ tmpOilRecord.setImgPath(randomImagePath); } String randomImagePath2 = getRandomImagePath(); if(randomImagePath2 != null){ tmpOilRecord.setOutImgPath(randomImagePath2); } }catch (Exception ex){ log.error("生成图片路径失败",ex); } } return Result.ok(pageList); } @GetMapping("/getStatisData") @Operation(summary = "一车一档加油记录页统计图") @ApiResponse(description = "result: {oilPosition:[], oilCountByMonth:[], oilCountByHour:[], oilCountByStayTime:[]}", content = {@Content(examples = { @ExampleObject(name = "oilPosition", description = "加油位统计", value = "[{'count':'2','oilPosition':'加油位1'}]"), @ExampleObject(name = "oilCountByHour", description = "每小时出现次数", value = "[{'14':'1','count':'2'},{'15':'2','count':'1'}]"), @ExampleObject(name = "oilCountByMonth", description = "每月出现次数", value = "[{'months':'1','count':'2'},{'months':'2','count':'1'}]"), @ExampleObject(name = "oilCountByStayTime", description = "停留时间出现次数", value = "[{'stayTime':'1(5分钟内)','count':'2'},{'stayTime':'2(10分钟内)','count':'1'}]") })} ) public Result getStatisData(@RequestParam String licenseNum, @RequestParam String orgCode) { Map oilPosition = oilRecordService.statisOilPosition(licenseNum, orgCode); Map oilCountByMonth = oilRecordService.statisByMonth(licenseNum, orgCode); Map oilCountByHour = oilRecordService.statisByHour(licenseNum, orgCode); Map oilCountByStayTime = oilRecordService.statisByStayTime(licenseNum, orgCode); Map res = new HashMap(); res.put("oilPosition", oilPosition); res.put("oilCountByMonth", oilCountByMonth); res.put("oilCountByHour", oilCountByHour); res.put("oilCountByStayTime", oilCountByStayTime); return Result.ok(res); } @GetMapping("/getStatisOilVolume") @Operation(summary = "加油量统计分页") @ApiResponse(description = "result: [{oilPosition:'加油位', oilCount:'次数', OilVolume:'加油量'},{}]") public Result> getStatisOilVolume(@RequestParam String orgCode, @RequestParam(required = false) String dateMonth, @RequestParam(defaultValue="1") Integer pageNo, @RequestParam(defaultValue="10") Integer pageSize) { IPage page = new Page(pageNo, pageSize); IPage oilVolume = oilRecordService.getStatisOilVolume(page, orgCode, dateMonth); return Result.ok(oilVolume); } @GetMapping("/getOilVolumeTotal") @Operation(summary = "加油量统计页总数") @ApiResponse(description = "result: {oilCountTotal:'总次数', OilVolumeTotal:'总加油量'}") public Result getOilVolumeTotal(@RequestParam String orgCode, @RequestParam(required = false) String dateMonth) { Map oilVolume = oilRecordService.getOilVolumeTotal(orgCode, dateMonth); return Result.ok(oilVolume); } @GetMapping("/descOilVolume") @Parameter(in = ParameterIn.QUERY, name = "oilPosition", description = "加油位") @Parameter(in = ParameterIn.QUERY, name = "orgCode", description = "机构代码") @Parameter(in = ParameterIn.QUERY, name = "dateMonth", description = "年-月") @Parameter(in = ParameterIn.QUERY, name = "dateDay", description = "年-月-日") @Operation(summary = "加油量详情") public Result> descOilVolume(@RequestParam @Parameter(hidden = true) Map map, @RequestParam(defaultValue="1") Integer pageNo, @RequestParam(defaultValue="10") Integer pageSize) { IPage page = new Page(pageNo, pageSize); IPage oilDescList = oilRecordService.descOilVolumeList(page, map); return Result.ok(oilDescList); } /** * 添加 */ @AutoLog("OilRecord-添加") @PostMapping("/add") public Result add(@RequestBody OilRecord oilRecord) { oilRecordService.save(oilRecord); return Result.ok(); } /** * 编辑 */ @AutoLog("OilRecord-编辑") @PutMapping("/edit") public Result edit(@RequestBody OilRecord oilRecord) { oilRecordService.updateById(oilRecord); return Result.ok(); } /** * 通过id删除 */ @AutoLog("OilRecord-通过id删除") @DeleteMapping("/delete") public Result delete(@RequestParam String id) { oilRecordService.removeById(id); return Result.ok(); } /** * 批量删除 */ @AutoLog("OilRecord-批量删除") @DeleteMapping("/deleteBatch") public Result deleteBatch(@RequestParam String ids) { this.oilRecordService.removeByIds(Arrays.asList(ids.split(","))); return Result.ok(); } /** * 通过id查询 */ @GetMapping("/queryById") public Result queryById(@RequestParam String id) { OilRecord oilRecord = oilRecordService.getById(id); return Result.ok(oilRecord); } /** * 导出excel */ @RequestMapping("/exportXls") public void exportXls(HttpServletRequest request, HttpServletResponse response, OilRecord oilRecord) throws IOException { super.exportXls(request, response, oilRecord, "OilRecord"); } /** * 通过excel导入数据 */ @PostMapping("/importExcel") public Result importExcel(HttpServletRequest request) throws Exception { return super.importExcel(request, OilRecord.class); } }