Commit 2e91170c authored by 任国军's avatar 任国军

add act order

parent bec9989f
Pipeline #27634 passed with stage
in 5 seconds
......@@ -160,8 +160,8 @@ class UserController extends Controller {
const { ctx, service } = this;
const params = ctx.request.body;
if (ctx.isEmpty(params) || ctx.isEmpty(params.ids)) {
ctx.failed('ids is failed');
if (ctx.isEmpty(params) || ctx.isEmpty(params.id)) {
ctx.failed('id is failed');
}
const ret = await service.course.v5.user.addUserActImages(params);
......@@ -181,6 +181,20 @@ class UserController extends Controller {
const ret = await service.course.v5.user.getUserClassRedeemCode(queryParams);
ctx.success(ret);
}
// 更新用户订单
async updateUserOrder() {
const { ctx, service } = this;
const params = ctx.request.body;
if (ctx.isEmpty(params) || ctx.isEmpty(params.order_no)) {
ctx.failed('order_no is failed');
}
const ret = await service.course.v5.user.updateUserOrder(params);
ctx.success(ret);
}
}
module.exports = UserController;
......@@ -13,6 +13,8 @@ module.exports = app => {
autoIncrement: true,
},
name: STRING,
class_id: INTEGER,
institution_id: INTEGER,
title: STRING,
content: STRING,
selected_image: STRING,
......
......@@ -20,6 +20,7 @@ module.exports = app => {
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.post('third', '/user/order/update', auth({ is_force: 1 }), 'course.v5.user.updateUserOrder');// 更新用户订单信息
router.get('third', '/category/all', auth({ is_force: 0 }), 'course.v5.option.getCategoryList');// 获取分类列表
router.get('third', '/banner/all', 'course.v5.option.getBannerList');// 获取banner列表
......
......@@ -394,7 +394,7 @@ class UserService extends Service {
address = JSON.stringify(address);
}
const orderNo = '11' + moment().format('YYYYMMDDHHMMSS') + await this.getRandomNumber(6);
const orderNo = '11' + moment().format('YYYYMMDDHHmmSS') + await this.getRandomNumber(6);
if (ctx.isEmpty(order)) {
// 判断是否还有兑换码可用
let redeemCode = '';
......@@ -523,7 +523,7 @@ class UserService extends Service {
// 订单处理
const orderInfo = await ctx.classModel.V5.CourseUserOrder.findOne({ where: { user_uuid: userUuid, class_id: codeInfo.class_id, is_deleted: 0 } });
if (ctx.isEmpty(orderInfo)) {
const orderNo = '12' + moment().format('YYYYMMDDHHMMSS') + await this.getRandomNumber(6);
const orderNo = '12' + moment().format('YYYYMMDDHHmmSS') + await this.getRandomNumber(6);
await ctx.classModel.V5.CourseUserOrder.create({ user_uuid: userUuid, order_no: orderNo, class_id: codeInfo.class_id, pay: 0, pay_time: moment().format('YYYY-MM-DD HH:mm:ss'), pay_result: '', type: 2, redeem: redeemCode, address: '', status: 1 });
} else {
if (orderInfo.status === 1) {
......@@ -635,17 +635,72 @@ class UserService extends Service {
// 更新用户的礼品列表
async addUserActImages(input) {
const { ctx } = this;
let ids = input.ids || '';
if (ctx.isEmpty(ids)) {
ctx.failed('ids is empty');
const id = input.id || 0;
const userUuid = ctx.userUuid;
// 判断用户礼品情况
const userAct = await ctx.classModel.CourseUserActImage.findOne({ where: { user_uuid: userUuid, status: 1, is_deleted: 0 } });
if (!ctx.isEmpty(userAct)) {
ctx.failed('请勿重复领取');
}
ids = ids.split(',');
for (const id of ids) {
await ctx.classModel.CourseUserActImage.findOrCreate({ where: { user_uuid: ctx.userUuid, image_id: id, is_deleted: 0 }, defaults: { user_uuid: ctx.userUuid, image_id: id } });
const actInfo = await ctx.classModel.CourseActImage.findOne({ where: { id, status: 1, is_deleted: 0 } });
if (ctx.isEmpty(actInfo)) {
ctx.failed('该礼包已失效');
}
return { result: true };
const institutionInfo = await ctx.classModel.V5.CourseV5Institution.findOne({ where: { id: actInfo.institution_id, status: 1, is_deleted: 0 }, attributes: [ 'pay_column' ] });
if (ctx.isEmpty(institutionInfo)) {
ctx.failed('机构已下线');
}
const classInfo = await ctx.classModel.V5.CourseV5Class.findOne({ where: { id: actInfo.class_id, status: 1, is_deleted: 0 }, attributes: [ 'has_address', 'button_url' ] });
if (ctx.isEmpty(classInfo)) {
ctx.failed('课程已下线');
}
// 判断是否有兑换码
let redeem = '';
if (actInfo.type === 2) {
const redeemCode = await ctx.classModel.V5.CourseRedeemCode.findOne({ where: { class_id: actInfo.class_id, status: 1, is_used: 0, is_deleted: 0 } });
if (ctx.isEmpty(redeemCode)) {
ctx.failed('兑换码不足');
}
await ctx.classModel.V5.CourseRedeemCode.update({ is_used: 1, user_uuid: userUuid, used_time: moment().format('YYYY-MM-DD HH:mm:ss') }, { id: redeemCode.id });
redeem = redeemCode.code;
} else if (actInfo.type === 3) {
const redeemCode = await ctx.classModel.V5.CourseV5InstitutionRedeemCode.findOne({ where: { class_id: actInfo.class_id, status: 1, is_used: 0, is_deleted: 0 } });
if (ctx.isEmpty(redeemCode)) {
ctx.failed('兑换码不足');
}
await ctx.classModel.V5.CourseV5InstitutionRedeemCode.update({ is_used: 1, user_uuid: userUuid, used_time: moment().format('YYYY-MM-DD HH:mm:ss') }, { id: redeemCode.id });
redeem = redeemCode.code;
}
// 生成订单
const orderNo = '11' + moment().format('YYYYMMDDHHmmSS') + await this.getRandomNumber(6);
const order = {
order_no: orderNo,
type: 3,
user_uuid: userUuid,
class_id: actInfo.class_id,
pay: 0,
pay_time: moment().format('YYYY-MM-DD HH:mm:ss'),
redeem,
status: ctx.isEmpty(institutionInfo.pay_column) && classInfo.has_address === 0 ? 1 : 0,
};
await ctx.classModel.V5.CourseUserOrder.create(order);
await ctx.classModel.CourseUserActImage.create({ user_uuid: userUuid, image_id: id });
const ret = {
institution_pay_column: ctx.isEmpty(institutionInfo.pay_column) ? [] : eval(institutionInfo.pay_column),
has_address: classInfo.has_address,
order_no: orderNo,
class_id: actInfo.class_id,
url: classInfo.button_url,
};
return ret;
}
......@@ -663,6 +718,39 @@ class UserService extends Service {
return ret;
}
// 更新用户订单信息
async updateUserOrder(input) {
const { ctx } = this;
const orderNo = input.order_no || '';
const columns = input.columns || '';
const order = await ctx.classModel.V5.CourseUserOrder.findOne({ where: { order_no: orderNo, is_deleted: 0 } });
if (ctx.isEmpty(order)) {
ctx.failed('订单不存在');
}
const classInfo = await ctx.classModel.V5.CourseV5Class.findOne({ where: { id: order.class_id, status: 1, is_deleted: 0 }, attributes: [ 'has_address' ] });
// 获取用户地址
let address = '';
if (classInfo.has_address === 1) {
address = await ctx.classModel.V5.CourseUserAddress.findOne({ where: { user_uuid: ctx.userUuid, is_deleted: 0 }, attributes: [ 'id', 'province', 'city', 'area', 'address', 'name', 'phone' ], raw: true });
if (ctx.isEmpty(address)) {
ctx.failed('地址不能为空');
}
address = JSON.stringify(address);
}
await ctx.classModel.V5.CourseUserOrder.update({ address, columns, status: 1 }, { where: { id: order.id } });
const ret = {
result: true,
};
return ret;
}
}
module.exports = UserService;
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