Browse Source

Merge branch 'mp-server-test' into 'master'

Mp server test

See merge request quanshu/mp-server!373
zhong chunping 3 years ago
parent
commit
92fc0c839e

+ 5 - 0
mp-admin/src/main/java/com/qs/mp/web/controller/api/admin/ChannelMgrController.java

@@ -156,6 +156,11 @@ public class ChannelMgrController extends BaseApiController {
 					// 查询用户信息
 					// SysUser sysUser = userService.selectUserById(channelVO.getUserId());
 					// channelVO.setSysUser(sysUser);
+					// 查询子渠道数量
+					int childCnt = channelService.count(
+							new LambdaQueryWrapper<Channel>().eq(Channel::getParentId, channelVO.getChannelId())
+							.gt(Channel::getLevel, 0));
+					channelVO.setChildCnt(childCnt);
  				}
 			}
 		}

+ 24 - 1
mp-admin/src/main/java/com/qs/mp/web/controller/api/user/UserTicketController.java

@@ -273,14 +273,37 @@ public class UserTicketController extends BaseApiController {
         }
       }
     }
-    // 获取除该用户外,最近中奖的 20 条弹幕信息
+    // 获取除该用户外,最近中奖的 40 条弹幕信息
     List<TicketHitPrizeBarrageVO> ticketHitPrizeBarrageVOList = userHitPrizeService.hitPrizeBarrage(userId);
 
+    // 获取除该用户外,近 6 个月,8 条高级中奖弹幕信息
+    List<TicketHitPrizeBarrageVO> expensiveHitPrizeBarrageList = userHitPrizeService.expensiveHitPrizeBarrage(userId);
+    int count = 0;
+    int index = 0;
+    if (CollectionUtils.isNotEmpty(expensiveHitPrizeBarrageList)) {
+      count = expensiveHitPrizeBarrageList.size();
+      // 去重
+      ticketHitPrizeBarrageVOList.removeAll(expensiveHitPrizeBarrageList);
+    }
+
+
     for (int i = 0; i < ticketHitPrizeBarrageVOList.size(); i++) {
       // 类型为盲豆则拼接数量
       if(TicketPrizeTypeEnum.COIN.getValue().equals(ticketHitPrizeBarrageVOList.get(i).getPrizeType())){
         ticketHitPrizeBarrageVOList.get(i).setPrizeInfo(ticketHitPrizeBarrageVOList.get(i).getPrizeInfo() + ticketHitPrizeBarrageVOList.get(i).getValue() + "颗");
       }
+
+      // 插入大奖弹幕
+      if (count != 0 && i % 5 == 0) {
+        if (index % 2 == 0) {
+          listOne.add(expensiveHitPrizeBarrageList.get(index));
+        }else {
+          listTwo.add(expensiveHitPrizeBarrageList.get(index));
+        }
+        count--;
+        index++;
+      }
+
       if (i % 2 == 0) {
         listOne.add(ticketHitPrizeBarrageVOList.get(i));
       }else {

+ 1 - 1
mp-admin/src/main/java/com/qs/mp/web/controller/api/user/UserTicketOrderController.java

@@ -132,7 +132,7 @@ public class UserTicketOrderController extends BaseApiController {
     // 当前没有运费和优惠,实付金额=订单金额
     orderSettleVO.setPayAmt(orderAmt - discountAmt);
     orderSettleVO.setOrderNum(param.getOrderNum());
-    orderSettleVO.setBoxId(param.getBoxId());
+    orderSettleVO.setBoxId(ticketBox.getBoxId());
     orderSettleVO.setTicketId(param.getTicketId());
     orderSettleVO.setPicUrl(ticketBox.getPicUrl());
     orderSettleVO.setTitle(ticketBox.getTitle());

+ 93 - 7
mp-admin/src/main/java/com/qs/mp/web/controller/common/FileUploadController.java

@@ -1,7 +1,9 @@
 package com.qs.mp.web.controller.common;
 
 
+import com.alibaba.druid.sql.visitor.functions.If;
 import com.qs.mp.common.core.domain.AjaxResult;
+import com.qs.mp.common.enums.PicHandlerTypeEnum;
 import com.qs.mp.common.qcloud.QcloudFileUtils;
 import com.qs.mp.common.utils.LogUtil;
 import com.qs.mp.common.utils.StringUtils;
@@ -99,12 +101,25 @@ public class FileUploadController extends BaseApiController {
      */
     @PostMapping("image/remote/upload/post/{auth}")
     public AjaxResult postImage(@PathVariable("auth") int auth, @RequestParam("file") MultipartFile file)  {
-        return uploadImageFile(auth, file);
+        return uploadImageFile(auth, file, PicHandlerTypeEnum.CROP.getValue());
     }
 
+    @PutMapping("image/remote/upload/commpress/{auth}")
+    public AjaxResult postCommpressImage(@PathVariable("auth") int auth, @RequestParam("file") MultipartFile file)  {
+        return uploadImageFile(auth, file, PicHandlerTypeEnum.COMPRESSION.getValue());
+    }
+
+    /**
+     * 上传图形方法
+     * @param auth  认证
+     * @param file  文件信息
+     * @param handlerType   处理类型,1 裁剪,2 压缩
+     * @return
+     */
     private AjaxResult uploadImageFile(
         @PathVariable("auth") int auth,
-        @RequestParam("file") MultipartFile file) {
+        @RequestParam("file") MultipartFile file,
+        int handlerType) {
         try {
             if (null == file) {
                 return AjaxResult.error("上传文件参数为空.");
@@ -122,7 +137,14 @@ public class FileUploadController extends BaseApiController {
                 mimeType = "image/jpg";
             }
             LogUtil.info(logger," mimeType:" + mimeType + " fileName:" + file.getOriginalFilename());
-            String name = commpressPicAndUpLoadOSS(file, mimeType, 480, 480, bucketName);
+            String name = "";
+            if (PicHandlerTypeEnum.CROP.getValue().equals(handlerType)) {
+                // 裁剪并上传图片
+                name = cropPicAndUpLoadOSS(file, mimeType, 480, 480, bucketName);
+            }else if (PicHandlerTypeEnum.COMPRESSION.getValue().equals(handlerType)) {
+                // 压缩并上传图片
+                name = commpressPicAndUpLoadOSS(file, mimeType, bucketName);
+            }
             if (StringUtils.isBlank(name)) {
                 LogUtil.error(logger, "图片上传失败.");
                 return AjaxResult.error("图片上传失败.");
@@ -143,12 +165,19 @@ public class FileUploadController extends BaseApiController {
      */
     @PutMapping("image/remote/upload/{auth}")
     public AjaxResult uploadImage(@PathVariable("auth") int auth, @RequestParam("file") MultipartFile file)  {
-        return uploadImageFile(auth, file);
+        return uploadImageFile(auth, file, PicHandlerTypeEnum.CROP.getValue());
     }
 
-
-
-    private String commpressPicAndUpLoadOSS(MultipartFile file,String mimeType,int width,int height,String bucketName) {
+    /**
+     * 裁剪图片并上传
+     * @param file
+     * @param mimeType
+     * @param width
+     * @param height
+     * @param bucketName
+     * @return
+     */
+    private String cropPicAndUpLoadOSS(MultipartFile file,String mimeType,int width,int height,String bucketName) {
         String fileName = file.getOriginalFilename();
         int idx = fileName.lastIndexOf('.');
         String suffix = "";
@@ -191,4 +220,61 @@ public class FileUploadController extends BaseApiController {
         }
         return name;
     }
+
+
+    /**
+     * 压缩并上传图片
+     * @param file
+     * @param mimeType
+     * @param bucketName
+     * @return
+     */
+    private String commpressPicAndUpLoadOSS(MultipartFile file, String mimeType, String bucketName){
+        String fileName = file.getOriginalFilename();
+        int idx = fileName.lastIndexOf('.');
+        String suffix = "";
+        if (idx > 0) {
+            suffix = fileName.substring(idx);
+        }
+        String name = UUIDUtils.newId() + suffix;
+        try {
+            QcloudFileUtils.putStream(file.getInputStream(), name, bucketName, mimeType );
+            BufferedImage bufferedImage = ImageIO.read(file.getInputStream());
+            Builder<BufferedImage> builder = Thumbnails.of(bufferedImage);
+
+
+            int pWidth = bufferedImage.getWidth();
+            int pHeight = bufferedImage.getHeight();
+            builder.size(pWidth, pHeight);
+
+            String outFileDir = filePath+"/thumb";
+            File tempFile = new File(outFileDir);
+            if(!tempFile.exists()) {
+                tempFile.mkdirs();
+            }
+            String thumbName = name +"_s";
+            String outFilePath = filePath+"/thumb/"+thumbName+"."+mimeType.substring(mimeType.lastIndexOf("/")+1);
+            builder.toFile(outFilePath);
+
+            // 压缩图片
+            if (pWidth > 500) {
+                float scale = 500f / pWidth;
+                Thumbnails.of(outFilePath).scale(scale).outputQuality(0.8f).toFile(outFilePath);
+            }else {
+                Thumbnails.of(outFilePath).scale(1f).outputQuality(0.8f).toFile(outFilePath);
+            }
+
+
+            File outFile = new File(outFilePath);
+            QcloudFileUtils.putFile(outFile, thumbName, bucketName, mimeType);
+            if(outFile.exists()) {
+                LogUtil.info(log, "delete file..."+outFilePath);
+                outFile.delete();
+            }
+        }  catch (Exception e) {
+            LogUtil.error(log, e, "");
+            return null;
+        }
+        return name;
+    }
 }

+ 18 - 0
mp-admin/src/test/java/com/qs/mp/service/ServiceImplTest.java

@@ -3,8 +3,10 @@ package com.qs.mp.service;
 import com.qs.mp.MpApplication;
 import com.qs.mp.admin.service.ITicketBoxSerialService;
 import com.qs.mp.framework.service.IWxUrlLinkService;
+import com.qs.mp.quartz.task.CosTask;
 import com.qs.mp.quartz.task.DayStatTask;
 import com.qs.mp.quartz.task.TicketBoxTask;
+import java.io.IOException;
 import org.junit.jupiter.api.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -38,6 +40,9 @@ public class ServiceImplTest {
   @Autowired
   private DayStatTask dayStatTask;
 
+  @Autowired
+  private CosTask cosTask;
+
   @Test
   public void testGenerateQrCode() {
     System.out.println(wxUrlLinkService.generateCode("pages/index/index", "id=1", "wxc3a684f1196f6e15"));
@@ -80,6 +85,19 @@ public class ServiceImplTest {
     dayStatTask.stat(null);
   }
 
+  @Test
+  public void testCosCompress() {
+    try {
+      cosTask.compressPicture();
+    } catch (IOException e) {
+      e.printStackTrace();
+    } catch (InterruptedException e) {
+      e.printStackTrace();
+    }
+  }
+
+
+
 
   public static void main(String[] args) {
     /*int n = 500;

+ 5 - 2
mp-common/src/main/java/com/qs/mp/common/enums/CouponUseAreaEnum.java

@@ -16,8 +16,8 @@ public enum CouponUseAreaEnum implements IEnum<Integer> {
   COMMON(0, "通用"),
   PRE_SCOPE(1, "指定范围"), // 生成优惠券的时候设定使用范围
   POST_SCOPE(2, "指定范围"), // 门店消费类优惠券,发放的时候动态设定使用范围
-  ONLINE_SCOPE(3, "线上盲票"), // 盲票购买类优惠券,仅限线上盲票
-  OFFLINE_SCOPE(4, "线下盲票"); // 盲票购买类优惠券,仅限线下盲票
+  ONLINE_SCOPE(3, "所有线上盲票"), // 盲票购买类优惠券,仅限线上盲票
+  OFFLINE_SCOPE(4, "所有线下盲票"); // 盲票购买类优惠券,仅限线下盲票
 
 
   private final int value;
@@ -33,6 +33,9 @@ public enum CouponUseAreaEnum implements IEnum<Integer> {
     return value;
   }
 
+  public String getDesc() {
+    return desc;
+  }
 
   @Override
   public String toString() {

+ 31 - 0
mp-common/src/main/java/com/qs/mp/common/enums/PicHandlerTypeEnum.java

@@ -0,0 +1,31 @@
+package com.qs.mp.common.enums;
+
+import com.baomidou.mybatisplus.annotation.IEnum;
+import io.swagger.annotations.ApiModel;
+
+/**
+ * 图片处理类型枚举
+ * @author Cup
+ * @date 2022/4/15
+ */
+@ApiModel(value = "图片处理类型枚举")
+public enum PicHandlerTypeEnum implements IEnum<Integer> {
+
+    CROP(1, "裁剪"),
+    COMPRESSION(2, "压缩");
+
+
+    private final int value;
+    private final String desc;
+
+    PicHandlerTypeEnum(int value, String desc) {
+        this.value = value;
+        this.desc = desc;
+    }
+
+    @Override
+    public Integer getValue() {
+        return value;
+    }
+
+}

+ 163 - 0
mp-quartz/src/main/java/com/qs/mp/quartz/task/CosTask.java

@@ -0,0 +1,163 @@
+package com.qs.mp.quartz.task;
+
+import cn.hutool.core.img.Img;
+import com.qcloud.cos.COSClient;
+import com.qcloud.cos.exception.CosClientException;
+import com.qcloud.cos.exception.CosServiceException;
+import com.qcloud.cos.model.*;
+import com.qs.mp.common.core.domain.AjaxResult;
+import com.qs.mp.common.enums.PicHandlerTypeEnum;
+import com.qs.mp.common.qcloud.QcloudFileUtils;
+import com.qs.mp.common.utils.LogUtil;
+import com.qs.mp.common.utils.StringUtils;
+import com.qs.mp.common.utils.UUIDUtils;
+import com.qs.mp.core.domain.LoginUser;
+import com.qs.mp.core.domain.UploadAttachment;
+import net.coobird.thumbnailator.Thumbnails;
+import net.coobird.thumbnailator.geometry.Positions;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.imageio.ImageIO;
+import java.awt.image.BufferedImage;
+import java.io.*;
+import java.util.ArrayList;
+import java.util.List;
+
+
+/**
+ * 腾讯 COS 操作任务
+ *
+ * @author Cup
+ * @date 2022/4/15
+ */
+@Component("cosTask")
+public class CosTask {
+
+    protected final Logger logger = LoggerFactory.getLogger(this.getClass().getSimpleName());
+
+
+    /**
+     * 文件上传路径
+     */
+    @Value("${mp.profile}")
+    public String filePath;
+
+    /**
+     * 公开
+     */
+    @Value("${cloud.public-bucket-name}")
+    private String publicBucketName;
+
+
+    /**
+     * 腾讯COS图片压缩替换任务
+     */
+    public void compressPicture() throws IOException, InterruptedException {
+        LogUtil.info(logger, "...图片压缩替换任务开始...");
+
+        ListObjectsRequest listObjectsRequest = new ListObjectsRequest();
+        // 设置bucket名称
+        listObjectsRequest.setBucketName(publicBucketName);
+        // prefix表示列出的object的key以prefix开始
+        listObjectsRequest.setPrefix("/");
+        // deliter表示分隔符, 设置为/表示列出当前目录下的object, 设置为空表示列出所有的object
+        listObjectsRequest.setDelimiter("/");
+        // 设置最大遍历出多少个对象, 一次listobject最大支持1000
+        listObjectsRequest.setMaxKeys(500);
+        ObjectListing objectListing = null;
+        do {
+            try {
+                COSClient cosClient = QcloudFileUtils.getCosClient();
+                objectListing = cosClient.listObjects(listObjectsRequest);
+            } catch (CosServiceException e) {
+                e.printStackTrace();
+                return;
+            } catch (CosClientException e) {
+                e.printStackTrace();
+                return;
+            }
+            // common prefix表示表示被delimiter截断的路径, 如delimter设置为/, common prefix则表示所有子目录的路径
+            List<String> commonPrefixs = objectListing.getCommonPrefixes();
+
+            // object summary表示所有列出的object列表
+            List<COSObjectSummary> cosObjectSummaries = objectListing.getObjectSummaries();
+
+            for (COSObjectSummary cosObjectSummary : cosObjectSummaries) {
+                // 文件的路径key
+                String key = cosObjectSummary.getKey();
+
+                if (key.length() < 2) {
+                    continue;
+                }
+
+                if ("_s".equals(key.substring(key.length() - 2))) {
+              //  if("EJU6PLW0GUARR4EWIHZA.jpg_s".equals(key)) {
+                    // 获取原图文件名
+                    String picName = key.substring(0, key.length() - 2);
+                    System.err.println("key = " + picName);
+                    uploadAndCommpressImg(picName);
+
+                }
+            }
+            String nextMarker = objectListing.getNextMarker();
+            listObjectsRequest.setMarker(nextMarker);
+        } while (objectListing.isTruncated());
+
+        LogUtil.info(logger, "...图片压缩替换完成!!...");
+    }
+
+    private void uploadAndCommpressImg(String key) throws IOException, InterruptedException {
+        String path = filePath + "/thumb/" + key;
+        File downFile = new File(path);
+        GetObjectRequest getObjectRequest = new GetObjectRequest(publicBucketName, key);
+        COSClient cosClient = QcloudFileUtils.getCosClient();
+        ObjectMetadata downObjectMeta = cosClient.getObject(getObjectRequest, downFile);
+//        FileInputStream fileInputStream = new FileInputStream(path);
+        String mimeType = "image/jpg";
+//        QcloudFileUtils.putStream(fileInputStream, key, publicBucketName, mimeType);
+
+        // 压缩图片
+        BufferedImage bufferedImage = ImageIO.read(downFile);
+        Thumbnails.Builder<BufferedImage> builder = Thumbnails.of(bufferedImage);
+        int pWidth = bufferedImage.getWidth();
+        int pHeight = bufferedImage.getHeight();
+        builder.size(pWidth, pHeight);
+
+        String outFileDir = filePath + "/thumb";
+        File tempFile = new File(outFileDir);
+        if (!tempFile.exists()) {
+            tempFile.mkdirs();
+        }
+        String thumbName = key + "_s";
+        String outFilePath = filePath + "/thumb/" + thumbName + "." + mimeType.substring(mimeType.lastIndexOf("/") + 1);
+        builder.toFile(outFilePath);
+
+        // 压缩图片
+        if (pWidth > 500) {
+
+            float scale = 500f / pWidth;
+
+            Thumbnails.of(outFilePath).scale(scale).outputQuality(0.8f).toFile(outFilePath);
+        }else {
+            Thumbnails.of(outFilePath).scale(1f).outputQuality(0.8f).toFile(outFilePath);
+        }
+
+
+        File outFile = new File(outFilePath);
+        QcloudFileUtils.putFile(outFile, thumbName, publicBucketName, mimeType);
+
+        downFile.delete();
+        outFile.delete();
+
+
+    }
+
+
+}

+ 3 - 1
mp-service/src/main/java/com/qs/mp/admin/service/impl/CouponServiceImpl.java

@@ -109,7 +109,9 @@ public class CouponServiceImpl extends ServiceImpl<CouponMapper, Coupon> impleme
       userCouponChannelService.save(userCouponChannel);
 			Channel channel = channelService.getById(ticketOrder.getChannelId());
 			userCoupon.setUseAreaDesc(channel.getSiteName());
-    }
+    } else {
+			userCoupon.setUseAreaDesc(coupon.getUseArea().getDesc());
+		}
 		userCouponService.save(userCoupon);
 
 		boolean rtn = update(new LambdaUpdateWrapper<Coupon>().set(Coupon::getDistributeQty, coupon.getDistributeQty() + 1)

+ 1 - 1
mp-service/src/main/java/com/qs/mp/mq/impl/PulsarConsumerImpl.java

@@ -52,7 +52,7 @@ public class PulsarConsumerImpl implements PulsarConsumer {
     String orderId = mqData;
     UserTicketOrder ticketOrder = userTicketOrderService.getById(orderId);
     if (ticketOrder.getCommStatus() != CommStatusEnum.NO) {
-      LogUtil.error(logger, "收到盲票支付成功消息,订单结佣状态不是未结佣,忽略消息。orderId=" + orderId);
+      LogUtil.warn(logger, "收到盲票支付成功消息,订单结佣状态不是未结佣,忽略消息。orderId=" + orderId);
       return;
     }
     // 先更新状态,防并发。

+ 11 - 0
mp-service/src/main/java/com/qs/mp/user/mapper/UserHitPrizeMapper.java

@@ -30,4 +30,15 @@ public interface UserHitPrizeMapper extends BaseMapper<UserHitPrize> {
      * @return
      */
     List<TicketHitPrizeBarrageVO> selectTicketHitPrizeBarrageByUserId(@Param("userId") Long userId, @Param("startTime") LocalDateTime startTime, @Param("endTime") LocalDateTime endTime);
+
+
+    /**
+     * 获取除当前用户外,6 个月内 5 条大奖弹幕
+     * @param userId
+     * @param startTime
+     * @param endTime
+     * @return
+     */
+    List<TicketHitPrizeBarrageVO> selectTicketExpensiveHitPrizeBarrageNotByUserId(@Param("userId") Long userId,@Param("startTime") LocalDateTime startTime,@Param("endTime") LocalDateTime endTime);
+
 }

+ 7 - 0
mp-service/src/main/java/com/qs/mp/user/service/IUserHitPrizeService.java

@@ -46,4 +46,11 @@ public interface IUserHitPrizeService extends IService<UserHitPrize> {
    * @return
    */
   List<TicketHitPrizeBarrageVO> hitPrizeBarrageByUserId(Long userId);
+
+  /**
+   * 获取除当前用户外,6 个月内 5 条大奖弹幕
+   * @param userId  用户 id
+   * @return
+   */
+  List<TicketHitPrizeBarrageVO> expensiveHitPrizeBarrage(Long userId);
 }

+ 8 - 0
mp-service/src/main/java/com/qs/mp/user/service/impl/UserHitPrizeServiceImpl.java

@@ -172,4 +172,12 @@ public class UserHitPrizeServiceImpl extends ServiceImpl<UserHitPrizeMapper, Use
         return this.getBaseMapper().selectTicketHitPrizeBarrageByUserId(userId, startTime, endTime);
     }
 
+    @Override
+    public List<TicketHitPrizeBarrageVO> expensiveHitPrizeBarrage(Long userId) {
+        LocalDateTime endTime = LocalDateTime.now().withNano(0);
+        LocalDateTime startTime = endTime.minusMonths(6);
+        return this.getBaseMapper().selectTicketExpensiveHitPrizeBarrageNotByUserId(userId, startTime, endTime);
+    }
+
+
 }

+ 23 - 10
mp-service/src/main/java/com/qs/mp/user/service/impl/UserTicketOrderServiceImpl.java

@@ -156,11 +156,11 @@ public class UserTicketOrderServiceImpl extends
     userTicketOrder.setMemo("");
     userTicketOrder.setResource(TicketTypeEnum.ONLINE);
     userTicketOrder.setCouponInfo(couponIds);
-    if (orderSettleVO.getPayAmt() > 0) {
-      userTicketOrder.setStatus(UserTicketOrderStatusEnum.NOT_PAY);
-    } else {
-      userTicketOrder.setStatus(UserTicketOrderStatusEnum.FINISHED);
+    userTicketOrder.setStatus(UserTicketOrderStatusEnum.NOT_PAY);
+    if (orderSettleVO.getPayAmt() == 0) {
+      userTicketOrder.setCommStatus(CommStatusEnum.YES); // 无需结佣,直接置为已结佣
     }
+
     // 查询用户的所属经销商,线上票直接查询
     ChannelUserRel channelUserRel = channelUserRelService.getOne(
         new LambdaQueryWrapper<ChannelUserRel>()
@@ -200,6 +200,12 @@ public class UserTicketOrderServiceImpl extends
       orderItem.setTicketId(null); // 付款成功后再分配具体盲票
       userTicketOrderItemService.save(orderItem);
     }
+
+    if (orderSettleVO.getPayAmt() == 0) {
+      // 无需支付的,直接置为成功
+      processTicketOrder(userTicketOrder);
+    }
+
     return userTicketOrder.getOrderId();
   }
 
@@ -223,10 +229,8 @@ public class UserTicketOrderServiceImpl extends
     ticketOrder.setMemo("");
     ticketOrder.setResource(TicketTypeEnum.OFFLINE);
     ticketOrder.setCouponInfo(couponIds);
-    if (orderSettleVO.getPayAmt() > 0) {
-      ticketOrder.setStatus(UserTicketOrderStatusEnum.NOT_PAY);
-    } else {
-      ticketOrder.setStatus(UserTicketOrderStatusEnum.FINISHED);
+    ticketOrder.setStatus(UserTicketOrderStatusEnum.NOT_PAY);
+    if (orderSettleVO.getPayAmt() == 0) {
       ticketOrder.setCommStatus(CommStatusEnum.YES); // 无需结佣,直接置为已结佣
     }
     // 查询用户的所属经销商,线下票根据票包查询
@@ -248,6 +252,11 @@ public class UserTicketOrderServiceImpl extends
     orderItem.setBoxId(ticket.getBoxId());
     orderItem.setTicketId(ticket.getTicketId());
     userTicketOrderItemService.save(orderItem);
+
+    if (orderSettleVO.getPayAmt() == 0) {
+      // 无需支付的,直接置为成功
+      processTicketOrder(ticketOrder);
+    }
     return ticketOrder.getOrderId();
   }
 
@@ -346,6 +355,10 @@ public class UserTicketOrderServiceImpl extends
           JSONObject.toJSONString(payOrder), JSONObject.toJSONString(ticketOrder));
       throw new ServiceException("支付回调用户购票订单处理,订单状态异常,不是待支付。orderId:" + payOrder.getBizId());
     }
+    return processTicketOrder(ticketOrder);
+  }
+
+  private boolean processTicketOrder(UserTicketOrder ticketOrder) {
     List<UserTicketOrderItem> orderItemList = userTicketOrderItemService.list(
         new LambdaQueryWrapper<UserTicketOrderItem>()
             .eq(UserTicketOrderItem::getOrderId, ticketOrder.getOrderId()));
@@ -518,6 +531,6 @@ public class UserTicketOrderServiceImpl extends
 	public List<TicketCntVO> listTicketSaleCnt(Wrapper<UserTicketOrder> queryWrapper) {
 		return getBaseMapper().listTicketSaleCnt(queryWrapper);
 	}
-	
-	
+
+
 }

+ 19 - 1
mp-service/src/main/resources/mapper/user/UserHitPrizeMapper.xml

@@ -35,7 +35,7 @@
         AND muhp.user_id != #{userId}
         AND ((mtap.prize_type = 'coin' AND mtap.value >= 100) OR mtap.prize_type='goods')
         ORDER BY muhp.created_time DESC
-        LIMIT 20
+        LIMIT 40
     </select>
 
     <select id="selectTicketHitPrizeBarrageByUserId" resultType="com.qs.mp.user.domain.vo.TicketHitPrizeBarrageVO">
@@ -54,4 +54,22 @@
         ORDER BY muhp.created_time DESC
         LIMIT 2
     </select>
+
+    <select id="selectTicketExpensiveHitPrizeBarrageNotByUserId"
+            resultType="com.qs.mp.user.domain.vo.TicketHitPrizeBarrageVO">
+        SELECT su.nick_name nickName,
+                su.avatar avatar,
+                mtap.title prizeInfo,
+                mtap.value value,
+                mtap.prize_type prizeType
+        FROM mp_user_hit_prize muhp
+                 LEFT JOIN mp_ticket_awards_prize mtap ON muhp.prize_id = mtap.prize_id
+                 LEFT JOIN sys_user su ON muhp.user_id = su.user_id
+        WHERE muhp.prize_id != ''
+          AND muhp.user_id != #{userId}
+          AND mtap.prize_type='goods'
+          AND muhp.created_time BETWEEN #{startTime} AND #{endTime}
+        ORDER BY mtap.`value` DESC
+        LIMIT 8
+    </select>
 </mapper>