TimeUpdate.js 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  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,payState_timeout} = 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 loadOrder(){
  18. let [err,result] = await handle(db_user.waitPayOrder());
  19. if(err){
  20. console.log('获取用户数据失败')
  21. console.error(err);
  22. }
  23. orders = result.map(order=>{
  24. return {
  25. id: order.id,
  26. endTime: parseInt(order.createTime) + expire
  27. }
  28. });
  29. }
  30. async function check(){
  31. if(payLock){
  32. return;
  33. }
  34. // console.log(orders)
  35. let nowUnix = getUnixTimeStamp();
  36. orders = orders.filter(val=>val);
  37. for (let i = 0; i < orders.length; i++) {
  38. let order = orders[i];
  39. if(!order){
  40. break;
  41. }
  42. console.log(`订单${order.id} 当前时间${nowUnix} - 结束时间${order.endTime} 剩余 ${nowUnix-order.endTime}秒`)
  43. // console.log(nowUnix);
  44. // console.log(order.endTime);
  45. // console.log(nowUnix > order.endTime);
  46. if(nowUnix > order.endTime){
  47. let [err,result] = await handle(db_user.changeOrder(order.id,{payState:payState_timeout}));
  48. if(err){console.log(err)}else{
  49. console.log(`订单${order.id},超时过期`);
  50. orders[i] = null;
  51. }
  52. }
  53. }
  54. }
  55. async function main(){
  56. console.log('检测订单');
  57. await loadOrder();
  58. tick(1000,check);
  59. }
  60. main();
  61. // 用户支付订单
  62. function payOrderItem(orderId){
  63. payLock=true;
  64. let ind = orders.findIndex(val=>val.id==orderId);
  65. if(ind != -1){orders[ind] = null}
  66. orders = orders.filter(val=>val);
  67. payLock=false;
  68. }
  69. async function reloadOrder(){
  70. payLock=true;
  71. await loadOrder();
  72. payLock=false;
  73. }
  74. module.exports = {
  75. reloadOrder,
  76. payOrderItem,
  77. }