he2802 2 years ago
parent
commit
fbb66de578

+ 8 - 0
zhongzheng-api/src/main/java/com/zhongzheng/controller/order/OrderController.java

@@ -102,6 +102,14 @@ public class OrderController extends BaseController {
         return AjaxResult.success(iOrderService.placeSmallOrder(bo));
     }
 
+    @ApiOperation("新增公众号订单")
+    @PostMapping("/placeGzhOrder")
+    public AjaxResult addGzh(@RequestBody OrderAddBo bo) {
+        ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setUserId(loginUser.getUser().getUserId());
+        return AjaxResult.success(iOrderService.placeGzhOrder(bo));
+    }
+
     @ApiOperation("继续支付小程序订单")
     @PostMapping("/resumeSmallOrder")
     public AjaxResult resumeSmallOrder(@RequestBody OrderAddBo bo) {

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/OrderAddBo.java

@@ -91,4 +91,6 @@ public class OrderAddBo {
     /** 支付状态 0未收费,1部分付款  2完全付款 3免费 */
     @ApiModelProperty("支付状态 0未收费,1部分付款  2完全付款 3免费")
     private Integer payStatus;
+    @ApiModelProperty("公众号页面url")
+    private String url;
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/IOrderService.java

@@ -67,6 +67,8 @@ public interface IOrderService extends IService<Order> {
 	 */
 	Map<String, String> placeSmallOrder(OrderAddBo bo);
 
+	Map<String, String> placeGzhOrder(OrderAddBo bo);
+
 	Map<String, String> placePcOrder(OrderAddBo bo);
 
 	Map<String, String> resumeSmallOrder(OrderAddBo bo);

+ 149 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderServiceImpl.java

@@ -879,6 +879,155 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         return payResult;
     }
 
+    @Override
+    public Map<String, String> placeGzhOrder(OrderAddBo bo) {
+        String key = "ORDER-" + "-" + bo.getUserId();
+        Long value = redisCache.getCacheObject(key);
+        if (Validator.isNotEmpty(value)) {
+            throw new CustomException("请勿频繁提交订单");
+        }
+        redisCache.setCacheObject(key, 1L, 5, TimeUnit.SECONDS);//5秒
+        List<OrderGoodsAddBo> goodsList = bo.getGoodsList();
+        if (goodsList == null || goodsList.size() < 1) {
+            throw new CustomException("商品列表为空");
+        }
+        Order add = BeanUtil.toBean(bo, Order.class);
+        validEntityBeforeSave(add);
+        add.setCreateTime(DateUtils.getNowTime());
+        add.setUpdateTime(DateUtils.getNowTime());
+
+
+        //生成订单号
+        String out_trade_no = DateUtils.getDateOrderSn();
+        BigDecimal totalPrice = new BigDecimal(0);
+        BigDecimal payPrice = new BigDecimal(0);
+        String body = "中正祥粤云-";
+        List<OrderGoods> freeList = new ArrayList<>();
+        //生成订单
+        for (OrderGoodsAddBo g : goodsList) {
+            //订单商品
+            Goods goods = iGoodsService.getOne(new LambdaQueryWrapper<Goods>().eq(Goods::getGoodsId, g.getGoodsId()));
+            if (goods.getGoodsStatus() != 1) {
+                throw new CustomException(goods.getGoodsName()+"商品已下架,请重新选择商品下单");
+            }
+            body = "中正祥粤云-" + goods.getGoodsName();
+            OrderGoods orderGoods = BeanUtil.toBean(g, OrderGoods.class);
+            orderGoods.setOrderSn(out_trade_no);
+            if (g.getGoodsInputData() != null) {
+                orderGoods.setGoodsInputData(JSON.toJSONString(g.getGoodsInputData()));
+            }
+            //赋值业务信息
+           /* orderGoods.setBusinessOwner(bo.getOrderBusiness().getBusinessOwner());
+            orderGoods.setDept(bo.getOrderBusiness().getDept());
+            orderGoods.setSource(bo.getOrderBusiness().getSource());
+            orderGoods.setSchool(bo.getOrderBusiness().getSchool());*/
+
+            //收货公司信息
+           /* orderGoods.setAddress(bo.getOrderStudent().getAddress());
+            orderGoods.setCompany(bo.getOrderStudent().getCompany());*/
+            //成交价
+            orderGoods.setStatus(1);
+            orderGoods.setGoodsRealPrice(goods.getStandPrice());
+            orderGoods.setGoodsPrice(goods.getStandPrice());
+            orderGoods.setCreateTime(DateUtils.getNowTime());
+            orderGoods.setUpdateTime(DateUtils.getNowTime());
+            //订单价格不计算优惠
+            totalPrice = totalPrice.add(goods.getStandPrice());
+            //暂不计算优惠券
+            payPrice = payPrice.add(goods.getStandPrice());
+            boolean orderGoodsRs = iOrderGoodsService.save(orderGoods);
+
+            boolean canRepeatBuy = false;
+            validUserBeforeBuy(goods,bo.getUserId());
+            //判断是否有购买过
+            Long oldOrderGoodsId = getHaveBuyGoods(g.getGoodsId(), bo.getUserId());
+            //视频商品安排班级
+            if (goods.getGoodsType() == 1) {
+                if (Validator.isNotEmpty(goods.getStudyCount())) {
+                    orderGoods.setStudyCount(goods.getStudyCount() - 1); //默认分班消耗一次学习机会
+                } else {
+                    orderGoods.setStudyCount(0L);//没配置则为0
+                }
+                Long gradeId = null;
+                //判断是否购买历史班级都过期
+                canRepeatBuy = this.canBuyRepeatGoods(g.getGoodsId(), bo.getUserId());
+                if (g.getGoodsInputData() != null) {
+                    gradeId = g.getGoodsInputData().getGradeId();
+                    if (Validator.isNotEmpty(oldOrderGoodsId)) {
+                        //有指定选班模板且视频商品班级已过期,记录复购状态
+                        orderGoods.setRebuyOrderGoodsId(oldOrderGoodsId);
+                    }
+                }
+                String requestId = IdUtil.simpleUUID();
+                RedisLockEntity redisLockEntity = new RedisLockEntity();
+                redisLockEntity.setLockKey(RedisLockEntity.KEY_LOCK_GRADE);
+                redisLockEntity.setRequestId(requestId);
+                if (redisCache.lock(redisLockEntity)) {
+                    arrangeGrade(goods.getGoodsName(), goods.getGoodsId(), orderGoods.getOrderGoodsId(), gradeId, add.getUserId(), out_trade_no, goods.getBusinessId());
+                    redisCache.unlockLua(redisLockEntity);
+                }
+                iOrderGoodsService.updateById(orderGoods);
+                newFreeBankGoods(goods.getGoodsId(), orderGoods.getOrderGoodsId());
+            }
+
+            if (!canRepeatBuy && goods.getGoodsType() != 3 && goods.getGoodsType() != 4) {
+                this.checkBuyGoods(g.getGoodsId(), bo.getUserId(), goods.getGoodsType());
+            }
+            if (goods.getGoodsType() == 6) {
+                //直播商品
+                if(Validator.isNotEmpty(oldOrderGoodsId)&&oldOrderGoodsId.longValue()>0){
+                    throw new CustomException("直播商品不允许复购");
+                }
+            }
+            iShoppingCartService.deleteByGoodsId(g.getGoodsId(), bo.getUserId());
+            //商品0元加入免费商品列表
+            if (orderGoods.getGoodsPrice().compareTo(BigDecimal.ZERO) == 0) {
+                freeList.add(orderGoods);
+            }
+        }
+
+        add.setOrderSn(out_trade_no);
+        add.setOrderFrom(Order.FROM_SMALL);
+        add.setPayPrice(payPrice);
+        add.setPayType(Order.PAY_WECHAT);
+        add.setOrderPrice(totalPrice);
+        //生成支付单号
+        String pay_no = DateUtils.getPayOrderSn();
+        //订单0元
+        if (payPrice.compareTo(BigDecimal.ZERO) == 0) {
+            //完全收费
+            add.setOrderStatus(Order.ORDER_STATUS_PAY);
+            add.setPayStatus(Order.PAY_FREE);
+            add.setStatus(1);
+        } else {
+            OrderPayAddBo payAddBo = new OrderPayAddBo();
+            payAddBo.setPaySn(pay_no);
+            payAddBo.setOrderSn(out_trade_no);
+            payAddBo.setStatus(0);
+            payAddBo.setPayPrice(payPrice);
+            iOrderPayService.insertByAddBo(payAddBo);
+        }
+        this.save(add);
+        //处理免费商品
+        for (OrderGoods orderGoods : freeList) {
+            dealFreeGoods(orderGoods, add);
+        }
+
+        Map<String, Object> result = new HashMap<>();
+        result.put("oderId", add.getOrderId());
+        result.put("orderSn", out_trade_no);
+        UserVo userVo = iUserService.queryById(add.getUserId());
+        //    String price = "1";
+        Map<String, String> payResult = new HashMap<>();
+        //大于0元,获取微信支付信息
+        if (payPrice.compareTo(BigDecimal.ZERO) != 0) {
+            payResult = iWxPayService.paymentGzh(pay_no, userVo.getGzhOpenId(), body, payPrice,bo.getUrl());
+        }
+
+        payResult.put("orderSn", out_trade_no);
+        return payResult;
+    }
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Map<String, String> placePcOrder(OrderAddBo bo) {