فهرست منبع

增加小班课报名接口

周箭河 5 سال پیش
والد
کامیت
290bc307f8

+ 18 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupDao.java

@@ -30,10 +30,10 @@ public interface ClassGroupDao extends BaseDAO<Integer, ClassGroup> {
     List<ClassGroup> findAllMixClassGroup(@Param("musicGroupId") Integer musicGroupId);
 
     /**
+     * @return java.util.List<com.ym.mec.biz.dal.entity.ClassGroup>
      * @Author: Joburgess
      * @Date: 2019/10/8
      * @params [musicGroupId]
-     * @return java.util.List<com.ym.mec.biz.dal.entity.ClassGroup>
      * @describe 获取所有班级
      */
     List<ClassGroup> findAllClassGroupByMusicGroup(@Param("musicGroupId") Long musicGroupId);
@@ -96,6 +96,7 @@ public interface ClassGroupDao extends BaseDAO<Integer, ClassGroup> {
 
     /**
      * 获取乐团所有班级列表
+     *
      * @param musicGroupId
      * @return
      */
@@ -103,6 +104,7 @@ public interface ClassGroupDao extends BaseDAO<Integer, ClassGroup> {
 
     /**
      * 获取学生所购买课程列表
+     *
      * @param params
      * @return
      */
@@ -110,6 +112,7 @@ public interface ClassGroupDao extends BaseDAO<Integer, ClassGroup> {
 
     /**
      * 获取学员所在群组信息
+     *
      * @param userId
      * @param search
      * @return
@@ -118,6 +121,7 @@ public interface ClassGroupDao extends BaseDAO<Integer, ClassGroup> {
 
     /**
      * 获取vip课的学生名称列表
+     *
      * @param musicGroupId
      * @return
      */
@@ -125,6 +129,7 @@ public interface ClassGroupDao extends BaseDAO<Integer, ClassGroup> {
 
     /**
      * 获取课程下的学员列表
+     *
      * @param musicGroupId
      * @return
      */
@@ -132,6 +137,7 @@ public interface ClassGroupDao extends BaseDAO<Integer, ClassGroup> {
 
     /**
      * count学员购买列表
+     *
      * @param params
      * @return
      */
@@ -139,6 +145,7 @@ public interface ClassGroupDao extends BaseDAO<Integer, ClassGroup> {
 
     /**
      * 分页查询学员购买列表
+     *
      * @param params
      * @return
      */
@@ -146,17 +153,26 @@ public interface ClassGroupDao extends BaseDAO<Integer, ClassGroup> {
 
     /**
      * COUNT学员购买列表
+     *
      * @param params
      * @return
      */
     int countCoursePage(Map<String, Object> params);
 
     /**
+     * @return int
      * @Author: Joburgess
      * @Date: 2019/10/3
      * @params [classGroupId]
-     * @return int
      * @describe 统计班级人数
      */
     int countClassStudent(Long classGroupId);
+
+    /**
+     * 班级增加学生人数
+     *
+     * @param classGroup
+     * @return
+     */
+    int addStudentNum(@Param("classGroup") ClassGroup classGroup);
 }

+ 8 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/ClassGroupService.java

@@ -155,4 +155,12 @@ public interface ClassGroupService extends BaseService<Integer, ClassGroup> {
      * @return
      */
     PageInfo<StudentPayInfoDto> queryStudentPayLog(StudentPayLogQueryInfo studentPayLogQueryInfo);
+
+    /**
+     * 班级添加学生
+     * @param classGroup
+     * @param userId
+     * @return
+     */
+    ClassGroup addStudent(ClassGroup classGroup,int userId);
 }

+ 34 - 17
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java

@@ -350,20 +350,20 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             pageInfo.setTotal(count);
             params.put("offset", pageInfo.getOffset());
             courseListDtos = classGroupDao.queryCoursePage(params);
-            courseListDtos.forEach(e->{
-                if("VIP".equals(e.getTeachMode())){
+            courseListDtos.forEach(e -> {
+                if ("VIP".equals(e.getTeachMode())) {
                     //获取vip课的学生名称列表
                     List<String> vipStuNames = classGroupDao.findVipStuNames(e.getMusicGroupId());
-                    if(vipStuNames != null && vipStuNames.size() > 0){
-                        StringUtils.join(vipStuNames,",");
+                    if (vipStuNames != null && vipStuNames.size() > 0) {
+                        StringUtils.join(vipStuNames, ",");
                         e.setStudentNames(StringUtils.join());
                     }
-                }else {
+                } else {
                     //获取学员乐团课的续费状态
-                    MusicGroupStudentFee musicGroupStudentFee = musicGroupStudentFeeDao.findByUser(userId,e.getMusicGroupId());
-                    if(musicGroupStudentFee != null){
-                        int i = DateUtil.daysBetween(new Date(),musicGroupStudentFee.getNextPaymentDate());
-                        e.setRenewStatus(i < 8?0:1);
+                    MusicGroupStudentFee musicGroupStudentFee = musicGroupStudentFeeDao.findByUser(userId, e.getMusicGroupId());
+                    if (musicGroupStudentFee != null) {
+                        int i = DateUtil.daysBetween(new Date(), musicGroupStudentFee.getNextPaymentDate());
+                        e.setRenewStatus(i < 8 ? 0 : 1);
                     }
                 }
             });
@@ -377,17 +377,17 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 
 
     @Override
-    public List<ImGroupModel> queryUserGroups(Integer userId,String search) {
-        List<ImGroupModel> imGroupModels = musicGroupDao.queryUserGroups(userId,search);
-        List<ImGroupModel> imGroupModels1 = classGroupDao.queryUserGroups(userId,search);
-        if(imGroupModels.size() < 1 || imGroupModels == null){
+    public List<ImGroupModel> queryUserGroups(Integer userId, String search) {
+        List<ImGroupModel> imGroupModels = musicGroupDao.queryUserGroups(userId, search);
+        List<ImGroupModel> imGroupModels1 = classGroupDao.queryUserGroups(userId, search);
+        if (imGroupModels.size() < 1 || imGroupModels == null) {
             return imGroupModels1;
-        }else {
-            imGroupModels.forEach(e->{
+        } else {
+            imGroupModels.forEach(e -> {
                 e.setCount(musicGroupDao.countMusicGroupUserNum(e.getId()));
                 e.setId("mg" + e.getId());
             });
-            imGroupModels1.forEach(e->{
+            imGroupModels1.forEach(e -> {
                 e.setId("cg" + e.getId());
             });
             imGroupModels.addAll(imGroupModels1);
@@ -397,7 +397,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 
     @Override
     public List<ImUserModel> findGroupUsers(String groupId) {
-        if(groupId.startsWith("mg")){
+        if (groupId.startsWith("mg")) {
             return musicGroupDao.findGroupUsers(groupId.substring(2));
         }
         return classGroupDao.findGroupUsers(groupId.substring(2));
@@ -421,4 +421,21 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         pageInfo.setRows(dataList);
         return pageInfo;
     }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public ClassGroup addStudent(ClassGroup classGroup, int userId) {
+        Date date = new Date();
+        //增加班级人数
+        classGroup.setCreateTime(date);
+        classGroupDao.addStudentNum(classGroup);
+        //插入关联关系
+        ClassGroupStudentMapper classGroupStudentMapper = new ClassGroupStudentMapper();
+        classGroupStudentMapper.setClassGroupId(classGroup.getId());
+        classGroupStudentMapper.setUserId(userId);
+        classGroupStudentMapper.setStatus(ClassGroupStudentStatusEnum.NORMAL);
+        classGroupStudentMapper.setCreateTime(date);
+        classGroupStudentMapperService.insert(classGroupStudentMapper);
+        return classGroup;
+    }
 }

+ 5 - 0
mec-biz/src/main/resources/config/mybatis/ClassGroupMapper.xml

@@ -397,4 +397,9 @@
         class_group cg
         WHERE cg.music_group_id_=#{musicGroupId} AND del_flag_='0'
     </select>
+
+    <!-- 增加实际学生人数 -->
+    <update id="addStudentNum" parameterType="com.ym.mec.biz.dal.entity.ClassGroup">
+        UPDATE class_group SET student_num_ = student_num_+1,update_time_=#{updateTime} WHERE id_ = #{id} AND student_num_=#{studentNum}
+    </update>
 </mapper>

+ 56 - 0
mec-student/src/main/java/com/ym/mec/student/controller/ClassGroupController.java

@@ -0,0 +1,56 @@
+package com.ym.mec.student.controller;
+
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dao.ClassGroupStudentMapperDao;
+import com.ym.mec.biz.dal.entity.ClassGroup;
+import com.ym.mec.biz.dal.entity.ClassGroupStudentMapper;
+import com.ym.mec.biz.dal.enums.ClassGroupTypeEnum;
+import com.ym.mec.biz.service.ClassGroupService;
+import com.ym.mec.biz.service.ClassGroupStudentMapperService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
+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.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@RequestMapping("classGroup")
+@Api(tags = "班级服务")
+@RestController
+public class ClassGroupController extends BaseController {
+
+    @Resource
+    private SysUserFeignService sysUserFeignService;
+
+    @Autowired
+    private ClassGroupService classGroupService;
+    @Autowired
+    private ClassGroupStudentMapperDao classGroupStudentMapperDao;
+
+    @ApiOperation(value = "小班课报名")
+    @PostMapping("/highReg")
+    @ApiImplicitParams({@ApiImplicitParam(name = "classGroupId", value = "班级id", required = true, dataType = "int")})
+    public HttpResponseResult highReg(int classGroupId) throws Exception {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        ClassGroup classGroup = classGroupService.get(classGroupId);
+        if (classGroup == null || !classGroup.getType().equals(ClassGroupTypeEnum.HIGH) || classGroup.getDelFlag().equals(1)) {
+            return failed("报名的班级不存在");
+        }
+        if (classGroup.getStudentNum().compareTo(classGroup.getExpectStudentNum()) >= 0) {
+            return failed("班级人数已满");
+        }
+        ClassGroupStudentMapper classGroupStudentMapper = classGroupStudentMapperDao.query(classGroupId, sysUser.getId());
+        if (classGroupStudentMapper != null) {
+            return succeed(classGroup);
+        }
+        classGroupService.addStudent(classGroup, sysUser.getId());
+        return succeed("报名成功");
+    }
+}

+ 75 - 0
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/union/H5.java

@@ -0,0 +1,75 @@
+package com.ym.mec.thirdparty.union;
+
+import com.alibaba.fastjson.JSONObject;
+
+import java.io.ByteArrayInputStream;
+import java.net.URLDecoder;
+import java.net.URLEncoder;
+import java.security.InvalidKeyException;
+import java.security.NoSuchAlgorithmException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.UUID;
+
+import javax.crypto.Mac;
+import javax.crypto.spec.SecretKeySpec;
+
+import org.apache.commons.codec.binary.Base64;
+import org.apache.commons.codec.digest.DigestUtils;
+import org.apache.commons.lang.RandomStringUtils;
+import org.apache.commons.lang.time.DateFormatUtils;
+import org.apache.http.HttpEntity;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.util.EntityUtils;
+
+/**
+ * 银联商务H5支付
+ */
+public class H5 {
+    static String appId = "10037e6f66f2d0f901672aa27d690006";
+    static String appKey = "47ace12ae3b348fe93ab46cee97c6fde";
+    static String timestamp = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
+    static String nonce = UUID.randomUUID().toString().replace("-", "");
+
+    public static byte[] hmacSHA256(byte[] data, byte[] key) throws InvalidKeyException, NoSuchAlgorithmException {
+        String algorithm = "HmacSHA256";
+        Mac mac = Mac.getInstance(algorithm);
+        mac.init(new SecretKeySpec(key, algorithm));
+        return mac.doFinal(data);
+    }
+
+    public static String getOpenBodySigForNetpay(String appId, String appKey, String timestamp, String nonce, String content) throws Exception {
+        //String bodyDigest = DigestUtils.sha256Hex(URLDecoder.decode(content, "UTF-8"));
+        String bodyDigest = DigestUtils.sha256Hex(content);
+        System.out.println(bodyDigest);
+        String str1_C = appId + timestamp + nonce + bodyDigest;
+        byte[] localSignature = hmacSHA256(str1_C.getBytes(), appKey.getBytes());
+        return ("authorization=OPEN-FORM-PARAM" + "&appId=" + appId + "&timestamp=" + timestamp + "&nonce=" + nonce + "&content=" + URLEncoder.encode(content, "UTF-8") + "&signature=" + URLEncoder.encode(Base64.encodeBase64String(localSignature), "UTF-8"));
+    }
+
+    public static void main(String[] args) throws Exception {
+        JSONObject json = new JSONObject();
+
+        json.put("instMid", "H5DEFAULT");
+        json.put("mid", "898460107420248");
+        json.put("tid", "88880001");
+        json.put("totalAmount", 20000);
+
+        json.put("orderDesc", "345");
+        // json.put("bizType", "B2B");
+        json.put("merOrderId", "1017" + new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()) + RandomStringUtils.randomNumeric(7));
+        json.put("requestTimestamp", DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
+        json.put("returnUrl","http://dev.dayaedu.com");
+
+
+        String param = getOpenBodySigForNetpay(appId, appKey, timestamp, nonce, json.toString());
+        System.out.println("http://58.247.0.18:29015/v1/netpay/webpay/pay?" + param);
+//        GetOpenBodySig.sendGet("http://58.247.0.18:29015/v1/netpay/webpay/pay?"+param);
+        System.out.println(json.toString());
+    }
+}
+

+ 63 - 0
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/union/Mp.java

@@ -0,0 +1,63 @@
+package com.ym.mec.thirdparty.union;
+
+import com.alibaba.fastjson.JSONObject;
+import org.apache.commons.codec.binary.Base64;
+import org.apache.commons.codec.digest.DigestUtils;
+import org.apache.commons.lang.RandomStringUtils;
+import org.apache.commons.lang.time.DateFormatUtils;
+
+import javax.crypto.Mac;
+import javax.crypto.spec.SecretKeySpec;
+import java.net.URLEncoder;
+import java.security.InvalidKeyException;
+import java.security.NoSuchAlgorithmException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.UUID;
+
+/**
+ * 银联商务公众号支付
+ */
+public class Mp {
+    static String appId = "10037e6f66f2d0f901672aa27d690006";
+    static String appKey = "47ace12ae3b348fe93ab46cee97c6fde";
+    static String timestamp = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
+    static String nonce = UUID.randomUUID().toString().replace("-", "");
+
+    public static byte[] hmacSHA256(byte[] data, byte[] key) throws InvalidKeyException, NoSuchAlgorithmException {
+        String algorithm = "HmacSHA256";
+        Mac mac = Mac.getInstance(algorithm);
+        mac.init(new SecretKeySpec(key, algorithm));
+        return mac.doFinal(data);
+    }
+
+    public static String getOpenBodySigForNetpay(String appId, String appKey, String timestamp, String nonce, String content) throws Exception {
+        //String bodyDigest = DigestUtils.sha256Hex(URLDecoder.decode(content, "UTF-8"));
+        String bodyDigest = DigestUtils.sha256Hex(content);
+        System.out.println(bodyDigest);
+        String str1_C = appId + timestamp + nonce + bodyDigest;
+        byte[] localSignature = hmacSHA256(str1_C.getBytes(), appKey.getBytes());
+        return ("authorization=OPEN-FORM-PARAM" + "&appId=" + appId + "&timestamp=" + timestamp + "&nonce=" + nonce + "&content=" + URLEncoder.encode(content, "UTF-8") + "&signature=" + URLEncoder.encode(Base64.encodeBase64String(localSignature), "UTF-8"));
+    }
+
+    public static void main(String[] args) throws Exception {
+        JSONObject json = new JSONObject();
+
+        json.put("instMid", "YUEDANDEFAULT");
+        json.put("mid", "898460107420248");
+        json.put("tid", "88880001");
+        json.put("totalAmount", 20000);
+
+        json.put("orderDesc", "345");
+        // json.put("bizType", "B2B");
+        json.put("merOrderId", "1017" + new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()) + RandomStringUtils.randomNumeric(7));
+        json.put("requestTimestamp", DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
+
+
+        String param = getOpenBodySigForNetpay(appId, appKey, timestamp, nonce, json.toString());
+        System.out.println("http://58.247.0.18:29015/v1/netpay/webpay/pay?" + param);
+//        GetOpenBodySig.sendGet("http://58.247.0.18:29015/v1/netpay/webpay/pay?"+param);
+        System.out.println(json.toString());
+    }
+}
+

+ 64 - 0
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/union/Qrcode.java

@@ -0,0 +1,64 @@
+package com.ym.mec.thirdparty.union;
+
+import com.alibaba.fastjson.JSONObject;
+import org.apache.commons.codec.binary.Base64;
+import org.apache.commons.codec.digest.DigestUtils;
+import org.apache.commons.lang.RandomStringUtils;
+import org.apache.commons.lang.time.DateFormatUtils;
+
+import javax.crypto.Mac;
+import javax.crypto.spec.SecretKeySpec;
+import java.net.URLEncoder;
+import java.security.InvalidKeyException;
+import java.security.NoSuchAlgorithmException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.UUID;
+
+/**
+ * 银联商务主扫
+ */
+public class Qrcode {
+    static String appId = "10037e6f66f2d0f901672aa27d690006";
+    static String appKey = "47ace12ae3b348fe93ab46cee97c6fde";
+    static String timestamp = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
+    static String nonce = UUID.randomUUID().toString().replace("-", "");
+
+    public static byte[] hmacSHA256(byte[] data, byte[] key) throws InvalidKeyException, NoSuchAlgorithmException {
+        String algorithm = "HmacSHA256";
+        Mac mac = Mac.getInstance(algorithm);
+        mac.init(new SecretKeySpec(key, algorithm));
+        return mac.doFinal(data);
+    }
+
+    public static String getOpenBodySigForNetpay(String appId, String appKey, String timestamp, String nonce, String content) throws Exception {
+        //String bodyDigest = DigestUtils.sha256Hex(URLDecoder.decode(content, "UTF-8"));
+        String bodyDigest = DigestUtils.sha256Hex(content);
+        System.out.println(bodyDigest);
+        String str1_C = appId + timestamp + nonce + bodyDigest;
+        byte[] localSignature = hmacSHA256(str1_C.getBytes(), appKey.getBytes());
+        return ("authorization=OPEN-FORM-PARAM" + "&appId=" + appId + "&timestamp=" + timestamp + "&nonce=" + nonce + "&content=" + URLEncoder.encode(content, "UTF-8") + "&signature=" + URLEncoder.encode(Base64.encodeBase64String(localSignature), "UTF-8"));
+    }
+
+    public static void main(String[] args) throws Exception {
+        JSONObject json = new JSONObject();
+
+        json.put("instMid", "QRPAYDEFAULT");
+        json.put("mid", "898460107420248");
+        json.put("tid", "88880001");
+        json.put("totalAmount", 20000);
+
+        json.put("orderDesc", "345");
+        // json.put("bizType", "B2B");
+        json.put("merOrderId", "1017" + new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()) + RandomStringUtils.randomNumeric(7));
+        json.put("requestTimestamp", DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
+        json.put("returnUrl","http://dev.dayaedu.com");
+
+
+        String param = getOpenBodySigForNetpay(appId, appKey, timestamp, nonce, json.toString());
+        System.out.println("http://58.247.0.18:29015/v1/netpay/webpay/pay?" + param);
+//        GetOpenBodySig.sendGet("http://58.247.0.18:29015/v1/netpay/webpay/pay?"+param);
+        System.out.println(json.toString());
+    }
+}
+