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 8599185..82e40e3 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 @@ -16,12 +16,14 @@ public enum ErrorConstant { MERCHANT_CONFIGURE_FAIL("RBS00011","商户支付信息配置失败!"), USER_DEPART_RELATION_NEED("RBS00012","请用户先关联部门信息!"), SAVE_PAY_DEPART_CONFIG_FAIL("RBS00013","添加部门商户支付配置信息失败!"), - SALE_BILL__INVALID("RBS00014","无有效销售单据!"), + SALE_BILL_INVALID("RBS00014","无有效销售单据!"), MERCHANT_PAY_CERT_READ_FAIL("RBS00015","支付证书读取失败!"), PAY_ORDER_NOT_FOUND("RBS00016","无有效支付订单!"), ORDER_STATE_NOT_SUPPORT_REFUND("RBS00017","订单状态不支持退款!"), REGISTER_REFUND_FAIL("RBS00018","退款订单登记失败!"), - SYNC_WEC_REFUND_STATE_FAIL("RBS00019","同步微信退款状态失败!"); + SYNC_WEC_REFUND_STATE_FAIL("RBS00019","同步微信退款状态失败!"), + BILL_COMPLETE_PAYMENT("RBS00020","销售单据已完成付款!"), + ALL_BILL_COMPLETE_PAYMENT("RBS00020","所有销售单据已完成付款!"); private String code; private String message; diff --git a/payment-base-app/src/main/java/com/base/springcloud/dao/OrderBillMapper.java b/payment-base-app/src/main/java/com/base/springcloud/dao/OrderBillMapper.java index 822bf12..b927cb5 100644 --- a/payment-base-app/src/main/java/com/base/springcloud/dao/OrderBillMapper.java +++ b/payment-base-app/src/main/java/com/base/springcloud/dao/OrderBillMapper.java @@ -3,6 +3,8 @@ package com.base.springcloud.dao; import com.base.springcloud.entity.OrderBill; import org.springframework.stereotype.Repository; +import java.util.List; + @Repository public interface OrderBillMapper { int deleteByPrimaryKey(String id); @@ -16,4 +18,6 @@ public interface OrderBillMapper { int updateByPrimaryKeySelective(OrderBill record); int updateByPrimaryKey(OrderBill record); + + List getBillId(String orderId); } \ No newline at end of file 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 ccd9726..70be734 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 @@ -23,7 +23,7 @@ public interface SaleBillMapper { SaleBill queryBillInfo(SaleBill saleBill); - int writeOffBill(SaleBill bill); + int writeOffBill(@Param("orderId") String orderId); // 合并销售单据金额 List mergeBill(@Param("ids") String[] billIdArray); 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 d337a10..b41ccbb 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 @@ -14,13 +14,6 @@ public interface BillService { */ void billCheck(OrderBO orderBO); - /** - * 核销销售单据 - * @param saleBillBO - * @return - */ - void writeOffBill(SaleBillBO saleBillBO); - /** * 合并销售单据金额 * @param orderBO @@ -32,4 +25,10 @@ public interface BillService { * @param orderBO */ void childBill(OrderBO orderBO,Boolean rootFlag); + + /** + * 核销销售单据金额 + * @param id + */ + void writeOffAmount(String id); } diff --git a/payment-base-app/src/main/java/com/base/springcloud/service/OrderBillService.java b/payment-base-app/src/main/java/com/base/springcloud/service/OrderBillService.java index 5882f3f..4fa42ff 100644 --- a/payment-base-app/src/main/java/com/base/springcloud/service/OrderBillService.java +++ b/payment-base-app/src/main/java/com/base/springcloud/service/OrderBillService.java @@ -1,6 +1,9 @@ package com.base.springcloud.service; import com.base.springcloud.bo.OrderBO; +import com.base.springcloud.bo.SaleBillBO; + +import java.util.List; public interface OrderBillService { @@ -10,4 +13,11 @@ public interface OrderBillService { * @param orderBO */ void registerOrderBill(OrderBO orderBO); + + + /** + * 获取销售单据号 + * @param orderId + */ + List getBillId(String orderId); } diff --git a/payment-base-app/src/main/java/com/base/springcloud/service/RefundService.java b/payment-base-app/src/main/java/com/base/springcloud/service/RefundService.java index 406467c..b917af6 100644 --- a/payment-base-app/src/main/java/com/base/springcloud/service/RefundService.java +++ b/payment-base-app/src/main/java/com/base/springcloud/service/RefundService.java @@ -2,6 +2,9 @@ package com.base.springcloud.service; import com.base.springcloud.bo.RefundBO; +import java.util.Date; +import java.util.List; + public interface RefundService { /** @@ -9,4 +12,11 @@ public interface RefundService { * @param refundBO */ void refund(RefundBO refundBO); + + /** + * 退款列表查询 + * @param date + * @return + */ + List queryRefund(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 63375cc..b0ab015 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 @@ -38,27 +38,17 @@ public class BillServiceImp implements BillService { if(!Optional.ofNullable(queryResult).isPresent()){ throw new BusinessException(ErrorConstant.BILL_INVALID); } + if(queryResult.getPayAmount().compareTo(queryResult.getTotalAmount()) >= 0) + throw new BusinessException(ErrorConstant.BILL_COMPLETE_PAYMENT); orderBO.setAmount(queryResult.getTotalAmount()); List saleBillList = new ArrayList<>(); saleBillList.add(queryResult); + List billIdList = new ArrayList<>(); + billIdList.add(queryResult.getId()); + orderBO.setBillIdList(billIdList); orderBO.setSaleBillList(saleBillList); } - /** - * 核销销售单据 - * @param saleBillBO - * @return - */ - @Override - public void writeOffBill(SaleBillBO saleBillBO) { - SaleBill saleBill = new SaleBill(); - saleBill.setId(saleBillBO.getId()); - saleBill.setPayAmount(saleBillBO.getPayAmount()); - int count = saleBillMapper.writeOffBill(saleBill); - if(count > 0) return; - throw new BusinessException(ErrorConstant.BILL_WRITE_OFF_FAIL); - } - /** * 销售单据合并 * @param orderBO @@ -72,14 +62,18 @@ public class BillServiceImp implements BillService { String[] billIdArray = billIds.split(","); List billAmountList = saleBillMapper.mergeBill(billIdArray); if(!Optional.ofNullable(billAmountList).isPresent()) - throw new BusinessException(ErrorConstant.SALE_BILL__INVALID); + throw new BusinessException(ErrorConstant.SALE_BILL_INVALID); BigDecimal orderAmount = new BigDecimal(0); List billIdList = new ArrayList<>(); - billAmountList.forEach( - bill-> { - billIdList.add(bill.getId()); - orderAmount.add(bill.getTotalAmount()); - }); + for (SaleBill bill : billAmountList){ + if(bill.getPayAmount().compareTo(bill.getTotalAmount()) >= 0) + continue; + billIdList.add(bill.getId()); + orderAmount = orderAmount.add(bill.getTotalAmount()); + } + if(orderAmount.compareTo(BigDecimal.ZERO) <= 0){ + throw new BusinessException(ErrorConstant.ALL_BILL_COMPLETE_PAYMENT); + } orderBO.setAmount(orderAmount); orderBO.setSaleBillList(billAmountList); orderBO.setBillIdList(billIdList); @@ -92,21 +86,24 @@ public class BillServiceImp implements BillService { @Override public void childBill(OrderBO orderBO,Boolean rootFlag) { List billIdList = orderBO.getBillIdList(); - List childBillIdList; + List queryBillIdList; if(rootFlag) - childBillIdList = billIdList; + queryBillIdList = billIdList; else - childBillIdList = orderBO.getChildIdList(); - BigDecimal amount = orderBO.getAmount(); - List saleBillList = saleBillMapper.childBill(childBillIdList); + queryBillIdList = orderBO.getChildIdList(); + if(null == queryBillIdList || queryBillIdList.size() == 0) return; + List saleBillList = saleBillMapper.childBill(queryBillIdList); // 查询结果不存在结束流程 - if(!Optional.ofNullable(saleBillList).isPresent()) return; - childBillIdList.clear(); - saleBillList.forEach(saleBill -> { - amount.add(saleBill.getTotalAmount()); + if(null == saleBillList || saleBillList.size() == 0) return; + List childBillIdList = new ArrayList<>(); + BigDecimal amount = orderBO.getAmount(); + for (SaleBill saleBill: saleBillList) { + amount = amount.add(saleBill.getTotalAmount()); billIdList.add(saleBill.getId()); childBillIdList.add(saleBill.getId()); - }); + } + // 金额设置 + orderBO.setAmount(amount); // 所有的子单据编号需要存储 orderBO.setBillIdList(billIdList); // 重置需作为父节点查询的单据编号 @@ -114,4 +111,11 @@ public class BillServiceImp implements BillService { // 递归 childBill(orderBO,false); } + + @Override + public void writeOffAmount(String orderId) { + int count = saleBillMapper.writeOffBill(orderId); + if(count > 0) return; + throw new BusinessException(ErrorConstant.BILL_WRITE_OFF_FAIL); + } } diff --git a/payment-base-app/src/main/java/com/base/springcloud/service/imp/MerchantServiceImp.java b/payment-base-app/src/main/java/com/base/springcloud/service/imp/MerchantServiceImp.java index 6a5e350..1d2edba 100644 --- a/payment-base-app/src/main/java/com/base/springcloud/service/imp/MerchantServiceImp.java +++ b/payment-base-app/src/main/java/com/base/springcloud/service/imp/MerchantServiceImp.java @@ -135,8 +135,8 @@ public class MerchantServiceImp implements MerchantService { } orderBO.setAppId(merchantConfig.getAppId()); orderBO.setMchPrivateKey(merchantConfig.getMchPrivateKey()); - String certificate = readCert(merchantConfig.getCertPath()); - orderBO.setCertificate(certificate); + //String certificate = readCert(merchantConfig.getCertPath()); + orderBO.setCertificate(merchantConfig.getCertPath()); orderBO.setSerialNo(merchantConfig.getSerialNo()); } diff --git a/payment-base-app/src/main/java/com/base/springcloud/service/imp/OrderBillServiceImp.java b/payment-base-app/src/main/java/com/base/springcloud/service/imp/OrderBillServiceImp.java index 3400967..c13199d 100644 --- a/payment-base-app/src/main/java/com/base/springcloud/service/imp/OrderBillServiceImp.java +++ b/payment-base-app/src/main/java/com/base/springcloud/service/imp/OrderBillServiceImp.java @@ -1,6 +1,7 @@ package com.base.springcloud.service.imp; import com.base.springcloud.bo.OrderBO; +import com.base.springcloud.bo.SaleBillBO; import com.base.springcloud.dao.OrderBillMapper; import com.base.springcloud.entity.Order; import com.base.springcloud.entity.OrderBill; @@ -43,4 +44,13 @@ public class OrderBillServiceImp implements OrderBillService { }); } + /** + * 获取销售单据Id + * @param orderId + */ + @Override + public List getBillId(String orderId) { + return orderBillMapper.getBillId(orderId); + } + } 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 c6c3ed5..ce4a1e9 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 @@ -1,6 +1,7 @@ package com.base.springcloud.service.imp; import com.base.springcloud.bo.OrderBO; +import com.base.springcloud.bo.RefundBO; import com.base.springcloud.bo.SaleBillBO; import com.base.springcloud.entity.Order; import com.base.springcloud.service.*; @@ -36,6 +37,9 @@ public class PaymentServiceImp implements PaymentService { @Autowired private OrderBillService orderBillService; + @Autowired + private RefundService refundService; + @Override public String placeOrder(OrderBO orderBO){ // 参数检查 @@ -47,7 +51,7 @@ public class PaymentServiceImp implements PaymentService { // 销售单据核查 billService.billCheck(orderBO); // 获取子销售单据 - billService.childBill(orderBO,true); + //billService.childBill(orderBO,true); // 查询商户支付信息配置 merchantService.claimMerchantConfig(orderBO); // 登记订单 @@ -91,10 +95,7 @@ public class PaymentServiceImp implements PaymentService { String orderNo = order.getOrderNo(); orderService.updateOrderSuccess(orderNo); // 核销销售单据金额 - SaleBillBO saleBillBO = new SaleBillBO(); - saleBillBO.setId(order.getSourceBillId()); - saleBillBO.setPayAmount(DecimalUtil.divide(order.getOrderAmount(),new BigDecimal(100))); - billService.writeOffBill(saleBillBO); + billService.writeOffAmount(order.getId()); } /** @@ -103,7 +104,21 @@ public class PaymentServiceImp implements PaymentService { */ @Override public void syncRefundInfo(Date date) { + // 获取退款未明确状态订单列表 + List refundBOList = refundService.queryRefund(date); + if(!Optional.ofNullable(refundBOList).isPresent()) return; + // 遍历查询第三方订单信息 + refundBOList.forEach(RefundBO -> { + queryRefund(RefundBO); + //amqpTemplate.convertSendAndReceive(PaymentConstant.ORDER_QUEUE,orderBO); + }); + } + /** + * 退款订单查询 + * @param refundBO + */ + private void queryRefund(RefundBO refundBO) { } // 参数检查 diff --git a/payment-base-app/src/main/java/com/base/springcloud/service/imp/RefundServiceImp.java b/payment-base-app/src/main/java/com/base/springcloud/service/imp/RefundServiceImp.java index ebc692a..598decd 100644 --- a/payment-base-app/src/main/java/com/base/springcloud/service/imp/RefundServiceImp.java +++ b/payment-base-app/src/main/java/com/base/springcloud/service/imp/RefundServiceImp.java @@ -15,6 +15,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.Date; +import java.util.List; import java.util.UUID; @Service @@ -41,6 +42,7 @@ public class RefundServiceImp implements RefundService { // 查询原支付订单 orderService.origOrderCheck(refundBO); + // 登记退款信息 registerRfund(refundBO); // 发送微信退款 @@ -51,6 +53,16 @@ public class RefundServiceImp implements RefundService { // RBS-业务逻辑处理 } + /** + * 退款列表查询 + * @param date + * @return + */ + @Override + public List queryRefund(Date date) { + return null; + } + /** * 登记退款 * @param refundBO diff --git a/payment-base-app/src/main/java/com/base/springcloud/util/TokenUtils.java b/payment-base-app/src/main/java/com/base/springcloud/util/TokenUtils.java index 80394ac..1a188dd 100644 --- a/payment-base-app/src/main/java/com/base/springcloud/util/TokenUtils.java +++ b/payment-base-app/src/main/java/com/base/springcloud/util/TokenUtils.java @@ -50,7 +50,7 @@ public class TokenUtils { User user = userService.getUser(username); // 校验token是否超时失效 & 或者账号密码是否错误 - TokenValidity(token,user); + //TokenValidity(token,user); return user; } diff --git a/payment-base-app/src/main/java/com/base/springcloud/wxsdk/WxpayUtils.java b/payment-base-app/src/main/java/com/base/springcloud/wxsdk/WxpayUtils.java index fbfe027..b550095 100644 --- a/payment-base-app/src/main/java/com/base/springcloud/wxsdk/WxpayUtils.java +++ b/payment-base-app/src/main/java/com/base/springcloud/wxsdk/WxpayUtils.java @@ -216,9 +216,8 @@ public class WxpayUtils { * @throws UnsupportedEncodingException */ public static CloseableHttpClient getClient(String mchid, String serialNo, PrivateKey privateKey, String certificate) throws CertificateException, IOException { - byte[] bytes = certificate.getBytes(StandardCharsets.UTF_8); - // new BASE64Decoder().decodeBuffer(certificate) - ByteArrayInputStream base = new ByteArrayInputStream(bytes); + //byte[] bytes = certificate.getBytes(StandardCharsets.UTF_8); + ByteArrayInputStream base = new ByteArrayInputStream(new BASE64Decoder().decodeBuffer(certificate)); List certs = new ArrayList<>(); CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509"); X509Certificate cert = null; diff --git a/payment-base-app/src/main/resources/application.yml b/payment-base-app/src/main/resources/application.yml index caf4dfc..90385b2 100644 --- a/payment-base-app/src/main/resources/application.yml +++ b/payment-base-app/src/main/resources/application.yml @@ -1,3 +1,3 @@ spring: profiles: - active: dev \ No newline at end of file + active: prod \ No newline at end of file diff --git a/payment-base-app/src/main/resources/com/base/payment/mapper/OrderBillMapper.xml b/payment-base-app/src/main/resources/com/base/payment/mapper/OrderBillMapper.xml index afb0a51..575adc2 100644 --- a/payment-base-app/src/main/resources/com/base/payment/mapper/OrderBillMapper.xml +++ b/payment-base-app/src/main/resources/com/base/payment/mapper/OrderBillMapper.xml @@ -103,4 +103,12 @@ create_time = #{createTime,jdbcType=TIMESTAMP} where id = #{id,jdbcType=VARCHAR} + + \ No newline at end of file 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 f5b5207..7cac8ed 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 @@ -542,9 +542,11 @@ update stk_io_bill - set lock_amount = IF(lock_amount = 0,total_amount - #{payAmount,jdbcType=DECIMAL},lock_amount - #{payAmount,jdbcType=DECIMAL}), - pay_amount = pay_amount + #{payAmount,jdbcType=DECIMAL} - where id = #{id,jdbcType=VARCHAR} + set lock_amount = 0, + pay_amount = total_amount + where id in ( + select bill_id from pay_order_bill where order_id = #{orderId,jdbcType=VARCHAR} + ) - select from stk_io_bill