Quellcode durchsuchen

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

gez vor 1 Jahr
Ursprung
Commit
417dfbe779
45 geänderte Dateien mit 777 neuen und 117 gelöschten Zeilen
  1. 3 2
      service-backend/service-backend-api/src/main/java/com/usky/backend/client/DataQueryClient.java
  2. 5 0
      service-backend/service-backend-api/src/main/java/com/usky/backend/domain/DataTVStatisticResponseVO.java
  3. 10 0
      service-backend/service-backend-api/src/main/java/com/usky/backend/domain/DeviceAttributeVO.java
  4. 10 0
      service-backend/service-backend-api/src/main/java/com/usky/backend/domain/ProductTVAttributeVO.java
  5. 0 10
      service-backend/service-backend-biz/src/main/java/com/usky/backend/controller/DataQueryController.java
  6. 2 3
      service-backend/service-backend-biz/src/main/java/com/usky/backend/controller/api/DataQueryApi.java
  7. 1 0
      service-backend/service-backend-biz/src/main/java/com/usky/backend/service/DataQueryService.java
  8. 0 1
      service-fire/service-fire-biz/pom.xml
  9. 4 4
      service-fire/service-fire-biz/src/main/java/com/usky/fire/service/impl/PatrolInspectionPlanServiceImpl.java
  10. 1 1
      service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/DeviceHttpController.java
  11. 3 3
      service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/DmpDataOverviewController.java
  12. 2 2
      service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/DmpProductInfoController.java
  13. 6 6
      service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/TaskController.java
  14. 2 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/DmpDeviceInfoMapper.java
  15. 8 16
      service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/DmpDeviceStatusMapper.java
  16. 2 1
      service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/DmpProductInfoMapper.java
  17. 1 1
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/DmpDataOverviewService.java
  18. 1 1
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/DmpProductInfoService.java
  19. 3 1
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/BaseAlarmServiceImpl.java
  20. 2 2
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/DmpDataOverviewServiceImpl.java
  21. 9 0
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/DmpDeviceInfoServiceImpl.java
  22. 2 2
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/DmpProductInfoServiceImpl.java
  23. 22 22
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/job/DmpDataOverviewJob.java
  24. 2 3
      service-iot/service-iot-biz/src/main/java/com/usky/iot/service/vo/DmpDataOverviewVO.java
  25. 17 2
      service-iot/service-iot-biz/src/main/resources/mapper/iot/DmpDeviceInfoMapper.xml
  26. 12 24
      service-iot/service-iot-biz/src/main/resources/mapper/iot/DmpDeviceStatusMapper.xml
  27. 8 1
      service-iot/service-iot-biz/src/main/resources/mapper/iot/DmpProductInfoMapper.xml
  28. 3 3
      service-website/service-website-biz/src/main/java/com/usky/website/MybatisGenerator.java
  29. 3 1
      service-website/service-website-biz/src/main/java/com/usky/website/controller/web/SiteArticleController.java
  30. 79 0
      service-website/service-website-biz/src/main/java/com/usky/website/controller/web/SiteReviewController.java
  31. 5 0
      service-website/service-website-biz/src/main/java/com/usky/website/domain/SiteArticle.java
  32. 96 0
      service-website/service-website-biz/src/main/java/com/usky/website/domain/SiteReview.java
  33. 43 0
      service-website/service-website-biz/src/main/java/com/usky/website/interceptor/RedisInterceptor.java
  34. 16 0
      service-website/service-website-biz/src/main/java/com/usky/website/mapper/SiteReviewMapper.java
  35. 1 1
      service-website/service-website-biz/src/main/java/com/usky/website/service/SiteArticleService.java
  36. 29 0
      service-website/service-website-biz/src/main/java/com/usky/website/service/SiteReviewService.java
  37. 49 0
      service-website/service-website-biz/src/main/java/com/usky/website/service/config/ExecutorConfig.java
  38. 25 0
      service-website/service-website-biz/src/main/java/com/usky/website/service/config/interceptor/WebConfig.java
  39. 28 3
      service-website/service-website-biz/src/main/java/com/usky/website/service/impl/SiteArticleServiceImpl.java
  40. 1 1
      service-website/service-website-biz/src/main/java/com/usky/website/service/impl/SiteCategoryServiceImpl.java
  41. 118 0
      service-website/service-website-biz/src/main/java/com/usky/website/service/impl/SiteReviewServiceImpl.java
  42. 81 0
      service-website/service-website-biz/src/main/java/com/usky/website/service/vo/SiteReviewExportVO.java
  43. 38 0
      service-website/service-website-biz/src/main/java/com/usky/website/service/vo/SiteReviewRequestVO.java
  44. 1 0
      service-website/service-website-biz/src/main/resources/mapper/website/SiteArticleMapper.xml
  45. 23 0
      service-website/service-website-biz/src/main/resources/mapper/website/SiteReviewMapper.xml

+ 3 - 2
service-backend/service-backend-api/src/main/java/com/usky/backend/client/DataQueryClient.java

@@ -5,6 +5,7 @@ import com.usky.backend.domain.request.LastQueryVo;
 import com.usky.backend.domain.response.LastResultVo;
 import com.usky.common.core.bean.ApiResult;
 import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.http.MediaType;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
@@ -13,8 +14,8 @@ import java.util.Map;
 @FeignClient(contextId = "dataQueryClient", value = "usky-backend")
 public interface DataQueryClient {
 
-    @RequestMapping(value = "status")
-    List<StatusVO> status();
+    @GetMapping(value = "status")
+    ApiResult<List<StatusVO>> status();
 
     @RequestMapping(value = "deviceDataTotal")
     List<Map<String,Object>> deviceDataTotal(@RequestBody DataTotalRequestVO requestVO);

+ 5 - 0
service-backend/service-backend-api/src/main/java/com/usky/backend/domain/DataTVStatisticResponseVO.java

@@ -10,6 +10,11 @@ public class DataTVStatisticResponseVO implements Serializable {
     //告警数
     private Integer alarmNum;
 
+    /**
+     * 故障数
+     */
+    private Integer faultNum;
+
     //离线数
     private Integer offlineNum;
 

+ 10 - 0
service-backend/service-backend-api/src/main/java/com/usky/backend/domain/DeviceAttributeVO.java

@@ -16,4 +16,14 @@ public class DeviceAttributeVO implements Serializable {
     private String unit;
     //上报时间
     private String time;
+
+    /**
+     * 最大值
+     */
+    private float maximum;
+
+    /**
+     * 最小值
+     */
+    private float minimum;
 }

+ 10 - 0
service-backend/service-backend-api/src/main/java/com/usky/backend/domain/ProductTVAttributeVO.java

@@ -26,6 +26,16 @@ public class ProductTVAttributeVO implements Serializable {
      */
     private String attributeUnit;
 
+    /**
+     * 最大值
+     */
+    private float maximum;
+
+    /**
+     * 最小值
+     */
+    private float minimum;
+
     /**
      * 产品编码
      */

+ 0 - 10
service-backend/service-backend-biz/src/main/java/com/usky/backend/controller/DataQueryController.java

@@ -71,15 +71,5 @@ public class DataQueryController {
         return ApiResult.success(dataQueryService.last(lastQueryVo));
     }
 
-    /**
-     * 查询设备状态
-     * @return
-     */
-    @GetMapping("status")
-    @ApiOperation(value = "查询设备状态",response = List.class)
-    public ApiResult<List<StatusVO>> status(){
-        return ApiResult.success(dataQueryService.status());
-    }
-
 }
 

+ 2 - 3
service-backend/service-backend-biz/src/main/java/com/usky/backend/controller/api/DataQueryApi.java

@@ -26,9 +26,8 @@ public class DataQueryApi implements DataQueryClient {
     private DataQueryService dataQueryService;
 
     @Override
-    public List<StatusVO> status(){
-        List<StatusVO> list = dataQueryService.status();
-        return list;
+    public ApiResult<List<StatusVO>> status(){
+        return ApiResult.success(dataQueryService.status());
     }
 
     @Override

+ 1 - 0
service-backend/service-backend-biz/src/main/java/com/usky/backend/service/DataQueryService.java

@@ -10,6 +10,7 @@ import com.usky.backend.domain.DataAverageExportVO;
 import com.usky.backend.domain.DataAverageRequestVO;
 import com.usky.backend.domain.DataAverageResponseVO;
 import com.usky.backend.domain.DataTotalRequestVO;
+import org.springframework.web.bind.annotation.GetMapping;
 
 import java.util.List;
 import java.util.Map;

+ 0 - 1
service-fire/service-fire-biz/pom.xml

@@ -88,7 +88,6 @@
             <artifactId>itextpdf</artifactId>
             <version>5.4.3</version>
         </dependency>
-
     </dependencies>
 
     <build>

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

@@ -111,7 +111,7 @@ public class PatrolInspectionPlanServiceImpl extends AbstractCrudService<PatrolI
                 patrolInspectionAreaVo.setSiteCount(0);
                 patrolInspectionAreaVo.setPlanCount(0);
                 for (int j = 0; j < dataCountVoList.size(); j++) {
-                    if (patrolInspectionAreaList.get(i).getId() == dataCountVoList.get(j).getId()) {
+                    if (patrolInspectionAreaList.get(i).getId().equals(dataCountVoList.get(j).getId())) {
                         patrolInspectionAreaVo.setPlanCount(dataCountVoList.get(j).getListCount());
                     }
                 }
@@ -663,7 +663,7 @@ public class PatrolInspectionPlanServiceImpl extends AbstractCrudService<PatrolI
             planScheduleVo.setPersonnelId(planScheduleList.get(i).getPersonnelId());
             planScheduleVo.setPlanId(planScheduleList.get(i).getPlanId());
             for (int j = 0; j < personnelList.size(); j++) {
-                if (planScheduleList.get(i).getPersonnelId() == personnelList.get(j).getId()) {
+                if (planScheduleList.get(i).getPersonnelId().equals(personnelList.get(j).getId())) {
                     planScheduleVo.setPersonnelName(personnelList.get(j).getName());
                 }
             }
@@ -693,7 +693,7 @@ public class PatrolInspectionPlanServiceImpl extends AbstractCrudService<PatrolI
             if (planType == 1) {
                 List<PlanScheduleVo> list2 = new ArrayList<>();
                 for (int j = 0; j < list.size(); j++) {
-                    if (patrolInspectionPlanSonList.get(i).getId() == list.get(j).getPlanId()) {
+                    if (patrolInspectionPlanSonList.get(i).getId().equals(list.get(j).getPlanId())) {
                         list.get(j).setWeekOne(patrolInspectionPlanSonList.get(i).getRestDay().contains("星期一") ? true : false);
                         list.get(j).setWeekTwo(patrolInspectionPlanSonList.get(i).getRestDay().contains("星期二") ? true : false);
                         list.get(j).setWeekThree(patrolInspectionPlanSonList.get(i).getRestDay().contains("星期三") ? true : false);
@@ -707,7 +707,7 @@ public class PatrolInspectionPlanServiceImpl extends AbstractCrudService<PatrolI
                 patrolInspectionPlanDataVo.setChildrenList(list2);
             } else if (planType == 2) {
                 for (int j = 0; j < list.size(); j++) {
-                    if (patrolInspectionPlanSonList.get(i).getId() == list.get(j).getPlanId()) {
+                    if (patrolInspectionPlanSonList.get(i).getId().equals(list.get(j).getPlanId())) {
                         patrolInspectionPlanDataVo.setPersonneName(list.get(j).getPersonnelName());
                         patrolInspectionPlanDataVo.setPersonneId(list.get(j).getPersonnelId());
                     }

+ 1 - 1
service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/DeviceHttpController.java

@@ -22,7 +22,7 @@ public class DeviceHttpController {
     @Autowired
     private DmpDataInfoService dmpDataInfoService;
 
-    @GetMapping("/status")
+    @GetMapping(value = "/status")
     public ApiResult<Void> status(){
         baseAlarmService.status();
         return ApiResult.success();

+ 3 - 3
service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/DmpDataOverviewController.java

@@ -39,16 +39,16 @@ public class DmpDataOverviewController {
      * 集合
      * @param startTime 开始时间
      * @param endTime 结束时间
-     * @param productId 产品id
+     * @param tenantId 租户id
      * @param type 类型1日2月
      * @return
      */
     @GetMapping("/list")
     public ApiResult<List<DmpDataOverview>> list(@RequestParam(required = false) Date startTime,
                                       @RequestParam(required = false) Date endTime,
-                                      @RequestParam(required = false) Integer productId,
+                                      @RequestParam(required = false) Integer tenantId,
                                       @RequestParam(required = false) Integer type){
-        return ApiResult.success(dmpDataOverviewService.list(startTime, endTime, productId, type));
+        return ApiResult.success(dmpDataOverviewService.list(startTime, endTime, tenantId, type));
     }
 }
 

+ 2 - 2
service-iot/service-iot-biz/src/main/java/com/usky/iot/controller/web/DmpProductInfoController.java

@@ -80,8 +80,8 @@ public class DmpProductInfoController {
      * @return
      */
     @GetMapping("/collect")
-    public ApiResult<List<Map<String,Object>>> collect(){
-        return ApiResult.success(dmpProductInfoService.collect());
+    public ApiResult<List<Map<String,Object>>> collect(@RequestParam(value = "tenantId", required = false) Integer tenantId){
+        return ApiResult.success(dmpProductInfoService.collect(tenantId));
     }
 
     /**

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

@@ -37,16 +37,16 @@ public class TaskController implements ApplicationContextAware {
         context = applicationContext;
     }
 
-    @Scheduled(cron = "0 0 1 * * ? ") //每天凌晨1点执行
+    @Scheduled(cron = "0 30 23 * * ? ") //每天23点30分执行
     public void task() {
         System.out.println(Thread.currentThread().getName() + "定时任务执行中");
         dmpDataOverviewJob.execute();
     }
-//    @Scheduled(cron = "0 0 22 * * ? ") //每天22点执行
-//    public void task1() {
-//        System.out.println(Thread.currentThread().getName() + "定时任务执行中");
-//        baseAlarmService.status();
-//    }
+    @Scheduled(cron = "0 0 23 * * ? ") //每天23点执行
+    public void task1() {
+        System.out.println(Thread.currentThread().getName() + "定时任务执行中");
+        baseAlarmService.status();
+    }
 
     @Scheduled(cron = "0 30 * * * ? ") //每天凌晨0点30分执行
     public void task2() {

+ 2 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/DmpDeviceInfoMapper.java

@@ -31,6 +31,8 @@ public interface DmpDeviceInfoMapper extends CrudMapper<DmpDeviceInfo> {
 
     Integer baseAlarmCount(@Param("deviceIdList") List<String> deviceIdList);
 
+    Integer baseFaultCount(@Param("deviceIdList") List<String> deviceIdList);
+
     Integer deviceOfflineCount(@Param("deviceIdList") List<String> deviceIdList);
 
     List<BaseAlarm> baseAlarmList(@Param("deviceIdList") List<String> deviceIdList);

+ 8 - 16
service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/DmpDeviceStatusMapper.java

@@ -24,27 +24,19 @@ import java.util.List;
 public interface DmpDeviceStatusMapper extends CrudMapper<DmpDeviceStatus> {
 
 
-    List<DmpDataOverviewVO> getDeviceStatusCollect(@Param("productId") Integer productId,
-                                                   @Param("startTime") Date startTime,
-                                                   @Param("endTime") Date endTime,
-                                                   @Param("tenantId") Integer tenantId);
+    List<DmpDataOverviewVO> getDeviceStatusCollect(@Param("startTime") Date startTime,
+                                                   @Param("endTime") Date endTime);
 
 
-    DmpDataOverviewVO getAllCollect(@Param("productId") Integer productId,
-                                             @Param("startTime") Date startTime,
-                                             @Param("endTime") Date endTime,
-                                    @Param("tenantId") Integer tenantId);
+    DmpDataOverviewVO getAllCollect(@Param("startTime") Date startTime,
+                                             @Param("endTime") Date endTime);
 
 
-    List<DmpDataOverviewVO> getMonthHyCollect(@Param("productId") Integer productId,
-                                               @Param("startTime") Date startTime,
-                                               @Param("endTime") Date endTime,
-                                              @Param("tenantId") Integer tenantId);
+    List<DmpDataOverviewVO> getMonthHyCollect(@Param("startTime") Date startTime,
+                                               @Param("endTime") Date endTime);
 
-    DmpDataOverviewVO getAllMonthHyCollect(@Param("productId") Integer productId,
-                                            @Param("startTime") Date startTime,
-                                            @Param("endTime") Date endTime,
-                                           @Param("tenantId") Integer tenantId);
+    DmpDataOverviewVO getAllMonthHyCollect(@Param("startTime") Date startTime,
+                                            @Param("endTime") Date endTime);
 
 
 }

+ 2 - 1
service-iot/service-iot-biz/src/main/java/com/usky/iot/mapper/DmpProductInfoMapper.java

@@ -2,6 +2,7 @@ package com.usky.iot.mapper;
 
 import com.usky.common.mybatis.core.CrudMapper;
 import com.usky.iot.domain.DmpProductInfo;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 import java.util.Map;
@@ -19,5 +20,5 @@ public interface DmpProductInfoMapper extends CrudMapper<DmpProductInfo> {
 
 
 
-    List<Map<String,Object>> selectCollect();
+    List<Map<String,Object>> selectCollect(@Param("tenantId") Integer tenantId);
 }

+ 1 - 1
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/DmpDataOverviewService.java

@@ -16,6 +16,6 @@ import java.util.List;
  */
 public interface DmpDataOverviewService extends CrudService<DmpDataOverview> {
 
-    List<DmpDataOverview> list(Date startTime,Date endTime,Integer productId,Integer type);
+    List<DmpDataOverview> list(Date startTime,Date endTime,Integer tenantId,Integer type);
 
 }

+ 1 - 1
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/DmpProductInfoService.java

@@ -29,7 +29,7 @@ public interface DmpProductInfoService extends CrudService<DmpProductInfo> {
 
     boolean remove(Integer id);
 
-    List<Map<String,Object>> collect();
+    List<Map<String,Object>> collect(Integer tenantId);
 
     /**
      * 设备状态统计

+ 3 - 1
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/BaseAlarmServiceImpl.java

@@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.usky.backend.client.DataQueryClient;
 import com.usky.backend.domain.StatusVO;
+import com.usky.common.core.bean.ApiResult;
 import com.usky.common.core.bean.CommonPage;
 import com.usky.common.core.exception.BusinessException;
 import com.usky.common.security.utils.SecurityUtils;
@@ -608,7 +609,8 @@ public class BaseAlarmServiceImpl extends AbstractCrudService<BaseAlarmMapper, B
 
     @Override
     public void status(){
-        List<StatusVO> list = dataQueryClient.status();
+        ApiResult<List<StatusVO>> resultList = dataQueryClient.status();
+        List<StatusVO> list = resultList.getData();
         if(CollectionUtils.isNotEmpty(list)){
             List<String> devList = new ArrayList<>();
             for(int i=0;i<list.size();i++){

+ 2 - 2
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/DmpDataOverviewServiceImpl.java

@@ -29,10 +29,10 @@ public class DmpDataOverviewServiceImpl extends AbstractCrudService<DmpDataOverv
 
 
     @Override
-    public List<DmpDataOverview> list(Date startTime, Date endTime, Integer productId, Integer type) {
+    public List<DmpDataOverview> list(Date startTime, Date endTime, Integer tenantId, Integer type) {
         LambdaQueryWrapper<DmpDataOverview> queryWrapper = Wrappers.lambdaQuery();
         queryWrapper.between(null != startTime && null != endTime, DmpDataOverview::getCreatedTime, startTime, endTime)
-                .eq(null != productId, DmpDataOverview::getProductId, productId)
+                .eq(null != tenantId, DmpDataOverview::getTenantId, tenantId)
                 .eq(null != type, DmpDataOverview::getCycleType, type);
         List<DmpDataOverview> list = this.list(queryWrapper);
         Optional.ofNullable(type)

+ 9 - 0
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/DmpDeviceInfoServiceImpl.java

@@ -43,6 +43,7 @@ import sun.net.dns.ResolverConfiguration;
 import javax.servlet.ServletOutputStream;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
+import java.text.DecimalFormat;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
@@ -659,6 +660,12 @@ public class DmpDeviceInfoServiceImpl extends AbstractCrudService<DmpDeviceInfoM
                                             if(Objects.nonNull(attributeVOList.get(k).getAttributeUnit())){
                                                 attributeVO.setUnit(attributeVOList.get(k).getAttributeUnit());
                                             }
+                                            if(Objects.nonNull(attributeVOList.get(k).getMaximum())){
+                                                attributeVO.setMaximum(Math.round(attributeVOList.get(k).getMaximum()*100)/100f);
+                                            }
+                                            if(Objects.nonNull(attributeVOList.get(k).getMinimum())){
+                                                attributeVO.setMinimum(Math.round(attributeVOList.get(k).getMinimum()*100)/100f);
+                                            }
                                             break;
                                         }
                                     }
@@ -696,9 +703,11 @@ public class DmpDeviceInfoServiceImpl extends AbstractCrudService<DmpDeviceInfoM
                 deviceIdList.add(list1.get(i).getDeviceId());
             }
             Integer alarmCount = baseMapper.baseAlarmCount(deviceIdList);
+            Integer faultCount = baseMapper.baseFaultCount(deviceIdList);
             Integer offlineCount = baseMapper.deviceOfflineCount(deviceIdList);
             DataTVStatisticResponseVO responseVO = new DataTVStatisticResponseVO();
             responseVO.setAlarmNum(alarmCount);
+            responseVO.setFaultNum(faultCount);
             responseVO.setOfflineNum(offlineCount);
             list.add(responseVO);
         }

+ 2 - 2
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/impl/DmpProductInfoServiceImpl.java

@@ -249,8 +249,8 @@ public class DmpProductInfoServiceImpl extends AbstractCrudService<DmpProductInf
     }
 
     @Override
-    public List<Map<String, Object>> collect() {
-        return baseMapper.selectCollect();
+    public List<Map<String, Object>> collect(Integer tenantId) {
+        return baseMapper.selectCollect(tenantId);
     }
 
     @Override

+ 22 - 22
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/job/DmpDataOverviewJob.java

@@ -48,35 +48,35 @@ public class DmpDataOverviewJob {
         Date date4 = DateUtils.setDays(date3, 1);
         //产品日
         List<DmpDataOverview> dmpDataOverviews = new ArrayList<>();
-        List<DmpDataOverviewVO> list = getListMap(null, dayStartTime, dayEndTime);
+        List<DmpDataOverviewVO> list = getListMap(dayStartTime, dayEndTime);
         //计算产品活跃占比
         checkRadio(list);
         for (DmpDataOverviewVO dvo : list) {
             DmpDataOverview dmpDataOverview = new DmpDataOverview();
             dmpDataOverview.setCreatedTime(date3);
-            dmpDataOverview.setProductId(dvo.getProductId());
+            dmpDataOverview.setTenantId(dvo.getTenantId());
             dmpDataOverview.setDeviceNumber(JSON.toJSONString(dvo));
             dmpDataOverviews.add(dmpDataOverview);
         }
         dmpDataOverviewService.saveBatch(dmpDataOverviews);
         //产品月
-        List<DmpDataOverviewVO> monthList = getListMap(null, firstDayOfMonth, lastDayOfMonth);
+        List<DmpDataOverviewVO> monthList = getListMap(firstDayOfMonth, lastDayOfMonth);
         //活跃产品月
-        List<DmpDataOverviewVO> hyList = getHyListMap(null, firstDayOfMonth, lastDayOfMonth);
+        List<DmpDataOverviewVO> hyList = getHyListMap(firstDayOfMonth, lastDayOfMonth);
         for (DmpDataOverviewVO dmpDataOverviewVO : monthList) {
-            hyList.stream().filter(hy -> Objects.equals(hy.getProductId(), dmpDataOverviewVO.getProductId()))
+            hyList.stream().filter(hy -> Objects.equals(hy.getTenantId(), dmpDataOverviewVO.getTenantId()))
                     .findFirst()
                     .ifPresent(hy -> dmpDataOverviewVO.setHyCount(hy.getHyCount()));
         }
         //统计全部时间数据
-        List<DmpDataOverviewVO> allList = getListMap(null, null, null);
+        List<DmpDataOverviewVO> allList = getListMap(null, null);
         //计算占比
         checkRadio(monthList);
         //查看对应月份数据是否存在
         List<DmpDataOverview> listByTimeAndIds = getListByTimeAndIds(monthList, firstDayOfMonth,lastDayOfMonth);
         for (DmpDataOverviewVO dmpDataOverviewVO : monthList) {
             DmpDataOverview dd = listByTimeAndIds.stream()
-                    .filter(dm -> dmpDataOverviewVO.getProductId().equals(dm.getProductId()) && DateUtils.isSameDay(dm.getCreatedTime(),date4))
+                    .filter(dm -> dmpDataOverviewVO.getTenantId().equals(dm.getTenantId()) && DateUtils.isSameDay(dm.getCreatedTime(),date4))
                     .findAny()
                     .map(dm -> {
                         dm.setDeviceNumber(JSON.toJSONString(dmpDataOverviewVO));
@@ -85,14 +85,14 @@ public class DmpDataOverviewJob {
                     .orElseGet(() -> {
                         DmpDataOverview dmpDataOverview = new DmpDataOverview();
                         dmpDataOverview.setDeviceNumber(JSON.toJSONString(dmpDataOverviewVO));
-                        dmpDataOverview.setProductId(dmpDataOverviewVO.getProductId());
+                        dmpDataOverview.setTenantId(dmpDataOverviewVO.getTenantId());
                         dmpDataOverview.setCreatedTime(date4);
                         dmpDataOverview.setCycleType(2);
                         listByTimeAndIds.add(dmpDataOverview);
                         return dmpDataOverview;
                     });
             allList.stream()
-                    .filter(dvo -> dvo.getProductId().equals(dd.getProductId()))
+                    .filter(dvo -> dvo.getTenantId().equals(dd.getTenantId()))
                     .findAny()
                     .ifPresent(dvo -> dd.setMiddleStatistic(JSON.toJSONString(dvo)));
         }
@@ -101,18 +101,18 @@ public class DmpDataOverviewJob {
 
     /**
      * 统计月信息
-     * @param productIds
+     * @param tenantIds
      * @param startTime
      * @param endTime
      * @return
      */
-    public List<DmpDataOverview> getListByTimeAndIds(List<DmpDataOverviewVO> productIds,Date startTime,Date endTime){
-        if (CollectionUtils.isNotEmpty(productIds)){
-            List<Integer> productId = productIds.stream()
-                    .map(DmpDataOverviewVO::getProductId)
+    public List<DmpDataOverview> getListByTimeAndIds(List<DmpDataOverviewVO> tenantIds,Date startTime,Date endTime){
+        if (CollectionUtils.isNotEmpty(tenantIds)){
+            List<Integer> tenantId = tenantIds.stream()
+                    .map(DmpDataOverviewVO::getTenantId)
                     .collect(Collectors.toList());
             LambdaQueryWrapper<DmpDataOverview> queryWrapper = Wrappers.lambdaQuery();
-            queryWrapper.in(DmpDataOverview::getProductId,productId)
+            queryWrapper.in(DmpDataOverview::getTenantId,tenantId)
                     .between(DmpDataOverview::getCreatedTime,startTime,endTime)
                     .eq(DmpDataOverview::getCycleType,2);
             return dmpDataOverviewService.list(queryWrapper);
@@ -121,23 +121,23 @@ public class DmpDataOverviewJob {
         }
     }
 
-    public List<DmpDataOverviewVO> getHyListMap(Integer productId,Date startTime,Date endTime){
-        List<DmpDataOverviewVO> list = dmpDeviceStatusMapper.getMonthHyCollect(productId, startTime, endTime, SecurityUtils.getTenantId());
-        DmpDataOverviewVO map = dmpDeviceStatusMapper.getAllMonthHyCollect(productId, startTime, endTime, SecurityUtils.getTenantId());
+    public List<DmpDataOverviewVO> getHyListMap(Date startTime,Date endTime){
+        List<DmpDataOverviewVO> list = dmpDeviceStatusMapper.getMonthHyCollect(startTime, endTime);
+        DmpDataOverviewVO map = dmpDeviceStatusMapper.getAllMonthHyCollect(startTime, endTime);
         joinList(list,map);
         return list;
     }
 
-    public List<DmpDataOverviewVO> getListMap(Integer productId,Date startTime,Date endTime){
-        List<DmpDataOverviewVO> list = dmpDeviceStatusMapper.getDeviceStatusCollect(productId, startTime, endTime, SecurityUtils.getTenantId());
+    public List<DmpDataOverviewVO> getListMap(Date startTime,Date endTime){
+        List<DmpDataOverviewVO> list = dmpDeviceStatusMapper.getDeviceStatusCollect(startTime, endTime);
         //全部产品日
-        DmpDataOverviewVO map = dmpDeviceStatusMapper.getAllCollect(productId, startTime, endTime, SecurityUtils.getTenantId());
+        DmpDataOverviewVO map = dmpDeviceStatusMapper.getAllCollect(startTime, endTime);
         joinList(list,map);
         return list;
     }
 
     public void joinList(List<DmpDataOverviewVO> list,DmpDataOverviewVO map){
-        Optional.ofNullable(map).ifPresent(map1 -> map.setProductId(0));
+        Optional.ofNullable(map).ifPresent(map1 -> map.setTenantId(0));
         list.add(map);
     }
 

+ 2 - 3
service-iot/service-iot-biz/src/main/java/com/usky/iot/service/vo/DmpDataOverviewVO.java

@@ -4,11 +4,10 @@ import lombok.Data;
 
 @Data
 public class DmpDataOverviewVO {
-
     /**
-     * 设备编号
+     * 租户Id
      */
-    private Integer productId;
+    private Integer tenantId;
 
     /**
      * 设备总数

+ 17 - 2
service-iot/service-iot-biz/src/main/resources/mapper/iot/DmpDeviceInfoMapper.xml

@@ -58,7 +58,7 @@
     </select>
 
     <select id="attributeList" resultType="com.usky.backend.domain.ProductTVAttributeVO">
-        select dpa.product_id as productId,dpa.attribute_code as attributeCode,dpa.attribute_name as attributeName,dpa.attribute_unit as attributeUnit,dpt.product_code as productCode
+        select dpa.product_id as productId,dpa.attribute_code as attributeCode,dpa.attribute_name as attributeName,dpa.attribute_unit as attributeUnit,dpa.maximum as maximum,dpa.minimum as minimum,dpt.product_code as productCode
         from dmp_product_attribute dpa
         left join dmp_product dpt
         on dpa.product_id = dpt.id
@@ -85,7 +85,22 @@
                 </foreach>
             </if>
             <if test="1 == 1">
-                and handle_status = 0
+                and handle_status = 0 and alarm_type != '815'
+            </if>
+        </where>
+    </select>
+    <select id="baseFaultCount" resultType="integer">
+        select count(*)
+        from base_alarm
+        <where>
+            <if test="deviceIdList != null and deviceIdList.size() > 0">
+                and device_id in
+                <foreach item="item" collection="deviceIdList" open="(" separator="," close=")">
+                    #{item}
+                </foreach>
+            </if>
+            <if test="1 == 1">
+                and handle_status = 0 and alarm_type = '815'
             </if>
         </where>
     </select>

+ 12 - 24
service-iot/service-iot-biz/src/main/resources/mapper/iot/DmpDeviceStatusMapper.xml

@@ -14,7 +14,7 @@
     </resultMap>
 
     <select id="getAllCollect" resultType="com.usky.iot.service.vo.DmpDataOverviewVO">
-        select ddi.product_id as productId,
+        select 0 as tenantId,
         count(*) as deviceCount,
         COUNT(to_days(last_online_time) = to_days(now()) or null) as hyCount,
         count(service_status = 2 or null) as jhCount,
@@ -29,17 +29,14 @@
                 and  ddi.created_time between #{startTime}
                 and #{endTime}
             </if>
-            <if test="productId != null">
-                and ddi.product_id = #{productId}
-            </if>
             <if test="1 == 1">
-                and ddi.delete_flag = 0 and ddi.tenant_id = #{tenantId}
+                and ddi.delete_flag = 0
             </if>
         </where>
     </select>
     <select id="getMonthHyCollect" resultType="com.usky.iot.service.vo.DmpDataOverviewVO">
-        select ddi.product_id as productId,
-        count(*) hyCount
+        select ddi.tenant_id as tenantId,
+        count(*) as hyCount
         from dmp_device ddi
         left join dmp_device_status dds
         on ddi.device_id  = dds.device_id and ddi.product_code = dds.product_code
@@ -48,18 +45,15 @@
                 and  dds.last_online_time between #{startTime}
                 and #{endTime}
             </if>
-            <if test="productId != null">
-                and ddi.product_id = #{productId}
-            </if>
             <if test="1 == 1">
-                and ddi.delete_flag = 0 and ddi.tenant_id = #{tenantId}
+                and ddi.delete_flag = 0
             </if>
         </where>
-        group by productId
+        group by tenantId
     </select>
     <select id="getAllMonthHyCollect" resultType="com.usky.iot.service.vo.DmpDataOverviewVO">
-        select ddi.product_id as productId,
-        count(*) hyCount
+        select 0 as tenantId,
+        count(*) as hyCount
         from dmp_device ddi
         left join dmp_device_status dds
         on ddi.device_id  = dds.device_id and ddi.product_code = dds.product_code
@@ -68,16 +62,13 @@
                 and  dds.last_online_time between #{startTime}
                 and #{endTime}
             </if>
-            <if test="productId != null">
-                and ddi.product_id = #{productId}
-            </if>
             <if test="1 == 1">
-                and ddi.delete_flag = 0 and ddi.tenant_id = #{tenantId}
+                and ddi.delete_flag = 0
             </if>
         </where>
     </select>
     <select id="getDeviceStatusCollect" resultType="com.usky.iot.service.vo.DmpDataOverviewVO">
-        select ddi.product_id as productId,
+        select ddi.tenant_id as tenantId,
         count(*) as deviceCount,
         COUNT(to_days(last_online_time) = to_days(now()) or null) as hyCount,
         count(service_status = 2 or null) as jhCount,
@@ -92,14 +83,11 @@
                 and  ddi.created_time between #{startTime}
                 and #{endTime}
             </if>
-            <if test="productId != null">
-                and ddi.product_id = #{productId}
-            </if>
             <if test="1 == 1">
-                and ddi.delete_flag = 0 and ddi.tenant_id = #{tenantId}
+                and ddi.delete_flag = 0
             </if>
         </where>
-        group by productId
+        group by tenantId
     </select>
 
 </mapper>

+ 8 - 1
service-iot/service-iot-biz/src/main/resources/mapper/iot/DmpProductInfoMapper.xml

@@ -32,7 +32,14 @@
         from dmp_product as dp
         inner join dmp_device as dd
         on dp.id = dd.product_id
-        where dp.delete_flag = 0
+        <where>
+            <if test="tenantId != null">
+                and dp.tenant_id = #{tenantId}
+            </if>
+            <if test="1 == 1">
+                and dp.delete_flag = 0
+            </if>
+        </where>
         group by product_name
     </select>
 

+ 3 - 3
service-website/service-website-biz/src/main/java/com/usky/website/MybatisGenerator.java

@@ -33,7 +33,7 @@ public class MybatisGenerator {
         projectPath+="/"+model;
         gc.setOutputDir(projectPath+ "/src/main/java");  //生成路径(一般都是生成在此项目的src/main/java下面)
         //修改为自己的名字
-        gc.setAuthor("ya"); //设置作者
+        gc.setAuthor("zyj"); //设置作者
         gc.setOpen(false);
         gc.setFileOverride(true); //第二次生成会把第一次生成的覆盖掉
         gc.setServiceName("%sService"); //生成的service接口名字首字母是否为I,这样设置就没有
@@ -43,7 +43,7 @@ public class MybatisGenerator {
         //2、数据源配置
         //修改数据源
         DataSourceConfig dsc = new DataSourceConfig();
-        dsc.setUrl("jdbc:mysql://101.133.214.75:3306/usky_website?useUnicode=true&serverTimezone=GMT&useSSL=false&characterEncoding=utf8");
+        dsc.setUrl("jdbc:mysql://172.16.120.165:3306/usky-website?useUnicode=true&serverTimezone=GMT&useSSL=false&characterEncoding=utf8");
         dsc.setDriverName("com.mysql.jdbc.Driver");
         dsc.setUsername("usky");
         dsc.setPassword("Yt#75Usky");
@@ -71,7 +71,7 @@ public class MybatisGenerator {
         // strategy.setTablePrefix("t_"); // 表名前缀
         strategy.setEntityLombokModel(true); //使用lombok
         //修改自己想要生成的表
-        strategy.setInclude(new String[]{"site_article","site_category"});  // 逆向工程使用的表   如果要生成多个,这里可以传入String[]
+        strategy.setInclude(new String[]{"site_review"});  // 逆向工程使用的表   如果要生成多个,这里可以传入String[]
         mpg.setStrategy(strategy);
 
         // 关闭默认 xml 生成,调整生成 至 根目录

+ 3 - 1
service-website/service-website-biz/src/main/java/com/usky/website/controller/web/SiteArticleController.java

@@ -35,10 +35,12 @@ public class SiteArticleController {
     @GetMapping("siteArticleList")
     public ApiResult<CommonPage<SiteArticle>> siteArticleList(@RequestParam(value = "categoryid", required = false) Integer categoryid,
                                                               @RequestParam(value = "id", required = false) Integer id,
+                                                              @RequestParam(value = "articleid", required = false) Integer articleid,
                                                               @RequestParam(value = "title", required = false) String title,
+                                                              @RequestParam(value = "order", required = false) String order,
                                                               @RequestParam(value = "pageNum", required = false, defaultValue = "1") Integer pageNum,
                                                               @RequestParam(value = "pageSize", required = false, defaultValue = "10") Integer pageSize) {
-        return ApiResult.success(siteArticleService.siteArticleList(categoryid, id, title, pageNum, pageSize));
+        return ApiResult.success(siteArticleService.siteArticleList(categoryid, id, articleid, title, order, pageNum, pageSize));
     }
 
     /**

+ 79 - 0
service-website/service-website-biz/src/main/java/com/usky/website/controller/web/SiteReviewController.java

@@ -0,0 +1,79 @@
+package com.usky.website.controller.web;
+
+
+import com.usky.common.core.bean.ApiResult;
+import com.usky.common.core.bean.CommonPage;
+import com.usky.common.core.utils.poi.ExcelUtil;
+import com.usky.website.domain.SiteReview;
+import com.usky.website.service.SiteReviewService;
+import com.usky.website.service.vo.SiteReviewExportVO;
+import com.usky.website.service.vo.SiteReviewRequestVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.stereotype.Controller;
+import retrofit2.http.POST;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.List;
+
+/**
+ * <p>
+ * 官网_客户信息反馈表 前端控制器
+ * </p>
+ *
+ * @author zyj
+ * @since 2024-01-12
+ */
+@RestController
+@RequestMapping("/siteReview")
+public class SiteReviewController {
+    @Autowired
+    private SiteReviewService siteReviewService;
+
+    /**
+     * 新增
+     *
+     * @param siteReview
+     * @return
+     */
+    @PostMapping
+    public ApiResult<Void> add(@RequestBody SiteReview siteReview){
+        siteReviewService.add(siteReview);
+        return ApiResult.success();
+    }
+
+    /**
+     * 分页
+     *
+     * @param requestVO
+     * @return
+     */
+    @PostMapping("page")
+    public ApiResult<CommonPage<SiteReview>> page(@RequestBody SiteReviewRequestVO requestVO){
+        return ApiResult.success(siteReviewService.page(requestVO));
+    }
+
+    /**
+     * 反馈填报
+     *
+     * @param siteReview
+     * @return
+     */
+    @PutMapping
+    public ApiResult<Void> edit(@RequestBody SiteReview siteReview){
+        siteReviewService.edit(siteReview);
+        return ApiResult.success();
+    }
+
+    @PostMapping("export")
+    public void export(@RequestBody SiteReviewRequestVO requestVO, HttpServletResponse response) throws IOException{
+        List<SiteReviewExportVO> list = siteReviewService.recordListExport(requestVO);
+        ExcelUtil<SiteReviewExportVO> util = new ExcelUtil<SiteReviewExportVO>(SiteReviewExportVO.class);
+        util.exportExcel(response,list,"客户信息反馈表","客户信息反馈");
+
+    }
+
+}
+

+ 5 - 0
service-website/service-website-biz/src/main/java/com/usky/website/domain/SiteArticle.java

@@ -83,6 +83,11 @@ public class SiteArticle implements Serializable {
      */
     private LocalDateTime modifydate;
 
+    /**
+     * 内容排序
+     */
+    private Integer sortindex;
+
     /**
      * 栏目名称
      */

+ 96 - 0
service-website/service-website-biz/src/main/java/com/usky/website/domain/SiteReview.java

@@ -0,0 +1,96 @@
+package com.usky.website.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;
+
+/**
+ * <p>
+ * 官网_客户信息反馈表
+ * </p>
+ *
+ * @author zyj
+ * @since 2024-01-12
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class SiteReview implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键id
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 平台名称
+     */
+    private String platName;
+
+    /**
+     * 咨询人
+     */
+    private String consultName;
+
+    /**
+     * 咨询人电话
+     */
+    private String consultPhone;
+
+    /**
+     * 邮箱
+     */
+    private String mail;
+
+    /**
+     * 公司
+     */
+    private String company;
+
+    /**
+     * 咨询内容
+     */
+    private String consultContent;
+
+    /**
+     * 状态;1:待反馈,2:已反馈
+     */
+    private Integer status;
+
+    /**
+     * 提交时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 处理人
+     */
+    private String handleName;
+
+    /**
+     * 处理内容
+     */
+    private String handleContent;
+
+    /**
+     * 处理时间
+     */
+    private LocalDateTime handleTime;
+
+    /**
+     * 组织结构ID
+     */
+    private Integer deptId;
+
+    /**
+     * 租户ID
+     */
+    private Integer tenantId;
+
+
+}

+ 43 - 0
service-website/service-website-biz/src/main/java/com/usky/website/interceptor/RedisInterceptor.java

@@ -0,0 +1,43 @@
+package com.usky.website.interceptor;
+
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Component;
+import org.springframework.web.servlet.HandlerInterceptor;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Map;
+import java.util.Set;
+
+@Component  //此处将其注入到容器中
+public class RedisInterceptor  implements HandlerInterceptor {
+
+    @Resource
+    RedisTemplate redisTemplate;
+
+    @Override
+    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+        //拦截每一次请求并获取请求的URL作为Key
+        String url = String.valueOf(request.getRequestURL());
+        Map<String,String[]> map = request.getParameterMap();
+        Set<String> keys = map.keySet();
+        for(String key : keys){
+            if(key.equals("id")){
+                String[] value = map.get(key);
+                if(StringUtils.isNotBlank(value[0])){
+                    //默认访问一次请求都会对该请求进行计数+1
+                    redisTemplate.opsForValue().increment(value[0]);
+                }
+
+                break;
+            }
+        }
+
+        //放行
+        return true;
+    }
+}

+ 16 - 0
service-website/service-website-biz/src/main/java/com/usky/website/mapper/SiteReviewMapper.java

@@ -0,0 +1,16 @@
+package com.usky.website.mapper;
+
+import com.usky.website.domain.SiteReview;
+import com.usky.common.mybatis.core.CrudMapper;
+
+/**
+ * <p>
+ * 官网_客户信息反馈表 Mapper 接口
+ * </p>
+ *
+ * @author zyj
+ * @since 2024-01-12
+ */
+public interface SiteReviewMapper extends CrudMapper<SiteReview> {
+
+}

+ 1 - 1
service-website/service-website-biz/src/main/java/com/usky/website/service/SiteArticleService.java

@@ -23,7 +23,7 @@ public interface SiteArticleService extends CrudService<SiteArticle> {
      * @param pageSize   每页条数
      * @return
      */
-    CommonPage<SiteArticle> siteArticleList(Integer categoryid, Integer id, String title, Integer pageNum, Integer pageSize);
+    CommonPage<SiteArticle> siteArticleList(Integer categoryid, Integer id, Integer articleid, String title, String order, Integer pageNum, Integer pageSize);
 
     /**
      * 官网-内容的新增

+ 29 - 0
service-website/service-website-biz/src/main/java/com/usky/website/service/SiteReviewService.java

@@ -0,0 +1,29 @@
+package com.usky.website.service;
+
+import com.usky.common.core.bean.CommonPage;
+import com.usky.website.domain.SiteReview;
+import com.usky.common.mybatis.core.CrudService;
+import com.usky.website.service.vo.SiteReviewExportVO;
+import com.usky.website.service.vo.SiteReviewRequestVO;
+import org.springframework.web.bind.annotation.RequestBody;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 官网_客户信息反馈表 服务类
+ * </p>
+ *
+ * @author zyj
+ * @since 2024-01-12
+ */
+public interface SiteReviewService extends CrudService<SiteReview> {
+    void add(SiteReview siteReview);
+
+    CommonPage<SiteReview> page(SiteReviewRequestVO requestVO);
+
+    void edit(SiteReview siteReview);
+
+    List<SiteReviewExportVO> recordListExport(SiteReviewRequestVO requestVO);
+
+}

+ 49 - 0
service-website/service-website-biz/src/main/java/com/usky/website/service/config/ExecutorConfig.java

@@ -0,0 +1,49 @@
+package com.usky.website.service.config;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+
+import java.util.concurrent.Executor;
+import java.util.concurrent.ThreadPoolExecutor;
+
+@Configuration
+@EnableAsync
+@Slf4j
+public class ExecutorConfig {
+
+    /** 核心线程数(默认线程数) */
+    private int corePoolSize = 10;
+    /** 最大线程数 */
+    private int maxPoolSize = 20;
+    /** 允许线程空闲时间(单位:默认为秒) */
+    private static final int keepAliveTime = 60;
+    /** 缓冲队列大小 */
+    private int queueCapacity = 10;
+
+    @Bean
+    public Executor asyncServiceExecutor(){
+        log.info("start asyncServiceExecutor++++++++++++++++++++++");
+        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
+        //配置核心线程数
+        executor.setCorePoolSize(corePoolSize);
+        //配置最大线程数
+        executor.setMaxPoolSize(maxPoolSize);
+        //配置空闲时间
+        executor.setKeepAliveSeconds(keepAliveTime);
+        //配置队列大小
+        executor.setQueueCapacity(queueCapacity);
+        //配置线程前缀名
+        executor.setThreadNamePrefix("async-service-");
+
+        // rejection-policy:当pool已经达到max size的时候,如何处理新任务
+        // CALLER_RUNS:不在新线程中执行任务,而是有调用者所在的线程来执行
+        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
+
+        //执行初始化
+        executor.initialize();
+        return executor;
+    }
+}

+ 25 - 0
service-website/service-website-biz/src/main/java/com/usky/website/service/config/interceptor/WebConfig.java

@@ -0,0 +1,25 @@
+package com.usky.website.service.config.interceptor;
+
+
+import com.usky.website.interceptor.RedisInterceptor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+//@Configuration告诉springboot这个类为配置类
+@Configuration
+public class WebConfig implements WebMvcConfigurer {
+
+    //从容器中取出RedisInterceptor
+    @Autowired
+    RedisInterceptor redisInterceptor;
+
+    @Override
+    public void addInterceptors(InterceptorRegistry registry) {
+        //注册拦截器
+        registry.addInterceptor(redisInterceptor)
+                .addPathPatterns("/siteArticle/siteArticleList");  //设置拦截路径, “/**”表示对所有请求都进行拦截
+//                .excludePathPatterns("/static");   //设置不拦截的路径,一般可以设置静态资源的访问路径....
+    }
+}

+ 28 - 3
service-website/service-website-biz/src/main/java/com/usky/website/service/impl/SiteArticleServiceImpl.java

@@ -2,6 +2,9 @@ package com.usky.website.service.impl;
 
 import cn.hutool.core.collection.CollectionUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -14,6 +17,7 @@ import com.usky.website.mapper.SiteArticleMapper;
 import com.usky.website.mapper.SiteCategoryMapper;
 import com.usky.website.service.SiteArticleService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 
 import java.time.LocalDateTime;
@@ -35,7 +39,7 @@ public class SiteArticleServiceImpl extends AbstractCrudService<SiteArticleMappe
     private SiteCategoryMapper siteCategoryMapper;
 
     @Override
-    public CommonPage<SiteArticle> siteArticleList(Integer categoryid, Integer id, String title, Integer pageNum, Integer pageSize) {
+    public CommonPage<SiteArticle> siteArticleList(Integer categoryid, Integer id, Integer articleid, String title, String order, Integer pageNum, Integer pageSize) {
         IPage<SiteArticle> page = new Page<>(pageNum, pageSize);
         List<Integer> categoryidList = new ArrayList<>();
         if (categoryid != null && categoryid != 0) {
@@ -53,6 +57,10 @@ public class SiteArticleServiceImpl extends AbstractCrudService<SiteArticleMappe
             }
         }
 
+        if(articleid != null){
+            this.updateArticleHits(articleid);
+        }
+
         LambdaQueryWrapper<SiteCategory> queryWrapper1 = Wrappers.lambdaQuery();
         queryWrapper1.eq(SiteCategory::getStatus, 1)
                 .in(CollectionUtil.isNotEmpty(categoryidList), SiteCategory::getId, categoryidList);
@@ -61,8 +69,13 @@ public class SiteArticleServiceImpl extends AbstractCrudService<SiteArticleMappe
         LambdaQueryWrapper<SiteArticle> queryWrapper = Wrappers.lambdaQuery();
         queryWrapper.in(CollectionUtil.isNotEmpty(categoryidList), SiteArticle::getCategoryid, categoryidList)
                 .eq(id != null, SiteArticle::getId, id)
-                .like(StringUtils.isNotBlank(title), SiteArticle::getTitle, title)
-                .orderByDesc(SiteArticle::getIstop, SiteArticle::getId);
+                .like(StringUtils.isNotBlank(title), SiteArticle::getTitle, title);
+        if(StringUtils.isNotBlank(order) && order.equals("sortindex")){
+            queryWrapper.orderByDesc(SiteArticle::getIstop).orderByAsc(SiteArticle::getSortindex, SiteArticle::getId);
+        }else{
+            queryWrapper.orderByDesc(SiteArticle::getIstop,SiteArticle::getCreatedate);
+        }
+
         page = this.page(page, queryWrapper);
 
         for (int i = 0; i < page.getRecords().size(); i++) {
@@ -91,4 +104,16 @@ public class SiteArticleServiceImpl extends AbstractCrudService<SiteArticleMappe
     public void delSiteArticle(Integer id) {
         this.removeById(id);
     }
+
+    //异步多线程调用
+    //更新官网_内容管理表中点击量字段值(每调用一次某个内容,就+1次对应表id的点击量字段值)
+    @Async("asyncServiceExecutor")
+    public void updateArticleHits(Integer articleid){
+        UpdateWrapper<SiteArticle> updateWrapper = Wrappers.update();
+        updateWrapper.setSql("hits = hits + 1")
+                .eq("id",articleid);
+
+        this.update(updateWrapper);
+
+    }
 }

+ 1 - 1
service-website/service-website-biz/src/main/java/com/usky/website/service/impl/SiteCategoryServiceImpl.java

@@ -108,7 +108,7 @@ public class SiteCategoryServiceImpl extends AbstractCrudService<SiteCategoryMap
 
     private List<SiteCategory> getChildrenData(SiteCategory root, List<SiteCategory> all) {
         List<SiteCategory> children = all.stream().filter(subjectVO ->
-                subjectVO.getPid().equals(root.getId()) && !root.getCategoryName().equals("产品服务") && !root.getCategoryName().equals("客户案例")
+                subjectVO.getPid().equals(root.getId())
         ).map(subjectVO -> {
             subjectVO.setChildren(getChildrenData(subjectVO, all));
             return subjectVO;

+ 118 - 0
service-website/service-website-biz/src/main/java/com/usky/website/service/impl/SiteReviewServiceImpl.java

@@ -0,0 +1,118 @@
+package com.usky.website.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.usky.common.core.bean.CommonPage;
+import com.usky.common.security.utils.SecurityUtils;
+import com.usky.website.domain.SiteReview;
+import com.usky.website.mapper.SiteReviewMapper;
+import com.usky.website.service.SiteReviewService;
+import com.usky.common.mybatis.core.AbstractCrudService;
+import com.usky.website.service.vo.SiteReviewExportVO;
+import com.usky.website.service.vo.SiteReviewRequestVO;
+import jdk.nashorn.internal.runtime.options.Option;
+import org.apache.el.stream.Optional;
+import org.apache.tomcat.jni.Local;
+import org.checkerframework.checker.units.qual.C;
+import org.springframework.stereotype.Service;
+import retrofit2.http.OPTIONS;
+
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * <p>
+ * 官网_客户信息反馈表 服务实现类
+ * </p>
+ *
+ * @author zyj
+ * @since 2024-01-12
+ */
+@Service
+public class SiteReviewServiceImpl extends AbstractCrudService<SiteReviewMapper, SiteReview> implements SiteReviewService {
+
+    @Override
+    public void add(SiteReview siteReview){
+        siteReview.setCreateTime(LocalDateTime.now());
+        siteReview.setStatus(1);
+        this.save(siteReview);
+    }
+
+    @Override
+    public CommonPage<SiteReview> page(SiteReviewRequestVO requestVO){
+        Integer current = requestVO.getCurrent();
+        Integer size = requestVO.getSize();
+        Integer id = requestVO.getId();
+        String platName = requestVO.getPlatName();
+        String startTime = requestVO.getStartTime();
+        String endTime = requestVO.getEndTime();
+
+        IPage<SiteReview> page = new Page<>(current,size);
+        LambdaQueryWrapper<SiteReview> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.eq(id != null,SiteReview::getId,id)
+                .like(StringUtils.isNotBlank(platName),SiteReview::getPlatName,platName)
+                .between(StringUtils.isNotBlank(startTime)&&StringUtils.isNotBlank(endTime),SiteReview::getCreateTime,startTime,endTime)
+                .orderByDesc(SiteReview::getId);
+        page = this.page(page,queryWrapper);
+
+        return new CommonPage<>(page.getRecords(),page.getTotal(),size,current);
+    }
+
+    @Override
+    public void edit(SiteReview siteReview){
+        siteReview.setHandleName(SecurityUtils.getLoginUser().getSysUser().getNickName());
+        siteReview.setHandleTime(LocalDateTime.now());
+        this.updateById(siteReview);
+
+    }
+
+    @Override
+    public List<SiteReviewExportVO> recordListExport(SiteReviewRequestVO requestVO){
+        List<SiteReviewExportVO> list = new ArrayList<>();
+
+        String platName = requestVO.getPlatName();
+        String startTime = requestVO.getStartTime();
+        String endTime = requestVO.getEndTime();
+        LambdaQueryWrapper<SiteReview> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.like(StringUtils.isNotBlank(platName),SiteReview::getPlatName,platName)
+                .between(StringUtils.isNotBlank(startTime)&&StringUtils.isNotBlank(endTime),SiteReview::getCreateTime,startTime,endTime)
+                .orderByDesc(SiteReview::getId);
+        List<SiteReview> list1 = this.list(queryWrapper);
+        if(CollectionUtils.isNotEmpty(list1)){
+            for (int i = 0; i < list1.size(); i++) {
+                SiteReviewExportVO exportVO = new SiteReviewExportVO();
+
+                exportVO.setPlatName(list1.get(i).getPlatName());
+                exportVO.setConsultName(list1.get(i).getConsultName());
+                exportVO.setConsultPhone(list1.get(i).getConsultPhone());
+                exportVO.setMail(list1.get(i).getMail());
+                exportVO.setCompany(list1.get(i).getCompany());
+                exportVO.setConsultContent(list1.get(i).getConsultContent());
+                exportVO.setStatus(list1.get(i).getStatus());
+                exportVO.setCreateTime(list1.get(i).getCreateTime());
+                if(Objects.nonNull(list1.get(i).getHandleName())){
+                    exportVO.setHandleName(list1.get(i).getHandleName());
+                }
+                if(Objects.nonNull(list1.get(i).getHandleContent())){
+                    exportVO.setHandleContent(list1.get(i).getHandleContent());
+                }
+                if(Objects.nonNull(list1.get(i).getHandleTime())){
+                    exportVO.setHandleTime(list1.get(i).getHandleTime());
+                }
+                list.add(exportVO);
+            }
+        }
+        return list;
+
+    }
+}
+
+
+
+

+ 81 - 0
service-website/service-website-biz/src/main/java/com/usky/website/service/vo/SiteReviewExportVO.java

@@ -0,0 +1,81 @@
+package com.usky.website.service.vo;
+
+import com.usky.common.core.annotation.Excel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class SiteReviewExportVO implements Serializable {
+    /**
+     * 平台名称
+     */
+    @Excel(name = "平台")
+    private String platName;
+
+    /**
+     * 咨询人
+     */
+    @Excel(name = "姓名")
+    private String consultName;
+
+    /**
+     * 咨询人电话
+     */
+    @Excel(name = "电话")
+    private String consultPhone;
+
+    /**
+     * 邮箱
+     */
+    @Excel(name = "邮箱")
+    private String mail;
+
+    /**
+     * 公司
+     */
+    @Excel(name = "公司")
+    private String company;
+
+    /**
+     * 咨询内容
+     */
+    @Excel(name = "备注")
+    private String consultContent;
+
+    /**
+     * 状态;1:待反馈,2:已反馈
+     */
+    @Excel(name = "状态", readConverterExp = "1=待反馈,2=已反馈")
+    private Integer status;
+
+    /**
+     * 提交时间
+     */
+    @Excel(name = "提交时间")
+    private LocalDateTime createTime;
+
+    /**
+     * 处理人
+     */
+    @Excel(name = "处理人")
+    private String handleName;
+
+    /**
+     * 处理内容
+     */
+    @Excel(name = "处理内容")
+    private String handleContent;
+
+    /**
+     * 处理时间
+     */
+    @Excel(name = "处理时间")
+    private LocalDateTime handleTime;
+
+}

+ 38 - 0
service-website/service-website-biz/src/main/java/com/usky/website/service/vo/SiteReviewRequestVO.java

@@ -0,0 +1,38 @@
+package com.usky.website.service.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class SiteReviewRequestVO implements Serializable {
+    /**
+     * id
+     */
+    private Integer id;
+
+    /**
+     * 平台名称
+     */
+    private String platName;
+
+    /**
+     * 开始时间
+     */
+    private String startTime;
+
+    /**
+     * 结束时间
+     */
+    private String endTime;
+
+    /**
+     * 页数
+     */
+    private Integer current;
+
+    /**
+     * 条数
+     */
+    private Integer size;
+}

+ 1 - 0
service-website/service-website-biz/src/main/resources/mapper/website/SiteArticleMapper.xml

@@ -17,6 +17,7 @@
         <result column="zhaiyao" property="zhaiyao" />
         <result column="createdate" property="createdate" />
         <result column="modifydate" property="modifydate" />
+        <result column="sortindex" property="sortindex" />
     </resultMap>
 
 </mapper>

+ 23 - 0
service-website/service-website-biz/src/main/resources/mapper/website/SiteReviewMapper.xml

@@ -0,0 +1,23 @@
+<?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.website.mapper.SiteReviewMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.usky.website.domain.SiteReview">
+        <id column="id" property="id" />
+        <result column="plat_name" property="platName" />
+        <result column="consult_name" property="consultName" />
+        <result column="consult_phone" property="consultPhone" />
+        <result column="mail" property="mail" />
+        <result column="company" property="company" />
+        <result column="consult_content" property="consultContent" />
+        <result column="status" property="status" />
+        <result column="create_time" property="createTime" />
+        <result column="handle_name" property="handleName" />
+        <result column="handle_content" property="handleContent" />
+        <result column="handle_time" property="handleTime" />
+        <result column="dept_id" property="deptId" />
+        <result column="tenant_id" property="tenantId" />
+    </resultMap>
+
+</mapper>