懒人记时 代码仓库
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

101 lines
3.5 KiB

преди 2 години
преди 2 години
преди 2 години
преди 2 години
преди 2 години
преди 2 години
преди 2 години
преди 2 години
преди 2 години
преди 2 години
преди 2 години
преди 2 години
преди 2 години
  1. # python对多文件编程及其不友好, 白写了这么多文件到处报错, 最后还是要写在一个文件里解决了
  2. import os
  3. import sys
  4. from datetime import datetime # 处理时间
  5. from flask import Flask
  6. from flask_cors import CORS, cross_origin
  7. from flask_sqlalchemy import SQLAlchemy
  8. app = Flask(__name__)
  9. cors = CORS(app)
  10. app.config['CORS_HEADERS'] = 'Content-Type'
  11. prefix = "sqlite:///"
  12. path = '../appTime/AppTime-Realease/data.db'
  13. app.config['SQLALCHEMY_DATABASE_URI'] = prefix + path
  14. app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True
  15. # 在扩展类实例化前加载配置
  16. db = SQLAlchemy(app)
  17. # 数据库模型
  18. class App(db.Model):
  19. id = db.Column(db.Integer, primary_key=True) # App id
  20. process = db.Column(db.Text) # appName
  21. text = db.Column(db.Text) # app窗口名称
  22. tagId = db.Column(db.Integer, unique=True) # 标签id
  23. class Period(db.Model):
  24. timeStart = db.Column(db.DateTime, primary_key=True) # 开始时间
  25. timeEnd = db.Column(db.DateTime) # 结束时间
  26. winId = db.Column(db.Integer) # 活动id
  27. class Tag(db.Model):
  28. id = db.Column(db.Integer, primary_key=True) # 标签id
  29. text = db.Column(db.Text) # 标签文本
  30. class Win(db.Model):
  31. id = db.Column(db.Integer, primary_key=True) # 活动id
  32. appId = db.Column(db.Integer) # App id
  33. text = db.Column(db.Text, nullable=True) # 活动窗口名称
  34. tagId = db.Column(db.Integer, nullable=True) # 标签id
  35. # 后端API
  36. # 获取每日屏幕使用总时间
  37. @app.route('/getDayScreenUseTime', methods=['GET'])
  38. @cross_origin()
  39. def getDayScreenUseTime():
  40. datetimeStr = '2022-09-05'
  41. struct_time = datetime.strptime(datetimeStr, "%Y-%m-%d").date() # 获取请求日期, struct_time数据类型为dateTime
  42. activityTimeList = Period.query.all()
  43. selectedTimeList = [] # 选中的对应今天日期的时间李彪
  44. for time in activityTimeList:
  45. if time.timeStart.date() == struct_time:
  46. selectedTimeList.append(time)
  47. timeAmount = 0
  48. for time in selectedTimeList:
  49. time_diff = time.timeEnd - time.timeStart
  50. timeAmount = timeAmount + time_diff.total_seconds()
  51. timeAmount = int(timeAmount)
  52. m, s = divmod(timeAmount, 60)
  53. h, m = divmod(m, 60)
  54. return '{:d}小时{:02d}分{:02d}秒'.format(h, m, s)
  55. # 获取每日第一次屏幕使用时刻
  56. @app.route('/getFirstScreenTime', methods=['GET'])
  57. @cross_origin()
  58. def getFirstScreenTime():
  59. datetimeStr = '2022-09-05'
  60. struct_time = datetime.strptime(datetimeStr, "%Y-%m-%d").date() # 获取请求日期, struct_time数据类型为dateTime
  61. activityTimeList = Period.query.all()
  62. selectedTimeList = [] # 选中的对应今天日期的时间李彪
  63. for time in activityTimeList:
  64. if time.timeStart.date() == struct_time:
  65. selectedTimeList.append(time)
  66. break;
  67. firstScreenTime = selectedTimeList[0].timeStart.strftime('%H点%M分%S秒')
  68. return firstScreenTime
  69. # 获取每日最后一次屏幕使用时刻
  70. @app.route('/getLastScreenTime', methods=['GET'])
  71. @cross_origin()
  72. def getLastScreenTime():
  73. datetimeStr = '2022-09-05'
  74. struct_time = datetime.strptime(datetimeStr, "%Y-%m-%d").date() # 获取请求日期, struct_time数据类型为dateTime
  75. activityTimeList = Period.query.all()
  76. selectedTimeList = [] # 选中的对应今天日期的时间李彪
  77. for time in activityTimeList:
  78. if time.timeStart.date() == struct_time:
  79. selectedTimeList.append(time)
  80. lastScreenTime = selectedTimeList[-1].timeEnd.strftime('%H点%M分%S秒')
  81. return lastScreenTime
  82. # 持续时间