lrf 8 달 전
부모
커밋
8cbafead95

+ 4 - 0
src/main/java/com/free/config/MyBatisPlusConfig.java

@@ -1,13 +1,17 @@
 package com.free.config;
 
+import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
 
 import com.baomidou.mybatisplus.annotation.DbType;
 import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
 import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
 
+@EnableTransactionManagement
 @Configuration
+@MapperScan("com.free.mapper")
 public class MyBatisPlusConfig {
   /**
    * myBatisPlus 分页插件

+ 2 - 1
src/main/java/com/free/controller/MqController.java

@@ -31,7 +31,8 @@ public class MqController {
     String messageId = String.valueOf(UUID.randomUUID());
     map.put("id", messageId);
     mqService.sendMsg(MqListeners.exName, queue, map);
-
+    // 通知admin对话了
+    mqService.sendMsg(MqListeners.adminExName, null, messageId);
     return ResponseFormat.success();
   }
 

+ 6 - 0
src/main/java/com/free/controller/QuestionController.java

@@ -22,6 +22,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.type.CollectionType;
+import com.free.annotation.PassToken;
 import com.free.config.CustomizationException;
 import com.free.config.ExceptionEnum;
 import com.free.config.ResponseFormat;
@@ -39,6 +40,7 @@ public class QuestionController {
   @Autowired
   private QuestionService service;
 
+  @PassToken
   /** 创建数据 */
   @ApiOperation("创建数据")
   @PostMapping("")
@@ -52,6 +54,7 @@ public class QuestionController {
   }
 
   /** 修改数据 */
+  @PassToken
   @ApiOperation("修改数据")
   @PostMapping("/{id}")
   public Object update(@PathVariable long id, @RequestBody Question data) {
@@ -68,6 +71,7 @@ public class QuestionController {
   }
 
   /** 列表查询 */
+  @PassToken
   @ApiOperation("查询数据列表")
   @SuppressWarnings({ "unchecked" })
   @GetMapping()
@@ -107,6 +111,7 @@ public class QuestionController {
   }
 
   /** 根据id查询 */
+  @PassToken
   @ApiOperation("查询数据")
   @GetMapping("/{id}")
   public Object fetch(@PathVariable long id) {
@@ -115,6 +120,7 @@ public class QuestionController {
   }
 
   /** 根据id删除数据 */
+  @PassToken
   @ApiOperation("删除数据")
   @DeleteMapping("/{id}")
   public Object delete(@PathVariable long id) {

+ 127 - 0
src/main/java/com/free/controller/TransferApplyController.java

@@ -0,0 +1,127 @@
+package com.free.controller;
+
+import java.util.List;
+import java.util.Map;
+import java.util.HashMap;
+
+import javax.validation.Valid;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.free.config.CustomizationException;
+import com.free.config.ExceptionEnum;
+import com.free.config.ResponseFormat;
+import com.free.entity.TransferApply;
+import com.free.service.TransferApplyService;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+@RestController
+@RequestMapping("/ta")
+@Api(tags = "转人工申请")
+public class TransferApplyController {
+  @Autowired
+  private TransferApplyService service;
+
+  /** 创建数据 */
+  @ApiOperation("创建数据")
+  @PostMapping("")
+  public Object save(@RequestBody @Valid TransferApply data) {
+    this.service.save(data);
+    QueryWrapper qw = new QueryWrapper<>();
+    qw.eq("id", data.getId());
+    Map returnData = this.service.getMap(qw);
+    // TODO: 创建完数据后需要通过 mq 给管理员提示
+    return ResponseFormat.success(returnData);
+    // return ResponseFormat.success();
+  }
+
+  /** 修改数据 */
+  @ApiOperation("修改数据")
+  @PostMapping("/{id}")
+  public Object update(@PathVariable long id, @RequestBody TransferApply data) {
+    QueryWrapper qw = new QueryWrapper<>();
+    qw.eq("id", id);
+    Long num = this.service.count(qw);
+    if (num <= 0) {
+      throw new CustomizationException(ExceptionEnum.NOT_FOUND);
+    }
+    data.setId(id);
+    this.service.updateById(data);
+    Object newData = this.service.getById(id);
+    return ResponseFormat.success(newData);
+  }
+
+  /** 列表查询 */
+  @ApiOperation("查询数据列表")
+  @SuppressWarnings({ "unchecked" })
+  @GetMapping()
+  public Object list(@RequestParam Map<String, Object> allParams) {
+    Long skip = null, limit = null;
+    Map map = new HashMap();
+    QueryWrapper qw = new QueryWrapper<>();
+    /** 参数处理处理 */
+    for (String key : allParams.keySet()) {
+      Object value = allParams.get(key);
+      if (key.equals("skip")) {
+        skip = Long.valueOf(String.valueOf(value));
+      } else if (key.equals("limit")) {
+        limit = Long.valueOf(String.valueOf(value));
+      } else {
+        if (key.equals("title") || key.equals("platform")) {
+          qw.like(key, value);
+        } else {
+          // 其他为查询条件
+          qw.eq(key, value);
+        }
+      }
+    }
+    /** 分页处理 */
+    if (null != skip && null != limit) {
+      IPage page = new Page<>(skip, limit);
+      IPage pageResult = service.page(page, qw);
+      List data = pageResult.getRecords();
+      long total = pageResult.getTotal();
+      map.put("data", data);
+      map.put("total", total);
+    } else {
+      List list = service.list(qw);
+      map.put("data", list);
+    }
+    return ResponseFormat.success(map);
+  }
+
+  /** 根据id查询 */
+  @ApiOperation("查询数据")
+  @GetMapping("/{id}")
+  public Object fetch(@PathVariable long id) {
+    Object newData = service.getById(id);
+    return ResponseFormat.success(newData);
+  }
+
+  /** 根据id删除数据 */
+  @ApiOperation("删除数据")
+  @DeleteMapping("/{id}")
+  public Object delete(@PathVariable long id) {
+    QueryWrapper qw = new QueryWrapper<>();
+    qw.eq("id", id);
+    Long num = service.count(qw);
+    if (num <= 0) {
+      throw new CustomizationException(ExceptionEnum.NOT_FOUND);
+    }
+    service.removeById(id);
+    return ResponseFormat.success();
+  }
+}

+ 11 - 0
src/main/java/com/free/entity/ChatRecord.java

@@ -1,7 +1,12 @@
 package com.free.entity;
 
+import java.time.LocalDateTime;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.free.utils.BaseEntity;
 import com.gitee.sunchenbin.mybatis.actable.annotation.Column;
 import com.gitee.sunchenbin.mybatis.actable.annotation.Table;
@@ -28,6 +33,12 @@ public class ChatRecord extends BaseEntity {
   @ApiModelProperty("用户id")
   private Long user_id;
 
+  @TableField(fill = FieldFill.INSERT, select = false)
+  @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
+  @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+  @ApiModelProperty("对话时间")
+  private LocalDateTime time;
+
   @Column(comment = "对话内容", type = MySqlTypeConstant.TEXT)
   @TableField(value = "content")
   @ApiModelProperty("对话内容")

+ 49 - 0
src/main/java/com/free/entity/TransferApply.java

@@ -0,0 +1,49 @@
+package com.free.entity;
+
+import java.time.LocalDateTime;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.free.utils.BaseEntity;
+import com.gitee.sunchenbin.mybatis.actable.annotation.Column;
+import com.gitee.sunchenbin.mybatis.actable.annotation.Table;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Table(name = "transferApply")
+@TableName(value = "transferApply")
+@ApiModel("转人工服务")
+public class TransferApply extends BaseEntity {
+  @Column(comment = "客服人员id")
+  @TableField(value = "customer_id")
+  @ApiModelProperty("客服人员id")
+  private Long customer_id;
+
+
+  @Column(comment = "用户id")
+  @TableField(value = "user_id")
+  @ApiModelProperty("用户id")
+  private Long user_id;
+
+
+  @TableField(fill = FieldFill.INSERT, select = false)
+  @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
+  @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+  @ApiModelProperty("转人工申请时间")
+  private LocalDateTime apply_time;
+
+
+  @Column(comment = "是否接通转人工", defaultValue = "1")
+  @TableField(value = "is_agree")
+  @ApiModelProperty("是否接通转人工")
+  private String is_agree;
+
+}

+ 10 - 0
src/main/java/com/free/mapper/TransferApplyMapper.java

@@ -0,0 +1,10 @@
+package com.free.mapper;
+
+import org.apache.ibatis.annotations.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.free.entity.TransferApply;
+@Mapper
+public interface TransferApplyMapper extends BaseMapper<TransferApply>{
+  
+}

+ 32 - 3
src/main/java/com/free/mq/MqListeners.java

@@ -1,6 +1,7 @@
 package com.free.mq;
 
 import org.springframework.amqp.core.BindingBuilder;
+import org.springframework.amqp.core.FanoutExchange;
 import org.springframework.amqp.core.Binding;
 import org.springframework.amqp.core.Queue;
 import org.springframework.amqp.core.TopicExchange;
@@ -9,28 +10,56 @@ import org.springframework.context.annotation.Configuration;
 
 @Configuration
 public class MqListeners {
-  /** 交换机名 */
+  /** 管理用的队列和交换机,主要是平台统一监控: 1.用户进入智能客服;2.用户使用智能客服;3.用户需要转人工; */
+  /** 管理用 - 交换机 */
+  public final static String adminExName = "adminEx";
+  /** 管理用 - 队列名 */
+  public final static String adminQueue = "msg";
+
+  /** 对话用 - 交换机名 */
   public final static String exName = "chatEx";
-  /** 队列名 */
+  /** 对话用 - 队列名 */
   public final static String queueName = "chat";
-  /** 路由匹配 */
+  /** 对话用 - 路由匹配 */
   public final static String routerMatch = queueName + ".*";
 
+  @Bean()
+  public Queue adminQueue() {
+    System.out.println("create " + adminQueue + " queue");
+    return new Queue(adminQueue, true);
+  }
+
+  @Bean()
+  FanoutExchange admiExchange() {
+    System.out.println("create " + adminExName + " ex");
+    FanoutExchange f = new FanoutExchange(adminExName);
+    return f;
+  }
+
+  @Bean
+  Binding bindingAdminExchangeMessage() {
+    System.out.println("bind " + adminExName + " +" + adminQueue);
+    return BindingBuilder.bind(adminQueue()).to(admiExchange());
+  }
+
   /** 声明队列 */
   @Bean
   public Queue chatQueue() {
+    System.out.println("create " + queueName + " queue");
     return new Queue(queueName, true);
   }
 
   /** 声明交换机 */
   @Bean
   TopicExchange exchange() {
+    System.out.println("create " + exName + " ex");
     return new TopicExchange(exName);
   }
 
   /** 队列绑定交换机 */
   @Bean
   Binding bindingExchangeMessage() {
+    System.out.println("bind " + exName + " +" + queueName + " with router key " + routerMatch);
     return BindingBuilder.bind(chatQueue()).to(exchange()).with(routerMatch);
   }
 

+ 12 - 0
src/main/java/com/free/service/TransferApplyService.java

@@ -0,0 +1,12 @@
+package com.free.service;
+
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.free.entity.TransferApply;
+import com.free.mapper.TransferApplyMapper;
+
+@Service
+public class TransferApplyService extends ServiceImpl<TransferApplyMapper, TransferApply> {
+
+}