From 044a57d2133b2363a6f0d3d167b3eaa587c70b91 Mon Sep 17 00:00:00 2001 From: xin <1099200748@qq.com> Date: Thu, 31 Jul 2025 17:18:47 +0800 Subject: [PATCH] Merge branch 'pxb' into xin --- oying-system/src/main/java/com/oying/modules/sh/service/impl/OrderServiceImpl.java | 94 ++++++++++++++++++++++++++++++----------------- 1 files changed, 60 insertions(+), 34 deletions(-) diff --git a/oying-system/src/main/java/com/oying/modules/sh/service/impl/OrderServiceImpl.java b/oying-system/src/main/java/com/oying/modules/sh/service/impl/OrderServiceImpl.java index be09c2c..7a4cefa 100644 --- a/oying-system/src/main/java/com/oying/modules/sh/service/impl/OrderServiceImpl.java +++ b/oying-system/src/main/java/com/oying/modules/sh/service/impl/OrderServiceImpl.java @@ -8,20 +8,19 @@ import com.oying.modules.pc.product.domain.enums.ProductStatusEnum; import com.oying.modules.pc.product.service.ProductService; import com.oying.modules.pc.store.domain.Store; +import com.oying.modules.pc.store.domain.enums.StoreStatusEnum; import com.oying.modules.pc.store.service.StoreService; import com.oying.modules.sh.domain.*; import com.oying.modules.sh.domain.request.GeneratorOrder; import com.oying.modules.sh.domain.request.ProductOrder; +import com.oying.modules.sh.domain.request.StatusOrder; import com.oying.modules.sh.domain.request.SubmitOrder; import com.oying.modules.sh.domain.vo.OrderInfo; import com.oying.modules.sh.domain.vo.OrderResponse; import com.oying.modules.sh.domain.vo.ProductInfo; import com.oying.modules.sh.service.*; import com.oying.utils.*; -import com.oying.utils.enums.GenerateEnum; -import com.oying.utils.enums.OrderStatusEnum; -import com.oying.utils.enums.PayStateEnum; -import com.oying.utils.enums.PayTypeEnum; +import com.oying.utils.enums.*; import lombok.RequiredArgsConstructor; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -80,13 +79,21 @@ default: throw new BadRequestException("支付类型暂未开放"); } - String orderNum = redisUtils.generateOrderSn(GenerateEnum.ORDER.getKey()); - // 总金额 - BigDecimal amount = BigDecimal.ZERO; GeneratorOrder generator = new GeneratorOrder(); generator.setProducts(submit.getProducts()); generator.setStoreId(submit.getStoreId()); OrderInfo info = generatorOrder(generator); + Store store = info.getStore(); + UserAddress address = userAddressService.getById(submit.getAddressId(), store.getLongitude(), store.getLatitude()); + if (address == null) { + throw new BadRequestException("没找到用户地址"); + } + if (!(address.getDistance().compareTo(BigDecimal.valueOf(store.getRadius())) <= 0)) { + throw new BadRequestException("超出配送范围"); + } + String orderNum = redisUtils.generateOrderSn(GenerateEnum.ORDER.getKey()); + // 总金额 + BigDecimal amount = BigDecimal.ZERO; // 商品快照 List<OrderProductSnapshot> snapshots = new ArrayList<>(); for (ProductInfo productInfo : info.getProducts()) { @@ -118,12 +125,6 @@ if (openid == null || openid.isEmpty()) { throw new BadRequestException("OPENID错误"); } - - // 门店信息 - Store store = storeService.getById(submit.getStoreId()); - if (amount.compareTo(store.getDeliveryMinimum()) >= 0) { - throw new BadRequestException("起送金额:" + store.getDeliveryMinimum()); - } // 订单信息 Order order = new Order(); order.setOrderNum(orderNum); @@ -132,12 +133,16 @@ order.setOrderStatusDescribe(OrderStatusEnum.ZERO.getValue()); order.setOrderRemark(submit.getRemark() != null ? submit.getRemark() : ""); order.setOrderTime(submit.getDateTime()); + order.setSendPrice(store.getDeliveryFee()); + order.setSendType(SendTypeEnum.LY.getKey()); order.setUserId(SecurityUtils.getCurrentUserId()); order.setUsername(SecurityUtils.getCurrentUsername()); order.setStoreId(submit.getStoreId()); order.setStoreName(store.getStoreName()); order.setStoreLogo(store.getLogoImageUrl()); - order.setSendPrice(store.getDeliveryFee()); + order.setStoreAddress(store.getAddress()); + order.setStoreLongitude(BigDecimal.valueOf(store.getLongitude())); + order.setStoreLatitude(BigDecimal.valueOf(store.getLatitude())); order.setOrderDescribe(DESCRIBE + submit.getStoreId()); order.setOriginalPrice(amount); order.setPaidPrice(amount); @@ -165,15 +170,18 @@ order.setPayMessage(PayStateEnum.SUCCESS.getValue()); order.setPayTime(DateUtil.localDateTimeFormat(now.toLocalDateTime(), DateUtil.SDF_YMDHMS)); } - UserAddress address = userAddressService.getById(submit.getAddressId()); + OrderAddressSnapshot addressSnapshot = getOrderAddressSnapshot(orderNum, address); + addressSnapshotService.save(addressSnapshot); orderMapper.insert(order); productSnapshotService.saveBatch(snapshots); order.setProductSnapshots(new HashSet<>(snapshots)); - operationLogService.create(order, addressSnapshot); + OrderResponse response = new OrderResponse(order, addressSnapshot, null); + + operationLogService.create(response, OrderStatusEnum.ZERO, null); return order; } @@ -197,6 +205,11 @@ @Override @Transactional(rollbackFor = Exception.class) public synchronized OrderInfo generatorOrder(GeneratorOrder criteria) { + // 门店信息 + Store store = storeService.getById(criteria.getStoreId()); + if (!store.getBusinessStatus().equals(StoreStatusEnum.OPEN.getValue())) { + throw new BadRequestException("停止营业"); + } List<ProductInfo> products = new ArrayList<>(); BigDecimal amount = BigDecimal.ZERO; for (ProductOrder productOrder : criteria.getProducts()) { @@ -224,29 +237,37 @@ products.add(info); amount = BigDecimalUtils.add(amount, BigDecimalUtils.multiply(product.getPrice(), productOrder.getCount())); } + if (!(amount.compareTo(store.getDeliveryMinimum()) >= 0)) { + throw new BadRequestException("起送金额:" + store.getDeliveryMinimum()); + } OrderInfo info = new OrderInfo(); + info.setStore(store); info.setProducts(products); info.setAmount(amount); info.setPayAmount(amount); info.setPromotionAmount(BigDecimal.ZERO); - info.setUserAddresses(userAddressService.queryUserAddress()); + info.setUserAddresses(userAddressService.queryUserAddress(store.getLongitude(), store.getLatitude())); return info; } @Override @Transactional(rollbackFor = Exception.class) - public OrderResponse getByOrderNum(String orderNum) { - OrderResponse response = new OrderResponse(); - response.setOrder(orderMapper.getByOrderNum(orderNum)); - response.setAddress(addressSnapshotService.queryByOrderNum(orderNum)); - response.setOperation(operationLogService.getByOrderNum(orderNum)); - return response; + public void statusOrder(StatusOrder statusOrder) { + operationLog(getByOrderNum(statusOrder.getOrderNum()), statusOrder.getStatus(), null); } @Override @Transactional(rollbackFor = Exception.class) - public void paySuccess(OrderResponse order) { - orderMapper.updateOrderStatus(order.getOrder().getOrderNum(), OrderStatusEnum.TWO.getKey(), OrderStatusEnum.TWO.getValue()); + public OrderResponse getByOrderNum(String orderNum) { + return new OrderResponse(orderMapper.getByOrderNum(orderNum), + addressSnapshotService.queryByOrderNum(orderNum), + operationLogService.getByOrderNum(orderNum)); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void operationLog(OrderResponse order, OrderStatusEnum stateEnum, String cardName) { + operationLogService.create(order, stateEnum, cardName); } @Override @@ -257,26 +278,31 @@ @Override @Transactional(rollbackFor = Exception.class) - public void closeOrder(String orderNum) { - Order order = orderMapper.getByOrderNum(orderNum); + public synchronized void cancel(String orderNum) { + OrderResponse response = getByOrderNum(orderNum); + Order order = response.getOrder(); if (order == null) { throw new BadRequestException("订单不存在"); + } + if (!SecurityUtils.getCurrentUserId().equals(order.getUserId())) { + throw new BadRequestException("不能修改他人订单"); + } + if (!order.getPayState().equals(PayStateEnum.NOTPAY.getKey())) { + throw new BadRequestException(PayStateEnum.getValue(order.getPayState())); } PayTypeEnum anEnum = PayTypeEnum.find(order.getPayType()); switch (anEnum) { case HWC: case HWC2: JSONObject object = swiftPassService.query(orderNum, anEnum); - if (object.getString("trade_state").equals(PayStateEnum.SUCCESS.getKey())) { - throw new BadRequestException("订单已支付"); - } - if (object.getString("trade_state").equals(PayStateEnum.CLOSED.getKey())) { - throw new BadRequestException("订单已关闭"); + if (object.getString("trade_state").equals(PayStateEnum.NOTPAY.getKey())) { + throw new BadRequestException(PayStateEnum.getValue(order.getPayState())); } swiftPassService.closeOrder(orderNum, anEnum); break; } - orderMapper.updateCloseStatus(orderNum, PayStateEnum.CLOSED.getKey()); + operationLogService.create(response, OrderStatusEnum.NINE, null); + orderMapper.updateCloseStatus(orderNum, PayStateEnum.CLOSED.getKey(), PayStateEnum.CLOSED.getValue()); } @Override @@ -317,7 +343,7 @@ map.put("消息", order.getPayMessage()); map.put("支付类型", order.getPayType()); map.put("支付时间", order.getPayTime()); - map.put("订单失效时间RFC3339", order.getExpireTime()); + map.put("订单失效时间", order.getExpireTime()); map.put("openid", order.getOpenid()); map.put("APPID", order.getAppId()); map.put("创建人", order.getCreateBy()); -- Gitblit v1.9.3