Browse Source

fengji 团练宝缴费激活

yanite 3 years ago
parent
commit
bdca0ebeab

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CloudTeacherOrderDao.java

@@ -95,4 +95,6 @@ public interface CloudTeacherOrderDao extends BaseDAO<Long, CloudTeacherOrder> {
     int findInactiveCount(Map<String, Object> params);
 
     List<CloudTeacherStudent> queryInactive(Map<String, Object> params);
+
+    int updateCloudTeacherOrder(@Param("payStudentIds") String payStudentIds);
 }

+ 20 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CloudTeacherOrderRecordDao.java

@@ -0,0 +1,20 @@
+package com.ym.mec.biz.dal.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ym.mec.biz.dal.entity.CloudTeacherOrderRecord;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 机构付款记录表(CloudTeacherOrderRecord)表数据库访问层
+ *
+ * @author makejava
+ * @since 2021-12-21 18:13:47
+ */
+public interface CloudTeacherOrderRecordDao extends BaseMapper<CloudTeacherOrderRecord> {
+
+    int insertBatch(@Param("entities") List<CloudTeacherOrderRecord> entities);
+
+}
+

+ 195 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CloudTeacherOrderRecord.java

@@ -0,0 +1,195 @@
+package com.ym.mec.biz.dal.entity;
+
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.baomidou.mybatisplus.annotation.TableId;
+
+import java.io.Serializable;
+
+/**
+ * 机构付款记录表(CloudTeacherOrderRecord)表实体类
+ *
+ * @author makejava
+ * @since 2021-12-21 18:13:47
+ */
+@ApiModel(value = "cloud_teacher_order_record-机构付款记录表")
+public class CloudTeacherOrderRecord implements Serializable {
+    @TableId(value = "id_", type = IdType.AUTO)
+    @ApiModelProperty(value = "主键")
+    private Integer id;
+
+    @TableField("tenant_id_")
+    @ApiModelProperty(value = "机构产品设置表id")
+    private Integer tenantId;
+
+    @TableField("order_no_")
+    @ApiModelProperty(value = "订单编号(付款前生成订单时生成的编号)")
+    private String orderNo;
+
+    @TableField("trans_no_")
+    @ApiModelProperty(value = "支付编号(付款后第三方支付给予的)")
+    private String transNo;
+
+    @TableField("order_type_")
+    @ApiModelProperty(value = "订单类型/机构开通缴费、续费、充值、激活团练宝")
+    private String orderType;
+
+    @TableField("payment_channel_")
+    @ApiModelProperty(value = "付款渠道/惠支付、双乾")
+    private String paymentChannel;
+
+    @TableField("pay_channel_")
+    @ApiModelProperty(value = "付款渠道/微信、支付宝、等")
+    private String payChannel;
+
+    @TableField("expect_amount")
+    @ApiModelProperty(value = "应付金额")
+    private BigDecimal expectAmount;
+
+    @TableField("actual_amount")
+    @ApiModelProperty(value = "实付金额")
+    private BigDecimal actualAmount;
+
+    @TableField("order_state_")
+    @ApiModelProperty(value = "订单状态/0待支付、1已支付")
+    private Integer orderState;
+
+    @TableField("pay_date_")
+    @ApiModelProperty(value = "支付日期")
+    private Date payDate;
+
+    @TableField("pay_time_")
+    @ApiModelProperty(value = "支付时间")
+    private Date payTime;
+
+    @TableField("created_time_")
+    @ApiModelProperty(value = "订单创建时间")
+    private Date createdTime;
+
+    @TableField("pay_student_ids_")
+    @ApiModelProperty(value = "${column.comment}")
+    private String payStudentIds;
+
+    private static final long serialVersionUID = 1L;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getTenantId() {
+        return tenantId;
+    }
+
+    public void setTenantId(Integer tenantId) {
+        this.tenantId = tenantId;
+    }
+
+    public String getOrderNo() {
+        return orderNo;
+    }
+
+    public void setOrderNo(String orderNo) {
+        this.orderNo = orderNo;
+    }
+
+    public String getTransNo() {
+        return transNo;
+    }
+
+    public void setTransNo(String transNo) {
+        this.transNo = transNo;
+    }
+
+    public String getOrderType() {
+        return orderType;
+    }
+
+    public void setOrderType(String orderType) {
+        this.orderType = orderType;
+    }
+
+    public String getPaymentChannel() {
+        return paymentChannel;
+    }
+
+    public void setPaymentChannel(String paymentChannel) {
+        this.paymentChannel = paymentChannel;
+    }
+
+    public String getPayChannel() {
+        return payChannel;
+    }
+
+    public void setPayChannel(String payChannel) {
+        this.payChannel = payChannel;
+    }
+
+    public BigDecimal getExpectAmount() {
+        return expectAmount;
+    }
+
+    public void setExpectAmount(BigDecimal expectAmount) {
+        this.expectAmount = expectAmount;
+    }
+
+    public BigDecimal getActualAmount() {
+        return actualAmount;
+    }
+
+    public void setActualAmount(BigDecimal actualAmount) {
+        this.actualAmount = actualAmount;
+    }
+
+    public Integer getOrderState() {
+        return orderState;
+    }
+
+    public void setOrderState(Integer orderState) {
+        this.orderState = orderState;
+    }
+
+    public Date getPayDate() {
+        return payDate;
+    }
+
+    public void setPayDate(Date payDate) {
+        this.payDate = payDate;
+    }
+
+    public Date getPayTime() {
+        return payTime;
+    }
+
+    public void setPayTime(Date payTime) {
+        this.payTime = payTime;
+    }
+
+    public Date getCreatedTime() {
+        return createdTime;
+    }
+
+    public void setCreatedTime(Date createdTime) {
+        this.createdTime = createdTime;
+    }
+
+    public String getPayStudentIds() {
+        return payStudentIds;
+    }
+
+    public void setPayStudentIds(String payStudentIds) {
+        this.payStudentIds = payStudentIds;
+    }
+
+
+}
+

+ 26 - 8
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CloudTeacherStudent.java

@@ -1,6 +1,5 @@
 package com.ym.mec.biz.dal.entity;
 
-import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiModelProperty;
 
 /**
@@ -26,8 +25,11 @@ public class CloudTeacherStudent {
     @ApiModelProperty(value = "手机号")
     private String phone;
 
+    @ApiModelProperty(value = "声部Id")
+    private Integer subject;
+
     @ApiModelProperty(value = "声部")
-    private String subject;
+    private String subjectLabel;
 
     @ApiModelProperty(value = "团练宝类型")
     private Integer type;
@@ -35,8 +37,8 @@ public class CloudTeacherStudent {
     @ApiModelProperty(value = "数量")
     private Integer time;
 
-    @ApiModelProperty(value = "价格")
-    private Double price;
+    @ApiModelProperty(value = "金额")
+    private Double amount;
 
     public Integer getTenantId() {
         return tenantId;
@@ -78,12 +80,12 @@ public class CloudTeacherStudent {
         this.phone = phone;
     }
 
-    public Double getPrice() {
-        return price;
+    public Double getAmount() {
+        return amount;
     }
 
-    public void setPrice(Double price) {
-        this.price = price;
+    public void setAmount(Double amount) {
+        this.amount = amount;
     }
 
     public Integer getType() {
@@ -101,4 +103,20 @@ public class CloudTeacherStudent {
     public void setTime(Integer time) {
         this.time = time;
     }
+
+    public Integer getSubject() {
+        return subject;
+    }
+
+    public void setSubject(Integer subject) {
+        this.subject = subject;
+    }
+
+    public String getSubjectLabel() {
+        return subjectLabel;
+    }
+
+    public void setSubjectLabel(String subjectLabel) {
+        this.subjectLabel = subjectLabel;
+    }
 }

+ 4 - 4
mec-biz/src/main/java/com/ym/mec/biz/dal/page/CloudTeacherOrderQueryInfo.java

@@ -6,16 +6,16 @@ import com.ym.mec.common.page.QueryInfo;
 
 public class CloudTeacherOrderQueryInfo extends QueryInfo {
 
-	@ApiModelProperty(value = "交易状态(0-待生效 1-生效中 2-已生效 3-已退)", required = false)
+	@ApiModelProperty(value = "交易状态(0-待生效 1-生效中 2-已生效 3-已退)")
 	private Integer status;
 
-	@ApiModelProperty(value = "学生编号", required = false)
+	@ApiModelProperty(value = "学生编号")
 	private Integer studentId;
 
-	@ApiModelProperty(value = "学员姓名/编号/电话", required = false)
+	@ApiModelProperty(value = "学员姓名/编号/电话")
 	private String queryCondition;
 
-	@ApiModelProperty(value = "声部Id", required = false)
+	@ApiModelProperty(value = "声部Id")
 	private Integer subjectId;
 
 	public Integer getStatus() {

+ 15 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/CloudTeacherOrderRecordService.java

@@ -0,0 +1,15 @@
+package com.ym.mec.biz.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ym.mec.biz.dal.entity.CloudTeacherOrderRecord;
+
+/**
+ * 机构付款记录表(CloudTeacherOrderRecord)表服务接口
+ *
+ * @author makejava
+ * @since 2021-12-21 18:13:47
+ */
+public interface CloudTeacherOrderRecordService extends IService<CloudTeacherOrderRecord> {
+
+}
+

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

@@ -8,6 +8,7 @@ import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
 import com.ym.mec.biz.dal.page.CloudTeacherOrderQueryInfo;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.BaseService;
+import com.ym.mec.thirdparty.yqpay.Msg;
 
 import java.math.BigDecimal;
 import java.util.List;
@@ -25,7 +26,6 @@ public interface CloudTeacherOrderService extends BaseService<Long, CloudTeacher
     /**
      * 机构付款指定学生并激活
      */
-    Boolean pay(List<CloudTeacherStudent> orders);
 
     /**
      * 将订单详情云教练加入云教练购买列表
@@ -108,4 +108,13 @@ public interface CloudTeacherOrderService extends BaseService<Long, CloudTeacher
      * @return
      */
     String queryActiveOrderPage(Integer userId, Integer activeRemark, String remark);
+
+    /**
+     * 支付未激活用户
+     * @param cloudTeacherStudents 选择中用户清单
+     * @return 是否成功
+     */
+    Map<String, Object> pay(List<CloudTeacherStudent> cloudTeacherStudents) throws Exception;
+
+    Msg payNotify(Msg msg);
 }

+ 26 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CloudTeacherOrderRecordServiceImpl.java

@@ -0,0 +1,26 @@
+package com.ym.mec.biz.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ym.mec.biz.dal.dao.CloudTeacherOrderRecordDao;
+import com.ym.mec.biz.dal.entity.CloudTeacherOrderRecord;
+import com.ym.mec.biz.service.CloudTeacherOrderRecordService;
+import org.springframework.stereotype.Service;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * 机构付款记录表(CloudTeacherOrderRecord)表服务实现类
+ *
+ * @author makejava
+ * @since 2021-12-21 18:13:47
+ */
+@Service("cloudTeacherOrderRecordService")
+public class CloudTeacherOrderRecordServiceImpl extends ServiceImpl<CloudTeacherOrderRecordDao, CloudTeacherOrderRecord>
+        implements CloudTeacherOrderRecordService {
+
+    private final static Logger logger = LoggerFactory.getLogger(CloudTeacherOrderRecordServiceImpl.class);
+
+
+}
+

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

@@ -6,22 +6,26 @@ import java.util.stream.Collectors;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.biz.dal.enums.PaymentChannelEnum;
+import com.ym.mec.biz.dal.enums.TenantOrderRecordEnum;
 import com.ym.mec.biz.dal.page.CloudTeacherOrderQueryInfo;
-import com.ym.mec.biz.service.TenantConfigService;
+import com.ym.mec.biz.service.*;
 import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.common.service.IdGeneratorService;
+import com.ym.mec.thirdparty.yqpay.Msg;
 import com.ym.mec.util.collection.MapUtil;
+import org.joda.time.LocalDateTime;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import com.ym.mec.biz.dal.dao.CloudTeacherDao;
-import com.ym.mec.biz.dal.dao.CloudTeacherOrderDao;
-import com.ym.mec.biz.dal.dao.CourseScheduleDao;
 import com.ym.mec.biz.dal.dto.CloudTeacherOrderDto;
 import com.ym.mec.biz.dal.enums.PeriodEnum;
-import com.ym.mec.biz.service.CloudTeacherOrderService;
-import com.ym.mec.biz.service.StudentService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
@@ -29,7 +33,7 @@ import com.ym.mec.util.date.DateUtil;
 
 @Service
 public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTeacherOrder> implements CloudTeacherOrderService {
-
+    private static final Logger log = LoggerFactory.getLogger(TenantInfoServiceImpl.class);
     @Autowired
     private CloudTeacherOrderDao cloudTeacherOrderDao;
     @Autowired
@@ -39,9 +43,16 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
     
     @Autowired
     private StudentService studentService;
-
+    @Autowired
+    private SysConfigDao sysConfigDao;
     @Autowired
     private TenantConfigService tenantConfigService;
+    @Autowired
+    private PayService payService;
+    @Autowired
+    private IdGeneratorService idGenerator;
+    @Autowired
+    private CloudTeacherOrderRecordService cloudTeacherOrderRecordService;
 
     @Override
     public BaseDAO<Long, CloudTeacherOrder> getDAO() {
@@ -50,8 +61,8 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
 
     @Override
     public PageInfo<CloudTeacherStudent> queryInactive(CloudTeacherOrderQueryInfo queryInfo) {
-        PageInfo<CloudTeacherStudent> pageInfo = new PageInfo<CloudTeacherStudent>(queryInfo.getPage(), queryInfo.getRows());
-        Map<String, Object> params = new HashMap<String, Object>();
+        PageInfo<CloudTeacherStudent> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+        Map<String, Object> params = new HashMap<>();
         MapUtil.populateMap(params, queryInfo);
         List<CloudTeacherStudent> dataList = null;
         int count = cloudTeacherOrderDao.findInactiveCount(params);
@@ -61,39 +72,161 @@ public class CloudTeacherOrderServiceImpl extends BaseServiceImpl<Long, CloudTea
             dataList = cloudTeacherOrderDao.queryInactive(params);
         }
         if (count == 0) {
-            dataList = new ArrayList<CloudTeacherStudent>();
+            dataList = new ArrayList<>();
         }
         pageInfo.setRows(dataList);
 
         // List<TenantConfig> tenCfg = tenantConfigService.list(new Wrapper<TenantConfig>());
+        assert dataList != null;
         for (CloudTeacherStudent cst: dataList) {
             if (cst.getTime() == null) continue;
             TenantConfig tenantConfig = tenantConfigService.getById(cst.getTenantId());
+            if (tenantConfig == null) continue;
             JSONObject cfg = JSON.parseObject(tenantConfig.getConfig());
             JSONObject memberConfig = (JSONObject) cfg.get("member_config");
             if (cst.getType() == 1) {
                 double divide = memberConfig.getDouble("month_divide");
-                cst.setPrice(divide * cst.getTime());
+                cst.setAmount(divide * cst.getTime());
             } else if (cst.getType() == 2) { // 月
                 double divide = memberConfig.getDouble("month_divide");
-                cst.setPrice(divide * cst.getTime());
+                cst.setAmount(divide * cst.getTime());
             } else if (cst.getType() == 3) {
                 double divide = memberConfig.getDouble("quarter_divide");
-                cst.setPrice(divide * cst.getTime());
+                cst.setAmount(divide * cst.getTime());
             } else if (cst.getType() == 4) {
                 double divide = memberConfig.getDouble("half_year_divide");
-                cst.setPrice(divide * cst.getTime());
+                cst.setAmount(divide * cst.getTime());
             } else if (cst.getType() == 5) {
                 double divide = memberConfig.getDouble("year_divide");
-                cst.setPrice(divide * cst.getTime());
+                cst.setAmount(divide * cst.getTime());
             }
         }
         return pageInfo;
     }
 
     @Override
-    public Boolean pay(List<CloudTeacherStudent> orders) {
-        return true;
+    public Map<String, Object> pay(List<CloudTeacherStudent> cloudTeacherStudents) throws Exception {
+
+        BigDecimal sumAmount = new BigDecimal(0);
+        Integer tenantId = null;
+        StringBuilder payStudentIds = new StringBuilder();
+        StringBuilder payStudentIdsZero = new StringBuilder();
+        for (CloudTeacherStudent cts: cloudTeacherStudents) {
+            if (cts.getAmount() == null) {
+                throw new Exception("金额错误在 " + cts.getStudentId().toString() );
+            }
+            if (tenantId == null) {
+                tenantId = cts.getTenantId();
+            } else {
+                if (!tenantId.equals(cts.getTenantId())) {
+                    throw new Exception("分部Id 错误 " + cts.getStudentId().toString() );
+                }
+            }
+            if (cts.getAmount() == 0) {
+                payStudentIdsZero.append(cts.getStudentId());
+                continue;
+            } else {
+                sumAmount.add(BigDecimal.valueOf(cts.getAmount()));
+                payStudentIds.append(cts.getStudentId().toString()).append(",");
+
+            }
+        }
+        // 金额为 0 的
+        if (payStudentIdsZero.length() > 0) {
+            this.updateCloudTeacherOrder(payStudentIdsZero.toString());
+            createOrderRecord(tenantId, new BigDecimal(0), "", TenantOrderRecordEnum.CLOUD_TEACHER, 1, payStudentIdsZero.toString());
+        }
+        return this.payExec(sumAmount, tenantId, payStudentIds.toString());
+    }
+
+    /**
+     * 团练宝支付
+     * @param payAmount 金额
+     * @param tenantId 分部
+     * @return
+     */
+    private Map<String, Object> payExec(BigDecimal payAmount, Integer tenantId, String payStudentIds) throws Exception {
+        //生成订单编号
+        String orderNo = idGenerator.generatorId("payment") + "";
+        String baseApiUrl = sysConfigDao.findConfigValue("base_api_url");
+        TenantOrderRecordEnum tenantEnum = TenantOrderRecordEnum.CLOUD_TEACHER;
+
+        Map<String, Object> payMap = new HashMap<>();
+        int orderState = 0;
+        //消费大于0元则拉起支付
+        if (payAmount.compareTo(BigDecimal.ZERO) > 0) {
+            payMap = payService.getPayMap(
+                    payAmount,
+                    BigDecimal.ZERO,
+                    orderNo,
+                    baseApiUrl + "/api-web/cloudTeacherOrder/payNotify",
+                    baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
+                    tenantEnum.getMsg(),
+                    tenantEnum.getMsg(),
+                    1,//临时写死
+                    tenantEnum.getCode()
+            );
+            createOrderRecord(tenantId, payAmount, orderNo, tenantEnum, orderState, payStudentIds);
+            log.info("tenant pay >>>>> " + JSON.toJSONString(payMap));
+        } else {
+            //已支付 直接激活
+            orderState = 1;
+
+        }
+        return payMap;
+    }
+
+    private Integer updateCloudTeacherOrder(String payStudentIds) {
+        return cloudTeacherOrderDao.updateCloudTeacherOrder(payStudentIds);
+    }
+
+    public Msg payNotify(Msg msg) {
+        log.info("tenant orderNotify >>>>> " + msg.toString());
+        msg.setMsg("fail");
+        Map<String, String> notifyMap = JSON.parseObject(msg.getResponseParameters(), Map.class);
+        CloudTeacherOrderRecord record = cloudTeacherOrderRecordService.getOne(
+                new QueryWrapper<CloudTeacherOrderRecord>().eq("order_no_", notifyMap.get("orderNo")));
+        record.setOrderNo(notifyMap.get("merMerOrderNo"));
+        record.setTransNo(notifyMap.get("orderNo"));
+        String channelType = notifyMap.get("channelType").equals("1") ? "WXPay" : (notifyMap.get("channelType").equals("2") ? "Alipay" : "quickPay");
+        record.setPayChannel(channelType);
+
+        //支付中订单存在,更新状态
+        if (msg.getResponseType().equals("1") && notifyMap.size() > 0 && msg.getCode().equals("88")) {
+            //tradeState 88就是正确的 其他错误的
+            //            DealStatusEnum
+            //            notifyMap.put("totalMoney", notifyMap.get("payAmount"));
+            if (record.getPayStudentIds() != null) {
+                this.updateCloudTeacherOrder(record.getPayStudentIds());
+            }
+            record.setOrderState(1);
+            msg.setCode("000000");
+            msg.setMsg("success");
+        } else {
+            //支付失败
+            record.setOrderState(2);
+        }
+        cloudTeacherOrderRecordService.update(record, new QueryWrapper<CloudTeacherOrderRecord>()
+                .eq("order_no_", record.getOrderNo()));
+        log.info("tenant orderNotify return>>>>> " + msg.toString());
+        return msg;
+    }
+
+    private void createOrderRecord(Integer tenantId, BigDecimal payAmount, String orderNo, TenantOrderRecordEnum tenantEnum, Integer orderState, String payStudentIds) {
+        LocalDateTime now = LocalDateTime.now();
+        CloudTeacherOrderRecord record = new CloudTeacherOrderRecord();
+        record.setTenantId(tenantId);
+        record.setOrderNo(orderNo);
+        record.setOrderType(tenantEnum.getCode());
+        record.setPaymentChannel(PaymentChannelEnum.ADAPAY.getCode());
+        record.setExpectAmount(payAmount);
+        record.setActualAmount(payAmount);
+        record.setOrderState(orderState);
+        record.setPayDate(now.toLocalDate().toDate());
+        record.setPayTime(now.toDate());
+        record.setCreatedTime(now.toDate());
+        record.setPayStudentIds(payStudentIds);
+        cloudTeacherOrderRecordService.save(record);
     }
 
     @Override

+ 6 - 1
mec-biz/src/main/resources/config/mybatis/CloudTeacherOrderMapper.xml

@@ -115,6 +115,10 @@
         where id_ = #{id} AND version_ = #{version}
     </update>
 
+    <update id="updateCloudTeacherOrder">
+        update cloud_teacher_order set status_ = 2 where student_id_ in (#{payStudentIds})
+    </update>
+
     <!-- 全查询 -->
     <select id="findAll" resultMap="CloudTeacherOrder">
         SELECT *
@@ -290,7 +294,8 @@
                    else ''
                end as typeLabel,
                cto.time_ as time,
-               sj.name as subject,
+               sj.id_ as subject,
+               sj.name_ as subjectLabel,
                u.tenant_id_ as tenantId,
                u.username_ as name,
                u.phone_ as phone

+ 37 - 0
mec-biz/src/main/resources/config/mybatis/CloudTeacherOrderRecordMapper.xml

@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ym.mec.biz.dal.dao.CloudTeacherOrderRecordDao">
+    <resultMap id="BaseResultMap" type="com.ym.mec.biz.dal.entity.CloudTeacherOrderRecord">
+        <id column="id_" jdbcType="INTEGER" property="id"/>
+        <result column="tenant_id_" jdbcType="INTEGER" property="tenantId"/>
+        <result column="order_no_" jdbcType="VARCHAR" property="orderNo"/>
+        <result column="trans_no_" jdbcType="VARCHAR" property="transNo"/>
+        <result column="order_type_" jdbcType="VARCHAR" property="orderType"/>
+        <result column="payment_channel_" jdbcType="VARCHAR" property="paymentChannel"/>
+        <result column="pay_channel_" jdbcType="VARCHAR" property="payChannel"/>
+        <result column="expect_amount" jdbcType="VARCHAR" property="expectAmount"/>
+        <result column="actual_amount" jdbcType="VARCHAR" property="actualAmount"/>
+        <result column="order_state_" jdbcType="INTEGER" property="orderState"/>
+        <result column="pay_date_" jdbcType="TIMESTAMP" property="payDate"/>
+        <result column="pay_time_" jdbcType="TIMESTAMP" property="payTime"/>
+        <result column="created_time_" jdbcType="TIMESTAMP" property="createdTime"/>
+        <result column="pay_student_ids_" jdbcType="VARCHAR" property="payStudentIds"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id_, tenant_id_, order_no_, trans_no_, order_type_, payment_channel_, pay_channel_, expect_amount, actual_amount, order_state_, pay_date_, pay_time_, created_time_, pay_student_ids_
+    </sql>
+
+    <insert id="insertBatch" keyColumn="id_" keyProperty="id" useGeneratedKeys="true"
+            parameterType="com.ym.mec.biz.dal.entity.CloudTeacherOrderRecord">
+        insert into cloud_teacher_order_record(tenant_id_, order_no_, trans_no_, order_type_, payment_channel_,
+        pay_channel_, expect_amount, actual_amount, order_state_, pay_date_, pay_time_, created_time_, pay_student_ids_)
+        values
+        <foreach collection="entities" item="entity" separator=",">
+            (#{entity.tenantId}, #{entity.orderNo}, #{entity.transNo}, #{entity.orderType}, #{entity.paymentChannel},
+            #{entity.payChannel}, #{entity.expectAmount}, #{entity.actualAmount}, #{entity.orderState},
+            #{entity.payDate}, #{entity.payTime}, #{entity.createdTime}, #{entity.payStudentId})
+        </foreach>
+    </insert>
+
+</mapper>

+ 26 - 8
mec-web/src/main/java/com/ym/mec/web/controller/CloudTeacherOrderController.java

@@ -10,14 +10,12 @@ import com.ym.mec.biz.service.CloudTeacherOrderService;
 import com.ym.mec.biz.service.TenantConfigService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.thirdparty.yqpay.Msg;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import java.sql.Wrapper;
 import java.util.List;
@@ -40,10 +38,30 @@ public class CloudTeacherOrderController extends BaseController {
     @ApiOperation(value ="查询未激活团练宝用户")
     @PostMapping("/queryInactive")
     // @PreAuthorize("@pcs.hasPermissions('cloudTeacherOrder/queryUnActive')")
-    public Object queryInactive(CloudTeacherOrderQueryInfo cloudTeacherOrderQueryInfo) throws Exception {
-
+    public Object queryInactive(CloudTeacherOrderQueryInfo cloudTeacherOrderQueryInfo) {
         cloudTeacherOrderQueryInfo.setStatus(1);
-        PageInfo<CloudTeacherStudent> pg = cloudTeacherOrderService.queryInactive(cloudTeacherOrderQueryInfo);
-        return succeed(pg);
+        return succeed(cloudTeacherOrderService.queryInactive(cloudTeacherOrderQueryInfo));
+    }
+
+    @ApiOperation(value ="查询已激活团练宝用户")
+    @PostMapping("/queryActive")
+    // @PreAuthorize("@pcs.hasPermissions('cloudTeacherOrder/queryActive')")
+    public Object queryActive(CloudTeacherOrderQueryInfo cloudTeacherOrderQueryInfo) {
+        cloudTeacherOrderQueryInfo.setStatus(2);
+        return succeed(cloudTeacherOrderService.queryInactive(cloudTeacherOrderQueryInfo));
+    }
+
+    @ApiOperation(value ="激活团练宝用户")
+    @PostMapping("/pay")
+    // @PreAuthorize("@pcs.hasPermissions('cloudTeacherOrder/pay')")
+    public Object pay(List<CloudTeacherStudent> cloudTeacherStudents) throws Exception {
+        return succeed(cloudTeacherOrderService.pay(cloudTeacherStudents));
+    }
+
+    @ApiOperation(value ="支付回调")
+    @PostMapping("/payNotify")
+    // @PreAuthorize("@pcs.hasPermissions('cloudTeacherOrder/payNotify')")
+    public Msg payNotify(@ModelAttribute Msg msg) {
+        return cloudTeacherOrderService.payNotify(msg);
     }
 }

+ 27 - 0
mec-web/src/main/java/com/ym/mec/web/controller/CloudTeacherOrderRecordController.java

@@ -0,0 +1,27 @@
+package com.ym.mec.web.controller;
+
+
+import com.ym.mec.biz.dal.entity.CloudTeacherOrderRecord;
+import com.ym.mec.biz.service.CloudTeacherOrderRecordService;
+import org.springframework.web.bind.annotation.*;
+import com.ym.mec.common.controller.BaseController;
+
+import javax.annotation.Resource;
+
+/**
+ * 机构付款记录表(CloudTeacherOrderRecord)表控制层
+ *
+ * @author makejava
+ * @since 2021-12-21 18:13:47
+ */
+@RestController
+@RequestMapping("/cloudTeacherOrderRecord")
+public class CloudTeacherOrderRecordController extends BaseController {
+    /**
+     * 服务对象
+     */
+    @Resource
+    private CloudTeacherOrderRecordService cloudTeacherOrderRecordService;
+
+}
+