|
@@ -4622,7 +4622,11 @@ public class OrderServiceImpl implements OrderService {
|
|
|
Response<Object> response;
|
|
|
try {
|
|
|
// 查询会员信息
|
|
|
- memberInfoByCodeResponseJson = haiKongMemberTemplate.getMemberInfoByPhone("{\"phone\":" + memberCode + "}");
|
|
|
+ if (memberCode.trim().length() == 11) {
|
|
|
+ memberInfoByCodeResponseJson = haiKongMemberTemplate.getMemberInfoByPhone("{\"phone\":\"" + memberCode + "\"}");
|
|
|
+ } else {
|
|
|
+ memberInfoByCodeResponseJson = haiKongMemberTemplate.getMemberInfoByCode("{\"code\":\"" + memberCode + "\"}");
|
|
|
+ }
|
|
|
response = JacksonUtil.fromListJson(memberInfoByCodeResponseJson, new TypeReference<Response<Object>>() {
|
|
|
});
|
|
|
if (Objects.isNull(response) || Objects.nonNull(response.getErrorCode())) {
|
|
@@ -4638,32 +4642,35 @@ public class OrderServiceImpl implements OrderService {
|
|
|
MemberInfoDTO memberInfoDTO = JacksonUtil.fromStringJson(JacksonUtil.toJson(response.getData()), MemberInfoDTO.class);
|
|
|
assert memberInfoDTO != null : String.format("会员码:【%s】会员信息错误!%s", memberCode, JacksonUtil.toJson(response));
|
|
|
// 查询会员表
|
|
|
+ calculateOrderDiscountPriceResponseVO.setOpenId(memberInfoDTO.getOpenId());
|
|
|
+ calculateOrderDiscountPriceResponseVO.setMemberPhone(memberInfoDTO.getPhone());
|
|
|
UserEntity userEntity = userService.queryByOpenId(memberInfoDTO.getOpenId());
|
|
|
+ String openId = memberInfoDTO.getOpenId();
|
|
|
if (Objects.isNull(userEntity)) {
|
|
|
userEntity = new UserEntity();
|
|
|
- userEntity.setOpenId(memberInfoDTO.getOpenId());
|
|
|
+ userEntity.setOpenId(openId);
|
|
|
userEntity.setMemberCode(memberCode);
|
|
|
+ userEntity.setMobile(openId);
|
|
|
userService.save(userEntity);
|
|
|
} else {
|
|
|
- userEntity.setOpenId(memberInfoDTO.getOpenId());
|
|
|
+ userEntity.setOpenId(openId);
|
|
|
+ userEntity.setMobile(openId);
|
|
|
userEntity.setMemberCode(memberCode);
|
|
|
userService.update(userEntity);
|
|
|
}
|
|
|
Integer score = memberInfoDTO.getScore();
|
|
|
if (Objects.nonNull(score) && score > 0) {
|
|
|
// 有积分
|
|
|
- afterDiscountPrice = calculatePreferentialPrice(orderTotalPrice, score, memberCode, calculateOrderDiscountPriceResponseVO, goodsDetailsDtos, promotionSkuList, mkActivitiesEntityList);
|
|
|
- LOGGER.info("会员【{}】,当前积分:{},积分抵扣后的订单金额:{},积分抵扣前的订单金额:{}", memberCode, score, afterDiscountPrice, orderTotalPrice);
|
|
|
+ afterDiscountPrice = calculatePreferentialPrice(orderTotalPrice, score, memberCode, openId, calculateOrderDiscountPriceResponseVO, goodsDetailsDtos, promotionSkuList, mkActivitiesEntityList);
|
|
|
+ LOGGER.info("会员【{}】,当前积分:{},积分抵扣后的订单金额:{},积分抵扣前的订单金额:{}", openId, score, afterDiscountPrice, orderTotalPrice);
|
|
|
calculateOrderDiscountPriceResponseVO.setOrderTotalPrice(afterDiscountPrice);
|
|
|
calculateOrderDiscountPriceResponseVO.setGoodsDetailsDtos(goodsDetailsDtos);
|
|
|
calculateOrderDiscountPriceResponseVO.setBeforeScore(score);
|
|
|
- calculateOrderDiscountPriceResponseVO.setOpenId(memberInfoDTO.getOpenId());
|
|
|
- calculateOrderDiscountPriceResponseVO.setMemberPhone(memberInfoDTO.getPhone());
|
|
|
// 订单完成后再添加积分消费记录,以及同步积分信息
|
|
|
return calculateOrderDiscountPriceResponseVO;
|
|
|
} else {
|
|
|
- LOGGER.error("会员【{}】积分为0,积分抵扣失败!", memberCode);
|
|
|
- throw new ServiceException(String.format("会员【%s】积分为0,积分抵扣失败!", memberCode));
|
|
|
+ LOGGER.error("会员【{}】积分为0,积分抵扣失败!", openId);
|
|
|
+ return calculateOrderDiscountPriceResponseVO;
|
|
|
}
|
|
|
} else {
|
|
|
LOGGER.error("查询会员信息失败!响应结果:{}", memberInfoByCodeResponseJson);
|
|
@@ -4684,15 +4691,18 @@ public class OrderServiceImpl implements OrderService {
|
|
|
* @param orderTotalPrice 订单商品总价
|
|
|
* @param score 积分
|
|
|
* @param memberCode 会员码
|
|
|
+ * @param openId 会员open_id:手机号
|
|
|
* @param goodsDetailsDtos 订单商品详情
|
|
|
* @param calculateOrderDiscountPriceResponseVO 响应数据
|
|
|
* @param promotionSkuList 参与了限时特价活动并且与积分抵扣互斥的sku集合
|
|
|
+ * @param mkActivitiesEntityList 根据优先级排序后的活动集合
|
|
|
*
|
|
|
* @return 积分抵扣后的订单总金额
|
|
|
*/
|
|
|
private BigDecimal calculatePreferentialPrice(BigDecimal orderTotalPrice,
|
|
|
Integer score,
|
|
|
String memberCode,
|
|
|
+ String openId,
|
|
|
CalculateOrderDiscountPriceResponseVO calculateOrderDiscountPriceResponseVO,
|
|
|
List<GoodsDetailsDto> goodsDetailsDtos,
|
|
|
List<String> promotionSkuList,
|
|
@@ -4764,9 +4774,9 @@ public class OrderServiceImpl implements OrderService {
|
|
|
}
|
|
|
Integer scoreLimit = Integer.parseInt(scoreLimitStr);
|
|
|
if (score < scoreLimit) {
|
|
|
- LOGGER.error("用户【{}】的积分数量为:{},最低需要{}积分才能抵扣!", memberCode, score, scoreLimit);
|
|
|
+ LOGGER.error("会员码【{}】用户【{}】的积分数量为:{},最低需要{}积分才能抵扣!", memberCode, openId, score, scoreLimit);
|
|
|
calculateOrderDiscountPriceResponseVO.setAfterScore(score);
|
|
|
- throw new ServiceException(String.format("用户【%s】的积分数量为:%s,最低需要%s积分才能抵扣!", memberCode, score, scoreLimit));
|
|
|
+ throw new ServiceException(String.format("用户【%s】的积分数量为:%s,最低需要%s积分才能抵扣!", openId, score, scoreLimit));
|
|
|
} else {
|
|
|
// 积分取整
|
|
|
int scoreInteger = score % scoreLimit == 0 ? score : score - (score % scoreLimit);
|
|
@@ -4888,10 +4898,10 @@ public class OrderServiceImpl implements OrderService {
|
|
|
calculateOrderDiscountPriceResponseVO.setOrderTotalPrice(orderTotalPrice);
|
|
|
// 积分抵扣的总金额
|
|
|
calculateOrderDiscountPriceResponseVO.setScoreDeductionPrice(goodsDetailScoreDeductionPrice);
|
|
|
- LOGGER.info("会员【{}】,当前积分:{},抵扣订单金额后剩余积分:{}", memberCode, score, afterScore);
|
|
|
+ LOGGER.info("会员【{}】会员码【{}】,当前积分:{},抵扣订单金额后剩余积分:{}", openId, memberCode, score, afterScore);
|
|
|
}
|
|
|
} else {
|
|
|
- LOGGER.info("会员【{}】的积分小于积分抵扣最低值,不参加积分抵扣!", memberCode);
|
|
|
+ LOGGER.info("会员【{}】会员码【{}】的积分小于积分抵扣最低值,不参加积分抵扣!", openId, memberCode);
|
|
|
}
|
|
|
return orderTotalPrice;
|
|
|
}
|