|
|
@ -1,5 +1,18 @@ |
|
|
|
'use strict'; |
|
|
|
|
|
|
|
const MONTH_CONVERSION = { |
|
|
|
one: 1, |
|
|
|
two: 2, |
|
|
|
three: 3, |
|
|
|
four: 4, |
|
|
|
five: 5, |
|
|
|
six: 6, |
|
|
|
seven: 7, |
|
|
|
eight: 8, |
|
|
|
nine: 9, |
|
|
|
ten: 10, |
|
|
|
eleven: 11, |
|
|
|
twelve: 12 |
|
|
|
} |
|
|
|
// 查询业绩汇总表-->关联sale表
|
|
|
|
async function getSalePerformance(ctx, next) { |
|
|
|
const { type } = ctx.params; |
|
|
@ -11,7 +24,6 @@ async function getSalePerformance(ctx, next) { |
|
|
|
include: [{ |
|
|
|
model: models.salePerformance |
|
|
|
}] |
|
|
|
// where: { type: type }
|
|
|
|
}) |
|
|
|
ctx.status = 200 |
|
|
|
ctx.body = rslt |
|
|
@ -22,6 +34,111 @@ async function getSalePerformance(ctx, next) { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
async function importSalePerformance(ctx) { |
|
|
|
let errorMsg = { message: '导入业绩汇总失败' }; |
|
|
|
const transaction = await ctx.fs.dc.orm.transaction(); |
|
|
|
try { |
|
|
|
const models = ctx.fs.dc.models; |
|
|
|
const body = ctx.request.body; |
|
|
|
let importData = []; |
|
|
|
const imporNames = []; |
|
|
|
for (let item of body) {//循环捞数据
|
|
|
|
const { name, ...rest } = item; |
|
|
|
const data = []; |
|
|
|
imporNames.push(name); |
|
|
|
Object.keys(rest).map(value => { |
|
|
|
if (MONTH_CONVERSION[value.replace("ActualPerformance", "")]) { |
|
|
|
const index = data.findIndex(d => d.month == MONTH_CONVERSION[value.replace("ActualPerformance", "")]); |
|
|
|
if (index > -1) { |
|
|
|
data[index].actualPerformance = item[value]; |
|
|
|
} else { |
|
|
|
data.push({ |
|
|
|
saleName: item.name, |
|
|
|
month: MONTH_CONVERSION[value.replace("ActualPerformance", "")], |
|
|
|
actualPerformance: item[value] |
|
|
|
}); |
|
|
|
} |
|
|
|
} else if (MONTH_CONVERSION[value.replace("AssessmentPerformance", "")]) { |
|
|
|
const index = data.findIndex(d => d.month == MONTH_CONVERSION[value.replace("AssessmentPerformance", "")]); |
|
|
|
if (index > -1) { |
|
|
|
data[index].assessmentPerformance = item[value]; |
|
|
|
} else { |
|
|
|
data.push({ |
|
|
|
saleName: item.name, |
|
|
|
month: MONTH_CONVERSION[value.replace("AssessmentPerformance", "")], |
|
|
|
assessmentPerformance: item[value] |
|
|
|
}); |
|
|
|
} |
|
|
|
} else if (MONTH_CONVERSION[value.replace("Task", "")]) { |
|
|
|
const index = data.findIndex(d => d.month == MONTH_CONVERSION[value.replace("Task", "")]); |
|
|
|
if (index > -1) { |
|
|
|
data[index].task = item[value]; |
|
|
|
} else { |
|
|
|
data.push({ |
|
|
|
saleName: item.name, |
|
|
|
month: MONTH_CONVERSION[value.replace("Task", "")], |
|
|
|
task: item[value] |
|
|
|
}); |
|
|
|
} |
|
|
|
} else if (MONTH_CONVERSION[value.replace("Amount", "")]) { |
|
|
|
const index = data.findIndex(d => d.month == MONTH_CONVERSION[value.replace("Amount", "")]); |
|
|
|
if (index > -1) { |
|
|
|
data[index].amount = item[value]; |
|
|
|
} else { |
|
|
|
data.push({ |
|
|
|
saleName: item.name, |
|
|
|
month: MONTH_CONVERSION[value.replace("Amount", "")], |
|
|
|
amount: item[value] |
|
|
|
}); |
|
|
|
} |
|
|
|
} else { |
|
|
|
|
|
|
|
} |
|
|
|
}) |
|
|
|
if (data.length) { |
|
|
|
importData = importData.concat(data); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/**查出历史数据进行比对 |
|
|
|
* 1. 比对是否存在的月份+销售名称 |
|
|
|
* a. 存在:记录id(用于删除) |
|
|
|
* b. 不存在,记录数据 |
|
|
|
* 2. 批量删除记录的ids |
|
|
|
* 3. 批量插入导入数据 |
|
|
|
* |
|
|
|
* PS:库里的数据以导入的数据为准(如果历史数据task字段有值,导入的数据该字段为空,即库里的task为空值) |
|
|
|
*/ |
|
|
|
if (imporNames.length) { |
|
|
|
const delDataIds = []; |
|
|
|
const oldData = await models.salePerformance.findAll({ |
|
|
|
//todo 待考虑加入年份比对
|
|
|
|
where: { saleName: { $in: imporNames } } |
|
|
|
}); |
|
|
|
if (oldData.length) { |
|
|
|
for (let old of oldData) { |
|
|
|
if (importData.find(d => d.month == old.month && d.saleName == old.saleName)) { |
|
|
|
delDataIds.push(old.id); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
await models.salePerformance.destroy({ where: { id: { $in: delDataIds } }, transaction }); |
|
|
|
|
|
|
|
} |
|
|
|
if (importData.length) |
|
|
|
await models.salePerformance.bulkCreate(importData, { transaction }); |
|
|
|
|
|
|
|
await transaction.commit(); |
|
|
|
ctx.status = 204; |
|
|
|
} catch (error) { |
|
|
|
await transaction.rollback(); |
|
|
|
ctx.fs.logger.error(`path: ${ctx.path}, error: ${error}`); |
|
|
|
ctx.status = 400; |
|
|
|
ctx.body = errorMsg; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
module.exports = { |
|
|
|
getSalePerformance, |
|
|
|
importSalePerformance, |
|
|
|
} |