|
|
@@ -54,6 +54,7 @@ import com.cyksj.model.dto.*;
|
|
|
import com.cyksj.model.entity.*;
|
|
|
import com.cyksj.model.manage.dto.ChannelBaiDuDiscountDto;
|
|
|
import com.cyksj.model.manage.dto.GiftCardDto;
|
|
|
+import com.cyksj.model.manage.request.ReqGoodsSkuSpec;
|
|
|
import com.cyksj.model.manage.views.GroupsRelationView;
|
|
|
import com.cyksj.model.manage.views.OrderDonView;
|
|
|
import com.cyksj.model.request.*;
|
|
|
@@ -131,6 +132,8 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
|
|
|
private final GoodsDonMapper goodsDonMapper;
|
|
|
|
|
|
+ private final GoodsDonSpecMapper goodsDonSpecMapper;
|
|
|
+
|
|
|
private final GroupsRelationMapper groupsRelationMapper;
|
|
|
|
|
|
private final BeanSearcher beanSearcher;
|
|
|
@@ -263,6 +266,8 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
|
|
|
private final InformationClickUserRecordMapper informationClickUserRecordMapper;
|
|
|
|
|
|
+ private final UserCertRecordMapper userCertRecordMapper;
|
|
|
+
|
|
|
private final List<String> noChekGoodsTemp = List.of("Apple One", "Youtube", "Spotify");
|
|
|
|
|
|
@Transactional(rollbackFor = Throwable.class)
|
|
|
@@ -401,6 +406,23 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
payRequest.setDonMoney(sku.getPrice());
|
|
|
}
|
|
|
|
|
|
+ //租赁商品
|
|
|
+ if (goodsDon.getType() == 4) {
|
|
|
+ //是否已实名认证过
|
|
|
+ List<Long> userIdList = userBindRelationService.getRelationUserIdList(userId, user);
|
|
|
+ Integer count = userCertRecordMapper.selectCount(Wrappers.lambdaQuery(UserCertRecord.class).in(UserCertRecord::getUserId, userIdList));
|
|
|
+ if (count == 0) throw BusinessRuntimeException.getInstance("请您先完成实名认证..");
|
|
|
+
|
|
|
+ //租赁商品押金
|
|
|
+ BigDecimal rentGoodsDonDeposit = getRentGoodsDonDeposit(goodsId, sku.getSpecIds());
|
|
|
+ if (rentGoodsDonDeposit == null) throw BusinessRuntimeException.getInstance("应付押金异常..");
|
|
|
+ BigDecimal sPay = rentGoodsDonDeposit.add(sku.getPrice());
|
|
|
+ if (payRequest.getDonMoney().compareTo(sPay) < 0) {
|
|
|
+ payRequest.setDonMoney(sPay);
|
|
|
+ }
|
|
|
+ orderDon.setDeposit(rentGoodsDonDeposit);
|
|
|
+ }
|
|
|
+
|
|
|
orderDon.setMoney(payRequest.getDonMoney());
|
|
|
orderDon.setRealMoney(payRequest.getDonMoney());
|
|
|
orderDon.setOriMoney(sku.getPrice());
|
|
|
@@ -609,7 +631,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
if (payRequest.getInfoId() != null){
|
|
|
InformationClickUserRecord informationClickUserRecord = new InformationClickUserRecord();
|
|
|
informationClickUserRecord.setInfoId(payRequest.getInfoId());
|
|
|
- informationClickUserRecord.setInfoId(orderDon.getId());
|
|
|
+ informationClickUserRecord.setOrderId(orderDon.getId());
|
|
|
informationClickUserRecordMapper.insert(informationClickUserRecord);
|
|
|
}
|
|
|
return orderDon;
|
|
|
@@ -2786,7 +2808,28 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
Integer success = userMapper.deductBalance(user.getId(), subBalance, userBalance);
|
|
|
if (success != 1) throw BusinessRuntimeException.getInstance("您的余额不足!");
|
|
|
orderDon.setBalance(subBalance);
|
|
|
- userBenefitsService.recordBalanceBySource(user.getId(), BigDecimal.valueOf(-subBalance.longValue()), UserBalanceSourceRecord.Source.payment);
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取租赁商品的应付押金
|
|
|
+ */
|
|
|
+ private BigDecimal getRentGoodsDonDeposit(Long goodsId, String specIdsStr) throws Exception {
|
|
|
+ GoodsDonSpec rentGoodsDonSpec = goodsDonSpecMapper.selectOne(Wrappers.lambdaQuery(GoodsDonSpec.class)
|
|
|
+ .eq(GoodsDonSpec::getGoodsId, goodsId)
|
|
|
+ .last("limit 1"));
|
|
|
+ List<Integer> specIds = Jsons.parseList(specIdsStr, Integer.class);
|
|
|
+ String specsJson = rentGoodsDonSpec.getSpecsJson();
|
|
|
+ List<ReqGoodsSkuSpec> reqGoodsSkuSpec = Jsons.parseList(specsJson, ReqGoodsSkuSpec.class);
|
|
|
+ for (ReqGoodsSkuSpec spec : reqGoodsSkuSpec) {
|
|
|
+ if (spec.getKey().contains("版本")) {
|
|
|
+ for (ReqGoodsSkuSpec.Node value : spec.getValues()) {
|
|
|
+ if (specIds.contains(value.getId())) {
|
|
|
+ return value.getDeposit();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
}
|