|
@@ -1,6 +1,5 @@
|
|
|
package shop.alien.store.service.impl;
|
|
package shop.alien.store.service.impl;
|
|
|
|
|
|
|
|
-import cn.hutool.core.util.ObjectUtil;
|
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
|
@@ -64,6 +63,7 @@ public class LifeCouponServiceImpl extends ServiceImpl<LifeCouponMapper, LifeCou
|
|
|
private final StoreInfoMapper storeInfoMapper;
|
|
private final StoreInfoMapper storeInfoMapper;
|
|
|
|
|
|
|
|
private final BaseRedisService baseRedisService;
|
|
private final BaseRedisService baseRedisService;
|
|
|
|
|
+ private final LifeDiscountCouponMapper lifeDiscountCouponMapper;
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
public LifeCoupon addOrUpdateCoupon(LifeCoupon lifeCoupon) {
|
|
public LifeCoupon addOrUpdateCoupon(LifeCoupon lifeCoupon) {
|
|
@@ -249,20 +249,33 @@ public class LifeCouponServiceImpl extends ServiceImpl<LifeCouponMapper, LifeCou
|
|
|
public Map<String, String> newCouponVerify(String storeId, String quanCode) {
|
|
public Map<String, String> newCouponVerify(String storeId, String quanCode) {
|
|
|
Map<String, String> resultMap = new HashMap<>();
|
|
Map<String, String> resultMap = new HashMap<>();
|
|
|
String lockKey = "coupon:use:" + quanCode;
|
|
String lockKey = "coupon:use:" + quanCode;
|
|
|
- if(baseRedisService.hasKey(lockKey)) {
|
|
|
|
|
|
|
+ if (baseRedisService.hasKey(lockKey)) {
|
|
|
resultMap.put("code", "false");
|
|
resultMap.put("code", "false");
|
|
|
resultMap.put("message", "请勿重复核销");
|
|
resultMap.put("message", "请勿重复核销");
|
|
|
return resultMap;
|
|
return resultMap;
|
|
|
- };
|
|
|
|
|
|
|
+ }
|
|
|
baseRedisService.setListRight(lockKey, quanCode);
|
|
baseRedisService.setListRight(lockKey, quanCode);
|
|
|
try {
|
|
try {
|
|
|
- OrderCouponMiddle orderCouponMiddle = orderCouponMiddleMapper.selectOne(new LambdaQueryWrapper<OrderCouponMiddle>().eq(OrderCouponMiddle::getCouponCode, quanCode).in(OrderCouponMiddle::getStatus,OrderStatusEnum.WAIT_USE.getStatus(),OrderStatusEnum.REFUND_FAILED.getStatus()));
|
|
|
|
|
|
|
+ OrderCouponMiddle orderCouponMiddle = orderCouponMiddleMapper.selectOne(new LambdaQueryWrapper<OrderCouponMiddle>().eq(OrderCouponMiddle::getCouponCode, quanCode).in(OrderCouponMiddle::getStatus, OrderStatusEnum.WAIT_USE.getStatus(), OrderStatusEnum.REFUND_FAILED.getStatus()));
|
|
|
if (!StringUtils.isEmpty(orderCouponMiddle)) {
|
|
if (!StringUtils.isEmpty(orderCouponMiddle)) {
|
|
|
// 查询总订单
|
|
// 查询总订单
|
|
|
LifeUserOrder lifeUserOrder = lifeUserOrderMapper.selectOne(new LambdaQueryWrapper<LifeUserOrder>().eq(LifeUserOrder::getId, orderCouponMiddle.getOrderId()));
|
|
LifeUserOrder lifeUserOrder = lifeUserOrderMapper.selectOne(new LambdaQueryWrapper<LifeUserOrder>().eq(LifeUserOrder::getId, orderCouponMiddle.getOrderId()));
|
|
|
orderCouponMiddle.setStatus(OrderStatusEnum.USED.getStatus());
|
|
orderCouponMiddle.setStatus(OrderStatusEnum.USED.getStatus());
|
|
|
orderCouponMiddle.setUsedTime(new Date());
|
|
orderCouponMiddle.setUsedTime(new Date());
|
|
|
orderCouponMiddleMapper.updateById(orderCouponMiddle);
|
|
orderCouponMiddleMapper.updateById(orderCouponMiddle);
|
|
|
|
|
+ // 查看是否使用优惠券
|
|
|
|
|
+ Boolean platFormCoupon = false;
|
|
|
|
|
+ String quanId = lifeUserOrder.getQuanId();
|
|
|
|
|
+ if (org.apache.commons.lang3.StringUtils.isNotEmpty(quanId)) {
|
|
|
|
|
+ LifeDiscountCoupon lifeDiscountCoupon = lifeDiscountCouponMapper.selectById(quanId);
|
|
|
|
|
+ if (org.apache.commons.lang3.ObjectUtils.isNotEmpty(lifeDiscountCoupon)) {
|
|
|
|
|
+ if (3 == lifeDiscountCoupon.getType()) {
|
|
|
|
|
+ platFormCoupon = true;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
//通过订单id查询中间表 如果该订单下所有劵都为已核销状态更改订单表状态为已核销
|
|
//通过订单id查询中间表 如果该订单下所有劵都为已核销状态更改订单表状态为已核销
|
|
|
List<OrderCouponMiddle> couponMiddleList = orderCouponMiddleMapper.selectList(new LambdaQueryWrapper<OrderCouponMiddle>()
|
|
List<OrderCouponMiddle> couponMiddleList = orderCouponMiddleMapper.selectList(new LambdaQueryWrapper<OrderCouponMiddle>()
|
|
|
.eq(OrderCouponMiddle::getOrderId, lifeUserOrder.getId()));
|
|
.eq(OrderCouponMiddle::getOrderId, lifeUserOrder.getId()));
|
|
@@ -297,11 +310,16 @@ public class LifeCouponServiceImpl extends ServiceImpl<LifeCouponMapper, LifeCou
|
|
|
StoreInfo storeInfo = storeInfoMapper.selectOne(new LambdaQueryWrapper<StoreInfo>().eq(StoreInfo::getId, lifeUserOrder.getStoreId()));
|
|
StoreInfo storeInfo = storeInfoMapper.selectOne(new LambdaQueryWrapper<StoreInfo>().eq(StoreInfo::getId, lifeUserOrder.getStoreId()));
|
|
|
// 先将抽成比例转换为BigDecimal,再除以100
|
|
// 先将抽成比例转换为BigDecimal,再除以100
|
|
|
BigDecimal commissionRate = new BigDecimal(storeInfo.getCommissionRate())
|
|
BigDecimal commissionRate = new BigDecimal(storeInfo.getCommissionRate())
|
|
|
- .divide(new BigDecimal(100));
|
|
|
|
|
|
|
+ .divide(new BigDecimal("100"));
|
|
|
// 感觉有问题。HALF_UP有问题。 price 正常存储
|
|
// 感觉有问题。HALF_UP有问题。 price 正常存储
|
|
|
- BigDecimal commission = orderCouponMiddle.getPrice().multiply(new BigDecimal(100).multiply(commissionRate)).setScale(2, RoundingMode.HALF_UP);
|
|
|
|
|
- BigDecimal money = orderCouponMiddle.getPrice().multiply(new BigDecimal(100)).subtract(commission);
|
|
|
|
|
-
|
|
|
|
|
|
|
+ BigDecimal commission = orderCouponMiddle.getPrice().multiply(new BigDecimal("100").multiply(commissionRate)).setScale(2, RoundingMode.HALF_UP);
|
|
|
|
|
+ // 如果使用了平台优惠券则需要加上平均优惠券价格
|
|
|
|
|
+ BigDecimal money = BigDecimal.ZERO;
|
|
|
|
|
+ if (platFormCoupon) {
|
|
|
|
|
+ money = orderCouponMiddle.getPrice().add(orderCouponMiddle.getAvgDiscountCouponPrice()).multiply(new BigDecimal("100")).subtract(commission);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ money = orderCouponMiddle.getPrice().multiply(new BigDecimal("100")).subtract(commission);
|
|
|
|
|
+ }
|
|
|
// 插入收入明细表数据
|
|
// 插入收入明细表数据
|
|
|
StoreIncomeDetailsRecord record = new StoreIncomeDetailsRecord();
|
|
StoreIncomeDetailsRecord record = new StoreIncomeDetailsRecord();
|
|
|
record.setStoreId(Integer.parseInt(storeId));
|
|
record.setStoreId(Integer.parseInt(storeId));
|
|
@@ -611,12 +629,12 @@ public class LifeCouponServiceImpl extends ServiceImpl<LifeCouponMapper, LifeCou
|
|
|
LocalTime now = LocalTime.now();
|
|
LocalTime now = LocalTime.now();
|
|
|
int currentHour = now.getHour();
|
|
int currentHour = now.getHour();
|
|
|
// 验证输入的小时是否有效
|
|
// 验证输入的小时是否有效
|
|
|
- if (buyUseStartTime < 0 || buyUseStartTime > 23 || buyUseEndTime < 0 || buyUseEndTime > 23) {
|
|
|
|
|
- throw new IllegalArgumentException("小时必须在0-23之间");
|
|
|
|
|
|
|
+ if (buyUseStartTime < 0 || buyUseStartTime > 24 || buyUseEndTime < 0 || buyUseEndTime > 24) {
|
|
|
|
|
+ return R.fail("小时必须在0-23之间");
|
|
|
}
|
|
}
|
|
|
// 处理跨天的情况,例如22点到次日3点
|
|
// 处理跨天的情况,例如22点到次日3点
|
|
|
if (buyUseStartTime >= buyUseEndTime) {
|
|
if (buyUseStartTime >= buyUseEndTime) {
|
|
|
- if(currentHour<buyUseStartTime && currentHour>buyUseEndTime) {
|
|
|
|
|
|
|
+ if (currentHour < buyUseStartTime && currentHour > buyUseEndTime) {
|
|
|
return R.fail("该劵不在有效期内");
|
|
return R.fail("该劵不在有效期内");
|
|
|
}
|
|
}
|
|
|
|
|
|