对接支付

This commit is contained in:
2025-07-17 14:59:18 +08:00
parent 64c4180e4d
commit fd66448f4d
3 changed files with 70 additions and 1 deletions

View File

@@ -26,5 +26,6 @@ public class OrderItemEntity {
* 商品ID,goods_type=1关联video.id,=2关联source.id
*/
private Long goodsId;
private int count = 1;
}

View File

@@ -68,6 +68,9 @@ public class WxMpPayAdapter implements IPayAdapter {
public WxMpPayAdapter(WxMpPayConfig config) {
this.config = config;
}
public WxMpPayConfig _config() {
return config;
}
@Override
public void loadConfig(Map<String, String> _config) {
this.config = new WxMpPayConfig();

View File

@@ -1,21 +1,42 @@
package com.ycwl.basic.service.aio.impl;
import com.wechat.pay.java.service.payments.nativepay.NativePayService;
import com.wechat.pay.java.service.payments.nativepay.model.Amount;
import com.wechat.pay.java.service.payments.nativepay.model.PrepayRequest;
import com.wechat.pay.java.service.payments.nativepay.model.PrepayResponse;
import com.ycwl.basic.enums.OrderStateEnum;
import com.ycwl.basic.exception.BaseException;
import com.ycwl.basic.mapper.AioDeviceMapper;
import com.ycwl.basic.mapper.OrderMapper;
import com.ycwl.basic.model.aio.entity.AioDeviceEntity;
import com.ycwl.basic.model.aio.entity.AioDevicePriceConfigEntity;
import com.ycwl.basic.model.aio.req.AioDeviceCreateOrderReq;
import com.ycwl.basic.model.aio.resp.AioDeviceCreateOrderResp;
import com.ycwl.basic.model.pc.face.entity.FaceEntity;
import com.ycwl.basic.model.pc.order.entity.OrderEntity;
import com.ycwl.basic.model.pc.order.entity.OrderItemEntity;
import com.ycwl.basic.pay.adapter.IPayAdapter;
import com.ycwl.basic.pay.adapter.WxMpPayAdapter;
import com.ycwl.basic.repository.FaceRepository;
import com.ycwl.basic.service.aio.AioDeviceService;
import com.ycwl.basic.service.pc.ScenicService;
import com.ycwl.basic.utils.SnowFlakeUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.List;
@Service
public class AioDeviceServiceImpl implements AioDeviceService {
@Autowired
private AioDeviceMapper aioDeviceMapper;
@Autowired
private ScenicService scenicService;
@Autowired
private FaceRepository faceRepository;
@Autowired
private OrderMapper orderMapper;
@Override
public AioDeviceCreateOrderResp createOrder(AioDeviceEntity aioDevice, AioDeviceCreateOrderReq req) {
@@ -27,9 +48,53 @@ public class AioDeviceServiceImpl implements AioDeviceService {
if (req.getItems() == null || req.getItems().isEmpty()) {
throw new BaseException("请选择商品");
}
FaceEntity face = faceRepository.getFace(req.getFaceId());
if (face == null) {
throw new BaseException("请选择人脸");
}
int sum = req.getItems().stream().mapToInt(AioDeviceCreateOrderReq.AioDeviceOrderItem::getCount).sum();
BigDecimal totalPrice = config.getEachPrice().multiply(new BigDecimal(sum));
OrderEntity order = new OrderEntity();
Long orderId = SnowFlakeUtil.getLongId();
order.setId(orderId);
order.setMemberId(face.getMemberId());
order.setFaceId(face.getId());
order.setScenicId(face.getScenicId());
order.setType(0);
List<OrderItemEntity> orderItems = req.getItems().stream().map(item -> {
OrderItemEntity orderItem = new OrderItemEntity();
orderItem.setOrderId(orderId);
orderItem.setGoodsId(item.getGoodsId());
orderItem.setGoodsType(4);
if (item.getCount() == null) {
item.setCount(1);
}
orderItem.setCount(item.getCount());
return orderItem;
}).toList();
order.setSlashPrice(totalPrice);
order.setPrice(totalPrice);
order.setPayPrice(totalPrice);
order.setStatus(OrderStateEnum.UNPAID.getState());
orderMapper.add(order);
int addOrderItems = orderMapper.addOrderItems(orderItems);
// 支付
return null;
IPayAdapter scenicPayAdapter = scenicService.getScenicPayAdapter(aioDevice.getScenicId());
AioDeviceCreateOrderResp resp = new AioDeviceCreateOrderResp();
if (scenicPayAdapter instanceof WxMpPayAdapter adapter) {
NativePayService service = new NativePayService.Builder().config(adapter.getConfig()).build();
PrepayRequest request = new PrepayRequest();
request.setAppid(adapter._config().getAppId());
request.setMchid(adapter._config().getMerchantId());
request.setDescription("打印订单");
request.setOutTradeNo(SnowFlakeUtil.getId());
request.setNotifyUrl("https://zhentuai.com/api/mobile/wx/pay/v1/"+aioDevice.getScenicId()+"/payNotify");
Amount amount = new Amount();
amount.setTotal(totalPrice.multiply(new BigDecimal(100)).intValue());
request.setAmount(amount);
PrepayResponse response = service.prepay(request);
resp.setPayCode(response.getCodeUrl());
}
return resp;
}
}