Ver código fonte

Merge branch 'dev' into 'master'

Dev

See merge request quanshu/mp-server!365
zhong chunping 3 anos atrás
pai
commit
1360a20ac5

+ 1 - 1
mp-admin/src/main/java/com/qs/mp/web/controller/api/channel/ChannelMoneyController.java

@@ -53,7 +53,7 @@ public class ChannelMoneyController extends BaseApiController {
     Long channelId = SecurityUtils.getLoginUser().getChannelId();
     QueryWrapper<ChannelMoneyLog> queryWrapper = new QueryWrapper();
     queryWrapper.lambda().eq(ChannelMoneyLog::getChannelId, channelId);
-    queryWrapper.lambda().orderByDesc(ChannelMoneyLog::getBizTime);
+    queryWrapper.lambda().orderByDesc(ChannelMoneyLog::getCreatedTime);
     startPage();
     List<ChannelMoneyLog> list = channelMoneyLogService.list(queryWrapper);
     List<ChannelMoneyLogVO> channelMoneyLogVOS = mapperFacade.mapAsList(list, ChannelMoneyLogVO.class);

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

@@ -20,10 +20,7 @@ import com.qs.mp.admin.service.ITicketPackageService;
 import com.qs.mp.admin.service.ITicketService;
 import com.qs.mp.common.core.domain.AjaxResult;
 import com.qs.mp.common.core.page.TableDataInfo;
-import com.qs.mp.common.enums.ErrorCodeEnum;
-import com.qs.mp.common.enums.TicketBoxStatusEnum;
-import com.qs.mp.common.enums.TicketPkgStatusEnum;
-import com.qs.mp.common.enums.TicketStatusEnum;
+import com.qs.mp.common.enums.*;
 import com.qs.mp.common.utils.LogUtil;
 import com.qs.mp.common.utils.StringUtils;
 import com.qs.mp.framework.security.handle.HostHolder;
@@ -263,6 +260,11 @@ public class UserTicketController extends BaseApiController {
       List<TicketHitPrizeBarrageVO> ticketHitPrizeBarrageVOList = userHitPrizeService.hitPrizeBarrageByUserId(userId);
       if (CollectionUtils.isNotEmpty(ticketHitPrizeBarrageVOList)) {
         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 (i % 2 == 0) {
             listOne.add(ticketHitPrizeBarrageVOList.get(i));
           }else {
@@ -275,6 +277,10 @@ public class UserTicketController extends BaseApiController {
     List<TicketHitPrizeBarrageVO> ticketHitPrizeBarrageVOList = userHitPrizeService.hitPrizeBarrage(userId);
 
     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 (i % 2 == 0) {
         listOne.add(ticketHitPrizeBarrageVOList.get(i));
       }else {

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

@@ -68,9 +68,6 @@ public class UserTicketOrderController extends BaseApiController {
   @Autowired
   private IUserCouponService userCouponService;
 
-  @Autowired
-  private ICouponTicketService couponTicketService;
-
   @Autowired
   private IWalletService walletService;
 
@@ -138,7 +135,7 @@ public class UserTicketOrderController extends BaseApiController {
     orderSettleVO.setBoxId(param.getBoxId());
     orderSettleVO.setTicketId(param.getTicketId());
     orderSettleVO.setPicUrl(ticketBox.getPicUrl());
-
+    orderSettleVO.setTitle(ticketBox.getTitle());
     // 缓存订单结算对象
     redisCache.setCacheObject(RedisKey.build(RedisKey.USER_TICKET_ORDER_KEY, userId), orderSettleVO, 10, TimeUnit.MINUTES);
     return AjaxResult.success(orderSettleVO);
@@ -206,8 +203,8 @@ public class UserTicketOrderController extends BaseApiController {
    * 可用优惠券列表
    */
   @PostMapping("/order/coupon/list")
-  @ApiOperation(value = "取消订单" , notes = "在订单列表页面取消")
-  public AjaxResult cancel(@RequestBody TicketOrderParam param) {
+  @ApiOperation(value = "查询可用优惠券" , notes = "在下单页面选择")
+  public AjaxResult listCoupon(@RequestBody TicketOrderParam param) {
     Long userId = SecurityUtils.getUserId();
     TicketOrderSettleVO orderSettleVO = redisCache.getCacheObject(RedisKey.build(RedisKey.USER_TICKET_ORDER_KEY, userId));
     if (null == orderSettleVO) {
@@ -215,6 +212,18 @@ public class UserTicketOrderController extends BaseApiController {
     }
     TicketBox ticketBox = ticketBoxService.getById(orderSettleVO.getBoxId());
     List<UserCouponVO> userCouponVOList = userCouponService.queryUserCouponList(userId, orderSettleVO.getOrderAmt(), ticketBox);
+
+    // 设置选中状态
+    for (UserCouponVO userCouponVO : userCouponVOList) {
+      if (!CollectionUtils.isEmpty(orderSettleVO.getCouponList())) {
+        for (UserCoupon4OrderVO userCoupon4OrderVO : orderSettleVO.getCouponList()) {
+          if (userCoupon4OrderVO.getId().equals(userCouponVO.getId())) {
+            userCouponVO.setChecked(true);
+            break;
+          }
+        }
+      }
+    }
     return AjaxResult.success(userCouponVOList);
   }
 

+ 22 - 18
mp-framework/src/main/java/com/qs/mp/framework/config/SecurityConfig.java

@@ -109,6 +109,27 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
                     "/api/v1/mp/sms/sendSmsCode",
                     "/api/v1/mp/user/wxauth/mobile",
                     "/api/v1/mp/channel/invite/register",
+                    "/common/download**",
+                    "/common/download/resource**",
+                    "/swagger-ui.html",
+                    "/swagger-resources/**",
+                    "/webjars/**",
+                    "/*/api-docs",
+                    "/druid/**",
+                    "/service/notify/**"
+                    ).anonymous()
+                .antMatchers(
+                        HttpMethod.GET,
+                        "/",
+                        "/*.html",
+                        "/**/*.html",
+                        "/**/*.css",
+                        "/**/*.js",
+                        "/profile/**"
+                ).permitAll()
+                // 匹配放行 POST 请求,如果携带了 token 也不会进行拦截
+                .antMatchers(
+                        HttpMethod.POST,
                     "/api/v1/mp/wx/urlschema/generate",
                     "/api/v1/mp/wx/code/generate",
                     "/api/v1/mp/user/ticket/queryLuckyNum",
@@ -119,25 +140,8 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
                     "/api/v1/mp/user/exchange/goods/detail",
                     "/api/v1/mp/user/exchange/banner/list",
                     "/api/v1/mp/user/exchange/category/list",
-                    "/api/v1/mp/user/exchange/activity/list").anonymous()
-                .antMatchers(
-                        HttpMethod.GET,
-                        "/",
-                        "/*.html",
-                        "/**/*.html",
-                        "/**/*.css",
-                        "/**/*.js",
-                        "/profile/**"
+                    "/api/v1/mp/user/exchange/activity/list"
                 ).permitAll()
-                .antMatchers("/common/download**").anonymous()
-                .antMatchers("/common/download/resource**").anonymous()
-                .antMatchers("/swagger-ui.html").anonymous()
-                .antMatchers("/swagger-resources/**").anonymous()
-                .antMatchers("/webjars/**").anonymous()
-                .antMatchers("/*/api-docs").anonymous()
-                .antMatchers("/druid/**").anonymous()
-                .antMatchers("/service/notify/**").anonymous()
-
                 // 除上面外的所有请求全部需要鉴权认证
                 .anyRequest().authenticated()
                 .and()

+ 9 - 1
mp-framework/src/main/java/com/qs/mp/framework/security/filter/JwtAuthenticationTokenFilter.java

@@ -21,7 +21,7 @@ import org.springframework.web.filter.OncePerRequestFilter;
 
 /**
  * token过滤器 验证token有效性
- * 
+ *
  * @author ygp
  */
 @Component
@@ -47,7 +47,15 @@ public class JwtAuthenticationTokenFilter extends OncePerRequestFilter
             UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(loginUser, null, loginUser.getAuthorities());
             authenticationToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
             SecurityContextHolder.getContext().setAuthentication(authenticationToken);
+        } else {
+            hostHolder.setUser(null);
         }
         chain.doFilter(request, response);
     }
+
+    @Override
+    public void destroy() {
+        hostHolder.clear();
+        super.destroy();
+    }
 }

+ 4 - 1
mp-framework/src/main/java/com/qs/mp/framework/web/exception/GlobalExceptionHandler.java

@@ -68,7 +68,10 @@ public class GlobalExceptionHandler
     public AjaxResult handleRuntimeException(RuntimeException e, HttpServletRequest request)
     {
         String requestURI = request.getRequestURI();
-        LogUtil.error(log, e, "请求地址:{0},请求参数:{1}发生未知异常.", new Object[]{requestURI, HttpHelper.getBodyString(request)});
+        if (!"用户不存在/密码错误".equals(e.getMessage()) && !"验证码已失效".equals(e.getMessage())) {
+            LogUtil.error(log, e, "请求地址:{0},请求参数:{1}发生未知异常.",
+                new Object[]{requestURI, HttpHelper.getBodyString(request)});
+        }
         return AjaxResult.error(e.getMessage());
     }
 

+ 30 - 2
mp-quartz/src/main/java/com/qs/mp/quartz/task/DayStatTask.java

@@ -6,11 +6,15 @@ import com.qs.mp.admin.domain.TicketBox;
 import com.qs.mp.admin.service.ITicketBoxService;
 import com.qs.mp.channel.domain.Channel;
 import com.qs.mp.channel.domain.ChannelCommission;
+import com.qs.mp.channel.domain.ChannelCouponVerifyLog;
 import com.qs.mp.channel.domain.ChannelWithdraw;
 import com.qs.mp.channel.service.IChannelCommissionService;
+import com.qs.mp.channel.service.IChannelCouponVerifyLogService;
 import com.qs.mp.channel.service.IChannelService;
 import com.qs.mp.channel.service.IChannelWithdrawService;
+import com.qs.mp.common.enums.ChannelWithdrawStatusEnum;
 import com.qs.mp.common.enums.CoinLogTypeEnum;
+import com.qs.mp.common.enums.CouponDiscountTypeEnum;
 import com.qs.mp.common.enums.TicketBoxStatusEnum;
 import com.qs.mp.common.enums.TicketTypeEnum;
 import com.qs.mp.common.enums.UserTicketOrderStatusEnum;
@@ -72,6 +76,9 @@ public class DayStatTask {
   @Autowired
   private IUserCoinLogService userCoinLogService;
 
+  @Autowired
+  private IChannelCouponVerifyLogService channelCouponVerifyLogService;
+
   @Value("${export.page-size}")
   private int pageSize;
 
@@ -170,14 +177,35 @@ public class DayStatTask {
               new BigDecimal(100), 2, RoundingMode.DOWN)).append("元\n");
     }
 
+    Map<String, Object> couponMap = channelCouponVerifyLogService.getMap(
+        new QueryWrapper<ChannelCouponVerifyLog>()
+            .select("IFNULL(sum(discount) ,0) as discount")
+            .lambda().ge(ChannelCouponVerifyLog::getCreatedTime, bizDay)
+            .lt(ChannelCouponVerifyLog::getCreatedTime, DateUtils.addDays(bizDay, 1))
+            .eq(ChannelCouponVerifyLog::getDiscountType, CouponDiscountTypeEnum.MONEY_OFF));
+    Map<String, Object> allCouponMap = channelCouponVerifyLogService.getMap(
+        new QueryWrapper<ChannelCouponVerifyLog>()
+            .select("IFNULL(sum(discount) ,0) as discount")
+            .lambda().eq(ChannelCouponVerifyLog::getDiscountType, CouponDiscountTypeEnum.MONEY_OFF));
+    if (null != commMap) {
+      sb.append("累计核销:").append(
+              new BigDecimal(Integer.valueOf(String.valueOf(allCouponMap.get("discount")))).divide(
+                  new BigDecimal(100), 2, RoundingMode.DOWN))
+          .append("元,当日:").append(
+              new BigDecimal(Integer.valueOf(String.valueOf(couponMap.get("discount")))).divide(
+                  new BigDecimal(100), 2, RoundingMode.DOWN)).append("元\n");
+    }
+
     Map<String, Object> withdrawMap = channelWithdrawService.getMap(
         new QueryWrapper<ChannelWithdraw>()
             .select("IFNULL(sum(money) ,0) as withdrawAmt")
             .lambda().ge(ChannelWithdraw::getCreateTime, bizDay)
-            .lt(ChannelWithdraw::getCreateTime, DateUtils.addDays(bizDay, 1)));
+            .lt(ChannelWithdraw::getCreateTime, DateUtils.addDays(bizDay, 1))
+            .eq(ChannelWithdraw::getStatus, ChannelWithdrawStatusEnum.FINISHED));
     Map<String, Object> allWithdrawMap = channelWithdrawService.getMap(
         new QueryWrapper<ChannelWithdraw>()
-            .select("IFNULL(sum(money) ,0) as withdrawAmt"));
+            .select("IFNULL(sum(money) ,0) as withdrawAmt")
+            .lambda().eq(ChannelWithdraw::getStatus, ChannelWithdrawStatusEnum.FINISHED));
     if (null != withdrawMap) {
       sb.append("累计提现:").append(
           new BigDecimal(Integer.valueOf(String.valueOf(allWithdrawMap.get("withdrawAmt")))).divide(

+ 8 - 0
mp-service/src/main/java/com/qs/mp/user/domain/vo/TicketHitPrizeBarrageVO.java

@@ -1,12 +1,14 @@
 package com.qs.mp.user.domain.vo;
 
 import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import com.qs.mp.user.domain.UserDeliverOrderItem;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.experimental.Accessors;
 
+import java.io.Serializable;
 import java.util.List;
 
 /**
@@ -28,5 +30,11 @@ public class TicketHitPrizeBarrageVO {
     @ApiModelProperty("奖品信息")
     private String prizeInfo;
 
+    @ApiModelProperty("数量")
+    private Integer value;
+
+    @ApiModelProperty("奖品类型")
+    private String prizeType;
+
 
 }

+ 5 - 0
mp-service/src/main/java/com/qs/mp/user/domain/vo/UserCouponVO.java

@@ -72,5 +72,10 @@ public class UserCouponVO extends UserCoupon {
    */
   private Integer compositeUse;
 
+  /**
+   * 是否选中
+   */
+  private boolean checked = false;
+
 
 }

+ 11 - 3
mp-service/src/main/resources/mapper/user/UserHitPrizeMapper.xml

@@ -24,19 +24,27 @@
             resultType="com.qs.mp.user.domain.vo.TicketHitPrizeBarrageVO">
         SELECT su.nick_name nickName,
                 su.avatar avatar,
-                mtap.title prizeInfo
+                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 = 'coin' AND mtap.quantity >= 100) OR mtap.prize_type='goods')
+        AND ((mtap.prize_type = 'coin' AND mtap.value >= 100) OR mtap.prize_type='goods')
         ORDER BY muhp.created_time DESC
         LIMIT 20
     </select>
 
     <select id="selectTicketHitPrizeBarrageByUserId" resultType="com.qs.mp.user.domain.vo.TicketHitPrizeBarrageVO">
-        SELECT su.nick_name,su.avatar,mtap.title
+        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