From 1bf4f952b35ee870082e0ec0b1026f47121fe2fe Mon Sep 17 00:00:00 2001
From: Administrator <admin>
Date: Tue, 04 Jan 2022 15:42:01 +0800
Subject: [PATCH] 按年龄段查询保安员分布情况

---
 src/main/java/org/springblade/modules/system/mapper/UserMapper.xml             |  222 ++++++++++++++++++++++++++++++++++++
 src/main/java/org/springblade/modules/system/service/impl/UserServiceImpl.java |   91 +++++++++++----
 src/main/java/org/springblade/modules/system/controller/UserController.java    |   11 +
 src/main/java/org/springblade/modules/system/mapper/UserMapper.java            |   16 ++
 src/main/java/org/springblade/modules/system/service/IUserService.java         |    8 +
 src/main/java/org/springblade/modules/system/vo/UserVO.java                    |    4 
 6 files changed, 321 insertions(+), 31 deletions(-)

diff --git a/src/main/java/org/springblade/modules/system/controller/UserController.java b/src/main/java/org/springblade/modules/system/controller/UserController.java
index 1975482..0beac1d 100644
--- a/src/main/java/org/springblade/modules/system/controller/UserController.java
+++ b/src/main/java/org/springblade/modules/system/controller/UserController.java
@@ -1448,8 +1448,15 @@
 		}
 	}
 
-
-
+	/**
+	 * 年龄分布查询
+	 * @param user
+	 * @return
+	 */
+	@PostMapping("/getAgeStatistics")
+	public R getAgeStatistics(UserVO user){
+		return R.data(userService.getAgeStatistics(user));
+	}
 
 
 }
diff --git a/src/main/java/org/springblade/modules/system/mapper/UserMapper.java b/src/main/java/org/springblade/modules/system/mapper/UserMapper.java
index 9db23a7..dcdd9f4 100644
--- a/src/main/java/org/springblade/modules/system/mapper/UserMapper.java
+++ b/src/main/java/org/springblade/modules/system/mapper/UserMapper.java
@@ -50,6 +50,16 @@
 	@SqlParser(filter = true)
 	List<UserVO> selectUserPages(IPage<UserVO> page, @Param("user") UserVO user);
 
+	/**
+	 * 自定义分页,带坐标
+	 *
+	 * @param page
+	 * @param user
+	 * @return
+	 */
+	@SqlParser(filter = true)
+	List<UserVO> selectUserPagesByAge(IPage<UserVO> page, @Param("user") UserVO user);
+
 
 	/**
 	 * 自定义分页
@@ -249,5 +259,9 @@
 	 */
 	void batchExperienceList(@Param("list") List<Experience> experienceList);
 
-
+	/**
+	 * 年龄分布查询
+	 * @return
+	 */
+	List<Integer> getAgeStatistics(@Param("user") UserVO user);
 }
diff --git a/src/main/java/org/springblade/modules/system/mapper/UserMapper.xml b/src/main/java/org/springblade/modules/system/mapper/UserMapper.xml
index e266d6a..a34edf2 100644
--- a/src/main/java/org/springblade/modules/system/mapper/UserMapper.xml
+++ b/src/main/java/org/springblade/modules/system/mapper/UserMapper.xml
@@ -158,6 +158,15 @@
         <if test="user.isAvatar==2">
             and (bu.avatar is null or bu.avatar="")
         </if>
+        <if test="user.ageType==1">
+            and age >=18 and age &lt;=30
+        </if>
+        <if test="user.ageType==2">
+            and age >30 and age &lt;=45
+        </if>
+        <if test="user.ageType==3">
+            and age >45 and age &lt;=60
+        </if>
         <if test="user.isFingerprint==1">
             and bu.fingerprint is not null and bu.fingerprint!=""
         </if>
@@ -178,6 +187,153 @@
         </if>
         <if test="user.sortName==null or user.sortName==''">
             ORDER BY bu.id desc
+        </if>
+    </select>
+
+
+    <!--带坐标,按年龄分布查询-->
+    <select id="selectUserPagesByAge" resultMap="userResultMap">
+        select * from
+        (
+            select
+            distinct
+            bu.*,IF(mod(SUBSTR(bu.cardid,17,1),2),1,2) sexs,
+            ifnull(TIMESTAMPDIFF(YEAR, SUBSTRING(bu.cardid, 7, 8), CURDATE()),0) AS age,
+            sll.longitude,sll.latitude,
+            bd.dept_name
+            from
+            blade_user bu
+            left join
+            blade_dept bd
+            on
+            bu.dept_id = bd.id
+            left join
+            sys_information si
+            on
+            si.departmentid = bd.id
+            left join
+            sys_jurisdiction sj
+            on
+            sj.id = si.jurisdiction
+            left join
+            sys_live_location sll
+            on
+            sll.worker_id = bu.id
+            left join
+            blade_role br
+            on
+            br.id = bu.role_id
+            left join
+            sys_training_registration str
+            on
+            bu.id = str.user_id
+            where
+            bu.is_deleted = 0
+            <if test="user.examinationType!=null and user.examinationType != ''">
+                <if test="user.examinationType == 0">
+                    and (bu.examination_type = #{user.examinationType} or bu.examination_type is null or bu.examination_type ='')
+                </if>
+                <if test="user.examinationType == 1">
+                    and bu.examination_type = #{user.examinationType}
+                </if>
+            </if>
+            <if test="user.account!=null and user.account != ''">
+                and bu.account like concat('%', #{user.account},'%')
+            </if>
+            <if test="user.hold!=null and user.hold != ''">
+                and bu.hold = #{user.hold}
+            </if>
+            <if test="user.deptId!=null and user.deptId != ''">
+                and bd.id in
+                (
+                select id from blade_dept where id = #{user.deptId}
+                union
+                SELECT
+                id
+                FROM
+                (
+                SELECT
+                t1.id,t1.parent_id,t1.dept_name,
+                IF
+                ( find_in_set( parent_id, @pids ) > 0, @pids := concat( @pids, ',', id ), 0 ) AS ischild
+                FROM
+                ( SELECT id, parent_id,dept_name FROM blade_dept t ORDER BY parent_id, id ) t1,
+                ( SELECT @pids := #{user.deptId} ) t2
+                ) t3
+                WHERE
+                ischild != 0
+                )
+            </if>
+            <if test="user.roleId!=null and user.roleId != ''">
+                and bu.role_id = #{user.roleId}
+            </if>
+            <if test="user.roleAlias!=null and user.roleAlias != ''">
+                and br.role_alias = '保安'
+            </if>
+            <if test="user.status!=null and user.status != '' and user.status != 6">
+                and bu.status = #{user.status}
+            </if>
+            <if test="user.education!=null  and user.education != ''">
+                and bu.education = #{user.education}
+            </if>
+            <if test="user.trainingUnitId!=null and user.trainingUnitId != ''">
+                and str.training_unit_id = #{user.trainingUnitId}
+            </if>
+            <if test="user.deptName!=null and user.deptName != ''">
+                and  bd.dept_name like concat('%', #{user.deptName},'%')
+            </if>
+            <if test="user.jurisdiction!=null and user.jurisdiction != '' and user.jurisdiction!='1372091709474910209'">
+                and (sj.id = #{user.jurisdiction} or sj.parent_id = #{user.jurisdiction})
+            </if>
+            <if test="user.realName!=null and user.realName != ''">
+                and bu.real_name like concat('%', #{user.realName},'%')
+            </if>
+            <if test="user.dispatch!=null and user.dispatch != ''">
+                <if test="user.dispatch == 0">
+                    and bu.dispatch = #{user.dispatch}
+                </if>
+                <if test="user.dispatch == 1">
+                    and bu.dispatch = #{user.dispatch}
+                </if>
+            </if>
+            <if test="user.isAvatar==1">
+                and bu.avatar is not null and bu.avatar!=""
+            </if>
+            <if test="user.isAvatar==2">
+                and (bu.avatar is null or bu.avatar="")
+            </if>
+
+            <if test="user.isFingerprint==1">
+                and bu.fingerprint is not null and bu.fingerprint!=""
+            </if>
+            <if test="user.isFingerprint==2">
+                and (bu.fingerprint is null or bu.fingerprint="")
+            </if>
+            <if test="user.userType!=null and user.userType != ''">
+                and bu.user_type = #{user.userType}
+            </if>
+            <if test="user.securitynumber!=null and user.securitynumber != ''">
+                and bu.securitynumber like concat('%', #{user.securitynumber},'%')
+            </if>
+            <if test="user.cardid!=null and user.cardid != ''">
+                and bu.cardid like concat('%', #{user.cardid},'%')
+            </if>
+            <if test="user.sortName!=null and user.sortName!=''">
+                ORDER BY bu.${user.sortName} ${user.sort},bu.id desc
+            </if>
+            <if test="user.sortName==null or user.sortName==''">
+                ORDER BY bu.id desc
+            </if>
+        ) user
+        where 1=1
+        <if test="user.ageType==1">
+            and age >=18 and age &lt;=30
+        </if>
+        <if test="user.ageType==2">
+            and age >30 and age &lt;=45
+        </if>
+        <if test="user.ageType==3">
+            and age >45 and age &lt;=60
         </if>
     </select>
 
@@ -411,8 +567,8 @@
             from (
                 select
                     distinct
-                    bu.id,
-                    ifnull(DATE_FORMAT(NOW(), '%Y') - SUBSTRING(bu.cardid,7,4),0) age,
+                    bu.id
+                    ifnull(TIMESTAMPDIFF(YEAR, SUBSTRING(bu.cardid, 7, 8), CURDATE()),0) AS age,
                     bu.is_apply isApply,
                     bu.is_train isTrain,
                     bu.real_name as name,
@@ -479,7 +635,7 @@
 
     <!--计算保安人员年龄-->
     <select id="getUserAgeById" resultType="org.springblade.modules.system.vo.UserVO">
-        select id,real_name realName,ifnull(DATE_FORMAT(NOW(), '%Y') - SUBSTRING(cardid,7,4),0) age,securitynumber,cardid
+        select id,real_name realName,ifnull(TIMESTAMPDIFF(YEAR, SUBSTRING(cardid, 7, 8), CURDATE()),0) AS age,securitynumber,cardid
         from
         blade_user
         where
@@ -491,7 +647,7 @@
     <select id="getUserInfoBySecurityNumber" resultType="org.springblade.modules.system.vo.UserVO">
         select
         bu.*,
-        ifnull(DATE_FORMAT(NOW(), '%Y') - SUBSTRING( cardid,7,4),0) age,
+        ifnull(TIMESTAMPDIFF(YEAR, SUBSTRING(cardid, 7, 8), CURDATE()),0) AS age,
         bd.dept_name deptName
          from
          blade_user bu
@@ -896,6 +1052,64 @@
         </foreach>
     </insert>
 
+    <!--查询学历统计信息-->
+    <select id="getAgeStatistics" resultType="java.lang.Integer">
+        select count(*) c from (
+        select ifnull(TIMESTAMPDIFF(YEAR, SUBSTRING(bu.cardid, 7, 8), CURDATE()),0) AS age from blade_user bu
+        left join blade_dept bd on bu.dept_id = bd.id
+        left join sys_information si on si.departmentid = bd.id
+        left join sys_jurisdiction sj on sj.id = si.jurisdiction
+        where bu.status = 1
+        and bu.is_deleted = 0
+        and bu.role_id = 1412226235153731586
+        <if test="user.jurisdiction!=null and user.jurisdiction != '' and user.jurisdiction!='1372091709474910209'">
+            and (sj.id = #{user.jurisdiction} or sj.parent_id = #{user.jurisdiction})
+        </if>
+        <if test="user.deptId!=null and user.deptId != ''">
+            and bu.dept_id = #{user.deptId}
+        </if>
+        )a where age>=18 and age &lt;=30
+
+        union
+        (
+            select count(*) c from
+            (
+            select ifnull(TIMESTAMPDIFF(YEAR, SUBSTRING(bu.cardid, 7, 8), CURDATE()),0) AS age from blade_user bu
+            left join blade_dept bd on bu.dept_id = bd.id
+            left join sys_information si on si.departmentid = bd.id
+            left join sys_jurisdiction sj on sj.id = si.jurisdiction
+            where bu.status = 1
+            and bu.is_deleted = 0
+            and bu.role_id = 1412226235153731586
+            <if test="user.jurisdiction!=null and user.jurisdiction != '' and user.jurisdiction!='1372091709474910209'">
+                and (sj.id = #{user.jurisdiction} or sj.parent_id = #{user.jurisdiction})
+            </if>
+            <if test="user.deptId!=null and user.deptId != ''">
+                and bu.dept_id = #{user.deptId}
+            </if>
+            )a where age>30 and age &lt;=45
+        )
+        union
+        (
+            select count(*) c from
+            (
+            select ifnull(TIMESTAMPDIFF(YEAR, SUBSTRING(bu.cardid, 7, 8), CURDATE()),0) AS age from blade_user bu
+            left join blade_dept bd on bu.dept_id = bd.id
+            left join sys_information si on si.departmentid = bd.id
+            left join sys_jurisdiction sj on sj.id = si.jurisdiction
+            where bu.status = 1
+            and bu.is_deleted = 0
+            and bu.role_id = 1412226235153731586
+            <if test="user.jurisdiction!=null and user.jurisdiction != '' and user.jurisdiction!='1372091709474910209'">
+                and (sj.id = #{user.jurisdiction} or sj.parent_id = #{user.jurisdiction})
+            </if>
+            <if test="user.deptId!=null and user.deptId != ''">
+                and bu.dept_id = #{user.deptId}
+            </if>
+            )a where age>45 and age &lt;=60
+        )
+    </select>
+
 
 
 </mapper>
diff --git a/src/main/java/org/springblade/modules/system/service/IUserService.java b/src/main/java/org/springblade/modules/system/service/IUserService.java
index d842d6e..dd66bee 100644
--- a/src/main/java/org/springblade/modules/system/service/IUserService.java
+++ b/src/main/java/org/springblade/modules/system/service/IUserService.java
@@ -18,6 +18,7 @@
 
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.Param;
 import org.springblade.core.mp.base.BaseService;
 import org.springblade.core.mp.support.Query;
 import org.springblade.modules.auth.enums.UserEnum;
@@ -366,4 +367,11 @@
 	 */
 	List<Map<String, Object>> selectEquipent();
 
+	/**
+	 * 年龄分布查询
+	 * @param user
+	 * @return
+	 */
+	Object getAgeStatistics(UserVO user);
+
 }
diff --git a/src/main/java/org/springblade/modules/system/service/impl/UserServiceImpl.java b/src/main/java/org/springblade/modules/system/service/impl/UserServiceImpl.java
index 8e44bba..a703122 100644
--- a/src/main/java/org/springblade/modules/system/service/impl/UserServiceImpl.java
+++ b/src/main/java/org/springblade/modules/system/service/impl/UserServiceImpl.java
@@ -186,35 +186,67 @@
 
 	@Override
 	public IPage<UserVO> selectUserPages(IPage<UserVO> page, UserVO user) {
-		List<UserVO> userVOS = baseMapper.selectUserPages(page, user);
-		//机构名称拼接
-		userVOS.forEach(userVO -> {
-			if (null != userVO.getCardid() && userVO.getCardid() != "") {
-				userVO.setAge(AgeUtil.idCardToAge(userVO.getCardid()));
-			} else {
-				userVO.setAge(null);
-			}
-			if (null!=userVO.getDeptId()) {
-				List<String> list = baseMapper.getDeptName(userVO.getDeptId());
-				if (list.size() > 1) {
-					if (null != list.get(1) && list.get(1) != "") {
-						String s = list.get(1).toString();
-						if (s.equals("本市保安公司") || s.equals("保安培训学校") || s.equals("自招保安单位") || s.equals("武装押运公司") || s.equals("分公司") || s.equals("其他")){
+		if (null!=user.getAgeType() && user.getAgeType()!=4){
+			List<UserVO> userVOS = baseMapper.selectUserPagesByAge(page, user);
+			//机构名称拼接
+			userVOS.forEach(userVO -> {
+				if (null != userVO.getCardid() && userVO.getCardid() != "") {
+					userVO.setAge(AgeUtil.idCardToAge(userVO.getCardid()));
+				} else {
+					userVO.setAge(null);
+				}
+				if (null!=userVO.getDeptId()) {
+					List<String> list = baseMapper.getDeptName(userVO.getDeptId());
+					if (list.size() > 1) {
+						if (null != list.get(1) && list.get(1) != "") {
+							String s = list.get(1).toString();
+							if (s.equals("本市保安公司") || s.equals("保安培训学校") || s.equals("自招保安单位") || s.equals("武装押运公司") || s.equals("分公司") || s.equals("其他")){
+								userVO.setDeptName(list.get(0));
+							}
+							else {
+								userVO.setDeptName(list.get(1) + "," + list.get(0));
+							}
+						} else {
 							userVO.setDeptName(list.get(0));
 						}
-						else {
-							userVO.setDeptName(list.get(1) + "," + list.get(0));
-						}
-					} else {
+					}
+					if (list.size() == 1) {
 						userVO.setDeptName(list.get(0));
 					}
 				}
-				if (list.size() == 1) {
-					userVO.setDeptName(list.get(0));
+			});
+			return page.setRecords(userVOS);
+		}else {
+			List<UserVO> userVOS = baseMapper.selectUserPages(page, user);
+			//机构名称拼接
+			userVOS.forEach(userVO -> {
+				if (null != userVO.getCardid() && userVO.getCardid() != "") {
+					userVO.setAge(AgeUtil.idCardToAge(userVO.getCardid()));
+				} else {
+					userVO.setAge(null);
 				}
-			}
-		});
-		return page.setRecords(userVOS);
+				if (null!=userVO.getDeptId()) {
+					List<String> list = baseMapper.getDeptName(userVO.getDeptId());
+					if (list.size() > 1) {
+						if (null != list.get(1) && list.get(1) != "") {
+							String s = list.get(1).toString();
+							if (s.equals("本市保安公司") || s.equals("保安培训学校") || s.equals("自招保安单位") || s.equals("武装押运公司") || s.equals("分公司") || s.equals("其他")){
+								userVO.setDeptName(list.get(0));
+							}
+							else {
+								userVO.setDeptName(list.get(1) + "," + list.get(0));
+							}
+						} else {
+							userVO.setDeptName(list.get(0));
+						}
+					}
+					if (list.size() == 1) {
+						userVO.setDeptName(list.get(0));
+					}
+				}
+			});
+			return page.setRecords(userVOS);
+		}
 	}
 
 	@Override
@@ -1697,5 +1729,16 @@
 	}
 
 
-
+	/**
+	 * 年龄分布查询
+	 * @param user
+	 * @return
+	 */
+	@Override
+	public Object getAgeStatistics(UserVO user) {
+		//获取年龄分布数据
+		List<Integer> list = baseMapper.getAgeStatistics(user);
+		//返回
+		return list;
+	}
 }
diff --git a/src/main/java/org/springblade/modules/system/vo/UserVO.java b/src/main/java/org/springblade/modules/system/vo/UserVO.java
index 572a42f..56e219f 100644
--- a/src/main/java/org/springblade/modules/system/vo/UserVO.java
+++ b/src/main/java/org/springblade/modules/system/vo/UserVO.java
@@ -170,4 +170,8 @@
 	 */
 	private String sort;
 
+	/**
+	 * 年龄段类型 1:18-30周岁  2:30-45周岁  3:45-60周岁  4:全部
+	 */
+	private Integer ageType;
 }

--
Gitblit v1.9.3