孙永军 2 rokov pred
rodič
commit
9cc1015773

+ 2 - 4
src/main/java/com/sxtvs/open/api/clue/controller/ClueController.java

@@ -4,7 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.sxtvs.open.api.clue.dto.ClueDTO;
 import com.sxtvs.open.api.clue.dto.VerifyDTO;
 import com.sxtvs.open.api.clue.entity.Clue;
-import com.sxtvs.open.api.clue.entity.ClueInfo;
+import com.sxtvs.open.api.clue.entity.Info;
 import com.sxtvs.open.api.clue.entity.ClueReply;
 import com.sxtvs.open.api.clue.service.impl.ClueReplyServiceImpl;
 import com.sxtvs.open.api.clue.service.impl.ClueServiceImpl;
@@ -13,8 +13,6 @@ import jakarta.annotation.Resource;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.List;
-
 /**
  * <p>
  *  前端控制器
@@ -65,7 +63,7 @@ public class ClueController {
 
     @GetMapping("info")
     @LoginRequired
-    public ClueInfo info(@RequestParam("id") Long clueId){
+    public Info info(@RequestParam("id") Long clueId){
         return clueService.info(clueId);
     }
 }

+ 18 - 0
src/main/java/com/sxtvs/open/api/clue/controller/ClueInfoController.java

@@ -0,0 +1,18 @@
+package com.sxtvs.open.api.clue.controller;
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author syj
+ * @since 2023-03-21
+ */
+@RestController
+@RequestMapping("/clue/clueInfo")
+public class ClueInfoController {
+
+}

+ 7 - 0
src/main/java/com/sxtvs/open/api/clue/entity/Clue.java

@@ -1,6 +1,7 @@
 package com.sxtvs.open.api.clue.entity;
 
 import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import java.io.Serializable;
 import java.math.BigDecimal;
@@ -182,4 +183,10 @@ public class Clue implements Serializable {
      * 0无效,1有效
      */
     private Byte validity;
+
+    @TableField(exist = false)
+    private Integer clueInfoCount;
+
+    @TableField(exist = false)
+    private String clueInfoType;
 }

+ 61 - 7
src/main/java/com/sxtvs/open/api/clue/entity/ClueInfo.java

@@ -1,12 +1,66 @@
 package com.sxtvs.open.api.clue.entity;
 
-import lombok.Data;
-import lombok.EqualsAndHashCode;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import lombok.Getter;
+import lombok.Setter;
 
-import java.util.List;
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author syj
+ * @since 2023-03-21
+ */
+@Getter
+@Setter
+@TableName("clue_info")
+public class ClueInfo implements Serializable {
 
-@EqualsAndHashCode(callSuper = true)
-@Data
-public class ClueInfo extends Clue{
-    private List<ClueReply> clueReplies;
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 关联线索表id
+     */
+    private Long relaId;
+
+    /**
+     * 添加时间
+     */
+    private LocalDateTime addTime;
+
+    /**
+     * 添加人
+     */
+    private String addUser;
+
+    /**
+     * 源地址
+     */
+    private String materialUrl;
+
+    /**
+     * 源类型: 0文本 1图片 2视频 3音频
+     */
+    private Integer type;
+
+    /**
+     * 本地地址
+     */
+    private String localUrl;
+
+    /**
+     * 微信的材料地址
+     */
+    private String wechatMaterialId;
 }

+ 14 - 0
src/main/java/com/sxtvs/open/api/clue/entity/Info.java

@@ -0,0 +1,14 @@
+package com.sxtvs.open.api.clue.entity;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.List;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class Info extends Clue{
+    private List<ClueReply> clueReplies;
+
+    private List<ClueInfo> clueInfos;
+}

+ 17 - 0
src/main/java/com/sxtvs/open/api/clue/mapper/ClueInfoMapper.java

@@ -0,0 +1,17 @@
+package com.sxtvs.open.api.clue.mapper;
+
+import com.sxtvs.open.api.clue.entity.ClueInfo;
+import com.sxtvs.open.api.clue.entity.Info;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author syj
+ * @since 2023-03-21
+ */
+public interface ClueInfoMapper extends BaseMapper<ClueInfo> {
+
+}

+ 17 - 0
src/main/java/com/sxtvs/open/api/clue/service/IClueInfoService.java

@@ -0,0 +1,17 @@
+package com.sxtvs.open.api.clue.service;
+
+import com.sxtvs.open.api.clue.entity.ClueInfo;
+import com.sxtvs.open.api.clue.entity.Info;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author syj
+ * @since 2023-03-21
+ */
+public interface IClueInfoService extends IService<ClueInfo> {
+
+}

+ 21 - 0
src/main/java/com/sxtvs/open/api/clue/service/impl/ClueInfoServiceImpl.java

@@ -0,0 +1,21 @@
+package com.sxtvs.open.api.clue.service.impl;
+
+import com.sxtvs.open.api.clue.entity.ClueInfo;
+import com.sxtvs.open.api.clue.entity.Info;
+import com.sxtvs.open.api.clue.mapper.ClueInfoMapper;
+import com.sxtvs.open.api.clue.service.IClueInfoService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author syj
+ * @since 2023-03-21
+ */
+@Service
+public class ClueInfoServiceImpl extends ServiceImpl<ClueInfoMapper, ClueInfo> implements IClueInfoService {
+
+}

+ 28 - 4
src/main/java/com/sxtvs/open/api/clue/service/impl/ClueServiceImpl.java

@@ -11,15 +11,21 @@ import com.sxtvs.open.api.clue.dto.VerifyDTO;
 import com.sxtvs.open.api.clue.entity.Clue;
 import com.sxtvs.open.api.clue.entity.ClueInfo;
 import com.sxtvs.open.api.clue.entity.ClueReply;
+import com.sxtvs.open.api.clue.entity.Info;
 import com.sxtvs.open.api.clue.mapper.ClueMapper;
 import com.sxtvs.open.api.clue.service.IClueService;
 import com.sxtvs.open.core.advice.BizException;
 import jakarta.annotation.Resource;
+import org.apache.commons.lang3.tuple.ImmutablePair;
+import org.apache.commons.lang3.tuple.Pair;
 import org.apache.http.util.TextUtils;
+import org.apache.logging.log4j.util.Strings;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.time.LocalDateTime;
+import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 /**
@@ -36,16 +42,33 @@ public class ClueServiceImpl extends ServiceImpl<ClueMapper, Clue> implements IC
     @Resource
     private ClueReplyServiceImpl clueReplyService;
 
+    @Resource
+    private ClueInfoServiceImpl clueInfoService;
+
     public IPage<Clue> cluePage(ClueDTO clueDTO){
 
         LambdaQueryWrapper<Clue> wrapper = Wrappers.lambdaQuery();
 
-        return baseMapper.selectPage(new Page<>(clueDTO.getPage(), clueDTO.getSize()), wrapper.ge(clueDTO.getStart() != null, Clue::getAddTime, clueDTO.getStart())
-                .le(clueDTO.getEnd() != null, Clue::getAddTime, clueDTO.getEnd())
+        IPage<Clue> clueIPage = baseMapper.selectPage(new Page<>(clueDTO.getPage(), clueDTO.getSize()),
+                wrapper.ge(clueDTO.getStart() != null, Clue::getAddTime, clueDTO.getStart())
+                .lt(clueDTO.getEnd() != null, Clue::getAddTime, clueDTO.getEnd().plusDays(1L))
                 .like(!TextUtils.isEmpty(clueDTO.getTitle()), Clue::getTitle, "%" + clueDTO.getTitle() + "%")
                 .eq(Clue::getValidity, (byte) 1)
                 .orderByDesc(Clue::getId)
         );
+
+        Map<Long, Pair<String, Integer>> collect = clueInfoService.lambdaQuery().in(
+                ClueInfo::getRelaId, clueIPage.getRecords().stream().map(Clue::getId).collect(Collectors.toList())
+        ).list().stream().collect(Collectors.groupingBy(ClueInfo::getRelaId, Collectors.collectingAndThen(Collectors.toList(),
+                data -> new ImmutablePair<>(Strings.join(data.stream().map(ClueInfo::getType).distinct().collect(Collectors.toList()), ','), data.size())
+        )));
+
+        clueIPage.setRecords(clueIPage.getRecords().stream().peek(v -> {
+            v.setClueInfoCount(collect.containsKey(v.getId()) ? collect.get(v.getId()).getRight() : 1);
+            v.setClueInfoType(collect.containsKey(v.getId()) ? collect.get(v.getId()).getLeft() : "0");
+        }).collect(Collectors.toList()));
+
+        return clueIPage;
     }
 
     public void store(Clue clue){
@@ -91,11 +114,12 @@ public class ClueServiceImpl extends ServiceImpl<ClueMapper, Clue> implements IC
         );
     }
 
-    public ClueInfo info(Long id){
+    public Info info(Long id){
         Clue clue = getById(id);
-        ClueInfo info = new ClueInfo();
+        Info info = new Info();
         BeanUtil.copyProperties(clue, info);
         info.setClueReplies(clueReplyService.lambdaQuery().eq(ClueReply::getClueId,clue.getId()).list());
+        info.setClueInfos(clueInfoService.lambdaQuery().eq(ClueInfo::getRelaId, clue.getId()).list());
         return info;
     }