调整品牌添加商城开启管理;调整微信支付包存放位置;
This commit is contained in:
parent
f70c265487
commit
299bc55db7
@ -6,11 +6,16 @@ import com.cpop.common.enums.ErrorCodeEnum;
|
|||||||
import io.jsonwebtoken.JwtException;
|
import io.jsonwebtoken.JwtException;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.core.MethodParameter;
|
||||||
|
import org.springframework.http.MediaType;
|
||||||
|
import org.springframework.http.server.ServerHttpRequest;
|
||||||
|
import org.springframework.http.server.ServerHttpResponse;
|
||||||
import org.springframework.security.access.AccessDeniedException;
|
import org.springframework.security.access.AccessDeniedException;
|
||||||
import org.springframework.validation.BindException;
|
import org.springframework.validation.BindException;
|
||||||
import org.springframework.web.bind.MethodArgumentNotValidException;
|
import org.springframework.web.bind.MethodArgumentNotValidException;
|
||||||
import org.springframework.web.bind.annotation.ExceptionHandler;
|
import org.springframework.web.bind.annotation.ExceptionHandler;
|
||||||
import org.springframework.web.bind.annotation.RestControllerAdvice;
|
import org.springframework.web.bind.annotation.RestControllerAdvice;
|
||||||
|
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
@ -24,7 +29,6 @@ import java.util.Objects;
|
|||||||
public class GlobalExceptionHandler {
|
public class GlobalExceptionHandler {
|
||||||
|
|
||||||
private static final Logger log = LoggerFactory.getLogger(GlobalExceptionHandler.class);
|
private static final Logger log = LoggerFactory.getLogger(GlobalExceptionHandler.class);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 业务异常
|
* 业务异常
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -19,7 +19,7 @@ public class StringToArraySerializer extends JsonSerializer<String> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void serialize(String str, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
|
public void serialize(String str, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
|
||||||
if (StringUtils.isNotBlank(str)) {
|
if (null != str) {
|
||||||
String[] split = str.split(",");
|
String[] split = str.split(",");
|
||||||
jsonGenerator.writeArray(split, 0, split.length);
|
jsonGenerator.writeArray(split, 0, split.length);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -5,6 +5,7 @@ import com.cpop.core.base.entity.LoginUser;
|
|||||||
import com.cpop.core.base.entity.loginInfo.MiniUserLoginInfo;
|
import com.cpop.core.base.entity.loginInfo.MiniUserLoginInfo;
|
||||||
import com.cpop.core.base.enums.SourceType;
|
import com.cpop.core.base.enums.SourceType;
|
||||||
import com.cpop.core.base.enums.UserType;
|
import com.cpop.core.base.enums.UserType;
|
||||||
|
import com.cpop.core.base.exception.CpopAuthenticationException;
|
||||||
import com.cpop.core.base.exception.ServiceException;
|
import com.cpop.core.base.exception.ServiceException;
|
||||||
import com.cpop.core.base.table.SysUser;
|
import com.cpop.core.base.table.SysUser;
|
||||||
import com.mybatisflex.core.row.Db;
|
import com.mybatisflex.core.row.Db;
|
||||||
@ -87,6 +88,19 @@ public class MiniLoginStrategy implements LoginStrategy {
|
|||||||
* @return: void
|
* @return: void
|
||||||
*/
|
*/
|
||||||
private void changeJamboxUser(MiniUserLoginInfo loginInfo, Map<String, Object> credentials, SourceType sourceType) {
|
private void changeJamboxUser(MiniUserLoginInfo loginInfo, Map<String, Object> credentials, SourceType sourceType) {
|
||||||
|
//获取品牌表
|
||||||
|
Row brand = DbChain.table("cp_sys_brand")
|
||||||
|
.select("csb.id", "csb.is_open_sharing")
|
||||||
|
.from("cp_sys_brand").as("csb")
|
||||||
|
.leftJoin("cp_j_brand_extend").as("cjbe").on("cjbe.brand_id = csb.id")
|
||||||
|
.and("cjbe.brand_cloud_id = ?", credentials.get("brandId"))
|
||||||
|
.one();
|
||||||
|
if (brand == null) {
|
||||||
|
throw new CpopAuthenticationException("用户登陆失败,果酱品牌暂未录入系统");
|
||||||
|
}
|
||||||
|
if (!brand.getBoolean("isOpenSharing")){
|
||||||
|
throw new CpopAuthenticationException("用户登陆失败,当前品牌暂未开通分账");
|
||||||
|
}
|
||||||
//构建用户信息
|
//构建用户信息
|
||||||
Row row = DbChain.table("cp_mini_user")
|
Row row = DbChain.table("cp_mini_user")
|
||||||
.select("cmu.id","cmu.open_id","cmu.app_id","cmu.user_id","cmu.brand_id","cmu.nick_name","cmu.avatar","cmu.source_type")
|
.select("cmu.id","cmu.open_id","cmu.app_id","cmu.user_id","cmu.brand_id","cmu.nick_name","cmu.avatar","cmu.source_type")
|
||||||
@ -101,16 +115,6 @@ public class MiniLoginStrategy implements LoginStrategy {
|
|||||||
.and("cmu.is_delete = 0")
|
.and("cmu.is_delete = 0")
|
||||||
.one();
|
.one();
|
||||||
if (row == null) {
|
if (row == null) {
|
||||||
//获取品牌表
|
|
||||||
Row brand = DbChain.table("cp_sys_brand")
|
|
||||||
.select("csb.id")
|
|
||||||
.from("cp_sys_brand").as("csb")
|
|
||||||
.leftJoin("cp_j_brand_extend").as("cjbe").on("cjbe.brand_id = csb.id")
|
|
||||||
.and("cjbe.brand_cloud_id = ?", credentials.get("brandId"))
|
|
||||||
.one();
|
|
||||||
if (brand == null) {
|
|
||||||
throw new ServiceException("用户登陆失败,果酱品牌暂未录入系统");
|
|
||||||
}
|
|
||||||
//保存小程序用户信息
|
//保存小程序用户信息
|
||||||
LocalDateTime now = LocalDateTime.now();
|
LocalDateTime now = LocalDateTime.now();
|
||||||
Row miniUser = Row.ofKey(RowKey.SNOW_FLAKE_ID);
|
Row miniUser = Row.ofKey(RowKey.SNOW_FLAKE_ID);
|
||||||
|
|||||||
@ -18,6 +18,11 @@
|
|||||||
<groupId>com.cpop</groupId>
|
<groupId>com.cpop</groupId>
|
||||||
<artifactId>Cpop-Core</artifactId>
|
<artifactId>Cpop-Core</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<!--微信支付-->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.github.binarywang</groupId>
|
||||||
|
<artifactId>weixin-java-pay</artifactId>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
|
|||||||
@ -115,11 +115,11 @@ mall:
|
|||||||
wx:
|
wx:
|
||||||
pay:
|
pay:
|
||||||
# p12证书的位置,可以指定绝对路径,也可以指定类路径(以classpath:开头)
|
# p12证书的位置,可以指定绝对路径,也可以指定类路径(以classpath:开头)
|
||||||
keyPath: E:/Cpop/Cpop-Union/Cpop-Mall/Cpop-Mall-Web/src/main/resources/static/keyPair/wxPay_cert.p12
|
keyPath: E:/Cpop/Cpop-Union/Cpop-Core/src/main/resources/static/keyPair/wxPay_cert.p12
|
||||||
# 私钥证书
|
# 私钥证书
|
||||||
privateKeyPath: E:/Cpop/Cpop-Union/Cpop-Mall/Cpop-Mall-Web/src/main/resources/static/keyPair/wxPay_key.pem
|
privateKeyPath: E:/Cpop/Cpop-Union/Cpop-Core/src/main/resources/static/keyPair/wxPay_key.pem
|
||||||
# 私钥文件
|
# 私钥文件
|
||||||
privateCertPath: E:/Cpop/Cpop-Union/Cpop-Mall/Cpop-Mall-Web/src/main/resources/static/keyPair/wxPay_cert.pem
|
privateCertPath: E:/Cpop/Cpop-Union/Cpop-Core/src/main/resources/static/keyPair/wxPay_cert.pem
|
||||||
#支付通知地址
|
#支付通知地址
|
||||||
notifyUrl: https://frp-oak.top:11899/Cpop-Mall/wxPay/callback/notify/order
|
notifyUrl: https://frp-oak.top:11899/Cpop-Mall/wxPay/callback/notify/order
|
||||||
#退款通知地址
|
#退款通知地址
|
||||||
|
|||||||
@ -139,3 +139,4 @@ wx:
|
|||||||
apiV3Key: JamBox20230919174000000000000002
|
apiV3Key: JamBox20230919174000000000000002
|
||||||
#分账服务商账号
|
#分账服务商账号
|
||||||
sharingAccount: 1618884922
|
sharingAccount: 1618884922
|
||||||
|
sharingAccountName: 果酱盒子
|
||||||
|
|||||||
@ -27,11 +27,6 @@
|
|||||||
<groupId>com.cpop</groupId>
|
<groupId>com.cpop</groupId>
|
||||||
<artifactId>Cpop-Jambox</artifactId>
|
<artifactId>Cpop-Jambox</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<!--微信支付-->
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.github.binarywang</groupId>
|
|
||||||
<artifactId>weixin-java-pay</artifactId>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
|
|||||||
@ -304,7 +304,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|||||||
//查询是否是服务商系品牌
|
//查询是否是服务商系品牌
|
||||||
String brandId = loginUserInfo.getString("brandId");
|
String brandId = loginUserInfo.getString("brandId");
|
||||||
Brand brand = SpringUtils.getBean(BrandService.class).getById(brandId);
|
Brand brand = SpringUtils.getBean(BrandService.class).getById(brandId);
|
||||||
if (StringUtils.isBlank(brand.getWxAppId()) || !StringUtils.equals(brand.getWxAppId(), wxPayService.getConfig().getAppId())) {
|
//需要分账
|
||||||
|
if (order.getTotalAmount().scaleByPowerOfTen(2).intValue() >= 10) {
|
||||||
//需要分账
|
//需要分账
|
||||||
orderRequest.setProfitSharing("Y");
|
orderRequest.setProfitSharing("Y");
|
||||||
}
|
}
|
||||||
@ -529,11 +530,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|||||||
Order order = this.getById(orderId);
|
Order order = this.getById(orderId);
|
||||||
//获取订单品牌信息
|
//获取订单品牌信息
|
||||||
Brand brand = SpringUtils.getBean(BrandService.class).getById(order.getBrandId());
|
Brand brand = SpringUtils.getBean(BrandService.class).getById(order.getBrandId());
|
||||||
if (StringUtils.isBlank(brand.getWxAppId()) || !StringUtils.equals(brand.getWxAppId(), wxPayService.getConfig().getAppId())) {
|
//需要分账
|
||||||
//需要分账
|
if (notifyResult.getTotalFee() >= 10) {
|
||||||
if (notifyResult.getTotalFee() >= 10) {
|
wxPayAsyncTask.asyncWxPayProfitSharing(orderId, notifyResult, wxPayService);
|
||||||
wxPayAsyncTask.asyncWxPayProfitSharing(orderId, notifyResult, wxPayService);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
//异步更新
|
//异步更新
|
||||||
SpringUtils.getBean(ProductRecordSyncStockTask.class).asyncUpdateRecords(orderNumMap);
|
SpringUtils.getBean(ProductRecordSyncStockTask.class).asyncUpdateRecords(orderNumMap);
|
||||||
@ -639,7 +638,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|||||||
//查询是否是服务商系品牌
|
//查询是否是服务商系品牌
|
||||||
String brandId = loginUserInfo.getString("brandId");
|
String brandId = loginUserInfo.getString("brandId");
|
||||||
Brand brand = SpringUtils.getBean(BrandService.class).getById(brandId);
|
Brand brand = SpringUtils.getBean(BrandService.class).getById(brandId);
|
||||||
if (StringUtils.isBlank(brand.getWxAppId()) || !StringUtils.equals(brand.getWxAppId(), wxPayService.getConfig().getAppId())) {
|
//需要分账
|
||||||
|
if (order.getTotalAmount().scaleByPowerOfTen(2).intValue() >= 10) {
|
||||||
//需要分账
|
//需要分账
|
||||||
orderRequest.setProfitSharing("Y");
|
orderRequest.setProfitSharing("Y");
|
||||||
}
|
}
|
||||||
@ -653,7 +653,6 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|||||||
//元转分
|
//元转分
|
||||||
.setTotalFee(order.getTotalAmount().scaleByPowerOfTen(2).intValue())
|
.setTotalFee(order.getTotalAmount().scaleByPowerOfTen(2).intValue())
|
||||||
.setTradeType("JSAPI");
|
.setTradeType("JSAPI");
|
||||||
|
|
||||||
return wxPayService.createOrder(orderRequest);
|
return wxPayService.createOrder(orderRequest);
|
||||||
} else {
|
} else {
|
||||||
return pointPay(recordNumIsEnough, order, loginUserInfo);
|
return pointPay(recordNumIsEnough, order, loginUserInfo);
|
||||||
|
|||||||
@ -45,14 +45,4 @@ public class WxPayConfiguration {
|
|||||||
return wxPayService;
|
return wxPayService;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @descriptions 读取微信支付配置文件
|
|
||||||
* @author DB
|
|
||||||
* @date 2023/11/01 17:27
|
|
||||||
* @return: com.cpop.mall.framework.config.wxPay.WxPayProperties
|
|
||||||
*/
|
|
||||||
public WxPayProperties getProperties() {
|
|
||||||
return properties;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -66,6 +66,11 @@ public class WxPayProperties {
|
|||||||
*/
|
*/
|
||||||
private String sharingAccount;
|
private String sharingAccount;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分账账号名
|
||||||
|
*/
|
||||||
|
private String sharingAccountName;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 分账通知
|
* 分账通知
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -83,3 +83,13 @@ knife4j:
|
|||||||
api-rule: package
|
api-rule: package
|
||||||
api-rule-resources:
|
api-rule-resources:
|
||||||
- com.cpop.oam
|
- com.cpop.oam
|
||||||
|
|
||||||
|
#微信支付
|
||||||
|
wx:
|
||||||
|
pay:
|
||||||
|
# p12证书的位置,可以指定绝对路径,也可以指定类路径(以classpath:开头)
|
||||||
|
keyPath: E:/Cpop/Cpop-Union/Cpop-Core/src/main/resources/static/keyPair/wxPay_cert.p12
|
||||||
|
# 私钥证书
|
||||||
|
privateKeyPath: E:/Cpop/Cpop-Union/Cpop-Core/src/main/resources/static/keyPair/wxPay_key.pem
|
||||||
|
# 私钥文件
|
||||||
|
privateCertPath: E:/Cpop/Cpop-Union/Cpop-Core/src/main/resources/static/keyPair/wxPay_cert.pem
|
||||||
@ -63,3 +63,13 @@ mybatis-flex:
|
|||||||
url: jdbc:mysql://sh-cynosdbmysql-grp-fggo83js.sql.tencentcdb.com:20965/jambox_association?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true
|
url: jdbc:mysql://sh-cynosdbmysql-grp-fggo83js.sql.tencentcdb.com:20965/jambox_association?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true
|
||||||
username: root
|
username: root
|
||||||
password: Customer0401
|
password: Customer0401
|
||||||
|
|
||||||
|
#微信支付
|
||||||
|
wx:
|
||||||
|
pay:
|
||||||
|
# p12证书的位置,可以指定绝对路径,也可以指定类路径(以classpath:开头)
|
||||||
|
keyPath: /root/cpop-union/cpop-oam/script/secretKey/wxPay_cert.p12
|
||||||
|
# 私钥证书
|
||||||
|
privateKeyPath: /root/cpop-union/cpop-oam/script/secretKey/wxPay_key.pem
|
||||||
|
# 私钥文件
|
||||||
|
privateCertPath: /root/cpop-union/cpop-oam/script/secretKey/wxPay_cert.pem
|
||||||
@ -84,3 +84,13 @@ knife4j:
|
|||||||
api-rule: package
|
api-rule: package
|
||||||
api-rule-resources:
|
api-rule-resources:
|
||||||
- com.cpop.oam
|
- com.cpop.oam
|
||||||
|
|
||||||
|
#微信支付
|
||||||
|
wx:
|
||||||
|
pay:
|
||||||
|
# p12证书的位置,可以指定绝对路径,也可以指定类路径(以classpath:开头)
|
||||||
|
keyPath: /root/cpop-union/cpop-oam/script/secretKey/wxPay_cert.p12
|
||||||
|
# 私钥证书
|
||||||
|
privateKeyPath: /root/cpop-union/cpop-oam/script/secretKey/wxPay_key.pem
|
||||||
|
# 私钥文件
|
||||||
|
privateCertPath: /root/cpop-union/cpop-oam/script/secretKey/wxPay_cert.pem
|
||||||
@ -148,3 +148,15 @@ wx:
|
|||||||
componentToken: jambox
|
componentToken: jambox
|
||||||
componentAesKey: 1a3NBxmCFwkCJvfoQ7WhJHB6iX3qHPsc9JbaDznE1i0
|
componentAesKey: 1a3NBxmCFwkCJvfoQ7WhJHB6iX3qHPsc9JbaDznE1i0
|
||||||
redirectUri: https://empower.oamapi.cpopsz.com/test/openPlatform/thirdPartyPlatform/redirectUrl
|
redirectUri: https://empower.oamapi.cpopsz.com/test/openPlatform/thirdPartyPlatform/redirectUrl
|
||||||
|
#微信支付
|
||||||
|
pay:
|
||||||
|
#微信公众号或者小程序等的appid
|
||||||
|
appId: wx20853d18c455e874
|
||||||
|
#微信支付商户号
|
||||||
|
mchId: 1618884922
|
||||||
|
#微信支付商户密钥
|
||||||
|
mchKey: JamBox20230919174000000000000002
|
||||||
|
apiV3Key: JamBox20230919174000000000000002
|
||||||
|
#分账服务商账号
|
||||||
|
sharingAccount: 1618884922
|
||||||
|
sharingAccountName: 果酱盒子
|
||||||
@ -0,0 +1,95 @@
|
|||||||
|
package com.cpop.oam.business.controller;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.cpop.common.utils.StringUtils;
|
||||||
|
import com.cpop.core.base.R;
|
||||||
|
import com.cpop.core.base.exception.ServiceException;
|
||||||
|
import com.cpop.oam.framework.config.wxPay.WxPayConfiguration;
|
||||||
|
import com.cpop.system.business.bo.ChangeWechatSharingBo;
|
||||||
|
import com.cpop.system.business.entity.Brand;
|
||||||
|
import com.cpop.system.business.service.BrandService;
|
||||||
|
import com.github.binarywang.wxpay.bean.profitsharing.ProfitSharingReceiverRequest;
|
||||||
|
import com.github.binarywang.wxpay.config.WxPayConfig;
|
||||||
|
import com.github.binarywang.wxpay.exception.WxPayException;
|
||||||
|
import com.github.binarywang.wxpay.service.WxPayService;
|
||||||
|
import io.swagger.annotations.Api;
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import io.swagger.annotations.ApiParam;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import static com.cpop.system.business.entity.table.BrandTableDef.BRAND;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author DB
|
||||||
|
* @createTime 2023/11/15 11:21
|
||||||
|
* @description
|
||||||
|
*/
|
||||||
|
@RestController
|
||||||
|
@Api(tags = "微信支付模块")
|
||||||
|
@RequestMapping("/wxPay")
|
||||||
|
public class WxPayController {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private WxPayConfiguration wxPayConfiguration;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private WxPayService wxPayService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private BrandService brandService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @descriptions 开通微信分账
|
||||||
|
* @author DB
|
||||||
|
* @date 2023/11/15 11:06
|
||||||
|
* @return: com.cpop.core.base.R<java.lang.Void>
|
||||||
|
*/
|
||||||
|
@PreAuthorize("@aps.hasPermission('brandStore:brand:update')")
|
||||||
|
@ApiOperation("开通品牌商城")
|
||||||
|
@PutMapping("/changeBrandMall")
|
||||||
|
public R<Void> changeWechatSharing(@RequestBody @Validated ChangeWechatSharingBo bo) {
|
||||||
|
//获取品牌下属商户
|
||||||
|
Brand brand = brandService.getById(bo.getBrandId());
|
||||||
|
if (StringUtils.isBlank(brand.getWxMchId())) {
|
||||||
|
throw new ServiceException("当前品牌暂未绑定系统,请联系相关人员绑定");
|
||||||
|
}
|
||||||
|
//固定商户信息
|
||||||
|
Map<String, Object> mapReceiver = new HashMap<>(4);
|
||||||
|
mapReceiver.put("type", "MERCHANT_ID");
|
||||||
|
mapReceiver.put("account", wxPayConfiguration.getProperties().getSharingAccount());
|
||||||
|
//添加分账接收方
|
||||||
|
ProfitSharingReceiverRequest profitSharingReceiver = new ProfitSharingReceiverRequest();
|
||||||
|
//开启
|
||||||
|
if (bo.getIsOpenMall()) {
|
||||||
|
mapReceiver.put("relation_type", "SERVICE_PROVIDER");
|
||||||
|
mapReceiver.put("name", wxPayConfiguration.getProperties().getSharingAccountName());
|
||||||
|
profitSharingReceiver.setReceiver(JSONObject.toJSONString(mapReceiver));
|
||||||
|
WxPayConfig config = wxPayService.getConfig();
|
||||||
|
|
||||||
|
config.setSubMchId(brand.getWxMchId());
|
||||||
|
try {
|
||||||
|
wxPayService.getProfitSharingService().addReceiver(profitSharingReceiver);
|
||||||
|
} catch (WxPayException e) {
|
||||||
|
throw new ServiceException(e.getMessage());
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
//关闭
|
||||||
|
profitSharingReceiver.setReceiver(JSONObject.toJSONString(mapReceiver));
|
||||||
|
WxPayConfig config = wxPayService.getConfig();
|
||||||
|
config.setSubMchId(brand.getWxMchId());
|
||||||
|
try {
|
||||||
|
wxPayService.getProfitSharingService().removeReceiver(profitSharingReceiver);
|
||||||
|
} catch (WxPayException e) {
|
||||||
|
throw new ServiceException(e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
brandService.updateChain().set(BRAND.IS_OPEN_MALL, bo.getIsOpenMall()).where(BRAND.ID.eq(bo.getBrandId())).update();
|
||||||
|
return R.ok();
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,51 @@
|
|||||||
|
package com.cpop.oam.framework.config.wxPay;
|
||||||
|
|
||||||
|
import com.cpop.common.utils.StringUtils;
|
||||||
|
import com.github.binarywang.wxpay.config.WxPayConfig;
|
||||||
|
import com.github.binarywang.wxpay.service.WxPayService;
|
||||||
|
import com.github.binarywang.wxpay.service.impl.WxPayServiceImpl;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||||
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||||
|
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author DB
|
||||||
|
* @Description:
|
||||||
|
* @create 2023-10-26 22:38
|
||||||
|
*/
|
||||||
|
@Configuration
|
||||||
|
@ConditionalOnClass(WxPayService.class)
|
||||||
|
@EnableConfigurationProperties(WxPayProperties.class)
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class WxPayConfiguration {
|
||||||
|
private WxPayProperties properties;
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
@ConditionalOnMissingBean
|
||||||
|
public WxPayService wxService() {
|
||||||
|
WxPayConfig payConfig = new WxPayConfig();
|
||||||
|
payConfig.setAppId(StringUtils.trimToNull(this.properties.getAppId()));
|
||||||
|
payConfig.setMchId(StringUtils.trimToNull(this.properties.getMchId()));
|
||||||
|
payConfig.setMchKey(StringUtils.trimToNull(this.properties.getMchKey()));
|
||||||
|
//服务商模式微信支付
|
||||||
|
payConfig.setApiV3Key(this.properties.getApiV3Key());
|
||||||
|
payConfig.setCertSerialNo(this.properties.getCertSerialNo());
|
||||||
|
payConfig.setKeyPath(this.properties.getKeyPath());
|
||||||
|
payConfig.setPrivateKeyPath(this.properties.getPrivateKeyPath());
|
||||||
|
payConfig.setPrivateCertPath(this.properties.getPrivateCertPath());
|
||||||
|
//通知地址
|
||||||
|
payConfig.setNotifyUrl(this.properties.getNotifyUrl());
|
||||||
|
// 可以指定是否使用沙箱环境
|
||||||
|
payConfig.setUseSandboxEnv(false);
|
||||||
|
WxPayService wxPayService = new WxPayServiceImpl();
|
||||||
|
wxPayService.setConfig(payConfig);
|
||||||
|
return wxPayService;
|
||||||
|
}
|
||||||
|
|
||||||
|
public WxPayProperties getProperties() {
|
||||||
|
return properties;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,78 @@
|
|||||||
|
package com.cpop.oam.framework.config.wxPay;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author DB
|
||||||
|
* @Description:
|
||||||
|
* @create 2023-10-26 22:39
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@ConfigurationProperties(prefix = "wx.pay")
|
||||||
|
public class WxPayProperties {
|
||||||
|
/**
|
||||||
|
* 设置微信公众号或者小程序等的appid
|
||||||
|
*/
|
||||||
|
private String appId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 微信支付商户号
|
||||||
|
*/
|
||||||
|
private String mchId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 微信支付商户密钥
|
||||||
|
*/
|
||||||
|
private String mchKey;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* apiclient_cert.p12文件的绝对路径,或者如果放在项目中,请以classpath:开头指定
|
||||||
|
*/
|
||||||
|
private String keyPath;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* apiV3 秘钥值
|
||||||
|
*/
|
||||||
|
private String apiV3Key;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* apiclient_key.pem证书文件的绝对路径或者以classpath:开头的类路径
|
||||||
|
*/
|
||||||
|
private String privateKeyPath;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* apiclient_cert.pem证书文件的绝对路径或者以classpath:开头的类路径
|
||||||
|
*/
|
||||||
|
private String privateCertPath;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* apiV3 证书序列号值
|
||||||
|
*/
|
||||||
|
private String certSerialNo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 支付通知地址
|
||||||
|
*/
|
||||||
|
private String notifyUrl;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 退款通知
|
||||||
|
*/
|
||||||
|
private String notifyRefund;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分账账号
|
||||||
|
*/
|
||||||
|
private String sharingAccount;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分账账号名
|
||||||
|
*/
|
||||||
|
private String sharingAccountName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分账通知
|
||||||
|
*/
|
||||||
|
private String notifySharing;
|
||||||
|
}
|
||||||
@ -33,28 +33,9 @@ public class BrandBo {
|
|||||||
/**
|
/**
|
||||||
* 微信商户号
|
* 微信商户号
|
||||||
*/
|
*/
|
||||||
@NotBlank(message = "商户号不能为空")
|
@ApiModelProperty(value = "微信商户号")
|
||||||
@ApiModelProperty(value = "微信商户号",required = true)
|
|
||||||
private String wxMchId;
|
private String wxMchId;
|
||||||
|
|
||||||
/**
|
|
||||||
* 微信Appid
|
|
||||||
*/
|
|
||||||
@ApiModelProperty("微信Appid")
|
|
||||||
private String wxAppId;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 微信支付密钥
|
|
||||||
*/
|
|
||||||
@ApiModelProperty("微信支付密钥")
|
|
||||||
private String wxMchKey;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 微信支付keypath
|
|
||||||
*/
|
|
||||||
@ApiModelProperty("微信支付keypath")
|
|
||||||
private String wxKeyPath;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 背景图
|
* 背景图
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -0,0 +1,33 @@
|
|||||||
|
package com.cpop.system.business.bo;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotBlank;
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author DB
|
||||||
|
* @createTime 2023/11/15 11:52
|
||||||
|
* @description
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@ApiModel(value = "微信分账相关参数")
|
||||||
|
public class ChangeWechatSharingBo implements Serializable {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 品牌id
|
||||||
|
*/
|
||||||
|
@NotBlank(message = "不能为空")
|
||||||
|
@ApiModelProperty(value = "品牌id",required = true)
|
||||||
|
private String brandId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否开启分账
|
||||||
|
*/
|
||||||
|
@NotNull(message = "是否开启商城不能为空")
|
||||||
|
@ApiModelProperty(value = "是否开启商城",required = true)
|
||||||
|
private Boolean isOpenMall;
|
||||||
|
}
|
||||||
@ -40,26 +40,11 @@ public class Brand extends BaseEntity implements Serializable {
|
|||||||
*/
|
*/
|
||||||
private String brandName;
|
private String brandName;
|
||||||
|
|
||||||
/**
|
|
||||||
* 微信appid
|
|
||||||
*/
|
|
||||||
private String wxAppId;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 微信商户号
|
* 微信商户号
|
||||||
*/
|
*/
|
||||||
private String wxMchId;
|
private String wxMchId;
|
||||||
|
|
||||||
/**
|
|
||||||
* 微信支付密钥
|
|
||||||
*/
|
|
||||||
private String wxMchKey;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 微信支付keypath
|
|
||||||
*/
|
|
||||||
private String wxKeyPath;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 数据来源
|
* 数据来源
|
||||||
*/
|
*/
|
||||||
@ -70,6 +55,11 @@ public class Brand extends BaseEntity implements Serializable {
|
|||||||
*/
|
*/
|
||||||
private String backgroundUrl;
|
private String backgroundUrl;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否开通商城
|
||||||
|
*/
|
||||||
|
private Boolean isOpenMall;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 逻辑删除(0否1是)
|
* 逻辑删除(0否1是)
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -26,7 +26,7 @@ public interface BrandService extends IService<Brand> {
|
|||||||
* @descriptions 查询品牌分页列表
|
* @descriptions 查询品牌分页列表
|
||||||
* @author DB
|
* @author DB
|
||||||
* @date 2023/10/25 17:32
|
* @date 2023/10/25 17:32
|
||||||
* @param bo 请求参数
|
* @param brandName 请求参数
|
||||||
* @return: com.mybatisflex.core.paginate.Page<com.cpop.system.business.vo.BrandPageVo>
|
* @return: com.mybatisflex.core.paginate.Page<com.cpop.system.business.vo.BrandPageVo>
|
||||||
*/
|
*/
|
||||||
Page<BrandPageVo> getBrandPage(String brandName);
|
Page<BrandPageVo> getBrandPage(String brandName);
|
||||||
@ -39,4 +39,5 @@ public interface BrandService extends IService<Brand> {
|
|||||||
* @return: void
|
* @return: void
|
||||||
*/
|
*/
|
||||||
void removeBrandById(String id);
|
void removeBrandById(String id);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,7 +1,6 @@
|
|||||||
package com.cpop.system.business.service.impl;
|
package com.cpop.system.business.service.impl;
|
||||||
|
|
||||||
import com.cpop.common.utils.StringUtils;
|
import com.cpop.common.utils.StringUtils;
|
||||||
import com.cpop.common.utils.bean.BeanUtils;
|
|
||||||
import com.cpop.core.base.entity.LoginUser;
|
import com.cpop.core.base.entity.LoginUser;
|
||||||
import com.cpop.core.base.entity.PageDomain;
|
import com.cpop.core.base.entity.PageDomain;
|
||||||
import com.cpop.core.base.enums.SourceType;
|
import com.cpop.core.base.enums.SourceType;
|
||||||
@ -24,10 +23,7 @@ import org.springframework.stereotype.Service;
|
|||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static com.cpop.system.business.entity.table.BrandTableDef.BRAND;
|
import static com.cpop.system.business.entity.table.BrandTableDef.BRAND;
|
||||||
@ -76,10 +72,7 @@ public class BrandServiceImpl extends ServiceImpl<BrandMapper, Brand> implements
|
|||||||
}
|
}
|
||||||
Brand sysBrand = new Brand();
|
Brand sysBrand = new Brand();
|
||||||
sysBrand.setBrandName(brand.getString("name"))
|
sysBrand.setBrandName(brand.getString("name"))
|
||||||
.setWxAppId(brand.getString("appid"))
|
|
||||||
.setWxMchId(brand.getString("wxMchId"))
|
.setWxMchId(brand.getString("wxMchId"))
|
||||||
.setWxMchKey(brand.getString("wxMchKey"))
|
|
||||||
.setWxKeyPath(brand.getString("wxKeyPath"))
|
|
||||||
.setBackgroundUrl(brand.getString("brandBg"))
|
.setBackgroundUrl(brand.getString("brandBg"))
|
||||||
.setSourceType(SourceType.JAMBOX.toString());
|
.setSourceType(SourceType.JAMBOX.toString());
|
||||||
this.save(sysBrand);
|
this.save(sysBrand);
|
||||||
@ -159,7 +152,7 @@ public class BrandServiceImpl extends ServiceImpl<BrandMapper, Brand> implements
|
|||||||
PageDomain pageDomain = SqlUtils.getInstance().getPageDomain();
|
PageDomain pageDomain = SqlUtils.getInstance().getPageDomain();
|
||||||
return this.mapper.paginateAs(pageDomain.getPageNum(), pageDomain.getPageSize(),
|
return this.mapper.paginateAs(pageDomain.getPageNum(), pageDomain.getPageSize(),
|
||||||
QueryWrapper.create()
|
QueryWrapper.create()
|
||||||
.select(BRAND.ID, BRAND.BRAND_NAME, BRAND.WX_MCH_ID, BRAND.CREATE_TIME, BRAND.BACKGROUND_URL, BRAND.WX_APP_ID, BRAND.WX_MCH_KEY, BRAND.WX_KEY_PATH)
|
.select(BRAND.ID, BRAND.BRAND_NAME, BRAND.WX_MCH_ID, BRAND.CREATE_TIME, BRAND.BACKGROUND_URL, BRAND.IS_OPEN_MALL)
|
||||||
.and(BRAND.BRAND_NAME.like(brandName)),
|
.and(BRAND.BRAND_NAME.like(brandName)),
|
||||||
BrandPageVo.class);
|
BrandPageVo.class);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -65,6 +65,12 @@ public class BrandPageVo implements Serializable {
|
|||||||
@ApiModelProperty("背景图")
|
@ApiModelProperty("背景图")
|
||||||
private String backgroundUrl;
|
private String backgroundUrl;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否开通微信分账
|
||||||
|
*/
|
||||||
|
@ApiModelProperty("是否开通微信分账")
|
||||||
|
private Boolean isOpenSharing;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建时间
|
* 创建时间
|
||||||
*/
|
*/
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user