Commit 541614c1 authored by 任国军's avatar 任国军

add getRedeemCOde

parent 9a67c744
Pipeline #27192 passed with stage
in 5 seconds
......@@ -167,6 +167,20 @@ class UserController extends Controller {
const ret = await service.course.v5.user.addUserActImages(params);
ctx.success(ret);
}
// 获取用户购买的兑换码
async getUserClassRedeemCode() {
const { ctx, service } = this;
const queryParams = ctx.request.query;
if (ctx.isEmpty(queryParams) || ctx.isEmpty(queryParams.class_id)) {
ctx.failed('class_id is empty');
}
const ret = await service.course.v5.user.getUserClassRedeemCode(queryParams);
ctx.success(ret);
}
}
module.exports = UserController;
'use strict';
const moment = require('moment');
module.exports = app => {
const { STRING, INTEGER, DATE } = app.Sequelize;
const CourseV5InstitutionRedeemCode = app.classModel.define('course_v5_institution_redeem_code', {
id: {
type: INTEGER,
primaryKey: true,
autoIncrement: true,
},
code: STRING,
institution_id: INTEGER,
class_id: INTEGER,
user_uuid: STRING,
is_used: INTEGER,
status: INTEGER,
is_deleted: INTEGER,
used_time: {
type: DATE,
allowNull: true,
get() {
const date = this.getDataValue('used_time');
return date ? moment(date).format('YYYY-MM-DD HH:mm:ss') : undefined;
},
},
created_time: {
type: DATE,
allowNull: true,
get() {
const date = this.getDataValue('created_time');
return date ? moment(date).format('YYYY-MM-DD HH:mm:ss') : undefined;
},
},
updated_time: {
type: DATE,
allowNull: true,
get() {
const date = this.getDataValue('updated_time');
return date ? moment(date).format('YYYY-MM-DD HH:mm:ss') : undefined;
},
},
}, {
timestamps: false,
tableName: 'course_v5_institution_redeem_code',
});
return CourseV5InstitutionRedeemCode;
};
......@@ -19,6 +19,7 @@ module.exports = app => {
router.post('third', '/user/redeem/class', auth({ is_force: 1 }), 'course.v5.user.redeemClass');// 兑换课程
router.post('third', '/user/act/image', auth({ is_force: 1 }), 'course.v5.user.addUserActImages');// 更新用户礼品列表
router.get('third', '/user/act/image/all', auth({ is_force: 1 }), 'course.v5.user.getUserActImageList');// 获取用户礼品列表
router.get('third', '/user/redeem/pay', auth({ is_force: 1 }), 'course.v5.user.getUserClassRedeemCode');// 获取用户购买的兑换码
router.get('third', '/category/all', auth({ is_force: 0 }), 'course.v5.option.getCategoryList');// 获取分类列表
router.get('third', '/banner/all', 'course.v5.option.getBannerList');// 获取banner列表
......
......@@ -380,7 +380,7 @@ class UserService extends Service {
}
// 获取课程详情
const classInfo = await ctx.classModel.V5.CourseV5Class.findOne({ where: { id, status: 1, is_deleted: 0 }, attributes: [ 'name', 'pay_price' ] });
const classInfo = await ctx.classModel.V5.CourseV5Class.findOne({ where: { id, status: 1, is_deleted: 0 }, attributes: [ 'id', 'institution_id', 'name', 'pay_price', 'button_type' ] });
if (ctx.isEmpty(classInfo)) {
ctx.failed('课程不存在');
}
......@@ -393,6 +393,16 @@ class UserService extends Service {
const orderNo = '11' + moment().format('YYYYMMDDHHMMSS') + await this.getRandomNumber(6);
if (ctx.isEmpty(order)) {
// 判断是否还有兑换码可用
let redeemCode = '';
if (classInfo.button_type === 3) {
redeemCode = await ctx.classModel.V5.CourseV5InstitutionRedeemCode.findOne({ where: { institution_id: classInfo.institution_id, class_id: classInfo.id, status: 1, is_used: 0, is_deleted: 0 } });
if (ctx.isEmpty(redeemCode)) {
ctx.failed('剩余兑换码不足');
}
// 先更新为使用
await ctx.classModel.V5.CourseV5InstitutionRedeemCode.update({ user_uuid: userUuid, is_used: 1, used_time: moment().format('YYYY-MM-DD HH:mm:ss') }, { where: { id: redeemCode.id } });
}
const data = {
order_no: orderNo,
user_uuid: userUuid,
......@@ -402,11 +412,14 @@ class UserService extends Service {
address: JSON.stringify(address),
columns: JSON.stringify(columns),
};
if (classInfo.button_type === 3) {
data.redeem = redeemCode.code;
}
await ctx.classModel.V5.CourseUserOrder.create(data);
order = await ctx.classModel.V5.CourseUserOrder.findOne({ where: { user_uuid: userUuid, class_id: id, is_deleted: 0 }, order: [[ 'id', 'asc' ]] });
}
await ctx.classModel.V5.CourseUserOrder.update({ pay: classInfo.pay_price, order_no: orderNo, type: 1, redeem: '', address: JSON.stringify(address), columns: JSON.stringify(columns), status: 0 }, { where: { id: order.id } });
await ctx.classModel.V5.CourseUserOrder.update({ pay: classInfo.pay_price, order_no: orderNo, type: 1, address: JSON.stringify(address), columns: JSON.stringify(columns), status: 0 }, { where: { id: order.id } });
let response = await this.service.course.v5.wechat.pay({ pay: order.pay, order_no: orderNo, body: `趣选课-订单${orderNo}` });
response = await ctx.helper.xmlTojson(response);
......@@ -631,6 +644,22 @@ class UserService extends Service {
return { result: true };
}
// 获取用户购买的兑换码
async getUserClassRedeemCode(input) {
const { ctx } = this;
const userUuid = ctx.userUuid;
const classId = input.class_id || '';
const order = await ctx.classModel.V5.CourseUserOrder.findOne({ where: { user_uuid: userUuid, class_id: classId, status: 1, type: 1, is_deleted: 0 } });
const ret = {
result: ctx.isEmpty(order) ? '' : order.redeem,
};
return ret;
}
}
module.exports = UserService;
......@@ -364,7 +364,7 @@ class WechatService extends Service {
});
});
await ctx.classModel.V5.CourseWechatLog.create({ type: 2, content: ret });
await ctx.classModel.V5.CourseWechatLog.create({ type: 2, content: JSON.stringify(ret) });
ret = ret.replace(/^\ufeff/i, '').replace(/^\ufffe/i, '');
return ret;
}
......
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