TimeUpdate.js 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. // 自动更新数据库的支付状态
  2. const {getUnixTimeStamp} = require('../until/time')
  3. const db_user = require('../database/d_user')
  4. const handle = require("../until/handle");
  5. const {payState_cancel} = require("../maps/field");
  6. let orders = [];
  7. let payLock = false;
  8. // 订单超过15分钟的自动过期
  9. let expire = 60 * 15;
  10. let timerHandle = null;
  11. function tick (t,fn){
  12. setTimeout(async ()=>{
  13. await fn();
  14. tick(t,fn);
  15. },t)
  16. }
  17. async function check(){
  18. if(payLock){
  19. return;
  20. }
  21. let nowUnix = getUnixTimeStamp();
  22. for (let i = 0; i < orders.length; i++) {
  23. let order = orders[i];
  24. if(!order){
  25. break;
  26. }
  27. if(nowUnix>order.endTime){
  28. let [err,result] = await handle(db_user.changeOrder(order.id,{payState:payState_cancel}));
  29. if(err){console.log(err)}
  30. console.log(`订单${order.id},超时过期`);
  31. }
  32. }
  33. }
  34. async function main(){
  35. let [err,result] = await handle(db_user.waitPayOrder());
  36. if(err){
  37. console.log('获取用户数据失败')
  38. console.error(err);
  39. }
  40. orders = result.map(order=>{
  41. return {
  42. id: order.id,
  43. endTime: parseInt(order.createTime) + expire
  44. }
  45. });
  46. tick(1000,check);
  47. }
  48. main();
  49. console.log('检测订单');
  50. // 用户支付订单
  51. async function payOrder(orderId){
  52. payLock=true;
  53. let [err,result] = await handle(db_user.payOrder(orderId));
  54. if(err){payLock=false;console.log(err);throw err}
  55. let ind = orders.findIndex(val=>val.id==orderId);
  56. if(ind!=-1){orders[ind] = null}
  57. orders = orders.filter(val=>val);
  58. payLock=false;
  59. }
  60. async function addOrder(orderId,createTime){
  61. orders.push({
  62. id: orderId,
  63. endTime: parseInt(createTime) + expire
  64. })
  65. }
  66. module.exports = {
  67. payOrder,
  68. addOrder,
  69. }