From 641f40f0712a96998b07202690ac5259b51e9d72 Mon Sep 17 00:00:00 2001 From: xin <1099200748@qq.com> Date: Fri, 11 Jul 2025 18:18:35 +0800 Subject: [PATCH] 商户类型 --- oying-system/src/main/java/com/oying/modules/sh/service/impl/OrderServiceImpl.java | 138 +++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 130 insertions(+), 8 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 fa8fdea..243f9ea 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 @@ -2,21 +2,28 @@ import com.alibaba.fastjson2.JSONObject; import com.oying.exception.BadRequestException; +import com.oying.modules.hwc.domain.HwcResponse; import com.oying.modules.hwc.service.SwiftPassService; import com.oying.modules.pc.product.domain.Product; 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.service.StoreService; import com.oying.modules.sh.domain.Order; +import com.oying.modules.sh.domain.OrderAddressSnapshot; import com.oying.modules.sh.domain.OrderProductSnapshot; +import com.oying.modules.sh.domain.UserAddress; import com.oying.modules.sh.domain.request.GeneratorOrder; import com.oying.modules.sh.domain.request.ProductOrder; import com.oying.modules.sh.domain.request.SubmitOrder; import com.oying.modules.sh.domain.vo.OrderInfo; import com.oying.modules.sh.domain.vo.ProductInfo; +import com.oying.modules.sh.service.OrderAddressSnapshotService; import com.oying.modules.sh.service.OrderProductSnapshotService; import com.oying.modules.sh.service.UserAddressService; 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 lombok.RequiredArgsConstructor; @@ -49,11 +56,17 @@ private final ProductService productService; private final SwiftPassService swiftPassService; private final OrderProductSnapshotService productSnapshotService; + private final OrderAddressSnapshotService addressSnapshotService; private final RedisUtils redisUtils; + private final StoreService storeService; + private final static String DESCRIBE = "哦应:"; @Override public PageResult<Order> queryAll(OrderQueryCriteria criteria, Page<Object> page) { - return PageUtil.toPage(orderMapper.findAll(criteria, page)); + criteria.setOffset(page.offset()); + List<Order> list = orderMapper.findAll(criteria); + Long total = orderMapper.countAll(criteria); + return PageUtil.toPage(list, total); } @Override @@ -64,8 +77,12 @@ @Override @Transactional(rollbackFor = Exception.class) public synchronized Order submitOrder(SubmitOrder submit, HttpServletRequest request) { - if (!submit.getPayType().equals(PayTypeEnum.HWC)) { - throw new BadRequestException("支付类型暂未开放"); + switch (submit.getPayType()) { + case HWC: + case HWC2: + break; + default: + throw new BadRequestException("支付类型暂未开放"); } String orderNum = redisUtils.generateOrderSn(GenerateEnum.ORDER.getKey()); // 总金额 @@ -76,7 +93,6 @@ OrderInfo info = generatorOrder(generator); // 商品快照 List<OrderProductSnapshot> snapshots = new ArrayList<>(); - for (ProductInfo productInfo : info.getProducts()) { Product product = productInfo.getProduct(); OrderProductSnapshot snapshot = new OrderProductSnapshot(); @@ -98,12 +114,77 @@ snapshot.setPayState(PayStateEnum.NOTPAY.getKey()); snapshots.add(snapshot); } + Timestamp now = DateUtil.getTimeStamp(); // 下单后30分钟失效 - Timestamp time = DateUtil.addMinute(DateUtil.getTimeStamp(), 30); + Timestamp time = DateUtil.addMinute(now, 30); String expire = DateUtil.localDateTimeFormat(time.toLocalDateTime(), DateUtil.SDF_YMDHMS); - swiftPassService.pay(StringUtils.getIp(request), BigDecimalUtils.yuanToCents(amount).toString(), expire,SecurityUtils.getCurrentUserId()); + String openid = SecurityUtils.getCurrentOpenid(); + if (openid == null || openid.isEmpty()) { + throw new BadRequestException("OPENID错误"); + } + // 订单信息 + Order order = new Order(); + order.setOrderNum(orderNum); + order.setOrderStatus(OrderStatusEnum.ZERO.getKey()); + order.setOrderStatusDescribe(OrderStatusEnum.ZERO.getValue()); + order.setOrderRemark(submit.getRemark() != null ? submit.getRemark() : ""); + order.setOrderTime(submit.getDateTime()); + order.setUserId(SecurityUtils.getCurrentUserId()); + order.setUsername(SecurityUtils.getCurrentUsername()); + Store store = storeService.getById(submit.getStoreId()); + order.setStoreId(submit.getStoreId()); + order.setStoreName(store.getStoreName()); + order.setStoreLogo(store.getLogoImageUrl()); + order.setOrderDescribe(DESCRIBE + submit.getStoreId()); + order.setOriginalPrice(amount); + order.setPaidPrice(amount); + order.setActuallyPayPrice(amount); + order.setOpenid(openid); + order.setPayType(submit.getPayType().getKey()); + order.setExpireTime(expire); + order.setOpenid(openid); + Long total = BigDecimalUtils.yuanToCents(amount); + if (total > 0) { + HwcResponse response = swiftPassService.pay(StringUtils.getIp(request), total.toString(), expire, + DESCRIBE + submit.getStoreId(), openid, orderNum, submit.getPayType()); + //微信支付下单放回值 + order.setAppId(response.getAppId()); + order.setTimestamp(response.getTimeStamp()); + order.setNonceStr(response.getNonceStr()); + order.setPackageVal(response.getPackageVal()); + order.setSignType(response.getSignType()); + order.setPaySign(response.getPaySign()); + order.setPayState(PayStateEnum.NOTPAY.getKey()); + order.setPayMessage(PayStateEnum.NOTPAY.getValue()); + order.setPayTime(null); + } else { + order.setPayState(PayStateEnum.SUCCESS.getKey()); + order.setPayMessage(PayStateEnum.SUCCESS.getValue()); + order.setPayTime(DateUtil.localDateTimeFormat(now.toLocalDateTime(), DateUtil.SDF_YMDHMS)); + } + UserAddress address = userAddressService.getById(submit.getAddressId()); + OrderAddressSnapshot snapshot = getOrderAddressSnapshot(orderNum, address); + addressSnapshotService.save(snapshot); + orderMapper.insert(order); productSnapshotService.saveBatch(snapshots); - return null; + return order; + } + + private static OrderAddressSnapshot getOrderAddressSnapshot(String orderNum, UserAddress address) { + OrderAddressSnapshot snapshot = new OrderAddressSnapshot(); + snapshot.setOrderNum(orderNum); + snapshot.setReceiverName(address.getReceiverName()); + snapshot.setReceiverPhone(address.getReceiverPhone()); + snapshot.setProvince(address.getProvince() != null ? address.getProvince() : ""); + snapshot.setCity(address.getCity() != null ? address.getCity() : ""); + snapshot.setDistrict(address.getDistrict() != null ? address.getDistrict() : ""); + snapshot.setStreet(address.getStreet() != null ? address.getStreet() : ""); + snapshot.setShortAddress(address.getShortAddress()); + snapshot.setDetail(address.getDetail()); + snapshot.setLongitude(address.getLongitude()); + snapshot.setLatitude(address.getLatitude()); + snapshot.setTag(address.getTag()); + return snapshot; } @Override @@ -116,7 +197,7 @@ if (product == null) { throw new BadRequestException("商品不存在"); } - if (product.getStoreId().equals(criteria.getStoreId())) { + if (!product.getStoreId().equals(criteria.getStoreId())) { throw new BadRequestException("不支持跨门店下单"); } if (!product.getStatus().equals(ProductStatusEnum.AVAILABLE.getValue())) { @@ -147,6 +228,47 @@ @Override @Transactional(rollbackFor = Exception.class) + public Order getByOrderNum(String orderNum) { + return orderMapper.getByOrderNum(orderNum); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void paySuccess(Order order) { + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void updatePayStatus(String orderNum, PayStateEnum payState, String payMessage, String payTime) { + orderMapper.updatePayStatus(orderNum, payState.getKey(), payMessage, payTime); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void closeOrder(String orderNum) { + Order order = getByOrderNum(orderNum); + if (order == null) { + throw new BadRequestException("订单不存在"); + } + 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("订单已关闭"); + } + swiftPassService.closeOrder(orderNum, anEnum); + break; + } + orderMapper.updateCloseStatus(orderNum, PayStateEnum.CLOSED.getKey()); + } + + @Override + @Transactional(rollbackFor = Exception.class) public void create(Order resources) { orderMapper.insert(resources); } -- Gitblit v1.9.3