Procházet zdrojové kódy

Merge remote-tracking branch 'origin/master'

wujiefeng před 1 rokem
rodič
revize
3e38148170
14 změnil soubory, kde provedl 140 přidání a 14 odebrání
  1. 6 0
      FullCardClient/src/main/java/com/zhongshu/card/client/model/paySetting/payConfig/FrictionlessUnionConfigModel.java
  2. 6 0
      FullCardClient/src/main/java/com/zhongshu/card/client/model/paySetting/payConfig/FrictionlessUnionConfigParam.java
  3. 7 0
      FullCardClient/src/main/java/com/zhongshu/card/client/model/paySetting/paySetting/PayConfigField.java
  4. 0 3
      FullCardClient/src/main/java/com/zhongshu/card/client/model/paySetting/paySetting/PayConfigParam.java
  5. 32 0
      FullCardClient/src/main/java/com/zhongshu/card/client/model/paySetting/paySetting/PayShowField.java
  6. 14 0
      FullCardClient/src/main/java/com/zhongshu/card/client/model/paySetting/paySetting/ProjectMainPaySettingModel.java
  7. 3 0
      FullCardClient/src/main/java/com/zhongshu/card/client/model/paySetting/paySetting/ProjectMainPaySettingParam.java
  8. 13 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/paySetting/ProjectPaySettingController.java
  9. 5 1
      FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/paySetting/ProjectMainPaySetting.java
  10. 7 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/paySetting/PayOrderSettingService.java
  11. 15 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/paySetting/ProjectMainPaySettingService.java
  12. 25 8
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/paySetting/ProjectPaySettingServiceImpl.java
  13. 2 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/payment/ExpenseFlowServiceImpl.java
  14. 5 2
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/payment/PayCallService.java

+ 6 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/paySetting/payConfig/FrictionlessUnionConfigModel.java

@@ -40,6 +40,9 @@ public class FrictionlessUnionConfigModel {
     @Schema(description = "来源编号")
     private String msgSrcId;
 
+    @Schema(description = "来源系统Id")
+    private String sysSource;
+
     @Schema(description = "签约结束后调整小程序id")
     private String mchntWxMpAppId;
 
@@ -66,6 +69,9 @@ public class FrictionlessUnionConfigModel {
     @Schema(description = "悦融益提现 系统编号")
     private String withdrawSysid = "";
 
+    @Schema(description = "提现商户号")
+    private String withdrawMid = "";
+
     @Schema(description = "悦融益提现 多应用类型")
     private String withdrawAppType = "74";
 

+ 6 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/paySetting/payConfig/FrictionlessUnionConfigParam.java

@@ -37,6 +37,9 @@ public class FrictionlessUnionConfigParam extends PayConfigParam {
     @Schema(description = "来源编号")
     private String msgSrcId;
 
+    @Schema(description = "来源系统Id")
+    private String sysSource;
+
     @Schema(description = "签约结束后跳转小程序id")
     private String mchntWxMpAppId;
 
@@ -63,6 +66,9 @@ public class FrictionlessUnionConfigParam extends PayConfigParam {
     @Schema(description = "悦融益提现 系统编号")
     private String withdrawSysid = "";
 
+    @Schema(description = "提现商户号")
+    private String withdrawMid = "";
+
     @Schema(description = "悦融益提现 多应用类型")
     private String withdrawAppType = "74";
 

+ 7 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/paySetting/paySetting/PayConfigField.java

@@ -7,6 +7,9 @@ import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
+import java.util.ArrayList;
+import java.util.List;
+
 /**
  * 支付参数字段
  *
@@ -36,4 +39,8 @@ public class PayConfigField {
 
     @Schema(description = "最大长度")
     private Integer maxLength = 500;
+
+    @Schema(description = "关联判断的")
+    private PayShowField payShowField;
+
 }

+ 0 - 3
FullCardClient/src/main/java/com/zhongshu/card/client/model/paySetting/paySetting/PayConfigParam.java

@@ -49,7 +49,4 @@ public class PayConfigParam {
     @Schema(description = "是否可用")
     private DataState state;
 
-//    @Schema(description = "上层的数据ID")
-//    private String projectPaySettingId;
-
 }

+ 32 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/paySetting/paySetting/PayShowField.java

@@ -0,0 +1,32 @@
+package com.zhongshu.card.client.model.paySetting.paySetting;
+
+import com.github.microservice.types.payment.PayFieldType;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 支付参数字段
+ *
+ * @author TRX
+ * @date 2024/10/22
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+public class PayShowField {
+    @Schema(description = "字段名称,如:名称,appId")
+    private String name;
+
+    @Schema(description = "字段类型,如:Str, File")
+    private PayFieldType type;
+
+    @Schema(description = "可显示的条件")
+    private List<Object> showAccount = new ArrayList<>();
+}

+ 14 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/paySetting/paySetting/ProjectMainPaySettingModel.java

@@ -13,6 +13,7 @@ import jakarta.validation.constraints.NotEmpty;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
+import org.apache.commons.lang3.ObjectUtils;
 
 import java.math.BigDecimal;
 
@@ -43,6 +44,19 @@ public class ProjectMainPaySettingModel {
     @Schema(description = "所属机构名称")
     private String belongOrgName;
 
+    @Schema(description = "所属主账户二级信息")
+    private ProjectPaySettingInfoModel childPaySettingInfo;
+
+    @Schema(description = "主商户的子商户")
+    private String childPaySettingInfoId;
+
+    public String getChildPaySettingInfoId() {
+        if (ObjectUtils.isNotEmpty(childPaySettingInfo)) {
+            return childPaySettingInfo.getId();
+        }
+        return "";
+    }
+
     @Schema(description = "项目的支付渠道设置:微信支付、银联支付")
     private PaymentType channelType;
 

+ 3 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/paySetting/paySetting/ProjectMainPaySettingParam.java

@@ -26,6 +26,9 @@ public class ProjectMainPaySettingParam {
     @NotEmpty
     private String paySettingInfoId;
 
+    @Schema(description = "主商户的子商户")
+    private String childPaySettingInfoId;
+
     @Schema(description = "项目oid")
     @NotEmpty
     private String projectOid;

+ 13 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/paySetting/ProjectPaySettingController.java

@@ -106,6 +106,19 @@ public class ProjectPaySettingController {
         return projectPaySettingService.page(param, pageable);
     }
 
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "项目下所有子商户数据列表", description = "项目下所有子商户数据列表")
+    @RequestMapping(value = {"getChildList"}, method = {RequestMethod.POST})
+    public ResultContent<Page<ProjectPaySettingInfoModel>> getChildList(@Parameter(hidden = true) @PageableDefault(page = 0, size = 10) Pageable pageable,
+            @Parameter(required = false) ProjectPaySettingInfoSearch param) {
+        Assert.hasText(param.getProjectOid(), "projectOid不能为空");
+        param.setIsDefault(Boolean.FALSE);
+        if (param.getChannelType() == null) {
+            return ResultContent.buildFail("channelType不能为空");
+        }
+        return projectPaySettingService.page(param, pageable);
+    }
+
     @ResourceAuth(value = "user", type = AuthType.User)
     @Operation(summary = "账户-机构支付账户列表(所有)", description = "账户-机构支付账户列表")
     @RequestMapping(value = "getOrgPaySettingInfo", method = {RequestMethod.POST})

+ 5 - 1
FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/paySetting/ProjectMainPaySetting.java

@@ -40,6 +40,10 @@ public class ProjectMainPaySetting extends SuperMain {
     @Schema(description = "所属机构名称")
     private String belongOrgName;
 
+    @Schema(description = "所属主账户二级信息")
+    @DBRef(lazy = true)
+    private ProjectOrgPaySettingInfo childPaySettingInfo;
+
     @Schema(description = "项目的支付渠道设置:微信支付、银联支付")
     private PaymentType channelType;
 
@@ -90,7 +94,7 @@ public class ProjectMainPaySetting extends SuperMain {
 
     @Schema(description = "最小的提现额度")
     private Long minWithdraw = 0L;
-    
+
     @Schema(description = "最大的提现额度")
     private Long maxWithdraw = 0L;
 

+ 7 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/paySetting/PayOrderSettingService.java

@@ -100,6 +100,13 @@ public class PayOrderSettingService extends SuperService {
                 payOrderSettings.add(payOrderSetting);
                 newList.add(payOrderSetting);
             }
+            Collections.sort(newList, new Comparator<PayOrderSetting>() {
+
+                @Override
+                public int compare(PayOrderSetting o1, PayOrderSetting o2) {
+                    return (int) (o1.getSort() - o2.getSort());
+                }
+            });
             payOrderSettingDao.saveAll(newList);
         }
         return newList;

+ 15 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/paySetting/ProjectMainPaySettingService.java

@@ -73,6 +73,13 @@ public class ProjectMainPaySettingService extends SuperService {
         if (orgPaySettingInfo.getIsDefault() == null || !orgPaySettingInfo.getIsDefault()) {
             return ResultContent.buildFail("选择的不是主账户类型");
         }
+
+        // 子商户信息
+        ProjectOrgPaySettingInfo childPaySettingInfo = null;
+        if (StringUtils.isNotEmpty(param.getChildPaySettingInfoId())) {
+            childPaySettingInfo = projectPaySettingInfoDao.findTopById(param.getChildPaySettingInfoId());
+        }
+
         if (param.getSettlementRulesType() == SettlementRulesType.Dn) {
             if (StringUtils.isEmpty(param.getDnTimeStr())) {
                 return ResultContent.buildFail("dnTimeStr不能为空");
@@ -104,6 +111,7 @@ public class ProjectMainPaySettingService extends SuperService {
             return ResultContent.buildFail("项目分成和机构分成之和不等100");
         }
 
+        // 提现额度
         Long minWithdraw = param.getMinWithdraw();
         Long maxWithdraw = param.getMaxWithdraw();
         if (minWithdraw <= 0 || maxWithdraw <= 0) {
@@ -119,9 +127,14 @@ public class ProjectMainPaySettingService extends SuperService {
         }
         BeanUtils.copyProperties(param, mainPaySetting);
 
+        // 主商户信息
         mainPaySetting.setPaySettingInfo(orgPaySettingInfo);
         mainPaySetting.setBelongOig(orgPaySettingInfo.getBelongOig());
         mainPaySetting.setBelongOrgName(orgPaySettingInfo.getBelongOrgName());
+
+        // 主账户的子商户信息
+        mainPaySetting.setChildPaySettingInfo(childPaySettingInfo);
+
         mainPaySetting.setChannelType(orgPaySettingInfo.getChannelType());
         mainPaySetting.setPaymentChannelType(orgPaySettingInfo.getPaymentChannelType());
 
@@ -259,6 +272,8 @@ public class ProjectMainPaySettingService extends SuperService {
                 model.setPaySettingInfoName(paySettingInfo.getName());
             }
             model.setSettingInfoModel(projectPaySettingService.toModel(entity.getPaySettingInfo()));
+
+            model.setChildPaySettingInfo(projectPaySettingService.toModel(entity.getChildPaySettingInfo()));
         }
         return model;
     }

+ 25 - 8
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/paySetting/ProjectPaySettingServiceImpl.java

@@ -32,6 +32,7 @@ import com.zhongshu.card.server.core.domain.paySetting.ProjectPaySetting;
 import com.zhongshu.card.server.core.service.base.SuperService;
 import com.zhongshu.card.server.core.util.AesUtils;
 import com.zhongshu.card.server.core.util.BeanUtils;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -519,15 +520,31 @@ public class ProjectPaySettingServiceImpl extends SuperService {
      */
     public List<PayConfigField> getUnionPay() {
         List<PayConfigField> fields = new ArrayList<>(4);
-        fields.add(PayConfigField.builder().name("appId").key("appId").type(PayFieldType.Str).isMust(Boolean.TRUE).maxLength(100).build());
-        fields.add(PayConfigField.builder().name("appKey").key("appKey").type(PayFieldType.Str).isMust(Boolean.TRUE).maxLength(100).build());
-        fields.add(PayConfigField.builder().name("商户订单号开头").key("orderStart").type(PayFieldType.Str).isMust(Boolean.TRUE).maxLength(100).build());
-        fields.add(PayConfigField.builder().name("终端号").key("tid").type(PayFieldType.Str).isMust(Boolean.TRUE).maxLength(100).build());
-        fields.add(PayConfigField.builder().name("协议模板id").key("planId").type(PayFieldType.Str).isMust(Boolean.TRUE).maxLength(100).build());
-        fields.add(PayConfigField.builder().name("密钥").key("notifySecret").type(PayFieldType.Str).isMust(Boolean.TRUE).build());
 
-//        fields.add(PayConfigField.builder().name("商户微信小程序AppId").key("mchntWxMpAppId").type(PayFieldType.Str).isMust(Boolean.TRUE).build());
-        fields.add(PayConfigField.builder().name("通知地址").key("notifyUrl").type(PayFieldType.Str).isMust(Boolean.TRUE).maxLength(500).build());
+        List<Object> showMainAccount = new ArrayList<>();
+        showMainAccount.add(Boolean.TRUE);
+        PayShowField mainFiled = new PayShowField();
+        mainFiled.setName("isDefault");
+        mainFiled.setType(PayFieldType.Bool);
+        mainFiled.setShowAccount(showMainAccount);
+
+        fields.add(PayConfigField.builder().name("appId").key("appId").type(PayFieldType.Str).isMust(Boolean.TRUE).maxLength(100).payShowField(mainFiled).build());
+        fields.add(PayConfigField.builder().name("appKey").key("appKey").type(PayFieldType.Str).isMust(Boolean.TRUE).maxLength(100).payShowField(mainFiled).build());
+        fields.add(PayConfigField.builder().name("商户订单号开头").key("orderStart").type(PayFieldType.Str).isMust(Boolean.TRUE).maxLength(100).payShowField(mainFiled).build());
+        fields.add(PayConfigField.builder().name("终端号").key("tid").type(PayFieldType.Str).isMust(Boolean.TRUE).maxLength(100).payShowField(mainFiled).build());
+        fields.add(PayConfigField.builder().name("协议模板id").key("planId").type(PayFieldType.Str).isMust(Boolean.TRUE).maxLength(100).build());
+        fields.add(PayConfigField.builder().name("密钥").key("notifySecret").type(PayFieldType.Str).isMust(Boolean.TRUE).payShowField(mainFiled).build());
+        fields.add(PayConfigField.builder().name("来源系统Id").key("sysSource").type(PayFieldType.Str).isMust(Boolean.TRUE).payShowField(mainFiled).build());
+
+        fields.add(PayConfigField.builder().name("通知地址").key("notifyUrl").type(PayFieldType.Str).isMust(Boolean.TRUE).maxLength(500).payShowField(mainFiled).build());
+
+        // 提现
+        fields.add(PayConfigField.builder().name("提现AppId").key("withdrawAppId").type(PayFieldType.Str).isMust(Boolean.TRUE).maxLength(100).payShowField(mainFiled).build());
+        fields.add(PayConfigField.builder().name("提现AppKey").key("withdrawAppKey").type(PayFieldType.Str).isMust(Boolean.TRUE).maxLength(100).payShowField(mainFiled).build());
+        fields.add(PayConfigField.builder().name("SysId").key("withdrawSysid").type(PayFieldType.Str).isMust(Boolean.TRUE).payShowField(mainFiled).build());
+        fields.add(PayConfigField.builder().name("提现商户号").key("withdrawMid").type(PayFieldType.Str).isMust(Boolean.TRUE).maxLength(100).build());
+        fields.add(PayConfigField.builder().name("多应用类型").key("withdrawAppType").type(PayFieldType.Str).isMust(Boolean.TRUE).maxLength(100).payShowField(mainFiled).build());
+        fields.add(PayConfigField.builder().name("提现通知地址").key("withdrawNotify").type(PayFieldType.Str).isMust(Boolean.FALSE).payShowField(mainFiled).build());
 
         return fields;
     }

+ 2 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/payment/ExpenseFlowServiceImpl.java

@@ -220,6 +220,7 @@ public class ExpenseFlowServiceImpl extends SuperService implements ExpenseFlowS
         expenseFlow.setPaymentNo(paymentNo);
         // 消费金额
         BigDecimal amount = CommonUtil.turnMoney2BigDecimal(iotParam.getAmount());
+        amount = amount.stripTrailingZeros();
         expenseFlow.setPayAmount(amount);
 
         String deviceId = iotParam.getDeviceId();
@@ -265,6 +266,7 @@ public class ExpenseFlowServiceImpl extends SuperService implements ExpenseFlowS
             entity.setVerifyError(String.format("设备未绑定机构"));
             return;
         }
+        // 设备所属的商户/机构
         entity.setShopOid(deviceInfo.getBeLongOid());
         // 设备区域
         entity.setArea(areaService.toSimpleModel(deviceInfo.getArea()));

+ 5 - 2
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/payment/PayCallService.java

@@ -131,7 +131,7 @@ public class PayCallService extends SuperService {
         }
 
         // 所有的渠道都支付失败
-        if (!b) {
+        if (!b && paymentTypes.size() == 1) {
             String msg = "支付失败";
             entity.setPaymentStatus("支付失败");
             entity.setIsPaySuccess(Boolean.FALSE);
@@ -251,7 +251,9 @@ public class PayCallService extends SuperService {
         paymentProcess.setIsPaying(Boolean.TRUE); // 支付中
 
         entity.setPayStartTime(System.currentTimeMillis());
-        com.github.microservice.net.ResultContent resultContent = chinaumsSenselessPayService.senselessPay(entity.getProjectOid(), entity.getShopOid(), entity.getUserId(), entity.getPayAmount(), entity.getPaymentNo(), entity.getRemark());
+        BigDecimal payAmount = entity.getPayAmount();
+        payAmount = payAmount.stripTrailingZeros();
+        com.github.microservice.net.ResultContent resultContent = chinaumsSenselessPayService.senselessPay(entity.getProjectOid(), entity.getShopOid(), entity.getUserId(), payAmount, entity.getPaymentNo(), entity.getRemark());
         if (resultContent.getState() == com.github.microservice.net.ResultState.Success) {
             // 关联参数
             String msg = "支付中";
@@ -290,6 +292,7 @@ public class PayCallService extends SuperService {
             paymentProcess.setIsPaySuccess(Boolean.FALSE);
             paymentProcess.setPayRemark(msg);
             paymentProcess.setIsPaying(Boolean.FALSE);
+            log.info("支付失败: {}", msg);
         }
         // 保存日志
         operationLogsService.addLog(logsAddParam);