浏览代码

二手交易-排行榜

qrs 2 月之前
父节点
当前提交
b8fce9fb72

+ 8 - 0
alien-entity/src/main/java/shop/alien/entity/second/SecondTradeRecord.java

@@ -135,6 +135,14 @@ public class SecondTradeRecord extends Model<SecondTradeRecord> {
     @TableField("cancel_reason_supplement")
     @TableField("cancel_reason_supplement")
     private String cancelReasonSupplement;
     private String cancelReasonSupplement;
 
 
+    @ApiModelProperty(value = "失效状态(平台端统计用)  0-未失效  1-已失效")
+    @TableField("failure_flag")
+    private String failureFlag;
+
+    @ApiModelProperty(value = "失效原因")
+    @TableField("failure_reason")
+    private String failureReason;
+
     @ApiModelProperty(value = "删除标记  0:未删除  1:已删除")
     @ApiModelProperty(value = "删除标记  0:未删除  1:已删除")
     @TableField("delete_flag")
     @TableField("delete_flag")
     @TableLogic
     @TableLogic

+ 3 - 0
alien-entity/src/main/java/shop/alien/entity/second/vo/SecondTradeRecordVo.java

@@ -39,6 +39,9 @@ public class SecondTradeRecordVo extends SecondTradeRecord {
     @ApiModelProperty(value = "商品标题")
     @ApiModelProperty(value = "商品标题")
     private String title;
     private String title;
 
 
+    @ApiModelProperty(value = "用户id")
+    private Integer userId;
+
     @TableField(exist = false)
     @TableField(exist = false)
     @ApiModelProperty(value = "用户电话")
     @ApiModelProperty(value = "用户电话")
     private String userPhone;
     private String userPhone;

+ 32 - 1
alien-entity/src/main/java/shop/alien/mapper/second/SecondTradeRecordMapper.java

@@ -1,6 +1,7 @@
 package shop.alien.mapper.second;
 package shop.alien.mapper.second;
 
 
 
 
+import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -13,6 +14,7 @@ import shop.alien.entity.second.SecondTradeRecord;
 import shop.alien.entity.second.vo.SecondTradeRecordVo;
 import shop.alien.entity.second.vo.SecondTradeRecordVo;
 import shop.alien.entity.store.vo.LifeFansVo;
 import shop.alien.entity.store.vo.LifeFansVo;
 
 
+import java.util.Date;
 import java.util.List;
 import java.util.List;
 
 
 /**
 /**
@@ -36,9 +38,12 @@ public interface SecondTradeRecordMapper extends BaseMapper<SecondTradeRecord> {
 
 
     @Select("select trade.id, trade.trade_no, trade.goods_id, goods.title, goods.home_image, goods.price, trade.transaction_amount, trade.trade_status, " +
     @Select("select trade.id, trade.trade_no, trade.goods_id, goods.title, goods.home_image, goods.price, trade.transaction_amount, trade.trade_status, " +
             "trade.transaction_time, trade.seller_id, trade.transaction_latitude_longitude, trade.transaction_latitude_longitude_address, " +
             "trade.transaction_time, trade.seller_id, trade.transaction_latitude_longitude, trade.transaction_latitude_longitude_address, " +
-            "trade.transaction_location, trade.created_user_id, if (now() >= trade.transaction_time, 1, 0) timeOutFlag " +
+            "trade.transaction_location, trade.created_user_id, trade.failure_flag, trade.failure_reason, if (now() >= trade.transaction_time, 1, 0) timeOutFlag, " +
+            "buyer.user_name buyerName, buyer.user_phone buyerPhone, seller.user_name sellerName, seller.user_phone sellerPhone " +
             "from second_trade_record trade " +
             "from second_trade_record trade " +
             "left join second_goods_record goods on goods.id = trade.goods_record_id " +
             "left join second_goods_record goods on goods.id = trade.goods_record_id " +
+            "left join life_user buyer on buyer.id = trade.buyer_id " +
+            "left join life_user seller on seller.id = trade.seller_id  " +
             "${ew.customSqlSegment} ")
             "${ew.customSqlSegment} ")
     IPage<SecondTradeRecordVo> getTradeRecordPage(IPage<SecondTradeRecord> page, @Param(Constants.WRAPPER) QueryWrapper<SecondTradeRecord> wrapper);
     IPage<SecondTradeRecordVo> getTradeRecordPage(IPage<SecondTradeRecord> page, @Param(Constants.WRAPPER) QueryWrapper<SecondTradeRecord> wrapper);
 
 
@@ -48,4 +53,30 @@ public interface SecondTradeRecordMapper extends BaseMapper<SecondTradeRecord> {
             "left join life_user seller on seller.id = trade.seller_id " +
             "left join life_user seller on seller.id = trade.seller_id " +
             "where trade.id = #{id}")
             "where trade.id = #{id}")
     SecondTradeRecordVo getTradeRecordById(@Param("id") Integer id);
     SecondTradeRecordVo getTradeRecordById(@Param("id") Integer id);
+
+    @Select("with record as ( " +
+            "    select buyer_id userId, count(1) num, 'buyer' flag " +
+            "    from second_trade_record " +
+            "    where delete_flag = 0 and trade_status = 4 and failure_flag = 0 " +
+            "    and transaction_time >= #{beginTime} and transaction_time <= #{endTime} " +
+            "    group by buyer_id " +
+            "    union all " +
+            "    select seller_id userId, count(1) num, 'seller' flag " +
+            "    from second_trade_record " +
+            "    where delete_flag = 0 and trade_status = 4 and failure_flag = 0 " +
+            "    and transaction_time >= #{beginTime} and transaction_time <= #{endTime} " +
+            "    group by seller_id " +
+            ") " +
+            "select a.*, ifnull(b.num, 0) buyer, ifnull(c.num, 0) seller, user.user_name userName, concat('user_', user.user_phone) phoneId " +
+            "from ( " +
+            "    select userId, sum(num) num " +
+            "    from record " +
+            "    group by userId " +
+            ") a " +
+            "left join record b on a.userId = b.userId and b.flag = 'buyer' " +
+            "left join record c on a.userId = c.userId and c.flag = 'seller' " +
+            "join life_user user on user.id = a.userId and user.delete_flag = 0 " +
+            "order by a.num desc " +
+            "limit 20 ")
+    List<JSONObject> getRankingList(@Param("beginTime") String beginTime, @Param("endTime") String endTime);
 }
 }

+ 29 - 2
alien-second/src/main/java/shop/alien/second/platform/PlatformSecondTradeController.java

@@ -1,5 +1,6 @@
 package shop.alien.second.platform;
 package shop.alien.second.platform;
 
 
+import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import io.swagger.annotations.*;
 import io.swagger.annotations.*;
 import lombok.RequiredArgsConstructor;
 import lombok.RequiredArgsConstructor;
@@ -9,6 +10,7 @@ import shop.alien.entity.result.R;
 import shop.alien.entity.second.vo.SecondTradeRecordVo;
 import shop.alien.entity.second.vo.SecondTradeRecordVo;
 import shop.alien.second.service.PlatformSecondTradeService;
 import shop.alien.second.service.PlatformSecondTradeService;
 
 
+import java.util.Date;
 import java.util.List;
 import java.util.List;
 
 
 @Slf4j
 @Slf4j
@@ -22,7 +24,7 @@ public class PlatformSecondTradeController {
 
 
     private final PlatformSecondTradeService secondTradeRecordService;
     private final PlatformSecondTradeService secondTradeRecordService;
 
 
-    @ApiOperation("交易列表")
+    @ApiOperation("交易列表(分页)")
     @ApiOperationSupport(order = 1)
     @ApiOperationSupport(order = 1)
     @PostMapping("/getTradeRecordPage")
     @PostMapping("/getTradeRecordPage")
     public R<IPage<SecondTradeRecordVo>> getTradeRecordPage(@RequestBody SecondTradeRecordVo vo) throws Exception {
     public R<IPage<SecondTradeRecordVo>> getTradeRecordPage(@RequestBody SecondTradeRecordVo vo) throws Exception {
@@ -30,12 +32,37 @@ public class PlatformSecondTradeController {
         return R.data(secondTradeRecordService.getTradeRecordPage(vo));
         return R.data(secondTradeRecordService.getTradeRecordPage(vo));
     }
     }
 
 
-    @ApiOperation("交易详情")
+    @ApiOperation("交易列表(不分页)")
     @ApiOperationSupport(order = 2)
     @ApiOperationSupport(order = 2)
+    @GetMapping("/getTradeRecordList")
+    public R<List<SecondTradeRecordVo>> getTradeRecordList(Integer userId, String beginTime, String endTime) throws Exception {
+        log.info("PlatformSecondTradeController.getTradeRecordList?userId={},beginTime={},endTime={}", userId, beginTime, endTime);
+        return R.data(secondTradeRecordService.getTradeRecordList(userId, beginTime, endTime));
+    }
+
+    @ApiOperation("交易详情")
+    @ApiOperationSupport(order = 3)
     @GetMapping("/getTradeRecordById")
     @GetMapping("/getTradeRecordById")
     public R<SecondTradeRecordVo> getTradeRecordById(Integer id) throws Exception {
     public R<SecondTradeRecordVo> getTradeRecordById(Integer id) throws Exception {
         log.info("PlatformSecondTradeController.getTradeRecordById?id={}",id);
         log.info("PlatformSecondTradeController.getTradeRecordById?id={}",id);
         return R.data(secondTradeRecordService.getTradeRecordById(id));
         return R.data(secondTradeRecordService.getTradeRecordById(id));
     }
     }
 
 
+    @ApiOperation("排行榜")
+    @ApiOperationSupport(order = 4)
+    @GetMapping("/getRankingList")
+    public R<List<JSONObject>> getRankingList(String beginTime, String endTime) throws Exception {
+        log.info("PlatformSecondTradeController.getRankingList");
+        return R.data(secondTradeRecordService.getRankingList(beginTime, endTime));
+    }
+
+    @ApiOperation("交易失效")
+    @ApiOperationSupport(order = 5)
+    @GetMapping("/setTradeFailure")
+    public R<Boolean> setTradeFailure(Integer tradeId, String failureReason) throws Exception {
+        log.info("PlatformSecondTradeController.setTradeFailure?tradeId={},failureReason={}", tradeId, failureReason);
+        secondTradeRecordService.setTradeFailure(tradeId, failureReason);
+        return R.success("操作成功");
+    }
+
 }
 }

+ 8 - 0
alien-second/src/main/java/shop/alien/second/service/PlatformSecondTradeService.java

@@ -7,12 +7,20 @@ import org.springframework.context.annotation.Lazy;
 import shop.alien.entity.second.SecondTradeRecord;
 import shop.alien.entity.second.SecondTradeRecord;
 import shop.alien.entity.second.vo.SecondTradeRecordVo;
 import shop.alien.entity.second.vo.SecondTradeRecordVo;
 
 
+import java.util.Date;
 import java.util.List;
 import java.util.List;
 
 
 public interface PlatformSecondTradeService extends IService<SecondTradeRecord> {
 public interface PlatformSecondTradeService extends IService<SecondTradeRecord> {
 
 
     IPage<SecondTradeRecordVo> getTradeRecordPage(SecondTradeRecordVo vo) throws Exception;
     IPage<SecondTradeRecordVo> getTradeRecordPage(SecondTradeRecordVo vo) throws Exception;
 
 
+    List<SecondTradeRecordVo> getTradeRecordList(Integer userId, String beginTime, String endTime) throws Exception;
+
     SecondTradeRecordVo getTradeRecordById(Integer id) throws Exception;
     SecondTradeRecordVo getTradeRecordById(Integer id) throws Exception;
+
     List<JSONObject> getOperationJsonList(Integer tradeId) throws Exception;
     List<JSONObject> getOperationJsonList(Integer tradeId) throws Exception;
+
+    List<JSONObject> getRankingList(String beginTime, String endTime) throws Exception;
+
+    void setTradeFailure(Integer tradeId, String failureReason) throws Exception;
 }
 }

+ 53 - 4
alien-second/src/main/java/shop/alien/second/service/impl/PlatformSecondTradeServiceImpl.java

@@ -1,8 +1,10 @@
 package shop.alien.second.service.impl;
 package shop.alien.second.service.impl;
 
 
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.date.DateUtil;
 import com.alibaba.fastjson2.JSONObject;
 import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -20,12 +22,11 @@ import shop.alien.mapper.second.SecondTradeRecordMapper;
 import shop.alien.second.service.PlatformSecondTradeService;
 import shop.alien.second.service.PlatformSecondTradeService;
 import shop.alien.second.service.SecondGoodsService;
 import shop.alien.second.service.SecondGoodsService;
 
 
+import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.time.ZoneId;
 import java.time.ZoneId;
 import java.time.format.DateTimeFormatter;
 import java.time.format.DateTimeFormatter;
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
 @Slf4j
 @Slf4j
@@ -58,6 +59,28 @@ public class PlatformSecondTradeServiceImpl extends ServiceImpl<SecondTradeRecor
     }
     }
 
 
     @Override
     @Override
+    public List<SecondTradeRecordVo> getTradeRecordList(Integer userId, String beginTime, String endTime) throws Exception {
+        try {
+            Page<SecondTradeRecord> page = new Page<>(1, 1000000);
+            QueryWrapper<SecondTradeRecord> wrapper = new QueryWrapper<>();
+            wrapper.eq("trade.delete_flag", 0);
+            wrapper.eq("trade.trade_status", 4);
+            wrapper.ge("trade.transaction_time", StringUtils.isEmpty(beginTime) ? "1970-01-01 00:00:00" : beginTime);
+            wrapper.le("trade.transaction_time", StringUtils.isEmpty(endTime) ? "9999-12-31 23:59:59" : endTime);
+            wrapper.apply(" (trade.buyer_id = " + userId + " or trade.seller_id = " + userId + ") ");
+            wrapper.orderByDesc("trade.created_time");
+            List<SecondTradeRecordVo> voList = secondTradeRecordMapper.getTradeRecordPage(page, wrapper).getRecords();
+            for (SecondTradeRecordVo item : voList) {
+                item.setOperationJsonList(getOperationJsonList(item.getId()));
+            }
+            return voList;
+        } catch (Exception e) {
+            log.error("PlatformSecondTradeServiceImpl.getTradeRecordList(): Error Msg={}", e.getMessage());
+            throw new Exception(e);
+        }
+    }
+
+    @Override
     public SecondTradeRecordVo getTradeRecordById(Integer id) throws Exception {
     public SecondTradeRecordVo getTradeRecordById(Integer id) throws Exception {
         try {
         try {
             // 交易信息
             // 交易信息
@@ -254,4 +277,30 @@ public class PlatformSecondTradeServiceImpl extends ServiceImpl<SecondTradeRecor
         }
         }
     }
     }
 
 
+    @Override
+    public List<JSONObject> getRankingList(String beginTime, String endTime) throws Exception {
+        try {
+            if (StringUtils.isBlank(beginTime)) beginTime = "1970-01-01 00:00:00";
+            if (StringUtils.isBlank(endTime)) endTime = "9999-12-31 23:59:59";
+            return secondTradeRecordMapper.getRankingList(beginTime, endTime);
+        } catch (Exception e) {
+            log.error("PlatformSecondTradeServiceImpl.getRankingList Error Msg={}", e.getMessage());
+            throw new Exception(e);
+        }
+    }
+
+    @Override
+    public void setTradeFailure(Integer tradeId, String failureReason) throws Exception {
+        try {
+            LambdaUpdateWrapper<SecondTradeRecord> wrapper = new LambdaUpdateWrapper<>();
+            wrapper.eq(SecondTradeRecord::getId, tradeId);
+            wrapper.set(SecondTradeRecord::getFailureFlag, 1);
+            wrapper.set(SecondTradeRecord::getFailureReason, failureReason);
+            secondTradeRecordMapper.update(null, wrapper);
+        } catch (Exception e) {
+            log.error("PlatformSecondTradeServiceImpl.setTradeFailure Error Msg={}", e.getMessage());
+            throw new Exception(e);
+        }
+    }
+
 }
 }