From 7fd3cd75a8f014e85e1a651852c6ccf25a5f20ef Mon Sep 17 00:00:00 2001 From: yang_shj Date: Wed, 9 Mar 2022 11:15:54 +0800 Subject: [PATCH] =?UTF-8?q?feat=200=20=E6=94=AF=E4=BB=98=E5=B7=A5=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/base/springcloud/bo/OrderBO.java | 12 +++++++-- .../springcloud/constant/ErrorConstant.java | 3 ++- .../controller/PaymentController.java | 12 +++++++++ .../base/springcloud/dao/SaleBillMapper.java | 7 ++++++ .../base/springcloud/schedule/OrderTask.java | 6 +++++ .../base/springcloud/service/BillService.java | 8 ++++++ .../springcloud/service/PaymentService.java | 6 +++++ .../service/imp/BillServiceImp.java | 25 +++++++++++++++++-- .../service/imp/OrderServiceImp.java | 2 +- .../service/imp/PaymentServiceImp.java | 22 +++++++++++----- .../base/springcloud/util/ParameterUtil.java | 21 +++++++++++++++- .../base/payment/mapper/SaleBillMapper.xml | 9 +++++++ 12 files changed, 120 insertions(+), 13 deletions(-) diff --git a/payment-base-app/src/main/java/com/base/springcloud/bo/OrderBO.java b/payment-base-app/src/main/java/com/base/springcloud/bo/OrderBO.java index b2430be..76dafaf 100644 --- a/payment-base-app/src/main/java/com/base/springcloud/bo/OrderBO.java +++ b/payment-base-app/src/main/java/com/base/springcloud/bo/OrderBO.java @@ -6,12 +6,20 @@ import com.base.springcloud.entity.SaleBill; import lombok.Data; import java.io.Serializable; +import java.math.BigDecimal; +import java.util.List; @Data public class OrderBO extends MchConfigEntity implements Serializable { - // 销售单据号 - private String billId; + // 是否合并销售单据标志 + private Boolean mergeFlag; + + // 销售单据号:可用逗号分隔 + private String billIds; + + // 订单金额 + private BigDecimal amount; // 销售单 private SaleBill saleBill; diff --git a/payment-base-app/src/main/java/com/base/springcloud/constant/ErrorConstant.java b/payment-base-app/src/main/java/com/base/springcloud/constant/ErrorConstant.java index 6f9dba4..37fa6a0 100644 --- a/payment-base-app/src/main/java/com/base/springcloud/constant/ErrorConstant.java +++ b/payment-base-app/src/main/java/com/base/springcloud/constant/ErrorConstant.java @@ -15,7 +15,8 @@ public enum ErrorConstant { TOKEN_EXPIRATION_DATE("RBS00010","TOKEN已失效,请重新登录!"), MERCHANT_CONFIGURE_FAIL("RBS00011","商户支付信息配置失败!"), USER_DEPART_RELATION_NEED("RBS00012","请用户先关联部门信息!"), - SAVE_PAY_DEPART_CONFIG_FAIL("RBS00013","添加部门商户支付配置信息失败!"); + SAVE_PAY_DEPART_CONFIG_FAIL("RBS00013","添加部门商户支付配置信息失败!"), + SALE_BILL__INVALID("RBS00014","无有效销售单据!"); private String code; private String message; diff --git a/payment-base-app/src/main/java/com/base/springcloud/controller/PaymentController.java b/payment-base-app/src/main/java/com/base/springcloud/controller/PaymentController.java index 2f0a482..96cb01c 100644 --- a/payment-base-app/src/main/java/com/base/springcloud/controller/PaymentController.java +++ b/payment-base-app/src/main/java/com/base/springcloud/controller/PaymentController.java @@ -18,6 +18,8 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + @RestController @Slf4j @Api(tags="支付管理") @@ -42,6 +44,16 @@ public class PaymentController { return new ReportResult(parameterUtil.nativePlaceOrderAfter(codeUrl)); } + @ApiOperation(value = "销售单合并native下单", notes = "销售单合并native下单") + @LoginRequired(department=true) + @GetMapping("/mergeNative") + public ReportResult mergeNative(@RequestParam String billIds) { + OrderBO orderBO = parameterUtil.mergeNativeBefore(billIds); + String codeUrl = paymentService.placeOrder(orderBO); + return new ReportResult(parameterUtil.mergeNativeAfter(codeUrl)); + } + + @ApiOperation(value = "退款", notes = "微信退款") @GetMapping("/refund") public CommonResult refund(@RequestParam String billId) { diff --git a/payment-base-app/src/main/java/com/base/springcloud/dao/SaleBillMapper.java b/payment-base-app/src/main/java/com/base/springcloud/dao/SaleBillMapper.java index be2ebdc..7eb66c0 100644 --- a/payment-base-app/src/main/java/com/base/springcloud/dao/SaleBillMapper.java +++ b/payment-base-app/src/main/java/com/base/springcloud/dao/SaleBillMapper.java @@ -1,8 +1,12 @@ package com.base.springcloud.dao; import com.base.springcloud.entity.SaleBill; +import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; +import java.math.BigDecimal; +import java.util.List; + @Repository public interface SaleBillMapper { @@ -21,4 +25,7 @@ public interface SaleBillMapper { SaleBill queryBillInfo(SaleBill saleBill); int writeOffBill(SaleBill bill); + + // 合并销售单据金额 + List mergeBillAmount(@Param("ids") String[] billIdArray); } \ No newline at end of file diff --git a/payment-base-app/src/main/java/com/base/springcloud/schedule/OrderTask.java b/payment-base-app/src/main/java/com/base/springcloud/schedule/OrderTask.java index b372966..51e3d88 100644 --- a/payment-base-app/src/main/java/com/base/springcloud/schedule/OrderTask.java +++ b/payment-base-app/src/main/java/com/base/springcloud/schedule/OrderTask.java @@ -21,4 +21,10 @@ public class OrderTask { public void syncOrderInfo(){ paymentService.syncOrderInfo(new Date()); } + + + @Scheduled(fixedDelay = 30 * 6000) + public void syncRefundInfo(){ + paymentService.syncRefundInfo(new Date()); + } } diff --git a/payment-base-app/src/main/java/com/base/springcloud/service/BillService.java b/payment-base-app/src/main/java/com/base/springcloud/service/BillService.java index bc3a0c2..810a0b7 100644 --- a/payment-base-app/src/main/java/com/base/springcloud/service/BillService.java +++ b/payment-base-app/src/main/java/com/base/springcloud/service/BillService.java @@ -4,6 +4,8 @@ import com.base.springcloud.bo.OrderBO; import com.base.springcloud.bo.SaleBillBO; import com.base.springcloud.entity.SaleBill; +import java.math.BigDecimal; + public interface BillService { /** @@ -18,4 +20,10 @@ public interface BillService { * @return */ void writeOffBill(SaleBillBO saleBillBO); + + /** + * 合并销售单据金额 + * @param orderBO + */ + void mergeBillAmount(OrderBO orderBO); } diff --git a/payment-base-app/src/main/java/com/base/springcloud/service/PaymentService.java b/payment-base-app/src/main/java/com/base/springcloud/service/PaymentService.java index 1b6dd92..4ca75b7 100644 --- a/payment-base-app/src/main/java/com/base/springcloud/service/PaymentService.java +++ b/payment-base-app/src/main/java/com/base/springcloud/service/PaymentService.java @@ -24,4 +24,10 @@ public interface PaymentService { * @param orderBO */ void queryOrder(OrderBO orderBO); + + /** + * 退款订单查询 + * @param + */ + void syncRefundInfo(Date date); } diff --git a/payment-base-app/src/main/java/com/base/springcloud/service/imp/BillServiceImp.java b/payment-base-app/src/main/java/com/base/springcloud/service/imp/BillServiceImp.java index c593a20..19e4eb4 100644 --- a/payment-base-app/src/main/java/com/base/springcloud/service/imp/BillServiceImp.java +++ b/payment-base-app/src/main/java/com/base/springcloud/service/imp/BillServiceImp.java @@ -4,16 +4,17 @@ import com.base.springcloud.aspect.annotation.BusinessException; import com.base.springcloud.bo.OrderBO; import com.base.springcloud.bo.SaleBillBO; import com.base.springcloud.constant.ErrorConstant; -import com.base.springcloud.constant.PaymentConstant; import com.base.springcloud.dao.SaleBillMapper; import com.base.springcloud.entity.SaleBill; import com.base.springcloud.service.BillService; +import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.math.BigDecimal; +import java.util.List; import java.util.Optional; @Service @@ -31,11 +32,12 @@ public class BillServiceImp implements BillService { @Override public void billCheck(OrderBO orderBO) { SaleBill saleBill = new SaleBill(); - saleBill.setId(orderBO.getBillId()); + saleBill.setId(orderBO.getBillIds()); SaleBill queryResult = saleBillMapper.queryBillInfo(saleBill); if(!Optional.ofNullable(queryResult).isPresent()){ throw new BusinessException(ErrorConstant.BILL_INVALID); } + orderBO.setAmount(queryResult.getTotalAmount()); orderBO.setSaleBill(queryResult); } @@ -53,4 +55,23 @@ public class BillServiceImp implements BillService { if(count > 0) return; throw new BusinessException(ErrorConstant.BILL_WRITE_OFF_FAIL); } + + /** + * 销售单据合并 + * @param orderBO + */ + @Override + public void mergeBillAmount(OrderBO orderBO) { + String billIds = orderBO.getBillIds(); + if(StringUtils.isBlank(billIds)){ + throw new BusinessException(ErrorConstant.NULL_OBJ); + } + String[] billIdArray = billIds.split(","); + List billAmountList = saleBillMapper.mergeBillAmount(billIdArray); + if(!Optional.ofNullable(billAmountList).isPresent()) + throw new BusinessException(ErrorConstant.SALE_BILL__INVALID); + BigDecimal orderAmount = new BigDecimal(0); + billAmountList.forEach(amount-> orderAmount.add(amount)); + orderBO.setAmount(orderAmount); + } } diff --git a/payment-base-app/src/main/java/com/base/springcloud/service/imp/OrderServiceImp.java b/payment-base-app/src/main/java/com/base/springcloud/service/imp/OrderServiceImp.java index 96b72c3..da28630 100644 --- a/payment-base-app/src/main/java/com/base/springcloud/service/imp/OrderServiceImp.java +++ b/payment-base-app/src/main/java/com/base/springcloud/service/imp/OrderServiceImp.java @@ -28,7 +28,7 @@ public class OrderServiceImp implements OrderService { @Override public void registerOrder(OrderBO orderBO) { SaleBill saleBill = orderBO.getSaleBill(); - BigDecimal amount = saleBill.getTotalAmount(); + BigDecimal amount = orderBO.getAmount(); if(amount.compareTo(BigDecimal.ZERO) <= 0){ throw new BusinessException(ErrorConstant.BILL_AMOUNT_ERR); } diff --git a/payment-base-app/src/main/java/com/base/springcloud/service/imp/PaymentServiceImp.java b/payment-base-app/src/main/java/com/base/springcloud/service/imp/PaymentServiceImp.java index 9d5bafc..d98eab7 100644 --- a/payment-base-app/src/main/java/com/base/springcloud/service/imp/PaymentServiceImp.java +++ b/payment-base-app/src/main/java/com/base/springcloud/service/imp/PaymentServiceImp.java @@ -5,6 +5,7 @@ import com.base.springcloud.bo.SaleBillBO; import com.base.springcloud.entity.Order; import com.base.springcloud.service.*; import com.base.springcloud.util.DecimalUtil; +import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -32,16 +33,16 @@ public class PaymentServiceImp implements PaymentService { @Autowired private WecPaymentService wecPaymentService; - //@Autowired - //private AmqpTemplate amqpTemplate; - - @Override public String placeOrder(OrderBO orderBO){ // 参数检查 parameterCheck(orderBO); - // 销售单据核查 - billService.billCheck(orderBO); + if(orderBO.getMergeFlag()) + // 销售单据合并 + billService.mergeBillAmount(orderBO); + else + // 销售单据核查 + billService.billCheck(orderBO); // 查询商户支付信息配置 merchantService.claimMerchantConfig(orderBO); // 登记订单 @@ -90,6 +91,15 @@ public class PaymentServiceImp implements PaymentService { billService.writeOffBill(saleBillBO); } + /** + * 退款订单信息查询 + * @param date + */ + @Override + public void syncRefundInfo(Date date) { + + } + // 参数检查 private void parameterCheck(OrderBO orderBO) { } diff --git a/payment-base-app/src/main/java/com/base/springcloud/util/ParameterUtil.java b/payment-base-app/src/main/java/com/base/springcloud/util/ParameterUtil.java index 63de9f2..dbc0e63 100644 --- a/payment-base-app/src/main/java/com/base/springcloud/util/ParameterUtil.java +++ b/payment-base-app/src/main/java/com/base/springcloud/util/ParameterUtil.java @@ -20,7 +20,8 @@ public class ParameterUtil { */ public OrderBO nativePlaceOrderBefore(String billId){ OrderBO orderBO = new OrderBO(); - orderBO.setBillId(billId); + orderBO.setBillIds(billId); + orderBO.setMergeFlag(false); orderBO.setMchId(PaymentConstant.DEFAULT_MCH_ID); return orderBO; } @@ -51,4 +52,22 @@ public class ParameterUtil { refundBO.setBillId(billId); return refundBO; } + + public OrderBO mergeNativeBefore(String billIds) { + OrderBO orderBO = new OrderBO(); + orderBO.setMergeFlag(true); + orderBO.setBillIds(billIds); + return orderBO; + } + + public List mergeNativeAfter(String codeUrl) { + if(StringUtils.isBlank(codeUrl)){ + return null; + } + List nativePlaceOrderDTOList = new ArrayList<>(); + NativePlaceOrderDTO nativePlaceOrderDTO = new NativePlaceOrderDTO(); + nativePlaceOrderDTO.setCodeUrl(codeUrl); + nativePlaceOrderDTOList.add(nativePlaceOrderDTO); + return nativePlaceOrderDTOList; + } } diff --git a/payment-base-app/src/main/resources/com/base/payment/mapper/SaleBillMapper.xml b/payment-base-app/src/main/resources/com/base/payment/mapper/SaleBillMapper.xml index 822bd2a..7d98132 100644 --- a/payment-base-app/src/main/resources/com/base/payment/mapper/SaleBillMapper.xml +++ b/payment-base-app/src/main/resources/com/base/payment/mapper/SaleBillMapper.xml @@ -543,4 +543,13 @@ pay_amount = pay_amount + #{payAmount,jdbcType=DECIMAL} where id = #{id,jdbcType=VARCHAR} + + \ No newline at end of file