Kaynağa Gözat

分账记录

wujiefeng 1 yıl önce
ebeveyn
işleme
0efa30c114

+ 16 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/type/ShareOrderType.java

@@ -0,0 +1,16 @@
+package com.zhongshu.card.client.type;
+
+import lombok.Getter;
+
+public enum ShareOrderType {
+    Pay("支付"),
+    Refund("退款")
+    ;
+
+    @Getter
+    private String remark;
+
+    ShareOrderType(String remark) {
+        this.remark = remark;
+    }
+}

+ 2 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/utils/DateUtils.java

@@ -27,6 +27,8 @@ public class DateUtils {
 
     public final static String patternyyyyMMDD = "yyyyMMDD";
 
+    public final static String patternyyyyMMddHHmmssSSS = "yyyyMMddHHmmssSSS";
+
     public final static String patternStr = "yyyy年MM月dd日";
 
     public final static String patternyyyyMM = "yyyy-MM";

+ 12 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/pay/ShareOrderDao.java

@@ -0,0 +1,12 @@
+package com.zhongshu.card.server.core.dao.pay;
+
+import com.github.microservice.components.data.mongo.mongo.dao.MongoDao;
+import com.zhongshu.card.client.type.ShareOrderType;
+import com.zhongshu.card.server.core.domain.pay.ShareOrder;
+
+import java.util.List;
+
+public interface ShareOrderDao extends MongoDao<ShareOrder> {
+
+    ShareOrder findTopByOrderNoAndProjectOidAndOidAndShareOrderType(String orderNo, String projectOid, String oid, ShareOrderType shareOrderType);
+}

+ 39 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/pay/ShareOrder.java

@@ -0,0 +1,39 @@
+package com.zhongshu.card.server.core.domain.pay;
+
+import com.github.microservice.components.data.mongo.mongo.domain.SuperEntity;
+import com.github.microservice.pay.client.type.ledger.TransactionType;
+import com.zhongshu.card.client.type.ShareOrderType;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import org.springframework.data.mongodb.core.mapping.Document;
+import org.springframework.data.redis.core.index.Indexed;
+
+/**
+ * 分账订单
+ */
+@Data
+@Document
+public class ShareOrder extends SuperEntity {
+
+    @Schema(description = "订单号")
+    @Indexed
+    private String orderNo;
+
+    @Schema(description = "机构oid")
+    @Indexed
+    private String oid;
+
+    @Schema(description = "项目Oid")
+    @Indexed
+    private String projectOid;
+
+    @Schema(description = "分账订单号")
+    @Indexed
+    private String shareOrderNo;
+
+    @Schema(description = "分账金额")
+    private Long amount;
+
+    private ShareOrderType shareOrderType;
+
+}

+ 36 - 1
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/pay/ChinaumsSenselessPayService.java

@@ -19,9 +19,13 @@ import com.github.microservice.types.payment.PaymentType;
 import com.zhongshu.card.client.model.pay.ChinaumsSenselessUserSignInfoModel;
 import com.zhongshu.card.client.model.pay.UnionApplySignParam;
 import com.zhongshu.card.client.type.ContractState;
+import com.zhongshu.card.client.type.ShareOrderType;
+import com.zhongshu.card.client.utils.DateUtils;
 import com.zhongshu.card.server.core.dao.pay.ChinaumsSenselessUserSignInfoDao;
+import com.zhongshu.card.server.core.dao.pay.ShareOrderDao;
 import com.zhongshu.card.server.core.domain.pay.ChinaumsSenselessUserSignInfo;
 import com.zhongshu.card.server.core.domain.pay.PayAccount;
+import com.zhongshu.card.server.core.domain.pay.ShareOrder;
 import com.zhongshu.card.server.core.service.base.SuperService;
 import com.zhongshu.card.server.core.service.paySetting.OrgPayAccountService;
 import com.zhongshu.card.server.core.util.BeanUtils;
@@ -58,6 +62,9 @@ public class ChinaumsSenselessPayService extends SuperService {
     @Autowired
     TransactionLogService transactionLogService;
 
+    @Autowired
+    ShareOrderDao shareOrderDao;
+
 
     /**
      * 银联申请签约
@@ -279,15 +286,27 @@ public class ChinaumsSenselessPayService extends SuperService {
         request.setTotalAmount(total.toBigInteger().toString());
         request.setAttachedData(remark);
 
+        String shareOrderNo = projectConf.getSysSourceNo() + DateUtils.paresTime(System.currentTimeMillis(), DateUtils.patternyyyyMMddHHmmssSSS) + CommonUtil.randomCode(7);
 
         VaFld vaFld = new VaFld();
         SatInfo satInfo = new SatInfo();
         satInfo.setMerId(orgConf.getMchId());
         satInfo.setFeeBear("Y");
         satInfo.setSatAmt(total.toBigInteger().toString());
+        satInfo.setMerOrderId(shareOrderNo);
         vaFld.setSatInfo(List.of(satInfo));
         request.setVaFld(vaFld);
 
+        //TODO 放到扩展字段里,然后收到回调的时候再处理
+        ShareOrder shareOrder = new ShareOrder();
+        shareOrder.setOrderNo(orderNo);
+        shareOrder.setOid(oid);
+        shareOrder.setProjectOid(projectOid);
+        shareOrder.setAmount(total.toBigInteger().longValue());
+        shareOrder.setShareOrderType(ShareOrderType.Pay);
+        shareOrder.setShareOrderNo(shareOrderNo);
+        shareOrderDao.save(shareOrder);
+
         payProductParameter.setMeta(BeanUtil.bean2Map(request));
         com.github.microservice.pay.client.ret.ResultContent<Object> collectionResultContent = senselessPayService.collection(payProductParameter);
         return ResultContent.buildContent(collectionResultContent.getContent());
@@ -310,24 +329,40 @@ public class ChinaumsSenselessPayService extends SuperService {
             return ResultContent.buildFail(projectAccountModelResultContent.getMsg());
         }
 
+        ChinaumsSenselessConf projectConf = (ChinaumsSenselessConf) projectAccountModelResultContent.getContent().getConf();
 
         PayProductParameter<Object> payProductParameter = new PayProductParameter<>();
         payProductParameter.setAccountName(projectAccountName);
         ChinaSenselessRefundRequest request = new ChinaSenselessRefundRequest();
         request.setMchntOrderId(orderNo);
-
         request.setRefundAmount(total.toString());
         request.setTargetOrderId(refundOrderNo);
         request.setSysSource(JsonUtil.toJson(Map.of("userId", userId, "oid", oid, "projectOid", projectOid)));
 
+        ShareOrder shareOrder = shareOrderDao.findTopByOrderNoAndProjectOidAndOidAndShareOrderType(orderNo, projectOid, oid, ShareOrderType.Pay);
+        String shareOrderNo = projectConf.getSysSourceNo() + DateUtils.paresTime(System.currentTimeMillis(), DateUtils.patternyyyyMMddHHmmssSSS) + CommonUtil.randomCode(7);
+
+
         VaFld vaFld = new VaFld();
         SatInfo satInfo = new SatInfo();
         satInfo.setMerId(orgConf.getMchId());
 //        satInfo.setFeeBear("Y");
         satInfo.setRefundAmt(total.toBigInteger().toString());
+        satInfo.setRefundOrderId(shareOrderNo);
+        satInfo.setOriMerOrderId(shareOrder.getShareOrderNo());
         vaFld.setSatInfo(List.of(satInfo));
         request.setVaFld(vaFld);
 
+        //TODO 放到扩展字段里,然后收到回调的时候再处理
+        ShareOrder refundShareOrder = new ShareOrder();
+        shareOrder.setOrderNo(orderNo);
+        shareOrder.setOid(oid);
+        shareOrder.setProjectOid(projectOid);
+        shareOrder.setAmount(total.toBigInteger().longValue());
+        shareOrder.setShareOrderType(ShareOrderType.Refund);
+        shareOrder.setShareOrderNo(shareOrderNo);
+        shareOrderDao.save(refundShareOrder);
+
         payProductParameter.setMeta(BeanUtil.bean2Map(request));
         com.github.microservice.pay.client.ret.ResultContent<Object> refundResultContent = senselessPayService.refund(payProductParameter);
         return ResultContent.buildContent(refundResultContent.getContent());