|
@@ -8,10 +8,8 @@ import com.google.common.collect.ImmutableBiMap;
|
|
|
import com.google.common.collect.Maps;
|
|
|
import com.google.gson.Gson;
|
|
|
import com.google.gson.internal.LinkedTreeMap;
|
|
|
-import com.kmall.admin.biz.CustomsClearanceTimeliness;
|
|
|
import com.kmall.admin.dao.*;
|
|
|
import com.kmall.admin.dao.alarm.Mall2LowPriceWarningDao;
|
|
|
-import com.kmall.admin.dao.haikong.HaiKongMemberScoreChangeRecordDao;
|
|
|
import com.kmall.admin.dao.mk.Mk2GoodsTopicPriceDao;
|
|
|
import com.kmall.admin.dao.mk.Mk2MemberBirthdayDao;
|
|
|
import com.kmall.admin.dao.mk.store.MkStorePromOrderRealDao;
|
|
@@ -37,6 +35,7 @@ import com.kmall.admin.haikong.constant.*;
|
|
|
import com.kmall.admin.haikong.dto.*;
|
|
|
import com.kmall.admin.haikong.utils.ListUtils;
|
|
|
import com.kmall.admin.haikong.vo.CalculateOrderDiscountPriceResponseVO;
|
|
|
+import com.kmall.admin.haikong.vo.PointsRulesAndDetailVO;
|
|
|
import com.kmall.admin.haikong.vo.QueryGoodsVO;
|
|
|
import com.kmall.admin.haikong.client.HaiKongMemberTemplate;
|
|
|
import com.kmall.admin.haikong.client.HaiKongWarehouseTemplate;
|
|
@@ -46,7 +45,6 @@ import com.kmall.admin.haikong.utils.Response;
|
|
|
import com.kmall.admin.service.*;
|
|
|
import com.kmall.admin.service.haikong.HaiKongMemberOrderSyncResendService;
|
|
|
import com.kmall.admin.service.haikong.HaiKongMemberScoreChangeRecordService;
|
|
|
-import com.kmall.admin.service.kmall2eccs.KtoEccsService;
|
|
|
import com.kmall.admin.service.mk.MkActivitiesService;
|
|
|
import com.kmall.admin.service.mk.store.MkStoreCampMinusService;
|
|
|
import com.kmall.admin.service.mk.store.MkStoreTicketDiscountService;
|
|
@@ -97,7 +95,6 @@ import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
import org.springframework.util.CollectionUtils;
|
|
|
|
|
|
-import java.awt.image.LookupOp;
|
|
|
import java.io.IOException;
|
|
|
import java.math.BigDecimal;
|
|
|
import java.math.RoundingMode;
|
|
@@ -2748,36 +2745,87 @@ public class OrderServiceImpl implements OrderService {
|
|
|
saleRecordDao.save(saleRecordEntity);
|
|
|
}
|
|
|
|
|
|
- // TODO 查询当前时间积分规则,根据积分生成规则进行增加会员积分
|
|
|
+ // 查询当前时间积分规则以及明细,根据积分生成规则进行增加会员积分
|
|
|
Integer userEntityId = userEntity.getId();
|
|
|
- Integer memberScore = order.getActual_price().intValue();
|
|
|
- //List<Mall2PointsRulesEntity> mall2PointsRulesEntities = mall2PointsRulesService.queryListByTime(new Date()).stream().sorted().collect(Collectors.toList());
|
|
|
- /*mall2PointsRulesEntities.forEach(mall2PointsRulesEntity -> {
|
|
|
- // 查询明细
|
|
|
+ // 总的积分:基础积分
|
|
|
+ AtomicReference<Integer> memberScore = new AtomicReference<>(0);
|
|
|
+ List<PointsRulesAndDetailVO> pointsRulesAndDetailVOList = mall2PointsRulesService.queryListByTime(new Date()).stream().sorted().collect(Collectors.toList());
|
|
|
+ // 商品map,key===>sku value===>金额
|
|
|
+ Map<String, BigDecimal> goodsMap = goodsEntities.stream().collect(Collectors.toMap(GoodsEntity::getSku, GoodsEntity::getActualPaymentAmount, (k1, k2) -> k2));
|
|
|
+ // 订单全部的sku
|
|
|
+ Set<String> goodsSkuList = goodsMap.keySet();
|
|
|
+ // 保存不在按商品计算积分的sku
|
|
|
+ List<String> nonGoodsSkuList = new ArrayList<>();
|
|
|
+ // 保存不在按分类计算积分的sku,剩下的就按门店计算,如果门店积分规则没有设置。。。。
|
|
|
+ List<String> nonCategorySkuList = new ArrayList<>();
|
|
|
+ pointsRulesAndDetailVOList.forEach(pointsRulesAndDetailVO -> {
|
|
|
+ Mall2PointsRulesEntity mall2PointsRulesEntity = pointsRulesAndDetailVO.getMall2PointsRulesEntity();
|
|
|
+ List<Mall2RulesDto> mall2PointsRulesDetailList = pointsRulesAndDetailVO.getMall2PointsRulesDetailList();
|
|
|
+ List<String> skuList = mall2PointsRulesDetailList.stream().map(Mall2RulesDto::getPointsRulesName).collect(Collectors.toList());
|
|
|
Integer pointsType = mall2PointsRulesEntity.getPointsType();
|
|
|
+ // 积分比例
|
|
|
+ BigDecimal ratio = mall2PointsRulesEntity.getRatio();
|
|
|
if (pointsType.equals(Constants.MemberScoreRulesEnum.TWO.getCode())) {
|
|
|
// 商品,优先级最高,查询
|
|
|
+ goodsSkuList.forEach(sku -> {
|
|
|
+ if (skuList.contains(sku)) {
|
|
|
+ // 商品积分生成规则包含这个sku
|
|
|
+ // 订单中该sku的总金额
|
|
|
+ BigDecimal money = goodsMap.get(sku);
|
|
|
+ if (ratio.compareTo(BigDecimal.ZERO) != 0) {
|
|
|
+ // 算出所积的分
|
|
|
+ memberScore.set(money.multiply(ratio).add(new BigDecimal(memberScore.get())).intValue());
|
|
|
+ } else {
|
|
|
+ // 积分比例设置为0,该商品不记积分。
|
|
|
+ LOGGER.info("商品SKU:【{}】,积分生成规则设置积分比例为:{},故不产生积分!", sku, ratio);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // 不包含sku,则需要判断是否有其他规则
|
|
|
+ nonGoodsSkuList.add(sku);
|
|
|
+ }
|
|
|
+ });
|
|
|
|
|
|
-
|
|
|
- } else if (pointsType.equals(Constants.MemberScoreRulesEnum.ONE.getCode())) {
|
|
|
+ }
|
|
|
+ if (pointsType.equals(Constants.MemberScoreRulesEnum.ONE.getCode())) {
|
|
|
// 商品类别
|
|
|
- } else if (pointsType.equals(Constants.MemberScoreRulesEnum.ZERO.getCode())) {
|
|
|
+ nonGoodsSkuList.forEach(sku -> {
|
|
|
+ if (nonGoodsSkuList.contains(sku)) {
|
|
|
+ // 订单中该sku的总金额
|
|
|
+ BigDecimal money = goodsMap.get(sku);
|
|
|
+ if (ratio.compareTo(BigDecimal.ZERO) != 0) {
|
|
|
+ // 算出所积的分
|
|
|
+ memberScore.set(money.multiply(ratio).add(new BigDecimal(memberScore.get())).intValue());
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ nonCategorySkuList.add(sku);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ if (pointsType.equals(Constants.MemberScoreRulesEnum.ZERO.getCode())) {
|
|
|
// 门店
|
|
|
- } else {
|
|
|
- LOGGER.error("未知的积分生成规则类型:{}", pointsType);
|
|
|
+ nonCategorySkuList.forEach(sku -> {
|
|
|
+ if (nonCategorySkuList.contains(sku)) {
|
|
|
+ // 订单中该sku的总金额
|
|
|
+ BigDecimal money = goodsMap.get(sku);
|
|
|
+ if (ratio.compareTo(BigDecimal.ZERO) != 0) {
|
|
|
+ // 算出所积的分
|
|
|
+ memberScore.set(money.multiply(ratio).multiply(new BigDecimal(memberScore.get())).intValue());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
}
|
|
|
- });*/
|
|
|
+ });
|
|
|
// 增加该会员的积分
|
|
|
Mall2MemberPointsEntity memberPointsEntity = memberPointsDao.queryByUserId(userEntityId);
|
|
|
if (memberPointsEntity == null) {
|
|
|
memberPointsEntity = new Mall2MemberPointsEntity();
|
|
|
memberPointsEntity.setUserId(userEntityId + "");
|
|
|
- memberPointsEntity.setPoints(memberScore);
|
|
|
+ memberPointsEntity.setPoints(memberScore.get());
|
|
|
memberPointsEntity.setCreaterSn(userId + "");
|
|
|
memberPointsEntity.setCreateTime(new Date());
|
|
|
memberPointsDao.save(memberPointsEntity);
|
|
|
} else {
|
|
|
- memberPointsEntity.setPoints(memberScore + memberPointsEntity.getPoints());
|
|
|
+ memberPointsEntity.setPoints(memberScore.get() + memberPointsEntity.getPoints());
|
|
|
memberPointsEntity.setModerSn(userId + "");
|
|
|
memberPointsEntity.setModTime(new Date());
|
|
|
memberPointsDao.update(memberPointsEntity);
|
|
@@ -2802,10 +2850,9 @@ public class OrderServiceImpl implements OrderService {
|
|
|
int deductionScore = org.springframework.util.StringUtils.isEmpty(deductionScoreStr) ? 0 : Integer.parseInt(deductionScoreStr);
|
|
|
String memberPhone = String.valueOf(param.get("memberPhone"));
|
|
|
BigDecimal scoreDeductionPrice = org.springframework.util.StringUtils.isEmpty(scoreDeductionPriceStr) ? BigDecimal.ZERO : new BigDecimal(scoreDeductionPriceStr);
|
|
|
- Integer beforeScore = beforeScoreInteger;
|
|
|
- Integer afterScore = afterScoreStrInteger;
|
|
|
- consumptionRecords.setBeforeScore(beforeScore);
|
|
|
- consumptionRecords.setAfterScore(afterScore);
|
|
|
+ consumptionRecords.setBeforeScore(beforeScoreInteger);
|
|
|
+ consumptionRecords.setAfterScore(afterScoreStrInteger);
|
|
|
+ // TODO 需要新增字段:订单赠送积分
|
|
|
consumptionRecords.setOrderTotalPrice(order.getActual_price());
|
|
|
consumptionRecords.setScoreDeductionPrice(scoreDeductionPrice);
|
|
|
consumptionRecords.setMemberCode(memberCode);
|