Forráskód Böngészése

Merge remote-tracking branch 'origin/master'

Joburgess 5 éve
szülő
commit
22ead79503

+ 125 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/ExamOrderController.java

@@ -0,0 +1,125 @@
+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;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+
+@RestController
+@Api(tags = "报名订单服务")
+@RequestMapping(value = "examOrder")
+public class ExamOrderController extends BaseController {
+
+    @Autowired
+    private ExamRegistrationPaymentService examRegistrationPaymentService;
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+
+    @ApiOperation("获取用户项目未支付的订单")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "examinationBasicId", value = "项目id", required = true, dataType = "Integer")})
+    @GetMapping(value = "/getExamIngOrder")
+    public HttpResponseResult<ExamRegistrationPayment> getExamIngOrder(Integer examinationBasicId) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        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 = "支付方式", required = true, dataType = "String"),
+            @ApiImplicitParam(name = "returnUrl", value = "返回页面", required = true, dataType = "String"),
+            @ApiImplicitParam(name = "orderSubject", value = "订单标题", required = true, dataType = "String"),
+            @ApiImplicitParam(name = "orderBody", value = "订单内容", required = true, dataType = "String"),
+            @ApiImplicitParam(name = "sign", value = "sign", required = true, dataType = "String"),
+            @ApiImplicitParam(name = "code", value = "code", required = true, dataType = "String")
+    })
+    public Object executePayment(BigDecimal amount, String orderNo, String payChannel, 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));

+ 16 - 1
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/ExamRegistrationPaymentDao.java

@@ -2,8 +2,23 @@ package com.keao.edu.user.dao;
 
 import com.keao.edu.common.dal.BaseDAO;
 import com.keao.edu.user.entity.ExamRegistrationPayment;
+import org.apache.ibatis.annotations.Param;
 
 public interface ExamRegistrationPaymentDao extends BaseDAO<Long, ExamRegistrationPayment> {
 
-	
+    /**
+     * 获取用户项目未支付的订单
+     *
+     * @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);
 	}
-
 }

+ 1 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/enums/StudentRegistrationStatusEnum.java

@@ -7,6 +7,7 @@ import com.keao.edu.common.enums.BaseEnum;
  * @Date 2020.06.23
  */
 public enum  StudentRegistrationStatusEnum implements BaseEnum<String, StudentRegistrationStatusEnum> {
+    PAY_WAIT("PAY_WAIT", "等待缴费"),
     AUDIT_WAIT("AUDIT_WAIT", "等待审核"),
     AUDIT_PASS("AUDIT_PASS","通过"),
     AUDIT_REJECT("AUDIT_REJECT", "拒绝"),

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

@@ -5,4 +5,18 @@ import com.keao.edu.user.entity.ExamRegistrationPayment;
 
 public interface ExamRegistrationPaymentService extends BaseService<Long, ExamRegistrationPayment> {
 
+    /**
+     * 获取用户未支付的订单
+     * @param examinationBasicId
+     * @param userId
+     * @return
+     */
+    ExamRegistrationPayment getExamIngOrder(Integer examinationBasicId,Integer userId);
+
+    /**
+     * 根据订单号获取订单
+     * @param OrderNo
+     * @return
+     */
+    ExamRegistrationPayment getByOrderNo(String OrderNo);
 }

+ 10 - 1
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExamRegistrationPaymentServiceImpl.java

@@ -18,5 +18,14 @@ public class ExamRegistrationPaymentServiceImpl extends BaseServiceImpl<Long, Ex
 	public BaseDAO<Long, ExamRegistrationPayment> getDAO() {
 		return examRegistrationPaymentDao;
 	}
-	
+
+	@Override
+	public ExamRegistrationPayment getExamIngOrder(Integer examinationBasicId, Integer userId) {
+		return examRegistrationPaymentDao.getExamIngOrder(examinationBasicId,userId);
+	}
+
+	@Override
+	public ExamRegistrationPayment getByOrderNo(String OrderNo) {
+		return examRegistrationPaymentDao.getByOrderNo(OrderNo);
+	}
 }

+ 2 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExamRegistrationServiceImpl.java

@@ -11,6 +11,7 @@ import com.keao.edu.user.dao.*;
 import com.keao.edu.user.dto.ExamRegistrationStatisticsDto;
 import com.keao.edu.user.entity.*;
 import com.keao.edu.user.enums.ExamStatusEnum;
+import com.keao.edu.user.enums.StudentRegistrationStatusEnum;
 import com.keao.edu.user.page.ExamRegistrationQueryInfo;
 import com.keao.edu.user.service.ExamRegistrationPaymentService;
 import com.keao.edu.user.service.ExamRegistrationService;
@@ -96,6 +97,7 @@ public class ExamRegistrationServiceImpl extends BaseServiceImpl<Long, ExamRegis
 
         examRegistration.setUserId(examRegistration.getStudentId());
         studentDao.insert(examRegistration);
+        examRegistration.setStatus(StudentRegistrationStatusEnum.PAY_WAIT);
         examRegistrationDao.insert(examRegistration);
 
         ExamRegistrationPayment examRegistrationPayment = new ExamRegistrationPayment();

+ 17 - 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>
@@ -94,4 +98,15 @@
 	<select id="queryCount" resultType="int">
 		SELECT COUNT(*) FROM exam_registration_payment
 	</select>
+
+	<!-- 获取项目用户未支付的订单 -->
+    <select id="getExamIngOrder" resultMap="ExamRegistrationPayment">
+		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>