|
|
@@ -2255,6 +2255,107 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
|
return payResult;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public Map<String, String> addIntegralOrder(IntegralOrderAddBo 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());
|
|
|
+ add.setOrderType(3);//核销订单
|
|
|
+ //生成订单号
|
|
|
+ String out_trade_no = "HX"+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.setStatus(1);
|
|
|
+ orderGoods.setGoodsRealPrice(goods.getSpecialPrice());//优惠价格
|
|
|
+ orderGoods.setGoodsPrice(goods.getStandPrice());
|
|
|
+ orderGoods.setCreateTime(DateUtils.getNowTime());
|
|
|
+ orderGoods.setUpdateTime(DateUtils.getNowTime());
|
|
|
+ //订单价格不计算优惠
|
|
|
+ totalPrice = totalPrice.add(goods.getStandPrice());
|
|
|
+ //暂不计算优惠券
|
|
|
+ payPrice = payPrice.add(goods.getSpecialPrice());
|
|
|
+ iOrderGoodsService.save(orderGoods);
|
|
|
+
|
|
|
+ if (goods.getGoodsType() == 7) {
|
|
|
+ //积分商品
|
|
|
+ }
|
|
|
+
|
|
|
+ //商品0元加入免费商品列表
|
|
|
+ if (orderGoods.getGoodsPrice().compareTo(BigDecimal.ZERO) == 0) {
|
|
|
+ freeList.add(orderGoods);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ add.setOrderSn(out_trade_no);
|
|
|
+ add.setOrderFrom(Order.FROM_HX_PC);
|
|
|
+ add.setPayPrice(payPrice);
|
|
|
+ add.setPayType(bo.getPayType());
|
|
|
+ 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());
|
|
|
+ Map<String, String> payResult = new HashMap<>();
|
|
|
+ //大于0元,获取微信支付信息
|
|
|
+ if (payPrice.compareTo(BigDecimal.ZERO) != 0) {
|
|
|
+ payResult = iWxPayService.paymentPc(pay_no, userVo.getOpenId(), body, payPrice);
|
|
|
+ }
|
|
|
+
|
|
|
+ payResult.put("orderSn", out_trade_no);
|
|
|
+ return payResult;
|
|
|
+ }
|
|
|
+
|
|
|
private String createGradeCode(Long goodsId, CourseBusinessVo business) {
|
|
|
|
|
|
Goods goods = iGoodsService.getById(goodsId);
|