123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- //云端数据同步导本地
- const EventEmitter = require('events')
- const db = require('./db.js')
- const env = require('./env.js')
- const api = require('./api.js')
- const logger = require('./logger.js')('sync.js')
- class executor extends EventEmitter {
- async start() {
- try {
- db.init()
- let totalCount = await api.countStudents(env.examId)
- logger.info('student count: ' + totalCount)
- this.emit('total', totalCount)
- let promises = []
- let campus = {}
- let count = 0
- let pageNumber = 0
- this.emit('student', 0)
- while (true) {
- pageNumber++
- logger.info('student page=' + pageNumber)
- let array = await api.getStudents(env.examId, pageNumber, 5000)
- if (array == undefined || array.length == 0) {
- break
- }
- let datas = []
- for (var i = 0; i < array.length; i++) {
- var obj = array[i]
- datas.push([obj['id'], env.examId, obj['schoolId'], obj['examNumber'], obj['name'], obj['studentCode'], obj['subjectCode'],
- obj['subjectName'], obj['campusName'], obj['packageCode'], obj['batchCode'], obj['sheetCount'], obj['sliceCount'], obj['answers'],
- obj['upload'] ? 1 : 0, obj['absent'] ? 1 : 0, obj['breach'] ? 1 : 0, obj['manualAbsent'] ? 1 : 0, obj['objectiveScore'],
- obj['subjectiveScore'], obj['examSite'], obj['examRoom'], obj['remark']
- ])
- campus[obj['campusCode']] = {
- schoolId: obj['schoolId'],
- name: obj['campusName']
- }
- }
- //console.log('get:' + array.length)
- promises.push(new Promise((resolve, reject) => {
- db.batchQuery('replace into eb_exam_student(id, exam_id, school_id\
- , exam_number, name, student_code, subject_code, subject_name, campus_name\
- , package_code, batch_code, sheet_count, slice_count, answers, is_upload\
- , is_absent, is_manual_absent, is_breach, is_exception\
- , objective_score, subjective_score, exam_site, exam_room, remark) \
- values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,0,?,?,?,?,?)',
- datas).then(() => {
- count += datas.length
- this.emit('student', count)
- resolve()
- }).catch((err) => {
- reject(err)
- })
- }))
- }
- //save campus
- this.emit('campus', 0)
- let campusData = []
- for (let code in campus) {
- campusData.push([code, campus[code].schoolId, campus[code].name])
- }
- logger.info('campus count:' + campusData.length)
- promises.push(new Promise((resolve, reject) => {
- db.batchQuery('replace into b_campus(id, school_id, name) values (?,?,?)', campusData).then(() => {
- this.emit('campus', campusData.length)
- resolve()
- }).catch(err => {
- reject(err)
- })
- }))
- //get and save package
- this.emit('package', 0)
- let packages = await api.getPackages(env.examId)
- let packageData = []
- for (let i = 0; i < packages.length; i++) {
- let obj = packages[i]
- packageData.push([env.examId, obj['code'], obj['picCount']])
- }
- logger.info('package count:' + packageData.length)
- promises.push(new Promise((resolve, reject) => {
- db.batchQuery('replace into eb_exam_package(exam_id, code, pic_count) values (?,?,?)', packageData).then(() => {
- this.emit('package', packageData.length)
- resolve()
- }).catch((err) => {
- reject(err)
- })
- }))
- await Promise.all(promises)
- this.emit('finish')
- } catch (err) {
- this.emit('error', err)
- logger.error(err)
- } finally {
- //console.log(moment().format('YYYY-MM-DD HH:mm:ss'))
- }
- }
- }
- module.exports = function () {
- return new executor()
- }
|