|
@@ -62,6 +62,7 @@ import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.context.annotation.Bean;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.support.TransactionTemplate;
|
|
|
|
|
@@ -98,6 +99,8 @@ public class FrontExpressOrderServiceImpl implements FrontExpressOrderService {
|
|
|
private UserExpressAddressService userExpressAddressService;
|
|
|
@Autowired
|
|
|
private RedisUtil redisUtil;
|
|
|
+ @Autowired
|
|
|
+ private SystemAttachmentService systemAttachmentService;
|
|
|
|
|
|
@Autowired
|
|
|
private TransactionTemplate transactionTemplate;
|
|
@@ -117,16 +120,26 @@ public class FrontExpressOrderServiceImpl implements FrontExpressOrderService {
|
|
|
User user = userService.getInfo();
|
|
|
// 校验预下单商品信息
|
|
|
PreExpressOrderInfoVo preOrderInfoVo = validatePreOrderRequest(request, user);
|
|
|
- BigDecimal totalPrice = preOrderInfoVo.getUserOrderVoList().stream()
|
|
|
- .map(e -> e.getPrice().multiply(new BigDecimal(e.getExpressNum())))
|
|
|
- .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
- preOrderInfoVo.setProTotalFee(totalPrice);
|
|
|
- preOrderInfoVo.setOrderProNum(preOrderInfoVo.getUserOrderVoList().stream().mapToInt(PreExpressOrderInfoDetailVo::getExpressNum).sum());
|
|
|
- // 实际支付金额
|
|
|
- preOrderInfoVo.setPayFee(preOrderInfoVo.getProTotalFee().add(preOrderInfoVo.getGiveTips()));
|
|
|
- preOrderInfoVo.setUserBalance(user.getNowMoney());
|
|
|
return createPreOrderResponse(user.getId(), preOrderInfoVo);
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean delPreOrder(String preOrderNo,List<String> expRessIdList) {
|
|
|
+ if(ObjectUtil.isNotEmpty(preOrderNo)&&redisUtil.exists(OrderConstants.PRE_EXP_ORDER_CACHE_PREFIX + preOrderNo)) {
|
|
|
+ String orderVoString = redisUtil.get(OrderConstants.PRE_EXP_ORDER_CACHE_PREFIX + preOrderNo).toString();
|
|
|
+ PreExpressOrderInfoVo preOrderInfoVo = JSONObject.parseObject(orderVoString, PreExpressOrderInfoVo.class);
|
|
|
+ List<PrePostOrderInfoVo> postOrderVoList = preOrderInfoVo.getPostOrderList();
|
|
|
+ postOrderVoList.forEach(e -> {
|
|
|
+ for (String expRessId:expRessIdList) {
|
|
|
+ e.getOrderInfoList().removeIf(item->item.getExpressId().equals(expRessId));
|
|
|
+ }
|
|
|
+ });
|
|
|
+ redisUtil.set(OrderConstants.PRE_EXP_ORDER_CACHE_PREFIX + preOrderNo, JSONObject.toJSONString(preOrderInfoVo), OrderConstants.PRE_ORDER_CACHE_TIME, TimeUnit.MINUTES);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ throw new CrmebException(CommonResultCode.VALIDATE_FAILED, "预下单快递不存在");
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 订单列表
|
|
|
* @param request 搜索参数
|
|
@@ -145,15 +158,40 @@ public class FrontExpressOrderServiceImpl implements FrontExpressOrderService {
|
|
|
for (ExpressOrder order : orderList) {
|
|
|
ExpressOrderFrontDataResponse infoResponse = new ExpressOrderFrontDataResponse();
|
|
|
BeanUtils.copyProperties(order, infoResponse);
|
|
|
+ List<PostOrderFrontDetailResponse> postOrderVoList = CollUtil.newArrayList();
|
|
|
// 订单详情对象列表
|
|
|
List<ExpressOrderDetail> orderDetailList = orderDetailService.getByOrderNo(order.getOrderNo());
|
|
|
- List<ExpressOrderInfoFrontDataResponse> infoResponseList = CollUtil.newArrayList();
|
|
|
- orderDetailList.forEach(e -> {
|
|
|
- ExpressOrderInfoFrontDataResponse orderInfoResponse = new ExpressOrderInfoFrontDataResponse();
|
|
|
- BeanUtils.copyProperties(e, orderInfoResponse);
|
|
|
- infoResponseList.add(orderInfoResponse);
|
|
|
+ Map<String, List<ExpressOrderDetail>> orderDetailMap = orderDetailList.stream().collect(Collectors.groupingBy(ExpressOrderDetail::getPostName));
|
|
|
+ orderDetailMap.forEach((key, value) -> {
|
|
|
+ BigDecimal proTotalFee=BigDecimal.ZERO;
|
|
|
+ Integer orderNum=0;
|
|
|
+ PostOrderFrontDetailResponse postOrderFrontDetail=new PostOrderFrontDetailResponse();
|
|
|
+ List<ExpressOrderDetail> detailList = orderDetailMap.get(key);
|
|
|
+ List<ExpressOrderInfoFrontDataResponse> dataResponseList = detailList.stream().map(d -> {
|
|
|
+ ExpressOrderInfoFrontDataResponse dataResponse = new ExpressOrderInfoFrontDataResponse();
|
|
|
+ BeanUtils.copyProperties(d, dataResponse);
|
|
|
+ postOrderFrontDetail.setPostName(d.getPostName());
|
|
|
+ postOrderFrontDetail.setAddressDetail(d.getPostAddress());
|
|
|
+ postOrderFrontDetail.setPhone(d.getPostPhone());
|
|
|
+ return dataResponse;
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+ proTotalFee = detailList.stream()
|
|
|
+ .map(e -> {
|
|
|
+ BigDecimal price;
|
|
|
+ price = e.getPrice().multiply(new BigDecimal(e.getExpNum()));
|
|
|
+ return price;
|
|
|
+ }).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ orderNum = detailList.stream()
|
|
|
+ .mapToInt(e -> {
|
|
|
+ return e.getExpNum()!=null?e.getExpNum():0;
|
|
|
+ }).sum();
|
|
|
+ postOrderFrontDetail.setOrderInfoList(dataResponseList);
|
|
|
+ postOrderFrontDetail.setTotalNum(orderNum);
|
|
|
+ postOrderFrontDetail.setTotalPrice(proTotalFee);
|
|
|
+ postOrderFrontDetail.setPayPrice(proTotalFee);
|
|
|
+ postOrderVoList.add(postOrderFrontDetail);
|
|
|
});
|
|
|
- infoResponse.setOrderInfoList(infoResponseList);
|
|
|
+ infoResponse.setPostOrderInfoList(postOrderVoList);
|
|
|
if (!order.getPaid()) {
|
|
|
cancelTime = DateUtil.offset(order.getCreateTime(), DateField.MINUTE, crmebConfig.getOrderCancelTime());
|
|
|
infoResponse.setCancelTime(cancelTime.getTime());
|
|
@@ -168,7 +206,48 @@ public class FrontExpressOrderServiceImpl implements FrontExpressOrderService {
|
|
|
return CommonPage.copyPageInfo(pageInfo, responseList);
|
|
|
}
|
|
|
private ExpressOrderNoResponse createPreOrderResponse(Integer userId, PreExpressOrderInfoVo preOrderInfoVo) {
|
|
|
- String key = userId + CrmebDateUtil.getNowTime().toString() + CrmebUtil.getUuid();
|
|
|
+ String key=preOrderInfoVo.getPreOrderNo();
|
|
|
+ if(ObjectUtil.isNotEmpty(key)&&redisUtil.exists(OrderConstants.PRE_EXP_ORDER_CACHE_PREFIX + key)) {
|
|
|
+ key=preOrderInfoVo.getPreOrderNo();
|
|
|
+ String orderVoString = redisUtil.get(OrderConstants.PRE_EXP_ORDER_CACHE_PREFIX + key).toString();
|
|
|
+ PreExpressOrderInfoVo sourcePreOrderInfoVo = JSONObject.parseObject(orderVoString, PreExpressOrderInfoVo.class);
|
|
|
+ List<PrePostOrderInfoVo> postOrderVoList = preOrderInfoVo.getPostOrderList();
|
|
|
+ if(postOrderVoList==null|| postOrderVoList.size()==0){
|
|
|
+ throw new CrmebException(CommonResultCode.VALIDATE_FAILED, "未找到对应快递驿站");
|
|
|
+ }
|
|
|
+ //sourcePreOrderInfoVo.getPostOrderList().forEach(e -> {
|
|
|
+ PrePostOrderInfoVo curPostOrderVo=postOrderVoList.get(0);
|
|
|
+ if(sourcePreOrderInfoVo.getPostOrderList().stream().anyMatch(m -> m.getPostAddressId().toString().equals(curPostOrderVo.getPostAddressId().toString()))){
|
|
|
+ for (PrePostOrderInfoVo orderVo : sourcePreOrderInfoVo.getPostOrderList()) {
|
|
|
+ if (orderVo.getPostAddressId().toString().equals(curPostOrderVo.getPostAddressId().toString())) {
|
|
|
+ orderVo.getOrderInfoList().addAll(curPostOrderVo.getOrderInfoList());
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ sourcePreOrderInfoVo.getPostOrderList().addAll(preOrderInfoVo.getPostOrderList());
|
|
|
+ }
|
|
|
+ BigDecimal proTotalFee=BigDecimal.ZERO;
|
|
|
+ Integer orderNum=0;
|
|
|
+ for(PrePostOrderInfoVo prePostOrderInfoVo:sourcePreOrderInfoVo.getPostOrderList()) {
|
|
|
+ proTotalFee = proTotalFee.add(prePostOrderInfoVo.getOrderInfoList().stream()
|
|
|
+ .map(e -> {
|
|
|
+ BigDecimal price;
|
|
|
+ price = e.getPrice().multiply(new BigDecimal(e.getExpressNum()));
|
|
|
+ return price;
|
|
|
+ }).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ orderNum = orderNum+prePostOrderInfoVo.getOrderInfoList().stream()
|
|
|
+ .mapToInt(e -> {
|
|
|
+ return e.getExpressNum()!=null?e.getExpressNum():0;
|
|
|
+ }).sum();
|
|
|
+ }
|
|
|
+ sourcePreOrderInfoVo.setOrderProNum(orderNum);
|
|
|
+ sourcePreOrderInfoVo.setPayFee(proTotalFee);
|
|
|
+ sourcePreOrderInfoVo.setProTotalFee(proTotalFee);
|
|
|
+ BeanUtils.copyProperties(sourcePreOrderInfoVo,preOrderInfoVo);
|
|
|
+ }else{
|
|
|
+ key = userId + CrmebDateUtil.getNowTime().toString() + CrmebUtil.getUuid();
|
|
|
+ }
|
|
|
redisUtil.set(OrderConstants.PRE_EXP_ORDER_CACHE_PREFIX + key, JSONObject.toJSONString(preOrderInfoVo), OrderConstants.PRE_ORDER_CACHE_TIME, TimeUnit.MINUTES);
|
|
|
ExpressOrderNoResponse response = new ExpressOrderNoResponse();
|
|
|
response.setOrderNo(key);
|
|
@@ -185,8 +264,6 @@ public class FrontExpressOrderServiceImpl implements FrontExpressOrderService {
|
|
|
*/
|
|
|
@Override
|
|
|
public PreExpressOrderResponse loadPreOrder(String preOrderNo) {
|
|
|
-// Integer userId = userService.getUserIdException();
|
|
|
-// User user = userService.getById(userId);
|
|
|
// 通过缓存获取预下单对象
|
|
|
String key = OrderConstants.PRE_EXP_ORDER_CACHE_PREFIX + preOrderNo;
|
|
|
boolean exists = redisUtil.exists(key);
|
|
@@ -197,14 +274,14 @@ public class FrontExpressOrderServiceImpl implements FrontExpressOrderService {
|
|
|
PreExpressOrderInfoVo orderInfoVo = JSONObject.parseObject(orderVoString, PreExpressOrderInfoVo.class);
|
|
|
PreExpressOrderResponse preOrderResponse = new PreExpressOrderResponse();
|
|
|
BeanUtils.copyProperties(orderInfoVo, preOrderResponse);
|
|
|
- List<PreExpressOrderInfoDetailResponse> infoResponseList = new ArrayList<>();
|
|
|
- List<PreExpressOrderInfoDetailVo> merchantOrderVoList = orderInfoVo.getUserOrderVoList();
|
|
|
- for (PreExpressOrderInfoDetailVo merchantOrderVo : merchantOrderVoList) {
|
|
|
- PreExpressOrderInfoDetailResponse infoResponse = new PreExpressOrderInfoDetailResponse();
|
|
|
- BeanUtils.copyProperties(merchantOrderVo, infoResponse);
|
|
|
+ List<PrePostOrderInfoResponse> infoResponseList = new ArrayList<>();
|
|
|
+ List<PrePostOrderInfoVo> postOrderVoList = orderInfoVo.getPostOrderList();
|
|
|
+ for (PrePostOrderInfoVo postOrderVo : postOrderVoList) {
|
|
|
+ PrePostOrderInfoResponse infoResponse = new PrePostOrderInfoResponse();
|
|
|
+ BeanUtils.copyProperties(postOrderVo, infoResponse);
|
|
|
infoResponseList.add(infoResponse);
|
|
|
}
|
|
|
- preOrderResponse.setUserOrderVoList(infoResponseList);
|
|
|
+ preOrderResponse.setPostOrderList(infoResponseList);
|
|
|
return preOrderResponse;
|
|
|
|
|
|
}
|
|
@@ -226,7 +303,7 @@ public class FrontExpressOrderServiceImpl implements FrontExpressOrderService {
|
|
|
}
|
|
|
String orderVoString = redisUtil.get(key).toString();
|
|
|
PreExpressOrderInfoVo orderInfoVo = JSONObject.parseObject(orderVoString, PreExpressOrderInfoVo.class);
|
|
|
-
|
|
|
+ UserAddress userAddress = userAddressService.getById(orderInfoVo.getUserAddressId());
|
|
|
// 平台订单
|
|
|
ExpressOrder order = new ExpressOrder();
|
|
|
String orderNo = CrmebUtil.getOrderNo(OrderConstants.ORDER_PREFIX_PLATFORM);
|
|
@@ -234,34 +311,42 @@ public class FrontExpressOrderServiceImpl implements FrontExpressOrderService {
|
|
|
order.setUid(user.getId());
|
|
|
order.setTotalNum(orderInfoVo.getOrderProNum());
|
|
|
order.setProTotalPrice(orderInfoVo.getProTotalFee());
|
|
|
- order.setGiveTips(orderInfoVo.getGiveTips());
|
|
|
+ order.setGiveTips(ObjectUtil.isNull(order.getGiveTips())?BigDecimal.ZERO:order.getGiveTips());
|
|
|
order.setTotalPrice(order.getProTotalPrice().add(order.getGiveTips()));
|
|
|
order.setPayPrice(order.getTotalPrice());
|
|
|
order.setPaid(false);
|
|
|
order.setUserPhone(orderInfoVo.getUserPhone());
|
|
|
- order.setUserAddressId(orderInfoVo.getUserAddressId());
|
|
|
- order.setPostAddressId(orderInfoVo.getPostAddressId());
|
|
|
+ String userAddressStr = userAddress.getProvince() + userAddress.getCity() + userAddress.getDistrict() + userAddress.getStreet() + userAddress.getDetail();
|
|
|
+ order.setUserAddress(userAddressStr);
|
|
|
order.setCancelStatus(OrderConstants.ORDER_CANCEL_STATUS_NORMAL);
|
|
|
order.setType(orderInfoVo.getType());
|
|
|
order.setCreateTime(DateUtil.date());
|
|
|
// 订单明细
|
|
|
List<ExpressOrderDetail> orderDetailList = new ArrayList<>();
|
|
|
- for (PreExpressOrderInfoDetailVo userOrderVo : orderInfoVo.getUserOrderVoList()) {
|
|
|
- ExpressOrderDetail orderDetail = new ExpressOrderDetail();
|
|
|
- orderDetail.setOrderNo(order.getOrderNo());
|
|
|
- orderDetail.setUid(user.getId());
|
|
|
- orderDetail.setExpressType(orderInfoVo.getType());
|
|
|
- orderDetail.setExpNum(userOrderVo.getExpressNum());
|
|
|
- orderDetail.setImage(userOrderVo.getImage());
|
|
|
- orderDetail.setIsReceipt(false);
|
|
|
- orderDetail.setPrice(userOrderVo.getPrice());
|
|
|
- orderDetail.setPayPrice(orderDetail.getPrice().multiply(new BigDecimal(orderDetail.getExpNum().toString())));
|
|
|
- if (orderDetail.getPayPrice().compareTo(BigDecimal.ZERO) < 0) {
|
|
|
- throw new CrmebException("订单详情价格计算错误,详情价格不能小于0");
|
|
|
+ for(PrePostOrderInfoVo postOrder:orderInfoVo.getPostOrderList()) {
|
|
|
+ for (PreExpressOrderInfoDetailVo userOrderVo : postOrder.getOrderInfoList()) {
|
|
|
+ ExpressOrderDetail orderDetail = new ExpressOrderDetail();
|
|
|
+ orderDetail.setOrderNo(order.getOrderNo());
|
|
|
+ orderDetail.setUid(user.getId());
|
|
|
+ orderDetail.setType(orderInfoVo.getType());
|
|
|
+ orderDetail.setExpNum(userOrderVo.getExpressNum());
|
|
|
+ orderDetail.setImage(userOrderVo.getImage());
|
|
|
+ orderDetail.setIsReceipt(false);
|
|
|
+ orderDetail.setPrice(userOrderVo.getPrice());
|
|
|
+ orderDetail.setPayPrice(orderDetail.getPrice().multiply(new BigDecimal(orderDetail.getExpNum().toString())));
|
|
|
+ if (orderDetail.getPayPrice().compareTo(BigDecimal.ZERO) < 0) {
|
|
|
+ throw new CrmebException("订单详情价格计算错误,详情价格不能小于0");
|
|
|
+ }
|
|
|
+ orderDetail.setType(orderInfoVo.getType());
|
|
|
+ orderDetail.setPostAddress(postOrder.getAddressDetail());
|
|
|
+ orderDetail.setPostName(postOrder.getPostName());
|
|
|
+ orderDetail.setPostPhone(postOrder.getPhone());
|
|
|
+ orderDetail.setPickUpCode(userOrderVo.getPickUpCode());
|
|
|
+ orderDetail.setExpressNo(userOrderVo.getExpressNo());
|
|
|
+ orderDetail.setExpressCompany(userOrderVo.getExpressCompany());
|
|
|
+ orderDetail.setSpec(userOrderVo.getSpec());
|
|
|
+ orderDetailList.add(orderDetail);
|
|
|
}
|
|
|
- orderDetail.setExpressInfo(userOrderVo.getExpressInfo());
|
|
|
- orderDetail.setSpecs(userOrderVo.getSpecId());
|
|
|
- orderDetailList.add(orderDetail);
|
|
|
}
|
|
|
Boolean execute = transactionTemplate.execute(e -> {
|
|
|
orderService.save(order);
|
|
@@ -289,6 +374,7 @@ public class FrontExpressOrderServiceImpl implements FrontExpressOrderService {
|
|
|
response.setPayPrice(order.getPayPrice());
|
|
|
return response;
|
|
|
}
|
|
|
+
|
|
|
/**
|
|
|
* 校验预下单商品信息
|
|
|
*
|
|
@@ -297,83 +383,123 @@ public class FrontExpressOrderServiceImpl implements FrontExpressOrderService {
|
|
|
*/
|
|
|
private PreExpressOrderInfoVo validatePreOrderRequest(PreExpressOrderRequest request, User user) {
|
|
|
PreExpressOrderInfoVo preOrderInfoVo = new PreExpressOrderInfoVo();
|
|
|
- UserAddress userAddress = null;
|
|
|
- UserExpressAddress userExpressAddress = null;
|
|
|
- if (ObjectUtil.isNull(request.getUserAddressId())) {
|
|
|
- throw new CrmebException(CommonResultCode.VALIDATE_FAILED, "请选择用户地址");
|
|
|
- }
|
|
|
- userAddress = userAddressService.getById(request.getUserAddressId());
|
|
|
- if (ObjectUtil.isNull(userAddress) || userAddress.getIsDel()) {
|
|
|
- throw new CrmebException(CommonResultCode.VALIDATE_FAILED, "用户地址有误");
|
|
|
- }
|
|
|
- if (ObjectUtil.isNull(request.getPostAddressId())) {
|
|
|
- throw new CrmebException(CommonResultCode.VALIDATE_FAILED, "请选择驿站地址");
|
|
|
- }
|
|
|
- userExpressAddress = userExpressAddressService.getById(request.getPostAddressId());
|
|
|
- if (ObjectUtil.isNull(userExpressAddress) || userExpressAddress.getIsDel()) {
|
|
|
- throw new CrmebException(CommonResultCode.VALIDATE_FAILED, "驿站地址有误");
|
|
|
- }
|
|
|
- List<PreExpressOrderInfoDetailVo> userOrderVoList = CollUtil.newArrayList();
|
|
|
+ List<PrePostOrderInfoVo> postOrderVoList = CollUtil.newArrayList();
|
|
|
+ postOrderVoList = validatePreOrder(request, user);
|
|
|
switch (request.getPreOrderType()) {
|
|
|
case "take":
|
|
|
- userOrderVoList = validatePreOrder(request, user);
|
|
|
preOrderInfoVo.setType(0);
|
|
|
break;
|
|
|
case "send":
|
|
|
- userOrderVoList = validatePreOrder(request, user);
|
|
|
preOrderInfoVo.setType(1);
|
|
|
break;
|
|
|
}
|
|
|
- if(ObjectUtil.isNull(request.getGiveTips())){
|
|
|
- request.setGiveTips(BigDecimal.ZERO);
|
|
|
- }
|
|
|
- BigDecimal proPrice = userOrderVoList.stream()
|
|
|
- .map(e -> {
|
|
|
- BigDecimal price;
|
|
|
- price = e.getPrice().multiply(new BigDecimal(e.getExpressNum()));
|
|
|
- return price;
|
|
|
- })
|
|
|
- .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ UserAddress userAddress=userAddressService.getById(request.getUserAddressId());
|
|
|
preOrderInfoVo.setUserPhone(userAddress.getPhone());
|
|
|
- preOrderInfoVo.setProTotalFee(proPrice);
|
|
|
- preOrderInfoVo.setGiveTips(BigDecimal.ZERO);
|
|
|
- preOrderInfoVo.setPostAddressId(request.getPostAddressId());
|
|
|
preOrderInfoVo.setUserAddressId(request.getUserAddressId());
|
|
|
preOrderInfoVo.setUserId(user.getId());
|
|
|
preOrderInfoVo.setUserName(user.getRealName());
|
|
|
- preOrderInfoVo.setUserOrderVoList(userOrderVoList);
|
|
|
+ preOrderInfoVo.setUserBalance(user.getNowMoney());
|
|
|
+ preOrderInfoVo.setPostOrderList(postOrderVoList);
|
|
|
+ BigDecimal proTotalFee=BigDecimal.ZERO;
|
|
|
+ BigDecimal orderNum=BigDecimal.ZERO;
|
|
|
+ for(PrePostOrderInfoVo prePostOrderInfoVo:postOrderVoList) {
|
|
|
+ proTotalFee = prePostOrderInfoVo.getOrderInfoList().stream()
|
|
|
+ .map(e -> {
|
|
|
+ BigDecimal price;
|
|
|
+ price = e.getPrice().multiply(new BigDecimal(e.getExpressNum()));
|
|
|
+ return price;
|
|
|
+ }).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ orderNum = prePostOrderInfoVo.getOrderInfoList().stream()
|
|
|
+ .map(e -> {
|
|
|
+ BigDecimal orderProNum;
|
|
|
+ orderProNum = new BigDecimal(e.getExpressNum());
|
|
|
+ return orderProNum;
|
|
|
+ }).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ }
|
|
|
+ preOrderInfoVo.setProTotalFee(proTotalFee);
|
|
|
+ preOrderInfoVo.setPayFee(proTotalFee);
|
|
|
+ preOrderInfoVo.setOrderProNum(orderNum.intValue());
|
|
|
+ preOrderInfoVo.setPreOrderNo(request.getPreOrderNo());
|
|
|
return preOrderInfoVo;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 基础商品校验
|
|
|
*/
|
|
|
- private PreExpressOrderInfoDetailVo validatePreOrderBase(PreExpressOrderDetailRequest detailRequest) {
|
|
|
- if (ObjectUtil.isNull(detailRequest.getExpressInfo())) {
|
|
|
- throw new CrmebException(CommonResultCode.VALIDATE_FAILED, "取件信息不能为空");
|
|
|
+ private PrePostOrderInfoVo validatePreOrderBase(PreExpressOrderDetailRequest detailRequest) {
|
|
|
+ if (ObjectUtil.isNull(detailRequest.getPickUpCode())) {
|
|
|
+ throw new CrmebException(CommonResultCode.VALIDATE_FAILED, "取件码不能为空");
|
|
|
+ }
|
|
|
+ if (ObjectUtil.isNull(detailRequest.getExpressCompany())) {
|
|
|
+ throw new CrmebException(CommonResultCode.VALIDATE_FAILED, "快递公司不能为空");
|
|
|
}
|
|
|
- if (ObjectUtil.isNull(detailRequest.getExpressNum())|| detailRequest.getExpressNum()<0) {
|
|
|
- throw new CrmebException(CommonResultCode.VALIDATE_FAILED, "取件数量不能为空");
|
|
|
+ if (ObjectUtil.isNull(detailRequest.getExpressNo())) {
|
|
|
+ throw new CrmebException(CommonResultCode.VALIDATE_FAILED, "快递单号不能为空");
|
|
|
}
|
|
|
- if (ObjectUtil.isNull(detailRequest.getSepec())) {
|
|
|
+ if (ObjectUtil.isNull(detailRequest.getSpec())) {
|
|
|
throw new CrmebException(CommonResultCode.VALIDATE_FAILED, "规格不能为空");
|
|
|
}
|
|
|
// 构造PreExpressOrderInfoDetailVo对象
|
|
|
- PreExpressOrderInfoDetailVo orderVo = new PreExpressOrderInfoDetailVo();
|
|
|
- BigDecimal payPrice = detailRequest.getPrice().multiply(new BigDecimal(detailRequest.getExpressNum()));
|
|
|
- orderVo.setPayPrice(payPrice);
|
|
|
- BeanUtils.copyProperties(detailRequest,orderVo);
|
|
|
- return orderVo;
|
|
|
+ UserExpressAddress userExpressAddress= userExpressAddressService.getById(detailRequest.getPostAddressId());
|
|
|
+ PrePostOrderInfoVo postOrderVo=new PrePostOrderInfoVo();
|
|
|
+ postOrderVo.setPostAddressId(detailRequest.getPostAddressId());
|
|
|
+ postOrderVo.setPostName(userExpressAddress.getExpressName());
|
|
|
+ postOrderVo.setPhone(userExpressAddress.getPhone());
|
|
|
+ postOrderVo.setAddressDetail(userExpressAddress.getDetail());
|
|
|
+ List<PreExpressOrderInfoDetailVo> infoList = CollUtil.newArrayList();
|
|
|
+ PreExpressOrderInfoDetailVo detailVo = new PreExpressOrderInfoDetailVo();//
|
|
|
+ BeanUtils.copyProperties(detailRequest,detailVo);
|
|
|
+ detailVo.setExpressId("EXP"+CrmebDateUtil.getNowTime().toString()+CrmebUtil.getUuid());
|
|
|
+ detailVo.setImage(systemAttachmentService.clearPrefix(detailRequest.getImage()));
|
|
|
+ infoList.add(detailVo);
|
|
|
+ postOrderVo.setOrderInfoList(infoList);
|
|
|
+ //BigDecimal payPrice = detailRequest.getPrice().multiply(new BigDecimal(detailRequest.getExpressNum()));
|
|
|
+ //orderVo.setPayPrice(payPrice);
|
|
|
+ return postOrderVo;
|
|
|
}
|
|
|
|
|
|
- private List<PreExpressOrderInfoDetailVo> validatePreOrder(PreExpressOrderRequest request, User user) {
|
|
|
- List<PreExpressOrderInfoDetailVo> userOrderVoList = CollUtil.newArrayList();
|
|
|
+ private List<PrePostOrderInfoVo> validatePreOrder(PreExpressOrderRequest request, User user) {
|
|
|
+ List<PrePostOrderInfoVo> postOrderVoList = CollUtil.newArrayList();
|
|
|
request.getOrderDetails().forEach(e -> {
|
|
|
- PreExpressOrderInfoDetailVo userOrderVo = validatePreOrderBase(e);
|
|
|
- userOrderVoList.add(userOrderVo);
|
|
|
+ PrePostOrderInfoVo postOrderVo = validatePreOrderBase(e);
|
|
|
+ if (postOrderVoList.stream().anyMatch(m -> m.getPostAddressId().equals(postOrderVo.getPostAddressId()))) {
|
|
|
+ for (PrePostOrderInfoVo orderVo : postOrderVoList) {
|
|
|
+ if (orderVo.getPostAddressId().toString().equals(postOrderVo.getPostAddressId().toString())) {
|
|
|
+ orderVo.getOrderInfoList().addAll(postOrderVo.getOrderInfoList());
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ postOrderVoList.add(postOrderVo);
|
|
|
+ }
|
|
|
});
|
|
|
- return userOrderVoList;
|
|
|
+ return postOrderVoList;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
+ /**
|
|
|
+ * 移动端订单详情
|
|
|
+ *
|
|
|
+ * @param orderNo 订单编号
|
|
|
+ * @return OrderFrontDetailResponse
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public ExpressOrderFrontDetailResponse frontDetail(String orderNo) {
|
|
|
+ User currentUser = userService.getInfo();
|
|
|
+ ExpressOrder order = orderService.getByOrderNo(orderNo);
|
|
|
+ if (order.getIsUserDel() || !order.getUid().equals(currentUser.getId())) {
|
|
|
+ throw new CrmebException(OrderResultCode.ORDER_NOT_EXIST);
|
|
|
+ }
|
|
|
+ ExpressOrderFrontDetailResponse response = new ExpressOrderFrontDetailResponse();
|
|
|
+ BeanUtils.copyProperties(order, response);
|
|
|
+ if (!order.getPaid()) {
|
|
|
+ DateTime cancelTime = DateUtil.offset(order.getCreateTime(), DateField.MINUTE, crmebConfig.getOrderCancelTime());
|
|
|
+ response.setCancelTime(cancelTime.getTime());
|
|
|
+ // 返回订单过期时间 2025-02-12
|
|
|
+ if (redisUtil.exists(StrUtil.format(RedisConstants.ORDER_EXPIRE_TIME, order.getOrderNo()))) {
|
|
|
+ String expireTime = redisUtil.get(StrUtil.format(RedisConstants.ORDER_EXPIRE_TIME, order.getOrderNo()));
|
|
|
+ response.setExpirationTime(expireTime);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return response;
|
|
|
+ }
|
|
|
}
|