浏览代码

订单核销 核销前效验 团购收藏

qxy 3 月之前
父节点
当前提交
670ace1272

+ 17 - 17
alien-store/src/main/java/shop/alien/store/controller/LifeCollectController.java

@@ -13,10 +13,7 @@ import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.*;
 import shop.alien.entity.result.R;
 import shop.alien.entity.second.SecondGoods;
-import shop.alien.entity.store.LifeCollect;
-import shop.alien.entity.store.LifeCoupon;
-import shop.alien.entity.store.StoreImg;
-import shop.alien.entity.store.StoreInfo;
+import shop.alien.entity.store.*;
 import shop.alien.entity.store.vo.StoreInfoVo;
 import shop.alien.mapper.*;
 import shop.alien.mapper.second.SecondGoodsMapper;
@@ -54,6 +51,8 @@ public class LifeCollectController {
 
     private final StoreImgMapper storeImgMapper;
 
+    private final LifeGroupBuyMainMapper lifeGroupBuyMainMapper;
+
     @ApiOperation("收藏列表")
     @ApiOperationSupport(order = 1)
     @ApiImplicitParams({@ApiImplicitParam(name = "page", value = "分页页数", dataType = "String", paramType = "query", required = true),
@@ -160,42 +159,43 @@ public class LifeCollectController {
             @ApiImplicitParam(name = "keyword", value = "关键词", dataType = "String", paramType = "query")
     })
     @GetMapping("selectCouponCollectList")
-    public R<IPage<LifeCoupon>> selectCouponCollectList(@RequestParam(defaultValue = "1") int page,
-                                                        @RequestParam(defaultValue = "10") int size,
-                                                        @RequestParam String userId,
-                                                        @RequestParam String businessSection,
-                                                        @RequestParam String keyword){
+    public R<IPage<LifeGroupBuyMain>> selectCouponCollectList(@RequestParam(defaultValue = "1") int page,
+                                                              @RequestParam(defaultValue = "10") int size,
+                                                              @RequestParam String userId,
+                                                              @RequestParam String businessSection,
+                                                              @RequestParam String keyword){
         log.info("LifeCollectController.selectCouponCollectList?userId={},page={},size={},businessSection={},keyword={}", userId, page, size,businessSection,keyword);
         LambdaUpdateWrapper<LifeCollect> wrapper = new LambdaUpdateWrapper<>();
         wrapper.eq(LifeCollect::getUserId, userId);
         wrapper.eq(LifeCollect::getDeleteFlag, 0).isNotNull(LifeCollect::getCouponId).orderByDesc(LifeCollect::getCreatedTime);
         List<LifeCollect> lifeCollectList = lifeCollectMapper.selectList(wrapper);
-        List<LifeCoupon> lifeCoupons = new ArrayList<>();
+        List<LifeGroupBuyMain> lifeCoupons = new ArrayList<>();
         if (!CollectionUtils.isEmpty(lifeCollectList)) {
             // 获取收藏的优惠券id
             List<String> ids = lifeCollectList.stream().map(LifeCollect::getCouponId).collect(Collectors.toList());
-            QueryWrapper<LifeCoupon> queryWrapper = new QueryWrapper<>();
+            QueryWrapper<LifeGroupBuyMain> queryWrapper = new QueryWrapper<>();
             queryWrapper.in("id", ids).eq("delete_flag", 0).orderByDesc("created_time");
             // 八大类分类
             if (!StringUtils.isEmpty(businessSection)) {
-                queryWrapper.eq("store_type", businessSection);
+                queryWrapper.eq("group_type", businessSection);
             }
             // 关键词查询
             if (!StringUtils.isEmpty(keyword)) {
-                queryWrapper.like("name", keyword);
+                queryWrapper.like("group_name", keyword);
             }
-            lifeCoupons = lifeCouponMapper.selectList(queryWrapper);
+//            lifeCoupons = lifeCouponMapper.selectList(queryWrapper);
+            lifeCoupons = lifeGroupBuyMainMapper.selectList(queryWrapper);
             // 设置团购券图片
-            List<String> imagesId = lifeCoupons.stream().map(LifeCoupon::getImagePath).collect(Collectors.toList());
+            List<String> imagesId = lifeCoupons.stream().map(LifeGroupBuyMain::getImageId).collect(Collectors.toList());
             if ( !CollectionUtils.isEmpty(imagesId) ){
                 QueryWrapper<StoreImg> imgQueryWrapper = new QueryWrapper<>();
                 imgQueryWrapper.in("id", imagesId);
                 List<StoreImg> storeImgs = storeImgMapper.selectList(imgQueryWrapper);
                 Map<String, List<StoreImg>> collect = storeImgs.stream().collect(Collectors.groupingBy(x -> String.valueOf(x.getId())));
                 lifeCoupons.forEach(coupon -> {
-                    String imgId = coupon.getImagePath().split(",")[0];
+                    String imgId = coupon.getImageId().split(",")[0];
                     if ( collect.containsKey(imgId) ){
-                        coupon.setImagePath(collect.get(imgId).get(0).getImgUrl());
+                        coupon.setImageId(collect.get(imgId).get(0).getImgUrl());
                     }
                 });
             }

+ 9 - 1
alien-store/src/main/java/shop/alien/store/controller/LifeCouponController.java

@@ -78,7 +78,7 @@ public class LifeCouponController {
         return R.data(lifeCouponService.getOne(objectLambdaQueryWrapper));
     }
 
-    @ApiOperation("核销订单")
+    @ApiOperation("核销订单")
     @ApiImplicitParams({@ApiImplicitParam(name = "storeId", value = "门店id", dataType = "Integer", paramType = "query", required = true), @ApiImplicitParam(name = "quanCode", value = "券码", dataType = "Integer", paramType = "query", required = true)})
     @GetMapping("/verify")
     public R<Map<String, String>> verify(@RequestParam("storeId") String storeId, @RequestParam("quanCode") String quanCode) {
@@ -86,6 +86,14 @@ public class LifeCouponController {
         return R.data(lifeCouponService.couponVerify(storeId, quanCode));
     }
 
+    @ApiOperation("新 核销订单")
+    @ApiImplicitParams({@ApiImplicitParam(name = "storeId", value = "门店id", dataType = "Integer", paramType = "query", required = true), @ApiImplicitParam(name = "quanCode", value = "券码", dataType = "Integer", paramType = "query", required = true)})
+    @GetMapping("/newVerify")
+    public R<Map<String, String>> newVerify(@RequestParam("storeId") String storeId, @RequestParam("quanCode") String quanCode) {
+        log.info("LifeCouponController.newVerify?storeId={},quanCode={}", storeId, quanCode);
+        return R.data(lifeCouponService.newCouponVerify(storeId,quanCode));
+    }
+
     @ApiOperation("核销订单前效验")
     @ApiImplicitParams(@ApiImplicitParam(name = "orderId", value = "订单id", dataType = "Integer", paramType = "query", required = true))
     @GetMapping("/orderVerify")

+ 2 - 0
alien-store/src/main/java/shop/alien/store/service/LifeCouponService.java

@@ -33,6 +33,8 @@ public interface LifeCouponService extends IService<LifeCoupon> {
 
     Map<String, String> couponVerify(String storeId, String quanCode);
 
+    Map<String, String> newCouponVerify(String storeId, String quanCode);
+
     /**
      * 获取代金券状态
      */

+ 123 - 54
alien-store/src/main/java/shop/alien/store/service/impl/LifeCouponServiceImpl.java

@@ -227,6 +227,73 @@ public class LifeCouponServiceImpl extends ServiceImpl<LifeCouponMapper, LifeCou
         return resultMap;
     }
 
+    @Override
+    public Map<String, String> newCouponVerify(String storeId, String quanCode) {
+        Map<String, String> resultMap = new HashMap<>();
+        OrderCouponMiddle orderCouponMiddle = orderCouponMiddleMapper.selectOne(new LambdaQueryWrapper<OrderCouponMiddle>().eq(OrderCouponMiddle::getCouponCode,quanCode));
+        if(!StringUtils.isEmpty(orderCouponMiddle)){
+            LifeUserOrder lifeUserOrder = lifeUserOrderMapper.selectOne(new LambdaQueryWrapper<LifeUserOrder>().eq(LifeUserOrder::getId,orderCouponMiddle.getOrderId()));
+            //CouponType 类型为 1:代金券 2:团购套餐
+            if(lifeUserOrder.getCouponType()==1){
+                orderCouponMiddle.setStatus(2);
+                orderCouponMiddle.setUsedTime(new Date());
+                orderCouponMiddleMapper.updateById(orderCouponMiddle);
+                // TODO 抽成比例应该从商户里取
+                BigDecimal amounts = new BigDecimal(lifeUserOrder.getFinalPrice()).multiply(new BigDecimal(100));
+                BigDecimal commission = amounts.multiply(new BigDecimal(0.04)).setScale(0, RoundingMode.HALF_UP);
+                BigDecimal money = amounts.subtract(commission);
+
+                // 插入收入明细表数据
+                StoreIncomeDetailsRecord record = new StoreIncomeDetailsRecord();
+                record.setStoreId(Integer.parseInt(storeId));
+                record.setUserOrderId(orderCouponMiddle.getId());
+                record.setIncomeType(lifeUserOrder.getCouponType());
+                record.setBusinessId(orderCouponMiddle.getCouponId());
+                record.setCommission(commission.intValue());
+                record.setMoney(money.intValue());
+                storeIncomeDetailsRecordMapper.insert(record);
+
+                // 店铺账户余额增加
+                UpdateWrapper<StoreUser> updateWrapper = new UpdateWrapper();
+                updateWrapper.eq("store_id", storeId);
+                updateWrapper.eq("delete_flag", 0);
+                updateWrapper.setSql("money = money + " + money);
+                storeUserMapper.update(null, updateWrapper);
+                resultMap.put("code", "true");
+                resultMap.put("message", "核销成功");
+
+            }else if(lifeUserOrder.getCouponType()==2){
+                orderCouponMiddle.setStatus(2);
+                orderCouponMiddle.setUsedTime(new Date());
+                orderCouponMiddleMapper.updateById(orderCouponMiddle);
+                // TODO 抽成比例应该从商户里取
+                BigDecimal amounts = new BigDecimal(lifeUserOrder.getFinalPrice()).multiply(new BigDecimal(100));
+                BigDecimal commission = amounts.multiply(new BigDecimal(0.04)).setScale(0, RoundingMode.HALF_UP);
+                BigDecimal money = amounts.subtract(commission);
+
+                // 插入收入明细表数据
+                StoreIncomeDetailsRecord record = new StoreIncomeDetailsRecord();
+                record.setStoreId(Integer.parseInt(storeId));
+                record.setUserOrderId(orderCouponMiddle.getId());
+                record.setIncomeType(lifeUserOrder.getCouponType());
+                record.setBusinessId(orderCouponMiddle.getCouponId());
+                record.setCommission(commission.intValue());
+                record.setMoney(money.intValue());
+                storeIncomeDetailsRecordMapper.insert(record);
+
+                // 店铺账户余额增加
+                UpdateWrapper<StoreUser> updateWrapper = new UpdateWrapper();
+                updateWrapper.eq("store_id", storeId);
+                updateWrapper.eq("delete_flag", 0);
+                updateWrapper.setSql("money = money + " + money);
+                storeUserMapper.update(null, updateWrapper);
+                resultMap.put("code", "true");
+                resultMap.put("message", "核销成功");
+            }
+        }
+        return resultMap;
+    }
+
     /**
      * <p>
      * 获取代金券状态
@@ -327,69 +394,71 @@ public class LifeCouponServiceImpl extends ServiceImpl<LifeCouponMapper, LifeCou
     @Override
     public R<String> orderVerify(Integer orderId) {
             OrderCouponMiddle orderCouponMiddle = orderCouponMiddleMapper.selectOne(new LambdaQueryWrapper<OrderCouponMiddle>().eq(OrderCouponMiddle::getId, orderId));
-            if (StringUtils.isEmpty(orderCouponMiddle) && orderCouponMiddle.getStatus() != 5) {
-                return R.fail("该劵不是待使用状态");
-            }
-            if (!StringUtils.isEmpty(orderCouponMiddle)) {
-                LifeGroupBuyMain lifeGroupBuyMain = lifeGroupBuyMainMapper.selectOne(new LambdaQueryWrapper<LifeGroupBuyMain>().eq(LifeGroupBuyMain::getId, orderCouponMiddle.getCouponId()));
-                //团购有效期类型为:0 指定天数
-                if (lifeGroupBuyMain.getEffectiveDateType() == 0) {
-                    //订单支付时间加上指定天数 为团购劵有效期
-                    LifeUserOrder lifeUserOrder = lifeUserOrderMapper.selectOne(new LambdaQueryWrapper<LifeUserOrder>().eq(LifeUserOrder::getId, orderCouponMiddle.getOrderId()));
-                    LocalDateTime localDateTime = lifeUserOrder.getBuyTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
-                    LocalDateTime validityPeriod = localDateTime.plusDays(Long.parseLong(lifeGroupBuyMain.getEffectiveDateValue()));
-                    LocalDateTime nowDate = LocalDateTime.now(); // 获取当前时间
-                    if (nowDate.isAfter(validityPeriod)) {
-                        return R.fail("该劵不在有效期内");
-                    }
-                } else if (lifeGroupBuyMain.getEffectiveDateType() == 1) {//类型为:1 指定时间段
-                    String[] strings = lifeGroupBuyMain.getEffectiveDateValue().split(",");
-                    String startDate = strings[0];
-                    String endDate = strings[1];
-                    LocalDate localStartDate = LocalDate.parse(startDate);
-                    LocalDate localEndDate = LocalDate.parse(endDate);
-                    LocalDate nowDate = LocalDate.now(); // 获取当前时间
-                    if (nowDate.isAfter(localEndDate) || nowDate.isBefore(localStartDate)) {
-                        return R.fail("该劵不在有效期内");
+            if (!StringUtils.isEmpty(orderCouponMiddle) && orderCouponMiddle.getStatus() == 1) {
+                if (!StringUtils.isEmpty(orderCouponMiddle)) {
+                    LifeGroupBuyMain lifeGroupBuyMain = lifeGroupBuyMainMapper.selectOne(new LambdaQueryWrapper<LifeGroupBuyMain>().eq(LifeGroupBuyMain::getId, orderCouponMiddle.getCouponId()));
+                    //团购有效期类型为:0 指定天数
+                    if (lifeGroupBuyMain.getEffectiveDateType() == 0) {
+                        //订单支付时间加上指定天数 为团购劵有效期
+                        LifeUserOrder lifeUserOrder = lifeUserOrderMapper.selectOne(new LambdaQueryWrapper<LifeUserOrder>().eq(LifeUserOrder::getId, orderCouponMiddle.getOrderId()));
+                        LocalDate localDate = lifeUserOrder.getPayTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
+                        LocalDate validityPeriod = localDate.plusDays(Long.parseLong(lifeGroupBuyMain.getEffectiveDateValue()));
+                        LocalDate nowDate = LocalDate.now(); // 获取当前时间
+                        if (nowDate.isAfter(validityPeriod)) {
+                            return R.fail("该劵不在有效期内");
+                        }
+                    } else if (lifeGroupBuyMain.getEffectiveDateType() == 1) {//类型为:1 指定时间段
+                        String[] strings = lifeGroupBuyMain.getEffectiveDateValue().split(",");
+                        String startDate = strings[0];
+                        String endDate = strings[1];
+                        LocalDate localStartDate = LocalDate.parse(startDate);
+                        LocalDate localEndDate = LocalDate.parse(endDate);
+                        LocalDate nowDate = LocalDate.now(); // 获取当前时间
+                        if (nowDate.isAfter(localEndDate) || nowDate.isBefore(localStartDate)) {
+                            return R.fail("该劵不在有效期内");
+                        }
                     }
-                }
-                //判断订单是否在不可用日期内
-                //判断当前日期是否在不可用星期
-                if(lifeGroupBuyMain.getDisableDateType() == 1){//限制日期: 1234567;节日id
-                    LocalDate nowDate = LocalDate.now(); // 获取当前时间
-                    DayOfWeek dayOfWeek = nowDate.getDayOfWeek();
-                    String week = dayOfWeek.getDisplayName(TextStyle.FULL, Locale.CHINA);
-                    String beforeSemicolon = lifeGroupBuyMain.getDisableDateValue().split(";")[0];
-                    if (!StringUtils.isEmpty(beforeSemicolon)) {
-                        List<String> collectUnavailableDate = Arrays.stream(beforeSemicolon.split(",")).map(String::trim).collect(Collectors.toList());
-                        boolean isExist = collectUnavailableDate.stream().anyMatch(s -> s.equals(week));
-                        if(isExist){
-                            return R.fail("该劵在不可用日期内");
+                    //判断订单是否在不可用日期内
+                    //判断当前日期是否在不可用星期
+                    if(lifeGroupBuyMain.getDisableDateType() == 1){//限制日期: 1234567;节日id
+                        LocalDate nowDate = LocalDate.now(); // 获取当前时间
+                        DayOfWeek dayOfWeek = nowDate.getDayOfWeek();
+                        String week = dayOfWeek.getDisplayName(TextStyle.FULL, Locale.CHINA);
+                        String beforeSemicolon = lifeGroupBuyMain.getDisableDateValue().split(";")[0];
+                        if (!StringUtils.isEmpty(beforeSemicolon)) {
+                            List<String> collectUnavailableDate = Arrays.stream(beforeSemicolon.split(",")).map(String::trim).collect(Collectors.toList());
+                            boolean isExist = collectUnavailableDate.stream().anyMatch(s -> s.equals(week));
+                            if(isExist){
+                                return R.fail("该劵在不可用日期内");
+                            }
+                        }
+                        //判断当前日期是否在不可用节日
+                        String [] strings = lifeGroupBuyMain.getDisableDateValue().split(";");
+                        if(strings.length>1){
+                                String afterSemicolon = lifeGroupBuyMain.getDisableDateValue().split(";")[1];
+                                List<String> collectUnavailableDate = Arrays.stream(afterSemicolon.split(",")).map(String::trim).collect(Collectors.toList());
+                                List<EssentialHolidayComparison> essentialHolidayComparisons = essentialHolidayComparisonMapper.
+                                        selectList(new LambdaQueryWrapper<EssentialHolidayComparison>().in(EssentialHolidayComparison::getId, collectUnavailableDate));
+                                boolean isExist = essentialHolidayComparisons.stream().anyMatch(s -> nowDate.isAfter(s.getStartTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate())
+                                        && nowDate.isBefore(s.getEndTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate()));
+                                if(isExist){
+                                    return R.fail("该劵在不可用日期内");
+                                }
                         }
                     }
-                    //判断当前日期是否在不可用节日
-                    String afterSemicolon = lifeGroupBuyMain.getDisableDateValue().split(";")[1];
-                    if(!StringUtils.isEmpty(afterSemicolon)){
-                        List<String> collectUnavailableDate = Arrays.stream(afterSemicolon.split(",")).map(String::trim).collect(Collectors.toList());
-                        List<EssentialHolidayComparison> essentialHolidayComparisons = essentialHolidayComparisonMapper.
-                                selectList(new LambdaQueryWrapper<EssentialHolidayComparison>().in(EssentialHolidayComparison::getId, collectUnavailableDate));
-                        boolean isExist = essentialHolidayComparisons.stream().anyMatch(s -> nowDate.isAfter(s.getStartTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate())
-                                && nowDate.isBefore(s.getEndTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate()));
+                    //判断当前日期是否在自定义不可用日期内
+                    if(lifeGroupBuyMain.getDisableDateType() == 2){
+                        String [] customDate = lifeGroupBuyMain.getDisableDateValue().split(";");
+                        boolean isExist = isCurrentDateInAnyRange(customDate);
                         if(isExist){
                             return R.fail("该劵在不可用日期内");
                         }
                     }
                 }
-                //判断当前日期是否在自定义不可用日期内
-                if(lifeGroupBuyMain.getDisableDateType() == 2){
-                    String [] customDate = lifeGroupBuyMain.getDisableDateValue().split(";");
-                    boolean isExist = isCurrentDateInAnyRange(customDate);
-                    if(isExist){
-                        return R.fail("该劵在不可用日期内");
-                    }
-                }
+            }else{
+                return R.fail("该劵不是待使用状态");
             }
-        return R.fail("效验通过");
+        return R.success("效验通过");
     }
 
     public static boolean isCurrentDateInAnyRange(String[] dateRanges) {