| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250 |
- import moment from 'moment';
- import activity from '../../model/activity.js';
- import { stringUtils } from '../../util/stringClass.js';
- import { globalCache } from '../../util/GlobalCache.js';
- import config from '../../config/index.js';
- import { query } from '../../util/db.js';
- // 以下模型在旧项目中独立存在,新项目暂用 query 直接调用
- // PayInfo.GetActivityMoneyList, Users.GetUsersInfoByUserID, Users.UpdateUsersIsRebateByUserID
- /**
- * 得到当前活动信息
- * 旧: exports.GetCurrentActivityInfo
- */
- export async function GetCurrentActivityInfo(ctx) {
- let param = {
- UserID: ctx.query.UserID || 0,
- };
- if (param.UserID === "undefined")
- param.UserID = 0;
- const list = await activity.GetCurrentActivityInfo(param);
- if (list && list.length > 0) {
- const result = {};
- result.MoneyNotPay = 0; //未领取金额
- result.MoneyTotal = 0; //累计回馈
- result.MoneyPay = 0; //领取金额
- result.ActivityCurrent = null;
- result.ActivityHistory = [];
- for (let i = 0; i < list.length; i++) {
- const item = list[i];
- item.UserCreateTime = moment(item.UserCreateTime).format('YYYY年MM月DD日 HH:mm');
- item.DateStartCHS = moment(item.DateStart).format('YYYY年MM月DD日');
- item.DateEndCHS = moment(item.DateEnd).format('YYYY年MM月DD日');
- item.DateStart = moment(item.DateStart).format('MM.DD');
- item.DateEnd = moment(item.DateEnd).format('MM.DD');
- const param2 = {
- UserID: param.UserID,
- ActivityInfoID: item.ActivityInfoID,
- };
- item.MoneyPlan = 0; //预计回馈
- const detailList = await activity.GetUserActivityInfo(param2);
- for (let j = 0; j < detailList.length; j++) {
- const itemChild = detailList[j];
- let payMoney = 0;
- if (item.RuleCompute1 === "*") {
- payMoney = Math.round(itemChild.Money * Number(item.RuleCompute2));
- }
- else if (item.RuleCompute1 === "-") {
- payMoney = itemChild.Money - Number(item.RuleCompute2);
- }
- if (item.Status === -1 && itemChild.IsRebate === 0) {
- result.MoneyNotPay += payMoney;
- result.MoneyTotal += payMoney;
- }
- else if (item.Status === -1 && itemChild.IsRebate === 1) {
- result.MoneyPay += payMoney;
- result.MoneyTotal += payMoney;
- }
- item.MoneyPlan += payMoney;
- }
- item.MoneyPlan = stringUtils.FormatMoney(item.MoneyPlan);
- item.List = detailList;
- if (item.Status === 1) {
- result.ActivityCurrent = item;
- }
- else {
- result.ActivityHistory.push(item);
- }
- }
- result.MoneyNotPay = stringUtils.FormatMoney(result.MoneyNotPay);
- result.MoneyTotal = stringUtils.FormatMoney(result.MoneyTotal);
- result.MoneyPay = stringUtils.FormatMoney(result.MoneyPay);
- ctx.body = { "errcode": 10000, result: result };
- }
- else
- ctx.body = { "errcode": 10000 };
- }
- /**
- * 得到当前活动
- * 旧: exports.GetCurrentActivity
- */
- export async function GetCurrentActivity(ctx) {
- const list = await activity.GetCurrentActivity();
- if (list && list.length > 0) {
- const item = list[0];
- ctx.body = { "errcode": 10000, result: item };
- }
- else
- ctx.body = { "errcode": 10000 };
- }
- /**
- * 参加活动
- * 旧: exports.AddActivity
- */
- export async function AddActivity(ctx) {
- let param = {
- UserID: ctx.query.UserID || 0,
- ActivityInfoID: ctx.query.ActivityInfoID || 0,
- };
- if (param.UserID === "undefined")
- param.UserID = 0;
- const list = await activity.GetUserActivityInfo4(param);
- if (list && list.length > 0) {
- ctx.body = { "errcode": 10000 };
- }
- else {
- param.CreateTime = new Date();
- param.Status = 0;
- param.Flag = 0;
- await activity.AddActivity(param);
- ctx.body = { "errcode": 10000 };
- }
- }
- /**
- * 支付活动经费
- * 旧: exports.PayActivity
- * 使用 globalCache 替代旧的 BufferMemory 实现节流
- */
- export async function PayActivity(ctx) {
- let param = {
- UserID: ctx.query.UserID || 0,
- };
- if (param.UserID === "undefined")
- param.UserID = 0;
- const cacheKey = "PayActivity?UserID=" + param.UserID;
- const canPay = globalCache.get(cacheKey);
- if (!canPay) {
- //计算费用
- const list = await activity.GetCurrentActivityInfo(param);
- if (list && list.length > 0) {
- const result = {};
- result.MoneyNotPay = 0; //未领取金额
- const userIDArr = [];
- for (let i = 0; i < list.length; i++) {
- const item = list[i];
- const param2 = {
- UserID: param.UserID,
- ActivityInfoID: item.ActivityInfoID,
- };
- const detailList = await activity.GetUserActivityInfo(param2);
- for (let j = 0; j < detailList.length; j++) {
- const itemChild = detailList[j];
- let payMoney = 0;
- if (item.RuleCompute1 === "*") {
- payMoney = Math.round(itemChild.Money * Number(item.RuleCompute2));
- }
- else if (item.RuleCompute1 === "-") {
- payMoney = itemChild.Money - Number(item.RuleCompute2);
- }
- if (item.Status === -1 && itemChild.IsRebate === 0) {
- result.MoneyNotPay += payMoney;
- userIDArr.push(itemChild.UserID);
- }
- }
- }
- // 获取用户信息
- const sql = "select * from WXUsers where UserID=?;";
- const userInfo = await query(sql, [param.UserID]);
- if (userInfo && userInfo.length > 0 && result.MoneyNotPay > 0) {
- const text = "领取推广回馈,详见《数学练习小学口算版》小程序";
- const url = "http://localhost:" + config.port + "/api/PayUserRebate/?PayType=2&UserID=" + param.UserID + "&OpenID=" + userInfo[0].OpenID + "&Money=" + result.MoneyNotPay + "&Text=" + text;
- console.log("url:" + url);
- // 异步调用支付接口(非阻塞)
- import('axios').then(axios => {
- axios.default.get(encodeURI(url))
- .then(response => {
- if (response.data) {
- console.log("send ok:" + response.data.status);
- if (userIDArr.length > 0) {
- const sqlUpdate = "Update WXUsers SET IsRebate=1 where UserID in (" + userIDArr.join(",") + ");";
- query(sqlUpdate).catch(err => console.error(err));
- }
- }
- })
- .catch(err => console.error(err));
- });
- }
- }
- // 设置缓存节流
- globalCache.set(cacheKey, true, config.BufferMemoryTimeLowNormal);
- }
- else {
- console.log("CanNotPay");
- }
- ctx.body = { "errcode": 10000 };
- }
- /**
- * 得到领取记录
- * 旧: exports.GetActivityMoneyList
- */
- export async function GetActivityMoneyList(ctx) {
- let param = {
- UserID: ctx.query.UserID || 0,
- };
- if (param.UserID === "undefined")
- param.UserID = 0;
- const result = {
- MoneyTotal: 0,
- List: [],
- };
- // 从 ProductPayInfo 和 PaybackInfo 获取活动领取记录
- const sql = "select ID,TradeNo,CreateTime,Body,Money from PaybackInfo where UserID=? order by ID desc";
- const list = await query(sql, [param.UserID]);
- if (list && list.length > 0) {
- for (let i = 0; i < list.length; i++) {
- result.MoneyTotal += list[i].Money;
- list[i].Money = stringUtils.FormatMoney(list[i].Money);
- list[i].CreateTime = moment(list[i].CreateTime).format('YYYY年MM月DD日 HH:mm');
- }
- result.MoneyTotal = stringUtils.FormatMoney(result.MoneyTotal);
- result.List = list;
- }
- ctx.body = { "errcode": 10000, result: result };
- }
|