459242451@qq.com 3 年之前
父節點
當前提交
52fa7af803

+ 56 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/gas/So2Controller.java

@@ -5,6 +5,7 @@ import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.NumberUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
+import com.ruoyi.common.annotation.Log;
 import com.ruoyi.common.constant.CacheConstants;
 import com.ruoyi.common.constant.ElasticConstants;
 import com.ruoyi.common.constant.HttpStatus;
@@ -16,6 +17,8 @@ import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.core.page.TableSupport;
 import com.ruoyi.common.core.redis.RedisCache;
 import com.ruoyi.common.enums.AggsType;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.framework.config.ElasticSearchClient;
 import com.ruoyi.system.domain.GuapMonitorPoint;
 import com.ruoyi.system.domain.IllegalShip;
@@ -26,6 +29,7 @@ import com.ruoyi.system.service.ISo2Service;
 import com.ruoyi.system.service.ISysDictTypeService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import lombok.SneakyThrows;
 import org.elasticsearch.search.aggregations.bucket.histogram.DateHistogramInterval;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -33,6 +37,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
@@ -118,6 +124,56 @@ public class So2Controller extends BaseController {
         return rspData;
     }
 
+    @SneakyThrows
+    @Log(title = "硫含量记录导出", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult export(IllegalShip illegalShip, HttpServletRequest request, HttpServletResponse response) {
+        // 传来的参数
+        Map<String, Object> params = illegalShip.getParams();
+        Map<String, Object> equalsCondition = new HashMap<>();
+        // 组装查询条件
+        equalsCondition.put("mmsi", StrUtil.isBlank(illegalShip.getMmsi()) ? null : StrUtil.concat(true, "*", illegalShip.getMmsi(), "*"));
+        equalsCondition.put("shipName", StrUtil.isBlank(illegalShip.getShipName()) ? null : StrUtil.concat(true, "*", illegalShip.getShipName(), "*"));
+        equalsCondition.put("shipRegionType", illegalShip.getShipRegionType());
+        equalsCondition.put("destination", StrUtil.isBlank(illegalShip.getDestination()) ? null : StrUtil.concat(true, "*", illegalShip.getDestination(), "*"));
+        equalsCondition.put("orgName", illegalShip.getOrgName());
+        equalsCondition.put("illegalStatus", illegalShip.getIllegalStatus());
+        equalsCondition.put("dealResult", illegalShip.getDealResult());
+        equalsCondition.put("fastResult", illegalShip.getFastResult());
+        equalsCondition.put("uploadResult", illegalShip.getUploadResult());
+        equalsCondition.put("illegalType", illegalShip.getIllegalType());
+        equalsCondition.put("monitorPointName", illegalShip.getMonitorPointName());
+        if (StrUtil.isNotBlank(illegalShip.getFilterMmsi()) && StrUtil.isBlank(illegalShip.getMmsi())) {
+            equalsCondition.put("mmsi", illegalShip.getFilterMmsi());
+        }
+        // 组装范围查询条件
+        Map<String, Object> rangeCondition = new HashMap<>();
+        if (ObjectUtil.isNotEmpty(params.get("beginTime"))) {
+            params.put("beginTime", params.get("beginTime") + " 00:00:00");
+        }
+        if (ObjectUtil.isNotEmpty(params.get("endTime"))) {
+            params.put("endTime", params.get("endTime") + " 23:59:59");
+        }
+        rangeCondition.put("createTime", StrUtil.concat(true, "[", Convert.toStr(params.get("beginTime")), ",", Convert.toStr(params.get("endTime")), "]"));
+        List<String> orderBy = new ArrayList<>();
+        orderBy.add("-createTime");
+        Map<String, Object> maps = client.searchDocument(equalsCondition, rangeCondition, orderBy, 1, 1000000, ElasticConstants.SO2_ALERT, ElasticConstants.AIS_ILLEGAL_SHIP);
+        ExcelUtil<IllegalShip> util = new ExcelUtil<>(IllegalShip.class);
+        return util.exportExcel(Convert.toList(IllegalShip.class, maps.get("pageList")), "硫含量违规数据");
+        /*util.exportExcelByEasyPoi("so2_" + DateUtil.today(),
+                "硫含量违规数据",
+                "硫含量违规数据",
+                IllegalShip.class,
+                Convert.toList(IllegalShip.class, maps.get("pageList")),
+                request, response);
+        ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+        mv.addObject(NormalExcelConstants.FILE_NAME, title); //此处设置的filename无效 ,前端会重更新设置一下
+        mv.addObject(NormalExcelConstants.CLASS, clazz);
+        mv.addObject(NormalExcelConstants.PARAMS, new ExportParams(title + "报表", "导出人:" + sysUser.getRealname(), title));
+        mv.addObject(NormalExcelConstants.DATA_LIST, exportList);
+        return mv;*/
+    }
+
     @GetMapping("/guangpu/monitorPoint")
     @ApiOperation("光谱-检测点数据")
     public AjaxResult monitorPoint(GuapMonitorPoint monitorPoint) {

+ 6 - 1
ruoyi-admin/src/main/resources/application-huang.yml

@@ -135,4 +135,9 @@ third:
 
 system:
   security: third # 走何种校验方式 self自身用户密码校验;third第三方登录校验
-  redirectUrl: http://localhost:1024/home
+  redirectUrl: http://localhost:1024/home
+
+---
+ruoyi:
+  # 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath)
+  profile: /User/huangcheng/home/cbwq/uploadPath

+ 6 - 1
ruoyi-admin/src/main/resources/application-prod.yml

@@ -139,4 +139,9 @@ third:
 
 system:
   security: third # 走何种校验方式 self自身用户密码校验;third第三方登录校验
-  redirectUrl: http://198.17.188.50:8088/home
+  redirectUrl: http://198.17.188.50:8088/home
+
+---
+ruoyi:
+  # 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath)
+  profile: C:/cbwq/uploadPath

+ 6 - 1
ruoyi-admin/src/main/resources/application-test.yml

@@ -135,4 +135,9 @@ third:
 
 system:
   security: third # 走何种校验方式 self自身用户密码校验;third第三方登录校验
-  redirectUrl: http://cbwq.xt.wenhq.top:8083/home
+  redirectUrl: http://cbwq.xt.wenhq.top:8083/home
+
+---
+ruoyi:
+  # 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath)
+  profile: /home/cbwq/uploadPath

+ 0 - 2
ruoyi-admin/src/main/resources/application.yml

@@ -8,8 +8,6 @@ ruoyi:
   copyrightYear: 2021
   # 实例演示开关
   demoEnabled: true
-  # 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath)
-  profile: C:/cbwq/uploadPath
   # 获取ip地址开关
   addressEnabled: false
   # 验证码类型 math 数组计算 char 字符验证

+ 42 - 41
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/BaseEntity.java

@@ -1,114 +1,115 @@
 package com.ruoyi.common.core.domain;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.annotation.Excel;
+
 import java.io.Serializable;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
-import com.fasterxml.jackson.annotation.JsonFormat;
 
 /**
  * Entity基类
- * 
+ *
  * @author ruoyi
  */
-public class BaseEntity implements Serializable
-{
+public class BaseEntity implements Serializable {
     private static final long serialVersionUID = 1L;
 
-    /** 搜索值 */
+    /**
+     * 搜索值
+     */
     private String searchValue;
 
-    /** 创建者 */
+    /**
+     * 创建者
+     */
     private String createBy;
 
-    /** 创建时间 */
+    /**
+     * 创建时间
+     */
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "监测时间", dateFormat = "yyyy-MM-dd HH:mm:ss")
     private Date createTime;
 
-    /** 更新者 */
+    /**
+     * 更新者
+     */
     private String updateBy;
 
-    /** 更新时间 */
+    /**
+     * 更新时间
+     */
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date updateTime;
 
-    /** 备注 */
+    /**
+     * 备注
+     */
     private String remark;
 
-    /** 请求参数 */
+    /**
+     * 请求参数
+     */
     private Map<String, Object> params;
 
-    public String getSearchValue()
-    {
+    public String getSearchValue() {
         return searchValue;
     }
 
-    public void setSearchValue(String searchValue)
-    {
+    public void setSearchValue(String searchValue) {
         this.searchValue = searchValue;
     }
 
-    public String getCreateBy()
-    {
+    public String getCreateBy() {
         return createBy;
     }
 
-    public void setCreateBy(String createBy)
-    {
+    public void setCreateBy(String createBy) {
         this.createBy = createBy;
     }
 
-    public Date getCreateTime()
-    {
+    public Date getCreateTime() {
         return createTime;
     }
 
-    public void setCreateTime(Date createTime)
-    {
+    public void setCreateTime(Date createTime) {
         this.createTime = createTime;
     }
 
-    public String getUpdateBy()
-    {
+    public String getUpdateBy() {
         return updateBy;
     }
 
-    public void setUpdateBy(String updateBy)
-    {
+    public void setUpdateBy(String updateBy) {
         this.updateBy = updateBy;
     }
 
-    public Date getUpdateTime()
-    {
+    public Date getUpdateTime() {
         return updateTime;
     }
 
-    public void setUpdateTime(Date updateTime)
-    {
+    public void setUpdateTime(Date updateTime) {
         this.updateTime = updateTime;
     }
 
-    public String getRemark()
-    {
+    public String getRemark() {
         return remark;
     }
 
-    public void setRemark(String remark)
-    {
+    public void setRemark(String remark) {
         this.remark = remark;
     }
 
-    public Map<String, Object> getParams()
-    {
-        if (params == null)
-        {
+    public Map<String, Object> getParams() {
+        if (params == null) {
             params = new HashMap<>();
         }
         return params;
     }
 
-    public void setParams(Map<String, Object> params)
-    {
+    public void setParams(Map<String, Object> params) {
         this.params = params;
     }
 }

+ 2 - 1
ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java

@@ -106,7 +106,8 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
                         "/gas/common/queryIllegalInfoList",
                         "/so2/third/**",
                         "/so2/static/device",
-                        "/so2/static/deviceType"
+                        "/so2/static/deviceType",
+                        "/so2/export"
                 ).permitAll()
                 .antMatchers("/common/download**").anonymous()
                 .antMatchers("/common/download/resource**").anonymous()

+ 15 - 14
ruoyi-system/src/main/java/com/ruoyi/system/domain/IllegalShip.java

@@ -1,6 +1,6 @@
 package com.ruoyi.system.domain;
 
-import cn.afterturn.easypoi.excel.annotation.Excel;
+import com.ruoyi.common.annotation.Excel;
 import com.ruoyi.common.core.domain.BaseEntity;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -19,31 +19,31 @@ public class IllegalShip extends BaseEntity {
     private static final long serialVersionUID = 1L;
 
     private Long id;
-
+    @Excel(name = "船舶名", width = 25)
+    private String shipName;
+    @Excel(name = "mmsi")
+    private String mmsi;
+    @Excel(name = "内河船/海船", readConverterExp = "0=内河船,1=海船,null=未知")
     private String shipRegionType;// 0-内河船。1-海船
+    @Excel(name = "管辖机构", width = 15)
     private String orgName;
+    @Excel(name = "硫含量")
+    private BigDecimal so2Percent;
     private String illegalType;
     private String dealResult;
     private String fastResult;
     private String uploadResult;
-
-    private String destination;
-
-    @Excel(name = "监测点")
+    @Excel(name = "监测点", width = 15)
     private String monitorPointName;
-
-    private String mmsi;
-
-    @Excel(name = "船舶名")
-    private String shipName;
+    @Excel(name = "目的港", width = 15)
+    private String destination;
 
     // 状态。1-正常;2-嫌疑;3-违规;4-检查正常
+    @Excel(name = "状态", readConverterExp = "1=正常,2=嫌疑,3=违规,4=检查正常")
     private Integer illegalStatus;
-
+    @Excel(name = "码头泊位", width = 20)
     private String berthName;
 
-    private BigDecimal so2Percent;
-
     private BigDecimal so2Concentration;
 
     private String filterMmsi;
@@ -57,6 +57,7 @@ public class IllegalShip extends BaseEntity {
     /**
      * 预抵/预离时间
      */
+    @Excel(name = "预抵/预离时间", width = 15)
     private String expectTime;
 
 }

+ 25 - 17
ruoyi-ui/src/api/data/liuData.js

@@ -2,27 +2,35 @@ import request from '@/utils/request'
 
 // 查询阈值
 export function getThresholdList(query) {
-    return request({
-        url: 'threshold/list',
-        method: 'get',
-        params: query
-    })
+  return request({
+    url: 'threshold/list',
+    method: 'get',
+    params: query
+  })
 }
 
 // 修改阈值
 export function getThresholdEdit(query) {
-    return request({
-        url: 'threshold/edit',
-        method: 'put',
-        data: query
-    })
+  return request({
+    url: 'threshold/edit',
+    method: 'put',
+    data: query
+  })
 }
 
 export function getLiuList(query) {
-    return request({
-        url: 'so2/list',
-        method: 'get',
-        // FormData: query
-        params: query
-    })
-}
+  return request({
+    url: 'so2/list',
+    method: 'get',
+    // FormData: query
+    params: query
+  })
+}
+
+export function exportLiu(query) {
+  return request({
+    url: 'so2/export',
+    method: 'get',
+    params: query
+  })
+}

+ 29 - 4
ruoyi-ui/src/views/components/table/liuTable.vue

@@ -209,7 +209,7 @@
 
       <el-form-item style="margin-left:1rem;margin-top:2rem;">
         <el-button icon="el-icon-search" size="mini" @click="getLiuLists" class="search">查询</el-button>
-        <!--        <el-button icon="el-icon-upload2" size="mini" @click="" class="export">导出</el-button>-->
+        <el-button icon="el-icon-upload2" size="mini" :loading="exportLoading" @click="handleExport" class="export">导出</el-button>
         <el-button icon="el-icon-setting" size="mini" @click="dialogVisible = true" class="export">阈值</el-button>
       </el-form-item>
 
@@ -336,7 +336,7 @@
 
         <div class="dialogDiv" v-show="!dialogShow">
           <span class="dialogFont" style="margin-left:10rem">燃油硫含量报警阈值(%)</span>
-          <el-input-number v-model="liuCount" :precision="2" :step="0.1" :max="10" style="width:65rem;margin-left:8rem"></el-input-number>
+          <el-input-number v-model="liuCount" :precision="2" :step="0.1" :min="0.1" :max="10" style="width:65rem;margin-left:8rem"></el-input-number>
           <button style="margin-left:13rem;" class="dialogButton" @click="getThresholdEdit">保存</button>
           <button style="margin-left:7rem;" class="dialogButton" @click="dialogShow=true">取消</button>
         </div>
@@ -348,7 +348,7 @@
 </template>
 
 <script>
-import {getLiuList, getThresholdEdit, getThresholdList} from "@/api/data/liuData";
+import {exportLiu, getLiuList, getThresholdEdit, getThresholdList} from "@/api/data/liuData";
 import {getDicts} from "@/api/system/dict/data";
 
 export default {
@@ -356,6 +356,8 @@ export default {
   data() {
     return {
       total: 0,
+      // 导出遮罩层
+      exportLoading: false,
       dialogVisible: false,
       showSearch: true,
       //   tabPosition: 'left',
@@ -507,7 +509,30 @@ export default {
         this.total = response.total;
         this.loading = false;
       });
-    }
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.queryParams.filterMmsi = this.isselect ? "!0" : "";
+      var dateRange = '';
+      if (this.queryParams.startTime != undefined && this.queryParams.startTime != "" && this.queryParams.endTime != undefined && this.queryParams.endTime != "") {
+        dateRange = [];
+        dateRange.push(this.queryParams.startTime);
+        dateRange.push(this.queryParams.endTime);
+      }
+      const queryParams = this.addDateRange(this.queryParams, dateRange);
+      this.$confirm('是否确认导出所有数据?', "警告", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(() => {
+        this.exportLoading = true;
+        return exportLiu(queryParams);
+      }).then(response => {
+        this.download(response.msg);
+        this.exportLoading = false;
+      }).catch(() => {
+      });
+    },
 
   }
 }