|
|
@ -1,23 +1,102 @@ |
|
|
|
# python对多文件编程及其不友好, 白写了这么多文件到处报错, 最后还是要写在一个文件里解决了 |
|
|
|
import os |
|
|
|
import sys |
|
|
|
|
|
|
|
from datetime import datetime # 处理时间 |
|
|
|
from flask import Flask |
|
|
|
from markupsafe import escape # 字符串转义处理 |
|
|
|
from flask_cors import CORS, cross_origin |
|
|
|
from flask_sqlalchemy import SQLAlchemy |
|
|
|
|
|
|
|
# SQLite windows适配 |
|
|
|
WIN = sys.platform.startswith('win') |
|
|
|
if WIN: |
|
|
|
prefix = 'sqlite:///' |
|
|
|
else: |
|
|
|
prefix = 'sqlite:////' |
|
|
|
|
|
|
|
app = Flask(__name__) |
|
|
|
db = SQLAlchemy(app) # 初始化拓展, 传入程序实例 app |
|
|
|
cors = CORS(app) |
|
|
|
app.config['CORS_HEADERS'] = 'Content-Type' |
|
|
|
|
|
|
|
prefix = "sqlite:///" |
|
|
|
path = '../appTime/AppTime-Realease/data.db' |
|
|
|
app.config['SQLALCHEMY_DATABASE_URI'] = prefix + path |
|
|
|
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True |
|
|
|
# 在扩展类实例化前加载配置 |
|
|
|
db = SQLAlchemy(app) |
|
|
|
|
|
|
|
|
|
|
|
# 数据库模型 |
|
|
|
class App(db.Model): |
|
|
|
id = db.Column(db.Integer, primary_key=True) # App id |
|
|
|
process = db.Column(db.Text) # appName |
|
|
|
text = db.Column(db.Text) # app窗口名称 |
|
|
|
tagId = db.Column(db.Integer, unique=True) # 标签id |
|
|
|
|
|
|
|
|
|
|
|
class Period(db.Model): |
|
|
|
timeStart = db.Column(db.DateTime, primary_key=True) # 开始时间 |
|
|
|
timeEnd = db.Column(db.DateTime) # 结束时间 |
|
|
|
winId = db.Column(db.Integer) # 活动id |
|
|
|
|
|
|
|
|
|
|
|
class Tag(db.Model): |
|
|
|
id = db.Column(db.Integer, primary_key=True) # 标签id |
|
|
|
text = db.Column(db.Text) # 标签文本 |
|
|
|
|
|
|
|
|
|
|
|
class Win(db.Model): |
|
|
|
id = db.Column(db.Integer, primary_key=True) # 活动id |
|
|
|
appId = db.Column(db.Integer) # App id |
|
|
|
text = db.Column(db.Text, nullable=True) # 活动窗口名称 |
|
|
|
tagId = db.Column(db.Integer, nullable=True) # 标签id |
|
|
|
|
|
|
|
|
|
|
|
# 后端API |
|
|
|
# 获取每日屏幕使用总时间 |
|
|
|
@app.route('/getDayScreenUseTime', methods=['GET']) |
|
|
|
@cross_origin() |
|
|
|
def getDayScreenUseTime(): |
|
|
|
datetimeStr = '2022-09-05' |
|
|
|
struct_time = datetime.strptime(datetimeStr, "%Y-%m-%d").date() # 获取请求日期, struct_time数据类型为dateTime |
|
|
|
activityTimeList = Period.query.all() |
|
|
|
selectedTimeList = [] # 选中的对应今天日期的时间李彪 |
|
|
|
for time in activityTimeList: |
|
|
|
if time.timeStart.date() == struct_time: |
|
|
|
selectedTimeList.append(time) |
|
|
|
|
|
|
|
timeAmount = 0 |
|
|
|
for time in selectedTimeList: |
|
|
|
time_diff = time.timeEnd - time.timeStart |
|
|
|
timeAmount = timeAmount + time_diff.total_seconds() |
|
|
|
|
|
|
|
timeAmount = int(timeAmount) |
|
|
|
m, s = divmod(timeAmount, 60) |
|
|
|
h, m = divmod(m, 60) |
|
|
|
|
|
|
|
return '{:d}小时{:02d}分{:02d}秒'.format(h, m, s) |
|
|
|
|
|
|
|
# 获取每日第一次屏幕使用时刻 |
|
|
|
@app.route('/getFirstScreenTime', methods=['GET']) |
|
|
|
@cross_origin() |
|
|
|
def getFirstScreenTime(): |
|
|
|
datetimeStr = '2022-09-05' |
|
|
|
struct_time = datetime.strptime(datetimeStr, "%Y-%m-%d").date() # 获取请求日期, struct_time数据类型为dateTime |
|
|
|
activityTimeList = Period.query.all() |
|
|
|
selectedTimeList = [] # 选中的对应今天日期的时间李彪 |
|
|
|
for time in activityTimeList: |
|
|
|
if time.timeStart.date() == struct_time: |
|
|
|
selectedTimeList.append(time) |
|
|
|
break; |
|
|
|
|
|
|
|
firstScreenTime = selectedTimeList[0].timeStart.strftime('%H点%M分%S秒') |
|
|
|
return firstScreenTime |
|
|
|
|
|
|
|
# 获取每日最后一次屏幕使用时刻 |
|
|
|
@app.route('/getLastScreenTime', methods=['GET']) |
|
|
|
@cross_origin() |
|
|
|
def getLastScreenTime(): |
|
|
|
datetimeStr = '2022-09-05' |
|
|
|
struct_time = datetime.strptime(datetimeStr, "%Y-%m-%d").date() # 获取请求日期, struct_time数据类型为dateTime |
|
|
|
activityTimeList = Period.query.all() |
|
|
|
selectedTimeList = [] # 选中的对应今天日期的时间李彪 |
|
|
|
for time in activityTimeList: |
|
|
|
if time.timeStart.date() == struct_time: |
|
|
|
selectedTimeList.append(time) |
|
|
|
|
|
|
|
@app.route('/') |
|
|
|
def hello(): |
|
|
|
return 'Welcome to My Watchlist!' |
|
|
|
lastScreenTime = selectedTimeList[-1].timeEnd.strftime('%H点%M分%S秒') |
|
|
|
return lastScreenTime |
|
|
|
|
|
|
|
@app.route('/user/<name>') |
|
|
|
def user_page(name): |
|
|
|
return f'User: {escape(name)}' |
|
|
|
# 持续时间 |