|
@@ -2619,7 +2619,7 @@ public class OrderServiceImpl implements OrderService {
|
|
|
orderGiftScoreRulesVo.setGenerateType(Constants.MemberScoreRulesEnum.TWO.getCode());
|
|
|
if (ratio.compareTo(BigDecimal.ZERO) > 0) {
|
|
|
// 算出所积的分
|
|
|
- int giftScore = money.multiply(ratio).add(new BigDecimal(memberScore.get())).intValue();
|
|
|
+ int giftScore = money.multiply(ratio).setScale(0, BigDecimal.ROUND_FLOOR).add(new BigDecimal(memberScore.get())).intValue();
|
|
|
memberScore.set(giftScore);
|
|
|
orderGiftScoreRulesVo.setGiftScore(giftScore);
|
|
|
orderGiftScoreRulesVo.setGenerateRatio(ratio);
|
|
@@ -2649,7 +2649,7 @@ public class OrderServiceImpl implements OrderService {
|
|
|
BigDecimal money = goodsMap.get(sku);
|
|
|
if (ratio.compareTo(BigDecimal.ZERO) > 0) {
|
|
|
// 算出所积的分
|
|
|
- int giftScore = money.multiply(ratio).add(new BigDecimal(memberScore.get())).intValue();
|
|
|
+ int giftScore = money.multiply(ratio).setScale(0, BigDecimal.ROUND_FLOOR).add(new BigDecimal(memberScore.get())).intValue();
|
|
|
memberScore.set(giftScore);
|
|
|
orderGiftScoreRulesVo.setGiftScore(giftScore);
|
|
|
orderGiftScoreRulesVo.setGenerateRatio(ratio);
|
|
@@ -2678,7 +2678,7 @@ public class OrderServiceImpl implements OrderService {
|
|
|
BigDecimal money = goodsMap.get(sku);
|
|
|
if (ratio.compareTo(BigDecimal.ZERO) != 0) {
|
|
|
// 算出所积的分
|
|
|
- int giftScore = money.multiply(ratio).add(new BigDecimal(memberScore.get())).intValue();
|
|
|
+ int giftScore = money.multiply(ratio).setScale(0, BigDecimal.ROUND_FLOOR).add(new BigDecimal(memberScore.get())).intValue();
|
|
|
memberScore.set(giftScore);
|
|
|
orderGiftScoreRulesVo.setGiftScore(giftScore);
|
|
|
orderGiftScoreRulesVo.setGenerateRatio(ratio);
|
|
@@ -3216,13 +3216,20 @@ public class OrderServiceImpl implements OrderService {
|
|
|
|
|
|
if (atomicBoolean.get()) {
|
|
|
// 推送支付单
|
|
|
- sendWxPayInfo(order, store);
|
|
|
+ sendWxPayInfo(order, store, wechatMicropayApiResult);
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
- private void sendWxPayInfo(OrderVo order, StoreEntity store) {
|
|
|
+ private void sendWxPayInfo(OrderVo order, StoreEntity store, WechatMicropayApiResult wechatMicropayApiResult) {
|
|
|
// 组装支付单信息
|
|
|
+ String payTransactionId = "";
|
|
|
+ if (Objects.nonNull(wechatMicropayApiResult)) {
|
|
|
+ payTransactionId = wechatMicropayApiResult.getTransaction_id();
|
|
|
+ } else {
|
|
|
+ payTransactionId = order.getPayTransactionId();
|
|
|
+ }
|
|
|
+
|
|
|
Map<String, Object> orderSendCusParams = new HashMap<>();
|
|
|
orderSendCusParams.put("merchSn", order.getMerchSn());
|
|
|
orderSendCusParams.put("orderSn", order.getOrder_sn());
|
|
@@ -3230,7 +3237,7 @@ public class OrderServiceImpl implements OrderService {
|
|
|
orderSendCusParams.put("thirdPartyMerchCode", store.getThirdPartyMerchCode());
|
|
|
orderSendCusParams.put("thirdPartyMerchName", store.getThirdPartyMerchName());
|
|
|
orderSendCusParams.put("outTradeNo", order.getOrder_sn());
|
|
|
- orderSendCusParams.put("transactionId", order.getPayTransactionId());
|
|
|
+ orderSendCusParams.put("transactionId", payTransactionId);
|
|
|
orderSendCusParams.put("subOrderId", ""); // ccnet原逻辑没有对该字段赋值
|
|
|
orderSendCusParams.put("subOrderNo", order.getOrder_sn());
|
|
|
orderSendCusParams.put("feeType", order.getFeeType());
|
|
@@ -3272,12 +3279,12 @@ public class OrderServiceImpl implements OrderService {
|
|
|
String memberOrderSyncResponseJson = haiKongMemberTemplate.memberOrderSync(body);
|
|
|
LOGGER.info("请求会员系统同步消费订单接口!响应:{}", memberOrderSyncResponseJson);
|
|
|
Response<String> response = JacksonUtil.fromListJson(memberOrderSyncResponseJson, new TypeReference<Response<String>>() {});
|
|
|
- if (Objects.nonNull(response) && ErrorCodeConstants.MemberSysErrorCodeEnum.CODE_0.getCode().equals(response.getCode())) {
|
|
|
+ if (Objects.nonNull(response) && response.getSuccess()) {
|
|
|
haiKongMemberOrderSyncResendEntity.setMemberSysOrderId(response.getData());
|
|
|
haiKongMemberOrderSyncResendEntity.setResendStatus(HaiKongMemberOrderResendStatusEnum.RESEND_SUCCESS.getStatus());
|
|
|
- } else if (Objects.nonNull(response) && ErrorCodeConstants.MemberSysErrorCodeEnum.CODE_500.getCode().equals(response.getCode())) {
|
|
|
+ } /*else if (Objects.nonNull(response) && ErrorCodeConstants.MemberSysErrorCodeEnum.CODE_500.getCode().equals(response.getCode())) {
|
|
|
haiKongMemberOrderSyncResendEntity.setResendStatus(HaiKongMemberOrderResendStatusEnum.WAIT_RESEND.getStatus());
|
|
|
- } else {
|
|
|
+ }*/ else {
|
|
|
haiKongMemberOrderSyncResendEntity.setResendStatus(HaiKongMemberOrderResendStatusEnum.NON_RESEND.getStatus());
|
|
|
}
|
|
|
haiKongMemberOrderSyncResendService.save(haiKongMemberOrderSyncResendEntity);
|
|
@@ -3344,7 +3351,7 @@ public class OrderServiceImpl implements OrderService {
|
|
|
haiKongMemberScoreChangeRecordService.save(haiKongMemberScoreChangeRecordEntity);
|
|
|
}
|
|
|
LOGGER.info("保存会员系统积分变动详情记录中......");
|
|
|
- List<HaiKongMemberScoreChangeDetailRecordEntity> recordEntityList = goodsList.stream().map(goodsEntity -> {
|
|
|
+ List<HaiKongMemberScoreChangeDetailRecordEntity> recordEntityList = goodsList.stream().distinct().map(goodsEntity -> {
|
|
|
HaiKongMemberScoreChangeDetailRecordEntity entity = new HaiKongMemberScoreChangeDetailRecordEntity();
|
|
|
String sku = goodsEntity.getSku();
|
|
|
OrderGiftScoreRulesVo orderGiftScoreRulesVo = giftGoodsScoreDetailMap.get(sku);
|
|
@@ -4305,7 +4312,7 @@ public class OrderServiceImpl implements OrderService {
|
|
|
* 2.查询当前时间,该门店是否有活动,如果有活动,查询开启了哪些营销方式
|
|
|
* 参数: 当前时间 门店id
|
|
|
*/
|
|
|
- List<MkActivitiesEntity> mkActivitiesEntityList = mkActivitiesService.queryByNow(storeId, DateUtils.format(new Date(), "yyyy-MM-dd"));
|
|
|
+ List<MkActivitiesEntity> mkActivitiesEntityList = mkActivitiesService.queryByNow(storeId, DateUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
|
|
|
// 活动优先级判定,特价>打折>满减/满赠>优惠券>积分抵扣;
|
|
|
// List<Constants.ActivityTopicEnum> activityTopicEnums = Arrays.asList(Constants.ActivityTopicEnum.values());
|
|
|
// for (MkActivitiesEntity mkActivitiesEntity : mkActivitiesEntityList) {
|
|
@@ -4614,7 +4621,9 @@ public class OrderServiceImpl implements OrderService {
|
|
|
}
|
|
|
calculateOrderDiscountPriceResponseVO.setOrderTotalPrice(orderTotalPrice);
|
|
|
calculateOrderDiscountPriceResponseVO.setGoodsDetailsDtos(goodsDetailsDtos);
|
|
|
-
|
|
|
+ calculateOrderDiscountPriceResponseVO.setLevelName("无");
|
|
|
+ calculateOrderDiscountPriceResponseVO.setMemberCurrentAvailableScore(0);
|
|
|
+ calculateOrderDiscountPriceResponseVO.setDeductionScore(0);
|
|
|
|
|
|
// 计算完活动优惠后,计算积分抵扣。(活动与积分抵扣不互斥)
|
|
|
if (!org.springframework.util.StringUtils.isEmpty(memberCode)) {
|
|
@@ -4622,11 +4631,19 @@ 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())) {
|
|
|
+ if (Objects.isNull(response)) {
|
|
|
LOGGER.error("请求会员系统出现异常!error:{}", memberInfoByCodeResponseJson);
|
|
|
+ if (ErrorCodeConstants.MemberSysErrorCodeEnum.CODE_401.getCode().equals(response.getCode())) {
|
|
|
+ JedisUtil.del(Constants.MEMBER_SYS_ACCESS_TOKEN_REDIS_KEY);
|
|
|
+ throw new ServiceException(String.format("请求会员系统出现异常!会员码:%s,error:%s", memberCode, ErrorCodeConstants.MemberSysErrorCodeEnum.CODE_401.getDesc()));
|
|
|
+ }
|
|
|
throw new ServiceException(String.format("请求会员系统出现异常!会员码:%s,error:%s", memberCode, memberInfoByCodeResponseJson));
|
|
|
}
|
|
|
} catch (Exception e) {
|
|
@@ -4638,32 +4655,37 @@ 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());
|
|
|
+ calculateOrderDiscountPriceResponseVO.setMemberCurrentAvailableScore(memberInfoDTO.getScore());
|
|
|
+ calculateOrderDiscountPriceResponseVO.setLevelName(memberInfoDTO.getLevelName());
|
|
|
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 +4706,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 +4789,10 @@ 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));
|
|
|
+ return orderTotalPrice;
|
|
|
+// throw new ServiceException(String.format("用户【%s】的积分数量为:%s,最低需要%s积分才能抵扣!", openId, score, scoreLimit));
|
|
|
} else {
|
|
|
// 积分取整
|
|
|
int scoreInteger = score % scoreLimit == 0 ? score : score - (score % scoreLimit);
|
|
@@ -4824,8 +4850,7 @@ public class OrderServiceImpl implements OrderService {
|
|
|
BigDecimal actualPaymentAmount = goodsDetailsDto.getActualPaymentAmount()
|
|
|
.multiply(BigDecimal.valueOf(goodsDetailsDto.getSellVolume()));
|
|
|
// 当前商品最大支持抵扣的金额
|
|
|
- BigDecimal currentSkuMaxDeductionPrice = actualPaymentAmount.multiply(BigDecimal.valueOf(goodsDetailsDto.getSellVolume()))
|
|
|
- .multiply(scoreRatio).setScale(0, BigDecimal.ROUND_FLOOR);
|
|
|
+ BigDecimal currentSkuMaxDeductionPrice = actualPaymentAmount.multiply(scoreRatio).setScale(0, BigDecimal.ROUND_FLOOR);
|
|
|
// 其他活动优惠金额
|
|
|
BigDecimal otherDiscountedPrice = Objects.isNull(goodsDetailsDto.getDiscountedPrice()) ? BigDecimal.ZERO : goodsDetailsDto.getDiscountedPrice();
|
|
|
|
|
@@ -4889,10 +4914,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;
|
|
|
}
|