فهرست منبع

Merge branch 'saas_hgw_pay' into master_saas

hgw 3 سال پیش
والد
کامیت
daf743e9d6

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/PayService.java

@@ -40,6 +40,6 @@ public interface PayService {
 	 * @return
 	 * @throws Exception
 	 */
-	Map<String, Object> getPayToPlatformMap(PaymentChannelEnum paymentChannel, BigDecimal amount, BigDecimal balanceAmount, String orderNo,
+	Map<String, Object> getPayToPlatformMap(Integer tenantId, PaymentChannelEnum paymentChannel, BigDecimal amount, BigDecimal balanceAmount, String orderNo,
 			String notifyUrl, String returnUrl, String orderSubject, String orderBody) throws Exception;
 }

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/TenantOrderRecordService.java

@@ -5,6 +5,7 @@ import com.ym.mec.biz.dal.dto.TenantOrderRecordDto;
 import com.ym.mec.biz.dal.entity.TenantOrderRecord;
 import com.ym.mec.common.page.PageInfo;
 
+import javax.servlet.http.HttpServletRequest;
 import java.util.Map;
 
 /**
@@ -32,5 +33,7 @@ public interface TenantOrderRecordService extends IService<TenantOrderRecord> {
 
     void rechargeSuccess(TenantOrderRecord record);
 
+    String callback(HttpServletRequest request);
+
 }
 

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CloudTeacherOrderServiceImpl.java

@@ -182,7 +182,7 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
         int orderState = 0;
         //消费大于0元则拉起支付
         if (payAmount.compareTo(BigDecimal.ZERO) > 0) {
-            payMap = payService.getPayToPlatformMap(
+            payMap = payService.getPayToPlatformMap(tenantId,
                     PaymentChannelEnum.ADAPAY,
                     payAmount,
                     BigDecimal.ZERO,

+ 2 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/impl/PayServiceImpl.java

@@ -443,11 +443,9 @@ public class PayServiceImpl implements PayService {
     }
 
     @Override
-	public Map<String, Object> getPayToPlatformMap(PaymentChannelEnum paymentChannel, BigDecimal amount, BigDecimal balanceAmount, String orderNo, String notifyUrl, String returnUrl,
+	public Map<String, Object> getPayToPlatformMap(Integer tenantId, PaymentChannelEnum paymentChannel, BigDecimal amount, BigDecimal balanceAmount, String orderNo, String notifyUrl, String returnUrl,
 			String orderSubject, String orderBody) throws Exception {
     	
-    	Integer tenantId = -1;
-        
         HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(tenantId);
         if(hfMerchantConfig == null){
         	throw new BizException("机构[{}]汇付商户信息找不到", tenantId);
@@ -459,6 +457,7 @@ public class PayServiceImpl implements PayService {
         unionPay.put("orderNo", orderNo);
         unionPay.put("type", paymentChannel.getCode());
         unionPay.put("payMap", payMap);
+        unionPay.put("tenantId", hfMerchantConfig.getTenantId());
         //unionPay.put("routingMerNos", payeeMerNo);
         
 		return unionPay;

+ 105 - 47
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantInfoServiceImpl.java

@@ -1,5 +1,50 @@
 package com.ym.mec.biz.service.impl;
 
+import static com.ym.mec.biz.dal.enums.MessageTypeEnum.EMAIL_TENANT_EXPIRATION_REMINDERS;
+import static com.ym.mec.biz.dal.enums.MessageTypeEnum.EMAIL_TENANT_RENEWAL_SUCCESSFUL;
+import static com.ym.mec.biz.dal.enums.MessageTypeEnum.SMS_TENANT_EXPIRATION_REMINDERS;
+import static com.ym.mec.biz.dal.enums.MessageTypeEnum.SMS_TENANT_RENEWAL_SUCCESSFUL;
+
+import java.io.File;
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.math.MathContext;
+import java.math.RoundingMode;
+import java.nio.charset.Charset;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicReference;
+import java.util.function.BiConsumer;
+import java.util.function.Consumer;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.joda.time.LocalDate;
+import org.joda.time.LocalDateTime;
+import org.redisson.api.RBucket;
+import org.redisson.api.RedissonClient;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.dao.DuplicateKeyException;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -9,18 +54,56 @@ import com.ym.mec.auth.api.entity.SysRole;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.auth.api.enums.SysUserType;
 import com.ym.mec.biz.dal.dao.OrganizationDao;
-import com.ym.mec.biz.dal.dao.TenantContractTemplateDao;
+import com.ym.mec.biz.dal.dao.SysConfigDao;
 import com.ym.mec.biz.dal.dao.TenantInfoDao;
 import com.ym.mec.biz.dal.dto.TenantConfigDto;
 import com.ym.mec.biz.dal.dto.TenantInfoDto;
 import com.ym.mec.biz.dal.dto.TenantProductInfoDto;
-import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.biz.dal.entity.Employee;
+import com.ym.mec.biz.dal.entity.Organization;
+import com.ym.mec.biz.dal.entity.PlatformServe;
+import com.ym.mec.biz.dal.entity.PlatformServeDetail;
+import com.ym.mec.biz.dal.entity.SysArea;
+import com.ym.mec.biz.dal.entity.SysConfig;
+import com.ym.mec.biz.dal.entity.SysUserTenant;
+import com.ym.mec.biz.dal.entity.SysUserTsign;
+import com.ym.mec.biz.dal.entity.TenantAssetsInfo;
+import com.ym.mec.biz.dal.entity.TenantConfig;
+import com.ym.mec.biz.dal.entity.TenantContractRecord;
 import com.ym.mec.biz.dal.entity.TenantContractRecord.TenantContractRecordEnum;
-import com.ym.mec.biz.dal.enums.*;
+import com.ym.mec.biz.dal.entity.TenantInfo;
+import com.ym.mec.biz.dal.entity.TenantOrderRecord;
+import com.ym.mec.biz.dal.entity.TenantPreJoin;
+import com.ym.mec.biz.dal.entity.TenantProductInfo;
+import com.ym.mec.biz.dal.entity.TenantProductSumm;
+import com.ym.mec.biz.dal.enums.GradeTypeEnum;
+import com.ym.mec.biz.dal.enums.JobNatureEnum;
+import com.ym.mec.biz.dal.enums.PaymentChannelEnum;
+import com.ym.mec.biz.dal.enums.TenantOrderRecordEnum;
+import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import com.ym.mec.biz.dal.vo.PlatformServePageVo;
 import com.ym.mec.biz.dal.vo.SysUserTenantVo;
 import com.ym.mec.biz.dal.vo.TenantInfoPageVo;
-import com.ym.mec.biz.service.*;
+import com.ym.mec.biz.service.ContractService;
+import com.ym.mec.biz.service.EmployeeService;
+import com.ym.mec.biz.service.PayService;
+import com.ym.mec.biz.service.PlatformProductService;
+import com.ym.mec.biz.service.PlatformServeDetailService;
+import com.ym.mec.biz.service.PlatformServeService;
+import com.ym.mec.biz.service.StudentService;
+import com.ym.mec.biz.service.SysAreaService;
+import com.ym.mec.biz.service.SysConfigService;
+import com.ym.mec.biz.service.SysMessageService;
+import com.ym.mec.biz.service.SysUserTenantService;
+import com.ym.mec.biz.service.SysUserTsignService;
+import com.ym.mec.biz.service.TenantAssetsInfoService;
+import com.ym.mec.biz.service.TenantConfigService;
+import com.ym.mec.biz.service.TenantContractRecordService;
+import com.ym.mec.biz.service.TenantContractTemplateService;
+import com.ym.mec.biz.service.TenantInfoService;
+import com.ym.mec.biz.service.TenantOrderRecordService;
+import com.ym.mec.biz.service.TenantPreJoinService;
+import com.ym.mec.biz.service.TenantProductInfoService;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.page.PageUtil;
@@ -34,40 +117,6 @@ import com.ym.mec.thirdparty.yqpay.DateUtils;
 import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.util.freemarker.FreemarkerTemplateEngine;
 import com.ym.mec.util.pdf.PDFUtil;
-import org.apache.commons.collections.CollectionUtils;
-import org.apache.commons.io.FileUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.joda.time.LocalDate;
-import org.joda.time.LocalDateTime;
-import org.redisson.api.RBucket;
-import org.redisson.api.RedissonClient;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.BeanUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.Lazy;
-import org.springframework.dao.DuplicateKeyException;
-import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import javax.servlet.http.HttpServletRequest;
-import java.io.File;
-import java.io.IOException;
-import java.math.BigDecimal;
-import java.math.MathContext;
-import java.math.RoundingMode;
-import java.nio.charset.Charset;
-import java.util.*;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicReference;
-import java.util.function.BiConsumer;
-import java.util.function.Consumer;
-import java.util.function.Function;
-import java.util.stream.Collectors;
-
-import static com.ym.mec.biz.dal.enums.MessageTypeEnum.*;
 
 @Service
 public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo> implements TenantInfoService {
@@ -94,6 +143,8 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
     @Autowired
     private OrganizationDao organizationDao;
     @Autowired
+    private SysConfigDao sysConfigDao;
+    @Autowired
     private PayService payService;
     @Autowired
     private IdGeneratorService idGenerator;
@@ -744,15 +795,17 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
         //生成订单编号
         String orderNo = idGenerator.generatorId("payment") + "";
         int orderState = 0;
+
+        String baseApiUrl = sysConfigDao.findConfigValue("base_api_url");
         //消费大于0元则拉起支付
         if (productInfo.getPayAmount().compareTo(BigDecimal.ZERO) > 0) {
-            result = payService.getPayToPlatformMap(
+            result = payService.getPayToPlatformMap(tenantId,
                     PaymentChannelEnum.ADAPAY,
                     productInfo.getPayAmount(),
                     BigDecimal.ZERO,
                     orderNo,
-                    null,
-                    null,
+                    baseApiUrl + "/api-web/tenantInfo/callback",
+                    baseApiUrl + "/api-web/tenantInfo/paymentResult?orderNo=" + orderNo,
                     tenantEnum.getMsg(),
                     tenantEnum.getMsg()
             );
@@ -789,15 +842,17 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
         //生成订单编号
         String orderNo = idGenerator.generatorId("payment") + "";
         int orderState = 0;
+
+        String baseApiUrl = sysConfigDao.findConfigValue("base_api_url");
         //消费大于0元则拉起支付
         if (amount.compareTo(BigDecimal.ZERO) > 0) {
-            result = payService.getPayToPlatformMap(
+            result = payService.getPayToPlatformMap(tenantId,
                     PaymentChannelEnum.ADAPAY,
                     amount,
                     BigDecimal.ZERO,
                     orderNo,
-                    null,
-                    null,
+                    baseApiUrl + "/api-web/tenantInfo/callback",
+                    baseApiUrl + "/api-web/tenantInfo/paymentResult?orderNo=" + orderNo,
                     tenantEnum.getMsg(),
                     tenantEnum.getMsg()
             );
@@ -1073,15 +1128,18 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
         TenantOrderRecordEnum tenantEnum = TenantOrderRecordEnum.TENANT_RECHARGE;
         Map<String, Object> result = new HashMap<>();
         int orderState = 0;
+
+        String baseApiUrl = sysConfigDao.findConfigValue("base_api_url");
+        
         //消费大于0元则拉起支付
         if (amount.compareTo(BigDecimal.ZERO) > 0) {
-            result = payService.getPayToPlatformMap(
+            result = payService.getPayToPlatformMap(tenantId,
                     PaymentChannelEnum.ADAPAY,
                     amount,
                     BigDecimal.ZERO,
                     orderNo,
-                    null,
-                    null,
+                    baseApiUrl + "/api-web/tenantInfo/callback",
+                    baseApiUrl + "/api-web/tenantInfo/paymentResult?orderNo=" + orderNo,
                     tenantEnum.getMsg(),
                     tenantEnum.getMsg()
             );

+ 61 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantOrderRecordServiceImpl.java

@@ -9,6 +9,9 @@ import java.util.Objects;
 import java.util.concurrent.TimeUnit;
 import java.util.function.Consumer;
 
+import com.alibaba.fastjson.JSONObject;
+import com.huifu.adapay.core.AdapayCore;
+import com.huifu.adapay.core.util.AdapaySign;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.joda.time.LocalDateTime;
@@ -64,6 +67,8 @@ import com.ym.mec.thirdparty.adapay.Payment;
 import com.ym.mec.thirdparty.adapay.entity.HfMerchantConfig;
 import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
 
+import javax.servlet.http.HttpServletRequest;
+
 /**
  * 机构付款记录表(TenantOrderRecord)表服务实现类
  *
@@ -98,7 +103,7 @@ public class TenantOrderRecordServiceImpl extends ServiceImpl<TenantOrderRecordD
     private TenantProxyDividendService tenantProxyDividendService;
     @Autowired
     private TenantProxyUserRelationService tenantProxyUserRelationService;
-    
+
     @Autowired
     private HfMerchantConfigService hfMerchantConfigService;
 
@@ -344,10 +349,10 @@ public class TenantOrderRecordServiceImpl extends ServiceImpl<TenantOrderRecordD
             try {
                 Integer tenantId = -1;
                 HfMerchantConfig hfMerchantConfig = hfMerchantConfigService.queryByTenantId(tenantId);
-                if(hfMerchantConfig == null){
-                	throw new BizException("机构[{}]汇付商户信息找不到", tenantId);
+                if (hfMerchantConfig == null) {
+                    throw new BizException("机构[{}]汇付商户信息找不到", tenantId);
                 }
-                
+
                 payment = Payment.queryPayment(orderRecord.getTransNo(), hfMerchantConfig.getMerKey());
                 log.info("    >>>>> checkTenantOrder  payment start");
                 String status = (String) payment.get("status");
@@ -429,6 +434,58 @@ public class TenantOrderRecordServiceImpl extends ServiceImpl<TenantOrderRecordD
         detail.put("num", productInfo.getExpiryCount());
     }
 
+    /**
+     * 机构相关支付-回调
+     */
+    @Override
+    public String callback(HttpServletRequest request) {
+        // 验签请参data
+        String data = request.getParameter("data");
+        // 验签请参sign
+        String sign = request.getParameter("sign");
+        log.info("tenant callback request param:{}", data);
+        try {
+            // 验签
+            if (AdapaySign.verifySign(data, sign, AdapayCore.PUBLIC_KEY)) {
+                JSONObject dataObj = JSON.parseObject(data);
+                String transType = request.getParameter("type");
+                String orderNo = dataObj.getString("order_no");
+                TenantOrderRecord record = this.getOne(Wrappers.<TenantOrderRecord>lambdaQuery()
+                        .eq(TenantOrderRecord::getOrderNo, orderNo));
+                if(Objects.isNull(record)){
+                    log.error("error tenant callback request orderNo is null param:{}", data);
+                    return "failed";
+                }
+                switch (transType) {
+                    case "payment.succeeded":// 支付成功
+                        Consumer<TenantOrderRecord> consumer = checkOrder.get(record.getOrderType());
+                        if (Objects.nonNull(consumer)) {
+                            consumer.accept(record);
+                        }
+                        LocalDateTime now = LocalDateTime.now();
+                        record.setPayDate(now.toLocalDate().toDate());
+                        record.setPayTime(now.toDate());
+                        //修改流水
+                        record.setOrderState(1);
+                        baseMapper.updateById(record);
+                        break;
+                    case "payment.failed":// 支付失败
+                        //修改流水
+                        record.setOrderState(2);
+                        baseMapper.updateById(record);
+                        break;
+                    default:
+                        break;
+                }
+            } else {
+                return "验签失败";
+            }
+        } catch (Exception e) {
+            log.error("error tenant callback request param:{}", data);
+            return e.getMessage();
+        }
+        return "succeeded";
+    }
 
 }
 

+ 1 - 1
mec-student/src/main/resources/logback-spring.xml

@@ -43,7 +43,7 @@
 		</encoder>
 	</appender>
 
-	<logger name="com.ym.mec" level="INFO" />
+	<logger name="com.ym.mec" level="WARN" />
 
 	<logger name="com.ym.mec.thirdparty" level="INFO"
 			additivity="false">

+ 14 - 0
mec-web/src/main/java/com/ym/mec/web/controller/TenantInfoController.java

@@ -8,6 +8,7 @@ import com.ym.mec.biz.dal.entity.TenantInfo;
 import com.ym.mec.biz.dal.entity.TenantProductSumm;
 import com.ym.mec.biz.service.TenantInfoSendMsgService;
 import com.ym.mec.biz.service.TenantInfoService;
+import com.ym.mec.biz.service.TenantOrderRecordService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.page.WrapperUtil;
@@ -15,12 +16,16 @@ import com.ym.mec.common.tenant.TenantContextHolder;
 import com.ym.mec.util.validator.ValidationKit;
 import io.swagger.annotations.*;
 import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.BindingResult;
 import org.springframework.web.bind.annotation.*;
 
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
 import javax.validation.Valid;
 import java.math.BigDecimal;
 import java.util.Map;
@@ -37,6 +42,7 @@ import static com.ym.mec.biz.service.impl.TenantInfoSendMsgServiceImpl.OPEN;
 @Api(tags = "机构管理")
 @RestController
 public class TenantInfoController extends BaseController {
+    private static final Logger log = LoggerFactory.getLogger(TenantInfoController.class);
 
     @Autowired
     private TenantInfoService tenantInfoService;
@@ -47,6 +53,9 @@ public class TenantInfoController extends BaseController {
     @Autowired
     private TenantInfoSendMsgService tenantInfoSendMsgService;
 
+    @Resource
+    private TenantOrderRecordService tenantOrderRecordService;
+
     @ApiOperation("添加机构信息")
     @PostMapping(value = "/add")
     @PreAuthorize("@pcs.hasPermissions('tenantInfo/add')")
@@ -178,4 +187,9 @@ public class TenantInfoController extends BaseController {
         return succeed();
     }
 
+    @PostMapping("/callback")
+    public String callback(HttpServletRequest request) {
+        return tenantOrderRecordService.callback(request);
+    }
+
 }

+ 0 - 2
mec-web/src/main/java/com/ym/mec/web/controller/TenantOrderRecordController.java

@@ -32,8 +32,6 @@ public class TenantOrderRecordController extends BaseController {
      */
     @Resource
     private TenantOrderRecordService tenantOrderRecordService;
-    @Autowired
-    private OrderPayOpsService orderPayOpsService;
 
     @ApiOperation("分页查询")
     @PostMapping(value = "/queryPage")