TRX il y a 1 an
Parent
commit
8cb605f5f9

+ 2 - 4
FullCardClient/src/main/java/com/zhongshu/card/client/model/paySetting/payConfig/LaKaLaCollectionConfigParam.java

@@ -1,5 +1,6 @@
 package com.zhongshu.card.client.model.paySetting.payConfig;
 
+import com.zhongshu.card.client.model.paySetting.paySetting.PayConfigParam;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Data;
@@ -17,10 +18,7 @@ import java.io.Serializable;
 @Data
 @AllArgsConstructor
 @NoArgsConstructor
-public class LaKaLaCollectionConfigParam implements Serializable {
-
-    @Schema(description = "项目oid")
-    private String projectOid;
+public class LaKaLaCollectionConfigParam extends PayConfigParam implements Serializable {
 
     // 接入方唯一编号(appid):OP00000003
     private String appId;

+ 27 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/paySetting/paySetting/PayConfigFieldModel.java

@@ -0,0 +1,27 @@
+package com.zhongshu.card.client.model.paySetting.paySetting;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.checkerframework.checker.units.qual.N;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author TRX
+ * @date 2024/10/22
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class PayConfigFieldModel {
+
+    private List<PayConfigField> fields = new ArrayList<PayConfigField>();
+
+    private String apiName = "";
+
+    private String method = "post";
+
+    private String type = "form-data";
+}

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

@@ -0,0 +1,31 @@
+package com.zhongshu.card.client.model.paySetting.paySetting;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author TRX
+ * @date 2024/10/22
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class PayConfigParam {
+
+    @Schema(description = "数据ID")
+    private String id;
+
+    @Schema(description = "名称")
+    private String name;
+
+    @Schema(description = "项目id", required = true)
+    private String projectOid;
+
+    @Schema(description = "上层的数据ID")
+    private String projectPaySettingId;
+
+    @Schema(description = "是否是默认的")
+    private Boolean isDefault = Boolean.FALSE;
+}

+ 61 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/paySetting/paySetting/ProjectPaySettingInfoModel.java

@@ -0,0 +1,61 @@
+package com.zhongshu.card.client.model.paySetting.paySetting;
+
+import com.github.microservice.types.payment.PaymentChannelType;
+import com.github.microservice.types.payment.PaymentType;
+import com.zhongshu.card.client.model.base.SuperModel;
+import com.zhongshu.card.client.type.DataState;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author TRX
+ * @date 2024/10/22
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ProjectPaySettingInfoModel extends SuperModel {
+
+    //----------------------------------业务数据 -------------------
+
+    @Schema(description = "上层的选择ID")
+    private String projectPaySettingId;
+
+    @Schema(description = "名称")
+    private String name;
+
+    @Schema(description = "项目的支付渠道设置:微信支付、银联支付")
+    private PaymentType channelType;
+
+    private String channelTypeStr;
+
+    public String getChannelTypeStr() {
+        if (channelType != null) {
+            return channelType.getRemark();
+        }
+        return "";
+    }
+
+    @Schema(description = "支付产品")
+    private PaymentChannelType paymentChannelType;
+
+    private String paymentChannelTypeStr;
+
+    public String getPaymentChannelTypeStr() {
+        if (paymentChannelType != null) {
+            return paymentChannelType.getRemark();
+        }
+        return "";
+    }
+
+    @Schema(description = "支付渠道的参数配置")
+    private Object payConfig;
+
+    @Schema(description = "是否可用")
+    private DataState state = DataState.Enable;
+
+    @Schema(description = "是否是默认的")
+    private Boolean isDefault = Boolean.FALSE;
+}

+ 4 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/paySetting/paySetting/ProjectPaySettingModel.java

@@ -2,6 +2,7 @@ package com.zhongshu.card.client.model.paySetting.paySetting;
 
 import com.github.microservice.types.payment.PaymentType;
 import com.zhongshu.card.client.model.projectAbout.PayChannelConfigModel;
+import com.zhongshu.card.client.type.DataState;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Data;
@@ -48,4 +49,7 @@ public class ProjectPaySettingModel {
         }
         return Boolean.FALSE;
     }
+
+    @Schema(description = "是否可用")
+    private DataState state;
 }

+ 2 - 1
FullCardClient/src/main/java/com/zhongshu/card/client/model/paySetting/paySetting/ProjectPaySettingParam.java

@@ -1,6 +1,5 @@
 package com.zhongshu.card.client.model.paySetting.paySetting;
 
-import com.github.microservice.types.payment.PaymentType;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Data;
@@ -14,8 +13,10 @@ import lombok.NoArgsConstructor;
 @AllArgsConstructor
 @NoArgsConstructor
 public class ProjectPaySettingParam {
+
     @Schema(description = "项目id")
     private String projectOid;
 
+    @Schema(description = "产品数据ID")
     private String id;
 }

+ 1 - 4
FullCardClient/src/main/java/com/zhongshu/card/client/model/paySetting/paySetting/WxPayConfigParam.java

@@ -13,10 +13,7 @@ import org.springframework.web.multipart.MultipartFile;
 @Data
 @AllArgsConstructor
 @NoArgsConstructor
-public class WxPayConfigParam {
-
-    @Schema(description = "项目id", required = true)
-    private String projectOid;
+public class WxPayConfigParam extends PayConfigParam {
 
     @Schema(description = "appid 小程序", required = true)
     private String appId;

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

@@ -7,10 +7,7 @@ import com.zhongshu.card.client.model.base.IDParam;
 import com.zhongshu.card.client.model.base.ProjectOidParam;
 import com.zhongshu.card.client.model.paySetting.payConfig.LaKaLaCollectionConfig;
 import com.zhongshu.card.client.model.paySetting.payConfig.LaKaLaCollectionConfigParam;
-import com.zhongshu.card.client.model.paySetting.paySetting.ProjectPaySettingModel;
-import com.zhongshu.card.client.model.paySetting.paySetting.ProjectPaySettingParam;
-import com.zhongshu.card.client.model.paySetting.paySetting.WxPayConfigModel;
-import com.zhongshu.card.client.model.paySetting.paySetting.WxPayConfigParam;
+import com.zhongshu.card.client.model.paySetting.paySetting.*;
 import com.zhongshu.card.client.type.DataState;
 import com.zhongshu.card.server.core.service.paySetting.ProjectPaySettingServiceImpl;
 import io.swagger.v3.oas.annotations.Operation;
@@ -50,34 +47,6 @@ public class ProjectPaySettingController {
         return projectPaySettingService.getAllProjectPaySetting(param.getProjectOid());
     }
 
-    @ResourceAuth(value = "user", type = AuthType.User)
-    @Operation(summary = "保存项目的微信支付设置", description = "保存项目的微信支付设置")
-    @RequestMapping(value = "saveWxPayConfig", consumes = MediaType.MULTIPART_FORM_DATA_VALUE, method = {RequestMethod.POST})
-    public ResultContent saveWxPayConfig(WxPayConfigParam param) {
-        return projectPaySettingService.saveWxPayConfig(param);
-    }
-
-    @ResourceAuth(value = "user", type = AuthType.User)
-    @Operation(summary = "得到项目的微信支付配置", description = "得到项目的微信支付配置")
-    @RequestMapping(value = "getWxPayConfig", method = {RequestMethod.POST})
-    public ResultContent<WxPayConfigModel> getWxPayConfig(@RequestBody ProjectOidParam param) {
-        return projectPaySettingService.getWxPayConfig(param.getProjectOid());
-    }
-
-    @ResourceAuth(value = "user", type = AuthType.User)
-    @Operation(summary = "保存项目的拉卡拉支付设置", description = "保存项目的拉卡拉支付设置")
-    @RequestMapping(value = "saveLaKaLaConfig", consumes = MediaType.MULTIPART_FORM_DATA_VALUE, method = RequestMethod.POST)
-    public ResultContent saveLaKaLaConfig(LaKaLaCollectionConfigParam param) {
-        return projectPaySettingService.saveLaKaLaConfig(param);
-    }
-
-    @ResourceAuth(value = "user", type = AuthType.User)
-    @Operation(summary = "得到项目的拉卡拉支付配置", description = "得到项目的拉卡拉支付配置")
-    @RequestMapping(value = "getLaKaLaConfig", method = {RequestMethod.POST})
-    public ResultContent<LaKaLaCollectionConfig> getLaKaLaConfig(@RequestBody ProjectOidParam param) {
-        return projectPaySettingService.getLaKaLaConfig(param.getProjectOid());
-    }
-
     @ResourceAuth(value = "user", type = AuthType.User)
     @Operation(summary = "删除参数配置", description = "删除参数配置")
     @RequestMapping(value = "deleteInfo", method = {RequestMethod.POST})
@@ -99,4 +68,48 @@ public class ProjectPaySettingController {
         return projectPaySettingService.changeState(param.getId(), DataState.Disable);
     }
 
+    //------------------------------------------------支付参数配置 start-----------------------
+
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "账户-账户列表", description = "账户-账户列表")
+    @RequestMapping(value = "getProjectPaySettingInfo", method = {RequestMethod.POST})
+    public ResultContent<List<ProjectPaySettingInfoModel>> getProjectPaySettingInfo(@RequestBody IDParam param) {
+        return projectPaySettingService.getProjectPaySettingInfo(param.getId());
+    }
+
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "账户-配置字段", description = "账户-配置字段")
+    @RequestMapping(value = "getFieldByConfigId", method = {RequestMethod.POST})
+    public ResultContent<PayConfigFieldModel> getFieldByConfigId(@RequestBody IDParam param) {
+        return projectPaySettingService.getFieldByConfigId(param.getId());
+    }
+
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "账户-删除", description = "账户-删除")
+    @RequestMapping(value = "deletePaySettingInfo", method = {RequestMethod.POST})
+    public ResultContent deletePaySettingInfo(@RequestBody IDParam param) {
+        return projectPaySettingService.deletePaySettingInfo(param.getId());
+    }
+
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "账户-详情", description = "账户-详情")
+    @RequestMapping(value = "getPaySettingInfo", method = {RequestMethod.POST})
+    public ResultContent getPaySettingInfo(@RequestBody IDParam param) {
+        return projectPaySettingService.getPaySettingInfo(param.getId());
+    }
+
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "保存项目的微信支付设置", description = "保存项目的微信支付设置")
+    @RequestMapping(value = "saveWxPayConfig", consumes = MediaType.MULTIPART_FORM_DATA_VALUE, method = {RequestMethod.POST})
+    public ResultContent saveWxPayConfig(WxPayConfigParam param) {
+        return projectPaySettingService.saveWxPayConfig(param);
+    }
+
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "保存项目的拉卡拉支付设置", description = "保存项目的拉卡拉支付设置")
+    @RequestMapping(value = "saveLaKaLaConfig", consumes = MediaType.MULTIPART_FORM_DATA_VALUE, method = RequestMethod.POST)
+    public ResultContent saveLaKaLaConfig(LaKaLaCollectionConfigParam param) {
+        return projectPaySettingService.saveLaKaLaConfig(param);
+    }
+
 }

+ 22 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/projectAbout/ProjectPaySettingInfoDao.java

@@ -0,0 +1,22 @@
+package com.zhongshu.card.server.core.dao.projectAbout;
+
+import com.github.microservice.components.data.mongo.mongo.dao.MongoDao;
+import com.github.microservice.types.payment.PaymentType;
+import com.zhongshu.card.server.core.domain.paySetting.ProjectPaySetting;
+import com.zhongshu.card.server.core.domain.paySetting.ProjectPaySettingInfo;
+
+import java.util.List;
+
+public interface ProjectPaySettingInfoDao extends MongoDao<ProjectPaySettingInfo> {
+
+    ProjectPaySettingInfo findTopById(String id);
+
+    ProjectPaySettingInfo findTopByProjectOidAndChannelTypeAndIsDefault
+            (String projectOid, PaymentType channelType, Boolean isDefault);
+
+    List<ProjectPaySettingInfo> findByProjectOidAndChannelType(String projectOid, PaymentType channelType);
+
+    List<ProjectPaySettingInfo> findByProjectPaySetting(ProjectPaySetting projectPaySetting);
+
+    int countByProjectOidAndChannelType(String projectOid, PaymentType channelType);
+}

+ 59 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/paySetting/ProjectPaySettingInfo.java

@@ -0,0 +1,59 @@
+package com.zhongshu.card.server.core.domain.paySetting;
+
+import com.github.microservice.types.payment.PaymentChannelType;
+import com.github.microservice.types.payment.PaymentType;
+import com.zhongshu.card.client.type.DataState;
+import com.zhongshu.card.server.core.domain.base.SuperMain;
+import com.zhongshu.card.server.core.domain.org.Organization;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.data.mongodb.core.mapping.DBRef;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+/**
+ * 项目的支付设置 主设置
+ *
+ * @author TRX
+ * @date 2024/7/26
+ */
+@Data
+@Builder
+@Document
+@AllArgsConstructor
+@NoArgsConstructor
+public class ProjectPaySettingInfo extends SuperMain {
+
+    @Schema(description = "项目名称")
+    private String projectName;
+
+    @Schema(description = "项目编码")
+    private String projectCode;
+
+    @Schema(description = "关联的支付产品数据")
+    @DBRef(lazy = true)
+    private ProjectPaySetting projectPaySetting;
+
+    //----------------------------------业务数据 -------------------
+
+    @Schema(description = "名称")
+    private String name;
+
+    @Schema(description = "项目的支付渠道设置:微信支付、银联支付")
+    private PaymentType channelType;
+
+    @Schema(description = "支付产品")
+    private PaymentChannelType paymentChannelType;
+
+    @Schema(description = "支付渠道的参数配置")
+    private Object payConfig;
+
+    @Schema(description = "是否可用")
+    private DataState state = DataState.Enable;
+
+    @Schema(description = "是否是默认的")
+    private Boolean isDefault = Boolean.FALSE;
+
+}

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

@@ -13,9 +13,11 @@ import com.zhongshu.card.client.type.DataState;
 import com.zhongshu.card.server.core.dao.org.OrganizationDao;
 import com.zhongshu.card.server.core.dao.projectAbout.PayChannelConfigDao;
 import com.zhongshu.card.server.core.dao.projectAbout.ProjectPaySettingDao;
+import com.zhongshu.card.server.core.dao.projectAbout.ProjectPaySettingInfoDao;
 import com.zhongshu.card.server.core.domain.org.Organization;
 import com.zhongshu.card.server.core.domain.paySetting.PayChannelConfig;
 import com.zhongshu.card.server.core.domain.paySetting.ProjectPaySetting;
+import com.zhongshu.card.server.core.domain.paySetting.ProjectPaySettingInfo;
 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;
@@ -45,6 +47,9 @@ public class ProjectPaySettingServiceImpl extends SuperService {
     @Autowired
     ProjectPaySettingDao projectPaySettingDao;
 
+    @Autowired
+    private ProjectPaySettingInfoDao projectPaySettingInfoDao;
+
     @Autowired
     OrganizationDao organizationDao;
 
@@ -57,8 +62,6 @@ public class ProjectPaySettingServiceImpl extends SuperService {
     @Autowired
     PayChannelConfigDao payChannelConfigDao;
 
-    //-----------------------------微信支付的配置 start------------------
-
     /**
      * 关联支付渠道
      *
@@ -79,8 +82,7 @@ public class ProjectPaySettingServiceImpl extends SuperService {
         }
         PaymentType paymentType = payChannelConfig.getPaymentType();
 
-        ProjectPaySetting projectPaySetting = projectPaySettingDao.findTopByProjectOidAndChannelType(
-                projectOid, paymentType);
+        ProjectPaySetting projectPaySetting = projectPaySettingDao.findTopByProjectOidAndChannelType(projectOid, paymentType);
         if (ObjectUtils.isNotEmpty(projectPaySetting)) {
             return ResultContent.buildFail(String.format("%s已存在", paymentType.name()));
         }
@@ -98,6 +100,117 @@ public class ProjectPaySettingServiceImpl extends SuperService {
         return ResultContent.buildSuccess();
     }
 
+    /**
+     * 项目得到所有的支付渠道配置
+     *
+     * @param projectOid
+     * @return
+     */
+    public ResultContent<List<ProjectPaySettingModel>> getAllProjectPaySetting(String projectOid) {
+        List<ProjectPaySetting> list = projectPaySettingDao.findByProjectOid(projectOid);
+        List<ProjectPaySettingModel> models = new ArrayList<>(list.size());
+        if (ObjectUtils.isNotEmpty(list)) {
+            models = list.stream().map(this::toModel).collect(Collectors.toUnmodifiableList());
+        }
+        return ResultContent.buildSuccess(models);
+    }
+
+    public ResultContent deleteInfo(String id) {
+        ProjectPaySetting paySetting = projectPaySettingDao.findTopById(id);
+        if (ObjectUtils.isEmpty(paySetting)) {
+            return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, id));
+        }
+        // 判断是否可以删除
+        int count = projectPaySettingInfoDao.countByProjectOidAndChannelType(paySetting.getProjectOid(), paySetting.getChannelType());
+        if (count > 0) {
+            return ResultContent.buildFail(String.format("%s有账户信息,不能删除", paySetting.getChannelType().getRemark()));
+        }
+        projectPaySettingDao.delete(paySetting);
+        return ResultContent.buildSuccess();
+    }
+
+    public ResultContent changeState(String id, DataState state) {
+        ProjectPaySetting paySetting = projectPaySettingDao.findTopById(id);
+        if (ObjectUtils.isEmpty(paySetting)) {
+            return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, id));
+        }
+        //TODO  检查是否可以启用
+        if (state != null && state == DataState.Enable) {
+            List<ProjectPaySettingInfo> list = projectPaySettingInfoDao.findByProjectOidAndChannelType(paySetting.getProjectOid(), paySetting.getChannelType());
+            if (ObjectUtils.isEmpty(list)) {
+                return ResultContent.buildFail(String.format("没有账户信息,不能启用"));
+            }
+            boolean hasDefault = false;
+            for (ProjectPaySettingInfo entity : list) {
+                if (entity.getIsDefault() != null && entity.getIsDefault()) {
+                    hasDefault = true;
+                    if (entity.getPayConfig() == null) {
+                        return ResultContent.buildFail(String.format("默认账户参数信息未配置"));
+                    }
+                }
+            }
+            if (!hasDefault) {
+                return ResultContent.buildFail("没有默认账户信息,不能启用");
+            }
+        }
+        paySetting.setState(state);
+        projectPaySettingDao.save(paySetting);
+        return ResultContent.buildSuccess();
+    }
+
+    //-----------------------------通用配置方法 start----------------------------
+
+    /**
+     * 得到项目的支付产品的 账户配置
+     *
+     * @param id
+     * @return
+     */
+    public ResultContent<List<ProjectPaySettingInfoModel>> getProjectPaySettingInfo(String id) {
+        List<ProjectPaySettingInfoModel> models = new ArrayList<>();
+        ProjectPaySetting projectPaySetting = projectPaySettingDao.findTopById(id);
+        if (ObjectUtils.isEmpty(projectPaySetting)) {
+            return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, id));
+        }
+        List<ProjectPaySettingInfo> list = projectPaySettingInfoDao.findByProjectOidAndChannelType(projectPaySetting.getProjectOid(), projectPaySetting.getChannelType());
+        if (ObjectUtils.isNotEmpty(list)) {
+            models = list.stream().map(this::toModel).collect(Collectors.toUnmodifiableList());
+        }
+        return ResultContent.buildSuccess(models);
+    }
+
+    /**
+     * 删除账户
+     *
+     * @param id
+     * @return
+     */
+    public ResultContent deletePaySettingInfo(String id) {
+        ProjectPaySettingInfo entity = projectPaySettingInfoDao.findTopById(id);
+        if (ObjectUtils.isEmpty(entity)) {
+            return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, id));
+        }
+        projectPaySettingInfoDao.delete(entity);
+        initChangeDefault(null, entity.getProjectOid(), entity.getChannelType());
+        return ResultContent.buildSuccess();
+    }
+
+    /**
+     * 账户详情
+     *
+     * @param id
+     * @return
+     */
+    public ResultContent getPaySettingInfo(String id) {
+        ProjectPaySettingInfo entity = projectPaySettingInfoDao.findTopById(id);
+        if (ObjectUtils.isEmpty(entity)) {
+            return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, id));
+        }
+        return ResultContent.buildSuccess(toModel(entity));
+    }
+
+    //-----------------------------微信支付的配置 start------------------
+
     /**
      * 保存项目的微信支付设置
      *
@@ -106,15 +219,18 @@ public class ProjectPaySettingServiceImpl extends SuperService {
      */
     public ResultContent saveWxPayConfig(WxPayConfigParam param) {
         //TODO 检查微信支付参数等
-        ResultContent<WxPayConfigModel> resultContent = getWxPayConfig(param.getProjectOid());
-        WxPayConfigModel configModel = null;
-        if (resultContent.isSuccess()) {
-            configModel = resultContent.getContent();
+        ResultContent<ProjectPaySettingInfo> content = initProjectPayInfo(param);
+        if (content.isFailed()) {
+            return ResultContent.buildFail(content.getMsg());
         }
+        ProjectPaySettingInfo settingInfo = content.getContent();
+
+        WxPayConfigModel configModel = (WxPayConfigModel) settingInfo.getPayConfig();
         if (ObjectUtils.isEmpty(configModel)) {
             configModel = new WxPayConfigModel();
         }
         BeanUtils.copyProperties(param, configModel);
+
         String privateKeyStr = AesUtils.turnMultipartFileToString(param.getPrivateKeyFile());
         if (StringUtils.isNotEmpty(privateKeyStr)) {
             configModel.setPrivateKeyStr(privateKeyStr);
@@ -123,25 +239,65 @@ public class ProjectPaySettingServiceImpl extends SuperService {
         if (StringUtils.isNotEmpty(configModel.getPrivateKeyStr())) {
             return ResultContent.buildFail("证书文件为空");
         }
-        return saveProjectPaySetting(param.getProjectOid(), PaymentType.WeChat, configModel);
+        settingInfo.setPayConfig(configModel);
+        projectPaySettingInfoDao.save(settingInfo);
+        // 如果当前设置为默认,把其他的取消默认
+        initChangeDefault(settingInfo.getId(), settingInfo.getProjectOid(), settingInfo.getChannelType());
+        return ResultContent.buildSuccess();
     }
 
     /**
-     * 得到项目的微信支付配置
+     * 得到微信小程序支付的参数配置
      *
      * @param projectOid
      * @return
      */
-    public ResultContent<WxPayConfigModel> getWxPayConfig(String projectOid) {
-        WxPayConfigModel model = null;
-        ProjectPaySetting paySetting = getProjectPaySetting(projectOid, PaymentType.WeChat);
-        if (ObjectUtils.isNotEmpty(paySetting)) {
+    public ResultContent<WxPayConfigModel> getProjectWxConfig(String projectOid) {
+        // 平台的
+        String payName = PaymentType.WeChat.getRemark();
+        PayChannelConfig channelConfig = payChannelConfigDao.findTopByPaymentType(PaymentType.WeChat);
+        if (ObjectUtils.isEmpty(channelConfig)) {
+            return ResultContent.buildFail(String.format("平台不支持%s", payName));
+        }
+        if (channelConfig.getState() == null || channelConfig.getState() != DataState.Enable) {
+            return ResultContent.buildFail(String.format("平台%s未启用", payName));
+        }
+        // 项目的
+        ProjectPaySetting paySetting = projectPaySettingDao.findTopByProjectOidAndChannelType(projectOid, PaymentType.WeChat);
 
-            model = (WxPayConfigModel) paySetting.getPayConfig();
+        // 配置的
+        List<ProjectPaySettingInfo> list = projectPaySettingInfoDao.findByProjectOidAndChannelType(projectOid, PaymentType.WeChat);
+        if (ObjectUtils.isEmpty(list)) {
+            return ResultContent.buildFail(String.format("项目未配置%s", payName));
         }
+        WxPayConfigModel model = new WxPayConfigModel();
         return ResultContent.buildSuccess(model);
     }
 
+    public ResultContent<ProjectPaySettingInfo> getProjectConfig(String projectOid, PaymentType paymentType) {
+        if (paymentType == null) {
+            return ResultContent.buildFail("PaymentType未指定");
+        }
+        // 平台的
+        String payName = PaymentType.WeChat.getRemark();
+        PayChannelConfig channelConfig = payChannelConfigDao.findTopByPaymentType(PaymentType.WeChat);
+        if (ObjectUtils.isEmpty(channelConfig)) {
+            return ResultContent.buildFail(String.format("平台不支持%s", payName));
+        }
+        if (channelConfig.getState() == null || channelConfig.getState() != DataState.Enable) {
+            return ResultContent.buildFail(String.format("平台%s未启用", payName));
+        }
+        // 项目的
+        ProjectPaySetting paySetting = projectPaySettingDao.findTopByProjectOidAndChannelType(projectOid, PaymentType.WeChat);
+
+        // 配置的
+        List<ProjectPaySettingInfo> list = projectPaySettingInfoDao.findByProjectOidAndChannelType(projectOid, PaymentType.WeChat);
+        if (ObjectUtils.isEmpty(list)) {
+            return ResultContent.buildFail(String.format("项目未配置%s", payName));
+        }
+        ProjectPaySettingInfo paySettingInfo = list.get(0);
+        return ResultContent.buildSuccess(paySettingInfo);
+    }
     //-----------------------------拉卡拉配置 start-------------------
 
     /**
@@ -151,12 +307,14 @@ public class ProjectPaySettingServiceImpl extends SuperService {
      * @return
      */
     public ResultContent saveLaKaLaConfig(LaKaLaCollectionConfigParam param) {
-        //TODO 检查支付参数等
-        LaKaLaCollectionConfig laKaLaCollectionConfig = null;
-        ResultContent<LaKaLaCollectionConfig> resultContent = getLaKaLaConfig(param.getProjectOid());
-        if (resultContent.isSuccess()) {
-            laKaLaCollectionConfig = resultContent.getContent();
+        ResultContent<ProjectPaySettingInfo> content = initProjectPayInfo(param);
+        if (content.isFailed()) {
+            return ResultContent.buildFail(content.getMsg());
         }
+        ProjectPaySettingInfo settingInfo = content.getContent();
+
+        //TODO 检查支付参数等
+        LaKaLaCollectionConfig laKaLaCollectionConfig = (LaKaLaCollectionConfig) settingInfo.getPayConfig();
         if (ObjectUtils.isEmpty(laKaLaCollectionConfig)) {
             laKaLaCollectionConfig = new LaKaLaCollectionConfig();
         }
@@ -171,96 +329,77 @@ public class ProjectPaySettingServiceImpl extends SuperService {
         String lklNotifyCerBase64 = AesUtils.turnMultipartFileToBase64(param.getLklNotifyCerFile());
         laKaLaCollectionConfig.setLklNotifyCerBase64(lklNotifyCerBase64);
 
-        return saveProjectPaySetting(param.getProjectOid(), PaymentType.LakalaFrictionlessPay, laKaLaCollectionConfig);
-    }
-
-    /**
-     * 得到项目的微信支付配置
-     *
-     * @param projectOid
-     * @return
-     */
-    public ResultContent<LaKaLaCollectionConfig> getLaKaLaConfig(String projectOid) {
-        LaKaLaCollectionConfig model = null;
-        ProjectPaySetting paySetting = getProjectPaySetting(projectOid, PaymentType.LakalaFrictionlessPay);
-        if (ObjectUtils.isNotEmpty(paySetting)) {
-            model = (LaKaLaCollectionConfig) paySetting.getPayConfig();
-        }
-        return ResultContent.buildSuccess(model);
+        settingInfo.setPayConfig(laKaLaCollectionConfig);
+        projectPaySettingInfoDao.save(settingInfo);
+        // 如果当前设置为默认,把其他的取消默认
+        initChangeDefault(settingInfo.getId(), settingInfo.getProjectOid(), settingInfo.getChannelType());
+        return ResultContent.buildSuccess();
     }
 
-    /**
-     * 项目得到所有的支付渠道配置
-     *
-     * @param projectOid
-     * @return
-     */
-    public ResultContent<List<ProjectPaySettingModel>> getAllProjectPaySetting(String projectOid) {
-        List<ProjectPaySetting> list = projectPaySettingDao.findByProjectOid(projectOid);
-        List<ProjectPaySettingModel> models = new ArrayList<>(list.size());
-        if (ObjectUtils.isNotEmpty(list)) {
-            models = list.stream().map(this::toModel).collect(Collectors.toUnmodifiableList());
+    public ResultContent<ProjectPaySettingInfo> initProjectPayInfo(PayConfigParam param) {
+        Organization project = organizationDao.findTopByOid(param.getProjectOid());
+        if (ObjectUtils.isEmpty(project)) {
+            return ResultContent.buildFail("projectOid不存在");
         }
-        return ResultContent.buildSuccess(models);
-    }
-
-    public ResultContent deleteInfo(String id) {
-        ProjectPaySetting paySetting = projectPaySettingDao.findTopById(id);
-        if (ObjectUtils.isEmpty(paySetting)) {
-            return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, id));
+        ProjectPaySettingInfo projectPaySettingInfo = null;
+        if (StringUtils.isNotEmpty(param.getId())) {
+            projectPaySettingInfo = projectPaySettingInfoDao.findTopById(param.getId());
+            if (ObjectUtils.isEmpty(projectPaySettingInfo)) {
+                return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, param.getId()));
+            }
+        } else {
+            if (StringUtils.isEmpty(param.getProjectPaySettingId())) {
+                return ResultContent.buildFail("projectPaySettingId不能为空");
+            }
+            ProjectPaySetting paySetting = projectPaySettingDao.findTopById(param.getProjectPaySettingId());
+            if (ObjectUtils.isEmpty(paySetting)) {
+                return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, param.getProjectPaySettingId()));
+            }
+            projectPaySettingInfo = new ProjectPaySettingInfo();
+            projectPaySettingInfo.setProjectPaySetting(paySetting);
+            projectPaySettingInfo.setChannelType(paySetting.getChannelType());
+            projectPaySettingInfo.setPaymentChannelType(paySetting.getPaymentChannelType());
+            projectPaySettingInfo.setState(DataState.Enable);
+            projectPaySettingInfo.setProjectOid(project.getOid());
+            projectPaySettingInfo.setProjectName(project.getName());
+            projectPaySettingInfo.setProjectCode(project.getCode());
+            int total = projectPaySettingInfoDao.countByProjectOidAndChannelType(project.getOid(), paySetting.getChannelType());
+            if (total <= 0) {
+                param.setIsDefault(Boolean.TRUE);
+            }
         }
-        projectPaySettingDao.delete(paySetting);
-        return ResultContent.buildSuccess();
+        projectPaySettingInfo.setName(param.getName());
+        projectPaySettingInfo.setIsDefault(param.getIsDefault());
+        return ResultContent.buildSuccess(projectPaySettingInfo);
     }
 
-    public ResultContent changeState(String id, DataState state) {
-        ProjectPaySetting paySetting = projectPaySettingDao.findTopById(id);
-        if (ObjectUtils.isEmpty(paySetting)) {
-            return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, id));
-        }
-        if (state == DataState.Enable && paySetting.getPayConfig() == null) {
-            return ResultContent.buildFail("参数未配置,不能启用");
+    public ResultContent initChangeDefault(String id, String projectOid, PaymentType paymentType) {
+        List<ProjectPaySettingInfo> list = projectPaySettingInfoDao.findByProjectOidAndChannelType(projectOid, paymentType);
+        if (ObjectUtils.isNotEmpty(list)) {
+            List<ProjectPaySettingInfo> _tempList = list.stream().filter(it -> it.getIsDefault() != null && it.getIsDefault()).collect(Collectors.toList());
+            if (ObjectUtils.isNotEmpty(_tempList)) {
+                if (_tempList.size() > 1 && StringUtils.isNotEmpty(id)) {
+                    // 其他的设置为  非默认
+                    _tempList.stream().forEach(it -> {
+                        if (!it.getId().equals(id)) {
+                            it.setIsDefault(Boolean.FALSE);
+                            projectPaySettingInfoDao.save(it);
+                        }
+                    });
+                }
+            } else {
+                ProjectPaySettingInfo first = list.get(0);
+                first.setIsDefault(Boolean.TRUE);
+                projectPaySettingInfoDao.save(first);
+            }
         }
-        paySetting.setState(state);
-        projectPaySettingDao.save(paySetting);
         return ResultContent.buildSuccess();
     }
 
-    //-----------------------------通用配置方法 start----------------------------
-
     public ProjectPaySetting getProjectPaySetting(String projectOid, PaymentType paymentType) {
-        return projectPaySettingDao.findTopByProjectOidAndChannelType(
-                projectOid, paymentType);
+        return projectPaySettingDao.findTopByProjectOidAndChannelType(projectOid, paymentType);
     }
 
-    // 通用保存参数配置
-    private ResultContent<ProjectPaySetting> saveProjectPaySetting(String projectOid, PaymentType paymentType, Object payConfig) {
-        Organization projectOrg = organizationDao.findTopByOid(projectOid);
-        if (ObjectUtils.isEmpty(projectOrg)) {
-            return ResultContent.buildFail(String.format("oid不存在:%s", projectOid));
-        }
-        if (projectOrg.getAuthType() != AuthType.Project) {
-            return ResultContent.buildFail(String.format("%s 结构不属于项目类型", projectOrg.getName()));
-        }
-        ProjectPaySetting projectPaySetting = projectPaySettingDao.findTopByProjectOidAndChannelType(
-                projectOid, paymentType);
-        if (ObjectUtils.isEmpty(projectPaySetting)) {
-            projectPaySetting = new ProjectPaySetting();
-            initEntityNoCheckOid(projectPaySetting);
-            projectPaySetting.setProjectOid(projectOid);
-            projectPaySetting.setProjectInfo(projectOrg);
-            projectPaySetting.setProjectName(projectOrg.getName());
-            projectPaySetting.setProjectCode(projectOrg.getCode());
-            projectPaySetting.setChannelType(paymentType);
-            projectPaySetting.setPaymentChannelType(paymentType.getChannelType());
-            projectPaySetting.setState(DataState.Enable);
-        } else {
-            initUpdateEntity(projectPaySetting);
-        }
-        projectPaySetting.setPayConfig(payConfig);
-        projectPaySettingDao.save(projectPaySetting);
-        return ResultContent.buildSuccess(projectPaySetting);
-    }
 
     public ProjectPaySettingModel toModel(ProjectPaySetting entity) {
         ProjectPaySettingModel model = null;
@@ -303,8 +442,7 @@ public class ProjectPaySettingServiceImpl extends SuperService {
             ResultContent.buildFail(String.format("平台未配置%s", paymentType.getChannelType().getRemark()));
         }
         if (ObjectUtils.isEmpty(payChannelConfig)) {
-            return ResultContent.buildFail(String.format("%s支付产品不支持%s", payChannelConfig.getName(),
-                    paymentType.getRemark()));
+            return ResultContent.buildFail(String.format("%s支付产品不支持%s", payChannelConfig.getName(), paymentType.getRemark()));
         }
         if (payChannelConfig.getState() != DataState.Enable) {
             return ResultContent.buildFail(String.format("支付产品%s%s", payChannelConfig.getName(), payChannelConfig.getState().getRemark()));
@@ -317,6 +455,29 @@ public class ProjectPaySettingServiceImpl extends SuperService {
         return ResultContent.buildSuccess();
     }
 
+    /**
+     * 得到字段
+     *
+     * @param configId
+     * @return
+     */
+    public ResultContent<PayConfigFieldModel> getFieldByConfigId(String configId) {
+        ProjectPaySetting paySetting = projectPaySettingDao.findTopById(configId);
+        if (ObjectUtils.isEmpty(paySetting)) {
+            return ResultContent.buildFail("数据不存在");
+        }
+        return getField(paySetting.getChannelType());
+    }
+
+    public ResultContent<PayConfigFieldModel> getField(PaymentType paymentType) {
+        PayConfigFieldModel model = new PayConfigFieldModel();
+        if (paymentType == PaymentType.WeChat) {
+            model.setApiName("saveWxPayConfig");
+            model.setFields(getWxConfig());
+        }
+        return ResultContent.buildSuccess(model);
+    }
+
     /**
      * 得到微信支付需要的字段
      *
@@ -324,9 +485,25 @@ public class ProjectPaySettingServiceImpl extends SuperService {
      */
     public List<PayConfigField> getWxConfig() {
         List<PayConfigField> fields = new ArrayList<>(4);
-        PayConfigField.builder().name("").key("").type(PayFieldType.Str).isMust(Boolean.TRUE).build();
-
-
+        fields.add(PayConfigField.builder().name("appid").key("appId").type(PayFieldType.Str).isMust(Boolean.TRUE).maxLength(100).build());
+        fields.add(PayConfigField.builder().name("商户证书序列号").key("mchSerialNo").type(PayFieldType.Str).isMust(Boolean.TRUE).maxLength(100).build());
+        fields.add(PayConfigField.builder().name("商户id").key("mchId").type(PayFieldType.Str).isMust(Boolean.TRUE).maxLength(100).build());
+        fields.add(PayConfigField.builder().name("V3密钥").key("apiV3Key").type(PayFieldType.Str).isMust(Boolean.TRUE).maxLength(100).build());
+        fields.add(PayConfigField.builder().name("证书文件").key("privateKeyFile").type(PayFieldType.File).isMust(Boolean.FALSE).build());
+        fields.add(PayConfigField.builder().name("支付成功回调地址").key("notifyUrl").type(PayFieldType.Str).isMust(Boolean.TRUE).maxLength(500).build());
         return fields;
     }
+
+    public ProjectPaySettingInfoModel toModel(ProjectPaySettingInfo entity) {
+        ProjectPaySettingInfoModel model = null;
+        if (ObjectUtils.isNotEmpty(entity)) {
+            model = new ProjectPaySettingInfoModel();
+            BeanUtils.copyProperties(entity, model);
+            if (entity.getProjectPaySetting() != null) {
+                model.setProjectPaySettingId(entity.getProjectPaySetting().getId());
+            }
+        }
+        return model;
+    }
+
 }