Selaa lähdekoodia

Merge branch 'server-165' of uskycloud/usky-modules into master

gez 1 vuosi sitten
vanhempi
commit
965dfeaf56
29 muutettua tiedostoa jossa 806 lisäystä ja 32 poistoa
  1. 4 0
      pom.xml
  2. 31 2
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/controller/web/BaseAlarmStatisticController.java
  3. 13 6
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/controller/web/TaskController.java
  4. 5 0
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/domain/BaseAlarmStatistic.java
  5. 2 0
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/mapper/BaseAlarmMapper.java
  6. 9 1
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/mapper/BaseAlarmStatisticMapper.java
  7. 11 0
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/BaseAlarmStatisticService.java
  8. 76 0
      service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/impl/BaseAlarmStatisticServiceImpl.java
  9. 165 0
      service-alarm/service-alarm-biz/src/main/resources/mapper/alarm/BaseAlarmStatisticMapper.xml
  10. 2 2
      service-fire/service-fire-biz/src/main/java/com/usky/fire/service/impl/PatrolInspectionPlanServiceImpl.java
  11. 20 6
      service-fire/service-fire-biz/src/main/java/com/usky/fire/service/impl/PatrolInspectionPlanSonServiceImpl.java
  12. 6 6
      service-fire/service-fire-biz/src/main/java/com/usky/fire/service/impl/PatrolInspectionSiteServiceImpl.java
  13. 5 0
      service-fire/service-fire-biz/src/main/java/com/usky/fire/service/vo/PlanRecordVo.java
  14. 20 0
      service-issue/pom.xml
  15. 11 0
      service-issue/service-issue-biz/src/main/java/com/usky/issue/annotation/CheckSign.java
  16. 92 0
      service-issue/service-issue-biz/src/main/java/com/usky/issue/annotation/CheckSignAspect.java
  17. 12 4
      service-issue/service-issue-biz/src/main/java/com/usky/issue/controller/web/YtDeviceStatusController.java
  18. 1 0
      service-issue/service-issue-biz/src/main/java/com/usky/issue/mapper/YtDeviceStatusMapper.java
  19. 1 0
      service-issue/service-issue-biz/src/main/java/com/usky/issue/service/YtDeviceStatusService.java
  20. 6 0
      service-issue/service-issue-biz/src/main/java/com/usky/issue/service/impl/YtDeviceStatusServiceImpl.java
  21. 55 0
      service-issue/service-issue-biz/src/main/java/com/usky/issue/service/util/SignUtil.java
  22. 19 3
      service-issue/service-issue-biz/src/main/resources/mapper/issue/YtDeviceStatusMapper.xml
  23. 2 2
      service-park/service-park-biz/src/main/java/com/usky/park/MybatisGenerator.java
  24. 44 0
      service-park/service-park-biz/src/main/java/com/usky/park/controller/web/DataStHistoryController.java
  25. 82 0
      service-park/service-park-biz/src/main/java/com/usky/park/domain/DataStHistory.java
  26. 20 0
      service-park/service-park-biz/src/main/java/com/usky/park/mapper/DataStHistoryMapper.java
  27. 16 0
      service-park/service-park-biz/src/main/java/com/usky/park/service/DataStHistoryService.java
  28. 48 0
      service-park/service-park-biz/src/main/java/com/usky/park/service/impl/DataStHistoryServiceImpl.java
  29. 28 0
      service-park/service-park-biz/src/main/resources/mapper/park/DataStHistoryMapper.xml

+ 4 - 0
pom.xml

@@ -71,6 +71,10 @@
     
     <module>service-park</module>
 
+
+
+    <module>service-issue</module>
+
   </modules>
           
   

+ 31 - 2
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/controller/web/BaseAlarmStatisticController.java

@@ -1,10 +1,19 @@
 package com.usky.alarm.controller.web;
 
 
-import org.springframework.web.bind.annotation.RequestMapping;
+import com.aliyuncs.exceptions.ClientException;
+import com.usky.alarm.domain.BaseAlarm;
+import com.usky.alarm.service.BaseAlarmService;
+import com.usky.alarm.service.BaseAlarmStatisticService;
+import com.usky.common.core.bean.ApiResult;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
 
 import org.springframework.stereotype.Controller;
 
+import java.util.List;
+import java.util.Map;
+
 /**
  * <p>
  * 告警统计表 前端控制器
@@ -13,9 +22,29 @@ import org.springframework.stereotype.Controller;
  * @author han
  * @since 2023-11-24
  */
-@Controller
+@RestController
 @RequestMapping("/baseAlarmStatistic")
 public class BaseAlarmStatisticController {
+    @Autowired
+    private BaseAlarmStatisticService baseAlarmStatisticService;
+
+    @GetMapping("/add")
+    public ApiResult<Void> add(@RequestParam(value = "alarmId") Integer alarmId) throws ClientException {
+        baseAlarmStatisticService.baseAlarmStatisticTask(alarmId);
+        return ApiResult.success();
+    }
 
+    /**
+     * 综合云图-告警及隐患折线图接口
+     *
+     * @param deptId 部门ID
+     * @param dateType 时间类型
+     * @return
+     */
+    @GetMapping("/alarmStatistic")
+    public ApiResult<List<Map<String,Object>>> alarmStatistic(@RequestParam(value = "deptId", required = false) Integer deptId,
+                                                              @RequestParam(value = "dateType", required = false) Integer dateType){
+        return ApiResult.success(baseAlarmStatisticService.alarmStatistic(deptId,dateType));
+    }
 }
 

+ 13 - 6
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/controller/web/TaskController.java

@@ -1,23 +1,30 @@
 package com.usky.alarm.controller.web;
 
-import com.usky.alarm.service.job.DmpDataOverviewJob;
+import com.usky.alarm.service.BaseAlarmStatisticService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.EnableScheduling;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
 /**
- * @author zyj
- * @since 2023-06-05
+ * @author han
+ * @since 2023-12-04
  */
 @EnableScheduling
 @Component
 public class TaskController {
     @Autowired
-    private DmpDataOverviewJob dmpDataOverviewJob;
+    private BaseAlarmStatisticService baseAlarmStatisticService;
 
-    @Scheduled(cron = "0 0 1 * * ? ") //每天凌晨1点执行
+    @Scheduled(cron = "0 2 0 * * ? ") //每天凌晨2点执行
     public void task() {
-        System.out.println(Thread.currentThread().getName() + "定时任务执行中");
+        System.out.println(Thread.currentThread().getName() + "告警及隐患日统计定时任务执行中");
+        baseAlarmStatisticService.baseAlarmStatisticTask(1);
+    }
+
+    @Scheduled(cron = "0 0 1 1 * ?")//每月1号凌晨1点
+    public void task1() {
+        System.out.println(Thread.currentThread().getName() + "告警及隐患月统计定时任务执行中");
+        baseAlarmStatisticService.baseAlarmStatisticTask(2);
     }
 }

+ 5 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/domain/BaseAlarmStatistic.java

@@ -42,6 +42,11 @@ public class BaseAlarmStatistic implements Serializable {
      */
     private Integer statisticDimen;
 
+    /**
+     * 统一时间
+     */
+    private LocalDateTime statisticTime;
+
     /**
      * 创建时间
      */

+ 2 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/mapper/BaseAlarmMapper.java

@@ -3,6 +3,7 @@ package com.usky.alarm.mapper;
 import com.usky.alarm.domain.BaseAlarm;
 import com.usky.alarm.domain.BaseAlarmType;
 import com.usky.common.mybatis.core.CrudMapper;
+import org.springframework.stereotype.Repository;
 
 /**
  * <p>
@@ -12,6 +13,7 @@ import com.usky.common.mybatis.core.CrudMapper;
  * @author han
  * @since 2023-09-22
  */
+@Repository
 public interface BaseAlarmMapper extends CrudMapper<BaseAlarm> {
     BaseAlarmType getAlarmTypeOne(String alarmType);
 }

+ 9 - 1
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/mapper/BaseAlarmStatisticMapper.java

@@ -2,6 +2,12 @@ package com.usky.alarm.mapper;
 
 import com.usky.alarm.domain.BaseAlarmStatistic;
 import com.usky.common.mybatis.core.CrudMapper;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.time.LocalDate;
+import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -11,6 +17,8 @@ import com.usky.common.mybatis.core.CrudMapper;
  * @author han
  * @since 2023-11-24
  */
+@Repository
 public interface BaseAlarmStatisticMapper extends CrudMapper<BaseAlarmStatistic> {
-
+    List<Map<String, Object>> getStatistic(@Param("startTime") LocalDate startTime,
+                                          @Param("endTime") LocalDate endTime);
 }

+ 11 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/BaseAlarmStatisticService.java

@@ -3,6 +3,9 @@ package com.usky.alarm.service;
 import com.usky.alarm.domain.BaseAlarmStatistic;
 import com.usky.common.mybatis.core.CrudService;
 
+import java.util.List;
+import java.util.Map;
+
 /**
  * <p>
  * 告警统计表 服务类
@@ -12,5 +15,13 @@ import com.usky.common.mybatis.core.CrudService;
  * @since 2023-11-24
  */
 public interface BaseAlarmStatisticService extends CrudService<BaseAlarmStatistic> {
+    /**
+     * 定时任务-告警日、月不同维度统计
+     */
+    void baseAlarmStatisticTask(Integer type);
 
+    /**
+     * 综合云图-告警及隐患折线图接口
+     */
+    List<Map<String,Object>> alarmStatistic(Integer deptId,Integer dateType);
 }

+ 76 - 0
service-alarm/service-alarm-biz/src/main/java/com/usky/alarm/service/impl/BaseAlarmStatisticServiceImpl.java

@@ -1,10 +1,22 @@
 package com.usky.alarm.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.usky.alarm.domain.BaseAlarm;
 import com.usky.alarm.domain.BaseAlarmStatistic;
 import com.usky.alarm.mapper.BaseAlarmStatisticMapper;
+import com.usky.alarm.service.BaseAlarmService;
 import com.usky.alarm.service.BaseAlarmStatisticService;
 import com.usky.common.mybatis.core.AbstractCrudService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.*;
+import java.time.temporal.ChronoUnit;
+import java.time.temporal.TemporalAdjusters;
+import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -16,5 +28,69 @@ import org.springframework.stereotype.Service;
  */
 @Service
 public class BaseAlarmStatisticServiceImpl extends AbstractCrudService<BaseAlarmStatisticMapper, BaseAlarmStatistic> implements BaseAlarmStatisticService {
+    @Autowired
+    private BaseAlarmService baseAlarmService;
+
+    @Transactional
+    @Override
+    public void baseAlarmStatisticTask(Integer type) {
+        LocalDateTime now = LocalDateTime.now();
+        LocalDate currentDate = LocalDate.now();
+        LocalDate previousDate = currentDate.minusDays(1);
+        BaseAlarmStatistic baseAlarmStatistic = new BaseAlarmStatistic();
+        LocalDateTime startDateTime = LocalDateTime.of(previousDate, LocalTime.MIN);
+        LocalDateTime endDateTime = LocalDateTime.of(previousDate, LocalTime.MAX);
+        LocalDateTime startOfPreviousMonth = YearMonth.from(now).minusMonths(1).atDay(1).atTime(0, 0, 0);
+        LocalDateTime endOfPreviousMonth = YearMonth.from(now).minusMonths(1).atEndOfMonth().atTime(23, 59, 59);
+        QueryWrapper<BaseAlarm> queryWrapper = Wrappers.query();
+        if (type.equals(1)){
+            queryWrapper.select("COUNT(alarm_grade=1 or null) as alarmCount","COUNT(alarm_grade!=1 or" +
+                    " null) as hiddenCount")
+                    .between("alarm_time",startDateTime,endDateTime);
+            baseAlarmStatistic.setStatisticDimen(1);
+            baseAlarmStatistic.setStatisticTime(startDateTime);
+        }else {
+            queryWrapper.select("COUNT(alarm_grade=1 or null) as alarmCount","COUNT(alarm_grade!=1 or" +
+                    " null) as hiddenCount")
+                    .between("alarm_time",startOfPreviousMonth,endOfPreviousMonth);
+            baseAlarmStatistic.setStatisticDimen(2);
+            baseAlarmStatistic.setStatisticTime(startOfPreviousMonth);
+        }
+        List<Map<String,Object>> alarmStatisticList = baseAlarmService.listMaps(queryWrapper);
+        baseAlarmStatistic.setAlarmNum(Integer.valueOf(alarmStatisticList.get(0).get("alarmCount").toString()));
+        baseAlarmStatistic.setPitfallNum(Integer.valueOf(alarmStatisticList.get(0).get("hiddenCount").toString()));
+        baseAlarmStatistic.setCreateTime(now);
+        this.save(baseAlarmStatistic);
+    }
 
+    @Override
+    public List<Map<String, Object>> alarmStatistic(Integer deptId,Integer dateType) {
+        LocalDateTime currentDate = LocalDateTime.now();
+        LocalDateTime firstDayOfMonth = LocalDateTime.now().with(TemporalAdjusters.firstDayOfMonth()).withHour(0).withMinute(0).withSecond(0);
+        LocalDateTime halfYearAgo = currentDate.minus(6, ChronoUnit.MONTHS);
+        LocalDateTime firstDayOfHalfYearAgo = halfYearAgo.withDayOfMonth(1).withHour(0).withMinute(0).withSecond(0);
+        LocalDateTime oneYearAgo = currentDate.minusYears(1);
+        LocalDateTime zeroTime = oneYearAgo.withHour(0).withMinute(0).withSecond(0);
+        QueryWrapper<BaseAlarmStatistic> queryWrapper = Wrappers.query();
+        if (dateType.equals(1)){
+            queryWrapper.select("alarm_num as alarmNum","pitfall_num as pitfallNum","DATE_FORMAT(statistic_time, '%m-%d') AS " +
+                    "statisticTime")
+                    .between("statistic_time",firstDayOfMonth,currentDate)
+                    .eq("statistic_dimen",1);
+        }else if (dateType.equals(2)){
+            queryWrapper.select("alarm_num as alarmNum","pitfall_num as pitfallNum","DATE_FORMAT(statistic_time, " +
+                    "'%Y-%m') AS " +
+                    "statisticTime")
+                    .between("statistic_time",firstDayOfHalfYearAgo,currentDate)
+                    .eq("statistic_dimen",2);
+        }else {
+            queryWrapper.select("alarm_num as alarmNum","pitfall_num as pitfallNum","DATE_FORMAT(statistic_time, " +
+                    "'%Y-%m') AS " +
+                    "statisticTime")
+                    .between("statistic_time",zeroTime,currentDate)
+                    .eq("statistic_dimen",2);
+        }
+        List<Map<String, Object>> list = this.listMaps(queryWrapper);
+        return list;
+    }
 }

+ 165 - 0
service-alarm/service-alarm-biz/src/main/resources/mapper/alarm/BaseAlarmStatisticMapper.xml

@@ -8,9 +8,174 @@
         <result column="alarm_num" property="alarmNum" />
         <result column="pitfall_num" property="pitfallNum" />
         <result column="statistic_dimen" property="statisticDimen" />
+        <result column="statistic_time" property="statisticTime" />
         <result column="create_time" property="createTime" />
         <result column="dept_id" property="deptId" />
         <result column="tenant_id" property="tenantId" />
     </resultMap>
 
+<!--    <select id="getStatistic" resultType="java.util.Map">-->
+<!--        SELECT-->
+<!--        d.date,-->
+<!--        IFNULL(t.total_rows, 0) AS total_rows-->
+<!--        FROM-->
+<!--        (-->
+<!--        SELECT-->
+<!--        date_add(-->
+<!--        #{startTime},-->
+<!--        INTERVAL ROW DAY-->
+<!--        ) date-->
+<!--        FROM-->
+<!--        (-->
+<!--        SELECT-->
+<!--        @ROW := @ROW + 1 AS ROW-->
+<!--        FROM-->
+<!--        (-->
+<!--        SELECT-->
+<!--        0-->
+<!--        UNION ALL-->
+<!--        SELECT-->
+<!--        1-->
+<!--        UNION ALL-->
+<!--        SELECT-->
+<!--        2-->
+<!--        UNION ALL-->
+<!--        SELECT-->
+<!--        3-->
+<!--        UNION ALL-->
+<!--        SELECT-->
+<!--        4-->
+<!--        UNION ALL-->
+<!--        SELECT-->
+<!--        5-->
+<!--        UNION ALL-->
+<!--        SELECT-->
+<!--        6-->
+<!--        UNION ALL-->
+<!--        SELECT-->
+<!--        7-->
+<!--        UNION ALL-->
+<!--        SELECT-->
+<!--        8-->
+<!--        UNION ALL-->
+<!--        SELECT-->
+<!--        9-->
+<!--        ) t,-->
+<!--        (-->
+<!--        SELECT-->
+<!--        0-->
+<!--        UNION ALL-->
+<!--        SELECT-->
+<!--        1-->
+<!--        UNION ALL-->
+<!--        SELECT-->
+<!--        2-->
+<!--        UNION ALL-->
+<!--        SELECT-->
+<!--        3-->
+<!--        UNION ALL-->
+<!--        SELECT-->
+<!--        4-->
+<!--        UNION ALL-->
+<!--        SELECT-->
+<!--        5-->
+<!--        UNION ALL-->
+<!--        SELECT-->
+<!--        6-->
+<!--        UNION ALL-->
+<!--        SELECT-->
+<!--        7-->
+<!--        UNION ALL-->
+<!--        SELECT-->
+<!--        8-->
+<!--        UNION ALL-->
+<!--        SELECT-->
+<!--        9-->
+<!--        ) t2,-->
+<!--        (-->
+<!--        SELECT-->
+<!--        0-->
+<!--        UNION ALL-->
+<!--        SELECT-->
+<!--        1-->
+<!--        UNION ALL-->
+<!--        SELECT-->
+<!--        2-->
+<!--        UNION ALL-->
+<!--        SELECT-->
+<!--        3-->
+<!--        UNION ALL-->
+<!--        SELECT-->
+<!--        4-->
+<!--        UNION ALL-->
+<!--        SELECT-->
+<!--        5-->
+<!--        UNION ALL-->
+<!--        SELECT-->
+<!--        6-->
+<!--        UNION ALL-->
+<!--        SELECT-->
+<!--        7-->
+<!--        UNION ALL-->
+<!--        SELECT-->
+<!--        8-->
+<!--        UNION ALL-->
+<!--        SELECT-->
+<!--        9-->
+<!--        ) t3,-->
+<!--        (-->
+<!--        SELECT-->
+<!--        0-->
+<!--        UNION ALL-->
+<!--        SELECT-->
+<!--        1-->
+<!--        UNION ALL-->
+<!--        SELECT-->
+<!--        2-->
+<!--        UNION ALL-->
+<!--        SELECT-->
+<!--        3-->
+<!--        UNION ALL-->
+<!--        SELECT-->
+<!--        4-->
+<!--        UNION ALL-->
+<!--        SELECT-->
+<!--        5-->
+<!--        UNION ALL-->
+<!--        SELECT-->
+<!--        6-->
+<!--        UNION ALL-->
+<!--        SELECT-->
+<!--        7-->
+<!--        UNION ALL-->
+<!--        SELECT-->
+<!--        8-->
+<!--        UNION ALL-->
+<!--        SELECT-->
+<!--        9-->
+<!--        ) t4,-->
+<!--        (SELECT @ROW :=- 1) r-->
+<!--        ) se-->
+<!--        WHERE-->
+<!--        date_add(-->
+<!--        #{startTime},-->
+<!--        INTERVAL ROW DAY-->
+<!--        ) < #{endTime}-->
+<!--        ) AS d-->
+<!--        LEFT JOIN (-->
+<!--        SELECT-->
+<!--        DATE(alarm_time) AS date,-->
+<!--        COUNT(*) AS total_rows-->
+<!--        FROM-->
+<!--        base_alarm-->
+<!--        WHERE-->
+<!--        DATE(alarm_time) BETWEEN #{startTime}-->
+<!--        AND #{endTime}-->
+<!--        GROUP BY-->
+<!--        DATE(alarm_time)-->
+<!--        ) AS t ON d.date = t.date-->
+<!--        ORDER BY-->
+<!--        d.date-->
+<!--    </select>-->
+
 </mapper>

+ 2 - 2
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/impl/PatrolInspectionPlanServiceImpl.java

@@ -655,14 +655,14 @@ public class PatrolInspectionPlanServiceImpl extends AbstractCrudService<PatrolI
             patrolInspectionSiteVo.setSiteName(patrolInspectionSiteList.get(i).getSiteName());
             patrolInspectionSiteVo.setAreaId(patrolInspectionSiteList.get(i).getAreaId());
             for (int j = 0; j < PatrolInspectionAreaList.size(); j++) {
-                if (patrolInspectionSiteList.get(i).getAreaId() == PatrolInspectionAreaList.get(j).getId()) {
+                if (patrolInspectionSiteList.get(i).getAreaId().equals(PatrolInspectionAreaList.get(j).getId())) {
                     patrolInspectionSiteVo.setAreaName(PatrolInspectionAreaList.get(j).getAreaName());
                 }
             }
             patrolInspectionSiteVo.setId(patrolInspectionSiteList.get(i).getId());
             patrolInspectionSiteVo.setSiteStatus(false);
             for (int j = 0; j < planSiteList.size(); j++) {
-                if (patrolInspectionSiteList.get(i).getId() == planSiteList.get(j).getSiteId()) {
+                if (patrolInspectionSiteList.get(i).getId().equals(planSiteList.get(j).getSiteId())) {
                     patrolInspectionSiteVo.setSiteStatus(true);
                 }
             }

+ 20 - 6
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/impl/PatrolInspectionPlanSonServiceImpl.java

@@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollectionUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.usky.common.core.exception.BusinessException;
+import com.usky.common.core.util.DateUtils;
 import com.usky.common.core.util.StringUtils;
 import com.usky.common.mybatis.core.AbstractCrudService;
 import com.usky.common.security.utils.SecurityUtils;
@@ -238,6 +239,19 @@ public class PatrolInspectionPlanSonServiceImpl extends AbstractCrudService<Patr
         if (planSonList.size() <= 0) {
             throw new BusinessException("计划不存在,可能已被删除,请联系管理人员");
         }
+        /*
+        * 巡检时间判断
+        * */
+        LocalDateTime now = LocalDateTime.now();
+        LocalDateTime inspectionDateTime = LocalDateTime.parse(planSonList.get(0).getInspectionDate() +" "+ planSonList.get(0).getStartTime(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+        LocalDateTime inspectionDateTime1 = LocalDateTime.parse(planSonList.get(0).getInspectionDate() +" "+ planSonList.get(0).getEndTime(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+        if (inspectionDateTime.isAfter(now)) {
+            throw new BusinessException("计划未开始,不可巡检");
+        } else if (now.isAfter(inspectionDateTime1)){
+            throw new BusinessException("巡检时间已过,请联系管理员");
+        }
+
+
         LambdaQueryWrapper<PatrolInspectionArea> queryWrapperOne = Wrappers.lambdaQuery();
         queryWrapperOne.select(PatrolInspectionArea::getId, PatrolInspectionArea::getAreaName)
                 .eq(PatrolInspectionArea::getId, planSonList.get(0).getAreaId());
@@ -254,6 +268,7 @@ public class PatrolInspectionPlanSonServiceImpl extends AbstractCrudService<Patr
         patrolInspectionRecord.setSiteStatus(planRecordVo.getSiteStatus());
         patrolInspectionRecord.setLongitude(planRecordVo.getLongitude());
         patrolInspectionRecord.setLatitude(planRecordVo.getLatitude());
+
         String startDate = null;
         String endDate = null;
         if (planSonList.get(0).getPlanType() == 1) {
@@ -272,6 +287,7 @@ public class PatrolInspectionPlanSonServiceImpl extends AbstractCrudService<Patr
         patrolInspectionRecord.setTenantId(SecurityUtils.getTenantId());
         patrolInspectionRecord.setCompanyId(planRecordVo.getCompanyId());
         patrolInspectionRecord.setCreator(SecurityUtils.getUsername());
+        patrolInspectionRecord.setRemarks(planRecordVo.getRemarks());
         patrolInspectionRecordMapper.insert(patrolInspectionRecord);
         Integer recordId = patrolInspectionRecord.getId();
         List<PatrolInspectionRecordPicture> recordPictureList = planRecordVo.getRecordPictureList();
@@ -422,12 +438,10 @@ public class PatrolInspectionPlanSonServiceImpl extends AbstractCrudService<Patr
                     recordIdList.add(recordList.get(i).getId());
                 }
                 List<PatrolInspectionSite> list1 = new ArrayList<>();
-                if (id != null && id != 0) {
-                    LambdaQueryWrapper<PatrolInspectionSite> queryWrapper1 = Wrappers.lambdaQuery();
-                    queryWrapper1.select(PatrolInspectionSite::getId, PatrolInspectionSite::getPictureUrl)
-                            .eq(PatrolInspectionSite::getId, recordList.get(0).getSiteId());
-                    list1 = patrolInspectionSiteService.list(queryWrapper1);
-                }
+                LambdaQueryWrapper<PatrolInspectionSite> queryWrapper1 = Wrappers.lambdaQuery();
+                queryWrapper1.select(PatrolInspectionSite::getId, PatrolInspectionSite::getPictureUrl)
+                        .eq(PatrolInspectionSite::getId, recordList.get(0).getSiteId());
+                list1 = patrolInspectionSiteService.list(queryWrapper1);
 
                 LambdaQueryWrapper<PatrolInspectionRecordPicture> queryOne = Wrappers.lambdaQuery();
                 queryOne.in(PatrolInspectionRecordPicture::getRecordId, recordIdList);

+ 6 - 6
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/impl/PatrolInspectionSiteServiceImpl.java

@@ -162,12 +162,12 @@ public class PatrolInspectionSiteServiceImpl extends AbstractCrudService<PatrolI
 
     @Override
     public void updatePatrolInspectionSite(PatrolInspectionSite patrolInspectionSite) {
-        LambdaQueryWrapper<PatrolInspectionPlanSite> queryWrapperOne = Wrappers.lambdaQuery();
-        queryWrapperOne.eq(PatrolInspectionPlanSite::getSiteId, patrolInspectionSite.getId());
-        List<PatrolInspectionPlanSite> planSiteList = planSiteService.list(queryWrapperOne);
-        if (planSiteList.size() > 0) {
-            throw new BusinessException("巡检地点已绑定计划不可修改");
-        }
+//        LambdaQueryWrapper<PatrolInspectionPlanSite> queryWrapperOne = Wrappers.lambdaQuery();
+//        queryWrapperOne.eq(PatrolInspectionPlanSite::getSiteId, patrolInspectionSite.getId());
+//        List<PatrolInspectionPlanSite> planSiteList = planSiteService.list(queryWrapperOne);
+//        if (planSiteList.size() > 0) {
+//            throw new BusinessException("巡检地点已绑定计划不可修改");
+//        }
         this.updateById(patrolInspectionSite);
     }
 

+ 5 - 0
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/vo/PlanRecordVo.java

@@ -128,6 +128,11 @@ public class PlanRecordVo implements Serializable {
      */
     private String creator;
 
+    /**
+     * 备注
+     */
+    private String remarks;
+
     /**
      * 图片路径
      */

+ 20 - 0
service-issue/pom.xml

@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>usky-modules</artifactId>
+        <groupId>com.usky</groupId>
+        <version>0.0.1</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>service-issue</artifactId>
+
+    <packaging>pom</packaging>
+    <version>0.0.1</version>
+
+    <modules>
+        <module>service-issue-biz</module>
+        <module>service-issue-api</module>
+    </modules>
+</project>

+ 11 - 0
service-issue/service-issue-biz/src/main/java/com/usky/issue/annotation/CheckSign.java

@@ -0,0 +1,11 @@
+package com.usky.issue.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME )
+public @interface CheckSign {
+}

+ 92 - 0
service-issue/service-issue-biz/src/main/java/com/usky/issue/annotation/CheckSignAspect.java

@@ -0,0 +1,92 @@
+package com.usky.issue.annotation;
+
+import com.usky.common.core.utils.StringUtils;
+import com.usky.issue.service.util.SignUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Pointcut;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.context.request.RequestAttributes;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+import org.springframework.web.context.request.ServletWebRequest;
+import org.springframework.web.servlet.HandlerMapping;
+import org.springframework.web.util.ContentCachingRequestWrapper;
+
+import javax.servlet.http.HttpServletRequest;
+import java.nio.charset.StandardCharsets;
+import java.util.Map;
+import java.util.Objects;
+
+@Aspect   //定义一个切面
+@Configuration
+@Slf4j
+public class CheckSignAspect {
+
+    @Value("${sign.expireTime}")
+    private long expireTime;//接口签名验证超时时间
+    @Value("${sign.secretKey}")
+    private String secretKey;//接口签名唯一密钥
+
+    // 定义切点Pointcut
+    @Pointcut("@annotation(com.usky.issue.annotation.CheckSign)")
+    public void excudeService() {
+    }
+
+    @Around("excudeService()")
+    public Object doAround(ProceedingJoinPoint joinPoint) {
+        log.info("开始验证签名");
+        try {
+            ServletRequestAttributes sra = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
+            HttpServletRequest request = Objects.requireNonNull(sra).getRequest();
+
+            String timestamp = request.getHeader("timestamp");//获取timestamp参数
+            String sign = request.getHeader("sign");//获取sign参数
+
+            if (StringUtils.isBlank(timestamp) || StringUtils.isBlank(sign)) {
+                return "timestamp和sign参数不能为空";
+            }
+            long requestTime = Long.valueOf(timestamp);
+            long now = System.currentTimeMillis() / 1000;
+            log.info("now={}", now);
+            // 请求发起时间与当前时间超过expireTime,则接口请求过期
+            if (now - requestTime > expireTime) {
+                return "接口请求过期";
+            }
+
+            String generatedSign = generatedSignature(request, timestamp);
+            if (!generatedSign.equals(sign)) {
+                return "签名校验错误";
+            }
+
+            Object result = joinPoint.proceed();
+            return result;
+        } catch (Throwable t) {
+            return "签名校验异常";
+        }
+
+    }
+
+    //获取请求参数并生成签名
+    private String generatedSignature(HttpServletRequest request, String timestamp) {
+        //获取RequestBody参数,此处需要配合过滤器处理request后才能获取
+        String bodyParam = null;
+        if (request instanceof ContentCachingRequestWrapper) {
+            bodyParam = new String(((ContentCachingRequestWrapper) request).getContentAsByteArray(), StandardCharsets.UTF_8);
+        }
+
+        //获取RequestParam参数
+        Map<String, String[]> requestParameterMap = request.getParameterMap();
+
+        //获取PathVariable参数
+        ServletWebRequest webRequest = new ServletWebRequest(request, null);
+        Map<String, String> requestPathMap = (Map<String, String>) webRequest.getAttribute(
+                HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE, RequestAttributes.SCOPE_REQUEST);
+
+        return SignUtil.sign(bodyParam, requestParameterMap, requestPathMap, secretKey, timestamp);
+    }
+
+}

+ 12 - 4
service-issue/service-issue-biz/src/main/java/com/usky/issue/controller/web/YtDeviceStatusController.java

@@ -7,11 +7,9 @@ import com.usky.issue.domain.YtDeviceStatus;
 import com.usky.issue.service.YtDeviceStatusService;
 import com.usky.issue.service.vo.YtDeviceStatusRequestVO;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.*;
 
-import org.springframework.web.bind.annotation.RestController;
+import java.util.List;
 
 /**
  * <p>
@@ -37,5 +35,15 @@ public class YtDeviceStatusController {
         return ApiResult.success(ytDeviceStatusService.page(requestVO));
     }
 
+    /**
+     * 导出
+     * @param
+     * @return
+     */
+    @GetMapping("export")
+    ApiResult<List<YtDeviceStatus>> export(){
+        return ApiResult.success(ytDeviceStatusService.export());
+    }
+
 }
 

+ 1 - 0
service-issue/service-issue-biz/src/main/java/com/usky/issue/mapper/YtDeviceStatusMapper.java

@@ -20,4 +20,5 @@ public interface YtDeviceStatusMapper extends CrudMapper<YtDeviceStatus> {
     List<YtDeviceStatus> getDeviceStatusType(@Param("deviceType") String deviceType,
                                              @Param("Current") int Current,
                                              @Param("Size") int Size);
+    List<YtDeviceStatus> exportData();
 }

+ 1 - 0
service-issue/service-issue-biz/src/main/java/com/usky/issue/service/YtDeviceStatusService.java

@@ -17,4 +17,5 @@ import java.util.List;
  */
 public interface YtDeviceStatusService extends CrudService<YtDeviceStatus> {
     CommonPage<YtDeviceStatus> page(YtDeviceStatusRequestVO requestVO);
+    List<YtDeviceStatus> export();
 }

+ 6 - 0
service-issue/service-issue-biz/src/main/java/com/usky/issue/service/impl/YtDeviceStatusServiceImpl.java

@@ -57,4 +57,10 @@ public class YtDeviceStatusServiceImpl extends AbstractCrudService<YtDeviceStatu
 
         return new CommonPage<>(records, total, pageSize, pageCurrent);
     }
+
+    @Override
+    public List<YtDeviceStatus> export() {
+        return ytDeviceStatusMapper.exportData();
+    }
+
 }

+ 55 - 0
service-issue/service-issue-biz/src/main/java/com/usky/issue/service/util/SignUtil.java

@@ -0,0 +1,55 @@
+package com.usky.issue.service.util;
+
+import cn.hutool.crypto.SecureUtil;
+import com.usky.common.core.utils.StringUtils;
+import org.springframework.util.CollectionUtils;
+
+import java.util.Arrays;
+import java.util.Map;
+import java.util.TreeMap;
+
+public class SignUtil {
+
+    /**
+     * 使用 Map按key进行排序
+     *
+     * @param map
+     * @return
+     */
+    public static Map<String, String> sortMapByKey(Map<String, String> map) {
+        if (map == null || map.isEmpty()) {
+            return null;
+        }
+        //升序排序
+        Map<String, String> sortMap = new TreeMap<>(String::compareTo);
+        sortMap.putAll(map);
+        return sortMap;
+    }
+
+    public static String sign(String body, Map<String, String[]> params, Map<String, String> requestPathMap, String secretKey, String timestamp) {
+        StringBuilder sb = new StringBuilder();
+        if (StringUtils.isNotBlank(body)) {
+            sb.append(body).append('#');
+        }
+
+        if (!CollectionUtils.isEmpty(params)) {
+            params.entrySet()
+                    .stream()
+                    .sorted(Map.Entry.comparingByKey())
+                    .forEach(paramEntry -> {
+                        String paramValue = String.join(",", Arrays.stream(paramEntry.getValue()).sorted().toArray(String[]::new));
+                        sb.append(paramEntry.getKey()).append("=").append(paramValue).append('#');
+                    });
+        }
+
+        if (!CollectionUtils.isEmpty(requestPathMap)) {
+            for (String key : requestPathMap.keySet()) {
+                String value = requestPathMap.get(key);
+                sb.append(key).append("=").append(value).append('#');
+            }
+
+        }
+        String a = String.join("#", secretKey, timestamp, sb.toString());
+        return SecureUtil.md5(a);
+    }
+}

+ 19 - 3
service-issue/service-issue-biz/src/main/resources/mapper/issue/YtDeviceStatusMapper.xml

@@ -21,16 +21,32 @@
         device_code,device_name,address,device_type,company_name,company_code,data_time
         from yt_device_status yds
         <where>
-                company_code in ('10357','10356','10354','10352','10349','10350','10347','10346','10334','10188',
+                difference > 48
+                AND company_code in ('10357','10356','10354','10352','10349','10350','10347','10346','10334','10188',
                 '10343','10348','10331','10320','10320','10164','10071','10345','10144','10064','10336','10131','10205',
                 '10340','10339','10225','10323','10320','10134','10337','10226','10214','10160','10076','10079','10078',
                 '10215','10324','10324','10154','10106','10121','10067','10325','10323','10322','10320','10128','10314',
                 '10315','10312','10222','10077','10146','10151','10232','10116','10114','10122','10166','10353','10358',
                 '10359','10361','10360','10140','10362','10206','10355','10105','10338','10318','10367','10124','10365',
                 '10363','10368','10371','10341','10375','10373','10126','10374','10376','10378')
-                AND difference > 48
         </where>
-        order by company_code asc
+        ORDER BY company_code ASC
+    </select>
+    <select id="exportData" resultType="com.usky.issue.domain.YtDeviceStatus">
+        SELECT device_code,device_name,address,device_type,company_name,company_code,data_time
+        FROM yt_device_status yds
+        <where>
+            device_type NOT IN ('烟感系统','电气火灾','视频监测')
+            AND difference > 48
+            AND company_code IN ('10357','10356','10354','10352','10349','10350','10347','10346','10334','10188',
+            '10343','10348','10331','10320','10320','10164','10071','10345','10144','10064','10336','10131','10205',
+            '10340','10339','10225','10323','10320','10134','10337','10226','10214','10160','10076','10079','10078',
+            '10215','10324','10324','10154','10106','10121','10067','10325','10323','10322','10320','10128','10314',
+            '10315','10312','10222','10077','10146','10151','10232','10116','10114','10122','10166','10353','10358',
+            '10359','10361','10360','10140','10362','10206','10355','10105','10338','10318','10367','10124','10365',
+            '10363','10368','10371','10341','10375','10373','10126','10374','10376','10378')
+        </where>
+        ORDER BY company_code ASC
     </select>
 
 </mapper>

+ 2 - 2
service-park/service-park-biz/src/main/java/com/usky/park/MybatisGenerator.java

@@ -32,7 +32,7 @@ public class MybatisGenerator {
         projectPath+="/"+model;
         gc.setOutputDir(projectPath+ "/src/main/java");  //生成路径(一般都是生成在此项目的src/main/java下面)
         //修改为自己的名字
-        gc.setAuthor("zyj"); //设置作者
+        gc.setAuthor("fu"); //设置作者
         gc.setOpen(false);
         gc.setFileOverride(true); //第二次生成会把第一次生成的覆盖掉
         gc.setServiceName("%sService"); //生成的service接口名字首字母是否为I,这样设置就没有
@@ -70,7 +70,7 @@ public class MybatisGenerator {
         // strategy.setTablePrefix("t_"); // 表名前缀
         strategy.setEntityLombokModel(true); //使用lombok
         //修改自己想要生成的表
-        strategy.setInclude("event_eg");  // 逆向工程使用的表   如果要生成多个,这里可以传入String[]
+        strategy.setInclude("data_st_history");  // 逆向工程使用的表   如果要生成多个,这里可以传入String[]
         mpg.setStrategy(strategy);
 
         // 关闭默认 xml 生成,调整生成 至 根目录

+ 44 - 0
service-park/service-park-biz/src/main/java/com/usky/park/controller/web/DataStHistoryController.java

@@ -0,0 +1,44 @@
+package com.usky.park.controller.web;
+
+
+import com.usky.park.domain.DataStHistory;
+import com.usky.park.mapper.DataStHistoryMapper;
+import com.usky.park.service.DataStHistoryService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 无人驿站历史数据 前端控制器
+ * </p>
+ *
+ * @author fu
+ * @since 2023-11-29
+ */
+@RestController
+@RequestMapping("/dataStHistory")
+public class DataStHistoryController {
+
+    @Autowired
+    private DataStHistoryService dataStHistoryService;
+
+    @Autowired
+    private DataStHistoryMapper dataStHistoryMapper;
+
+
+    /**
+     * 新增
+     *
+     * @param dataStHistory
+     * @return
+     */
+    @PostMapping("/add")
+    public void add(@RequestBody DataStHistory dataStHistory,
+                    @RequestHeader("appKey") String appKey) {
+        dataStHistoryService.add(dataStHistory, appKey);
+    }
+
+}
+

+ 82 - 0
service-park/service-park-biz/src/main/java/com/usky/park/domain/DataStHistory.java

@@ -0,0 +1,82 @@
+package com.usky.park.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.influxdb.annotation.Column;
+
+/**
+ * <p>
+ * 无人驿站历史数据
+ * </p>
+ *
+ * @author fu
+ * @since 2023-11-29
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class DataStHistory implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 订单编号
+     */
+    private String packNo;
+
+    /**
+     * 快递名称
+     */
+    private String expressName;
+
+    /**
+     * 接收人电话
+     */
+    private String receiverPhone;
+
+    /**
+     * 联系电话
+     */
+    private String contactPhone;
+
+    /**
+     * 取件地址
+     */
+    private String pickupAddress;
+
+    /**
+     * 取件编号
+     */
+    private String pickupCode;
+
+    /**
+     * 描述内容
+     */
+    private String content;
+
+    /**
+     * 驿站标识
+     */
+    private String appKey;
+
+    /**
+     * 数据时间
+     */
+    private LocalDateTime dataTime;
+
+    /**
+     * 订单状态;0:已推送,1:未推送
+     */
+    private Integer packStatus;
+
+
+}

+ 20 - 0
service-park/service-park-biz/src/main/java/com/usky/park/mapper/DataStHistoryMapper.java

@@ -0,0 +1,20 @@
+package com.usky.park.mapper;
+
+import com.usky.park.domain.DataStHistory;
+import com.usky.common.mybatis.core.CrudMapper;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 无人驿站历史数据 Mapper 接口
+ * </p>
+ *
+ * @author fu
+ * @since 2023-11-29
+ */
+@Repository
+public interface DataStHistoryMapper extends CrudMapper<DataStHistory> {
+    List<DataStHistory> checkPackNo(String packNo);
+}

+ 16 - 0
service-park/service-park-biz/src/main/java/com/usky/park/service/DataStHistoryService.java

@@ -0,0 +1,16 @@
+package com.usky.park.service;
+
+import com.usky.park.domain.DataStHistory;
+import com.usky.common.mybatis.core.CrudService;
+
+/**
+ * <p>
+ * 无人驿站历史数据 服务类
+ * </p>
+ *
+ * @author fu
+ * @since 2023-11-29
+ */
+public interface DataStHistoryService extends CrudService<DataStHistory> {
+    void add(DataStHistory dataStHistory,String appKey);
+}

+ 48 - 0
service-park/service-park-biz/src/main/java/com/usky/park/service/impl/DataStHistoryServiceImpl.java

@@ -0,0 +1,48 @@
+package com.usky.park.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.usky.common.core.exception.BusinessException;
+import com.usky.park.domain.DataStHistory;
+import com.usky.park.mapper.DataStHistoryMapper;
+import com.usky.park.service.DataStHistoryService;
+import com.usky.common.mybatis.core.AbstractCrudService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 无人驿站历史数据 服务实现类
+ * </p>
+ *
+ * @author fu
+ * @since 2023-11-29
+ */
+@Service
+public class DataStHistoryServiceImpl extends AbstractCrudService<DataStHistoryMapper, DataStHistory> implements DataStHistoryService {
+    @Autowired
+    private DataStHistoryMapper dataStHistoryMapper;
+
+    @Override
+    public void add(DataStHistory dataStHistory, String appKey) {
+
+        String appKeyLo = "6C57702BB93E9BA136B9337F0C1BA1BC";
+
+        if (!appKey.equals(appKeyLo)) {
+            throw new IllegalArgumentException("appKey不正确!");
+        } else if ((dataStHistoryMapper.checkPackNo(dataStHistory.getPackNo())).size() > 0) {
+            throw new BusinessException("订单编号已存在!请再次核对");
+        } else {
+            dataStHistory.setAppKey(appKey);
+        }
+
+        LocalDateTime dataTime = LocalDateTime.now();
+        Integer packStatus = 1;
+        dataStHistory.setDataTime(dataTime);
+        dataStHistory.setPackStatus(packStatus);
+
+        baseMapper.insert(dataStHistory);
+    }
+}

+ 28 - 0
service-park/service-park-biz/src/main/resources/mapper/park/DataStHistoryMapper.xml

@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.usky.park.mapper.DataStHistoryMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.usky.park.domain.DataStHistory">
+        <id column="id" property="id" />
+        <result column="pack_no" property="packNo" />
+        <result column="express_name" property="expressName" />
+        <result column="receiver_phone" property="receiverPhone" />
+        <result column="contact_phone" property="contactPhone" />
+        <result column="pickup_address" property="pickupAddress" />
+        <result column="pickup_code" property="pickupCode" />
+        <result column="content" property="content" />
+        <result column="app_key" property="appKey" />
+        <result column="data_time" property="dataTime" />
+        <result column="pack_status" property="packStatus" />
+    </resultMap>
+
+    <select id="checkPackNo" resultType="com.usky.park.domain.DataStHistory">
+        <if test="packNo != null">
+            SELECT *
+            FROM data_st_history
+            WHERE pack_no = #{packNo}
+        </if>
+    </select>
+
+</mapper>