From 0205552d92ca9408b7e1842c06d78f667a9f612d Mon Sep 17 00:00:00 2001 From: haha Date: Mon, 19 May 2025 00:12:03 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=B3=E5=8A=A1=E7=AE=A1=E7=90=86=E5=90=8E?= =?UTF-8?q?=E5=8F=B0=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- yanzhu-bigscreen/src/components/header.vue | 34 +++-- yanzhu-bigscreen/src/router/index.js | 4 +- yanzhu-bigscreen/src/views/projectDetail.vue | 2 +- yanzhu-bigscreen/src/views/projectLabor.vue | 2 +- .../mapper/AttendanceUbiDataMapper.java | 17 +++ .../ProProjectInfoSubdeptsUsersMapper.java | 21 +++ .../SurProjectAttendanceDataMapper.java | 18 +++ .../SurProjectAttendanceUserMapper.java | 23 ++++ .../mapper/manage/AttendanceUbiDataMapper.xml | 23 ++++ .../ProProjectInfoSubdeptsUsersMapper.xml | 36 ++++++ .../manage/SurProjectAttendanceDataMapper.xml | 25 +++- .../manage/SurProjectAttendanceUserMapper.xml | 38 ++++++ .../controller/bigscreen/LaborController.java | 122 ++++++++++++++++++ .../service/IAttendanceUbiDataService.java | 19 +++ .../IProProjectInfoSubdeptsUsersService.java | 24 +++- .../ISurProjectAttendanceDataService.java | 20 +++ .../ISurProjectAttendanceUserService.java | 24 ++++ .../impl/AttendanceUbiDataServiceImpl.java | 46 +++++++ ...roProjectInfoSubdeptsUsersServiceImpl.java | 84 ++++++++++++ .../SurProjectAttendanceDataServiceImpl.java | 61 ++++++++- .../SurProjectAttendanceUserServiceImpl.java | 82 ++++++++++++ .../trouble/problemmodifyDraft/index.vue | 6 +- 22 files changed, 709 insertions(+), 22 deletions(-) create mode 100644 yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/controller/bigscreen/LaborController.java diff --git a/yanzhu-bigscreen/src/components/header.vue b/yanzhu-bigscreen/src/components/header.vue index f784e816..5f17925e 100644 --- a/yanzhu-bigscreen/src/components/header.vue +++ b/yanzhu-bigscreen/src/components/header.vue @@ -4,10 +4,24 @@
项目概况
-
项目详情
-
劳务管理
+
项目详情
+
劳务管理
+ +
+
项目概况
+
+
+
+ +
+
+
+
-
安全管理
+
安全管理
@@ -32,7 +46,7 @@
-
质量管理
+
质量管理
@@ -50,7 +64,7 @@
-
进度管理
+
进度管理
@@ -179,11 +193,11 @@ export default { case 1: this.$router.push('/index') break - case 2: + case 101: this.$router.push('/detail') break case 3: - this.$router.push('/prjSafety') + //this.$router.push('/prjSafety') break case 309: this.$router.push('/videoMonitor') @@ -204,15 +218,15 @@ export default { this.$router.push('/aiWarning') break case 4: - this.$router.push('/prjQuality') + //this.$router.push('/prjQuality') break case 5: - this.$router.push('/prjProgress') + //this.$router.push('/prjProgress') break case 6: this.$router.push('/greenCarbon') break - case 7: + case 102: this.$router.push('/labor') break case 501: diff --git a/yanzhu-bigscreen/src/router/index.js b/yanzhu-bigscreen/src/router/index.js index d9fa9d88..591d0c04 100644 --- a/yanzhu-bigscreen/src/router/index.js +++ b/yanzhu-bigscreen/src/router/index.js @@ -14,14 +14,14 @@ const routes = [ { path: "/detail", name: "detail", - meta: { nav: 2 }, + meta: { nav: 101 }, component: () => import(/* webpackChunkName: "detail" */ "../views/projectDetail.vue"), }, { path: "/labor", name: "labor", - meta: { nav: 7 }, + meta: { nav: 102 }, component: () => import(/* webpackChunkName: "labor" */ "../views/projectLabor.vue"), }, diff --git a/yanzhu-bigscreen/src/views/projectDetail.vue b/yanzhu-bigscreen/src/views/projectDetail.vue index ab47b924..9b64e308 100644 --- a/yanzhu-bigscreen/src/views/projectDetail.vue +++ b/yanzhu-bigscreen/src/views/projectDetail.vue @@ -542,7 +542,7 @@ export default { }, mounted() { window.detailApp = this - this.$store.dispatch('ChangeNav', 2) + this.$store.dispatch('ChangeNav', 101) this.$bus.$on( 'projectChange', debounce((prj) => { diff --git a/yanzhu-bigscreen/src/views/projectLabor.vue b/yanzhu-bigscreen/src/views/projectLabor.vue index 2d8a2a86..fd0ac0c1 100644 --- a/yanzhu-bigscreen/src/views/projectLabor.vue +++ b/yanzhu-bigscreen/src/views/projectLabor.vue @@ -532,7 +532,7 @@ export default { }, }, mounted() { - this.$store.dispatch('ChangeNav', 7) + this.$store.dispatch('ChangeNav', 102) this.$bus.$on( 'projectChange', debounce((prj) => { diff --git a/yanzhu-common/yanzhu-common-mapper/src/main/java/com/yanzhu/manage/mapper/AttendanceUbiDataMapper.java b/yanzhu-common/yanzhu-common-mapper/src/main/java/com/yanzhu/manage/mapper/AttendanceUbiDataMapper.java index e53afad0..4012d671 100644 --- a/yanzhu-common/yanzhu-common-mapper/src/main/java/com/yanzhu/manage/mapper/AttendanceUbiDataMapper.java +++ b/yanzhu-common/yanzhu-common-mapper/src/main/java/com/yanzhu/manage/mapper/AttendanceUbiDataMapper.java @@ -1,9 +1,11 @@ package com.yanzhu.manage.mapper; +import java.util.Date; import java.util.List; import java.util.Map; import com.yanzhu.manage.domain.AttendanceUbiData; +import org.apache.ibatis.annotations.Param; /** * 考勤管理Mapper接口 @@ -78,4 +80,19 @@ public interface AttendanceUbiDataMapper */ List> statsAttendanceView(AttendanceUbiData where); + /** + * 劳务人员七天出勤趋势 + * @param prjId 项目ID + * @param dateStart 开始日期(7天前) + * @param dateEnd 结束日期(今天) + * @return + */ + List groupAttendanceLastWeek(@Param("prjId") Long prjId,@Param("dateStart") Date dateStart,@Param("dateEnd") Date dateEnd); + + /** + * 实时考勤进出 + * @param prjId + * @return + */ + List getRealAttendance(@Param("prjId") Long prjId); } diff --git a/yanzhu-common/yanzhu-common-mapper/src/main/java/com/yanzhu/manage/mapper/ProProjectInfoSubdeptsUsersMapper.java b/yanzhu-common/yanzhu-common-mapper/src/main/java/com/yanzhu/manage/mapper/ProProjectInfoSubdeptsUsersMapper.java index 82344a30..4be79666 100644 --- a/yanzhu-common/yanzhu-common-mapper/src/main/java/com/yanzhu/manage/mapper/ProProjectInfoSubdeptsUsersMapper.java +++ b/yanzhu-common/yanzhu-common-mapper/src/main/java/com/yanzhu/manage/mapper/ProProjectInfoSubdeptsUsersMapper.java @@ -170,4 +170,25 @@ public interface ProProjectInfoSubdeptsUsersMapper * @return */ public List> fileGroupLeaderUsers(@Param("subDeptId")Long subDeptId, @Param("craftPost")String craftPost); + + /** + * 分组统计人员年龄,省份统计信息 + * @param projectId + * @return + */ + List groupWorkderNative(@Param("projectId") Long projectId); + + /** + * 劳务人员工种占比 + * @param projectId + * @return + */ + List getWorkerCountGroupByType(@Param("projectId") Long projectId); + + /** + * 考勤预警 + * @param prjId + * @return + */ + List getAttendanceAlert(@Param("projectId")Long prjId); } diff --git a/yanzhu-common/yanzhu-common-mapper/src/main/java/com/yanzhu/manage/mapper/SurProjectAttendanceDataMapper.java b/yanzhu-common/yanzhu-common-mapper/src/main/java/com/yanzhu/manage/mapper/SurProjectAttendanceDataMapper.java index a264f492..cd1537bc 100644 --- a/yanzhu-common/yanzhu-common-mapper/src/main/java/com/yanzhu/manage/mapper/SurProjectAttendanceDataMapper.java +++ b/yanzhu-common/yanzhu-common-mapper/src/main/java/com/yanzhu/manage/mapper/SurProjectAttendanceDataMapper.java @@ -3,6 +3,7 @@ package com.yanzhu.manage.mapper; import com.yanzhu.manage.domain.SurProjectAttendanceData; import org.apache.ibatis.annotations.Param; +import java.util.Date; import java.util.List; import java.util.Map; @@ -136,4 +137,21 @@ public interface SurProjectAttendanceDataMapper List selectSurProjectAttendanceDataListByMonth(SurProjectAttendanceData attWhere); List selectSurProjectAttendanceDataListByDate(SurProjectAttendanceData attWhere); + + /** + * 劳务人员七天出勤趋势 + * @param prjId 项目ID + * @param dateStart 开始日期(7天前) + * @param dateEnd 结束日期(今天) + * @return + */ + List groupAttendanceLastWeek(@Param("prjId") Long prjId,@Param("dateStart") Date dateStart,@Param("dateEnd") Date dateEnd,@Param("year") int year); + + /** + * 实时考勤进出 + * @param prjId + * @param year + * @return + */ + List getRealAttendance(@Param("prjId") Long prjId,@Param("year") int year); } diff --git a/yanzhu-common/yanzhu-common-mapper/src/main/java/com/yanzhu/manage/mapper/SurProjectAttendanceUserMapper.java b/yanzhu-common/yanzhu-common-mapper/src/main/java/com/yanzhu/manage/mapper/SurProjectAttendanceUserMapper.java index 978eb307..88fdb0aa 100644 --- a/yanzhu-common/yanzhu-common-mapper/src/main/java/com/yanzhu/manage/mapper/SurProjectAttendanceUserMapper.java +++ b/yanzhu-common/yanzhu-common-mapper/src/main/java/com/yanzhu/manage/mapper/SurProjectAttendanceUserMapper.java @@ -2,8 +2,10 @@ package com.yanzhu.manage.mapper; import com.yanzhu.manage.domain.AttendanceCfg; +import com.yanzhu.manage.domain.ProProjectInfoSubdeptsUsers; import com.yanzhu.manage.domain.SurProjectAttendanceData; import com.yanzhu.manage.domain.SurProjectAttendanceUser; +import org.apache.ibatis.annotations.Param; import java.util.List; import java.util.Map; @@ -167,4 +169,25 @@ public interface SurProjectAttendanceUserMapper */ List queryWorkerByState(SurProjectAttendanceUser where); + /** + * 获取项目人员年龄,地域分组信息 + * @param projectId + * @return + */ + List groupWorkderNative(@Param("projectId") Long projectId); + + /** + *劳务人员工种占比 + * @param prjId + * @return + */ + List getWorkerCountGroupByType(@Param("projectId")Long prjId); + + /** + * 考勤预警 + * @param prjId + * @param year + * @return + */ + List getAttendanceAlert(@Param("projectId")Long prjId, @Param("year")int year); } diff --git a/yanzhu-common/yanzhu-common-mapper/src/main/resources/mapper/manage/AttendanceUbiDataMapper.xml b/yanzhu-common/yanzhu-common-mapper/src/main/resources/mapper/manage/AttendanceUbiDataMapper.xml index 8f69e728..0068b7ab 100644 --- a/yanzhu-common/yanzhu-common-mapper/src/main/resources/mapper/manage/AttendanceUbiDataMapper.xml +++ b/yanzhu-common/yanzhu-common-mapper/src/main/resources/mapper/manage/AttendanceUbiDataMapper.xml @@ -249,4 +249,27 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" )days + + + + \ No newline at end of file diff --git a/yanzhu-common/yanzhu-common-mapper/src/main/resources/mapper/manage/ProProjectInfoSubdeptsUsersMapper.xml b/yanzhu-common/yanzhu-common-mapper/src/main/resources/mapper/manage/ProProjectInfoSubdeptsUsersMapper.xml index bf45ba6f..530abd88 100644 --- a/yanzhu-common/yanzhu-common-mapper/src/main/resources/mapper/manage/ProProjectInfoSubdeptsUsersMapper.xml +++ b/yanzhu-common/yanzhu-common-mapper/src/main/resources/mapper/manage/ProProjectInfoSubdeptsUsersMapper.xml @@ -416,4 +416,40 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ) + + + + \ No newline at end of file diff --git a/yanzhu-common/yanzhu-common-mapper/src/main/resources/mapper/manage/SurProjectAttendanceDataMapper.xml b/yanzhu-common/yanzhu-common-mapper/src/main/resources/mapper/manage/SurProjectAttendanceDataMapper.xml index 10aac22c..4b89930b 100644 --- a/yanzhu-common/yanzhu-common-mapper/src/main/resources/mapper/manage/SurProjectAttendanceDataMapper.xml +++ b/yanzhu-common/yanzhu-common-mapper/src/main/resources/mapper/manage/SurProjectAttendanceDataMapper.xml @@ -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 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) - and d.is_del=0 + and d.is_del=0 and state=0 and date(d.attendance_time) between #{attendanceTime} and #{attendanceOutTime} group by date(d.attendance_time) order by date(d.attendance_time) )days + + + \ No newline at end of file diff --git a/yanzhu-common/yanzhu-common-mapper/src/main/resources/mapper/manage/SurProjectAttendanceUserMapper.xml b/yanzhu-common/yanzhu-common-mapper/src/main/resources/mapper/manage/SurProjectAttendanceUserMapper.xml index fd5989bf..4de009c0 100644 --- a/yanzhu-common/yanzhu-common-mapper/src/main/resources/mapper/manage/SurProjectAttendanceUserMapper.xml +++ b/yanzhu-common/yanzhu-common-mapper/src/main/resources/mapper/manage/SurProjectAttendanceUserMapper.xml @@ -809,4 +809,42 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + + + + \ No newline at end of file diff --git a/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/controller/bigscreen/LaborController.java b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/controller/bigscreen/LaborController.java new file mode 100644 index 00000000..fc78784b --- /dev/null +++ b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/controller/bigscreen/LaborController.java @@ -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 sList=proProjectInfoSubdeptsUsersService.getWorkerCountGroupByType(prjId); + return AjaxResult.success(sList); + }else{ + List 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 sList=attendanceUbiDataService.getRealAttendance(prjId); + return AjaxResult.success(sList); + }else{ + Date dateEnd=new DateTime(); + List 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 sList=proProjectInfoSubdeptsUsersService.getAttendanceAlert(prjId); + return AjaxResult.success(sList); + }else{ + Date dateEnd=new DateTime(); + List pList=surProjectAttendanceUserService.getAttendanceAlert(prjId,DateUtil.year(dateEnd)); + return AjaxResult.success(pList); + } + } + +} diff --git a/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/IAttendanceUbiDataService.java b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/IAttendanceUbiDataService.java index 71a79b1d..681c9684 100644 --- a/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/IAttendanceUbiDataService.java +++ b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/IAttendanceUbiDataService.java @@ -4,7 +4,10 @@ import java.util.Date; import java.util.List; 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.ProProjectInfoSubdeptsUsers; /** * 考勤管理Service接口 @@ -97,4 +100,20 @@ public interface IAttendanceUbiDataService */ List findUsersAttendanceView(Long proId); + /** + * 劳务人员七天出勤趋势 + * @param prjId 项目ID + * @param dateStart 开始日期(7天前) + * @param dateEnd 结束日期(今天) + * @return + */ + JSONArray groupAttendanceLastWeek(Long prjId, Date dateStart, Date dateEnd); + + + /** + * 实时考勤进出 + * @param prjId + * @return + */ + List getRealAttendance(Long prjId); } diff --git a/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/IProProjectInfoSubdeptsUsersService.java b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/IProProjectInfoSubdeptsUsersService.java index 53aa65ca..7d636d12 100644 --- a/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/IProProjectInfoSubdeptsUsersService.java +++ b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/IProProjectInfoSubdeptsUsersService.java @@ -1,5 +1,6 @@ package com.yanzhu.manage.service; +import com.alibaba.fastjson2.JSONObject; import com.yanzhu.manage.domain.ProProjectInfoSubdeptsUsers; import com.yanzhu.manage.domain.SignetFileVo; @@ -7,7 +8,7 @@ import java.util.List; import java.util.Map; /** - * 分包单位工人Service接口 + * 分包单位工人Service接口 泾河 * * @author JiangYuQi * @date 2024-08-25 @@ -238,4 +239,25 @@ public interface IProProjectInfoSubdeptsUsersService * @return */ List> fileGroupLeaderUsers(Long subDeptId,String craftPost); + + /** + * 分组统计人员年龄,省份统计信息 + * @param prjId + * @return + */ + JSONObject groupWorkderNative(Long prjId); + + /** + * 劳务人员工种占比 + * @param prjId + * @return + */ + List getWorkerCountGroupByType(Long prjId); + + /** + * 考勤预警 + * @param prjId + * @return + */ + List getAttendanceAlert(Long prjId); } diff --git a/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/ISurProjectAttendanceDataService.java b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/ISurProjectAttendanceDataService.java index 992fc268..90b4f1d4 100644 --- a/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/ISurProjectAttendanceDataService.java +++ b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/ISurProjectAttendanceDataService.java @@ -1,8 +1,11 @@ package com.yanzhu.manage.service; +import com.alibaba.fastjson2.JSONArray; +import com.alibaba.fastjson2.JSONObject; import com.yanzhu.manage.domain.SurProjectAttendanceData; +import java.util.Date; import java.util.List; import java.util.Map; @@ -137,4 +140,21 @@ public interface ISurProjectAttendanceDataService List selectSurProjectAttendanceDataListByMonth(SurProjectAttendanceData attWhere); List 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 getRealAttendance(Long prjId, int year); } diff --git a/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/ISurProjectAttendanceUserService.java b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/ISurProjectAttendanceUserService.java index c29d7ddd..1f8039f1 100644 --- a/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/ISurProjectAttendanceUserService.java +++ b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/ISurProjectAttendanceUserService.java @@ -1,5 +1,7 @@ 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.SurProjectAttendanceUser; @@ -159,4 +161,26 @@ public interface ISurProjectAttendanceUserService * @return */ List queryWorkerByState(SurProjectAttendanceUser where); + + /** + * 获取项目人员年龄,地域分组信息 + * @param prjId + * @return + */ + JSONObject groupWorkderNative(Long prjId); + + /** + * 劳务人员工种占比 + * @param prjId + * @return + */ + List getWorkerCountGroupByType(Long prjId); + + /** + * 考勤预警 + * @param prjId + * @param year + * @return + */ + List getAttendanceAlert(Long prjId, int year); } diff --git a/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/impl/AttendanceUbiDataServiceImpl.java b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/impl/AttendanceUbiDataServiceImpl.java index dc587762..8d1d4866 100644 --- a/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/impl/AttendanceUbiDataServiceImpl.java +++ b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/impl/AttendanceUbiDataServiceImpl.java @@ -1,8 +1,11 @@ package com.yanzhu.manage.service.impl; import java.util.*; +import java.util.stream.Collectors; 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.enums.ShiFouEnums; 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.manage.domain.AttendanceUbiData; import com.yanzhu.manage.domain.ProProjectInfoSubdeptsUsers; +import com.yanzhu.manage.domain.SurProjectAttendanceData; import com.yanzhu.manage.enums.SubDeptsEnums; import com.yanzhu.manage.enums.UserPostEnums; import com.yanzhu.manage.mapper.AttendanceUbiDataMapper; @@ -274,4 +278,46 @@ public class AttendanceUbiDataServiceImpl implements IAttendanceUbiDataService attendanceQuery.setIsDel(ShiFouEnums.FOU.getCode()); return attendanceUbiDataMapper.selectAttendanceUbiDataList(attendanceQuery); } + + /** + * 劳务人员七天出勤趋势 + * @param prjId 项目ID + * @param dateStart 开始日期(7天前) + * @param dateEnd 结束日期(今天) + * @return + */ + @Override + public JSONArray groupAttendanceLastWeek(Long prjId, Date dateStart, Date dateEnd) { + List 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 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 getRealAttendance(Long prjId) { + return attendanceUbiDataMapper.getRealAttendance(prjId); + } + + } diff --git a/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/impl/ProProjectInfoSubdeptsUsersServiceImpl.java b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/impl/ProProjectInfoSubdeptsUsersServiceImpl.java index 5e18ca91..3b842ae1 100644 --- a/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/impl/ProProjectInfoSubdeptsUsersServiceImpl.java +++ b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/impl/ProProjectInfoSubdeptsUsersServiceImpl.java @@ -1,7 +1,10 @@ package com.yanzhu.manage.service.impl; import cn.binarywang.wx.miniapp.api.WxMaService; +import cn.hutool.core.util.NumberUtil; 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.enums.*; import com.yanzhu.common.core.exception.ServiceException; @@ -35,6 +38,7 @@ import org.springframework.transaction.annotation.Transactional; import java.io.File; import java.util.*; +import java.util.stream.Collectors; /** * 分包单位工人Service业务层处理 @@ -1694,4 +1698,84 @@ public class ProProjectInfoSubdeptsUsersServiceImpl implements IProProjectInfoSu return proProjectInfoSubdeptsUsersMapper.fileGroupLeaderUsers(subDeptId,craftPost); } + /** + * 分组统计人员年龄,省份统计信息 + * @param prjId + * @return + */ + @Override + public JSONObject groupWorkderNative(Long prjId) { + List 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> 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> 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 getWorkerCountGroupByType(Long prjId) { + return proProjectInfoSubdeptsUsersMapper.getWorkerCountGroupByType(prjId); + } + + /** + * 实时考勤进出 + * @param prjId + * @return + */ + @Override + public List getAttendanceAlert(Long prjId) { + return proProjectInfoSubdeptsUsersMapper.getAttendanceAlert(prjId); + } + } diff --git a/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/impl/SurProjectAttendanceDataServiceImpl.java b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/impl/SurProjectAttendanceDataServiceImpl.java index 75d22efb..4a51763b 100644 --- a/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/impl/SurProjectAttendanceDataServiceImpl.java +++ b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/impl/SurProjectAttendanceDataServiceImpl.java @@ -1,7 +1,11 @@ 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.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.StringUtils; 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.stereotype.Service; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.util.*; import java.util.stream.Collectors; /** * 劳务实名制管理Service业务层处理 @@ -289,4 +290,56 @@ public class SurProjectAttendanceDataServiceImpl implements ISurProjectAttendanc 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 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 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 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); + } + } + } diff --git a/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/impl/SurProjectAttendanceUserServiceImpl.java b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/impl/SurProjectAttendanceUserServiceImpl.java index 3758419d..748aaf16 100644 --- a/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/impl/SurProjectAttendanceUserServiceImpl.java +++ b/yanzhu-modules/yanzhu-manage/src/main/java/com/yanzhu/manage/service/impl/SurProjectAttendanceUserServiceImpl.java @@ -1,8 +1,12 @@ 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.StringUtils; import com.yanzhu.manage.domain.AttendanceCfg; +import com.yanzhu.manage.domain.ProProjectInfoSubdeptsUsers; import com.yanzhu.manage.domain.SurProjectAttendanceData; import com.yanzhu.manage.domain.SurProjectAttendanceUser; import com.yanzhu.manage.mapper.SurProjectAttendanceUserMapper; @@ -14,6 +18,8 @@ import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; + /** * 考勤人员基本属性Service业务层处理 * @@ -298,6 +304,82 @@ public class SurProjectAttendanceUserServiceImpl implements ISurProjectAttendanc return surProjectAttendanceUserMapper.queryWorkerByState(where); } + /** + * 获取项目人员年龄,地域分组信息 + * @param prjId + * @return + */ + @Override + public JSONObject groupWorkderNative(Long prjId) { + List 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> 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> 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 getWorkerCountGroupByType(Long prjId) { + return surProjectAttendanceUserMapper.getWorkerCountGroupByType(prjId); + } + + /** + * 考勤预警 + * @param prjId + * @param year + * @return + */ + @Override + public List getAttendanceAlert(Long prjId, int year) { + return surProjectAttendanceUserMapper.getAttendanceAlert(prjId,year); + } + private Date findDate(List datas, SurProjectAttendanceUser u, String type) { for (SurProjectAttendanceUser user:datas) { if(user.getWorkerId().equals(u.getWorkerId()) && user.getName().equals(type)){ diff --git a/yanzhu-ui-vue3/src/views/trouble/problemmodifyDraft/index.vue b/yanzhu-ui-vue3/src/views/trouble/problemmodifyDraft/index.vue index b1c24619..05618189 100644 --- a/yanzhu-ui-vue3/src/views/trouble/problemmodifyDraft/index.vue +++ b/yanzhu-ui-vue3/src/views/trouble/problemmodifyDraft/index.vue @@ -457,7 +457,7 @@ function makeSelectData(users, type) { arr.push({ label: k, 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 { value: it.userId, label: it.userName + pos, @@ -492,7 +492,9 @@ function getUserTree() { let users = d.rows || [] data.users = users 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 ) data.ccUserList = makeSelectData(users.filter((it) => it.userPost != 4 && it.userPost != 5))