فهرست منبع

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

Dev

See merge request quanshu/mp-server!107
zhong chunping 3 سال پیش
والد
کامیت
19c98249d9

+ 8 - 0
mp-admin/src/main/java/com/qs/mp/web/controller/api/admin/TicketBoxMgrController.java

@@ -143,6 +143,14 @@ public class TicketBoxMgrController extends BaseApiController {
 		ExcelUtil<TicketExcel> util = new ExcelUtil<TicketExcel>(TicketExcel.class);
 		return util.exportExcel(excelList, "盲票导出数据", true);
 	}
+	
+	
+    @GetMapping("/importTemplate")
+    public AjaxResult importTemplate()
+    {
+        ExcelUtil<TicketExcel> util = new ExcelUtil<TicketExcel>(TicketExcel.class);
+        return util.importTemplateExcel("盲票导出数据",true);
+    }
 
 	@Log(title = "盲票导入", businessType = BusinessType.IMPORT)
 	@PostMapping("/importTicket")

+ 235 - 0
mp-admin/src/main/java/com/qs/mp/web/controller/api/user/UserMineController.java

@@ -0,0 +1,235 @@
+/*
+ * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved.
+ *
+ * https://www.mall4j.com/
+ *
+ * 未经允许,不可做商业用途!
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.qs.mp.web.controller.api.user;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.qs.mp.admin.domain.Ticket;
+import com.qs.mp.admin.domain.TicketAwardsPrize;
+import com.qs.mp.admin.domain.TicketBox;
+import com.qs.mp.admin.domain.param.TicketBoxParam;
+import com.qs.mp.admin.domain.param.TicketParam;
+import com.qs.mp.admin.domain.vo.TicketBoxListVO;
+import com.qs.mp.admin.domain.vo.TicketBoxVO;
+import com.qs.mp.admin.domain.vo.TicketListVO;
+import com.qs.mp.admin.domain.vo.TicketVO;
+import com.qs.mp.admin.service.ITicketAwardsPrizeService;
+import com.qs.mp.admin.service.ITicketBoxService;
+import com.qs.mp.admin.service.ITicketService;
+import com.qs.mp.channel.domain.Channel;
+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.PrizeStorageStatusEnum;
+import com.qs.mp.common.enums.TicketBoxStatusEnum;
+import com.qs.mp.common.enums.TicketStatusEnum;
+import com.qs.mp.common.enums.UserCouponStatusEnum;
+import com.qs.mp.common.utils.StringUtils;
+import com.qs.mp.user.domain.UserCoin;
+import com.qs.mp.user.domain.UserCoupon;
+import com.qs.mp.user.domain.UserPrizeStorage;
+import com.qs.mp.user.domain.UserTicketOrderItem;
+import com.qs.mp.user.service.IUserCoinService;
+import com.qs.mp.user.service.IUserHitPrizeService;
+import com.qs.mp.user.service.IUserPrizeStorageService;
+import com.qs.mp.user.service.IUserTicketOrderItemService;
+import com.qs.mp.utils.SecurityUtils;
+import com.qs.mp.web.controller.common.BaseApiController;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import java.util.List;
+import java.util.Map;
+import lombok.AllArgsConstructor;
+import ma.glasnost.orika.MapperFacade;
+import org.springframework.beans.factory.annotation.Autowired;
+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.RestController;
+
+
+@RestController
+@RequestMapping("/api/v1/mp/user")
+@Api(tags = "我的接口")
+@AllArgsConstructor
+public class UserMineController extends BaseApiController {
+
+
+  @Autowired
+  private ITicketBoxService ticketBoxService;
+
+  @Autowired
+  private ITicketAwardsPrizeService ticketAwardsPrizeService;
+
+  @Autowired
+  private ITicketService ticketService;
+
+  @Autowired
+  private IUserTicketOrderItemService userTicketOrderItemService;
+
+  @Autowired
+  private IUserHitPrizeService userHitPrizeService;
+
+  @Autowired
+  private IUserPrizeStorageService userPrizeStorageService;
+
+  @Autowired
+  private IUserCoinService userCoinService;
+
+  @Autowired
+  private MapperFacade mapperFacade;
+
+  /**
+   * 我的票包
+   */
+  @PostMapping("/mine/ticket/list")
+  @ApiOperation(value = "我的盲票列表" , notes = "获取我的盲票列表")
+  public TableDataInfo listTicket(@RequestBody Ticket param) {
+    Long userId = SecurityUtils.getLoginUser().getUserId();
+    startPage();
+    List<TicketListVO> ticketListVOS = userTicketOrderItemService.listMyTicketVO(userId, param.getStatus());
+    return getDataTable(ticketListVOS);
+  }
+
+  /**
+   * 我的优惠券
+   */
+  @PostMapping("/mine/coupon/list")
+  @ApiOperation(value = "我的优惠券列表" , notes = "获取我的优惠券列表")
+  public TableDataInfo listCoupon(@RequestBody UserCoupon param) {
+    Long userId = SecurityUtils.getLoginUser().getUserId();
+    startPage();
+//    List<TicketListVO> ticketListVOS = userTicketOrderItemService.listMyTicketVO(userId, param.getStatus());
+    return getDataTable(null);
+  }
+
+
+  /**
+   * 我的
+   */
+  @PostMapping("/mine/init")
+  @ApiOperation(value = "查看我的" , notes = "查看我的")
+  public AjaxResult getInfo(@RequestBody JSONObject param) {
+    Long userId = SecurityUtils.getLoginUser().getUserId();
+    Map<String, Object> storageMap = userPrizeStorageService.getMap(new QueryWrapper<UserPrizeStorage>()
+        .select("IFNULL(goods_num,0) as total")
+        .eq("userId", userId).eq("status", PrizeStorageStatusEnum.NOT_DISTRIBUTED));
+    JSONObject result = new JSONObject();
+    result.put("prizeNum", Integer.valueOf(String.valueOf(storageMap.get("total"))));
+
+    int ticketNum = userTicketOrderItemService.countMyTicket(userId, TicketStatusEnum.ACTIVATED);
+    result.put("ticketNum", ticketNum);
+
+    UserCoin userCoin = userCoinService.getById(userId);
+    result.put("coinNum", null != userCoin ? userCoin.getCoin() : 0);
+    return AjaxResult.success(result);
+  }
+/*
+  *//**
+   * 扫码查看盲票幸运数字
+   *//*
+  @PostMapping("/ticket/queryLuckyNum")
+  @ApiOperation(value = "查看盲票幸运数字" , notes = "根据盲票组ID,获取盲票幸运数字")
+  public AjaxResult queryLuckyNum(@RequestBody TicketParam param) {
+    Long userId = SecurityUtils.getLoginUser().getUserId();
+    if (StringUtils.isBlank(param.getTicketId())) {
+      return AjaxResult.error("参数异常,盲票ID缺失");
+    }
+
+    Ticket ticket = ticketService.getById(param.getTicketId());
+    if (null == ticket) {
+      return AjaxResult.error("参数异常,盲票不存在");
+    }
+
+    if (ticket.getStatus() == TicketStatusEnum.CASHED) {
+      return AjaxResult.error(ErrorCodeEnum.ERROR_CODE_1017);
+    }
+
+    // 已付款的盲票,需要校验当前用户是否有权限查看
+    if (ticket.getStatus() == TicketStatusEnum.ACTIVATED) {
+      UserTicketOrderItem orderItem = userTicketOrderItemService.queryFinishedOrderItem(userId, param.getTicketId());
+      if (null == orderItem) {
+        return AjaxResult.error(ErrorCodeEnum.ERROR_CODE_1018);
+      }
+    }
+
+    TicketBox ticketBox = ticketBoxService.getById(ticket.getBoxId());
+
+    TicketVO ticketVO = new TicketVO();
+    ticketVO.setPrizeList(ticketAwardsPrizeService.listPrizeVO(new QueryWrapper<TicketAwardsPrize>()
+        .eq("t1.box_id", ticketBox.getBoxId()).orderByAsc("t1.sort").orderByDesc("t2.value")));
+    ticketVO.setTicketId(ticket.getTicketId());
+    ticketVO.setBoxId(ticket.getBoxId());
+    ticketVO.setTitle(ticketBox.getTitle());
+    ticketVO.setSerialNo(ticket.getSerialNo());
+    ticketVO.setFacePrice(ticket.getFacePrice());
+    ticketVO.setSalePrice(ticketBox.getSalePrice());
+    ticketVO.setPlainLuckyNum(ticket.getPlainLuckyNum());
+    ticketVO.setStatus(ticket.getStatus().getValue());
+
+    return AjaxResult.success(ticketVO);
+  }
+
+  *//**
+   * 查看能兑奖的奖品
+   *//*
+  @PostMapping("/ticket/queryHitPrizeList")
+  @ApiOperation(value = "查看兑奖奖品" , notes = "根据盲票ID,查看兑奖奖品")
+  public AjaxResult queryHitPrizeList(@RequestBody TicketParam param) {
+    Long userId = SecurityUtils.getLoginUser().getUserId();
+    if (StringUtils.isBlank(param.getTicketId())) {
+      return AjaxResult.error("参数异常,盲票ID缺失");
+    }
+
+    Ticket ticket = ticketService.getById(param.getTicketId());
+    if (null == ticket) {
+      return AjaxResult.error("参数异常,盲票不存在");
+    }
+    if (ticket.getStatus() == TicketStatusEnum.CASHED) {
+      return AjaxResult.error(ErrorCodeEnum.ERROR_CODE_1017);
+    }
+    if (ticket.getStatus() != TicketStatusEnum.ACTIVATED) {
+      return AjaxResult.error(ErrorCodeEnum.ERROR_CODE_1019);
+    }
+
+    List<TicketAwardsPrize> ticketAwardsPrizes = userHitPrizeService.listPrize(ticket, userId);
+    return AjaxResult.success(ticketAwardsPrizes);
+  }
+
+  *//**
+   * 兑奖
+   *//*
+  @PostMapping("/ticket/cashPrize")
+  @ApiOperation(value = "兑奖" , notes = "选择奖品兑奖")
+  public AjaxResult cashPrize(@RequestBody TicketParam param) {
+    Long userId = SecurityUtils.getLoginUser().getUserId();
+    if (StringUtils.isBlank(param.getTicketId()) || StringUtils.isBlank(param.getAwardsId())
+    || StringUtils.isBlank(param.getPrizeId())) {
+      return AjaxResult.error("参数缺失");
+    }
+
+    Ticket ticket = ticketService.getById(param.getTicketId());
+    if (null == ticket) {
+      return AjaxResult.error("参数异常,盲票不存在");
+    }
+    if (ticket.getStatus() == TicketStatusEnum.CASHED) {
+      return AjaxResult.error(ErrorCodeEnum.ERROR_CODE_1017);
+    }
+    if (ticket.getStatus() != TicketStatusEnum.ACTIVATED) {
+      return AjaxResult.error(ErrorCodeEnum.ERROR_CODE_1019);
+    }
+
+    userHitPrizeService.cashPrize(ticket, userId, param.getAwardsId(), param.getPrizeId());
+    return AjaxResult.success();
+  }*/
+
+}

+ 2 - 2
mp-admin/src/main/resources/application.yml

@@ -128,11 +128,11 @@ cloud:
 #渠道端小程序appid和密钥
 wx-channel:
   appId: wxc3a684f1196f6e15
-  #appId: wxb86cb7f459fc3675
   appSecret: 7708655ba65f04de2a42f23d20ab4134
 #用户端小程序appid和密钥
 wx-user:
-  appId: wx8533800e393dbd6b
+  #appId: wx8533800e393dbd6b
+  appId: wxb86cb7f459fc3675
   appSecret: f7a104e09d6c2e55445be2a45c4ab551
 #公众号appid
 wxgzh:

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

@@ -38,7 +38,7 @@ public class ServiceImplTest {
 
   @Test
   public void testGenerateUrlSchema() {
-    System.out.println(wxUrlLinkService.generateUrlSchema("/pages/deposit/index", "", "wxb86cb7f459fc3675"));
+    System.out.println(wxUrlLinkService.generateUrlSchema("/pages/login/invitation", "", "wxc3a684f1196f6e15"));
 
   }
 

+ 1 - 1
mp-common/src/main/java/com/qs/mp/common/enums/TicketStatusEnum.java

@@ -13,7 +13,7 @@ import com.qs.mp.common.json.EnumValueDeserializer;
 @JSONType(deserializer = EnumValueDeserializer.class)
 public enum TicketStatusEnum implements IEnum<Integer> {
   NOT_PAY(1, "未付款"),
-  ACTIVATED(2, "已激活"),
+  ACTIVATED(2, "待兑奖"),
   CASHED(3, "已兑奖"),;
 
   private final int value;

+ 2 - 2
mp-common/src/main/java/com/qs/mp/common/utils/RSAUtil.java

@@ -24,14 +24,14 @@ public class RSAUtil {
   private static String privateKey;
 
   @Value("${rsa.private-key}")
-  public static void setPrivateKey(String priKey) {
+  public void setPrivateKey(String priKey) {
     privateKey = priKey;
   }
 
   private static String publicKey;
 
   @Value("${rsa.public-key}")
-  public static void setPublicKey(String pubKey) {
+  public void setPublicKey(String pubKey) {
     publicKey = pubKey;
   }
 

+ 13 - 5
mp-service/src/main/java/com/qs/mp/admin/service/impl/CouponServiceImpl.java

@@ -11,6 +11,8 @@ import com.qs.mp.admin.service.ICouponService;
 import com.qs.mp.admin.service.ICouponTicketService;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qs.mp.channel.domain.Channel;
+import com.qs.mp.channel.service.IChannelService;
 import com.qs.mp.common.enums.CouponUseAreaEnum;
 import com.qs.mp.common.enums.UserCouponStatusEnum;
 import com.qs.mp.common.exception.ServiceException;
@@ -47,13 +49,13 @@ public class CouponServiceImpl extends ServiceImpl<CouponMapper, Coupon> impleme
 
   @Autowired
   private ICouponService couponService;
-  
+
   @Autowired
   private IUserCouponService userCouponService;
 
   @Autowired
   private IUserCouponChannelService userCouponChannelService;
-  
+
   @Autowired
   private ICouponTicketService couponTicketService;
 
@@ -63,6 +65,9 @@ public class CouponServiceImpl extends ServiceImpl<CouponMapper, Coupon> impleme
   @Autowired
   private IUserTicketOrderItemService userTicketOrderItemService;
 
+	@Autowired
+	private IChannelService channelService;
+
   @Override
   @Transactional
   public void distribute(Ticket ticket, Long userId, String couponId) {
@@ -80,7 +85,7 @@ public class CouponServiceImpl extends ServiceImpl<CouponMapper, Coupon> impleme
       userCoupon.setValidEnd(coupon.getValidEnd());
     }
     userCoupon.setStatus(UserCouponStatusEnum.UNUSED);
-    userCouponService.save(userCoupon);
+
 
     // 确定限定范围
     if (coupon.getUseArea() == CouponUseAreaEnum.POST_SCOPE) {
@@ -94,9 +99,12 @@ public class CouponServiceImpl extends ServiceImpl<CouponMapper, Coupon> impleme
       userCouponChannel.setUserCouponId(userCoupon.getId());
       userCouponChannel.setChannelId(orderItem.getChannelId());
       userCouponChannelService.save(userCouponChannel);
+			Channel channel = channelService.getById(orderItem.getChannelId());
+			userCoupon.setUseAreaDesc(channel.getName());
     }
+		userCouponService.save(userCoupon);
   }
-  
+
   @Override
 	@Transactional
 	public void saveCoupon(Coupon coupon, List<CouponTicket> ticketList) {
@@ -146,7 +154,7 @@ public class CouponServiceImpl extends ServiceImpl<CouponMapper, Coupon> impleme
 			}else {
 				throw new ServiceException("请联系管理员");
 			}
-			
+
 		}
 	}
 }

+ 2 - 1
mp-service/src/main/java/com/qs/mp/admin/service/impl/TicketServiceImpl.java

@@ -59,11 +59,12 @@ public class TicketServiceImpl extends ServiceImpl<TicketMapper, Ticket> impleme
 			if(null != ticketList && ticketList.size() > 0) {
 				boolean res = ticketService.updateBatchById(ticketList);
 				if(!res) {
-					throw new ServiceException("票导入失败,请联系管理员");
+					throw new ServiceException("票导入失败,请联系管理员");
 				}
 				return ticketList.size();
 			}
 		}
+		
 		return 0;
 	}
 

+ 1 - 1
mp-service/src/main/java/com/qs/mp/framework/service/impl/WxUrlLinkServiceImpl.java

@@ -71,7 +71,7 @@ public class WxUrlLinkServiceImpl implements IWxUrlLinkService {
     Map<String, Object> jumpParam = new HashMap<>();
     jumpParam.put("path", path);
     jumpParam.put("query", query);
-    jumpParam.put("env_version", "trial");
+    jumpParam.put("env_version", "release");
     param.put("jump_wxa", jumpParam);
     // 有效时间超过31天的 Link 或永久有效的 Link 为长期有效Link,
     // 单个小程序总共可生成长期有效 Link 上限为10万个,请谨慎调用

+ 6 - 0
mp-service/src/main/java/com/qs/mp/user/domain/UserCoupon.java

@@ -59,6 +59,12 @@ public class UserCoupon implements Serializable {
   @TableField("valid_end")
   private Date validEnd;
 
+  /**
+   * 适用范围说明
+   */
+  @TableField("use_area_desc")
+  private String useAreaDesc;
+
   /**
    * 使用订单ID
    */

+ 5 - 0
mp-service/src/main/java/com/qs/mp/user/mapper/UserTicketOrderItemMapper.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.toolkit.Constants;
 import com.qs.mp.admin.domain.TicketAwardsPrize;
 import com.qs.mp.admin.domain.vo.TicketAwardsPrizeVO;
+import com.qs.mp.admin.domain.vo.TicketListVO;
 import com.qs.mp.user.domain.UserTicketOrderItem;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import java.util.List;
@@ -16,4 +17,8 @@ import org.apache.ibatis.annotations.Param;
  */
 public interface UserTicketOrderItemMapper extends BaseMapper<UserTicketOrderItem> {
   List<UserTicketOrderItem> listTicketOrderItemVO(@Param(Constants.WRAPPER) Wrapper<UserTicketOrderItem> queryWrapper);
+
+  List<TicketListVO> listMyTicketVO(@Param(Constants.WRAPPER) Wrapper<UserTicketOrderItem> queryWrapper);
+
+  int countMyTicket(@Param(Constants.WRAPPER) Wrapper<UserTicketOrderItem> queryWrapper);
 }

+ 20 - 0
mp-service/src/main/java/com/qs/mp/user/service/IUserTicketOrderItemService.java

@@ -1,7 +1,13 @@
 package com.qs.mp.user.service;
 
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
+import com.qs.mp.admin.domain.vo.TicketListVO;
+import com.qs.mp.common.enums.TicketStatusEnum;
 import com.qs.mp.user.domain.UserTicketOrderItem;
 import com.baomidou.mybatisplus.extension.service.IService;
+import java.util.List;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * <p>
@@ -20,4 +26,18 @@ public interface IUserTicketOrderItemService extends IService<UserTicketOrderIte
    * @return
    */
   UserTicketOrderItem queryFinishedOrderItem(Long userId, String ticketId);
+
+  /**
+   * 查询我的票包
+   * @param status
+   * @return
+   */
+  List<TicketListVO> listMyTicketVO(Long userId, TicketStatusEnum status);
+
+  /**
+   * 查询盲票数
+   * @param status
+   * @return
+   */
+  int countMyTicket(Long userId, TicketStatusEnum status);
 }

+ 17 - 0
mp-service/src/main/java/com/qs/mp/user/service/impl/UserTicketOrderItemServiceImpl.java

@@ -1,6 +1,8 @@
 package com.qs.mp.user.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.qs.mp.admin.domain.vo.TicketListVO;
+import com.qs.mp.common.enums.TicketStatusEnum;
 import com.qs.mp.common.enums.UserTicketOrderStatusEnum;
 import com.qs.mp.user.domain.UserTicketOrderItem;
 import com.qs.mp.user.mapper.UserTicketOrderItemMapper;
@@ -30,4 +32,19 @@ public class UserTicketOrderItemServiceImpl extends ServiceImpl<UserTicketOrderI
     }
     return itemList.get(0);
   }
+
+  @Override
+  public List<TicketListVO> listMyTicketVO(Long userId, TicketStatusEnum status) {
+
+    return getBaseMapper().listMyTicketVO(new QueryWrapper<UserTicketOrderItem>()
+        .eq("t1.userId", userId).eq("t2.status", UserTicketOrderStatusEnum.FINISHED)
+        .eq("t3.status", status));
+  }
+
+  @Override
+  public int countMyTicket(Long userId, TicketStatusEnum status) {
+    return getBaseMapper().countMyTicket(new QueryWrapper<UserTicketOrderItem>()
+        .eq("t1.userId", userId).eq("t2.status", UserTicketOrderStatusEnum.FINISHED)
+        .eq("t3.status", status));
+  }
 }

+ 2 - 1
mp-service/src/main/resources/mapper/user/UserCouponMapper.xml

@@ -10,6 +10,7 @@
         <result column="coupon_id" property="couponId" />
         <result column="valid_start" property="validStart" />
         <result column="valid_end" property="validEnd" />
+        <result column="use_area_desc" property="useAreaDesc" />
         <result column="order_id" property="orderId" />
         <result column="verify_time" property="verifyTime" />
         <result column="status" property="status" />
@@ -19,7 +20,7 @@
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, user_id, verify_code, coupon_id, valid_start, valid_end, order_id, verify_time, status, created_time, updated_time
+        id, user_id, verify_code, coupon_id, valid_start, valid_end, use_area_desc, order_id, verify_time, status, created_time, updated_time
     </sql>
 
     <select id="listUserCouponVO" resultType="com.qs.mp.user.domain.vo.UserCouponVO">

+ 17 - 0
mp-service/src/main/resources/mapper/user/UserTicketOrderItemMapper.xml

@@ -26,4 +26,21 @@
             ${ew.customSqlSegment}
     </select>
 
+    <select id="listMyTicketVO" resultType="com.qs.mp.admin.domain.vo.TicketListVO">
+        select t1.item_id, t3.*, t4.pic_url
+        from mp_ticket_order_item t1
+         left join mp_ticket_order t2 on t1.order_id = t2.order_id
+         left join mp_ticket t3 on t1.ticket_id = t3.ticket_id
+         left join mp_ticket_box t4 on t3.box_id = t4.box_id
+            ${ew.customSqlSegment}
+    </select>
+
+    <select id="countMyTicket" resultType="Integer">
+        select count(*)
+        from mp_ticket_order_item t1
+         left join mp_ticket_order t2 on t1.order_id = t2.order_id
+         left join mp_ticket t3 on t1.ticket_id = t3.ticket_id
+            ${ew.customSqlSegment}
+    </select>
+
 </mapper>