feat(app): 新增app会员与商户模块配置- 在application.yml中添加app会员模块和商户模块的包扫描配置
- 优化订单服务分页查询逻辑,支持商户维度数据筛选 - 配置knife4j文档分组,支持app模块接口文档展示 - 优化订单创建逻辑,补充商品分享人ID等字段 - 移除分账规则中的手续费相关字段与校验逻辑- 新增核销码VO,支持订单核销状态管理
This commit is contained in:
parent
8b9a963bc6
commit
ab30f6c9cc
@ -5,7 +5,6 @@ import com.wzj.soopin.content.utils.RedisOperator;
|
|||||||
import com.wzj.soopin.order.business.IOrderBusiness;
|
import com.wzj.soopin.order.business.IOrderBusiness;
|
||||||
import com.wzj.soopin.order.domain.bo.OrderBo;
|
import com.wzj.soopin.order.domain.bo.OrderBo;
|
||||||
import com.wzj.soopin.order.domain.bo.SaveOrderBO;
|
import com.wzj.soopin.order.domain.bo.SaveOrderBO;
|
||||||
import com.wzj.soopin.order.domain.entity.Order;
|
|
||||||
import com.wzj.soopin.order.domain.vo.OrderVO;
|
import com.wzj.soopin.order.domain.vo.OrderVO;
|
||||||
import com.wzj.soopin.order.service.IMemberOrderService;
|
import com.wzj.soopin.order.service.IMemberOrderService;
|
||||||
import com.wzj.soopin.order.service.OrderService;
|
import com.wzj.soopin.order.service.OrderService;
|
||||||
@ -18,13 +17,12 @@ import org.dromara.common.core.domain.R;
|
|||||||
import org.dromara.common.core.domain.model.LoginUser;
|
import org.dromara.common.core.domain.model.LoginUser;
|
||||||
import org.dromara.common.log.annotation.Log;
|
import org.dromara.common.log.annotation.Log;
|
||||||
import org.dromara.common.log.enums.BusinessType;
|
import org.dromara.common.log.enums.BusinessType;
|
||||||
import org.dromara.common.mq.utils.MqUtil;
|
|
||||||
import org.dromara.common.satoken.utils.LoginHelper;
|
import org.dromara.common.satoken.utils.LoginHelper;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@Tag(name = "订单")
|
@Tag(name = "app-用户-订单接口")
|
||||||
@RequestMapping("/app/order")
|
@RequestMapping("/app/order")
|
||||||
@RestController
|
@RestController
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
|
@ -6,6 +6,7 @@ import com.wzj.soopin.member.domain.bo.AccountBillBO;
|
|||||||
import com.wzj.soopin.member.domain.vo.AccountBillVO;
|
import com.wzj.soopin.member.domain.vo.AccountBillVO;
|
||||||
import com.wzj.soopin.member.domain.vo.AccountStatisticVO;
|
import com.wzj.soopin.member.domain.vo.AccountStatisticVO;
|
||||||
import com.wzj.soopin.transaction.service.IAccountBillService;
|
import com.wzj.soopin.transaction.service.IAccountBillService;
|
||||||
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
@ -60,7 +61,7 @@ public class AppMerchantBillController {
|
|||||||
return R.ok(voPage);
|
return R.ok(voPage);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Tag(name = "账户统计")
|
@Operation(summary = "账户统计")
|
||||||
@PostMapping("/statistic")
|
@PostMapping("/statistic")
|
||||||
public R<AccountStatisticVO> statistic() {
|
public R<AccountStatisticVO> statistic() {
|
||||||
LoginUser loginUser = LoginHelper.getLoginUser();
|
LoginUser loginUser = LoginHelper.getLoginUser();
|
||||||
|
@ -2,8 +2,9 @@ package org.dromara.app.merchant;
|
|||||||
|
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import com.wzj.soopin.order.business.IOrderBusiness;
|
import com.wzj.soopin.order.business.IOrderBusiness;
|
||||||
import com.wzj.soopin.order.domain.bo.OrderBo;
|
import com.wzj.soopin.order.domain.bo.OrderItemBo;
|
||||||
import com.wzj.soopin.order.domain.entity.Order;
|
import com.wzj.soopin.order.domain.entity.Order;
|
||||||
|
import com.wzj.soopin.order.domain.vo.MerchantOrderVO;
|
||||||
import com.wzj.soopin.order.domain.vo.OrderVO;
|
import com.wzj.soopin.order.domain.vo.OrderVO;
|
||||||
import com.wzj.soopin.order.service.IMerchantOrderService;
|
import com.wzj.soopin.order.service.IMerchantOrderService;
|
||||||
import com.wzj.soopin.order.service.VerificationCodeService;
|
import com.wzj.soopin.order.service.VerificationCodeService;
|
||||||
@ -12,8 +13,6 @@ import io.swagger.v3.oas.annotations.tags.Tag;
|
|||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.dromara.common.core.domain.R;
|
import org.dromara.common.core.domain.R;
|
||||||
import org.dromara.common.core.domain.model.LoginUser;
|
|
||||||
import org.dromara.common.satoken.utils.LoginHelper;
|
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -23,7 +22,7 @@ import org.springframework.web.bind.annotation.*;
|
|||||||
* @since 2020-12-18 16:59
|
* @since 2020-12-18 16:59
|
||||||
*/
|
*/
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@Tag(name = "商户端,订单接口")
|
@Tag(name = "app-商户-订单接口")
|
||||||
@RequestMapping("/app/merchant/order")
|
@RequestMapping("/app/merchant/order")
|
||||||
@RestController
|
@RestController
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@ -57,9 +56,7 @@ public class AppMerchantOrderController {
|
|||||||
|
|
||||||
@PostMapping("/page")
|
@PostMapping("/page")
|
||||||
@Operation(summary = "查询当前商家订单列表")
|
@Operation(summary = "查询当前商家订单列表")
|
||||||
public R<IPage<OrderVO>> page(@RequestBody OrderBo bo){
|
public R<IPage<MerchantOrderVO>> page(@RequestBody OrderItemBo bo){
|
||||||
LoginUser loginUser= LoginHelper.getLoginUser();
|
|
||||||
bo.setTenantId(loginUser.getTenantId());
|
|
||||||
return R.ok(merchantOrderService.page(bo));
|
return R.ok(merchantOrderService.page(bo));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,8 @@
|
|||||||
package org.dromara.web.controller;
|
package org.dromara.web.controller;
|
||||||
|
|
||||||
import cn.dev33.satoken.annotation.SaIgnore;
|
import cn.dev33.satoken.annotation.SaIgnore;
|
||||||
import cn.dev33.satoken.exception.NotLoginException;
|
|
||||||
import cn.dev33.satoken.stp.StpUtil;
|
import cn.dev33.satoken.stp.StpUtil;
|
||||||
import cn.hutool.core.codec.Base64;
|
import cn.hutool.core.codec.Base64;
|
||||||
import cn.hutool.core.collection.CollUtil;
|
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import jakarta.servlet.http.HttpServletRequest;
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
@ -16,7 +14,6 @@ import me.zhyd.oauth.utils.AuthStateUtils;
|
|||||||
import org.dromara.common.core.constant.SystemConstants;
|
import org.dromara.common.core.constant.SystemConstants;
|
||||||
import org.dromara.common.core.domain.R;
|
import org.dromara.common.core.domain.R;
|
||||||
import org.dromara.common.core.domain.model.LoginBody;
|
import org.dromara.common.core.domain.model.LoginBody;
|
||||||
import org.dromara.common.core.domain.model.LoginUser;
|
|
||||||
import org.dromara.common.core.domain.model.RegisterBody;
|
import org.dromara.common.core.domain.model.RegisterBody;
|
||||||
import org.dromara.common.core.domain.model.SocialLoginBody;
|
import org.dromara.common.core.domain.model.SocialLoginBody;
|
||||||
import org.dromara.common.core.utils.*;
|
import org.dromara.common.core.utils.*;
|
||||||
@ -29,8 +26,6 @@ import org.dromara.common.social.utils.SocialUtils;
|
|||||||
import org.dromara.common.sse.dto.SseMessageDto;
|
import org.dromara.common.sse.dto.SseMessageDto;
|
||||||
import org.dromara.common.sse.utils.SseMessageUtils;
|
import org.dromara.common.sse.utils.SseMessageUtils;
|
||||||
import org.dromara.common.tenant.helper.TenantHelper;
|
import org.dromara.common.tenant.helper.TenantHelper;
|
||||||
import org.dromara.system.domain.SysTenant;
|
|
||||||
import org.dromara.system.domain.bo.SysTenantBo;
|
|
||||||
import org.dromara.system.domain.vo.SysClientVo;
|
import org.dromara.system.domain.vo.SysClientVo;
|
||||||
import org.dromara.system.domain.vo.SysTenantVo;
|
import org.dromara.system.domain.vo.SysTenantVo;
|
||||||
import org.dromara.system.service.*;
|
import org.dromara.system.service.*;
|
||||||
@ -43,7 +38,6 @@ import org.dromara.web.service.SysRegisterService;
|
|||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
import java.net.URL;
|
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -297,6 +297,10 @@ springdoc:
|
|||||||
packages-to-scan: com.wzj.soopin.im
|
packages-to-scan: com.wzj.soopin.im
|
||||||
- group: 7.系统模块
|
- group: 7.系统模块
|
||||||
packages-to-scan: org.dromara.system
|
packages-to-scan: org.dromara.system
|
||||||
|
- group: 8.app会员模块
|
||||||
|
packages-to-scan: org.dromara.app.customer
|
||||||
|
- group: 9.app商户模块
|
||||||
|
packages-to-scan: org.dromara.app.merchant
|
||||||
legacy-mode: true
|
legacy-mode: true
|
||||||
knife4j:
|
knife4j:
|
||||||
enable: true
|
enable: true
|
||||||
|
@ -1,16 +1,16 @@
|
|||||||
package com.wzj.soopin.order.domain.bo;
|
package com.wzj.soopin.order.domain.bo;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.wzj.soopin.order.domain.entity.OrderItem;
|
import com.wzj.soopin.order.domain.entity.OrderItem;
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
import org.dromara.common.core.domain.BaseBO;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
@Schema(description = "订单中所包含的商品 查询 对象")
|
@Schema(description = "订单中所包含的商品 查询 对象")
|
||||||
public class OrderItemBo {
|
public class OrderItemBo extends BaseBO <OrderItem> {
|
||||||
@Schema(description = "订单id 精确匹配")
|
@Schema(description = "订单id 精确匹配")
|
||||||
private Long orderId;
|
private Long orderId;
|
||||||
|
|
||||||
@ -32,9 +32,6 @@ public class OrderItemBo {
|
|||||||
@Schema(description = "sku快照id 精确匹配")
|
@Schema(description = "sku快照id 精确匹配")
|
||||||
private Long skuSnapshotId;
|
private Long skuSnapshotId;
|
||||||
|
|
||||||
@Schema(description = "展示图片 精确匹配")
|
|
||||||
private String pic;
|
|
||||||
|
|
||||||
@Schema(description = "PRODUCT_NAME 精确匹配")
|
@Schema(description = "PRODUCT_NAME 精确匹配")
|
||||||
private String productNameLike;
|
private String productNameLike;
|
||||||
|
|
||||||
@ -50,10 +47,10 @@ public class OrderItemBo {
|
|||||||
@Schema(description = "商品分类id 精确匹配")
|
@Schema(description = "商品分类id 精确匹配")
|
||||||
private Long productCategoryId;
|
private Long productCategoryId;
|
||||||
|
|
||||||
@Schema(description = "商品sku属性:[{\"key\":\"颜色\",\"value\":\"颜色\"},{\"key\":\"容量\",\"value\":\"4G\"}] 精确匹配")
|
@Schema(description = "商户租户id", hidden = true)
|
||||||
private String spData;
|
private String tenantId;
|
||||||
|
|
||||||
public Wrapper<OrderItem> toWrapper() {
|
public LambdaQueryWrapper<OrderItem> toWrapper() {
|
||||||
return new LambdaQueryWrapper<OrderItem>()
|
return new LambdaQueryWrapper<OrderItem>()
|
||||||
.eq(orderId != null, OrderItem::getOrderId, orderId)
|
.eq(orderId != null, OrderItem::getOrderId, orderId)
|
||||||
.eq(productId != null, OrderItem::getProductId, productId)
|
.eq(productId != null, OrderItem::getProductId, productId)
|
||||||
@ -62,12 +59,10 @@ public class OrderItemBo {
|
|||||||
.eq(outSkuId != null && !outSkuId.isEmpty(), OrderItem::getOutSkuId, outSkuId)
|
.eq(outSkuId != null && !outSkuId.isEmpty(), OrderItem::getOutSkuId, outSkuId)
|
||||||
.eq(productSnapshotId != null, OrderItem::getProductSnapshotId, productSnapshotId)
|
.eq(productSnapshotId != null, OrderItem::getProductSnapshotId, productSnapshotId)
|
||||||
.eq(skuSnapshotId != null, OrderItem::getSkuSnapshotId, skuSnapshotId)
|
.eq(skuSnapshotId != null, OrderItem::getSkuSnapshotId, skuSnapshotId)
|
||||||
.eq(pic != null && !pic.isEmpty(), OrderItem::getPic, pic)
|
|
||||||
.like(productNameLike != null && !productNameLike.isEmpty(), OrderItem::getProductName, productNameLike)
|
.like(productNameLike != null && !productNameLike.isEmpty(), OrderItem::getProductName, productNameLike)
|
||||||
.eq(salePrice != null, OrderItem::getSalePrice, salePrice)
|
.eq(salePrice != null, OrderItem::getSalePrice, salePrice)
|
||||||
.eq(purchasePrice != null, OrderItem::getPurchasePrice, purchasePrice)
|
.eq(purchasePrice != null, OrderItem::getPurchasePrice, purchasePrice)
|
||||||
.eq(quantity != null, OrderItem::getQuantity, quantity)
|
.eq(quantity != null, OrderItem::getQuantity, quantity)
|
||||||
.eq(productCategoryId != null, OrderItem::getProductCategoryId, productCategoryId)
|
.eq(productCategoryId != null, OrderItem::getProductCategoryId, productCategoryId);
|
||||||
.eq(spData != null && !spData.isEmpty(), OrderItem::getSpData, spData);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package com.wzj.soopin.order.domain.bo;
|
package com.wzj.soopin.order.domain.bo;
|
||||||
|
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import jakarta.validation.constraints.NotNull;
|
import jakarta.validation.constraints.NotNull;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Builder;
|
import lombok.Builder;
|
||||||
@ -16,15 +17,15 @@ import lombok.NoArgsConstructor;
|
|||||||
@Builder
|
@Builder
|
||||||
public class SaveOrderSkuItemBO {
|
public class SaveOrderSkuItemBO {
|
||||||
|
|
||||||
/**
|
@Schema(description = "商品id")
|
||||||
* 商品id
|
|
||||||
*/
|
|
||||||
@NotNull(message = "商品id不能为空")
|
@NotNull(message = "商品id不能为空")
|
||||||
private Long skuId;
|
private Long skuId;
|
||||||
|
|
||||||
/**
|
|
||||||
* 下单数量
|
|
||||||
*/
|
|
||||||
@NotNull(message = "下单数量不能为空")
|
@NotNull(message = "下单数量不能为空")
|
||||||
|
@Schema(description = "下单数量")
|
||||||
private Integer quantity;
|
private Integer quantity;
|
||||||
|
|
||||||
|
@Schema(description = "商品分享人id")
|
||||||
|
private Long shareMemberId;
|
||||||
}
|
}
|
||||||
|
@ -83,8 +83,8 @@ public class OrderItem extends BaseAudit {
|
|||||||
@Excel(name = "商品分类id")
|
@Excel(name = "商品分类id")
|
||||||
private Long productCategoryId;
|
private Long productCategoryId;
|
||||||
|
|
||||||
@Schema(description = "商品sku属性:[{\"key\":\"颜色\",\"value\":\"颜色\"},{\"key\":\"容量\",\"value\":\"4G\"}]")
|
@Schema(description = "商品sku属性")
|
||||||
@Excel(name = "商品sku属性:[{\"key\":\"颜色\",\"value\":\"颜色\"},{\"key\":\"容量\",\"value\":\"4G\"}]")
|
@Excel(name = "商品sku属性")
|
||||||
private String spData;
|
private String spData;
|
||||||
|
|
||||||
@Schema(description = "租户id")
|
@Schema(description = "租户id")
|
||||||
@ -95,4 +95,8 @@ public class OrderItem extends BaseAudit {
|
|||||||
@Excel(name = "租户名称")
|
@Excel(name = "租户名称")
|
||||||
private String tenantName;
|
private String tenantName;
|
||||||
|
|
||||||
|
@Schema(description = "商品分享人id")
|
||||||
|
private Long shareMemberId;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,119 @@
|
|||||||
|
package com.wzj.soopin.order.domain.vo;
|
||||||
|
|
||||||
|
|
||||||
|
import com.wzj.soopin.order.emum.OrderStatusEnum;
|
||||||
|
import com.wzj.soopin.order.emum.VerificationCodeStatus;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import org.dromara.common.excel.annotation.Excel;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
@Schema(description = "商家订单详情")
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
public class MerchantOrderVO {
|
||||||
|
|
||||||
|
@Schema(description = "订单id")
|
||||||
|
private String orderId;
|
||||||
|
|
||||||
|
@Schema(description = "订单编号")
|
||||||
|
private String orderSn;
|
||||||
|
|
||||||
|
@Schema(description = "MEMBER_ID")
|
||||||
|
@Excel(name = "MEMBER_ID")
|
||||||
|
private Long memberId;
|
||||||
|
|
||||||
|
@Schema(description = "用户帐号")
|
||||||
|
@Excel(name = "用户帐号")
|
||||||
|
private String memberUsername;
|
||||||
|
|
||||||
|
@Schema(description = "商家备注")
|
||||||
|
private String merchantNote;
|
||||||
|
|
||||||
|
@Schema(description = "支付方式")
|
||||||
|
private Integer payType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 订单状态
|
||||||
|
* @see OrderStatusEnum#getValue()
|
||||||
|
*/
|
||||||
|
@Schema(description="订单状态", implementation = OrderStatusEnum.class)
|
||||||
|
private Integer status;
|
||||||
|
|
||||||
|
@Schema(description="是否处于退款状态")
|
||||||
|
private Boolean aftersale;
|
||||||
|
|
||||||
|
@Schema(description = "订单明细id")
|
||||||
|
private Long orderItemId;
|
||||||
|
|
||||||
|
@Schema(description = "商品id")
|
||||||
|
private Long productId;
|
||||||
|
|
||||||
|
@Schema(description = "商品skuid")
|
||||||
|
private Long skuId;
|
||||||
|
|
||||||
|
@Schema(description = "商品快照id")
|
||||||
|
private Long productSnapshotId;
|
||||||
|
|
||||||
|
@Schema(description = "sku快照id")
|
||||||
|
private Long skuSnapshotId;
|
||||||
|
|
||||||
|
@Schema(description = "展示图片")
|
||||||
|
private String pic;
|
||||||
|
|
||||||
|
@Schema(description = "商品名称")
|
||||||
|
private String productName;
|
||||||
|
|
||||||
|
@Schema(description = "销售价格")
|
||||||
|
private BigDecimal salePrice;
|
||||||
|
|
||||||
|
@Schema(description = "购买数量")
|
||||||
|
private Integer quantity;
|
||||||
|
|
||||||
|
@Schema(description = "商品分类id")
|
||||||
|
private Long productCategoryId;
|
||||||
|
|
||||||
|
@Schema(description = "商品分类名称")
|
||||||
|
private String productCategoryName;
|
||||||
|
|
||||||
|
@Schema(description = "商品sku属性")
|
||||||
|
private String spData;
|
||||||
|
|
||||||
|
@Schema(description = "商户id")
|
||||||
|
private String tenantId;
|
||||||
|
|
||||||
|
@Schema(description = "商户名称")
|
||||||
|
private String tenantName;
|
||||||
|
|
||||||
|
@Schema(description = "核销码")
|
||||||
|
private String code;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 核销状态
|
||||||
|
* @see VerificationCodeStatus#getCode()
|
||||||
|
*/
|
||||||
|
@Schema(description = "核销状态", implementation = VerificationCodeStatus.class)
|
||||||
|
private Integer verificationCodeStatus;
|
||||||
|
|
||||||
|
@Schema(description = "核销码使用时间")
|
||||||
|
private LocalDateTime usedTime;
|
||||||
|
|
||||||
|
@Schema(description = "使用商家id")
|
||||||
|
private String usedMerchantId;
|
||||||
|
|
||||||
|
@Schema(description = "过期时间")
|
||||||
|
private LocalDateTime expireTime;
|
||||||
|
|
||||||
|
@Schema(description = "核销时间")
|
||||||
|
private LocalDateTime verificationTime;
|
||||||
|
|
||||||
|
@Schema(description = "核销失败原因")
|
||||||
|
private String reason;
|
||||||
|
}
|
@ -0,0 +1,59 @@
|
|||||||
|
package com.wzj.soopin.order.domain.vo;
|
||||||
|
|
||||||
|
import com.wzj.soopin.order.emum.VerificationCodeStatus;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.*;
|
||||||
|
import org.dromara.common.core.domain.model.BaseAudit;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@Schema(description = "核销码VO")
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
public class VerificationCodesVO extends BaseAudit {
|
||||||
|
|
||||||
|
@Schema(description = "ID")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
@Schema(description = "核销码")
|
||||||
|
private String code;
|
||||||
|
|
||||||
|
@Schema(description = "关联订单id")
|
||||||
|
private Long orderId;
|
||||||
|
|
||||||
|
@Schema(description = "订单子项id")
|
||||||
|
private Long orderItemId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 状态 见{@link VerificationCodeStatus}
|
||||||
|
*/
|
||||||
|
@Schema(description = "状态")
|
||||||
|
private Integer status;
|
||||||
|
|
||||||
|
@Schema(description = "用户id")
|
||||||
|
private Long memberId;
|
||||||
|
|
||||||
|
@Schema(description = "用户昵称")
|
||||||
|
private String memberName;
|
||||||
|
|
||||||
|
@Schema(description = "使用时间")
|
||||||
|
private LocalDateTime usedTime;
|
||||||
|
|
||||||
|
@Schema(description = "使用商家id")
|
||||||
|
private String usedMerchantId;
|
||||||
|
|
||||||
|
@Schema(description = "过期时间")
|
||||||
|
private LocalDateTime expireTime;
|
||||||
|
|
||||||
|
@Schema(description = "核销时间")
|
||||||
|
private LocalDateTime verificationTime;
|
||||||
|
|
||||||
|
@Schema(description = "核销结果")
|
||||||
|
private Integer result;
|
||||||
|
|
||||||
|
@Schema(description = "失败原因")
|
||||||
|
private String reason;
|
||||||
|
}
|
@ -1,9 +1,15 @@
|
|||||||
package com.wzj.soopin.order.mapper;
|
package com.wzj.soopin.order.mapper;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import com.wzj.soopin.order.domain.bo.OrderItemBo;
|
||||||
import com.wzj.soopin.order.domain.entity.OrderItem;
|
import com.wzj.soopin.order.domain.entity.OrderItem;
|
||||||
|
import com.wzj.soopin.order.domain.vo.MerchantOrderVO;
|
||||||
|
import com.wzj.soopin.order.domain.vo.OrderItemVO;
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
import org.apache.ibatis.annotations.Select;
|
import org.apache.ibatis.annotations.Select;
|
||||||
|
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@ -14,7 +20,7 @@ import java.util.Map;
|
|||||||
* @author zcc
|
* @author zcc
|
||||||
*/
|
*/
|
||||||
@Mapper
|
@Mapper
|
||||||
public interface OrderItemMapper extends BaseMapper<OrderItem> {
|
public interface OrderItemMapper extends BaseMapperPlus<OrderItem, OrderItemVO> {
|
||||||
/**
|
/**
|
||||||
* 查询订单中所包含的商品列表
|
* 查询订单中所包含的商品列表
|
||||||
*
|
*
|
||||||
@ -63,4 +69,6 @@ public interface OrderItemMapper extends BaseMapper<OrderItem> {
|
|||||||
|
|
||||||
@Select("SELECT * FROM oms_order_item WHERE order_id = #{orderId}")
|
@Select("SELECT * FROM oms_order_item WHERE order_id = #{orderId}")
|
||||||
List<OrderItem> findByOrderId(Long orderId);
|
List<OrderItem> findByOrderId(Long orderId);
|
||||||
|
|
||||||
|
IPage<MerchantOrderVO> selectMerchatOrderPage(@Param("page") Page<Object> page, @Param("query") OrderItemBo query);
|
||||||
}
|
}
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
package com.wzj.soopin.order.service;
|
package com.wzj.soopin.order.service;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
import com.wzj.soopin.order.domain.bo.OrderBo;
|
import com.wzj.soopin.order.domain.bo.OrderItemBo;
|
||||||
import com.wzj.soopin.order.domain.entity.Order;
|
import com.wzj.soopin.order.domain.entity.Order;
|
||||||
import com.wzj.soopin.order.domain.vo.OrderVO;
|
import com.wzj.soopin.order.domain.vo.MerchantOrderVO;
|
||||||
|
|
||||||
public interface IMerchantOrderService extends IService<Order> {
|
public interface IMerchantOrderService extends IService<Order> {
|
||||||
Page<OrderVO> page(OrderBo bo);
|
|
||||||
|
|
||||||
|
IPage<MerchantOrderVO> page(OrderItemBo bo);
|
||||||
}
|
}
|
||||||
|
@ -1,68 +1,31 @@
|
|||||||
package com.wzj.soopin.order.service.impl;
|
package com.wzj.soopin.order.service.impl;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import com.wzj.soopin.goods.mapper.SkuMapper;
|
import com.wzj.soopin.order.domain.bo.OrderItemBo;
|
||||||
import com.wzj.soopin.order.convert.OrderConvert;
|
|
||||||
import com.wzj.soopin.order.convert.OrderItemConvert;
|
|
||||||
import com.wzj.soopin.order.domain.bo.OrderBo;
|
|
||||||
import com.wzj.soopin.order.domain.entity.Order;
|
import com.wzj.soopin.order.domain.entity.Order;
|
||||||
import com.wzj.soopin.order.domain.entity.OrderItem;
|
import com.wzj.soopin.order.domain.vo.MerchantOrderVO;
|
||||||
import com.wzj.soopin.order.domain.vo.OrderVO;
|
|
||||||
import com.wzj.soopin.order.mapper.OrderItemMapper;
|
import com.wzj.soopin.order.mapper.OrderItemMapper;
|
||||||
import com.wzj.soopin.order.mapper.OrderMapper;
|
import com.wzj.soopin.order.mapper.OrderMapper;
|
||||||
import com.wzj.soopin.order.service.IMemberOrderService;
|
|
||||||
import com.wzj.soopin.order.service.IMerchantOrderService;
|
import com.wzj.soopin.order.service.IMerchantOrderService;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.dromara.common.tenant.helper.TenantHelper;
|
import org.dromara.common.core.domain.model.LoginUser;
|
||||||
|
import org.dromara.common.satoken.utils.LoginHelper;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class MerchantOrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements IMerchantOrderService {
|
public class MerchantOrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements IMerchantOrderService {
|
||||||
|
|
||||||
private final OrderConvert convert;
|
|
||||||
private final OrderItemMapper orderItemMapper;
|
private final OrderItemMapper orderItemMapper;
|
||||||
private final SkuMapper skuMapper;
|
|
||||||
private final OrderItemConvert orderItemConvert;
|
|
||||||
@Override
|
@Override
|
||||||
public Page<OrderVO> page( OrderBo bo) {
|
public IPage<MerchantOrderVO> page(OrderItemBo bo) {
|
||||||
Page<Order> resultPage = baseMapper.selectPage(bo.getPage(),bo.toWrapper());
|
LoginUser loginUser= LoginHelper.getLoginUser();
|
||||||
|
bo.setTenantId(loginUser.getTenantId());
|
||||||
Page<OrderVO> orderVOPage = convert.toVO(resultPage);
|
return orderItemMapper.selectMerchatOrderPage(Page.of(bo.getCurrent(), bo.getSize()),bo);
|
||||||
List<OrderVO> orderVOList = orderVOPage.getRecords();
|
|
||||||
if (orderVOList.isEmpty()) {
|
|
||||||
return orderVOPage;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 获取所有订单id
|
|
||||||
List<Long> orderIds = orderVOList.stream()
|
|
||||||
.map(OrderVO::getId)
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
|
|
||||||
// 根据订单id查询订单详情
|
|
||||||
QueryWrapper<OrderItem> orderItemQueryWrapper = new QueryWrapper<>();
|
|
||||||
orderItemQueryWrapper.in("order_id", orderIds);
|
|
||||||
List<OrderItem> orderItemList = orderItemMapper.selectList(orderItemQueryWrapper);
|
|
||||||
|
|
||||||
// 按照订单id分组订单详情
|
|
||||||
Map<Long, List<OrderItem>> orderItemMapByOrderId = orderItemList.stream()
|
|
||||||
.collect(Collectors.groupingBy(OrderItem::getOrderId));
|
|
||||||
|
|
||||||
for (OrderVO orderVO : orderVOList) {
|
|
||||||
List<OrderItem> orderItems = orderItemMapByOrderId.get(orderVO.getId());
|
|
||||||
if (orderItems != null) {
|
|
||||||
orderVO.setItems(orderItemConvert.toVO(orderItems));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return orderVOPage;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -255,11 +255,16 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|||||||
.productSnapshotId(product.getProductSnapshotId())
|
.productSnapshotId(product.getProductSnapshotId())
|
||||||
.skuId(sku.getId())
|
.skuId(sku.getId())
|
||||||
.skuSnapshotId(sku.getSkuSnapshotId())
|
.skuSnapshotId(sku.getSkuSnapshotId())
|
||||||
.productName(product != null ? product.getName() : "")
|
.productCategoryId(product.getCategoryId())
|
||||||
|
.productName(product.getName())
|
||||||
|
.outProductId(product.getOutProductId())
|
||||||
|
.spData(sku.getSpData())
|
||||||
|
.outSkuId(sku.getOutSkuId())
|
||||||
.pic(sku.getPic())
|
.pic(sku.getPic())
|
||||||
.salePrice(sku.getPrice())
|
.salePrice(sku.getPrice())
|
||||||
.quantity(map.get(sku.getId()))
|
.quantity(map.get(sku.getId()))
|
||||||
.tenantId(sku.getTenantId())
|
.tenantId(sku.getTenantId())
|
||||||
|
.shareMemberId(skuItemBOList.stream().filter(item -> item.getSkuId().equals(sku.getId())).findFirst().get().getShareMemberId())
|
||||||
.build();
|
.build();
|
||||||
}).toList();
|
}).toList();
|
||||||
orderItemMapper.insert(orderItemList);
|
orderItemMapper.insert(orderItemList);
|
||||||
|
@ -4,38 +4,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
<mapper namespace="com.wzj.soopin.order.mapper.OrderItemMapper">
|
<mapper namespace="com.wzj.soopin.order.mapper.OrderItemMapper">
|
||||||
|
|
||||||
<resultMap type="OrderItem" id="OrderItemResult">
|
<select id="selectByEntity" parameterType="OrderItem" resultType="OrderItem" >
|
||||||
<result property="id" column="id"/>
|
select * from oms_order_item
|
||||||
<result property="orderId" column="order_id"/>
|
|
||||||
<result property="productId" column="product_id"/>
|
|
||||||
<result property="outProductId" column="out_product_id"/>
|
|
||||||
<result property="skuId" column="sku_id"/>
|
|
||||||
<result property="outSkuId" column="out_sku_id"/>
|
|
||||||
<result property="productSnapshotId" column="product_snapshot_id"/>
|
|
||||||
<result property="skuSnapshotId" column="sku_snapshot_id"/>
|
|
||||||
<result property="pic" column="pic"/>
|
|
||||||
<result property="productName" column="product_name"/>
|
|
||||||
<result property="salePrice" column="sale_price"/>
|
|
||||||
<result property="purchasePrice" column="purchase_price"/>
|
|
||||||
<result property="quantity" column="quantity"/>
|
|
||||||
<result property="productCategoryId" column="product_category_id"/>
|
|
||||||
<result property="spData" column="sp_data"/>
|
|
||||||
<result property="createBy" column="create_by"/>
|
|
||||||
<result property="createTime" column="create_time"/>
|
|
||||||
<result property="updateBy" column="update_by"/>
|
|
||||||
<result property="updateTime" column="update_time"/>
|
|
||||||
<result property="createBy" column="create_by"/>
|
|
||||||
<result property="createTime" column="create_time"/>
|
|
||||||
<result property="updateBy" column="update_by"/>
|
|
||||||
<result property="updateTime" column="update_time" />
|
|
||||||
</resultMap>
|
|
||||||
|
|
||||||
<sql id="selectOrderItemVo">
|
|
||||||
select id, order_id, product_id, out_product_id, sku_id, out_sku_id, product_snapshot_id, sku_snapshot_id, pic, product_name, sale_price, purchase_price, quantity, product_category_id, sp_data, create_by, create_time, update_by, update_time from oms_order_item
|
|
||||||
</sql>
|
|
||||||
|
|
||||||
<select id="selectByEntity" parameterType="OrderItem" resultMap="OrderItemResult">
|
|
||||||
<include refid="selectOrderItemVo"/>
|
|
||||||
<where>
|
<where>
|
||||||
<if test="orderId != null "> and order_id = #{orderId}</if>
|
<if test="orderId != null "> and order_id = #{orderId}</if>
|
||||||
<if test="productId != null "> and product_id = #{productId}</if>
|
<if test="productId != null "> and product_id = #{productId}</if>
|
||||||
@ -54,7 +24,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
</where>
|
</where>
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="selectOrderItem" parameterType="OrderItem" resultMap="OrderItemResult">
|
<select id="selectOrderItem" parameterType="OrderItem" resultType="OrderItem">
|
||||||
SELECT * FROM oms_order_item
|
SELECT * FROM oms_order_item
|
||||||
<where>
|
<where>
|
||||||
<if test="query.orderId != null and query.orderId != ''">
|
<if test="query.orderId != null and query.orderId != ''">
|
||||||
@ -101,4 +71,67 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
</if>
|
</if>
|
||||||
</where>
|
</where>
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<select id="selectMerchatOrderPage" resultType="com.wzj.soopin.order.domain.vo.MerchantOrderVO">
|
||||||
|
SELECT o.id AS orderId,
|
||||||
|
o.order_sn AS orderSn,
|
||||||
|
o.member_id AS memberId,
|
||||||
|
o.member_username AS memberUsername,
|
||||||
|
o.merchant_note AS merchantNote,
|
||||||
|
o.pay_type AS payType,
|
||||||
|
o.status AS status,
|
||||||
|
o.aftersale AS aftersale,
|
||||||
|
oi.id AS orderItemId,
|
||||||
|
oi.product_id AS productId,
|
||||||
|
oi.sku_id AS skuId,
|
||||||
|
oi.product_snapshot_id AS productSnapshotId,
|
||||||
|
ppc.name AS productCategoryName,
|
||||||
|
oi.sku_snapshot_id AS skuSnapshotId,
|
||||||
|
oi.pic AS pic,
|
||||||
|
oi.product_name AS productName,
|
||||||
|
oi.sale_price AS salePrice,
|
||||||
|
oi.quantity AS quantity,
|
||||||
|
oi.product_category_id AS productCategoryId,
|
||||||
|
oi.sp_data AS spData,
|
||||||
|
oi.tenant_id AS tenantId,
|
||||||
|
oi.tenant_name AS tenantName
|
||||||
|
FROM oms_order_item oi
|
||||||
|
LEFT JOIN oms_order o ON oi.order_id = o.id
|
||||||
|
LEFT JOIN pms_product_category ppc ON oi.product_category_id = ppc.id
|
||||||
|
LEFT JOIN oms_verification_codes vc ON oi.id = vc.order_item_id
|
||||||
|
where oi.tenant_id = #{query.tenantId}
|
||||||
|
<if test="query.orderId != null">
|
||||||
|
AND o.id = #{query.orderId}
|
||||||
|
</if>
|
||||||
|
<if test="query.productId != null">
|
||||||
|
AND oi.product_id = #{query.productId}
|
||||||
|
</if>
|
||||||
|
<if test="query.outProductId != null">
|
||||||
|
AND oi.out_product_id = #{query.outProductId}
|
||||||
|
</if>
|
||||||
|
<if test="query.skuId != null">
|
||||||
|
AND oi.sku_id = #{query.skuId}
|
||||||
|
</if>
|
||||||
|
<if test="query.outSkuId != null">
|
||||||
|
AND oi.out_sku_id = #{query.outSkuId}
|
||||||
|
</if>
|
||||||
|
<if test="query.productSnapshotId != null">
|
||||||
|
AND oi.product_snapshot_id = #{query.productSnapshotId}
|
||||||
|
</if>
|
||||||
|
<if test="query.skuSnapshotId != null">
|
||||||
|
AND oi.sku_snapshot_id = #{query.skuSnapshotId}
|
||||||
|
</if>
|
||||||
|
<if test="query.salePrice != null">
|
||||||
|
AND oi.sale_price = #{query.salePrice}
|
||||||
|
</if>
|
||||||
|
<if test="query.productCategoryId != null">
|
||||||
|
AND oi.product_category_id = #{query.productCategoryId}
|
||||||
|
</if>
|
||||||
|
<if test="query.productCategoryId != null">
|
||||||
|
AND oi.product_category_id = #{query.productCategoryId}
|
||||||
|
</if>
|
||||||
|
<if test="query.productCategoryId != null">
|
||||||
|
AND oi.product_category_id = #{query.productCategoryId}
|
||||||
|
</if>
|
||||||
|
</select>
|
||||||
</mapper>
|
</mapper>
|
||||||
|
@ -44,13 +44,6 @@ public class DivideRuleBO extends BaseBO<DivideRule> {
|
|||||||
@NotBlank(message = "名称不能为空")
|
@NotBlank(message = "名称不能为空")
|
||||||
private String name;
|
private String name;
|
||||||
|
|
||||||
/**
|
|
||||||
* 手续费承担方式类型
|
|
||||||
*/
|
|
||||||
@Schema(description = "手续费承担方式")
|
|
||||||
@NotNull(message = "手续费承担方式不能为空")
|
|
||||||
private Integer feeType;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 状态
|
* 状态
|
||||||
|
@ -41,10 +41,6 @@ public class DivideRuleDetailBO extends BaseBO<DivideRuleDetail> {
|
|||||||
@NotNull(message = "金额占比百分值不能为空")
|
@NotNull(message = "金额占比百分值不能为空")
|
||||||
private Integer moneyPercent;
|
private Integer moneyPercent;
|
||||||
|
|
||||||
@Schema(description ="手续费占比百分值")
|
|
||||||
@ExcelProperty(value ="手续费占比百分值", order = 5)
|
|
||||||
@NotNull(message = "手续费占比百分值不能为空")
|
|
||||||
private Integer feePercent;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 分账租户类型,{@link TenantType}
|
* 分账租户类型,{@link TenantType}
|
||||||
|
@ -145,18 +145,14 @@ public class DivideRuleServiceImpl extends ServiceImpl<DivideRuleMapper, DivideR
|
|||||||
@Override
|
@Override
|
||||||
public void checkRule(List<DivideRuleDetail> details) {
|
public void checkRule(List<DivideRuleDetail> details) {
|
||||||
Map<Integer, List<DivideRuleDetail>> map = details.stream().collect(Collectors.groupingBy(DivideRuleDetail::getType));
|
Map<Integer, List<DivideRuleDetail>> map = details.stream().collect(Collectors.groupingBy(DivideRuleDetail::getType));
|
||||||
List<DivideRuleDetail> details1 = map.get(TenantType.MERCHANT.getType());
|
List<DivideRuleDetail> details1 = map.get(TenantType.PLATFORM.getType());
|
||||||
Assert.isTrue(details1 != null && details1.size() == 1, () -> new ServiceException("商户分账详情不能为空"));
|
Assert.isTrue(details1 != null && details1.size() == 1, () -> new ServiceException("平台分账详情不能为空"));
|
||||||
List<DivideRuleDetail> details2 = map.get(TenantType.PLATFORM.getType());
|
Assert.isTrue(CollUtil.size(map.get(TenantType.AGENT.getType())) <= 1 && CollUtil.size(map.get(TenantType.REFERENCE.getType())) <= 1 , () -> new ServiceException("分账详情存在重复账户类型"));
|
||||||
Assert.isTrue(details2 != null && details2.size() == 1, () -> new ServiceException("平台分账详情不能为空"));
|
|
||||||
long totalMoneyRatio = 0L;
|
long totalMoneyRatio = 0L;
|
||||||
long totalFeeRatio = 0L;
|
|
||||||
for (DivideRuleDetail detail : details) {
|
for (DivideRuleDetail detail : details) {
|
||||||
totalMoneyRatio += detail.getMoneyPercent();
|
totalMoneyRatio += detail.getMoneyPercent();
|
||||||
totalFeeRatio += detail.getFeePercent();
|
|
||||||
}
|
}
|
||||||
Assert.isTrue(totalMoneyRatio == 100L, () -> new ServiceException("金额分账比例之和未等于100%"));
|
Assert.isTrue(totalMoneyRatio == 100L, () -> new ServiceException("金额分账比例之和未等于100%"));
|
||||||
Assert.isTrue(totalFeeRatio == 100L, () -> new ServiceException("手续费分账比例之和未等于100%"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
Loading…
x
Reference in New Issue
Block a user