| | |
| | | import java.text.SimpleDateFormat; |
| | | import java.time.LocalDateTime; |
| | | |
| | | import java.time.ZoneId; |
| | | import java.time.ZoneOffset; |
| | | import java.time.format.DateTimeFormatter; |
| | | import java.util.*; |
| | |
| | | OrderGood orderGood = orderGoodMapper.selectOne(new LambdaQueryWrapper<OrderGood>().eq(OrderGood::getOrderId, orderId)); |
| | | String goodJson = orderGood.getGoodJson(); |
| | | Goods goods = JSONObject.parseObject(goodJson, Goods.class); |
| | | GoodsSeckill goodsSeckill = JSON.parseObject(orderGood.getSeckillJson(), GoodsSeckill.class); |
| | | |
| | | OrderGoodsVO orderGoodsVO = new OrderGoodsVO(); |
| | | orderGoodsVO.setGoodsId(goods.getId()); |
| | | orderGoodsVO.setGoodsName(goods.getName()); |
| | | orderGoodsVO.setGoodsPic(goods.getHomePagePicture()); |
| | | orderGoodsVO.setNum(order.getNum()); |
| | | if (null!=goodsSeckill){ |
| | | orderGoodsVO.setSellingPrice(goodsSeckill.getSellingPrice()); |
| | | orderGoodsVO.setIntegral(goodsSeckill.getIntegral()); |
| | | }else { |
| | | orderGoodsVO.setSellingPrice(goods.getSellingPrice()); |
| | | orderGoodsVO.setIntegral(goods.getIntegral()); |
| | | } |
| | | |
| | | |
| | | orderGoodsVO.setOriginalPrice(goods.getOriginalPrice()); |
| | | |
| | | OrderDetailVO orderDetailVO = new OrderDetailVO(); |
| | |
| | | throw new ServiceException("生成核销码失败"); |
| | | } |
| | | //该商品是否被用户评论 |
| | | Long evaluateId = goodsEvaluateClient.getEvaluateIdByUserIdAndGoodId(goods.getId(), order.getAppUserId()).getData(); |
| | | Long evaluateId = goodsEvaluateClient.getEvaluateIdByOrderId(order.getId()).getData(); |
| | | orderDetailVO.setEvaluateId(evaluateId); |
| | | |
| | | return orderDetailVO; |
| | |
| | | } |
| | | if (!order.getShopId().equals(shopId)) { |
| | | throw new ServiceException("该订单与当前扫码门店不一致"); |
| | | } |
| | | if (order.getOrderStatus()!=3){ |
| | | throw new ServiceException("订单已被核销过"); |
| | | } |
| | | |
| | | |
| | |
| | | */ |
| | | public R refundPayMoney(Order order) { |
| | | //开始退款 |
| | | //先回退积分 |
| | | BigDecimal paymentAmount = order.getPaymentAmount(); |
| | | if (BigDecimal.ZERO.compareTo(order.getPaymentAmount()) < 0) {//支付的金额是否大于0 |
| | | //微信退款 |
| | | RefundResult refund = PaymentUtil.refund(order.getOrderNumber(), "R" + order.getOrderNumber(), paymentAmount.doubleValue(), "/order/order/refundPayMoneyCallback"); |
| | | if (!"100".equals(refund.getRa_Status())) { |
| | | return R.fail(refund.getRc_CodeMsg());//退款失败 |
| | | } |
| | | } |
| | | //退款成功再回退积分 |
| | | AppUser appUser = appUserClient.getAppUserById(order.getAppUserId()); |
| | | if (order.getPoint()>0) { |
| | | //返回订单抵扣积分 |
| | |
| | | |
| | | appUser.setAvailablePoint(availablePoint); |
| | | appUser.setCancelPoint(cancelPoint); |
| | | appUser.setTotalPoint(appUser.getTotalPoint() + order.getPoint()); |
| | | appUserClient.editAppUserById(appUser); |
| | | //构建积分流水 |
| | | UserPoint userPoint = new UserPoint(); |
| | |
| | | userPointClient.saveUserPoint(userPoint); |
| | | } |
| | | |
| | | BigDecimal paymentAmount = order.getPaymentAmount(); |
| | | if (BigDecimal.ZERO.compareTo(order.getPaymentAmount()) < 0) {//支付的金额是否大于0 |
| | | //微信退款 |
| | | RefundResult refund = PaymentUtil.refund(order.getOrderNumber(), "R" + order.getOrderNumber(), paymentAmount.doubleValue(), "/order/order/refundPayMoneyCallback"); |
| | | if (!"100".equals(refund.getRa_Status())) { |
| | | return R.fail(refund.getRc_CodeMsg());//退款失败 |
| | | } |
| | | } |
| | | |
| | | order.setRefundStatus(2); |
| | | order.setRefundTime(LocalDateTime.now()); |
| | | |
| | |
| | | goodsClient.editGoodsNum(orderGood.getGoodsId(), -1); |
| | | //获取商品json |
| | | Goods good = JSON.parseObject(orderGood.getGoodJson(), Goods.class); |
| | | GoodsSeckill goodsSeckill = JSON.parseObject(orderGood.getSeckillJson(), GoodsSeckill.class); |
| | | |
| | | //门店减少冻结资金 即减少余额, 冻结资金=余额-可用资金 |
| | | Shop shop = shopClient.getShopById(order.getShopId()).getData(); |
| | | |
| | | BigDecimal historicalBalance=shop.getBalance();//历史余额 |
| | | BigDecimal variableAmount=good.getSellingPrice();//变动金额 |
| | | BigDecimal balance=shop.getBalance().subtract(good.getSellingPrice());//变动后余额 |
| | | BigDecimal variableAmount=BigDecimal.ZERO;//变动金额 |
| | | if (null != goodsSeckill) { |
| | | variableAmount=goodsSeckill.getSellingPrice(); |
| | | }else { |
| | | variableAmount=good.getSellingPrice(); |
| | | } |
| | | |
| | | BigDecimal balance=shop.getBalance().subtract(variableAmount);//变动后余额 |
| | | |
| | | shop.setBalance(balance); |
| | | shopClient.updateShop(shop); |
| | |
| | | confirmOrderVo.setCash(goodsSeckill.getSellingPrice());//秒杀活动价格 |
| | | confirmOrderVo.setPoint(goodsSeckill.getIntegral());//秒杀活动积分价格 |
| | | confirmOrderVo.setPurchaseLimitNum(activityInfo.getMaxNum());//限购数量 |
| | | confirmOrderVo.setEndTimeStamp(activityInfo.getEndTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli());//结束时间戳 |
| | | } |
| | | |
| | | |
| | |
| | | } |
| | | //限购检查 |
| | | //判断当前数量是否已经超出限购数量(需要计算已经购买的数量) |
| | | if(null == good.getPurchaseLimit() || -1 == good.getPurchaseLimit()){ |
| | | if(null == confirmOrderVo.getPurchaseLimitNum() || -1 == confirmOrderVo.getPurchaseLimitNum()){ |
| | | confirmOrderVo.setIsPurchaseLimit(false); |
| | | confirmOrderVo.setPurchaseLimitNum(-1); |
| | | }else{ |
| | |
| | | sum = orderGoodList.stream().mapToInt(OrderGood::getNum).sum(); |
| | | } |
| | | confirmOrderVo.setIsPurchaseLimit((1 + sum) > good.getPurchaseLimit()); |
| | | confirmOrderVo.setPurchaseLimitNum(good.getPurchaseLimit() - sum); |
| | | confirmOrderVo.setPurchaseLimitNum(confirmOrderVo.getPurchaseLimitNum() - sum); |
| | | } |
| | | |
| | | return confirmOrderVo; |
| | |
| | | int type=1;//商品类型 1=普通商品,2=秒杀商品 |
| | | //商品信息 |
| | | Goods goods = goodsClient.getGoodsById(orderPayment.getGoodId()).getData(); |
| | | String goodsJson= JSON.toJSONString(goods); |
| | | if (null == goods || 1==goods.getDelFlag()){ |
| | | return R.fail( "商品不存在"); |
| | | } |
| | |
| | | order.setDelFlag(0); |
| | | order.setCreateTime(LocalDateTime.now()); |
| | | |
| | | orderMapper.insert(order); |
| | | this.save(order); |
| | | |
| | | |
| | | //构建订单明细数据 |
| | | OrderGood orderGood = new OrderGood(); |
| | |
| | | if (2==type){ |
| | | orderGood.setSeckillJson(JSON.toJSONString(goodsSeckill)); |
| | | } |
| | | orderGood.setGoodJson(JSON.toJSONString(goods)); |
| | | orderGood.setGoodJson(goodsJson); |
| | | orderGood.setDelFlag(0); |
| | | orderGood.setCreateTime(LocalDateTime.now()); |
| | | orderGood.setCashPayment(orderPayment.getPaymentType()==1 ? 1 : 0); |
| | |
| | | //扣减订单支付积分 |
| | | appUser.setAvailablePoint(availablePoint); |
| | | appUser.setExchangePoint(exchangePoint ); |
| | | appUser.setTotalPoint(appUser.getTotalPoint() + order.getPoint());//总积分 |
| | | //构建积分流水记录 |
| | | UserPoint userPoint = new UserPoint(); |
| | | userPoint.setType(4);//兑换商品 |
| | |
| | | //商品销量增加 |
| | | goodsClient.editGoodsNum(orderGood.getGoodsId(), 1); |
| | | Goods goods = JSON.parseObject(orderGood.getGoodJson(), Goods.class); |
| | | |
| | | GoodsSeckill goodsSeckill = JSON.parseObject(orderGood.getSeckillJson(), GoodsSeckill.class); |
| | | //门店增加冻结资金 即增加金额, 冻结资金=余额-可用资金 |
| | | Shop shop = shopClient.getShopById(order.getShopId()).getData(); |
| | | BigDecimal historicalBalance=shop.getBalance();//历史余额 |
| | | BigDecimal variableAmount=goods.getSellingPrice();//变动余额 |
| | | BigDecimal variableAmount=BigDecimal.ZERO;//变动金额 |
| | | if (null != goodsSeckill) { |
| | | variableAmount=goodsSeckill.getSellingPrice(); |
| | | }else { |
| | | variableAmount=goods.getSellingPrice(); |
| | | } |
| | | BigDecimal balance=shop.getBalance().add(variableAmount);//变动后余额 |
| | | |
| | | shop.setBalance(balance); |
| | |
| | | Integer cancelPoint = appUser.getCancelPoint() + order.getPoint();//取消订单积分 |
| | | appUser.setAvailablePoint(availablePoint); |
| | | appUser.setCancelPoint(cancelPoint); |
| | | appUser.setTotalPoint(appUser.getTotalPoint() + order.getPoint()); |
| | | |
| | | //构建积分流水记录 |
| | | UserPoint userPoint = new UserPoint(); |
| | |
| | | OrderPageListVo vo = new OrderPageListVo(); |
| | | // 复制属性 |
| | | BeanUtils.copyProperties(order, vo); |
| | | |
| | | // 查询用户信息 |
| | | AppUser user = appUserClient.getAppUserById(order.getAppUserId()); |
| | | if (user != null) { |