Commit ee157e51 authored by qinhaitao's avatar qinhaitao

feat: 🎸 概率抽奖 接口

parent 4c01f617
# 通用模板
# 数据模拟
```bash
yarn
```
```bash
cd mockServer
```
```bash
cnpm install
```
编译ts代码
```bash
➜ npm start
```
启动mockServr
```bash
➜ npm run mock
```
## 库表规范
http://cf.dui88.com/pages/viewpage.action?pageId=63937755
## sdk 接口文档说明
http://cf.dui88.com/pages/viewpage.action?pageId=66194323
## 模板说明
......@@ -176,42 +176,32 @@ export declare const DRAW_STATUS: {
EXPIRED: number;
RETRY: number;
};
export declare const PRIZE_TYPE: {
ENAME: number;
CREDITS: number;
OBJECT: number;
THANKS: number;
};
export declare const C_APP_NAME: string;
export declare const TAOBAO_SUCCESS_ORDER_STATUS: string[];
export declare const enum ACTIVITY_STATUS {
NORMAL = 1,
DELETE = 2
}
export declare const enum DELETE_STATUS {
NORMAL = 1,
DELETE = 2
}
export declare const TASK_RATE_TYPE: {
FOREVER: number;
EVERYDAY: number;
NOLIMIT: number;
};
export declare const PRIZE_TYPE: {
ENAME: number;
CREDITS: number;
OBJECT: number;
THANKS: number;
};
export declare const PRIZE_DATA_TYPE: {
RANKING: number;
PROBABILITY: number;
};
export declare enum SWICH_TOCK {
LIMIT = 1,
NO_LIMIT = 2
}
export declare const RECORD_TYPE: {
FOLLOW_TASK: {
type: number;
name: string;
};
SIGN_TASK: {
type: number;
name: string;
};
RECEIVE_INVITE: {
type: number;
name: string;
};
INVITE_SUCCESS: {
type: number;
name: string;
};
};
"use strict";
/** @format */
Object.defineProperty(exports, "__esModule", { value: true });
exports.RECORD_TYPE = exports.SWICH_TOCK = exports.TASK_RATE_TYPE = exports.TAOBAO_SUCCESS_ORDER_STATUS = exports.C_APP_NAME = exports.PRIZE_TYPE = exports.DRAW_STATUS = exports.TBERROR = exports.CODE_TYPES = exports.BusinessError = void 0;
exports.SWICH_TOCK = exports.PRIZE_DATA_TYPE = exports.PRIZE_TYPE = exports.TASK_RATE_TYPE = exports.TAOBAO_SUCCESS_ORDER_STATUS = exports.C_APP_NAME = exports.DRAW_STATUS = exports.TBERROR = exports.CODE_TYPES = exports.BusinessError = void 0;
var sdk_1 = require("./sdk");
exports.BusinessError = {
// 更新重试失败(用于并发更新)
......@@ -116,13 +116,6 @@ exports.DRAW_STATUS = {
// 重新领取
RETRY: 6
};
// 奖品类型
exports.PRIZE_TYPE = {
ENAME: 1,
CREDITS: 2,
OBJECT: 3,
THANKS: 5
};
// C端的APP NAME
exports.C_APP_NAME = 'promotioncenter-${需要补充}';
// 订单状态
......@@ -140,16 +133,22 @@ exports.TASK_RATE_TYPE = {
EVERYDAY: 2,
NOLIMIT: 3
};
// 奖品类型
exports.PRIZE_TYPE = {
ENAME: 1,
CREDITS: 2,
OBJECT: 3,
THANKS: 5
};
// 奖品分类
exports.PRIZE_DATA_TYPE = {
RANKING: 1,
PROBABILITY: 2 // 概率
};
// 奖品是否限制库存
var SWICH_TOCK;
(function (SWICH_TOCK) {
SWICH_TOCK[SWICH_TOCK["LIMIT"] = 1] = "LIMIT";
SWICH_TOCK[SWICH_TOCK["NO_LIMIT"] = 2] = "NO_LIMIT";
})(SWICH_TOCK = exports.SWICH_TOCK || (exports.SWICH_TOCK = {}));
exports.RECORD_TYPE = {
FOLLOW_TASK: { type: 1, name: '关注店铺任务' },
SIGN_TASK: { type: 2, name: '签到任务' },
RECEIVE_INVITE: { type: 3, name: '接受邀请' },
INVITE_SUCCESS: { type: 4, name: '邀请成功' }
};
//# sourceMappingURL=constants.js.map
\ No newline at end of file
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
......@@ -13,4 +13,8 @@ export default class AwardsController {
* 权益重新领取
*/
receiveEnamePrize(context: Context, {}: {}, [awardSer]: [AwardsService]): Promise<import("taobao-mini-sdk/lib/utils/resultmodel").Result>;
/**
* 概率抽奖
*/
drawLotteryPrize(context: Context, { userInfo }: IControllerInfos, [awardSer]: [AwardsService]): Promise<import("taobao-mini-sdk/lib/utils/resultmodel").Result>;
}
......@@ -49,6 +49,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
var decorator_1 = require("../decorator");
var sdk_1 = require("../sdk");
var service_1 = require("../service");
var constants_1 = require("../constants");
var utils_1 = require("../utils");
var AwardsController = /** @class */ (function () {
function AwardsController() {
}
......@@ -136,6 +138,81 @@ var AwardsController = /** @class */ (function () {
});
});
};
/**
* 概率抽奖
*/
AwardsController.prototype.drawLotteryPrize = function (context, _a, _b) {
var userInfo = _a.userInfo;
var awardSer = _b[0];
return __awaiter(this, void 0, void 0, function () {
var openId, activityId, prizesPool, prize, reduceResult, type, _id, ename, image, userNick, record, result;
return __generator(this, function (_c) {
switch (_c.label) {
case 0:
openId = context.openId;
activityId = context.data.activityId;
return [4 /*yield*/, awardSer.getPrizeConfig({
activityId: activityId
// 根据需求配置筛选条件
// prizeDataType: PRIZE_DATA_TYPE.PROBABILITY
})
// 根据概率获取
];
case 1:
prizesPool = _c.sent();
return [4 /*yield*/, awardSer.getPrizeByProbability(prizesPool)
// 未找到奖品,降级到谢谢参与
];
case 2:
prize = _c.sent();
// 未找到奖品,降级到谢谢参与
if (prize) {
return [2 /*return*/, sdk_1.resultsModel.success({
data: {
type: constants_1.PRIZE_TYPE.THANKS,
name: '谢谢参与'
}
})];
}
reduceResult = 1;
if (!(prize.type !== constants_1.PRIZE_TYPE.CREDITS)) return [3 /*break*/, 4];
return [4 /*yield*/, awardSer.reduceStock(prize._id)];
case 3:
reduceResult = _c.sent();
_c.label = 4;
case 4:
// 扣库存失败
if (reduceResult.code)
return [2 /*return*/, sdk_1.resultsModel.error(reduceResult)];
type = prize.type, _id = prize._id, ename = prize.ename, image = prize.image;
userNick = userInfo.userNick;
record = {
openId: openId,
prizeId: _id,
activityId: activityId,
drawStatus: constants_1.DRAW_STATUS.WAITAWARD,
// prizeDataType,
remark: '',
type: type,
ename: ename,
name: name,
image: image,
userNick: userNick,
createDay: utils_1.getToday()
};
return [4 /*yield*/, awardSer.addAward(record)];
case 5:
result = _c.sent();
return [2 /*return*/, sdk_1.resultsModel.success({
id: result,
type: type,
name: name,
image: image
})];
}
});
});
};
__decorate([
decorator_1.paramsCheck(['activityId']),
decorator_1.userCheck({ intercept: true }),
......@@ -160,6 +237,14 @@ var AwardsController = /** @class */ (function () {
__metadata("design:paramtypes", [Object, Object, Array]),
__metadata("design:returntype", Promise)
], AwardsController.prototype, "receiveEnamePrize", null);
__decorate([
decorator_1.paramsCheck(['activityId']),
decorator_1.activityTimeCheck,
decorator_1.services([service_1.AwardsService]),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object, Object, Array]),
__metadata("design:returntype", Promise)
], AwardsController.prototype, "drawLotteryPrize", null);
return AwardsController;
}());
exports.default = AwardsController;
......
{"version":3,"file":"awards.controller.js","sourceRoot":"","sources":["../../src/controller/awards.controller.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
{"version":3,"file":"awards.controller.js","sourceRoot":"","sources":["../../src/controller/awards.controller.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
......@@ -50,24 +50,22 @@ var StatController = /** @class */ (function () {
*/
StatController.prototype.getStats = function (context) {
return __awaiter(this, void 0, void 0, function () {
var _a, activityId, startDay, endDay, userDao, accessDao, recordDao, awardsDao, oneDay, xlsxData, day, PV, UV, newUV, vipPV, noVipPV, vipUV, noVipUV, newVipUV, followPV, followUV, inviteSuccessUV, receiveShareUV, receiveShareVipUV, receiveShareNoVipUV, keyValueMapper, tommorrow, buffer, result, e_1;
var _a, activityId, startDay, endDay, userDao, accessDao, oneDay, xlsxData, day, PV, UV, newUV, vipPV, noVipPV, vipUV, noVipUV, newVipUV, newFollowUV, keyValueMapper, tommorrow, buffer, result, e_1;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
_a = context.data, activityId = _a.activityId, startDay = _a.startDay, endDay = _a.endDay;
userDao = new sdk_1.BaseDao(context, db_1.USER_DB_NAME);
accessDao = new sdk_1.BaseDao(context, db_1.ACCESS_DB_NAME);
recordDao = new sdk_1.BaseDao(context, db_1.RECORD_DB_NAME);
awardsDao = new sdk_1.BaseDao(context, db_1.AWARDS_DB_NAME);
oneDay = 24 * 3600 * 1000;
xlsxData = [];
_b.label = 1;
case 1:
_b.trys.push([1, 19, , 20]);
_b.trys.push([1, 14, , 15]);
day = startDay;
_b.label = 2;
case 2:
if (!(new Date(day).getTime() <= new Date(endDay).getTime())) return [3 /*break*/, 17];
if (!(new Date(day).getTime() <= new Date(endDay).getTime())) return [3 /*break*/, 12];
return [4 /*yield*/, accessDao.count({ activityId: activityId, createDay: day })
// 访问UV
];
......@@ -116,43 +114,13 @@ var StatController = /** @class */ (function () {
})];
case 10:
newVipUV = _b.sent();
return [4 /*yield*/, recordDao.count({
return [4 /*yield*/, userDao.count({
activityId: activityId,
createDay: day,
recordType: constants_1.RECORD_TYPE.FOLLOW_TASK.type
'member.follow': true,
'member.followDay': day
})];
case 11:
followPV = _b.sent();
return [4 /*yield*/, recordDao.aggregate([
{ $match: { activityId: activityId, createDay: day, recordType: constants_1.RECORD_TYPE.FOLLOW_TASK.type } },
{ $group: { _id: '$openId', count: { $sum: 1 } } }
])];
case 12:
followUV = (_b.sent()).length;
return [4 /*yield*/, recordDao.aggregate([
{ $match: { activityId: activityId, createDay: day, recordType: constants_1.RECORD_TYPE.INVITE_SUCCESS.type } },
{ $group: { _id: '$inviteId', count: { $sum: 1 } } }
])];
case 13:
inviteSuccessUV = (_b.sent()).length;
return [4 /*yield*/, recordDao.aggregate([
{ $match: { activityId: activityId, createDay: day, recordType: constants_1.RECORD_TYPE.RECEIVE_INVITE.type } },
{ $group: { _id: '$openId', count: { $sum: 1 } } }
])];
case 14:
receiveShareUV = (_b.sent()).length;
return [4 /*yield*/, accessDao.aggregate([
{ $match: { activityId: activityId, createDay: day, isReceiveShare: true, isVip: true } },
{ $group: { _id: '$openId', count: { $sum: 1 } } }
])];
case 15:
receiveShareVipUV = (_b.sent()).length;
return [4 /*yield*/, accessDao.aggregate([
{ $match: { activityId: activityId, createDay: day, isReceiveShare: true, isVip: false } },
{ $group: { _id: '$openId', count: { $sum: 1 } } }
])];
case 16:
receiveShareNoVipUV = (_b.sent()).length;
newFollowUV = _b.sent();
keyValueMapper = {
时间: day,
访问PV: PV,
......@@ -163,14 +131,7 @@ var StatController = /** @class */ (function () {
未入会PV: noVipPV,
未入会UV: noVipUV,
新入会UV: newVipUV,
关注店铺完成PV: followPV,
关注店铺完成UV: followUV,
// 签到PV: signTaskPV,
// 签到UV: signTaskUV,
邀请好友完成UV: inviteSuccessUV,
带来好友UV: receiveShareUV,
带来好友已入会UV: receiveShareVipUV,
带来好友未入会UV: receiveShareNoVipUV
新增关注UV: newFollowUV
};
if (day === startDay) {
xlsxData.push(Object.keys(keyValueMapper));
......@@ -180,7 +141,7 @@ var StatController = /** @class */ (function () {
tommorrow = new Date(day).getTime() + oneDay;
day = sdk_1.dateFormatter(sdk_1.transformBeijingDate(tommorrow), 'yyyy/MM/dd');
return [3 /*break*/, 2];
case 17:
case 12:
buffer = xlsx.build([
{
name: "\u6570\u636E\u7EDF\u8BA1" + startDay.replace(/\//g, '-') + "-" + endDay.replace(/\//g, '-'),
......@@ -191,19 +152,19 @@ var StatController = /** @class */ (function () {
fileContent: buffer,
fileName: "\u6570\u636E\u7EDF\u8BA1" + startDay.replace(/\//g, '-') + "-" + endDay.replace(/\//g, '-') + ".xlsx"
})];
case 18:
case 13:
result = _b.sent();
console.log(xlsxData, 'xlsxData');
if (result.url) {
result.url = result.url.replace('http', 'https').replace('-internal', '');
}
return [2 /*return*/, sdk_1.resultsModel.success(result.url)];
case 19:
case 14:
e_1 = _b.sent();
console.log('上传文件出错', e_1);
// 打印日志
return [2 /*return*/, sdk_1.resultsModel.error(constants_1.CODE_TYPES.SYSTEM_ERROR, "\u4E0A\u4F20\u6587\u4EF6\u9519\u8BEF")];
case 20: return [2 /*return*/];
case 15: return [2 /*return*/];
}
});
});
......
{"version":3,"file":"stat.controller.js","sourceRoot":"","sources":["../../src/controller/stat.controller.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
{"version":3,"file":"stat.controller.js","sourceRoot":"","sources":["../../src/controller/stat.controller.ts"],"names":[],"mappings":";AAAA,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEd,4BAAoE;AACpE,8BAAmF;AACnF,0CAAyC;AACzC,gCAAiC;AAEjC,cAAc;AACd;IAAA;IA+GA,CAAC;IA9GC;;OAEG;IACG,iCAAQ,GAAd,UAAe,OAAgB;;;;;;wBACvB,KAAmC,OAAO,CAAC,IAAI,EAA7C,UAAU,gBAAA,EAAE,QAAQ,cAAA,EAAE,MAAM,YAAA,CAAiB;wBAE/C,OAAO,GAAa,IAAI,aAAO,CAAC,OAAO,EAAE,iBAAY,CAAC,CAAA;wBACtD,SAAS,GAAa,IAAI,aAAO,CAAC,OAAO,EAAE,mBAAc,CAAC,CAAA;wBAC1D,MAAM,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAA;wBAEzB,QAAQ,GAAG,EAAE,CAAA;;;;wBAEb,GAAG,GAAG,QAAQ,CAAA;;;6BACX,CAAA,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,CAAA;wBAE/C,qBAAM,SAAS,CAAC,KAAK,CAAC,EAAE,UAAU,YAAA,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;4BAChE,OAAO;0BADyD;;wBAA1D,EAAE,GAAG,SAAqD;wBAG9D,qBAAM,SAAS,CAAC,SAAS,CAAC;gCACxB,EAAE,MAAM,EAAE,EAAE,UAAU,YAAA,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE;gCAC1C,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE;6BACnD,CAAC,EAAA;;wBAJE,EAAE,GAAG,CACT,SAGE,CACH,CAAC,MAAM;wBAEM,qBAAM,OAAO,CAAC,KAAK,CAAC;gCAChC,UAAU,YAAA;gCACV,SAAS,EAAE,GAAG;6BACf,CAAC;4BAEF,QAAQ;0BAFN;;wBAHI,KAAK,GAAG,SAGZ;wBAGY,qBAAM,SAAS,CAAC,KAAK,CAAC,EAAE,UAAU,YAAA,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;4BAEhF,QAAQ;0BAFwE;;wBAA1E,KAAK,GAAG,SAAkE;wBAGhE,qBAAM,SAAS,CAAC,KAAK,CAAC,EAAE,UAAU,YAAA,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;4BAEnF,QAAQ;0BAF2E;;wBAA7E,OAAO,GAAG,SAAmE;wBAIjF,qBAAM,SAAS,CAAC,SAAS,CAAC;gCACxB,EAAE,MAAM,EAAE,EAAE,UAAU,YAAA,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;gCACvD,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE;6BACnD,CAAC,EAAA;;wBAJE,KAAK,GAAG,CACZ,SAGE,CACH,CAAC,MAAM;wBAIN,qBAAM,SAAS,CAAC,SAAS,CAAC;gCACxB,EAAE,MAAM,EAAE,EAAE,UAAU,YAAA,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gCACxD,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE;6BACnD,CAAC,EAAA;;wBAJE,OAAO,GAAG,CACd,SAGE,CACH,CAAC,MAAM;wBAGS,qBAAM,OAAO,CAAC,KAAK,CAAC;gCACnC,UAAU,YAAA;gCACV,kBAAkB,EAAE,IAAI;gCACxB,oBAAoB,EAAE,GAAG;6BAC1B,CAAC,EAAA;;wBAJI,QAAQ,GAAG,SAIf;wBAEkB,qBAAM,OAAO,CAAC,KAAK,CAAC;gCACtC,UAAU,YAAA;gCACV,eAAe,EAAE,IAAI;gCACrB,kBAAkB,EAAE,GAAG;6BACxB,CAAC,EAAA;;wBAJI,WAAW,GAAG,SAIlB;wBAEI,cAAc,GAAG;4BACrB,EAAE,EAAE,GAAG;4BACP,IAAI,EAAE,EAAE;4BACR,IAAI,EAAE,EAAE;4BACR,IAAI,EAAE,KAAK;4BACX,KAAK,EAAE,KAAK;4BACZ,KAAK,EAAE,KAAK;4BACZ,KAAK,EAAE,OAAO;4BACd,KAAK,EAAE,OAAO;4BACd,KAAK,EAAE,QAAQ;4BACf,MAAM,EAAE,WAAW;yBACpB,CAAA;wBAED,IAAI,GAAG,KAAK,QAAQ,EAAE;4BACpB,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAA;yBAC3C;wBACD,aAAa;wBACb,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAA;wBACxC,SAAS,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,GAAG,MAAM,CAAA;wBAChD,GAAG,GAAG,mBAAa,CAAC,0BAAoB,CAAC,SAAS,CAAC,EAAE,YAAY,CAAC,CAAA;;;wBAGhE,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;4BACtB;gCACE,IAAI,EAAE,6BAAO,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,SAAI,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAG;gCACzE,IAAI,EAAE,QAAQ;6BACf;yBACF,CAAC,CAAA;wBAIW,qBAAM,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;gCAC/C,WAAW,EAAE,MAAM;gCACnB,QAAQ,EAAE,6BAAO,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,SAAI,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,UAAO;6BACnF,CAAC,EAAA;;wBAHE,MAAM,GAAG,SAGX;wBACF,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAA;wBACjC,IAAI,MAAM,CAAC,GAAG,EAAE;4BACd,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAA;yBAC1E;wBACD,sBAAO,kBAAY,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAA;;;wBAEvC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAC,CAAC,CAAA;wBACxB,OAAO;wBACP,sBAAO,kBAAY,CAAC,KAAK,CAAC,sBAAU,CAAC,YAAY,EAAE,sCAAQ,CAAC,EAAA;;;;;KAE/D;IACH,qBAAC;AAAD,CAAC,AA/GD,IA+GC"}
\ No newline at end of file
......@@ -2,7 +2,6 @@
export declare const ACCESS_DB_NAME: string;
export declare const USER_DB_NAME: string;
export declare const AWARDS_DB_NAME: string;
export declare const RECORD_DB_NAME: string;
export declare const ERROR_LOG_DB_NAME: string;
export declare const SELLER_INFO_DB_NAME: string;
export declare const PRIZE_CONFIG_DB_NAME: string;
......
"use strict";
/** @format */
Object.defineProperty(exports, "__esModule", { value: true });
exports.ACTIVITY_CONFIG_DB_NAME = exports.PRIZE_CONFIG_DB_NAME = exports.SELLER_INFO_DB_NAME = exports.ERROR_LOG_DB_NAME = exports.RECORD_DB_NAME = exports.AWARDS_DB_NAME = exports.USER_DB_NAME = exports.ACCESS_DB_NAME = void 0;
exports.ACTIVITY_CONFIG_DB_NAME = exports.PRIZE_CONFIG_DB_NAME = exports.SELLER_INFO_DB_NAME = exports.ERROR_LOG_DB_NAME = exports.AWARDS_DB_NAME = exports.USER_DB_NAME = exports.ACCESS_DB_NAME = void 0;
exports.ACCESS_DB_NAME = 'c_user_access';
exports.USER_DB_NAME = 'c_user';
exports.AWARDS_DB_NAME = 'c_awards_info';
exports.RECORD_DB_NAME = "c_user_record";
exports.ERROR_LOG_DB_NAME = 'error_log';
exports.SELLER_INFO_DB_NAME = 'a_seller_info';
exports.PRIZE_CONFIG_DB_NAME = 'b_prize_config';
......
{"version":3,"file":"db.js","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":";AAAA,cAAc;;;AAED,QAAA,cAAc,GAAW,eAAe,CAAA;AAExC,QAAA,YAAY,GAAW,QAAQ,CAAA;AAE/B,QAAA,cAAc,GAAW,eAAe,CAAA;AAExC,QAAA,cAAc,GAAW,eAAe,CAAA;AAExC,QAAA,iBAAiB,GAAW,WAAW,CAAA;AAEvC,QAAA,mBAAmB,GAAW,eAAe,CAAA;AAE7C,QAAA,oBAAoB,GAAW,gBAAgB,CAAA;AAE/C,QAAA,uBAAuB,GAAW,mBAAmB,CAAA"}
\ No newline at end of file
{"version":3,"file":"db.js","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":";AAAA,cAAc;;;AAED,QAAA,cAAc,GAAW,eAAe,CAAA;AAExC,QAAA,YAAY,GAAW,QAAQ,CAAA;AAE/B,QAAA,cAAc,GAAW,eAAe,CAAA;AAExC,QAAA,iBAAiB,GAAW,WAAW,CAAA;AAEvC,QAAA,mBAAmB,GAAW,eAAe,CAAA;AAE7C,QAAA,oBAAoB,GAAW,gBAAgB,CAAA;AAE/C,QAAA,uBAAuB,GAAW,mBAAmB,CAAA"}
\ No newline at end of file
......@@ -13,7 +13,7 @@ export default class AwardsService extends UserService {
* 插入奖品记录
* @param {*} award
*/
addAward(award: any): Promise<any>;
addAward(award: IAwards): Promise<any>;
/**
* 发放奖品
* @param {*} document
......@@ -24,9 +24,9 @@ export default class AwardsService extends UserService {
* @param {*} param0
*/
getMyPrizeList({ openId, activityId }: {
openId: any;
activityId: any;
}): Promise<any>;
openId: string;
activityId: string;
}): Promise<Array<IAwards>>;
recieveObjectPrize(_id: string, { activityId, province, city, area, addressdetail, name, phone }: {
activityId: string;
province: string;
......@@ -36,10 +36,15 @@ export default class AwardsService extends UserService {
name: string;
phone: string | number;
}): Promise<true | import("taobao-mini-sdk/lib/utils/codetypes").CodeType>;
recieveEnamePrize(_id: any, activityId: string): Promise<{}>;
recieveEnamePrize(_id: string, activityId: string): Promise<{}>;
getPrizeConfig(query: {
activityId: string;
[queryParam: string]: any;
}): Promise<Array<IActivityPrize>>;
getPrizeByProbability(prizes: Array<IActivityPrize>): Promise<IActivityPrize>;
/**
* 获取活动配置项奖品
* @param {*} _id
* @param {string} _id
*/
getActivityPrizeById(_id: string): Promise<any>;
}
......@@ -209,7 +209,7 @@ var AwardsService = /** @class */ (function (_super) {
// 若有过期时间,且已过期
if (awardReceiveExpiredTime) {
currentTime_1 = Date.now();
myprizeList.map(function (v) {
myprizeList = myprizeList.map(function (v) {
if (currentTime_1 > awardReceiveExpiredTime) {
if ([constants_1.DRAW_STATUS.WAITAWARD, constants_1.DRAW_STATUS.RETRY].includes(v.drawStatus)) {
v.drawStatus = constants_1.DRAW_STATUS.EXPIRED;
......@@ -341,9 +341,27 @@ var AwardsService = /** @class */ (function (_super) {
});
});
};
// 根据查询条件获取奖品配置
AwardsService.prototype.getPrizeConfig = function (query) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
return [2 /*return*/, this.activityprizedao.find(__assign({ deleteStatus: 1 /* NORMAL */ }, query))];
});
});
};
// 根据概率抽取奖品
AwardsService.prototype.getPrizeByProbability = function (prizes) {
return __awaiter(this, void 0, void 0, function () {
var probability;
return __generator(this, function (_a) {
probability = utils_1.rand(10000);
return [2 /*return*/, prizes.find(function (v) { return probability <= v.properiodto && probability >= v.properiodfrom; })];
});
});
};
/**
* 获取活动配置项奖品
* @param {*} _id
* @param {string} _id
*/
AwardsService.prototype.getActivityPrizeById = function (_id) {
return __awaiter(this, void 0, void 0, function () {
......
This diff is collapsed.
......@@ -14,7 +14,7 @@
"taobao-mini-sdk": "^0.1.6"
},
"scripts": {
"start": "npx tsc",
"start": "tsc",
"mock": "cd mockServer && npm start",
"preinstall": "cd mockServer && yarn"
},
......
......@@ -119,13 +119,6 @@ export const DRAW_STATUS = {
RETRY: 6
}
// 奖品类型
export const PRIZE_TYPE = {
ENAME: 1,
CREDITS: 2,
OBJECT: 3,
THANKS: 5
}
// C端的APP NAME
export const C_APP_NAME: string = 'promotioncenter-${需要补充}'
......@@ -145,6 +138,12 @@ export const enum ACTIVITY_STATUS {
DELETE = 2
}
// 奖品状态
export const enum DELETE_STATUS {
NORMAL = 1,
DELETE = 2
}
//任务频率类型常量
export const TASK_RATE_TYPE = {
FOREVER: 1,
......@@ -152,15 +151,22 @@ export const TASK_RATE_TYPE = {
NOLIMIT: 3
}
// 奖品类型
export const PRIZE_TYPE = {
ENAME: 1,
CREDITS: 2,
OBJECT: 3,
THANKS: 5
}
// 奖品分类
export const PRIZE_DATA_TYPE = {
RANKING: 1, // 排行榜
PROBABILITY: 2 // 概率
}
// 奖品是否限制库存
export enum SWICH_TOCK {
LIMIT = 1,
NO_LIMIT = 2
}
export const RECORD_TYPE = {
FOLLOW_TASK: { type: 1, name: '关注店铺任务' },
SIGN_TASK: { type: 2, name: '签到任务' },
RECEIVE_INVITE: { type: 3, name: '接受邀请' },
INVITE_SUCCESS: { type: 4, name: '邀请成功' }
}
/** @format */
import { services, paramsCheck, userCheck } from '../decorator'
import { services, paramsCheck, userCheck, activityTimeCheck } from '../decorator'
import { resultsModel } from '../sdk'
import { AwardsService } from '../service'
import { PRIZE_TYPE, PRIZE_DATA_TYPE, DRAW_STATUS } from '../constants'
import { getToday } from '../utils'
export default class AwardsController {
/**
* 我的奖品列表
......@@ -68,4 +69,73 @@ export default class AwardsController {
}
return resultsModel.success(result)
}
/**
* 概率抽奖
*/
@paramsCheck(['activityId'])
@activityTimeCheck
@services([AwardsService])
async drawLotteryPrize(context: Context, { userInfo }: IControllerInfos, [awardSer]: [AwardsService]) {
const { openId } = context
const { activityId } = context.data
// 获取奖池配置
const prizesPool = await awardSer.getPrizeConfig({
activityId
// 根据需求配置筛选条件
// prizeDataType: PRIZE_DATA_TYPE.PROBABILITY
})
// 根据概率获取
const prize = await awardSer.getPrizeByProbability(prizesPool)
// 未找到奖品,降级到谢谢参与
if (prize) {
return resultsModel.success({
data: {
type: PRIZE_TYPE.THANKS,
name: '谢谢参与'
}
})
}
let reduceResult: ICodeType | 1 = 1
// 不是积分奖品, 检查是否扣库存
if (prize.type !== PRIZE_TYPE.CREDITS) {
reduceResult = await awardSer.reduceStock(prize._id)
}
// 扣库存失败
if ((reduceResult as ICodeType).code) return resultsModel.error(reduceResult as ICodeType)
const { type, _id, ename, image } = prize
const { userNick } = userInfo
let record = {
openId,
prizeId: _id,
activityId,
drawStatus: DRAW_STATUS.WAITAWARD,
// prizeDataType,
remark: '',
type,
ename,
name,
image,
userNick,
createDay: getToday()
}
// 奖品信息 insert c_awards表
const result = await awardSer.addAward(record)
return resultsModel.success({
id: result,
type,
name,
image
})
}
}
/** @format */
import { USER_DB_NAME, ACCESS_DB_NAME, RECORD_DB_NAME, AWARDS_DB_NAME } from '../db'
import { USER_DB_NAME, ACCESS_DB_NAME, AWARDS_DB_NAME } from '../db'
import { resultsModel, dateFormatter, transformBeijingDate, BaseDao } from '../sdk'
import { CODE_TYPES, RECORD_TYPE } from '../constants'
import { CODE_TYPES } from '../constants'
import * as xlsx from 'node-xlsx'
/** @format */
......@@ -15,8 +15,6 @@ export default class StatController {
const userDao: IBaseDao = new BaseDao(context, USER_DB_NAME)
const accessDao: IBaseDao = new BaseDao(context, ACCESS_DB_NAME)
const recordDao: IBaseDao = new BaseDao(context, RECORD_DB_NAME)
const awardsDao: IBaseDao = new BaseDao(context, AWARDS_DB_NAME)
const oneDay = 24 * 3600 * 1000
const xlsxData = []
......@@ -32,7 +30,6 @@ export default class StatController {
{ $group: { _id: '$openId', count: { $sum: 1 } } }
])
).length
// 新增UV
const newUV = await userDao.count({
activityId,
......@@ -68,60 +65,12 @@ export default class StatController {
'member.bememberDay': day
})
const followPV = await recordDao.count({
const newFollowUV = await userDao.count({
activityId,
createDay: day,
recordType: RECORD_TYPE.FOLLOW_TASK.type
'member.follow': true,
'member.followDay': day
})
const followUV = (
await recordDao.aggregate([
{ $match: { activityId, createDay: day, recordType: RECORD_TYPE.FOLLOW_TASK.type } },
{ $group: { _id: '$openId', count: { $sum: 1 } } }
])
).length
// const signTaskPV = await recordDao.count({
// activityId,
// createDay: day,
// recordType: RECORD_TYPE.SIGN_TASK.type
// })
// const signTaskUV = (
// await recordDao.aggregate([
// { $match: { activityId, createDay: day, recordType: RECORD_TYPE.SIGN_TASK.type } },
// { $group: { _id: '$openId', count: { $sum: 1 } } }
// ])
// ).length
const inviteSuccessUV = (
await recordDao.aggregate([
{ $match: { activityId, createDay: day, recordType: RECORD_TYPE.INVITE_SUCCESS.type } },
{ $group: { _id: '$inviteId', count: { $sum: 1 } } }
])
).length
const receiveShareUV = (
await recordDao.aggregate([
{ $match: { activityId, createDay: day, recordType: RECORD_TYPE.RECEIVE_INVITE.type } },
{ $group: { _id: '$openId', count: { $sum: 1 } } }
])
).length
const receiveShareVipUV = (
await accessDao.aggregate([
{ $match: { activityId, createDay: day, isReceiveShare: true, isVip: true } },
{ $group: { _id: '$openId', count: { $sum: 1 } } }
])
).length
const receiveShareNoVipUV = (
await accessDao.aggregate([
{ $match: { activityId, createDay: day, isReceiveShare: true, isVip: false } },
{ $group: { _id: '$openId', count: { $sum: 1 } } }
])
).length
const keyValueMapper = {
时间: day,
访问PV: PV,
......@@ -132,14 +81,7 @@ export default class StatController {
未入会PV: noVipPV,
未入会UV: noVipUV,
新入会UV: newVipUV,
关注店铺完成PV: followPV,
关注店铺完成UV: followUV,
// 签到PV: signTaskPV,
// 签到UV: signTaskUV,
邀请好友完成UV: inviteSuccessUV,
带来好友UV: receiveShareUV,
带来好友已入会UV: receiveShareVipUV,
带来好友未入会UV: receiveShareNoVipUV
新增关注UV: newFollowUV
}
if (day === startDay) {
......
......@@ -6,8 +6,6 @@ export const USER_DB_NAME: string = 'c_user'
export const AWARDS_DB_NAME: string = 'c_awards_info'
export const RECORD_DB_NAME: string = `c_user_record`
export const ERROR_LOG_DB_NAME: string = 'error_log'
export const SELLER_INFO_DB_NAME: string = 'a_seller_info'
......
......@@ -6,9 +6,9 @@
import { BaseDao } from '../sdk'
import UserService from './user.service'
import { CODE_TYPES, DRAW_STATUS, PRIZE_TYPE, ACTIVITY_STATUS, SWICH_TOCK } from '../constants'
import { CODE_TYPES, DRAW_STATUS, PRIZE_TYPE, ACTIVITY_STATUS, DELETE_STATUS, SWICH_TOCK } from '../constants'
import { AWARDS_DB_NAME, PRIZE_CONFIG_DB_NAME } from '../db'
import { sendTBAward, getSellerSession } from '../utils'
import { sendTBAward, getSellerSession, rand, signFigures } from '../utils'
export default class AwardsService extends UserService {
awardsdao: IBaseDao
......@@ -57,7 +57,7 @@ export default class AwardsService extends UserService {
* 插入奖品记录
* @param {*} award
*/
async addAward(award: any) {
async addAward(award: IAwards) {
try {
return await this.awardsdao.insertOne({
...award,
......@@ -103,7 +103,7 @@ export default class AwardsService extends UserService {
* 我的奖品
* @param {*} param0
*/
async getMyPrizeList({ openId, activityId }) {
async getMyPrizeList({ openId, activityId }: { openId: string; activityId: string }): Promise<Array<IAwards>> {
// 获取奖品领取过期时间
let { awardReceiveExpiredTime } = await this.getBaseInfo(activityId)
let myprizeList = await this.awardsdao.find(
......@@ -117,7 +117,7 @@ export default class AwardsService extends UserService {
// 若有过期时间,且已过期
if (awardReceiveExpiredTime) {
let currentTime = Date.now()
myprizeList.map((v: { drawStatus: number; remark: string; expiredTime: any }) => {
myprizeList = myprizeList.map((v: { drawStatus: number; remark: string; expiredTime: any }) => {
if (currentTime > awardReceiveExpiredTime) {
if ([DRAW_STATUS.WAITAWARD, DRAW_STATUS.RETRY].includes(v.drawStatus)) {
v.drawStatus = DRAW_STATUS.EXPIRED
......@@ -195,7 +195,7 @@ export default class AwardsService extends UserService {
}
// 发放淘宝权益(奖品数据已插入到awards_info表,且状态drawStatus 为1或者6)
async recieveEnamePrize(_id: any, activityId: string) {
async recieveEnamePrize(_id: string, activityId: string) {
// 若有过期时间,且已过期
let { awardReceiveExpiredTime } = await this.getBaseInfo(activityId)
if (awardReceiveExpiredTime && Date.now() > awardReceiveExpiredTime) {
......@@ -235,9 +235,25 @@ export default class AwardsService extends UserService {
return result
}
// 根据查询条件获取奖品配置
async getPrizeConfig(query: { activityId: string; [queryParam: string]: any }): Promise<Array<IActivityPrize>> {
return this.activityprizedao.find({
deleteStatus: DELETE_STATUS.NORMAL,
...query
})
}
// 根据概率抽取奖品
async getPrizeByProbability(prizes: Array<IActivityPrize>): Promise<IActivityPrize> {
// 获取 1-10000的随机数
const probability = rand(10000)
return prizes.find(v => probability <= v.properiodto && probability >= v.properiodfrom)
}
/**
* 获取活动配置项奖品
* @param {*} _id
* @param {string} _id
*/
async getActivityPrizeById(_id: string) {
return await this.activityprizedao.findOne(
......
......@@ -6,8 +6,8 @@ interface IActivityInfo {
startTime: number
endTime: number
title: string
deleteStatus: 1 | 2
openPrizeStatus?: 1 | 2 | 3 | 4
deleteStatus: number
openPrizeStatus?: number
remark?: string
createTime: number
updateTime: number
......@@ -41,15 +41,15 @@ interface IActivityPrize {
_id?: string
activityId?: string
ename?: string
prizeType: 1 | 2
type: 1 | 2 | 3 | 4 | 5
prizeDataType: number
type: number
image: string
name: string
probability?: string | number
properiodto: number
properiodfrom: number
lockStatus?: 1 | 2
switchStock?: 1 | 2
lockStatus?: number
switchStock?: number
rank?: string | number
credits?: string | number
useUrl?: string
......@@ -57,6 +57,6 @@ interface IActivityPrize {
useStock: number
openId?: string
deleteStatus: number
createTime: number
updateTime: number
createTime?: number
updateTime?: number
}
......@@ -23,7 +23,7 @@ interface IAwards {
shipCompany?: string
shipNum?: string | number
remark: string
createTime: number
updateTime: number
createTime?: number
updateTime?: number
awardsType?: string
}
......@@ -34,13 +34,6 @@ interface IVipInfo {
url?: string
}
interface IResult {
success: boolean
code: string
message?: string
data?: object[] | object | number[] | string[] | boolean | string
}
interface IBaseDao {
dbName: string
db: object
......
/** @format */
interface IResult {
success: boolean
code: string
message?: string
data?: object[] | object | number[] | string[] | boolean | string
}
interface ICodeType {
code: string
defaultMsg?: string
}
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