|
@@ -15,7 +15,9 @@ import com.fs.common.core.domain.R;
|
|
|
import com.fs.common.utils.DateUtils;
|
|
|
import com.fs.common.utils.IPUtils;
|
|
|
import com.fs.common.utils.ServletUtils;
|
|
|
+import com.fs.company.domain.CompanyConfig;
|
|
|
import com.fs.company.domain.CompanyUser;
|
|
|
+import com.fs.company.mapper.CompanyConfigMapper;
|
|
|
import com.fs.company.service.ICompanyService;
|
|
|
import com.fs.company.service.ICompanyUserService;
|
|
|
import com.fs.course.config.RedPacketConfig;
|
|
@@ -95,6 +97,9 @@ public class FsStorePaymentServiceImpl implements IFsStorePaymentService
|
|
|
|
|
|
@Autowired
|
|
|
private IFsCourseRedPacketLogService redPacketLogService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private CompanyConfigMapper companyConfigMapper;
|
|
|
/**
|
|
|
* 查询支付明细
|
|
|
*
|
|
@@ -355,46 +360,119 @@ public class FsStorePaymentServiceImpl implements IFsStorePaymentService
|
|
|
@Override
|
|
|
@Transactional
|
|
|
public R sendRedPacket(WxSendRedPacketParam param) {
|
|
|
+ String json;
|
|
|
+ RedPacketConfig config = new RedPacketConfig();
|
|
|
+ // 根据红包模式获取配置
|
|
|
+ switch (param.getRedPacketMode()){
|
|
|
+ case 1:
|
|
|
+ json = configService.selectConfigByKey("redPacket.config");
|
|
|
+ config = JSONUtil.toBean(json, RedPacketConfig.class);
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
+ json = companyConfigMapper.selectRedPacketConfigByKey(param.getCompanyId());
|
|
|
+ config = JSONUtil.toBean(json, RedPacketConfig.class);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ //组合返回参数
|
|
|
+ R result = new R();
|
|
|
+ // 根据 isNew 判断使用哪种发红包方式
|
|
|
+ if (config.getIsNew() != null && config.getIsNew() == 1) {
|
|
|
+ result = sendRedPacketV3Internal(param, config);
|
|
|
+ } else {
|
|
|
+ result= sendRedPacketLegacyInternal(param, config);
|
|
|
+ }
|
|
|
+ result.put("isNew",config.getIsNew());
|
|
|
+ return result;
|
|
|
+ }
|
|
|
|
|
|
- String json = configService.selectConfigByKey("redPacket.config");
|
|
|
- RedPacketConfig config = JSONUtil.toBean(json, RedPacketConfig.class);
|
|
|
- //创建微信订单
|
|
|
+ // 内部方法:处理新版本的发红包逻辑
|
|
|
+ private R sendRedPacketV3Internal(WxSendRedPacketParam param, RedPacketConfig config) {
|
|
|
WxPayConfig payConfig = new WxPayConfig();
|
|
|
- BeanUtils.copyProperties(config,payConfig);
|
|
|
+ BeanUtils.copyProperties(config, payConfig);
|
|
|
WxPayService wxPayService = new WxPayServiceImpl();
|
|
|
wxPayService.setConfig(payConfig);
|
|
|
TransferService transferService = wxPayService.getTransferService();
|
|
|
|
|
|
- TransferBatchesRequest request = new TransferBatchesRequest();
|
|
|
+ TransferBillsRequest request = new TransferBillsRequest();
|
|
|
+ request.setAppid(config.getAppId());
|
|
|
+ request.setOpenid(param.getOpenId());
|
|
|
+
|
|
|
+ String code = String.valueOf(IdUtil.getSnowflake(0, 0).nextId());
|
|
|
+ request.setOutBillNo("fsCourse" + code);
|
|
|
|
|
|
+ Integer amount = WxPayUnifiedOrderRequest.yuanToFen(param.getAmount() != null ? param.getAmount().toString() : "0.1");
|
|
|
+ request.setTransferAmount(amount);
|
|
|
+ request.setTransferRemark("活动奖励");
|
|
|
+ request.setUserRecvPerception("活动奖励");
|
|
|
+ request.setNotifyUrl(config.getNotifyUrl());
|
|
|
+ request.setTransferSceneId("1000");
|
|
|
+
|
|
|
+ // 设置场景信息
|
|
|
+ List<TransferBillsRequest.TransferSceneReportInfo> transferSceneReportInfos = new ArrayList<>();
|
|
|
+ TransferBillsRequest.TransferSceneReportInfo info1 = new TransferBillsRequest.TransferSceneReportInfo();
|
|
|
+ info1.setInfoType("活动名称");
|
|
|
+ info1.setInfoContent("新会员有礼");
|
|
|
+ transferSceneReportInfos.add(info1);
|
|
|
+
|
|
|
+ TransferBillsRequest.TransferSceneReportInfo info2 = new TransferBillsRequest.TransferSceneReportInfo();
|
|
|
+ info2.setInfoType("奖励说明");
|
|
|
+ info2.setInfoContent("注册会员抽奖一等奖");
|
|
|
+ transferSceneReportInfos.add(info2);
|
|
|
+ request.setTransferSceneReportInfos(transferSceneReportInfos);
|
|
|
+
|
|
|
+ try {
|
|
|
+ TransferBillsResult transferBillsResult = transferService.transferBills(request);
|
|
|
+ logger.info("商家转账支付完成:[msg:{}]", transferBillsResult);
|
|
|
+ return R.ok("发送红包成功").put("data", transferBillsResult);
|
|
|
+ } catch (WxPayException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ logger.info("商家转账支付失败:[msg:{}]", e.getMessage());
|
|
|
+ return R.error("发送失败");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 内部方法:处理旧版本的发红包逻辑
|
|
|
+ private R sendRedPacketLegacyInternal(WxSendRedPacketParam param, RedPacketConfig config) {
|
|
|
+ WxPayConfig payConfig = new WxPayConfig();
|
|
|
+ BeanUtils.copyProperties(config, payConfig);
|
|
|
+ WxPayService wxPayService = new WxPayServiceImpl();
|
|
|
+ wxPayService.setConfig(payConfig);
|
|
|
+ TransferService transferService = wxPayService.getTransferService();
|
|
|
+
|
|
|
+ TransferBatchesRequest request = new TransferBatchesRequest();
|
|
|
request.setAppid(config.getAppId());
|
|
|
String code = IdUtil.getSnowflake(0, 0).nextIdStr();
|
|
|
- request.setOutBatchNo("fsCourse"+code);
|
|
|
+ request.setOutBatchNo("fsCourse" + code);
|
|
|
request.setBatchRemark("课堂答题奖励");
|
|
|
request.setBatchName("课堂答题奖励");
|
|
|
Integer amount = WxPayUnifiedOrderRequest.yuanToFen(param.getAmount().toString());
|
|
|
request.setTotalAmount(amount);
|
|
|
request.setTotalNum(1);
|
|
|
request.setNotifyUrl(config.getNotifyUrl());
|
|
|
+
|
|
|
ArrayList<TransferBatchesRequest.TransferDetail> transferDetailList = new ArrayList<>();
|
|
|
TransferBatchesRequest.TransferDetail transferDetail = new TransferBatchesRequest.TransferDetail();
|
|
|
transferDetail.setOpenid(param.getOpenId());
|
|
|
String code1 = IdUtil.getSnowflake(0, 0).nextIdStr();
|
|
|
- transferDetail.setOutDetailNo("fsCourse"+code1);
|
|
|
+ transferDetail.setOutDetailNo("fsCourse" + code1);
|
|
|
transferDetail.setTransferAmount(amount);
|
|
|
transferDetail.setTransferRemark("恭喜同学,认真听课,奖励你一朵小红花!");
|
|
|
transferDetailList.add(transferDetail);
|
|
|
request.setTransferDetailList(transferDetailList);
|
|
|
- TransferBatchesResult transferBatchesResult=null;
|
|
|
+
|
|
|
try {
|
|
|
- transferBatchesResult = transferService.transferBatches(request);
|
|
|
- return R.ok("发送红包成功").put("orderCode",transferBatchesResult.getOutBatchNo());
|
|
|
+ TransferBatchesResult transferBatchesResult = transferService.transferBatches(request);
|
|
|
+ return R.ok("发送红包成功").put("orderCode", transferBatchesResult.getOutBatchNo());
|
|
|
} catch (WxPayException e) {
|
|
|
e.printStackTrace();
|
|
|
return R.error("发送失败");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public R sendRedPacketV3(WxSendRedPacketParam param) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
|
|
|
@Override
|
|
|
public String transferNotify(String notifyData, HttpServletRequest request) {
|
|
@@ -431,65 +509,6 @@ public class FsStorePaymentServiceImpl implements IFsStorePaymentService
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- @Override
|
|
|
- public R sendRedPacketV3(WxSendRedPacketParam param) {
|
|
|
- String json = configService.selectConfigByKey("redPacket.config");
|
|
|
- RedPacketConfig config = JSONUtil.toBean(json, RedPacketConfig.class);
|
|
|
-
|
|
|
- //创建微信订单
|
|
|
- WxPayConfig payConfig = new WxPayConfig();
|
|
|
- BeanUtils.copyProperties(config,payConfig);
|
|
|
- WxPayService wxPayService = new WxPayServiceImpl();
|
|
|
- wxPayService.setConfig(payConfig);
|
|
|
- TransferService transferService = wxPayService.getTransferService();
|
|
|
-
|
|
|
- //商家转账请求
|
|
|
- TransferBillsRequest request = new TransferBillsRequest();
|
|
|
- request.setAppid(config.getAppId());
|
|
|
- request.setOpenid(param.getOpenId());
|
|
|
-
|
|
|
-// String code = OrderCodeUtils.getH5RedPacketOrderSn();
|
|
|
-// if(StringUtils.isEmpty(code)){
|
|
|
-// return R.error("订单生成失败,请重试");
|
|
|
-// }
|
|
|
- String code = String.valueOf(IdUtil.getSnowflake(0, 0).nextId());
|
|
|
- request.setOutBillNo("fsCourse"+code);
|
|
|
- //转账金额
|
|
|
- Integer amount = WxPayUnifiedOrderRequest.yuanToFen(param.getAmount()!=null ? param.getAmount().toString() : "0.1");
|
|
|
- request.setTransferAmount(amount);
|
|
|
- request.setTransferRemark("活动奖励");
|
|
|
- //用户感知
|
|
|
- request.setUserRecvPerception("活动奖励");
|
|
|
- request.setNotifyUrl(config.getNotifyUrl());
|
|
|
- request.setTransferSceneId("1000");
|
|
|
- List<TransferBillsRequest.TransferSceneReportInfo> transferSceneReportInfos = new ArrayList<>();
|
|
|
- // 添加第一条数据
|
|
|
- TransferBillsRequest.TransferSceneReportInfo info1 = new TransferBillsRequest.TransferSceneReportInfo();
|
|
|
- info1.setInfoType("活动名称");
|
|
|
- info1.setInfoContent("新会员有礼");
|
|
|
- transferSceneReportInfos.add(info1);
|
|
|
-
|
|
|
- // 添加第二条数据
|
|
|
- TransferBillsRequest.TransferSceneReportInfo info2 = new TransferBillsRequest.TransferSceneReportInfo();
|
|
|
- info2.setInfoType("奖励说明");
|
|
|
- info2.setInfoContent("注册会员抽奖一等奖");
|
|
|
- transferSceneReportInfos.add(info2);
|
|
|
- request.setTransferSceneReportInfos(transferSceneReportInfos);
|
|
|
-
|
|
|
- //发起商家转账API(新)
|
|
|
- TransferBillsResult transferBillsResult=null;
|
|
|
- try {
|
|
|
- transferBillsResult = transferService.transferBills(request);
|
|
|
- logger.info("商家转账支付完成:[msg:{}]",transferBillsResult);
|
|
|
- return R.ok("发送红包成功").put("data",transferBillsResult);
|
|
|
- } catch (WxPayException e) {
|
|
|
- e.printStackTrace();
|
|
|
- logger.info("商家转账支付失败:[msg:{}]",e.getMessage());
|
|
|
- return R.error("发送失败");
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
@Override
|
|
|
public String v3TransferNotify(String notifyData, HttpServletRequest request) {
|
|
|
logger.info("zyp \n【收到转账回调】:{}",notifyData);
|