Merge branch 'dev_xd' of http://62.234.3.186:3000/jiangyq/YZProjectCloud into dev_xd
commit
06ceddbd15
|
@ -4,10 +4,24 @@
|
||||||
<el-col :span="8" style="margin-left:20px;width:calc(33.33% - 20px);">
|
<el-col :span="8" style="margin-left:20px;width:calc(33.33% - 20px);">
|
||||||
<div class="head-title-tab">
|
<div class="head-title-tab">
|
||||||
<div :class="nav == 1 ? 'head-nav active' : 'head-nav'" @click="doNav(1)" v-if="1==2">项目概况</div>
|
<div :class="nav == 1 ? 'head-nav active' : 'head-nav'" @click="doNav(1)" v-if="1==2">项目概况</div>
|
||||||
<div :class="nav == 2 ? 'head-nav active' : 'head-nav'" @click="doNav(2)">项目详情</div>
|
<div :class="nav == 2 ? 'head-nav active' : 'head-nav'" @click="doNav(2)" v-if="1==2">项目详情</div>
|
||||||
<div :class="nav == 7 ? 'head-nav active' : 'head-nav'" @click="doNav(7)">劳务管理</div>
|
<div :class="nav == 7 ? 'head-nav active' : 'head-nav'" @click="doNav(7)" v-if="1==2">劳务管理</div>
|
||||||
|
|
||||||
|
<div :class="(nav >= 100 && nav < 200) || nav == 1 ? 'head-nav active' : 'head-nav'" style="position: relative;" class="has-submenu">
|
||||||
|
<div>项目概况</div>
|
||||||
|
<div class="header-btn-list">
|
||||||
|
<div class="header-btn-list-arrow"></div>
|
||||||
|
<div class="header-btn-list-item" style>
|
||||||
|
<div class="header-btn-list-padding menu-row1" style="text-align: left;">
|
||||||
|
<button type="button" :class="nav == 101 ? 'active' : ''" class="sub-btn" @click="doNav(101)">项目详情</button>
|
||||||
|
<button type="button" :class="nav == 102 ? 'active' : ''" class="sub-btn" @click="doNav(102)">劳务管理</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div :class="(nav >= 300 && nav < 400) || nav == 3 ? 'head-nav active' : 'head-nav'" style="position: relative;" class="has-submenu">
|
<div :class="(nav >= 300 && nav < 400) || nav == 3 ? 'head-nav active' : 'head-nav'" style="position: relative;" class="has-submenu">
|
||||||
<div @click="doNav(3)">安全管理</div>
|
<div>安全管理</div>
|
||||||
<div class="header-btn-list">
|
<div class="header-btn-list">
|
||||||
<div class="header-btn-list-arrow"></div>
|
<div class="header-btn-list-arrow"></div>
|
||||||
<div class="header-btn-list-item" style>
|
<div class="header-btn-list-item" style>
|
||||||
|
@ -32,7 +46,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div :class="(nav >= 400 && nav < 500) || nav == 4 ? 'head-nav active' : 'head-nav'" style="position: relative;" class="has-submenu">
|
<div :class="(nav >= 400 && nav < 500) || nav == 4 ? 'head-nav active' : 'head-nav'" style="position: relative;" class="has-submenu">
|
||||||
<div @click="doNav(4)">质量管理</div>
|
<div>质量管理</div>
|
||||||
<div class="header-btn-list">
|
<div class="header-btn-list">
|
||||||
<div class="header-btn-list-arrow"></div>
|
<div class="header-btn-list-arrow"></div>
|
||||||
<div class="header-btn-list-item" style>
|
<div class="header-btn-list-item" style>
|
||||||
|
@ -50,7 +64,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div :class="(nav >= 500 && nav < 600) || nav == 5 ? 'head-nav active' : 'head-nav'" style="position: relative;" class="has-submenu">
|
<div :class="(nav >= 500 && nav < 600) || nav == 5 ? 'head-nav active' : 'head-nav'" style="position: relative;" class="has-submenu">
|
||||||
<div @click="doNav(5)">进度管理</div>
|
<div>进度管理</div>
|
||||||
<div class="header-btn-list">
|
<div class="header-btn-list">
|
||||||
<div class="header-btn-list-arrow"></div>
|
<div class="header-btn-list-arrow"></div>
|
||||||
<div class="header-btn-list-item" style>
|
<div class="header-btn-list-item" style>
|
||||||
|
@ -179,11 +193,11 @@ export default {
|
||||||
case 1:
|
case 1:
|
||||||
this.$router.push('/index')
|
this.$router.push('/index')
|
||||||
break
|
break
|
||||||
case 2:
|
case 101:
|
||||||
this.$router.push('/detail')
|
this.$router.push('/detail')
|
||||||
break
|
break
|
||||||
case 3:
|
case 3:
|
||||||
this.$router.push('/prjSafety')
|
//this.$router.push('/prjSafety')
|
||||||
break
|
break
|
||||||
case 309:
|
case 309:
|
||||||
this.$router.push('/videoMonitor')
|
this.$router.push('/videoMonitor')
|
||||||
|
@ -204,15 +218,15 @@ export default {
|
||||||
this.$router.push('/aiWarning')
|
this.$router.push('/aiWarning')
|
||||||
break
|
break
|
||||||
case 4:
|
case 4:
|
||||||
this.$router.push('/prjQuality')
|
//this.$router.push('/prjQuality')
|
||||||
break
|
break
|
||||||
case 5:
|
case 5:
|
||||||
this.$router.push('/prjProgress')
|
//this.$router.push('/prjProgress')
|
||||||
break
|
break
|
||||||
case 6:
|
case 6:
|
||||||
this.$router.push('/greenCarbon')
|
this.$router.push('/greenCarbon')
|
||||||
break
|
break
|
||||||
case 7:
|
case 102:
|
||||||
this.$router.push('/labor')
|
this.$router.push('/labor')
|
||||||
break
|
break
|
||||||
case 501:
|
case 501:
|
||||||
|
|
|
@ -14,14 +14,14 @@ const routes = [
|
||||||
{
|
{
|
||||||
path: "/detail",
|
path: "/detail",
|
||||||
name: "detail",
|
name: "detail",
|
||||||
meta: { nav: 2 },
|
meta: { nav: 101 },
|
||||||
component: () =>
|
component: () =>
|
||||||
import(/* webpackChunkName: "detail" */ "../views/projectDetail.vue"),
|
import(/* webpackChunkName: "detail" */ "../views/projectDetail.vue"),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "/labor",
|
path: "/labor",
|
||||||
name: "labor",
|
name: "labor",
|
||||||
meta: { nav: 7 },
|
meta: { nav: 102 },
|
||||||
component: () =>
|
component: () =>
|
||||||
import(/* webpackChunkName: "labor" */ "../views/projectLabor.vue"),
|
import(/* webpackChunkName: "labor" */ "../views/projectLabor.vue"),
|
||||||
},
|
},
|
||||||
|
|
|
@ -542,7 +542,7 @@ export default {
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
window.detailApp = this
|
window.detailApp = this
|
||||||
this.$store.dispatch('ChangeNav', 2)
|
this.$store.dispatch('ChangeNav', 101)
|
||||||
this.$bus.$on(
|
this.$bus.$on(
|
||||||
'projectChange',
|
'projectChange',
|
||||||
debounce((prj) => {
|
debounce((prj) => {
|
||||||
|
|
|
@ -532,7 +532,7 @@ export default {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
this.$store.dispatch('ChangeNav', 7)
|
this.$store.dispatch('ChangeNav', 102)
|
||||||
this.$bus.$on(
|
this.$bus.$on(
|
||||||
'projectChange',
|
'projectChange',
|
||||||
debounce((prj) => {
|
debounce((prj) => {
|
||||||
|
|
|
@ -1,9 +1,11 @@
|
||||||
package com.yanzhu.manage.mapper;
|
package com.yanzhu.manage.mapper;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import com.yanzhu.manage.domain.AttendanceUbiData;
|
import com.yanzhu.manage.domain.AttendanceUbiData;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 考勤管理Mapper接口
|
* 考勤管理Mapper接口
|
||||||
|
@ -78,4 +80,19 @@ public interface AttendanceUbiDataMapper
|
||||||
*/
|
*/
|
||||||
List<Map<String,Object>> statsAttendanceView(AttendanceUbiData where);
|
List<Map<String,Object>> statsAttendanceView(AttendanceUbiData where);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 劳务人员七天出勤趋势
|
||||||
|
* @param prjId 项目ID
|
||||||
|
* @param dateStart 开始日期(7天前)
|
||||||
|
* @param dateEnd 结束日期(今天)
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<AttendanceUbiData> groupAttendanceLastWeek(@Param("prjId") Long prjId,@Param("dateStart") Date dateStart,@Param("dateEnd") Date dateEnd);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 实时考勤进出
|
||||||
|
* @param prjId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<AttendanceUbiData> getRealAttendance(@Param("prjId") Long prjId);
|
||||||
}
|
}
|
||||||
|
|
|
@ -170,4 +170,25 @@ public interface ProProjectInfoSubdeptsUsersMapper
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public List<Map<String,Object>> fileGroupLeaderUsers(@Param("subDeptId")Long subDeptId, @Param("craftPost")String craftPost);
|
public List<Map<String,Object>> fileGroupLeaderUsers(@Param("subDeptId")Long subDeptId, @Param("craftPost")String craftPost);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分组统计人员年龄,省份统计信息
|
||||||
|
* @param projectId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<ProProjectInfoSubdeptsUsers> groupWorkderNative(@Param("projectId") Long projectId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 劳务人员工种占比
|
||||||
|
* @param projectId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<ProProjectInfoSubdeptsUsers> getWorkerCountGroupByType(@Param("projectId") Long projectId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 考勤预警
|
||||||
|
* @param prjId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<ProProjectInfoSubdeptsUsers> getAttendanceAlert(@Param("projectId")Long prjId);
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@ package com.yanzhu.manage.mapper;
|
||||||
import com.yanzhu.manage.domain.SurProjectAttendanceData;
|
import com.yanzhu.manage.domain.SurProjectAttendanceData;
|
||||||
import org.apache.ibatis.annotations.Param;
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
@ -136,4 +137,21 @@ public interface SurProjectAttendanceDataMapper
|
||||||
List<SurProjectAttendanceData> selectSurProjectAttendanceDataListByMonth(SurProjectAttendanceData attWhere);
|
List<SurProjectAttendanceData> selectSurProjectAttendanceDataListByMonth(SurProjectAttendanceData attWhere);
|
||||||
|
|
||||||
List<SurProjectAttendanceData> selectSurProjectAttendanceDataListByDate(SurProjectAttendanceData attWhere);
|
List<SurProjectAttendanceData> selectSurProjectAttendanceDataListByDate(SurProjectAttendanceData attWhere);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 劳务人员七天出勤趋势
|
||||||
|
* @param prjId 项目ID
|
||||||
|
* @param dateStart 开始日期(7天前)
|
||||||
|
* @param dateEnd 结束日期(今天)
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<SurProjectAttendanceData> groupAttendanceLastWeek(@Param("prjId") Long prjId,@Param("dateStart") Date dateStart,@Param("dateEnd") Date dateEnd,@Param("year") int year);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 实时考勤进出
|
||||||
|
* @param prjId
|
||||||
|
* @param year
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<SurProjectAttendanceData> getRealAttendance(@Param("prjId") Long prjId,@Param("year") int year);
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,8 +2,10 @@ package com.yanzhu.manage.mapper;
|
||||||
|
|
||||||
|
|
||||||
import com.yanzhu.manage.domain.AttendanceCfg;
|
import com.yanzhu.manage.domain.AttendanceCfg;
|
||||||
|
import com.yanzhu.manage.domain.ProProjectInfoSubdeptsUsers;
|
||||||
import com.yanzhu.manage.domain.SurProjectAttendanceData;
|
import com.yanzhu.manage.domain.SurProjectAttendanceData;
|
||||||
import com.yanzhu.manage.domain.SurProjectAttendanceUser;
|
import com.yanzhu.manage.domain.SurProjectAttendanceUser;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
@ -167,4 +169,25 @@ public interface SurProjectAttendanceUserMapper
|
||||||
*/
|
*/
|
||||||
List<SurProjectAttendanceUser> queryWorkerByState(SurProjectAttendanceUser where);
|
List<SurProjectAttendanceUser> queryWorkerByState(SurProjectAttendanceUser where);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取项目人员年龄,地域分组信息
|
||||||
|
* @param projectId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<SurProjectAttendanceUser> groupWorkderNative(@Param("projectId") Long projectId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
*劳务人员工种占比
|
||||||
|
* @param prjId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<SurProjectAttendanceUser> getWorkerCountGroupByType(@Param("projectId")Long prjId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 考勤预警
|
||||||
|
* @param prjId
|
||||||
|
* @param year
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<SurProjectAttendanceUser> getAttendanceAlert(@Param("projectId")Long prjId, @Param("year")int year);
|
||||||
}
|
}
|
||||||
|
|
|
@ -249,4 +249,27 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
)days
|
)days
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<select id="groupAttendanceLastWeek" resultMap="AttendanceUbiDataResult">
|
||||||
|
SELECT dt comName, count(1) comId
|
||||||
|
from (SELECT DISTINCT userid, date (ifnull(inTime, outTime)) dt from attendance_ubi_data
|
||||||
|
where is_del!=1
|
||||||
|
and projectid=#{prjId}
|
||||||
|
AND (date (inTime) >= date (#{dateStart})
|
||||||
|
or date (outTime) >= date (#{dateStart}))
|
||||||
|
AND (date (inTime) <= date (#{dateEnd})
|
||||||
|
or date (outTime) <= date (#{dateEnd}))
|
||||||
|
) tmp
|
||||||
|
GROUP BY dt
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="getRealAttendance" resultMap="AttendanceUbiDataResult">
|
||||||
|
<include refid="selectAttendanceUbiDataVo"/>
|
||||||
|
where
|
||||||
|
is_del!=1
|
||||||
|
and projectid=#{prjId}
|
||||||
|
and date(inTime)=date(now()) or date(outTime)=date(now())
|
||||||
|
order by ifnull(inTime,outTime) DESC
|
||||||
|
LIMIT 4
|
||||||
|
</select>
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
|
@ -420,4 +420,40 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
)
|
)
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<select id="groupWorkderNative" resultMap="ProProjectInfoSubdeptsUsersResult">
|
||||||
|
select psu.card_code cardCode,nav.address comName
|
||||||
|
from pro_project_info_subdepts_users psu
|
||||||
|
left join sys_native nav on left(psu.card_code,6)=nav.id
|
||||||
|
where psu.project_id = #{projectId}
|
||||||
|
and psu.user_post != '66'
|
||||||
|
and psu.approve_status >= 100
|
||||||
|
and psu.is_del != 2
|
||||||
|
</select>
|
||||||
|
<select id="getWorkerCountGroupByType" resultMap="ProProjectInfoSubdeptsUsersResult">
|
||||||
|
select dic2.dict_label as craft_post_name,
|
||||||
|
count(1) comId
|
||||||
|
from pro_project_info_subdepts_users psu
|
||||||
|
join sys_dict_data dic2 on psu.`craft_post` = dic2.`dict_value` and dic2.`dict_type` = 'pro_craft_post'
|
||||||
|
where psu.is_del!=2
|
||||||
|
and psu.project_id=#{projectId}
|
||||||
|
GROUP BY dic2.dict_label
|
||||||
|
order by count(1) desc
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="getAttendanceAlert" resultMap="ProProjectInfoSubdeptsUsersResult">
|
||||||
|
select us.*,TIMESTAMPDIFF(Day, att.dt,now()) com_id from (
|
||||||
|
SELECT
|
||||||
|
psu.id, psu.par_id,psu.project_id, pi.project_name, psu.sub_dept_id, psu.sub_dept_type,
|
||||||
|
pdept.sub_dept_name, psu.sub_dept_group_name, psu.user_name
|
||||||
|
from pro_project_info_subdepts_users psu
|
||||||
|
left join pro_project_info pi on pi.id = psu.project_id
|
||||||
|
join pro_project_info_subdepts pdept on psu.sub_dept_id=pdept.id
|
||||||
|
where psu.is_del!=2 and psu.use_status=0 and psu.project_id=#{projectId}
|
||||||
|
) us
|
||||||
|
join (
|
||||||
|
select userId,max(ifnull(inTime,outTime)) dt from attendance_ubi_data
|
||||||
|
where projectid=#{projectId} and is_del!=1
|
||||||
|
group by userId
|
||||||
|
order by max(ifnull(inTime,outTime)) ) att on us.id=att.userId
|
||||||
|
</select>
|
||||||
</mapper>
|
</mapper>
|
|
@ -641,11 +641,34 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
select '3' as type, DATE_FORMAT(days.attendanceTime, '%m-%d') as attendanceTime,days.total from(
|
select '3' as type, DATE_FORMAT(days.attendanceTime, '%m-%d') as attendanceTime,days.total from(
|
||||||
select date(d.attendance_time) as attendanceTime, DATE_FORMAT(d.attendance_time, '%m-%d'),count(1) as total from sur_project_attendance_data_${year} d
|
select date(d.attendance_time) as attendanceTime, DATE_FORMAT(d.attendance_time, '%m-%d'),count(1) as total from sur_project_attendance_data_${year} d
|
||||||
where d.cfgid in (select cfg.id from attendance_cfg cfg where cfg.project_id=#{projectId} and cfg.is_del=0)
|
where d.cfgid in (select cfg.id from attendance_cfg cfg where cfg.project_id=#{projectId} and cfg.is_del=0)
|
||||||
and d.is_del=0
|
and d.is_del=0 and state=0
|
||||||
and date(d.attendance_time) between #{attendanceTime} and #{attendanceOutTime}
|
and date(d.attendance_time) between #{attendanceTime} and #{attendanceOutTime}
|
||||||
group by date(d.attendance_time)
|
group by date(d.attendance_time)
|
||||||
order by date(d.attendance_time)
|
order by date(d.attendance_time)
|
||||||
)days
|
)days
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<select id="groupAttendanceLastWeek" resultMap="SurProjectAttendanceDataResult">
|
||||||
|
SELECT dt deptName,count(1) deptId
|
||||||
|
from (
|
||||||
|
select DISTINCT workerId, date(ifnull(attendance_time,attendance_out_time)) dt
|
||||||
|
from sur_project_attendance_data_${year} where
|
||||||
|
is_del !=1 and state=0
|
||||||
|
and projectid=#{prjId}
|
||||||
|
AND (date(attendance_time) >= date(#{dateStart}) or date(attendance_out_time) >= date(#{dateStart}))
|
||||||
|
AND (date(attendance_time) <= date(#{dateEnd}) or date(attendance_out_time) <= date(#{dateEnd}))
|
||||||
|
|
||||||
|
) tmp
|
||||||
|
group by dt
|
||||||
|
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="getRealAttendance" resultMap="SurProjectAttendanceDataResult">
|
||||||
|
select * from sur_project_attendance_data_${year}
|
||||||
|
where date(attendance_time)=date(now()) or date(attendance_out_time)=date(now())
|
||||||
|
and is_del!=1
|
||||||
|
and projectid=#{prjId} and state=0
|
||||||
|
order by ifnull(attendance_time,attendance_out_time) DESC
|
||||||
|
LIMIT 4
|
||||||
|
</select>
|
||||||
</mapper>
|
</mapper>
|
|
@ -809,4 +809,42 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
|
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<select id="groupWorkderNative" resultMap="SurProjectAttendanceUserResult">
|
||||||
|
select birthDate,nativePlace
|
||||||
|
from sur_project_attendance_user
|
||||||
|
where cfgid in (select id from attendance_cfg where project_id= #{projectId}) and is_del!=1 and state=0
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="getWorkerCountGroupByType" resultMap="SurProjectAttendanceUserResult">
|
||||||
|
select workTypeName,count(1) id from sur_project_attendance_user
|
||||||
|
where cfgid in (select id from attendance_cfg where project_id= #{projectId}) and is_del!=1 and state=0
|
||||||
|
group by workTypeName
|
||||||
|
order by count(1) DESC
|
||||||
|
|
||||||
|
</select>
|
||||||
|
|
||||||
|
|
||||||
|
<select id="getAttendanceAlert" resultMap="SurProjectAttendanceUserResult">
|
||||||
|
|
||||||
|
select u.*,TIMESTAMPDIFF(Day, att.dt,now()) id
|
||||||
|
from (
|
||||||
|
select su.workerId,su.name,pi.project_name companyName, pdept.sub_dept_name teamName
|
||||||
|
from sur_project_attendance_user su
|
||||||
|
left join attendance_cfg cfg on su.cfgId=cfg.ID
|
||||||
|
left join pro_project_info pi on pi.id = cfg.project_id
|
||||||
|
join pro_project_info_subdepts pdept on cfg.dept_id=pdept.id
|
||||||
|
where
|
||||||
|
su.is_del!=1 and su.state=0
|
||||||
|
and cfg.project_id=#{projectId} ) u
|
||||||
|
join
|
||||||
|
|
||||||
|
(
|
||||||
|
|
||||||
|
select workerId,max(ifnull(attendance_time,attendance_out_time)) dt
|
||||||
|
from sur_project_attendance_data_${year}
|
||||||
|
where projectid=#{projectId} and is_del!=1
|
||||||
|
GROUP BY workerId
|
||||||
|
order by max(ifnull(attendance_time,attendance_out_time))
|
||||||
|
) att on u.workerId=att.workerId
|
||||||
|
</select>
|
||||||
</mapper>
|
</mapper>
|
|
@ -0,0 +1,122 @@
|
||||||
|
package com.yanzhu.manage.controller.bigscreen;
|
||||||
|
|
||||||
|
|
||||||
|
import cn.hutool.core.date.DateTime;
|
||||||
|
import cn.hutool.core.date.DateUtil;
|
||||||
|
import com.alibaba.fastjson2.JSONArray;
|
||||||
|
import com.alibaba.fastjson2.JSONObject;
|
||||||
|
import com.yanzhu.common.core.web.controller.BaseController;
|
||||||
|
import com.yanzhu.common.core.web.domain.AjaxResult;
|
||||||
|
import com.yanzhu.manage.domain.AttendanceUbiData;
|
||||||
|
import com.yanzhu.manage.domain.ProProjectInfoSubdeptsUsers;
|
||||||
|
import com.yanzhu.manage.domain.SurProjectAttendanceData;
|
||||||
|
import com.yanzhu.manage.domain.SurProjectAttendanceUser;
|
||||||
|
import com.yanzhu.manage.service.IAttendanceUbiDataService;
|
||||||
|
import com.yanzhu.manage.service.IProProjectInfoSubdeptsUsersService;
|
||||||
|
import com.yanzhu.manage.service.ISurProjectAttendanceDataService;
|
||||||
|
import com.yanzhu.manage.service.ISurProjectAttendanceUserService;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 劳务管理-大屏
|
||||||
|
*/
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/bgscreen/tower")
|
||||||
|
public class LaborController extends BaseController {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
ISurProjectAttendanceUserService surProjectAttendanceUserService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
IAttendanceUbiDataService attendanceUbiDataService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
IProProjectInfoSubdeptsUsersService proProjectInfoSubdeptsUsersService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
ISurProjectAttendanceDataService surProjectAttendanceDataService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分组统计人员年龄,省份统计信息
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@GetMapping("/groupByWorker/{type}/{prjId}")
|
||||||
|
public AjaxResult groupByWorker(@PathVariable("type")String type, @PathVariable("prjId") Long prjId){
|
||||||
|
if("uni".equals(type.toLowerCase())){
|
||||||
|
JSONObject pList=proProjectInfoSubdeptsUsersService.groupWorkderNative(prjId);
|
||||||
|
return AjaxResult.success(pList);
|
||||||
|
}else{
|
||||||
|
JSONObject sList=surProjectAttendanceUserService.groupWorkderNative(prjId);
|
||||||
|
return AjaxResult.success(sList);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 劳务人员七天出勤趋势
|
||||||
|
*/
|
||||||
|
@GetMapping("/groupAttendanceLastWeek/{type}/{prjId}")
|
||||||
|
public AjaxResult groupAttendanceLastWeek(@PathVariable("type")String type, @PathVariable("prjId") Long prjId){
|
||||||
|
Date dateEnd=new DateTime();
|
||||||
|
Date dateStart=DateUtil.offsetDay(dateEnd,7);
|
||||||
|
if("uni".equals(type.toLowerCase())){
|
||||||
|
JSONArray sList=attendanceUbiDataService.groupAttendanceLastWeek(prjId,dateStart,dateEnd);
|
||||||
|
return AjaxResult.success(sList);
|
||||||
|
}else{
|
||||||
|
JSONArray pList=surProjectAttendanceDataService.groupAttendanceLastWeek(prjId,dateStart,dateEnd,DateUtil.year(dateEnd));
|
||||||
|
return AjaxResult.success(pList);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 劳务人员工种占比
|
||||||
|
*/
|
||||||
|
@GetMapping("/getWorkerCountGroupByType/{type}/{prjId}")
|
||||||
|
public AjaxResult getWorkerCountGroupByType(@PathVariable("type")String type, @PathVariable("prjId") Long prjId){
|
||||||
|
if("uni".equals(type.toLowerCase())){
|
||||||
|
List<ProProjectInfoSubdeptsUsers> sList=proProjectInfoSubdeptsUsersService.getWorkerCountGroupByType(prjId);
|
||||||
|
return AjaxResult.success(sList);
|
||||||
|
}else{
|
||||||
|
List<SurProjectAttendanceUser> pList=surProjectAttendanceUserService.getWorkerCountGroupByType(prjId);
|
||||||
|
return AjaxResult.success(pList);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 实时考勤进出
|
||||||
|
*/
|
||||||
|
@GetMapping("/getRealAttendance/{type}/{prjId}")
|
||||||
|
public AjaxResult getRealAttendance(@PathVariable("type")String type, @PathVariable("prjId") Long prjId){
|
||||||
|
if("uni".equals(type.toLowerCase())){
|
||||||
|
List<AttendanceUbiData> sList=attendanceUbiDataService.getRealAttendance(prjId);
|
||||||
|
return AjaxResult.success(sList);
|
||||||
|
}else{
|
||||||
|
Date dateEnd=new DateTime();
|
||||||
|
List<SurProjectAttendanceData> pList=surProjectAttendanceDataService.getRealAttendance(prjId,DateUtil.year(dateEnd));
|
||||||
|
return AjaxResult.success(pList);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 考勤预警
|
||||||
|
*/
|
||||||
|
@GetMapping("/getAttendanceAlert/{type}/{prjId}")
|
||||||
|
public AjaxResult getAttendanceAlert(@PathVariable("type")String type, @PathVariable("prjId") Long prjId){
|
||||||
|
if("uni".equals(type.toLowerCase())){
|
||||||
|
List<ProProjectInfoSubdeptsUsers> sList=proProjectInfoSubdeptsUsersService.getAttendanceAlert(prjId);
|
||||||
|
return AjaxResult.success(sList);
|
||||||
|
}else{
|
||||||
|
Date dateEnd=new DateTime();
|
||||||
|
List<SurProjectAttendanceUser> pList=surProjectAttendanceUserService.getAttendanceAlert(prjId,DateUtil.year(dateEnd));
|
||||||
|
return AjaxResult.success(pList);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -4,7 +4,10 @@ import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson2.JSONArray;
|
||||||
|
import com.alibaba.fastjson2.JSONObject;
|
||||||
import com.yanzhu.manage.domain.AttendanceUbiData;
|
import com.yanzhu.manage.domain.AttendanceUbiData;
|
||||||
|
import com.yanzhu.manage.domain.ProProjectInfoSubdeptsUsers;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 考勤管理Service接口
|
* 考勤管理Service接口
|
||||||
|
@ -97,4 +100,20 @@ public interface IAttendanceUbiDataService
|
||||||
*/
|
*/
|
||||||
List<AttendanceUbiData> findUsersAttendanceView(Long proId);
|
List<AttendanceUbiData> findUsersAttendanceView(Long proId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 劳务人员七天出勤趋势
|
||||||
|
* @param prjId 项目ID
|
||||||
|
* @param dateStart 开始日期(7天前)
|
||||||
|
* @param dateEnd 结束日期(今天)
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
JSONArray groupAttendanceLastWeek(Long prjId, Date dateStart, Date dateEnd);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 实时考勤进出
|
||||||
|
* @param prjId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<AttendanceUbiData> getRealAttendance(Long prjId);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package com.yanzhu.manage.service;
|
package com.yanzhu.manage.service;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson2.JSONObject;
|
||||||
import com.yanzhu.manage.domain.ProProjectInfoSubdeptsUsers;
|
import com.yanzhu.manage.domain.ProProjectInfoSubdeptsUsers;
|
||||||
import com.yanzhu.manage.domain.SignetFileVo;
|
import com.yanzhu.manage.domain.SignetFileVo;
|
||||||
|
|
||||||
|
@ -7,7 +8,7 @@ import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 分包单位工人Service接口
|
* 分包单位工人Service接口 泾河
|
||||||
*
|
*
|
||||||
* @author JiangYuQi
|
* @author JiangYuQi
|
||||||
* @date 2024-08-25
|
* @date 2024-08-25
|
||||||
|
@ -238,4 +239,25 @@ public interface IProProjectInfoSubdeptsUsersService
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
List<Map<String,Object>> fileGroupLeaderUsers(Long subDeptId,String craftPost);
|
List<Map<String,Object>> fileGroupLeaderUsers(Long subDeptId,String craftPost);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分组统计人员年龄,省份统计信息
|
||||||
|
* @param prjId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
JSONObject groupWorkderNative(Long prjId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 劳务人员工种占比
|
||||||
|
* @param prjId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<ProProjectInfoSubdeptsUsers> getWorkerCountGroupByType(Long prjId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 考勤预警
|
||||||
|
* @param prjId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<ProProjectInfoSubdeptsUsers> getAttendanceAlert(Long prjId);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,11 @@
|
||||||
package com.yanzhu.manage.service;
|
package com.yanzhu.manage.service;
|
||||||
|
|
||||||
|
|
||||||
|
import com.alibaba.fastjson2.JSONArray;
|
||||||
|
import com.alibaba.fastjson2.JSONObject;
|
||||||
import com.yanzhu.manage.domain.SurProjectAttendanceData;
|
import com.yanzhu.manage.domain.SurProjectAttendanceData;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
@ -137,4 +140,21 @@ public interface ISurProjectAttendanceDataService
|
||||||
List<SurProjectAttendanceData> selectSurProjectAttendanceDataListByMonth(SurProjectAttendanceData attWhere);
|
List<SurProjectAttendanceData> selectSurProjectAttendanceDataListByMonth(SurProjectAttendanceData attWhere);
|
||||||
|
|
||||||
List<SurProjectAttendanceData> selectSurProjectAttendanceDataListByDate(SurProjectAttendanceData attWhere);
|
List<SurProjectAttendanceData> selectSurProjectAttendanceDataListByDate(SurProjectAttendanceData attWhere);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 劳务人员七天出勤趋势
|
||||||
|
* @param prjId 项目ID
|
||||||
|
* @param dateStart 开始日期(7天前)
|
||||||
|
* @param dateEnd 结束日期(今天)
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
JSONArray groupAttendanceLastWeek(Long prjId, Date dateStart, Date dateEnd, int year);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 实时考勤进出
|
||||||
|
* @param prjId
|
||||||
|
* @param year
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<SurProjectAttendanceData> getRealAttendance(Long prjId, int year);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
package com.yanzhu.manage.service;
|
package com.yanzhu.manage.service;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson2.JSONObject;
|
||||||
|
import com.yanzhu.manage.domain.ProProjectInfoSubdeptsUsers;
|
||||||
import com.yanzhu.manage.domain.SurProjectAttendanceData;
|
import com.yanzhu.manage.domain.SurProjectAttendanceData;
|
||||||
import com.yanzhu.manage.domain.SurProjectAttendanceUser;
|
import com.yanzhu.manage.domain.SurProjectAttendanceUser;
|
||||||
|
|
||||||
|
@ -159,4 +161,26 @@ public interface ISurProjectAttendanceUserService
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
List<SurProjectAttendanceUser> queryWorkerByState(SurProjectAttendanceUser where);
|
List<SurProjectAttendanceUser> queryWorkerByState(SurProjectAttendanceUser where);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取项目人员年龄,地域分组信息
|
||||||
|
* @param prjId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
JSONObject groupWorkderNative(Long prjId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 劳务人员工种占比
|
||||||
|
* @param prjId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<SurProjectAttendanceUser> getWorkerCountGroupByType(Long prjId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 考勤预警
|
||||||
|
* @param prjId
|
||||||
|
* @param year
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<SurProjectAttendanceUser> getAttendanceAlert(Long prjId, int year);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,11 @@
|
||||||
package com.yanzhu.manage.service.impl;
|
package com.yanzhu.manage.service.impl;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.date.DateUtil;
|
||||||
|
import com.alibaba.fastjson2.JSONArray;
|
||||||
|
import com.alibaba.fastjson2.JSONObject;
|
||||||
import com.yanzhu.common.core.context.SecurityContextHolder;
|
import com.yanzhu.common.core.context.SecurityContextHolder;
|
||||||
import com.yanzhu.common.core.enums.ShiFouEnums;
|
import com.yanzhu.common.core.enums.ShiFouEnums;
|
||||||
import com.yanzhu.common.core.enums.UserTypeEnums;
|
import com.yanzhu.common.core.enums.UserTypeEnums;
|
||||||
|
@ -11,6 +14,7 @@ import com.yanzhu.common.core.utils.StringUtils;
|
||||||
import com.yanzhu.common.security.utils.SecurityUtils;
|
import com.yanzhu.common.security.utils.SecurityUtils;
|
||||||
import com.yanzhu.manage.domain.AttendanceUbiData;
|
import com.yanzhu.manage.domain.AttendanceUbiData;
|
||||||
import com.yanzhu.manage.domain.ProProjectInfoSubdeptsUsers;
|
import com.yanzhu.manage.domain.ProProjectInfoSubdeptsUsers;
|
||||||
|
import com.yanzhu.manage.domain.SurProjectAttendanceData;
|
||||||
import com.yanzhu.manage.enums.SubDeptsEnums;
|
import com.yanzhu.manage.enums.SubDeptsEnums;
|
||||||
import com.yanzhu.manage.enums.UserPostEnums;
|
import com.yanzhu.manage.enums.UserPostEnums;
|
||||||
import com.yanzhu.manage.mapper.AttendanceUbiDataMapper;
|
import com.yanzhu.manage.mapper.AttendanceUbiDataMapper;
|
||||||
|
@ -274,4 +278,46 @@ public class AttendanceUbiDataServiceImpl implements IAttendanceUbiDataService
|
||||||
attendanceQuery.setIsDel(ShiFouEnums.FOU.getCode());
|
attendanceQuery.setIsDel(ShiFouEnums.FOU.getCode());
|
||||||
return attendanceUbiDataMapper.selectAttendanceUbiDataList(attendanceQuery);
|
return attendanceUbiDataMapper.selectAttendanceUbiDataList(attendanceQuery);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 劳务人员七天出勤趋势
|
||||||
|
* @param prjId 项目ID
|
||||||
|
* @param dateStart 开始日期(7天前)
|
||||||
|
* @param dateEnd 结束日期(今天)
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public JSONArray groupAttendanceLastWeek(Long prjId, Date dateStart, Date dateEnd) {
|
||||||
|
List<AttendanceUbiData> list=attendanceUbiDataMapper.groupAttendanceLastWeek(prjId,dateStart,dateEnd);
|
||||||
|
JSONArray jArr = new JSONArray();
|
||||||
|
for(int i=0;i<7;i++){
|
||||||
|
String dt=DateUtil.format(DateUtil.offsetDay(dateStart,1*i),"yyyy-MM-dd");
|
||||||
|
List<AttendanceUbiData> sub=list.stream().filter(item->item.getComName().equals(dt)).collect(Collectors.toList());
|
||||||
|
JSONObject jo=new JSONObject();
|
||||||
|
jo.put("dt",dt);
|
||||||
|
if(sub.size()>0){
|
||||||
|
Long cnt=sub.get(0).getComId();
|
||||||
|
if(cnt!=null){
|
||||||
|
jo.put("cnt",cnt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!jo.containsKey("cnt")){
|
||||||
|
jo.put("cnt",0);
|
||||||
|
}
|
||||||
|
jArr.add(jo);
|
||||||
|
}
|
||||||
|
return jArr;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 实时考勤进出
|
||||||
|
* @param prjId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public List<AttendanceUbiData> getRealAttendance(Long prjId) {
|
||||||
|
return attendanceUbiDataMapper.getRealAttendance(prjId);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,10 @@
|
||||||
package com.yanzhu.manage.service.impl;
|
package com.yanzhu.manage.service.impl;
|
||||||
|
|
||||||
import cn.binarywang.wx.miniapp.api.WxMaService;
|
import cn.binarywang.wx.miniapp.api.WxMaService;
|
||||||
|
import cn.hutool.core.util.NumberUtil;
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
|
import com.alibaba.fastjson2.JSONArray;
|
||||||
|
import com.alibaba.fastjson2.JSONObject;
|
||||||
import com.yanzhu.common.core.constant.SecurityConstants;
|
import com.yanzhu.common.core.constant.SecurityConstants;
|
||||||
import com.yanzhu.common.core.enums.*;
|
import com.yanzhu.common.core.enums.*;
|
||||||
import com.yanzhu.common.core.exception.ServiceException;
|
import com.yanzhu.common.core.exception.ServiceException;
|
||||||
|
@ -35,6 +38,7 @@ import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 分包单位工人Service业务层处理
|
* 分包单位工人Service业务层处理
|
||||||
|
@ -1694,4 +1698,84 @@ public class ProProjectInfoSubdeptsUsersServiceImpl implements IProProjectInfoSu
|
||||||
return proProjectInfoSubdeptsUsersMapper.fileGroupLeaderUsers(subDeptId,craftPost);
|
return proProjectInfoSubdeptsUsersMapper.fileGroupLeaderUsers(subDeptId,craftPost);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分组统计人员年龄,省份统计信息
|
||||||
|
* @param prjId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public JSONObject groupWorkderNative(Long prjId) {
|
||||||
|
List<ProProjectInfoSubdeptsUsers> list=proProjectInfoSubdeptsUsersMapper.groupWorkderNative(prjId);
|
||||||
|
list.stream().forEach(d->{
|
||||||
|
String nav=d.getComName();
|
||||||
|
if(nav.contains("省")){
|
||||||
|
nav=nav.substring(0,nav.indexOf("省"));
|
||||||
|
}
|
||||||
|
if(nav.contains("市")){
|
||||||
|
nav=nav.substring(0,nav.indexOf("市"));
|
||||||
|
}
|
||||||
|
if(nav.contains("区")){
|
||||||
|
nav=nav.substring(0,nav.indexOf("区"));
|
||||||
|
}
|
||||||
|
d.setComName(nav);
|
||||||
|
String code=d.getCardCode();
|
||||||
|
if(StringUtils.isNotEmpty(code) && code.length()>=10){
|
||||||
|
String strY=code.substring(6-10);
|
||||||
|
if(NumberUtil.isNumber(strY)){
|
||||||
|
int y=DateUtils.calculatedAgeByBirthDay(strY+"-1-1");
|
||||||
|
// 1.18-30 2.30-40 3.40-55 4.55
|
||||||
|
if(y>=18 && y<30){
|
||||||
|
d.setId(1L);
|
||||||
|
}else if(y>=30 && y<40){
|
||||||
|
d.setId(2L);
|
||||||
|
}else if(y>=40 && y<55){
|
||||||
|
d.setId(3L);
|
||||||
|
}else{
|
||||||
|
d.setId(4L);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Map<String,List<ProProjectInfoSubdeptsUsers>> subMap= list.stream().collect(Collectors.groupingBy(ProProjectInfoSubdeptsUsers::getComName));
|
||||||
|
JSONObject joOut=new JSONObject();
|
||||||
|
JSONArray arrNav=new JSONArray();
|
||||||
|
subMap.forEach((k,v)->{
|
||||||
|
JSONObject jo=new JSONObject();
|
||||||
|
jo.put("nativePlace",k);
|
||||||
|
jo.put("count",v.size());
|
||||||
|
arrNav.add(jo);
|
||||||
|
});
|
||||||
|
joOut.put("native",arrNav);
|
||||||
|
Map<Long,List<ProProjectInfoSubdeptsUsers>> subMap2= list.stream().collect(Collectors.groupingBy(ProProjectInfoSubdeptsUsers::getId));
|
||||||
|
JSONArray arrAge=new JSONArray();
|
||||||
|
subMap2.forEach((k,v)->{
|
||||||
|
JSONObject jo=new JSONObject();
|
||||||
|
jo.put("age",k);
|
||||||
|
jo.put("count",v.size());
|
||||||
|
arrNav.add(jo);
|
||||||
|
});
|
||||||
|
joOut.put("age",arrAge);
|
||||||
|
return joOut;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 劳务人员工种占比
|
||||||
|
* @param prjId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public List<ProProjectInfoSubdeptsUsers> getWorkerCountGroupByType(Long prjId) {
|
||||||
|
return proProjectInfoSubdeptsUsersMapper.getWorkerCountGroupByType(prjId);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 实时考勤进出
|
||||||
|
* @param prjId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public List<ProProjectInfoSubdeptsUsers> getAttendanceAlert(Long prjId) {
|
||||||
|
return proProjectInfoSubdeptsUsersMapper.getAttendanceAlert(prjId);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,11 @@
|
||||||
package com.yanzhu.manage.service.impl;
|
package com.yanzhu.manage.service.impl;
|
||||||
|
|
||||||
|
import cn.hutool.core.date.CalendarUtil;
|
||||||
|
import cn.hutool.core.date.DateTime;
|
||||||
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.date.DateUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import com.alibaba.fastjson2.JSONArray;
|
||||||
|
import com.alibaba.fastjson2.JSONObject;
|
||||||
import com.yanzhu.common.core.utils.DateUtils;
|
import com.yanzhu.common.core.utils.DateUtils;
|
||||||
import com.yanzhu.common.core.utils.StringUtils;
|
import com.yanzhu.common.core.utils.StringUtils;
|
||||||
import com.yanzhu.manage.domain.AttendanceCfg;
|
import com.yanzhu.manage.domain.AttendanceCfg;
|
||||||
|
@ -16,10 +20,7 @@ import com.yanzhu.manage.service.ISurProjectAttendanceDataService;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
/**
|
/**
|
||||||
* 劳务实名制管理Service业务层处理
|
* 劳务实名制管理Service业务层处理
|
||||||
|
@ -289,4 +290,56 @@ public class SurProjectAttendanceDataServiceImpl implements ISurProjectAttendanc
|
||||||
return surProjectAttendanceDataMapper.selectSurProjectAttendanceDataListByDate(attWhere);
|
return surProjectAttendanceDataMapper.selectSurProjectAttendanceDataListByDate(attWhere);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 劳务人员七天出勤趋势
|
||||||
|
* @param prjId 项目ID
|
||||||
|
* @param dateStart 开始日期(7天前)
|
||||||
|
* @param dateEnd 结束日期(今天)
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public JSONArray groupAttendanceLastWeek(Long prjId, Date dateStart, Date dateEnd,int year) {
|
||||||
|
List<SurProjectAttendanceData> list=surProjectAttendanceDataMapper.groupAttendanceLastWeek(prjId,dateStart,dateEnd,year);
|
||||||
|
JSONArray jArr = new JSONArray();
|
||||||
|
for(int i=0;i<7;i++){
|
||||||
|
String dt=DateUtil.format(DateUtil.offsetDay(dateStart,1*i),"yyyy-MM-dd");
|
||||||
|
List<SurProjectAttendanceData> sub=list.stream().filter(item->item.getDeptName().equals(dt)).collect(Collectors.toList());
|
||||||
|
JSONObject jo=new JSONObject();
|
||||||
|
jo.put("dt",dt);
|
||||||
|
if(sub.size()>0){
|
||||||
|
Long cnt=sub.get(0).getDeptId();
|
||||||
|
if(cnt!=null){
|
||||||
|
jo.put("cnt",cnt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!jo.containsKey("cnt")){
|
||||||
|
jo.put("cnt",0);
|
||||||
|
}
|
||||||
|
jArr.add(jo);
|
||||||
|
}
|
||||||
|
return jArr;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 实时考勤进出
|
||||||
|
* @param prjId
|
||||||
|
* @param year
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public List<SurProjectAttendanceData> getRealAttendance(Long prjId, int year) {
|
||||||
|
return surProjectAttendanceDataMapper.getRealAttendance(prjId,year);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
Date dateEnd=new DateTime();
|
||||||
|
Date dateStart=DateUtil.offsetDay(dateEnd,-7);
|
||||||
|
System.out.println(dateEnd);
|
||||||
|
System.out.println(dateStart);
|
||||||
|
for(int i=0;i<7;i++){
|
||||||
|
String dt=DateUtil.format(DateUtil.offsetDay(dateStart,1*i),"yyyy-MM-dd");
|
||||||
|
System.out.println(dt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,12 @@
|
||||||
package com.yanzhu.manage.service.impl;
|
package com.yanzhu.manage.service.impl;
|
||||||
|
|
||||||
|
import cn.hutool.core.date.DateTime;
|
||||||
|
import com.alibaba.fastjson2.JSONArray;
|
||||||
|
import com.alibaba.fastjson2.JSONObject;
|
||||||
import com.yanzhu.common.core.utils.DateUtils;
|
import com.yanzhu.common.core.utils.DateUtils;
|
||||||
import com.yanzhu.common.core.utils.StringUtils;
|
import com.yanzhu.common.core.utils.StringUtils;
|
||||||
import com.yanzhu.manage.domain.AttendanceCfg;
|
import com.yanzhu.manage.domain.AttendanceCfg;
|
||||||
|
import com.yanzhu.manage.domain.ProProjectInfoSubdeptsUsers;
|
||||||
import com.yanzhu.manage.domain.SurProjectAttendanceData;
|
import com.yanzhu.manage.domain.SurProjectAttendanceData;
|
||||||
import com.yanzhu.manage.domain.SurProjectAttendanceUser;
|
import com.yanzhu.manage.domain.SurProjectAttendanceUser;
|
||||||
import com.yanzhu.manage.mapper.SurProjectAttendanceUserMapper;
|
import com.yanzhu.manage.mapper.SurProjectAttendanceUserMapper;
|
||||||
|
@ -14,6 +18,8 @@ import java.util.ArrayList;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 考勤人员基本属性Service业务层处理
|
* 考勤人员基本属性Service业务层处理
|
||||||
*
|
*
|
||||||
|
@ -298,6 +304,82 @@ public class SurProjectAttendanceUserServiceImpl implements ISurProjectAttendanc
|
||||||
return surProjectAttendanceUserMapper.queryWorkerByState(where);
|
return surProjectAttendanceUserMapper.queryWorkerByState(where);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取项目人员年龄,地域分组信息
|
||||||
|
* @param prjId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public JSONObject groupWorkderNative(Long prjId) {
|
||||||
|
List<SurProjectAttendanceUser> list=surProjectAttendanceUserMapper.groupWorkderNative(prjId);
|
||||||
|
list.stream().forEach(d->{
|
||||||
|
String nav=d.getNativePlace();
|
||||||
|
if(nav.contains("省")){
|
||||||
|
nav=nav.substring(0,nav.indexOf("省"));
|
||||||
|
}
|
||||||
|
if(nav.contains("市")){
|
||||||
|
nav=nav.substring(0,nav.indexOf("市"));
|
||||||
|
}
|
||||||
|
if(nav.contains("区")){
|
||||||
|
nav=nav.substring(0,nav.indexOf("区"));
|
||||||
|
}
|
||||||
|
Long birthDay=d.getBirthDate();
|
||||||
|
long y=birthDay!=null? new DateTime(birthDay).between(new Date()).betweenYear(true):0;
|
||||||
|
// 1.18-30 2.30-40 3.40-55 4.55
|
||||||
|
if(y>=18 && y<30){
|
||||||
|
d.setId(1L);
|
||||||
|
}else if(y>=30 && y<40){
|
||||||
|
d.setId(2L);
|
||||||
|
}else if(y>=40 && y<55){
|
||||||
|
d.setId(3L);
|
||||||
|
}else{
|
||||||
|
d.setId(4L);
|
||||||
|
}
|
||||||
|
d.setNativePlace(nav);
|
||||||
|
});
|
||||||
|
Map<String,List<SurProjectAttendanceUser>> subMap= list.stream().collect(Collectors.groupingBy(SurProjectAttendanceUser::getNativePlace));
|
||||||
|
JSONObject joOut=new JSONObject();
|
||||||
|
JSONArray arrNav=new JSONArray();
|
||||||
|
subMap.forEach((k,v)->{
|
||||||
|
JSONObject jo=new JSONObject();
|
||||||
|
jo.put("nativePlace",k);
|
||||||
|
jo.put("count",v.size());
|
||||||
|
arrNav.add(jo);
|
||||||
|
});
|
||||||
|
joOut.put("native",arrNav);
|
||||||
|
Map<Long,List<SurProjectAttendanceUser>> subMap2= list.stream().collect(Collectors.groupingBy(SurProjectAttendanceUser::getId));
|
||||||
|
JSONArray arrAge=new JSONArray();
|
||||||
|
subMap2.forEach((k,v)->{
|
||||||
|
JSONObject jo=new JSONObject();
|
||||||
|
jo.put("age",k);
|
||||||
|
jo.put("count",v.size());
|
||||||
|
arrNav.add(jo);
|
||||||
|
});
|
||||||
|
joOut.put("age",arrAge);
|
||||||
|
return joOut;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 劳务人员工种占比
|
||||||
|
* @param prjId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public List<SurProjectAttendanceUser> getWorkerCountGroupByType(Long prjId) {
|
||||||
|
return surProjectAttendanceUserMapper.getWorkerCountGroupByType(prjId);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 考勤预警
|
||||||
|
* @param prjId
|
||||||
|
* @param year
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public List<SurProjectAttendanceUser> getAttendanceAlert(Long prjId, int year) {
|
||||||
|
return surProjectAttendanceUserMapper.getAttendanceAlert(prjId,year);
|
||||||
|
}
|
||||||
|
|
||||||
private Date findDate(List<SurProjectAttendanceUser> datas, SurProjectAttendanceUser u, String type) {
|
private Date findDate(List<SurProjectAttendanceUser> datas, SurProjectAttendanceUser u, String type) {
|
||||||
for (SurProjectAttendanceUser user:datas) {
|
for (SurProjectAttendanceUser user:datas) {
|
||||||
if(user.getWorkerId().equals(u.getWorkerId()) && user.getName().equals(type)){
|
if(user.getWorkerId().equals(u.getWorkerId()) && user.getName().equals(type)){
|
||||||
|
|
|
@ -457,7 +457,7 @@ function makeSelectData(users, type) {
|
||||||
arr.push({
|
arr.push({
|
||||||
label: k,
|
label: k,
|
||||||
options: objs[k].map((it) => {
|
options: objs[k].map((it) => {
|
||||||
let pos = type ? `[${it.userPost == 2 ? '项目经理' : it.userPost == 3 ? '班组长' : ''}]` : ''
|
let pos = type ? `[${it.userPost == 2 ? '项目经理' : it.userPost == 3 ? '班组长' : it.userPost == 8 ? '安全员' : ''}]` : ''
|
||||||
return {
|
return {
|
||||||
value: it.userId,
|
value: it.userId,
|
||||||
label: it.userName + pos,
|
label: it.userName + pos,
|
||||||
|
@ -492,7 +492,9 @@ function getUserTree() {
|
||||||
let users = d.rows || []
|
let users = d.rows || []
|
||||||
data.users = users
|
data.users = users
|
||||||
data.modUserList = makeSelectData(
|
data.modUserList = makeSelectData(
|
||||||
users.filter((it) => it.subDeptType == 4 || it.subDeptType == 5).filter((it) => it.userPost == 2 || it.userPost == 3),
|
users
|
||||||
|
.filter((it) => it.subDeptType == 4 || it.subDeptType == 5)
|
||||||
|
.filter((it) => it.userPost == 2 || it.userPost == 3 || it.userPost == 8),
|
||||||
true
|
true
|
||||||
)
|
)
|
||||||
data.ccUserList = makeSelectData(users.filter((it) => it.userPost != 4 && it.userPost != 5))
|
data.ccUserList = makeSelectData(users.filter((it) => it.userPost != 4 && it.userPost != 5))
|
||||||
|
|
Loading…
Reference in New Issue