|
|
@@ -5,12 +5,15 @@ import com.github.microservice.net.ResultContent;
|
|
|
import com.github.microservice.net.ResultMessage;
|
|
|
import com.github.microservice.pay.client.model.AccountModel;
|
|
|
import com.github.microservice.pay.client.product.miniApp.weChat.conf.WeChatMiniAppConf;
|
|
|
+import com.github.microservice.pay.client.product.senseless.chinaumsSenseless.conf.ChinaumsSenselessConf;
|
|
|
import com.github.microservice.pay.client.ret.ResultState;
|
|
|
import com.github.microservice.pay.client.service.PayProductAccountService;
|
|
|
import com.github.microservice.pay.client.type.PayProductChannelType;
|
|
|
import com.github.microservice.types.payment.PayFieldType;
|
|
|
import com.github.microservice.types.payment.PaymentType;
|
|
|
import com.zhongshu.card.client.model.org.BelongOigParam;
|
|
|
+import com.zhongshu.card.client.model.paySetting.payConfig.FrictionlessUnionConfigModel;
|
|
|
+import com.zhongshu.card.client.model.paySetting.payConfig.FrictionlessUnionConfigParam;
|
|
|
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.*;
|
|
|
@@ -18,10 +21,12 @@ import com.zhongshu.card.client.model.payment.PaymentTypeParam;
|
|
|
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.ProjectMainPaySettingDao;
|
|
|
import com.zhongshu.card.server.core.dao.projectAbout.ProjectOrgPaySettingInfoDao;
|
|
|
import com.zhongshu.card.server.core.dao.projectAbout.ProjectPaySettingDao;
|
|
|
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.ProjectMainPaySetting;
|
|
|
import com.zhongshu.card.server.core.domain.paySetting.ProjectOrgPaySettingInfo;
|
|
|
import com.zhongshu.card.server.core.domain.paySetting.ProjectPaySetting;
|
|
|
import com.zhongshu.card.server.core.service.base.SuperService;
|
|
|
@@ -72,6 +77,99 @@ public class ProjectPaySettingServiceImpl extends SuperService {
|
|
|
@Autowired
|
|
|
private OrgPayAccountService orgPayAccountService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private ProjectChannelConfigService projectChannelConfigService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ProjectMainPaySettingDao projectMainPaySettingDao;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 关联支付渠道
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public ResultContent savePayChannel(ProjectPaySettingParam param) {
|
|
|
+ String projectOid = param.getProjectOid();
|
|
|
+ if (StringUtils.isEmpty(projectOid)) {
|
|
|
+ return ResultContent.buildFail("projectOid不能为空");
|
|
|
+ }
|
|
|
+ Organization project = organizationDao.findTopByOid(projectOid);
|
|
|
+ if (ObjectUtils.isEmpty(project)) {
|
|
|
+ return ResultContent.buildFail("项目不存在");
|
|
|
+ }
|
|
|
+ PayChannelConfig payChannelConfig = payChannelConfigDao.findTopById(param.getId());
|
|
|
+ if (ObjectUtils.isEmpty(payChannelConfig)) {
|
|
|
+ return ResultContent.buildFail("支付产品不存在");
|
|
|
+ }
|
|
|
+ PaymentType paymentType = payChannelConfig.getPaymentType();
|
|
|
+
|
|
|
+ ProjectPaySetting projectPaySetting = projectPaySettingDao.findTopByProjectOidAndChannelType(projectOid, paymentType);
|
|
|
+ if (ObjectUtils.isNotEmpty(projectPaySetting)) {
|
|
|
+ return ResultContent.buildFail(String.format("%s已存在", paymentType.getRemark()));
|
|
|
+ }
|
|
|
+ projectPaySetting = new ProjectPaySetting();
|
|
|
+ initEntityNoCheckOid(projectPaySetting);
|
|
|
+ projectPaySetting.setProjectOid(projectOid);
|
|
|
+ projectPaySetting.setProjectInfo(project);
|
|
|
+ projectPaySetting.setProjectCode(project.getCode());
|
|
|
+ projectPaySetting.setProjectName(project.getName());
|
|
|
+ projectPaySetting.setChannelType(paymentType);
|
|
|
+ projectPaySetting.setPaymentChannelType(payChannelConfig.getPaymentChannelType());
|
|
|
+
|
|
|
+ projectPaySetting.setState(DataState.Disable);
|
|
|
+ projectPaySettingDao.save(projectPaySetting);
|
|
|
+ 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));
|
|
|
+ }
|
|
|
+ // 判断是否可以删除
|
|
|
+ if (paySetting.getState() != null && paySetting.getState() == DataState.Enable) {
|
|
|
+ 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) {
|
|
|
+ ProjectMainPaySetting mainPaySetting = projectMainPaySettingDao.findTopByProjectOidAndChannelType(paySetting.getProjectOid(), paySetting.getChannelType());
|
|
|
+ if (ObjectUtils.isEmpty(mainPaySetting)) {
|
|
|
+ return ResultContent.buildFail("未配置主账户信息或结算规则等,不能启用!");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ paySetting.setState(state);
|
|
|
+ projectPaySettingDao.save(paySetting);
|
|
|
+
|
|
|
+ // 更新支付中心的账号信息
|
|
|
+ upsertPayAccount(paySetting.getProjectOid(), paySetting.getChannelType());
|
|
|
+ return ResultContent.buildSuccess();
|
|
|
+ }
|
|
|
+
|
|
|
//-----------------------------通用配置方法 start----------------------------
|
|
|
|
|
|
/**
|
|
|
@@ -112,6 +210,11 @@ public class ProjectPaySettingServiceImpl extends SuperService {
|
|
|
if (ObjectUtils.isEmpty(entity)) {
|
|
|
return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, id));
|
|
|
}
|
|
|
+ // 判断是否可以删除
|
|
|
+ int total = projectMainPaySettingDao.countByPaySettingInfo(entity);
|
|
|
+ if (total > 0) {
|
|
|
+ return ResultContent.buildFail("该账户已被项目引用,不能删除!");
|
|
|
+ }
|
|
|
projectPaySettingInfoDao.delete(entity);
|
|
|
initChangeDefault(null, entity.getBelongOig(), entity.getProjectOid(), entity.getChannelType());
|
|
|
return ResultContent.buildSuccess();
|
|
|
@@ -231,6 +334,35 @@ public class ProjectPaySettingServiceImpl extends SuperService {
|
|
|
return ResultContent.buildSuccess();
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 银联云闪付参数配置
|
|
|
+ *
|
|
|
+ * @param param
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public ResultContent saveUnionPayConfig(FrictionlessUnionConfigParam param) {
|
|
|
+ ResultContent<ProjectOrgPaySettingInfo> content = initProjectPayInfo(param);
|
|
|
+ if (content.isFailed()) {
|
|
|
+ return ResultContent.buildFail(content.getMsg());
|
|
|
+ }
|
|
|
+ ProjectOrgPaySettingInfo settingInfo = content.getContent();
|
|
|
+ FrictionlessUnionConfigModel unionConfigModel = null;
|
|
|
+ if (ObjectUtils.isNotEmpty(settingInfo) && settingInfo.getPayConfig() != null) {
|
|
|
+ unionConfigModel = (FrictionlessUnionConfigModel) settingInfo.getPayConfig();
|
|
|
+ }
|
|
|
+ if (unionConfigModel == null) {
|
|
|
+ unionConfigModel = new FrictionlessUnionConfigModel();
|
|
|
+ }
|
|
|
+ BeanUtils.copyProperties(param, unionConfigModel);
|
|
|
+
|
|
|
+ settingInfo.setPayConfig(unionConfigModel);
|
|
|
+ projectPaySettingInfoDao.save(settingInfo);
|
|
|
+
|
|
|
+ // 如果当前设置为默认,把其他的取消默认
|
|
|
+ initChangeDefault(settingInfo.getId(), settingInfo.getBelongOig(), settingInfo.getProjectOid(), settingInfo.getChannelType());
|
|
|
+ return ResultContent.buildSuccess();
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* @param param
|
|
|
* @return
|
|
|
@@ -352,6 +484,11 @@ public class ProjectPaySettingServiceImpl extends SuperService {
|
|
|
// 微信小程序支付
|
|
|
model.setApiName("saveWxPayConfig");
|
|
|
model.setFields(getWxConfig());
|
|
|
+ } else if (paymentType == PaymentType.UnionFrictionlessPay) {
|
|
|
+ // 银联云闪付
|
|
|
+ model.setApiName("saveUnionPayConfig");
|
|
|
+ model.setFields(getUnionPay());
|
|
|
+ model.setType("json");
|
|
|
}
|
|
|
return ResultContent.buildSuccess(model);
|
|
|
}
|
|
|
@@ -365,13 +502,32 @@ public class ProjectPaySettingServiceImpl extends SuperService {
|
|
|
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("商户证书序列号").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;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 银联云闪付字段
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ 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());
|
|
|
+
|
|
|
+ return fields;
|
|
|
+ }
|
|
|
+
|
|
|
public ProjectPaySettingInfoModel toModel(ProjectOrgPaySettingInfo entity) {
|
|
|
ProjectPaySettingInfoModel model = null;
|
|
|
if (ObjectUtils.isNotEmpty(entity)) {
|
|
|
@@ -383,6 +539,10 @@ public class ProjectPaySettingServiceImpl extends SuperService {
|
|
|
if (ObjectUtils.isNotEmpty(payChannelConfig)) {
|
|
|
model.setPayLogo(payChannelConfig.getLogo());
|
|
|
}
|
|
|
+ Organization organization = organizationDao.findTopByOid(entity.getBelongOig());
|
|
|
+ if (ObjectUtils.isNotEmpty(organization)) {
|
|
|
+ model.setBelongOrgName(organization.getName());
|
|
|
+ }
|
|
|
}
|
|
|
return model;
|
|
|
}
|
|
|
@@ -436,13 +596,24 @@ public class ProjectPaySettingServiceImpl extends SuperService {
|
|
|
* @return
|
|
|
*/
|
|
|
public ResultContent upsertPayAccount(String projectOid, PaymentType paymentType) {
|
|
|
- ProjectOrgPaySettingInfo entity = projectPaySettingInfoDao.findTopByProjectOidAndChannelTypeAndIsDefault(projectOid, paymentType, Boolean.TRUE);
|
|
|
+ log.info("upsertPayAccount 维护支付中心的支付账号");
|
|
|
+ ProjectMainPaySetting projectMainPaySetting = projectMainPaySettingDao.findTopByProjectOidAndChannelType(projectOid, paymentType);
|
|
|
+ if (ObjectUtils.isEmpty(projectMainPaySetting)) {
|
|
|
+ log.error("upsertPayAccount 项目未配置; {} {}", paymentType.getRemark(), projectOid);
|
|
|
+ return ResultContent.buildFail("项目未配置");
|
|
|
+ }
|
|
|
+ ProjectOrgPaySettingInfo entity = projectMainPaySetting.getPaySettingInfo();
|
|
|
+ if (ObjectUtils.isEmpty(entity)) {
|
|
|
+ log.error("upsertPayAccount 关联机构支付配置为空");
|
|
|
+ return ResultContent.buildFail("关联机构支付配置为空");
|
|
|
+ }
|
|
|
|
|
|
String payAccountName = orgPayAccountService.buildPayAccountName(projectOid, paymentType);
|
|
|
|
|
|
AccountModel accountModel = new AccountModel();
|
|
|
accountModel.setName(payAccountName);
|
|
|
|
|
|
+ String remark = "";
|
|
|
Boolean disable = Boolean.FALSE;
|
|
|
if (ObjectUtils.isNotEmpty(entity)) {
|
|
|
if (paymentType == PaymentType.WeChat) {
|
|
|
@@ -459,32 +630,85 @@ public class ProjectPaySettingServiceImpl extends SuperService {
|
|
|
accountModel.setConf(appConf);
|
|
|
} else if (paymentType == PaymentType.UnionFrictionlessPay) {
|
|
|
// 银联无感支付
|
|
|
+ accountModel.setProductChannelType(PayProductChannelType.ChinaumsSenseless);
|
|
|
|
|
|
+ FrictionlessUnionConfigModel model = (FrictionlessUnionConfigModel) entity.getPayConfig();
|
|
|
+ // 支付中心
|
|
|
+ ChinaumsSenselessConf appConf = new ChinaumsSenselessConf();
|
|
|
+ appConf.setAppId(model.getAppId());
|
|
|
+ appConf.setAppKey(model.getAppKey());
|
|
|
+ appConf.setOrderNoPrefix(model.getOrderStart());
|
|
|
+ appConf.setMchId(model.getMchId());
|
|
|
+ appConf.setTerminalNo(model.getTid());
|
|
|
+ appConf.setPlanId(model.getPlanId());
|
|
|
+ appConf.setSecretKey(model.getNotifySecret());
|
|
|
+ appConf.setNotifyUrl(model.getNotifyUrl());
|
|
|
+
|
|
|
+ accountModel.setConf(appConf);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!disable) {
|
|
|
+ // 机构配置为开启
|
|
|
+ if (entity.getState() == null || entity.getState() != DataState.Enable) {
|
|
|
+ disable = Boolean.TRUE;
|
|
|
+ remark = "机构配置未启用";
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- // 查看平台支付产品状态
|
|
|
- PayChannelConfig channelConfig = payChannelConfigDao.findTopByPaymentType(paymentType);
|
|
|
- if (ObjectUtils.isNotEmpty(channelConfig)) {
|
|
|
- if (channelConfig.getState() == null || channelConfig.getState() != DataState.Enable) {
|
|
|
- disable = Boolean.FALSE;
|
|
|
+ if (!disable) {
|
|
|
+ // 查看平台支付产品状态
|
|
|
+ PayChannelConfig channelConfig = payChannelConfigDao.findTopByPaymentType(paymentType);
|
|
|
+ if (ObjectUtils.isNotEmpty(channelConfig)) {
|
|
|
+ if (channelConfig.getState() != null && channelConfig.getState() == DataState.Enable) {
|
|
|
+ disable = Boolean.FALSE;
|
|
|
+ } else {
|
|
|
+ remark = "平台支付产品未启用";
|
|
|
+ disable = Boolean.TRUE;
|
|
|
+ }
|
|
|
} else {
|
|
|
+ remark = "平台支付产品不存在";
|
|
|
disable = Boolean.TRUE;
|
|
|
}
|
|
|
- } else {
|
|
|
- disable = Boolean.TRUE;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!disable) {
|
|
|
+ // 项目配置 项目上没启用
|
|
|
+ ProjectPaySetting projectPaySetting = projectPaySettingDao.findTopByProjectOidAndChannelType(projectOid, paymentType);
|
|
|
+ if (projectPaySetting.getState() == null || projectPaySetting.getState() == DataState.Disable) {
|
|
|
+ disable = Boolean.TRUE;
|
|
|
+ remark = "项目上支付渠道未启用";
|
|
|
+ }
|
|
|
}
|
|
|
} else {
|
|
|
// 不可用
|
|
|
disable = Boolean.TRUE;
|
|
|
+ remark = "关联的主账户信息不存在";
|
|
|
}
|
|
|
accountModel.setDisable(disable);
|
|
|
+ accountModel.setRemark(remark);
|
|
|
com.github.microservice.pay.client.ret.ResultContent<Void> resultContent = payProductAccountService.upsert(accountModel);
|
|
|
if (resultContent.getState() == ResultState.Success) {
|
|
|
- log.info("更新支付产品账户成功...");
|
|
|
+ log.info("更新支付产品账户成功... disable {}", disable);
|
|
|
orgPayAccountService.saveProjectAccount(projectOid, paymentType, accountModel.getProductChannelType());
|
|
|
} else {
|
|
|
log.error("更新支付产品账户出错: {}", resultContent.getMsg());
|
|
|
}
|
|
|
return ResultContent.buildSuccess();
|
|
|
}
|
|
|
+
|
|
|
+ public ProjectPaySettingModel toModel(ProjectPaySetting entity) {
|
|
|
+ ProjectPaySettingModel model = null;
|
|
|
+ if (ObjectUtils.isNotEmpty(entity)) {
|
|
|
+ model = new ProjectPaySettingModel();
|
|
|
+ BeanUtils.copyProperties(entity, model);
|
|
|
+ // 关联的支付产品信息
|
|
|
+ model.setPayChannelConfigModel(projectChannelConfigService.getProjectPayChannelModel(entity.getChannelType()));
|
|
|
+ // 判断是否完成配置
|
|
|
+ ProjectOrgPaySettingInfo settingInfo = projectPaySettingInfoDao.findTopByProjectOidAndChannelTypeAndIsDefault(entity.getProjectOid(), entity.getChannelType(), Boolean.TRUE);
|
|
|
+ if (ObjectUtils.isNotEmpty(settingInfo)) {
|
|
|
+ model.setIsConfig(Boolean.TRUE);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return model;
|
|
|
+ }
|
|
|
}
|