|
@@ -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);
|
|
@@ -2546,13 +2569,12 @@ public class OrderServiceImpl implements OrderService {
|
|
|
if (!org.springframework.util.StringUtils.isEmpty(env) && Constants.PROD.equals(env)) {
|
|
|
if (parCode.startsWith("28")) {
|
|
|
// 支付宝支付
|
|
|
- throw new ServiceException("目前暂不支持支付宝付款!请使用微信进行支付!");
|
|
|
- /*try {
|
|
|
+ try {
|
|
|
AliPay(user, parCode, order, processRecordEntity, orderWXPayRecordCurrent, store);
|
|
|
} catch (Exception e) {
|
|
|
LOGGER.error("支付宝支付出现异常!订单号:【{}】", order.getOrder_sn(), e);
|
|
|
throw e;
|
|
|
- }*/
|
|
|
+ }
|
|
|
} else {
|
|
|
// 微信支付
|
|
|
try {
|
|
@@ -2633,9 +2655,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 +2686,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 +2716,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,该商品不记积分。
|
|
@@ -3121,6 +3146,8 @@ public class OrderServiceImpl implements OrderService {
|
|
|
orderSendCusParams.put("thirdPartyMerchName", store.getThirdPartyMerchName());
|
|
|
orderSendCusParams.put("tradeNo", order.getAliTradeNo());
|
|
|
orderSendCusParams.put("amount", order.getActual_price());
|
|
|
+ orderSendCusParams.put("buyerIdNo", order.getIdCard());
|
|
|
+ orderSendCusParams.put("buyerName", order.getPay_name());
|
|
|
|
|
|
// 将支付单信息发送到当前项目下的 cuspay
|
|
|
aliCusDeclareBiz.biz(orderSendCusParams);
|
|
@@ -4291,15 +4318,15 @@ public class OrderServiceImpl implements OrderService {
|
|
|
// 清空上一次计算活动价格的相关信息
|
|
|
BigDecimal deductionPrice = good.getDeductionPrice();
|
|
|
if (Objects.nonNull(deductionPrice)) {
|
|
|
- good.setDeductionPrice(null);
|
|
|
+ good.setDeductionPrice(BigDecimal.ZERO);
|
|
|
}
|
|
|
Integer deductionScore = good.getDeductionScore();
|
|
|
if (Objects.nonNull(deductionScore)) {
|
|
|
- good.setDeductionScore(null);
|
|
|
+ good.setDeductionScore(0);
|
|
|
}
|
|
|
BigDecimal discountedPrice = good.getDiscountedPrice();
|
|
|
if (Objects.nonNull(discountedPrice)) {
|
|
|
- good.setDiscountedPrice(null);
|
|
|
+ good.setDiscountedPrice(BigDecimal.ZERO);
|
|
|
}
|
|
|
String activity = good.getActivity();
|
|
|
if (Objects.nonNull(activity)) {
|
|
@@ -4643,73 +4670,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);
|