add excel handle
This commit is contained in:
parent
cd5ec0a6e9
commit
59bafbb20e
@ -21,4 +21,11 @@
|
||||
* 502:num自增失败
|
||||
* /keyword/update
|
||||
* 600:校验失败
|
||||
* 601:更新keyword数据库修改失败
|
||||
* 601:更新keyword数据库修改失败
|
||||
* /excel/add
|
||||
* 700:文件格式不符
|
||||
* 701:keyword插入失败
|
||||
* /excel/reset
|
||||
* 800:文件格式不符
|
||||
* 801:keyword数据库清空失败
|
||||
* 701:keyword插入失败
|
30
api.js
30
api.js
@ -2,7 +2,7 @@
|
||||
import axios from 'axios'
|
||||
|
||||
export const api = axios.create({
|
||||
baseURL: 'https://api.powerrain.cn/',
|
||||
baseURL: 'https://chenmo1212.site/wxapi',
|
||||
headers: {
|
||||
'Content-Type': 'application/x-www-form-urlencoded',
|
||||
'Accept': 'application/json'
|
||||
@ -42,12 +42,34 @@ export function addKeywords(item) {
|
||||
return api.post('/keyword/insert',params)
|
||||
}
|
||||
|
||||
// index 就是关键词的index
|
||||
export function delKeywords(index) {
|
||||
let data = { index }
|
||||
// id 就是关键词的 id
|
||||
export function delKeywords(id) {
|
||||
let data = { id }
|
||||
let sign = CryptoJS.MD5(JSON.stringify(data).replace(/\"/g,"'")).toString().toUpperCase();
|
||||
data.sign = sign
|
||||
let params = new URLSearchParams();
|
||||
params.append('data', JSON.stringify(data));
|
||||
return api.post('/keyword/del',params)
|
||||
}
|
||||
|
||||
// 上传excel
|
||||
export function addExcel(file) {
|
||||
let param = new FormData();
|
||||
param.append('excel', file);
|
||||
return api.put('/excel/add', param, {
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data',
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 上传excel
|
||||
export function resetExcel(file) {
|
||||
let param = new FormData();
|
||||
param.append('excel', file);
|
||||
return api.put('/excel/reset', param, {
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data',
|
||||
}
|
||||
})
|
||||
}
|
15
api.py
15
api.py
@ -2,7 +2,7 @@
|
||||
import sys
|
||||
sys.path.append('./lib')
|
||||
from flask import Flask, escape, url_for, request, render_template, redirect, abort, send_from_directory, Response
|
||||
from allFunction import manageGet, managePost, manageInsertKeyword, manageDelKeyword, manageGetKeyword, manageMaterial, replySomething, manageUpdateKeyword
|
||||
from allFunction import manageGet, managePost, manageInsertKeyword, manageDelKeyword, manageGetKeyword, manageMaterial, replySomething, manageUpdateKeyword, manageExcelAdd, manageExcelReset
|
||||
from flask_apscheduler import APScheduler
|
||||
from wxRequest import requestsAccessToken
|
||||
scheduler = APScheduler()
|
||||
@ -49,6 +49,7 @@ def sayHello():
|
||||
return replySomething(dict_content['msg'])
|
||||
except Exception as e:
|
||||
return 'please send some arg as msg'
|
||||
|
||||
# 用于接受微信发来的消息
|
||||
@app.route('/wxpy/acceptmsg', methods=["POST", "GET"])
|
||||
def acceptMsg():
|
||||
@ -93,4 +94,16 @@ def getKeyword():
|
||||
@app.route('/keyword/update', methods=["POST"])
|
||||
def updateKeyword():
|
||||
res = manageUpdateKeyword(request)
|
||||
return res
|
||||
|
||||
# excel上传新增数据
|
||||
@app.route('/excel/add', methods=['PUT'], strict_slashes=False)
|
||||
def excelAdd():
|
||||
res = manageExcelAdd(request)
|
||||
return res
|
||||
|
||||
# excel上传重置数据
|
||||
@app.route('/excel/reset', methods=['PUT'], strict_slashes=False)
|
||||
def excelReset():
|
||||
res = manageExcelReset(request)
|
||||
return res
|
@ -7,13 +7,15 @@ import reply
|
||||
# 引入md5校验
|
||||
from hashlib import md5
|
||||
# 引入数据库操作函数
|
||||
from db import insertKeyword, delKeyword, getAllKeyword, fuzzySearch, addCount, updateKeyword
|
||||
from db import insertKeyword, delKeyword, getAllKeyword, fuzzySearch, addCount, updateKeyword, clearKeyword
|
||||
# 引入json
|
||||
import json
|
||||
# 引入获取微信图文信息
|
||||
from wxRequest import batchget_material
|
||||
# 引入时间
|
||||
import datetime
|
||||
# 引入excel处理函数
|
||||
from excel import upload_excel, loadData, insertToDB
|
||||
|
||||
# 主处理逻辑函数-----------------------------------------------------------
|
||||
|
||||
@ -151,6 +153,41 @@ def manageUpdateKeyword(request):
|
||||
else:
|
||||
return {'errcode': 600, 'errmsg': '校验失败'}
|
||||
|
||||
# 处理excel上传新增数据
|
||||
def manageExcelAdd(request):
|
||||
# 保存excel并获取新文件名
|
||||
res_upload = upload_excel(request)
|
||||
# 保存错误拦截
|
||||
if res_upload['errcode'] != 200:
|
||||
return res_upload
|
||||
# 新文件名
|
||||
filename = res_upload['filename']
|
||||
# 获取文件内容
|
||||
data_list = loadData(filename, 0)
|
||||
# 插入数据
|
||||
res_insert = insertToDB(data_list)
|
||||
return res_insert
|
||||
|
||||
# 处理excel上传重置数据
|
||||
def manageExcelReset(request):
|
||||
# 保存excel并获取新文件名
|
||||
res_upload = upload_excel(request)
|
||||
# 保存错误拦截
|
||||
if res_upload['errcode'] != 200:
|
||||
return res_upload
|
||||
# 新文件名
|
||||
filename = res_upload['filename']
|
||||
# 获取文件内容
|
||||
data_list = loadData(filename, 0)
|
||||
# 清空数据库
|
||||
res_clear = clearKeyword()
|
||||
# 清空错误拦截
|
||||
if res_clear['errcode'] != 200:
|
||||
return res_clear
|
||||
# 插入数据
|
||||
res_insert = insertToDB(data_list)
|
||||
return res_insert
|
||||
|
||||
# 工具函数---------------------------------------------------------------
|
||||
|
||||
# 更新sha1
|
||||
|
11
lib/db.py
11
lib/db.py
@ -109,4 +109,13 @@ def updateKeyword(id, keywords, content, date_now, news):
|
||||
except Exception as e:
|
||||
# 失败
|
||||
return {'errcode': 601, 'errmsg': '更新keyword数据库修改失败'}
|
||||
return {'errcode': 200, 'errmsg': 'ok'}
|
||||
return {'errcode': 200, 'errmsg': 'ok'}
|
||||
|
||||
# 删库
|
||||
def clearKeyword():
|
||||
try:
|
||||
col('keyword').remove({})
|
||||
except Exception as e:
|
||||
# 失败
|
||||
return {'errcode': 801, 'errmsg': 'keyword数据库清空失败'}
|
||||
return {'errcode': 200, 'errmsg': 'ok'}
|
||||
|
96
lib/excel.py
Normal file
96
lib/excel.py
Normal file
@ -0,0 +1,96 @@
|
||||
import os
|
||||
from werkzeug.utils import secure_filename
|
||||
import datetime
|
||||
import random
|
||||
from openpyxl import load_workbook
|
||||
from db import insertKeyword, clearKeyword
|
||||
|
||||
# 获取本文件目录地址
|
||||
basedir = os.path.abspath(os.path.dirname(__file__))
|
||||
# 设置允许的文件尾缀
|
||||
ALLOWED_EXTENSIONS = set(['xlsx'])
|
||||
# 判断允许的文件尾缀
|
||||
def allowed_file(filename):
|
||||
return '.' in filename and filename.rsplit('.', 1)[1] in ALLOWED_EXTENSIONS
|
||||
|
||||
#生成唯一的名称字符串,防止重名问题
|
||||
def create_uuid():
|
||||
# 生成当前时间
|
||||
nowTime = datetime.datetime.now().strftime("%Y%m%d%H%M%S")
|
||||
# 生成的随机整数n,其中0<=n<=100
|
||||
randomNum = random.randint(0, 100)
|
||||
if randomNum <= 10:
|
||||
randomNum = str(0) + str(randomNum)
|
||||
uniqueNum = str(nowTime) + str(randomNum)
|
||||
return uniqueNum
|
||||
|
||||
# 接受前端传来的文件
|
||||
def upload_excel(request):
|
||||
# 文件夹地址
|
||||
file_dir = os.path.join(basedir, '../upload')
|
||||
# 文件夹不存在就创建
|
||||
if not os.path.exists(file_dir):
|
||||
os.makedirs(file_dir)
|
||||
# 获取文件
|
||||
f = request.files['excel']
|
||||
# 文件格式判断拦截器
|
||||
if f and allowed_file(f.filename):
|
||||
fname = secure_filename(f.filename)
|
||||
ext = fname.rsplit('.', 1)[1]
|
||||
# 生成新文件名
|
||||
new_filename = create_uuid() + '.' + ext
|
||||
# 保存文件
|
||||
f.save(os.path.join(file_dir, new_filename))
|
||||
return {'errcode': 200, 'filename': new_filename}
|
||||
else:
|
||||
return {'errcode': 700, 'errmsg': '文件格式不符'}
|
||||
|
||||
# 加载excel文件
|
||||
def loadData(file_name, sheet_index):
|
||||
wb = load_workbook('../upload' + file_name)
|
||||
ws = wb[wb.sheetnames[sheet_index]]
|
||||
index = 0
|
||||
data_list = {}
|
||||
for row in ws.rows:
|
||||
# 排除表头
|
||||
if index != 0:
|
||||
# 关键词
|
||||
keywords = row[0].value
|
||||
# 内容
|
||||
content = row[1].value
|
||||
data_list[keywords] = content
|
||||
index += 1
|
||||
return data_list
|
||||
|
||||
# 组织记录内容
|
||||
def packageData(keywords, content):
|
||||
return {
|
||||
'keywords': keywords,
|
||||
'content': content,
|
||||
'num': 0,
|
||||
'date': datetime.datetime.now().strftime('%Y-%m-%d'),
|
||||
'news': {
|
||||
"title": "",
|
||||
"digest": "",
|
||||
"update_time": "",
|
||||
"cover": "",
|
||||
"url": "",
|
||||
"type": [],
|
||||
}
|
||||
}
|
||||
|
||||
# 插入到数据库中
|
||||
def insertToDB(data_list):
|
||||
# 插入错误列表
|
||||
err_list = []
|
||||
for keywords in data_list:
|
||||
data = packageData(keywords, data_list[keywords])
|
||||
res = insertKeyword(data)
|
||||
# 插入失败处理
|
||||
if res['errcode'] != 200:
|
||||
res['keywords'] = keywords
|
||||
res['content'] = data_list[keywords]
|
||||
err_list.append(res)
|
||||
if len(err_list) != 0:
|
||||
return {'errcode': 701, 'errmsg': 'keyword插入失败', 'err_list': err_list}
|
||||
return {'errcode': 200, 'errmsg': 'ok'}
|
Loading…
x
Reference in New Issue
Block a user