浏览代码

增加mq工具api
改造excel导入

dsx 2 年之前
父节点
当前提交
06ac612afc

+ 7 - 0
pom.xml

@@ -149,6 +149,13 @@
       <artifactId>javax.mail</artifactId>
       <version>1.5.4</version>
     </dependency>
+
+    <dependency>
+      <groupId>com.fdkankan</groupId>
+      <artifactId>4dkankan-utils-rabbitmq</artifactId>
+      <version>3.0.0-SNAPSHOT</version>
+    </dependency>
+
   </dependencies>
 
   <build>

+ 43 - 0
src/main/java/com/fdkankan/manage/constant/ImportExcelType.java

@@ -0,0 +1,43 @@
+package com.fdkankan.manage.constant;
+
+import com.fdkankan.common.constant.FileBizType;
+
+/**
+ * 文件业务类型
+ */
+public enum ImportExcelType {
+
+    DEVICE_IN(0, "deviceIn"),
+    DEVICE_OUT(1, "deviceOut"),
+    CUSTOMER_RELA(1, "customerRela"),
+    ;
+
+    private Integer code;
+    private String message;
+
+    private ImportExcelType(Integer code, String message) {
+        this.code = code;
+        this.message = message;
+    }
+
+    public Integer code() {
+        return code;
+    }
+
+    public String message() {
+        return message;
+    }
+
+    public static ImportExcelType get(Integer code){
+        ImportExcelType[] values = ImportExcelType.values();
+        Integer enumValue = null;
+        for(ImportExcelType eachValue : values){
+            enumValue = eachValue.code();
+            if(enumValue.equals(code)){
+                return eachValue;
+            }
+        }
+        return null;
+    }
+
+}

+ 21 - 0
src/main/java/com/fdkankan/manage/controller/MqBackupController.java

@@ -0,0 +1,21 @@
+package com.fdkankan.manage.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2023-01-05
+ */
+@RestController
+@RequestMapping("/manage/mqBackup")
+public class MqBackupController {
+
+}
+

+ 54 - 0
src/main/java/com/fdkankan/manage/controller/ToolsController.java

@@ -0,0 +1,54 @@
+package com.fdkankan.manage.controller;
+
+import com.dtflys.forest.annotation.Post;
+import com.fdkankan.manage.common.ResultData;
+import com.fdkankan.manage.service.IMqBackupService;
+import com.fdkankan.manage.service.IToolsApiService;
+import org.springframework.amqp.rabbit.core.RabbitTemplate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.io.UnsupportedEncodingException;
+
+/**
+ * 工具接口
+ */
+@RestController
+@RequestMapping("/service/manage/tools")
+public class ToolsController {
+
+    @Autowired
+    private IMqBackupService mqBackupService;
+
+    /**
+     * 将指定队列的消息出队
+     * @param queue 队列名称
+     * @param needRequeue 是否需要从新入队(0-否,1-是),如果选择了是,则需要调用入队接口从新将消息入队
+     * @return
+     * @throws UnsupportedEncodingException
+     */
+    @PostMapping("/getRabbitMqMsg")
+    public ResultData getRabbitMqMsg(
+            @RequestParam(value = "queue") String queue,
+            @RequestParam(value = "needRequeue") Integer needRequeue) throws UnsupportedEncodingException {
+        return mqBackupService.getRabbitMqMsg(queue, needRequeue);
+    }
+
+    /**
+     * 将指定队列的消息从新入队
+     * @param queue 队列名称
+     * @return
+     * @throws UnsupportedEncodingException
+     */
+    @PostMapping("/rabbitmqRequeue")
+    public ResultData rabbitmqRequeue(
+            @RequestParam(value = "queue") String queue) throws UnsupportedEncodingException {
+        return mqBackupService.rabbitmqRequeue(queue);
+    }
+
+
+
+}

+ 68 - 0
src/main/java/com/fdkankan/manage/entity/MqBackup.java

@@ -0,0 +1,68 @@
+package com.fdkankan.manage.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 
+ * @since 2023-01-05
+ */
+@Getter
+@Setter
+@TableName("t_mq_backup")
+public class MqBackup implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId("id")
+    private Long id;
+
+    /**
+     * 队列名
+     */
+    @TableField("queue")
+    private String queue;
+
+    /**
+     * 消息体
+     */
+    @TableField("msg")
+    private String msg;
+
+    /**
+     * 是否重新需要回队(0-否,1-是)
+     */
+    @TableField("need_requeue")
+    private Integer needRequeue;
+
+    /**
+     * 是否已重新回队(0-否,1-是)
+     */
+    @TableField("requeue")
+    private Integer requeue;
+
+    @TableField("create_time")
+    private Date createTime;
+
+    @TableField("update_time")
+    private Date updateTime;
+
+    /**
+     * A-有效,I-无效
+     */
+    @TableField("rec_status")
+    @TableLogic(value = "A", delval = "I")
+    private String recStatus;
+
+
+}

+ 15 - 0
src/main/java/com/fdkankan/manage/factory/DeviceInHandler.java

@@ -0,0 +1,15 @@
+package com.fdkankan.manage.factory;
+
+import org.springframework.stereotype.Component;
+
+import java.util.HashMap;
+import java.util.List;
+
+@Component("deviceIn")
+public class DeviceInHandler implements ImportExcelHandler{
+
+    @Override
+    public int importExcel(List<HashMap<Integer, String>> excelRowList) {
+        return 0;
+    }
+}

+ 9 - 0
src/main/java/com/fdkankan/manage/factory/ExcelHandlerFactory.java

@@ -0,0 +1,9 @@
+package com.fdkankan.manage.factory;
+
+import cn.hutool.extra.spring.SpringUtil;
+
+public class ExcelHandlerFactory {
+    public static ImportExcelHandler getHandler(String name){
+        return SpringUtil.getBean(name);
+    }
+}

+ 10 - 0
src/main/java/com/fdkankan/manage/factory/ImportExcelHandler.java

@@ -0,0 +1,10 @@
+package com.fdkankan.manage.factory;
+
+import java.util.HashMap;
+import java.util.List;
+
+public interface ImportExcelHandler {
+
+    int importExcel(List<HashMap<Integer, String>> excelRowList);
+
+}

+ 3 - 3
src/main/java/com/fdkankan/manage/generate/AutoGenerate.java

@@ -18,7 +18,7 @@ public class AutoGenerate {
         String path =System.getProperty("user.dir");
 
         generate(path,"manage", getTables(new String[]{
-                "t_folder_scene",
+                "t_mq_backup",
         }));
 
 //        generate(path,"goods", getTables(new String[]{
@@ -46,8 +46,8 @@ public class AutoGenerate {
 
 
     public static void  generate(String path,String moduleName,  List<String> tables){
-        FastAutoGenerator.create("jdbc:mysql://rm-wz90w10465iiwwv098o.mysql.rds.aliyuncs.com:3306/4dkankan_v4_prod",
-                "root","D2719bd0cae1a005")
+        FastAutoGenerator.create("jdbc:mysql://120.24.144.164:3306/4dkankan_v4",
+                "root","4Dage@4Dage#@168")
                 .globalConfig(builder -> {
                     builder.author("")               //作者
                             .outputDir(path+"\\src\\main\\java")    //输出路径(写到java目录)

+ 18 - 0
src/main/java/com/fdkankan/manage/mapper/IMqBackupMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.manage.mapper;
+
+import com.fdkankan.manage.entity.MqBackup;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-01-05
+ */
+@Mapper
+public interface IMqBackupMapper extends BaseMapper<MqBackup> {
+
+}

+ 23 - 0
src/main/java/com/fdkankan/manage/service/IMqBackupService.java

@@ -0,0 +1,23 @@
+package com.fdkankan.manage.service;
+
+import com.fdkankan.manage.common.ResultData;
+import com.fdkankan.manage.entity.MqBackup;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.io.UnsupportedEncodingException;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-01-05
+ */
+public interface IMqBackupService extends IService<MqBackup> {
+
+    ResultData getRabbitMqMsg(String queue, int needRequeue) throws UnsupportedEncodingException;
+
+    ResultData rabbitmqRequeue(String queue) throws UnsupportedEncodingException;
+
+}

+ 10 - 0
src/main/java/com/fdkankan/manage/service/IToolsApiService.java

@@ -0,0 +1,10 @@
+package com.fdkankan.manage.service;
+
+import com.fdkankan.manage.common.ResultData;
+
+import java.io.UnsupportedEncodingException;
+
+public interface IToolsApiService {
+
+
+}

+ 7 - 0
src/main/java/com/fdkankan/manage/service/impl/ExcelServiceImpl.java

@@ -5,10 +5,13 @@ import com.alibaba.excel.ExcelWriter;
 import com.alibaba.excel.write.metadata.WriteSheet;
 import com.fdkankan.manage.common.ExcelErrorUtil;
 import com.fdkankan.manage.common.ResultCode;
+import com.fdkankan.manage.constant.ImportExcelType;
 import com.fdkankan.manage.entity.AgentNew;
 import com.fdkankan.manage.exception.BusinessException;
 import com.fdkankan.manage.constant.CameraOutTypeEnum;
 import com.fdkankan.manage.entity.Company;
+import com.fdkankan.manage.factory.ExcelHandlerFactory;
+import com.fdkankan.manage.factory.ImportExcelHandler;
 import com.fdkankan.manage.service.IAgentNewService;
 import com.fdkankan.manage.service.ICameraService;
 import com.fdkankan.manage.service.ICompanyService;
@@ -97,6 +100,10 @@ public class ExcelServiceImpl implements IExcelService {
         List<CameraInOutParam> params = new ArrayList<>();
         List<CameraInOutParam> companyParams = new ArrayList<>();
         List<Integer> errorIndex = new ArrayList<>();
+
+        ImportExcelHandler handler = ExcelHandlerFactory.getHandler(ImportExcelType.get(type).message());
+        handler.importExcel(excelRowList);
+
         Integer index = 0;
         for (HashMap<Integer, String> map : excelRowList) {
             index ++;

+ 97 - 0
src/main/java/com/fdkankan/manage/service/impl/MqBackupServiceImpl.java

@@ -0,0 +1,97 @@
+package com.fdkankan.manage.service.impl;
+import java.util.Calendar;
+import java.util.Date;
+
+import cn.hutool.core.collection.CollUtil;
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.fdkankan.common.constant.CommonStatus;
+import com.fdkankan.common.constant.ErrorCode;
+import com.fdkankan.common.constant.RecStatus;
+import com.fdkankan.common.exception.BusinessException;
+import com.fdkankan.manage.common.ResultData;
+import com.fdkankan.manage.entity.MqBackup;
+import com.fdkankan.manage.mapper.IMqBackupMapper;
+import com.fdkankan.manage.service.IMqBackupService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fdkankan.rabbitmq.util.RabbitMqProducer;
+import com.rabbitmq.client.Channel;
+import com.rabbitmq.client.GetResponse;
+import org.springframework.amqp.rabbit.core.ChannelCallback;
+import org.springframework.amqp.rabbit.core.RabbitTemplate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.io.UnsupportedEncodingException;
+import java.nio.charset.StandardCharsets;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2023-01-05
+ */
+@Service
+public class MqBackupServiceImpl extends ServiceImpl<IMqBackupMapper, MqBackup> implements IMqBackupService {
+
+    @Autowired
+    private RabbitTemplate rabbitTemplate;
+    @Autowired
+    private RabbitMqProducer rabbitMqProducer;
+
+    @Override
+    public ResultData getRabbitMqMsg(String queue, int needRequeue) throws UnsupportedEncodingException {
+        if(needRequeue != CommonStatus.YES.code() && needRequeue != CommonStatus.NO.code()){
+            throw new BusinessException(ErrorCode.FAILURE_CODE_5012);
+        }
+        boolean exit = false;
+        do {
+            GetResponse getResponse = rabbitTemplate.execute(channel -> channel.basicGet(queue, true));
+            if(Objects.nonNull(getResponse)){
+                byte[] body = getResponse.getBody();
+                MqBackup mqBackup = new MqBackup();
+                mqBackup.setQueue(queue);
+                mqBackup.setMsg(new String(body, StandardCharsets.UTF_8.name()));
+                mqBackup.setNeedRequeue(needRequeue);
+                mqBackup.setCreateTime(Calendar.getInstance().getTime());
+                this.save(mqBackup);
+            }else{
+                exit = true;
+            }
+        }while (!exit);
+
+        return ResultData.ok();
+    }
+
+    @Override
+    public ResultData rabbitmqRequeue(String queue) throws UnsupportedEncodingException {
+
+        int index = 0;
+        int size = 500;
+        boolean exit = false;
+        do {
+            List<MqBackup> list = this.list(new LambdaQueryWrapper<MqBackup>()
+                    .eq(MqBackup::getQueue, queue)
+                    .eq(MqBackup::getNeedRequeue, CommonStatus.YES.code().intValue())
+                    .eq(MqBackup::getRequeue, CommonStatus.NO.code().intValue()).last("limit " + index + "," + size));
+            if(CollUtil.isNotEmpty(list)){
+                list.stream().forEach(mqBackup -> {
+                    rabbitMqProducer.sendByWorkQueue(mqBackup.getQueue(), JSON.parseObject(mqBackup.getMsg()));
+                    mqBackup.setRequeue(CommonStatus.YES.code().intValue());
+                    mqBackup.setRecStatus(RecStatus.DISABLE.code());
+                    this.updateById(mqBackup);
+                    this.removeById(mqBackup);
+                });
+                index += size;
+            }else{
+                exit = true;
+            }
+        }while (!exit);
+        return ResultData.ok();
+    }
+
+}

+ 20 - 0
src/main/java/com/fdkankan/manage/service/impl/ToolsApiServiceImpl.java

@@ -0,0 +1,20 @@
+package com.fdkankan.manage.service.impl;
+
+import com.fdkankan.manage.common.ResultData;
+import com.fdkankan.manage.service.IToolsApiService;
+import com.rabbitmq.client.Channel;
+import com.rabbitmq.client.GetResponse;
+import org.springframework.amqp.rabbit.core.ChannelCallback;
+import org.springframework.amqp.rabbit.core.RabbitTemplate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.io.UnsupportedEncodingException;
+import java.nio.charset.StandardCharsets;
+import java.util.Objects;
+
+@Service
+public class ToolsApiServiceImpl implements IToolsApiService {
+
+
+}

+ 5 - 1
src/main/resources/bootstrap-test.yml

@@ -32,9 +32,13 @@ spring:
             group: DEFAULT_GROUP
             refresh: true
 
+          - data-id: common-rabbitmq-config.yaml
+            group: DEFAULT_GROUP
+            refresh: true
+
       discovery:
         server-addr: ${spring.cloud.nacos.config.server-addr}
-        namespace: ${spring.cloud.nacos.config.namespace}
+        namespace: public
 
 
 

+ 5 - 0
src/main/resources/mapper/manage/MqBackupMapper.xml

@@ -0,0 +1,5 @@
+<?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.fdkankan.manage.mapper.IMqBackupMapper">
+
+</mapper>