|
@@ -2,10 +2,7 @@ package com.kmall.admin.service.impl;
|
|
|
|
|
|
import cn.hutool.core.lang.Snowflake;
|
|
|
import cn.hutool.core.lang.UUID;
|
|
|
-import cn.hutool.core.lang.generator.SnowflakeGenerator;
|
|
|
import cn.hutool.core.util.IdUtil;
|
|
|
-import cn.hutool.core.util.XmlUtil;
|
|
|
-import cn.hutool.json.JSONUtil;
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import com.fasterxml.jackson.core.type.TypeReference;
|
|
@@ -15,8 +12,6 @@ import com.google.gson.Gson;
|
|
|
import com.google.gson.internal.LinkedTreeMap;
|
|
|
import com.kmall.admin.cuspay.biz.ali.AliCusDeclareBiz;
|
|
|
import com.kmall.admin.cuspay.biz.wx.WxCusDeclareBiz;
|
|
|
-import com.kmall.admin.cuspay.manager.snow.SnowflakeIdWorker;
|
|
|
-import com.kmall.admin.cuspay.manager.snow.SnowflakeUtil;
|
|
|
import com.kmall.admin.dao.*;
|
|
|
import com.kmall.admin.dao.alarm.Mall2LowPriceWarningDao;
|
|
|
import com.kmall.admin.dao.mk.Mk2GoodsTopicPriceDao;
|
|
@@ -31,12 +26,12 @@ import com.kmall.admin.dto.*;
|
|
|
import com.kmall.admin.entity.*;
|
|
|
import com.kmall.admin.entity.haikong.*;
|
|
|
import com.kmall.admin.entity.mk.MkActivitiesEntity;
|
|
|
+import com.kmall.admin.entity.mk.MkActivitiesPresentIntegralEntity;
|
|
|
import com.kmall.admin.entity.mk.MkActivitiesScoreEntity;
|
|
|
import com.kmall.admin.entity.mk.store.MkStorePromOrderRealEntity;
|
|
|
import com.kmall.admin.entity.record.NewRetailOrderRestoreStockRecordEntity;
|
|
|
import com.kmall.admin.entity.vip.Mall2MemberConsumptionRecordsEntity;
|
|
|
import com.kmall.admin.entity.vip.Mall2MemberPointsEntity;
|
|
|
-import com.kmall.admin.entity.vip.Mall2PointsRulesEntity;
|
|
|
import com.kmall.admin.fromcomm.dao.SysConfigDao;
|
|
|
import com.kmall.admin.fromcomm.entity.SysUserEntity;
|
|
|
import com.kmall.admin.haikong.constant.*;
|
|
@@ -52,6 +47,7 @@ import com.kmall.admin.haikong.config.HaiKongProperties;
|
|
|
import com.kmall.admin.haikong.utils.Response;
|
|
|
import com.kmall.admin.service.*;
|
|
|
import com.kmall.admin.service.haikong.*;
|
|
|
+import com.kmall.admin.service.mk.MkActivitiesPresentIntegralService;
|
|
|
import com.kmall.admin.service.mk.MkActivitiesScoreService;
|
|
|
import com.kmall.admin.service.mk.MkActivitiesService;
|
|
|
import com.kmall.admin.service.mk.store.MkStoreCampMinusService;
|
|
@@ -240,6 +236,8 @@ public class OrderServiceImpl implements OrderService {
|
|
|
@Autowired
|
|
|
private MkActivitiesService mkActivitiesService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private MkActivitiesPresentIntegralService mkActivitiesPresentIntegralService;
|
|
|
/**
|
|
|
* 满赠
|
|
|
*/
|
|
@@ -594,6 +592,8 @@ public class OrderServiceImpl implements OrderService {
|
|
|
new BigDecimal(orderEntity.getFreightPrice()).setScale(2, BigDecimal.ROUND_HALF_UP).toString());
|
|
|
cashInfo.setDeductionScore(memberConsumptionRecordsEntity.getDeductionScore());
|
|
|
cashInfo.setScoreDeductionPrice(memberConsumptionRecordsEntity.getScoreDeductionPrice().toString());
|
|
|
+ // 其他优惠金额=优惠合计-积分抵扣金额
|
|
|
+ cashInfo.setOtherDiscountedPrice(discountedPrice.subtract(memberConsumptionRecordsEntity.getScoreDeductionPrice()));
|
|
|
if ("alipay".equals(orderEntity.getPayFlag())) {
|
|
|
cashInfo.setPaymentMode("支付宝支付");
|
|
|
} else {
|
|
@@ -2525,6 +2525,8 @@ public class OrderServiceImpl implements OrderService {
|
|
|
order.setMerchOrderSn(merchOrderSn);
|
|
|
order.setCoupon_name(couponSn); // 借用这个字段来记录是否使用优惠券
|
|
|
order.setIdCard(userEntity.getIdNo());
|
|
|
+ order.setMemberCode((String)userInfo.get("consigneePhone"));
|
|
|
+ LOGGER.debug("插入订单信息数据:{}",JacksonUtil.toJson(order));
|
|
|
//插入订单信息和订单商品
|
|
|
orderDao.saveOrderVo(order);
|
|
|
|
|
@@ -2629,21 +2631,41 @@ public class OrderServiceImpl implements OrderService {
|
|
|
|
|
|
// 查询当前时间积分规则以及明细,根据积分生成规则进行增加会员积分
|
|
|
Integer userEntityId = userEntity.getId();
|
|
|
- // 总的积分:基础积分
|
|
|
+ // 总的积分:基础积分 AtomicReference 用来保证此integer的操作线程安全
|
|
|
AtomicReference<Integer> memberScore = new AtomicReference<>(0);
|
|
|
+ // 订单总赠送积分
|
|
|
+ AtomicReference<Integer> activityGiftScore = new AtomicReference<>(0);
|
|
|
// 无会员码,不参与积分赠送
|
|
|
Map<String, OrderGiftScoreRulesVo> giftGoodsScoreDetailMap = new HashMap<>();
|
|
|
+ // memberCode为不为空 判断 下单时有没有传入会员码
|
|
|
if (!org.springframework.util.StringUtils.isEmpty(memberCode)) {
|
|
|
- List<PointsRulesAndDetailVO> pointsRulesAndDetailVOList = mall2PointsRulesService.queryListByTime(new Date());
|
|
|
+ /**
|
|
|
+ * 修复A门店、B门店的积分规则进行赠送,而是都使用了同一个门店或商品赠送规则
|
|
|
+ * 修改为各用各的
|
|
|
+ * 根据门店id 和时间查询积分赠送规则
|
|
|
+ */
|
|
|
+ List<PointsRulesAndDetailVO> pointsRulesAndDetailVOList= mall2PointsRulesService.queryListByTime(new Date(), store.getId().toString());
|
|
|
+
|
|
|
// 商品map,key===>sku value===>金额
|
|
|
Map<String, BigDecimal> goodsMap = goodsEntities.stream().collect(Collectors.toMap(GoodsEntity::getSku, GoodsEntity::getActualPaymentAmount, (k1, k2) -> k2));
|
|
|
// 商品数据map,key===>sku value===>商品实体
|
|
|
Map<String, GoodsEntity> goodsDataMap = goodsEntities.stream().collect(Collectors.toMap(GoodsEntity::getSku, goodsEntity -> goodsEntity, (k1, k2) -> k2));
|
|
|
+ // 根据门店、时间和活动类型 查询参加积分赠送活动的sku,转换为map
|
|
|
+ // ,sku为key,对象为值,判断sku是否在此之中,在则计算赠送积分算完
|
|
|
+ List<MkActivitiesPresentIntegralEntity> mkActivitiesEntityList = mkActivitiesPresentIntegralService.querySkuByNow(store.getId().toString(), DateUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss"), Constants.ActivityTopicEnum.ZSJF.getTopicCode());
|
|
|
+ Map<String, MkActivitiesPresentIntegralEntity> mkActivitiesEntityMap = new HashMap<>();
|
|
|
+ if(!CollectionUtils.isEmpty(mkActivitiesEntityList) && mkActivitiesEntityList.size() > 0){
|
|
|
+ // 不为空 则处理
|
|
|
+ mkActivitiesEntityMap = mkActivitiesEntityList.stream()
|
|
|
+ .collect(Collectors.toMap(MkActivitiesPresentIntegralEntity::getSku
|
|
|
+ , mkActivitiesPresentIntegralEntity -> mkActivitiesPresentIntegralEntity, (k1, k2) -> k2));
|
|
|
+ }
|
|
|
+
|
|
|
// 订单全部的sku
|
|
|
Set<String> goodsSkuList = goodsMap.keySet();
|
|
|
// 订单全部商品的分类列表,只有二级分类才能设置生成规则
|
|
|
Set<Integer> categorySet = goodsEntities.stream().map(GoodsEntity::getCategoryId).collect(Collectors.toSet());
|
|
|
- pointsRulesAndDetailVOList.forEach(pointsRulesAndDetailVO -> {
|
|
|
+ for(PointsRulesAndDetailVO pointsRulesAndDetailVO : pointsRulesAndDetailVOList){
|
|
|
Integer pointsType = pointsRulesAndDetailVO.getPointsType();
|
|
|
// 可以是sku、门店id、分类id
|
|
|
String pointsDetailNameId = pointsRulesAndDetailVO.getPointsDetailNameId();
|
|
@@ -2657,9 +2679,10 @@ public class OrderServiceImpl implements OrderService {
|
|
|
BigDecimal money = goodsMap.get(pointsDetailNameId);
|
|
|
OrderGiftScoreRulesVo orderGiftScoreRulesVo = new OrderGiftScoreRulesVo();
|
|
|
orderGiftScoreRulesVo.setGenerateType(Constants.MemberScoreRulesEnum.TWO.getCode());
|
|
|
+ BigDecimal bigDecimal = new BigDecimal(0);
|
|
|
if (ratio.compareTo(BigDecimal.ZERO) > 0) {
|
|
|
// 算出所积的分
|
|
|
- BigDecimal bigDecimal = money.multiply(ratio).setScale(0, BigDecimal.ROUND_FLOOR);
|
|
|
+ bigDecimal = money.multiply(ratio).setScale(0, BigDecimal.ROUND_FLOOR);
|
|
|
int giftScore = bigDecimal.add(new BigDecimal(memberScore.get())).intValue();
|
|
|
memberScore.set(giftScore);
|
|
|
orderGiftScoreRulesVo.setGiftScore(bigDecimal.intValue());
|
|
@@ -2670,6 +2693,9 @@ public class OrderServiceImpl implements OrderService {
|
|
|
orderGiftScoreRulesVo.setGiftScore(0);
|
|
|
orderGiftScoreRulesVo.setGenerateRatio(BigDecimal.ZERO);
|
|
|
}
|
|
|
+ // 在这里计算赠送积分,并放入
|
|
|
+ // 判断此sku是否参加活动 并计算活动积分
|
|
|
+ getGiftScore(activityGiftScore, bigDecimal, mkActivitiesEntityMap, pointsDetailNameId, orderGiftScoreRulesVo);
|
|
|
giftGoodsScoreDetailMap.put(pointsDetailNameId, orderGiftScoreRulesVo);
|
|
|
goodsDataMap.remove(pointsDetailNameId);
|
|
|
}
|
|
@@ -2678,7 +2704,7 @@ public class OrderServiceImpl implements OrderService {
|
|
|
if (pointsType.equals(Constants.MemberScoreRulesEnum.ONE.getCode())) {
|
|
|
Collection<GoodsEntity> values = goodsDataMap.values();
|
|
|
Collection<GoodsEntity> entityCollection = DeepCopyUtils.depCopyHashSet(new HashSet<>(values));
|
|
|
- entityCollection.forEach(goodsEntity -> {
|
|
|
+ for(GoodsEntity goodsEntity : entityCollection){
|
|
|
// 商品类别
|
|
|
Integer categoryId = goodsEntity.getCategoryId();
|
|
|
String sku = goodsEntity.getSku();
|
|
@@ -2688,9 +2714,10 @@ public class OrderServiceImpl implements OrderService {
|
|
|
if (categoryId.equals(Integer.parseInt(pointsDetailNameId))) {
|
|
|
// 订单中该sku的总金额
|
|
|
BigDecimal money = goodsMap.get(sku);
|
|
|
+ BigDecimal bigDecimal = new BigDecimal(0);
|
|
|
if (ratio.compareTo(BigDecimal.ZERO) > 0) {
|
|
|
// 算出所积的分
|
|
|
- BigDecimal bigDecimal = money.multiply(ratio).setScale(0, BigDecimal.ROUND_FLOOR);
|
|
|
+ bigDecimal = money.multiply(ratio).setScale(0, BigDecimal.ROUND_FLOOR);
|
|
|
int giftScore = bigDecimal.add(new BigDecimal(memberScore.get())).intValue();
|
|
|
memberScore.set(giftScore);
|
|
|
orderGiftScoreRulesVo.setGiftScore(bigDecimal.intValue());
|
|
@@ -2701,26 +2728,30 @@ public class OrderServiceImpl implements OrderService {
|
|
|
orderGiftScoreRulesVo.setGiftScore(0);
|
|
|
orderGiftScoreRulesVo.setGenerateRatio(BigDecimal.ZERO);
|
|
|
}
|
|
|
+ // 判断此sku是否参加活动 并计算活动积分
|
|
|
+ getGiftScore(activityGiftScore, bigDecimal, mkActivitiesEntityMap, sku, orderGiftScoreRulesVo);
|
|
|
giftGoodsScoreDetailMap.put(sku, orderGiftScoreRulesVo);
|
|
|
goodsDataMap.remove(sku);
|
|
|
}
|
|
|
}
|
|
|
- });
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
if (pointsType.equals(Constants.MemberScoreRulesEnum.ZERO.getCode())) {
|
|
|
// 门店
|
|
|
Collection<GoodsEntity> goodsEntityCollection = goodsDataMap.values();
|
|
|
- goodsEntityCollection.forEach(goodsEntity -> {
|
|
|
+ for(GoodsEntity goodsEntity : goodsEntityCollection){
|
|
|
Integer storeId1 = goodsEntity.getStoreId();
|
|
|
String sku = goodsEntity.getSku();
|
|
|
OrderGiftScoreRulesVo orderGiftScoreRulesVo = new OrderGiftScoreRulesVo();
|
|
|
orderGiftScoreRulesVo.setGenerateType(Constants.MemberScoreRulesEnum.ZERO.getCode());
|
|
|
+ BigDecimal bigDecimal = new BigDecimal(0);
|
|
|
if (storeId.equals(storeId1)) {
|
|
|
// 订单中该sku的总金额
|
|
|
BigDecimal money = goodsMap.get(sku);
|
|
|
if (ratio.compareTo(BigDecimal.ZERO) != 0) {
|
|
|
// 算出所积的分
|
|
|
- BigDecimal bigDecimal = money.multiply(ratio).setScale(0, BigDecimal.ROUND_FLOOR);
|
|
|
+ bigDecimal = money.multiply(ratio).setScale(0, BigDecimal.ROUND_FLOOR);
|
|
|
int giftScore = bigDecimal.add(new BigDecimal(memberScore.get())).intValue();
|
|
|
memberScore.set(giftScore);
|
|
|
orderGiftScoreRulesVo.setGiftScore(bigDecimal.intValue());
|
|
@@ -2732,10 +2763,15 @@ public class OrderServiceImpl implements OrderService {
|
|
|
orderGiftScoreRulesVo.setGenerateRatio(BigDecimal.ZERO);
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ // 判断此sku是否参加活动 并计算活动积分
|
|
|
+ getGiftScore(activityGiftScore, bigDecimal, mkActivitiesEntityMap, sku, orderGiftScoreRulesVo);
|
|
|
giftGoodsScoreDetailMap.put(sku, orderGiftScoreRulesVo);
|
|
|
- });
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
- });
|
|
|
+ }
|
|
|
+
|
|
|
goodsSkuList.forEach(s -> {
|
|
|
if (!giftGoodsScoreDetailMap.containsKey(s)) {
|
|
|
OrderGiftScoreRulesVo orderGiftScoreRulesVo = new OrderGiftScoreRulesVo();
|
|
@@ -2789,6 +2825,7 @@ public class OrderServiceImpl implements OrderService {
|
|
|
consumptionRecords.setMemberCode(memberCode);
|
|
|
consumptionRecords.setMemberPhone(memberPhone);
|
|
|
consumptionRecords.setOrderGiftScore(memberScore.get());
|
|
|
+ consumptionRecords.setActivityGiftScore(activityGiftScore.get());
|
|
|
consumptionRecords.setDeductionScore(deductionScore);
|
|
|
consumptionRecords.setCreaterSn(userId + "");
|
|
|
consumptionRecords.setCreateTime(new Date());
|
|
@@ -2799,11 +2836,11 @@ public class OrderServiceImpl implements OrderService {
|
|
|
syncMemberConsumeRecord(memberPhone, order, deductionScore);
|
|
|
if (deductionScore > 0) {
|
|
|
// 积分变动接口,下单扣减
|
|
|
- syncMemberScoreChangeRecord(openId, order, deductionScore, "下单扣减", queryGoodsVOList, giftGoodsScoreDetailMap, HaiKongMemberScoreChangeEventEnum.SUBTRACT.getEvent());
|
|
|
+ syncMemberScoreChangeRecord(openId, order, deductionScore,null, "下单扣减", queryGoodsVOList, giftGoodsScoreDetailMap, HaiKongMemberScoreChangeEventEnum.SUBTRACT.getEvent());
|
|
|
}
|
|
|
Integer score = memberScore.get();
|
|
|
if (score > 0) {
|
|
|
- syncMemberScoreChangeRecord(openId, order, score, "下单赠送", queryGoodsVOList, giftGoodsScoreDetailMap, HaiKongMemberScoreChangeEventEnum.ADD.getEvent());
|
|
|
+ syncMemberScoreChangeRecord(openId, order, score,activityGiftScore, "下单赠送", queryGoodsVOList, giftGoodsScoreDetailMap, HaiKongMemberScoreChangeEventEnum.ADD.getEvent());
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -2848,6 +2885,37 @@ public class OrderServiceImpl implements OrderService {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
+ * 计算sku实际赠送积分 和 订单总赠送积分
|
|
|
+ * @param activityGiftScore
|
|
|
+ * @param baseScore
|
|
|
+ * @param mkActivitiesEntityMap
|
|
|
+ * @param sku
|
|
|
+ */
|
|
|
+ private void getGiftScore(AtomicReference<Integer> activityGiftScore, BigDecimal baseScore
|
|
|
+ , Map<String, MkActivitiesPresentIntegralEntity> mkActivitiesEntityMap, String sku, OrderGiftScoreRulesVo orderGiftScoreRulesVo) {
|
|
|
+ if(mkActivitiesEntityMap.containsKey(sku)){
|
|
|
+ // 存在表示它参加赠送积分活动
|
|
|
+ MkActivitiesPresentIntegralEntity mkActivitiesPresentIntegralEntity = mkActivitiesEntityMap.get(sku);
|
|
|
+ // 计算活动积分
|
|
|
+ if(ActivityGiveTypeEnum.FIXED_VALUE.getCode().equals(mkActivitiesPresentIntegralEntity.getActivityGiveType())){
|
|
|
+ // 固定值 那赠送积分就是固定值
|
|
|
+ BigDecimal giftScoreTmp = mkActivitiesPresentIntegralEntity.getActivityGiveNum();
|
|
|
+ // 此sku赠送的积分加上之前赠送的积分 算出来订单赠送总分
|
|
|
+ int giftScore = giftScoreTmp.add(new BigDecimal(activityGiftScore.get())).intValue();
|
|
|
+ activityGiftScore.set(giftScore);
|
|
|
+ orderGiftScoreRulesVo.setActivityGiftScore(giftScoreTmp.intValue());
|
|
|
+ } else if(ActivityGiveTypeEnum.MULTIPLYING_POWER.getCode().equals(mkActivitiesPresentIntegralEntity.getActivityGiveType())){
|
|
|
+ // 计算积分 sku实际积分 * 赠送倍率 = 赠送积分
|
|
|
+ BigDecimal giftScoreTmp = baseScore.multiply(mkActivitiesPresentIntegralEntity.getActivityGiveNum()).setScale(0, BigDecimal.ROUND_FLOOR);
|
|
|
+ // 赠送积分加上 之前的积分 算出订单总赠送积分
|
|
|
+ int giftScore = giftScoreTmp.add(new BigDecimal(activityGiftScore.get())).intValue();
|
|
|
+ activityGiftScore.set(giftScore);
|
|
|
+ orderGiftScoreRulesVo.setActivityGiftScore(giftScoreTmp.intValue());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
* 免税mall创建订单
|
|
|
* @param order 订单信息:包含订单信息,支付信息,跨境信息
|
|
|
* @param orderGoodsVoList 订单详情数据
|
|
@@ -3400,15 +3468,17 @@ public class OrderServiceImpl implements OrderService {
|
|
|
* 同步会员积分变动记录
|
|
|
* @param openId 会员openid
|
|
|
* @param order 订单信息
|
|
|
- * @param changeEvent 变动事件
|
|
|
+ * @param score 变动积分
|
|
|
+ * @param activityScore
|
|
|
* @param changeReason 变动原因
|
|
|
* @param goodsList 商品详情
|
|
|
* @param giftGoodsScoreDetailMap 赠送积分详情
|
|
|
- * @param score 变动积分
|
|
|
+ * @param changeEvent 变动事件
|
|
|
*/
|
|
|
private void syncMemberScoreChangeRecord(String openId,
|
|
|
OrderVo order,
|
|
|
Integer score,
|
|
|
+ AtomicReference<Integer> activityScore,
|
|
|
String changeReason,
|
|
|
List<QueryGoodsVO> goodsList,
|
|
|
Map<String, OrderGiftScoreRulesVo> giftGoodsScoreDetailMap,
|
|
@@ -3422,6 +3492,9 @@ public class OrderServiceImpl implements OrderService {
|
|
|
memberScoreChangeDTO.setOpenId(openId);
|
|
|
memberScoreChangeDTO.setOutBizNo(order.getOrder_sn());
|
|
|
memberScoreChangeDTO.setScore(score);
|
|
|
+ if(!Objects.isNull(activityScore)){
|
|
|
+ memberScoreChangeDTO.setActivityScore(activityScore.get());
|
|
|
+ }
|
|
|
BeanUtils.copyProperties(memberScoreChangeDTO, haiKongMemberScoreChangeRecordEntity);
|
|
|
Date date = new Date();
|
|
|
haiKongMemberScoreChangeRecordEntity.setCreateTime(date);
|
|
@@ -3459,6 +3532,7 @@ public class OrderServiceImpl implements OrderService {
|
|
|
entity.setGenerateRatio(orderGiftScoreRulesVo.getGenerateRatio());
|
|
|
entity.setGenerateRules(orderGiftScoreRulesVo.getGenerateType());
|
|
|
entity.setGiftScore(orderGiftScoreRulesVo.getGiftScore());
|
|
|
+ entity.setActivityGiftScore(orderGiftScoreRulesVo.getActivityGiftScore());
|
|
|
}
|
|
|
entity.setOrderSn(order.getOrder_sn());
|
|
|
entity.setRetailPrice(goodsEntity.getRetailPrice());
|
|
@@ -4069,7 +4143,7 @@ public class OrderServiceImpl implements OrderService {
|
|
|
// 计算综合税率
|
|
|
BigDecimal taxRate = tax.divide(pretaxPrice, 4, RoundingMode.HALF_UP);
|
|
|
// 消费税率
|
|
|
- BigDecimal saleTaxRate = new BigDecimal(taxDetailDto.getSaleTaxRate()).divide(new BigDecimal(100), 2, RoundingMode.HALF_UP);
|
|
|
+ BigDecimal saleTaxRate = new BigDecimal(Objects.isNull(taxDetailDto.getSaleTaxRate()) ? "0" : taxDetailDto.getSaleTaxRate() ).divide(new BigDecimal(100), 2, RoundingMode.HALF_UP);
|
|
|
// 综合税率
|
|
|
BigDecimal vatRate = new BigDecimal(taxDetailDto.getVatRate()).divide(new BigDecimal(100), 2, RoundingMode.HALF_UP);
|
|
|
// 消费税 = (明细商品总价 / (1-消费税税率)) * 消费税税率
|
|
@@ -4469,7 +4543,8 @@ public class OrderServiceImpl implements OrderService {
|
|
|
List<String> promotionSkuList = new ArrayList<>();
|
|
|
// 判断活动类型并排序,再确定购物栏中商品是否满足活动条件
|
|
|
mkActivitiesEntityList.stream().filter(mkActivitiesEntity -> {
|
|
|
- if (!Constants.ActivityTopicEnum.JFDK.getTopicCode().equals(mkActivitiesEntity.getMkaTopic())) {
|
|
|
+ if (!Constants.ActivityTopicEnum.JFDK.getTopicCode().equals(mkActivitiesEntity.getMkaTopic())
|
|
|
+ && !Constants.ActivityTopicEnum.ZSJF.getTopicCode().equals(mkActivitiesEntity.getMkaTopic())) {
|
|
|
return true;
|
|
|
}
|
|
|
if (Objects.isNull(mkActivitiesEntity.getPriority())) {
|
|
@@ -4516,6 +4591,8 @@ public class OrderServiceImpl implements OrderService {
|
|
|
goodsDetailsDto.setActivity(Constants.ActivityTopicEnum.LSCX.getTopicName());
|
|
|
// 优惠价格 应该用优惠后的特价价格 乘以 数量
|
|
|
goodsDetailsDto.setDiscountedPrice((retailPrice.subtract(activityPrice)).multiply(new BigDecimal(goodsDetailsDto.getSellVolume())));
|
|
|
+ // 不涉及到积分时 其他优惠就是优惠金额
|
|
|
+ goodsDetailsDto.setOtherDiscountedPrice(goodsDetailsDto.getDiscountedPrice());
|
|
|
goodsDetailsDto.setDeductionPrice(null);
|
|
|
activityFlag.set(false);
|
|
|
promotionActivityFlag.set(true);
|
|
@@ -4558,6 +4635,8 @@ public class OrderServiceImpl implements OrderService {
|
|
|
goodsDetailsDto.setActivity(Constants.ActivityTopicEnum.MZ.getTopicName());
|
|
|
goodsDetailsDto.setGiftNumber(mkActivitiesFullGiftEntity.getGiftNumber());
|
|
|
goodsDetailsDto.setDiscountedPrice(goodsEntity.getRetailPrice());
|
|
|
+ // 不涉及到积分时 其他优惠就是优惠金额
|
|
|
+ goodsDetailsDto.setOtherDiscountedPrice(goodsDetailsDto.getDiscountedPrice());
|
|
|
goodsDetailsDto.setDeductionPrice(null);
|
|
|
// 添加进商品详情列表
|
|
|
goodsDetailsDtos.add(goodsDetailsDto);
|
|
@@ -4591,6 +4670,8 @@ public class OrderServiceImpl implements OrderService {
|
|
|
goodsDetailsDto.setActivity(Constants.ActivityTopicEnum.MZ.getTopicName());
|
|
|
goodsDetailsDto.setGiftNumber(mkActivitiesFullGiftEntity.getGiftNumber());
|
|
|
goodsDetailsDto.setDiscountedPrice(goodsEntity.getRetailPrice());
|
|
|
+ // 不涉及到积分时 其他优惠就是优惠金额
|
|
|
+ goodsDetailsDto.setOtherDiscountedPrice(goodsDetailsDto.getDiscountedPrice());
|
|
|
goodsDetailsDto.setDeductionPrice(null);
|
|
|
// 添加进商品详情列表
|
|
|
goodsDetailsDtos.add(goodsDetailsDto);
|
|
@@ -4648,6 +4729,8 @@ public class OrderServiceImpl implements OrderService {
|
|
|
goodsDetailsDto.setGoodstaxes(String.valueOf(tax.multiply(new BigDecimal(goodsDetailsDto.getSellVolume()))));
|
|
|
goodsDetailsDto.setActivity(Constants.ActivityTopicEnum.YHQ.getTopicName());
|
|
|
goodsDetailsDto.setDiscountedPrice(retailPrice.subtract(discountAfterPrice));
|
|
|
+ // 不涉及到积分时 其他优惠就是优惠金额
|
|
|
+ goodsDetailsDto.setOtherDiscountedPrice(goodsDetailsDto.getDiscountedPrice());
|
|
|
goodsDetailsDto.setDeductionPrice(null);
|
|
|
goodsDetailsDtos.add(goodsDetailsDto);
|
|
|
activityFlag.set(false);
|
|
@@ -4677,6 +4760,8 @@ public class OrderServiceImpl implements OrderService {
|
|
|
goodsDetailsDto.setGoodstaxes(String.valueOf(tax.multiply(new BigDecimal(goodsDetailsDto.getSellVolume()))));
|
|
|
goodsDetailsDto.setActivity(Constants.ActivityTopicEnum.YHQ.getTopicName());
|
|
|
goodsDetailsDto.setDiscountedPrice(retailPrice.subtract(discountAfterPrice));
|
|
|
+ // 不涉及到积分时 其他优惠就是优惠金额
|
|
|
+ goodsDetailsDto.setOtherDiscountedPrice(goodsDetailsDto.getDiscountedPrice());
|
|
|
goodsDetailsDto.setDeductionPrice(null);
|
|
|
goodsDetailsDtos.add(goodsDetailsDto);
|
|
|
activityFlag.set(false);
|
|
@@ -4707,6 +4792,8 @@ public class OrderServiceImpl implements OrderService {
|
|
|
goodsDetailsDto.setGoodstaxes(String.valueOf(tax.multiply(new BigDecimal(goodsDetailsDto.getSellVolume()))));
|
|
|
goodsDetailsDto.setActivity(Constants.ActivityTopicEnum.YHQ.getTopicName());
|
|
|
goodsDetailsDto.setDiscountedPrice(retailPrice.subtract(discountAfterPrice));
|
|
|
+ // 不涉及到积分时 其他优惠就是优惠金额
|
|
|
+ goodsDetailsDto.setOtherDiscountedPrice(goodsDetailsDto.getDiscountedPrice());
|
|
|
goodsDetailsDto.setDeductionPrice(null);
|
|
|
goodsDetailsDtos.add(goodsDetailsDto);
|
|
|
activityFlag.set(false);
|
|
@@ -4734,7 +4821,8 @@ public class OrderServiceImpl implements OrderService {
|
|
|
queryGoodsVo.setTotalPrice(good.getActualPaymentAmount().multiply(BigDecimal.valueOf(good.getSellVolume())));
|
|
|
orderTotalPrice = orderTotalPrice.add(good.getRetailPrice().multiply(BigDecimal.valueOf(good.getSellVolume())));// 订单总金额 改为用零售价*数量
|
|
|
// 订单总价 总价减去 优惠活动的优惠价格 后续积分优惠 也从总金额中减去(打补丁操作
|
|
|
- // 这块设计有问题 :后续积分优惠金额 由总金额减去积分抵扣金额 但没有处理其他活动的优惠金额 补丁内容:如果这里有参加其他活动的商品 优惠金额要在这里减去)
|
|
|
+ // 这块设计有问题 :后续积分优惠金额 由总金额减去积分抵扣金额 但没有处理其他活动的优惠金额
|
|
|
+ // 补丁内容:如果这里有参加其他活动的商品 优惠金额要在这里减去)
|
|
|
orderTotalPrice = orderTotalPrice.subtract(good.getDiscountedPrice());
|
|
|
goodsVos.add(queryGoodsVo);
|
|
|
}
|
|
@@ -5027,6 +5115,9 @@ public class OrderServiceImpl implements OrderService {
|
|
|
}
|
|
|
// 设置总优惠金额
|
|
|
goodsDetailsDto.setDiscountedPrice(discountedPrice);
|
|
|
+ // 设置其他优惠金额
|
|
|
+ BigDecimal otherPrice = discountedPrice.subtract(goodsDetailsDto.getDeductionPrice());
|
|
|
+ goodsDetailsDto.setOtherDiscountedPrice(otherPrice);
|
|
|
LOGGER.info("--------------------------------------------------------");
|
|
|
LOGGER.info("【计算优惠价】sku:【{}】,条码:【{}】积分抵扣{}元,抵扣积分{}分", sku, prodBarcode, goodsDetailsDto.getDiscountedPrice(), shareScore.intValue());
|
|
|
LOGGER.info("--------------------------------------------------------");
|