Browse Source

4/23 工单修改

lwhhszx 1 year ago
parent
commit
3fe29d70fb
19 changed files with 725 additions and 47 deletions
  1. 23 4
      src/main/java/com/example/xiaoshiweixinback/controller/MonitoringController.java
  2. 12 6
      src/main/java/com/example/xiaoshiweixinback/controller/ProductController.java
  3. 39 0
      src/main/java/com/example/xiaoshiweixinback/domain/Monitor.java
  4. 44 0
      src/main/java/com/example/xiaoshiweixinback/domain/MonitorRecord.java
  5. 29 2
      src/main/java/com/example/xiaoshiweixinback/entity/dto/monitoring/AddMonitoringDTO.java
  6. 80 0
      src/main/java/com/example/xiaoshiweixinback/entity/quartz/QrtzTaskDTO.java
  7. 14 0
      src/main/java/com/example/xiaoshiweixinback/entity/quartz/QuartzVO.java
  8. 2 1
      src/main/java/com/example/xiaoshiweixinback/entity/vo/ProductVO.java
  9. 18 0
      src/main/java/com/example/xiaoshiweixinback/mapper/MonitorMapper.java
  10. 18 0
      src/main/java/com/example/xiaoshiweixinback/mapper/MonitorRecordMapper.java
  11. 2 1
      src/main/java/com/example/xiaoshiweixinback/mapper/ProductMapper.java
  12. 23 0
      src/main/java/com/example/xiaoshiweixinback/service/AssoPersonProductService.java
  13. 30 0
      src/main/java/com/example/xiaoshiweixinback/service/MonitorRecordService.java
  14. 144 0
      src/main/java/com/example/xiaoshiweixinback/service/MonitorService.java
  15. 19 11
      src/main/java/com/example/xiaoshiweixinback/service/ProductService.java
  16. 21 22
      src/main/java/com/example/xiaoshiweixinback/service/importPatent/excel/ImportProductService.java
  17. 127 0
      src/main/java/com/example/xiaoshiweixinback/service/quartzService/JobService.java
  18. 28 0
      src/main/java/com/example/xiaoshiweixinback/service/quartzService/TaskAddJob.java
  19. 52 0
      src/main/resources/mapper/ProductMapper.xml

+ 23 - 4
src/main/java/com/example/xiaoshiweixinback/controller/MonitoringController.java

@@ -2,10 +2,15 @@ package com.example.xiaoshiweixinback.controller;
 
 import com.example.xiaoshiweixinback.business.common.Constants;
 import com.example.xiaoshiweixinback.business.common.Response;
+import com.example.xiaoshiweixinback.business.common.base.Records;
+import com.example.xiaoshiweixinback.business.exception.BusinessException;
+import com.example.xiaoshiweixinback.domain.MonitorRecord;
 import com.example.xiaoshiweixinback.entity.dto.monitoring.AddMonitoringDTO;
 import com.example.xiaoshiweixinback.entity.dto.monitoring.CancelMonitoringDTO;
 import com.example.xiaoshiweixinback.entity.dto.monitoring.MonitoringIdDTO;
 import com.example.xiaoshiweixinback.entity.dto.monitoring.SelectMonitoringDTO;
+import com.example.xiaoshiweixinback.service.MonitorRecordService;
+import com.example.xiaoshiweixinback.service.MonitorService;
 import io.swagger.v3.oas.annotations.Operation;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -14,34 +19,48 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.List;
+
 @Slf4j
 @RequestMapping(Constants.XIAOSHI_WEIXINBACK + "/monitoring")
 @RestController
 @RequiredArgsConstructor
 public class MonitoringController {
 
+    private final MonitorService monitorService;
+    private final MonitorRecordService monitorRecordService;
     @Operation(summary = "添加监控")
     @PostMapping("/addMonitoring")
     public Response addMonitoring(@RequestBody AddMonitoringDTO monitoringDTO) {
-        return Response.success("");
+        Integer projectId = null;
+        try {
+            projectId = monitorService.addMonitoring(monitoringDTO);
+        } catch (BusinessException e) {
+            return Response.error(e.getErrorCode(), e.getMessage());
+        }
+        return Response.success(projectId);
     }
 
     @Operation(summary = "查询监控")
     @PostMapping("/selectMonitoring")
-    public Response selectMonitoring(@RequestBody SelectMonitoringDTO monitoringDTO) {
+    public Response selectMonitoring(@RequestBody SelectMonitoringDTO selectMonitoringDTO) {
+       Records records= monitorService.selectMonitoring(selectMonitoringDTO);
         return Response.success("");
     }
 
     @Operation(summary = "取消监控")
     @PostMapping("/cancelMonitoring")
     public Response cancelMonitoring(@RequestBody CancelMonitoringDTO monitoringDTO) {
-        return Response.success("");
+       List<Integer> productIds=  monitorService.cancelMonitoring(monitoringDTO);
+        return Response.success(productIds);
     }
 
     @Operation(summary = "查询监控详情记录")
     @PostMapping("/selectMonitoringRecord")
     public Response selectMonitoringRecord(@RequestBody MonitoringIdDTO monitoringDTO) {
-        return Response.success("");
+        Integer id =monitoringDTO.getId();
+        List<MonitorRecord> monitorRecords =  monitorRecordService.getMonitorRecords(id);
+        return Response.success(monitorRecords);
     }
 
 }

+ 12 - 6
src/main/java/com/example/xiaoshiweixinback/controller/ProductController.java

@@ -60,13 +60,19 @@ public class ProductController {
     @PostMapping("/follow")
     public Response follow(@RequestBody AssoPersonProductDTO assoPersonProductDTO) {
         Records records = new Records();
-        Integer id = assoPersonProductService.add(assoPersonProductDTO);
-        if (id == null) {
-            return Response.noPermissions("已超过可关注数量");
-        }
-        if (id.equals(-2)) {
-            return Response.noPermissions("无关注产品的权益");
+        Integer id =null;
+        try {
+             id = assoPersonProductService.add(assoPersonProductDTO);
+            if (id == null) {
+                return Response.noPermissions("已超过可关注数量");
+            }
+            if (id.equals(-2)) {
+                return Response.noPermissions("无关注产品的权益");
+            }
         }
+    catch (BusinessException e){
+            return Response.error(e.getErrorCode(),e.getMessage());
+    }
         records.setData(id);
         return Response.success(records);
     }

+ 39 - 0
src/main/java/com/example/xiaoshiweixinback/domain/Monitor.java

@@ -0,0 +1,39 @@
+package com.example.xiaoshiweixinback.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Data;
+
+/**
+ * 产品监控表
+ * @TableName monitor
+ */
+@TableName(value ="monitor")
+@Data
+public class Monitor extends BaseEntity<Monitor> {
+
+    /**
+     * 
+     */
+    private Integer productId;
+
+    /**
+     * 
+     */
+    private String monitorPeriod;
+
+    /**
+     * 
+     */
+    private String createId;
+
+    /**
+     * 
+     */
+    private Date createTime;
+
+}

+ 44 - 0
src/main/java/com/example/xiaoshiweixinback/domain/MonitorRecord.java

@@ -0,0 +1,44 @@
+package com.example.xiaoshiweixinback.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Data;
+
+/**
+ * 监控记录
+ * @TableName monitor_record
+ */
+@TableName(value ="monitor_record")
+@Data
+public class MonitorRecord extends BaseEntity<MonitorRecord> {
+
+    /**
+     * 
+     */
+    private Integer monitorId;
+
+    /**
+     * 
+     */
+    private Date startDate;
+
+    /**
+     * 
+     */
+    private Date endDate;
+
+    /**
+     * 
+     */
+    private Date createTime;
+
+    /**
+     * 
+     */
+    private Integer num;
+
+}

+ 29 - 2
src/main/java/com/example/xiaoshiweixinback/entity/dto/monitoring/AddMonitoringDTO.java

@@ -3,12 +3,39 @@ package com.example.xiaoshiweixinback.entity.dto.monitoring;
 import com.example.xiaoshiweixinback.entity.product.ProductAddDTO;
 import lombok.Data;
 
+import java.util.List;
+
 @Data
 public class AddMonitoringDTO {
 
     //产品id
     private Integer productId;
 
-    //产品信息
-    private ProductAddDTO productAddDTO;
+    private String name;
+
+    /**
+     *
+     */
+    private String description;
+
+    /**
+     * 检索条件
+     */
+    private String searchCondition;
+
+    /**
+     * 来源
+     */
+    private String sourceFrom;
+
+    /**
+     * 售卖平台
+     */
+    private String sellPlatform;
+
+    private String competitorCom;
+    private String competitorLink;
+    private List<String> fileGuids;
+    private Integer concernType;
+    private String monitorPeriod;
 }

+ 80 - 0
src/main/java/com/example/xiaoshiweixinback/entity/quartz/QrtzTaskDTO.java

@@ -0,0 +1,80 @@
+package com.example.xiaoshiweixinback.entity.quartz;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import lombok.experimental.Accessors;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * 任务条件表的实体类
+ *
+ * @Author chenyu
+ * @Date 2023/3/27
+ */
+@Accessors(chain = true)
+@Data
+public class QrtzTaskDTO {
+    private Integer id;
+    private Integer projectId;
+
+    private String taskName;
+
+
+    private Integer taskType;
+    /**
+     * 状态(0等待中 1进行中 2成功 3失败 4等待下一次执行 5取消 6暂停)
+     */
+    @TableField(value = "task_state")
+    private Integer taskState;
+    /**
+     * 检索信息
+     */
+    @TableField(value = "conditions")
+    private String conditions;
+    /**
+     * cron表达式
+     */
+    @TableField(value = "crons")
+    private String crons;
+    /**
+     * 下载字段
+     */
+    @TableField(value = "config_cells")
+    private String configCells;
+    /**
+     * 网站id
+     */
+    @TableField(value = "config_id")
+    private Integer configId;
+    /**
+     * 创建人id
+     */
+    @TableField(value = "create_person_id")
+    private Integer createPersonId;
+    /**
+     * 创建人名称
+     */
+    @TableField(value = "create_person_name")
+    private String createName;
+    @TableField(value = "tenant_id")
+    private Integer tenantId;
+    /**
+     * 创建时间
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField(value = "create_time")
+    private Date createTime;
+    /**
+     * 最后修改时间
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField(value = "modified_time")
+    private Date modifiedTime;
+
+}

+ 14 - 0
src/main/java/com/example/xiaoshiweixinback/entity/quartz/QuartzVO.java

@@ -0,0 +1,14 @@
+package com.example.xiaoshiweixinback.entity.quartz;
+
+import lombok.Data;
+
+@Data
+public class QuartzVO {
+    /**
+     * 任务名称
+     */
+    private String jobName;
+    private String jobGroupName;
+    private String triggerName;
+    private String triggerGroupName;
+}

+ 2 - 1
src/main/java/com/example/xiaoshiweixinback/entity/vo/ProductVO.java

@@ -36,7 +36,6 @@ public class ProductVO {
     private String sellPlatform;
 
 
-
     /**
      *
      */
@@ -60,4 +59,6 @@ public class ProductVO {
     private String categoryPath;
     private String path;
     private Boolean ifShow;
+    private String monitorPeriod;
+
 }

+ 18 - 0
src/main/java/com/example/xiaoshiweixinback/mapper/MonitorMapper.java

@@ -0,0 +1,18 @@
+package com.example.xiaoshiweixinback.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.example.xiaoshiweixinback.domain.Monitor;
+
+/**
+* @author admin
+* @description 针对表【monitor(产品监控表)】的数据库操作Mapper
+* @createDate 2024-04-28 16:29:49
+* @Entity xiaoshiweixinback.domain.Monitor
+*/
+public interface MonitorMapper extends BaseMapper<Monitor> {
+
+}
+
+
+
+

+ 18 - 0
src/main/java/com/example/xiaoshiweixinback/mapper/MonitorRecordMapper.java

@@ -0,0 +1,18 @@
+package com.example.xiaoshiweixinback.mapper;
+
+import com.example.xiaoshiweixinback.domain.MonitorRecord;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author admin
+* @description 针对表【monitor_record(监控记录)】的数据库操作Mapper
+* @createDate 2024-04-28 18:01:54
+* @Entity xiaoshiweixinback.domain.MonitorRecord
+*/
+public interface MonitorRecordMapper extends BaseMapper<MonitorRecord> {
+
+}
+
+
+
+

+ 2 - 1
src/main/java/com/example/xiaoshiweixinback/mapper/ProductMapper.java

@@ -25,7 +25,8 @@ public interface ProductMapper extends BaseMapper<Product> {
     public List<ProductVO> getConcernProduct(@Param("getProductDTO") GetProductDTO getProductDTO);
 
     public Long getConcernProductCount(@Param("getProductDTO") GetProductDTO getProductDTO);
-
+    public List<ProductVO> getMonitoringProduct(@Param("getProductDTO") GetProductDTO getProductDTO);
+    public Long getMonitoringProductCount(@Param("getProductDTO") GetProductDTO getProductDTO);
 }
 
 

+ 23 - 0
src/main/java/com/example/xiaoshiweixinback/service/AssoPersonProductService.java

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.example.xiaoshiweixinback.business.exception.BusinessException;
+import com.example.xiaoshiweixinback.business.exception.XiaoShiException;
 import com.example.xiaoshiweixinback.business.utils.CacheUtil;
 import com.example.xiaoshiweixinback.business.utils.LoginUtils;
 import com.example.xiaoshiweixinback.business.utils.ToolUtil;
@@ -18,6 +19,8 @@ import lombok.RequiredArgsConstructor;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * @author admin
  * @description 针对表【asso_person_product(人员产品关联表)】的数据库操作Service实现
@@ -30,8 +33,17 @@ public class AssoPersonProductService extends ServiceImpl<AssoPersonProductMappe
     private final VipService vipService;
 
     public Integer add(AssoPersonProductDTO assoPersonProductDTO) {
+        Integer productId =assoPersonProductDTO.getProductId();
         PersonnelVO personnelVO = cacheUtil.getLoginUser(LoginUtils.getToken());
         checkAdmin();
+        LambdaQueryWrapper<AssoPersonProduct> queryWrapper =new LambdaQueryWrapper<>();
+        queryWrapper.eq(AssoPersonProduct::getProductId,productId)
+                    .eq(AssoPersonProduct::getPersonUuid,personnelVO.getUuid());
+        AssoPersonProduct org =this.getOne(queryWrapper,false);
+        if(org!=null){
+            throw new BusinessException("607","不可重复关注该产品");
+        }
+
         if (ToolUtil.isNotEmpty(personnelVO)) {
             AssoPersonProduct assoPersonProduct = new AssoPersonProduct();
             BeanUtils.copyProperties(assoPersonProductDTO, assoPersonProduct);
@@ -93,6 +105,17 @@ public class AssoPersonProductService extends ServiceImpl<AssoPersonProductMappe
         }
         return -1;
     }
+
+
+    public List<Integer> cancelConcern(List<Integer> productIds) {
+        PersonnelVO personnelVO = cacheUtil.getLoginUser(LoginUtils.getToken());
+        LambdaQueryWrapper<AssoPersonProduct> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.in(AssoPersonProduct::getProductId, productIds);
+        queryWrapper.eq(AssoPersonProduct::getPersonUuid, personnelVO.getUuid());
+            this.remove(queryWrapper);
+            return productIds;
+        }
+
 }
 
 

+ 30 - 0
src/main/java/com/example/xiaoshiweixinback/service/MonitorRecordService.java

@@ -0,0 +1,30 @@
+package com.example.xiaoshiweixinback.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.example.xiaoshiweixinback.domain.MonitorRecord;
+import com.example.xiaoshiweixinback.mapper.MonitorRecordMapper;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @author admin
+ * @description 针对表【monitor_record(监控记录)】的数据库操作Service实现
+ * @createDate 2024-04-28 18:01:54
+ */
+@Service
+public class MonitorRecordService extends ServiceImpl<MonitorRecordMapper, MonitorRecord> {
+
+    public List<MonitorRecord> getMonitorRecords(Integer monitorId) {
+        LambdaQueryWrapper<MonitorRecord> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(MonitorRecord::getMonitorId, monitorId);
+        List<MonitorRecord> monitorRecords = this.list(queryWrapper);
+        return monitorRecords;
+
+    }
+}
+
+
+
+

+ 144 - 0
src/main/java/com/example/xiaoshiweixinback/service/MonitorService.java

@@ -0,0 +1,144 @@
+package com.example.xiaoshiweixinback.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.example.xiaoshiweixinback.business.common.base.Records;
+import com.example.xiaoshiweixinback.business.exception.BusinessException;
+import com.example.xiaoshiweixinback.business.utils.CacheUtil;
+import com.example.xiaoshiweixinback.business.utils.LoginUtils;
+import com.example.xiaoshiweixinback.domain.Monitor;
+
+import com.example.xiaoshiweixinback.entity.dto.AssoPersonProductDTO;
+import com.example.xiaoshiweixinback.entity.dto.GetProductDTO;
+import com.example.xiaoshiweixinback.entity.dto.monitoring.AddMonitoringDTO;
+import com.example.xiaoshiweixinback.entity.dto.monitoring.CancelMonitoringDTO;
+import com.example.xiaoshiweixinback.entity.dto.monitoring.SelectMonitoringDTO;
+import com.example.xiaoshiweixinback.entity.product.ProductAddDTO;
+import com.example.xiaoshiweixinback.entity.vo.PersonnelVO;
+import com.example.xiaoshiweixinback.entity.vo.ProductVO;
+import com.example.xiaoshiweixinback.mapper.MonitorMapper;
+import com.example.xiaoshiweixinback.mapper.ProductMapper;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.CachedIntrospectionResults;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+/**
+ * @author admin
+ * @description 针对表【monitor(产品监控表)】的数据库操作Service实现
+ * @createDate 2024-04-28 16:29:49
+ */
+@Service
+@RequiredArgsConstructor
+public class MonitorService extends ServiceImpl<MonitorMapper, Monitor> {
+
+    private final AssoPersonProductService assoPersonProductService;
+    private final ProductService productService;
+    private final CacheUtil cacheUtil;
+    private final ProductMapper productMapper;
+    /**
+     * 添加监控
+     *
+     * @param addMonitoringDTO
+     * @return
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public Integer addMonitoring(AddMonitoringDTO addMonitoringDTO) {
+        PersonnelVO personnelVO = cacheUtil.getLoginUser(LoginUtils.getToken());
+        Integer productId = addMonitoringDTO.getProductId();
+        String monitorPeriod = addMonitoringDTO.getMonitorPeriod();
+        Integer concernType = addMonitoringDTO.getConcernType();
+
+        //关注产品
+        if (productId != null) {
+            AssoPersonProductDTO assoPersonProductDTO = new AssoPersonProductDTO();
+            assoPersonProductDTO.setProductId(productId);
+            assoPersonProductDTO.setConcernType(concernType);
+            assoPersonProductService.add(assoPersonProductDTO);
+        } else if (productId == null) {
+            ProductAddDTO productAddDTO = new ProductAddDTO();
+            BeanUtils.copyProperties(addMonitoringDTO, productAddDTO);
+            productId = productService.addOrUpdateProduct(productAddDTO);
+        }
+
+        //添加监控
+        Monitor monitor = new Monitor();
+        monitor.setCreateId(personnelVO.getUuid());
+        monitor.setMonitorPeriod(monitorPeriod);
+        monitor.setProductId(productId);
+        monitor.insert();
+        //TODO 添加定时任务
+
+        return productId;
+    }
+
+    /**
+     * 取消监控
+     *
+     * @param cancelMonitoringDTO
+     * @return
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public List<Integer> cancelMonitoring(CancelMonitoringDTO cancelMonitoringDTO) {
+        List<Integer> productIds = cancelMonitoringDTO.getProductIds();
+        Boolean ifCancelConcern = cancelMonitoringDTO.getIfCancelConcern();
+        //取消监控
+        this.cancelMonitorByProductIds(productIds);
+        if (ifCancelConcern != null && ifCancelConcern.equals(true)) {
+            //取消关注
+            assoPersonProductService.cancelConcern(productIds);
+        }
+        //TODO 添加定时任务
+
+        return productIds;
+    }
+
+    private List<Integer> cancelMonitorByProductIds(List<Integer> productIds) {
+        PersonnelVO personnelVO = cacheUtil.getLoginUser(LoginUtils.getToken());
+        LambdaQueryWrapper<Monitor> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.in(Monitor::getProductId, productIds)
+                .eq(Monitor::getCreateId, personnelVO.getUuid());
+        this.remove(queryWrapper);
+        return productIds;
+
+    }
+
+    /**
+     * 查询监控信息
+     * @param selectMonitoringDTO
+     * @return
+     */
+    public Records selectMonitoring(SelectMonitoringDTO selectMonitoringDTO) {
+        Long current =selectMonitoringDTO.getCurrent();
+        Long size =selectMonitoringDTO.getSize();
+        PersonnelVO personnelVO = cacheUtil.getLoginUser(LoginUtils.getToken());
+        GetProductDTO getProductDTO =new GetProductDTO();
+        getProductDTO.setSize(size);
+        getProductDTO.setCurrent(current);
+        getProductDTO.setPersonUuid(personnelVO.getUuid());
+        List<ProductVO> productVOS = productMapper.getMonitoringProduct(getProductDTO);
+          Long total =productMapper.getMonitoringProductCount(getProductDTO);
+          try {
+              productService.loadProduct(productVOS, false);
+
+          }
+          catch (Exception e){
+              throw new BusinessException("607","装载错误");
+          }
+        Records records =new Records();
+        records.setTotal(total);
+        records.setData(productVOS);
+        records.setSize(size);
+        records.setCurrent(current);
+        return records;
+    }
+
+
+}
+
+
+
+

+ 19 - 11
src/main/java/com/example/xiaoshiweixinback/service/ProductService.java

@@ -62,7 +62,14 @@ public class ProductService extends ServiceImpl<ProductMapper, Product> {
         records.setData(new ArrayList<>());
         records.setTotal(0L);
         String name = productDTO.getName();
-        PersonnelVO personnelVO = cacheUtil.getLoginUser(LoginUtils.getToken());
+        PersonnelVO personnelVO = null;
+        try {
+            if (LoginUtils.getToken() != null) {
+                personnelVO = cacheUtil.getLoginUser(LoginUtils.getToken());
+            }
+        } catch (Exception e) {
+
+        }
         //查询登录人关联的产品类别id
         List<Integer> ids = assoPersonCategoryService.getChoosedProductCategoryIds();
 
@@ -72,7 +79,7 @@ public class ProductService extends ServiceImpl<ProductMapper, Product> {
         getProductDTO.setCurrent(current);
         getProductDTO.setSize(size);
         getProductDTO.setCategoryIds(ids);
-        if (!personnelVO.getPersonType().equals(0)) {
+        if (personnelVO!=null&&!personnelVO.getPersonType().equals(0)) {
             getProductDTO.setIfShow(true);
         }
         if (ids != null) {
@@ -86,7 +93,7 @@ public class ProductService extends ServiceImpl<ProductMapper, Product> {
     }
 
 
-    private void loadProduct(List<ProductVO> productVOS, Boolean ifCotentCategoryPath) {
+    public void loadProduct(List<ProductVO> productVOS, Boolean ifCotentCategoryPath) {
         PersonnelVO personnelVO = null;
         try {
             personnelVO = cacheUtil.getLoginUser(LoginUtils.getToken());
@@ -190,7 +197,7 @@ public class ProductService extends ServiceImpl<ProductMapper, Product> {
     public Integer addOrUpdateProduct(ProductAddDTO productAddDTO) {
         Product product = new Product();
         if (productAddDTO.getId() == null) {
-            product = this.addProduct(productAddDTO,null);
+            product = this.addProduct(productAddDTO, null);
             AssoPersonProductDTO assoPersonProductDTO = new AssoPersonProductDTO();
             assoPersonProductDTO.setProductId(product.getId());
             assoPersonProductDTO.setConcernType(productAddDTO.getConcernType());
@@ -203,14 +210,13 @@ public class ProductService extends ServiceImpl<ProductMapper, Product> {
     }
 
     @Transactional(rollbackFor = Exception.class)
-    public Product addProduct(Object productAddDTO,String createUuid) {
+    public Product addProduct(Object productAddDTO, String createUuid) {
         Product product = new Product();
         BeanUtils.copyProperties(productAddDTO, product);
-        if(createUuid==null) {
+        if (createUuid == null) {
             PersonnelVO personnelVO = cacheUtil.getLoginUser(LoginUtils.getToken());
             product.setCreateId(personnelVO.getUuid());
-        }
-        else {
+        } else {
             product.setCreateId(createUuid);
         }
         product.setIfCustomized(true);
@@ -266,7 +272,7 @@ public class ProductService extends ServiceImpl<ProductMapper, Product> {
 
 
     @Transactional(rollbackFor = Exception.class)
-    public Integer addOrUpdateHotProduct(HotProductAddDTO hotProductAddDTO,String createId) {
+    public Integer addOrUpdateHotProduct(HotProductAddDTO hotProductAddDTO, String createId) {
         Product product = new Product();
         String name = hotProductAddDTO.getName();
         Integer categoryId = hotProductAddDTO.getProductCategoryId();
@@ -276,6 +282,9 @@ public class ProductService extends ServiceImpl<ProductMapper, Product> {
         LambdaQueryWrapper<Product> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(Product::getName, name)
                 .eq(Product::getIfHot, true);
+        if (hotProductAddDTO.getId() != null) {
+            queryWrapper.ne(Product::getId, hotProductAddDTO.getId());
+        }
         Product orgProject = this.getOne(queryWrapper, false);
         if (orgProject != null) {
             throw new BusinessException("607", "产品名称不可重复");
@@ -361,7 +370,6 @@ public class ProductService extends ServiceImpl<ProductMapper, Product> {
     }
 
 
-
     public void ImportProduct(MultipartFile multipartFile) {
         String guid = "";
 
@@ -371,7 +379,7 @@ public class ProductService extends ServiceImpl<ProductMapper, Product> {
             if (guids == null | guids.size() == 0) {
                 throw new BusinessException("607", "上传文件错误");
             }
-            guid =guids.get(0);
+            guid = guids.get(0);
         } catch (Exception e) {
             throw new BusinessException("607", "上传文件错误");
         }

+ 21 - 22
src/main/java/com/example/xiaoshiweixinback/service/importPatent/excel/ImportProductService.java

@@ -1,6 +1,7 @@
 package com.example.xiaoshiweixinback.service.importPatent.excel;
 
 import cn.hutool.core.util.IdUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.example.xiaoshiweixinback.business.exception.BusinessException;
 import com.example.xiaoshiweixinback.business.utils.*;
 import com.example.xiaoshiweixinback.domain.AssoProductFile;
@@ -41,18 +42,22 @@ public class ImportProductService {
 
     @Autowired
     private FileManagerService fileManagerService;
+
     @Autowired
     private AssoProductFileService assoProductFileService;
+
     @Autowired
     private ExcuteUploadSettingService excuteUploadSettingService;
 
     @Autowired
     private ProductCategoryService productCategoryService;
+
     @Autowired
     private MessageService messageService;
+
     public void importProject(File tempFile, ImportTask importTask) {
         try {
-            PersonnelVO personnelVO =new PersonnelVO();
+            PersonnelVO personnelVO = new PersonnelVO();
             personnelVO.setUuid("123");
             Sheet sheet = ReadExcelUtils.readExcel(tempFile);
             Integer total = ReadExcelUtils.getExcelTotal(sheet);
@@ -70,11 +75,11 @@ public class ImportProductService {
 
                 HotProductAddDTO hotProductAddDTO = this.loadProductAddVO(uploadParamsVO, pictureDataList);
                 try {
-                    productService.addOrUpdateHotProduct(hotProductAddDTO,personnelVO.getUuid());
+                    productService.addOrUpdateHotProduct(hotProductAddDTO, personnelVO.getUuid());
                 } catch (Exception e) {
                     continue;
                 }
-                WebSocketMessageVO webSocketMessageVO =new WebSocketMessageVO();
+                WebSocketMessageVO webSocketMessageVO = new WebSocketMessageVO();
                 webSocketMessageVO.setTaskId(importTask.getId());
                 webSocketMessageVO.setAllNum(total);
                 webSocketMessageVO.setState(2);
@@ -87,30 +92,15 @@ public class ImportProductService {
 
     }
 
-    private Product loadProduct(Map<Object, Object> map) {
-        Product product = new Product();
-        product.setName(map.get("产品名称").toString());
-        product.setSearchCondition(map.get("关键词").toString());
-        product.setSourceFrom(map.get("卖家").toString());
-        product.setSellPlatform(map.get("网站名").toString());
-        product.setIfHot(true);
-        product.setIfCustomized(false);
-        product.setBestSellingBrand(map.get("销冠品牌").toString());
-        String p = map.get("金额").toString().replace("$", "");
-        Double price = Double.parseDouble(p);
-        product.setPrice(price);
-        product.setPlatformLink(map.get("产品网页链接").toString());
-        product.setLocNum(map.get("LOC分类号").toString());
-        return product;
-    }
-
 
     private HotProductAddDTO loadProductAddVO(UploadProductParamsVO uploadParamsVO, List<PictureData> pictureDataList) throws Exception {
         ProductCategory productCategory = productCategoryService.addCategorysByStr(uploadParamsVO.getCategoryList());
-
+        String priceStr = uploadParamsVO.getPriceStr();
+         uploadParamsVO.setPrice(Double.parseDouble(priceStr));
         HotProductAddDTO hotProductAddDTO = new HotProductAddDTO();
         BeanUtils.copyProperties(uploadParamsVO, hotProductAddDTO);
         hotProductAddDTO.setIfHot(true);
+        hotProductAddDTO.setIfShow(true);
         hotProductAddDTO.getFileGuids();
         List<String> fileIds = new ArrayList<>();
         for (PictureData pictureData : pictureDataList) {
@@ -127,9 +117,18 @@ public class ImportProductService {
 
         }
         hotProductAddDTO.setFileGuids(fileIds);
-        if(productCategory!=null) {
+        if (productCategory != null) {
             hotProductAddDTO.setProductCategoryId(productCategory.getId());
         }
+
+        //根据名称查询
+        LambdaQueryWrapper<Product> queryWrapper =new LambdaQueryWrapper<>();
+        queryWrapper.eq(Product::getName,hotProductAddDTO.getName())
+                     .eq(Product::getIfHot,true);
+        Product  product =productService.getOne(queryWrapper,false);
+        if(product!=null){
+            hotProductAddDTO.setId(product.getId());
+        }
         return hotProductAddDTO;
     }
 }

+ 127 - 0
src/main/java/com/example/xiaoshiweixinback/service/quartzService/JobService.java

@@ -0,0 +1,127 @@
+package com.example.xiaoshiweixinback.service.quartzService;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.example.xiaoshiweixinback.entity.quartz.QrtzTaskDTO;
+import com.example.xiaoshiweixinback.entity.quartz.QuartzVO;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.quartz.*;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+@Service
+@Slf4j
+@RequiredArgsConstructor(onConstructor_ = {@Lazy})
+public class JobService {
+
+    private final Scheduler scheduler;
+
+
+    /**
+     * 删除job
+     *
+     * @throws SchedulerException
+     */
+    public void deleteJob(Integer taskId) throws SchedulerException {
+        QuartzVO quartzVO = this.generateQuartzVO(taskId);
+        TriggerKey triggerKey = TriggerKey.triggerKey(quartzVO.getTriggerName(), quartzVO.getTriggerGroupName());
+        scheduler.pauseTrigger(triggerKey);
+        scheduler.unscheduleJob(triggerKey);
+        JobKey jobKey = JobKey.jobKey(quartzVO.getJobName(), quartzVO.getJobGroupName());
+        scheduler.deleteJob(jobKey);
+    }
+
+    /**
+     * 暂停job
+     *
+     * @throws SchedulerException
+     */
+    public void pauseJob(Integer taskId) throws SchedulerException {
+        QuartzVO quartzVO = this.generateQuartzVO(taskId);
+        //更新任务条件状态
+        JobKey jobKey = JobKey.jobKey(quartzVO.getJobName(), quartzVO.getJobGroupName());
+        scheduler.pauseJob(jobKey);
+    }
+
+    /**
+     * 恢复job
+     *
+     * @throws SchedulerException
+     */
+    public void resumeJob(Integer taskId) throws SchedulerException {
+        QuartzVO quartzVO = this.generateQuartzVO(taskId);
+        JobKey jobKey = JobKey.jobKey(quartzVO.getJobName(), quartzVO.getJobGroupName());
+        scheduler.resumeJob(jobKey);
+    }
+
+    /**
+     * 修改定时任务
+     *
+     * @param
+     */
+    public void updateJob(QrtzTaskDTO qrtzTask) {
+        //更新任务
+
+        QuartzVO quartzVO = this.generateQuartzVO(qrtzTask.getId());
+        JobDataMap jobDataMap = new JobDataMap();
+        jobDataMap.put("qrtzTask", qrtzTask);
+        TriggerKey oldTriggerKey = TriggerKey.triggerKey(quartzVO.getTriggerName(), quartzVO.getTriggerGroupName());
+        CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(qrtzTask.getCrons());
+        CronTrigger cronTrigger = TriggerBuilder.newTrigger()
+                .withIdentity(oldTriggerKey).usingJobData(jobDataMap).withSchedule(scheduleBuilder).build();
+        try {
+            scheduler.rescheduleJob(oldTriggerKey, cronTrigger);
+        } catch (SchedulerException e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 新增job任务
+     *
+     * @throws SchedulerException
+     */
+    @Transactional
+    public void addJob(QrtzTaskDTO qrtzTask) throws SchedulerException {
+        //添加一条任务记录
+        QuartzVO quartzVO = this.generateQuartzVO(qrtzTask.getId());
+        JobDataMap jobDataMap = new JobDataMap();
+        jobDataMap.put("qrtzTask", qrtzTask);
+        CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(qrtzTask.getCrons());
+        JobDetail jobDetail = JobBuilder
+                .newJob(TaskAddJob.class)
+                .withIdentity(quartzVO.getJobName(), quartzVO.getJobGroupName())
+                .build();
+        Trigger trigger = TriggerBuilder
+                .newTrigger()
+                .withIdentity(quartzVO.getTriggerName(), quartzVO.getTriggerGroupName())
+                .withSchedule(cronScheduleBuilder)
+                .usingJobData(jobDataMap)
+                .build();
+        scheduler.scheduleJob(jobDetail, trigger);
+
+    }
+
+
+    public QuartzVO generateQuartzVO(Integer taskId) {
+        QuartzVO quartzVO = new QuartzVO();
+        quartzVO.setJobName("Job_" + taskId);
+        quartzVO.setJobGroupName("Default");
+        quartzVO.setTriggerName("Trigger_" + taskId);
+        quartzVO.setTriggerGroupName("Default");
+        return quartzVO;
+
+    }
+
+    /**
+     * 停止正在进行的job
+     *
+     * @throws SchedulerException
+     */
+    public void interruptJob(Integer taskId) throws SchedulerException {
+        QuartzVO quartzVO = this.generateQuartzVO(taskId);
+        JobKey jobKey = JobKey.jobKey(quartzVO.getJobName(), quartzVO.getJobGroupName());
+        scheduler.interrupt(jobKey);
+    }
+}

+ 28 - 0
src/main/java/com/example/xiaoshiweixinback/service/quartzService/TaskAddJob.java

@@ -0,0 +1,28 @@
+package com.example.xiaoshiweixinback.service.quartzService;
+
+import com.example.xiaoshiweixinback.entity.quartz.QuartzVO;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.quartz.*;
+import org.springframework.scheduling.quartz.QuartzJobBean;
+
+import java.util.concurrent.TimeUnit;
+
+/**
+ * 定义任务
+ */
+@DisallowConcurrentExecution
+public class TaskAddJob extends   QuartzJobBean {
+
+    private static final Log logger = LogFactory.getLog(TaskAddJob.class);
+      private  boolean flag =true;
+    @Override
+    public void executeInternal(JobExecutionContext context) throws JobExecutionException {
+        JobDataMap jobDataMap = context.getTrigger().getJobDataMap();
+        QuartzVO qrtzTask = (QuartzVO) jobDataMap.get("qrtzTask");
+
+
+        logger.info("添加任务" + "信息是" + "1");
+    }
+
+}

+ 52 - 0
src/main/resources/mapper/ProductMapper.xml

@@ -134,4 +134,56 @@
         ) as c
 
     </select>
+
+
+    <select id="getMonitoringProduct" resultType="com.example.xiaoshiweixinback.entity.vo.ProductVO">
+        select distinct p.id as id,p.name as name,p.description as description,p.sell_platform as sellPlatform,pe.name
+        as createName ,p.create_time as createTime,p.best_selling_brand as bestSellingBrand,p.price as
+        price,p.platform_link as platformLink,p.if_hot as ifHot,app.id as assoId,app.monitor_period as monitorPeriod
+        from
+        monitor as app
+        left join product as p on app.product_id =p.id
+        left join person as pe on p.create_id =pe.uuid
+        <where>
+            app.person_uuid  = #{getProductDTO.personUuid}
+            <if test="getProductDTO.name!=null and getProductDTO.name!=''">
+                and p.name like CONCAT('%',#{getProductDTO.name},'%')
+            </if>
+
+            <if test="getProductDTO.concernTypes!=null and getProductDTO.concernTypes.size()>0">
+                and app.concern_type in
+                <foreach collection="getProductDTO.concernTypes" index="index" item="item" open="(" separator="," close=") ">
+                    #{item}
+                </foreach>
+            </if>
+            <if test="getProductDTO.current!=null and getProductDTO.size!=null">
+                limit ${(getProductDTO.current -1)*getProductDTO.size},${getProductDTO.current*getProductDTO.size}
+            </if>
+        </where>
+
+    </select>
+
+
+    <select id="getMonitoringProductCount" resultType="java.lang.Long">
+        select count(*) from ( select distinct p.id as id,p.name as name,p.description as description,p.sell_platform as
+        sellPlatform,pe.name
+        as createName ,p.create_time as createTime,p.best_selling_brand as bestSellingBrand,p.price as
+        price,p.platform_link as platformLink,p.source_from as sourceFrom
+        from
+        monitor as app
+        left join product as p on app.product_id =p.id
+        left join person as pe on p.create_id =pe.uuid
+        <where>
+            app.person_uuid = #{getProductDTO.personUuid}
+            <if test="getProductDTO.name!=null and getProductDTO.name!=''">
+                and p.name like CONCAT('%',#{getProductDTO.name},'%')
+            </if>
+
+            <if test="getProductDTO.current!=null and getProductDTO.size!=null">
+                limit ${(getProductDTO.current -1)*getProductDTO.size},${getProductDTO.current*getProductDTO.size}
+            </if>
+        </where>
+        ) as c
+
+    </select>
 </mapper>