refactor(order): 重构订单模块
- 新增 SaveOrderBO 和 SaveOrderSkuItemBO 类用于生成订单 - 修改订单接口和实现类,支持新的订单生成逻辑 - 优化订单详情和订单项的数据结构 - 更新相关包名和类名以适应新的模块结构
This commit is contained in:
parent
b9b7d66549
commit
81b8b959aa
@ -16,6 +16,7 @@ import com.wzj.soopin.order.domain.bo.OrderBo;
|
||||
import com.wzj.soopin.order.domain.entity.Order;
|
||||
import com.wzj.soopin.order.domain.vo.OrderVO;
|
||||
import com.wzj.soopin.order.service.OrderItemService;
|
||||
import com.wzj.soopin.order.service.OrderService;
|
||||
import com.wzj.soopin.order.service.impl.OrderServiceImpl;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
@ -45,7 +46,7 @@ import static com.wzj.soopin.content.domain.base.BaseInfoProperties.*;
|
||||
@RequiredArgsConstructor
|
||||
public class AppOrderController {
|
||||
|
||||
private final OrderServiceImpl orderService;
|
||||
private final OrderService orderService;
|
||||
|
||||
private final OrderItemService orderItemService;
|
||||
|
||||
@ -61,16 +62,16 @@ public class AppOrderController {
|
||||
@Log(title = "订单表", businessType = BusinessType.INSERT)
|
||||
@PostMapping("/add")
|
||||
public R add(@RequestBody Order order) {
|
||||
R<Order> result = orderService.insert(order);
|
||||
|
||||
if (result != null) {
|
||||
// 订单创建成功,发送消息
|
||||
// R<Order> result = orderService.insert(order);
|
||||
//
|
||||
// if (result != null) {
|
||||
// // 订单创建成功,发送消息
|
||||
// orderService.sendMessage(order);
|
||||
log.info("订单创建成功,消息已发送,订单ID: {}", order.getId());
|
||||
} else {
|
||||
log.warn("订单创建失败: {}", "返回结果为null");
|
||||
}
|
||||
return result;
|
||||
// log.info("订单创建成功,消息已发送,订单ID: {}", order.getId());
|
||||
// } else {
|
||||
// log.warn("订单创建失败: {}", "返回结果为null");
|
||||
// }
|
||||
return R.fail("接口改造中");
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -195,6 +195,7 @@ public class Constants
|
||||
public static final Integer NO_PAY = 0;
|
||||
public static final Integer ALIPAY = 1;
|
||||
public static final Integer WECHAT = 2;
|
||||
public static final Integer UNION = 3;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -55,7 +55,7 @@ public class SecurityConfig implements WebMvcConfigurer {
|
||||
HttpServletRequest request = ServletUtils.getRequest();
|
||||
// 检查是否登录 是否有token
|
||||
try {
|
||||
// StpUtil.checkLogin();
|
||||
StpUtil.checkLogin();
|
||||
} catch (NotLoginException e) {
|
||||
if (request.getRequestURI().contains("sse")) {
|
||||
throw new SseException(e.getMessage(), e.getCode());
|
||||
|
@ -4,11 +4,11 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.wzj.soopin.order.convert.OrderConvert;
|
||||
import com.wzj.soopin.order.domain.bo.OrderBo;
|
||||
import com.wzj.soopin.order.domain.bo.SaveOrderBO;
|
||||
import com.wzj.soopin.order.domain.entity.Order;
|
||||
import com.wzj.soopin.order.domain.vo.*;
|
||||
import com.wzj.soopin.order.service.OrderService;
|
||||
import com.wzj.soopin.order.service.OrderItemService;
|
||||
import com.wzj.soopin.order.service.impl.OrderServiceImpl;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@ -20,27 +20,31 @@ import org.dromara.common.redis.redis.RedisService;
|
||||
import org.dromara.common.redis.utils.RedisUtils;
|
||||
import org.dromara.common.web.core.BaseController;
|
||||
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
/**
|
||||
* 订单表Controller
|
||||
* 订单接口列表
|
||||
*
|
||||
* @author zcc
|
||||
* @date 2022-12-01
|
||||
*/
|
||||
@Tag(name ="订单表接口列表")
|
||||
//@Tag(name ="订单接口列表")
|
||||
@RestController
|
||||
@RequestMapping("/oms/order")
|
||||
@Slf4j
|
||||
@RequiredArgsConstructor
|
||||
@Validated
|
||||
public class OrderController extends BaseController {
|
||||
|
||||
private final OrderServiceImpl service;
|
||||
private final OrderConvert convert;
|
||||
|
||||
private final RedisService redisService;
|
||||
|
||||
private final OrderService orderService;
|
||||
|
||||
private final OrderItemService orderItemService;
|
||||
|
||||
|
||||
@ -53,14 +57,14 @@ public class OrderController extends BaseController {
|
||||
@Tag(name ="修改收件人信息")
|
||||
@PostMapping("/receiver/update")
|
||||
public R updateReceiver(@RequestBody Order order) {
|
||||
return R.ok(service.updateById(order));
|
||||
return R.ok(orderService.updateById(order));
|
||||
}
|
||||
|
||||
@Tag(name ="导出订单表列表")
|
||||
@Log(title = "订单售后", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("export")
|
||||
public R<String> export(OrderBo query) {
|
||||
List<Order> list = service.list(query.toWrapper());
|
||||
List<Order> list = orderService.list(query.toWrapper());
|
||||
ExcelUtil<OrderVO> util = new ExcelUtil<>(OrderVO.class);
|
||||
return R.ok(util.writeExcel(convert.toVO(list), "订单列表数据"));
|
||||
}
|
||||
@ -68,57 +72,52 @@ public class OrderController extends BaseController {
|
||||
@Tag(name ="获取订单表详细信息")
|
||||
@GetMapping(value = "/{id}")
|
||||
public R<ManagerOrderDetailVO> getInfo(@PathVariable("id") Long id) {
|
||||
return R.ok(service.selectById(id));
|
||||
return R.ok(orderService.selectById(id));
|
||||
}
|
||||
|
||||
@Tag(name ="新增订单表")
|
||||
@Log(title = "订单表", businessType = BusinessType.INSERT)
|
||||
/**
|
||||
* 生成订单
|
||||
* @param saveOrderBO
|
||||
* @return
|
||||
*/
|
||||
@Log(title = "生成订单", businessType = BusinessType.INSERT)
|
||||
@PostMapping("/add")
|
||||
public R add(@RequestBody Order order) {
|
||||
R<Order> result = service.insert(order);
|
||||
|
||||
if (result != null) {
|
||||
// 订单创建成功,发送消息
|
||||
// service.sendMessage(order);
|
||||
log.info("订单创建成功,消息已发送,订单ID: {}", order.getId());
|
||||
} else {
|
||||
log.warn("订单创建失败: {}", "返回结果为null");
|
||||
}
|
||||
return result;
|
||||
public R<OrderVO> add(@RequestBody SaveOrderBO saveOrderBO) {
|
||||
return R.ok(orderService.saveOrder(saveOrderBO));
|
||||
}
|
||||
|
||||
@Tag(name ="修改订单表")
|
||||
@Log(title = "订单表", businessType = BusinessType.UPDATE)
|
||||
@PostMapping("/update")
|
||||
public R edit(@RequestBody Order order) {
|
||||
return R.ok(service.updateById(order));
|
||||
return R.ok(orderService.updateById(order));
|
||||
}
|
||||
|
||||
@Tag(name ="删除订单表")
|
||||
@Log(title = "订单表", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{id}")
|
||||
public R remove(@PathVariable Long id) {
|
||||
return R.ok(service.removeById(id));
|
||||
return R.ok(orderService.removeById(id));
|
||||
}
|
||||
|
||||
@Tag(name ="添加备注")
|
||||
@Log(title = "订单表", businessType = BusinessType.UPDATE)
|
||||
@PostMapping("/merchantNote/add")
|
||||
public R saveMerchantNote(@RequestBody Order order){
|
||||
return service.saveMerchantNote(order);
|
||||
return orderService.saveMerchantNote(order);
|
||||
}
|
||||
|
||||
|
||||
@Tag(name ="订单日志")
|
||||
@GetMapping("/log/{orderId}")
|
||||
public R log(@PathVariable Long orderId){
|
||||
return R.ok (service.log(orderId));
|
||||
return R.ok (orderService.log(orderId));
|
||||
}
|
||||
|
||||
@Tag(name ="订单解密")
|
||||
@GetMapping("/decryptPhone/{orderId}")
|
||||
public R decryptPhone(@PathVariable Long orderId){
|
||||
return service.decryptPhone(orderId);
|
||||
return orderService.decryptPhone(orderId);
|
||||
}
|
||||
|
||||
@Tag(name = "手动触发缓存交易量最多商品")
|
||||
@ -162,7 +161,7 @@ public class OrderController extends BaseController {
|
||||
@GetMapping("/refund")
|
||||
public R refund(@RequestParam Long orderId, @RequestParam(required = false) String reason) {
|
||||
log.info("订单退款开始,订单ID: {}", orderId);
|
||||
return service.refund(orderId,reason);
|
||||
return orderService.refund(orderId,reason);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,38 @@
|
||||
package com.wzj.soopin.order.domain.bo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.Valid;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
/**
|
||||
* 生成订单请求对象
|
||||
*/
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Builder
|
||||
public class SaveOrderBO {
|
||||
|
||||
@Schema(description = "订单类型:1->团购;2->拼团;3->秒杀;")
|
||||
private Integer type;
|
||||
|
||||
@Schema(description = "配送方式 1->到店核销;2->自提;3->配送;")
|
||||
private Integer distribution;
|
||||
|
||||
/**
|
||||
* 商品id
|
||||
*/
|
||||
@NotNull(message = "下单商品详情不能为空")
|
||||
@Valid
|
||||
private List<SaveOrderSkuItemBO> skuItemBOList;
|
||||
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,30 @@
|
||||
package com.wzj.soopin.order.domain.bo;
|
||||
|
||||
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* 下单商品详情
|
||||
*/
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Builder
|
||||
public class SaveOrderSkuItemBO {
|
||||
|
||||
/**
|
||||
* 商品id
|
||||
*/
|
||||
@NotNull(message = "商品id不能为空")
|
||||
private Long skuId;
|
||||
|
||||
/**
|
||||
* 下单数量
|
||||
*/
|
||||
@NotNull(message = "下单数量不能为空")
|
||||
private Integer quantity;
|
||||
}
|
@ -5,7 +5,10 @@ import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.persistence.PrePersist;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.dromara.common.core.domain.model.BaseAudit;
|
||||
import org.dromara.common.excel.annotation.Excel;
|
||||
|
||||
@ -23,7 +26,11 @@ import java.util.Random;
|
||||
@Schema(description = "订单表对象")
|
||||
@Data
|
||||
@TableName("oms_order")
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class Order extends BaseAudit {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Schema(description = "订单id")
|
||||
|
@ -4,7 +4,10 @@ import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.dromara.common.core.domain.model.BaseAudit;
|
||||
import org.dromara.common.excel.annotation.Excel;
|
||||
|
||||
@ -18,6 +21,9 @@ import java.math.BigDecimal;
|
||||
@Schema(description = "订单中所包含的商品对象")
|
||||
@Data
|
||||
@TableName("oms_order_item")
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Builder
|
||||
public class OrderItem extends BaseAudit {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
|
@ -1,10 +1,7 @@
|
||||
package com.wzj.soopin.order.domain.vo;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.wzj.soopin.order.domain.entity.OrderItem;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import org.dromara.common.core.domain.model.BaseAudit;
|
||||
@ -16,7 +13,7 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 订单表 数据视图对象
|
||||
* 订单详情
|
||||
*
|
||||
* @author zcc
|
||||
*/
|
||||
|
@ -4,13 +4,31 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.wzj.soopin.order.domain.bo.OrderBo;
|
||||
import com.wzj.soopin.order.domain.bo.SaveOrderBO;
|
||||
import com.wzj.soopin.order.domain.entity.Order;
|
||||
import com.wzj.soopin.order.domain.vo.ManagerOrderDetailVO;
|
||||
import com.wzj.soopin.order.domain.vo.OrderOperateHistoryVO;
|
||||
import com.wzj.soopin.order.domain.vo.OrderVO;
|
||||
import org.dromara.common.core.domain.R;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
public interface OrderService extends IService<Order> {
|
||||
|
||||
ManagerOrderDetailVO selectById(Long id);
|
||||
|
||||
R saveMerchantNote(Order order);
|
||||
|
||||
List<OrderOperateHistoryVO> log(Long orderId);
|
||||
|
||||
R decryptPhone(Long orderId);
|
||||
|
||||
IPage<OrderVO> getlist(Page<Order> page, OrderBo query);
|
||||
|
||||
Order getByNo(String orderNo);
|
||||
|
||||
OrderVO saveOrder(SaveOrderBO saveOrderBO);
|
||||
|
||||
R refund(Long orderId, String reason);
|
||||
}
|
||||
|
@ -1,19 +1,30 @@
|
||||
package com.wzj.soopin.order.service.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.date.DatePattern;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.lang.Assert;
|
||||
import cn.hutool.core.text.StrBuilder;
|
||||
import cn.hutool.core.util.RandomUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.wzj.soopin.goods.domain.entity.Product;
|
||||
import com.wzj.soopin.goods.domain.entity.Sku;
|
||||
import com.wzj.soopin.goods.mapper.ProductMapper;
|
||||
import com.wzj.soopin.goods.mapper.SkuMapper;
|
||||
import com.wzj.soopin.member.domain.po.Member;
|
||||
import com.wzj.soopin.member.mapper.MemberMapper;
|
||||
import com.wzj.soopin.member.mapper.MemberWechatMapper;
|
||||
import com.wzj.soopin.order.domain.bo.OrderBo;
|
||||
import com.wzj.soopin.order.domain.bo.SaveOrderBO;
|
||||
import com.wzj.soopin.order.domain.bo.SaveOrderSkuItemBO;
|
||||
import com.wzj.soopin.order.domain.entity.*;
|
||||
import com.wzj.soopin.order.domain.form.DeliverProductForm;
|
||||
import com.wzj.soopin.order.domain.form.ManagerOrderQueryForm;
|
||||
@ -27,6 +38,9 @@ import com.wzj.soopin.order.wechat.WechatPayService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.common.core.domain.R;
|
||||
import org.dromara.common.core.domain.event.Constants;
|
||||
import org.dromara.common.core.domain.model.LoginUser;
|
||||
import org.dromara.common.core.exception.ServiceException;
|
||||
import org.dromara.common.core.utils.SecurityUtils;
|
||||
import org.dromara.common.redis.redis.RedisService;
|
||||
import org.dromara.common.satoken.utils.LoginHelper;
|
||||
@ -38,6 +52,7 @@ import org.springframework.data.domain.PageImpl;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
@ -65,15 +80,24 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
||||
private final RedisService redisService;
|
||||
private final AftersaleMapper aftersaleMapper;
|
||||
|
||||
/**
|
||||
* 订单前缀
|
||||
*/
|
||||
private final static String ORDER_SN_PREFIX = "WZJ";
|
||||
|
||||
|
||||
@Autowired(required = false)
|
||||
private WechatPayService wechatPayService;
|
||||
@Autowired
|
||||
private ProductMapper productMapper;
|
||||
|
||||
/**
|
||||
* 查询订单表
|
||||
*
|
||||
* @param id 订单表主键
|
||||
* @return 订单表
|
||||
*/
|
||||
@Override
|
||||
public ManagerOrderDetailVO selectById(Long id) {
|
||||
|
||||
Order order = orderMapper.selectById(id);
|
||||
@ -187,22 +211,65 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
||||
/**
|
||||
* 新增订单表
|
||||
*
|
||||
* @param order 订单表
|
||||
* @param saveOrderBO 订单表
|
||||
* @return 结果
|
||||
*/
|
||||
public R<Order> insert(Order order) {
|
||||
Long tenantId = Long.valueOf(LoginHelper.getTenantId());
|
||||
order.setTenantId(tenantId);
|
||||
order.setCreateTime(LocalDateTime.now());
|
||||
order.setWithdrawStatus(1);
|
||||
order.setStatus(OrderStatusEnum.UNPAID.getValue());
|
||||
int insert = orderMapper.insert(order);
|
||||
if (insert>1){
|
||||
return R.fail("订单创建失败");
|
||||
}else {
|
||||
verificationCodeService.generateVerificationCode(order.getId());
|
||||
return R.ok(order);
|
||||
@Override
|
||||
public OrderVO saveOrder(SaveOrderBO saveOrderBO) {
|
||||
LoginUser loginUser = LoginHelper.getLoginUser();
|
||||
List<SaveOrderSkuItemBO> skuItemBOList = saveOrderBO.getSkuItemBOList();
|
||||
Map<Long, Integer> map = skuItemBOList.stream().collect(Collectors.toMap(SaveOrderSkuItemBO::getSkuId, SaveOrderSkuItemBO::getQuantity));
|
||||
BigDecimal totalAmount = new BigDecimal(0);
|
||||
Long tenantId = 0L;
|
||||
List<Sku> skus = skuMapper.selectByIds(map.keySet());
|
||||
Assert.isTrue(skus.size() == skuItemBOList.size(), () -> new ServiceException("下单商品不存在"));
|
||||
LinkedHashMap<Long, Product> productMap = productMapper.selectByIds(skus.stream().map(Sku::getProductId).collect(Collectors.toList()))
|
||||
.stream().collect(Collectors.toMap(Product::getId, it -> it, (v1, v2) -> v2, LinkedHashMap::new));
|
||||
for (Sku sku : skus) {
|
||||
Integer quantity = map.get(sku.getId());
|
||||
BigDecimal multiply = sku.getPrice().multiply(new BigDecimal(quantity));
|
||||
totalAmount = totalAmount.add(multiply);
|
||||
// todo 租户信息应该保存在订单详情中,后续需改造
|
||||
tenantId = Long.valueOf(StrUtil.isNotBlank(sku.getTenantId()) ? sku.getTenantId() : "0");
|
||||
}
|
||||
Order order = Order.builder()
|
||||
.memberId(loginUser.getUserId())
|
||||
.memberUsername(loginUser.getUsername())
|
||||
.totalAmount(totalAmount)
|
||||
.tenantId(tenantId)
|
||||
.orderSn(generateOrderSn())
|
||||
.type(saveOrderBO.getType())
|
||||
.payType(Constants.PayType.NO_PAY)
|
||||
.status(OrderStatusEnum.UNPAID.getValue())
|
||||
.distribution(saveOrderBO.getDistribution())
|
||||
.build();
|
||||
orderMapper.insert(order);
|
||||
List<OrderItem> orderItemList = skus.stream().map(sku -> {
|
||||
Product product = productMap.get(sku.getProductId());
|
||||
return OrderItem.builder()
|
||||
.orderId(order.getId())
|
||||
.productId(sku.getProductId())
|
||||
.skuId(sku.getId())
|
||||
.productName(product != null ? product.getName() : "")
|
||||
.pic(sku.getPic())
|
||||
.salePrice(product != null ? product.getPrice() : null)
|
||||
.quantity(map.get(sku.getId()))
|
||||
.build();
|
||||
}).toList();
|
||||
orderItemMapper.insert(orderItemList);
|
||||
return BeanUtil.copyProperties(order, OrderVO.class);
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成订单sn
|
||||
* @return
|
||||
*/
|
||||
private String generateOrderSn() {
|
||||
String dateFormat = DatePattern.PURE_DATETIME_MS_FORMAT.format(new Date());
|
||||
return StrBuilder.create(ORDER_SN_PREFIX)
|
||||
.append(dateFormat)
|
||||
.append(RandomUtil.randomString(4))
|
||||
.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -283,6 +350,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public R saveMerchantNote(Order order) {
|
||||
// 1. 查询现有订单
|
||||
Order orderInDb = orderMapper.selectById(order.getId());
|
||||
@ -392,6 +460,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
||||
* @param orderId 订单id
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public List<OrderOperateHistoryVO> log(Long orderId) {
|
||||
// 查询订单操作历史记录
|
||||
LambdaQueryWrapper<OrderOperateHistory> historyWrapper = new LambdaQueryWrapper<>();
|
||||
@ -419,6 +488,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
||||
return voList;
|
||||
}
|
||||
|
||||
@Override
|
||||
public R decryptPhone(Long orderId) {
|
||||
Order order = orderMapper.selectById(orderId);
|
||||
String receiverPhoneEncrypted = order.getReceiverPhoneEncrypted();
|
||||
@ -521,6 +591,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
||||
* @param orderId 订单ID
|
||||
* @return 操作结果
|
||||
*/
|
||||
@Override
|
||||
public R refund(Long orderId, String reason) {
|
||||
if (orderId == null) {
|
||||
return R.fail("订单ID不能为空");
|
||||
|
@ -3,43 +3,44 @@ package com.wzj.soopin.transaction.controller;
|
||||
import cn.dev33.satoken.annotation.SaIgnore;
|
||||
import com.wzj.soopin.transaction.domain.bo.PaymentBO;
|
||||
import com.wzj.soopin.transaction.domain.bo.easypay.EasyPayRequest;
|
||||
import com.wzj.soopin.transaction.domain.vo.EasypayPaymentResultVO;
|
||||
import com.wzj.soopin.transaction.domain.vo.EasypayPrePayVO;
|
||||
import com.wzj.soopin.transaction.service.IEasypayService;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.common.core.domain.R;
|
||||
import org.dromara.common.log.annotation.Log;
|
||||
import org.dromara.common.log.enums.BusinessType;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.rmi.ServerException;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 易生支付结果通知回调
|
||||
* 易生支付
|
||||
*/
|
||||
@RestController
|
||||
@Slf4j
|
||||
@RequestMapping("/easypay")
|
||||
@RequestMapping("/trans/easypay")
|
||||
@RequiredArgsConstructor
|
||||
public class EasypayCallbackController {
|
||||
public class TransEasypayController {
|
||||
|
||||
private final IEasypayService easypayService;
|
||||
|
||||
/**
|
||||
* 处理易生支付结果通知回调
|
||||
* @param request
|
||||
* 处理易生支付结果通知回调 处理
|
||||
*
|
||||
* @param easyPayRequest
|
||||
* @return
|
||||
*/
|
||||
@SaIgnore
|
||||
@Log(title = "易生支付结果通知回调", businessType = BusinessType.UPDATE)
|
||||
@PostMapping("/trade/callback")
|
||||
public Map tradeCallback(@RequestBody EasyPayRequest request) {
|
||||
easypayService.handlerTradeCallback(request);
|
||||
public Map tradeCallback(@RequestBody EasyPayRequest easyPayRequest) {
|
||||
easypayService.handleTradeCallback(easyPayRequest);
|
||||
HashMap<Object, Object> map = new HashMap<>();
|
||||
map.put("code", "000000");
|
||||
map.put("msg", "Success");
|
||||
@ -47,15 +48,27 @@ public class EasypayCallbackController {
|
||||
}
|
||||
|
||||
/**
|
||||
* 测试发起支付
|
||||
* @param request
|
||||
* 发起支付
|
||||
*
|
||||
* @param paymentBO
|
||||
* @return
|
||||
*/
|
||||
@SaIgnore
|
||||
@Log(title = "测试发起支付", businessType = BusinessType.OTHER)
|
||||
@PostMapping("/test/trade")
|
||||
public R<EasypayPrePayVO> testTrade(@RequestBody PaymentBO paymentBO) throws ServerException {
|
||||
@Log(title = "发起支付", businessType = BusinessType.OTHER)
|
||||
@PostMapping("/trade")
|
||||
public R<EasypayPrePayVO> trade(@RequestBody PaymentBO paymentBO) throws ServerException {
|
||||
EasypayPrePayVO easypayPrePayVO = easypayService.payment(paymentBO);
|
||||
return R.ok(easypayPrePayVO);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询支付结果
|
||||
*
|
||||
* @param orderId 订单id
|
||||
* @return
|
||||
*/
|
||||
@GetMapping("/paymentQuery/{orderId}")
|
||||
public R<EasypayPaymentResultVO> paymentQuery(@PathVariable("orderId") String orderId) throws ServerException {
|
||||
EasypayPaymentResultVO easypayPaymentResultVO = easypayService.paymentQuery(orderId);
|
||||
return R.ok(easypayPaymentResultVO);
|
||||
}
|
||||
}
|
@ -1,6 +1,8 @@
|
||||
package com.wzj.soopin.transaction.domain.bo;
|
||||
|
||||
import com.wzj.soopin.transaction.enums.easypay.PayType;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
@ -15,25 +17,27 @@ import lombok.NoArgsConstructor;
|
||||
@Builder
|
||||
public class PaymentBO {
|
||||
|
||||
private String memberId;
|
||||
|
||||
private String goodsId;
|
||||
/**
|
||||
* 订单Id
|
||||
*/
|
||||
@NotNull(message = "订单Id不能为空")
|
||||
private Long orderId;
|
||||
|
||||
/**
|
||||
* 订单标题,对应支付宝订单里的 “商品说明”,微信订单里的“商品”
|
||||
*/
|
||||
@NotBlank(message = "订单标题不能为空")
|
||||
private String orderSub;
|
||||
/**
|
||||
* 订单描述
|
||||
*/
|
||||
@NotBlank(message = "订单描述不能为空")
|
||||
private String orderDes;
|
||||
/**
|
||||
* 订单金额,单位分,最小1
|
||||
*/
|
||||
private long transAmount;
|
||||
|
||||
/**
|
||||
* 支付方式
|
||||
*/
|
||||
@NotNull(message = "支付方式不能为空")
|
||||
private PayType payType;
|
||||
|
||||
/**
|
||||
|
@ -1,6 +1,6 @@
|
||||
package com.wzj.soopin.transaction.domain.bo.easypay.separate.apply.req;
|
||||
|
||||
import com.wzj.soopin.transaction.domain.bo.easypay.jsapi.req.SeparateInfo;
|
||||
import com.wzj.soopin.transaction.domain.bo.easypay.trade.jsapi.req.SeparateInfo;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
|
@ -1,4 +1,4 @@
|
||||
package com.wzj.soopin.transaction.domain.bo.easypay.jsapi.req;
|
||||
package com.wzj.soopin.transaction.domain.bo.easypay.trade.jsapi.req;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
@ -1,4 +1,4 @@
|
||||
package com.wzj.soopin.transaction.domain.bo.easypay.jsapi.req;
|
||||
package com.wzj.soopin.transaction.domain.bo.easypay.trade.jsapi.req;
|
||||
|
||||
import com.wzj.soopin.transaction.domain.bo.easypay.PayInfo;
|
||||
import com.wzj.soopin.transaction.domain.bo.easypay.ReqInfo;
|
@ -1,4 +1,4 @@
|
||||
package com.wzj.soopin.transaction.domain.bo.easypay.jsapi.req;
|
||||
package com.wzj.soopin.transaction.domain.bo.easypay.trade.jsapi.req;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
@ -1,4 +1,4 @@
|
||||
package com.wzj.soopin.transaction.domain.bo.easypay.jsapi.req;
|
||||
package com.wzj.soopin.transaction.domain.bo.easypay.trade.jsapi.req;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
@ -1,4 +1,4 @@
|
||||
package com.wzj.soopin.transaction.domain.bo.easypay.jsapi.req;
|
||||
package com.wzj.soopin.transaction.domain.bo.easypay.trade.jsapi.req;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
@ -1,4 +1,4 @@
|
||||
package com.wzj.soopin.transaction.domain.bo.easypay.jsapi.req;
|
||||
package com.wzj.soopin.transaction.domain.bo.easypay.trade.jsapi.req;
|
||||
|
||||
import com.wzj.soopin.transaction.enums.easypay.DelaySettleFlag;
|
||||
import com.wzj.soopin.transaction.enums.easypay.PatnerSettleFlag;
|
@ -1,4 +1,4 @@
|
||||
package com.wzj.soopin.transaction.domain.bo.easypay.jsapi.req;
|
||||
package com.wzj.soopin.transaction.domain.bo.easypay.trade.jsapi.req;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
@ -1,4 +1,4 @@
|
||||
package com.wzj.soopin.transaction.domain.bo.easypay.jsapi.req;
|
||||
package com.wzj.soopin.transaction.domain.bo.easypay.trade.jsapi.req;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
@ -1,4 +1,4 @@
|
||||
package com.wzj.soopin.transaction.domain.bo.easypay.jsapi.req;
|
||||
package com.wzj.soopin.transaction.domain.bo.easypay.trade.jsapi.req;
|
||||
|
||||
import com.wzj.soopin.transaction.enums.easypay.IDCheckIn;
|
||||
import com.wzj.soopin.transaction.enums.easypay.LimitCreditPay;
|
@ -1,4 +1,4 @@
|
||||
package com.wzj.soopin.transaction.domain.bo.easypay.jsapi.req;
|
||||
package com.wzj.soopin.transaction.domain.bo.easypay.trade.jsapi.req;
|
||||
|
||||
|
||||
import lombok.AllArgsConstructor;
|
@ -1,4 +1,4 @@
|
||||
package com.wzj.soopin.transaction.domain.bo.easypay.jsapi.req;
|
||||
package com.wzj.soopin.transaction.domain.bo.easypay.trade.jsapi.req;
|
||||
|
||||
import com.wzj.soopin.transaction.enums.easypay.DelaySettleFlag;
|
||||
import lombok.AllArgsConstructor;
|
@ -1,4 +1,4 @@
|
||||
package com.wzj.soopin.transaction.domain.bo.easypay.jsapi.req;
|
||||
package com.wzj.soopin.transaction.domain.bo.easypay.trade.jsapi.req;
|
||||
|
||||
import com.wzj.soopin.transaction.enums.easypay.DelaySettleFlag;
|
||||
import com.wzj.soopin.transaction.enums.easypay.PatnerSettleFlag;
|
@ -1,4 +1,4 @@
|
||||
package com.wzj.soopin.transaction.domain.bo.easypay.jsapi.req;
|
||||
package com.wzj.soopin.transaction.domain.bo.easypay.trade.jsapi.req;
|
||||
|
||||
import com.wzj.soopin.transaction.enums.easypay.SpecialTag;
|
||||
import lombok.AllArgsConstructor;
|
@ -1,4 +1,4 @@
|
||||
package com.wzj.soopin.transaction.domain.bo.easypay.jsapi.req;
|
||||
package com.wzj.soopin.transaction.domain.bo.easypay.trade.jsapi.req;
|
||||
|
||||
import com.wzj.soopin.transaction.enums.easypay.WxLimitPay;
|
||||
import lombok.AllArgsConstructor;
|
@ -1,4 +1,4 @@
|
||||
package com.wzj.soopin.transaction.domain.bo.easypay.jsapi.resp;
|
||||
package com.wzj.soopin.transaction.domain.bo.easypay.trade.jsapi.resp;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
@ -1,4 +1,4 @@
|
||||
package com.wzj.soopin.transaction.domain.bo.easypay.jsapi.resp;
|
||||
package com.wzj.soopin.transaction.domain.bo.easypay.trade.jsapi.resp;
|
||||
|
||||
import com.wzj.soopin.transaction.domain.bo.easypay.RespStateInfo;
|
||||
import lombok.AllArgsConstructor;
|
@ -1,4 +1,4 @@
|
||||
package com.wzj.soopin.transaction.domain.bo.easypay.jsapi.resp;
|
||||
package com.wzj.soopin.transaction.domain.bo.easypay.trade.jsapi.resp;
|
||||
|
||||
import com.wzj.soopin.transaction.enums.easypay.AddCalcType;
|
||||
import com.wzj.soopin.transaction.enums.easypay.BillingCycle;
|
@ -1,4 +1,4 @@
|
||||
package com.wzj.soopin.transaction.domain.bo.easypay.jsapi.resp;
|
||||
package com.wzj.soopin.transaction.domain.bo.easypay.trade.jsapi.resp;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
@ -1,4 +1,4 @@
|
||||
package com.wzj.soopin.transaction.domain.bo.easypay.jsapi.resp;
|
||||
package com.wzj.soopin.transaction.domain.bo.easypay.trade.jsapi.resp;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
@ -1,6 +1,6 @@
|
||||
package com.wzj.soopin.transaction.domain.bo.easypay.trade.notice.req;
|
||||
|
||||
import com.wzj.soopin.transaction.domain.bo.easypay.jsapi.req.Promo;
|
||||
import com.wzj.soopin.transaction.domain.bo.easypay.trade.jsapi.req.Promo;
|
||||
import com.wzj.soopin.transaction.domain.bo.easypay.RespStateInfo;
|
||||
import com.wzj.soopin.transaction.domain.bo.easypay.trade.query.resp.*;
|
||||
import lombok.AllArgsConstructor;
|
||||
|
@ -45,7 +45,7 @@ public class TradeQueryReqBody {
|
||||
/**
|
||||
* 原订单outTrace,oriOrgTrace与oriOutTrace二选一必填
|
||||
*/
|
||||
private String oriOutTrace;
|
||||
// private String oriOutTrace;
|
||||
/**
|
||||
* 原商户交易日期,yyyyMMdd
|
||||
*/
|
||||
|
@ -1,6 +1,6 @@
|
||||
package com.wzj.soopin.transaction.domain.bo.easypay.trade.query.resp;
|
||||
|
||||
import com.wzj.soopin.transaction.domain.bo.easypay.jsapi.req.Promo;
|
||||
import com.wzj.soopin.transaction.domain.bo.easypay.trade.jsapi.req.Promo;
|
||||
import com.wzj.soopin.transaction.domain.bo.easypay.RespStateInfo;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
|
@ -0,0 +1,94 @@
|
||||
package com.wzj.soopin.transaction.domain.po;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import java.util.Date;
|
||||
|
||||
import lombok.*;
|
||||
import org.dromara.common.core.domain.model.BaseAudit;
|
||||
|
||||
/**
|
||||
* 支付订单表
|
||||
*/
|
||||
@Schema(description = "支付订单表")
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName(value = "trans_pay_order")
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class PayOrder extends BaseAudit {
|
||||
|
||||
|
||||
@TableId(value = "id")
|
||||
@Schema(description = "主键")
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 订单id
|
||||
*/
|
||||
@TableField(value = "order_id")
|
||||
@Schema(description = "订单id")
|
||||
private Long orderId;
|
||||
|
||||
/**
|
||||
* 支付方式
|
||||
*/
|
||||
@TableField(value = "pay_type")
|
||||
@Schema(description = "支付方式")
|
||||
private String payType;
|
||||
|
||||
/**
|
||||
* 支付金额,单位:分
|
||||
*/
|
||||
@TableField(value = "trans_amount")
|
||||
@Schema(description = "支付金额,单位:分")
|
||||
private Long transAmount;
|
||||
|
||||
/**
|
||||
* 发起支付日期
|
||||
*/
|
||||
@TableField(value = "start_trans_date")
|
||||
@Schema(description = "发起支付日期")
|
||||
private Date startTransDate;
|
||||
|
||||
/**
|
||||
* 完成支付日期
|
||||
*/
|
||||
@TableField(value = "end_trans_date")
|
||||
@Schema(description = "完成支付日期")
|
||||
private Date endTransDate;
|
||||
|
||||
/**
|
||||
* 易生生成后上送渠道的订单号
|
||||
*/
|
||||
@TableField(value = "easypay_trace")
|
||||
@Schema(description = "易生生成后上送渠道的订单号")
|
||||
private String easypayTrace;
|
||||
|
||||
/**
|
||||
* 渠道生成返回给易生的订单号,例如微信、支付宝订单号
|
||||
*/
|
||||
@TableField(value = "pc_trace")
|
||||
@Schema(description = "渠道生成返回给易生的订单号,例如微信、支付宝订单号")
|
||||
private String pcTrace;
|
||||
|
||||
/**
|
||||
* 银联生成并返回给易生的订单号
|
||||
*/
|
||||
@TableField(value = "un_trace")
|
||||
@Schema(description = "银联生成并返回给易生的订单号")
|
||||
private String unTrace;
|
||||
|
||||
/**
|
||||
* 是否支付完成
|
||||
*/
|
||||
@TableField(value = "trans_over")
|
||||
@Schema(description = "是否支付完成")
|
||||
private Boolean transOver;
|
||||
|
||||
@TableField(value = "del_flag")
|
||||
private String delFlag;
|
||||
}
|
@ -0,0 +1,39 @@
|
||||
package com.wzj.soopin.transaction.domain.vo;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 易生支付结果
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class EasypayPaymentResultVO {
|
||||
|
||||
/**
|
||||
* 订单id
|
||||
*/
|
||||
public Long orderId;
|
||||
|
||||
/**
|
||||
* 支付单id
|
||||
*/
|
||||
public Long payId;
|
||||
|
||||
/**
|
||||
* 支付是否完成
|
||||
*/
|
||||
public boolean paymentComplete;
|
||||
|
||||
/**
|
||||
* 订单总金额
|
||||
*/
|
||||
private BigDecimal totalAmount;
|
||||
|
||||
}
|
@ -6,18 +6,33 @@ import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* 易生预支付信息
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class EasypayPrePayVO {
|
||||
|
||||
/**
|
||||
* 支付方式
|
||||
*/
|
||||
private PayType payType;
|
||||
|
||||
/**
|
||||
* 拉起微信支付的参数
|
||||
*/
|
||||
private WxPrePayParamInfo wxPrePayParamInfo;
|
||||
|
||||
/**
|
||||
* 拉起支付宝支付需要的参数
|
||||
*/
|
||||
private String tradeNo;
|
||||
|
||||
/**
|
||||
* 拉起银联支付需要的参数
|
||||
*/
|
||||
private String QrRedirectUrl;
|
||||
|
||||
/**
|
||||
|
@ -4,12 +4,9 @@ import java.io.IOException;
|
||||
|
||||
/**
|
||||
* 延时结算标识
|
||||
* 0 非延时确认交易,按商户开通的结算周期结算(D1或T1)
|
||||
* 1 延时确认交易,此笔交易需等待调用接口【7.1延时交易确认】接口才会结算
|
||||
*
|
||||
* 分账D0标识,D0需提前开通
|
||||
*
|
||||
* 分账D0标识
|
||||
*
|
||||
* D0标识
|
||||
*/
|
||||
public enum DelaySettleFlag {
|
||||
|
||||
|
@ -3,7 +3,8 @@ package com.wzj.soopin.transaction.enums.easypay;
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* D0标识,0: 非D0交易,即按进件商户开通功能结算周期结算
|
||||
* D0标识,
|
||||
* 0: 非D0交易,即按进件商户开通功能结算周期结算
|
||||
* 1: D0交易,商户需开通了D0,且此字段送1时,会d0到账
|
||||
* 默认值0
|
||||
*/
|
||||
|
@ -1,52 +1,61 @@
|
||||
package com.wzj.soopin.transaction.enums.easypay;
|
||||
|
||||
import java.io.IOException;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import org.dromara.common.core.domain.event.Constants;
|
||||
import org.dromara.common.core.exception.ServiceException;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
/**
|
||||
* 支付方式
|
||||
*/
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
@Schema(description = "易生支持的支付方式")
|
||||
public enum PayType {
|
||||
|
||||
ALI_PAY_JSAPI,
|
||||
ALI_PAY_MINI_APP,
|
||||
UNION_PAY_JSAPI,
|
||||
UNION_PAY_Js_MINI,
|
||||
WE_CHAT_MINI_APP,
|
||||
WE_CHAT_JSAPI;
|
||||
@Schema(description = "支付宝服务窗支付")
|
||||
ALI_PAY_JSAPI("AliPayJsapi", Constants.PayType.ALIPAY, "支付宝服务窗支付 "),
|
||||
|
||||
public String toValue() {
|
||||
switch (this) {
|
||||
case ALI_PAY_JSAPI -> {
|
||||
return "AliPayJsapi";
|
||||
}
|
||||
case ALI_PAY_MINI_APP -> {
|
||||
return "AliPayMiniApp";
|
||||
}
|
||||
case UNION_PAY_JSAPI -> {
|
||||
return "UnionPayJsapi";
|
||||
}
|
||||
case UNION_PAY_Js_MINI -> {
|
||||
return "UnionPayJsMini";
|
||||
}
|
||||
case WE_CHAT_JSAPI -> {
|
||||
return "WeChatJsapi";
|
||||
}
|
||||
case WE_CHAT_MINI_APP -> {
|
||||
return "WeChatMiniApp";
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@Schema(description = "支付宝小程序支付")
|
||||
ALI_PAY_MINI_APP("AliPayMiniApp", Constants.PayType.ALIPAY, "支付宝小程序支付"),
|
||||
|
||||
@Schema(description = "微信公众号支付")
|
||||
WE_CHAT_JSAPI("WeChatJsapi", Constants.PayType.WECHAT, "微信公众号支付"),
|
||||
|
||||
@Schema(description = "微信小程序支付")
|
||||
WE_CHAT_MINI_APP("WeChatMiniApp", Constants.PayType.WECHAT, "微信小程序支付"),
|
||||
|
||||
@Schema(description = "云闪付JS")
|
||||
UNION_PAY_JSAPI("UnionPayJsapi", Constants.PayType.UNION, "云闪付JS"),
|
||||
|
||||
@Schema(description = "云闪付JS云微")
|
||||
UNION_PAY_Js_MINI("UnionPayJsMini", Constants.PayType.UNION, "云闪付JS云微");
|
||||
|
||||
|
||||
/**
|
||||
* 接口中实际使用的值
|
||||
*/
|
||||
private final String value;
|
||||
|
||||
/**
|
||||
* 支付渠道
|
||||
*/
|
||||
private final Integer channel;
|
||||
|
||||
/**
|
||||
* 支付方式描述
|
||||
*/
|
||||
private final String info;
|
||||
|
||||
public static PayType getByValue(String value) {
|
||||
return Arrays.stream(PayType.values())
|
||||
.filter(e -> StrUtil.equals(e.getValue(), value))
|
||||
.findFirst()
|
||||
.orElseThrow(() -> new ServiceException("支付方式不存在"));
|
||||
|
||||
public static PayType forValue(String value) throws IOException {
|
||||
return switch (value) {
|
||||
case "AliPayJsapi" -> ALI_PAY_JSAPI;
|
||||
case "AliPayMiniApp" -> ALI_PAY_MINI_APP;
|
||||
case "UnionPayJsapi" -> UNION_PAY_JSAPI;
|
||||
case "UnionPayJsMini" -> UNION_PAY_Js_MINI;
|
||||
case "WeChatJsapi" -> WE_CHAT_JSAPI;
|
||||
case "WeChatMiniApp" -> WE_CHAT_MINI_APP;
|
||||
default -> throw new IOException("Cannot deserialize PayType");
|
||||
};
|
||||
}
|
||||
}
|
||||
|
@ -4,6 +4,9 @@ import java.io.IOException;
|
||||
|
||||
/**
|
||||
* 分账标识,与主单分账标识互斥,不能同时上送1
|
||||
* 0 非分账交易
|
||||
* 1 交易后分账 支付成功后调5.1请求分账接口发起分账
|
||||
* 2 交易中分账 必须交易中同步上送分账信息,且一次分完
|
||||
*
|
||||
* 分账标识
|
||||
*/
|
||||
|
@ -0,0 +1,12 @@
|
||||
package com.wzj.soopin.transaction.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.wzj.soopin.transaction.domain.po.PayOrder;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.apache.ibatis.annotations.Select;
|
||||
|
||||
@Mapper
|
||||
public interface PayOrderMapper extends BaseMapper<PayOrder> {
|
||||
|
||||
}
|
@ -4,6 +4,7 @@ package com.wzj.soopin.transaction.service;
|
||||
import com.wzj.soopin.transaction.domain.bo.PaymentBO;
|
||||
import com.wzj.soopin.transaction.domain.bo.easypay.EasyPayRequest;
|
||||
import com.wzj.soopin.transaction.domain.vo.EasypayAccountVO;
|
||||
import com.wzj.soopin.transaction.domain.vo.EasypayPaymentResultVO;
|
||||
import com.wzj.soopin.transaction.domain.vo.EasypayPrePayVO;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
@ -13,11 +14,24 @@ public interface IEasypayService {
|
||||
|
||||
/**
|
||||
* 发起支付
|
||||
* @param jsApiReqBody
|
||||
* @param paymentBO
|
||||
* @return
|
||||
*/
|
||||
EasypayPrePayVO payment(PaymentBO paymentBO) throws ServerException;
|
||||
|
||||
/**
|
||||
* 查询订单支付结果
|
||||
* @param orderId
|
||||
* @return
|
||||
*/
|
||||
EasypayPaymentResultVO paymentQuery(String orderId) throws ServerException;
|
||||
|
||||
/**
|
||||
* 处理易生支付结果通知回调
|
||||
* @param easyPayRequest
|
||||
*/
|
||||
void handleTradeCallback(EasyPayRequest easyPayRequest);
|
||||
|
||||
/**
|
||||
* 获取易生账户
|
||||
* @param memberId
|
||||
@ -62,9 +76,5 @@ public interface IEasypayService {
|
||||
|
||||
boolean merchantAuditNotice(String request);
|
||||
|
||||
/**
|
||||
* 处理易生支付结果通知回调
|
||||
* @param request
|
||||
*/
|
||||
void handlerTradeCallback(EasyPayRequest request);
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,8 @@
|
||||
package com.wzj.soopin.transaction.service;
|
||||
|
||||
import com.wzj.soopin.transaction.domain.po.PayOrder;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
public interface PayOrderService extends IService<PayOrder>{
|
||||
|
||||
|
||||
}
|
File diff suppressed because one or more lines are too long
@ -0,0 +1,13 @@
|
||||
package com.wzj.soopin.transaction.service.impl;
|
||||
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import java.util.List;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.wzj.soopin.transaction.domain.po.PayOrder;
|
||||
import com.wzj.soopin.transaction.mapper.PayOrderMapper;
|
||||
import com.wzj.soopin.transaction.service.PayOrderService;
|
||||
@Service
|
||||
public class PayOrderServiceImpl extends ServiceImpl<PayOrderMapper, PayOrder> implements PayOrderService{
|
||||
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user