姜玉琦 2024-11-22 00:40:31 +08:00
commit 6d14455417
30 changed files with 2193 additions and 63 deletions

1
bin/clean 100755
View File

@ -0,0 +1 @@
mvn clean

1
bin/package 100755
View File

@ -0,0 +1 @@
mvn clean package -Dmaven.test.skip=true

14
bin/run 100755
View File

@ -0,0 +1,14 @@
@echo off
echo.
echo [信息] 运行Web工程。
echo.
cd %~dp0
cd ../ruoyi-admin/target
set JAVA_OPTS=-Xms256m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m
java -jar %JAVA_OPTS% ruoyi-admin.jar
cd bin
pause

View File

@ -194,6 +194,12 @@
<version>3.4.0</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
<version>1.18.30</version>
</dependency>
</dependencies>
</dependencyManagement>

View File

@ -49,12 +49,12 @@ spring:
druid:
# 主库数据源
master:
#url: jdbc:mysql://62.234.3.186:3306/yanzhu_jh?useSSL=false&characterEncoding=UTF-8&serverTimezone=GMT%2B8
url: jdbc:mysql://62.234.3.186:3306/yanzhu_jh_2024?useSSL=false&characterEncoding=UTF-8&serverTimezone=GMT%2B8
username: root
#password: Sxyanzhu@cf123
url: jdbc:mysql://192.168.126.19:3306/yanzhu_jh_test2024?useSSL=false&characterEncoding=UTF-8&serverTimezone=GMT%2B8
password: Sxyanzhu@cf123
#url: jdbc:mysql://192.168.126.19:3306/yanzhu_jh_test2024?useSSL=false&characterEncoding=UTF-8&serverTimezone=GMT%2B8
#username: root
password: hadoopspring123
#password: hadoopspring123
# 从库数据源
slave:
# 从数据源开关/默认关闭

View File

@ -48,7 +48,7 @@
"dayjs": "^1.11.9",
"diagram-js": "^11.4.1",
"echarts": "5.4.0",
"element-ui": "^2.15.13",
"element-ui": "^2.15.14",
"file-saver": "2.0.5",
"fuse.js": "6.4.3",
"highlight.js": "9.18.5",

View File

@ -0,0 +1 @@
<svg viewBox="0 0 79 86" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><linearGradient id="linearGradient-1-2" x1="38.8503086%" y1="0%" x2="61.1496914%" y2="100%"><stop stop-color="#FCFCFD" offset="0%"></stop><stop stop-color="#EEEFF3" offset="100%"></stop></linearGradient><linearGradient id="linearGradient-2-2" x1="0%" y1="9.5%" x2="100%" y2="90.5%"><stop stop-color="#FCFCFD" offset="0%"></stop><stop stop-color="#E9EBEF" offset="100%"></stop></linearGradient><rect id="path-3-2" x="0" y="0" width="17" height="36"></rect></defs><g id="Illustrations" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"><g id="B-type" transform="translate(-1268.000000, -535.000000)"><g id="Group-2" transform="translate(1268.000000, 535.000000)"><path id="Oval-Copy-2" d="M39.5,86 C61.3152476,86 79,83.9106622 79,81.3333333 C79,78.7560045 57.3152476,78 35.5,78 C13.6847524,78 0,78.7560045 0,81.3333333 C0,83.9106622 17.6847524,86 39.5,86 Z" fill="#F7F8FC"></path><polygon id="Rectangle-Copy-14" fill="#E5E7E9" transform="translate(27.500000, 51.500000) scale(1, -1) translate(-27.500000, -51.500000) " points="13 58 53 58 42 45 2 45"></polygon><g id="Group-Copy" transform="translate(34.500000, 31.500000) scale(-1, 1) rotate(-25.000000) translate(-34.500000, -31.500000) translate(7.000000, 10.000000)"><polygon id="Rectangle-Copy-10" fill="#E5E7E9" transform="translate(11.500000, 5.000000) scale(1, -1) translate(-11.500000, -5.000000) " points="2.84078316e-14 3 18 3 23 7 5 7"></polygon><polygon id="Rectangle-Copy-11" fill="#EDEEF2" points="-3.69149156e-15 7 38 7 38 43 -3.69149156e-15 43"></polygon><rect id="Rectangle-Copy-12" fill="url(#linearGradient-1-2)" transform="translate(46.500000, 25.000000) scale(-1, 1) translate(-46.500000, -25.000000) " x="38" y="7" width="17" height="36"></rect><polygon id="Rectangle-Copy-13" fill="#F8F9FB" transform="translate(39.500000, 3.500000) scale(-1, 1) translate(-39.500000, -3.500000) " points="24 7 41 7 55 -3.63806207e-12 38 -3.63806207e-12"></polygon></g><rect id="Rectangle-Copy-15" fill="url(#linearGradient-2-2)" x="13" y="45" width="40" height="36"></rect><g id="Rectangle-Copy-17" transform="translate(53.000000, 45.000000)"><mask id="mask-4-2" fill="white"><use xlink:href="#path-3-2"></use></mask><use id="Mask" fill="#E0E3E9" transform="translate(8.500000, 18.000000) scale(-1, 1) translate(-8.500000, -18.000000) " xlink:href="#path-3-2"></use><polygon id="Rectangle-Copy" fill="#D5D7DE" mask="url(#mask-4-2)" transform="translate(12.000000, 9.000000) scale(-1, 1) translate(-12.000000, -9.000000) " points="7 0 24 0 20 18 -1.70530257e-13 16"></polygon></g><polygon id="Rectangle-Copy-18" fill="#F8F9FB" transform="translate(66.000000, 51.500000) scale(-1, 1) translate(-66.000000, -51.500000) " points="62 45 79 45 70 58 53 58"></polygon></g></g></g></svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

@ -0,0 +1,81 @@
import request from '@/utils/request'
// 查询劳资管理列表
export function listUnitpay(query) {
return request({
url: '/project/unitpay/list',
method: 'get',
params: query
})
}
// 查询劳资管理列表
export function listByDay(query) {
return request({
url: '/project/unitpay/listByDay',
method: 'get',
params: query
})
}
// 查询劳资管理列表
export function listByMonth(query) {
return request({
url: '/project/unitpay/listByMonth',
method: 'get',
params: query
})
}
// 查询两个日期之间某人的工资
export function listByBetweenDay(query) {
return request({
url: '/project/unitpay/listByBetweenDay',
method: 'get',
params: query
})
}
// 按两个日期之间的时间差分组统计工资
export function listGroupBetweenDay(query) {
return request({
url: '/project/unitpay/listGroupBetweenDay',
method: 'get',
params: query
})
}
// 查询劳资管理详细
export function getUnitpay(id) {
return request({
url: '/project/unitpay/' + id,
method: 'get'
})
}
// 新增劳资管理
export function addUnitpay(data) {
return request({
url: '/project/unitpay',
method: 'post',
data: data
})
}
// 修改劳资管理
export function updateUnitpay(data) {
return request({
url: '/project/unitpay',
method: 'put',
data: data
})
}
// 删除劳资管理
export function delUnitpay(id) {
return request({
url: '/project/unitpay/' + id,
method: 'delete'
})
}

View File

@ -104,7 +104,7 @@
/** 表格布局 **/
.pagination-container {
position: relative;
height: 25px;
height: 40px;
margin-bottom: 10px;
margin-top: 15px;
padding: 10px 20px !important;
@ -294,4 +294,4 @@
line-height: 20px;
font-size: 13px;
background: url("https://szgcwx.jhncidg.com/staticFiles/img/WEB_345B9059DAD1492EB37EC4814EB340F0.png") no-repeat center/100% 100%;
}
}

View File

@ -78,7 +78,7 @@
<el-table-column label="父级项目" align="left" prop="paretProjectName" width="200" show-overflow-tooltip />
<el-table-column label="项目简称" align="left" prop="simpleName" width="200" show-overflow-tooltip />
<el-table-column label="项目分类" align="center" prop="projectType">
<template slot-scope="scope">
<template slot-scope="scope">
<dict-tag :options="dict.type.project_category" :value="scope.row.projectType" />
</template>
</el-table-column>
@ -193,6 +193,8 @@
v-hasPermi="['project:materialSeal:list']">材料封样管理</el-dropdown-item>
<el-dropdown-item command="handleAttendanceData" icon="el-icon-s-grid"
v-hasPermi="['project:attendance:list']">劳务实名管理</el-dropdown-item>
<el-dropdown-item command="handleUnitPay" icon="el-icon-bangzhu"
v-hasPermi="['project:unitpay:list']">工资管理</el-dropdown-item>
<el-dropdown-item command="handleVideoConfig" icon="el-icon-video-camera-solid"
v-hasPermi="['video:videoConfig:list']">视频配置</el-dropdown-item>
<el-dropdown-item command="handleAiBoxVideoConfig" icon="el-icon-camera"
@ -398,6 +400,7 @@
<projectDesignDrawer ref="designDrawer"></projectDesignDrawer>
<CommitteeDrawer ref="committeeDrawer"></CommitteeDrawer>
<pitImageDrawer ref="pigImgDrawer"></pitImageDrawer>
<UnitPayDrawer ref="unitPayDrawer"></UnitPayDrawer>
</div>
</template>
@ -433,6 +436,7 @@ import aiBoxVideoConfigDrawer from '@/views/video/aiBoxProjectConfig/aiBoxVideoC
import prjPhotographyDrawer from '@/views/video/prjphotography/prjPhotographyDrawer.vue'
import projectDesignDrawer from '@/views/project/projectDesign/projectDesignDrawer.vue';
import CommitteeDrawer from '@/views/project/projectCommittee/projectCommitteeDrawer.vue'
import UnitPayDrawer from '@/views/project/unitpay/unitpayDrawer.vue';
import { checkPermi, checkRole } from "@/utils/permission"; //
import pitImageDrawer from '@/views/device/pitSurveyPoint/pitImageDrawer.vue'
@ -461,7 +465,8 @@ export default {
prjPhotographyDrawer,
projectDesignDrawer,
CommitteeDrawer,
pitImageDrawer
pitImageDrawer,
UnitPayDrawer
},
dicts: [
"sur_project_xmjd",
@ -732,6 +737,9 @@ export default {
case "handlePitImage":
this.$refs.pigImgDrawer.show(row);
break;
case "handleUnitPay":
this.$refs.unitPayDrawer.show(row);
break;
default:
break;
}

View File

@ -1,81 +1,45 @@
<template>
<div class="projectect-attendance-drawer">
<el-drawer
v-if="isOpen"
:visible.sync="isOpen"
direction="rtl"
size="30%"
style="padding-left: 20px"
>
<el-drawer v-if="isOpen" :visible.sync="isOpen" direction="rtl" size="30%" style="padding-left: 20px">
<template slot="title">
<div>{{ title + " 【今日出勤】" }}</div>
</template>
<el-tabs type="card" v-model="activeName" style="padding-left: 20px" @tab-click="loadData">
<el-tab-pane
v-for="(it, idx) in nodes"
:label="it.unitName + ''"
:name="it.unitId + ''"
:key="idx"
></el-tab-pane>
<el-tab-pane v-for="(it, idx) in nodes" :label="it.unitName + ''" :name="it.unitId + ''"
:key="idx"></el-tab-pane>
</el-tabs>
<el-form label-width="120px" ref="form" :rules="rules">
<div
style="
<div style="
padding: 8px 16px;
background-color: #ecf8ff;
border-radius: 4px;
border-left: 5px solid #50bfff;
margin: 20px;
"
>
">
<el-form-item label="在册劳务人员" prop="servicePersonnel">
<el-input style="width: 80%" v-model="vform.servicePersonnel" :disabled="true"
><i slot="suffix"></i></el-input
>
<el-input style="width: 80%" v-model="vform.servicePersonnel" :disabled="true"><i
slot="suffix"></i></el-input>
</el-form-item>
<el-form-item label="在册监理人员" prop="supervisorPersonnel">
<el-input
style="width: 80%"
v-model="vform.supervisorPersonnel"
:disabled="true"
><i slot="suffix"></i></el-input
>
<el-input style="width: 80%" v-model="vform.supervisorPersonnel" :disabled="true"><i
slot="suffix"></i></el-input>
</el-form-item>
<el-form-item label="在册总包人员" prop="contractorPersonnel">
<el-input
style="width: 80%"
v-model="vform.contractorPersonnel"
:disabled="true"
><i slot="suffix"></i></el-input
>
<el-input style="width: 80%" v-model="vform.contractorPersonnel" :disabled="true"><i
slot="suffix"></i></el-input>
</el-form-item>
</div>
<el-form-item label="劳务人员" prop="servicePersonnel">
<el-input-number
style="width: 80%"
v-model="form.servicePersonnel"
:min="0"
:max="vform.servicePersonnel"
label="请输入劳务人员"
></el-input-number>
<el-input-number style="width: 80%" v-model="form.servicePersonnel" :min="0" :max="vform.servicePersonnel"
label="请输入劳务人员"></el-input-number>
</el-form-item>
<el-form-item label="监理人员" prop="supervisorPersonnel">
<el-input-number
style="width: 80%"
v-model="form.supervisorPersonnel"
:min="0"
:max="vform.supervisorPersonnel"
label="请输入监理人员"
></el-input-number>
<el-input-number style="width: 80%" v-model="form.supervisorPersonnel" :min="0"
:max="vform.supervisorPersonnel" label="请输入监理人员"></el-input-number>
</el-form-item>
<el-form-item label="总包人员" prop="contractorPersonnel">
<el-input-number
style="width: 80%"
v-model="form.contractorPersonnel"
:min="0"
:max="vform.contractorPersonnel"
label="请输入总包人员"
></el-input-number>
<el-input-number style="width: 80%" v-model="form.contractorPersonnel" :min="0"
:max="vform.contractorPersonnel" label="请输入总包人员"></el-input-number>
</el-form-item>
</el-form>
<div style="text-align: center" v-if="isUnit">
@ -123,7 +87,7 @@ export default {
computed: {
...mapGetters(["dept"]),
},
mounted() {},
mounted() { },
methods: {
doOk() {

View File

@ -0,0 +1,157 @@
<template>
<div class="day-pay">
<div v-if="type!='index'">
<span>请选择日期:</span>
<el-date-picker v-model="queryParams.attendanceTime"
style="margin:0px 10px;" type="date" placeholder="选择日期" @change="doQuery">
</el-date-picker>
<el-button type="primary" @click="doQuery"></el-button>
</div>
<div>
<el-table v-loading="loading" :data="attendanceList" height="60vh" class="my-table">
<el-table-column label="照片" align="center" prop="id">
<template slot-scope="{ row }">
<el-image :src="row.scanPhoto || row.workerPhoto" :preview-src-list="[row.scanPhoto || row.workerPhoto]"
style="height: 60px" />
</template>
</el-table-column>
<el-table-column label="姓名" align="center" prop="workerName" />
<el-table-column label="籍贯" align="center" prop="nativePlace" />
<el-table-column label="性别" align="center" prop="attendanceType">
<template slot-scope="{ row }">{{
row.workerGender == 1 ? "女" : "男"
}}</template>
</el-table-column>
<el-table-column label="分包商名称" align="center" prop="companyName" />
<el-table-column label="所属班组" align="center" prop="groupName" />
<el-table-column label="工种" align="center" prop="workTypeName" />
<el-table-column label="日工资" align="center" prop="pay">
<template slot-scope="{ row }">{{(row.pay/100.0).toFixed(2)}}</template>
</el-table-column>
<div slot="empty">
<el-empty v-if="total==0" image="./images/empty.svg"></el-empty>
</div>
</el-table>
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
@pagination="getList" />
</div>
</div>
</template>
<script>
import {listByDay} from '@/api/project/unitpay'
export default {
props:{
getPrjInfo:{
type:Function
},
type:{
type:String
}
},
data() {
return {
loading:false,
//
total: 0,
attendanceList:[],
//
queryParams: {
vendorsCode: "huazhu",
pageNum: 1,
pageSize: 10,
projectId: null,
workerName: "",
deptId: null,
companyTypeId: "0",
attendanceTime: new Date(),
attendanceOutTime: undefined
},
cfgList: [],
}
},
created(){
if(this.type=="index"){
return;
}
this.$api.publics.findAttendanceCfgList({}).then((response) => {
this.cfgList = response.data || [];
this.doQuery();
});
},
methods:{
doQuery(){
this.queryParams.pageNum=1;
this.getList();
},
initMe(){
this.doQuery();
},
getList(){
this.loading = true;
let postData = {};
if (this.queryParams.attendanceTime) {
postData.attendanceTime = this.$dt(this.queryParams.attendanceTime).format("YYYY-MM-DD");
}
let prj=this.getPrjInfo();
if(this.type=="index"){
postData.projectId=prj.projectId;
postData.deptId=prj.deptId||'';
postData.attendanceTime=this.$dt(prj.attendanceTime).format( "YYYY-MM-DD");
}else{
let tmps = this.cfgList.filter(
(d) =>
d.projectId == prj.id &&
d.subDeptId == prj.deptId
);
postData.cfgid = tmps.length > 0?tmps[0].id:0;
}
postData.pageNum = this.queryParams.pageNum;
postData.pageSize = this.queryParams.pageSize;
if (this.queryParams.workerName) {
postData.workerName = this.queryParams.workerName;
}
if (this.queryParams.companyTypeId && this.queryParams.companyTypeId > 0) {
postData.companyTypeId = this.queryParams.companyTypeId;
}
listByDay(postData).then((response) => {
this.attendanceList = (response.rows || []).map((it) => {
if (it.vendorsCode != "yanzhu") {
let dt1 = it.attendanceTime;
let dt2 = it.attendanceOutTime;
if (!dt1 || !dt2 || dt1 == dt2) {
let dt = dt1 || dt2;
if (it.remark == "E") {
it.attendanceTime = dt;
it.attendanceOutTime = "";
} else {
it.attendanceTime = "";
it.attendanceOutTime = dt;
}
}
}
it.scanPhoto =
it.scanPhoto && it.scanPhoto.indexOf("/profile") == 0
? "/jhapi" + it.scanPhoto
: it.scanPhoto;
return it;
});
this.total = response.total;
this.loading = false;
this.$emit("update",this.total,this.attendanceList)
});
}
}
}
</script>
<style lang="scss">
.day-pay{
font-size: 12px;
.el-table.my-table{
height: calc(100vh - 290px) !important;
}
}
</style>

View File

@ -0,0 +1,259 @@
<template>
<div class="app-container pay-query-main">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" label-width="68px">
<el-form-item label="项目名称" prop="projectId">
<el-select v-model="queryParams.projectId" filterable placeholder="请选择项目" @change="doQuerySub">
<el-option v-for="(item, index) in projectOptions" :key="index" :label="item.projectName" :value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="总包单位" prop="subDeptId">
<el-select v-model="queryParams.subDeptId" filterable placeholder="请选择总包单位" clearable>
<el-option v-for="(item, index) in depts" :key="index" :label="item.deptName" :value="item.deptId">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="姓名" prop="workerName">
<el-input v-model="queryParams.workerName"/>
</el-form-item>
<el-form-item label="日期" >
<el-date-picker v-model="queryParams.attendanceDay1" style="margin:0px 10px;" type="date" placeholder="选择日期"
@change="handleQuery">
</el-date-picker>
-
<el-date-picker v-model="queryParams.attendanceDay2" style="margin:0px 10px;" type="date" placeholder="选择日期"
@change="handleQuery">
</el-date-picker>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button>
<el-button type="success" v-if="total>0" @click="doExport"></el-button>
</el-form-item>
</el-form>
<div>
<el-table v-loading="loading" :data="attendanceList" height="60vh" class="my-table">
<el-table-column label="照片" align="center" prop="id">
<template slot-scope="{ row }">
<el-image :src="row.scanPhoto || row.workerPhoto" :preview-src-list="[row.scanPhoto || row.workerPhoto]"
style="height: 60px" />
</template>
</el-table-column>
<el-table-column label="姓名" align="center" prop="workerName" />
<el-table-column label="籍贯" align="center" prop="nativePlace" />
<el-table-column label="性别" align="center" prop="attendanceType">
<template slot-scope="{ row }">{{
row.workerGender == 1 ? "女" : "男"
}}</template>
</el-table-column>
<el-table-column label="分包商名称" align="center" prop="companyName" />
<el-table-column label="所属班组" align="center" prop="groupName" />
<el-table-column label="工种" align="center" prop="workTypeName" />
<el-table-column label="出勤天数" align="center" prop="pay" v-if="type=='month'">
<template slot-scope="{ row }">{{row.days }}</template>
</el-table-column>
<el-table-column label="出勤日期" align="center" prop="pay" v-if="type=='day'">
<template slot-scope="{ row }">
<span>{{(row.attendanceTime||row.attendanceOutTime)|formatDate }}</span>
</template>
</el-table-column>
<el-table-column label="工资" align="center" prop="pay">
<template slot-scope="{ row }">
<span >{{(row.pay/100.0).toFixed(2)}}</span>
<span v-if="false" >
{{(row.unitPay/100.0).toFixed(2)}}*{{row.days}}={{(row.pay/100.0).toFixed(2)}}
</span>
</template>
</el-table-column>
<div slot="empty">
<el-empty v-if="total==0" image="./images/empty.svg"></el-empty>
</div>
</el-table>
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
@pagination="getList" />
</div>
</div>
</template>
<script>
import DayPay from './dayPay.vue'
import MonthPay from './monthPay.vue'
import {listByBetweenDay,listGroupBetweenDay} from '@/api/project/unitpay'
export default {
components:{
DayPay,MonthPay
},
name: "Unitpay",
data() {
return {
//
loading: true,
activeName: 'day',
//
queryParams: {
pageNum: 1,
pageSize: 10,
projectId: null,
subDeptId: null,
workerName:'',
attendanceDay1:new Date(),
attendanceDay2:null,
},
//
projectOptions: [],
depts: [],
total: 0,
attendanceList:[],
type:'',
};
},
created() {
this.init();
},
methods: {
dataChange(total){
this.total=total;
},
getPrjInfo(){
return {
projectId:this.queryParams.projectId,
deptId:this.queryParams.subDeptId,
attendanceTime:this.activeName=="day"?this.queryParams.attendanceDay:this.queryParams.attendanceMonth
}
},
doQuerySub() {
let prjId = this.queryParams.projectId;
let tmps = this.prjDept2 && this.prjDept2[prjId] ? this.prjDept2[prjId] || [] : [];
if (tmps.length > 0 || !prjId) {
this.depts = tmps;
if (tmps.length == 1) {
this.queryParams.subDeptId = tmps[0].deptId;
} else {
this.queryParams.subDeptId = '';
}
this.loading=false;
return;
}
this.$api.publics.queryUnitList({
projectId: prjId,
unitTypes: "2".split(","),
}).then((d) => {
this.loading=false;
let objs = d.rows || [];
if (!this.prjDept2) {
this.prjDept2 = {};
}
this.prjDept2[prjId] = objs;
this.depts = objs;
if (objs.length == 1) {
this.queryParams.subDeptId = objs[0].deptId;
} else {
this.queryParams.subDeptId = '';
}
});
},
init() {
if (this.projectOptions && this.projectOptions.length > 0) {
return;
}
this.$api.publics.getMyProjectList({}).then((response) => {
this.projectOptions = response.rows || [];
if (this.projectOptions.length > 0) {
this.queryParams.projectId = this.projectOptions[0].id;
this.doQuerySub();
}
});
},
handleQuery() {
this.queryParams.pageNum=1;
this.getList();
},
getPostData(){
let postData={
projectId:this.queryParams.projectId,
deptId:this.queryParams.subDeptId,
pageNum:this.queryParams.pageNum,
pageSize:this.queryParams.pageSize
};
if(this.queryParams.workerName.trim()){
this.type='day';
postData.workerName=this.queryParams.workerName.trim();
}else{
this.type='month';
}
if(this.queryParams.attendanceDay1){
postData.attendanceTime=this.$dt(this.queryParams.attendanceDay1).format("YYYY-MM-DD");
}
if(this.queryParams.attendanceDay2){
postData.attendanceOutTime=this.$dt(this.queryParams.attendanceDay1).format("YYYY-MM-DD");
}
return postData;
},
getList(){
this.loading = true;
let ajaxFun=listByBetweenDay;
let postData=this.getPostData();
if(this.type=='month'){
ajaxFun=listGroupBetweenDay;
}
ajaxFun(postData).then(response=>{
this.attendanceList = (response.rows || []).map((it) => {
if (it.vendorsCode != "yanzhu") {
let dt1 = it.attendanceTime;
let dt2 = it.attendanceOutTime;
if (!dt1 || !dt2 || dt1 == dt2) {
let dt = dt1 || dt2;
if (it.remark == "E") {
it.attendanceTime = dt;
it.attendanceOutTime = "";
} else {
it.attendanceTime = "";
it.attendanceOutTime = dt;
}
}
}
it.scanPhoto =it.scanPhoto && it.scanPhoto.indexOf("/profile") == 0 ? "/jhapi" + it.scanPhoto : it.scanPhoto;
return it;
});
this.total = response.total;
this.loading = false;
});
},
doTabClick(){
setTimeout(this.handleQuery,1000);
},
doExport(){
let postData=this.getPostData();
let tmps=this.projectOptions.filter(d=>d.id==this.queryParams.projectId);
let name=tmps.length>0?tmps[0].projectName:"";
if(this.queryParams.subDeptId){
tmps=this.depts.filter(d=>d.deptId==this.queryParams.subDeptId);
if(tmps.length>0){
name+="_"+tmps[0].deptName;
}
}
name+=`_工资管理_[${new Date().getTime()}].xlsx`
let url=this.type=="day"?"project/unitpay/exportBetweenDay":"project/unitpay/exportGroupBetweenDay";
this.download(
url,
{
...postData,
},
name
);
}
}
};
</script>
<style lang="scss">
.pay-query-main{
font-size: 12px;
.el-table.my-table{
height: calc(100vh - 292px) !important;
}
}
</style>

View File

@ -0,0 +1,164 @@
<template>
<div class="month-pay">
<div v-if="type!='index'">
<span class="label">请选择月份:</span>
<el-date-picker v-model="queryParams.attendanceTime" style="margin:0px 10px;" type="month"
placeholder="请选择月份" @change="doQuery">
</el-date-picker>
<el-button type="primary" @click="doQuery"></el-button>
</div>
<div>
<el-table v-loading="loading" :data="attendanceList" height="60vh" class="my-table">
<el-table-column label="照片" align="center" prop="id">
<template slot-scope="{ row }">
<el-image :src="row.scanPhoto || row.workerPhoto" :preview-src-list="[row.scanPhoto || row.workerPhoto]"
style="height: 60px" />
</template>
</el-table-column>
<el-table-column label="姓名" align="center" prop="workerName" />
<el-table-column label="籍贯" align="center" prop="nativePlace" />
<el-table-column label="性别" align="center" prop="attendanceType">
<template slot-scope="{ row }">{{
row.workerGender == 1 ? "女" : "男"
}}</template>
</el-table-column>
<el-table-column label="分包商名称" align="center" prop="companyName" />
<el-table-column label="所属班组" align="center" prop="groupName" />
<el-table-column label="工种" align="center" prop="workTypeName" />
<el-table-column label="月工资" align="center" prop="pay">
<template slot-scope="{ row }">
<span v-if="false">{{(row.pay/100.0).toFixed(2)}}</span>
<span >
{{(row.unitPay/100.0).toFixed(2)}}*{{row.days}}={{(row.pay/100.0).toFixed(2)}}
</span>
</template>
</el-table-column>
<div slot="empty">
<el-empty v-if="total==0" image="./images/empty.svg"></el-empty>
</div>
</el-table>
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
@pagination="getList" />
</div>
</div>
</template>
<script>
import {listByMonth} from '@/api/project/unitpay'
export default {
props:{
getPrjInfo:{
type:Function
},
type:{
type:String
}
},
data() {
return {
loading:false,
//
total: 0,
attendanceList:[],
//
queryParams: {
vendorsCode: "huazhu",
pageNum: 1,
pageSize: 10,
projectId: null,
workerName: "",
deptId: null,
companyTypeId: "0",
attendanceTime: new Date(),
attendanceOutTime: undefined
},
cfgList: [],
}
},
created(){
if(this.type=="index"){
return;
}
this.$api.publics.findAttendanceCfgList({}).then((response) => {
this.cfgList = response.data || [];
this.doQuery();
});
},
methods:{
doQuery(){
this.queryParams.pageNum=1;
this.getList();
},
initMe(){
this.doQuery();
},
getList(){
this.loading = true;
let postData = {};
if (this.queryParams.attendanceTime) {
postData.attendanceTime = this.$dt(this.queryParams.attendanceTime).format(
"YYYY-MM-DD"
);
}
let prj=this.getPrjInfo();
if(this.type=="index"){
postData.projectId=prj.projectId;
postData.deptId=prj.deptId||'';
postData.attendanceTime=this.$dt(prj.attendanceTime).format( "YYYY-MM-DD");
}else{
let tmps = this.cfgList.filter(
(d) =>
d.projectId == prj.id &&
d.subDeptId == prj.deptId
);
postData.cfgid = tmps.length > 0?tmps[0].id:0;
}
postData.pageNum = this.queryParams.pageNum;
postData.pageSize = this.queryParams.pageSize;
if (this.queryParams.workerName) {
postData.workerName = this.queryParams.workerName;
}
if (this.queryParams.companyTypeId && this.queryParams.companyTypeId > 0) {
postData.companyTypeId = this.queryParams.companyTypeId;
}
listByMonth(postData).then((response) => {
this.attendanceList = (response.rows || []).map((it) => {
if (it.vendorsCode != "yanzhu") {
let dt1 = it.attendanceTime;
let dt2 = it.attendanceOutTime;
if (!dt1 || !dt2 || dt1 == dt2) {
let dt = dt1 || dt2;
if (it.remark == "E") {
it.attendanceTime = dt;
it.attendanceOutTime = "";
} else {
it.attendanceTime = "";
it.attendanceOutTime = dt;
}
}
}
it.scanPhoto =
it.scanPhoto && it.scanPhoto.indexOf("/profile") == 0
? "/jhapi" + it.scanPhoto
: it.scanPhoto;
return it;
});
this.total = response.total;
this.loading = false;
this.$emit("update",this.total,this.attendanceList)
});
}
}
}
</script>
<style lang="scss">
.month-pay{
font-size: 12px;
.el-table.my-table{
height: calc(100vh - 290px) !important;
}
}
</style>

View File

@ -0,0 +1,92 @@
<template>
<div class="pay-setting">
<div style="text-align:right;">
<el-button type="success" @click="doSave" v-loading="loading"></el-button>
</div>
<div>
<el-table v-loading="loading" :data="payList" height="60vh" class="my-table">
<el-table-column label="所属班组" align="center" prop="groupName" />
<el-table-column label="工种" align="center" prop="workTypeName" />
<el-table-column label="岗位工资" align="center" prop="pay">
<template slot-scope="{ row }">
<el-input v-model="row.unitPay" placeholder="请输入岗位工资" type="number" />
</template>
</el-table-column>
<div slot="empty">
<el-empty v-if="total==0" image="./images/empty.svg"></el-empty>
</div>
</el-table>
</div>
</div>
</template>
<script>
import {listUnitpay,addUnitpay} from '@/api/project/unitpay'
export default {
props:{
getPrjInfo:{
type:Function
}
},
data(){
return {
loading:false,
cfgList: [],
payList:[],
}
},
created(){
this.$api.publics.findAttendanceCfgList({}).then((response) => {
this.cfgList = response.data || [];
this.doQuery();
});
},
methods:{
doSave(){
let postData=this.payList.map(it=>{
let obj={...it};
obj.unitPay=obj.unitPay*100;
return obj;
})
this.loading=true;
addUnitpay(postData).then(d=>{
this.loading=false;
if(d.code==200){
this.$modal.msgSuccess("保存成功!");
this.doQuery();
}else{
this.$message.error("保存失败!");
}
});
},
doQuery(){
let postData = {};
let prj=this.getPrjInfo();
let tmps = this.cfgList.filter(
(d) =>
d.projectId == prj.id &&
d.subDeptId == prj.deptId
);
postData.cfgId = tmps.length > 0?tmps[0].id:0;
this.loading=true;
listUnitpay(postData).then(d=>{
this.payList=(d.data||[]).map(it=>{
it.unitPay=it.unitPay?(it.unitPay/100.0).toFixed(2):''
return it;
});
this.loading=false;
});
},
}
}
</script>
<style lang="scss">
.pay-setting{
.el-table.my-table{
height: calc(100vh - 240px) !important;
}
}
</style>

View File

@ -0,0 +1,90 @@
<template>
<div class="unitpay-main-drawer" v-if="isOpen">
<el-drawer v-if="isOpen" :visible.sync="isOpen" direction="rtl" size="70%" style="padding-left: 20px">
<template slot="title">
<div>{{ title + " 【劳务实名管理】" }}</div>
</template>
<el-tabs type="card" v-model="unitActiveName" style="margin-left: 20px; margin-right: 20px" @tab-click="getList">
<el-tab-pane v-for="(it, idx) in nodes" :label="it.unitName + ''" :name="it.unitId + ''"
:key="idx"></el-tab-pane>
</el-tabs>
<div style="margin-left: 20px; margin-right: 20px">
<el-tabs type="card" v-model="activeName" @tab-click="handleClick" :key="elKey">
<el-tab-pane label="日工资列表" name="day">
<DayPay ref="day" :getPrjInfo="getPrjInfo" v-if="activeName=='day'"></DayPay>
</el-tab-pane>
<el-tab-pane label="月工资列表" name="month">
<MonthPay ref="month" :getPrjInfo="getPrjInfo" v-if="activeName=='month'"></MonthPay>
</el-tab-pane>
<el-tab-pane label="薪资设置" name="set">
<PaySetting ref="setting" :getPrjInfo="getPrjInfo" v-if="activeName=='set'"></PaySetting>
</el-tab-pane>
</el-tabs>
</div>
</el-drawer>
</div>
</template>
<script>
import DayPay from './dayPay.vue'
import MonthPay from './monthPay.vue'
import PaySetting from './paySetting.vue'
export default {
components:{
DayPay,MonthPay,PaySetting
},
data() {
return {
activeName: 'day',
isOpen: false,
title: '',
nodes: [],
unitActiveName:"",
elKey:0,
};
},
methods: {
getPrjInfo(){
return {
id:this.prj.id,
deptId:this.unitActiveName
};
},
show(prj) {
this.prj = prj;
this.activeName = 'day';
this.title = prj.projectName || ""
this.isOpen = true;
this.handleClick();
this.$api.publics.queryUnitList({
projectId: prj.id,
unitTypes: [2, 4],
})
.then((d) => {
this.nodes = d.rows;
if (d.rows.length > 0) {
this.unitActiveName = this.nodes[0].unitId + "";
}
});
},
handleClick() {
setTimeout(() => {
if (this.activeName == 'first') {
//this.$refs.main.init(this.prj);
} else {
// this.$refs.workerMain.initMe(this.prj);
}
}, 400);
},
getList() {
this.activeName = 'day';
this.elKey++;
}
},
}
</script>
<style lang="scss"></style>

View File

@ -0,0 +1,326 @@
package com.yanzhu.jh.project.controller;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
import javax.servlet.http.HttpServletResponse;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.ruoyi.common.utils.DateUtils;
import com.yanzhu.jh.project.domain.SurProjectAttendanceData;
import com.yanzhu.jh.project.domain.vo.ExportAttendancDay;
import com.yanzhu.jh.project.domain.vo.ExportAttendancMonth;
import com.yanzhu.jh.project.service.ISurProjectAttendanceDataService;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import com.yanzhu.jh.project.domain.SurProjectAttendanceUnitpay;
import com.yanzhu.jh.project.service.ISurProjectAttendanceUnitpayService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.core.page.TableDataInfo;
/**
* Controller
*
* @author ruoyi
* @date 2024-11-10
*/
@RestController
@RequestMapping("/project/unitpay")
public class SurProjectAttendanceUnitpayController extends BaseController
{
@Autowired
private ISurProjectAttendanceUnitpayService surProjectAttendanceUnitpayService;
@Autowired
private ISurProjectAttendanceDataService surProjectAttendanceDataService;
/**
*
*/
@PreAuthorize("@ss.hasPermi('project:unitpay:list')")
@GetMapping("/list")
public AjaxResult list(SurProjectAttendanceUnitpay surProjectAttendanceUnitpay)
{
List<SurProjectAttendanceUnitpay> list = surProjectAttendanceUnitpayService.selectSurProjectAttendanceUnitpayList(surProjectAttendanceUnitpay);
List<SurProjectAttendanceUnitpay> iniList=surProjectAttendanceUnitpayService.initList(surProjectAttendanceUnitpay);
for(SurProjectAttendanceUnitpay it :iniList){
List<SurProjectAttendanceUnitpay> tmpList= list.stream().filter(item->StrUtil.equals(it.getWorkTypeName(),item.getWorkTypeName()) && StrUtil.equals(it.getGroupName(),item.getGroupName())).collect(Collectors.toList());
if(tmpList.isEmpty()){
it.setUnitPay(0l);
list.add(it);
}
}
return success(list);
}
/**
*
*/
@PreAuthorize("@ss.hasPermi('project:unitpay:list')")
@GetMapping("/listByDay")
public TableDataInfo listByDay(SurProjectAttendanceData attWhere)
{
attWhere.setAttendanceOutTime(attWhere.getAttendanceOutTime());
startPage();
String tmp=attWhere.getAttendanceTime();
if(StrUtil.isNotEmpty(tmp)){
int year= DateUtil.parse(tmp).year();
attWhere.setYear(year);
}
List<SurProjectAttendanceData> list = surProjectAttendanceDataService.selectSurProjectAttendanceDataListByDate(attWhere);
SurProjectAttendanceUnitpay payWhere=new SurProjectAttendanceUnitpay();
payWhere.setCfgId(attWhere.getCfgid());
List<SurProjectAttendanceUnitpay> payList= surProjectAttendanceUnitpayService.selectSurProjectAttendanceUnitpayList(payWhere);
for(SurProjectAttendanceData it :list){
it.setDays(1l);
it.setPay(surProjectAttendanceUnitpayService.getPay(payList,it));
}
return getDataTable(list);
}
/**
*
*/
@PreAuthorize("@ss.hasPermi('project:unitpay:list')")
@GetMapping("/listByBetweenDay")
public TableDataInfo listByBetweenDay(SurProjectAttendanceData attWhere)
{
attWhere.setAttendanceOutTime(attWhere.getAttendanceOutTime());
startPage();
String tmp=attWhere.getAttendanceTime();
if(StrUtil.isNotEmpty(tmp)){
int year= DateUtil.parse(tmp).year();
attWhere.setYear(year);
}
List<SurProjectAttendanceData> list = surProjectAttendanceDataService.selectSurProjectAttendanceDataList(attWhere);
SurProjectAttendanceUnitpay payWhere=new SurProjectAttendanceUnitpay();
payWhere.setCfgId(attWhere.getCfgid());
List<SurProjectAttendanceUnitpay> payList= surProjectAttendanceUnitpayService.selectSurProjectAttendanceUnitpayList(payWhere);
for(SurProjectAttendanceData it :list){
it.setDays(1l);
it.setPay(surProjectAttendanceUnitpayService.getPay(payList,it));
}
return getDataTable(list);
}
/**
*
* @param attWhere
* @return
*/
@PreAuthorize("@ss.hasPermi('project:unitpay:list')")
@GetMapping("/listGroupBetweenDay")
public TableDataInfo listGroupBetweenDay(SurProjectAttendanceData attWhere)
{
startPage();
String tmp=attWhere.getAttendanceTime();
if(StrUtil.isNotEmpty(tmp)){
int year= DateUtil.parse(tmp).year();
attWhere.setYear(year);
}
List<SurProjectAttendanceData> list = surProjectAttendanceDataService.selectSurProjectAttendanceDataListByMonth(attWhere);
SurProjectAttendanceUnitpay payWhere=new SurProjectAttendanceUnitpay();
payWhere.setCfgId(attWhere.getCfgid());
List<SurProjectAttendanceUnitpay> payList= surProjectAttendanceUnitpayService.selectSurProjectAttendanceUnitpayList(payWhere);
for(SurProjectAttendanceData it :list){
it.setPay(surProjectAttendanceUnitpayService.getPay(payList,it));
}
return getDataTable(list);
}
@PreAuthorize("@ss.hasPermi('project:unitpay:list')")
@GetMapping("/listByMonth")
public TableDataInfo listByMonth(SurProjectAttendanceData attWhere)
{
Date dt=DateUtil.parse(attWhere.getAttendanceTime());
attWhere.setAttendanceTime( DateUtil.formatDate(DateUtil.beginOfMonth(dt)) );
attWhere.setAttendanceOutTime( DateUtil.formatDate(DateUtil.endOfMonth(dt)));
startPage();
String tmp=attWhere.getAttendanceTime();
if(StrUtil.isNotEmpty(tmp)){
int year= DateUtil.parse(tmp).year();
attWhere.setYear(year);
}
List<SurProjectAttendanceData> list = surProjectAttendanceDataService.selectSurProjectAttendanceDataListByMonth(attWhere);
SurProjectAttendanceUnitpay payWhere=new SurProjectAttendanceUnitpay();
payWhere.setCfgId(attWhere.getCfgid());
List<SurProjectAttendanceUnitpay> payList= surProjectAttendanceUnitpayService.selectSurProjectAttendanceUnitpayList(payWhere);
for(SurProjectAttendanceData it :list){
it.setPay(surProjectAttendanceUnitpayService.getPay(payList,it));
}
return getDataTable(list);
}
/**
*
*/
@PreAuthorize("@ss.hasPermi('project:unitpay:export')")
@Log(title = "劳资管理", businessType = BusinessType.EXPORT)
@PostMapping("/exportDay")
public void exportDay(HttpServletResponse response, SurProjectAttendanceData attWhere)
{
Date dt=DateUtil.parse(attWhere.getAttendanceTime());
attWhere.setAttendanceOutTime(attWhere.getAttendanceTime());
String tmp=attWhere.getAttendanceTime();
if(StrUtil.isNotEmpty(tmp)){
int year= DateUtil.parse(tmp).year();
attWhere.setYear(year);
}
List<SurProjectAttendanceData> list = surProjectAttendanceDataService.selectSurProjectAttendanceDataListByDate(attWhere);
SurProjectAttendanceUnitpay payWhere=new SurProjectAttendanceUnitpay();
payWhere.setCfgId(attWhere.getCfgid());
List<SurProjectAttendanceUnitpay> payList= surProjectAttendanceUnitpayService.selectSurProjectAttendanceUnitpayList(payWhere);
List<ExportAttendancDay> exportList=new ArrayList<ExportAttendancDay>();
for(SurProjectAttendanceData it :list){
it.setDays(1l);
it.setPay(surProjectAttendanceUnitpayService.getPay(payList,it));
exportList.add(ExportAttendancDay.NEW(it));
}
ExcelUtil<ExportAttendancDay> util = new ExcelUtil<ExportAttendancDay>(ExportAttendancDay.class);
util.exportExcel(response, exportList, "劳务工资-日工资"+DateUtil.format(dt,"YYYY年MM月DD月"));
}
/**
*
*/
@PreAuthorize("@ss.hasPermi('project:unitpay:export')")
@Log(title = "劳资管理", businessType = BusinessType.EXPORT)
@PostMapping("/exportMonth")
public void exportMonth(HttpServletResponse response, SurProjectAttendanceData attWhere)
{
Date dt=DateUtil.parse(attWhere.getAttendanceTime());
attWhere.setAttendanceTime( DateUtil.formatDate(DateUtil.beginOfMonth(dt)) );
attWhere.setAttendanceOutTime( DateUtil.formatDate(DateUtil.endOfMonth(dt)));
String tmp=attWhere.getAttendanceTime();
if(StrUtil.isNotEmpty(tmp)){
int year= DateUtil.parse(tmp).year();
attWhere.setYear(year);
}
List<SurProjectAttendanceData> list = surProjectAttendanceDataService.selectSurProjectAttendanceDataListByMonth(attWhere);
SurProjectAttendanceUnitpay payWhere=new SurProjectAttendanceUnitpay();
payWhere.setCfgId(attWhere.getCfgid());
List<SurProjectAttendanceUnitpay> payList= surProjectAttendanceUnitpayService.selectSurProjectAttendanceUnitpayList(payWhere);
List<ExportAttendancMonth> exportList=new ArrayList<>();
for(SurProjectAttendanceData it :list){
it.setPay(surProjectAttendanceUnitpayService.getPay(payList,it));
exportList.add(ExportAttendancMonth.NEW(it));
}
ExcelUtil<ExportAttendancMonth> util = new ExcelUtil<ExportAttendancMonth>(ExportAttendancMonth.class);
util.exportExcel(response, exportList, "劳务工资-月工资"+DateUtil.format(dt,"YYYY年MM月"));
}
/**
*
*/
@PreAuthorize("@ss.hasPermi('project:unitpay:export')")
@Log(title = "劳资管理", businessType = BusinessType.EXPORT)
@PostMapping("/exportGroupBetweenDay")
public void exportGroupBetweenDay(HttpServletResponse response, SurProjectAttendanceData attWhere)
{
String tmp=attWhere.getAttendanceTime();
if(StrUtil.isNotEmpty(tmp)){
int year= DateUtil.parse(tmp).year();
attWhere.setYear(year);
}
List<SurProjectAttendanceData> list = surProjectAttendanceDataService.selectSurProjectAttendanceDataListByMonth(attWhere);
SurProjectAttendanceUnitpay payWhere=new SurProjectAttendanceUnitpay();
payWhere.setCfgId(attWhere.getCfgid());
List<SurProjectAttendanceUnitpay> payList= surProjectAttendanceUnitpayService.selectSurProjectAttendanceUnitpayList(payWhere);
List<ExportAttendancMonth> exportList=new ArrayList<>();
for(SurProjectAttendanceData it :list){
it.setPay(surProjectAttendanceUnitpayService.getPay(payList,it));
exportList.add(ExportAttendancMonth.NEW(it));
}
ExcelUtil<ExportAttendancMonth> util = new ExcelUtil<ExportAttendancMonth>(ExportAttendancMonth.class);
util.exportExcel(response, exportList, "劳务工资-工资");
}
/**
*
*/
@PreAuthorize("@ss.hasPermi('project:unitpay:export')")
@Log(title = "劳资管理", businessType = BusinessType.EXPORT)
@PostMapping("/exportBetweenDay")
public void exportBetWeenDay(HttpServletResponse response, SurProjectAttendanceData attWhere)
{
Date dt=DateUtil.parse(attWhere.getAttendanceTime());
String tmp=attWhere.getAttendanceTime();
if(StrUtil.isNotEmpty(tmp)){
int year= DateUtil.parse(tmp).year();
attWhere.setYear(year);
}
List<SurProjectAttendanceData> list = surProjectAttendanceDataService.selectSurProjectAttendanceDataList(attWhere);
SurProjectAttendanceUnitpay payWhere=new SurProjectAttendanceUnitpay();
payWhere.setCfgId(attWhere.getCfgid());
List<SurProjectAttendanceUnitpay> payList= surProjectAttendanceUnitpayService.selectSurProjectAttendanceUnitpayList(payWhere);
List<ExportAttendancDay> exportList=new ArrayList<ExportAttendancDay>();
for(SurProjectAttendanceData it :list){
it.setDays(1l);
it.setPay(surProjectAttendanceUnitpayService.getPay(payList,it));
exportList.add(ExportAttendancDay.NEW(it));
}
ExcelUtil<ExportAttendancDay> util = new ExcelUtil<ExportAttendancDay>(ExportAttendancDay.class);
util.exportExcel(response, exportList, "劳务工资-工资");
}
/**
*
*/
@PreAuthorize("@ss.hasPermi('project:unitpay:query')")
@GetMapping(value = "/one/{id}")
public AjaxResult getInfo(@PathVariable("id") Long id)
{
return success(surProjectAttendanceUnitpayService.selectSurProjectAttendanceUnitpayById(id));
}
/**
*
*/
@PreAuthorize("@ss.hasPermi('project:unitpay:add')")
@Log(title = "劳资管理", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody List<SurProjectAttendanceUnitpay> datas)
{
return toAjax(surProjectAttendanceUnitpayService.addSurProjectAttendanceUnitpaies(datas));
}
/**
*
*/
@PreAuthorize("@ss.hasPermi('project:unitpay:edit')")
@Log(title = "劳资管理", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody SurProjectAttendanceUnitpay surProjectAttendanceUnitpay)
{
return toAjax(surProjectAttendanceUnitpayService.updateSurProjectAttendanceUnitpay(surProjectAttendanceUnitpay));
}
/**
*
*/
@PreAuthorize("@ss.hasPermi('project:unitpay:remove')")
@Log(title = "劳资管理", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable Long[] ids)
{
return toAjax(surProjectAttendanceUnitpayService.deleteSurProjectAttendanceUnitpayByIds(ids));
}
}

View File

@ -145,6 +145,42 @@ public class SurProjectAttendanceData extends BaseEntity
}
/**
*
*/
private long days;
public long getDays() {
return days;
}
public void setDays(long days) {
this.days = days;
}
public long getPay() {
return pay;
}
public void setPay(long pay) {
this.pay = pay;
}
public Long getUnitPay() {
return unitPay;
}
public void setUnitPay(Long unitPay) {
this.unitPay = unitPay;
}
private Long unitPay;
/**
*
*/
private long pay;
private Long projectId;
@Excel(name = "项目名称")
private String projectName;

View File

@ -0,0 +1,150 @@
package com.yanzhu.jh.project.domain;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
/**
* sur_project_attendance_unitpay
*
* @author ruoyi
* @date 2024-11-10
*/
public class SurProjectAttendanceUnitpay extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** $column.columnComment */
private Long id;
/** 配置ID */
@Excel(name = "配置ID")
private Long cfgId;
/** 班组ID */
@Excel(name = "班组ID")
private String groupId;
/** 班组名称 */
@Excel(name = "班组名称")
private String groupName;
/** 工种编码 */
@Excel(name = "工种编码")
private String workTypeCode;
/** 工种 */
@Excel(name = "工种")
private String workTypeName;
/** 工资 */
@Excel(name = "工资")
private Long unitPay;
/** $column.columnComment */
@Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
private Long isDel;
public void setId(Long id)
{
this.id = id;
}
public Long getId()
{
return id;
}
public void setCfgId(Long cfgId)
{
this.cfgId = cfgId;
}
public Long getCfgId()
{
return cfgId;
}
public void setGroupId(String groupId)
{
this.groupId = groupId;
}
public String getGroupId()
{
return groupId;
}
public void setGroupName(String groupName)
{
this.groupName = groupName;
}
public String getGroupName()
{
return groupName;
}
public void setWorkTypeCode(String workTypeCode)
{
this.workTypeCode = workTypeCode;
}
public String getWorkTypeCode()
{
return workTypeCode;
}
public void setWorkTypeName(String workTypeName)
{
this.workTypeName = workTypeName;
}
public String getWorkTypeName()
{
return workTypeName;
}
public void setUnitPay(Long unitPay)
{
this.unitPay = unitPay;
}
public Long getUnitPay()
{
return unitPay;
}
public void setIsDel(Long isDel)
{
this.isDel = isDel;
}
public Long getIsDel()
{
return isDel;
}
private int year;
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("id", getId())
.append("cfgId", getCfgId())
.append("groupId", getGroupId())
.append("groupName", getGroupName())
.append("workTypeCode", getWorkTypeCode())
.append("workTypeName", getWorkTypeName())
.append("unitPay", getUnitPay())
.append("remark", getRemark())
.append("isDel", getIsDel())
.append("createBy", getCreateBy())
.append("createTime", getCreateTime())
.append("updateBy", getUpdateBy())
.append("updateTime", getUpdateTime())
.toString();
}
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
}

View File

@ -0,0 +1,143 @@
package com.yanzhu.jh.project.domain.vo;
import cn.hutool.core.date.DateUtil;
import com.ruoyi.common.annotation.Excel;
import com.yanzhu.jh.project.domain.SurProjectAttendanceData;
import java.math.BigDecimal;
/**
*
*/
public class ExportAttendancDay {
@Excel(name = "项目名称")
private String projectName;
@Excel(name = "部门名称")
private String deptName;
@Excel(name = "姓名")
private String workerName;
@Excel(name = "籍贯")
private String nativePlace;
@Excel(name = "性别")
private String sex;
@Excel(name = "分包商名称")
private String companyName;
@Excel(name = "所属班组")
private String groupName;
@Excel(name = "工种")
private String workTypeName;
@Excel(name = "出勤日期")
private String attendanceDate;
@Excel(name = "日工资")
private BigDecimal pay;
@Excel(name = "工种日工资")
private BigDecimal unitPay;
public static ExportAttendancDay NEW(SurProjectAttendanceData it) {
ExportAttendancDay d=new ExportAttendancDay();
d.projectName = it.getProjectName();
d.deptName = it.getDeptName();
d.workerName = it.getWorkerName();
d.nativePlace = it.getNativePlace();
d.sex=it.getWorkerGender().intValue()==0?"男":"女";
d.companyName=it.getCompanyName();
d.groupName=it.getGroupName();
d.workTypeName = it.getWorkTypeName();
d.pay=BigDecimal.valueOf(it.getPay()/100.0);
if(it.getAttendanceTime()!=null){
d.attendanceDate= DateUtil.formatDate(DateUtil.parse(it.getAttendanceTime()));
}else if(it.getAttendanceOutTime()!=null){
d.attendanceDate= DateUtil.formatDate(DateUtil.parse(it.getAttendanceOutTime()));
}
d.unitPay=BigDecimal.valueOf(it.getUnitPay()/100.0);
return d;
}
public String getAttendanceDate() {
return attendanceDate;
}
public void setAttendanceDate(String attendanceDate) {
this.attendanceDate = attendanceDate;
}
public String getProjectName() {
return projectName;
}
public void setProjectName(String projectName) {
this.projectName = projectName;
}
public String getDeptName() {
return deptName;
}
public void setDeptName(String deptName) {
this.deptName = deptName;
}
public String getWorkerName() {
return workerName;
}
public void setWorkerName(String workerName) {
this.workerName = workerName;
}
public String getNativePlace() {
return nativePlace;
}
public void setNativePlace(String nativePlace) {
this.nativePlace = nativePlace;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getCompanyName() {
return companyName;
}
public void setCompanyName(String companyName) {
this.companyName = companyName;
}
public String getGroupName() {
return groupName;
}
public void setGroupName(String groupName) {
this.groupName = groupName;
}
public String getWorkTypeName() {
return workTypeName;
}
public void setWorkTypeName(String workTypeName) {
this.workTypeName = workTypeName;
}
public BigDecimal getPay() {
return pay;
}
public void setPay(BigDecimal pay) {
this.pay = pay;
}
public BigDecimal getUnitPay() {
return unitPay;
}
public void setUnitPay(BigDecimal unitPay) {
this.unitPay = unitPay;
}
}

View File

@ -0,0 +1,139 @@
package com.yanzhu.jh.project.domain.vo;
import com.ruoyi.common.annotation.Excel;
import com.yanzhu.jh.project.domain.SurProjectAttendanceData;
import java.math.BigDecimal;
/**
*
*/
public class ExportAttendancMonth {
@Excel(name = "项目名称")
private String projectName;
@Excel(name = "部门名称")
private String deptName;
@Excel(name = "姓名")
private String workerName;
@Excel(name = "籍贯")
private String nativePlace;
@Excel(name = "性别")
private String sex;
@Excel(name = "分包商名称")
private String companyName;
@Excel(name = "所属班组")
private String groupName;
@Excel(name = "工种")
private String workTypeName;
@Excel(name = "月工资")
private BigDecimal pay;
@Excel(name = "月出勤天数")
private long days;
@Excel(name = "工种日工资")
private BigDecimal unitPay;
public static ExportAttendancMonth NEW(SurProjectAttendanceData it) {
ExportAttendancMonth d=new ExportAttendancMonth();
d.projectName = it.getProjectName();
d.projectName = it.getProjectName();
d.deptName = it.getDeptName();
d.workerName = it.getWorkerName();
d.nativePlace = it.getNativePlace();
d.sex=it.getWorkerGender().intValue()==0?"男":"女";
d.companyName=it.getCompanyName();
d.groupName=it.getGroupName();
d.workTypeName = it.getWorkTypeName();
d.pay=BigDecimal.valueOf(it.getPay()/100.0);
d.days=it.getDays();
d.unitPay=BigDecimal.valueOf(it.getUnitPay()/100.0);
return d;
}
public String getProjectName() {
return projectName;
}
public void setProjectName(String projectName) {
this.projectName = projectName;
}
public String getDeptName() {
return deptName;
}
public void setDeptName(String deptName) {
this.deptName = deptName;
}
public String getWorkerName() {
return workerName;
}
public void setWorkerName(String workerName) {
this.workerName = workerName;
}
public String getNativePlace() {
return nativePlace;
}
public void setNativePlace(String nativePlace) {
this.nativePlace = nativePlace;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getCompanyName() {
return companyName;
}
public void setCompanyName(String companyName) {
this.companyName = companyName;
}
public String getGroupName() {
return groupName;
}
public void setGroupName(String groupName) {
this.groupName = groupName;
}
public String getWorkTypeName() {
return workTypeName;
}
public void setWorkTypeName(String workTypeName) {
this.workTypeName = workTypeName;
}
public BigDecimal getPay() {
return pay;
}
public void setPay(BigDecimal pay) {
this.pay = pay;
}
public long getDays() {
return days;
}
public void setDays(long days) {
this.days = days;
}
public BigDecimal getUnitPay() {
return unitPay;
}
public void setUnitPay(BigDecimal unitPay) {
this.unitPay = unitPay;
}
}

View File

@ -132,4 +132,8 @@ public interface SurProjectAttendanceDataMapper
public List<SurProjectAttendanceData> attendanceDataList(SurProjectAttendanceData where);
public List<SurProjectAttendanceData> groupTodayCompanyTypeId(SurProjectAttendanceData where);
List<SurProjectAttendanceData> selectSurProjectAttendanceDataListByMonth(SurProjectAttendanceData attWhere);
List<SurProjectAttendanceData> selectSurProjectAttendanceDataListByDate(SurProjectAttendanceData attWhere);
}

View File

@ -0,0 +1,63 @@
package com.yanzhu.jh.project.mapper;
import java.util.List;
import com.yanzhu.jh.project.domain.SurProjectAttendanceUnitpay;
/**
* Mapper
*
* @author ruoyi
* @date 2024-11-10
*/
public interface SurProjectAttendanceUnitpayMapper
{
/**
*
*
* @param id
* @return
*/
public SurProjectAttendanceUnitpay selectSurProjectAttendanceUnitpayById(Long id);
/**
*
*
* @param surProjectAttendanceUnitpay
* @return
*/
public List<SurProjectAttendanceUnitpay> selectSurProjectAttendanceUnitpayList(SurProjectAttendanceUnitpay surProjectAttendanceUnitpay);
/**
*
*
* @param surProjectAttendanceUnitpay
* @return
*/
public int insertSurProjectAttendanceUnitpay(SurProjectAttendanceUnitpay surProjectAttendanceUnitpay);
/**
*
*
* @param surProjectAttendanceUnitpay
* @return
*/
public int updateSurProjectAttendanceUnitpay(SurProjectAttendanceUnitpay surProjectAttendanceUnitpay);
/**
*
*
* @param id
* @return
*/
public int deleteSurProjectAttendanceUnitpayById(Long id);
/**
*
*
* @param ids
* @return
*/
public int deleteSurProjectAttendanceUnitpayByIds(Long[] ids);
List<SurProjectAttendanceUnitpay> initList(SurProjectAttendanceUnitpay surProjectAttendanceUnitpay);
}

View File

@ -138,4 +138,8 @@ public interface ISurProjectAttendanceDataService
* @param addList
*/
void addList(List<SurProjectAttendanceData> addList);
List<SurProjectAttendanceData> selectSurProjectAttendanceDataListByMonth(SurProjectAttendanceData attWhere);
List<SurProjectAttendanceData> selectSurProjectAttendanceDataListByDate(SurProjectAttendanceData attWhere);
}

View File

@ -0,0 +1,69 @@
package com.yanzhu.jh.project.service;
import java.util.List;
import com.yanzhu.jh.project.domain.SurProjectAttendanceData;
import com.yanzhu.jh.project.domain.SurProjectAttendanceUnitpay;
/**
* Service
*
* @author ruoyi
* @date 2024-11-10
*/
public interface ISurProjectAttendanceUnitpayService
{
/**
*
*
* @param id
* @return
*/
public SurProjectAttendanceUnitpay selectSurProjectAttendanceUnitpayById(Long id);
/**
*
*
* @param surProjectAttendanceUnitpay
* @return
*/
public List<SurProjectAttendanceUnitpay> selectSurProjectAttendanceUnitpayList(SurProjectAttendanceUnitpay surProjectAttendanceUnitpay);
/**
*
*
* @param surProjectAttendanceUnitpay
* @return
*/
public int insertSurProjectAttendanceUnitpay(SurProjectAttendanceUnitpay surProjectAttendanceUnitpay);
/**
*
*
* @param surProjectAttendanceUnitpay
* @return
*/
public int updateSurProjectAttendanceUnitpay(SurProjectAttendanceUnitpay surProjectAttendanceUnitpay);
/**
*
*
* @param ids
* @return
*/
public int deleteSurProjectAttendanceUnitpayByIds(Long[] ids);
/**
*
*
* @param id
* @return
*/
public int deleteSurProjectAttendanceUnitpayById(Long id);
Long getPay(List<SurProjectAttendanceUnitpay> payList, SurProjectAttendanceData it);
List<SurProjectAttendanceUnitpay> initList(SurProjectAttendanceUnitpay surProjectAttendanceUnitpay);
int addSurProjectAttendanceUnitpaies(List<SurProjectAttendanceUnitpay> datas);
}

View File

@ -517,4 +517,14 @@ public class SurProjectAttendanceDataServiceImpl implements ISurProjectAttendanc
}
}
@Override
public List<SurProjectAttendanceData> selectSurProjectAttendanceDataListByMonth(SurProjectAttendanceData attWhere) {
return surProjectAttendanceDataMapper.selectSurProjectAttendanceDataListByMonth(attWhere);
}
@Override
public List<SurProjectAttendanceData> selectSurProjectAttendanceDataListByDate(SurProjectAttendanceData attWhere) {
return surProjectAttendanceDataMapper.selectSurProjectAttendanceDataListByDate(attWhere);
}
}

View File

@ -0,0 +1,150 @@
package com.yanzhu.jh.project.service.impl;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.ruoyi.common.utils.DateUtils;
import com.yanzhu.jh.project.domain.SurProjectAttendanceData;
import com.yanzhu.jh.project.mapper.SurProjectAttendanceDataMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.yanzhu.jh.project.mapper.SurProjectAttendanceUnitpayMapper;
import com.yanzhu.jh.project.domain.SurProjectAttendanceUnitpay;
import com.yanzhu.jh.project.service.ISurProjectAttendanceUnitpayService;
import com.ruoyi.common.utils.SecurityUtils;
/**
* Service
*
* @author ruoyi
* @date 2024-11-10
*/
@Service
public class SurProjectAttendanceUnitpayServiceImpl implements ISurProjectAttendanceUnitpayService
{
@Autowired
private SurProjectAttendanceUnitpayMapper surProjectAttendanceUnitpayMapper;
/**
*
*
* @param id
* @return
*/
@Override
public SurProjectAttendanceUnitpay selectSurProjectAttendanceUnitpayById(Long id)
{
return surProjectAttendanceUnitpayMapper.selectSurProjectAttendanceUnitpayById(id);
}
/**
*
*
* @param surProjectAttendanceUnitpay
* @return
*/
@Override
public List<SurProjectAttendanceUnitpay> selectSurProjectAttendanceUnitpayList(SurProjectAttendanceUnitpay surProjectAttendanceUnitpay)
{
return surProjectAttendanceUnitpayMapper.selectSurProjectAttendanceUnitpayList(surProjectAttendanceUnitpay);
}
/**
*
*
* @param surProjectAttendanceUnitpay
* @return
*/
@Override
public int insertSurProjectAttendanceUnitpay(SurProjectAttendanceUnitpay surProjectAttendanceUnitpay)
{
surProjectAttendanceUnitpay.setCreateBy(SecurityUtils.getUsername());
surProjectAttendanceUnitpay.setCreateTime(DateUtils.getNowDate());
return surProjectAttendanceUnitpayMapper.insertSurProjectAttendanceUnitpay(surProjectAttendanceUnitpay);
}
/**
*
*
* @param surProjectAttendanceUnitpay
* @return
*/
@Override
public int updateSurProjectAttendanceUnitpay(SurProjectAttendanceUnitpay surProjectAttendanceUnitpay)
{
surProjectAttendanceUnitpay.setUpdateBy(SecurityUtils.getUsername());
surProjectAttendanceUnitpay.setUpdateTime(DateUtils.getNowDate());
return surProjectAttendanceUnitpayMapper.updateSurProjectAttendanceUnitpay(surProjectAttendanceUnitpay);
}
/**
*
*
* @param ids
* @return
*/
@Override
public int deleteSurProjectAttendanceUnitpayByIds(Long[] ids)
{
return surProjectAttendanceUnitpayMapper.deleteSurProjectAttendanceUnitpayByIds(ids);
}
/**
*
*
* @param id
* @return
*/
@Override
public int deleteSurProjectAttendanceUnitpayById(Long id)
{
return surProjectAttendanceUnitpayMapper.deleteSurProjectAttendanceUnitpayById(id);
}
@Override
public Long getPay(List<SurProjectAttendanceUnitpay> payList, SurProjectAttendanceData it) {
for(SurProjectAttendanceUnitpay pay : payList){
if(StrUtil.equals(pay.getGroupName(),it.getGroupName()) && StrUtil.equals(pay.getWorkTypeName(),it.getWorkTypeName())){
it.setUnitPay(pay.getUnitPay());
return it.getDays()*pay.getUnitPay();
}
}
return 0l;
}
@Override
public List<SurProjectAttendanceUnitpay> initList(SurProjectAttendanceUnitpay surProjectAttendanceUnitpay) {
int year= DateUtil.parse(DateUtil.now()).year();
surProjectAttendanceUnitpay.setYear(year);
return surProjectAttendanceUnitpayMapper.initList(surProjectAttendanceUnitpay);
}
@Override
public int addSurProjectAttendanceUnitpaies(List<SurProjectAttendanceUnitpay> datas) {
if(datas.size()==0){
return 0;
}
Long cfgId= datas.get(0).getCfgId();
SurProjectAttendanceUnitpay where=new SurProjectAttendanceUnitpay();
where.setCfgId(cfgId);
List<SurProjectAttendanceUnitpay> olds=surProjectAttendanceUnitpayMapper.selectSurProjectAttendanceUnitpayList(where);
List<Long> addIds=new ArrayList<>();
for(SurProjectAttendanceUnitpay it : datas){
if(it.getId()!=null){
surProjectAttendanceUnitpayMapper.updateSurProjectAttendanceUnitpay(it);
addIds.add(it.getId());
}else{
surProjectAttendanceUnitpayMapper.insertSurProjectAttendanceUnitpay(it);
}
}
for(SurProjectAttendanceUnitpay it : olds){
if(!addIds.contains(it.getId())){
surProjectAttendanceUnitpayMapper.deleteSurProjectAttendanceUnitpayById(it.getId());
}
}
return datas.size();
}
}

View File

@ -42,6 +42,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" />
<result property="remark" column="remark" />
<result property="days" column="days"/>
</resultMap>
<sql id="selectSurProjectAttendanceDataVo">
@ -450,6 +451,86 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
from sys_dept sd
where sd.dept_name = #{deptName}
</select>
<select id="selectSurProjectAttendanceDataListByDate" parameterType="surProjectAttendanceData" resultMap="SurProjectAttendanceDataResult">
<include refid="selectSurProjectAttendanceDataVo"/>
<where>
<if test="cfgid != null "> and cfgid = #{cfgid}</if>
<if test="appId != null "> and app_id = #{appId}</if>
<if test="projectId != null ">and cfgid in (select id from sur_project_attendance_cfg where projectId = #{projectId}
<if test="deptId != null "> and sub_dept_id = #{deptId}</if>
)</if>
<if test="vendorsCode != null and vendorsCode != ''"> and vendors_code = #{vendorsCode}</if>
<if test="serverid != null "> and serverid = #{serverid}</if>
<if test="workerId != null "> and workerId = #{workerId}</if>
<if test="attendanceOutTime!=null and attendanceOutTime!=''">
and (date(attendance_out_time) =date(#{attendanceOutTime}) or date(attendance_time) =date(#{attendanceOutTime}))
</if>
<if test="teamId != null "> and teamId = #{teamId}</if>
<if test="workTypeCode != null and workTypeCode != ''"> and workTypeCode = #{workTypeCode}</if>
<if test="companyId != null "> and companyId = #{companyId}</if>
<if test="companyTypeId!=null">
<if test="companyTypeId>100">
<if test="companyTypeId==101">
and companyTypeId in (1,6)
</if>
<if test="companyTypeId==102">
and companyTypeId =8
</if>
<if test="companyTypeId==103">
and companyTypeId in (0,2,3,4,5)
</if>
</if>
<if test="companyTypeId &lt;100">
and companyTypeId=#{companyTypeId}
</if>
</if>
<if test="vendorId != null "> and vendorId = #{vendorId}</if>
<if test="deviceCode != null and deviceCode != ''"> and device_code = #{deviceCode}</if>
<if test="scanPhoto != null and scanPhoto != ''"> and scanPhoto like concat('%', #{scanPhoto}, '%')</if>
<if test="workerName != null and workerName != ''"> and workerName like concat('%', #{workerName}, '%')</if>
<if test="isDel != null "> and is_del = #{isDel}</if>
<if test="attendanceTime != null and attendanceTime != ''"> and
(date(attendance_time) = date(#{attendanceTime}) or date(attendance_out_time) = date(#{attendanceTime}) )</if>
<if test="identification != null and identification != ''"> and identification = #{identification}</if>
</where>
order by id desc
</select>
<select id="selectSurProjectAttendanceDataListByMonth" parameterType="surProjectAttendanceData" resultMap="SurProjectAttendanceDataResult">
WITH RankedAttendance AS (
SELECT
id,
workerId,
COUNT(1) OVER (PARTITION BY workerId) AS days,
ROW_NUMBER() OVER (PARTITION BY workerId ORDER BY id) AS rn
FROM sur_project_attendance_data_${year}
<where>
<if test="cfgid != null "> and cfgid = #{cfgid}</if>
<if test="projectId != null ">and cfgid in (select id from sur_project_attendance_cfg where projectId = #{projectId}
<if test="deptId != null "> and sub_dept_id = #{deptId}</if>
)</if>
<if test="attendanceTime!=null or attendanceOutTime!=null">
<if test="attendanceTime!=null and attendanceOutTime!=null">
AND (date(attendance_time) &gt;= date(#{attendanceTime}) or date(attendance_out_time) &gt;= date(#{attendanceTime}))
AND (date(attendance_time) &lt;= date(#{attendanceOutTime}) or date(attendance_out_time) &lt;= date(#{attendanceOutTime}))
</if>
<if test="attendanceTime==null and attendanceOutTime!=null">
AND (date(attendance_time) &lt;= date(#{attendanceOutTime}) or date(attendance_out_time) &lt;= date(#{attendanceOutTime}))
</if>
<if test="attendanceTime!=null and attendanceOutTime==null">
AND (date(attendance_time) &gt;= date(#{attendanceTime}) or date(attendance_out_time) &gt;= date(#{attendanceTime}))
</if>
</if>
</where>
)
SELECT a.*, b.days
FROM sur_project_attendance_data_${year} a
JOIN RankedAttendance b ON a.id = b.id
WHERE b.rn = 1
order by a.workerId
</select>
<select id="todayAttendance" parameterType="SurProjectAttendanceData" resultMap="SurProjectAttendanceDataResult">
select ady.* from sur_project_attendance_data_${year} ady

View File

@ -0,0 +1,113 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yanzhu.jh.project.mapper.SurProjectAttendanceUnitpayMapper">
<resultMap type="SurProjectAttendanceUnitpay" id="SurProjectAttendanceUnitpayResult">
<result property="id" column="id" />
<result property="cfgId" column="cfgId" />
<result property="groupId" column="groupId" />
<result property="groupName" column="groupName" />
<result property="workTypeCode" column="workTypeCode" />
<result property="workTypeName" column="workTypeName" />
<result property="unitPay" column="unitPay" />
<result property="remark" column="remark" />
<result property="isDel" column="is_del" />
<result property="createBy" column="create_by" />
<result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" />
</resultMap>
<sql id="selectSurProjectAttendanceUnitpayVo">
select id, cfgId, groupId, groupName, workTypeCode, workTypeName, unitPay, remark, is_del, create_by, create_time, update_by, update_time
from sur_project_attendance_unitpay
</sql>
<select id="selectSurProjectAttendanceUnitpayList" parameterType="SurProjectAttendanceUnitpay" resultMap="SurProjectAttendanceUnitpayResult">
<include refid="selectSurProjectAttendanceUnitpayVo"/>
<where>
<if test="cfgId != null "> and cfgId = #{cfgId}</if>
<if test="groupId != null and groupId != ''"> and groupId = #{groupId}</if>
<if test="groupName != null and groupName != ''"> and groupName like concat('%', #{groupName}, '%')</if>
<if test="workTypeCode != null and workTypeCode != ''"> and workTypeCode = #{workTypeCode}</if>
<if test="workTypeName != null and workTypeName != ''"> and workTypeName like concat('%', #{workTypeName}, '%')</if>
<if test="unitPay != null "> and unitPay = #{unitPay}</if>
<if test="isDel != null "> and is_del = #{isDel}</if>
</where>
</select>
<select id="initList" parameterType="SurProjectAttendanceUnitpay" resultMap="SurProjectAttendanceUnitpayResult">
select a.cfgId,a.groupName,a.workTypeCode,a.workTypeName
from sur_project_attendance_data_${year} a
where a.cfgId=23
group by a.cfgId, a.groupName,a.workTypeCode,a.workTypeName
</select>
<select id="selectSurProjectAttendanceUnitpayById" parameterType="Long" resultMap="SurProjectAttendanceUnitpayResult">
<include refid="selectSurProjectAttendanceUnitpayVo"/>
where id = #{id}
</select>
<insert id="insertSurProjectAttendanceUnitpay" parameterType="SurProjectAttendanceUnitpay" useGeneratedKeys="true" keyProperty="id">
insert into sur_project_attendance_unitpay
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="cfgId != null">cfgId,</if>
<if test="groupId != null and groupId != ''">groupId,</if>
<if test="groupName != null and groupName != ''">groupName,</if>
<if test="workTypeCode != null and workTypeCode != ''">workTypeCode,</if>
<if test="workTypeName != null and workTypeName != ''">workTypeName,</if>
<if test="unitPay != null">unitPay,</if>
<if test="remark != null and remark != ''">remark,</if>
<if test="isDel != null">is_del,</if>
<if test="createBy != null and createBy != ''">create_by,</if>
<if test="createTime != null">create_time,</if>
<if test="updateBy != null and updateBy != ''">update_by,</if>
<if test="updateTime != null">update_time,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="cfgId != null">#{cfgId},</if>
<if test="groupId != null and groupId != ''">#{groupId},</if>
<if test="groupName != null and groupName != ''">#{groupName},</if>
<if test="workTypeCode != null and workTypeCode != ''">#{workTypeCode},</if>
<if test="workTypeName != null and workTypeName != ''">#{workTypeName},</if>
<if test="unitPay != null">#{unitPay},</if>
<if test="remark != null and remark != ''">#{remark},</if>
<if test="isDel != null">#{isDel},</if>
<if test="createBy != null and createBy != ''">#{createBy},</if>
<if test="createTime != null">#{createTime},</if>
<if test="updateBy != null and updateBy != ''">#{updateBy},</if>
<if test="updateTime != null">#{updateTime},</if>
</trim>
</insert>
<update id="updateSurProjectAttendanceUnitpay" parameterType="SurProjectAttendanceUnitpay">
update sur_project_attendance_unitpay
<trim prefix="SET" suffixOverrides=",">
<if test="cfgId != null">cfgId = #{cfgId},</if>
<if test="groupId != null and groupId != ''">groupId = #{groupId},</if>
<if test="groupName != null and groupName != ''">groupName = #{groupName},</if>
<if test="workTypeCode != null and workTypeCode != ''">workTypeCode = #{workTypeCode},</if>
<if test="workTypeName != null and workTypeName != ''">workTypeName = #{workTypeName},</if>
<if test="unitPay != null">unitPay = #{unitPay},</if>
<if test="remark != null and remark != ''">remark = #{remark},</if>
<if test="isDel != null">is_del = #{isDel},</if>
<if test="createBy != null and createBy != ''">create_by = #{createBy},</if>
<if test="createTime != null">create_time = #{createTime},</if>
<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
<if test="updateTime != null">update_time = #{updateTime},</if>
</trim>
where id = #{id}
</update>
<delete id="deleteSurProjectAttendanceUnitpayById" parameterType="Long">
delete from sur_project_attendance_unitpay where id = #{id}
</delete>
<delete id="deleteSurProjectAttendanceUnitpayByIds" parameterType="String">
delete from sur_project_attendance_unitpay where id in
<foreach item="id" collection="array" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
</mapper>

4
yarn.lock 100644
View File

@ -0,0 +1,4 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1