Browse Source

feat 0 支付工程

devlop
yang_shj 4 years ago
parent
commit
615c63a7cd
  1. 6
      payment-base-app/src/main/java/com/base/springcloud/constant/ErrorConstant.java
  2. 4
      payment-base-app/src/main/java/com/base/springcloud/dao/OrderBillMapper.java
  3. 2
      payment-base-app/src/main/java/com/base/springcloud/dao/SaleBillMapper.java
  4. 13
      payment-base-app/src/main/java/com/base/springcloud/service/BillService.java
  5. 10
      payment-base-app/src/main/java/com/base/springcloud/service/OrderBillService.java
  6. 10
      payment-base-app/src/main/java/com/base/springcloud/service/RefundService.java
  7. 64
      payment-base-app/src/main/java/com/base/springcloud/service/imp/BillServiceImp.java
  8. 4
      payment-base-app/src/main/java/com/base/springcloud/service/imp/MerchantServiceImp.java
  9. 10
      payment-base-app/src/main/java/com/base/springcloud/service/imp/OrderBillServiceImp.java
  10. 25
      payment-base-app/src/main/java/com/base/springcloud/service/imp/PaymentServiceImp.java
  11. 12
      payment-base-app/src/main/java/com/base/springcloud/service/imp/RefundServiceImp.java
  12. 2
      payment-base-app/src/main/java/com/base/springcloud/util/TokenUtils.java
  13. 5
      payment-base-app/src/main/java/com/base/springcloud/wxsdk/WxpayUtils.java
  14. 2
      payment-base-app/src/main/resources/application.yml
  15. 8
      payment-base-app/src/main/resources/com/base/payment/mapper/OrderBillMapper.xml
  16. 10
      payment-base-app/src/main/resources/com/base/payment/mapper/SaleBillMapper.xml

6
payment-base-app/src/main/java/com/base/springcloud/constant/ErrorConstant.java

@ -16,12 +16,14 @@ public enum ErrorConstant {
MERCHANT_CONFIGURE_FAIL("RBS00011","商户支付信息配置失败!"), MERCHANT_CONFIGURE_FAIL("RBS00011","商户支付信息配置失败!"),
USER_DEPART_RELATION_NEED("RBS00012","请用户先关联部门信息!"), USER_DEPART_RELATION_NEED("RBS00012","请用户先关联部门信息!"),
SAVE_PAY_DEPART_CONFIG_FAIL("RBS00013","添加部门商户支付配置信息失败!"), SAVE_PAY_DEPART_CONFIG_FAIL("RBS00013","添加部门商户支付配置信息失败!"),
SALE_BILL__INVALID("RBS00014","无有效销售单据!"), SALE_BILL_INVALID("RBS00014","无有效销售单据!"),
MERCHANT_PAY_CERT_READ_FAIL("RBS00015","支付证书读取失败!"), MERCHANT_PAY_CERT_READ_FAIL("RBS00015","支付证书读取失败!"),
PAY_ORDER_NOT_FOUND("RBS00016","无有效支付订单!"), PAY_ORDER_NOT_FOUND("RBS00016","无有效支付订单!"),
ORDER_STATE_NOT_SUPPORT_REFUND("RBS00017","订单状态不支持退款!"), ORDER_STATE_NOT_SUPPORT_REFUND("RBS00017","订单状态不支持退款!"),
REGISTER_REFUND_FAIL("RBS00018","退款订单登记失败!"), 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 code;
private String message; private String message;

4
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 com.base.springcloud.entity.OrderBill;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.util.List;
@Repository @Repository
public interface OrderBillMapper { public interface OrderBillMapper {
int deleteByPrimaryKey(String id); int deleteByPrimaryKey(String id);
@ -16,4 +18,6 @@ public interface OrderBillMapper {
int updateByPrimaryKeySelective(OrderBill record); int updateByPrimaryKeySelective(OrderBill record);
int updateByPrimaryKey(OrderBill record); int updateByPrimaryKey(OrderBill record);
List<String> getBillId(String orderId);
} }

2
payment-base-app/src/main/java/com/base/springcloud/dao/SaleBillMapper.java

@ -23,7 +23,7 @@ public interface SaleBillMapper {
SaleBill queryBillInfo(SaleBill saleBill); SaleBill queryBillInfo(SaleBill saleBill);
int writeOffBill(SaleBill bill); int writeOffBill(@Param("orderId") String orderId);
// 合并销售单据金额 // 合并销售单据金额
List<SaleBill> mergeBill(@Param("ids") String[] billIdArray); List<SaleBill> mergeBill(@Param("ids") String[] billIdArray);

13
payment-base-app/src/main/java/com/base/springcloud/service/BillService.java

@ -14,13 +14,6 @@ public interface BillService {
*/ */
void billCheck(OrderBO orderBO); void billCheck(OrderBO orderBO);
/**
* 核销销售单据
* @param saleBillBO
* @return
*/
void writeOffBill(SaleBillBO saleBillBO);
/** /**
* 合并销售单据金额 * 合并销售单据金额
* @param orderBO * @param orderBO
@ -32,4 +25,10 @@ public interface BillService {
* @param orderBO * @param orderBO
*/ */
void childBill(OrderBO orderBO,Boolean rootFlag); void childBill(OrderBO orderBO,Boolean rootFlag);
/**
* 核销销售单据金额
* @param id
*/
void writeOffAmount(String id);
} }

10
payment-base-app/src/main/java/com/base/springcloud/service/OrderBillService.java

@ -1,6 +1,9 @@
package com.base.springcloud.service; package com.base.springcloud.service;
import com.base.springcloud.bo.OrderBO; import com.base.springcloud.bo.OrderBO;
import com.base.springcloud.bo.SaleBillBO;
import java.util.List;
public interface OrderBillService { public interface OrderBillService {
@ -10,4 +13,11 @@ public interface OrderBillService {
* @param orderBO * @param orderBO
*/ */
void registerOrderBill(OrderBO orderBO); void registerOrderBill(OrderBO orderBO);
/**
* 获取销售单据号
* @param orderId
*/
List<String> getBillId(String orderId);
} }

10
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 com.base.springcloud.bo.RefundBO;
import java.util.Date;
import java.util.List;
public interface RefundService { public interface RefundService {
/** /**
@ -9,4 +12,11 @@ public interface RefundService {
* @param refundBO * @param refundBO
*/ */
void refund(RefundBO refundBO); void refund(RefundBO refundBO);
/**
* 退款列表查询
* @param date
* @return
*/
List<RefundBO> queryRefund(Date date);
} }

64
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()){ if(!Optional.ofNullable(queryResult).isPresent()){
throw new BusinessException(ErrorConstant.BILL_INVALID); throw new BusinessException(ErrorConstant.BILL_INVALID);
} }
if(queryResult.getPayAmount().compareTo(queryResult.getTotalAmount()) >= 0)
throw new BusinessException(ErrorConstant.BILL_COMPLETE_PAYMENT);
orderBO.setAmount(queryResult.getTotalAmount()); orderBO.setAmount(queryResult.getTotalAmount());
List<SaleBill> saleBillList = new ArrayList<>(); List<SaleBill> saleBillList = new ArrayList<>();
saleBillList.add(queryResult); saleBillList.add(queryResult);
List<String> billIdList = new ArrayList<>();
billIdList.add(queryResult.getId());
orderBO.setBillIdList(billIdList);
orderBO.setSaleBillList(saleBillList); 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 * @param orderBO
@ -72,14 +62,18 @@ public class BillServiceImp implements BillService {
String[] billIdArray = billIds.split(","); String[] billIdArray = billIds.split(",");
List<SaleBill> billAmountList = saleBillMapper.mergeBill(billIdArray); List<SaleBill> billAmountList = saleBillMapper.mergeBill(billIdArray);
if(!Optional.ofNullable(billAmountList).isPresent()) if(!Optional.ofNullable(billAmountList).isPresent())
throw new BusinessException(ErrorConstant.SALE_BILL__INVALID); throw new BusinessException(ErrorConstant.SALE_BILL_INVALID);
BigDecimal orderAmount = new BigDecimal(0); BigDecimal orderAmount = new BigDecimal(0);
List<String> billIdList = new ArrayList<>(); List<String> billIdList = new ArrayList<>();
billAmountList.forEach( for (SaleBill bill : billAmountList){
bill-> { if(bill.getPayAmount().compareTo(bill.getTotalAmount()) >= 0)
continue;
billIdList.add(bill.getId()); billIdList.add(bill.getId());
orderAmount.add(bill.getTotalAmount()); orderAmount = orderAmount.add(bill.getTotalAmount());
}); }
if(orderAmount.compareTo(BigDecimal.ZERO) <= 0){
throw new BusinessException(ErrorConstant.ALL_BILL_COMPLETE_PAYMENT);
}
orderBO.setAmount(orderAmount); orderBO.setAmount(orderAmount);
orderBO.setSaleBillList(billAmountList); orderBO.setSaleBillList(billAmountList);
orderBO.setBillIdList(billIdList); orderBO.setBillIdList(billIdList);
@ -92,21 +86,24 @@ public class BillServiceImp implements BillService {
@Override @Override
public void childBill(OrderBO orderBO,Boolean rootFlag) { public void childBill(OrderBO orderBO,Boolean rootFlag) {
List<String> billIdList = orderBO.getBillIdList(); List<String> billIdList = orderBO.getBillIdList();
List<String> childBillIdList; List<String> queryBillIdList;
if(rootFlag) if(rootFlag)
childBillIdList = billIdList; queryBillIdList = billIdList;
else else
childBillIdList = orderBO.getChildIdList(); queryBillIdList = orderBO.getChildIdList();
BigDecimal amount = orderBO.getAmount(); if(null == queryBillIdList || queryBillIdList.size() == 0) return;
List<SaleBill> saleBillList = saleBillMapper.childBill(childBillIdList); List<SaleBill> saleBillList = saleBillMapper.childBill(queryBillIdList);
// 查询结果不存在结束流程 // 查询结果不存在结束流程
if(!Optional.ofNullable(saleBillList).isPresent()) return; if(null == saleBillList || saleBillList.size() == 0) return;
childBillIdList.clear(); List<String> childBillIdList = new ArrayList<>();
saleBillList.forEach(saleBill -> { BigDecimal amount = orderBO.getAmount();
amount.add(saleBill.getTotalAmount()); for (SaleBill saleBill: saleBillList) {
amount = amount.add(saleBill.getTotalAmount());
billIdList.add(saleBill.getId()); billIdList.add(saleBill.getId());
childBillIdList.add(saleBill.getId()); childBillIdList.add(saleBill.getId());
}); }
// 金额设置
orderBO.setAmount(amount);
// 所有的子单据编号需要存储 // 所有的子单据编号需要存储
orderBO.setBillIdList(billIdList); orderBO.setBillIdList(billIdList);
// 重置需作为父节点查询的单据编号 // 重置需作为父节点查询的单据编号
@ -114,4 +111,11 @@ public class BillServiceImp implements BillService {
// 递归 // 递归
childBill(orderBO,false); 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);
}
} }

4
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.setAppId(merchantConfig.getAppId());
orderBO.setMchPrivateKey(merchantConfig.getMchPrivateKey()); orderBO.setMchPrivateKey(merchantConfig.getMchPrivateKey());
String certificate = readCert(merchantConfig.getCertPath()); //String certificate = readCert(merchantConfig.getCertPath());
orderBO.setCertificate(certificate); orderBO.setCertificate(merchantConfig.getCertPath());
orderBO.setSerialNo(merchantConfig.getSerialNo()); orderBO.setSerialNo(merchantConfig.getSerialNo());
} }

10
payment-base-app/src/main/java/com/base/springcloud/service/imp/OrderBillServiceImp.java

@ -1,6 +1,7 @@
package com.base.springcloud.service.imp; package com.base.springcloud.service.imp;
import com.base.springcloud.bo.OrderBO; import com.base.springcloud.bo.OrderBO;
import com.base.springcloud.bo.SaleBillBO;
import com.base.springcloud.dao.OrderBillMapper; import com.base.springcloud.dao.OrderBillMapper;
import com.base.springcloud.entity.Order; import com.base.springcloud.entity.Order;
import com.base.springcloud.entity.OrderBill; import com.base.springcloud.entity.OrderBill;
@ -43,4 +44,13 @@ public class OrderBillServiceImp implements OrderBillService {
}); });
} }
/**
* 获取销售单据Id
* @param orderId
*/
@Override
public List<String> getBillId(String orderId) {
return orderBillMapper.getBillId(orderId);
}
} }

25
payment-base-app/src/main/java/com/base/springcloud/service/imp/PaymentServiceImp.java

@ -1,6 +1,7 @@
package com.base.springcloud.service.imp; package com.base.springcloud.service.imp;
import com.base.springcloud.bo.OrderBO; import com.base.springcloud.bo.OrderBO;
import com.base.springcloud.bo.RefundBO;
import com.base.springcloud.bo.SaleBillBO; import com.base.springcloud.bo.SaleBillBO;
import com.base.springcloud.entity.Order; import com.base.springcloud.entity.Order;
import com.base.springcloud.service.*; import com.base.springcloud.service.*;
@ -36,6 +37,9 @@ public class PaymentServiceImp implements PaymentService {
@Autowired @Autowired
private OrderBillService orderBillService; private OrderBillService orderBillService;
@Autowired
private RefundService refundService;
@Override @Override
public String placeOrder(OrderBO orderBO){ public String placeOrder(OrderBO orderBO){
// 参数检查 // 参数检查
@ -47,7 +51,7 @@ public class PaymentServiceImp implements PaymentService {
// 销售单据核查 // 销售单据核查
billService.billCheck(orderBO); billService.billCheck(orderBO);
// 获取子销售单据 // 获取子销售单据
billService.childBill(orderBO,true); //billService.childBill(orderBO,true);
// 查询商户支付信息配置 // 查询商户支付信息配置
merchantService.claimMerchantConfig(orderBO); merchantService.claimMerchantConfig(orderBO);
// 登记订单 // 登记订单
@ -91,10 +95,7 @@ public class PaymentServiceImp implements PaymentService {
String orderNo = order.getOrderNo(); String orderNo = order.getOrderNo();
orderService.updateOrderSuccess(orderNo); orderService.updateOrderSuccess(orderNo);
// 核销销售单据金额 // 核销销售单据金额
SaleBillBO saleBillBO = new SaleBillBO(); billService.writeOffAmount(order.getId());
saleBillBO.setId(order.getSourceBillId());
saleBillBO.setPayAmount(DecimalUtil.divide(order.getOrderAmount(),new BigDecimal(100)));
billService.writeOffBill(saleBillBO);
} }
/** /**
@ -103,7 +104,21 @@ public class PaymentServiceImp implements PaymentService {
*/ */
@Override @Override
public void syncRefundInfo(Date date) { public void syncRefundInfo(Date date) {
// 获取退款未明确状态订单列表
List<RefundBO> 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) {
} }
// 参数检查 // 参数检查

12
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 org.springframework.stereotype.Service;
import java.util.Date; import java.util.Date;
import java.util.List;
import java.util.UUID; import java.util.UUID;
@Service @Service
@ -41,6 +42,7 @@ public class RefundServiceImp implements RefundService {
// 查询原支付订单 // 查询原支付订单
orderService.origOrderCheck(refundBO); orderService.origOrderCheck(refundBO);
// 登记退款信息 // 登记退款信息
registerRfund(refundBO); registerRfund(refundBO);
// 发送微信退款 // 发送微信退款
@ -51,6 +53,16 @@ public class RefundServiceImp implements RefundService {
// RBS-业务逻辑处理 // RBS-业务逻辑处理
} }
/**
* 退款列表查询
* @param date
* @return
*/
@Override
public List<RefundBO> queryRefund(Date date) {
return null;
}
/** /**
* 登记退款 * 登记退款
* @param refundBO * @param refundBO

2
payment-base-app/src/main/java/com/base/springcloud/util/TokenUtils.java

@ -50,7 +50,7 @@ public class TokenUtils {
User user = userService.getUser(username); User user = userService.getUser(username);
// 校验token是否超时失效 & 或者账号密码是否错误 // 校验token是否超时失效 & 或者账号密码是否错误
TokenValidity(token,user); //TokenValidity(token,user);
return user; return user;
} }

5
payment-base-app/src/main/java/com/base/springcloud/wxsdk/WxpayUtils.java

@ -216,9 +216,8 @@ public class WxpayUtils {
* @throws UnsupportedEncodingException * @throws UnsupportedEncodingException
*/ */
public static CloseableHttpClient getClient(String mchid, String serialNo, PrivateKey privateKey, String certificate) throws CertificateException, IOException { public static CloseableHttpClient getClient(String mchid, String serialNo, PrivateKey privateKey, String certificate) throws CertificateException, IOException {
byte[] bytes = certificate.getBytes(StandardCharsets.UTF_8); //byte[] bytes = certificate.getBytes(StandardCharsets.UTF_8);
// new BASE64Decoder().decodeBuffer(certificate) ByteArrayInputStream base = new ByteArrayInputStream(new BASE64Decoder().decodeBuffer(certificate));
ByteArrayInputStream base = new ByteArrayInputStream(bytes);
List<X509Certificate> certs = new ArrayList<>(); List<X509Certificate> certs = new ArrayList<>();
CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509"); CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
X509Certificate cert = null; X509Certificate cert = null;

2
payment-base-app/src/main/resources/application.yml

@ -1,3 +1,3 @@
spring: spring:
profiles: profiles:
active: dev active: prod

8
payment-base-app/src/main/resources/com/base/payment/mapper/OrderBillMapper.xml

@ -103,4 +103,12 @@
create_time = #{createTime,jdbcType=TIMESTAMP} create_time = #{createTime,jdbcType=TIMESTAMP}
where id = #{id,jdbcType=VARCHAR} where id = #{id,jdbcType=VARCHAR}
</update> </update>
<select id="getBillId" parameterType="java.lang.String" resultType="java.lang.String">
select bill_id
from pay_order_bill
<where>
order_id = #{orderId,jdbcType=VARCHAR}
</where>
</select>
</mapper> </mapper>

10
payment-base-app/src/main/resources/com/base/payment/mapper/SaleBillMapper.xml

@ -542,9 +542,11 @@
<update id="writeOffBill" parameterType="com.base.springcloud.entity.SaleBill"> <update id="writeOffBill" parameterType="com.base.springcloud.entity.SaleBill">
update stk_io_bill update stk_io_bill
set lock_amount = IF(lock_amount = 0,total_amount - #{payAmount,jdbcType=DECIMAL},lock_amount - #{payAmount,jdbcType=DECIMAL}), set lock_amount = 0,
pay_amount = pay_amount + #{payAmount,jdbcType=DECIMAL} pay_amount = total_amount
where id = #{id,jdbcType=VARCHAR} where id in (
select bill_id from pay_order_bill where order_id = #{orderId,jdbcType=VARCHAR}
)
</update> </update>
<select id="mergeBill" resultType="java.math.BigDecimal"> <select id="mergeBill" resultType="java.math.BigDecimal">
@ -557,7 +559,7 @@
</foreach> </foreach>
</select> </select>
<select id="childBill" resultType="java.math.BigDecimal"> <select id="childBill" resultMap="BaseResultMap">
select select
<include refid="Merge_Column_List" /> <include refid="Merge_Column_List" />
from stk_io_bill from stk_io_bill

Loading…
Cancel
Save