Commit e4cafd89 authored by 法拉51246's avatar 法拉51246

1

parent 8c0964dc
......@@ -349,6 +349,24 @@ public class ApiLoginController {
return AjaxResult.success(jsonObject);
}
/**
* 给邀请人发送积分
*
* @param higherUserId 参数
* @return 结果
*/
@RepeatSubmit
@GetMapping("/giveScore")
public AjaxResult giveScore(Long higherUserId) {
// 参数校验
if (higherUserId==null) {
return AjaxResult.error();
}
JSONObject jsonObject = tbStudentService.giveScore(higherUserId);
return AjaxResult.success(jsonObject);
}
/**
* 小程序注册
*
......@@ -372,7 +390,6 @@ public class ApiLoginController {
* @param memberUserId 用户id
* @return 结果
*/
@RepeatSubmit
@GetMapping("/getQrCode")
public AjaxResult getQrCode(String memberUserId){
try {
......
......@@ -214,7 +214,7 @@ wx:
# appSecret: 4778276c6b80b6e6745f37e04f11d991
appSecret: af6b5009cdaebc647c5d6327ad25e848
# 小程序码跳转页面
wxPath: pages/homePage/index?higherUserId=
wxPath: pages/registerIndex/registerIndex?higherUserId=
# 二维码跳转
qrCodeLink: https://server.xuexin.com/miniprogram/
# 小程序发货
......
......@@ -30,6 +30,9 @@ public class MemberUserLoginDTO implements Serializable {
@NotBlank(message = "手机号code不能为空", groups = {MemberUserLogin.class,MemberUserRegister.class})
private String phoneCode;
/** 邀请人id */
private Long higherUserId;
/** 头像 */
// @NotBlank(message = "头像不能为空", groups = {MemberUserRegister.class})
private String avatarUrl;
......
......@@ -150,6 +150,8 @@ public interface TbExamRegistrationMapper
TbExamRegistration selectTbExamRegistrationByCode(TbExamRegistration tbExamRegistration);
TbExamRegistration selectTbExamRegistrationByBatchIndex(TbExamRegistration tbExamRegistration);
int importDataList(@Param("list") List<TbExamRegistration> listTbExamRegistration);
int updateTbExamRegistrationByOrderNos(@Param("orderNos") List<String> orderNos);
......
......@@ -128,6 +128,7 @@ public interface ITbStudentService
* @return JSONObject
*/
JSONObject memberUserLogin(MemberUserLoginDTO memberUserLoginDTO);
JSONObject giveScore(Long higherUserId);
/**
* 小程序注册
......
......@@ -239,8 +239,8 @@ public class TbExamRegistrationServiceImpl implements ITbExamRegistrationService
tbExamRegistration.setMemberUserId(userId);
}
//校验当前数据是否在库中已存在
TbExamRegistration tbExamRegistrations = tbExamRegistrationMapper.selectTbExamRegistrationByCode(tbExamRegistration);
if(ObjectUtils.isNotEmpty(tbExamRegistrations) && tbExamRegistrations.getIsPay() == 1){
TbExamRegistration tbExamRegistrations = tbExamRegistrationMapper.selectTbExamRegistrationByBatchIndex(tbExamRegistration);
if(ObjectUtils.isNotEmpty(tbExamRegistrations)){
// 数据已存在,记录失败原因
throw new ServiceException("已报名");
}
......@@ -1449,8 +1449,8 @@ public class TbExamRegistrationServiceImpl implements ITbExamRegistrationService
}
//校验当前数据是否在库中已存在
TbExamRegistration tbExamRegistrations = tbExamRegistrationMapper.selectTbExamRegistrationByCode(tbExamRegistration);
if(ObjectUtils.isNotEmpty(tbExamRegistrations) && tbExamRegistrations.getIsPay() == 1){
TbExamRegistration tbExamRegistrations = tbExamRegistrationMapper.selectTbExamRegistrationByBatchIndex(tbExamRegistration);
if(ObjectUtils.isNotEmpty(tbExamRegistrations)){//根据批次batchIndex和MemberUserId和考试Id查出数据,同批次不能重复报名
// 数据已存在,记录失败原因
erreList.put(item.getContactInformation(), "已报名");
continue;
......
......@@ -15,10 +15,14 @@ import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.common.weixin.config.WeiXinConfig;
import com.ruoyi.common.weixin.config.WeiXinXcxMemberConfig;
import com.ruoyi.common.weixin.utils.WeiXinXcxMemberUtils;
import com.ruoyi.hezhi.domain.TbConfig;
import com.ruoyi.hezhi.domain.TbMemberScore;
import com.ruoyi.hezhi.domain.TbStudent;
import com.ruoyi.hezhi.domain.dto.ImportStudentDTO;
import com.ruoyi.hezhi.domain.dto.MemberUserLoginDTO;
import com.ruoyi.hezhi.domain.dto.StudentDTO;
import com.ruoyi.hezhi.mapper.TbConfigMapper;
import com.ruoyi.hezhi.mapper.TbMemberScoreMapper;
import com.ruoyi.hezhi.mapper.TbStudentMapper;
import com.ruoyi.hezhi.service.ITbSmsCodeService;
import com.ruoyi.hezhi.service.ITbStudentService;
......@@ -34,6 +38,7 @@ import javax.annotation.Resource;
import java.awt.*;
import java.io.BufferedInputStream;
import java.io.PrintWriter;
import java.math.BigDecimal;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.*;
......@@ -65,6 +70,10 @@ public class TbStudentServiceImpl implements ITbStudentService {
private SqlSessionFactory sqlSessionFactory;
@Resource
private WeiXinConfig weiXinConfig;
@Resource
private TbConfigMapper tbConfigMapper;
@Resource
private TbMemberScoreMapper tbMemberScoreMapper;
/**
* 查询学员
......@@ -621,6 +630,7 @@ public class TbStudentServiceImpl implements ITbStudentService {
String loginCode = memberUserLoginDTO.getLoginCode();
String phoneCode = memberUserLoginDTO.getPhoneCode();
Long higherUserId = memberUserLoginDTO.getHigherUserId();
// 微信授权获取openId
// String openId = loginCode;
......@@ -683,12 +693,57 @@ public class TbStudentServiceImpl implements ITbStudentService {
student.setDelFlag(0);
tbStudentMapper.insertTbStudent(student);
//
TbConfig aboutIntegral = tbConfigMapper.selectTbConfigByIdentifying("aboutIntegral");
// 邀请人送积分数
String scoreString = aboutIntegral.getConfigString4();
//转换为Decimal
BigDecimal score = new BigDecimal(scoreString);
if (score.compareTo(BigDecimal.ZERO) > 0 && higherUserId != null) {//不是0积分并且邀请人id不为空
// 给邀请人赠送积分
TbMemberScore memberScore = new TbMemberScore();
memberScore.setMemberUserId(higherUserId);
memberScore.setName("邀请用户赠送积分");
memberScore.setScore(score);
memberScore.setType(2);
memberScore.setIncomeExpenses(1);
memberScore.setCreateTime(DateUtils.getNowDate());
tbMemberScoreMapper.insertTbMemberScore(memberScore);
}
// 登录成功
result.put("AuthToken", student.getStudentId());
}
return result;
}
@Override
@Transactional(rollbackFor = Exception.class)
public JSONObject giveScore(Long higherUserId) {
JSONObject result = new JSONObject();
TbConfig aboutIntegral = tbConfigMapper.selectTbConfigByIdentifying("aboutIntegral");
// 邀请人送积分数
String scoreString = aboutIntegral.getConfigString4();
//转换为Decimal
BigDecimal score = new BigDecimal(scoreString);
if (score.compareTo(BigDecimal.ZERO) > 0 && higherUserId != null) {//不是0积分并且邀请人id不为空
// 给邀请人赠送积分
TbMemberScore memberScore = new TbMemberScore();
memberScore.setMemberUserId(higherUserId);
memberScore.setName("邀请用户赠送积分");
memberScore.setScore(score);
memberScore.setType(2);
memberScore.setIncomeExpenses(1);
memberScore.setCreateTime(DateUtils.getNowDate());
tbMemberScoreMapper.insertTbMemberScore(memberScore);
}
return result;
}
@Override
public JSONObject memberUserRegister(MemberUserLoginDTO memberUserLoginDTO) {
JSONObject result = new JSONObject();
......
......@@ -1262,6 +1262,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
exam_registration_id desc
limit 1
</select>
<select id="selectTbExamRegistrationByBatchIndex" resultType="com.ruoyi.hezhi.domain.TbExamRegistration" resultMap="TbExamRegistrationResult">
<include refid="selectTbExamRegistrationVo" />
where member_user_id = #{memberUserId}
and exam_id=#{examId}
and exam_batch_index=#{examBatchIndex}
order by
exam_registration_id desc
limit 1
</select>
<select id="selectCourseIsPay" resultType="com.ruoyi.hezhi.domain.TbExamRegistration">
select tec.course_id as courseId,tec.exam_id as examId,ter.is_pay as isPay,
case when ter.is_pay = 1 then '已报名'
......
......@@ -153,7 +153,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
member_score_id AS memberScoreId,
member_user_id AS memberUserId,
CONVERT(IFNULL(name, ''), CHAR) AS name,
CONVERT(IFNULL(FLOOR(ifnull(score, 0)), ''), CHAR) AS score,
CONVERT(IFNULL(ifnull(score, 0), ''), CHAR) AS score,
type,
income_expenses AS incomeExpenses,
ifnull(order_id, 0) AS orderId,
......
......@@ -5,7 +5,7 @@
plain
size="mini"
@click="examCourseAdd"
>添加课程</el-button>
>添加职业名称</el-button>
<el-table
:data="examCourseList"
style="width: 100%">
......@@ -21,9 +21,9 @@
</el-select>
</template>
</el-table-column>
<el-table-column prop="courseId" label="课程" align="center">
<el-table-column prop="courseId" label="职业名称" align="center">
<template slot-scope="scope">
<el-select v-model="scope.row.courseId" placeholder="请选择课程">
<el-select v-model="scope.row.courseId" placeholder="请选择职业名称">
<el-option
v-for="(item, index) in getCourseOptions(scope.$index)"
:key="index"
......
......@@ -151,6 +151,10 @@
<el-form-item label="每支付X元赠送1积分" prop="configString3" v-if="form.identifying === 'aboutIntegral'">
<el-input v-model="form.configString3" placeholder="请输入" type="number" :min="0.01" :step="0.01" />
</el-form-item>
<!-- 邀请人获得积分数量-->
<el-form-item label="邀请人获得积分数量" prop="configString4" v-if="form.identifying === 'aboutIntegral'">
<el-input v-model="form.configString4" placeholder="请输入" type="number" :min="0" :step="1" />
</el-form-item>
<el-form-item label="积分规则" prop="configString" v-if="form.identifying === 'aboutIntegral'">
<editor v-model="form.configString" :min-height="192"/>
</el-form-item>
......
......@@ -8,8 +8,8 @@
</el-option>
</el-select>
</el-form-item>
<el-form-item label="课程类型" prop="classType">
<el-select v-model="queryParams.classType" placeholder="请选择课程类型" clearable>
<el-form-item label="职业类型" prop="classType">
<el-select v-model="queryParams.classType" placeholder="请选择职业类型" clearable>
<el-option v-for="(item, index) in classTypeOptions" :key="index" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
......@@ -64,7 +64,7 @@
<el-table v-loading="loading" :data="courseList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<!-- <el-table-column label="课程主键ID" align="center" prop="courseId" />-->
<!-- <el-table-column label="职业主键ID" align="center" prop="courseId" />-->
<el-table-column label="评价机构" align="center" prop="evaluateAgencyName" width="100px">
<template slot-scope="scope">
<tooltip :contentName="scope.row.evaluateAgencyName" />
......@@ -76,8 +76,8 @@
<span v-if="scope.row.classType === 2">职业技能</span>
</template>
</el-table-column>
<!-- <el-table-column label="课程分类ID" align="center" prop="classId" />-->
<!-- <el-table-column label="课程分类" align="center" prop="className" />-->
<!-- <el-table-column label="职业分类ID" align="center" prop="classId" />-->
<!-- <el-table-column label="职业分类" align="center" prop="className" />-->
<el-table-column label="封面图" align="center" prop="coverImage" width="100">
<template slot-scope="scope">
<image-preview :src="scope.row.coverImage" :width="50" :height="50" />
......@@ -88,7 +88,7 @@
<tooltip :contentName="scope.row.courseName" />
</template>
</el-table-column>
<el-table-column label="课程标题" align="center" prop="courseTitle" width="120px">
<el-table-column label="职业标题" align="center" prop="courseTitle" width="120px">
<template slot-scope="scope">
<tooltip :contentName="scope.row.courseTitle" />
</template>
......@@ -118,11 +118,11 @@
<tooltip :contentName="scope.row.participateNum" />
</template>
</el-table-column>
<!-- <el-table-column label="课程详情" align="center" prop="courseDetails" />-->
<!-- <el-table-column label="课程概述" align="center" prop="courseOverview" />-->
<!-- <el-table-column label="课程大纲" align="center" prop="courseSyllabus" />-->
<!-- <el-table-column label="职业详情" align="center" prop="courseDetails" />-->
<!-- <el-table-column label="职业概述" align="center" prop="courseOverview" />-->
<!-- <el-table-column label="职业大纲" align="center" prop="courseSyllabus" />-->
<!-- <el-table-column label="预备知识" align="center" prop="courseKnowledge" />-->
<!-- <el-table-column label="课程团队" align="center" prop="courseTeam" />-->
<!-- <el-table-column label="职业团队" align="center" prop="courseTeam" />-->
<el-table-column label="标签" align="center" prop="tagName" width="100px">
<template slot-scope="scope">
<tooltip :contentName="scope.row.tagName" />
......@@ -181,7 +181,7 @@
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
@pagination="getList" />
<!-- 添加或修改课程对话框 -->
<!-- 添加或修改职业对话框 -->
<el-dialog :title="title" :visible.sync="open" width="800px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="110px">
<el-form-item label="评价机构" prop="evaluateAgencyId" v-has-role-no="['evaluateAgency']">
......@@ -191,13 +191,13 @@
</el-option>
</el-select>
</el-form-item>
<el-form-item label="课程分类" prop="majorId">
<el-select v-model="form.majorId" placeholder="请选择课程分类" clearable>
<el-form-item label="职业分类" prop="majorId">
<el-select v-model="form.majorId" placeholder="请选择职业分类" clearable>
<el-option v-for="(item, index) in majorClassList" :key="index" :label="item.majorName"
:value="parseInt(item.majorId)" />
</el-select>
</el-form-item>
<el-form-item label="课程类型" prop="classType">
<el-form-item label="职业类型" prop="classType">
<el-radio-group v-model.number="form.classType">
<el-radio :label="1">职业考试</el-radio>
<el-radio :label="2">职业技能</el-radio>
......@@ -212,7 +212,7 @@
<el-form-item label="职业名称" prop="courseName">
<el-input v-model="form.courseName" placeholder="请输入职业名称" />
</el-form-item>
<el-form-item label="课程标题" prop="courseTitle">
<el-form-item label="职业标题" prop="courseTitle">
<el-input v-model="form.courseTitle" placeholder="请输入内容" />
</el-form-item>
<el-form-item label="开课次数" prop="courseNum">
......@@ -234,19 +234,19 @@
<!-- <el-form-item label="参加人数" prop="participateNum">-->
<!-- <el-input v-model="form.participateNum" placeholder="请输入参加人数" />-->
<!-- </el-form-item>-->
<el-form-item label="课程详情" prop="courseDetails">
<el-form-item label="职业详情" prop="courseDetails">
<editor v-model="form.courseDetails" :min-height="100" />
</el-form-item>
<el-form-item label="课程概述" prop="courseOverview">
<el-form-item label="职业概述" prop="courseOverview">
<editor v-model="form.courseOverview" :min-height="100" />
</el-form-item>
<!-- <el-form-item label="课程大纲" prop="courseSyllabus">-->
<!-- <el-form-item label="职业大纲" prop="courseSyllabus">-->
<!-- <editor v-model="form.courseSyllabus" :min-height="100"/>-->
<!-- </el-form-item>-->
<el-form-item label="预备知识" prop="courseKnowledge">
<editor v-model="form.courseKnowledge" :min-height="100" />
</el-form-item>
<!-- <el-form-item label="课程团队" prop="courseTeam">-->
<!-- <el-form-item label="职业团队" prop="courseTeam">-->
<!-- <editor v-model="form.courseTeam" :min-height="100"/>-->
<!-- </el-form-item>-->
<el-form-item label="证书要求" prop="courseCertificate">
......@@ -332,7 +332,7 @@ export default {
showSearch: true,
// 总条数
total: 0,
// 课程表格数据
// 职业表格数据
courseList: [],
// 弹出层标题
title: "",
......@@ -375,7 +375,7 @@ export default {
// 表单校验
rules: {
// classIds: [
// { required: true, trigger: "blur", message: "请选择课程分类" },
// { required: true, trigger: "blur", message: "请选择职业分类" },
// ],
evaluateAgencyId: [
{ required: true, trigger: "blur", message: "评价机构不能为空" },
......@@ -440,7 +440,7 @@ export default {
console.log("row.courseId", row.courseId)
},
/** 查询课程列表 */
/** 查询职业列表 */
getList() {
this.loading = true;
this.queryParams.params = {};
......@@ -523,7 +523,7 @@ export default {
this.reset();
// this.tagArr = [];
this.open = true;
this.title = "添加课程";
this.title = "添加职业信息";
// if (this.valueList.length != 0){
// let value = {
......@@ -541,7 +541,7 @@ export default {
getCourse(courseId).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改课程";
this.title = "修改职业信息";
// this.$set(this.form, "classIds", response.classIds);
});
......@@ -582,7 +582,7 @@ export default {
/** 删除按钮操作 */
handleDelete(row) {
const courseIds = row.courseId || this.ids;
this.$modal.confirm('是否确认删除课程编号为"' + courseIds + '"的数据项?').then(function () {
this.$modal.confirm('是否确认删除职业编号为"' + courseIds + '"的数据项?').then(function () {
return delCourse(courseIds);
}).then(() => {
this.getList();
......
......@@ -195,7 +195,7 @@
<!-- <el-table-column label="考试论述题每题X分" align="center" prop="discussScore" />-->
<el-table-column label="考试总分" align="center" prop="totalScore" />
<el-table-column label="及格分" align="center" prop="passScore" />
<el-table-column label="考试时间" align="center" prop="examMinute" />
<el-table-column label="考试时间(分钟)" align="center" prop="examMinute" />
<!-- <el-table-column label="考试批次" align="center" prop="examBatch" width="100" />-->
<!-- <el-table-column label="提示" align="center" prop="tips" />-->
<!-- <el-table-column label="考试开始时间" align="center" prop="examStartTime" width="150" />-->
......@@ -280,7 +280,7 @@
></el-option>
</el-select>
</el-form-item>
<el-form-item label="课程">
<el-form-item label="职业名称">
<exam-course :exam-course-list="form.examCourseList" />
</el-form-item>
<el-form-item label="报名提前天数" prop="examBatchEarly">
......
......@@ -202,7 +202,7 @@
}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="课程">
<el-form-item label="职业名称">
<exam-course :exam-course-list="form.examCourseList" />
</el-form-item>
</el-form>
......
......@@ -290,14 +290,14 @@
<el-form-item label="学习中心标签" prop="studyCenterTag">
<el-input v-model="form.studyCenterTag" placeholder="请输入学习中心标签" />
</el-form-item>
<el-form-item label="课程">
<el-form-item label="职业名称">
<exam-course :exam-course-list="form.examCourseList" />
</el-form-item>
<el-form-item label="学习中心简介">
<editor v-model="form.studyCenterIntroduce" :min-height="192" />
</el-form-item>
<el-form-item label="推荐课程" prop="recommendCourse">
<el-input v-model="form.recommendCourse" placeholder="请输入推荐课程" />
<el-form-item label="推荐职业" prop="recommendCourse">
<el-input v-model="form.recommendCourse" placeholder="请输入推荐职业" />
</el-form-item>
<el-form-item label="负责人" prop="superintendent">
<el-input v-model="form.superintendent" placeholder="请输入负责人" />
......
......@@ -163,7 +163,7 @@
:label="parseInt(dict.value)">{{ dict.label }}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="课程">
<el-form-item label="职业名称">
<exam-course :exam-course-list="form.examCourseList" />
</el-form-item>
</el-form>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment