|
@@ -324,6 +324,9 @@ public class OrderServiceImpl implements OrderService {
|
|
|
@Autowired
|
|
|
private HaiKongSendOrderInfoDetailRecordService haiKongSendOrderInfoDetailRecordService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private StockChangeRecordService stockChangeRecordService;
|
|
|
+
|
|
|
@Override
|
|
|
public OrderEntity queryObject(Long id) {
|
|
|
return orderDao.queryObject(id);
|
|
@@ -2177,13 +2180,16 @@ public class OrderServiceImpl implements OrderService {
|
|
|
List<QueryGoodsVO> queryGoodsVOList = new ArrayList<>();
|
|
|
Map<String, GoodsEntity> goodsEntityMap;
|
|
|
List<GoodsEntity> goodsEntityList;
|
|
|
+
|
|
|
+ List<StockChangeRecordEntity> stockChangeRecordEntities = new ArrayList<>();
|
|
|
try {
|
|
|
goodsList.forEach(map -> {
|
|
|
QueryGoodsVO queryGoodsVo = new QueryGoodsVO();
|
|
|
queryGoodsVo.setProdBarcode((String) map.get("prodBarcode"));
|
|
|
queryGoodsVo.setSku((String) map.get("goodsSn"));
|
|
|
queryGoodsVo.setStoreId(storeId.longValue());
|
|
|
- queryGoodsVo.setSellVolume((Integer) map.get("sellVolume"));
|
|
|
+ Integer sellVolume = (Integer) map.get("sellVolume");
|
|
|
+ queryGoodsVo.setSellVolume(sellVolume);
|
|
|
queryGoodsVo.setRetailPrice(new BigDecimal(String.valueOf(map.get("retailPrice"))));
|
|
|
queryGoodsVo.setGoodsTaxes(new BigDecimal(String.valueOf(map.get("goodstaxes"))));
|
|
|
Object discountedPriceObj = map.get("discountedPrice");
|
|
@@ -2206,6 +2212,17 @@ public class OrderServiceImpl implements OrderService {
|
|
|
deductionPrice = new BigDecimal(deductionPriceObj.toString());
|
|
|
}
|
|
|
queryGoodsVo.setDeductionPrice(deductionPrice);
|
|
|
+
|
|
|
+ StockChangeRecordEntity stockChangeRecordEntity = new StockChangeRecordEntity();
|
|
|
+ stockChangeRecordEntity.setNumber(sellVolume);
|
|
|
+ stockChangeRecordEntity.setMerchSn(user.getMerchSn());
|
|
|
+ stockChangeRecordEntity.setThirdMerchSn(user.getThirdPartyMerchCode());
|
|
|
+ stockChangeRecordEntity.setRemark("销售出库");
|
|
|
+ stockChangeRecordEntity.setSku(queryGoodsVo.getProdBarcode());
|
|
|
+ stockChangeRecordEntity.setStoreId(storeId);
|
|
|
+ stockChangeRecordEntity.setType(Constants.StockChangeType.item_2.getType());
|
|
|
+ stockChangeRecordEntities.add(stockChangeRecordEntity);
|
|
|
+
|
|
|
queryGoodsVOList.add(queryGoodsVo);
|
|
|
});
|
|
|
// 将在循环中查询数据库改为一次性查询
|
|
@@ -2216,6 +2233,8 @@ public class OrderServiceImpl implements OrderService {
|
|
|
throw new ServiceException(e);
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+
|
|
|
Map resultObj = Maps.newHashMap();
|
|
|
// 海控需求,下单流程修改,收银端接收会员码,付款码,用户信息,订单数据
|
|
|
// 1. 校验库存:保税仓库存 + 展销店库存 - 出区数 >= 购买数
|
|
@@ -2310,8 +2329,6 @@ public class OrderServiceImpl implements OrderService {
|
|
|
listUtils.copyList(goodsEntityList, queryGoodsVOList);
|
|
|
|
|
|
//生成商户订单号
|
|
|
- SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
|
|
|
-// String orderSn = "ZMHK" + format.format(new Date()) + CommonUtil.generateOrderNumber();
|
|
|
Snowflake snowflake = IdUtil.createSnowflake(14, 14);
|
|
|
String orderSn = "8" + snowflake.nextIdStr().substring(6);
|
|
|
// 检查库存和更新库存
|
|
@@ -2526,6 +2543,12 @@ public class OrderServiceImpl implements OrderService {
|
|
|
// 批量保存订单详情
|
|
|
orderGoodsService.saveBatchOrderDetail(orderGoodsVoList);
|
|
|
|
|
|
+ stockChangeRecordEntities.forEach(stockChangeRecordEntity -> {
|
|
|
+ stockChangeRecordEntity.setOrderSn(orderSn);
|
|
|
+ });
|
|
|
+
|
|
|
+ stockChangeRecordService.saveBatchByOrderSubmit(stockChangeRecordEntities);
|
|
|
+
|
|
|
//清空预订单商品临时表
|
|
|
Map orderInfoMap = Maps.newHashMap();
|
|
|
orderInfoMap.put("orderInfo", order);
|
|
@@ -2633,9 +2656,10 @@ public class OrderServiceImpl implements OrderService {
|
|
|
orderGiftScoreRulesVo.setGenerateType(Constants.MemberScoreRulesEnum.TWO.getCode());
|
|
|
if (ratio.compareTo(BigDecimal.ZERO) > 0) {
|
|
|
// 算出所积的分
|
|
|
- int giftScore = money.multiply(ratio).setScale(0, BigDecimal.ROUND_FLOOR).add(new BigDecimal(memberScore.get())).intValue();
|
|
|
+ BigDecimal bigDecimal = money.multiply(ratio).setScale(0, BigDecimal.ROUND_FLOOR);
|
|
|
+ int giftScore = bigDecimal.add(new BigDecimal(memberScore.get())).intValue();
|
|
|
memberScore.set(giftScore);
|
|
|
- orderGiftScoreRulesVo.setGiftScore(giftScore);
|
|
|
+ orderGiftScoreRulesVo.setGiftScore(bigDecimal.intValue());
|
|
|
orderGiftScoreRulesVo.setGenerateRatio(ratio);
|
|
|
} else {
|
|
|
// 积分比例设置为0,该商品不记积分。
|
|
@@ -2663,9 +2687,10 @@ public class OrderServiceImpl implements OrderService {
|
|
|
BigDecimal money = goodsMap.get(sku);
|
|
|
if (ratio.compareTo(BigDecimal.ZERO) > 0) {
|
|
|
// 算出所积的分
|
|
|
- int giftScore = money.multiply(ratio).setScale(0, BigDecimal.ROUND_FLOOR).add(new BigDecimal(memberScore.get())).intValue();
|
|
|
+ BigDecimal bigDecimal = money.multiply(ratio).setScale(0, BigDecimal.ROUND_FLOOR);
|
|
|
+ int giftScore = bigDecimal.add(new BigDecimal(memberScore.get())).intValue();
|
|
|
memberScore.set(giftScore);
|
|
|
- orderGiftScoreRulesVo.setGiftScore(giftScore);
|
|
|
+ orderGiftScoreRulesVo.setGiftScore(bigDecimal.intValue());
|
|
|
orderGiftScoreRulesVo.setGenerateRatio(ratio);
|
|
|
} else {
|
|
|
// 积分比例设置为0,该商品不记积分。
|
|
@@ -2692,9 +2717,10 @@ public class OrderServiceImpl implements OrderService {
|
|
|
BigDecimal money = goodsMap.get(sku);
|
|
|
if (ratio.compareTo(BigDecimal.ZERO) != 0) {
|
|
|
// 算出所积的分
|
|
|
- int giftScore = money.multiply(ratio).setScale(0, BigDecimal.ROUND_FLOOR).add(new BigDecimal(memberScore.get())).intValue();
|
|
|
+ BigDecimal bigDecimal = money.multiply(ratio).setScale(0, BigDecimal.ROUND_FLOOR);
|
|
|
+ int giftScore = bigDecimal.add(new BigDecimal(memberScore.get())).intValue();
|
|
|
memberScore.set(giftScore);
|
|
|
- orderGiftScoreRulesVo.setGiftScore(giftScore);
|
|
|
+ orderGiftScoreRulesVo.setGiftScore(bigDecimal.intValue());
|
|
|
orderGiftScoreRulesVo.setGenerateRatio(ratio);
|
|
|
} else {
|
|
|
// 积分比例设置为0,该商品不记积分。
|
|
@@ -4643,73 +4669,75 @@ public class OrderServiceImpl implements OrderService {
|
|
|
|
|
|
// 根据收银端开关选择是否适用积分抵扣。
|
|
|
boolean useScore = Objects.isNull(calculateOrderDiscountPriceVo.getUseScore()) || calculateOrderDiscountPriceVo.getUseScore();
|
|
|
- if (useScore) {
|
|
|
- // 计算完活动优惠后,计算积分抵扣。(活动与积分抵扣不互斥)
|
|
|
- if (!org.springframework.util.StringUtils.isEmpty(memberCode)) {
|
|
|
- String memberInfoByCodeResponseJson;
|
|
|
- Response<Object> response;
|
|
|
- try {
|
|
|
- // 查询会员信息
|
|
|
- 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)) {
|
|
|
- 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) {
|
|
|
- LOGGER.error("请求会员系统失败或处理响应失败!", e);
|
|
|
- throw new ServiceException(e);
|
|
|
+ // 计算完活动优惠后,计算积分抵扣。(活动与积分抵扣不互斥)
|
|
|
+ if (!org.springframework.util.StringUtils.isEmpty(memberCode)) {
|
|
|
+ String memberInfoByCodeResponseJson;
|
|
|
+ Response<Object> response;
|
|
|
+ try {
|
|
|
+ // 查询会员信息
|
|
|
+ if (memberCode.trim().length() == 11) {
|
|
|
+ memberInfoByCodeResponseJson = haiKongMemberTemplate.getMemberInfoByPhone("{\"phone\":\"" + memberCode + "\"}");
|
|
|
+ } else {
|
|
|
+ memberInfoByCodeResponseJson = haiKongMemberTemplate.getMemberInfoByCode("{\"code\":\"" + memberCode + "\"}");
|
|
|
}
|
|
|
- BigDecimal afterDiscountPrice;
|
|
|
- if (response.getSuccess()) {
|
|
|
- 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(openId);
|
|
|
- userEntity.setMemberCode(memberCode);
|
|
|
- userEntity.setMobile(openId);
|
|
|
- userService.save(userEntity);
|
|
|
- } else {
|
|
|
- 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, openId, calculateOrderDiscountPriceResponseVO, goodsDetailsDtos, promotionSkuList, mkActivitiesEntityList);
|
|
|
- LOGGER.info("会员【{}】,当前积分:{},积分抵扣后的订单金额:{},积分抵扣前的订单金额:{}", openId, score, afterDiscountPrice, orderTotalPrice);
|
|
|
- calculateOrderDiscountPriceResponseVO.setOrderTotalPrice(afterDiscountPrice);
|
|
|
- calculateOrderDiscountPriceResponseVO.setGoodsDetailsDtos(goodsDetailsDtos);
|
|
|
- calculateOrderDiscountPriceResponseVO.setBeforeScore(score);
|
|
|
- // 订单完成后再添加积分消费记录,以及同步积分信息
|
|
|
- return calculateOrderDiscountPriceResponseVO;
|
|
|
- } else {
|
|
|
- LOGGER.error("会员【{}】积分为0,积分抵扣失败!", openId);
|
|
|
- return calculateOrderDiscountPriceResponseVO;
|
|
|
+ response = JacksonUtil.fromListJson(memberInfoByCodeResponseJson, new TypeReference<Response<Object>>() {
|
|
|
+ });
|
|
|
+ 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) {
|
|
|
+ LOGGER.error("请求会员系统失败或处理响应失败!", e);
|
|
|
+ throw new ServiceException(e);
|
|
|
+ }
|
|
|
+ BigDecimal afterDiscountPrice;
|
|
|
+ if (response.getSuccess()) {
|
|
|
+ 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(openId);
|
|
|
+ userEntity.setMemberCode(memberCode);
|
|
|
+ userEntity.setMobile(openId);
|
|
|
+ userService.save(userEntity);
|
|
|
} else {
|
|
|
- LOGGER.error("查询会员信息失败!响应结果:{}", memberInfoByCodeResponseJson);
|
|
|
- throw new ServiceException(String.format("会员码:%s,错误码:%s,错误信息:%s", memberCode, response.getErrorCode(), response.getErrorMessage()));
|
|
|
+ userEntity.setOpenId(openId);
|
|
|
+ userEntity.setMobile(openId);
|
|
|
+ userEntity.setMemberCode(memberCode);
|
|
|
+ userService.update(userEntity);
|
|
|
+ }
|
|
|
+ Integer score = memberInfoDTO.getScore();
|
|
|
+ // 是否适用积分抵扣
|
|
|
+ if (!useScore) {
|
|
|
+ return calculateOrderDiscountPriceResponseVO;
|
|
|
}
|
|
|
+ if (Objects.nonNull(score) && score > 0) {
|
|
|
+ // 有积分
|
|
|
+ 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);
|
|
|
+ // 订单完成后再添加积分消费记录,以及同步积分信息
|
|
|
+ return calculateOrderDiscountPriceResponseVO;
|
|
|
+ } else {
|
|
|
+ LOGGER.error("会员【{}】积分为0,积分抵扣失败!", openId);
|
|
|
+ return calculateOrderDiscountPriceResponseVO;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ LOGGER.error("查询会员信息失败!响应结果:{}", memberInfoByCodeResponseJson);
|
|
|
+ throw new ServiceException(String.format("会员码:%s,错误码:%s,错误信息:%s", memberCode, response.getErrorCode(), response.getErrorMessage()));
|
|
|
}
|
|
|
}
|
|
|
calculateOrderDiscountPriceResponseVO.setGoodsDetailsDtos(goodsDetailsDtos);
|