Commit db41784e authored by “yiyousong”'s avatar “yiyousong”
parents c475638e 8667e872
......@@ -31,7 +31,8 @@ export default {
</script>
<style lang="less" scoped>
#app {
#app {
height:100vh;
.loading {
display: flex;
align-items: center;
......
......@@ -11,8 +11,8 @@ html * {
}
html,
body {
height: 100%;
min-height: 100%;
/* height: 100%; */
/* min-height: 100%; */
font-family: "Microsoft Yahei", "Helvetica Neue", Helvetica, STHeiTi, Arial, sans-serif;
}
body {
......
......@@ -13,13 +13,13 @@ html * {
html,
body {
height: 100%;
min-height: 100%;
// height: 100%;
// min-height: 100%;
font-family: "Microsoft Yahei", "Helvetica Neue", Helvetica, STHeiTi, Arial,
sans-serif;
}
body {
overflow-y: scroll;
// overflow-y: scroll;
}
body,
div,
......
......@@ -8,12 +8,26 @@ export default {
methods: {
// 渲染前置处理
beforeRender(data) {
if (data.entity.attachmentPath) {
data.entity.attachmentPathList = [
{
url: data.entity.attachmentPath,
name: data.entity.attachmentPath,
},
];
}
console.log(data);
return data;
},
// 渲染后置处理
afterRender(data) {},
// 提交表单的前置处理
beforeSubmit(data) {
data.attachmentPathList && data.attachmentPathList.length > 0
? (data.attachmentPath = data.attachmentPathList[0].url)
: (data.attachmentPath = "");
console.log(data);
return data;
},
// 提交表单的后置处理, 会阻断默认的回退行为
......@@ -33,6 +47,7 @@ export default {
// 默认拉取数据
getData() {
this.loading = true;
this.$get(this.urls.currUrl || this.pageInfo.currUrl, this.query)
.then(({ data }) => {
const res = this.beforeRender(data);
......@@ -43,6 +58,7 @@ export default {
//
res.entity = this.util_toDateStr(res.entity, this.toDate);
this.form = Object.assign({}, this.form, res.entity);
this.dict = Object.assign({}, this.dict, res.dict);
this.afterRender(res);
})
......
......@@ -205,10 +205,26 @@ export default {
<el-tag type={"success"} size="mini">
{content}
</el-tag>
) : row.checkStatus == 1 || row.processStatus == 1 ? (
row.subAddType == 1 && column.label.includes("分值") ? (
<el-link type={"info"}>(+{content})</el-link>
) : row.subAddType == 2 && column.label.includes("分值") ? (
<el-link type={"info"}>({-content})</el-link>
) : (
<p>{content}</p>
)
) : row.checkStatus == 2 || row.processStatus == 2 ? (
row.subAddType == 1 && column.label.includes("分值") ? (
<el-link>+{content}</el-link>
) : row.subAddType == 2 && column.label.includes("分值") ? (
<el-link>{-content}</el-link>
) : (
<p>{content}</p>
)
) : row.subAddType == 1 && column.label.includes("分值") ? (
<p>{content}</p>
<el-link>+{content}</el-link>
) : row.subAddType == 2 && column.label.includes("分值") ? (
<p>{-content}</p>
<el-link>{-content}</el-link>
) : (
<p>{content}</p>
)
......@@ -330,7 +346,7 @@ export default {
},
// 格式化单元格数据
formatterDate(row, column) {
console.log("date:",row,column)
// console.log("date:",row,column)
return formatterDate(row, column);
},
// 格式化单元格数据 只要年月日
......@@ -457,13 +473,14 @@ export default {
const regular = new RegExp(`.*\.${suffix}`);
if (regular.test(val)) {
return (
<el-image
src={val.indexOf("http") == -1 ? baseUrl + val : val}
preview-src-list={
val.indexOf("http") == -1 ? [baseUrl + val] : [val]
}
style="width: 100px"
></el-image>
// <el-image
// src={val.indexOf("http") == -1 ? baseUrl + val : val}
// preview-src-list={
// val.indexOf("http") == -1 ? [baseUrl + val] : [val]
// }
// style="width: 100px"
// ></el-image>
<filepReview src={val}/>
);
} else {
return <el-link type="primary">{val}</el-link>;
......@@ -565,7 +582,7 @@ export default {
},
// 查看
toView(row, query) {
console.log(this.pageInfo.view);
// console.log(this.pageInfo.view);
this.$router.push({
path: this.pageInfo.view,
query: Object.assign({}, { id: row.id }, query),
......
......@@ -15,6 +15,7 @@ import FileUpload from '@/components/FileUpload';
import Editor from '@/components/Editor';
import Map from '@/components/Map';
import MapDetail from '@/components/MapDetail';
import filepReview from '@/components/filepReview';
const Prototype = function() {};
Prototype.install = (Vue, options) => {
......@@ -34,6 +35,7 @@ Prototype.install = (Vue, options) => {
Vue.component('Editor', Editor) // 富文本
Vue.component('Map', Map) // 地图
Vue.component('MapDetail', MapDetail) // 地图
Vue.component('filepReview', filepReview) // 图片文件预览
}
export default Prototype;
......@@ -13,7 +13,6 @@
:empty-text="emptytxt ? emptytxt : emptyText"
border
style="width: 100%"
height="530"
>
<el-table-column
v-for="column in columns"
......
......@@ -8,7 +8,7 @@
:row-class-name="tableRowClassName"
:default-expand-all="expand"
:tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
height="520"
height="630px"
>
<el-table-column
......
......@@ -226,7 +226,6 @@ export default {
},
maxLength: {
type: Number,
default: 256,
},
},
methods: {
......
......@@ -226,7 +226,7 @@ export default {
}
}
.controllBar {
background-color: rgba(170, 170, 170, 0.4);
background-color: rgba(255, 255, 255, 0.2);
width: 120px;
height: 44px;
line-height: 44px;
......
......@@ -344,6 +344,7 @@ export default {
let newData = { page: 1 };
Object.keys(data).forEach((item) => {
let val = data[item];
console.log(item,this.search)
this.search.forEach((obj) => {
if (
obj.name === item &&
......@@ -363,6 +364,7 @@ export default {
});
newData[item] = this.decodeVal(val);
});
return newData;
},
decodeVal(val) {
......
<template>
<div class="img-flex">
<el-image
:src="urlVal(item)"
:preview-src-list="[urlVal(item)]" alt="" v-for="item in fileList" :key="item"/>
</div>
</template>
<script>
const baseUrl = process.env.VUE_APP_API_BASE_URL + "/";
export default {
props:['src'],
data() {
return {}
},
created() {
console.log(this.src)
},
computed: {
fileList:function(v){
return this.src?this.src.split(","):[]
}
},
methods: {
urlVal(val){
console.log(val,"2222")
return val.indexOf("http") == -1 ? baseUrl + val : val
}
},
}
</script>
<style lang="less" scoped>
.img-flex{
overflow: hidden;
display: inline-block;
vertical-align: middle;
.el-image{
width: 50px;
float: left;
border:1px solid #ddd;
margin: 2px;
}
}
</style>
\ No newline at end of file
<template>
<div :style="menuPageCss" class="pages page-layout">
<LayoutHeader
v-if="menuPage !== 'left'"
@changePath="changePath"
></LayoutHeader>
<LayoutHeaderLeft
@toggle="toggle"
:isOpen="isOpen"
v-if="menuPage === 'left'"
/>
<div style="padding:15px">
<LayoutHeader v-if="menuPage !== 'left'" @changePath="changePath"></LayoutHeader>
<LayoutHeaderLeft @toggle="toggle" :isOpen="isOpen" v-if="menuPage === 'left'" />
<div class="layout">
<router-view :class="{ active: !isOpen }" />
</div>
</div>
......@@ -57,6 +50,12 @@ export default {
</script>
<style lang="less">
.layout {
padding: 15px 15px 0 15px;
box-sizing: border-box;
}
.page {
min-height: calc(100vh - 100px);
width: 100%;
......@@ -65,12 +64,32 @@ export default {
// var(--padding-top) 5px 5px 5px;
// margin-left: 60px;
padding: 10px;
&.active {
margin-left: var(--margin-left);
}
}
.page-layout {
background: #eee;
height: 100vh;
overflow: auto;
}
/* 侧边滚动条 */
.page-layout::-webkit-scrollbar {
width: 3px;
}
/* 滚动条上的滚动滑块 */
.page-layout::-webkit-scrollbar-thumb {
background: #CCCCCC;
border-radius: 4px;
}
/* 滚动条轨道 */
.page-layout::-webkit-scrollbar-track {
background: #EEEEEE;
border-radius: 4px;
}
</style>
......@@ -239,7 +239,6 @@
return
}
if(arr.length > 1 && index>0){
console.log(11111)
// 上一次比较
let lastoffTime = transFormMinut(arr[index-1].offWorkDate) +
transFormMinut(arr[index - 1 ].offWorkDateAfter)
......
......@@ -39,15 +39,16 @@
label="开始时间"
prop="startTime"
v-model="form.startTime"
type="date"
type="datetime"
/>
<Field
disabled
label="结束时间"
prop="endTime"
v-model="form.endTime"
type="date"
type="datetime"
disabled
/>
<Field
disabled
label="时长,单位秒"
......@@ -66,8 +67,8 @@
<Field
disabled
label="审批负责人"
prop="approver"
v-model="form.approver"
prop="approverId"
v-model="form.approverId"
placeholder="请输入审批负责人"
/>
<Field
......@@ -147,6 +148,7 @@ export default {
open: false,
// urls: { saveUrl: "/check/attend/record/examine" },
toString: ["leaveType", "auditResult", "processStatus"],
toDate: ["startTime", "endTime"],
// 表单校验
rules: {},
};
......@@ -157,8 +159,11 @@ export default {
edit(row) {
this.reset();
this.query = { id: row.id };
this.urls.currUrl = "attendance/leave/record/edit";
this.getData();
// this.urls.currUrl = "attendance/leave/record/edit";
// this.getData();
this.$post("attendance/leave/record/edit", { id: row.id }).then((res) => {
console.log(res);
});
this.pageInfo.type = "edit";
this.title = "修改请假记录信息";
},
......@@ -176,8 +181,8 @@ export default {
this.query = { id: row.id };
this.urls.currUrl = "attendance/leave/record/view";
this.getData();
this.pageInfo.type = "view";
this.title = "请假记录信息详细";
this.pageInfo.type = "check";
this.title = "审核请假记录";
},
/**取消按钮 */
cancel() {
......
......@@ -16,6 +16,7 @@
v-model="form.leavePerson"
placeholder="请输入请假人"
:maxLength="10"
:disabled="pageInfo.type == 'view'"
/>
<Field
label="所属部门"
......@@ -24,6 +25,7 @@
type="select"
placeholder="请选择所属部门"
:enumData="dict.deptId"
:disabled="pageInfo.type == 'view'"
/>
<!-- <Field label="所属部门" prop="deptName" v-model="form.deptName" type="textarea" placeholder="请输入所属部门"/> -->
<Field
......@@ -32,6 +34,7 @@
v-model="form.phoneNumber"
placeholder="请输入电话号码"
:maxLength="11"
:disabled="pageInfo.type == 'view'"
/>
<Field
label="请假类型"
......@@ -40,13 +43,16 @@
type="select"
:enumData="dict.leaveType"
placeholder="请选择请假类型"
:disabled="pageInfo.type == 'view'"
/>
<Field
label="开始时间"
prop="startTime"
v-model="form.startTime"
type="datetime"
@change="changedate"
:disabled="pageInfo.type == 'view'"
/>
<Field
label="结束时间"
......@@ -54,6 +60,7 @@
v-model="form.endTime"
type="datetime"
@change="changedate"
:disabled="pageInfo.type == 'view'"
/>
<Field
......@@ -70,6 +77,23 @@
v-model="form.reason"
type="textarea"
placeholder="请输入请假事由"
:disabled="pageInfo.type == 'view'"
/>
<Field
label="审核结果"
prop="auditResult"
v-model="form.auditResult"
type="radio"
:enumData="dict.auditResult"
placeholder="请选择审核结果"
:disabled="pageInfo.type == 'view'"
/>
<Field
label="审核说明"
prop="auditDesc"
v-model="form.auditDesc"
placeholder="请输入审核说明"
:disabled="pageInfo.type == 'view'"
/>
<Field
label="审批负责人"
......@@ -78,6 +102,7 @@
v-model="form.approverId"
placeholder="请选择审批负责人"
:enumData="dict.approverId"
:disabled="pageInfo.type == 'view'"
/>
<!-- <Field label="审批负责人" prop="approver" v-model="form.approver" placeholder="请输入审批负责人"/> -->
<!-- <Field label="附件" prop="attachment" v-model="form.attachment" type="textarea" placeholder="请输入附件"/> -->
......@@ -87,16 +112,29 @@
v-model="form.remark"
type="textarea"
placeholder="请输入备注"
:disabled="pageInfo.type == 'view'"
/>
<Field
label="申请时间"
prop="createTime"
v-model="form.createTime"
type="datetime"
disabled
/>
</el-row>
<el-form-item label="附件路径" prop="attachmentPath">
<el-form-item label="附件路径" prop="attachmentPathList">
<FileUpload
@input="uploadFn"
:value="attachmentPath"
:value="form.attachmentPathList"
:fileNumber="1"
:disabled="pageInfo.type == 'view'"
/>
</el-form-item>
<form-buttons @submit="submitForm" noCancelBtn />
<form-buttons
@submit="submitForm"
noCancelBtn
v-if="pageInfo.type !== 'view'"
/>
</el-form>
</div>
</el-drawer>
......@@ -123,8 +161,8 @@ export default {
// 是否显示弹出层
open: false,
direction: "rtl",
toString: ["leaveType", "deptId", "approverId"],
toDate: ["startTime", "endTime"],
toString: ["leaveType", "deptId", "approverId", "auditResult"],
toDate: ["startTime", "endTime", "createTime"],
// 表单校验
rules: {
leavePerson: [
......@@ -155,14 +193,17 @@ export default {
approverId: [
{ required: true, message: "请选择审批人", trigger: "change" },
],
attachmentPath: [
{ required: true, message: "请上传附件文件", trigger: "change" },
// attachmentPathList: [
// { required: true, message: "请上传附件文件", trigger: "change" },
// ],
auditResult: [
{ required: true, message: "请选择审核结果", trigger: "change" },
],
},
attachmentPath: "",
};
},
watch: {},
methods: {
// beforeSubmit() {
// if (this.form.endTime.valueOf() > this.form.startTime.valueOf()) {
......@@ -172,8 +213,8 @@ export default {
// }
// },
uploadFn(e) {
this.attachmentPath = e;
this.form.attachmentPath = this.attachmentPath[0].url;
this.form.attachmentPathList = e;
this.$forceUpdate(this.form.attachmentPathList);
},
/** 编辑 */
edit(row) {
......@@ -181,6 +222,23 @@ export default {
this.query = { id: row.id };
this.urls.currUrl = "attendance/leave/record/edit";
this.getData();
// this.$get("attendance/leave/record/edit", { id: row.id }).then((res) => {
// if (res.code == 1) {
// this.form = res.data.entity;
// this.attachmentPath = res.data
// ? [
// {
// url: res.data.entity.attachmentPath,
// name: res.data.entity.attachmentPath,
// },
// ]
// : "";
// this.dict = res.data.dict;
// this.open = true;
// } else {
// this.reset();
// }
// });
this.pageInfo.type = "edit";
this.title = "修改请假记录信息";
},
......@@ -198,6 +256,7 @@ export default {
this.query = { id: row.id };
this.urls.currUrl = "attendance/leave/record/view";
this.getData();
this.pageInfo.type = "view";
this.title = "请假记录信息详细";
},
......
<template>
<div class="page">
<LayoutTable :data="tableData" :config="tableConfig" notDel>
<el-button type="primary" @click="doExport" :disabled="isExport"
size="mini" slot="table-head-left2">导出
<el-button
type="primary"
@click="doExport"
:disabled="isExport"
size="mini"
slot="table-head-left2"
>导出
</el-button>
</LayoutTable>
<drawer-show ref="drawerform" @ok="getData"/>
<drawer-audit ref="draweraudit" @ok="getData"/>
<drawer-show ref="drawerform" @ok="getData" />
<drawer-audit ref="draweraudit" @ok="getData" />
</div>
</template>
<script>
/** 表单弹出框模式需引入 */
import drawerShow from "./drawershow";
import drawerAudit from "./draweraudit";
import table from "@/assets/mixins/table";
export default {
name: "AttendanceLeaveRecordList",
components: {
drawerShow
drawerShow,
drawerAudit,
},
mixins: [table],
created() {
},
created() {},
methods: {
/** 重写新增方法 */
toAdd(row) {
......@@ -39,18 +44,24 @@ export default {
},
audit(row) {
//todo 审核页面进行审核
this.$refs.draweraudit.view(row);
this.$refs.drawerform.edit(row);
// this.$refs.draweraudit.view(row);
},
doExport() {
this.isExport = true;
this.$download("/attendance/leave/record/exportExcel", {
"idList": this.selection,
'name': this.$route.query['name'],
}, {type: "excel"}).then(() => this.isExport = false).catch(error => {
this.isExport = false;
this.$message.error(error.message);
})
this.$download(
"/attendance/leave/record/exportExcel",
{
idList: this.selection,
name: this.$route.query["name"],
},
{ type: "excel" }
)
.then(() => (this.isExport = false))
.catch((error) => {
this.isExport = false;
this.$message.error(error.message);
});
},
},
data() {
......@@ -63,101 +74,123 @@ export default {
name: "leavePerson",
type: "text",
label: "请假人",
fuzzy: true
fuzzy: true,
},
{
name: "phoneNumber",
type: "text",
label: "电话号码",
fuzzy: true
fuzzy: true,
},
{
name: "deptId",
type: "select",
label: "全部部门",
fuzzy: false
fuzzy: false,
},
{
name: "leaveType",
type: "select",
label: "请假类型",
fuzzy: false
fuzzy: false,
},
{
name: "startTime",
type: "date",
label: "开始时间",
fuzzy: false
fuzzy: false,
},
{
name: "endTime",
type: "date",
label: "结束时间",
fuzzy: false
fuzzy: false,
},
],
columns: [
{type: "selection", width: 60},
{type: "index", label: "序号", width: 50},
{ type: "selection", width: 60 },
{ type: "index", label: "序号", width: 50 },
// {label: "请假人id", prop: "leavePersonId", formatter: this.formatter},
{label: "请假人", prop: "leavePerson"},
{ label: "请假人", prop: "leavePerson" },
// {label: "所属部门id", prop: "deptId", formatter: this.formatter},
{label: "所属部门", prop: "deptName"},
{ label: "所属部门", prop: "deptName" },
{label: "电话号码", prop: "phoneNumber"},
{ label: "电话号码", prop: "phoneNumber" },
{label: "请假类型", prop: "leaveType", formatter: this.formatterLeaveType},
{
label: "请假类型",
prop: "leaveType",
formatter: this.formatterLeaveType,
},
{label: "开始时间", prop: "startTime", formatter: this.formatterDate},
{
label: "开始时间",
prop: "startTime",
formatter: this.formatterDate,
},
{label: "结束时间", prop: "endTime", formatter: this.formatterDate},
{ label: "结束时间", prop: "endTime", formatter: this.formatterDate },
{label: "时长", prop: "duration", formatter: this.formatter},
{ label: "时长", prop: "duration", formatter: this.formatter },
// {label: "审批负责人Id", prop: "approverId", formatter: this.formatter},
/* {label: "处理状态", prop: "processStatus", formatter: this.formatter},*/
/* {label: "处理状态", prop: "processStatus", formatter: this.formatter},*/
{label: "状态", prop: "auditResult", formatter: this.formatter},
{label: "审批负责人", prop: "approver"},
{ label: "状态", prop: "auditResult", formatter: this.formatter },
{ label: "审批负责人", prop: "approver" },
{label: "创建用户", prop: "createUserId", formatter: this.formatter},
{
label: "创建用户",
prop: "createUserId",
formatter: this.formatter,
},
{label: "创建时间", prop: "createTime", formatter: this.formatterDate},
{
label: "创建时间",
prop: "createTime",
formatter: this.formatterDate,
},
{
label: "操作",
width: 240,
formatter: row => {
formatter: (row) => {
return (
<div>
<table-buttons noAdd row={row} onEdit={this.toEdit} onView={this.toView} onDel={this.toDel}/>
<span> </span>
{row.processStatus === 1 ? (
<el-button
size="mini"
type="text"
icon="el-icon-open"
onClick={() => {
this.audit(row);
}}
>
审核
</el-button>
) : (
""
)}
</div>
<div>
<table-buttons
noAdd
row={row}
onEdit={this.toEdit}
onView={this.toView}
onDel={this.toDel}
/>
<span> </span>
{row.processStatus === 1 ? (
<el-button
size="mini"
type="text"
icon="el-icon-open"
onClick={() => {
this.audit(row);
}}
>
审核
</el-button>
) : (
""
)}
</div>
);
}
}
]
}
},
},
],
},
};
}
},
};
</script>
<template>
<div class="page">
<div style="margin:10px 0">
<div>
<tab-pane
:thirdList="thirdList"
:activeName="activeName"
......@@ -189,7 +189,7 @@ import drawerShow from "./drawershow";
import table from "@/assets/mixins/table";
import TabPane from "@/components/tabPane.vue";
import { timestampToTime } from "@/assets/utils/dateFormat";
import {formatterDateOnly} from "@/assets/utils/table";
import { formatterDateOnly } from "@/assets/utils/table";
export default {
name: "AttendanceRecordList",
components: {
......@@ -401,12 +401,30 @@ export default {
/** 子表列元素 */
columnSet: [
{ prop: "shiftsName", label: "班次名称", width: 150 },
{ prop: "goWorkDate", label: "上班打卡时间", width: 100 , formatter: this.formatterDate},
{ prop: "goWorkResult", label: "上班打卡结果", width: 100, formatter: this.formatterString },
{ prop: "offWorkDate", label: "下班打卡时间", width: 100 , formatter: this.formatterDate},
{ prop: "offWorkResult", label: "下班打卡结果", width: 100 , formatter: this.formatterString}
{
prop: "goWorkDate",
label: "上班打卡时间",
width: 100,
formatter: this.formatterDate,
},
{
prop: "goWorkResult",
label: "上班打卡结果",
width: 100,
formatter: this.formatterString,
},
{
prop: "offWorkDate",
label: "下班打卡时间",
width: 100,
formatter: this.formatterDate,
},
{
prop: "offWorkResult",
label: "下班打卡结果",
width: 100,
formatter: this.formatterString,
},
],
config: {
search: [
......@@ -459,7 +477,6 @@ export default {
label: "考勤结束时间",
fuzzy: false,
},
],
columns: [
{ type: "selection", width: 60 },
......@@ -479,24 +496,35 @@ export default {
{ label: "部门", prop: "deptName", formatter: this.formatters },
{ label: "职位", prop: "positionName", formatter: this.formatters },
{ label: "班次", prop: "shiftsName", formatter: this.formatters },
{ label: "签到结果", prop: "signInResult", formatter: this.formatter },
{ label: "签退结果", prop: "signOutResult", formatter: this.formatter },
{
label: "签到结果",
prop: "signInResult",
formatter: this.formatter,
},
{
label: "签退结果",
prop: "signOutResult",
formatter: this.formatter,
},
{ label: "打卡结果", prop: "punchResult", formatter: this.formatter },
{ label: "考勤类型", prop: "attendType", formatter: this.formatter },
{label: "考勤打卡记录详细信息",
{
label: "考勤打卡记录详细信息",
width: 120,
prop: "subColumns",
formatter: (row) => {
let widthsize = this.columnSet.reduce((pre, cur) => {
return pre + Number(cur.width);
}, 50);
return (
<el-popover placement="right" width={widthsize} trigger="click">
{this.renderTable(row.attendanceRecordDetailList)}
<el-button type="text" slot="reference">详细</el-button>
</el-popover>
);
let widthsize = this.columnSet.reduce((pre, cur) => {
return pre + Number(cur.width);
}, 50);
return (
<el-popover placement="right" width={widthsize} trigger="click">
{this.renderTable(row.attendanceRecordDetailList)}
<el-button type="text" slot="reference">
详细
</el-button>
</el-popover>
);
},
},
// {
......
<template>
<div class="page">
<LayoutTable :data="tableData" :config="tableConfig" notAdd notDel>
<el-button
slot="table-head-left2"
style="margin-left: 10px"
icon="el-icon-tickets"
size="mini"
type="primary"
@click="doExport"
:disabled="isExport"
>导出</el-button>
<el-button
slot="table-head-left2"
style="margin-left: 10px"
icon="el-icon-tickets"
size="mini"
type="success"
@click="lookexportHis"
>导出记录</el-button>
<el-button
slot="table-head-left2"
style="margin-left: 10px"
icon="el-icon-tickets"
size="mini"
@click="setdialog"
>表格设置</el-button>
</LayoutTable>
<dialog-show ref="dialogform" @ok="getData" />
<!-- 表格设置 -->
<el-dialog :visible.sync="isdialog" title="导出表格设置">
<div class="tipsword">请选择表格展示字段,导出的表格中的内容选中的字段将保持一致。</div>
<el-checkbox-group v-model="checkList">
<el-checkbox v-for="(item,index) in setcolum" :key="index" :label="item.label">
</el-checkbox>
</el-checkbox-group>
<div class="mt20" style="text-align:right">
<el-button>取消</el-button>
<el-button type="primary">确定</el-button>
</div>
</el-dialog>
<!-- 导出记录查看 -->
<el-drawer
title="导出记录"
:visible.sync="drawerhistory"
:direction="direction">
<div class="hisList">
<div class="list mt10" v-for="item in 10" :key="item">
<div class="flex flex-align-center flex-pack-justify">
<div>打卡记录汇总</div>
<el-button type="text">导出成功</el-button>
</div>
<div class="times">
导出时间:2020-08-13
</div>
</div>
</div>
</el-drawer>
</div>
<div class="page">
<LayoutTable :data="tableData" :config="tableConfig" notAdd notDel>
<el-button
slot="table-head-left2"
style="margin-left: 10px"
icon="el-icon-tickets"
size="mini"
type="primary"
@click="doExport"
:disabled="isExport"
>导出</el-button
>
<el-button
slot="table-head-left2"
style="margin-left: 10px"
icon="el-icon-tickets"
size="mini"
type="success"
@click="lookexportHis"
>导出记录</el-button
>
<el-button
slot="table-head-left2"
style="margin-left: 10px"
icon="el-icon-tickets"
size="mini"
@click="setdialog"
>表格设置</el-button
>
</LayoutTable>
<dialog-show ref="dialogform" @ok="getData" />
<!-- 表格设置 -->
<el-dialog :visible.sync="isdialog" title="导出表格设置">
<div class="tipsword">
请选择表格展示字段,导出的表格中的内容选中的字段将保持一致。
</div>
<el-checkbox-group v-model="checkList">
<el-checkbox
v-for="(item, index) in setcolum"
:key="index"
:label="item.label"
>
</el-checkbox>
</el-checkbox-group>
<div class="mt20" style="text-align:right">
<el-button>取消</el-button>
<el-button type="primary">确定</el-button>
</div>
</el-dialog>
<!-- 导出记录查看 -->
<el-drawer
title="导出记录"
:visible.sync="drawerhistory"
:direction="direction"
>
<div class="hisList">
<div class="list mt10" v-for="item in 10" :key="item">
<div class="flex flex-align-center flex-pack-justify">
<div>打卡记录汇总</div>
<el-button type="text">导出成功</el-button>
</div>
<div class="times">
导出时间:2020-08-13
</div>
</div>
</div>
</el-drawer>
</div>
</template>
<script>
/** 表单弹出框模式需引入 */
import dialogShow from "./dialogshow";
import table from "@/assets/mixins/table";
import {getFirstDay,getLastDay,getdiffdate,timestampToTime,getMyDay} from '@/assets/utils/dateFormat.js'
export default {
name: "AttendanceStatList",
components: {
dialogShow
},
mixins: [table],
created() {
this.query.startTime = getFirstDay()
this.query.endTime = getLastDay()
this.initalArr = this.config.columns
},
methods: {
// 处理
handleArr(arr,currentTime){
let index = arr.findIndex(item => item.createTime === currentTime)
if(index > -1){
return arr[index].attendanceSummary
}else{
return '-'
}
},
afterRender(data) {
this.addColumn = getdiffdate(this.query.startTime,this.query.endTime)
// 动态处理
let addobjArr = []
this.addColumn.map((item,index) => {
let obj = {
label:item +'('+ getMyDay(new Date(item))+')',
prop:'attendanceStaffStatEntities',
formatter: (row) => {
if(row.attendanceStaffStatEntities.length>0){
return this.handleArr(row.attendanceStaffStatEntities,item)
}else{
return '-'
}
}
}
addobjArr.push(obj)
})
this.config.columns = [...this.initalArr,...addobjArr]
this.$forceUpdate()
},
beforeRender(row) {
row.data.forEach(element => {
if(element.attendanceStaffStatEntities.length>0){
element.attendanceStaffStatEntities.forEach(item1 => {
item1.createTime = timestampToTime(item1.createTime,3)
})
}
})
return row
},
/** 重写新增方法 */
toAdd(row) {
this.$refs.dialogform.add(row);
},
/** 重写编辑方法 */
toEdit(row) {
this.$refs.dialogform.edit(row);
},
/** 重写查看方法 */
toView(row) {
this.$refs.dialogform.view(row);
},
setdialog(){
this.isdialog = true
this.setcolum = this.config.columns.filter(item => item.label&&item.prop)
},
lookexportHis(){
this.drawerhistory = true
},
/** 导出Excel */
doExport() {
this.isExport = true;
let params = {}
for(let value of this.config.search){
if(this.query[value.name]){
params[value.name] = this.query[value.name]
}
}
if(this.selection.length>0){
params['idList'] = this.selection
}
this.$download("/attendance/stat/exportExcel", {
...params
}, { type: "excel" }).then(() => this.isExport = false).catch(error => {
this.isExport = false;
this.$message.error(error.message);
})
/** 表单弹出框模式需引入 */
import dialogShow from "./dialogshow";
import table from "@/assets/mixins/table";
import {
getFirstDay,
getLastDay,
getdiffdate,
timestampToTime,
getMyDay,
} from "@/assets/utils/dateFormat.js";
export default {
name: "AttendanceStatList",
components: {
dialogShow,
},
mixins: [table],
created() {
this.query.startTime = getFirstDay();
this.query.endTime = getLastDay();
this.initalArr = this.config.columns;
},
methods: {
// 处理
handleArr(arr, currentTime) {
let index = arr.findIndex((item) => item.createTime === currentTime);
if (index > -1) {
return arr[index].attendanceSummary;
} else {
return "-";
}
},
afterRender(data) {
this.addColumn = getdiffdate(this.query.startTime, this.query.endTime);
// 动态处理
let addobjArr = [];
this.addColumn.map((item, index) => {
let obj = {
label: item + "(" + getMyDay(new Date(item)) + ")",
prop: "attendanceStaffStatEntities",
formatter: (row) => {
if (row.attendanceStaffStatEntities.length > 0) {
return this.handleArr(row.attendanceStaffStatEntities, item);
} else {
return "-";
}
},
};
addobjArr.push(obj);
});
this.config.columns = [...this.initalArr, ...addobjArr];
this.$forceUpdate();
},
beforeRender(row) {
row.data.forEach((element) => {
if (element.attendanceStaffStatEntities.length > 0) {
element.attendanceStaffStatEntities.forEach((item1) => {
item1.createTime = timestampToTime(item1.createTime, 3);
});
}
});
return row;
},
/** 重写新增方法 */
toAdd(row) {
this.$refs.dialogform.add(row);
},
/** 重写编辑方法 */
toEdit(row) {
this.$refs.dialogform.edit(row);
},
/** 重写查看方法 */
toView(row) {
this.$refs.dialogform.view(row);
},
setdialog() {
this.isdialog = true;
this.setcolum = this.config.columns.filter(
(item) => item.label && item.prop
);
},
lookexportHis() {
this.drawerhistory = true;
},
/** 导出Excel */
doExport() {
this.isExport = true;
let params = {};
for (let value of this.config.search) {
if (this.query[value.name]) {
params[value.name] = this.query[value.name];
}
}
if (this.selection.length > 0) {
params["idList"] = this.selection;
}
this.$download(
"/attendance/stat/exportExcel",
{
...params,
},
data() {
return {
config: {
isshowTabPane:true,
search: [
{
name: "deptId",
type: "select",
label: "全部部门",
fuzzy: false
},
{
name: "groupId",
type: "select",
label: "全部考勤组",
fuzzy: false
},
{
name: "classId",
type: "select",
label: "全部班次",
fuzzy: false
},
{
name:'startTime',
type: "date",
label: "考勤开始时间",
fuzzy: false
},
{
name:'endTime',
type: "date",
label: "考勤结束时间",
fuzzy: false
},
{
name: "staffName",
type: "text",
label: "员工姓名",
fuzzy: true
},
{
name: "phoneNumber",
type: "text",
label: "手机号",
fuzzy: true
}
],
columns: [
{type: "selection", width: 60,fixed:'left'},
{type: "index",label: "序号",width: 50,fixed:'left'},
{label: "窗口类别", prop: "windowCategory",fixed:'left',width:100},
{label: "员工姓名", prop: "staffName",fixed:'left',width:100},
{label:"部门",prop:"deptName"},
{label: "出勤天数", prop: "goTimes",formatter: this.formatter},
{label: "上午缺卡次数", prop: "morningTimes",formatter: this.formatter},
{label: "下午缺卡次数", prop: "afternoonTimes",formatter: this.formatter},
{label: "回单位(天)", prop: "backToUnit"},
{label: "因公请假(天)", prop: "onDutyLeave"},
{label: "外出勘验(天)", prop: "outOfOffice"},
{label: "值班补班(天)", prop: "shiftCompensation"},
{label: "体检(天)", prop: "physicalExamination"},
{label: "隔离(天)", prop: "quarantine"},
{label: "因公外出(与窗口工作无关/天)", prop: "businessTrip"},
{label: "公休(天)", prop: "publicHoliday"},
{label: "病假(天)", prop: "sickLeave"},
{ type: "excel" }
)
.then(() => (this.isExport = false))
.catch((error) => {
this.isExport = false;
this.$message.error(error.message);
});
},
},
data() {
return {
config: {
isshowTabPane: true,
search: [
{
name: "deptId",
type: "select",
label: "全部部门",
fuzzy: false,
},
{
name: "groupId",
type: "select",
label: "全部考勤组",
fuzzy: false,
},
{
name: "classId",
type: "select",
label: "全部班次",
fuzzy: false,
},
{
name: "startTime",
type: "date",
label: "考勤开始时间",
fuzzy: false,
},
{
name: "endTime",
type: "date",
label: "考勤结束时间",
fuzzy: false,
},
{
name: "staffName",
type: "text",
label: "员工姓名",
fuzzy: true,
},
{
name: "phoneNumber",
type: "text",
label: "手机号",
fuzzy: true,
},
],
columns: [
{ type: "selection", width: 60, fixed: "left" },
{ type: "index", label: "序号", width: 50, fixed: "left" },
{
label: "窗口类别",
prop: "windowCategory",
fixed: "left",
width: 100,
},
{ label: "员工姓名", prop: "staffName", fixed: "left", width: 100 },
{ label: "部门", prop: "deptName" },
{ label: "出勤天数", prop: "goTimes", formatter: this.formatter },
{
label: "上午缺卡次数",
prop: "morningTimes",
formatter: this.formatter,
},
{
label: "下午缺卡次数",
prop: "afternoonTimes",
formatter: this.formatter,
},
{ label: "回单位(天)", prop: "backToUnit" },
{ label: "因公请假(天)", prop: "onDutyLeave" },
{ label: "外出勘验(天)", prop: "outOfOffice" },
{ label: "值班补班(天)", prop: "shiftCompensation" },
{ label: "体检(天)", prop: "physicalExamination" },
{ label: "隔离(天)", prop: "quarantine" },
{ label: "因公外出(与窗口工作无关/天)", prop: "businessTrip" },
{ label: "公休(天)", prop: "publicHoliday" },
{ label: "病假(天)", prop: "sickLeave" },
{ label: "丧假(天)", prop: "funeralLeave" },
{ label: "婚假(天)", prop: "marriageLeave" },
{ label: "育儿假(天)", prop: "childRearingLeave" },
{ label: "产假(陪护假/天)", prop: "maternityLeave" },
{ label: "调回单位(或离职/天)", prop: "transferBack" },
{ label: "探亲假(天)", prop: "homeLeave" },
{ label: "事假(天)", prop: "personalLeave" },
{ label: "旷工(天)", prop: "absenteeismDays" },
{ label: "其他(天)", prop: "otherDays" },
{ label: "出勤率%", prop: "attendanceRate" },
{ label: "未按规定打卡(含忘记打卡)", prop: "nonCompliancePunch" },
{ label: "迟到(次)", prop: "lateTimes" },
{ label: "上网耍手机(次)", prop: "surfingMobileTimes" },
{label: "丧假(天)", prop: "funeralLeave"},
{ label: "溜班(次)", prop: "overtimeTimes" },
{label: "婚假(天)", prop: "marriageLeave"},
{ label: "空岗(次)", prop: "vacancy" },
{label: "育儿假(天)", prop: "childRearingLeave"},
{ label: "未规范着装(次)", prop: "nonStandardDressTimes" },
{label: "产假(陪护假/天)", prop: "maternityLeave"},
{ label: "无故缺席会议(次)", prop: "unexcusedMeetingAbsence" },
{label: "调回单位(或离职/天)", prop: "transferBack"},
{label: "探亲假(天)", prop: "homeLeave"},
{label: "事假(天)", prop: "personalLeave"},
{label: "旷工(天)", prop: "absenteeismDays"},
{label: "其他(天)", prop: "otherDays"},
{label: "出勤率%", prop: "attendanceRate"},
{label: "未按规定打卡(含忘记打卡)", prop: "nonCompliancePunch"},
{label: "迟到(次)", prop: "lateTimes"},
{label: "上网耍手机(次)", prop: "surfingMobileTimes"},
{label: "溜班(次)", prop: "overtimeTimes"},
{label: "空岗(次)", prop: "vacancy"},
{label: "未规范着装(次)", prop: "nonStandardDressTimes"},
{label: "无故缺席会议(次)", prop: "unexcusedMeetingAbsence"},
{label: "会议早退", prop: "earlyLeaveMeeting"}
]
},
setcolum:[],
isdialog:false,
checkList:[],
drawerhistory:false,
// 动态新增列表
addColumn:[],
initalArr:[]
}
}
}
{ label: "会议早退", prop: "earlyLeaveMeeting" },
],
},
setcolum: [],
isdialog: false,
checkList: [],
drawerhistory: false,
// 动态新增列表
addColumn: [],
initalArr: [],
};
},
};
</script>
<style scoped lang="less">
.hisList{
padding: 15px;
.list{
background-color: rgba(64, 158, 255, 0.1);
font-size: 14px;
border-radius: 10px;
padding: 10px;
.times{
font-size: 12px;
color: #999;
}
.hisList {
padding: 15px;
.list {
background-color: rgba(64, 158, 255, 0.1);
font-size: 14px;
border-radius: 10px;
padding: 10px;
.times {
font-size: 12px;
color: #999;
}
}
}
.tipsword{
margin: 20px 0;
color: #999;
.tipsword {
margin: 20px 0;
color: #999;
}
</style>
......@@ -69,10 +69,20 @@
{{ form.subAddType == 1 ? "加分人员:" : "扣分人员:" }}
{{ form.deductPerson ? form.deductPerson : "--" }}</el-col
>
<el-col :span="12">
巡查人员:
{{
form.createUserId
? util_formatter("createUserId", form.createUserId)
: "--"
}}
</el-col>
</el-row>
<el-row>
<el-col :span="12"
>图片凭证:
<el-image
<!-- <el-image
v-if="form.filePaths"
style="width: 100px; height: 100px"
:src="
......@@ -88,7 +98,8 @@
: [form.filePaths]
"
>
</el-image>
</el-image> -->
<filepReview v-if="form.filePaths" :src="form.filePaths"/>
<span v-else>--</span>
</el-col>
</el-row>
......
......@@ -83,9 +83,19 @@
{{ form.deductTime ? form.deductTime : "--" }}</el-col
>
<el-col :span="12">
巡查人员:
{{
form.createUserId
? util_formatter("createUserId", form.createUserId)
: "--"
}}
</el-col>
</el-row>
<el-row>
<el-col :span="12"
>图片凭证:
<el-image
<!-- <el-image
v-if="form.filePaths"
style="width: 100px; height: 100px"
:src="
......@@ -101,7 +111,8 @@
: [form.filePaths]
"
>
</el-image>
</el-image> -->
<filepReview v-if="form.filePaths" :src="form.filePaths"/>
<span v-else>--</span>
</el-col>
</el-row>
......
......@@ -60,9 +60,17 @@
>
</el-row>
<el-row>
<el-col :span="24">
<el-col :span="12">
巡查人员:
{{
form.createUserId
? util_formatter("createUserId", form.createUserId)
: "--"
}}
</el-col>
<el-col :span="12">
图片凭证:
<el-image
<!-- <el-image
v-if="form.filePaths"
style="width: 100px; height: 100px"
:src="
......@@ -78,7 +86,8 @@
: [form.filePaths]
"
>
</el-image>
</el-image> -->
<filepReview v-if="form.filePaths" :src="form.filePaths"/>
<span v-else>--</span>
</el-col>
</el-row>
......
......@@ -62,9 +62,17 @@
>
</el-row>
<el-row>
<el-col :span="24">
<el-col :span="12">
巡查人员:
{{
form.createUserId
? util_formatter("createUserId", form.createUserId)
: "--"
}}
</el-col>
<el-col :span="12">
图片凭证:
<el-image
<!-- <el-image
v-if="form.filePaths"
style="width: 100px; height: 100px"
:src="
......@@ -80,7 +88,8 @@
: [form.filePaths]
"
>
</el-image>
</el-image> -->
<filepReview v-if="form.filePaths" :src="form.filePaths"/>
<span v-else>--</span>
</el-col>
</el-row>
......
......@@ -58,9 +58,17 @@
</el-col>
</el-row>
<el-row>
<el-col :span="24"
<el-col :span="12">
巡查人员:
{{
form.createUserId
? util_formatter("createUserId", form.createUserId)
: "--"
}}
</el-col>
<el-col :span="12"
>图片凭证:
<el-image
<!-- <el-image
v-if="form.filePaths"
style="width: 100px; height: 100px"
:src="
......@@ -76,7 +84,8 @@
: [form.filePaths]
"
>
</el-image>
</el-image> -->
<filepReview v-if="form.filePaths" :src="form.filePaths"/>
<span v-else>--</span>
</el-col>
</el-row>
......
......@@ -63,9 +63,17 @@
</el-row>
<el-row>
<el-col :span="12">
巡查人员:
{{
form.createUserId
? util_formatter("createUserId", form.createUserId)
: "--"
}}
</el-col>
<el-col :span="12"
>图片凭证:
<el-image
<!-- <el-image
v-if="form.filePaths"
style="width: 100px; height: 100px"
:src="
......@@ -81,7 +89,8 @@
: [form.filePaths]
"
>
</el-image>
</el-image> -->
<filepReview v-if="form.filePaths" :src="form.filePaths"/>
<span v-else>--</span>
</el-col>
</el-row>
......@@ -414,6 +423,7 @@ export default {
kaoqinCateArr: [],
kaoqinArr: [],
urls: { saveUrl: "/check/review/record/examine" }, //重写核查地址
baseUrl: process.env.VUE_APP_API_BASE_URL + "/",
};
},
......
......@@ -4,6 +4,7 @@
<el-button class="backBtn" size="small" @click="$router.back()">返回上一级</el-button>
<el-tabs v-model="tabs">
<el-tab-pane label="设计问卷" name="1">
<!-- 步骤1 填写问卷名称 -->
<div style="width: 800px;margin: 100px auto;" v-show="step">
<el-form :model="titleForm" :rules="titleRules" ref="titleForm">
<el-form-item label="问卷名称:" prop="title" label-width="125px">
......@@ -20,20 +21,22 @@
</div>
</el-form>
</div>
<!-- 动态表单配置 -->
<div v-show="!step">
<fc-designer style="height: 79vh;" ref="designer">
<template slot="handle">
<ElButton style="margin-left: 10px;" icon="el-icon-upload" type="primary" size="small"
@click="issueBtn" round>问卷发布
@click="issueBtn" round>问卷配置发布
</ElButton>
<!-- <ElButton style="margin-left: 10px;" icon="el-icon-upload" type="primary" size="small"
@click="issueBtn" round>外部链接
</ElButton> -->
<ElButton icon="el-icon-view" type="success" size="small" @click="showDrawer" round>手机模拟预览
<ElButton style="margin-left: 10px;" icon="el-icon-position" type="warning" size="small"
@click="outsideBtn" round>外部链接发布
</ElButton>
<ElButton icon="el-icon-view" type="success" size="small" @click="showDrawer" round>手机预览
</ElButton>
</template>
</fc-designer>
</div>
<!-- 手机模拟预览 -->
<el-drawer :visible.sync="drawer" title="预览">
<div class="showPhone">
<div class="phone">
......@@ -44,13 +47,16 @@
</div>
</div>
</el-drawer>
<!-- 问卷发布弹出框 -->
<el-dialog title="问卷发布" :visible.sync="issueDialog" width="30%" top="25vh">
<el-form :model="issueForm" :rules="issueRules" ref="issueForm">
<el-form-item label="链接地址:" label-width="125px" prop="webUrl" v-if="weblink">
<el-input v-model="issueForm.webUrl" placeholder="请输入链接地址"></el-input>
</el-form-item>
<el-form-item label="问卷封面:" label-width="125px">
<div style="display: flex;align-items: center;">
<img style="width:80px; height: 80px; margin-right: 10px;cursor: pointer;"
v-for="(i, j) in coverImg" :key="j" :src="ImgUrl + '/' + i.url" alt=""
v-for="(i, j) in coverImg" :key="j" :src="showImgUrl + '/' + i.url" alt=""
:class="selImg == j ? 'selImg' : ''" @click="selImg = j">
<el-upload v-show="coverImg.length < 4" :action="ImgUrl + '/attendance/file/commonupload'"
accept="image/jpeg,image/png,image/jpg" list-type="picture-card" class="upload"
......@@ -75,8 +81,8 @@
</div>
</el-form>
</el-dialog>
<el-dialog title="人员选择" :visible.sync="treeDialog">
<!-- 人员选择弹出框 -->
<el-dialog title="人员选择" :visible.sync="treeDialog" width="40%">
<div class="treeDialog">
<el-tree class="treeCss" :data="treeData" node-key="id" :props="defaultProps"
@node-click="handleNodeClick"></el-tree>
......@@ -158,6 +164,10 @@ export default {
issueRules: {
time: [
{ required: true, message: '请输入选择反馈期限', trigger: 'blur' },
],
webUrl: [
{ required: true, message: '请输入链接地址', trigger: 'blur' },
{ pattern: /^https?:\/\/((.)+(\.)?)*(:\d+)?(\/((\.)?(\?)?=?&?.(\?)?)*)*$/i, message: '请输入正确的链接 例:https://www.baidu.com', trigger: 'change' }
]
},
treeData: [],
......@@ -175,7 +185,25 @@ export default {
editStyle: false,
loadingstate: false,
ImgUrl: process.env.VUE_APP_API_BASE_URL,
coverImg: []
showImgUrl:'',
coverImg: [],
weblink: 0,
webUrl: '',
}
},
watch: {
issueDialog(val) { //监听关闭外联状态
if (!val) {
this.weblink = 0
}
}
},
created(){
if(process.env.NODE_ENV == "development"){
this.showImgUrl= process.env.VUE_APP_API_BASE_URL
}else{
this.showImgUrl=''
}
},
mounted() {
......@@ -199,6 +227,10 @@ export default {
this.getFile()
},
methods: {
outsideBtn() {
this.weblink = 1
this.issueDialog = 1
},
handleUploadSuccess(res) {
console.log(res)
this.coverImg.push(res)
......@@ -250,7 +282,6 @@ export default {
console.log(file)
}
},
//获取问卷封面
getFile() {
this.$post('/feedback/file/list', { page: 1, size: 3 }).then(res => {
......@@ -357,12 +388,12 @@ export default {
return JSON.stringify(FcDesignerOptions)
},
issueFormBtn(formName) {
if (this.checkedUser.length < 1) {
this.$message.warning('请选择人员后发布问卷')
return
}
this.$refs[formName].validate((valid) => {
if (valid) {
if (this.checkedUser.length < 1) {
this.$message.warning('请选择人员后发布问卷')
return
}
console.log(this.issueForm)
this.Frule.forEach(i => {
i.remark = i.field
......@@ -381,7 +412,8 @@ export default {
})
let sub = {
weblink: this.weblink,
webUrl: this.issueForm.webUrl,
staffList: this.checkedUser,
id: this.feedbackId,
...this.titleForm,
......
<template>
<div class="page">
<LayoutTable :data="tableData" notDel :config="tableConfig">
</LayoutTable>
<drawer-show ref="drawerform" @ok="getData" />
</div>
<div class="page">
<LayoutTable :data="tableData" notDel :config="tableConfig"> </LayoutTable>
<drawer-show ref="drawerform" @ok="getData" />
</div>
</template>
<script>
......@@ -11,140 +10,190 @@
import drawerShow from "./drawershow";
import table from "@/assets/mixins/table";
export default {
name: "FeedbackList",
components: {
drawerShow
name: "FeedbackList",
components: {
drawerShow,
},
mixins: [table],
created() {},
methods: {
renderTable(tableData) {
return (
<el-table stripe data={tableData} class="total-table">
{this.columnSet.map((item) => this.renderTableColumn(item))}
</el-table>
);
},
mixins: [table],
created() {
renderTableColumn(options) {
return (
<el-table-column
prop={options.prop}
label={options.label}
width={options.width}
formatter={options.formatter}
></el-table-column>
);
},
methods: {
renderTable(tableData) {
return (
<el-table stripe data={tableData} class="total-table">
{this.columnSet.map((item) => this.renderTableColumn(item))}
</el-table>
);
},
renderTableColumn(options) {
return (
<el-table-column
prop={options.prop}
label={options.label}
width={options.width}
formatter={options.formatter}
>
</el-table-column>
);
},
/** 重写新增方法 */
toAdd(row) {
// this.$refs.drawerform.add(row);
this.$router.push("/feedback/addQuestion/list");
},
/** 重写编辑方法 */
toEdit(row) {
// this.$refs.drawerform.edit(row);
this.$router.push({ path: `/feedback/addQuestion/list?id=${row.id}` });
localStorage.setItem('editFeedback', JSON.stringify(row))
},
/** 重写查看方法 */
toView(row) {
console.log(row)
localStorage.setItem('checkFeedbackId', row.id)
// this.$refs.drawerform.view(row);
this.$router.push('/feedback/questionnaire/list')
/** 重写新增方法 */
toAdd(row) {
// this.$refs.drawerform.add(row);
this.$router.push("/feedback/addQuestion/list");
},
/** 重写编辑方法 */
toEdit(row) {
// this.$refs.drawerform.edit(row);
this.$router.push({ path: `/feedback/addQuestion/list?id=${row.id}` });
localStorage.setItem("editFeedback", JSON.stringify(row));
},
/** 重写查看方法 */
toView(row) {
console.log(row);
localStorage.setItem("checkFeedbackId", row.id);
// this.$refs.drawerform.view(row);
this.$router.push("/feedback/questionnaire/list");
},
goPage(path) {
this.$router.push(path);
},
},
data() {
return {
/** 子表列元素 */
columnSet: [
{
label: "反馈问卷id号",
prop: "feedbackId",
formatter: this.formatter,
},
goPage(path) {
this.$router.push(path)
}
{ label: "问题内容", prop: "content" },
{ label: "问题类型 ", prop: "questionType", formatter: this.formatter },
{ label: "是否必填", prop: "require", formatter: this.formatter },
{ label: "备注", prop: "remark" },
],
config: {
isshowTabPane: true,
search: [
{
name: "feedbackTimeStart",
type: "datetime",
label: "请选择日期",
fuzzy: false,
},
{
name: "title",
type: "text",
label: "输入问卷标题关键字搜索",
fuzzy: false,
},
],
columns: [
{ type: "selection", width: 60 },
{ type: "index", label: "序号", width: 50 },
},
data() {
return {
/** 子表列元素 */
columnSet: [
{ label: "反馈问卷id号", prop: "feedbackId", formatter: this.formatter },
{ label: "问题内容", prop: "content" },
{ label: "问题类型 ", prop: "questionType", formatter: this.formatter },
{ label: "是否必填", prop: "require", formatter: this.formatter },
{ label: "备注", prop: "remark" },
],
config: {
isshowTabPane: true,
search: [
],
columns: [
{ type: "selection", width: 60 },
{ type: "index", label: "序号", width: 50 },
{ label: "问卷标题", prop: "title" },
{ label: "问卷标题", prop: "title" },
{
label: "更新时间",
prop: "createTime",
formatter: this.formatterDate,
},
{ label: "更新时间", prop: "createTime", formatter: this.formatterDate },
{ label: "反馈开始时间", prop: "feedbackTimeStart", formatter: this.formatterDate },
{
label: "反馈开始时间",
prop: "feedbackTimeStart",
formatter: this.formatterDate,
},
{ label: "反馈结束时间", prop: "feedbackTimeEnd", formatter: this.formatterDate },
{
label: "反馈结束时间",
prop: "feedbackTimeEnd",
formatter: this.formatterDate,
},
{ label: "邀请人数", prop: "inviteNum", formatter: this.formatter },
{ label: "邀请人数", prop: "inviteNum", formatter: this.formatter },
{ label: "反馈人数", prop: "feedbackNum", formatter: this.formatter },
{ label: "反馈人数", prop: "feedbackNum", formatter: this.formatter },
// { label: "创建用户", prop: "createUserId", formatter: this.formatter },
{
label: "状态", prop: "processStatus", formatter: (row) => {
let str = "未开始"
if (row.processStatus == 1) {
str = "进行中"
} else if (row.processStatus == 2) {
str = "已结束"
}
return (
<el-tag type={row.processStatus ? row.processStatus == 2 ? 'success' : 'info' : 'danger'} size="small">
{str}
</el-tag>
)
}
},
// {
// label: "绩效反馈问题",
// width: 120,
// prop: "subColumns",
// formatter: (row) => {
// return pre + Number(cur.width);
// }, 50);
// return (
// <el-popover placement="right" width={widthsize} trigger="click">
// {this.renderTable(row.feedbackQuestionList)}
// <el-button type="text" slot="reference">详细</el-button>
// </el-popover>
// );
// },
// },
{
label: "操作",
width: 240,
formatter: row => {
if (row.processStatus == 0) {
return (
<table-buttons noAdd noView row={row} onEdit={this.toEdit} onView={this.toView} onDel={this.toDel} />
);
} else {
return (
<table-buttons noAdd noEdit row={row} onEdit={this.toEdit} onView={this.toView} onDel={this.toDel} />
);
}
// return <table-buttons noAdd noEdit row={row} onEdit={this.toEdit} onView={this.toView} onDel={this.toDel} />
}
}
]
}
};
}
// { label: "创建用户", prop: "createUserId", formatter: this.formatter },
{
label: "状态",
prop: "processStatus",
formatter: (row) => {
let str = "未开始";
if (row.processStatus == 1) {
str = "进行中";
} else if (row.processStatus == 2) {
str = "已结束";
}
return (
<el-tag
type={
row.processStatus
? row.processStatus == 1
? "success"
: "info"
: "danger"
}
size="small"
>
{str}
</el-tag>
);
},
},
// {
// label: "绩效反馈问题",
// width: 120,
// prop: "subColumns",
// formatter: (row) => {
// return pre + Number(cur.width);
// }, 50);
// return (
// <el-popover placement="right" width={widthsize} trigger="click">
// {this.renderTable(row.feedbackQuestionList)}
// <el-button type="text" slot="reference">详细</el-button>
// </el-popover>
// );
// },
// },
{
label: "操作",
width: 240,
formatter: (row) => {
if (row.processStatus == 0) {
return (
<table-buttons
noAdd
noView
row={row}
onEdit={this.toEdit}
onView={this.toView}
onDel={this.toDel}
/>
);
} else {
return (
<table-buttons
noAdd
noEdit
row={row}
onEdit={this.toEdit}
onView={this.toView}
onDel={this.toDel}
/>
);
}
// return <table-buttons noAdd noEdit row={row} onEdit={this.toEdit} onView={this.toView} onDel={this.toDel} />
},
},
],
},
};
},
};
</script>
<style lang="less" scoped>
/deep/ .buttons {
margin-bottom: 10px;
margin-bottom: 10px;
}
</style>
......@@ -15,9 +15,8 @@
</div>
<div style="margin: 10px 0;">
<el-tag
:type="feedbackData.processStatus ? feedbackData.processStatus = 1 ? 'success' : 'info' : 'danger'">
{{ feedbackData.processStatus ? feedbackData.processStatus
== 1 ? '进行中' : '已结束' : '未开始' }}</el-tag>
:type="feedbackData.processStatus ? feedbackData.processStatus == 1 ? 'success' : 'info' : 'danger'">
{{ feedbackData.processStatus ? feedbackData.processStatus == 1 ? '进行中' : '已结束' : '未开始' }}</el-tag>
反馈时间:{{ feedbackData.timeStart }} ~ {{ feedbackData.timeEnd }}
</div>
......
<template>
<!-- 弹出框表单 -->
<el-drawer
:title="title"
:visible.sync="open"
:direction="direction"
size="50%">
<el-form ref="form" :model="form" :rules="rules" label-width="120px" style="padding:20px">
<el-row>
<Field v-if="from == 'job'" label="分组" prop="groupId" v-model="form.groupId"
:enumData="dict.group" type="select" placeholder="请选择分组"/>
<!-- 弹出框表单 -->
<el-drawer
:title="title"
:visible.sync="open"
:direction="direction"
size="50%"
>
<el-form
ref="form"
:model="form"
:rules="rules"
label-width="120px"
style="padding:20px"
>
<el-row>
<Field
v-if="from == 'job'"
label="分组"
prop="groupId"
v-model="form.groupId"
:enumData="dict.groupId"
type="select"
placeholder="请选择分组"
/>
<Field label="分组名称" prop="groupName" v-model="form.groupName" placeholder="请输入分组名称" :maxLength="10" v-if="from == 'group'"/>
<Field
label="分组名称"
prop="groupName"
v-model="form.groupName"
placeholder="请输入分组名称"
:maxLength="10"
v-if="from == 'group'"
/>
<Field label="职位编码" prop="jobCode" :maxLength="10" v-model="form.jobCode" placeholder="请输入职位编码" v-if="from == 'job'"/>
<Field label="职位名称" prop="jobName" :maxLength="10" v-model="form.jobName" placeholder="请输入职位名称" v-if="from == 'job'" />
<Field
label="职位编码"
prop="jobCode"
:maxLength="10"
v-model="form.jobCode"
placeholder="请输入职位编码"
v-if="from == 'job'"
/>
<Field
label="职位名称"
prop="jobName"
:maxLength="10"
v-model="form.jobName"
placeholder="请输入职位名称"
v-if="from == 'job'"
/>
<Field label="类型" disabled prop="type" v-model="form.type" type="select" :enumData="dict.type" placeholder="请选择类型"/>
<Field label="备注" prop="remark" :maxLength="50" v-model="form.remark" type="textarea" placeholder="请输入备注"/>
</el-row>
<form-buttons @submit='submitForm' noCancelBtn />
</el-form>
</el-drawer>
<Field
label="类型"
disabled
prop="type"
v-model="form.type"
type="select"
:enumData="dict.type"
placeholder="请选择类型"
/>
<Field
label="备注"
prop="remark"
:maxLength="50"
v-model="form.remark"
type="textarea"
placeholder="请输入备注"
/>
</el-row>
<form-buttons @submit="submitForm" noCancelBtn />
</el-form>
</el-drawer>
</template>
<script>
import form from "@/assets/mixins/formdialog";
export default {
name: "JobDetail",
mixins: [form],
components: {
},
created() {
this.changePath("job")
},
data() {
return {
// 遮罩层
loading: true,
// 弹出层标题
title: "职位信息",
// 是否显示弹出层
open: false,
direction:"rtl",
toString:[
],
toDate:[
],
// 表单校验
rules: {
},
from:''
};
},
methods: {
/** 编辑 */
edit(from,row) {
this.reset()
this.query = { id: row.id };
this.urls.currUrl ="job/edit";
this.getData();
this.pageInfo.type="edit"
this.from = from
import form from "@/assets/mixins/formdialog";
export default {
name: "JobDetail",
mixins: [form],
components: {},
created() {
this.changePath("job");
},
data() {
return {
// 遮罩层
loading: true,
// 弹出层标题
title: "职位信息",
// 是否显示弹出层
open: false,
direction: "rtl",
toString: [],
toDate: [],
// 表单校验
rules: {
groupId: [{ required: true, message: "请选择分组", trigger: "change" }],
},
from: "",
};
},
this.title = from === 'group'?"修改分组信息":'修改职位信息';
},
/** 新增 */
add(row) {
console.log(row,'添加')
this.from = row
this.title = row === 'group'?"新增分组信息":'新增职位信息';
this.reset()
this.urls.currUrl = "job/add";
this.getData();
this.pageInfo.type="add"
},
/** 查看*/
view(row) {
this.reset()
this.query = { id: row.id };
this.urls.currUrl ="job/view";
this.getData();
this.pageInfo.type="view"
this.title = "职位信息详细";
},
/**取消按钮 */
cancel() {
this.open = false;
},
/**获取数据后弹框 */
afterRender(data) {
methods: {
/** 编辑 */
edit(from, row) {
this.reset();
this.query = { id: row.id };
this.urls.currUrl = "job/edit";
this.getData();
this.pageInfo.type = "edit";
this.from = from;
// 固定新增类型
if(this.from == 'group'){
this.form.type = '1'
}else{
this.form.type = '2'
}
this.open = true;
},
afterSubmit(data) {
this.open = false;
this.$emit("ok");
},
this.title = from === "group" ? "修改分组信息" : "修改职位信息";
},
/** 新增 */
add(row) {
console.log(row, "添加");
this.from = row;
this.title = row === "group" ? "新增分组信息" : "新增职位信息";
this.reset();
this.urls.currUrl = "job/add";
this.getData();
this.pageInfo.type = "add";
},
/** 查看*/
view(row) {
this.reset();
this.query = { id: row.id };
this.urls.currUrl = "job/view";
this.getData();
this.pageInfo.type = "view";
this.title = "职位信息详细";
},
/**取消按钮 */
cancel() {
this.open = false;
},
/**获取数据后弹框 */
afterRender(data) {
// 固定新增类型
if (this.from == "group") {
this.form.type = "1";
} else {
this.form.type = "2";
}
this.open = true;
},
afterSubmit(data) {
this.open = false;
this.$emit("ok");
},
// 表单重置
reset() {
this.form = {
groupId : null,
groupName : "",
jobCode : "",
jobName : "",
remark : "",
};
this.resetForm("form");
},
resetForm(refName) {
if (this.$refs[refName]) {
this.$refs[refName].resetFields();
}
},
},
};
// 表单重置
reset() {
this.form = {
groupId: "",
groupName: "",
jobCode: "",
jobName: "",
remark: "",
};
this.resetForm("form");
},
resetForm(refName) {
if (this.$refs[refName]) {
this.$refs[refName].resetFields();
}
},
},
};
</script>
......@@ -70,13 +70,27 @@ export default {
color: "#000",
},
},
dataZoom: [
{
show: true,
realtime: true,
start: 0,
end: 100
},
{
type: 'inside',
realtime: true,
start: 0,
end: 100
}
],
tooltip: {},
xAxis: {
data: this.chartsData.map(i => {
// console.log(i)
if(this.title == "申诉次数部门排名TOP20") return i.deptName
if(this.title == "申诉次数个人排名TOP20") return i.staffName
if(this.title == "申诉次数规则排名TOP20") return i.ruleName
if (this.title == "申诉次数部门排名TOP20") return i.deptName
if (this.title == "申诉次数个人排名TOP20") return i.staffName
if (this.title == "申诉次数规则排名TOP20") return i.ruleName
// return i.ruleName || i.deptName || i.staffName
})
// this.title == "申诉次数部门排名TOP20"
......@@ -151,7 +165,7 @@ export default {
grid: {
left: "5%",
right: "4%",
bottom: "2%",
// bottom: "1%",
containLabel: true,
},
// color:[ "#61a0a8",],
......
......@@ -122,7 +122,7 @@
<el-col :span="22">
<el-form-item label="图片凭证:">
<div v-if="form.view == '查看'">
<el-image
<!-- <el-image
v-if="form.filePaths"
style="width: 100px; height: 100px"
:src="
......@@ -138,7 +138,8 @@
: [form.filePaths]
"
>
</el-image>
</el-image> -->
<filepReview v-if="form.filePaths" :src="form.filePaths"/>
<span v-else>--</span>
</div>
<ImageUpload
......
......@@ -175,7 +175,7 @@
<el-col :span="22">
<el-form-item label="图片凭证:">
<div v-if="form.view == '查看'">
<el-image
<!-- <el-image
v-if="form.filePaths"
style="width: 100px; height: 100px"
:src="
......@@ -191,7 +191,8 @@
: [form.filePaths]
"
>
</el-image>
</el-image> -->
<filepReview v-if="form.filePaths" :src="form.filePaths"/>
<span v-else>--</span>
</div>
<ImageUpload
......
......@@ -150,7 +150,7 @@
<el-col :span="22">
<el-form-item label="图片凭证:">
<div v-if="form.view == '查看'">
<el-image
<!-- <el-image
v-if="form.filePaths"
style="width: 100px; height: 100px"
:src="
......@@ -166,7 +166,8 @@
: [form.filePaths]
"
>
</el-image>
</el-image> -->
<filepReview v-if="form.filePaths" :src="form.filePaths"/>
<span v-else>--</span>
</div>
<ImageUpload
......
......@@ -127,7 +127,7 @@
<el-col :span="22">
<el-form-item label="图片凭证:">
<div v-if="form.view == '查看'">
<el-image
<!-- <el-image
v-if="form.filePaths"
style="width: 100px; height: 100px"
:src="
......@@ -143,7 +143,8 @@
: [form.filePaths]
"
>
</el-image>
</el-image> -->
<filepReview v-if="form.filePaths" :src="form.filePaths"/>
<span v-else>--</span>
</div>
<ImageUpload
......
......@@ -87,7 +87,7 @@
<el-col :span="22">
<el-form-item label="图片凭证:">
<div v-if="form.view == '查看'">
<el-image
<!-- <el-image
v-if="form.filePaths"
style="width: 100px; height: 100px"
:src="
......@@ -103,7 +103,8 @@
: [form.filePaths]
"
>
</el-image>
</el-image> -->
<filepReview v-if="form.filePaths" :src="form.filePaths"/>
<span v-else>--</span>
</div>
<ImageUpload
......
......@@ -140,7 +140,7 @@
<el-col :span="22">
<el-form-item label="图片凭证:">
<div v-if="form.view == '查看'">
<el-image
<!-- <el-image
v-if="form.filePaths"
style="width: 100px; height: 100px"
:src="
......@@ -156,7 +156,8 @@
: [form.filePaths]
"
>
</el-image>
</el-image> -->
<filepReview v-if="form.filePaths" :src="form.filePaths"/>
<span v-else>--</span>
</div>
<ImageUpload
......
......@@ -121,7 +121,7 @@ export default {
{ label: "增减类型", prop: "subAddType", formatter: this.formatter },
{ label: "分值", prop: "score" },
{ label: "分值", prop: "score", formatter: this.formatter },
{ label: "负责人分值", prop: "ownerScore" },
......@@ -226,7 +226,9 @@ export default {
type: this.activeName,
page: this.query.page,
orderColList: this.typeArr,
name: `%${this.searchValue}%`,
andConditionList: [
{ content: `%${this.searchValue}%`, name: `%${this.searchValue}%` },
],
}).then((res) => {
if (res.code == 1) {
this.tableData = res.data;
......
<template>
<!-- 弹出框表单 -->
<el-dialog :title="title" :visible.sync="open" width="90%" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="120px">
<el-row>
<Field label="员工姓名" prop="name" v-model="form.name" placeholder="请输入员工姓名"/>
<Field label="性别" prop="gender" v-model="form.gender" type="select" :enumData="dict.gender" placeholder="请选择性别"/>
<Field label="出生日期" prop="birthday" v-model="form.birthday" type="date" />
<Field label="照片" prop="photoPath" v-model="form.photoPath" type="textarea" placeholder="请输入照片"/>
<Field label="联系电话" prop="phoneNumber" v-model="form.phoneNumber" placeholder="请输入联系电话"/>
<Field label="身份证号码" prop="idCard" v-model="form.idCard" placeholder="请输入身份证号码"/>
<Field label="工号" prop="workNum" v-model="form.workNum" placeholder="请输入工号"/>
<Field label="政治面貌 " prop="politicalstatus" v-model="form.politicalstatus" type="select" :enumData="dict.politicalstatus" placeholder="请选择政治面貌 "/>
<Field label="所属部门" prop="deptId" v-model="form.deptId" placeholder="请输入所属部门"/>
<Field label="所属部门名称" prop="deptName" v-model="form.deptName" placeholder="请输入所属部门名称"/>
<Field label="职位ID" prop="positionId" v-model="form.positionId" placeholder="请输入职位ID"/>
<Field label="职位名称" prop="positionName" v-model="form.positionName" placeholder="请输入职位名称"/>
<Field label="员工类型" prop="staffType" v-model="form.staffType" type="select" :enumData="dict.staffType" placeholder="请选择员工类型"/>
<Field label="员工状态" prop="status" v-model="form.status" type="select" :enumData="dict.status" placeholder="请选择员工状态"/>
<Field label="入职登记表" prop="registerPath" v-model="form.registerPath" type="textarea" placeholder="请输入入职登记表"/>
<Field label="入职时间" prop="entryDate" v-model="form.entryDate" type="date" />
<Field label="转正时间" prop="regularDate" v-model="form.regularDate" type="date" />
<Field label="离职时间" prop="leaveDate" v-model="form.leaveDate" type="date" />
<Field label="备注" prop="remark" v-model="form.remark" type="textarea" placeholder="请输入备注"/>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" v-if="pageInfo.type !== 'view'" @click="submitForm">确 定</el-button>
<el-button @click="cancel">取 消</el-button>
</div>
</el-dialog>
<!-- 弹出框表单 -->
<el-dialog :title="title" :visible.sync="open" width="90%" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="120px">
<el-row>
<Field
label="员工姓名"
prop="name"
v-model="form.name"
placeholder="请输入员工姓名"
/>
<Field
label="性别"
prop="gender"
v-model="form.gender"
type="select"
:enumData="dict.gender"
placeholder="请选择性别"
/>
<Field
label="出生日期"
prop="birthday"
v-model="form.birthday"
type="date"
/>
<Field
label="照片"
prop="photoPath"
v-model="form.photoPath"
type="textarea"
placeholder="请输入照片"
/>
<Field
label="联系电话"
prop="phoneNumber"
v-model="form.phoneNumber"
placeholder="请输入联系电话"
/>
<Field
label="身份证号码"
prop="idCard"
v-model="form.idCard"
placeholder="请输入身份证号码"
/>
<Field
label="工号"
prop="workNum"
v-model="form.workNum"
placeholder="请输入工号"
/>
<Field
label="政治面貌 "
prop="politicalstatus"
v-model="form.politicalstatus"
type="select"
:enumData="dict.politicalstatus"
placeholder="请选择政治面貌 "
/>
<Field
label="所属部门"
prop="deptId"
v-model="form.deptId"
placeholder="请输入所属部门"
/>
<Field
label="所属部门名称"
prop="deptName"
v-model="form.deptName"
placeholder="请输入所属部门名称"
/>
<Field
label="职位ID"
prop="positionId"
v-model="form.positionId"
placeholder="请输入职位ID"
/>
<Field
label="职位名称"
prop="positionName"
v-model="form.positionName"
placeholder="请输入职位名称"
/>
<Field
label="员工类型"
prop="staffType"
v-model="form.staffType"
type="select"
:enumData="dict.staffType"
placeholder="请选择员工类型"
/>
<Field
label="员工状态"
prop="status"
v-model="form.status"
type="select"
:enumData="dict.status"
placeholder="请选择员工状态"
/>
<Field
label="入职登记表"
prop="registerPath"
v-model="form.registerPath"
type="textarea"
placeholder="请输入入职登记表"
/>
<Field
label="入职时间"
prop="entryDate"
v-model="form.entryDate"
type="date"
/>
<Field
label="转正时间"
prop="regularDate"
v-model="form.regularDate"
type="date"
/>
<Field
label="离职时间"
prop="leaveDate"
v-model="form.leaveDate"
type="date"
/>
<Field
label="备注"
prop="remark"
v-model="form.remark"
type="textarea"
placeholder="请输入备注"
/>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button
type="primary"
v-if="pageInfo.type !== 'view'"
@click="submitForm"
>确 定</el-button
>
<el-button @click="cancel">取 消</el-button>
</div>
</el-dialog>
</template>
<script>
import form from "@/assets/mixins/formdialog";
import dialogShow from "./dialogshow";
export default {
mixins: [form],
components: {
dialogShow ,
},
data() {
return {
// 遮罩层
loading: true,
// 弹出层标题
title: "员工基本信息",
// 是否显示弹出层
open: false,
toString:[
"gender",
"politicalstatus",
"staffType",
"status",
],
// 表单校验
rules: {
name: [
{required: true,message: "请输入员工姓名", trigger: "blur" },
{max: 64,message: "最多只能录入64个字符",trigger: "blur",},
],
createTime: [
{required: true,message: "请选择创建时间" },
],
}
};
},
import form from "@/assets/mixins/formdialog";
import dialogShow from "./dialogshow";
export default {
mixins: [form],
components: {
dialogShow,
},
data() {
return {
// 遮罩层
loading: true,
// 弹出层标题
title: "员工基本信息",
// 是否显示弹出层
open: false,
toString: ["gender", "politicalstatus", "staffType", "status"],
// 表单校验
rules: {
name: [
{ required: true, message: "请输入员工姓名", trigger: "blur" },
{ max: 64, message: "最多只能录入64个字符", trigger: "blur" },
],
createTime: [{ required: true, message: "请选择创建时间" }],
},
};
},
methods: {
/** 编辑 */
edit(row) {
this.reset()
this.query = { id: row.id };
this.urls.currUrl ="staff/edit";
this.getData();
this.pageInfo.type="edit"
this.title = "修改员工基本信息";
},
/** 新增 */
add(row) {
this.reset()
this.urls.currUrl = "staff/add";
this.getData();
this.pageInfo.type="add"
this.title = "新增员工基本信息";
},
/** 查看*/
view(row) {
this.reset()
this.query = { id: row.id };
this.urls.currUrl ="staff/view";
this.getData();
this.pageInfo.type="view"
this.title = "员工基本信息详细";
},
/**取消按钮 */
cancel() {
this.open = false;
},
/**获取数据后弹框 */
afterRender(data) {
this.open = true;
},
methods: {
/** 编辑 */
edit(row) {
this.reset();
this.query = { id: row.id };
this.urls.currUrl = "staff/edit";
this.getData();
this.pageInfo.type = "edit";
this.title = "修改员工基本信息";
},
/** 新增 */
add(row) {
this.reset();
this.urls.currUrl = "staff/add";
this.getData();
this.pageInfo.type = "add";
this.title = "新增员工基本信息";
},
/** 查看*/
view(row) {
this.reset();
this.query = { id: row.id };
this.urls.currUrl = "staff/view";
this.getData();
this.pageInfo.type = "view";
this.title = "员工基本信息详细";
},
/**取消按钮 */
cancel() {
this.open = false;
},
/**获取数据后弹框 */
afterRender(data) {
this.open = true;
},
afterSubmit(data) {
this.open = false;
this.$emit("ok");
},
afterSubmit(data) {
this.open = false;
this.$emit("ok");
},
// 表单重置
reset() {
this.form = {
name : "",
gender : 1,
birthday : null,
photoPath : "",
phoneNumber : "",
idCard : "",
workNum : "",
politicalstatus : 1,
deptId : null,
deptName : "",
positionId : null,
positionName : "",
staffType : 1,
status : 1,
registerPath : "",
entryDate : null,
regularDate : null,
leaveDate : null,
remark : "",
};
this.resetForm("form");
},
resetForm(refName) {
if (this.$refs[refName]) {
this.$refs[refName].resetFields();
}
},
},
};
// 表单重置
reset() {
this.form = {
name: "",
gender: 1,
birthday: null,
photoPath: "",
phoneNumber: "",
idCard: "",
workNum: "",
politicalstatus: 1,
deptId: null,
deptName: "",
positionId: null,
positionName: "",
staffType: 1,
status: 1,
registerPath: "",
entryDate: null,
regularDate: null,
leaveDate: null,
remark: "",
};
this.resetForm("form");
},
resetForm(refName) {
if (this.$refs[refName]) {
this.$refs[refName].resetFields();
}
},
},
};
</script>
......@@ -52,6 +52,7 @@
:expand-on-click-node="false"
:render-content="renderContent"
@node-click="handleNodeClick"
:default-expand-all="true"
>
</el-tree>
</el-scrollbar>
......@@ -151,13 +152,13 @@
<!-- 花名册记录查看 -->
<el-drawer title="历史花名册" :visible.sync="drawerhistory" direction="rtl">
<div class="hisList">
<div class="list mt10" v-for="item in 10" :key="item">
<div class="list mt10" v-for="item in 1" :key="item">
<div class="flex flex-align-center flex-pack-justify">
<div>花名册记录</div>
<el-button type="text">查看</el-button>
<!-- <el-button type="text">查看</el-button> -->
</div>
<div class="times">
导出时间:2020-08-13
导出时间:2023-07-19
</div>
</div>
</div>
......@@ -182,7 +183,12 @@
</div>
</el-dialog>
<drawer-show ref="drawerform" @ok="getData" :bumentree="areaData" :currentNode="currentNode"/>
<drawer-show
ref="drawerform"
@ok="getData"
:bumentree="areaData"
:currentNode="currentNode"
/>
</div>
</template>
......@@ -248,7 +254,7 @@ export default {
},
handleNodeClick(node) {
console.log(node,123123);
console.log(node, 123123);
this.currentNode = node;
this.query = { deptId: node.id };
this.getData();
......@@ -327,13 +333,13 @@ export default {
name: "name",
type: "text",
label: "员工姓名",
fuzzy: false,
fuzzy: true,
},
{
name: "phoneNumber",
type: "text",
label: "手机号",
fuzzy: false,
fuzzy: true,
},
],
columns: [
......
......@@ -80,7 +80,7 @@ export default {
name: '目标线',
yAxis: this.markLine,
label: {
formatter: '{b}:'+this.legendName+'不高于20.0%,',
formatter: '{b}:' + this.legendName + '不高于20.0%,',
position: 'insideStartTop'
},
lineStyle: {
......@@ -188,6 +188,10 @@ export default {
]
})
}
myChart.on('click', (params)=>{
this.$emit("click",params)
})
},
},
};
......
......@@ -9,17 +9,8 @@
<el-radio-button :label="2">按个人</el-radio-button>
</el-radio-group>
<div class="search_box">
<el-select
v-model="boardQuery.month"
placeholder="请选择"
style="margin: 0 10px;"
>
<el-option
v-for="item in optionsMonths"
:key="item.value"
:label="item.label"
:value="item.value"
>
<el-select v-model="boardQuery.month" placeholder="请选择" style="margin: 0 10px;">
<el-option v-for="item in optionsMonths" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
<el-button type="primary">搜索</el-button>
......@@ -28,60 +19,30 @@
<div class="mid">
<div class="mid_top">
<div class="jixiaozongfen">
<bar-charts
:title="'绩效总分排名'"
:id="'jixiaozongfen'"
:legendName="'绩效总分'"
:parameter="depStatObj.totalScore"
:styleObj="{ width: '100%', height: '300px' }"
/>
<bar-charts :title="'绩效总分排名'" :id="'jixiaozongfen'" :legendName="'绩效总分'"
:parameter="depStatObj.totalScore" :styleObj="{ width: '100%', height: '300px' }" />
</div>
<div class="jixiaopingjunfen">
<line-charts
:title="'绩效平均分排名'"
:id="'jixiaopingjunfen'"
:parameter="depStatObj.averageScore"
:legendName="'绩效平均分'"
:styleObj="{ width: '100%', height: '300px' }"
/>
<line-charts :title="'绩效平均分排名'" :id="'jixiaopingjunfen'" :parameter="depStatObj.averageScore"
:legendName="'绩效平均分'" :styleObj="{ width: '100%', height: '300px' }" />
</div>
</div>
<div class="mid_down">
<div class="top_10 box">
<bar-charts
:title="'部门加分排名TOP10'"
:id="'top_10'"
:parameter="depStatObj.totalAddScore"
:legendName="'部门加分分值'"
:styleObj="{ width: '100%', height: '300px' }"
/>
<bar-charts :title="'部门加分排名TOP10'" :id="'top_10'" :parameter="depStatObj.totalAddScore"
:legendName="'部门加分分值'" @click="rowClick" :styleObj="{ width: '100%', height: '300px' }" />
</div>
<div class="jiafen box">
<pie-charts
:title="'部门加分整体分布'"
:id="'jiafen'"
:parameter="depStatObj.pieAddScore"
:legendName="'部门加分'"
:styleObj="{ width: '100%', height: '300px' }"
/>
<pie-charts :title="'部门加分整体分布'" :id="'jiafen'" :parameter="depStatObj.pieAddScore" :legendName="'部门加分'"
:styleObj="{ width: '100%', height: '300px' }" />
</div>
<div class="koufen_10 box">
<bar-charts
:title="'部门扣分排名TOP10'"
:id="'koufen_10'"
:parameter="depStatObj.totalSubScore"
:legendName="'部门分值'"
:styleObj="{ width: '100%', height: '300px' }"
/>
<bar-charts :title="'部门扣分排名TOP10'" :id="'koufen_10'" :parameter="depStatObj.totalSubScore"
:legendName="'部门分值'" @click="rowClickSub" :styleObj="{ width: '100%', height: '300px' }" />
</div>
<div class="koufen box">
<pie-charts
:parameter="depStatObj.pieSubScore"
:title="'部门扣分整体分布'"
:id="'koufen'"
:legendName="'部门扣分'"
:styleObj="{ onAssessmentScope2width: '100%', height: '300px' }"
/>
<pie-charts :parameter="depStatObj.pieSubScore" :title="'部门扣分整体分布'" :id="'koufen'" :legendName="'部门扣分'"
:styleObj="{ onAssessmentScope2width: '100%', height: '300px' }" />
</div>
</div>
</div>
......@@ -96,41 +57,20 @@
</el-radio-group>
<div class="search_box">
<el-select v-model="value" @change="deptList" placeholder="请选择">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"
>
<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
<el-select
@change="deptList"
v-model="StatQuery.month"
placeholder="请选择"
style="margin: 0 10px;"
>
<el-option
v-for="item in optionsMonths"
:key="item.value"
:label="item.label"
:value="item.value"
>
<el-select @change="deptList" v-model="StatQuery.month" placeholder="请选择" style="margin: 0 10px;">
<el-option v-for="item in optionsMonths" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
<el-button type="primary" @click="deptList">搜索</el-button>
</div>
</div>
<div class="bar_content">
<bar-charts
:title="`${type1 == 1 ? '各部门' : '个人'}${StatQuery.month}月${alignmentName}对齐情况`"
:id="'bar_content'"
:legendName="alignmentName"
:option="{title:{left:'center',textStyle:{fontSize:24}}}"
:markLine="0.2"
:parameter="depStatObj.alignment"
:styleObj="{ width: '1800px', height: '650px' }"
/>
<bar-charts :title="`${type1 == 1 ? '各部门' : '个人'}${StatQuery.month}月${alignmentName}对齐情况`" :id="'bar_content'"
:legendName="alignmentName" :option="{ title: { left: 'center', textStyle: { fontSize: 24 } } }" :markLine="0.2"
:parameter="depStatObj.alignment" :styleObj="{ width: '1800px', height: '650px' }" />
</div>
</div>
</el-tab-pane>
......@@ -142,48 +82,34 @@
<el-radio-button :label="2">按个人</el-radio-button>
</el-radio-group>
<el-button type="primary" style="margin: 0 20px;" @click="addGoal">
+ 创建目标</el-button
>
+ 创建目标</el-button>
</div>
<div class="mid_content" style="height: auto;">
<div class="goal_box" v-for="(val, i) in dataList" :key="i">
<div class="goal_title">
<img src="../../../../assets/images/u17641.svg" alt="" />
<span>
{{dictString('assessmentType',val.assessmentType)}}{{dictString('compareScope',val.compareScope)}}{{val.ratio}}%
{{ dictString('assessmentType', val.assessmentType) }}{{ dictString('compareScope', val.compareScope) }}{{ val.ratio }}%
</span>
</div>
<p class="goal_txt">
<span>{{ type2 == 1 ? "目标部门:" : "目标个人:" }}</span
><span>{{
<span>{{ type2 == 1 ? "目标部门:" : "目标个人:" }}</span><span>{{
type2 == 1 ? val.deptPerpose : val.staffPerpose
}}</span>
</p>
<p class="goal_txt">
<span>周期:</span><span>{{val.year}} {{dictString('periodType',val.periodType)}}</span>
<span>周期:</span><span>{{ val.year }} {{ dictString('periodType', val.periodType) }}</span>
</p>
<p class="goal_txt">
<span>负责人:</span><span>{{val.leaders}}</span>
<span>负责人:</span><span>{{ val.leaders }}</span>
</p>
<p class="goal_txt">
<span>最近更新:</span><span>{{val.updateTime}}</span>
<span>最近更新:</span><span>{{ val.updateTime }}</span>
</p>
<p class="goal_txt"><span>更新人员:</span><span>{{dictString('updateUserId',val.updateUserId)}}</span></p>
<p class="goal_txt"><span>更新人员:</span><span>{{ dictString('updateUserId', val.updateUserId) }}</span></p>
<div class="button_box">
<el-button
type="primary"
style="width: 150px;"
plain
@click="hanleEdit(val)"
>编辑</el-button
>
<el-button
type="danger"
style="width: 150px;"
plain
@click="hanleDel(val)"
>删除</el-button
>
<el-button type="primary" style="width: 150px;" plain @click="hanleEdit(val)">编辑</el-button>
<el-button type="danger" style="width: 150px;" plain @click="hanleDel(val)">删除</el-button>
</div>
</div>
</div>
......@@ -217,10 +143,10 @@ export default {
},
methods: {
// 个人绩效分数统计
staffStatList(){
staffStatList() {
this.$post("/staff/perform/stat/list", this.boardQuery).then((res) => {
const {code,data,dict} = res
if(code == 1){
const { code, data, dict } = res
if (code == 1) {
const row = data.data || []
// this.statArr = row
const x = []
......@@ -234,10 +160,10 @@ export default {
}
});
// 加分top10
const top10 = {...this.boardQuery,size:10}
const top10 = { ...this.boardQuery, size: 10 }
this.$post("/staff/perform/stat/list", top10).then((res) => {
const {code,data,dict} = res
if(code == 1){
const { code, data, dict } = res
if (code == 1) {
const row = data.data || []
// this.statArr = row
const x = []
......@@ -251,10 +177,10 @@ export default {
}
});
// 减分
const top10Sub = {...this.boardQuery,size:10,orderColList:[{colName:'totalSubScore',sortKind:'desc'}]}
const top10Sub = { ...this.boardQuery, size: 10, orderColList: [{ colName: 'totalSubScore', sortKind: 'desc' }] }
this.$post("/staff/perform/stat/list", top10Sub).then((res) => {
const {code,data,dict} = res
if(code == 1){
const { code, data, dict } = res
if (code == 1) {
const row = data.data || []
// this.statArr = row
const x = []
......@@ -269,10 +195,10 @@ export default {
});
},
// 部门绩效分数统计
statList(){
this.$post("/dept/perform/stat/list",this.boardQuery).then((res) => {
const {code,data,dict} = res
if(code == 1){
statList() {
this.$post("/dept/perform/stat/list", this.boardQuery).then((res) => {
const { code, data, dict } = res
if (code == 1) {
const row = data.data || []
// this.statArr = row
const x = []
......@@ -292,10 +218,10 @@ export default {
}
});
// 加分top10
const top10 = {...this.boardQuery,size:10,orderColList:[{colName:'totalAddScore',sortKind:'desc'}]}
const top10 = { ...this.boardQuery, size: 10, orderColList: [{ colName: 'totalAddScore', sortKind: 'desc' }] }
this.$post("/dept/perform/stat/list", top10).then((res) => {
const {code,data,dict} = res
if(code == 1){
const { code, data, dict } = res
if (code == 1) {
const row = data.data || []
// this.statArr = row
const x = []
......@@ -306,14 +232,14 @@ export default {
});
this.depStatObj.totalAddScore.x = x
this.depStatObj.totalAddScore.y = y
this.depStatObj.totalAddScore.row = row
}
});
// 减分
const top10Sub = {...this.boardQuery,size:10,orderColList:[{colName:'totalSubScore',sortKind:'desc'}]}
const top10Sub = { ...this.boardQuery, size: 10, orderColList: [{ colName: 'totalSubScore', sortKind: 'desc' }] }
this.$post("/dept/perform/stat/list", top10Sub).then((res) => {
const {code,data,dict} = res
if(code == 1){
const { code, data, dict } = res
if (code == 1) {
const row = data.data || []
// this.statArr = row
const x = []
......@@ -328,10 +254,10 @@ export default {
});
},
// 部门目标对齐
deptList(){
deptList() {
this.$post("/perform/perpose/dept/stat/list", this.StatQuery).then((res) => {
const {code,data,dict} = res
if(code == 1){
const { code, data, dict } = res
if (code == 1) {
const row = data.data || []
const x = []
const y = []
......@@ -345,10 +271,10 @@ export default {
});
},
// 个人对齐方式
staffList(){
staffList() {
this.$post("/perform/perpose/staff/stat/list", this.StatQuery).then((res) => {
const {code,data,dict} = res
if(code == 1){
const { code, data, dict } = res
if (code == 1) {
const row = data.data || []
const x = []
const y = []
......@@ -379,9 +305,9 @@ export default {
},
// 目标管理
getData() {
this.$post("/perform/perpose/list",this.query).then((res) => {
console.log(res,"@@@@@@@@@@@@");
const {code,data,dict} = res
this.$post("/perform/perpose/list", this.query).then((res) => {
console.log(res, "@@@@@@@@@@@@");
const { code, data, dict } = res
this.dict = dict || {}
if (code == 1) {
this.dataList = data.data;
......@@ -391,39 +317,64 @@ export default {
});
},
// 字典转换
dictString(key,id){
const keyName = this.dict[key]
return keyName?keyName[id]:""
dictString(key, id) {
const keyName = this.dict[key]
return keyName ? keyName[id] : ""
},
// TAB个人/法人
onAssessmentScope(v){
if(v == 1){
onAssessmentScope(v) {
if (v == 1) {
this.statList()
}else{
} else {
this.staffStatList()
}
},
// 目标看齐
onAssessmentScope1(v){
if(v == 1){
onAssessmentScope1(v) {
if (v == 1) {
this.deptList()
}else{
} else {
this.staffList()
}
},
onAssessmentScope2(v){
if(v == 1){
onAssessmentScope2(v) {
if (v == 1) {
this.query.assessmentScope = 1
}else{
} else {
this.query.assessmentScope = 2
}
this.getData()
},
rowClick(row) {
const { dataIndex } = row
const {attendScoreAdd,reviewScoreAdd,goworkScoreAdd,effectScoreAdd,otherScoreAdd,complainScoreAdd} = this.depStatObj.totalAddScore.row[dataIndex]
this.depStatObj.pieAddScore = [
{ value: attendScoreAdd, name: '考勤绩效' },
{ value: reviewScoreAdd, name: '评价绩效' },
{ value: goworkScoreAdd, name: '办件绩效' },
{ value: effectScoreAdd, name: '效能绩效' },
{ value: complainScoreAdd, name: '投诉绩效' },
{ value: otherScoreAdd, name: '其它绩效' },
]
},
// 减分top10
rowClickSub(row) {
const { dataIndex } = row
const {attendScoreSub,reviewScoreSub,goworkScoreSub,effectScoreSub,complainScoreSub,otherScoreSub} = this.depStatObj.totalAddScore.row[dataIndex]
this.depStatObj.pieSubScore = [
{ value: attendScoreSub, name: '考勤绩效' },
{ value: reviewScoreSub, name: '评价绩效' },
{ value: goworkScoreSub, name: '办件绩效' },
{ value: effectScoreSub, name: '效能绩效' },
{ value: complainScoreSub, name: '投诉绩效' },
{ value: otherScoreSub, name: '其它绩效' },
]
}
},
computed: {
alignmentName:function(){
const obj = this.options.find(v=>v.value == this.value)
alignmentName: function () {
const obj = this.options.find(v => v.value == this.value)
return obj.label
}
},
......@@ -528,63 +479,63 @@ export default {
],
value: "lateRate",//默认显示迟到类型
dataList: [],
depStatObj:{
totalScore:{
x:[],
y:[]
depStatObj: {
totalScore: {
x: [],
y: []
},//绩效总分排名
averageScore:{
x:[],
y:[]
averageScore: {
x: [],
y: []
},//绩效平均排名
totalAddScore:{
x:[],
y:[]
totalAddScore: {
x: [],
y: []
},//加分
totalSubScore:{
x:[],
y:[]
totalSubScore: {
x: [],
y: []
},//减分
alignment:{
x:[],
y:[]
alignment: {
x: [],
y: []
},//目标对齐
pieAddScore:[
{value:0,name:'考勤绩效'},
{value:0,name:'评价绩效'},
{value:0,name:'办件绩效'},
{value:0,name:'效能绩效'},
{value:0,name:'投诉绩效'},
{value:0,name:'其它绩效'},
pieAddScore: [
{ value: 0, name: '考勤绩效' },
{ value: 0, name: '评价绩效' },
{ value: 0, name: '办件绩效' },
{ value: 0, name: '效能绩效' },
{ value: 0, name: '投诉绩效' },
{ value: 0, name: '其它绩效' },
],//部门加分分布
pieSubScore:[
{value:0,name:'考勤绩效'},
{value:0,name:'评价绩效'},
{value:0,name:'办件绩效'},
{value:0,name:'效能绩效'},
{value:0,name:'投诉绩效'},
{value:0,name:'其它绩效'},
pieSubScore: [
{ value: 0, name: '考勤绩效' },
{ value: 0, name: '评价绩效' },
{ value: 0, name: '办件绩效' },
{ value: 0, name: '效能绩效' },
{ value: 0, name: '投诉绩效' },
{ value: 0, name: '其它绩效' },
]//部门减分分布
},//按部门
month:"",//月份
boardQuery:{
page:1,
size:-1,
year:parseInt(moment().format('YYYY')),
month:parseInt(moment().format('MM')),
month: "",//月份
boardQuery: {
page: 1,
size: -1,
year: parseInt(moment().format('YYYY')),
month: parseInt(moment().format('MM')),
},//看板查询条件
query:{
page:1,
size:-1,
assessmentScope:1//考核范围(1.部门,2.个人)
query: {
page: 1,
size: -1,
assessmentScope: 1//考核范围(1.部门,2.个人)
},//目标管理查询条件
StatQuery:{
page:1,
size:-1,
year:parseInt(moment().format('YYYY')),
month:parseInt(moment().format('MM')),
StatQuery: {
page: 1,
size: -1,
year: parseInt(moment().format('YYYY')),
month: parseInt(moment().format('MM')),
},//对齐方式入参
dict:{}//字典
dict: {}//字典
};
},
};
......@@ -594,55 +545,66 @@ export default {
width: 100%;
height: 100%;
overflow: hidden;
/deep/.el-tabs__item {
width: 120px;
font-size: 14px;
text-align: center;
}
.content {
width: 100%;
height: 100%;
.search_top {
width: 100%;
height: 1000%;
display: flex;
justify-content: space-between;
}
/deep/.el-radio-button {
width: 150px;
text-align: center;
border: 1px solid #eee;
}
/deep/.el-radio-button__inner {
width: 150px;
}
/deep/.el-radio-button__orig-radio:checked + .el-radio-button__inner {
/deep/.el-radio-button__orig-radio:checked+.el-radio-button__inner {
width: 150px;
border: none;
background: #1890ff;
color: #fff;
border: 1px solid #eee;
}
.top {
width: 100%;
height: 60px;
}
.mid {
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
.mid_top {
width: 100%;
height: 300px;
display: flex;
justify-content: space-between;
.jixiaozongfen,
.jixiaopingjunfen {
width: 48%;
height: 100%;
}
}
.mid_down {
width: 100%;
height: 380px;
......@@ -656,16 +618,19 @@ export default {
}
}
}
.mid_content,
.bar_content {
width: 100%;
height: 700px;
overflow: hidden;
}
.mid_content {
overflow-y: auto;
display: flex;
flex-wrap: wrap;
.goal_box {
width: 405px;
height: 238px;
......@@ -678,14 +643,17 @@ export default {
-webkit-box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.117647058823529);
margin: 10px 20px 20px 10px;
padding: 20px;
.goal_title {
width: 100%;
display: flex;
align-items: center;
img {
margin-right: 10px;
}
}
.goal_txt {
font-family: "微软雅黑", sans-serif;
font-weight: 400;
......@@ -695,6 +663,7 @@ export default {
width: 100%;
margin: 10px 0;
}
.button_box {
width: 100%;
display: flex;
......
<template>
<div class="page">
<LayoutTable :data="tableData" notAdd notDel :config="tableConfig">
<el-button
slot="table-head-left2"
style="margin-left: 10px"
icon="el-icon-tickets"
size="mini"
@click="doExport"
:disabled="isExport"
>导出</el-button
>
<el-button slot="table-head-left2" style="margin-left: 10px" icon="el-icon-tickets" size="mini" @click="doExport"
:disabled="isExport">导出</el-button>
</LayoutTable>
<dialog-show ref="dialogform" @ok="getData" />
......@@ -26,7 +19,7 @@ export default {
dialogShow,
},
mixins: [table],
created() {},
created() { },
methods: {
/** 导出Excel */
doExport() {
......@@ -92,7 +85,7 @@ export default {
{ label: "姓名", prop: "staffName" },
{ label: "工号", prop: "workNum" },
{ label: "手机号", prop: "phoneNumber" },
{ label: "所属部门", prop: "deptName" },
......@@ -103,15 +96,16 @@ export default {
},
},
{ label: "考勤绩效", prop: "attendScore", formatter: this.formatter },
{ label: "考勤绩效指标分数", prop: "attendScore", formatter: this.formatter },
{ label: "评价绩效", prop: "assessScore", formatter: this.formatter },
{ label: "评价绩效指标分数", prop: "reviewScore", formatter: this.formatter },
{ label: "投诉绩效指标分数", prop: "reviewScore", formatter: this.formatter },
{ label: "办件绩效", prop: "workScore", formatter: this.formatter },
{ label: "办件绩效分数", prop: "workScore", formatter: this.formatter },
{ label: "效能绩效", prop: "effectScore", formatter: this.formatter },
{ label: "效能绩效分数", prop: "effectScore", formatter: this.formatter },
{ label: "其它绩效", prop: "otherScore", formatter: this.formatter },
{ label: "其它绩效分数", prop: "otherScore", formatter: this.formatter },
{
label: "累计异常分数",
......
......@@ -22,7 +22,7 @@
resolved "https://registry.nlark.com/@babel/compat-data/download/@babel/compat-data-7.14.9.tgz?cache=0&sync_timestamp=1627804534988&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fcompat-data%2Fdownload%2F%40babel%2Fcompat-data-7.14.9.tgz"
integrity sha1-rHmWzqr8+PQQEZyK8NHbTPkUohA=
"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.11.0", "@babel/core@^7.12.0", "@babel/core@^7.13.0", "@babel/core@^7.4.0-0", "@babel/core@^7.9.6":
"@babel/core@^7.11.0", "@babel/core@^7.9.6":
version "7.14.8"
resolved "https://registry.nlark.com/@babel/core/download/@babel/core-7.14.8.tgz"
integrity sha1-IM33yEtdhtg/rIcQqLxgWnuj8BA=
......@@ -1057,7 +1057,7 @@
resolved "https://registry.nlark.com/@hapi/bourne/download/@hapi/bourne-1.3.2.tgz"
integrity sha1-CnCVreoGckPOMoPhtWuKj0U7JCo=
"@hapi/hoek@^8.3.0", "@hapi/hoek@8.x.x":
"@hapi/hoek@8.x.x", "@hapi/hoek@^8.3.0":
version "8.5.1"
resolved "https://registry.nlark.com/@hapi/hoek/download/@hapi/hoek-8.5.1.tgz"
integrity sha1-/elgZMpEbeyMVajC8TCVewcMbgY=
......@@ -1408,7 +1408,7 @@
resolved "https://registry.nlark.com/@vue/cli-plugin-vuex/download/@vue/cli-plugin-vuex-4.5.13.tgz"
integrity sha1-mGRti8HmnPbGpsui/tPqzgNWw2A=
"@vue/cli-service@^3.0.0 || ^4.0.0-0", "@vue/cli-service@4.4.6":
"@vue/cli-service@4.4.6":
version "4.4.6"
resolved "https://registry.nlark.com/@vue/cli-service/download/@vue/cli-service-4.4.6.tgz"
integrity sha1-g8oFjQgesUW7wa4v6AadLZ3ffhg=
......@@ -1693,16 +1693,16 @@ acorn-walk@^7.1.1:
resolved "https://registry.nlark.com/acorn-walk/download/acorn-walk-7.2.0.tgz?cache=0&sync_timestamp=1624951909442&other_urls=https%3A%2F%2Fregistry.nlark.com%2Facorn-walk%2Fdownload%2Facorn-walk-7.2.0.tgz"
integrity sha1-DeiJpgEgOQmw++B7iTjcIdLpZ7w=
"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^7.1.1, acorn@^7.2.0, acorn@^7.4.0:
version "7.4.1"
resolved "https://registry.nlark.com/acorn/download/acorn-7.4.1.tgz?cache=0&sync_timestamp=1624526873403&other_urls=https%3A%2F%2Fregistry.nlark.com%2Facorn%2Fdownload%2Facorn-7.4.1.tgz"
integrity sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo=
acorn@^6.4.1:
version "6.4.2"
resolved "https://registry.nlark.com/acorn/download/acorn-6.4.2.tgz?cache=0&sync_timestamp=1624526873403&other_urls=https%3A%2F%2Fregistry.nlark.com%2Facorn%2Fdownload%2Facorn-6.4.2.tgz"
integrity sha1-NYZv1xBSjpLeEM8GAWSY5H454eY=
acorn@^7.1.1, acorn@^7.2.0, acorn@^7.4.0:
version "7.4.1"
resolved "https://registry.nlark.com/acorn/download/acorn-7.4.1.tgz?cache=0&sync_timestamp=1624526873403&other_urls=https%3A%2F%2Fregistry.nlark.com%2Facorn%2Fdownload%2Facorn-7.4.1.tgz"
integrity sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo=
address@^1.1.2:
version "1.1.2"
resolved "https://registry.nlark.com/address/download/address-1.1.2.tgz"
......@@ -1739,7 +1739,7 @@ ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2:
resolved "https://registry.nlark.com/ajv-keywords/download/ajv-keywords-3.5.2.tgz"
integrity sha1-MfKdpatuANHC0yms97WSlhTVAU0=
ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.9.1, ajv@>=5.0.0:
ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4:
version "6.12.6"
resolved "https://registry.nlark.com/ajv/download/ajv-6.12.6.tgz"
integrity sha1-uvWmLoArB9l3A0WG+MO69a3ybfQ=
......@@ -1801,21 +1801,7 @@ ansi-styles@^2.2.1:
resolved "https://registry.nlark.com/ansi-styles/download/ansi-styles-2.2.1.tgz?cache=0&sync_timestamp=1618995588464&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fansi-styles%2Fdownload%2Fansi-styles-2.2.1.tgz"
integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=
ansi-styles@^3.1.0:
version "3.2.1"
resolved "https://registry.nlark.com/ansi-styles/download/ansi-styles-3.2.1.tgz?cache=0&sync_timestamp=1618995588464&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fansi-styles%2Fdownload%2Fansi-styles-3.2.1.tgz"
integrity sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=
dependencies:
color-convert "^1.9.0"
ansi-styles@^3.2.0:
version "3.2.1"
resolved "https://registry.nlark.com/ansi-styles/download/ansi-styles-3.2.1.tgz?cache=0&sync_timestamp=1618995588464&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fansi-styles%2Fdownload%2Fansi-styles-3.2.1.tgz"
integrity sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=
dependencies:
color-convert "^1.9.0"
ansi-styles@^3.2.1:
ansi-styles@^3.1.0, ansi-styles@^3.2.0, ansi-styles@^3.2.1:
version "3.2.1"
resolved "https://registry.nlark.com/ansi-styles/download/ansi-styles-3.2.1.tgz?cache=0&sync_timestamp=1618995588464&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fansi-styles%2Fdownload%2Fansi-styles-3.2.1.tgz"
integrity sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=
......@@ -1882,16 +1868,16 @@ arr-union@^3.1.0:
resolved "https://registry.nlark.com/arr-union/download/arr-union-3.1.0.tgz"
integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=
array-flatten@^2.1.0:
version "2.1.2"
resolved "https://registry.nlark.com/array-flatten/download/array-flatten-2.1.2.tgz"
integrity sha1-JO+AoowaiTYX4hSbDG0NeIKTsJk=
array-flatten@1.1.1:
version "1.1.1"
resolved "https://registry.nlark.com/array-flatten/download/array-flatten-1.1.1.tgz"
integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=
array-flatten@^2.1.0:
version "2.1.2"
resolved "https://registry.nlark.com/array-flatten/download/array-flatten-2.1.2.tgz"
integrity sha1-JO+AoowaiTYX4hSbDG0NeIKTsJk=
array-union@^1.0.1, array-union@^1.0.2:
version "1.0.2"
resolved "https://registry.nlark.com/array-union/download/array-union-1.0.2.tgz"
......@@ -1926,7 +1912,7 @@ asn1@~0.2.3:
dependencies:
safer-buffer "~2.1.0"
assert-plus@^1.0.0, assert-plus@1.0.0:
assert-plus@1.0.0, assert-plus@^1.0.0:
version "1.0.0"
resolved "https://registry.nlark.com/assert-plus/download/assert-plus-1.0.0.tgz"
integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=
......@@ -2090,6 +2076,11 @@ balanced-match@^1.0.0:
resolved "https://registry.nlark.com/balanced-match/download/balanced-match-1.0.2.tgz"
integrity sha1-6D46fj8wCzTLnYf2FfoMvzV2kO4=
base64-js@^1.0.2, base64-js@^1.3.1:
version "1.5.1"
resolved "https://registry.nlark.com/base64-js/download/base64-js-1.5.1.tgz"
integrity sha1-GxtEAWClv3rUC2UPCVljSBkDkwo=
base@^0.11.1:
version "0.11.2"
resolved "https://registry.nlark.com/base/download/base-0.11.2.tgz"
......@@ -2103,11 +2094,6 @@ base@^0.11.1:
mixin-deep "^1.2.0"
pascalcase "^0.1.1"
base64-js@^1.0.2, base64-js@^1.3.1:
version "1.5.1"
resolved "https://registry.nlark.com/base64-js/download/base64-js-1.5.1.tgz"
integrity sha1-GxtEAWClv3rUC2UPCVljSBkDkwo=
batch@0.6.1:
version "0.6.1"
resolved "https://registry.nlark.com/batch/download/batch-0.6.1.tgz"
......@@ -2155,6 +2141,13 @@ binary-extensions@^2.0.0:
resolved "https://registry.nlark.com/binary-extensions/download/binary-extensions-2.2.0.tgz"
integrity sha1-dfUC7q+f/eQvyYgpZFvk6na9ni0=
bindings@^1.5.0:
version "1.5.0"
resolved "https://registry.npmmirror.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df"
integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==
dependencies:
file-uri-to-path "1.0.0"
blob.js@^1.0.1:
version "1.0.1"
resolved "https://registry.npmjs.org/blob.js/-/blob.js-1.0.1.tgz"
......@@ -2170,12 +2163,7 @@ bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9:
resolved "https://registry.nlark.com/bn.js/download/bn.js-4.12.0.tgz"
integrity sha1-d1s/J477uXGO7HNh9IP7Nvu/6og=
bn.js@^5.0.0:
version "5.2.0"
resolved "https://registry.nlark.com/bn.js/download/bn.js-5.2.0.tgz"
integrity sha1-NYhgZ0OWxpl3canQUfzBtX1K4AI=
bn.js@^5.1.1:
bn.js@^5.0.0, bn.js@^5.1.1:
version "5.2.0"
resolved "https://registry.nlark.com/bn.js/download/bn.js-5.2.0.tgz"
integrity sha1-NYhgZ0OWxpl3canQUfzBtX1K4AI=
......@@ -2237,14 +2225,7 @@ braces@^2.2.2, braces@^2.3.1, braces@^2.3.2:
split-string "^3.0.2"
to-regex "^3.0.1"
braces@^3.0.1:
version "3.0.2"
resolved "https://registry.nlark.com/braces/download/braces-3.0.2.tgz"
integrity sha1-NFThpGLujVmeI23zNs2epPiv4Qc=
dependencies:
fill-range "^7.0.1"
braces@~3.0.2:
braces@^3.0.1, braces@~3.0.2:
version "3.0.2"
resolved "https://registry.nlark.com/braces/download/braces-3.0.2.tgz"
integrity sha1-NFThpGLujVmeI23zNs2epPiv4Qc=
......@@ -2563,6 +2544,23 @@ cfb@^1.1.4:
adler-32 "~1.3.0"
crc-32 "~1.2.0"
chalk@2.3.0:
version "2.3.0"
resolved "https://registry.nlark.com/chalk/download/chalk-2.3.0.tgz?cache=0&sync_timestamp=1627646614989&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-2.3.0.tgz"
integrity sha1-tepI78nBeT3MybR2fJORTT8tUro=
dependencies:
ansi-styles "^3.1.0"
escape-string-regexp "^1.0.5"
supports-color "^4.0.0"
chalk@4.1.0:
version "4.1.0"
resolved "https://registry.nlark.com/chalk/download/chalk-4.1.0.tgz?cache=0&sync_timestamp=1627646734234&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-4.1.0.tgz"
integrity sha1-ThSHCmGNni7dl92DRf2dncMVZGo=
dependencies:
ansi-styles "^4.1.0"
supports-color "^7.1.0"
chalk@^1.1.3:
version "1.1.3"
resolved "https://registry.nlark.com/chalk/download/chalk-1.1.3.tgz?cache=0&sync_timestamp=1627646734234&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-1.1.3.tgz"
......@@ -2574,16 +2572,7 @@ chalk@^1.1.3:
strip-ansi "^3.0.0"
supports-color "^2.0.0"
chalk@^2.0.0:
version "2.4.2"
resolved "https://registry.nlark.com/chalk/download/chalk-2.4.2.tgz?cache=0&sync_timestamp=1627646734234&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-2.4.2.tgz"
integrity sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=
dependencies:
ansi-styles "^3.2.1"
escape-string-regexp "^1.0.5"
supports-color "^5.3.0"
chalk@^2.0.1, chalk@^2.4.2:
chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2:
version "2.4.2"
resolved "https://registry.nlark.com/chalk/download/chalk-2.4.2.tgz?cache=0&sync_timestamp=1627646734234&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-2.4.2.tgz"
integrity sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=
......@@ -2592,33 +2581,7 @@ chalk@^2.0.1, chalk@^2.4.2:
escape-string-regexp "^1.0.5"
supports-color "^5.3.0"
chalk@^2.3.0:
version "2.4.2"
resolved "https://registry.nlark.com/chalk/download/chalk-2.4.2.tgz?cache=0&sync_timestamp=1627646734234&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-2.4.2.tgz"
integrity sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=
dependencies:
ansi-styles "^3.2.1"
escape-string-regexp "^1.0.5"
supports-color "^5.3.0"
chalk@^2.4.1:
version "2.4.2"
resolved "https://registry.nlark.com/chalk/download/chalk-2.4.2.tgz?cache=0&sync_timestamp=1627646734234&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-2.4.2.tgz"
integrity sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=
dependencies:
ansi-styles "^3.2.1"
escape-string-regexp "^1.0.5"
supports-color "^5.3.0"
chalk@^4.0.0:
version "4.1.2"
resolved "https://registry.nlark.com/chalk/download/chalk-4.1.2.tgz?cache=0&sync_timestamp=1627646734234&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-4.1.2.tgz"
integrity sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=
dependencies:
ansi-styles "^4.1.0"
supports-color "^7.1.0"
chalk@^4.1.0:
chalk@^4.0.0, chalk@^4.1.0:
version "4.1.2"
resolved "https://registry.nlark.com/chalk/download/chalk-4.1.2.tgz?cache=0&sync_timestamp=1627646734234&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-4.1.2.tgz"
integrity sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=
......@@ -2626,23 +2589,6 @@ chalk@^4.1.0:
ansi-styles "^4.1.0"
supports-color "^7.1.0"
chalk@2.3.0:
version "2.3.0"
resolved "https://registry.nlark.com/chalk/download/chalk-2.3.0.tgz?cache=0&sync_timestamp=1627646614989&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-2.3.0.tgz"
integrity sha1-tepI78nBeT3MybR2fJORTT8tUro=
dependencies:
ansi-styles "^3.1.0"
escape-string-regexp "^1.0.5"
supports-color "^4.0.0"
chalk@4.1.0:
version "4.1.0"
resolved "https://registry.nlark.com/chalk/download/chalk-4.1.0.tgz?cache=0&sync_timestamp=1627646734234&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-4.1.0.tgz"
integrity sha1-ThSHCmGNni7dl92DRf2dncMVZGo=
dependencies:
ansi-styles "^4.1.0"
supports-color "^7.1.0"
chardet@^0.7.0:
version "0.7.0"
resolved "https://registry.nlark.com/chardet/download/chardet-0.7.0.tgz"
......@@ -2653,6 +2599,21 @@ check-types@^8.0.3:
resolved "https://registry.nlark.com/check-types/download/check-types-8.0.3.tgz"
integrity sha1-M1bMoZyIlUTy16le1JzlCKDs9VI=
"chokidar@>=2.0.0 <4.0.0", chokidar@^3.4.1:
version "3.5.2"
resolved "https://registry.nlark.com/chokidar/download/chokidar-3.5.2.tgz?cache=0&sync_timestamp=1623763736136&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchokidar%2Fdownload%2Fchokidar-3.5.2.tgz"
integrity sha1-26OXb8rbAW9m/TZQIdkWANAcHnU=
dependencies:
anymatch "~3.1.2"
braces "~3.0.2"
glob-parent "~5.1.2"
is-binary-path "~2.1.0"
is-glob "~4.0.1"
normalize-path "~3.0.0"
readdirp "~3.6.0"
optionalDependencies:
fsevents "~2.3.2"
chokidar@^2.1.8:
version "2.1.8"
resolved "https://registry.nlark.com/chokidar/download/chokidar-2.1.8.tgz?cache=0&sync_timestamp=1623763736136&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchokidar%2Fdownload%2Fchokidar-2.1.8.tgz"
......@@ -2672,36 +2633,6 @@ chokidar@^2.1.8:
optionalDependencies:
fsevents "^1.2.7"
chokidar@^3.4.1:
version "3.5.2"
resolved "https://registry.nlark.com/chokidar/download/chokidar-3.5.2.tgz?cache=0&sync_timestamp=1623763736136&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchokidar%2Fdownload%2Fchokidar-3.5.2.tgz"
integrity sha1-26OXb8rbAW9m/TZQIdkWANAcHnU=
dependencies:
anymatch "~3.1.2"
braces "~3.0.2"
glob-parent "~5.1.2"
is-binary-path "~2.1.0"
is-glob "~4.0.1"
normalize-path "~3.0.0"
readdirp "~3.6.0"
optionalDependencies:
fsevents "~2.3.2"
"chokidar@>=2.0.0 <4.0.0":
version "3.5.2"
resolved "https://registry.nlark.com/chokidar/download/chokidar-3.5.2.tgz?cache=0&sync_timestamp=1623763736136&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchokidar%2Fdownload%2Fchokidar-3.5.2.tgz"
integrity sha1-26OXb8rbAW9m/TZQIdkWANAcHnU=
dependencies:
anymatch "~3.1.2"
braces "~3.0.2"
glob-parent "~5.1.2"
is-binary-path "~2.1.0"
is-glob "~4.0.1"
normalize-path "~3.0.0"
readdirp "~3.6.0"
optionalDependencies:
fsevents "~2.3.2"
chownr@^1.1.1, chownr@^1.1.2:
version "1.1.4"
resolved "https://registry.nlark.com/chownr/download/chownr-1.1.4.tgz"
......@@ -2895,16 +2826,16 @@ color-convert@^2.0.1:
dependencies:
color-name "~1.1.4"
color-name@^1.0.0, color-name@~1.1.4:
version "1.1.4"
resolved "https://registry.nlark.com/color-name/download/color-name-1.1.4.tgz"
integrity sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=
color-name@1.1.3:
version "1.1.3"
resolved "https://registry.nlark.com/color-name/download/color-name-1.1.3.tgz"
integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
color-name@^1.0.0, color-name@~1.1.4:
version "1.1.4"
resolved "https://registry.nlark.com/color-name/download/color-name-1.1.4.tgz"
integrity sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=
color-string@^1.6.0:
version "1.6.0"
resolved "https://registry.nlark.com/color-string/download/color-string-1.6.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcolor-string%2Fdownload%2Fcolor-string-1.6.0.tgz"
......@@ -2933,6 +2864,11 @@ combined-stream@^1.0.6, combined-stream@~1.0.6:
dependencies:
delayed-stream "~1.0.0"
commander@2.17.x, commander@~2.17.1:
version "2.17.1"
resolved "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz"
integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==
commander@^2.18.0, commander@^2.19.0, commander@^2.20.0:
version "2.20.3"
resolved "https://registry.nlark.com/commander/download/commander-2.20.3.tgz?cache=0&sync_timestamp=1627359190297&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcommander%2Fdownload%2Fcommander-2.20.3.tgz"
......@@ -2948,21 +2884,11 @@ commander@~2.14.1:
resolved "https://registry.npmjs.org/commander/-/commander-2.14.1.tgz"
integrity sha512-+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw==
commander@~2.17.1:
version "2.17.1"
resolved "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz"
integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==
commander@~2.19.0:
version "2.19.0"
resolved "https://registry.nlark.com/commander/download/commander-2.19.0.tgz?cache=0&sync_timestamp=1627359190297&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcommander%2Fdownload%2Fcommander-2.19.0.tgz"
integrity sha1-9hmKqE5bg8RgVLlN3tv+1e6f8So=
commander@2.17.x:
version "2.17.1"
resolved "https://registry.nlark.com/commander/download/commander-2.17.1.tgz?cache=0&sync_timestamp=1627359190297&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcommander%2Fdownload%2Fcommander-2.17.1.tgz"
integrity sha1-vXerfebelCBc6sxy8XFtKfIKd78=
commondir@^1.0.1:
version "1.0.1"
resolved "https://registry.nlark.com/commondir/download/commondir-1.0.1.tgz"
......@@ -3132,20 +3058,22 @@ core-js-pure@^3.30.2:
resolved "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.31.1.tgz"
integrity sha512-w+C62kvWti0EPs4KPMCMVv9DriHSXfQOCQ94bGGBiEW5rrbtt/Rz8n5Krhfw9cpFyzXBjf3DB3QnPdEzGDY4Fw==
core-js@3.8.1:
version "3.8.1"
resolved "https://registry.nlark.com/core-js/download/core-js-3.8.1.tgz"
integrity sha1-9RUjZorIopTRKFw7nbRAJf2mbUc=
core-js@^2.4.0:
version "2.6.12"
resolved "https://registry.nlark.com/core-js/download/core-js-2.6.12.tgz"
integrity sha1-2TM9+nsGXjR8xWgiGdb2kIWcwuw=
core-js@^3.6.5:
version "3.16.0"
core-js@3.8.1:
version "3.8.1"
resolved "https://registry.nlark.com/core-js/download/core-js-3.8.1.tgz"
integrity sha1-9RUjZorIopTRKFw7nbRAJf2mbUc=
version "3.31.1"
resolved "https://registry.npmmirror.com/core-js/-/core-js-3.31.1.tgz#f2b0eea9be9da0def2c5fece71064a7e5d687653"
integrity sha512-2sKLtfq1eFST7l7v62zaqXacPc7uG8ZAya8ogijLhTtaKNcpzpB4TMoTw2Si+8GYKRwFPMMtUT0263QFWFfqyQ==
core-util-is@~1.0.0, core-util-is@1.0.2:
core-util-is@1.0.2, core-util-is@~1.0.0:
version "1.0.2"
resolved "https://registry.nlark.com/core-util-is/download/core-util-is-1.0.2.tgz"
integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
......@@ -3253,7 +3181,7 @@ crypto-browserify@^3.11.0:
randombytes "^2.0.0"
randomfill "^1.0.3"
css-color-names@^0.0.4, css-color-names@0.0.4:
css-color-names@0.0.4, css-color-names@^0.0.4:
version "0.0.4"
resolved "https://registry.nlark.com/css-color-names/download/css-color-names-0.0.4.tgz"
integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=
......@@ -3266,7 +3194,7 @@ css-declaration-sorter@^4.0.1:
postcss "^7.0.1"
timsort "^0.3.0"
css-loader@*, css-loader@^3.5.3:
css-loader@^3.5.3:
version "3.6.0"
resolved "https://registry.nlark.com/css-loader/download/css-loader-3.6.0.tgz?cache=0&sync_timestamp=1626731974484&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcss-loader%2Fdownload%2Fcss-loader-3.6.0.tgz"
integrity sha1-Lkssfm4tJ/jI8o9hv/zS5ske9kU=
......@@ -3311,14 +3239,6 @@ css-select@^4.1.3:
domutils "^2.6.0"
nth-check "^2.0.0"
css-tree@^1.1.2:
version "1.1.3"
resolved "https://registry.nlark.com/css-tree/download/css-tree-1.1.3.tgz"
integrity sha1-60hw+2/XcHMn7JXC/yqwm16NuR0=
dependencies:
mdn-data "2.0.14"
source-map "^0.6.1"
css-tree@1.0.0-alpha.37:
version "1.0.0-alpha.37"
resolved "https://registry.nlark.com/css-tree/download/css-tree-1.0.0-alpha.37.tgz"
......@@ -3327,6 +3247,14 @@ css-tree@1.0.0-alpha.37:
mdn-data "2.0.4"
source-map "^0.6.1"
css-tree@^1.1.2:
version "1.1.3"
resolved "https://registry.nlark.com/css-tree/download/css-tree-1.1.3.tgz"
integrity sha1-60hw+2/XcHMn7JXC/yqwm16NuR0=
dependencies:
mdn-data "2.0.14"
source-map "^0.6.1"
css-what@^3.2.1:
version "3.4.2"
resolved "https://registry.nlark.com/css-what/download/css-what-3.4.2.tgz?cache=0&sync_timestamp=1622227191786&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcss-what%2Fdownload%2Fcss-what-3.4.2.tgz"
......@@ -3434,28 +3362,21 @@ de-indent@^1.0.2:
resolved "https://registry.nlark.com/de-indent/download/de-indent-1.0.2.tgz"
integrity sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=
debug@^2.2.0:
debug@2.6.9, debug@^2.2.0, debug@^2.3.3:
version "2.6.9"
resolved "https://registry.nlark.com/debug/download/debug-2.6.9.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz"
integrity sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=
dependencies:
ms "2.0.0"
debug@^2.3.3:
version "2.6.9"
resolved "https://registry.nlark.com/debug/download/debug-2.6.9.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz"
integrity sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=
debug@=3.1.0:
version "3.1.0"
resolved "https://registry.nlark.com/debug/download/debug-3.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdebug%2Fdownload%2Fdebug-3.1.0.tgz"
integrity sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=
dependencies:
ms "2.0.0"
debug@^3.1.1:
version "3.2.7"
resolved "https://registry.nlark.com/debug/download/debug-3.2.7.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdebug%2Fdownload%2Fdebug-3.2.7.tgz"
integrity sha1-clgLfpFF+zm2Z2+cXl+xALk0F5o=
dependencies:
ms "^2.1.1"
debug@^3.2.6:
debug@^3.1.1, debug@^3.2.6:
version "3.2.7"
resolved "https://registry.nlark.com/debug/download/debug-3.2.7.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdebug%2Fdownload%2Fdebug-3.2.7.tgz"
integrity sha1-clgLfpFF+zm2Z2+cXl+xALk0F5o=
......@@ -3469,20 +3390,6 @@ debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.2.0:
dependencies:
ms "2.1.2"
debug@=3.1.0:
version "3.1.0"
resolved "https://registry.nlark.com/debug/download/debug-3.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdebug%2Fdownload%2Fdebug-3.1.0.tgz"
integrity sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=
dependencies:
ms "2.0.0"
debug@2.6.9:
version "2.6.9"
resolved "https://registry.nlark.com/debug/download/debug-2.6.9.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz"
integrity sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=
dependencies:
ms "2.0.0"
decamelize@^1.2.0:
version "1.2.0"
resolved "https://registry.nlark.com/decamelize/download/decamelize-1.2.0.tgz"
......@@ -3515,21 +3422,16 @@ deep-is@^0.1.3:
resolved "https://registry.nlark.com/deep-is/download/deep-is-0.1.3.tgz"
integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
deepmerge@^1.2.0:
version "1.5.2"
resolved "https://registry.nlark.com/deepmerge/download/deepmerge-1.5.2.tgz"
integrity sha1-EEmdhohEza1P7ghC34x/bwyVp1M=
deepmerge@^1.5.2:
version "1.5.2"
resolved "https://registry.nlark.com/deepmerge/download/deepmerge-1.5.2.tgz"
integrity sha1-EEmdhohEza1P7ghC34x/bwyVp1M=
deepmerge@1.3.2:
version "1.3.2"
resolved "https://registry.nlark.com/deepmerge/download/deepmerge-1.3.2.tgz"
integrity sha1-FmNpFinU2/42T6EqKk8KqGqjoFA=
deepmerge@^1.2.0, deepmerge@^1.5.2:
version "1.5.2"
resolved "https://registry.nlark.com/deepmerge/download/deepmerge-1.5.2.tgz"
integrity sha1-EEmdhohEza1P7ghC34x/bwyVp1M=
default-gateway@^4.2.0:
version "4.2.0"
resolved "https://registry.nlark.com/default-gateway/download/default-gateway-4.2.0.tgz"
......@@ -3682,6 +3584,14 @@ dom-converter@^0.2.0:
dependencies:
utila "~0.4"
dom-serializer@0:
version "0.2.2"
resolved "https://registry.nlark.com/dom-serializer/download/dom-serializer-0.2.2.tgz"
integrity sha1-GvuB9TNxcXXUeGVd68XjMtn5u1E=
dependencies:
domelementtype "^2.0.1"
entities "^2.0.0"
dom-serializer@^1.0.1:
version "1.3.2"
resolved "https://registry.nlark.com/dom-serializer/download/dom-serializer-1.3.2.tgz"
......@@ -3691,20 +3601,12 @@ dom-serializer@^1.0.1:
domhandler "^4.2.0"
entities "^2.0.0"
dom-serializer@0:
version "0.2.2"
resolved "https://registry.nlark.com/dom-serializer/download/dom-serializer-0.2.2.tgz"
integrity sha1-GvuB9TNxcXXUeGVd68XjMtn5u1E=
dependencies:
domelementtype "^2.0.1"
entities "^2.0.0"
domain-browser@^1.1.1:
version "1.2.0"
resolved "https://registry.nlark.com/domain-browser/download/domain-browser-1.2.0.tgz"
integrity sha1-PTH1AZGmdJ3RN1p/Ui6CPULlTto=
domelementtype@^1.3.1, domelementtype@1:
domelementtype@1, domelementtype@^1.3.1:
version "1.3.1"
resolved "https://registry.nlark.com/domelementtype/download/domelementtype-1.3.1.tgz"
integrity sha1-0EjESzew0Qp/Kj1f7j9DM9eQSB8=
......@@ -3741,16 +3643,7 @@ domutils@^1.5.1, domutils@^1.7.0:
dom-serializer "0"
domelementtype "1"
domutils@^2.5.2:
version "2.7.0"
resolved "https://registry.nlark.com/domutils/download/domutils-2.7.0.tgz"
integrity sha1-jrrwxB66/PVbC3LsMcVjI3EsVEI=
dependencies:
dom-serializer "^1.0.1"
domelementtype "^2.2.0"
domhandler "^4.2.0"
domutils@^2.6.0:
domutils@^2.5.2, domutils@^2.6.0:
version "2.7.0"
resolved "https://registry.nlark.com/domutils/download/domutils-2.7.0.tgz"
integrity sha1-jrrwxB66/PVbC3LsMcVjI3EsVEI=
......@@ -3824,7 +3717,7 @@ echarts-wordcloud@^1.1.3:
resolved "https://registry.nlark.com/echarts-wordcloud/download/echarts-wordcloud-1.1.3.tgz"
integrity sha1-B7FAyLp2sZwxe0PDEPPV3Jkon/I=
echarts@^4.8.0, echarts@^4.9.0, echarts@>3.0.0:
echarts@^4.9.0:
version "4.9.0"
resolved "https://registry.npmjs.org/echarts/-/echarts-4.9.0.tgz"
integrity sha512-+ugizgtJ+KmsJyyDPxaw2Br5FqzuBnyOWwcxPKO6y0gc5caYcfnEUIlNStx02necw8jmKmTafmpHhGo4XDtEIA==
......@@ -3922,7 +3815,7 @@ enhanced-resolve@^4.5.0:
memory-fs "^0.5.0"
tapable "^1.0.0"
enquirer@^2.3.5, enquirer@^2.3.6, "enquirer@>= 2.3.0 < 3":
enquirer@^2.3.5, enquirer@^2.3.6:
version "2.3.6"
resolved "https://registry.nlark.com/enquirer/download/enquirer-2.3.6.tgz"
integrity sha1-Kn/l3WNKHkElqXXsmU/1RW3Dc00=
......@@ -4002,7 +3895,7 @@ escape-html@~1.0.3:
resolved "https://registry.nlark.com/escape-html/download/escape-html-1.0.3.tgz"
integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=
escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5, escape-string-regexp@1.0.5:
escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
version "1.0.5"
resolved "https://registry.nlark.com/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz"
integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
......@@ -4061,7 +3954,7 @@ eslint-visitor-keys@^2.0.0:
resolved "https://registry.nlark.com/eslint-visitor-keys/download/eslint-visitor-keys-2.1.0.tgz"
integrity sha1-9lMoJZMFknOSyTjtROsKXJsr0wM=
"eslint@^6.2.0 || ^7.0.0", "eslint@>= 1.6.0", "eslint@>= 4.12.1", "eslint@>=1.6.0 <7.0.0", eslint@>=5.0.0, eslint@7.15.0:
eslint@7.15.0:
version "7.15.0"
resolved "https://registry.nlark.com/eslint/download/eslint-7.15.0.tgz?cache=0&sync_timestamp=1627688614405&other_urls=https%3A%2F%2Fregistry.nlark.com%2Feslint%2Fdownload%2Feslint-7.15.0.tgz"
integrity sha1-6xVfuO0IZfz12QP3a+Llts1+C8c=
......@@ -4146,12 +4039,7 @@ estraverse@^4.1.1:
resolved "https://registry.nlark.com/estraverse/download/estraverse-4.3.0.tgz"
integrity sha1-OYrT88WiSUi+dyXoPRGn3ijNvR0=
estraverse@^5.1.0:
version "5.2.0"
resolved "https://registry.nlark.com/estraverse/download/estraverse-5.2.0.tgz"
integrity sha1-MH30JUfmzHMk088DwVXVzbjFOIA=
estraverse@^5.2.0:
estraverse@^5.1.0, estraverse@^5.2.0:
version "5.2.0"
resolved "https://registry.nlark.com/estraverse/download/estraverse-5.2.0.tgz"
integrity sha1-MH30JUfmzHMk088DwVXVzbjFOIA=
......@@ -4319,15 +4207,7 @@ extend-shallow@^2.0.1:
dependencies:
is-extendable "^0.1.0"
extend-shallow@^3.0.0:
version "3.0.2"
resolved "https://registry.nlark.com/extend-shallow/download/extend-shallow-3.0.2.tgz"
integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=
dependencies:
assign-symbols "^1.0.0"
is-extendable "^1.0.1"
extend-shallow@^3.0.2:
extend-shallow@^3.0.0, extend-shallow@^3.0.2:
version "3.0.2"
resolved "https://registry.nlark.com/extend-shallow/download/extend-shallow-3.0.2.tgz"
integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=
......@@ -4363,16 +4243,16 @@ extglob@^2.0.2, extglob@^2.0.4:
snapdragon "^0.8.1"
to-regex "^3.0.1"
extsprintf@^1.2.0:
version "1.4.0"
resolved "https://registry.nlark.com/extsprintf/download/extsprintf-1.4.0.tgz"
integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=
extsprintf@1.3.0:
version "1.3.0"
resolved "https://registry.nlark.com/extsprintf/download/extsprintf-1.3.0.tgz"
integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=
extsprintf@^1.2.0:
version "1.4.0"
resolved "https://registry.nlark.com/extsprintf/download/extsprintf-1.4.0.tgz"
integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=
fast-deep-equal@^3.1.1:
version "3.1.3"
resolved "https://registry.nlark.com/fast-deep-equal/download/fast-deep-equal-3.1.3.tgz"
......@@ -4431,7 +4311,7 @@ file-entry-cache@^6.0.0:
dependencies:
flat-cache "^3.0.4"
file-loader@*, file-loader@^4.2.0:
file-loader@^4.2.0:
version "4.3.0"
resolved "https://registry.nlark.com/file-loader/download/file-loader-4.3.0.tgz"
integrity sha1-eA8ED3KbPRgBnyBgX3I+hEuKWK8=
......@@ -4439,15 +4319,20 @@ file-loader@*, file-loader@^4.2.0:
loader-utils "^1.2.3"
schema-utils "^2.5.0"
file-saver@2.0.4:
version "2.0.4"
resolved "https://registry.npm.taobao.org/file-saver/download/file-saver-2.0.4.tgz?cache=0&sync_timestamp=1605790866952&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffile-saver%2Fdownload%2Ffile-saver-2.0.4.tgz"
integrity sha1-RMQOg1MZyYNqhCIbTiVdS7TLe7U=
file-saver@^1.3.3:
version "1.3.8"
resolved "https://registry.npmjs.org/file-saver/-/file-saver-1.3.8.tgz"
integrity sha512-spKHSBQIxxS81N/O21WmuXA2F6wppUCsutpzenOeZzOCCJ5gEfcbqJP983IrpLXzYmXnMUa6J03SubcNPdKrlg==
file-saver@2.0.4:
version "2.0.4"
resolved "https://registry.npm.taobao.org/file-saver/download/file-saver-2.0.4.tgz?cache=0&sync_timestamp=1605790866952&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffile-saver%2Fdownload%2Ffile-saver-2.0.4.tgz"
integrity sha1-RMQOg1MZyYNqhCIbTiVdS7TLe7U=
file-uri-to-path@1.0.0:
version "1.0.0"
resolved "https://registry.npmmirror.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==
filesize@^3.6.1:
version "3.6.1"
......@@ -4471,19 +4356,6 @@ fill-range@^7.0.1:
dependencies:
to-regex-range "^5.0.1"
finalhandler@~1.1.2:
version "1.1.2"
resolved "https://registry.nlark.com/finalhandler/download/finalhandler-1.1.2.tgz"
integrity sha1-t+fQAP/RGTjQ/bBTUG9uur6fWH0=
dependencies:
debug "2.6.9"
encodeurl "~1.0.2"
escape-html "~1.0.3"
on-finished "~2.3.0"
parseurl "~1.3.3"
statuses "~1.5.0"
unpipe "~1.0.0"
finalhandler@1.1.0:
version "1.1.0"
resolved "https://registry.nlark.com/finalhandler/download/finalhandler-1.1.0.tgz"
......@@ -4497,6 +4369,19 @@ finalhandler@1.1.0:
statuses "~1.3.1"
unpipe "~1.0.0"
finalhandler@~1.1.2:
version "1.1.2"
resolved "https://registry.nlark.com/finalhandler/download/finalhandler-1.1.2.tgz"
integrity sha1-t+fQAP/RGTjQ/bBTUG9uur6fWH0=
dependencies:
debug "2.6.9"
encodeurl "~1.0.2"
escape-html "~1.0.3"
on-finished "~2.3.0"
parseurl "~1.3.3"
statuses "~1.5.0"
unpipe "~1.0.0"
find-cache-dir@^0.1.1:
version "0.1.1"
resolved "https://registry.nlark.com/find-cache-dir/download/find-cache-dir-0.1.1.tgz?cache=0&sync_timestamp=1618910407412&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ffind-cache-dir%2Fdownload%2Ffind-cache-dir-0.1.1.tgz"
......@@ -4568,11 +4453,6 @@ flush-write-stream@^1.0.0:
inherits "^2.0.3"
readable-stream "^2.3.6"
follow-redirects@^1.0.0:
version "1.14.1"
resolved "https://registry.nlark.com/follow-redirects/download/follow-redirects-1.14.1.tgz"
integrity sha1-2RFN7Qoc/dM04WTmZirQK/2R/0M=
follow-redirects@1.5.10:
version "1.5.10"
resolved "https://registry.nlark.com/follow-redirects/download/follow-redirects-1.5.10.tgz"
......@@ -4580,6 +4460,11 @@ follow-redirects@1.5.10:
dependencies:
debug "=3.1.0"
follow-redirects@^1.0.0:
version "1.14.1"
resolved "https://registry.nlark.com/follow-redirects/download/follow-redirects-1.14.1.tgz"
integrity sha1-2RFN7Qoc/dM04WTmZirQK/2R/0M=
for-in@^0.1.3:
version "0.1.8"
resolved "https://registry.npmmirror.com/for-in/-/for-in-0.1.8.tgz"
......@@ -4672,6 +4557,19 @@ fs.realpath@^1.0.0:
resolved "https://registry.nlark.com/fs.realpath/download/fs.realpath-1.0.0.tgz"
integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
fsevents@^1.2.7:
version "1.2.13"
resolved "https://registry.npmmirror.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38"
integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==
dependencies:
bindings "^1.5.0"
nan "^2.12.1"
fsevents@~2.3.2:
version "2.3.2"
resolved "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
function-bind@^1.1.1:
version "1.1.1"
resolved "https://registry.nlark.com/function-bind/download/function-bind-1.1.1.tgz"
......@@ -4755,14 +4653,7 @@ glob-parent@^3.1.0:
is-glob "^3.1.0"
path-dirname "^1.0.0"
glob-parent@^5.0.0:
version "5.1.2"
resolved "https://registry.nlark.com/glob-parent/download/glob-parent-5.1.2.tgz?cache=0&sync_timestamp=1626760165717&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fglob-parent%2Fdownload%2Fglob-parent-5.1.2.tgz"
integrity sha1-hpgyxYA0/mikCTwX3BXoNA2EAcQ=
dependencies:
is-glob "^4.0.1"
glob-parent@~5.1.2:
glob-parent@^5.0.0, glob-parent@~5.1.2:
version "5.1.2"
resolved "https://registry.nlark.com/glob-parent/download/glob-parent-5.1.2.tgz?cache=0&sync_timestamp=1626760165717&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fglob-parent%2Fdownload%2Fglob-parent-5.1.2.tgz"
integrity sha1-hpgyxYA0/mikCTwX3BXoNA2EAcQ=
......@@ -4975,7 +4866,7 @@ hash.js@^1.0.0, hash.js@^1.0.3:
inherits "^2.0.3"
minimalistic-assert "^1.0.1"
he@^1.1.0, he@^1.1.1, he@1.2.x:
he@1.2.x, he@^1.1.0, he@^1.1.1:
version "1.2.0"
resolved "https://registry.nlark.com/he/download/he-1.2.0.tgz"
integrity sha1-hK5l+n6vsWX922FWauFLrwVmTw8=
......@@ -5057,7 +4948,7 @@ html-tags@^3.1.0:
resolved "https://registry.nlark.com/html-tags/download/html-tags-3.1.0.tgz"
integrity sha1-e15vfmZen7QfMAB+2eDUHpf7IUA=
"html-webpack-plugin@^3.0.0 || ^4.0.0", html-webpack-plugin@^3.2.0, html-webpack-plugin@>=2.26.0:
html-webpack-plugin@^3.2.0:
version "3.2.0"
resolved "https://registry.nlark.com/html-webpack-plugin/download/html-webpack-plugin-3.2.0.tgz?cache=0&sync_timestamp=1624367726063&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fhtml-webpack-plugin%2Fdownload%2Fhtml-webpack-plugin-3.2.0.tgz"
integrity sha1-sBq71yOsqqeze2r0SS69oD2d03s=
......@@ -5097,6 +4988,17 @@ http-deceiver@^1.2.7:
resolved "https://registry.nlark.com/http-deceiver/download/http-deceiver-1.2.7.tgz"
integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=
http-errors@1.7.2:
version "1.7.2"
resolved "https://registry.nlark.com/http-errors/download/http-errors-1.7.2.tgz"
integrity sha1-T1ApzxMjnzEDblsuVSkrz7zIXI8=
dependencies:
depd "~1.1.2"
inherits "2.0.3"
setprototypeof "1.1.1"
statuses ">= 1.5.0 < 2"
toidentifier "1.0.0"
http-errors@~1.6.2:
version "1.6.3"
resolved "https://registry.nlark.com/http-errors/download/http-errors-1.6.3.tgz"
......@@ -5118,17 +5020,6 @@ http-errors@~1.7.2:
statuses ">= 1.5.0 < 2"
toidentifier "1.0.0"
http-errors@1.7.2:
version "1.7.2"
resolved "https://registry.nlark.com/http-errors/download/http-errors-1.7.2.tgz"
integrity sha1-T1ApzxMjnzEDblsuVSkrz7zIXI8=
dependencies:
depd "~1.1.2"
inherits "2.0.3"
setprototypeof "1.1.1"
statuses ">= 1.5.0 < 2"
toidentifier "1.0.0"
http-parser-js@>=0.5.1:
version "0.5.3"
resolved "https://registry.nlark.com/http-parser-js/download/http-parser-js-0.5.3.tgz"
......@@ -5172,7 +5063,7 @@ human-signals@^1.1.1:
resolved "https://registry.nlark.com/human-signals/download/human-signals-1.1.1.tgz"
integrity sha1-xbHNFPUK6uCatsWf5jujOV/k36M=
iconv-lite@^0.4.24, iconv-lite@0.4.24:
iconv-lite@0.4.24, iconv-lite@^0.4.24:
version "0.4.24"
resolved "https://registry.nlark.com/iconv-lite/download/iconv-lite-0.4.24.tgz?cache=0&sync_timestamp=1621826522823&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ficonv-lite%2Fdownload%2Ficonv-lite-0.4.24.tgz"
integrity sha1-ICK0sl+93CHS9SSXSkdKr+czkIs=
......@@ -5277,7 +5168,7 @@ inflight@^1.0.4:
once "^1.3.0"
wrappy "1"
inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3, inherits@2, inherits@2.0.4:
inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3:
version "2.0.4"
resolved "https://registry.nlark.com/inherits/download/inherits-2.0.4.tgz"
integrity sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w=
......@@ -5343,7 +5234,7 @@ ip@^1.1.0, ip@^1.1.5:
resolved "https://registry.nlark.com/ip/download/ip-1.1.5.tgz"
integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=
ipaddr.js@^1.9.0, ipaddr.js@1.9.1:
ipaddr.js@1.9.1, ipaddr.js@^1.9.0:
version "1.9.1"
resolved "https://registry.nlark.com/ipaddr.js/download/ipaddr.js-1.9.1.tgz"
integrity sha1-v/OFQ+64mEglB5/zoqjmy9RngbM=
......@@ -5684,7 +5575,7 @@ is-wsl@^2.1.1:
dependencies:
is-docker "^2.0.0"
isarray@^1.0.0, isarray@~1.0.0, isarray@1.0.0:
isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
version "1.0.0"
resolved "https://registry.nlark.com/isarray/download/isarray-1.0.0.tgz"
integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
......@@ -5699,14 +5590,7 @@ isexe@^2.0.0:
resolved "https://registry.nlark.com/isexe/download/isexe-2.0.0.tgz"
integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
isobject@^2.0.0:
version "2.1.0"
resolved "https://registry.nlark.com/isobject/download/isobject-2.1.0.tgz"
integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=
dependencies:
isarray "1.0.0"
isobject@^2.1.0:
isobject@^2.0.0, isobject@^2.1.0:
version "2.1.0"
resolved "https://registry.nlark.com/isobject/download/isobject-2.1.0.tgz"
integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=
......@@ -5913,22 +5797,12 @@ kind-of@^4.0.0:
dependencies:
is-buffer "^1.1.5"
kind-of@^5.0.0:
version "5.1.0"
resolved "https://registry.nlark.com/kind-of/download/kind-of-5.1.0.tgz"
integrity sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=
kind-of@^5.0.2:
kind-of@^5.0.0, kind-of@^5.0.2:
version "5.1.0"
resolved "https://registry.nlark.com/kind-of/download/kind-of-5.1.0.tgz"
integrity sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=
kind-of@^6.0.0:
version "6.0.3"
resolved "https://registry.npmmirror.com/kind-of/-/kind-of-6.0.3.tgz"
integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
kind-of@^6.0.2:
kind-of@^6.0.0, kind-of@^6.0.2:
version "6.0.3"
resolved "https://registry.nlark.com/kind-of/download/kind-of-6.0.3.tgz"
integrity sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=
......@@ -5957,7 +5831,7 @@ less-loader@^4.1.0:
loader-utils "^1.1.0"
pify "^3.0.0"
"less@^2.3.1 || ^3.0.0", less@^3.0.4:
less@^3.0.4:
version "3.13.1"
resolved "https://registry.nlark.com/less/download/less-3.13.1.tgz"
integrity sha1-DryR0qDpwMZzW4PUlrCrBYMHeQk=
......@@ -6112,16 +5986,16 @@ lodash.uniq@^4.5.0:
resolved "https://registry.nlark.com/lodash.uniq/download/lodash.uniq-4.5.0.tgz"
integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=
lodash@^4.0.0, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.3:
version "4.17.21"
resolved "https://registry.nlark.com/lodash/download/lodash-4.17.21.tgz?cache=0&sync_timestamp=1618910518249&other_urls=https%3A%2F%2Fregistry.nlark.com%2Flodash%2Fdownload%2Flodash-4.17.21.tgz"
integrity sha1-Z5WRxWTDv/quhFTPCz3zcMPWkRw=
lodash@4.17.11:
version "4.17.11"
resolved "https://registry.npm.taobao.org/lodash/download/lodash-4.17.11.tgz"
integrity sha1-s56mIp72B+zYniyN8SU2iRysm40=
lodash@^4.0.0, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.3:
version "4.17.21"
resolved "https://registry.nlark.com/lodash/download/lodash-4.17.21.tgz?cache=0&sync_timestamp=1618910518249&other_urls=https%3A%2F%2Fregistry.nlark.com%2Flodash%2Fdownload%2Flodash-4.17.21.tgz"
integrity sha1-Z5WRxWTDv/quhFTPCz3zcMPWkRw=
log-symbols@^2.2.0:
version "2.2.0"
resolved "https://registry.nlark.com/log-symbols/download/log-symbols-2.2.0.tgz"
......@@ -6185,16 +6059,9 @@ make-dir@^2.0.0, make-dir@^2.1.0:
integrity sha1-XwMQ4YuL6JjMBwCSlaMK5B6R5vU=
dependencies:
pify "^4.0.1"
semver "^5.6.0"
make-dir@^3.0.2:
version "3.1.0"
resolved "https://registry.nlark.com/make-dir/download/make-dir-3.1.0.tgz"
integrity sha1-QV6WcEazp/HRhSd9hKpYIDcmoT8=
dependencies:
semver "^6.0.0"
semver "^5.6.0"
make-dir@^3.1.0:
make-dir@^3.0.2, make-dir@^3.1.0:
version "3.1.0"
resolved "https://registry.nlark.com/make-dir/download/make-dir-3.1.0.tgz"
integrity sha1-QV6WcEazp/HRhSd9hKpYIDcmoT8=
......@@ -6305,6 +6172,25 @@ microcli@1.3.3:
lodash "4.17.11"
microargs "1.1.2"
micromatch@3.1.0:
version "3.1.0"
resolved "https://registry.npm.taobao.org/micromatch/download/micromatch-3.1.0.tgz?cache=0&sync_timestamp=1618054841521&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmicromatch%2Fdownload%2Fmicromatch-3.1.0.tgz"
integrity sha1-UQLU6vILaZfWAI46z+HESj+oFeI=
dependencies:
arr-diff "^4.0.0"
array-unique "^0.3.2"
braces "^2.2.2"
define-property "^1.0.0"
extend-shallow "^2.0.1"
extglob "^2.0.2"
fragment-cache "^0.2.1"
kind-of "^5.0.2"
nanomatch "^1.2.1"
object.pick "^1.3.0"
regex-not "^1.0.0"
snapdragon "^0.8.1"
to-regex "^3.0.1"
micromatch@^3.1.10, micromatch@^3.1.4:
version "3.1.10"
resolved "https://registry.nlark.com/micromatch/download/micromatch-3.1.10.tgz?cache=0&sync_timestamp=1618910283285&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fmicromatch%2Fdownload%2Fmicromatch-3.1.10.tgz"
......@@ -6332,25 +6218,6 @@ micromatch@^4.0.2:
braces "^3.0.1"
picomatch "^2.2.3"
micromatch@3.1.0:
version "3.1.0"
resolved "https://registry.npm.taobao.org/micromatch/download/micromatch-3.1.0.tgz?cache=0&sync_timestamp=1618054841521&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmicromatch%2Fdownload%2Fmicromatch-3.1.0.tgz"
integrity sha1-UQLU6vILaZfWAI46z+HESj+oFeI=
dependencies:
arr-diff "^4.0.0"
array-unique "^0.3.2"
braces "^2.2.2"
define-property "^1.0.0"
extend-shallow "^2.0.1"
extglob "^2.0.2"
fragment-cache "^0.2.1"
kind-of "^5.0.2"
nanomatch "^1.2.1"
object.pick "^1.3.0"
regex-not "^1.0.0"
snapdragon "^0.8.1"
to-regex "^3.0.1"
miller-rabin@^4.0.0:
version "4.0.1"
resolved "https://registry.nlark.com/miller-rabin/download/miller-rabin-4.0.1.tgz"
......@@ -6359,7 +6226,7 @@ miller-rabin@^4.0.0:
bn.js "^4.0.0"
brorand "^1.0.1"
"mime-db@>= 1.43.0 < 2", mime-db@1.49.0:
mime-db@1.49.0, "mime-db@>= 1.43.0 < 2":
version "1.49.0"
resolved "https://registry.nlark.com/mime-db/download/mime-db-1.49.0.tgz"
integrity sha1-89/eYMmenPO8lwHWh3ePU3ABy+0=
......@@ -6371,7 +6238,7 @@ mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24:
dependencies:
mime-db "1.49.0"
mime@^1.4.1, mime@1.6.0:
mime@1.6.0, mime@^1.4.1:
version "1.6.0"
resolved "https://registry.nlark.com/mime/download/mime-1.6.0.tgz"
integrity sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE=
......@@ -6512,11 +6379,6 @@ move-concurrently@^1.0.1:
rimraf "^2.5.4"
run-queue "^1.0.3"
ms@^2.1.1:
version "2.1.3"
resolved "https://registry.nlark.com/ms/download/ms-2.1.3.tgz"
integrity sha1-V0yBOM4dK1hh8LRFedut1gxmFbI=
ms@2.0.0:
version "2.0.0"
resolved "https://registry.nlark.com/ms/download/ms-2.0.0.tgz"
......@@ -6532,6 +6394,11 @@ ms@2.1.2:
resolved "https://registry.nlark.com/ms/download/ms-2.1.2.tgz"
integrity sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=
ms@^2.1.1:
version "2.1.3"
resolved "https://registry.nlark.com/ms/download/ms-2.1.3.tgz"
integrity sha1-V0yBOM4dK1hh8LRFedut1gxmFbI=
multicast-dns-service-types@^1.1.0:
version "1.1.0"
resolved "https://registry.nlark.com/multicast-dns-service-types/download/multicast-dns-service-types-1.1.0.tgz"
......@@ -6559,6 +6426,11 @@ mz@^2.4.0:
object-assign "^4.0.1"
thenify-all "^1.0.0"
nan@^2.12.1:
version "2.17.0"
resolved "https://registry.npmmirror.com/nan/-/nan-2.17.0.tgz#c0150a2368a182f033e9aa5195ec76ea41a199cb"
integrity sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==
nanoid@^3.1.23:
version "3.1.23"
resolved "https://registry.nlark.com/nanoid/download/nanoid-3.1.23.tgz"
......@@ -6700,11 +6572,6 @@ normalize-range@^0.1.2:
resolved "https://registry.nlark.com/normalize-range/download/normalize-range-0.1.2.tgz"
integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=
normalize-url@^3.0.0:
version "3.3.0"
resolved "https://registry.nlark.com/normalize-url/download/normalize-url-3.3.0.tgz?cache=0&sync_timestamp=1625826704090&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fnormalize-url%2Fdownload%2Fnormalize-url-3.3.0.tgz"
integrity sha1-suHE3E98bVd0PfczpPWXjRhlBVk=
normalize-url@1.9.1:
version "1.9.1"
resolved "https://registry.nlark.com/normalize-url/download/normalize-url-1.9.1.tgz?cache=0&sync_timestamp=1625826704090&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fnormalize-url%2Fdownload%2Fnormalize-url-1.9.1.tgz"
......@@ -6715,6 +6582,11 @@ normalize-url@1.9.1:
query-string "^4.1.0"
sort-keys "^1.0.0"
normalize-url@^3.0.0:
version "3.3.0"
resolved "https://registry.nlark.com/normalize-url/download/normalize-url-3.3.0.tgz?cache=0&sync_timestamp=1625826704090&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fnormalize-url%2Fdownload%2Fnormalize-url-3.3.0.tgz"
integrity sha1-suHE3E98bVd0PfczpPWXjRhlBVk=
normalize-wheel@^1.0.1:
version "1.0.1"
resolved "https://registry.nlark.com/normalize-wheel/download/normalize-wheel-1.0.1.tgz"
......@@ -7143,12 +7015,7 @@ path-key@^2.0.0, path-key@^2.0.1:
resolved "https://registry.nlark.com/path-key/download/path-key-2.0.1.tgz"
integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
path-key@^3.0.0:
version "3.1.1"
resolved "https://registry.nlark.com/path-key/download/path-key-3.1.1.tgz"
integrity sha1-WB9q3mWMu6ZaDTOA3ndTKVBU83U=
path-key@^3.1.0:
path-key@^3.0.0, path-key@^3.1.0:
version "3.1.1"
resolved "https://registry.nlark.com/path-key/download/path-key-3.1.1.tgz"
integrity sha1-WB9q3mWMu6ZaDTOA3ndTKVBU83U=
......@@ -7603,12 +7470,7 @@ postcss-value-parser@^3.0.0:
resolved "https://registry.nlark.com/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz"
integrity sha1-n/giVH4okyE88cMO+lGsX9G6goE=
postcss-value-parser@^4.0.2:
version "4.1.0"
resolved "https://registry.nlark.com/postcss-value-parser/download/postcss-value-parser-4.1.0.tgz"
integrity sha1-RD9qIM7WSBor2k+oUypuVdeJoss=
postcss-value-parser@^4.1.0:
postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0:
version "4.1.0"
resolved "https://registry.nlark.com/postcss-value-parser/download/postcss-value-parser-4.1.0.tgz"
integrity sha1-RD9qIM7WSBor2k+oUypuVdeJoss=
......@@ -7792,6 +7654,11 @@ pumpify@^1.3.3:
inherits "^2.0.3"
pump "^2.0.0"
punycode@1.3.2:
version "1.3.2"
resolved "https://registry.nlark.com/punycode/download/punycode-1.3.2.tgz"
integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=
punycode@^1.2.4:
version "1.4.1"
resolved "https://registry.nlark.com/punycode/download/punycode-1.4.1.tgz"
......@@ -7802,11 +7669,6 @@ punycode@^2.1.0, punycode@^2.1.1:
resolved "https://registry.nlark.com/punycode/download/punycode-2.1.1.tgz"
integrity sha1-tYsBCsQMIsVldhbI0sLALHv0eew=
punycode@1.3.2:
version "1.3.2"
resolved "https://registry.nlark.com/punycode/download/punycode-1.3.2.tgz"
integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=
q@^1.1.2:
version "1.5.1"
resolved "https://registry.nlark.com/q/download/q-1.5.1.tgz"
......@@ -7825,16 +7687,16 @@ qrcode@^1.4.4:
pngjs "^3.3.0"
yargs "^13.2.4"
qs@~6.5.2:
version "6.5.2"
resolved "https://registry.nlark.com/qs/download/qs-6.5.2.tgz"
integrity sha1-yzroBuh0BERYTvFUzo7pjUA/PjY=
qs@6.7.0:
version "6.7.0"
resolved "https://registry.nlark.com/qs/download/qs-6.7.0.tgz"
integrity sha1-QdwaAV49WB8WIXdr4xr7KHapsbw=
qs@~6.5.2:
version "6.5.2"
resolved "https://registry.nlark.com/qs/download/qs-6.5.2.tgz"
integrity sha1-yzroBuh0BERYTvFUzo7pjUA/PjY=
query-string@^4.1.0, query-string@^4.3.2:
version "4.3.4"
resolved "https://registry.nlark.com/query-string/download/query-string-4.3.4.tgz?cache=0&sync_timestamp=1624297110017&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fquery-string%2Fdownload%2Fquery-string-4.3.4.tgz"
......@@ -7924,7 +7786,7 @@ read-pkg@^5.1.1:
parse-json "^5.0.0"
type-fest "^0.6.0"
readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6, "readable-stream@1 || 2":
"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6:
version "2.3.7"
resolved "https://registry.nlark.com/readable-stream/download/readable-stream-2.3.7.tgz"
integrity sha1-Hsoc9xGu+BTAT2IlKjamL2yyO1c=
......@@ -7937,25 +7799,7 @@ readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable
string_decoder "~1.1.1"
util-deprecate "~1.0.1"
readable-stream@^3.0.6:
version "3.6.0"
resolved "https://registry.nlark.com/readable-stream/download/readable-stream-3.6.0.tgz"
integrity sha1-M3u9o63AcGvT4CRCaihtS0sskZg=
dependencies:
inherits "^2.0.3"
string_decoder "^1.1.1"
util-deprecate "^1.0.1"
readable-stream@^3.1.1:
version "3.6.0"
resolved "https://registry.nlark.com/readable-stream/download/readable-stream-3.6.0.tgz"
integrity sha1-M3u9o63AcGvT4CRCaihtS0sskZg=
dependencies:
inherits "^2.0.3"
string_decoder "^1.1.1"
util-deprecate "^1.0.1"
readable-stream@^3.6.0:
readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.6.0:
version "3.6.0"
resolved "https://registry.nlark.com/readable-stream/download/readable-stream-3.6.0.tgz"
integrity sha1-M3u9o63AcGvT4CRCaihtS0sskZg=
......@@ -8248,20 +8092,15 @@ rxjs@^6.6.0, rxjs@^6.6.7:
dependencies:
tslib "^1.9.0"
safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@>=5.1.0, safe-buffer@~5.2.0:
version "5.2.1"
resolved "https://registry.nlark.com/safe-buffer/download/safe-buffer-5.2.1.tgz"
integrity sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY=
safe-buffer@~5.1.0, safe-buffer@~5.1.1:
safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
version "5.1.2"
resolved "https://registry.nlark.com/safe-buffer/download/safe-buffer-5.1.2.tgz"
integrity sha1-mR7GnSluAxN0fVm9/St0XDX4go0=
safe-buffer@5.1.2:
version "5.1.2"
resolved "https://registry.nlark.com/safe-buffer/download/safe-buffer-5.1.2.tgz"
integrity sha1-mR7GnSluAxN0fVm9/St0XDX4go0=
safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0:
version "5.2.1"
resolved "https://registry.nlark.com/safe-buffer/download/safe-buffer-5.2.1.tgz"
integrity sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY=
safe-regex@^1.1.0:
version "1.1.0"
......@@ -8270,7 +8109,7 @@ safe-regex@^1.1.0:
dependencies:
ret "~0.1.10"
safer-buffer@^2.0.2, safer-buffer@^2.1.0, "safer-buffer@>= 2.1.2 < 3", safer-buffer@~2.1.0:
"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
version "2.1.2"
resolved "https://registry.nlark.com/safer-buffer/download/safer-buffer-2.1.2.tgz"
integrity sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=
......@@ -8308,43 +8147,7 @@ schema-utils@^1.0.0:
ajv-errors "^1.0.0"
ajv-keywords "^3.1.0"
schema-utils@^2.0.0:
version "2.7.1"
resolved "https://registry.nlark.com/schema-utils/download/schema-utils-2.7.1.tgz"
integrity sha1-HKTzLRskxZDCA7jnpQvw6kzTlNc=
dependencies:
"@types/json-schema" "^7.0.5"
ajv "^6.12.4"
ajv-keywords "^3.5.2"
schema-utils@^2.5.0:
version "2.7.1"
resolved "https://registry.nlark.com/schema-utils/download/schema-utils-2.7.1.tgz"
integrity sha1-HKTzLRskxZDCA7jnpQvw6kzTlNc=
dependencies:
"@types/json-schema" "^7.0.5"
ajv "^6.12.4"
ajv-keywords "^3.5.2"
schema-utils@^2.6.5:
version "2.7.1"
resolved "https://registry.nlark.com/schema-utils/download/schema-utils-2.7.1.tgz"
integrity sha1-HKTzLRskxZDCA7jnpQvw6kzTlNc=
dependencies:
"@types/json-schema" "^7.0.5"
ajv "^6.12.4"
ajv-keywords "^3.5.2"
schema-utils@^2.6.6:
version "2.7.1"
resolved "https://registry.nlark.com/schema-utils/download/schema-utils-2.7.1.tgz"
integrity sha1-HKTzLRskxZDCA7jnpQvw6kzTlNc=
dependencies:
"@types/json-schema" "^7.0.5"
ajv "^6.12.4"
ajv-keywords "^3.5.2"
schema-utils@^2.7.0:
schema-utils@^2.0.0, schema-utils@^2.5.0, schema-utils@^2.6.5, schema-utils@^2.6.6, schema-utils@^2.7.0:
version "2.7.1"
resolved "https://registry.nlark.com/schema-utils/download/schema-utils-2.7.1.tgz"
integrity sha1-HKTzLRskxZDCA7jnpQvw6kzTlNc=
......@@ -8394,45 +8197,28 @@ semver-compare@^1.0.0:
resolved "https://registry.nlark.com/semver-compare/download/semver-compare-1.0.0.tgz"
integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w=
semver@^5.5.0:
"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0:
version "5.7.1"
resolved "https://registry.nlark.com/semver/download/semver-5.7.1.tgz"
integrity sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=
semver@^5.6.0:
version "5.7.1"
resolved "https://registry.nlark.com/semver/download/semver-5.7.1.tgz"
integrity sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=
semver@7.0.0:
version "7.0.0"
resolved "https://registry.nlark.com/semver/download/semver-7.0.0.tgz"
integrity sha1-XzyjV2HkfgWyBsba/yz4FPAxa44=
semver@^6.0.0, semver@^6.1.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0:
version "6.3.0"
resolved "https://registry.nlark.com/semver/download/semver-6.3.0.tgz"
integrity sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=
semver@^7.2.1:
version "7.3.5"
resolved "https://registry.nlark.com/semver/download/semver-7.3.5.tgz?cache=0&sync_timestamp=1618910479221&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsemver%2Fdownload%2Fsemver-7.3.5.tgz"
integrity sha1-C2Ich5NI2JmOSw5L6Us/EuYBjvc=
dependencies:
lru-cache "^6.0.0"
semver@^7.3.2:
semver@^7.2.1, semver@^7.3.2:
version "7.3.5"
resolved "https://registry.nlark.com/semver/download/semver-7.3.5.tgz?cache=0&sync_timestamp=1618910479221&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsemver%2Fdownload%2Fsemver-7.3.5.tgz"
integrity sha1-C2Ich5NI2JmOSw5L6Us/EuYBjvc=
dependencies:
lru-cache "^6.0.0"
"semver@2 || 3 || 4 || 5":
version "5.7.1"
resolved "https://registry.nlark.com/semver/download/semver-5.7.1.tgz"
integrity sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=
semver@7.0.0:
version "7.0.0"
resolved "https://registry.nlark.com/semver/download/semver-7.0.0.tgz"
integrity sha1-XzyjV2HkfgWyBsba/yz4FPAxa44=
send@0.17.1:
version "0.17.1"
resolved "https://registry.nlark.com/send/download/send-0.17.1.tgz"
......@@ -8713,12 +8499,7 @@ source-map-url@^0.4.0:
resolved "https://registry.nlark.com/source-map-url/download/source-map-url-0.4.1.tgz"
integrity sha1-CvZmBadFpaL5HPG7+KevvCg97FY=
source-map@^0.5.0:
version "0.5.7"
resolved "https://registry.nlark.com/source-map/download/source-map-0.5.7.tgz"
integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
source-map@^0.5.6:
source-map@^0.5.0, source-map@^0.5.6:
version "0.5.7"
resolved "https://registry.nlark.com/source-map/download/source-map-0.5.7.tgz"
integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
......@@ -8891,20 +8672,6 @@ strict-uri-encode@^1.0.0:
resolved "https://registry.nlark.com/strict-uri-encode/download/strict-uri-encode-1.1.0.tgz"
integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=
string_decoder@^1.0.0, string_decoder@^1.1.1:
version "1.3.0"
resolved "https://registry.nlark.com/string_decoder/download/string_decoder-1.3.0.tgz"
integrity sha1-QvEUWUpGzxqOMLCoT1bHjD7awh4=
dependencies:
safe-buffer "~5.2.0"
string_decoder@~1.1.1:
version "1.1.1"
resolved "https://registry.nlark.com/string_decoder/download/string_decoder-1.1.1.tgz"
integrity sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=
dependencies:
safe-buffer "~5.1.0"
string-argv@0.3.1:
version "0.3.1"
resolved "https://registry.npm.taobao.org/string-argv/download/string-argv-0.3.1.tgz"
......@@ -8952,6 +8719,20 @@ string.prototype.trimstart@^1.0.4:
call-bind "^1.0.2"
define-properties "^1.1.3"
string_decoder@^1.0.0, string_decoder@^1.1.1:
version "1.3.0"
resolved "https://registry.nlark.com/string_decoder/download/string_decoder-1.3.0.tgz"
integrity sha1-QvEUWUpGzxqOMLCoT1bHjD7awh4=
dependencies:
safe-buffer "~5.2.0"
string_decoder@~1.1.1:
version "1.1.1"
resolved "https://registry.nlark.com/string_decoder/download/string_decoder-1.1.1.tgz"
integrity sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=
dependencies:
safe-buffer "~5.1.0"
stringify-object@^3.3.0:
version "3.3.0"
resolved "https://registry.npm.taobao.org/stringify-object/download/stringify-object-3.3.0.tgz"
......@@ -8961,14 +8742,7 @@ stringify-object@^3.3.0:
is-obj "^1.0.1"
is-regexp "^1.0.0"
strip-ansi@^3.0.0:
version "3.0.1"
resolved "https://registry.nlark.com/strip-ansi/download/strip-ansi-3.0.1.tgz?cache=0&sync_timestamp=1618910488314&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-3.0.1.tgz"
integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
dependencies:
ansi-regex "^2.0.0"
strip-ansi@^3.0.1:
strip-ansi@^3.0.0, strip-ansi@^3.0.1:
version "3.0.1"
resolved "https://registry.nlark.com/strip-ansi/download/strip-ansi-3.0.1.tgz?cache=0&sync_timestamp=1618910488314&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-3.0.1.tgz"
integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
......@@ -8982,14 +8756,7 @@ strip-ansi@^4.0.0:
dependencies:
ansi-regex "^3.0.0"
strip-ansi@^5:
version "5.2.0"
resolved "https://registry.nlark.com/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1618910488314&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz"
integrity sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=
dependencies:
ansi-regex "^4.1.0"
strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0:
strip-ansi@^5, strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0:
version "5.2.0"
resolved "https://registry.nlark.com/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1618910488314&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz"
integrity sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=
......@@ -9226,11 +8993,6 @@ throttle-debounce@^1.0.1:
resolved "https://registry.nlark.com/throttle-debounce/download/throttle-debounce-1.1.0.tgz"
integrity sha1-UYU9o3vmihVctugns1FKPEIuic0=
through@^2.3.6, through@^2.3.8:
version "2.3.8"
resolved "https://registry.nlark.com/through/download/through-2.3.8.tgz"
integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
through2@^2.0.0:
version "2.0.5"
resolved "https://registry.nlark.com/through2/download/through2-2.0.5.tgz"
......@@ -9239,6 +9001,11 @@ through2@^2.0.0:
readable-stream "~2.3.6"
xtend "~4.0.1"
through@^2.3.6, through@^2.3.8:
version "2.3.8"
resolved "https://registry.nlark.com/through/download/through-2.3.8.tgz"
integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
thunky@^1.0.2:
version "1.1.0"
resolved "https://registry.nlark.com/thunky/download/thunky-1.1.0.tgz"
......@@ -9490,7 +9257,7 @@ universalify@^0.1.0:
resolved "https://registry.nlark.com/universalify/download/universalify-0.1.2.tgz"
integrity sha1-tkb2m+OULavOzJ1mOcgNwQXvqmY=
unpipe@~1.0.0, unpipe@1.0.0:
unpipe@1.0.0, unpipe@~1.0.0:
version "1.0.0"
resolved "https://registry.nlark.com/unpipe/download/unpipe-1.0.0.tgz"
integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=
......@@ -9579,6 +9346,14 @@ util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1:
resolved "https://registry.nlark.com/util-deprecate/download/util-deprecate-1.0.2.tgz"
integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
util.promisify@1.0.0:
version "1.0.0"
resolved "https://registry.nlark.com/util.promisify/download/util.promisify-1.0.0.tgz"
integrity sha1-RA9xZaRZyaFtwUXrjnLzVocJcDA=
dependencies:
define-properties "^1.1.2"
object.getownpropertydescriptors "^2.0.3"
util.promisify@~1.0.0:
version "1.0.1"
resolved "https://registry.nlark.com/util.promisify/download/util.promisify-1.0.1.tgz"
......@@ -9589,13 +9364,12 @@ util.promisify@~1.0.0:
has-symbols "^1.0.1"
object.getownpropertydescriptors "^2.1.0"
util.promisify@1.0.0:
version "1.0.0"
resolved "https://registry.nlark.com/util.promisify/download/util.promisify-1.0.0.tgz"
integrity sha1-RA9xZaRZyaFtwUXrjnLzVocJcDA=
util@0.10.3:
version "0.10.3"
resolved "https://registry.nlark.com/util/download/util-0.10.3.tgz"
integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk=
dependencies:
define-properties "^1.1.2"
object.getownpropertydescriptors "^2.0.3"
inherits "2.0.1"
util@^0.11.0:
version "0.11.1"
......@@ -9604,13 +9378,6 @@ util@^0.11.0:
dependencies:
inherits "2.0.3"
util@0.10.3:
version "0.10.3"
resolved "https://registry.nlark.com/util/download/util-0.10.3.tgz"
integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk=
dependencies:
inherits "2.0.1"
utila@~0.4:
version "0.4.0"
resolved "https://registry.nlark.com/utila/download/utila-0.4.0.tgz"
......@@ -9752,7 +9519,7 @@ vue-style-loader@^4.1.0, vue-style-loader@^4.1.2:
hash-sum "^1.0.2"
loader-utils "^1.0.2"
vue-template-compiler@^2.0.0, vue-template-compiler@^2.6.14:
vue-template-compiler@^2.6.14:
version "2.6.14"
resolved "https://registry.npmmirror.com/vue-template-compiler/-/vue-template-compiler-2.6.14.tgz"
integrity sha512-ODQS1SyMbjKoO1JBJZojSw6FE4qnh9rIpUZn2EUT86FKizx9uH5z6uXiIrm4/Nb/gwxTi/o17ZDEGWAXHvtC7g==
......@@ -9765,16 +9532,16 @@ vue-template-es2015-compiler@^1.9.0:
resolved "https://registry.nlark.com/vue-template-es2015-compiler/download/vue-template-es2015-compiler-1.9.1.tgz"
integrity sha1-HuO8mhbsv1EYvjNLsV+cRvgvWCU=
vue@*, "vue@^2 || ^3.0.0-0", vue@^2.0.0, vue@^2.2.0, vue@^2.5.17, vue@^2.5.4, vue@^2.6.0, vue@^2.6.14, vue@>2.0.0:
version "2.6.14"
resolved "https://registry.nlark.com/vue/download/vue-2.6.14.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fvue%2Fdownload%2Fvue-2.6.14.tgz"
integrity sha1-5RqlJQJQ1Wmj+606ilpofWA24jU=
vue2-org-tree@^1.3.5:
version "1.3.5"
resolved "https://registry.npm.taobao.org/vue2-org-tree/download/vue2-org-tree-1.3.5.tgz"
integrity sha1-RGpSjCMTo5tTIKEbMIORbbi13GI=
vue@^2.6.14:
version "2.6.14"
resolved "https://registry.nlark.com/vue/download/vue-2.6.14.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fvue%2Fdownload%2Fvue-2.6.14.tgz"
integrity sha1-5RqlJQJQ1Wmj+606ilpofWA24jU=
vuex@3.6.0:
version "3.6.0"
resolved "https://registry.nlark.com/vuex/download/vuex-3.6.0.tgz"
......@@ -9926,7 +9693,7 @@ webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-
source-list-map "^2.0.0"
source-map "~0.6.1"
"webpack@^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.0", "webpack@^2.0.0 || ^3.0.0 || ^4.0.0", "webpack@^3.0.0 || ^4.0.0", "webpack@^3.0.0 || ^4.1.0 || ^5.0.0-0", webpack@^4.0.0, "webpack@^4.0.0 || ^5.0.0", webpack@^4.4.0, webpack@>=2, "webpack@>=2.0.0 <5.0.0", webpack@>=4.0.0:
webpack@^4.0.0:
version "4.46.0"
resolved "https://registry.nlark.com/webpack/download/webpack-4.46.0.tgz?cache=0&sync_timestamp=1627568684063&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fwebpack%2Fdownload%2Fwebpack-4.46.0.tgz"
integrity sha1-v5tEBOogoHNgXgoBHRiNd8tq1UI=
......@@ -9955,7 +9722,7 @@ webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-
watchpack "^1.7.4"
webpack-sources "^1.4.1"
websocket-driver@^0.7.4, websocket-driver@>=0.5.1:
websocket-driver@>=0.5.1, websocket-driver@^0.7.4:
version "0.7.4"
resolved "https://registry.nlark.com/websocket-driver/download/websocket-driver-0.7.4.tgz"
integrity sha1-ia1Slbv2S0gKvLox5JU6ynBvV2A=
......@@ -10162,7 +9929,7 @@ yorkie@^2.0.0:
normalize-path "^1.0.0"
strip-indent "^2.0.0"
zrender@^4.3.1, zrender@4.3.2:
zrender@4.3.2:
version "4.3.2"
resolved "https://registry.nlark.com/zrender/download/zrender-4.3.2.tgz"
integrity sha1-7HQy+UFcgsc1hLa3uMR+GwFiCcY=
......@@ -68,6 +68,7 @@
<profiles.hik.appSecret>2m9RcPJOKq5j2QPQM4v5</profiles.hik.appSecret>
<profiles.dingtalk.domain>https://oapi.dingtalk.com</profiles.dingtalk.domain>
<profiles.dingtalk.oaUrl>api.dingtalk.com</profiles.dingtalk.oaUrl>
<profiles.dingtalk.agentId>2652674890</profiles.dingtalk.agentId>
<profiles.dingtalk.appKey>dingpqzradgfr4efdi2j</profiles.dingtalk.appKey>
<profiles.dingtalk.appSecret>bF2WALmo5_Wuj3hg5gXeWqezrYnZChUJ88HjzNWpkA9ivdOxfBDGOGYcfVRfB3vd</profiles.dingtalk.appSecret>
......@@ -98,6 +99,7 @@
<profiles.hik.appSecret>2m9RcPJOKq5j2QPQM4v5</profiles.hik.appSecret>
<profiles.dingtalk.domain>http://172.15.28.113:8918</profiles.dingtalk.domain>
<profiles.dingtalk.oaUrl>172.15.28.113:8919</profiles.dingtalk.oaUrl>
<profiles.dingtalk.agentId>2652674890</profiles.dingtalk.agentId>
<profiles.dingtalk.appKey>dingpqzradgfr4efdi2j</profiles.dingtalk.appKey>
<profiles.dingtalk.appSecret>bF2WALmo5_Wuj3hg5gXeWqezrYnZChUJ88HjzNWpkA9ivdOxfBDGOGYcfVRfB3vd</profiles.dingtalk.appSecret>
......
......@@ -158,11 +158,12 @@ public class LoginController extends BaseCRUDJsonBodyMappingController<UserServi
homeStatInfo.setTotalDeptNum(totalDeptNum);
//todo
homeStatInfo.setAttendRadio(new BigDecimal(91.00));
homeStatInfo.setAttendRadio(new BigDecimal(98.00));
homeStatInfo.setLevealPersonNum(6);
homeStatInfo.setLatePersonNum(2);
homeStatInfo.setLeftEarlyPersonNum(1);
homeStatInfo.setMissCardPersonNum(0);
homeStatInfo.setMissCardPersonNum(23);
homeStatInfo.setAttendPersonNum(426);
data.put("homeStat", homeStatInfo);
data.put("token", token);
......
......@@ -19,8 +19,6 @@ public abstract class BaseReq implements Serializable {
*/
private Integer size;
/**
* 工号
*/
......
......@@ -16,7 +16,9 @@ import com.mortals.xhx.base.system.user.model.UserEntity;
import com.mortals.xhx.base.system.user.model.UserQuery;
import com.mortals.xhx.base.system.user.service.UserService;
import com.mortals.xhx.module.dept.model.DeptEntity;
import com.mortals.xhx.module.dept.model.DeptPerformStatEntity;
import com.mortals.xhx.module.dept.model.DeptQuery;
import com.mortals.xhx.module.dept.service.DeptPerformStatService;
import com.mortals.xhx.module.dept.service.DeptService;
import com.mortals.xhx.module.hik.face.model.req.img.ImgReq;
import com.mortals.xhx.module.hik.face.service.IHikFaceService;
......@@ -26,10 +28,8 @@ import com.mortals.xhx.module.perform.model.PerformPerposeStaffStatEntity;
import com.mortals.xhx.module.perform.service.PerformPerposeDeptStatService;
import com.mortals.xhx.module.perform.service.PerformPerposeStaffService;
import com.mortals.xhx.module.perform.service.PerformPerposeStaffStatService;
import com.mortals.xhx.module.staff.model.StaffEntity;
import com.mortals.xhx.module.staff.model.StaffPerformSummaryEntity;
import com.mortals.xhx.module.staff.model.StaffPerformSummaryQuery;
import com.mortals.xhx.module.staff.model.StaffQuery;
import com.mortals.xhx.module.staff.model.*;
import com.mortals.xhx.module.staff.service.StaffPerformStatService;
import com.mortals.xhx.module.staff.service.StaffPerformSummaryService;
import com.mortals.xhx.module.staff.service.StaffService;
import com.mortals.xhx.module.workman.model.WorkmanEntity;
......@@ -80,7 +80,10 @@ public class MockDataController {
private PerformPerposeDeptStatService perposeDeptStatService;
@Autowired
private StaffPerformSummaryService summaryService;
@Autowired
private StaffPerformStatService staffPerformStatService;
@Autowired
private DeptPerformStatService deptPerformStatService;
/**
* 生成模拟数据
......@@ -196,15 +199,15 @@ public class MockDataController {
statEntity.setWorkNum(item.getWorkNum());
statEntity.setDeptId(item.getDeptId());
statEntity.setDeptName(item.getDeptName());
BigDecimal attendScore = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("1")).setScale(2, BigDecimal.ROUND_CEILING);
BigDecimal reviewScore = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("1")).setScale(2, BigDecimal.ROUND_CEILING);
BigDecimal complainScore = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("1")).setScale(2, BigDecimal.ROUND_CEILING);
BigDecimal goworkScore = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("1")).setScale(2, BigDecimal.ROUND_CEILING);
BigDecimal effectScore = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("1")).setScale(2, BigDecimal.ROUND_CEILING);
BigDecimal otherScore = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("1")).setScale(2, BigDecimal.ROUND_CEILING);
BigDecimal errorScore = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("1")).setScale(2, BigDecimal.ROUND_CEILING);
BigDecimal attendScore = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal(15)).setScale(1, BigDecimal.ROUND_CEILING);
BigDecimal reviewScore = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal(15)).setScale(1, BigDecimal.ROUND_CEILING);
BigDecimal complainScore = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal(15)).setScale(1, BigDecimal.ROUND_CEILING);
BigDecimal goworkScore = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal(15)).setScale(1, BigDecimal.ROUND_CEILING);
BigDecimal effectScore = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal(15)).setScale(1, BigDecimal.ROUND_CEILING);
BigDecimal otherScore = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal(15)).setScale(1, BigDecimal.ROUND_CEILING);
BigDecimal errorScore = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal(15)).setScale(1, BigDecimal.ROUND_CEILING);
BigDecimal totalScore =attendScore.add(reviewScore).add(complainScore).add(goworkScore).add(effectScore).add(otherScore).add(errorScore);
BigDecimal totalScore = attendScore.add(reviewScore).add(complainScore).add(goworkScore).add(effectScore).add(otherScore).add(errorScore);
statEntity.setAttendScore(attendScore);
statEntity.setReviewScore(reviewScore);
......@@ -228,6 +231,159 @@ public class MockDataController {
}
/**
* 生成模拟数据
* mortals_xhx_staff_perform_stat
*
* @return
*/
@GetMapping("randomStaffPerformStatData")
@UnAuth
public Rest<Void> randomStaffPerformStatData() {
List<StaffEntity> cacheList = staffService.getCacheList();
//最近两月模拟数据
DateTime beforeStartDate = DateUtil.offsetDay(new Date(), -60);
for (int i = 1; i <= 60; i++) {
DateTime curDate = DateUtil.offsetDay(beforeStartDate, i);
List<StaffPerformStatEntity> collect = cacheList.stream().map(item -> {
StaffPerformStatEntity statEntity = new StaffPerformStatEntity();
statEntity.initAttrValue();
statEntity.setStaffId(item.getId());
statEntity.setStaffName(item.getName());
BigDecimal attendScoreAdd = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("5")).setScale(1, BigDecimal.ROUND_CEILING);
BigDecimal reviewScoreAdd = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("5")).setScale(1, BigDecimal.ROUND_CEILING);
BigDecimal complainScoreAdd = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("5")).setScale(1, BigDecimal.ROUND_CEILING);
BigDecimal goworkScoreAdd = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("5")).setScale(1, BigDecimal.ROUND_CEILING);
BigDecimal effectScoreAdd = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("5")).setScale(1, BigDecimal.ROUND_CEILING);
BigDecimal otherScoreAdd = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("5")).setScale(1, BigDecimal.ROUND_CEILING);
BigDecimal attendScoreSub = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("5")).setScale(1, BigDecimal.ROUND_CEILING);
BigDecimal reviewScoreSub = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("5")).setScale(1, BigDecimal.ROUND_CEILING);
BigDecimal complainScoreSub = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("5")).setScale(1, BigDecimal.ROUND_CEILING);
BigDecimal goworkScoreSub = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("5")).setScale(1, BigDecimal.ROUND_CEILING);
BigDecimal effectScoreSub = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("5")).setScale(1, BigDecimal.ROUND_CEILING);
BigDecimal otherScoreSub = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("5")).setScale(1, BigDecimal.ROUND_CEILING);
statEntity.setAttendScoreAdd(attendScoreAdd);
statEntity.setAttendScoreSub(attendScoreSub);
statEntity.setReviewScoreAdd(reviewScoreAdd);
statEntity.setReviewScoreSub(reviewScoreSub);
statEntity.setComplainScoreAdd(complainScoreAdd);
statEntity.setComplainScoreSub(complainScoreSub);
statEntity.setGoworkScoreAdd(goworkScoreAdd);
statEntity.setGoworkScoreSub(goworkScoreSub);
statEntity.setEffectScoreAdd(effectScoreAdd);
statEntity.setEffectScoreSub(effectScoreSub);
statEntity.setOtherScoreAdd(otherScoreAdd);
statEntity.setOtherScoreSub(otherScoreSub);
BigDecimal totalScoreAdd = attendScoreAdd.add(reviewScoreAdd).add(complainScoreAdd)
.add(goworkScoreAdd).add(effectScoreAdd).add(otherScoreAdd);
BigDecimal totalScoreSub = attendScoreSub.add(reviewScoreSub).add(complainScoreSub)
.add(goworkScoreSub).add(effectScoreSub).add(otherScoreSub);
statEntity.setTotalAddScore(totalScoreAdd);
statEntity.setTotalSubScore(totalScoreSub);
BigDecimal subtract = statEntity.getTotalAddScore().subtract(statEntity.getTotalSubScore());
statEntity.setTotalScore(subtract.compareTo(BigDecimal.ZERO) > 0 ? subtract : BigDecimal.ZERO);
statEntity.setYear(DateUtil.year(curDate));
statEntity.setMonth(DateUtil.month(curDate) + 1);
statEntity.setDay(DateUtil.dayOfMonth(curDate));
return statEntity;
}).collect(Collectors.toList());
staffPerformStatService.save(collect);
}
return Rest.ok();
}
/**
* 生成模拟数据
* mortals_xhx_dept_perform_stat
*
* @return
*/
@GetMapping("randomDeptPerformStatData")
@UnAuth
public Rest<Void> randomDeptPerformStatData() {
List<DeptEntity> deptEntityList = deptService.find(new DeptQuery());
//最近两月模拟数据
DateTime beforeStartDate = DateUtil.offsetDay(new Date(), -60);
for (int i = 1; i <= 60; i++) {
DateTime curDate = DateUtil.offsetDay(beforeStartDate, i);
List<DeptPerformStatEntity> collect = deptEntityList.stream().map(item -> {
DeptPerformStatEntity statEntity = new DeptPerformStatEntity();
statEntity.initAttrValue();
statEntity.setDeptId(item.getId());
statEntity.setDeptName(item.getDeptName());
int personNum = staffService.count(new StaffQuery().deptId(item.getId()), null);
BigDecimal attendScoreAdd = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("5")).multiply(new BigDecimal(personNum)).setScale(1, BigDecimal.ROUND_CEILING);
BigDecimal reviewScoreAdd = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("5")).multiply(new BigDecimal(personNum)).setScale(1, BigDecimal.ROUND_CEILING);
BigDecimal complainScoreAdd = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("5")).multiply(new BigDecimal(personNum)).setScale(1, BigDecimal.ROUND_CEILING);
BigDecimal goworkScoreAdd = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("5")).multiply(new BigDecimal(personNum)).setScale(1, BigDecimal.ROUND_CEILING);
BigDecimal effectScoreAdd = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("5")).multiply(new BigDecimal(personNum)).setScale(1, BigDecimal.ROUND_CEILING);
BigDecimal otherScoreAdd = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("5")).multiply(new BigDecimal(personNum)).setScale(1, BigDecimal.ROUND_CEILING);
BigDecimal attendScoreSub = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("5")).multiply(new BigDecimal(personNum)).setScale(1, BigDecimal.ROUND_CEILING);
BigDecimal reviewScoreSub = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("5")).multiply(new BigDecimal(personNum)).setScale(1, BigDecimal.ROUND_CEILING);
BigDecimal complainScoreSub = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("5")).multiply(new BigDecimal(personNum)).setScale(1, BigDecimal.ROUND_CEILING);
BigDecimal goworkScoreSub = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("5")).multiply(new BigDecimal(personNum)).setScale(1, BigDecimal.ROUND_CEILING);
BigDecimal effectScoreSub = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("5")).multiply(new BigDecimal(personNum)).setScale(1, BigDecimal.ROUND_CEILING);
BigDecimal otherScoreSub = RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("5")).multiply(new BigDecimal(personNum)).setScale(1, BigDecimal.ROUND_CEILING);
statEntity.setAttendScoreAdd(attendScoreAdd);
statEntity.setAttendScoreSub(attendScoreSub);
statEntity.setReviewScoreAdd(reviewScoreAdd);
statEntity.setReviewScoreSub(reviewScoreSub);
statEntity.setComplainScoreAdd(complainScoreAdd);
statEntity.setComplainScoreSub(complainScoreSub);
statEntity.setGoworkScoreAdd(goworkScoreAdd);
statEntity.setGoworkScoreSub(goworkScoreSub);
statEntity.setEffectScoreAdd(effectScoreAdd);
statEntity.setEffectScoreSub(effectScoreSub);
statEntity.setOtherScoreAdd(otherScoreAdd);
statEntity.setOtherScoreSub(otherScoreSub);
BigDecimal totalScoreAdd = attendScoreAdd.add(reviewScoreAdd).add(complainScoreAdd)
.add(goworkScoreAdd).add(effectScoreAdd).add(otherScoreAdd);
BigDecimal totalScoreSub = attendScoreSub.add(reviewScoreSub).add(complainScoreSub)
.add(goworkScoreSub).add(effectScoreSub).add(otherScoreSub);
statEntity.setTotalAddScore(totalScoreAdd);
statEntity.setTotalSubScore(totalScoreSub);
BigDecimal subtract = statEntity.getTotalAddScore().subtract(statEntity.getTotalSubScore());
statEntity.setTotalScore(subtract.compareTo(BigDecimal.ZERO) > 0 ? subtract : BigDecimal.ZERO);
if (personNum > 0) {
BigDecimal aver = statEntity.getTotalScore().divide(new BigDecimal(personNum), 2, BigDecimal.ROUND_CEILING);
statEntity.setAverageScore(aver);
} else {
statEntity.setAverageScore(BigDecimal.ZERO);
}
statEntity.setYear(DateUtil.year(curDate));
statEntity.setMonth(DateUtil.month(curDate) + 1);
statEntity.setDay(DateUtil.dayOfMonth(curDate));
return statEntity;
}).collect(Collectors.toList());
deptPerformStatService.save(collect);
}
return Rest.ok();
}
public static void main(String[] args) {
System.out.println(RandomUtil.randomBigDecimal(BigDecimal.ZERO, new BigDecimal("1")).setScale(2, BigDecimal.ROUND_CEILING));
}
......
......@@ -3,18 +3,33 @@ package com.mortals.xhx.busiz;
import cn.hutool.core.codec.Base64;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.PageUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.mortals.framework.annotation.UnAuth;
import com.mortals.framework.common.Rest;
import com.mortals.framework.model.Context;
import com.mortals.framework.service.ICacheService;
import com.mortals.framework.util.DateUtils;
import com.mortals.framework.utils.ServletUtils;
import com.mortals.xhx.base.system.idgenerator.service.IdgeneratorService;
import com.mortals.xhx.base.system.upload.service.UploadService;
import com.mortals.xhx.base.system.user.model.UserEntity;
import com.mortals.xhx.base.system.user.model.UserQuery;
import com.mortals.xhx.base.system.user.service.UserService;
import com.mortals.xhx.busiz.h5.rsp.ApiResp;
import com.mortals.xhx.common.code.ApiRespCodeEnum;
import com.mortals.xhx.common.code.YesNoEnum;
import com.mortals.xhx.module.attendance.model.AttendanceRecordHikEntity;
import com.mortals.xhx.module.attendance.model.AttendanceRecordHikQuery;
import com.mortals.xhx.module.attendance.service.AttendanceRecordHikService;
import com.mortals.xhx.module.dept.model.DeptEntity;
import com.mortals.xhx.module.dept.model.DeptQuery;
import com.mortals.xhx.module.dept.service.DeptService;
import com.mortals.xhx.module.hik.door.model.req.door.DoorEventReq;
import com.mortals.xhx.module.hik.door.model.rsp.door.DoorEventDataInfo;
import com.mortals.xhx.module.hik.door.service.IHikDoorService;
import com.mortals.xhx.module.hik.face.model.req.img.ImgReq;
import com.mortals.xhx.module.hik.face.service.IHikFaceService;
import com.mortals.xhx.module.perform.service.PerformPerposeStaffService;
......@@ -25,17 +40,13 @@ import com.mortals.xhx.module.workman.model.WorkmanEntity;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
/**
......@@ -62,26 +73,234 @@ public class TestController {
private IHikFaceService faceService;
@Autowired
private UploadService uploadService;
@Autowired
private DeptService deptService;
@Autowired
private PerformPerposeStaffService performPerposeStaffService;
@Autowired
private AttendanceRecordHikService recordHikService;
@Autowired
private IHikDoorService hikDoorService;
/**
* 同步指定日期的海康数据
*
* @param req
* @return
*/
@PostMapping("hik")
public String register(@RequestBody TestReq req) {
log.info("【测试消息】【请求体】--> " + JSONObject.toJSONString(req));
DoorEventReq doorEventReq = new DoorEventReq();
List<Integer> eventTypes = new ArrayList<>();
eventTypes.add(196885);
eventTypes.add(196887);
eventTypes.add(196893);
eventTypes.add(196888);
eventTypes.add(196889);
eventTypes.add(196890);
eventTypes.add(196891);
doorEventReq.setEventTypes(eventTypes);
doorEventReq.setStartTime(req.getCreateTimeStart());
doorEventReq.setEndTime(req.getCreateTimeEnd());
doorEventReq.setPageNo(1);
doorEventReq.setPageSize(1);
Rest<DoorEventDataInfo> doorEventsRest = hikDoorService.getDoorEvents(doorEventReq);
log.info("doorEventsRest:{} msg:{}", doorEventsRest.getCode(), doorEventsRest.getMsg());
if (doorEventsRest.getCode() == YesNoEnum.YES.getValue()) {
//分页获取考勤数据
Integer total = doorEventsRest.getData().getTotal();
int pageCount = PageUtil.totalPage(total, 1000);
for (int i = 1; i <= pageCount; i++) {
doorEventReq.setPageNo(i);
doorEventReq.setPageSize(1000);
doorEventsRest = hikDoorService.getDoorEvents(doorEventReq);
log.info("doorEventsRest:{} msg:{},page:{}", doorEventsRest.getCode(), doorEventsRest.getMsg(), doorEventReq.getPageNo());
getDoorEvents(doorEventsRest);
}
}
return "ok";
}
private void getDoorEvents(Rest<DoorEventDataInfo> doorEventsRest) {
//同步当前考勤数据
List<AttendanceRecordHikEntity> attRecords = doorEventsRest.getData().getList().stream().map(item -> {
AttendanceRecordHikEntity recordHikEntity = new AttendanceRecordHikEntity();
recordHikEntity.initAttrValue();
StaffEntity staffCache = staffService.getExtCache(StrUtil.padPre(item.getJobNo(), 8, "0"));
if (ObjectUtils.isEmpty(staffCache)) {
log.info("staff is null !staffCode:{}", item.getJobNo());
return null;
}
recordHikEntity.setStaffId(staffCache.getId());
recordHikEntity.setStaffName(staffCache.getName());
recordHikEntity.setWorkNum(staffCache.getWorkNum());
recordHikEntity.setDeptId(staffCache.getDeptId());
recordHikEntity.setDeptName(staffCache.getDeptName());
recordHikEntity.setPositionId(staffCache.getPositionId());
recordHikEntity.setPositionName(staffCache.getPositionName());
recordHikEntity.setAttendanceDate(item.getEventTime());
recordHikEntity.setAttendanceAddress(item.getDoorName());
recordHikEntity.setEventSource("门禁点");
recordHikEntity.setRemark(item.getEventId());
recordHikEntity.setCreateTime(item.getEventTime());
recordHikEntity.setCreateUserName("system");
recordHikEntity.setCreateUserId(1L);
return recordHikEntity;
}).filter(f -> f != null).collect(Collectors.toList());
log.info("attRecords size:{}", attRecords.size());
if (!ObjectUtils.isEmpty(attRecords)) {
for (AttendanceRecordHikEntity attRecord : attRecords) {
//recordHikService.save(attRecord);
try {
recordHikService.getDao().insert(attRecord);
}catch (Exception e){
log.error("异常",e);
}
}
}
/*
List<String> eventIds = attRecords.parallelStream().filter(f -> !ObjectUtils.isEmpty(f) && !ObjectUtils.isEmpty(f.getRemark())).map(i -> i.getRemark()).collect(Collectors.toList());
//查询当天考勤记录是否有重复的 有的 则不添加
AttendanceRecordHikQuery recordHikQuery = new AttendanceRecordHikQuery();
recordHikQuery.setAttendanceDateStart(DateUtil.format(DateUtil.beginOfDay(new Date()), "yyyy-MM-dd"));
recordHikQuery.setAttendanceDateEnd(DateUtil.format(DateUtil.beginOfDay(new Date()), "yyyy-MM-dd"));
recordHikQuery.setRemarkList(eventIds);
Set<String> eventIdSet = recordHikService.find(recordHikQuery).parallelStream().map(i -> i.getRemark()).collect(Collectors.toSet());
List<AttendanceRecordHikEntity> saveRecordList = attRecords.stream().filter(f -> !eventIdSet.contains(f.getRemark())).collect(Collectors.toList());
if (!ObjectUtils.isEmpty(saveRecordList)) {
recordHikService.save(saveRecordList);
}
log.info("saveRecordList size:{}", saveRecordList.size());*/
}
@GetMapping("updateDeptNum")
@UnAuth
public String updateDeptNum() {
log.info("更新部门用户数量");
Map<Long, Long> collect = staffService.find(new StaffQuery()).stream().collect(Collectors.groupingBy(x -> x.getDeptId(), Collectors.counting()));
DeptEntity deptEntity1 = new DeptEntity();
deptEntity1.setPersonNum(0);
deptService.getDao().update(deptEntity1, new HashMap<>());
collect.entrySet().stream().forEach(item -> {
Long deptId = item.getKey();
Long count = item.getValue();
log.info("deptId:{},num:{}", deptId, count);
DeptEntity deptEntity = deptService.get(deptId);
if (!ObjectUtils.isEmpty(deptEntity)) {
deptEntity.setPersonNum(count.intValue());
deptService.update(deptEntity);
}
});
// @GetMapping("webservice")@GetMapping("idGens")
// public String idGens() {
// log.info("测试id生成");
//
// String stringId = idgeneratorService.getLongId(IdgeneratorServiceImpl.IdGeneratorKey.EFFECT).toString();
//
//
// return stringId;
// }
public String webservice() {
log.info("测试");
for (Map.Entry<Long, Long> item : collect.entrySet()) {
Long deptId = item.getKey();
if (deptId == -1) continue;
DeptEntity deptEntity = deptService.get(deptId);
if (!ObjectUtils.isEmpty(deptEntity)) {
//查询当前父节点的所有子部门
DeptQuery deptQuery = new DeptQuery();
deptQuery.setParentId(deptEntity.getParentId());
int sum = deptService.find(new DeptQuery().parentId(deptEntity.getParentId())).stream().map(i -> i.getPersonNum()).reduce(0, Integer::sum);
;
DeptEntity parentDept = deptService.get(deptEntity.getParentId());
log.info("dept:{},sum:{}", parentDept.getDeptName(), sum);
if (!ObjectUtils.isEmpty(parentDept)) {
log.info("parentDept:{},sum:{}", parentDept.getDeptName(), sum);
parentDept.setPersonNum(sum);
deptService.update(parentDept);
// updateDeptPersonNum(parentDept);
}
}
}
/*
//更新父部门的人数归集
collect.entrySet().stream().forEach(item -> {
Long deptId = item.getKey();
DeptEntity deptEntity = deptService.get(deptId);
if (!ObjectUtils.isEmpty(deptEntity) && !ObjectUtils.isEmpty(deptEntity.getParentId())) {
int sum = deptService.find(new DeptQuery().parentId(deptEntity.getId())).stream().mapToInt(i -> i.getPersonNum()).sum();
DeptEntity parentDept = deptService.get(deptEntity.getParentId());
if (ObjectUtils.isEmpty(parentDept)) {
parentDept.setPersonNum(sum);
deptService.update(parentDept);
updateDeptPersonNum(parentDept);
}
}
// updateDeptPersonNum(deptEntity);
});*/
return "ok";
}
public static void calculateParentValue(DeptEntity root) {
if (root == null) {
return;
}
// 递归处理叶子节点
if (root.getChildren().isEmpty()) {
return;
}
// 递归计算所有子节点的值之和
int sum = 0;
for (DeptEntity child : root.getChildren()) {
calculateParentValue(child);
sum += child.getPersonNum();
}
// 更新当前节点的值为所有子节点值之和
root.setPersonNum(sum);
}
private void updateDeptPersonNum(DeptEntity deptEntity) {
if (!ObjectUtils.isEmpty(deptEntity) && !ObjectUtils.isEmpty(deptEntity.getParentId())) {
int sum = deptService.find(new DeptQuery().parentId(deptEntity.getId())).stream().mapToInt(i -> i.getPersonNum()).sum();
DeptEntity parentDept = deptService.get(deptEntity.getParentId());
if (ObjectUtils.isEmpty(parentDept)) {
parentDept.setPersonNum(sum);
deptService.update(parentDept);
updateDeptPersonNum(parentDept);
}
}
}
//
@GetMapping("updatePersons")
@UnAuth
......@@ -211,7 +430,8 @@ public class TestController {
/**
* 生成模拟数据
* mortals_xhx_perform_perpose_staff_stat
* mortals_xhx_perform_perpose_staff_stat
*
* @return
*/
@GetMapping("randomStatPerposeStaffData")
......
package com.mortals.xhx.busiz;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
@Data
public class TestReq {
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTimeStart;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTimeEnd;
}
......@@ -27,4 +27,9 @@ public class EffectSaveReq extends BaseReq {
* 报警时间
*/
private Date alarmTime;
/**
* 窗口编号
*/
private String windowNum;
}
......@@ -28,6 +28,9 @@ public class ReviewSaveReq extends BaseReq {
*/
private String reviewDevice;
/**
* 窗口编号
*/
private String windowNum;
}
......@@ -219,7 +219,7 @@ public class ApiWebPerformController extends AbstractBaseController<PerformReq>
recordEntity.setRuleName(rule.getName());
recordEntity.setCategoryId(rule.getCategoryId());
recordEntity.setCategoryName(rule.getCategoryName());
recordEntity.setDeductPerson("admin");
recordEntity.setDeductPerson("系统管理员");
recordEntity.setDeductTime(new Date());
recordEntity.setCreateUserId(1L);
recordEntity.setCreateTime(new Date());
......@@ -254,11 +254,12 @@ public class ApiWebPerformController extends AbstractBaseController<PerformReq>
recordEntity.setRuleName(rule.getName());
recordEntity.setCategoryId(rule.getCategoryId());
recordEntity.setCategoryName(rule.getCategoryName());
recordEntity.setDeductPerson("admin");
recordEntity.setDeductPerson("系统管理员");
recordEntity.setDeductTime(new Date());
recordEntity.setCreateUserId(1L);
recordEntity.setCreateTime(new Date());
recordEntity.setWorkNum(staffEntity.getWorkNum());
recordEntity.setWindowNum(req.getWindowNum());
PerformRulesCategoryEntity categoryEntity = categoryService.get(rule.getCategoryId());
recordEntity.setCategoryName(categoryEntity == null ? "" : categoryEntity.getName());
PerformReviewRecordEntity save = reviewRecordService.save(recordEntity);
......@@ -285,7 +286,7 @@ public class ApiWebPerformController extends AbstractBaseController<PerformReq>
recordEntity.setRuleName(rule.getName());
recordEntity.setCategoryId(rule.getCategoryId());
recordEntity.setCategoryName(rule.getCategoryName());
recordEntity.setDeductPerson("admin");
recordEntity.setDeductPerson("系统管理员");
recordEntity.setDeductTime(new Date());
recordEntity.setWorkNum(staffEntity.getWorkNum());
......@@ -317,7 +318,7 @@ public class ApiWebPerformController extends AbstractBaseController<PerformReq>
recordEntity.setRuleName(rule.getName());
recordEntity.setCategoryId(rule.getCategoryId());
recordEntity.setCategoryName(rule.getCategoryName());
recordEntity.setDeductPerson("admin");
recordEntity.setDeductPerson("系统管理员");
recordEntity.setDeductTime(new Date());
recordEntity.setWorkNum(staffEntity.getWorkNum());
......@@ -350,10 +351,12 @@ public class ApiWebPerformController extends AbstractBaseController<PerformReq>
recordEntity.setRuleName(rule.getName());
recordEntity.setCategoryId(rule.getCategoryId());
recordEntity.setCategoryName(rule.getCategoryName());
recordEntity.setDeductPerson("admin");
recordEntity.setDeductPerson("系统管理员");
recordEntity.setDeductTime(new Date());
recordEntity.setWorkNum(staffEntity.getWorkNum());
recordEntity.setWindowNum(req.getWindowNum());
recordEntity.setCreateUserId(1L);
recordEntity.setCreateTime(new Date());
PerformRulesCategoryEntity categoryEntity = categoryService.get(rule.getCategoryId());
......@@ -384,7 +387,7 @@ public class ApiWebPerformController extends AbstractBaseController<PerformReq>
recordEntity.setCategoryName(rule.getCategoryName());
recordEntity.setWorkNum(staffEntity.getWorkNum());
recordEntity.setDeductPerson("admin");
recordEntity.setDeductPerson("系统管理员");
recordEntity.setDeductTime(new Date());
recordEntity.setCreateUserId(1L);
......
......@@ -8,6 +8,7 @@ import com.alibaba.fastjson.JSONObject;
import com.mortals.framework.common.Rest;
import com.mortals.framework.exception.AppException;
import com.mortals.framework.model.Context;
import com.mortals.framework.model.OrderCol;
import com.mortals.framework.model.PageInfo;
import com.mortals.framework.model.Result;
import com.mortals.xhx.busiz.h5.req.AppealReq;
......@@ -29,6 +30,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
......@@ -131,6 +133,7 @@ public class AppealApiController extends AbstractBaseController<PerformReq> {
query.setCreateTimeStart(appealReq.getApperalStartDate());
query.setCreateTimeEnd(appealReq.getAppealEndDate());
query.setStaffId(context.getUser().getCustomerId());
query.setOrderColList(Arrays.asList(new OrderCol("createTime",OrderCol.DESCENDING)));
Result<PerformAttendAppealEntity> result = appealService.find(query, pageInfo, context);
model.put(KEY_RESULT_DATA, result.getList());
......
......@@ -6,6 +6,7 @@ import com.alibaba.fastjson.JSONObject;
import com.mortals.framework.common.Rest;
import com.mortals.framework.exception.AppException;
import com.mortals.framework.model.Context;
import com.mortals.framework.model.OrderCol;
import com.mortals.framework.model.PageInfo;
import com.mortals.framework.model.Result;
import com.mortals.xhx.busiz.h5.req.FeedbackReq;
......@@ -93,6 +94,8 @@ public class FeedbackApiController extends AbstractBaseController<FeedbackReq> {
feedbackQuery.setIdList(feedbackIdList);
feedbackQuery.setCreateTimeStart(feedbackReq.getFeedBackStartDate());
feedbackQuery.setCreateTimeEnd(feedbackReq.getFeedBackEndDate());
feedbackQuery.setOrderColList(Arrays.asList(new OrderCol("createTime",OrderCol.DESCENDING)));
Result<FeedbackEntity> result = feedbackService.find(feedbackQuery, pageAllInfo, null);
model.put(PAGEINFO_KEY, result.getPageInfo());
model.put(KEY_RESULT_DATA, result.getList());
......@@ -113,6 +116,7 @@ public class FeedbackApiController extends AbstractBaseController<FeedbackReq> {
feedbackQuery.setCreateTimeStart(feedbackReq.getFeedBackStartDate());
feedbackQuery.setCreateTimeEnd(feedbackReq.getFeedBackEndDate());
feedbackQuery.setOrderColList(Arrays.asList(new OrderCol("createTime",OrderCol.DESCENDING)));
Result<FeedbackEntity> result = feedbackService.find(feedbackQuery, pageAllInfo, null);
......@@ -136,6 +140,7 @@ public class FeedbackApiController extends AbstractBaseController<FeedbackReq> {
feedbackQuery.setIdList(unfinFeedbackList);
feedbackQuery.setCreateTimeStart(feedbackReq.getFeedBackStartDate());
feedbackQuery.setCreateTimeEnd(feedbackReq.getFeedBackEndDate());
feedbackQuery.setOrderColList(Arrays.asList(new OrderCol("createTime",OrderCol.DESCENDING)));
Result<FeedbackEntity> result = feedbackService.find(feedbackQuery, pageAllInfo, null);
model.put(PAGEINFO_KEY, result.getPageInfo());
model.put(KEY_RESULT_DATA, result.getList());
......
......@@ -6,6 +6,7 @@ import com.alibaba.fastjson.JSONObject;
import com.mortals.framework.common.Rest;
import com.mortals.framework.exception.AppException;
import com.mortals.framework.model.Context;
import com.mortals.framework.model.OrderCol;
import com.mortals.framework.model.PageInfo;
import com.mortals.framework.model.Result;
import com.mortals.xhx.busiz.h5.req.InspectSaveReq;
......@@ -164,6 +165,7 @@ public class InspectApiController extends AbstractBaseController<PerformReq> {
query.setCreateTimeEnd(performReq.getPerformEndDate());
query.setCreateUserId(context.getUser().getId());
query.setSubMethod(SubMethodEnum.大厅巡查.getValue());
query.setOrderColList(Arrays.asList(new OrderCol("createTime",OrderCol.DESCENDING)));
log.info("inspect query:{}",JSONObject.toJSONString(query));
......
......@@ -10,6 +10,7 @@ import com.alibaba.fastjson.JSONObject;
import com.mortals.framework.common.Rest;
import com.mortals.framework.exception.AppException;
import com.mortals.framework.model.Context;
import com.mortals.framework.model.OrderCol;
import com.mortals.framework.model.PageInfo;
import com.mortals.framework.model.Result;
import com.mortals.xhx.busiz.h5.req.PerformReq;
......@@ -36,10 +37,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.*;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
import static com.mortals.framework.ap.SysConstains.*;
......@@ -182,6 +180,7 @@ public class PerformApiController extends AbstractBaseController<PerformReq> {
query.setCheckTimeEnd(performReq.getPerformEndDate());
query.setStaffId(context.getUser().getCustomerId());
query.setCheckStatus(CheckStatusEnum.已处理.getValue());
query.setOrderColList(Arrays.asList(new OrderCol("createTime",OrderCol.DESCENDING)));
Result<CheckAllRecordVo> result = checkAllRecordService.getAllCheckRecord(query, pageInfo);
List<CheckAllRecordVo> allCheckRecord = result.getList();
......@@ -202,6 +201,8 @@ public class PerformApiController extends AbstractBaseController<PerformReq> {
query.setCheckTimeEnd(performReq.getPerformEndDate());
query.setStaffId(context.getUser().getCustomerId());
query.setCheckStatus(CheckStatusEnum.已处理.getValue());
query.setOrderColList(Arrays.asList(new OrderCol("createTime",OrderCol.DESCENDING)));
Result<CheckAttendRecordEntity> result = checkAttendRecordService.find(query, pageInfo, context);
List<PerformInfo> collect = result.getList().stream().map(item -> {
PerformInfo performInfo = new PerformInfo();
......@@ -222,6 +223,8 @@ public class PerformApiController extends AbstractBaseController<PerformReq> {
query.setCheckTimeEnd(performReq.getPerformEndDate());
query.setStaffId(context.getUser().getCustomerId());
query.setCheckStatus(CheckStatusEnum.已处理.getValue());
query.setOrderColList(Arrays.asList(new OrderCol("createTime",OrderCol.DESCENDING)));
Result<CheckReviewRecordEntity> result = checkReviewRecordService.find(query, pageInfo, context);
List<PerformInfo> collect = result.getList().stream().map(item -> {
PerformInfo performInfo = new PerformInfo();
......@@ -242,6 +245,8 @@ public class PerformApiController extends AbstractBaseController<PerformReq> {
query.setCheckTimeEnd(performReq.getPerformEndDate());
query.setStaffId(context.getUser().getCustomerId());
query.setCheckStatus(CheckStatusEnum.已处理.getValue());
query.setOrderColList(Arrays.asList(new OrderCol("createTime",OrderCol.DESCENDING)));
Result<CheckComplainRecordEntity> result = checkComplainRecordService.find(query, pageInfo, context);
List<PerformInfo> collect = result.getList().stream().map(item -> {
PerformInfo performInfo = new PerformInfo();
......@@ -262,6 +267,8 @@ public class PerformApiController extends AbstractBaseController<PerformReq> {
query.setCheckTimeEnd(performReq.getPerformEndDate());
query.setStaffId(context.getUser().getCustomerId());
query.setCheckStatus(CheckStatusEnum.已处理.getValue());
query.setOrderColList(Arrays.asList(new OrderCol("createTime",OrderCol.DESCENDING)));
Result<CheckGoworkRecordEntity> result = checkGoworkRecordService.find(query, pageInfo, context);
List<PerformInfo> collect = result.getList().stream().map(item -> {
PerformInfo performInfo = new PerformInfo();
......@@ -282,6 +289,8 @@ public class PerformApiController extends AbstractBaseController<PerformReq> {
query.setCheckTimeEnd(performReq.getPerformEndDate());
query.setStaffId(context.getUser().getCustomerId());
query.setCheckStatus(CheckStatusEnum.已处理.getValue());
query.setOrderColList(Arrays.asList(new OrderCol("createTime",OrderCol.DESCENDING)));
Result<CheckEffectRecordEntity> result = checkEffectRecordService.find(query, pageInfo, context);
List<PerformInfo> collect = result.getList().stream().map(item -> {
PerformInfo performInfo = new PerformInfo();
......
package com.mortals.xhx.daemon.task;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.PageUtil;
import cn.hutool.core.util.StrUtil;
import com.mortals.framework.common.Rest;
import com.mortals.framework.exception.AppException;
import com.mortals.framework.model.Context;
import com.mortals.framework.service.ITask;
import com.mortals.framework.service.ITaskExcuteService;
import com.mortals.framework.util.DateUtils;
import com.mortals.xhx.base.system.user.model.UserEntity;
import com.mortals.xhx.common.code.YesNoEnum;
import com.mortals.xhx.module.attendance.model.AttendanceRecordHikEntity;
import com.mortals.xhx.module.attendance.model.AttendanceRecordHikQuery;
import com.mortals.xhx.module.attendance.service.AttendanceRecordHikService;
import com.mortals.xhx.module.hik.door.model.req.door.DoorEventReq;
import com.mortals.xhx.module.hik.door.model.rsp.door.DoorEventDataInfo;
import com.mortals.xhx.module.hik.door.service.IHikDoorService;
import com.mortals.xhx.module.staff.model.StaffEntity;
import com.mortals.xhx.module.staff.service.StaffService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
/**
* 同步获取下午海康门禁事件
*/
@Slf4j
@Service("SyncDoorsEventAfterTask")
public class SyncDoorsEventAfterTaskImpl implements ITaskExcuteService {
@Autowired
private AttendanceRecordHikService recordHikService;
@Autowired
private StaffService staffService;
@Autowired
private IHikDoorService hikDoorService;
@Override
public void excuteTask(ITask task) throws AppException {
syncDoorEvents();
calculateAttendByDay();
}
private void calculateAttendByDay() {
Context context = new Context();
UserEntity userEntity = new UserEntity();
userEntity.setCreateUserId(1L);
userEntity.setCreateUserName("system");
userEntity.setCreateTime(new Date());
context.setUser(userEntity);
AttendanceRecordHikQuery recordHikEntity = new AttendanceRecordHikQuery();
// Date todayStart = DateUtil.offsetHour(new Date(), -5).toJdkDate();
// recordHikEntity.setAttendanceDateStart(DateUtils.getCurrStrDate());
recordHikEntity.setAttendanceDateStart(DateUtil.offsetHour(new Date(), -5).toString());
recordHikEntity.setAttendanceDateEnd(DateUtils.getCurrStrDate());
try {
recordHikService.addAttendanceRecordByQuery(recordHikEntity, context);
} catch (Exception e) {
log.error("计算考勤异常", e);
}
}
private void syncDoorEvents() {
DoorEventReq doorEventReq = new DoorEventReq();
List<Integer> eventTypes = new ArrayList<>();
eventTypes.add(196885);
eventTypes.add(196887);
eventTypes.add(196893);
eventTypes.add(196888);
eventTypes.add(196889);
eventTypes.add(196890);
eventTypes.add(196891);
doorEventReq.setEventTypes(eventTypes);
// 获取当天的开始时间
Date todayStart = DateUtil.offsetHour(new Date(), -5).toJdkDate();
// Date todayStart = DateUtil.beginOfDay(new Date());
// 获取当天的结束时间
Date todayEnd = DateUtil.endOfDay(new Date());
doorEventReq.setStartTime(todayStart);
doorEventReq.setEndTime(todayEnd);
doorEventReq.setPageNo(1);
doorEventReq.setPageSize(1);
Rest<DoorEventDataInfo> doorEventsRest = hikDoorService.getDoorEvents(doorEventReq);
log.info("doorEventsRest:{} msg:{}", doorEventsRest.getCode(), doorEventsRest.getMsg());
if (doorEventsRest.getCode() == YesNoEnum.YES.getValue()) {
//分页获取考勤数据
Integer total = doorEventsRest.getData().getTotal();
int pageCount = PageUtil.totalPage(total, 1000);
for (int i = 1; i <= pageCount; i++) {
doorEventReq.setPageNo(i);
doorEventReq.setPageSize(1000);
doorEventsRest = hikDoorService.getDoorEvents(doorEventReq);
log.info("doorEventsRest:{} msg:{},page:{}", doorEventsRest.getCode(), doorEventsRest.getMsg(), doorEventReq.getPageNo());
getDoorEvents(doorEventsRest);
}
}
}
private void getDoorEvents(Rest<DoorEventDataInfo> doorEventsRest) {
//同步当前考勤数据
List<AttendanceRecordHikEntity> attRecords = doorEventsRest.getData().getList().stream().map(item -> {
AttendanceRecordHikEntity recordHikEntity = new AttendanceRecordHikEntity();
recordHikEntity.initAttrValue();
StaffEntity staffCache = staffService.getExtCache(StrUtil.padPre(item.getJobNo(), 8, "0"));
if (ObjectUtils.isEmpty(staffCache)) {
log.info("staff is null !staffCode:{}", item.getJobNo());
return null;
}
recordHikEntity.setStaffId(staffCache.getId());
recordHikEntity.setStaffName(staffCache.getName());
recordHikEntity.setWorkNum(staffCache.getWorkNum());
recordHikEntity.setDeptId(staffCache.getDeptId());
recordHikEntity.setDeptName(staffCache.getDeptName());
recordHikEntity.setPositionId(staffCache.getPositionId());
recordHikEntity.setPositionName(staffCache.getPositionName());
recordHikEntity.setAttendanceDate(item.getEventTime());
recordHikEntity.setAttendanceAddress(item.getDoorName());
recordHikEntity.setEventSource("门禁点");
recordHikEntity.setRemark(item.getEventId());
recordHikEntity.setCreateTime(new Date());
recordHikEntity.setCreateUserName("系统管理员");
recordHikEntity.setCreateUserId(1L);
return recordHikEntity;
}).filter(f -> f != null).collect(Collectors.toList());
log.info("attRecords size:{}", attRecords.size());
List<String> eventIds = attRecords.parallelStream().filter(f -> !ObjectUtils.isEmpty(f) && !ObjectUtils.isEmpty(f.getRemark())).map(i -> i.getRemark()).collect(Collectors.toList());
//查询当天考勤记录是否有重复的 有的 则不添加
AttendanceRecordHikQuery recordHikQuery = new AttendanceRecordHikQuery();
recordHikQuery.setAttendanceDateStart(DateUtil.format(DateUtil.beginOfDay(new Date()), "yyyy-MM-dd"));
recordHikQuery.setAttendanceDateEnd(DateUtil.format(DateUtil.beginOfDay(new Date()), "yyyy-MM-dd"));
recordHikQuery.setRemarkList(eventIds);
Set<String> eventIdSet = recordHikService.find(recordHikQuery).parallelStream().map(i -> i.getRemark()).collect(Collectors.toSet());
//去重 时分秒打卡的 也要去掉重复。
List<AttendanceRecordHikEntity> saveRecordList = attRecords.stream().filter(f -> !eventIdSet.contains(f.getRemark())).collect(Collectors.toList());
if (!ObjectUtils.isEmpty(saveRecordList)) {
//单个插入 去掉重复时间段的打卡记录
for (AttendanceRecordHikEntity recordHikEntity : saveRecordList) {
try {
recordHikService.save(recordHikEntity);
} catch (Exception e) {
log.error("基础考勤数据保存异常", e.getMessage());
}
}
// recordHikService.save(saveRecordList);
}
log.info("saveRecordList size:{}", saveRecordList.size());
}
@Override
public void stopTask(ITask task) throws AppException {
}
}
......@@ -3,8 +3,6 @@ package com.mortals.xhx.daemon.task;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.PageUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.mortals.framework.common.Rest;
import com.mortals.framework.exception.AppException;
import com.mortals.framework.model.Context;
......@@ -22,12 +20,10 @@ import com.mortals.xhx.module.hik.door.service.IHikDoorService;
import com.mortals.xhx.module.staff.model.StaffEntity;
import com.mortals.xhx.module.staff.service.StaffService;
import lombok.extern.slf4j.Slf4j;
import org.checkerframework.checker.units.qual.A;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import java.time.Year;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
......@@ -66,10 +62,13 @@ public class SyncDoorsEventTaskImpl implements ITaskExcuteService {
userEntity.setCreateTime(new Date());
context.setUser(userEntity);
AttendanceRecordHikQuery recordHikEntity = new AttendanceRecordHikQuery();
recordHikEntity.setAttendanceDateStart(DateUtils.getCurrStrDate());
// Date todayStart = DateUtil.offsetHour(new Date(), -5).toJdkDate();
// recordHikEntity.setAttendanceDateStart(DateUtils.getCurrStrDate());
recordHikEntity.setAttendanceDateStart(DateUtil.offsetHour(new Date(), -5).toString());
recordHikEntity.setAttendanceDateEnd(DateUtils.getCurrStrDate());
try {
recordHikService.addAttendanceRecord(recordHikEntity, context);
recordHikService.addAttendanceRecordByQuery(recordHikEntity, context);
} catch (Exception e) {
log.error("计算考勤异常", e);
}
......@@ -87,7 +86,8 @@ public class SyncDoorsEventTaskImpl implements ITaskExcuteService {
eventTypes.add(196891);
doorEventReq.setEventTypes(eventTypes);
// 获取当天的开始时间
Date todayStart = DateUtil.beginOfDay(new Date());
Date todayStart = DateUtil.offsetHour(new Date(), -5).toJdkDate();
// Date todayStart = DateUtil.beginOfDay(new Date());
// 获取当天的结束时间
Date todayEnd = DateUtil.endOfDay(new Date());
doorEventReq.setStartTime(todayStart);
......@@ -118,7 +118,7 @@ public class SyncDoorsEventTaskImpl implements ITaskExcuteService {
recordHikEntity.initAttrValue();
StaffEntity staffCache = staffService.getExtCache(StrUtil.padPre(item.getJobNo(), 8, "0"));
if (ObjectUtils.isEmpty(staffCache)) {
log.info("staff is null !staffCode:{}",item.getJobNo());
log.info("staff is null !staffCode:{}", item.getJobNo());
return null;
}
......@@ -135,13 +135,11 @@ public class SyncDoorsEventTaskImpl implements ITaskExcuteService {
recordHikEntity.setEventSource("门禁点");
recordHikEntity.setRemark(item.getEventId());
recordHikEntity.setCreateTime(new Date());
recordHikEntity.setCreateUserName("system");
recordHikEntity.setCreateUserName("系统管理员");
recordHikEntity.setCreateUserId(1L);
return recordHikEntity;
}).filter(f->f!=null).collect(Collectors.toList());
}).filter(f -> f != null).collect(Collectors.toList());
log.info("attRecords size:{}", attRecords.size());
List<String> eventIds = attRecords.parallelStream().filter(f -> !ObjectUtils.isEmpty(f) && !ObjectUtils.isEmpty(f.getRemark())).map(i -> i.getRemark()).collect(Collectors.toList());
//查询当天考勤记录是否有重复的 有的 则不添加
......@@ -151,9 +149,18 @@ public class SyncDoorsEventTaskImpl implements ITaskExcuteService {
recordHikQuery.setRemarkList(eventIds);
Set<String> eventIdSet = recordHikService.find(recordHikQuery).parallelStream().map(i -> i.getRemark()).collect(Collectors.toSet());
//去重 时分秒打卡的 也要去掉重复。
List<AttendanceRecordHikEntity> saveRecordList = attRecords.stream().filter(f -> !eventIdSet.contains(f.getRemark())).collect(Collectors.toList());
if (!ObjectUtils.isEmpty(saveRecordList)) {
recordHikService.save(saveRecordList);
//单个插入 去掉重复时间段的打卡记录
for (AttendanceRecordHikEntity recordHikEntity : saveRecordList) {
try {
recordHikService.save(recordHikEntity);
} catch (Exception e) {
log.error("基础考勤数据保存异常", e.getMessage());
}
}
// recordHikService.save(saveRecordList);
}
log.info("saveRecordList size:{}", saveRecordList.size());
}
......@@ -163,20 +170,4 @@ public class SyncDoorsEventTaskImpl implements ITaskExcuteService {
public void stopTask(ITask task) throws AppException {
}
public static void main(String[] args) {
// 获取当前时间的小时数
int hour = DateUtil.hour(new Date(), true);
// 获取当前时间所在小时的开始时间和结束时间
Date startTime = DateUtil.beginOfHour(new Date());
Date endTime = DateUtil.endOfHour(new Date());
// 格式化时间为指定格式
String startTimeStr = DateUtil.format(startTime, "yyyy-MM-dd HH:00:00");
String endTimeStr = DateUtil.format(endTime, "yyyy-MM-dd HH:59:59");
// 输出结果
System.out.println("当前时间所在小时的开始时间:" + startTimeStr);
System.out.println("当前时间所在小时的结束时间:" + endTimeStr);
}
}
......@@ -74,7 +74,7 @@ public class SyncUserTaskImpl implements ITaskExcuteService {
for (PersonInfo personInfo : personInfoList) {
StaffEntity staffEntity = staffService.getExtCache(StrUtil.padPre(personInfo.getJobNo(), 8, "0"));
DeptEntity deptEntity = deptService.selectOne(new DeptQuery().deptCode(personInfo.getOrgIndexCode()));
// AttendanceVacationBalanceEntity balanceEntity = balanceService.selectOne(new AttendanceVacationBalanceQuery().staffId(staffEntity.getId()));
// AttendanceVacationBalanceEntity balanceEntity = balanceService.selectOne(new AttendanceVacationBalanceQuery().staffId(staffEntity.getId()));
// AttendanceStatEntity statEntity = attendanceStatService.selectOne(new AttendanceStatQuery().staffId(staffEntity.getId()));
//判断本地数据是否为空
if (ObjectUtils.isEmpty(staffEntity)) {
......@@ -106,7 +106,7 @@ public class SyncUserTaskImpl implements ITaskExcuteService {
balanceEntity.setCreateUserId(1L);
balanceEntity.setCreateTime(new Date());
balanceService.save(balanceEntity);
//AttendanceVacationBalanceEntity balanceEntity = balanceService.selectOne(new AttendanceVacationBalanceQuery().staffId(staffEntity.getId()));
//AttendanceVacationBalanceEntity balanceEntity = balanceService.selectOne(new AttendanceVacationBalanceQuery().staffId(staffEntity.getId()));
AttendanceStatEntity attendanceStatEntity = new AttendanceStatEntity();
attendanceStatEntity.initAttrValue();
......@@ -139,16 +139,7 @@ public class SyncUserTaskImpl implements ITaskExcuteService {
attendanceStatEntity.setHomeLeave(balanceEntity.getHomeLeave());
attendanceStatEntity.setPersonalLeave(balanceEntity.getPersonalLeaveDays());
attendanceStatService.save(attendanceStatEntity);
//统计各级部门员工数量 todo 优化统计
String ancestor = deptEntity.getAncestors().split(",", 2)[1];
String[] ancestors = ancestor.split(",");
for (String newAncestor : ancestors) {
DeptEntity deptEntity2 = deptService.get(Long.valueOf(newAncestor));
if (Objects.nonNull(deptEntity2)) {
deptEntity2.setPersonNum(deptEntity2.getPersonNum() + 1);
deptService.update(deptEntity2);
}
}
} else {
//更新
if (!ObjectUtils.isEmpty(deptEntity)) {
......@@ -165,16 +156,7 @@ public class SyncUserTaskImpl implements ITaskExcuteService {
staffEntity.setUpdateUserId(1L);
staffEntity.setUpdateTime(new Date());
staffService.update(staffEntity);
//统计各级部门员工数量
String ancestor = deptEntity.getAncestors().split(",", 2)[1];
String[] ancestors = ancestor.split(",");
for (String newAncestor : ancestors) {
DeptEntity deptEntity2 = deptService.get(Long.valueOf(newAncestor));
if (Objects.nonNull(deptEntity2)) {
deptEntity2.setPersonNum(deptEntity2.getPersonNum() + 1);
deptService.update(deptEntity2);
}
}
}
}
}
......@@ -220,6 +202,7 @@ public class SyncUserTaskImpl implements ITaskExcuteService {
}
}
}
@Override
public void stopTask(ITask task) throws AppException {
......
......@@ -20,6 +20,9 @@ import com.mortals.xhx.module.attendance.model.AttendanceLeaveRecordEntity;
import com.mortals.xhx.module.attendance.model.AttendanceLeaveRecordQuery;
import com.mortals.xhx.module.attendance.service.AttendanceLeaveRecordService;
import com.mortals.xhx.module.dingding.personal.service.IDingPersonService;
import com.mortals.xhx.module.staff.model.StaffEntity;
import com.mortals.xhx.module.staff.model.StaffQuery;
import com.mortals.xhx.module.staff.service.StaffService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.logging.Log;
import org.apache.poi.ss.formula.functions.T;
......@@ -54,7 +57,8 @@ public class DingMessageController {
private IDingPersonService dingPersonService;
@Autowired
private AttendanceLeaveRecordService attendanceLeaveRecordService;
@Autowired
private StaffService staffService;
/**
* appKey
......@@ -109,136 +113,170 @@ public class DingMessageController {
AttendanceLeaveRecordEntity leaveRecordEntity = new AttendanceLeaveRecordEntity();
leaveRecordEntity.initAttrValue();
leaveRecordEntity.setRemark(processInstanceId); //将钉钉的事物id作为备注填入数据库
leaveRecordEntity.setLeavePersonId(Long.parseLong(result.getOriginatorUserId()));
leaveRecordEntity.setLeavePerson(result.getTitle().substring(0,result.getTitle().indexOf("提交")));
leaveRecordEntity.setDeptId(Long.parseLong(result.getOriginatorDeptId()));
leaveRecordEntity.setDeptName(result.getOriginatorDeptName());
Rest<String> mobileRest = dingPersonService.getPersonById(result.getOriginatorUserId());
if(mobileRest.getCode() == Rest.SUCCESS) {
String mobile = mobileRest.getData();
StaffEntity staffEntity = staffService.selectOne(new StaffQuery().phoneNumber(mobile));
if(!ObjectUtils.isEmpty(staffEntity)){
leaveRecordEntity.setLeavePersonId(staffEntity.getId());
leaveRecordEntity.setLeavePerson(staffEntity.getName());
leaveRecordEntity.setDeptId(staffEntity.getDeptId());
leaveRecordEntity.setDeptName(staffEntity.getDeptName());
leaveRecordEntity.setPhoneNumber(staffEntity.getPhoneNumber());
if(result.getTasks().size() >0 ){
Date startTime = dateFormat(result.getTasks().get(0).getCreateTime());
Date endTime = dateFormat(result.getTasks().get(0).getFinishTime());
leaveRecordEntity.setStartTime(startTime);
leaveRecordEntity.setEndTime(endTime);
leaveRecordEntity.setDuration((int) ((endTime.getTime() - startTime.getTime())/1000));
}
if(result.getFormComponentValues().size() > 0 ){
JSONArray jsonArray = JSONArray.parseArray(result.getFormComponentValues().get(0).getValue());
if(jsonArray.size() > 0){
Date startTime1 = dateFormat(jsonArray.get(0).toString());
leaveRecordEntity.setStartTime(startTime1);
}
if(jsonArray.size() > 1){
Date endTime1 = dateFormat(jsonArray.get(1).toString());
leaveRecordEntity.setEndTime(endTime1);
}
if(jsonArray.size() > 2){
leaveRecordEntity.setDuration((int) (Float.parseFloat(jsonArray.get(2).toString())*60*60));
}
if(jsonArray.size() > 4){
switch (jsonArray.get(4).toString()){
case "调休":
leaveRecordEntity.setLeaveType(2);
break;
case "病假":
leaveRecordEntity.setLeaveType(3);
break;
case "年假":
leaveRecordEntity.setLeaveType(4);
break;
case "产假":
leaveRecordEntity.setLeaveType(5);
break;
case "陪产假":
leaveRecordEntity.setLeaveType(6);
break;
case "婚假":
leaveRecordEntity.setLeaveType(7);
break;
case "例假":
leaveRecordEntity.setLeaveType(8);
break;
case "哺乳假":
leaveRecordEntity.setLeaveType(9);
break;
case "丧假":
leaveRecordEntity.setLeaveType(10);
break;
case "回单位":
leaveRecordEntity.setLeaveType(11);
break;
case "因公请假":
leaveRecordEntity.setLeaveType(12);
break;
case "外出勘验":
leaveRecordEntity.setLeaveType(13);
break;
case "值班补班":
leaveRecordEntity.setLeaveType(14);
break;
case "体检":
leaveRecordEntity.setLeaveType(15);
break;
case "隔离":
leaveRecordEntity.setLeaveType(16);
break;
case "因公外出":
leaveRecordEntity.setLeaveType(17);
break;
case "公休":
leaveRecordEntity.setLeaveType(18);
break;
case "育儿假":
leaveRecordEntity.setLeaveType(19);
break;
case "调回单位":
leaveRecordEntity.setLeaveType(20);
break;
case "探亲假":
leaveRecordEntity.setLeaveType(21);
break;
default:
leaveRecordEntity.setLeaveType(1); //默认事假
break;
}
}
} else if (result.getFormComponentValues().size() > 1) { //请假理由
GetProcessInstanceResponseBody.GetProcessInstanceResponseBodyResultFormComponentValues resonEntity = result.getFormComponentValues().get(1);
if(resonEntity.getName().equals("请假事由")){
leaveRecordEntity.setReason(resonEntity.getValue());
}
}else if (result.getFormComponentValues().size() > 2) { //上传的附件
GetProcessInstanceResponseBody.GetProcessInstanceResponseBodyResultFormComponentValues picEntity = result.getFormComponentValues().get(2);
if(picEntity.getName().equals("图片") && picEntity.getValue() != null){
leaveRecordEntity.setReason(picEntity.getValue());
}
}
if(result.getTasks().size() >0 ){
Date startTime = dateFormat(result.getTasks().get(0).getCreateTime());
Date endTime = dateFormat(result.getTasks().get(0).getFinishTime());
leaveRecordEntity.setStartTime(startTime);
leaveRecordEntity.setEndTime(endTime);
leaveRecordEntity.setDuration((int) ((endTime.getTime() - startTime.getTime())/1000));
}
if(result.getFormComponentValues().size() > 0 ){
JSONArray jsonArray = JSONArray.parseArray(result.getFormComponentValues().get(0).getValue());
if(jsonArray.size() > 0){
Date startTime1 = dateFormat(jsonArray.get(0).toString());
leaveRecordEntity.setStartTime(startTime1);
}
if(jsonArray.size() > 1){
Date endTime1 = dateFormat(jsonArray.get(1).toString());
leaveRecordEntity.setEndTime(endTime1);
}
if(jsonArray.size() > 2){
leaveRecordEntity.setDuration((int) (Float.parseFloat(jsonArray.get(2).toString())*60*60));
}
if(jsonArray.size() > 4){
switch (jsonArray.get(4).toString()){
case "调休":
leaveRecordEntity.setLeaveType(2);
break;
case "病假":
leaveRecordEntity.setLeaveType(3);
break;
case "年假":
leaveRecordEntity.setLeaveType(4);
break;
case "产假":
leaveRecordEntity.setLeaveType(5);
break;
case "陪产假":
leaveRecordEntity.setLeaveType(6);
break;
case "婚假":
leaveRecordEntity.setLeaveType(7);
break;
case "例假":
leaveRecordEntity.setLeaveType(8);
break;
case "哺乳假":
leaveRecordEntity.setLeaveType(9);
break;
case "丧假":
leaveRecordEntity.setLeaveType(10);
break;
case "回单位":
leaveRecordEntity.setLeaveType(11);
break;
case "因公请假":
leaveRecordEntity.setLeaveType(12);
break;
case "外出勘验":
leaveRecordEntity.setLeaveType(13);
break;
case "值班补班":
leaveRecordEntity.setLeaveType(14);
break;
case "体检":
leaveRecordEntity.setLeaveType(15);
break;
case "隔离":
leaveRecordEntity.setLeaveType(16);
break;
case "因公外出":
leaveRecordEntity.setLeaveType(17);
break;
case "公休":
leaveRecordEntity.setLeaveType(18);
break;
case "育儿假":
leaveRecordEntity.setLeaveType(19);
break;
case "调回单位":
leaveRecordEntity.setLeaveType(20);
break;
case "探亲假":
leaveRecordEntity.setLeaveType(21);
break;
default:
leaveRecordEntity.setLeaveType(1); //默认事假
break;
if(result.getStatus().compareToIgnoreCase("NEW") == 0 || result.getStatus().compareToIgnoreCase("RUNNING") == 0){
leaveRecordEntity.setProcessStatus(1);
}else if(result.getStatus().compareToIgnoreCase("COMPLETED") == 0 || result.getStatus().compareToIgnoreCase("CANCELED") == 0
|| result.getStatus().compareToIgnoreCase("TERMINATED") == 0){
leaveRecordEntity.setProcessStatus(2);
}
if(result.getResult().compareToIgnoreCase("AGREE") == 0){
leaveRecordEntity.setAuditResult(1);
}else {
leaveRecordEntity.setAuditResult(2);
}
}
log.info("钉钉返回的result:"+result.getResult()+"\nauditresult:"+leaveRecordEntity.getAuditResult());
leaveRecordEntity.setAuditDesc(result.getOperationRecords().get(0).getRemark());
}
AttendanceLeaveRecordEntity recordEntity = attendanceLeaveRecordService.selectOne(new AttendanceLeaveRecordQuery().remark(processInstanceId));
if(ObjectUtils.isEmpty(recordEntity)){
if(result.getStatus().equals("NEW") || result.getStatus().equals("RUNNING")){
leaveRecordEntity.setProcessStatus(1);
}else if(result.getStatus().equals("COMPLETED") || result.getStatus().equals("CANCELED") || result.getStatus().equals("TERMINATED")){
leaveRecordEntity.setProcessStatus(2);
}
leaveRecordEntity.setCreateTime(new Date());
leaveRecordEntity.setCreateUserId(1L);
attendanceLeaveRecordService.save(leaveRecordEntity);
}else{
leaveRecordEntity.setId(recordEntity.getId());
if(result.getResult().equals("AGREE")){
leaveRecordEntity.setAuditResult(1);
}else {
leaveRecordEntity.setAuditResult(2);
}
leaveRecordEntity.setUpdateUserId(1L);
leaveRecordEntity.setUpdateTime(new Date());
attendanceLeaveRecordService.update(leaveRecordEntity);
}
leaveRecordEntity.setAuditDesc(result.getOperationRecords().get(0).getRemark());
AttendanceLeaveRecordEntity recordEntity = attendanceLeaveRecordService.selectOne(new AttendanceLeaveRecordQuery().remark(processInstanceId));
if(ObjectUtils.isEmpty(recordEntity)){
leaveRecordEntity.setCreateTime(new Date());
leaveRecordEntity.setCreateUserId(1L);
attendanceLeaveRecordService.save(leaveRecordEntity);
}else{
leaveRecordEntity.setId(recordEntity.getId());
}else {
log.info("该号码("+mobile +")未在本系统绑定");
}
leaveRecordEntity.setUpdateUserId(1L);
leaveRecordEntity.setUpdateTime(new Date());
attendanceLeaveRecordService.update(leaveRecordEntity);
}else {
log.info("根据id在钉钉平台查询电话失败"+mobileRest.getMsg());
}
}
}
......
package com.mortals.xhx.module.attendance.model;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.ArrayList;
import cn.hutool.core.date.DateUtil;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.mortals.framework.annotation.Excel;
import com.mortals.framework.model.BaseEntityLong;
......@@ -29,6 +32,7 @@ public class AttendanceStatEntity extends AttendanceStatVo {
/**
* 员工姓名
*/
@Excel(name = "员工姓名")
private String staffName;
/**
* 所属部门
......@@ -37,6 +41,7 @@ public class AttendanceStatEntity extends AttendanceStatVo {
/**
* 所属部门名称
*/
@Excel(name = "部门名称")
private String deptName;
/**
* 回单位(天)
......@@ -312,11 +317,11 @@ public class AttendanceStatEntity extends AttendanceStatVo {
this.earlyLeaveMeeting = BigDecimal.valueOf(0);
this.year = -1;
this.year = DateUtil.year(new Date());
this.month = -1;
this.month = DateUtil.month(new Date())+1;
this.day = -1;
this.day = DateUtil.dayOfMonth(new Date());
this.remark = "";
......@@ -338,4 +343,8 @@ public class AttendanceStatEntity extends AttendanceStatVo {
this.afternoonTimes = 0;
}
public static void main(String[] args) {
System.out.println(DateUtil.dayOfMonth(new Date()));
}
}
\ No newline at end of file
package com.mortals.xhx.module.attendance.service;
import com.mortals.framework.model.Context;
import com.mortals.framework.service.ICRUDService;
import com.mortals.xhx.module.attendance.dao.AttendanceRecordHikDao;
import com.mortals.xhx.module.attendance.model.AttendanceRecordHikEntity;
import java.util.List;
/**
* AttendanceRecordHikService
*
......@@ -13,10 +16,29 @@ import com.mortals.xhx.module.attendance.model.AttendanceRecordHikEntity;
*/
public interface AttendanceRecordHikService extends ICRUDService<AttendanceRecordHikEntity,Long>{
AttendanceRecordHikDao getDao();
/**
* 根据查询条件生成打卡记录
* @param attendanceRecordHikQuery
*/
void addAttendanceRecordByQuery(AttendanceRecordHikEntity attendanceRecordHikQuery, Context context) throws Exception;
/**
* 将原始数据导入打卡记录表
* @param entity
* 根据查询条件生成打卡记录
* @param hikEntity
*/
void addAttendanceRecord(AttendanceRecordHikEntity entity, Context context) throws Exception;
void addAttendanceRecord(AttendanceRecordHikEntity hikEntity, Context context) throws Exception;
/**
* 根据查原始记录列表生成打卡记录
* @param hikEntityList
*/
void addAttendanceRecordList(List<AttendanceRecordHikEntity> hikEntityList, Context context) throws Exception;
}
......@@ -6,6 +6,7 @@ import com.mortals.framework.service.IUser;
import com.mortals.framework.util.StringUtils;
import com.mortals.xhx.base.system.upload.service.UploadService;
import com.mortals.xhx.common.code.*;
import com.mortals.xhx.common.utils.BeanUtil;
import com.mortals.xhx.module.attendance.model.*;
import com.mortals.xhx.module.attendance.service.*;
import com.mortals.xhx.module.dept.service.DeptService;
......@@ -14,6 +15,7 @@ import com.mortals.xhx.module.staff.model.StaffQuery;
import com.mortals.xhx.module.staff.service.StaffService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.time.DateUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.mortals.framework.service.impl.AbstractCRUDServiceImpl;
......@@ -60,16 +62,200 @@ public class AttendanceRecordHikServiceImpl extends AbstractCRUDServiceImpl<Atte
@Autowired
private AttendanceRecordErrorService errorService;
@Override
public void addAttendanceRecord(AttendanceRecordHikEntity entity, Context context) throws Exception {
public void addAttendanceRecord(AttendanceRecordHikEntity hikEntity, Context context) throws Exception {
List<AttendanceRecordHikEntity> hikEntityList = new ArrayList<>();
addAttendanceRecordList(hikEntityList, context);
}
List<AttendanceRecordHikEntity> hikEntityList = attendanceRecordHikService.find(entity);
@Override
public void addAttendanceRecordByQuery(AttendanceRecordHikEntity attendanceRecordHikQuery, Context context) throws Exception {
List<AttendanceRecordHikEntity> hikEntityList = attendanceRecordHikService.find(attendanceRecordHikQuery);
addAttendanceRecordList(hikEntityList, context);
}
public void addAttendanceRecordList(List<AttendanceRecordHikEntity> hikEntityList, Context context) throws Exception {
//对考勤数据根据考勤时间进行排序
List<AttendanceRecordHikEntity> collect = hikEntityList.stream().sorted(Comparator.comparing(AttendanceRecordHikEntity::getAttendanceDate)).collect(Collectors.toList());
//根据工号对考勤数据进行分组
Map<String, List<AttendanceRecordHikEntity>> listMap = collect.stream().collect(Collectors.groupingBy(AttendanceRecordHikEntity::getWorkNum));
//Map<String, Map<String, List<AttendanceRecordHikEntity>>> groupMap = collect.stream().collect(Collectors.groupingBy(AttendanceRecordHikEntity::getWorkNum, Collectors.groupingBy(x -> com.mortals.framework.util.DateUtils.getDateTimeStr(x.getAttendanceDate(), "yyyy-MM-dd"))));
//map遍历.先把所有键取出来
for (Map.Entry<String, List<AttendanceRecordHikEntity>> itemEntry : listMap.entrySet()) {
String workNum = itemEntry.getKey();
List<AttendanceRecordHikEntity> recordHikEntityList = itemEntry.getValue();
//对按照工号分组了的数据recordHikEntityList进行时间分组
// DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
Map<String, List<AttendanceRecordHikEntity>> dateRecordMap = recordHikEntityList.stream().collect(Collectors.groupingBy(hikEntity -> DateUtil.formatDate(hikEntity.getAttendanceDate())));
for (Map.Entry<String, List<AttendanceRecordHikEntity>> dateEntry : dateRecordMap.entrySet()) {
String dateStr = dateEntry.getKey();
List<AttendanceRecordHikEntity> attendanceRecordHikEntities = dateEntry.getValue();
//对相同工号的人员进行遍历判断考勤规则
AttendanceRecordEntity attendanceRecordEntity = new AttendanceRecordEntity();
attendanceRecordEntity.initAttrValue();
List<AttendanceRecordDetailEntity> detailEntityList = new ArrayList<>();
for (AttendanceRecordHikEntity item : attendanceRecordHikEntities) {
//对主表的对象进行赋值
attendanceRecordEntity.setStaffId(item.getStaffId());
attendanceRecordEntity.setStaffName(item.getStaffName());
attendanceRecordEntity.setDeptId(item.getDeptId());
attendanceRecordEntity.setDeptName(item.getDeptName());
attendanceRecordEntity.setPositionId(item.getPositionId());
attendanceRecordEntity.setPositionName(item.getPositionName());
attendanceRecordEntity.setWorkNum(item.getWorkNum());
attendanceRecordEntity.setAttendanceDate(item.getAttendanceDate());
attendanceRecordEntity.setCreateTime(new Date());
attendanceRecordEntity.setCreateUserId(this.getContextUserId(context));
//获取考勤打卡时间
Date attendanceDate = item.getAttendanceDate();
//通过工号查询员工信息
StaffEntity staffEntity = staffService.getExtCache(StrUtil.padPre(item.getWorkNum(), 8, "0"));
if (ObjectUtils.isEmpty(staffEntity)) {
log.info("staffEntity is null ,workNum:{}", StrUtil.padPre(item.getWorkNum(), 8, "0"));
continue;
}
//通过员工id查询考勤组人员信息
List<AttendanceGroupStaffEntity> attendanceGroupStaffEntities = attendanceGroupStaffService.find(new AttendanceGroupStaffQuery().staffId(staffEntity.getId()));
//查询该考勤人员,如果查出来的考勤人员信息list长度为1 则该考勤人员只有一个考勤组
if (!ObjectUtils.isEmpty(attendanceGroupStaffEntities) && attendanceGroupStaffEntities.size() == 1)
checkAttendGroupByOne(attendanceRecordEntity, detailEntityList, attendanceDate, attendanceGroupStaffEntities.get(0), context);
//如果考勤人员信息list长度大于1 则该考勤人员有多个考勤组.
if (StringUtils.isNotNull(attendanceGroupStaffEntities) && attendanceGroupStaffEntities.size() > 1) {
for (AttendanceGroupStaffEntity groupStaffEntity : attendanceGroupStaffEntities) {
//多考勤组 todo 暂时和单一覆盖
checkAttendGroupByOne(attendanceRecordEntity, detailEntityList, attendanceDate, groupStaffEntity, context);
}
}
}
//处理异常打卡,所以异常打卡的 都新增一条记录
List<AttendanceRecordErrorEntity> errorEntityList = new ArrayList<>();
for (AttendanceRecordDetailEntity recordDetailEntity : detailEntityList) {
//SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//SimpleDateFormat sdft = new SimpleDateFormat("HH:mm:ss");
Integer goWorkResult = recordDetailEntity.getGoWorkResult();
Integer offWorkResult = recordDetailEntity.getOffWorkResult();
//判断上班
if (GoWorkResultEnum.正常.getValue() != goWorkResult) {
AttendanceRecordErrorEntity errorEntity = new AttendanceRecordErrorEntity();
BeanUtils.copyProperties(attendanceRecordEntity, errorEntity, new String[]{"id"});
Date goWorkDate = attendanceClassDetailService.selectOne(new AttendanceClassDetailQuery().id(recordDetailEntity.getShiftsId())).getGoWorkDate();
errorEntity.setGoOffDateTime(goWorkDate);
if (!ObjectUtils.isEmpty(recordDetailEntity.getGoWorkDate())) {
errorEntity.setErrorDateTime(recordDetailEntity.getGoWorkDate());
errorEntity.setActualAttendanceDateTime(recordDetailEntity.getGoWorkDate());
} else {
errorEntity.setErrorDateTime(goWorkDate);
}
if (GoWorkResultEnum.早退.getValue() == recordDetailEntity.getGoWorkResult()) {
errorEntity.setErrorStatus(ErrorStatusEnum.早退.getValue());
}
if (GoWorkResultEnum.迟到.getValue() == recordDetailEntity.getGoWorkResult()) {
errorEntity.setErrorStatus(ErrorStatusEnum.迟到.getValue());
}
if (GoWorkResultEnum.缺卡.getValue() == recordDetailEntity.getGoWorkResult()) {
errorEntity.setErrorStatus(ErrorStatusEnum.缺卡.getValue());
}
errorEntity.setProcessStatus(YesNoEnum.NO.getValue());
errorEntity.setCreateTime(new Date());
errorEntity.setCreateUserId(this.getContextUserId(context));
errorEntityList.add(errorEntity);
}
//判断下班
if (OffWorkResultEnum.正常.getValue() != offWorkResult) {
AttendanceRecordErrorEntity errorEntity = new AttendanceRecordErrorEntity();
errorEntity.initAttrValue();
BeanUtils.copyProperties(attendanceRecordEntity, errorEntity, new String[]{"id"});
Date offWorkDate = attendanceClassDetailService.selectOne(new AttendanceClassDetailQuery().id(recordDetailEntity.getShiftsId())).getOffWorkDate();
errorEntity.setGoOffDateTime(offWorkDate);
if (!ObjectUtils.isEmpty(recordDetailEntity.getGoWorkDate())) {
errorEntity.setErrorDateTime(recordDetailEntity.getGoWorkDate());
errorEntity.setActualAttendanceDateTime(recordDetailEntity.getGoWorkDate());
} else {
errorEntity.setErrorDateTime(offWorkDate);
}
if (OffWorkResultEnum.缺卡.getValue() == recordDetailEntity.getOffWorkResult()) {
errorEntity.setErrorStatus(ErrorStatusEnum.缺卡.getValue());
}
if (OffWorkResultEnum.早退.getValue() == recordDetailEntity.getOffWorkResult()) {
errorEntity.setErrorStatus(ErrorStatusEnum.早退.getValue());
}
if (OffWorkResultEnum.迟到.getValue() == recordDetailEntity.getOffWorkResult()) {
errorEntity.setErrorStatus(ErrorStatusEnum.迟到.getValue());
}
errorEntity.setProcessStatus(YesNoEnum.NO.getValue());
errorEntity.setCreateTime(new Date());
errorEntity.setCreateUserId(this.getContextUserId(context));
errorEntityList.add(errorEntity);
}
}
if (!ObjectUtils.isEmpty(detailEntityList)) {
if (!ObjectUtils.isEmpty(detailEntityList)) {
errorService.save(errorEntityList, context);
}
attendanceRecordEntity.setShiftsName(detailEntityList.get(0).getShiftsName());
attendanceRecordEntity.setShiftsId(detailEntityList.get(0).getShiftsId());
attendanceRecordEntity.setAttendanceRecordDetailList(detailEntityList);
//判断签到 只要存在一次正常打卡详细记录 就判断签到
for (AttendanceRecordDetailEntity detailEntity : detailEntityList) {
if (GoWorkResultEnum.正常.getValue() == detailEntity.getGoWorkResult() || GoWorkResultEnum.迟到.getValue() == detailEntity.getOffWorkResult()) {
attendanceRecordEntity.setSignInResult(YesNoEnum.YES.getValue());
break;
}
}
for (AttendanceRecordDetailEntity detailEntity : detailEntityList) {
if (OffWorkResultEnum.正常.getValue() == detailEntity.getOffWorkResult() || OffWorkResultEnum.早退.getValue() == detailEntity.getOffWorkResult()) {
attendanceRecordEntity.setSignOutResult(YesNoEnum.YES.getValue());
break;
}
}
for (AttendanceRecordDetailEntity detailEntity : detailEntityList) {
if (OffWorkResultEnum.缺卡.getValue() == detailEntity.getOffWorkResult()) {
attendanceRecordEntity.setPunchResult(YesNoEnum.NO.getValue());
break;
}
if (OffWorkResultEnum.缺卡.getValue() == detailEntity.getOffWorkResult()) {
attendanceRecordEntity.setPunchResult(YesNoEnum.NO.getValue());
break;
}
}
if (YesNoEnum.YES.getValue() == attendanceRecordEntity.getSignInResult() && YesNoEnum.YES.getValue() == attendanceRecordEntity.getSignOutResult()) {
attendanceRecordEntity.setPunchResult(YesNoEnum.YES.getValue());
}
attendanceRecordEntity.setAttendType("现场打卡");
//判断是否存在记录 如果存在 则更新 维度 staffId attendanceDate shiftsId attendanceGroupId
AttendanceRecordQuery query = new AttendanceRecordQuery();
query.setStaffId(attendanceRecordEntity.getStaffId());
query.setShiftsId(attendanceRecordEntity.getShiftsId());
query.setAttendanceGroupId(attendanceRecordEntity.getAttendanceGroupId());
query.setAttendanceDate(attendanceRecordEntity.getAttendanceDate());
AttendanceRecordEntity recordEntity = attendanceRecordService.selectOne(query);
if (!ObjectUtils.isEmpty(recordEntity)) {
attendanceRecordEntity.setId(recordEntity.getId());
attendanceRecordEntity.setUpdateTime(new Date());
attendanceRecordEntity.setUpdateUserId(this.getContextUserId(context));
attendanceRecordService.update(attendanceRecordEntity, context);
} else {
attendanceRecordService.save(attendanceRecordEntity, context);
}
}
}
}
/* //map遍历.先把所有键取出来
Set<String> workNumSet = listMap.keySet();
//根据键取出value
for (String workNum : workNumSet) {
......@@ -119,7 +305,6 @@ public class AttendanceRecordHikServiceImpl extends AbstractCRUDServiceImpl<Atte
AttendanceGroupEntity attendanceGroupEntity = attendanceGroupService.selectOne(attendanceGroupQuery.id(attendanceGroupStaffEntities.get(0).getGroupId()));
attendanceRecordEntity.setAttendanceGroupId(attendanceGroupEntity.getId());
attendanceRecordEntity.setAttendanceGroupName(attendanceGroupEntity.getGroupName());
//log.info("attendanceGroupEntity.getId()=={}", attendanceGroupEntity.getId());
//查询考勤组详细信息获取班次
AttendanceGroupFixedworkEntity attendanceGroupFixedworkEntity = attendanceGroupFixedworkService.selectOne(new AttendanceGroupFixedworkQuery()
......@@ -455,17 +640,117 @@ public class AttendanceRecordHikServiceImpl extends AbstractCRUDServiceImpl<Atte
attendanceRecordService.save(attendanceRecordEntity, context);
}
}
}
}*/
}
private void checkAttendGroupByOne(AttendanceRecordEntity attendanceRecordEntity, List<AttendanceRecordDetailEntity> detailEntityList, Date attendanceDate, AttendanceGroupStaffEntity attendanceGroupStaffEntity, Context context) {
//查询考勤组
AttendanceGroupEntity attendanceGroupEntity = attendanceGroupService.get(attendanceGroupStaffEntity.getGroupId(), context);
attendanceRecordEntity.setAttendanceGroupId(attendanceGroupEntity == null ? 0L : attendanceGroupEntity.getId());
attendanceRecordEntity.setAttendanceGroupName(attendanceGroupEntity == null ? "" : attendanceGroupEntity.getGroupName());
//查询考勤组详细信息获取班次
AttendanceGroupFixedworkEntity attendanceGroupFixedworkEntity = attendanceGroupFixedworkService.selectOne(new AttendanceGroupFixedworkQuery()
.groupId(attendanceGroupEntity.getId()));
//判断当前考勤日期为周几
String week = this.getWeek(attendanceDate);
//log.info("week:{}", week);
//通过考勤日期的星期拿到班次id.
if (ObjectUtils.isEmpty(attendanceGroupFixedworkEntity)) {
log.info("attendanceGroupFixedworkEntity is null ! groupId:{}", attendanceGroupEntity.getId());
return;
}
Long weekClassId = this.getWeekClassId(attendanceGroupFixedworkEntity, week);
//log.info("weekClassId:{}", weekClassId);
//weekClassId为-1 则不在考勤
if (weekClassId == -1L) {
//跳过本次循环
return;
}
//获取班次信息
AttendanceClassEntity attendanceClassEntity = attendanceClassService.get(weekClassId);
if (ObjectUtils.isEmpty(attendanceClassEntity)) {
log.info("attendanceClassEntity is null ,weekClassId:{}", weekClassId);
return;
}
//获取班次详细信息
List<AttendanceClassDetailEntity> attendanceClassDetailEntities = attendanceClassDetailService.find(new AttendanceClassDetailQuery().classId(attendanceClassEntity.getId()));
Integer orderNum = 0;
//构造数据
if (ObjectUtils.isEmpty(detailEntityList)) {
for (AttendanceClassDetailEntity classDetailEntity : attendanceClassDetailEntities) {
orderNum++;
AttendanceRecordDetailEntity recordDetailEntity = new AttendanceRecordDetailEntity();
recordDetailEntity.setShiftsId(classDetailEntity.getId());
recordDetailEntity.setShiftsName(classDetailEntity.getClassName());
recordDetailEntity.setGoWorkResult(GoWorkResultEnum.缺卡.getValue());
recordDetailEntity.setOffWorkResult(GoWorkResultEnum.缺卡.getValue());
recordDetailEntity.setOrderNum(orderNum);
detailEntityList.add(recordDetailEntity);
}
}
for (AttendanceClassDetailEntity classDetail : attendanceClassDetailEntities) {
//计算区间范围
//上班打卡前时间
Date goWorkDateBefore = DateUtil.offsetMinute(classDetail.getGoWorkDate(), -classDetail.getGoWorkDateBefore());
//上班打卡后时间
Date goWorkDateAfter = DateUtil.offsetMinute(classDetail.getGoWorkDate(), classDetail.getGoWorkDateAfter());
// 下班打卡前时间
Date offWorkDateBefore = DateUtil.offsetMinute(classDetail.getOffWorkDate(), -classDetail.getOffWorkDateBefore());
//下班打卡后时间
Date offWorkDateAfter = DateUtil.offsetMinute(classDetail.getOffWorkDate(), classDetail.getOffWorkDateAfter());
//判断考勤时间是否在上班打卡区间内 true 在 false 不在
boolean goInTime = DateUtil.isIn(attendanceDate, goWorkDateBefore, goWorkDateAfter);
//判断考勤时间是否在下班打卡区间内
boolean offInTime = DateUtil.isIn(attendanceDate, offWorkDateBefore, offWorkDateAfter);
if (goInTime == false && offInTime == false) {
log.info("考勤时间不在上班区间与下班区间中,不做处理!attendDate:{}", DateUtil.formatDateTime(attendanceDate));
continue;
}
if (goInTime) {
//如果是上班打卡区间范围,判断是否迟到
boolean inTime = DateUtil.isIn(attendanceDate, goWorkDateBefore, classDetail.getGoWorkDate());
if (inTime) {
for (AttendanceRecordDetailEntity attendanceRecordDetailEntity : detailEntityList) {
if (attendanceRecordDetailEntity.getShiftsId() == classDetail.getClassId()) {
attendanceRecordDetailEntity.setGoWorkResult(GoWorkResultEnum.正常.getValue());
attendanceRecordDetailEntity.setGoWorkDate(attendanceDate);
}
}
} else {
for (AttendanceRecordDetailEntity attendanceRecordDetailEntity : detailEntityList) {
if (attendanceRecordDetailEntity.getShiftsId() == classDetail.getClassId()) {
attendanceRecordDetailEntity.setGoWorkResult(GoWorkResultEnum.迟到.getValue());
attendanceRecordDetailEntity.setGoWorkDate(attendanceDate);
}
}
}
}
if (offInTime) {
boolean inTime = DateUtil.isIn(attendanceDate, classDetail.getOffWorkDate(), offWorkDateAfter);
if (inTime) {
for (AttendanceRecordDetailEntity attendanceRecordDetailEntity : detailEntityList) {
if (attendanceRecordDetailEntity.getShiftsId().longValue() == classDetail.getId().longValue()) {
attendanceRecordDetailEntity.setGoWorkResult(GoWorkResultEnum.正常.getValue());
attendanceRecordDetailEntity.setGoWorkDate(attendanceDate);
}
}
} else {
for (AttendanceRecordDetailEntity attendanceRecordDetailEntity : detailEntityList) {
if (attendanceRecordDetailEntity.getShiftsId().longValue() == classDetail.getId().longValue()) {
attendanceRecordDetailEntity.setOffWorkResult(GoWorkResultEnum.早退.getValue());
attendanceRecordDetailEntity.setOffWorkDate(attendanceDate);
}
}
}
}
}
}
public String getWeek(Date date) {
public String getWeek(Date date) {
// Get the day of the week (1 = Sunday, 2 = Monday, ..., 7 = Saturday)
int dayOfWeek = DateUtil.dayOfWeek(date);
// Map the numeric day of the week to its corresponding Chinese name
String[] dayOfWeekNames = new String[]{
"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"
......@@ -473,74 +758,8 @@ public class AttendanceRecordHikServiceImpl extends AbstractCRUDServiceImpl<Atte
// Get the Chinese name of the day of the week
String dayOfWeekName = dayOfWeekNames[dayOfWeek - 1];
return dayOfWeekName;
//
// SimpleDateFormat sdf = new SimpleDateFormat("EEEE");
// String week = sdf.format(date);
// return week;
}
/**
* 获取通过星期获取班次id 如果返参为-1 则不在考勤
*
* @return
*/
/* public Long getWeekClassId(AttendanceGroupFixedworkEntity attendanceGroupFixedworkEntity, String week) {
Long weekClassId = 0L;
switch (week) {
case "星期一":
if (attendanceGroupFixedworkEntity.getMonday() == 0) {
weekClassId = -1L;
return weekClassId;
}
weekClassId = attendanceGroupFixedworkEntity.getMondayClassId();
break;
case "星期二":
if (attendanceGroupFixedworkEntity.getTuesday() == 0) {
weekClassId = -1L;
return weekClassId;
}
weekClassId = attendanceGroupFixedworkEntity.getTuesdayClassId();
break;
case "星期三":
if (attendanceGroupFixedworkEntity.getWednesday() == 0) {
weekClassId = -1L;
return weekClassId;
}
weekClassId = attendanceGroupFixedworkEntity.getWednesdayClassId();
break;
case "星期四":
if (attendanceGroupFixedworkEntity.getThursday() == 0) {
weekClassId = -1L;
return weekClassId;
}
weekClassId = attendanceGroupFixedworkEntity.getThursdayClassId();
break;
case "星期五":
if (attendanceGroupFixedworkEntity.getFriday() == 0) {
weekClassId = -1L;
return weekClassId;
}
weekClassId = attendanceGroupFixedworkEntity.getFridayClassId();
break;
case "星期六":
if (attendanceGroupFixedworkEntity.getSaturday() == 0) {
weekClassId = -1L;
return weekClassId;
}
weekClassId = attendanceGroupFixedworkEntity.getSaturdayClassId();
break;
case "星期日":
if (attendanceGroupFixedworkEntity.getSunday() == 0) {
weekClassId = -1L;
return weekClassId;
}
weekClassId = attendanceGroupFixedworkEntity.getSundayClassId();
break;
}
return weekClassId;
}*/
/**
* 获取通过星期获取班次id 如果返参为-1 则不在考勤
*
......
package com.mortals.xhx.module.attendance.web;
import com.mortals.framework.exception.AppException;
import com.mortals.framework.model.OrderCol;
import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
import com.mortals.xhx.base.system.param.service.ParamService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
......@@ -47,5 +50,13 @@ public class AttendanceExportRecordController extends BaseCRUDJsonBodyMappingCon
super.init(model, context);
}
@Override
protected void doListBefore(AttendanceExportRecordEntity query, Map<String, Object> model, Context context) throws AppException {
if (ObjectUtils.isEmpty(query.getOrderColList())) {
query.setOrderColList(Arrays.asList(new OrderCol("createTime", OrderCol.DESCENDING),new OrderCol("staffName", OrderCol.DESCENDING)));
} else {
query.getOrderColList().add(new OrderCol("createTime", OrderCol.DESCENDING));
}
}
}
package com.mortals.xhx.module.attendance.web;
import com.mortals.framework.annotation.UnAuth;
import com.mortals.framework.common.Rest;
import com.mortals.framework.exception.AppException;
......@@ -19,8 +20,10 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import com.mortals.framework.model.Context;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
import org.apache.commons.lang3.ArrayUtils;
import com.mortals.framework.util.StringUtils;
......@@ -28,20 +31,22 @@ import com.mortals.framework.util.StringUtils;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
import com.alibaba.fastjson.JSONObject;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import static com.mortals.framework.ap.SysConstains.*;
/**
*
* 考勤打卡记录异常信息
*
* @author zxfei
* @date 2023-04-08
*/
* 考勤打卡记录异常信息
*
* @author zxfei
* @date 2023-04-08
*/
@RestController
@RequestMapping("attendance/record/error")
public class AttendanceRecordErrorController extends BaseCRUDJsonBodyMappingController<AttendanceRecordErrorService,AttendanceRecordErrorEntity,Long> {
public class AttendanceRecordErrorController extends BaseCRUDJsonBodyMappingController<AttendanceRecordErrorService, AttendanceRecordErrorEntity, Long> {
@Autowired
private ParamService paramService;
......@@ -67,17 +72,17 @@ public class AttendanceRecordErrorController extends BaseCRUDJsonBodyMappingCont
@Autowired
private AttendanceRecordErrorService errorService;
public AttendanceRecordErrorController(){
super.setModuleDesc( "考勤打卡记录异常信息");
public AttendanceRecordErrorController() {
super.setModuleDesc("考勤打卡记录异常信息");
}
@Override
protected void init(Map<String, Object> model, Context context) {
this.addDict(model, "errorStatus", ErrorStatusEnum.getEnumMap());
this.addDict(model, "processStatus", paramService.getParamBySecondOrganize("AttendanceRecordError","processStatus"));
this.addDict(model,"deptId",deptService.find(new DeptQuery()).stream().collect(Collectors.toMap(x->x.getId().toString(), y->y.getDeptName())));
this.addDict(model,"groupId",attendanceGroupService.find(new AttendanceGroupQuery()).stream().collect(Collectors.toMap(x->x.getId().toString(), y->y.getGroupName())));
this.addDict(model,"classId",attendanceClassService.find(new AttendanceClassQuery()).stream().collect(Collectors.toMap(x->x.getId().toString(), y->y.getClassName())));
this.addDict(model, "processStatus", paramService.getParamBySecondOrganize("AttendanceRecordError", "processStatus"));
this.addDict(model, "deptId", deptService.find(new DeptQuery()).stream().collect(Collectors.toMap(x -> x.getId().toString(), y -> y.getDeptName())));
this.addDict(model, "groupId", attendanceGroupService.find(new AttendanceGroupQuery()).stream().collect(Collectors.toMap(x -> x.getId().toString(), y -> y.getGroupName())));
this.addDict(model, "classId", attendanceClassService.find(new AttendanceClassQuery()).stream().collect(Collectors.toMap(x -> x.getId().toString(), y -> y.getClassName())));
super.init(model, context);
}
......@@ -92,11 +97,11 @@ public class AttendanceRecordErrorController extends BaseCRUDJsonBodyMappingCont
query.setProcessResult("已撤销处理");
errorService.update(query);
DateUtils.convertTime2Str(query.getErrorDateTime().getTime(),DateUtils.P_yyyy_MM_dd);
DateUtils.convertTime2Str(query.getErrorDateTime().getTime(), DateUtils.P_yyyy_MM_dd);
AttendanceRecordQuery attendanceRecordQuery = new AttendanceRecordQuery();
attendanceRecordQuery.setStaffId(query.getStaffId());
attendanceRecordQuery.setAttendanceDateStart(DateUtils.convertTime2Str(query.getErrorDateTime().getTime(),DateUtils.P_yyyy_MM_dd));
attendanceRecordQuery.setAttendanceDateEnd(DateUtils.convertTime2Str(query.getErrorDateTime().getTime(),DateUtils.P_yyyy_MM_dd));
attendanceRecordQuery.setAttendanceDateStart(DateUtils.convertTime2Str(query.getErrorDateTime().getTime(), DateUtils.P_yyyy_MM_dd));
attendanceRecordQuery.setAttendanceDateEnd(DateUtils.convertTime2Str(query.getErrorDateTime().getTime(), DateUtils.P_yyyy_MM_dd));
AttendanceRecordEntity attendanceRecordEntity = attendanceRecordService.selectOne(attendanceRecordQuery);
AttendanceRecordDetailQuery detailQuery = new AttendanceRecordDetailQuery();
detailQuery.setRecordId(attendanceRecordEntity.getId());
......@@ -104,25 +109,25 @@ public class AttendanceRecordErrorController extends BaseCRUDJsonBodyMappingCont
List<AttendanceRecordDetailEntity> attendanceRecordDetailEntity = attendanceRecordDetailService.find(detailQuery);
for (AttendanceRecordDetailEntity recordDetailEntity : attendanceRecordDetailEntity) {
if (query.getGoOrOff().equals("上班")){
if (query.getErrorStatus()==0){
if (query.getGoOrOff().equals("上班")) {
if (query.getErrorStatus() == 0) {
recordDetailEntity.setGoWorkResult(3);
}
if (query.getErrorStatus()==2){
if (query.getErrorStatus() == 2) {
recordDetailEntity.setGoWorkResult(4);
}
}
if (query.getGoOrOff().equals("下班")){
if (query.getErrorStatus()==0){
if (query.getGoOrOff().equals("下班")) {
if (query.getErrorStatus() == 0) {
recordDetailEntity.setOffWorkResult(3);
}
if (query.getErrorStatus()==1){
if (query.getErrorStatus() == 1) {
recordDetailEntity.setOffWorkResult(5);
}
}
}
return Rest.ok();
return Rest.ok();
}
......@@ -139,11 +144,11 @@ public class AttendanceRecordErrorController extends BaseCRUDJsonBodyMappingCont
this.batchSave(entity.getRecordErrorEntities());
for (AttendanceRecordErrorEntity item : entity.getRecordErrorEntities()) {
DateUtils.convertTime2Str(item.getErrorDateTime().getTime(),DateUtils.P_yyyy_MM_dd);
DateUtils.convertTime2Str(item.getErrorDateTime().getTime(), DateUtils.P_yyyy_MM_dd);
AttendanceRecordQuery attendanceRecordQuery = new AttendanceRecordQuery();
attendanceRecordQuery.setStaffId(item.getStaffId());
attendanceRecordQuery.setAttendanceDateStart(DateUtils.convertTime2Str(item.getErrorDateTime().getTime(),DateUtils.P_yyyy_MM_dd));
attendanceRecordQuery.setAttendanceDateEnd(DateUtils.convertTime2Str(item.getErrorDateTime().getTime(),DateUtils.P_yyyy_MM_dd));
attendanceRecordQuery.setAttendanceDateStart(DateUtils.convertTime2Str(item.getErrorDateTime().getTime(), DateUtils.P_yyyy_MM_dd));
attendanceRecordQuery.setAttendanceDateEnd(DateUtils.convertTime2Str(item.getErrorDateTime().getTime(), DateUtils.P_yyyy_MM_dd));
AttendanceRecordEntity attendanceRecordEntity = attendanceRecordService.selectOne(attendanceRecordQuery);
AttendanceRecordDetailQuery detailQuery = new AttendanceRecordDetailQuery();
detailQuery.setRecordId(attendanceRecordEntity.getId());
......@@ -153,46 +158,46 @@ public class AttendanceRecordErrorController extends BaseCRUDJsonBodyMappingCont
for (AttendanceRecordDetailEntity recordDetailEntity : attendanceRecordDetailEntity) {
Date goWorkDate = recordDetailEntity.getGoWorkDate();
Date offWorkDate = recordDetailEntity.getOffWorkDate();
if (item.getProcessResult().contains("正常")){
if (!ObjectUtils.isEmpty(goWorkDate)){
if (goWorkDate.getTime()==item.getGoOffDateTime().getTime()){
if (item.getProcessResult().contains("正常")) {
if (!ObjectUtils.isEmpty(goWorkDate)) {
if (goWorkDate.getTime() == item.getGoOffDateTime().getTime()) {
recordDetailEntity.setGoWorkResult(1);
}
}else {
if (item.getGoOrOff().equals("上班")){
} else {
if (item.getGoOrOff().equals("上班")) {
recordDetailEntity.setGoWorkResult(1);
}
}
if (!ObjectUtils.isEmpty(offWorkDate)){
if (offWorkDate.getTime()==item.getGoOffDateTime().getTime()){
if (!ObjectUtils.isEmpty(offWorkDate)) {
if (offWorkDate.getTime() == item.getGoOffDateTime().getTime()) {
recordDetailEntity.setOffWorkResult(1);
}
}else {
if (item.getGoOrOff().equals("下班")){
} else {
if (item.getGoOrOff().equals("下班")) {
recordDetailEntity.setOffWorkResult(1);
}
}
}
if (item.getProcessResult().contains("早退")){
if (!ObjectUtils.isEmpty(offWorkDate)){
if (offWorkDate.getTime()==item.getGoOffDateTime().getTime()){
if (item.getProcessResult().contains("早退")) {
if (!ObjectUtils.isEmpty(offWorkDate)) {
if (offWorkDate.getTime() == item.getGoOffDateTime().getTime()) {
recordDetailEntity.setOffWorkResult(5);
}
}else{
if (item.getGoOrOff().equals("下班")){
} else {
if (item.getGoOrOff().equals("下班")) {
recordDetailEntity.setOffWorkResult(5);
}
}
}
if (item.getProcessResult().contains("迟到")){
if (!ObjectUtils.isEmpty(goWorkDate)){
if (goWorkDate.getTime()==item.getGoOffDateTime().getTime()){
if (item.getProcessResult().contains("迟到")) {
if (!ObjectUtils.isEmpty(goWorkDate)) {
if (goWorkDate.getTime() == item.getGoOffDateTime().getTime()) {
recordDetailEntity.setGoWorkResult(4);
}
}else {
if (item.getGoOrOff().equals("上班")){
} else {
if (item.getGoOrOff().equals("上班")) {
recordDetailEntity.setGoWorkResult(4);
}
}
......@@ -205,7 +210,7 @@ public class AttendanceRecordErrorController extends BaseCRUDJsonBodyMappingCont
@Override
protected int editAfter(Long id, Map<String, Object> model, AttendanceRecordErrorEntity entity, Context context) throws AppException {
this.addDict(model, "errorStatus", paramService.getParamBySecondOrganize("AttendanceRecordDetail","goWorkResult"));
this.addDict(model, "errorStatus", paramService.getParamBySecondOrganize("AttendanceRecordDetail", "goWorkResult"));
return super.editAfter(id, model, entity, context);
}
......@@ -214,11 +219,13 @@ public class AttendanceRecordErrorController extends BaseCRUDJsonBodyMappingCont
for (AttendanceRecordErrorEntity errorEntity : list) {
Long shiftsId = errorEntity.getShiftsId();
AttendanceClassDetailEntity attendanceClassDetailEntity = classDetailService.selectOne(new AttendanceClassDetailQuery().id(shiftsId));
if (errorEntity.getGoOffDateTime().getTime()==attendanceClassDetailEntity.getGoWorkDate().getTime()){
errorEntity.setGoOrOff("上班");
}
if (errorEntity.getGoOffDateTime().getTime()==attendanceClassDetailEntity.getOffWorkDate().getTime()){
errorEntity.setGoOrOff("下班");
if (!ObjectUtils.isEmpty(attendanceClassDetailEntity)) {
if (errorEntity.getGoOffDateTime().getTime() == attendanceClassDetailEntity.getGoWorkDate().getTime()) {
errorEntity.setGoOrOff("上班");
}
if (errorEntity.getGoOffDateTime().getTime() == attendanceClassDetailEntity.getOffWorkDate().getTime()) {
errorEntity.setGoOrOff("下班");
}
}
}
super.doListAfter(query, list, context);
......
......@@ -127,7 +127,7 @@ public class AttendanceRecordHikController extends BaseCRUDJsonBodyMappingContro
if (ObjectUtils.isEmpty(hikEntity.getAttendanceDateStart())) {
throw new AppException("请选择开始日期");
}
hikService.addAttendanceRecord(hikEntity, getContext());
hikService.addAttendanceRecordByQuery(hikEntity, getContext());
model.put("message_info", busiDesc + "成功");
this.recordSysLog(this.request, busiDesc + " 【成功】");
} catch (Exception e) {
......
......@@ -5,11 +5,14 @@ import com.mortals.xhx.base.system.param.service.ParamService;
import com.mortals.xhx.common.code.AllHolidaysEnum;
import com.mortals.xhx.module.attendance.model.AttendanceVacationBalanceEntity;
import com.mortals.xhx.module.attendance.service.AttendanceVacationBalanceService;
import com.mortals.xhx.module.dept.model.DeptQuery;
import com.mortals.xhx.module.dept.service.DeptService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
import java.util.stream.Collectors;
/**
*
......@@ -25,6 +28,9 @@ public class AttendanceVacationBalanceController extends BaseCRUDJsonBodyMapping
@Autowired
private ParamService paramService;
@Autowired
private DeptService deptService;
public AttendanceVacationBalanceController(){
super.setModuleDesc( "员工假期余额信息");
......@@ -33,6 +39,7 @@ public class AttendanceVacationBalanceController extends BaseCRUDJsonBodyMapping
@Override
protected void init(Map<String, Object> model, Context context) {
this.addDict(model,"AllHolidays",AllHolidaysEnum.getEnumMap());
this.addDict(model, "deptId", deptService.find(new DeptQuery()).stream().collect(Collectors.toMap(x -> x.getId().toString(), y -> y.getDeptName())));
super.init(model, context);
}
......
package com.mortals.xhx.module.check.model;
import com.mortals.framework.model.OrderCol;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
@Data
public class CheckAllRecordQuery {
/**
......@@ -34,5 +38,6 @@ public class CheckAllRecordQuery {
*/
private Integer subAddType;
private transient List<OrderCol> orderColList = new ArrayList();
}
......@@ -227,7 +227,7 @@ public class CheckAttendRecordServiceImpl extends AbstractCRUDServiceImpl<CheckA
erro = erro.add(staffPerformSummaryEntity.getComplainScore());
staffPerformSummaryEntity.setErrorScore(erro);
BigDecimal total = new BigDecimal(100);
staffPerformSummaryEntity.setTotalScore(total.subtract(erro));
staffPerformSummaryEntity.setTotalScore(total.add(erro));
staffPerformSummaryEntity.setId(temp.getId());
staffPerformSummaryEntity.setUpdateTime(new Date());
staffPerformSummaryService.update(staffPerformSummaryEntity);
......@@ -238,7 +238,7 @@ public class CheckAttendRecordServiceImpl extends AbstractCRUDServiceImpl<CheckA
staffPerformSummaryEntity.setEffectScore(new BigDecimal(0));
staffPerformSummaryEntity.setErrorScore(vo.getSumScore());
BigDecimal total = new BigDecimal(100);
staffPerformSummaryEntity.setTotalScore(total.subtract(vo.getSumScore()));
staffPerformSummaryEntity.setTotalScore(total.add(vo.getSumScore()));
staffPerformSummaryEntity.setCreateUserId(1l);
staffPerformSummaryEntity.setCreateTime(new Date());
staffPerformSummaryService.save(staffPerformSummaryEntity);
......
......@@ -222,7 +222,7 @@ public class CheckComplainRecordServiceImpl extends AbstractCRUDServiceImpl<Chec
erro = erro.add(staffPerformSummaryEntity.getComplainScore());
staffPerformSummaryEntity.setErrorScore(erro);
BigDecimal total = new BigDecimal(100);
staffPerformSummaryEntity.setTotalScore(total.subtract(erro));
staffPerformSummaryEntity.setTotalScore(total.add(erro));
staffPerformSummaryEntity.setId(temp.getId());
staffPerformSummaryEntity.setUpdateTime(new Date());
staffPerformSummaryService.update(staffPerformSummaryEntity);
......@@ -236,7 +236,7 @@ public class CheckComplainRecordServiceImpl extends AbstractCRUDServiceImpl<Chec
staffPerformSummaryEntity.setEffectScore(new BigDecimal(0));
staffPerformSummaryEntity.setErrorScore(vo.getSumScore());
BigDecimal total = new BigDecimal(100);
staffPerformSummaryEntity.setTotalScore(total.subtract(vo.getSumScore()));
staffPerformSummaryEntity.setTotalScore(total.add(vo.getSumScore()));
staffPerformSummaryEntity.setCreateUserId(1l);
staffPerformSummaryEntity.setCreateTime(new Date());
staffPerformSummaryService.save(staffPerformSummaryEntity);
......
......@@ -222,7 +222,7 @@ public class CheckEffectRecordServiceImpl extends AbstractCRUDServiceImpl<CheckE
erro = erro.add(staffPerformSummaryEntity.getComplainScore());
staffPerformSummaryEntity.setErrorScore(erro);
BigDecimal total = new BigDecimal(100);
staffPerformSummaryEntity.setTotalScore(total.subtract(erro));
staffPerformSummaryEntity.setTotalScore(total.add(erro));
staffPerformSummaryEntity.setId(temp.getId());
staffPerformSummaryEntity.setUpdateTime(new Date());
staffPerformSummaryService.update(staffPerformSummaryEntity);
......@@ -236,7 +236,7 @@ public class CheckEffectRecordServiceImpl extends AbstractCRUDServiceImpl<CheckE
staffPerformSummaryEntity.setGoworkScore(new BigDecimal(0));
staffPerformSummaryEntity.setErrorScore(vo.getSumScore());
BigDecimal total = new BigDecimal(100);
staffPerformSummaryEntity.setTotalScore(total.subtract(vo.getSumScore()));
staffPerformSummaryEntity.setTotalScore(total.add(vo.getSumScore()));
staffPerformSummaryEntity.setCreateUserId(1l);
staffPerformSummaryEntity.setCreateTime(new Date());
staffPerformSummaryService.save(staffPerformSummaryEntity);
......
......@@ -221,7 +221,7 @@ public class CheckGoworkRecordServiceImpl extends AbstractCRUDServiceImpl<CheckG
erro = erro.add(staffPerformSummaryEntity.getComplainScore());
staffPerformSummaryEntity.setErrorScore(erro);
BigDecimal total = new BigDecimal(100);
staffPerformSummaryEntity.setTotalScore(total.subtract(erro));
staffPerformSummaryEntity.setTotalScore(total.add(erro));
staffPerformSummaryEntity.setId(temp.getId());
staffPerformSummaryEntity.setUpdateTime(new Date());
staffPerformSummaryService.update(staffPerformSummaryEntity);
......@@ -235,7 +235,7 @@ public class CheckGoworkRecordServiceImpl extends AbstractCRUDServiceImpl<CheckG
staffPerformSummaryEntity.setEffectScore(new BigDecimal(0));
staffPerformSummaryEntity.setErrorScore(vo.getSumScore());
BigDecimal total = new BigDecimal(100);
staffPerformSummaryEntity.setTotalScore(total.subtract(vo.getSumScore()));
staffPerformSummaryEntity.setTotalScore(total.add(vo.getSumScore()));
staffPerformSummaryEntity.setCreateUserId(1l);
staffPerformSummaryEntity.setCreateTime(new Date());
staffPerformSummaryService.save(staffPerformSummaryEntity);
......
......@@ -226,7 +226,7 @@ public class CheckOtherRecordServiceImpl extends AbstractCRUDServiceImpl<CheckOt
erro = erro.add(staffPerformSummaryEntity.getComplainScore());
staffPerformSummaryEntity.setErrorScore(erro);
BigDecimal total = new BigDecimal(100);
staffPerformSummaryEntity.setTotalScore(total.subtract(erro));
staffPerformSummaryEntity.setTotalScore(total.add(erro));
staffPerformSummaryEntity.setId(temp.getId());
staffPerformSummaryEntity.setUpdateTime(new Date());
staffPerformSummaryService.update(staffPerformSummaryEntity);
......@@ -240,7 +240,7 @@ public class CheckOtherRecordServiceImpl extends AbstractCRUDServiceImpl<CheckOt
staffPerformSummaryEntity.setEffectScore(new BigDecimal(0));
staffPerformSummaryEntity.setErrorScore(vo.getSumScore());
BigDecimal total = new BigDecimal(100);
staffPerformSummaryEntity.setTotalScore(total.subtract(vo.getSumScore()));
staffPerformSummaryEntity.setTotalScore(total.add(vo.getSumScore()));
staffPerformSummaryEntity.setCreateUserId(1l);
staffPerformSummaryEntity.setCreateTime(new Date());
staffPerformSummaryService.save(staffPerformSummaryEntity);
......
......@@ -226,7 +226,7 @@ public class CheckReviewRecordServiceImpl extends AbstractCRUDServiceImpl<CheckR
erro = erro.add(staffPerformSummaryEntity.getComplainScore());
staffPerformSummaryEntity.setErrorScore(erro);
BigDecimal total = new BigDecimal(100);
staffPerformSummaryEntity.setTotalScore(total.subtract(erro));
staffPerformSummaryEntity.setTotalScore(total.add(erro));
staffPerformSummaryEntity.setId(temp.getId());
staffPerformSummaryEntity.setUpdateTime(new Date());
staffPerformSummaryService.update(staffPerformSummaryEntity);
......@@ -240,7 +240,7 @@ public class CheckReviewRecordServiceImpl extends AbstractCRUDServiceImpl<CheckR
staffPerformSummaryEntity.setEffectScore(new BigDecimal(0));
staffPerformSummaryEntity.setErrorScore(vo.getSumScore());
BigDecimal total = new BigDecimal(100);
staffPerformSummaryEntity.setTotalScore(total.subtract(vo.getSumScore()));
staffPerformSummaryEntity.setTotalScore(total.add(vo.getSumScore()));
staffPerformSummaryEntity.setCreateUserId(1l);
staffPerformSummaryEntity.setCreateTime(new Date());
staffPerformSummaryService.save(staffPerformSummaryEntity);
......
package com.mortals.xhx.module.dept.model;
import java.math.BigDecimal;
import java.util.List;
import java.util.ArrayList;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.Date;
import cn.hutool.core.date.DateUtil;
import com.mortals.framework.annotation.Excel;
import com.mortals.framework.model.BaseEntityLong;
import com.mortals.xhx.module.dept.model.vo.DeptPerformStatVo;
import lombok.Data;
/**
* 部门绩效分数统计实体对象
*
* @author zxfei
* @date 2023-07-14
*/
* 部门绩效分数统计实体对象
*
* @author zxfei
* @date 2023-07-20
*/
@Data
public class DeptPerformStatEntity extends DeptPerformStatVo {
private static final long serialVersionUID = 1L;
/**
* 部门id号
*/
* 部门id号
*/
private Long deptId;
/**
* 部门名称
*/
* 部门名称
*/
private String deptName;
/**
* 部门绩效总分数
*/
* 部门绩效总分数
*/
@Excel(name = "部门绩效总分数")
private BigDecimal totalScore;
/**
* 部门绩效加分总分数汇总
*/
* 部门绩效加分总分数汇总
*/
@Excel(name = "部门绩效加分总分数汇总")
private BigDecimal totalAddScore;
/**
* 部门绩效减分总分数汇总
*/
* 部门绩效减分总分数汇总
*/
@Excel(name = "部门绩效减分总分数汇总")
private BigDecimal totalSubScore;
/**
* 考勤绩效指标增加分数
*/
* 考勤绩效指标增加分数
*/
private BigDecimal attendScoreAdd;
/**
* 考勤绩效指标扣减分数
*/
* 考勤绩效指标扣减分数
*/
private BigDecimal attendScoreSub;
/**
* 评价绩效指标增加分数
*/
* 评价绩效指标增加分数
*/
private BigDecimal reviewScoreAdd;
/**
* 评价绩效指标扣减分数
*/
* 评价绩效指标扣减分数
*/
private BigDecimal reviewScoreSub;
/**
* 投诉绩效指标增加分数
*/
* 投诉绩效指标增加分数
*/
private BigDecimal complainScoreAdd;
/**
* 投诉绩效指标扣减分数
*/
* 投诉绩效指标扣减分数
*/
private BigDecimal complainScoreSub;
/**
* 办件绩效指标增加分数
*/
* 办件绩效指标增加分数
*/
private BigDecimal goworkScoreAdd;
/**
* 办件绩效指标扣减分数
*/
* 办件绩效指标扣减分数
*/
private BigDecimal goworkScoreSub;
/**
* 效能绩效指标增加分数
*/
* 效能绩效指标增加分数
*/
private BigDecimal effectScoreAdd;
/**
* 效能绩效指标扣减分数
*/
* 效能绩效指标扣减分数
*/
private BigDecimal effectScoreSub;
/**
* 其它绩效指标增加分数
*/
* 其它绩效指标增加分数
*/
private BigDecimal otherScoreAdd;
/**
* 其它绩效指标扣减分数
*/
* 其它绩效指标扣减分数
*/
private BigDecimal otherScoreSub;
/**
* 部门绩效平均分数,根据部门所属人数平均
*/
* 部门绩效平均分数,根据部门所属人数平均
*/
@Excel(name = "部门绩效平均分数,根据部门所属人数平均")
private BigDecimal averageScore;
/**
* 备注
*/
* 备注
*/
private String remark;
/**
* 年
*/
* 年
*/
private Integer year;
/**
* 月
*/
* 月
*/
private Integer month;
/**
* 日
*/
* 日
*/
private Integer day;
@Override
public int hashCode() {
return this.getId().hashCode();
return this.getId().hashCode();
}
@Override
public boolean equals(Object obj) {
......@@ -119,7 +117,7 @@ public class DeptPerformStatEntity extends DeptPerformStatVo {
if (obj instanceof DeptPerformStatEntity) {
DeptPerformStatEntity tmp = (DeptPerformStatEntity) obj;
if (this.getId() == tmp.getId()) {
return true;
return true;
}
}
return false;
......@@ -127,48 +125,48 @@ public class DeptPerformStatEntity extends DeptPerformStatVo {
public void initAttrValue(){
this.deptId = 0L;
this.deptId = 0L;
this.deptName = "";
this.deptName = "";
this.totalScore = new BigDecimal(0);
this.totalScore = new BigDecimal(0);
this.totalAddScore = new BigDecimal(0);
this.totalAddScore = new BigDecimal(0);
this.totalSubScore = new BigDecimal(0);
this.totalSubScore = new BigDecimal(0);
this.attendScoreAdd = new BigDecimal(0);
this.attendScoreAdd = new BigDecimal(0);
this.attendScoreSub = new BigDecimal(0);
this.attendScoreSub = new BigDecimal(0);
this.reviewScoreAdd = new BigDecimal(0);
this.reviewScoreAdd = new BigDecimal(0);
this.reviewScoreSub = new BigDecimal(0);
this.reviewScoreSub = new BigDecimal(0);
this.complainScoreAdd = new BigDecimal(0);
this.complainScoreAdd = new BigDecimal(0);
this.complainScoreSub = new BigDecimal(0);
this.complainScoreSub = new BigDecimal(0);
this.goworkScoreAdd = new BigDecimal(0);
this.goworkScoreAdd = new BigDecimal(0);
this.goworkScoreSub = new BigDecimal(0);
this.goworkScoreSub = new BigDecimal(0);
this.effectScoreAdd = new BigDecimal(0);
this.effectScoreAdd = new BigDecimal(0);
this.effectScoreSub = new BigDecimal(0);
this.effectScoreSub = new BigDecimal(0);
this.otherScoreAdd = new BigDecimal(0);
this.otherScoreAdd = new BigDecimal(0);
this.otherScoreSub = new BigDecimal(0);
this.otherScoreSub = new BigDecimal(0);
this.averageScore = new BigDecimal(0);
this.averageScore = new BigDecimal(0);
this.remark = "";
this.remark = "";
this.year = -1;
this.year = DateUtil.year(new Date());
this.month = -1;
this.month = DateUtil.month(new Date())+1;
this.day = -1;
this.day = DateUtil.dayOfMonth(new Date());
}
}
\ No newline at end of file
package com.mortals.xhx.module.dept.service;
import com.mortals.framework.model.Context;
import com.mortals.framework.service.ICRUDService;
import com.mortals.xhx.module.dept.dao.DeptDao;
import com.mortals.xhx.module.dept.model.DeptEntity;
import com.mortals.xhx.module.dept.model.DeptTreeSelect;
......@@ -15,6 +16,8 @@ import java.util.List;
*/
public interface DeptService extends ICRUDService<DeptEntity,Long>{
DeptDao getDao();
/**
* 是否存在部门信息节点
*
......
......@@ -52,6 +52,12 @@ public abstract class AbstractDingTalkService implements IDingPersonService {
@Value("${dingtalk.AppSecret:''}")
protected String appSecret;
/**
* appKey
*/
@Value("${dingtalk.oaUrl:}")
protected String oaUrl;
@Autowired
private ICacheService cacheService;
......
......@@ -2,6 +2,7 @@ package com.mortals.xhx.module.dingding.personal.service;
import com.aliyun.dingtalkworkflow_1_0.models.GetProcessInstanceResponseBody;
import com.dingtalk.api.response.OapiV2UserGetResponse;
import com.mortals.framework.common.Rest;
import com.mortals.xhx.module.dingding.IDingTalkService;
import com.mortals.xhx.module.dingding.personal.model.req.workmsg.WorkMsgReq;
......@@ -27,6 +28,14 @@ public interface IDingPersonService extends IDingTalkService {
*/
Rest<String> getPersonByMobile(String mobile);
/**
* 根据id获取用户电话
*
* @param id
* @return
*/
Rest<String> getPersonById(String id);
/**
* 根据code获取钉钉用户id
*
......
......@@ -6,9 +6,11 @@ import com.aliyun.dingtalkworkflow_1_0.models.GetProcessInstanceResponseBody;
import com.aliyun.tea.TeaException;
import com.dingtalk.api.DingTalkClient;
import com.dingtalk.api.request.OapiMessageCorpconversationAsyncsendV2Request;
import com.dingtalk.api.request.OapiV2UserGetRequest;
import com.dingtalk.api.request.OapiV2UserGetbymobileRequest;
import com.dingtalk.api.request.OapiV2UserGetuserinfoRequest;
import com.dingtalk.api.response.OapiMessageCorpconversationAsyncsendV2Response;
import com.dingtalk.api.response.OapiV2UserGetResponse;
import com.dingtalk.api.response.OapiV2UserGetbymobileResponse;
import com.dingtalk.api.response.OapiV2UserGetuserinfoResponse;
import com.mortals.framework.common.Rest;
......@@ -22,6 +24,8 @@ import org.apache.poi.ss.formula.functions.T;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import java.util.HashMap;
@Service("dingPersonService")
@Slf4j
......@@ -48,6 +52,26 @@ public class DingPersonServiceImpl extends AbstractDingTalkService implements ID
}
}
@Override
public Rest<String> getPersonById(String id) {
try {
DingTalkClient client = getDingTalkClient("/topapi/v2/user/get");
OapiV2UserGetRequest req = new OapiV2UserGetRequest();
req.setUserid(id); //用户id
log.info("getPersonByID:{}",id);
OapiV2UserGetResponse rsp = client.execute(req, getToken());
log.info("钉钉返回用户信息:{}", rsp.getBody());
if (rsp.getErrcode() == 0) {
return Rest.ok("成功", rsp.getResult().getMobile());
} else {
return Rest.fail(String.format("code:%s,msg:%s", rsp.getErrcode(), rsp.getErrmsg()));
}
} catch (ApiException e) {
log.info("根据手机号码查询人员异常", e);
return Rest.fail(e.getMessage());
}
}
@Override
public Rest<String> getPersonByCode(String code) {
try {
......@@ -118,9 +142,9 @@ public class DingPersonServiceImpl extends AbstractDingTalkService implements ID
*/
public com.aliyun.dingtalkworkflow_1_0.Client createClient() throws Exception {
com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config();
config.protocol = "https";
config.protocol = "http";
config.regionId = "central";
config.endpoint = domain.replace("http://","");
config.endpoint = oaUrl;
return new com.aliyun.dingtalkworkflow_1_0.Client(config);
}
......@@ -130,13 +154,17 @@ public class DingPersonServiceImpl extends AbstractDingTalkService implements ID
com.aliyun.dingtalkworkflow_1_0.Client client = createClient();
com.aliyun.dingtalkworkflow_1_0.models.GetProcessInstanceHeaders getProcessInstanceHeaders = new com.aliyun.dingtalkworkflow_1_0.models.GetProcessInstanceHeaders();
getProcessInstanceHeaders.xAcsDingtalkAccessToken = getToken();
HashMap<String, String> map = new HashMap<>();
getProcessInstanceHeaders.setCommonHeaders(map);
getProcessInstanceHeaders.getCommonHeaders().put("host", "172.15.28.113:8919");
com.aliyun.dingtalkworkflow_1_0.models.GetProcessInstanceRequest getProcessInstanceRequest = new com.aliyun.dingtalkworkflow_1_0.models.GetProcessInstanceRequest()
.setProcessInstanceId(processInstanceId);
log.info("processInstanceId:{}", processInstanceId);
GetProcessInstanceResponse rsp = client.getProcessInstanceWithOptions(getProcessInstanceRequest, getProcessInstanceHeaders, new com.aliyun.teautil.models.RuntimeOptions());
return Rest.ok("成功", rsp.getBody().getResult());
} catch (Exception e) {
log.info("根据用户查询审批详情失败", e);
log.error("根据用户查询审批详情失败", e);
return Rest.fail(e.getMessage());
}
......
......@@ -4,6 +4,7 @@ import cn.hutool.core.date.DateUtil;
import com.mortals.framework.annotation.UnAuth;
import com.mortals.framework.common.Rest;
import com.mortals.framework.exception.AppException;
import com.mortals.framework.model.OrderCol;
import com.mortals.framework.model.PageInfo;
import com.mortals.framework.model.Result;
import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
......@@ -73,6 +74,15 @@ public class FeedbackController extends BaseCRUDJsonBodyMappingController<Feedba
super.init(model, context);
}
@Override
protected void doListBefore(FeedbackEntity query, Map<String, Object> model, Context context) throws AppException {
if (ObjectUtils.isEmpty(query.getOrderColList())) {
query.setOrderColList(Arrays.asList(new OrderCol("createTime", OrderCol.DESCENDING)));
} else {
query.getOrderColList().add(new OrderCol("createTime", OrderCol.DESCENDING));
}
}
@Override
protected int infoAfter(Long id, Map<String, Object> model, FeedbackEntity entity, Context context) throws AppException {
if (CollectionUtils.isNotEmpty(entity.getFeedbackQuestionList())) {
......
......@@ -8,7 +8,7 @@ import java.util.Map;
public abstract class AbstractHikService {
@Value("${hik.host:''}")
@Value("${hik.host:}")
protected String host;
@Value("${hik.appKey:''}")
......
......@@ -159,7 +159,7 @@ public class JobEntity extends JobVo {
public void initAttrValue(){
this.groupId = 0L;
this.groupId = null;
this.groupName = "";
......
......@@ -42,7 +42,7 @@ public class JobController extends BaseCRUDJsonBodyMappingController<JobService,
@Override
protected void init(Map<String, Object> model, Context context) {
this.addDict(model, "type", JobTypeEnum.getEnumMap());
this.addDict(model, "group",service.queryGroupName(new JobQuery()).stream().collect(Collectors.toMap(x->x.getId().toString(), y->y.getGroupName(),(o, n)->n)));
this.addDict(model, "groupId",service.queryGroupName(new JobQuery()).stream().collect(Collectors.toMap(x->x.getId().toString(), y->y.getGroupName(),(o, n)->n)));
super.init(model, context);
}
......
......@@ -124,11 +124,11 @@ public class PerformAttendAppealServiceImpl extends AbstractCRUDServiceImpl<Perf
sendCheckDingTalk(appealEntity);
log.info(appealMsg);
if (appeal.getAppealResult() == AppealResultEnum.通过.getValue()) {
if (appeal.getSubAddType() == SubAddTypeEnum.扣除.getValue()) {
if (appealEntity.getAppealResult() == AppealResultEnum.通过.getValue()) {
if (appealEntity.getSubAddType() == SubAddTypeEnum.扣除.getValue()) {
//需增一条记录后 冲销相关核查的记录
if (PerformTypeEnum.考勤绩效.getValue().equals(appeal.getPerformType())) {
CheckAttendRecordEntity checkEntity = checkAttendRecordService.get(appeal.getCheckRecordId(), context);
if (PerformTypeEnum.考勤绩效.getValue().equals(appealEntity.getPerformType())) {
CheckAttendRecordEntity checkEntity = checkAttendRecordService.get(appealEntity.getCheckRecordId(), context);
CheckAttendRecordEntity checkAttendRecordEntity = new CheckAttendRecordEntity();
checkAttendRecordEntity.initAttrValue();
......@@ -137,8 +137,8 @@ public class PerformAttendAppealServiceImpl extends AbstractCRUDServiceImpl<Perf
checkAttendRecordEntity.setSubMethod(SubMethodEnum.申诉冲销.getValue());
checkAttendRecordEntity.setRemark(appealMsg);
checkAttendRecordService.save(checkAttendRecordEntity, context);
} else if (PerformTypeEnum.评价差评绩效.getValue().equals(appeal.getPerformType())) {
CheckReviewRecordEntity checkEntity = checkReviewRecordService.get(appeal.getCheckRecordId(), context);
} else if (PerformTypeEnum.评价差评绩效.getValue().equals(appealEntity.getPerformType())) {
CheckReviewRecordEntity checkEntity = checkReviewRecordService.get(appealEntity.getCheckRecordId(), context);
CheckReviewRecordEntity checkRecordEntity = new CheckReviewRecordEntity();
checkRecordEntity.initAttrValue();
BeanUtils.copyProperties(checkEntity, checkRecordEntity, new String[]{"id", "recordId"});
......@@ -148,8 +148,8 @@ public class PerformAttendAppealServiceImpl extends AbstractCRUDServiceImpl<Perf
checkRecordEntity.setCreateTime(new Date());
checkRecordEntity.setCreateUserId(this.getContextUserId(context));
checkReviewRecordService.save(checkRecordEntity, context);
} else if (PerformTypeEnum.评价投诉绩效.getValue().equals(appeal.getPerformType())) {
CheckComplainRecordEntity checkEntity = checkComplainRecordService.get(appeal.getCheckRecordId(), context);
} else if (PerformTypeEnum.评价投诉绩效.getValue().equals(appealEntity.getPerformType())) {
CheckComplainRecordEntity checkEntity = checkComplainRecordService.get(appealEntity.getCheckRecordId(), context);
CheckComplainRecordEntity checkRecordEntity = new CheckComplainRecordEntity();
checkRecordEntity.initAttrValue();
......@@ -161,8 +161,8 @@ public class PerformAttendAppealServiceImpl extends AbstractCRUDServiceImpl<Perf
checkRecordEntity.setCreateUserId(this.getContextUserId(context));
checkComplainRecordService.save(checkRecordEntity, context);
} else if (PerformTypeEnum.办件绩效.getValue().equals(appeal.getPerformType())) {
CheckGoworkRecordEntity checkEntity = checkGoworkRecordService.get(appeal.getCheckRecordId(), context);
} else if (PerformTypeEnum.办件绩效.getValue().equals(appealEntity.getPerformType())) {
CheckGoworkRecordEntity checkEntity = checkGoworkRecordService.get(appealEntity.getCheckRecordId(), context);
CheckGoworkRecordEntity checkRecordEntity = new CheckGoworkRecordEntity();
checkRecordEntity.initAttrValue();
BeanUtils.copyProperties(checkEntity, checkRecordEntity, new String[]{"id", "recordId"});
......@@ -173,8 +173,8 @@ public class PerformAttendAppealServiceImpl extends AbstractCRUDServiceImpl<Perf
checkRecordEntity.setCreateUserId(this.getContextUserId(context));
checkGoworkRecordService.save(checkRecordEntity, context);
} else if (PerformTypeEnum.效能绩效.getValue().equals(appeal.getPerformType())) {
CheckEffectRecordEntity checkEntity = checkEffectRecordService.get(appeal.getCheckRecordId(), context);
} else if (PerformTypeEnum.效能绩效.getValue().equals(appealEntity.getPerformType())) {
CheckEffectRecordEntity checkEntity = checkEffectRecordService.get(appealEntity.getCheckRecordId(), context);
CheckEffectRecordEntity checkRecordEntity = new CheckEffectRecordEntity();
checkRecordEntity.initAttrValue();
BeanUtils.copyProperties(checkEntity, checkRecordEntity, new String[]{"id", "recordId"});
......@@ -185,8 +185,8 @@ public class PerformAttendAppealServiceImpl extends AbstractCRUDServiceImpl<Perf
checkRecordEntity.setCreateUserId(this.getContextUserId(context));
checkEffectRecordService.save(checkRecordEntity, context);
} else if (PerformTypeEnum.其它绩效.getValue().equals(appeal.getPerformType())) {
CheckOtherRecordEntity checkEntity = checkOtherRecordService.get(appeal.getCheckRecordId(), context);
} else if (PerformTypeEnum.其它绩效.getValue().equals(appealEntity.getPerformType())) {
CheckOtherRecordEntity checkEntity = checkOtherRecordService.get(appealEntity.getCheckRecordId(), context);
CheckOtherRecordEntity checkRecordEntity = new CheckOtherRecordEntity();
checkRecordEntity.initAttrValue();
BeanUtils.copyProperties(checkEntity, checkRecordEntity, new String[]{"id", "recordId"});
......
......@@ -12,6 +12,8 @@ import com.mortals.xhx.base.system.param.service.ParamService;
import com.mortals.xhx.base.system.user.model.UserQuery;
import com.mortals.xhx.base.system.user.service.UserService;
import com.mortals.xhx.common.code.*;
import com.mortals.xhx.module.dept.model.DeptQuery;
import com.mortals.xhx.module.dept.service.DeptService;
import com.mortals.xhx.module.perform.model.PerformRulesQuery;
import com.mortals.xhx.module.perform.model.vo.AppealInfo;
import com.mortals.xhx.module.perform.model.vo.AppealSummaryQuery;
......@@ -65,6 +67,8 @@ public class PerformAttendAppealController extends BaseCRUDJsonBodyMappingContro
private UserService userService;
@Autowired
private PerformRulesService rulesService;
@Autowired
private DeptService deptService;
public PerformAttendAppealController() {
......@@ -77,14 +81,16 @@ public class PerformAttendAppealController extends BaseCRUDJsonBodyMappingContro
this.addDict(model, "updateUserId", userService.find(new UserQuery()).stream().collect(toMap(x -> x.getId().toString(), y -> y.getRealName(), (o, n) -> n)));
this.addDict(model, "ruleId", rulesService.find(new PerformRulesQuery()).stream().collect(toMap(x -> x.getId().toString(), y -> y.getName(), (o, n) -> n)));
this.addDict(model, "checkResult", CheckResultEnum.getEnumMap());
this.addDict(model, "subMethod", paramService.getParamBySecondOrganize("PerformAttendAppeal", "subMethod"));
this.addDict(model, "subAddType", paramService.getParamBySecondOrganize("PerformAttendAppeal", "subAddType"));
this.addDict(model, "subMethod", SubMethodEnum.getEnumMap());
this.addDict(model, "subAddType", SubAddTypeEnum.getEnumMap());
this.addDict(model, "processStatus", ProcessStatusEnum.getEnumMap());
this.addDict(model, "appealResult", paramService.getParamBySecondOrganize("PerformAttendAppeal", "appealResult"));
this.addDict(model, "appealResult", AppealResultEnum.getEnumMap());
this.addDict(model, "reviewResult", paramService.getParamBySecondOrganize("PerformAttendAppeal", "reviewResult"));
this.addDict(model, "reviewSource", paramService.getParamBySecondOrganize("PerformAttendAppeal", "reviewSource"));
this.addDict(model, "irregularType", IrregularTypeEnum.getEnumMap());
this.addDict(model, "irregularOtherType", paramService.getParamBySecondOrganize("PerformAttendAppeal", "irregularOtherType"));
this.addDict(model, "irregularOtherType", IrregularOtherTypeEnum.getEnumMap());
this.addDict(model, "deptId", deptService.find(new DeptQuery()).stream().collect(Collectors.toMap(x -> x.getId().toString(), y -> y.getDeptName())));
super.init(model, context);
}
......@@ -96,7 +102,7 @@ public class PerformAttendAppealController extends BaseCRUDJsonBodyMappingContro
} else {
query.getOrderColList().add(new OrderCol("createTime", OrderCol.DESCENDING));
}
if(!ObjectUtils.isEmpty(query.getCreateTime())){
if (!ObjectUtils.isEmpty(query.getCreateTime())) {
query.setCreateTimeStart(DateUtil.formatDate(query.getCreateTime()));
query.setCreateTimeEnd(DateUtil.formatDate(query.getCreateTime()));
}
......@@ -132,7 +138,7 @@ public class PerformAttendAppealController extends BaseCRUDJsonBodyMappingContro
*/
@PostMapping(value = "audit")
public String appealAudit(@RequestBody PerformAttendAppealEntity appeal) {
log.info("appeal audit ==>{}",JSONObject.toJSONString(appeal));
log.info("appeal audit ==>{}", JSONObject.toJSONString(appeal));
JSONObject jsonObject = new JSONObject();
String busiDesc = this.getModuleDesc() + "审核";
try {
......@@ -142,7 +148,7 @@ public class PerformAttendAppealController extends BaseCRUDJsonBodyMappingContro
}
recordSysLog(request, busiDesc + " 【成功】");
jsonObject.put(KEY_RESULT_CODE, VALUE_RESULT_SUCCESS);
jsonObject.put(KEY_RESULT_MSG, busiDesc+ "成功!");
jsonObject.put(KEY_RESULT_MSG, busiDesc + "成功!");
} catch (Exception e) {
log.error("申诉审核", e);
jsonObject.put(KEY_RESULT_CODE, VALUE_RESULT_FAILURE);
......@@ -153,6 +159,7 @@ public class PerformAttendAppealController extends BaseCRUDJsonBodyMappingContro
/**
* 申述分布情况统计
*
* @param query
* @return
*/
......@@ -166,15 +173,15 @@ public class PerformAttendAppealController extends BaseCRUDJsonBodyMappingContro
int code = 1;
try {
List<PerformAttendAppealEntity> result = this.getService().getAppealSummaryList(query);
Map<String,String> dict = new HashMap<>();
Map<String, String> dict = new HashMap<>();
//attend:考勤绩效,review:评价差评绩效,complain:评价投诉绩效,gowork:办件绩效,effect:效能绩效,other:其它绩效
dict.put("attend","考勤绩效");
dict.put("review","评价差评绩效");
dict.put("complain","评价投诉绩效");
dict.put("gowork","办件绩效");
dict.put("effect","效能绩效");
dict.put("other","其它绩效");
this.addDict(model,"performType",dict);
dict.put("attend", "考勤绩效");
dict.put("review", "评价差评绩效");
dict.put("complain", "评价投诉绩效");
dict.put("gowork", "办件绩效");
dict.put("effect", "效能绩效");
dict.put("other", "其它绩效");
this.addDict(model, "performType", dict);
model.put("data", result);
model.put("message_info", busiDesc + "成功");
if (!ObjectUtils.isEmpty(context) && !ObjectUtils.isEmpty(context.getUser())) {
......
......@@ -74,4 +74,5 @@ dingtalk:
AppSecret: @profiles.dingtalk.appSecret@
AesKey: @profiles.dingtalk.aesKey@
token: @profiles.dingtalk.token@
oaUrl: @profiles.dingtalk.oaUrl@
......@@ -20,7 +20,7 @@
<plugin interceptor="com.mortals.framework.thirty.mybatis.LogInterceptor">
<property name="enableExecutorTime" value="true" />
<property name="showSql" value="true" />
<property name="showSql" value="false" />
</plugin>
</plugins>
</configuration>
\ No newline at end of file
......@@ -74,6 +74,15 @@
<if test="checkTimeEnd != null and checkTimeEnd!=''"> AND checkTime <![CDATA[ <= ]]> STR_TO_DATE(left(concat(#{checkTimeEnd},' 23:59:59'),19),'%Y-%m-%d %k:%i:%s') </if>
<if test="createUserId != null and createUserId!=''"> AND createUserId = #{createUserId} </if>
) AS a
<if test="orderColList != null and !orderColList.isEmpty()">
order by
<trim suffixOverrides="," suffix="">
<foreach collection="orderColList" open="" close="" index="index" item="item" separator=",">
${item.colName} ${item.sortKind}
</foreach>
</trim>
</if>
</select>
<select id="getListCount" parameterType="com.mortals.xhx.module.check.model.CheckAllRecordQuery" resultType="int">
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment