-
Notifications
You must be signed in to change notification settings - Fork 0
/
template.js
219 lines (210 loc) · 7.37 KB
/
template.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
'use strict';
/**
* @name: TemplateController
* @type {[type]}
*/
const Controller = require('egg').Controller;
const lele = require( '../lib/lele.js' );
const fs = require( 'fs' );
const path = require( 'path' );
//这个只能去读xlsx 如果要读取csv ->node-csv
let xlsx = require( 'node-xlsx' );
// let nodeCsv = require('node-csv').createParser();
let iconv = require( 'iconv-lite' );
class TemplateController extends Controller {
//http://cnodejs.org/topic/5770eb6bd3baaf401780bbfe
/**
* @author {lmy}
* [1.查看模板列表]
* @param { page : 1 第几页 pageNum : 每页显示多少 }
* @return {[type]} [description]
*/
async templateList() {
try{
const { ctx, service } = this;
const DB = service.common.dao;
const data = lele.empty( ctx.request.body ) ? ctx.request.query : ctx.request.body;
if( !data.hasOwnProperty( 'page' ) || !data.hasOwnProperty( 'pageNum' ) ) {
throw{ code : 1, errMsg : '参数异常' };
}
var filterSql = {
raw : true,
offset: lele.intval( ( data.page -1 ) * data.pageNum ),
limit: lele.intval( data.pageNum )
};
var templates = await DB.findAll( 'Group', filterSql );
ctx.body = { code : 200, result : templates };
}
catch( e ) {
console.log("templateList-->" + e );
var errCode = { code : 500, errMsg : e.toString() };
if(e.code) errCode = Object.assign( errCode, e );
this.ctx.body = errCode;
}
}
/**
* @author {lmy}
* [2.查询模板信息]
* @param {string}
* "name": 'kilmy',
"code" : '112fsfs',
"createdTime" : 1111,
"createdUid" : 'kilmy'
*/
async queryTemplates() {
try{
const { ctx, service } = this;
const DB = service.common.dao;
let data = lele.empty( ctx.request.body ) ? ctx.request.query : ctx.request.body;
data = {
name : '我是模板1'
// code : '123',
// createdTime : '123455'
// createdUid : 'kilmy'
};
//把删除的过滤掉
var conditionArr = [];
//1.名称, 2.模板编号 3.创建时间 4.创建者
var conditions = [ 'name', 'code', 'createdTime', 'createdUid' ];
conditions.forEach( val => {
if( data.hasOwnProperty( val ) ) {
conditionArr.push( { [ val ]: data[val]} );
}
});
if( conditions.length == 0 ) {
ctx.body = { code : 200, result : [] };
return;
}
conditionArr.push( { isDeleted : 1 } );
var filterSql = {
raw : true,
where : { $and : conditionArr },
attributes : { exclude : [ 'createdTime', 'updatedTime' ] }
};
var templates = await DB.findAll( 'Group', filterSql );
ctx.body = { code : 200, result : templates };
}
catch( e ) {
var errCode = { code : 500, errMsg : e.toString() };
if(e.code) errCode = Object.assign( errCode, e );
this.ctx.body = errCode;
}
}
/**
* @author {lmy}
* [3.复制一个模板]
* @param { templateId : 1 需要复制的模板 }
*/
async duplicateQueryTemp() {
}
async importTemplates() {
}
async createQueryTemp() {
}
/**
* @author {lmy}
* [6下载模板] table : 'DataImportTemplate'
* @param : dataType : 1 会员数据 2 交易数据 3产品数据 4 门店数据 5 区域数据
*/
async downTemp() {
try{
const { ctx, service } = this;
const DB = service.common.dao;
var data = lele.empty( ctx.request.body ) ? ctx.request.query : ctx.request.body;
var dataType = data.dataType;
if( lele.intval( dataType ) == 0 ) {
throw{ code : 1, errMsg : '数据异常' }
}
var filterSql = {
raw : true,
where : { dataType: dataType },
attributes : [ 'templateId', 'name','dataType', 'downloadUrl', 'properties' ]
};
var dataTemps = await DB.findAll( 'DataImportTemplate', filterSql );
ctx.body = { code : 200, result : dataTemps };
}
catch( e ) {
console.log( 'downTemp-->' + e );
var errCode = { code : 500, errMsg : e.toString() };
if(e.code) errCode = Object.assign( errCode, e );
this.ctx.body = errCode;
}
}
/**
* @author {lmy}
* [7.文件模板的上传]
* @param {string}
* @return {[type]} [description]
*/
async upExcel() {
try{
const { ctx, service } = this;
const DB = service.common.dao;
let data = ctx.req.body;
const files = ctx.req.files;
if( lele.empty( files[0] ) ) {
throw{ code : 1, errMsg : '数据异常' };
}
//后缀名 xiaoming.xlsx
const originaName = files[0].originalname;
const oldPath = files[0].path;
let allowFileType = [ '.xlsx','.csv' ];
//这里做文件类 型的判断
if( allowFileType.indexOf( path.extname( originaName ) ) == -1 ) {
fs.unlink( oldPath, function(){}); //这里不需要同步处理
throw{ code : 1, errMsg : '数据异常' };
}
let localUrl = './app/public/upload/excel/';
const newPath = localUrl + originaName;
fs.rename( oldPath, newPath, async function( err ) {
try{
if( err ) {
console.log("err", err );
fs.unlink( oldPath, function(){}); //这里不需要同步处理
throw { code : 500, errMsg : '服务器异常' };
}
//这个是读取csv文件的 注意 只能读取默认的第一页。。 其他读取的时候编码有问题
if( originaName.includes( 'csv' ) ) {
var fileStr = fs.readFileSync( newPath, { encoding : 'binary' });
var buf = new Buffer( fileStr, 'binary' );
var str = iconv.decode( buf , 'GBK' );
var data = lele.ConvertToTable( str );
ctx.body = { code : 200 };
}
else{
//1.读取excel的数据
let workSheetsFromFile = xlsx.parse( newPath );
if( workSheetsFromFile.length == 0 ) {
throw{ code : 500, errMsg : '读取数据异常' };
}
workSheetsFromFile = workSheetsFromFile[0];
//这里只做对一次个文件的读取
//[ { name: 'Sheet1', data: [ [Array], [Array], [Array], [Array] ] } ]
//表单的名字 sheet1的
const sheetName = workSheetsFromFile.name;
//这个是excel的表头
const workTitle = workSheetsFromFile.data[ 0 ];
//-->这个是建立一个excel文件 : 生成excel的文件buffer
//const data111 = workSheetsFromFile.data;
// var buffer = xlsx.build([{name: "mySheetName", data: data111}]); // Returns a buffer
// fs.writeFileSync( localUrl + 'userCeshi.xlsx', buffer, 'binary' );
ctx.body = { code : 200 };
}
}
catch( e ) {
console.log( 'upExcel-1-->' + e );
var errCode = { code : 500, errMsg : e.toString() };
if(e.code) errCode = Object.assign( errCode, e );
ctx.body = errCode;
}
})
}
catch( e ) {
console.log( 'upExcel-2-->' + e );
var errCode = { code : 500, errMsg : e.toString() };
if(e.code) errCode = Object.assign( errCode, e );
this.ctx.body = errCode;
}
}
}
module.exports = TemplateController;