|
@@ -2307,6 +2307,7 @@ public class OrderServiceImpl implements OrderService {
|
|
|
goodsEntity.setActualPaymentAmount(goodsDto.getTotalPrice());
|
|
|
goodsEntity.setSellVolume(goodsDto.getSellVolume());
|
|
|
goodsEntity.setActivity(goodsDto.getActivity());
|
|
|
+ goodsEntity.setStoreId(storeId);
|
|
|
goodsEntities.add(goodsEntity);
|
|
|
} else {
|
|
|
// sku不存在
|
|
@@ -2321,7 +2322,7 @@ public class OrderServiceImpl implements OrderService {
|
|
|
|
|
|
String openId = (String) param.get("openId");
|
|
|
String memberCode = (String) param.get("memberCode");
|
|
|
- UserEntity userEntity = userDao.queryByOpenId(openId);
|
|
|
+ UserEntity userEntity = userDao.queryByMobile((String) userInfo.get("customPhone"));
|
|
|
if (userEntity == null) {
|
|
|
// 保存用户信息
|
|
|
userEntity = new UserEntity();
|
|
@@ -2473,7 +2474,6 @@ public class OrderServiceImpl implements OrderService {
|
|
|
saleRecordEntity.setOrderSn(order.getOrder_sn());
|
|
|
saleRecordEntity.setSallerId(userId + "");
|
|
|
saleRecordEntity.setSalesTime(new Date());
|
|
|
-// saleRecordEntity.setDiscountId(topicId + "");
|
|
|
saleRecordEntity.setCreateTime(new Date());
|
|
|
saleRecordDao.save(saleRecordEntity);
|
|
|
}
|
|
@@ -2482,87 +2482,107 @@ public class OrderServiceImpl implements OrderService {
|
|
|
Integer userEntityId = userEntity.getId();
|
|
|
// 总的积分:基础积分
|
|
|
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)) {
|
|
|
+ // 无会员码,不参与积分赠送
|
|
|
+ if (!org.springframework.util.StringUtils.isEmpty(memberCode)) {
|
|
|
+ List<PointsRulesAndDetailVO> pointsRulesAndDetailVOList = mall2PointsRulesService.queryListByTime(new Date());
|
|
|
+ // 商品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
|
|
|
+ Set<String> goodsSkuList = goodsMap.keySet();
|
|
|
+ // 订单全部商品的分类列表,只有二级分类才能设置生成规则
|
|
|
+ Set<Integer> categorySet = goodsEntities.stream().map(GoodsEntity::getCategoryId).collect(Collectors.toSet());
|
|
|
+ pointsRulesAndDetailVOList.forEach(pointsRulesAndDetailVO -> {
|
|
|
+ Integer pointsType = pointsRulesAndDetailVO.getPointsType();
|
|
|
+ // 可以是sku、门店id、分类id
|
|
|
+ String pointsDetailNameId = pointsRulesAndDetailVO.getPointsDetailNameId();
|
|
|
+ // 积分比例
|
|
|
+ BigDecimal ratio = pointsRulesAndDetailVO.getRatio();
|
|
|
+ if (pointsType.equals(Constants.MemberScoreRulesEnum.TWO.getCode())) {
|
|
|
+ // 商品,优先级最高,查询
|
|
|
+ if (goodsSkuList.contains(pointsDetailNameId)) {
|
|
|
// 商品积分生成规则包含这个sku
|
|
|
// 订单中该sku的总金额
|
|
|
- BigDecimal money = goodsMap.get(sku);
|
|
|
- if (ratio.compareTo(BigDecimal.ZERO) != 0) {
|
|
|
+ BigDecimal money = goodsMap.get(pointsDetailNameId);
|
|
|
+ if (ratio.compareTo(BigDecimal.ZERO) > 0) {
|
|
|
// 算出所积的分
|
|
|
memberScore.set(money.multiply(ratio).add(new BigDecimal(memberScore.get())).intValue());
|
|
|
} else {
|
|
|
// 积分比例设置为0,该商品不记积分。
|
|
|
- LOGGER.info("商品SKU:【{}】,积分生成规则设置积分比例为:{},故不产生积分!", sku, ratio);
|
|
|
+ LOGGER.info("商品SKU:【{}】,积分生成规则设置积分比例为:{},故不产生积分!", pointsDetailNameId, ratio);
|
|
|
}
|
|
|
- } else {
|
|
|
- // 不包含sku,则需要判断是否有其他规则
|
|
|
- nonGoodsSkuList.add(sku);
|
|
|
+ goodsDataMap.remove(pointsDetailNameId);
|
|
|
}
|
|
|
- });
|
|
|
|
|
|
- }
|
|
|
- if (pointsType.equals(Constants.MemberScoreRulesEnum.ONE.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());
|
|
|
+ }
|
|
|
+ if (pointsType.equals(Constants.MemberScoreRulesEnum.ONE.getCode())) {
|
|
|
+ Collection<GoodsEntity> goodsEntityCollection = goodsDataMap.values();
|
|
|
+ goodsEntityCollection.forEach(goodsEntity -> {
|
|
|
+ // 商品类别
|
|
|
+ Integer categoryId = goodsEntity.getCategoryId();
|
|
|
+ String sku = goodsEntity.getSku();
|
|
|
+ if (categorySet.contains(categoryId)) {
|
|
|
+ if (categoryId.equals(Integer.parseInt(pointsDetailNameId))) {
|
|
|
+ // 订单中该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("分类:【{}】,积分生成规则设置积分比例为:{},故不产生积分!", pointsDetailNameId, ratio);
|
|
|
+ }
|
|
|
+ goodsDataMap.remove(sku);
|
|
|
+ }
|
|
|
}
|
|
|
- } else {
|
|
|
- nonCategorySkuList.add(sku);
|
|
|
- }
|
|
|
- });
|
|
|
- }
|
|
|
- if (pointsType.equals(Constants.MemberScoreRulesEnum.ZERO.getCode())) {
|
|
|
- // 门店
|
|
|
- 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());
|
|
|
+ });
|
|
|
+ }
|
|
|
+ if (pointsType.equals(Constants.MemberScoreRulesEnum.ZERO.getCode())) {
|
|
|
+ // 门店
|
|
|
+ Collection<GoodsEntity> goodsEntityCollection = goodsDataMap.values();
|
|
|
+ goodsEntityCollection.forEach(goodsEntity -> {
|
|
|
+ Integer storeId1 = goodsEntity.getStoreId();
|
|
|
+ String sku = goodsEntity.getSku();
|
|
|
+ if (storeId.equals(storeId1)) {
|
|
|
+ // 订单中该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("门店:【{}】,积分生成规则设置积分比例为:{},故不产生积分!", pointsDetailNameId, ratio);
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
- });
|
|
|
+ });
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ // 增加该会员的积分
|
|
|
+ Mall2MemberPointsEntity memberPointsEntity = memberPointsDao.queryByUserId(userEntityId);
|
|
|
+ if (memberPointsEntity == null) {
|
|
|
+ memberPointsEntity = new Mall2MemberPointsEntity();
|
|
|
+ memberPointsEntity.setUserId(userEntityId + "");
|
|
|
+ memberPointsEntity.setPoints(memberScore.get());
|
|
|
+ memberPointsEntity.setCreaterSn(userId + "");
|
|
|
+ memberPointsEntity.setCreateTime(new Date());
|
|
|
+ memberPointsDao.save(memberPointsEntity);
|
|
|
+ } else {
|
|
|
+ memberPointsEntity.setPoints(memberScore.get() + memberPointsEntity.getPoints());
|
|
|
+ memberPointsEntity.setModerSn(userId + "");
|
|
|
+ memberPointsEntity.setModTime(new Date());
|
|
|
+ Integer point = 0;
|
|
|
+ if (Objects.isNull(memberPointsEntity.getPoints())) {
|
|
|
+ point = memberScore.get();
|
|
|
+ } else {
|
|
|
+ point = memberPointsEntity.getPoints() + memberScore.get();
|
|
|
+ }
|
|
|
+ memberPointsEntity.setPoints(point);
|
|
|
+ memberPointsDao.update(memberPointsEntity);
|
|
|
}
|
|
|
- });
|
|
|
- // 增加该会员的积分
|
|
|
- Mall2MemberPointsEntity memberPointsEntity = memberPointsDao.queryByUserId(userEntityId);
|
|
|
- if (memberPointsEntity == null) {
|
|
|
- memberPointsEntity = new Mall2MemberPointsEntity();
|
|
|
- memberPointsEntity.setUserId(userEntityId + "");
|
|
|
- memberPointsEntity.setPoints(memberScore.get());
|
|
|
- memberPointsEntity.setCreaterSn(userId + "");
|
|
|
- memberPointsEntity.setCreateTime(new Date());
|
|
|
- memberPointsDao.save(memberPointsEntity);
|
|
|
- } else {
|
|
|
- memberPointsEntity.setPoints(memberScore.get() + memberPointsEntity.getPoints());
|
|
|
- memberPointsEntity.setModerSn(userId + "");
|
|
|
- memberPointsEntity.setModTime(new Date());
|
|
|
- memberPointsDao.update(memberPointsEntity);
|
|
|
}
|
|
|
+
|
|
|
// 增加该会员的消费记录
|
|
|
Mall2MemberConsumptionRecordsEntity consumptionRecords = new Mall2MemberConsumptionRecordsEntity();
|
|
|
consumptionRecords.setUserId(userEntity.getId() + "");
|
|
@@ -2572,33 +2592,29 @@ public class OrderServiceImpl implements OrderService {
|
|
|
// 积分消费记录
|
|
|
Integer beforeScoreInteger = (Integer) param.get("beforeScore");
|
|
|
Integer afterScoreStrInteger = (Integer) param.get("afterScore");
|
|
|
- int deductionScore = (Integer) param.get("deductionScore");
|
|
|
+ int deductionScore = org.springframework.util.StringUtils.isEmpty((String) param.get("deductionScore")) ? 0 : Integer.parseInt((String) param.get("deductionScore"));
|
|
|
String memberPhone = String.valueOf(param.get("memberPhone"));
|
|
|
- BigDecimal scoreDeductionPrice = BigDecimal.valueOf((Integer) param.get("scoreDeductionPrice"));
|
|
|
+ BigDecimal scoreDeductionPrice = new BigDecimal(org.springframework.util.StringUtils.isEmpty((String) param.get("scoreDeductionPrice")) ? "0" : (String) param.get("scoreDeductionPrice"));
|
|
|
consumptionRecords.setBeforeScore(beforeScoreInteger);
|
|
|
consumptionRecords.setAfterScore(afterScoreStrInteger);
|
|
|
- // TODO 需要新增字段:订单赠送积分
|
|
|
consumptionRecords.setOrderTotalPrice(order.getActual_price());
|
|
|
consumptionRecords.setScoreDeductionPrice(scoreDeductionPrice);
|
|
|
consumptionRecords.setMemberCode(memberCode);
|
|
|
consumptionRecords.setMemberPhone(memberPhone);
|
|
|
+ consumptionRecords.setOrderGiftScore(memberScore.get());
|
|
|
consumptionRecords.setDeductionScore(deductionScore);
|
|
|
consumptionRecords.setCreaterSn(userId + "");
|
|
|
consumptionRecords.setCreateTime(new Date());
|
|
|
memberConsumptionRecordsDao.save(consumptionRecords);
|
|
|
|
|
|
- // 同步会员订单消费记录
|
|
|
- /*if (!org.springframework.util.StringUtils.isEmpty(memberCode)) {
|
|
|
- syncMemberConsumeRecord(memberPhone, order, deductionScore);
|
|
|
- }
|
|
|
-
|
|
|
- // 积分变动接口,下单扣减
|
|
|
if (!org.springframework.util.StringUtils.isEmpty(memberCode)) {
|
|
|
+ // 同步会员订单消费记录
|
|
|
+ syncMemberConsumeRecord(memberPhone, order, deductionScore);
|
|
|
syncMemberScoreChangeRecord(openId, order, deductionScore, "下单扣减", HaiKongMemberScoreChangeEventEnum.SUBTRACT.getEvent());
|
|
|
- // 下单赠送,一元积一分
|
|
|
- Integer score = order.getActual_price().intValue();
|
|
|
+ // 积分变动接口,下单扣减
|
|
|
+ Integer score = memberScore.get();
|
|
|
syncMemberScoreChangeRecord(openId, order, score, "下单赠送", HaiKongMemberScoreChangeEventEnum.ADD.getEvent());
|
|
|
- }*/
|
|
|
+ }
|
|
|
|
|
|
// 生成取票码
|
|
|
PickUpCodeEntity pickUpCodeEntity = new PickUpCodeEntity();
|
|
@@ -3004,7 +3020,7 @@ public class OrderServiceImpl implements OrderService {
|
|
|
haiKongMemberOrderSyncResendService.save(haiKongMemberOrderSyncResendEntity);
|
|
|
LOGGER.info("请求会员系统同步消费订单接口成功!响应数据:{}", memberOrderSyncResponseJson);
|
|
|
} catch (Exception e) {
|
|
|
- LOGGER.error("请求会员系统同步消费订单接口失败!准备新增发送失败记录,等待重发!异常信息:", e);
|
|
|
+ LOGGER.error("请求会员系统同步消费订单接口出现异常!准备新增发送失败记录,等待重发!异常信息:", e);
|
|
|
// 没有请求成功,写表,重发
|
|
|
haiKongMemberOrderSyncResendEntity.setResendStatus(HaiKongMemberOrderResendStatusEnum.WAIT_RESEND.getStatus());
|
|
|
haiKongMemberOrderSyncResendService.save(haiKongMemberOrderSyncResendEntity);
|
|
@@ -3046,6 +3062,7 @@ public class OrderServiceImpl implements OrderService {
|
|
|
haiKongMemberScoreChangeRecordService.save(haiKongMemberScoreChangeRecordEntity);
|
|
|
LOGGER.info("请求会员系统积分变动接口成功!响应数据:{}", changeMemberScoreResponseJson);
|
|
|
} catch (Exception e) {
|
|
|
+ LOGGER.error("请求会员系统积分变动接口出现异常!准备新增发送失败记录,等待重发!异常信息:", e);
|
|
|
// 失败重发
|
|
|
haiKongMemberScoreChangeRecordEntity.setResendStatus(HaiKongMemberOrderResendStatusEnum.WAIT_RESEND.getStatus());
|
|
|
haiKongMemberScoreChangeRecordService.save(haiKongMemberScoreChangeRecordEntity);
|