1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- // 自动更新数据库的支付状态
- const {getUnixTimeStamp} = require('../until/time')
- const db_user = require('../database/d_user')
- const handle = require("../until/handle");
- const {payState_cancel,payState_timeout} = require("../maps/field");
- let orders = [];
- let payLock = false;
- // 订单超过15分钟的自动过期
- let expire = 60 * 15;
- let timerHandle = null;
- function tick (t,fn){
- setTimeout(async ()=>{
- await fn();
- tick(t,fn);
- },t)
- }
- async function loadOrder(){
- let [err,result] = await handle(db_user.waitPayOrder());
- if(err){
- console.log('获取用户数据失败')
- console.error(err);
- }
- orders = result.map(order=>{
- return {
- id: order.id,
- endTime: parseInt(order.createTime) + expire
- }
- });
- }
- async function check(){
- if(payLock){
- return;
- }
- // console.log(orders)
- let nowUnix = getUnixTimeStamp();
- orders = orders.filter(val=>val);
- for (let i = 0; i < orders.length; i++) {
- let order = orders[i];
- if(!order){
- break;
- }
- console.log(`订单${order.id} 当前时间${nowUnix} - 结束时间${order.endTime} 剩余 ${nowUnix-order.endTime}秒`)
- // console.log(nowUnix);
- // console.log(order.endTime);
- // console.log(nowUnix > order.endTime);
- if(nowUnix > order.endTime){
- let [err,result] = await handle(db_user.changeOrder(order.id,{payState:payState_timeout}));
- if(err){console.log(err)}else{
- console.log(`订单${order.id},超时过期`);
- orders[i] = null;
- }
- }
- }
- }
- async function main(){
- console.log('检测订单');
- await loadOrder();
- tick(1000,check);
- }
- main();
- // 用户支付订单
- function payOrderItem(orderId){
- payLock=true;
- let ind = orders.findIndex(val=>val.id==orderId);
- if(ind != -1){orders[ind] = null}
- orders = orders.filter(val=>val);
- payLock=false;
- }
- async function reloadOrder(){
- payLock=true;
- await loadOrder();
- payLock=false;
- }
- module.exports = {
- reloadOrder,
- payOrderItem,
- }
|