You've already forked FrameTour-BE
对接支付
This commit is contained in:
@@ -26,5 +26,6 @@ public class OrderItemEntity {
|
|||||||
* 商品ID,goods_type=1关联video.id,=2关联source.id
|
* 商品ID,goods_type=1关联video.id,=2关联source.id
|
||||||
*/
|
*/
|
||||||
private Long goodsId;
|
private Long goodsId;
|
||||||
|
private int count = 1;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -68,6 +68,9 @@ public class WxMpPayAdapter implements IPayAdapter {
|
|||||||
public WxMpPayAdapter(WxMpPayConfig config) {
|
public WxMpPayAdapter(WxMpPayConfig config) {
|
||||||
this.config = config;
|
this.config = config;
|
||||||
}
|
}
|
||||||
|
public WxMpPayConfig _config() {
|
||||||
|
return config;
|
||||||
|
}
|
||||||
@Override
|
@Override
|
||||||
public void loadConfig(Map<String, String> _config) {
|
public void loadConfig(Map<String, String> _config) {
|
||||||
this.config = new WxMpPayConfig();
|
this.config = new WxMpPayConfig();
|
||||||
|
@@ -1,21 +1,42 @@
|
|||||||
package com.ycwl.basic.service.aio.impl;
|
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.exception.BaseException;
|
||||||
import com.ycwl.basic.mapper.AioDeviceMapper;
|
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.AioDeviceEntity;
|
||||||
import com.ycwl.basic.model.aio.entity.AioDevicePriceConfigEntity;
|
import com.ycwl.basic.model.aio.entity.AioDevicePriceConfigEntity;
|
||||||
import com.ycwl.basic.model.aio.req.AioDeviceCreateOrderReq;
|
import com.ycwl.basic.model.aio.req.AioDeviceCreateOrderReq;
|
||||||
import com.ycwl.basic.model.aio.resp.AioDeviceCreateOrderResp;
|
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.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.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class AioDeviceServiceImpl implements AioDeviceService {
|
public class AioDeviceServiceImpl implements AioDeviceService {
|
||||||
@Autowired
|
@Autowired
|
||||||
private AioDeviceMapper aioDeviceMapper;
|
private AioDeviceMapper aioDeviceMapper;
|
||||||
|
@Autowired
|
||||||
|
private ScenicService scenicService;
|
||||||
|
@Autowired
|
||||||
|
private FaceRepository faceRepository;
|
||||||
|
@Autowired
|
||||||
|
private OrderMapper orderMapper;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public AioDeviceCreateOrderResp createOrder(AioDeviceEntity aioDevice, AioDeviceCreateOrderReq req) {
|
public AioDeviceCreateOrderResp createOrder(AioDeviceEntity aioDevice, AioDeviceCreateOrderReq req) {
|
||||||
@@ -27,9 +48,53 @@ public class AioDeviceServiceImpl implements AioDeviceService {
|
|||||||
if (req.getItems() == null || req.getItems().isEmpty()) {
|
if (req.getItems() == null || req.getItems().isEmpty()) {
|
||||||
throw new BaseException("请选择商品");
|
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();
|
int sum = req.getItems().stream().mapToInt(AioDeviceCreateOrderReq.AioDeviceOrderItem::getCount).sum();
|
||||||
BigDecimal totalPrice = config.getEachPrice().multiply(new BigDecimal(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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user