提交代码

master
胡锐 6 months ago committed by yuanye
parent 489fb48477
commit 896dd4d250
  1. 6
      service/src/main/java/com/hfkj/service/discount/CouponDiscountUserRelService.java
  2. 5
      service/src/main/java/com/hfkj/service/discount/impl/CouponDiscountUserRelServiceImpl.java
  3. 113
      service/src/main/java/com/hfkj/service/order/OrderCreateService.java
  4. 3
      service/src/main/java/com/hfkj/service/order/impl/BsOrderRefundServiceImpl.java
  5. 182
      service/src/main/java/com/hfkj/service/order/impl/BsOrderServiceImpl.java

@ -18,6 +18,12 @@ public interface CouponDiscountUserRelService {
*/ */
void create(CouponDiscountUserRel couponDiscountUserRel); void create(CouponDiscountUserRel couponDiscountUserRel);
/**
* 修改
* @param couponDiscountUserRel
*/
void update(CouponDiscountUserRel couponDiscountUserRel);
/** /**
* @Author Sum1Dream * @Author Sum1Dream
* @Name getList * @Name getList

@ -25,6 +25,11 @@ public class CouponDiscountUserRelServiceImpl implements CouponDiscountUserRelSe
couponDiscountUserRelMapper.insert(couponDiscountUserRel); couponDiscountUserRelMapper.insert(couponDiscountUserRel);
} }
@Override
public void update(CouponDiscountUserRel couponDiscountUserRel) {
couponDiscountUserRelMapper.updateByPrimaryKey(couponDiscountUserRel);
}
@Override @Override
public List<CouponDiscountUserRel> getList(Map<String, Object> map) { public List<CouponDiscountUserRel> getList(Map<String, Object> map) {
CouponDiscountUserRelExample example = new CouponDiscountUserRelExample(); CouponDiscountUserRelExample example = new CouponDiscountUserRelExample();

@ -81,69 +81,62 @@ public class OrderCreateService {
orderChild.setProductImg(goodsMsg.getListImg()); orderChild.setProductImg(goodsMsg.getListImg());
orderChild.setProductSpecName(goodsSpecs.getName()); orderChild.setProductSpecName(goodsSpecs.getName());
orderChild.setProductPrice(goodsSpecs.getSalePrice()); orderChild.setProductPrice(goodsSpecs.getSalePrice());
// 虚拟
if (goodsMsg.getType() == 1) { // 查询商品虚拟信息
// TODO 实物 GoodsVpd goodsVpd = goodsVpdService.queryDetailBySpecsId(goodsSpecs.getId());
if (goodsVpd == null) {
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "未知的商品虚拟规格");
} else if (goodsMsg.getType() == 2) { }
// 虚拟 // 创建卡券订单
// 查询商品虚拟信息 BsOrderCoupon orderCoupon = new BsOrderCoupon();
GoodsVpd goodsVpd = goodsVpdService.queryDetailBySpecsId(goodsSpecs.getId()); orderCoupon.setOrderNo(orderChild.getOrderNo());
if (goodsVpd == null) { orderCoupon.setChildOrderNo(orderChild.getChildOrderNo());
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "未知的商品虚拟规格"); orderCoupon.setMerId(orderChild.getMerId());
} orderCoupon.setUserId(order.getUserId());
orderCoupon.setUserPhone(order.getUserPhone());
// 创建卡券订单 orderCoupon.setGoodsId(goodsMsg.getId());
BsOrderCoupon orderCoupon = new BsOrderCoupon(); orderCoupon.setGoodsName(goodsMsg.getTitle());
orderCoupon.setOrderNo(orderChild.getOrderNo()); orderCoupon.setGoodsTypeId(goodsMsg.getGoodsType());
orderCoupon.setChildOrderNo(orderChild.getChildOrderNo()); orderCoupon.setGoodsTypeName(goodsMsg.getGoodsTypeName());
orderCoupon.setMerId(orderChild.getMerId()); orderCoupon.setGoodsBrandId(goodsMsg.getGoodsBrand());
orderCoupon.setUserId(order.getUserId()); orderCoupon.setGoodsBrandName(goodsMsg.getGoodsBrandName());
orderCoupon.setUserPhone(order.getUserPhone()); orderCoupon.setGoodsSpecsId(goodsSpecs.getId());
orderCoupon.setGoodsId(goodsMsg.getId()); orderCoupon.setGoodsSpecsName(goodsSpecs.getName());
orderCoupon.setGoodsName(goodsMsg.getTitle()); orderCoupon.setGoodsSpescOriginalPrice(goodsSpecs.getOriginalPrice());
orderCoupon.setGoodsTypeId(goodsMsg.getGoodsType()); orderCoupon.setGoodsVpdId(goodsVpd.getId());
orderCoupon.setGoodsTypeName(goodsMsg.getGoodsTypeName()); orderCoupon.setGoodsVpdKey(goodsVpd.getKey());
orderCoupon.setGoodsBrandId(goodsMsg.getGoodsBrand()); orderCoupon.setGoodsVpdSource(goodsVpd.getSource());
orderCoupon.setGoodsBrandName(goodsMsg.getGoodsBrandName()); orderCoupon.setGoodsCount(orderChild.getProductCount());
orderCoupon.setGoodsSpecsId(goodsSpecs.getId()); orderCoupon.setStatus(OrderChildStatusEnum.status1.getCode());
orderCoupon.setGoodsSpecsName(goodsSpecs.getName()); orderCouponService.editData(orderCoupon);
orderCoupon.setGoodsSpescOriginalPrice(goodsSpecs.getOriginalPrice());
orderCoupon.setGoodsVpdId(goodsVpd.getId()); for (int i = 0; i < orderCoupon.getGoodsCount(); i++) {
orderCoupon.setGoodsVpdKey(goodsVpd.getKey()); // 卡券订单卡密
orderCoupon.setGoodsVpdSource(goodsVpd.getSource()); BsOrderCouponNo orderCouponNo = new BsOrderCouponNo();
orderCoupon.setGoodsCount(orderChild.getProductCount()); orderCouponNo.setCouponOrderId(orderCoupon.getId());
orderCoupon.setStatus(OrderChildStatusEnum.status1.getCode()); orderCouponNo.setOrderNo(orderCoupon.getId() + RandomUtils.number(6, false));
orderCouponService.editData(orderCoupon); orderCouponNo.setExpireStatus(false);
orderCouponNo.setExceptionStatus(false);
for (int i = 0; i < orderCoupon.getGoodsCount(); i++) { orderCouponNo.setStatus(OrderCouponNoStatusEnum.status1.getCode());
// 卡券订单卡密
BsOrderCouponNo orderCouponNo = new BsOrderCouponNo(); if (goodsVpd.getSource().equals(GoodsVpdSourceEnum.type4.getCode())) {
orderCouponNo.setCouponOrderId(orderCoupon.getId()); // 下单请求
orderCouponNo.setOrderNo(orderCoupon.getId() + RandomUtils.number(6, false)); JSONObject jsonObject = HuiLianTongCouponService.recharge(orderCouponNo.getOrderNo(),
orderCouponNo.setExpireStatus(false); 1,
orderCouponNo.setExceptionStatus(false); orderCoupon.getGoodsVpdKey(),
orderCouponNo.setStatus(OrderCouponNoStatusEnum.status1.getCode()); orderCoupon.getUserPhone());
if (!jsonObject.getString("respCode").equals("0000")) {
if (goodsVpd.getSource().equals(GoodsVpdSourceEnum.type4.getCode())) { throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "下单失败");
// 下单请求
JSONObject jsonObject = HuiLianTongCouponService.recharge(orderCouponNo.getOrderNo(),
1,
orderCoupon.getGoodsVpdKey(),
orderCoupon.getUserPhone());
if (!jsonObject.getString("respCode").equals("0000")) {
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "下单失败");
}
JSONObject response = HuiLianTongUnionCardService.resolveResponse(jsonObject.getString("data"));
if (!response.getString("respCode").equals("0000")) {
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, response.getString("msg"));
}
orderCouponNo.setChannelOrderNo(response.getJSONObject("data").getString("rechargeOrderId"));
} }
orderCouponNoService.editData(orderCouponNo); JSONObject response = HuiLianTongUnionCardService.resolveResponse(jsonObject.getString("data"));
if (!response.getString("respCode").equals("0000")) {
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, response.getString("msg"));
}
orderCouponNo.setChannelOrderNo(response.getJSONObject("data").getString("rechargeOrderId"));
} }
orderCouponNoService.editData(orderCouponNo);
} }
return orderChild; return orderChild;
} }

@ -185,6 +185,9 @@ public class BsOrderRefundServiceImpl implements BsOrderRefundService {
orderChild.setStatus(orderChild.getSurplusRefundCount()==0?OrderChildStatusEnum.status4.getCode():orderChild.getStatus()); orderChild.setStatus(orderChild.getSurplusRefundCount()==0?OrderChildStatusEnum.status4.getCode():orderChild.getStatus());
orderChildService.editData(orderChild); orderChildService.editData(orderChild);
} }
// 删除缓存
orderService.cacheDelete(order.getOrderNo());
return orderRefund; return orderRefund;
} }

@ -25,6 +25,7 @@ import org.apache.commons.lang3.StringUtils;
import org.apache.rocketmq.spring.core.RocketMQTemplate; import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.messaging.Message; import org.springframework.messaging.Message;
import org.springframework.messaging.support.MessageBuilder; import org.springframework.messaging.support.MessageBuilder;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -53,6 +54,8 @@ public class BsOrderServiceImpl implements BsOrderService {
private RedisUtil redisUtil; private RedisUtil redisUtil;
@Resource @Resource
private RocketMQTemplate rocketMQTemplate; private RocketMQTemplate rocketMQTemplate;
@Autowired
private RedisTemplate redisTemplate;
@Resource @Resource
private BsOrderMapper orderMapper; private BsOrderMapper orderMapper;
@Resource @Resource
@ -109,46 +112,42 @@ public class BsOrderServiceImpl implements BsOrderService {
order.setOrderNo(DateUtil.date2String(new Date(), "yyMMddHHmmss") + RandomUtils.number(6, false)); order.setOrderNo(DateUtil.date2String(new Date(), "yyMMddHHmmss") + RandomUtils.number(6, false));
editData(order); editData(order);
// 交易优惠 // 订单总金额
BigDecimal totalPrice = new BigDecimal("0");
// 商品总金额
BigDecimal productTotalPrice = new BigDecimal("0");
/************** 处理业务 ***************/
for (OrderChildModel child : order.getOrderChildList()) {
child.setOrderNo(order.getOrderNo());
// 子订单号 交易id + 4位随机数
child.setChildOrderNo(order.getId()+RandomUtils.number(4, false));
// 提交订单前实物商品处理
if (child.getProductType().equals(OrderChildProductTypeEnum.type1.getCode())) {
child = orderCreateService.goods(order, child);
}
// 提交订单前产品处理
if (child.getProductType().equals(OrderChildProductTypeEnum.type2.getCode())) {
child = orderCreateService.product(order, child);
}
child.setProductTotalPrice(child.getProductPrice().multiply(new BigDecimal(child.getProductCount().toString())));
child.setStatus(OrderChildStatusEnum.status1.getCode());
productTotalPrice = productTotalPrice.add(child.getProductTotalPrice());
}
totalPrice = productTotalPrice;
order.setTotalPrice(totalPrice);
order.setProductTotalPrice(productTotalPrice);
/************ 交易优惠 **************/
BsOrderDeduction deduction = order.getDeduction()==null?new BsOrderDeduction():order.getDeduction(); BsOrderDeduction deduction = order.getDeduction()==null?new BsOrderDeduction():order.getDeduction();
deduction.setOrderId(order.getId()); deduction.setOrderId(order.getId());
deduction.setOrderNo(order.getOrderNo()); deduction.setOrderNo(order.getOrderNo());
deduction.setIntegralDiscountPrice(deduction.getIntegralDiscountPrice()==null?0L: deduction.getIntegralDiscountPrice()); deduction.setIntegralDiscountPrice(deduction.getIntegralDiscountPrice()==null?0L: deduction.getIntegralDiscountPrice());
if (order.getDeduction().getUserCouponDiscountId() != null) { if (deduction.getUserCouponDiscountId() != null) {
// 查询用户优惠券 // 使用优惠券
CouponDiscountUserRel discountUserRel = couponDiscountUserRelService.getRel(order.getDeduction().getUserCouponDiscountId()); useDeduction(order, deduction, order.getDeduction().getUserCouponDiscountId());
if (discountUserRel == null) {
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "未知优惠券");
}
if (discountUserRel.getStatus() != 1) {
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "优惠券状态不处于待使用");
}
// 查询优惠券
CouponDiscount discount = couponDiscountService.queryDetail(discountUserRel.getDiscountId());
if (discount == null) {
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "未知优惠券");
}
// 计算优惠
deduction.setCouponDiscountId(discount.getId());
deduction.setCouponDiscountType(discount.getType());
deduction.setCouponDiscountPrice(discount.getPrice());
// 卡卷类型 1:满减 2:抵扣 3:折扣
if (1 == discount.getType()) {
deduction.setCouponDiscountActualPrice(discount.getPrice());
} else if (2 == discount.getType()) {
if (discount.getCondition().compareTo(order.getProductTotalPrice()) < 0) {
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "未满足优惠券满减条件");
}
deduction.setCouponDiscountActualPrice(discount.getPrice());
} else if (3 == discount.getType()) {
deduction.setCouponDiscountActualPrice(
order.getTotalPrice()
.multiply(discount.getPrice().divide(new BigDecimal("100")))
.setScale(2, BigDecimal.ROUND_DOWN)
);
} else {
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "未知的优惠券优惠类型");
}
} else { } else {
deduction.setCouponDiscountPrice(new BigDecimal("0")); deduction.setCouponDiscountPrice(new BigDecimal("0"));
deduction.setCouponDiscountActualPrice(new BigDecimal("0")); deduction.setCouponDiscountActualPrice(new BigDecimal("0"));
@ -159,6 +158,7 @@ public class BsOrderServiceImpl implements BsOrderService {
orderDeductionService.editData(deduction); orderDeductionService.editData(deduction);
order.setDeduction(deduction); order.setDeduction(deduction);
// 使用积分抵扣
if (order.getDeduction().getIntegralDiscountPrice() > 0) { if (order.getDeduction().getIntegralDiscountPrice() > 0) {
Map<String,Object> opUser = new HashMap<>(); Map<String,Object> opUser = new HashMap<>();
opUser.put("opUserType", UserIntegralRecordOpUserTypeEnum.type3.getCode()); opUser.put("opUserType", UserIntegralRecordOpUserTypeEnum.type3.getCode());
@ -180,36 +180,10 @@ public class BsOrderServiceImpl implements BsOrderService {
source source
); );
} }
/************ 交易优惠 **************/
// 订单总金额
BigDecimal totalPrice = new BigDecimal("0");
// 商品总金额
BigDecimal productTotalPrice = new BigDecimal("0");
for (OrderChildModel child : order.getOrderChildList()) {
child.setOrderNo(order.getOrderNo());
// 子订单号 交易id + 4位随机数
child.setChildOrderNo(order.getId()+RandomUtils.number(4, false));
// 提交订单前实物商品处理
if (child.getProductType().equals(OrderChildProductTypeEnum.type1.getCode())) {
child = orderCreateService.goods(order, child);
}
// 提交订单前产品处理
if (child.getProductType().equals(OrderChildProductTypeEnum.type2.getCode())) {
child = orderCreateService.product(order, child);
}
child.setProductTotalPrice(child.getProductPrice().multiply(new BigDecimal(child.getProductCount().toString())));
child.setStatus(OrderChildStatusEnum.status1.getCode());
productTotalPrice = productTotalPrice.add(child.getProductTotalPrice());
}
totalPrice = productTotalPrice;
order.setTotalPrice(totalPrice);
order.setProductTotalPrice(productTotalPrice);
order.setPayRealPrice(totalPrice.subtract(order.getDeduction().getTotalDeductionPrice())); order.setPayRealPrice(totalPrice.subtract(order.getDeduction().getTotalDeductionPrice()));
order.setOrderStatus(order.getPayRealPrice().equals(new BigDecimal("0"))?OrderStatusEnum.status2.getCode():OrderStatusEnum.status1.getCode()); order.setOrderStatus(order.getPayRealPrice().equals(new BigDecimal("0"))?OrderStatusEnum.status2.getCode():OrderStatusEnum.status1.getCode());
// 订单入库前处理 // 订单入库前处理
for (OrderChildModel childOrder : order.getOrderChildList()) { for (OrderChildModel childOrder : order.getOrderChildList()) {
childOrder.setSurplusRefundCount(childOrder.getProductCount()); childOrder.setSurplusRefundCount(childOrder.getProductCount());
@ -251,6 +225,74 @@ public class BsOrderServiceImpl implements BsOrderService {
return order; return order;
} }
/**
* 订单使用优惠券
* @param order
* @param deduction
* @param userCouponDiscountId
* @return
*/
private BsOrderDeduction useDeduction(OrderModel order,BsOrderDeduction deduction, Long userCouponDiscountId) {
String key = "ORDER_USE_DEDUCTION_" + userCouponDiscountId;
// 获取锁
Boolean lock = redisTemplate.opsForValue().setIfAbsent(key, userCouponDiscountId);
if (Boolean.FALSE.equals(lock)) {
try {
Thread.sleep(100);
} catch (Exception e) {
e.printStackTrace();
}
useDeduction(order, deduction,userCouponDiscountId);
}
try {
} catch (Exception e) {
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "积分交易异常");
} finally {
redisTemplate.delete(key);
}
// 查询用户优惠券
CouponDiscountUserRel discountUserRel = couponDiscountUserRelService.getRel(userCouponDiscountId);
if (discountUserRel == null) {
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "未知优惠券");
}
if (discountUserRel.getStatus() != 1) {
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "优惠券状态不处于待使用");
}
// 查询优惠券
CouponDiscount discount = couponDiscountService.queryDetail(discountUserRel.getDiscountId());
if (discount == null) {
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "未知优惠券");
}
// 计算优惠
deduction.setCouponDiscountId(discount.getId());
deduction.setCouponDiscountType(discount.getType());
deduction.setCouponDiscountPrice(discount.getPrice());
// 卡卷类型 1:满减 2:抵扣 3:折扣
if (1 == discount.getType()) {
deduction.setCouponDiscountActualPrice(discount.getPrice());
} else if (2 == discount.getType()) {
if (discount.getCondition().compareTo(order.getProductTotalPrice()) < 0) {
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "未满足优惠券满减条件");
}
deduction.setCouponDiscountActualPrice(discount.getPrice());
} else if (3 == discount.getType()) {
deduction.setCouponDiscountActualPrice(
order.getTotalPrice()
.multiply(discount.getPrice().divide(new BigDecimal("100")))
.setScale(2, BigDecimal.ROUND_DOWN)
);
} else {
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "未知的优惠券优惠类型");
}
// 优惠券优惠金额 + 积分抵扣实际金额
deduction.setTotalDeductionPrice(deduction.getCouponDiscountActualPrice()
.add(new BigDecimal(deduction.getIntegralDiscountPrice().toString()).divide(new BigDecimal("100"))));
orderDeductionService.editData(deduction);
return deduction;
}
@Override @Override
@Transactional(propagation= Propagation.REQUIRES_NEW, rollbackFor= {RuntimeException.class}, timeout = 10) @Transactional(propagation= Propagation.REQUIRES_NEW, rollbackFor= {RuntimeException.class}, timeout = 10)
public OrderModel cancel(String orderNo, boolean system) { public OrderModel cancel(String orderNo, boolean system) {
@ -271,6 +313,18 @@ public class BsOrderServiceImpl implements BsOrderService {
orderChildService.editData(orderChild); orderChildService.editData(orderChild);
} }
// 退回优惠券
if (order.getDeduction().getUserCouponDiscountId() != null) {
// 查询用户优惠券
CouponDiscountUserRel discountUserRel = couponDiscountUserRelService.getRel(order.getDeduction().getUserCouponDiscountId());
if (discountUserRel == null) {
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "未知优惠券");
}
discountUserRel.setStatus(1);
couponDiscountUserRelService.update(discountUserRel);
}
// 退款用户积分
if (order.getDeduction().getIntegralDiscountPrice() > 0) { if (order.getDeduction().getIntegralDiscountPrice() > 0) {
Map<String,Object> opUser = new HashMap<>(); Map<String,Object> opUser = new HashMap<>();
if (system) { if (system) {
@ -297,8 +351,10 @@ public class BsOrderServiceImpl implements BsOrderService {
source source
); );
} }
// 取消订单业务 // 取消订单业务
orderCancelService.orderBusHandle(order); orderCancelService.orderBusHandle(order);
// 更新缓存 // 更新缓存
cache(order); cache(order);
return order; return order;

Loading…
Cancel
Save