Przeglądaj źródła

add 订单服务

周箭河 5 lat temu
rodzic
commit
94768e4cd5

+ 79 - 1
edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/ExamOrderController.java

@@ -1,13 +1,18 @@
 package com.keao.edu.user.controller;
 
+import com.alibaba.fastjson.JSON;
 import com.keao.edu.auth.api.client.SysUserFeignService;
 import com.keao.edu.auth.api.entity.SysUser;
 import com.keao.edu.common.controller.BaseController;
 import com.keao.edu.common.entity.HttpResponseResult;
+import com.keao.edu.thirdparty.adapay.ConfigInit;
+import com.keao.edu.thirdparty.adapay.Payment;
 import com.keao.edu.user.entity.ExamRegistrationPayment;
 import com.keao.edu.user.entity.ExamSong;
 import com.keao.edu.user.service.ExamRegistrationPaymentService;
 import com.keao.edu.user.service.ExamRegistrationService;
+import com.keao.edu.util.date.DateUtil;
+import com.keao.edu.util.http.HttpUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -15,7 +20,9 @@ import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.List;
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.*;
 
 
 @RestController
@@ -37,6 +44,77 @@ public class ExamOrderController extends BaseController {
         return succeed(examRegistrationPaymentService.getExamIngOrder(examinationBasicId, sysUser.getId()));
     }
 
+    @ApiOperation(value = "台牌支付")
+    @PostMapping("/executePayment")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "amount", value = "支付金额", required = true, dataType = "BigDecimal"),
+            @ApiImplicitParam(name = "orderNo", value = "订单号", required = true, dataType = "String"),
+            @ApiImplicitParam(name = "payChannel", value = "支付方式(alipay-支付宝app支付)", required = true, dataType = "String"),
+    })
+    public Object executePayment(BigDecimal amount, String orderNo, String payChannel, String notifyUrl, String returnUrl, String orderSubject, String orderBody, String sign, String code, String platform) throws Exception {
+        String openId = "";
+        if (payChannel.equals("wx_pub")) {
+            if (code == null || code.isEmpty()) {
+                return failed("微信支付请先授权");
+            }
+            String wxMpOAuth2AccessTokenUrl = String.format(ConfigInit.wxMpOAuth2AccessTokenUrl, ConfigInit.wxAppId, ConfigInit.wxAppSecret, code);
+            Map<String, String> weChatRes = JSON.parseObject(HttpUtil.get(wxMpOAuth2AccessTokenUrl, new HashMap<>()), Map.class);
+            if (!weChatRes.containsKey("openid")) {
+                return failed("授权失败,请重新授权");
+            }
+            openId = weChatRes.get("openid");
+        }
+
+        ExamRegistrationPayment examRegistrationPayment = examRegistrationPaymentService.getByOrderNo(orderNo);
+
+        if (examRegistrationPayment == null) {
+            return failed("订单不存在,请勿非法请求");
+        }
+        String merNos = examRegistrationPayment.getMerNo();
+        Date createTime = examRegistrationPayment.getCreateTime();
+        Calendar beforeTime = Calendar.getInstance();
+        beforeTime.add(Calendar.MINUTE, -28);// 28 分钟之前的时间
+        Date beforeDate = beforeTime.getTime();
+        if (createTime.before(beforeDate)) {
+            return failed("订单已超时,请重新下单");
+        }
+        amount = examRegistrationPayment.getTransAmount();
+
+        Date expireDate = DateUtil.addMinutes(createTime, 30);
+        String timeExpire = new SimpleDateFormat("yyyyMMddHHmmss").format(expireDate);
+
+        Map<String, Object> paymentParams = new HashMap<>();
+        paymentParams.put("app_id", ConfigInit.appId);
+        paymentParams.put("order_no", orderNo);
+        paymentParams.put("pay_channel", payChannel);
+        paymentParams.put("pay_amt", amount);
+        paymentParams.put("goods_title", orderSubject);
+        paymentParams.put("goods_desc", orderBody);
+        paymentParams.put("time_expire", timeExpire);
+
+        if (!merNos.equals(ConfigInit.merNo)) {
+            List<Map<String, Object>> divMembers = new ArrayList<>();
+            Map<String, Object> divMember = new HashMap<>();
+            divMember.put("member_id", merNos);//分佣账户
+            divMember.put("amount", amount);//分佣金额
+            divMember.put("fee_flag", "Y"); //承担手续费
+            divMembers.add(divMember);
+            paymentParams.put("div_members", JSON.toJSONString(divMembers));
+        }
+
+        Map<String, Object> expendParams = new HashMap<>(5);
+        expendParams.put("open_id", openId);
+        expendParams.put("is_raw", "1");
+        expendParams.put("callback_url", returnUrl);
+        expendParams.put("limit_pay", "1");
+        paymentParams.put("expend", expendParams);
+
+        Map<String, Object> payment = Payment.executePayment(paymentParams);
+
+        examRegistrationPayment.setTransNo((String) payment.get("id"));
+        examRegistrationPaymentService.update(examRegistrationPayment);
+        return succeed(payment);
+    }
 
 
 }

+ 1 - 1
edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/ExaminationBasicController.java

@@ -49,7 +49,7 @@ public class ExaminationBasicController extends BaseController {
         return succeed();
     }
 
-    @ApiOperation("获取考级姓名信息")
+    @ApiOperation("获取考级项目信息")
     @PostMapping(value = "/getInfo")
     public HttpResponseResult<ExaminationBasic> getInfo(Integer examId){
         return succeed(examinationBasicService.getInfo(examId));

+ 8 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/ExamRegistrationPaymentDao.java

@@ -8,9 +8,17 @@ public interface ExamRegistrationPaymentDao extends BaseDAO<Long, ExamRegistrati
 
     /**
      * 获取用户项目未支付的订单
+     *
      * @param examinationBasicId
      * @param userId
      * @return
      */
     ExamRegistrationPayment getExamIngOrder(@Param("examinationBasicId") Integer examinationBasicId, @Param("userId") Integer userId);
+
+    /**
+     * 根据订单号获取订单
+     * @param orderNo
+     * @return
+     */
+    ExamRegistrationPayment getByOrderNo(@Param("orderNo") String orderNo);
 }

+ 11 - 1
edu-user/edu-user-server/src/main/java/com/keao/edu/user/entity/ExamRegistrationPayment.java

@@ -25,6 +25,9 @@ public class ExamRegistrationPayment {
 	@ApiModelProperty(value = "交易流水号(由第三方返回)")
 	private String transNo;
 
+	@ApiModelProperty(value = "渠道收款账户号")
+	private String merNo;
+
 	@ApiModelProperty(value = "交易金额")
 	private java.math.BigDecimal transAmount;
 
@@ -87,6 +90,14 @@ public class ExamRegistrationPayment {
 	public String getTransNo(){
 		return this.transNo;
 	}
+
+	public String getMerNo() {
+		return merNo;
+	}
+
+	public void setMerNo(String merNo) {
+		this.merNo = merNo;
+	}
 			
 	public void setTransAmount(java.math.BigDecimal transAmount){
 		this.transAmount = transAmount;
@@ -140,5 +151,4 @@ public class ExamRegistrationPayment {
 	public String toString() {
 		return ToStringBuilder.reflectionToString(this);
 	}
-
 }

+ 7 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/ExamRegistrationPaymentService.java

@@ -12,4 +12,11 @@ public interface ExamRegistrationPaymentService extends BaseService<Long, ExamRe
      * @return
      */
     ExamRegistrationPayment getExamIngOrder(Integer examinationBasicId,Integer userId);
+
+    /**
+     * 根据订单号获取订单
+     * @param OrderNo
+     * @return
+     */
+    ExamRegistrationPayment getByOrderNo(String OrderNo);
 }

+ 5 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExamRegistrationPaymentServiceImpl.java

@@ -23,4 +23,9 @@ public class ExamRegistrationPaymentServiceImpl extends BaseServiceImpl<Long, Ex
 	public ExamRegistrationPayment getExamIngOrder(Integer examinationBasicId, Integer userId) {
 		return examRegistrationPaymentDao.getExamIngOrder(examinationBasicId,userId);
 	}
+
+	@Override
+	public ExamRegistrationPayment getByOrderNo(String OrderNo) {
+		return examRegistrationPaymentDao.getByOrderNo(OrderNo);
+	}
 }

+ 11 - 2
edu-user/edu-user-server/src/main/resources/config/mybatis/ExamRegistrationPaymentMapper.xml

@@ -13,6 +13,7 @@
 		<result column="examination_basic_id_" property="examinationBasicId" />
 		<result column="order_no_" property="orderNo" />
 		<result column="trans_no_" property="transNo" />
+		<result column="mer_no_" property="merNo" />
 		<result column="trans_amount_" property="transAmount" />
 		<result column="trans_status_" property="transStatus" />
 		<result column="trans_successed_time_" property="transSuccessedTime" />
@@ -38,8 +39,8 @@
 		SELECT SEQ_WSDEFINITION_ID.nextval AS ID FROM DUAL 
 		</selectKey>
 		-->
-		INSERT INTO exam_registration_payment (id_,exam_registration_id_,student_id_,examination_basic_id_,order_no_,trans_no_,trans_amount_,trans_status_,trans_successed_time_,create_time_,update_time_,tenant_id_)
-		VALUES(#{id},#{examRegistrationId},#{studentId},#{examinationBasicId},#{orderNo},#{transNo},#{transAmount},#{transStatus},#{transSuccessedTime},NOW(),NOW(),#{tenantId})
+		INSERT INTO exam_registration_payment (id_,exam_registration_id_,student_id_,examination_basic_id_,order_no_,trans_no_,mer_no_,trans_amount_,trans_status_,trans_successed_time_,create_time_,update_time_,tenant_id_)
+		VALUES(#{id},#{examRegistrationId},#{studentId},#{examinationBasicId},#{orderNo},#{transNo},#{transAmount},#{transStatus},#{merNo},#{transSuccessedTime},NOW(),NOW(),#{tenantId})
 	</insert>
 	
 	<!-- 根据主键查询一条记录 -->
@@ -70,6 +71,9 @@
 			<if test="transNo != null">
 			trans_no_ = #{transNo},
 			</if>
+			<if test="merNo != null">
+				mer_no_ = #{merNo},
+			</if>
 			<if test="transStatus != null">
 			trans_status_ = #{transStatus},
 			</if>
@@ -100,4 +104,9 @@
 		SELECT * FROM exam_registration_payment WHERE student_id_=#{userId}
 		AND examination_basic_id_ = #{examinationBasicId} AND trans_status_ = 'ING'
 	</select>
+
+	<!-- 根据订单号获取订单 -->
+	<select id="getByOrderNo" resultMap="ExamRegistrationPayment">
+		SELECT * FROM exam_registration_payment WHERE order_no_ = #{orderNo}
+	</select>
 </mapper>