Browse Source

管理端商家列表加入新账通支付接入功能

multiwx
dy-hu 3 weeks ago
parent
commit
c2a36b2c8e
  1. 67
      cereshop-admin/src/main/java/com/shop/cereshop/admin/controller/BusinessWxpayController.java
  2. 103
      cereshop-admin/src/main/java/com/shop/cereshop/admin/controller/HnaPayController.java
  3. 4
      cereshop-admin/src/main/java/com/shop/cereshop/admin/dao/business/CerePlatformBusinessDAO.java
  4. 20
      cereshop-admin/src/main/java/com/shop/cereshop/admin/dao/bwxpay/CereBusinessWxpayDao.java
  5. 87
      cereshop-admin/src/main/java/com/shop/cereshop/admin/param/business/BusinessHnapayCreateParam.java
  6. 15
      cereshop-admin/src/main/java/com/shop/cereshop/admin/pay/hnapay/HnaPayService.java
  7. 26
      cereshop-admin/src/main/java/com/shop/cereshop/admin/pay/hnapay/impl/HnaPayServiceImpl.java
  8. 4
      cereshop-admin/src/main/java/com/shop/cereshop/admin/service/business/CerePlatformBusinessService.java
  9. 10
      cereshop-admin/src/main/java/com/shop/cereshop/admin/service/business/impl/CerePlatformBusinessServiceImpl.java
  10. 20
      cereshop-admin/src/main/java/com/shop/cereshop/admin/service/bwxpay/CereBusinessWxpayService.java
  11. 40
      cereshop-admin/src/main/java/com/shop/cereshop/admin/service/bwxpay/impl/CereBusinessWxpayServiceImpl.java
  12. 11
      cereshop-admin/src/main/resources/mybatis/mapper/business/CerePlatformBusinessDAO.xml
  13. 19
      cereshop-admin/src/main/resources/mybatis/mapper/bwxpay/CereBusinessWxpayDAO.xml
  14. 21
      cereshop-app/src/main/java/com/shop/cereshop/app/dao/bwxpay/CereBusinessWxpayDao.java
  15. 21
      cereshop-app/src/main/java/com/shop/cereshop/app/service/bwxpay/CereBusinessWxpayService.java
  16. 42
      cereshop-app/src/main/java/com/shop/cereshop/app/service/bwxpay/impl/CereBusinessWxpayServiceImpl.java
  17. 54
      cereshop-business/src/main/java/com/shop/cereshop/business/controller/HnaPayController.java
  18. 2
      cereshop-business/src/main/java/com/shop/cereshop/business/dao/business/CerePlatformBusinessDAO.java
  19. 2
      cereshop-business/src/main/java/com/shop/cereshop/business/service/business/CerePlatformBusinessService.java
  20. 4
      cereshop-business/src/main/java/com/shop/cereshop/business/service/business/impl/CerePlatformBusinessServiceImpl.java
  21. 4
      cereshop-business/src/main/resources/mybatis/mapper/business/CerePlatformBusinessDAO.xml
  22. 5
      cereshop-commons/src/main/java/com/shop/cereshop/commons/config/HnaPayConfig.java
  23. 17
      cereshop-commons/src/main/java/com/shop/cereshop/commons/domain/business/CerePlatformBusiness.java
  24. 55
      cereshop-commons/src/main/java/com/shop/cereshop/commons/domain/bwxpay/CereBusinessWxpay.java
  25. 17
      doc/3.0/update.sql

67
cereshop-admin/src/main/java/com/shop/cereshop/admin/controller/BusinessWxpayController.java

@ -0,0 +1,67 @@
package com.shop.cereshop.admin.controller;
/**
* 描述商家微信配置模块
*
* @author stevenhu
* @version 2025/02/20 14:38
*/
import com.shop.cereshop.admin.annotation.NoRepeatSubmit;
import com.shop.cereshop.admin.annotation.NoRepeatWebLog;
import com.shop.cereshop.admin.param.business.BusinessUpdateParam;
import com.shop.cereshop.admin.service.bwxpay.CereBusinessWxpayService;
import com.shop.cereshop.commons.constant.CoReturnFormat;
import com.shop.cereshop.commons.domain.business.CerePlatformBusiness;
import com.shop.cereshop.commons.domain.business.CerePlatformBusinessUser;
import com.shop.cereshop.commons.domain.bwxpay.CereBusinessWxpay;
import com.shop.cereshop.commons.domain.user.CerePlatformUser;
import com.shop.cereshop.commons.exception.CoBusinessException;
import com.shop.cereshop.commons.result.Result;
import com.shop.cereshop.commons.utils.GsonUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
@RestController
@RequestMapping("bwxpay")
/**
* 注解方式生成日志对象指定topic生成对象类名
*/
@Slf4j(topic = "BusinessWxpayController")
@Api(value = "商家微信配置模块", tags = "商家微信配置模块")
public class BusinessWxpayController {
@Autowired
private CereBusinessWxpayService businessWxpayService;
@PostMapping(value = "save")
@NoRepeatSubmit
@ApiOperation(value = "新建商家微信配置信息")
@NoRepeatWebLog
public Result save(@RequestBody CereBusinessWxpay wxpay, HttpServletRequest request) throws CoBusinessException {
//获取当前登录账户
CerePlatformUser user = (CerePlatformUser) request.getAttribute("user");
businessWxpayService.save(wxpay);
return new Result(user.getUsername(),"新建商家微信配置信息", GsonUtil.objectToGson(wxpay));
}
@PostMapping(value = "update")
@NoRepeatSubmit
@ApiOperation(value = "修改商家")
@NoRepeatWebLog
public Result update(@RequestBody CereBusinessWxpay wxpay, HttpServletRequest request) throws CoBusinessException{
//校验商家名称是否存在
//获取当前登录账户
CerePlatformUser user = (CerePlatformUser) request.getAttribute("user");
businessWxpayService.update(wxpay);
return new Result(user.getUsername(),"修改商家", GsonUtil.objectToGson(wxpay));
}
}

103
cereshop-admin/src/main/java/com/shop/cereshop/admin/controller/HnaPayController.java

@ -0,0 +1,103 @@
package com.shop.cereshop.admin.controller;
import com.shop.cereshop.admin.annotation.NoRepeatSubmit;
import com.shop.cereshop.admin.annotation.NoRepeatWebLog;
import com.shop.cereshop.admin.param.business.BusinessHnapayCreateParam;
import com.shop.cereshop.admin.pay.hnapay.HnaPayService;
import com.shop.cereshop.admin.service.business.CerePlatformBusinessService;
import com.shop.cereshop.commons.exception.CoBusinessException;
import com.shop.cereshop.commons.result.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.io.InputStream;
import java.util.Base64;
import java.util.Map;
/**
* 描述新生支付新账通回调处理
*
* @author stevenhu
* @version 2025/02/14 9:24
*/
@RestController
@RequestMapping("hnaPay")
@Slf4j(topic = "hnaPayController")
@Api(value = "新账通模块", tags = "新账通模块")
public class HnaPayController {
@Autowired
private HnaPayService hnaPayService;
@Autowired
private CerePlatformBusinessService businessService;
/**
* 新账通企业开户
* @param param
* @return
*/
@PostMapping(value = "create")
@NoRepeatSubmit
@ApiOperation(value = "新账通企业开户")
@NoRepeatWebLog
public Result<String> create(@RequestBody BusinessHnapayCreateParam param) throws CoBusinessException {
//新生支付新账通企业开户
Map<String,Object> result = hnaPayService.createEntAccount(param);
String resultCode = String.valueOf(result.get("resultCode"));
String shareParId = "";
if (resultCode.equals("0000")){
shareParId = String.valueOf(result.get("userId"));
String bindCardAgrNo = String.valueOf(result.get("bindCardAgrNo"));
businessService.updateBusinessHnaPay(param.getBusinessId(),shareParId,bindCardAgrNo);
}else {
String errorMsg = String.valueOf(result.get("errorMsg"));
throw new CoBusinessException(errorMsg);
}
return new Result(shareParId);
}
@PostMapping("uploadCertInfo")
@NoRepeatSubmit
@ApiOperation("企业开户资料上送")
@NoRepeatWebLog
public Result<String> uploadCertInfo(MultipartFile file, String businessId, String shareParId, String type) throws CoBusinessException {
String base64 = getBase64(file);
Map<String,Object> result = hnaPayService.uploadEntFile(shareParId, type,base64);
String resultCode = String.valueOf(result.get("resultCode"));
if (resultCode.equals("0000")){
businessService.updateBusinessHnapayState(Long.parseLong(businessId),1);
}else {
String errorMsg = String.valueOf(result.get("errorMsg"));
throw new CoBusinessException(errorMsg);
}
return new Result(base64);
}
private String getBase64(MultipartFile file) {
InputStream in = null;
byte[] data = null;
String base64 = "";
try {
in = file.getInputStream();
data = new byte[in.available()];
in.read(data);
in.close();
base64 = Base64.getEncoder().encodeToString(data);
base64 = base64.replace("\n", "").replace("\r", "");
}catch (IOException e) {
return null;
}
return base64;
}
}

4
cereshop-admin/src/main/java/com/shop/cereshop/admin/dao/business/CerePlatformBusinessDAO.java

@ -69,4 +69,8 @@ public interface CerePlatformBusinessDAO extends BaseMapper<CerePlatformBusiness
List<CerePlatformBusiness> getByIdList(@Param("businessIdList") List<Long> businessIdList); List<CerePlatformBusiness> getByIdList(@Param("businessIdList") List<Long> businessIdList);
void updateDomain(BusinessDomainSet domainSet); void updateDomain(BusinessDomainSet domainSet);
void updateBusinessHnaPay(@Param("businessId") Long businessId, @Param("hnaPayId") String hnaPayId, @Param("bindCardAgrNo") String bindCardAgrNo);
void updateBusinessHnapayState(@Param("businessId") Long businessId, @Param("hnapayStatus") Integer hnapayStatus);
} }

20
cereshop-admin/src/main/java/com/shop/cereshop/admin/dao/bwxpay/CereBusinessWxpayDao.java

@ -0,0 +1,20 @@
package com.shop.cereshop.admin.dao.bwxpay;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.shop.cereshop.commons.domain.bwxpay.CereBusinessWxpay;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
/**
* 描述
*
* @author stevenhu
* @version 2025/02/20 11:49
*/
@Mapper
public interface CereBusinessWxpayDao extends BaseMapper<CereBusinessWxpay> {
CereBusinessWxpay getByBusinessId(@Param("businessId") Long businessId);
}

87
cereshop-admin/src/main/java/com/shop/cereshop/admin/param/business/BusinessHnapayCreateParam.java

@ -0,0 +1,87 @@
/*
* Copyright (C) 2017-2021
* All rights reserved, Designed By 深圳中科鑫智科技有限公司
* Copyright authorization contact 18814114118
*/
package com.shop.cereshop.admin.param.business;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
/**
* 新账通企业开户
*/
@Data
@ApiModel(value = "BusinessHnapayCreateParam", description = "新账通企业开户")
public class BusinessHnapayCreateParam {
private Long businessId;
/**
* 企业名称
*/
@ApiModelProperty(value = "企业名称")
@NotBlank(message = "企业名称不能为空")
private String name;
/**
* 营业执照号
*/
@ApiModelProperty(value = "营业执照号")
@NotBlank(message = "营业执照号")
private String enterpriseCode;
/**
* 执照效期
*/
@ApiModelProperty(value = "执照效期")
@NotBlank(message = "执照效期")
private String validDate;
/**
* 银行卡号
*/
@ApiModelProperty(value = "银行卡号")
@NotBlank(message = "银行卡号")
private String bankCard;
/**
* 银行简码
*/
@ApiModelProperty(value = "银行简码")
@NotBlank(message = "银行简码")
private String bankCode;
/**
* 开户省份
*/
@ApiModelProperty(value = "开户省份")
@NotBlank(message = "开户省份")
private String bankProvince;
/**
* 开户城市
*/
@ApiModelProperty(value = "开户城市")
@NotBlank(message = "开户城市")
private String bankCity;
/**
* 开户城市
*/
@ApiModelProperty(value = "开户支行")
@NotBlank(message = "开户支行")
private String bankBranch;
/**
* 负责人电话
*/
@ApiModelProperty(value = "负责人电话")
@NotBlank(message = "负责人电话")
private String contactPhone;
}

15
cereshop-admin/src/main/java/com/shop/cereshop/admin/pay/hnapay/HnaPayService.java

@ -1,5 +1,6 @@
package com.shop.cereshop.admin.pay.hnapay; package com.shop.cereshop.admin.pay.hnapay;
import com.shop.cereshop.admin.param.business.BusinessHnapayCreateParam;
import com.shop.cereshop.admin.pay.PayService; import com.shop.cereshop.admin.pay.PayService;
import com.shop.cereshop.commons.exception.CoBusinessException; import com.shop.cereshop.commons.exception.CoBusinessException;
@ -16,20 +17,10 @@ public interface HnaPayService extends PayService {
/** /**
* 企业开户 * 企业开户
* @param entId 企业id
* @param userName 企业名称
* @param mobile 企业联系人手机号
* @param certNo 营业执照号(统一社会信用代码)
* @param certValidate 证件有效期 格式YYYYMMDD 永久则输入21990101
* @param cardNo 银行卡号
* @param bankCode 银行简码
* @param province 开户行所属省份
* @param city 开户行所属城市
* @param branch 开户支行
* @param param
* @return * @return
*/ */
Map<String,Object> createEntAccount(Long entId, String userName, String mobile, String certNo, String certValidate, String cardNo,
String bankCode, String province, String city, String branch);
Map<String,Object> createEntAccount(BusinessHnapayCreateParam param);
/** /**

26
cereshop-admin/src/main/java/com/shop/cereshop/admin/pay/hnapay/impl/HnaPayServiceImpl.java

@ -7,6 +7,7 @@ import com.shop.cereshop.admin.dao.order.CereShopOrderDAO;
import com.shop.cereshop.admin.dao.shop.CereShopBankDAO; import com.shop.cereshop.admin.dao.shop.CereShopBankDAO;
import com.shop.cereshop.admin.page.business.Business; import com.shop.cereshop.admin.page.business.Business;
import com.shop.cereshop.admin.page.business.BusinessGetAll; import com.shop.cereshop.admin.page.business.BusinessGetAll;
import com.shop.cereshop.admin.param.business.BusinessHnapayCreateParam;
import com.shop.cereshop.admin.pay.hnapay.HnaPayService; import com.shop.cereshop.admin.pay.hnapay.HnaPayService;
import com.shop.cereshop.admin.service.business.CerePlatformBusinessService; import com.shop.cereshop.admin.service.business.CerePlatformBusinessService;
import com.shop.cereshop.admin.service.shop.CerePlatformShopService; import com.shop.cereshop.admin.service.shop.CerePlatformShopService;
@ -60,24 +61,25 @@ public class HnaPayServiceImpl implements HnaPayService {
private CereShopBankDAO cereShopBankDAO; private CereShopBankDAO cereShopBankDAO;
@Override @Override
public Map<String, Object> createEntAccount(Long entId, String userName, String mobile, String certNo, String certValidate, String cardNo, String bankCode, String province, String city, String branch) {
public Map<String, Object> createEntAccount(BusinessHnapayCreateParam param) {
String result = ""; String result = "";
R001TransForm transForm = new R001TransForm(); R001TransForm transForm = new R001TransForm();
transForm.setTranCode("R001"); transForm.setTranCode("R001");
transForm.initCommonParams("R001"); transForm.initCommonParams("R001");
transForm.setSubmitUrl(InitForm.R001_SUBMIT_URL); transForm.setSubmitUrl(InitForm.R001_SUBMIT_URL);
transForm.setMerUserId("ent_" + entId);
transForm.setUserName(userName);
transForm.setMobile(mobile);
transForm.setMerUserId("ent_" + param.getBusinessId());
transForm.setUserName(param.getName());
transForm.setMobile(param.getContactPhone());
transForm.setCertType("2"); transForm.setCertType("2");
transForm.setCertNo(certNo);
transForm.setCertValidate(certValidate);
transForm.setCardNo(cardNo);
transForm.setBankCode(bankCode);
transForm.setProvince(province);
transForm.setCity(city);
transForm.setBranch(branch);
transForm.setNotifyServerUrl(HnaPayConfig.EXAMINE_NOTICE_URL);
transForm.setCertNo(param.getEnterpriseCode());
transForm.setCertValidate(param.getValidDate());
transForm.setCardNo(param.getBankCard());
transForm.setBankCode(param.getBankCode());
transForm.setProvince(param.getBankProvince());
transForm.setCity(param.getBankCity());
transForm.setBranch(param.getBankBranch());
String notifyServerUrl = HnaPayConfig.CREATE_NOTICE_URL + "/" + param.getBusinessId();
transForm.setNotifyServerUrl(notifyServerUrl);
try { try {
result = HttpUtils.commonReq(transForm, false); result = HttpUtils.commonReq(transForm, false);
} catch (Exception e) { } catch (Exception e) {

4
cereshop-admin/src/main/java/com/shop/cereshop/admin/service/business/CerePlatformBusinessService.java

@ -57,4 +57,8 @@ public interface CerePlatformBusinessService {
List<CerePlatformBusiness> getByIdList(List<Long> businessIdList); List<CerePlatformBusiness> getByIdList(List<Long> businessIdList);
void updateDomain(BusinessDomainSet domainSet); void updateDomain(BusinessDomainSet domainSet);
void updateBusinessHnaPay(Long businessId, String hnaPayId, String bindCardAgrNo);
void updateBusinessHnapayState(Long businessId, Integer hnapayStatus);
} }

10
cereshop-admin/src/main/java/com/shop/cereshop/admin/service/business/impl/CerePlatformBusinessServiceImpl.java

@ -280,4 +280,14 @@ public class CerePlatformBusinessServiceImpl implements CerePlatformBusinessServ
public void updateDomain(BusinessDomainSet domainSet) { public void updateDomain(BusinessDomainSet domainSet) {
cerePlatformBusinessDAO.updateDomain(domainSet); cerePlatformBusinessDAO.updateDomain(domainSet);
} }
@Override
public void updateBusinessHnaPay(Long businessId, String hnaPayId, String bindCardAgrNo) {
cerePlatformBusinessDAO.updateBusinessHnaPay(businessId,hnaPayId,bindCardAgrNo);
}
@Override
public void updateBusinessHnapayState(Long businessId, Integer hnapayStatus) {
cerePlatformBusinessDAO.updateBusinessHnapayState(businessId,hnapayStatus);
}
} }

20
cereshop-admin/src/main/java/com/shop/cereshop/admin/service/bwxpay/CereBusinessWxpayService.java

@ -0,0 +1,20 @@
package com.shop.cereshop.admin.service.bwxpay;
import com.shop.cereshop.commons.domain.buyer.CereBuyerBank;
import com.shop.cereshop.commons.domain.bwxpay.CereBusinessWxpay;
import com.shop.cereshop.commons.exception.CoBusinessException;
/**
* 描述
*
* @author stevenhu
* @version 2025/02/20 14:19
*/
public interface CereBusinessWxpayService {
void save(CereBusinessWxpay record) throws CoBusinessException;
void update(CereBusinessWxpay businessWxpay) throws CoBusinessException;
CereBusinessWxpay getByBusinessId(Long businessId) throws CoBusinessException;
}

40
cereshop-admin/src/main/java/com/shop/cereshop/admin/service/bwxpay/impl/CereBusinessWxpayServiceImpl.java

@ -0,0 +1,40 @@
package com.shop.cereshop.admin.service.bwxpay.impl;
import com.shop.cereshop.admin.dao.bwxpay.CereBusinessWxpayDao;
import com.shop.cereshop.admin.service.bwxpay.CereBusinessWxpayService;
import com.shop.cereshop.commons.domain.bwxpay.CereBusinessWxpay;
import com.shop.cereshop.commons.exception.CoBusinessException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
/**
* 描述
*
* @author stevenhu
* @version 2025/02/20 14:21
*/
@Service
public class CereBusinessWxpayServiceImpl implements CereBusinessWxpayService {
@Autowired
private CereBusinessWxpayDao cereBusinessWxpayDao;
@Override
@Transactional(isolation= Isolation.DEFAULT,propagation= Propagation.REQUIRED,rollbackFor = {CoBusinessException.class, Exception.class})
public void save(CereBusinessWxpay record) throws CoBusinessException {
cereBusinessWxpayDao.insert(record);
}
@Override
public void update(CereBusinessWxpay businessWxpay) throws CoBusinessException {
cereBusinessWxpayDao.updateById(businessWxpay);
}
@Override
public CereBusinessWxpay getByBusinessId(Long businessId) throws CoBusinessException {
return cereBusinessWxpayDao.getByBusinessId(businessId);
}
}

11
cereshop-admin/src/main/resources/mybatis/mapper/business/CerePlatformBusinessDAO.xml

@ -318,7 +318,7 @@
SELECT a.business_id, a.business_code, a.business_name, a.business_brief, a.business_phone, a.charge_person_name, SELECT a.business_id, a.business_code, a.business_name, a.business_brief, a.business_phone, a.charge_person_name,
a.charge_person_phone, a.business_adress, a.effective_date, a.effective_year, a.contract_state, a.charge_person_phone, a.business_adress, a.effective_date, a.effective_year, a.contract_state,
a.authentication_state, a.check_state, a.`state`, a.authen_type, a.create_time, a.update_time, a.authentication_state, a.check_state, a.`state`, a.authen_type, a.create_time, a.update_time,
a.audit_live, a.audit_live_product,a.pc_domain,a.mobile_domain,
a.audit_live, a.audit_live_product,a.pc_domain,a.mobile_domain,a.hna_pay_id, a.bind_card_agr_no,a.hnapay_status,
b.business_user_id, c.password businessPassword b.business_user_id, c.password businessPassword
FROM cere_platform_business a FROM cere_platform_business a
INNER JOIN cere_business_user b ON a.business_id = b.business_id AND b.is_main_user = 1 INNER JOIN cere_business_user b ON a.business_id = b.business_id AND b.is_main_user = 1
@ -497,4 +497,13 @@
<update id="updateDomain" parameterType="com.shop.cereshop.admin.page.business.BusinessDomainSet"> <update id="updateDomain" parameterType="com.shop.cereshop.admin.page.business.BusinessDomainSet">
update cere_platform_business set pc_domain=#{pcDomain}, mobile_domain=#{mobileDomain} where business_id = #{businessId} update cere_platform_business set pc_domain=#{pcDomain}, mobile_domain=#{mobileDomain} where business_id = #{businessId}
</update> </update>
<update id="updateBusinessHnaPay">
update cere_platform_business set hna_pay_id=#{hnaPayId}, bind_card_agr_no=#{bindCardAgrNo} where business_id = #{businessId}
</update>
<update id="updateBusinessHnapayState">
update cere_platform_business set hnapay_status=#{hnapayStatus} where business_id = #{businessId}
</update>
</mapper> </mapper>

19
cereshop-admin/src/main/resources/mybatis/mapper/bwxpay/CereBusinessWxpayDAO.xml

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.shop.cereshop.admin.dao.bwxpay.CereBusinessWxpayDao">
<resultMap id="BaseResultMap" type="com.shop.cereshop.commons.domain.bwxpay.CereBusinessWxpay">
<id column="id" jdbcType="BIGINT" property="id"/>
<result column="business_id" jdbcType="BIGINT" property="businessId" />
<result column="app_id" jdbcType="VARCHAR" property="appId" />
<result column="app_app_id" jdbcType="VARCHAR" property="appAppId" />
<result column="mch_id" jdbcType="VARCHAR" property="mchId" />
<result column="cert_url" jdbcType="VARCHAR" property="certUrl" />
<result column="mch_key" jdbcType="VARCHAR" property="mchKey" />
<result column="secret" jdbcType="VARCHAR" property="secret" />
</resultMap>
<select id="getByBusinessId" parameterType="java.lang.Object" resultType="com.shop.cereshop.commons.domain.bwxpay.CereBusinessWxpay">
SELECT * FROM cere_business_wxpay where business_id = #{businessId}
</select>
</mapper>

21
cereshop-app/src/main/java/com/shop/cereshop/app/dao/bwxpay/CereBusinessWxpayDao.java

@ -0,0 +1,21 @@
package com.shop.cereshop.app.dao.bwxpay;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.shop.cereshop.commons.domain.bwxpay.CereBusinessWxpay;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
/**
* 描述
*
* @author stevenhu
* @version 2025/02/20 11:49
*/
@Mapper
public interface CereBusinessWxpayDao extends BaseMapper<CereBusinessWxpay> {
int insertSelective(CereBusinessWxpay record);
CereBusinessWxpay getByBusinessId(@Param("businessId") Long businessId);
}

21
cereshop-app/src/main/java/com/shop/cereshop/app/service/bwxpay/CereBusinessWxpayService.java

@ -0,0 +1,21 @@
package com.shop.cereshop.app.service.bwxpay;
import com.shop.cereshop.commons.domain.buyer.CereBuyerBank;
import com.shop.cereshop.commons.domain.buyer.CereBuyerUser;
import com.shop.cereshop.commons.domain.bwxpay.CereBusinessWxpay;
import com.shop.cereshop.commons.exception.CoBusinessException;
/**
* 描述
*
* @author stevenhu
* @version 2025/02/20 14:19
*/
public interface CereBusinessWxpayService {
void save(CereBusinessWxpay record) throws CoBusinessException;
void update(CereBusinessWxpay businessWxpay) throws CoBusinessException;
CereBuyerBank getByBusinessId(Long businessId) throws CoBusinessException;
}

42
cereshop-app/src/main/java/com/shop/cereshop/app/service/bwxpay/impl/CereBusinessWxpayServiceImpl.java

@ -0,0 +1,42 @@
package com.shop.cereshop.app.service.bwxpay.impl;
import com.shop.cereshop.app.dao.bwxpay.CereBusinessWxpayDao;
import com.shop.cereshop.app.service.bwxpay.CereBusinessWxpayService;
import com.shop.cereshop.commons.domain.buyer.CereBuyerBank;
import com.shop.cereshop.commons.domain.bwxpay.CereBusinessWxpay;
import com.shop.cereshop.commons.exception.CoBusinessException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
/**
* 描述
*
* @author stevenhu
* @version 2025/02/20 14:21
*/
@Service
public class CereBusinessWxpayServiceImpl implements CereBusinessWxpayService {
@Autowired
private CereBusinessWxpayDao cereBusinessWxpayDao;
@Override
@Transactional(isolation= Isolation.DEFAULT,propagation= Propagation.REQUIRED,rollbackFor = {CoBusinessException.class, Exception.class})
public void save(CereBusinessWxpay record) throws CoBusinessException {
cereBusinessWxpayDao.insert(record);
}
@Override
public void update(CereBusinessWxpay businessWxpay) throws CoBusinessException {
cereBusinessWxpayDao.updateById(businessWxpay);
}
@Override
public CereBuyerBank getByBusinessId(Long businessId) throws CoBusinessException {
cereBusinessWxpayDao.getByBusinessId(businessId);
return null;
}
}

54
cereshop-business/src/main/java/com/shop/cereshop/business/controller/HnaPayController.java

@ -5,16 +5,14 @@ import com.google.gson.Gson;
import com.shop.cereshop.business.pay.hnapay.HnaPayService; import com.shop.cereshop.business.pay.hnapay.HnaPayService;
import com.shop.cereshop.business.pay.xs.domain.XsCallBackRequestVo; import com.shop.cereshop.business.pay.xs.domain.XsCallBackRequestVo;
import com.shop.cereshop.business.service.after.CereOrderAfterService; import com.shop.cereshop.business.service.after.CereOrderAfterService;
import com.shop.cereshop.business.service.business.CerePlatformBusinessService;
import com.shop.cereshop.commons.constant.IntegerEnum; import com.shop.cereshop.commons.constant.IntegerEnum;
import com.shop.cereshop.commons.utils.SpringUtil; import com.shop.cereshop.commons.utils.SpringUtil;
import com.shop.cereshop.commons.utils.StringUtils; import com.shop.cereshop.commons.utils.StringUtils;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
/** /**
* 描述新生支付新账通回调处理 * 描述新生支付新账通回调处理
@ -31,6 +29,8 @@ public class HnaPayController {
@Autowired @Autowired
private HnaPayService hnaPayService; private HnaPayService hnaPayService;
@Autowired
private CerePlatformBusinessService businessService;
/** /**
* 退款通知回调 * 退款通知回调
@ -64,14 +64,56 @@ public class HnaPayController {
/** /**
* 企业开户审核结果通知
* @param businessId
* @param msg
* @return
* @throws Exception
*/
@PostMapping("/hnaPay/create/notify/{businessId}")
public String onCreateNotify(@PathVariable String businessId, @RequestParam(name = "msg") String msg) {
log.info("onCreateNotify:" + msg);
return "200";
}
/**
* 企业上送资料审核结果通知 * 企业上送资料审核结果通知
* @param businessId
* @param msg * @param msg
* @return * @return
* @throws Exception * @throws Exception
*/ */
@PostMapping("/hnaPay/examine/notify")
public String onExamineNotify(@RequestParam(name = "msg") String msg) {
@PostMapping("/hnaPay/examine/notify/{businessId}")
public String onExamineNotify(@PathVariable String businessId, @RequestParam(name = "msg") String msg) {
log.info("onExamineNotify:" + msg);
try {
XsCallBackRequestVo xsCallBackRequestVo = hnaPayService.parseCallBackRequestVo(msg);
log.info(new Gson().toJson(xsCallBackRequestVo));
String status = xsCallBackRequestVo.getContent().getString("status");
//2成功 3失败
if(StringUtils.equals(status, "1")){
JSONObject content = xsCallBackRequestVo.getContent();
String auditResult = content.getString("auditResult");
if (auditResult.equals("1")){
//审核通过
businessService.updateBusinessHnapayState(Long.valueOf(businessId), 2);
}else {
//不通过原因
String rejectReason = content.getString("rejectReason");
//不通过证件类型列表,
//列出审批不通过证件类型多个以英文逗号,分隔 1,2,4,7
//1身份证正面
//2身份证反面
//4营业执照
//7开户许可证
String certTypeList = content.getString("certTypeList");
}
}
} catch (Exception e) {
e.printStackTrace();
}
return "200"; return "200";
} }
} }

2
cereshop-business/src/main/java/com/shop/cereshop/business/dao/business/CerePlatformBusinessDAO.java

@ -51,4 +51,6 @@ public interface CerePlatformBusinessDAO extends BaseMapper<CerePlatformBusiness
List<CerePlatformBusiness> selectAll(); List<CerePlatformBusiness> selectAll();
List<CerePlatformBusiness> getByIdList(@Param("businessIdList") List<Long> businessIdList); List<CerePlatformBusiness> getByIdList(@Param("businessIdList") List<Long> businessIdList);
void updateBusinessHnapayState(@Param("businessId") Long businessId, @Param("hnapayStatus") Integer hnapayStatus);
} }

2
cereshop-business/src/main/java/com/shop/cereshop/business/service/business/CerePlatformBusinessService.java

@ -51,4 +51,6 @@ public interface CerePlatformBusinessService {
List<HotProductDTO> selectHotProductForExport(IndexParam param); List<HotProductDTO> selectHotProductForExport(IndexParam param);
List<CerePlatformBusiness> getByIdList(List<Long> businessIdList); List<CerePlatformBusiness> getByIdList(List<Long> businessIdList);
void updateBusinessHnapayState(Long businessId, Integer hnapayStatus);
} }

4
cereshop-business/src/main/java/com/shop/cereshop/business/service/business/impl/CerePlatformBusinessServiceImpl.java

@ -417,4 +417,8 @@ public class CerePlatformBusinessServiceImpl implements CerePlatformBusinessServ
return cerePlatformBusinessDAO.getByIdList(businessIdList); return cerePlatformBusinessDAO.getByIdList(businessIdList);
} }
@Override
public void updateBusinessHnapayState(Long businessId, Integer hnapayStatus) {
cerePlatformBusinessDAO.updateBusinessHnapayState(businessId,hnapayStatus);
}
} }

4
cereshop-business/src/main/resources/mybatis/mapper/business/CerePlatformBusinessDAO.xml

@ -392,4 +392,8 @@
</foreach> </foreach>
) )
</select> </select>
<update id="updateBusinessHnapayState">
update cere_platform_business set hnapay_status=#{hnapayStatus} where business_id = #{businessId}
</update>
</mapper> </mapper>

5
cereshop-commons/src/main/java/com/shop/cereshop/commons/config/HnaPayConfig.java

@ -59,7 +59,10 @@ public class HnaPayConfig {
// 退款回调地址 // 退款回调地址
public static String REFUND_NOTICE_URL = "http://36.138.125.206/ceres-business-api/extend/hnaPay/refund/notify"; public static String REFUND_NOTICE_URL = "http://36.138.125.206/ceres-business-api/extend/hnaPay/refund/notify";
//企业上送资料审核结果通知
//企业开户审核结果通知
public static String CREATE_NOTICE_URL = "http://36.138.125.206/ceres-business-api/extend/hnaPay/create/notify";
//企业上送资料审核结果通知(该异步通知接收地址在商户后台-安全中心设置)
public static String EXAMINE_NOTICE_URL = "http://36.138.125.206/ceres-business-api/extend/hnaPay/examine/notify"; public static String EXAMINE_NOTICE_URL = "http://36.138.125.206/ceres-business-api/extend/hnaPay/examine/notify";
public static String GETMONEY_NOTICE_URL = "http://36.138.125.206/ceres-business-api/extend/hnaPay/getmoney/notify"; public static String GETMONEY_NOTICE_URL = "http://36.138.125.206/ceres-business-api/extend/hnaPay/getmoney/notify";

17
cereshop-commons/src/main/java/com/shop/cereshop/commons/domain/business/CerePlatformBusiness.java

@ -203,6 +203,23 @@ public class CerePlatformBusiness implements Serializable {
@ApiModelProperty(value = "移动端商城域名") @ApiModelProperty(value = "移动端商城域名")
private String mobileDomain; private String mobileDomain;
/**
* 新账通支付商户Id/分账方id
*/
@ApiModelProperty(value = "新账通支付商户Id/分账方id")
private String hnaPayId;
/**
* 新账通支付绑卡协议号
*/
@ApiModelProperty(value = "新账通支付绑卡协议号")
private String bindCardAgrNo;
/**
* 新账通开户审核状态0-待上传 1-审核中 2-审核通过 3-审核拒绝
*/
@ApiModelProperty(value = "新账通开户审核状态")
private String hnapayStatus;
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;

55
cereshop-commons/src/main/java/com/shop/cereshop/commons/domain/bwxpay/CereBusinessWxpay.java

@ -0,0 +1,55 @@
package com.shop.cereshop.commons.domain.bwxpay;
import lombok.Data;
import java.io.Serializable;
/**
* 描述
*
* @author stevenhu
* @version 2025/02/20 11:12
*/
@Data
public class CereBusinessWxpay implements Serializable {
/**
* 主键Id
*/
private Long id;
/**
* 商家id
*/
private Long businessId;
/**
* 支付小程序appid
*/
private String appId;
/**
* 支付APP端的appid
*/
private String AppAppId;
/**
* 商户号
*/
private String mchId;
/**
* 证书路径
*/
private String certUrl;
/**
* 商户秘钥
*/
private String mchKey;
/**
* 私钥
*/
private String secret;
}

17
doc/3.0/update.sql

@ -303,3 +303,20 @@ ALTER TABLE `cere_platform_membership`
-- 会员等级表增加商家表关联Id -- 会员等级表增加商家表关联Id
ALTER TABLE `cere_platform_member_level` ALTER TABLE `cere_platform_member_level`
ADD COLUMN `business_id` bigint(20) DEFAULT 0 COMMENT '商家Id'; ADD COLUMN `business_id` bigint(20) DEFAULT 0 COMMENT '商家Id';
CREATE TABLE `cere_business_wxpay` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
`business_id` bigint(20) NULL DEFAULT 0 COMMENT '商家Id',
`app_id` varchar(100) NULL COMMENT '支付小程序appid',
`app_app_id` varchar(100) NULL COMMENT '支付APP端的appid',
`mch_id` varchar(100) NULL COMMENT '商户号',
`cert_url` varchar(256) NULL COMMENT '证书路径',
`mch_key` text NULL COMMENT '商户秘钥',
`secret` text NULL COMMENT '私钥',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '商家微信支付配置信息' ROW_FORMAT = DYNAMIC;
ALTER TABLE cere_platform_business ADD hna_pay_id varchar(256) DEFAULT '' COMMENT '新账通支付商户Id/分账方id';
ALTER TABLE cere_platform_business ADD bind_card_agr_no varchar(30) DEFAULT '' COMMENT '新账通支付绑卡协议号';
ALTER TABLE cere_platform_business ADD COLUMN hnapay_status tinyint(1) UNSIGNED NULL DEFAULT 0 COMMENT '0-待上传 1-审核中 2-审核通过 3-审核拒绝' AFTER bind_card_agr_no;
Loading…
Cancel
Save