|
|
@ -4,102 +4,105 @@ const request = require('superagent'); |
|
|
|
|
|
|
|
module.exports = function (app, opts) { |
|
|
|
|
|
|
|
async function memberList ({ |
|
|
|
keywordTarget, keyword, limit, page, state, |
|
|
|
hiredateStart, hiredateEnd, marital, native, workPlace, |
|
|
|
orderBy, orderDirection, |
|
|
|
nowAttendanceTime, |
|
|
|
overtimeDayStatisticStartDate, overtimeDayStatisticendDate, |
|
|
|
overtimeCountStatistic, overtimeCountStatisticStartDate, overtimeCountStatisticendDate, |
|
|
|
vacateDayStatisticStartDate, vacateDayStatisticendDate, |
|
|
|
vacateDurationStatistic, vacateCountStatistic, vacateCountStatisticStartDate, vacateCountStatisticendDate |
|
|
|
}) { |
|
|
|
const { judgeHoliday } = app.fs.utils |
|
|
|
const { clickHouse } = app.fs |
|
|
|
const { database: pepEmis } = clickHouse.pepEmis.opts.config |
|
|
|
async function memberList({ |
|
|
|
keywordTarget, keyword, limit, page, state, |
|
|
|
hiredateStart, hiredateEnd, marital, native, workPlace, |
|
|
|
orderBy, orderDirection, |
|
|
|
nowAttendanceTime, |
|
|
|
overtimeDayStatisticStartDate, overtimeDayStatisticendDate, |
|
|
|
overtimeCountStatistic, overtimeCountStatisticStartDate, overtimeCountStatisticendDate, |
|
|
|
vacateDayStatisticStartDate, vacateDayStatisticendDate, |
|
|
|
vacateDurationStatistic, vacateCountStatistic, vacateCountStatisticStartDate, vacateCountStatisticendDate, |
|
|
|
userIds |
|
|
|
}) { |
|
|
|
const { judgeHoliday } = app.fs.utils |
|
|
|
const { clickHouse } = app.fs |
|
|
|
const { database: pepEmis } = clickHouse.pepEmis.opts.config |
|
|
|
|
|
|
|
const curDay = moment().format('YYYY-MM-DD') |
|
|
|
const nowTime = moment() |
|
|
|
let whereOption = [] |
|
|
|
let whereFromSelectOption = [] |
|
|
|
let returnEmpty = false |
|
|
|
if (state == 'inOffice') { |
|
|
|
// 在岗
|
|
|
|
const holidayJudge = await judgeHoliday(curDay) |
|
|
|
if (holidayJudge) { |
|
|
|
if ( |
|
|
|
holidayJudge.workday |
|
|
|
&& nowTime.isAfter(moment(curDay + ' 08:30')) |
|
|
|
&& nowTime.isBefore(moment(curDay + ' 17:30')) |
|
|
|
) { |
|
|
|
// 在工作日的工作时间范围 无请假记录
|
|
|
|
whereFromSelectOption.push(`vacateStartTime = '1970-01-01 00:00:00.000000'`) |
|
|
|
const curDay = moment().format('YYYY-MM-DD') |
|
|
|
const nowTime = moment() |
|
|
|
let whereOption = [] |
|
|
|
let whereFromSelectOption = [] |
|
|
|
let returnEmpty = false |
|
|
|
if (state == 'inOffice') { |
|
|
|
// 在岗
|
|
|
|
const holidayJudge = await judgeHoliday(curDay) |
|
|
|
if (holidayJudge) { |
|
|
|
if ( |
|
|
|
holidayJudge.workday |
|
|
|
&& nowTime.isAfter(moment(curDay + ' 08:30')) |
|
|
|
&& nowTime.isBefore(moment(curDay + ' 17:30')) |
|
|
|
) { |
|
|
|
// 在工作日的工作时间范围 无请假记录
|
|
|
|
whereFromSelectOption.push(`vacateStartTime = '1970-01-01 00:00:00.000000'`) |
|
|
|
} else { |
|
|
|
returnEmpty = true |
|
|
|
} |
|
|
|
} else { |
|
|
|
returnEmpty = true |
|
|
|
returnEmpty = true |
|
|
|
} |
|
|
|
} else { |
|
|
|
returnEmpty = true |
|
|
|
} |
|
|
|
} |
|
|
|
if (state == 'dayoff') { |
|
|
|
// 放假
|
|
|
|
const holidayJudge = await judgeHoliday(curDay) |
|
|
|
if (holidayJudge) { |
|
|
|
if ( |
|
|
|
holidayJudge.dayoff || holidayJudge.festivals |
|
|
|
) { |
|
|
|
// 在休息日范围内且无加班申请
|
|
|
|
whereFromSelectOption.push(`overtimeStartTime = '1970-01-01 00:00:00.000000'`) |
|
|
|
} |
|
|
|
if (state == 'dayoff') { |
|
|
|
// 放假
|
|
|
|
const holidayJudge = await judgeHoliday(curDay) |
|
|
|
if (holidayJudge) { |
|
|
|
if ( |
|
|
|
holidayJudge.dayoff || holidayJudge.festivals |
|
|
|
) { |
|
|
|
// 在休息日范围内且无加班申请
|
|
|
|
whereFromSelectOption.push(`overtimeStartTime = '1970-01-01 00:00:00.000000'`) |
|
|
|
} else { |
|
|
|
returnEmpty = true |
|
|
|
} |
|
|
|
} else { |
|
|
|
returnEmpty = true |
|
|
|
returnEmpty = true |
|
|
|
} |
|
|
|
} else { |
|
|
|
returnEmpty = true |
|
|
|
} |
|
|
|
} |
|
|
|
if (returnEmpty) { |
|
|
|
return { |
|
|
|
count: 0, |
|
|
|
rows: [] |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
if (returnEmpty) { |
|
|
|
return { |
|
|
|
count: 0, |
|
|
|
rows: [] |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
let overtimeDayStatisticWhere = [] |
|
|
|
if (overtimeDayStatisticStartDate) { |
|
|
|
overtimeDayStatisticWhere.push(`overtime_day.day >= '${moment(overtimeDayStatisticStartDate).format('YYYY-MM-DD')}'`) |
|
|
|
} |
|
|
|
if (overtimeDayStatisticendDate) { |
|
|
|
overtimeDayStatisticWhere.push(`overtime_day.day <= '${moment(overtimeDayStatisticendDate).format('YYYY-MM-DD')}'`) |
|
|
|
} |
|
|
|
let overtimeDayStatisticWhere = [] |
|
|
|
if (overtimeDayStatisticStartDate) { |
|
|
|
overtimeDayStatisticWhere.push(`overtime_day.day >= '${moment(overtimeDayStatisticStartDate).format('YYYY-MM-DD')}'`) |
|
|
|
} |
|
|
|
if (overtimeDayStatisticendDate) { |
|
|
|
overtimeDayStatisticWhere.push(`overtime_day.day <= '${moment(overtimeDayStatisticendDate).format('YYYY-MM-DD')}'`) |
|
|
|
} |
|
|
|
|
|
|
|
let overtimeCountStatisticWhere = [] |
|
|
|
if (overtimeCountStatisticStartDate) { |
|
|
|
overtimeCountStatisticWhere.push(`overtime.start_time >= '${moment(overtimeCountStatisticStartDate).startOf('day').format('YYYY-MM-DD HH:mm:ss')}'`) |
|
|
|
} |
|
|
|
if (overtimeCountStatisticendDate) { |
|
|
|
overtimeCountStatisticWhere.push(`overtime.end_time <= '${moment(overtimeCountStatisticendDate).endOf('day').format('YYYY-MM-DD HH:mm:ss')}'`) |
|
|
|
} |
|
|
|
let overtimeCountStatisticWhere = [] |
|
|
|
if (overtimeCountStatisticStartDate) { |
|
|
|
overtimeCountStatisticWhere.push(`overtime.start_time >= '${moment(overtimeCountStatisticStartDate).startOf('day').format('YYYY-MM-DD HH:mm:ss')}'`) |
|
|
|
} |
|
|
|
if (overtimeCountStatisticendDate) { |
|
|
|
overtimeCountStatisticWhere.push(`overtime.end_time <= '${moment(overtimeCountStatisticendDate).endOf('day').format('YYYY-MM-DD HH:mm:ss')}'`) |
|
|
|
} |
|
|
|
|
|
|
|
let vacateDayStatisticWhere = [] |
|
|
|
if (vacateDayStatisticStartDate) { |
|
|
|
vacateDayStatisticWhere.push(`vacate_day.day >= '${moment(vacateDayStatisticStartDate).format('YYYY-MM-DD')}'`) |
|
|
|
} |
|
|
|
if (vacateDayStatisticendDate) { |
|
|
|
vacateDayStatisticWhere.push(`vacate_day.day <= '${moment(vacateDayStatisticendDate).format('YYYY-MM-DD')}'`) |
|
|
|
} |
|
|
|
let vacateDayStatisticWhere = [] |
|
|
|
if (vacateDayStatisticStartDate) { |
|
|
|
vacateDayStatisticWhere.push(`vacate_day.day >= '${moment(vacateDayStatisticStartDate).format('YYYY-MM-DD')}'`) |
|
|
|
} |
|
|
|
if (vacateDayStatisticendDate) { |
|
|
|
vacateDayStatisticWhere.push(`vacate_day.day <= '${moment(vacateDayStatisticendDate).format('YYYY-MM-DD')}'`) |
|
|
|
} |
|
|
|
|
|
|
|
let vacateCountStatisticWhere = [] |
|
|
|
if (vacateCountStatisticStartDate) { |
|
|
|
vacateCountStatisticWhere.push(`vacate.start_time >= '${moment(vacateCountStatisticStartDate).startOf('day').format('YYYY-MM-DD HH:mm:ss')}'`) |
|
|
|
} |
|
|
|
if (vacateCountStatisticendDate) { |
|
|
|
vacateCountStatisticWhere.push(`vacate.end_time <= '${moment(vacateCountStatisticendDate).endOf('day').format('YYYY-MM-DD HH:mm:ss')}'`) |
|
|
|
} |
|
|
|
// CRAZY
|
|
|
|
const innerSelectQuery = ` |
|
|
|
let vacateCountStatisticWhere = [] |
|
|
|
if (vacateCountStatisticStartDate) { |
|
|
|
vacateCountStatisticWhere.push(`vacate.start_time >= '${moment(vacateCountStatisticStartDate).startOf('day').format('YYYY-MM-DD HH:mm:ss')}'`) |
|
|
|
} |
|
|
|
if (vacateCountStatisticendDate) { |
|
|
|
vacateCountStatisticWhere.push(`vacate.end_time <= '${moment(vacateCountStatisticendDate).endOf('day').format('YYYY-MM-DD HH:mm:ss')}'`) |
|
|
|
} |
|
|
|
// CRAZY
|
|
|
|
const innerSelectQuery = ` |
|
|
|
FROM member |
|
|
|
INNER JOIN ${pepEmis}.user AS user |
|
|
|
ON member.pep_user_id = user.id |
|
|
|
${userIds && userIds.length ? `AND user.id in (${userIds.join(',')})` : ''} |
|
|
|
|
|
|
|
${keywordTarget == 'number' && keyword ? ` |
|
|
|
AND user.people_code LIKE '%${keyword}%' |
|
|
|
`: ''}
|
|
|
@ -137,9 +140,9 @@ module.exports = function (app, opts) { |
|
|
|
`: ''}
|
|
|
|
|
|
|
|
${orderBy == 'overtimeTakeRestSum' || |
|
|
|
orderBy == 'overtimePaySum' || |
|
|
|
orderBy == 'overtimeSum' ? |
|
|
|
`LEFT JOIN (
|
|
|
|
orderBy == 'overtimePaySum' || |
|
|
|
orderBy == 'overtimeSum' ? |
|
|
|
`LEFT JOIN (
|
|
|
|
SELECT |
|
|
|
overtime.pep_user_id AS pepUserId, |
|
|
|
sum(overtime_day.duration) AS duration |
|
|
@ -170,8 +173,8 @@ module.exports = function (app, opts) { |
|
|
|
`: ''}
|
|
|
|
|
|
|
|
${vacateDurationStatistic || |
|
|
|
orderBy == 'vacateSum' ? |
|
|
|
`LEFT JOIN (
|
|
|
|
orderBy == 'vacateSum' ? |
|
|
|
`LEFT JOIN (
|
|
|
|
SELECT |
|
|
|
vacate.pep_user_id AS pepUserId, |
|
|
|
sum(vacate_day.duration) AS duration |
|
|
@ -236,7 +239,7 @@ module.exports = function (app, opts) { |
|
|
|
`: ''}
|
|
|
|
` |
|
|
|
|
|
|
|
const userRes = await clickHouse.hr.query(` |
|
|
|
const userRes = await clickHouse.hr.query(` |
|
|
|
SELECT |
|
|
|
hrMember."member.pep_user_id" AS pepUserId, |
|
|
|
hrMember.*, |
|
|
@ -253,8 +256,8 @@ module.exports = function (app, opts) { |
|
|
|
FROM ( |
|
|
|
SELECT |
|
|
|
${orderBy == 'overtimeTakeRestSum' |
|
|
|
|| orderBy == 'overtimePaySum' |
|
|
|
|| orderBy == 'overtimeSum' ? ` |
|
|
|
|| orderBy == 'overtimePaySum' |
|
|
|
|| orderBy == 'overtimeSum' ? ` |
|
|
|
overtimeDayStatistic.duration AS overtimeDayStatisticDuration, |
|
|
|
`: ''}
|
|
|
|
|
|
|
@ -279,6 +282,26 @@ module.exports = function (app, opts) { |
|
|
|
|
|
|
|
member.* |
|
|
|
${innerSelectQuery} |
|
|
|
|
|
|
|
ORDER BY ${orderBy == 'code' ? |
|
|
|
'user.people_code' |
|
|
|
: orderBy == 'hiredate' |
|
|
|
? 'member.hiredate' |
|
|
|
: orderBy == 'age' |
|
|
|
? 'member.birthday' |
|
|
|
: orderBy == 'overtimeTakeRestSum' |
|
|
|
|| orderBy == 'overtimePaySum' |
|
|
|
|| orderBy == 'overtimeSum' ? |
|
|
|
'overtimeDayStatisticDuration' |
|
|
|
: orderBy == 'overtimeCount' ? |
|
|
|
'overtimeCount' |
|
|
|
: orderBy == 'vacateSum' ? |
|
|
|
'vacateDayStatisticDuration' |
|
|
|
: orderBy == 'vacateCount' ? |
|
|
|
'vacateCount' |
|
|
|
: 'user.people_code'} |
|
|
|
${orderDirection || 'ASC'} |
|
|
|
|
|
|
|
${limit ? `LIMIT ${limit}` : ''} |
|
|
|
${limit && page ? 'OFFSET ' + parseInt(limit) * parseInt(page) : ''} |
|
|
|
) AS hrMember |
|
|
@ -296,120 +319,103 @@ module.exports = function (app, opts) { |
|
|
|
LEFT JOIN ${pepEmis}.department AS department |
|
|
|
ON department.id = department_user.department |
|
|
|
${whereOption.length ? `WHERE ${whereOption.join(' AND ')}` : ''} |
|
|
|
ORDER BY ${orderBy == 'code' ? |
|
|
|
'user.people_code' |
|
|
|
: orderBy == 'hiredate' |
|
|
|
? 'hrMember."member.hiredate"' |
|
|
|
: orderBy == 'age' |
|
|
|
? 'hrMember."member.birthday"' |
|
|
|
: orderBy == 'overtimeTakeRestSum' |
|
|
|
|| orderBy == 'overtimePaySum' |
|
|
|
|| orderBy == 'overtimeSum' ? |
|
|
|
'hrMember.overtimeDayStatisticDuration' |
|
|
|
: orderBy == 'overtimeCount' ? |
|
|
|
'hrMember.overtimeCount' |
|
|
|
: orderBy == 'vacateSum' ? |
|
|
|
'hrMember.vacateDayStatisticDuration' |
|
|
|
: orderBy == 'vacateCount' ? |
|
|
|
'hrMember.vacateCount' |
|
|
|
: 'user.people_code'} |
|
|
|
${orderDirection || 'ASC'} |
|
|
|
|
|
|
|
`).toPromise()
|
|
|
|
|
|
|
|
const countRes = await clickHouse.hr.query(` |
|
|
|
const countRes = await clickHouse.hr.query(` |
|
|
|
SELECT |
|
|
|
count(member.pep_user_id) AS count |
|
|
|
${innerSelectQuery} |
|
|
|
`).toPromise()
|
|
|
|
|
|
|
|
return { |
|
|
|
count: countRes[0].count, |
|
|
|
rows: userRes |
|
|
|
} |
|
|
|
} |
|
|
|
return { |
|
|
|
count: countRes[0].count, |
|
|
|
rows: userRes |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
async function packageUserData (userRes, option = {}) { |
|
|
|
async function packageUserData(userRes, option = {}) { |
|
|
|
|
|
|
|
const { judgeHoliday, } = app.fs.utils |
|
|
|
let workTime = false |
|
|
|
let dayoffTime = false |
|
|
|
if (option.state) { |
|
|
|
const curDay = moment().format('YYYY-MM-DD') |
|
|
|
const nowTime = moment() |
|
|
|
const holidayJudge = await judgeHoliday(curDay) |
|
|
|
if (holidayJudge) { |
|
|
|
if ( |
|
|
|
holidayJudge.workday |
|
|
|
&& nowTime.isAfter(moment(curDay + ' 08:30')) |
|
|
|
&& nowTime.isBefore(moment(curDay + ' 17:30')) |
|
|
|
) { |
|
|
|
workTime = true |
|
|
|
} else if (holidayJudge.dayoff || holidayJudge.festivals) { |
|
|
|
dayoffTime = true |
|
|
|
const { judgeHoliday, } = app.fs.utils |
|
|
|
let workTime = false |
|
|
|
let dayoffTime = false |
|
|
|
if (option.state) { |
|
|
|
const curDay = moment().format('YYYY-MM-DD') |
|
|
|
const nowTime = moment() |
|
|
|
const holidayJudge = await judgeHoliday(curDay) |
|
|
|
if (holidayJudge) { |
|
|
|
if ( |
|
|
|
holidayJudge.workday |
|
|
|
&& nowTime.isAfter(moment(curDay + ' 08:30')) |
|
|
|
&& nowTime.isBefore(moment(curDay + ' 17:30')) |
|
|
|
) { |
|
|
|
workTime = true |
|
|
|
} else if (holidayJudge.dayoff || holidayJudge.festivals) { |
|
|
|
dayoffTime = true |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
let returnD = [] |
|
|
|
let pepUserIds = [-1] |
|
|
|
userRes.rows.forEach(u => { |
|
|
|
let existUser = returnD.find(r => r.pepUserId == u.pepUserId) |
|
|
|
if (existUser) { |
|
|
|
if (u.depId && !existUser.departmrnt.some(d => d.id == u.depId)) { |
|
|
|
existUser.departmrnt.push({ |
|
|
|
id: u.depId, |
|
|
|
name: u.depName |
|
|
|
}) |
|
|
|
} |
|
|
|
if (u.roleId && !existUser.role.some(r => r.id == u.roleId)) { |
|
|
|
existUser.role.push({ |
|
|
|
id: u.roleId, |
|
|
|
name: u.roleName |
|
|
|
}) |
|
|
|
} |
|
|
|
} else { |
|
|
|
let obj = {} |
|
|
|
for (let k in u) { |
|
|
|
let nextKey = k.replace('hrMember.', '') |
|
|
|
.replace('member.', '') |
|
|
|
if (nextKey.includes('_')) { |
|
|
|
nextKey = nextKey.toLowerCase() |
|
|
|
.replace( |
|
|
|
/(_)[a-z]/g, |
|
|
|
(L) => L.toUpperCase() |
|
|
|
) |
|
|
|
.replace(/_/g, '') |
|
|
|
} |
|
|
|
obj[nextKey] = u[k] == '1970-01-01 00:00:00.000000' || u[k] == '1970-01-01 08:00:00.000000' ? null : u[k] |
|
|
|
let returnD = [] |
|
|
|
let pepUserIds = [-1] |
|
|
|
userRes.rows.forEach(u => { |
|
|
|
let existUser = returnD.find(r => r.pepUserId == u.pepUserId) |
|
|
|
if (existUser) { |
|
|
|
if (u.depId && !existUser.departmrnt.some(d => d.id == u.depId)) { |
|
|
|
existUser.departmrnt.push({ |
|
|
|
id: u.depId, |
|
|
|
name: u.depName |
|
|
|
}) |
|
|
|
} |
|
|
|
if (u.roleId && !existUser.role.some(r => r.id == u.roleId)) { |
|
|
|
existUser.role.push({ |
|
|
|
id: u.roleId, |
|
|
|
name: u.roleName |
|
|
|
}) |
|
|
|
} |
|
|
|
} else { |
|
|
|
let obj = {} |
|
|
|
for (let k in u) { |
|
|
|
let nextKey = k.replace('hrMember.', '') |
|
|
|
.replace('member.', '') |
|
|
|
if (nextKey.includes('_')) { |
|
|
|
nextKey = nextKey.toLowerCase() |
|
|
|
.replace( |
|
|
|
/(_)[a-z]/g, |
|
|
|
(L) => L.toUpperCase() |
|
|
|
) |
|
|
|
.replace(/_/g, '') |
|
|
|
} |
|
|
|
obj[nextKey] = u[k] == '1970-01-01 00:00:00.000000' || u[k] == '1970-01-01 08:00:00.000000' ? null : u[k] |
|
|
|
} |
|
|
|
pepUserIds.push(u.pepUserId) |
|
|
|
// console.log("查询到的用户信息:", obj);
|
|
|
|
returnD.push({ |
|
|
|
...obj, |
|
|
|
departmrnt: u.depId ? [{ |
|
|
|
id: u.depId, |
|
|
|
name: u.depName |
|
|
|
}] : [], |
|
|
|
role: u.roleId ? [{ |
|
|
|
id: u.roleId, |
|
|
|
name: u.roleName |
|
|
|
}] : [], |
|
|
|
state: option.state ? |
|
|
|
obj['dimissionDate'] ? 'dimission' : |
|
|
|
obj['vacateStartTime'] ? 'vacate' : |
|
|
|
workTime ? 'inOffice' : |
|
|
|
dayoffTime ? 'dayoff' : 'rest' |
|
|
|
: undefined, |
|
|
|
del: undefined, |
|
|
|
pepuserid: undefined |
|
|
|
}) |
|
|
|
} |
|
|
|
pepUserIds.push(u.pepUserId) |
|
|
|
console.log("查询到的用户信息:", obj); |
|
|
|
returnD.push({ |
|
|
|
...obj, |
|
|
|
departmrnt: u.depId ? [{ |
|
|
|
id: u.depId, |
|
|
|
name: u.depName |
|
|
|
}] : [], |
|
|
|
role: u.roleId ? [{ |
|
|
|
id: u.roleId, |
|
|
|
name: u.roleName |
|
|
|
}] : [], |
|
|
|
state: option.state ? |
|
|
|
obj['dimissionDate'] ? 'dimission' : |
|
|
|
obj['vacateStartTime'] ? 'vacate' : |
|
|
|
workTime ? 'inOffice' : |
|
|
|
dayoffTime ? 'dayoff' : 'rest' |
|
|
|
: undefined, |
|
|
|
del: undefined, |
|
|
|
pepuserid: undefined |
|
|
|
}) |
|
|
|
} |
|
|
|
}) |
|
|
|
return { packageUser: returnD, pepUserIds } |
|
|
|
} |
|
|
|
}) |
|
|
|
return { packageUser: returnD, pepUserIds } |
|
|
|
} |
|
|
|
|
|
|
|
return { |
|
|
|
memberList, |
|
|
|
packageUserData |
|
|
|
} |
|
|
|
return { |
|
|
|
memberList, |
|
|
|
packageUserData |
|
|
|
} |
|
|
|
} |