<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace= "com.epmet.dao.user.UserDao" >
<!-- 查询注册用户的总量与增量 传参:注册用户or参与用户 | 网格Id集合 | 时间参数 格式[yyyy - MM - dd 00:00:00] -->
<select id= "selectResiTotalAndIncrByLevel" resultType= "com.epmet.dto.user.result.CommonTotalAndIncCountResultDTO" >
SELECT
count( DISTINCT USER_ID ) AS total,
(
SELECT
count( DISTINCT USER_ID )
FROM
REGISTER_RELATION
WHERE
DEL_FLAG = '0'
<choose >
<!-- 参与用户 -->
<when test= 'regOrPartiFlag == "parti"' >
AND (
( FIRST_REGISTER = '1' AND REGISTER = '1' AND PARTICIPATION = '1' )
OR ( FIRST_REGISTER = '0' AND REGISTER = '0' AND PARTICIPATION = '1' )
)
</when>
<!-- 默认查注册用户 -->
<otherwise >
AND FIRST_REGISTER = '1'
</otherwise>
</choose>
<choose >
<when test= 'null == gridIds or gridIds.size == 0' >
AND GRID_ID = ''
</when>
<otherwise >
<foreach collection= "gridIds" item= "gridId" index= "index" open= "AND ( " separator= " OR " close= ")" >
GRID_ID = #{gridId}
</foreach>
</otherwise>
</choose>
<choose >
<!-- 不为空,默认查询创建时间在 昨天的增量 -->
<when test= 'null != targetDate' >
and DATE_FORMAT(CREATED_TIME,"%Y-%m-%d") = DATE_FORMAT(#{targetDate},"%Y-%m-%d")
</when>
<!-- 为空,默认查询昨天的增量 -->
<otherwise >
and DATE_FORMAT(CREATED_TIME,"%Y-%m-%d") = DATE_FORMAT( DATE_SUB( CURDATE( ), INTERVAL 1 DAY ),"%Y-%m-%d")
</otherwise>
</choose>
) AS incr
FROM
REGISTER_RELATION
WHERE
DEL_FLAG = '0'
<choose >
<!-- 参与用户 -->
<when test= 'regOrPartiFlag == "parti"' >
AND (
( FIRST_REGISTER = '1' AND REGISTER = '1' AND PARTICIPATION = '1' )
OR ( FIRST_REGISTER = '0' AND REGISTER = '0' AND PARTICIPATION = '1' )
)
</when>
<!-- 默认查注册用户 -->
<otherwise >
AND FIRST_REGISTER = '1'
</otherwise>
</choose>
<choose >
<when test= 'null == gridIds or gridIds.size == 0' >
AND GRID_ID = ''
</when>
<otherwise >
<foreach collection= "gridIds" item= "gridId" index= "index" open= "AND ( " separator= " OR " close= ")" >
GRID_ID = #{gridId}
</foreach>
</otherwise>
</choose>
<choose >
<!-- 不为空,包含传进来的这一天 -->
<when test= "null != targetDate" >
and DATE_FORMAT(CREATED_TIME,"%Y-%m-%d") <![CDATA[<=]]> DATE_FORMAT(#{targetDate},"%Y-%m-%d")
</when>
<!-- 为空,默认截止到昨天 -->
<otherwise >
and DATE_FORMAT(CREATED_TIME,"%Y-%m-%d") <![CDATA[<=]]> DATE_FORMAT(DATE_SUB( CURDATE( ), INTERVAL 1 DAY ),"%Y-%m-%d")
</otherwise>
</choose>
</select>
<!-- 查询指定网格范围下单位时间内新增的注册/参与用户Id 传参:注册用户or参与用户 | 网格Id集合 | 时间参数 格式[yyyy - MM - dd 00:00:00] -->
<select id= "selectIncrUserIds" resultType= "string" >
SELECT DISTINCT
USER_ID
FROM
REGISTER_RELATION
WHERE
DEL_FLAG = '0'
<choose >
<!-- 参与用户 -->
<when test= 'regOrPartiFlag == "parti"' >
AND (
( FIRST_REGISTER = '1' AND REGISTER = '1' AND PARTICIPATION = '1' )
OR ( FIRST_REGISTER = '0' AND REGISTER = '0' AND PARTICIPATION = '1' )
)
</when>
<!-- 默认查注册用户 -->
<otherwise >
AND FIRST_REGISTER = '1'
</otherwise>
</choose>
<choose >
<when test= 'null == gridIds or gridIds.size == 0' >
AND GRID_ID = ''
</when>
<otherwise >
<foreach collection= "gridIds" item= "gridId" index= "index" open= "AND ( " separator= " OR " close= ")" >
GRID_ID = #{gridId}
</foreach>
</otherwise>
</choose>
<choose >
<when test= 'null != targetDate' >
and DATE_FORMAT(CREATED_TIME,"%Y-%m-%d") = DATE_FORMAT(#{targetDate},"%Y-%m-%d")
</when>
<otherwise >
and DATE_FORMAT(CREATED_TIME,"%Y-%m-%d") = DATE_FORMAT(DATE_SUB( CURDATE( ), INTERVAL 1 DAY ),"%Y-%m-%d")
</otherwise>
</choose>
</select>
<!-- 查询指定网格范围下截至指定位时间累计的注册用户Id 传参:注册用户or参与用户 | 网格Id集合 | 时间参数 格式[yyyy - MM - dd 00:00:00] -->
<select id= "selectTotalUserIds" resultType= "string" >
SELECT DISTINCT
USER_ID
FROM
REGISTER_RELATION
WHERE
DEL_FLAG = '0'
<choose >
<!-- 参与用户 -->
<when test= 'regOrPartiFlag == "parti"' >
AND (
( FIRST_REGISTER = '1' AND REGISTER = '1' AND PARTICIPATION = '1' )
OR ( FIRST_REGISTER = '0' AND REGISTER = '0' AND PARTICIPATION = '1' )
)
</when>
<!-- 默认查注册用户 -->
<otherwise >
AND FIRST_REGISTER = '1'
</otherwise>
</choose>
<choose >
<when test= 'null == gridIds or gridIds.size == 0' >
AND GRID_ID = ''
</when>
<otherwise >
<foreach collection= "gridIds" item= "gridId" index= "index" open= "AND ( " separator= " OR " close= ")" >
GRID_ID = #{gridId}
</foreach>
</otherwise>
</choose>
<choose >
<when test= 'targetDate != null' >
and DATE_FORMAT(CREATED_TIME,"%Y-%m-%d") <![CDATA[<=]]> DATE_FORMAT(#{targetDate},"%Y-%m-%d")
</when>
<otherwise >
and DATE_FORMAT(CREATED_TIME,"%Y-%m-%d") <![CDATA[<=]]> DATE_FORMAT(DATE_SUB( CURDATE( ), INTERVAL 1 DAY ),"%Y-%m-%d")
</otherwise>
</choose>
</select>
<!-- 查询党员的总量与增量 传参:用户Id集合(不用传注册or参与标识,用户Id会根据不同的flag范围不同) | 时间参数 格式[yyyy - MM - dd 00:00:00] -->
<select id= "selectPartyTotalAndIncr" resultType= "com.epmet.dto.user.result.CommonTotalAndIncCountResultDTO" >
SELECT
count( DISTINCT urole.USER_ID ) AS total,
(
SELECT
count( DISTINCT urole.USER_ID)
FROM
USER_ROLE urole
LEFT JOIN EPMET_ROLE erole ON urole.ROLE_ID = erole.ID
AND erole.DEL_FLAG = '0'
WHERE
urole.DEL_FLAG = '0'
<foreach collection= "incrUserIds" item= "incrUserId" index= "index" open= "AND ( " separator= " OR " close= ")" >
urole.USER_ID = #{incrUserId}
</foreach>
<choose >
<when test= 'null != targetDate' >
and DATE_FORMAT(urole.CREATED_TIME,"%Y-%m-%d") = DATE_FORMAT(#{targetDate},"%Y-%m-%d")
</when>
<otherwise >
and DATE_FORMAT(urole.CREATED_TIME,"%Y-%m-%d") = DATE_FORMAT(DATE_SUB( CURDATE( ), INTERVAL 1 DAY ),"%Y-%m-%d")
</otherwise>
</choose>
AND erole.ROLE_NAME = '党员'
) AS incr
FROM
USER_ROLE urole
LEFT JOIN EPMET_ROLE erole ON urole.ROLE_ID = erole.ID
AND erole.DEL_FLAG = '0'
WHERE
urole.DEL_FLAG = '0'
<choose >
<when test= 'null == userIds or userIds.size == 0' >
AND urole.USER_ID = ''
</when>
<otherwise >
<foreach collection= "userIds" item= "userId" index= "index" open= "AND ( " separator= " OR " close= ")" >
urole.USER_ID = #{userId}
</foreach>
</otherwise>
</choose>
<choose >
<when test= 'null != targetDate' >
and DATE_FORMAT( urole.CREATED_TIME,"%Y-%m-%d") <![CDATA[<=]]> DATE_FORMAT(#{targetDate},"%Y-%m-%d")
</when>
<otherwise >
and DATE_FORMAT(urole.CREATED_TIME,"%Y-%m-%d") <![CDATA[<=]]> DATE_FORMAT(DATE_SUB( CURDATE( ), INTERVAL 1 DAY ),"%Y-%m-%d")
</otherwise>
</choose>
AND erole.ROLE_NAME = '党员'
</select>
<!-- 查询热心居民的总量与增量 传参:用户Id集合(不用传注册or参与标识,用户Id会根据不同的flag范围不同) | 网格Id集合(与用户Id集合同理) | 时间参数 格式[yyyy - MM - dd 00:00:00] -->
<select id= "selectWarmTotalAndIncr" resultType= "com.epmet.dto.user.result.CommonTotalAndIncCountResultDTO" >
SELECT
count( DISTINCT urole.USER_ID ) AS total,
(
SELECT
count( DISTINCT urole.USER_ID )
FROM
USER_ROLE urole
LEFT JOIN EPMET_ROLE erole ON urole.ROLE_ID = erole.ID
AND erole.DEL_FLAG = '0'
WHERE
urole.DEL_FLAG = '0'
<foreach collection= "incrUserIds" item= "incrUserId" index= "index" open= "AND ( " separator= " OR " close= ")" >
urole.USER_ID = #{incrUserId}
</foreach>
<choose >
<when test= 'null == gridIds or gridIds.size == 0' >
AND urole.GRID_ID = ''
</when>
<otherwise >
<foreach collection= "gridIds" item= "gridId" index= "index" open= "AND ( " separator= " OR " close= ")" >
urole.GRID_ID = #{gridId}
</foreach>
</otherwise>
</choose>
<choose >
<when test= 'null != targetDate' >
and DATE_FORMAT(urole.CREATED_TIME,"%Y-%m-%d")=DATE_FORMAT(#{targetDate},"%Y-%m-%d")
</when>
<otherwise >
and DATE_FORMAT(urole.CREATED_TIME,"%Y-%m-%d")=DATE_FORMAT(DATE_SUB( CURDATE( ), INTERVAL 1 DAY ),"%Y-%m-%d")
</otherwise>
</choose>
AND erole.ROLE_NAME = '热心居民'
) AS incr
FROM
USER_ROLE urole
LEFT JOIN EPMET_ROLE erole ON urole.ROLE_ID = erole.ID
AND erole.DEL_FLAG = '0'
WHERE
urole.DEL_FLAG = '0'
<choose >
<when test= 'null == gridIds or gridIds.size == 0' >
AND urole.GRID_ID = ''
</when>
<otherwise >
<foreach collection= "gridIds" item= "gridId" index= "index" open= "AND ( " separator= " OR " close= ")" >
urole.GRID_ID = #{gridId}
</foreach>
</otherwise>
</choose>
<foreach collection= "userIds" item= "userId" index= "index" open= "AND ( " separator= " OR " close= ")" >
urole.USER_ID = #{userId}
</foreach>
<choose >
<when test= 'null != targetDate' >
and DATE_FORMAT(urole.CREATED_TIME,"%Y-%m-%d") <![CDATA[<=]]> DATE_FORMAT(#{targetDate},"%Y-%m-%d")
</when>
<otherwise >
and DATE_FORMAT(urole.CREATED_TIME,"%Y-%m-%d") <![CDATA[<=]]> DATE_FORMAT(DATE_SUB( CURDATE( ), INTERVAL 1 DAY ),"%Y-%m-%d")
</otherwise>
</choose>
AND erole.ROLE_NAME = '热心居民';
</select>
<!-- 查询指定时间范围内网格新增的注册/参与用户Id 传参:注册用户or参与用户 | 网格Id集合 | 时间区间 -->
<select id= "selectIncrUserIdsWithinTimeRange" resultType= "string" >
SELECT DISTINCT
USER_ID
FROM
REGISTER_RELATION
WHERE
DEL_FLAG = '0'
<choose >
<!-- 参与用户 -->
<when test= 'regOrPartiFlag == "parti"' >
AND (
( FIRST_REGISTER = '1' AND REGISTER = '1' AND PARTICIPATION = '1' )
OR ( FIRST_REGISTER = '0' AND REGISTER = '0' AND PARTICIPATION = '1' )
)
</when>
<!-- 默认查注册用户 -->
<otherwise >
AND FIRST_REGISTER = '1'
</otherwise>
</choose>
<choose >
<when test= 'null == gridIds or gridIds.size == 0' >
AND GRID_ID = ''
</when>
<otherwise >
<foreach collection= "gridIds" item= "gridId" index= "index" open= "AND ( " separator= " OR " close= ")" >
GRID_ID = #{gridId}
</foreach>
</otherwise>
</choose>
AND CREATED_TIME <![CDATA[>=]]> DATE_FORMAT(#{startDate},"%Y-%m-%d")
AND CREATED_TIME <![CDATA[<=]]> DATE_FORMAT(#{endDate},"%Y-%m-%d")
</select>
<!-- 查询指定时间范围内居民增量 传参:注册用户or参与用户 | 网格Id集合 | 时间区间 -->
<select id= "selectResiIncrWithinTimeRange" resultType= "integer" >
SELECT
count( distinct USER_ID)
FROM
REGISTER_RELATION
WHERE
DEL_FLAG = '0'
<choose >
<!-- 参与用户 -->
<when test= 'regOrPartiFlag == "parti"' >
AND (
( FIRST_REGISTER = '1' AND REGISTER = '1' AND PARTICIPATION = '1' )
OR ( FIRST_REGISTER = '0' AND REGISTER = '0' AND PARTICIPATION = '1' )
)
</when>
<!-- 默认查注册用户 -->
<otherwise >
AND FIRST_REGISTER = '1'
</otherwise>
</choose>
<choose >
<when test= 'null == gridIds or gridIds.size == 0' >
AND GRID_ID = ''
</when>
<otherwise >
<foreach collection= "gridIds" item= "gridId" index= "index" open= "AND ( " separator= " OR " close= ")" >
GRID_ID = #{gridId}
</foreach>
</otherwise>
</choose>
AND CREATED_TIME <![CDATA[>=]]> DATE_FORMAT(#{startDate},"%Y-%m-%d")
AND CREATED_TIME <![CDATA[<=]]> DATE_FORMAT(#{endDate},"%Y-%m-%d")
</select>
<!-- 查询指定时间范围内党员的增量 传参:用户Id集合 | 时间区间 -->
<select id= "selectPartyIncrWithinTimeRange" resultType= "integer" >
SELECT
count( DISTINCT urole.USER_ID)
FROM
USER_ROLE urole
LEFT JOIN EPMET_ROLE erole ON urole.ROLE_ID = erole.ID
AND erole.DEL_FLAG = '0'
WHERE
urole.DEL_FLAG = '0'
<choose >
<when test= 'null == incrUserIds or incrUserIds.size == 0' >
AND urole.USER_ID = ''
</when>
<otherwise >
<foreach collection= "incrUserIds" item= "incrUserId" index= "index" open= "AND ( " separator= " OR " close= ")" >
urole.USER_ID = #{incrUserId}
</foreach>
</otherwise>
</choose>
AND urole.CREATED_TIME <![CDATA[>=]]> DATE_FORMAT(#{startDate},"%Y-%m-%d")
AND urole.CREATED_TIME <![CDATA[<=]]> DATE_FORMAT(#{endDate},"%Y-%m-%d")
AND erole.ROLE_NAME = '党员'
</select>
<!-- 查询指定时间范围内热心居民的增量 传参:用户Id集合 | 网格Id集合 | 时间区间 -->
<select id= "selectWarmIncrWithinTimeRange" resultType= "integer" >
SELECT
count( DISTINCT urole.USER_ID)
FROM
USER_ROLE urole
LEFT JOIN EPMET_ROLE erole ON urole.ROLE_ID = erole.ID
AND erole.DEL_FLAG = '0'
WHERE
urole.DEL_FLAG = '0'
<foreach collection= "incrUserIds" item= "incrUserId" index= "index" open= "AND ( " separator= " OR " close= ")" >
urole.USER_ID = #{incrUserId}
</foreach>
<choose >
<when test= 'null == gridIds or gridIds.size == 0' >
AND GRID_ID = ''
</when>
<otherwise >
<foreach collection= "gridIds" item= "gridId" index= "index" open= "AND ( " separator= " OR " close= ")" >
GRID_ID = #{gridId}
</foreach>
</otherwise>
</choose>
AND urole.CREATED_TIME <![CDATA[>=]]> DATE_FORMAT(#{startDate},"%Y-%m-%d")
AND urole.CREATED_TIME <![CDATA[<=]]> DATE_FORMAT(#{endDate},"%Y-%m-%d")
AND erole.ROLE_NAME = '热心居民'
</select>
<!-- 查询用户是不是党员 -->
<select id= "selectUserIsParty" resultType= "com.epmet.dto.extract.result.UserPartyResultDTO" >
SELECT ur.user_id AS userId,
er.role_name AS roleName
FROM user_role ur
LEFT JOIN epmet_role er ON er.id = ur.role_id
WHERE ur.del_flag = 0
AND er.del_flag = 0
AND
(
<foreach collection= "userIds" item= "item" separator= " OR " >
ur.user_id = #{item}
</foreach>
)
</select>
<select id= "selectPartymembersByCustomerId" resultType= "string" >
SELECT
DISTINCT
role.USER_ID
FROM
USER_ROLE role
LEFT JOIN EPMET_ROLE rolename
ON role.ROLE_ID = rolename.ID AND rolename.DEL_FLAG = '0'
WHERE
role.DEL_FLAG = '0'
AND
role.CUSTOMER_ID = #{customerId}
AND
rolename.ROLE_KEY = 'partymember'
</select>
<select id= "selectWarmHeartedByCustomerId" resultType= "com.epmet.dto.extract.form.GridHeartedFormDTO" >
SELECT
DISTINCT
role.USER_ID,
role.GRID_ID
FROM
USER_ROLE role
LEFT JOIN EPMET_ROLE rolename
ON role.ROLE_ID = rolename.ID AND rolename.DEL_FLAG = '0'
WHERE
role.DEL_FLAG = '0'
AND
role.CUSTOMER_ID = #{customerId}
AND
rolename.ROLE_KEY = 'warmhearted'
</select>
<!-- 查询当前网格下,首次注册的用户ids -->
<select id= "selectGridRegUserIds" parameterType= "map" resultType= "java.lang.String" >
SELECT DISTINCT
USER_ID
FROM
register_relation rr
WHERE
rr.DEL_FLAG = '0'
AND rr.CUSTOMER_ID =#{customerId}
and rr.GRID_ID=#{gridId}
AND rr.FIRST_REGISTER = '1'
</select>
<!-- 获取客户下的网格注册居民 -->
<select id= "selectRegisteredUserByCustomerId" resultType= "com.epmet.entity.evaluationindex.screen.ScreenPartyUserRankDataEntity" >
SELECT
register.CUSTOMER_ID,
register.GRID_ID,
register.USER_ID,
IFNULL(base.SURNAME,resi.SURNAME) AS surname,
IFNULL(base.NAME,resi.NAME) AS name,
IFNULL(base.REAl_NAME,concat(resi.SURNAME,resi.NAME)) AS userName,
0 AS partyFlag,
0 AS POINT_TOTAL,
0 AS INDEX_SCORE
FROM
REGISTER_RELATION register
LEFT JOIN USER_BASE_INFO base ON register.USER_ID = base.USER_ID
AND base.DEL_FLAG = '0'
LEFT JOIN USER_RESI_INFO resi ON register.USER_ID = resi.USER_ID
AND resi.DEL_FLAG = '0'
WHERE
register.DEL_FLAG = '0'
AND register.CUSTOMER_ID = #{customerId}
AND register.FIRST_REGISTER = '1'
</select>
<select id= "selectScreenProjectData" resultType= "com.epmet.dto.screen.ScreenProjectDataDTO" >
SELECT
CONCAT( STREET, '-', SURNAME, CASE WHEN GENDER = '1' THEN '先生' WHEN GENDER = '2' THEN '女士' ELSE '先生/女士' END ) AS linkName,
MOBILE AS linkMobile,
USER_ID as topicId
FROM
user_base_info
WHERE
del_flag = '0'
<foreach collection= "list" item= "userId" open= "AND (" separator= " OR " close= ")" >
user_id = #{userId}
</foreach>
</select>
<!-- 根据工作员用户id, 返回这些人当中多少个网格员 -->
<select id= "selectGridManagerTotal" parameterType= "map" resultType= "int" >
SELECT
count( 1 )
FROM
staff_role sr
WHERE
sr.DEL_FLAG = '0'
AND sr.CUSTOMER_ID = #{customerId}
AND sr.ROLE_ID IN (
SELECT
m.id AS roleId
FROM
gov_staff_role m
WHERE
m.DEL_FLAG = '0'
AND m.CUSTOMER_ID = #{customerId}
AND m.ROLE_KEY = 'grid_member'
)
AND sr.STAFF_ID in
<foreach collection= "staffIds" item= "staffId" open= "(" close= ")" separator= "," >
#{staffId}
</foreach>
</select>
<select id= "selectStaffInfo" resultType= "com.epmet.dto.screen.ScreenProjectDataDTO" >
SELECT
USER_ID as ID,
REAL_NAME AS linkName,
MOBILE AS linkMobile
FROM
customer_staff
WHERE
del_flag = '0'
<foreach collection= "list" item= "userId" open= "AND (" separator= " OR " close= ")" >
user_id = #{userId}
</foreach>
</select>
<select id= "getStaffByRoleKey" resultType= "com.epmet.dto.user.result.StaffRoleInfoDTO" >
SELECT
sr.CUSTOMER_ID,
sr.ORG_ID AS "agencyId",
sr.STAFF_ID,
cs.REAL_NAME AS "staffName"
FROM
staff_role sr
INNER JOIN gov_staff_role gsr ON sr.ROLE_ID = gsr.ID
AND gsr.DEL_FLAG = '0'
INNER JOIN customer_staff cs ON sr.STAFF_ID = cs.USER_ID
AND cs.DEL_FLAG = '0'
WHERE
sr.DEL_FLAG = '0'
AND gsr.ROLE_KEY = #{roleKey}
AND sr.CUSTOMER_ID = #{customerId}
</select>
<select id= "selectUserByRoleKey" resultType= "com.epmet.dto.user.result.CustomerStaffDTO" >
SELECT
s.*,
gsr.ROLE_NAME
FROM
customer_staff s
LEFT JOIN staff_role sr ON sr.STAFF_ID = s.USER_ID AND sr.DEL_FLAG = '0'
AND sr.CUSTOMER_ID = s.CUSTOMER_ID
LEFT JOIN gov_staff_role gsr ON gsr.ID = sr.ROLE_ID AND gsr.DEL_FLAG = '0'
WHERE
s.del_flag = '0'
AND gsr.CUSTOMER_ID = #{customerId}
AND gsr.ROLE_KEY = #{roleKey}
GROUP BY s.USER_ID
</select>
<select id= "selectLastStaffPatrolList" resultType= "com.epmet.dto.user.result.StatsStaffPatrolRecordDailyDTO" >
SELECT
t.STAFF_ID,
t.GRID gridId,
t.PATROL_START_TIME latestPatrolTime,
t.STATUS latestPatrolStatus
FROM
( SELECT DEL_FLAG,CUSTOMER_ID,GRID, STAFF_ID, max( CREATED_TIME ) AS CREATED_TIME FROM staff_patrol_record GROUP BY GRID, STAFF_ID ) a
LEFT JOIN staff_patrol_record t ON t.GRID = a.GRID
AND t.STAFF_ID = a.STAFF_ID
AND t.CREATED_TIME = a.CREATED_TIME
WHERE
a.del_flag = '0'
AND a.CUSTOMER_ID = #{customerId}
</select>
<select id= "selectStaffPatrolListByDateId" resultType= "com.epmet.dto.user.result.StaffPatrolRecordResult" >
SELECT
r.*
FROM
staff_patrol_record r
WHERE
r.del_flag = '0' and r.customer_id = #{customerId}
AND DATE_FORMAT( r.ACTRUAL_END_TIME, '%Y%m%d' ) = #{dateId}
</select>
<!-- 查询注册用户的总量与增量【新方法】 -->
<select id= "selectResiTotalAndIncrByGridIds" resultType= "com.epmet.dto.user.result.TotalAndIncrResultDTO" >
SELECT
IFNULL(count( DISTINCT rr.USER_ID ),0) AS total,
rr.GRID_ID,
IFNULL(t.userCount,0) AS monthlyIncr,
IFNULL(d.userCount,0) AS dailyIncr
FROM REGISTER_RELATION rr
LEFT JOIN (
SELECT
IFNULL(count(DISTINCT USER_ID),0) AS userCount,
GRID_ID
FROM
REGISTER_RELATION
WHERE
DEL_FLAG = '0'
<if test= 'regOrPartiFlag == "parti" ' >
AND ((FIRST_REGISTER = '1' AND REGISTER = '1' AND PARTICIPATION = '1') OR (FIRST_REGISTER = '0' AND REGISTER = '0' AND PARTICIPATION = '1'))
</if>
<if test= 'regOrPartiFlag == "reg" ' >
AND FIRST_REGISTER = '1'
</if>
<foreach collection= "gridIds" item= "gridId" index= "index" open= "AND ( " separator= " OR " close= ")" >
GRID_ID = #{gridId}
</foreach>
AND DATE_FORMAT(CREATED_TIME,"%Y-%m-%d") BETWEEN DATE_FORMAT(#{startDate},"%Y-%m-%d") AND DATE_FORMAT(
IF(null != #{targetDate} OR '' !=#{targetDate},#{targetDate},DATE_SUB(CURDATE(), INTERVAL 1 DAY ))
,"%Y-%m-%d")
GROUP BY GRID_ID
) t ON ( t.grid_id = rr.GRID_ID )
LEFT JOIN (
SELECT
IFNULL(count(DISTINCT USER_ID),0) AS userCount,
GRID_ID
FROM REGISTER_RELATION
WHERE DEL_FLAG = '0'
<if test= 'regOrPartiFlag == "parti" ' >
AND ((FIRST_REGISTER = '1' AND REGISTER = '1' AND PARTICIPATION = '1') OR (FIRST_REGISTER = '0' AND REGISTER = '0' AND PARTICIPATION = '1'))
</if>
<if test= 'regOrPartiFlag == "reg" ' >
AND FIRST_REGISTER = '1'
</if>
<foreach collection= "gridIds" item= "gridId" index= "index" open= "AND ( " separator= " OR " close= ")" >
GRID_ID = #{gridId}
</foreach>
AND DATE_FORMAT(CREATED_TIME,"%Y-%m-%d") = DATE_FORMAT(IF(null != #{targetDate} OR '' !=#{targetDate},#{targetDate},DATE_SUB(CURDATE(), INTERVAL 1 DAY )),"%Y-%m-%d")
GROUP BY GRID_ID
) d ON ( d.grid_id = rr.GRID_ID )
WHERE
rr.DEL_FLAG = '0'
<if test= 'regOrPartiFlag == "parti" ' >
AND ((rr.FIRST_REGISTER = '1' AND rr.REGISTER = '1' AND rr.PARTICIPATION = '1') OR (rr.FIRST_REGISTER = '0' AND rr.REGISTER = '0' AND rr.PARTICIPATION = '1'))
</if>
<if test= 'regOrPartiFlag == "reg" ' >
AND rr.FIRST_REGISTER = '1'
</if>
<foreach collection= "gridIds" item= "gridId" index= "index" open= "AND ( " separator= " OR " close= ")" >
rr.GRID_ID = #{gridId}
</foreach>
AND DATE_FORMAT(rr.CREATED_TIME,"%Y-%m-%d") <![CDATA[<=]]> IF(null != #{targetDate} OR '' !=#{targetDate},DATE_FORMAT(#{targetDate},"%Y-%m-%d"),DATE_FORMAT( DATE_SUB( CURDATE( ), INTERVAL 1 DAY ),"%Y-%m-%d"))
GROUP BY GRID_ID
</select>
<resultMap id= "selectIncrUserIdsByGridsMap" type= "com.epmet.dto.user.result.IncrAndTotalUserIdsResultDTO" >
<result property= "gridId" column= "gridId" />
<result property= "type" column= "type" />
<collection property= "userIds" ofType= "java.lang.String" >
<result column= "userId" />
</collection>
</resultMap>
<!-- 查询指定网格范围下单位时间内新增的注册用户Id【新方法】 -->
<select id= "selectIncrUserIdsByGrids" resultMap= "selectIncrUserIdsByGridsMap" >
(SELECT
DISTINCT(rr.USER_ID) AS userId,
r2.GRID_ID AS gridId,
'monthly' AS type
FROM REGISTER_RELATION rr
LEFT JOIN register_relation r2 ON (r2.GRID_ID = rr.GRID_ID AND r2.DEL_FLAG = 0)
WHERE
rr.DEL_FLAG = '0'
<if test= 'regOrPartiFlag == "parti" ' >
AND ((rr.FIRST_REGISTER = '1' AND rr.REGISTER = '1' AND rr.PARTICIPATION = '1') OR (rr.FIRST_REGISTER = '0' AND rr.REGISTER = '0' AND rr.PARTICIPATION = '1'))
</if>
<if test= 'regOrPartiFlag == "reg" ' >
AND rr.FIRST_REGISTER = '1'
</if>
<foreach collection= "gridIds" item= "gridId" index= "index" open= "AND ( " separator= " OR " close= ")" >
rr.GRID_ID = #{gridId}
</foreach>
AND DATE_FORMAT(rr.CREATED_TIME,"%Y-%m-%d") BETWEEN DATE_FORMAT(#{startDate},"%Y-%m-%d") AND
DATE_FORMAT(IF(null != #{targetDate} OR '' !=#{targetDate},#{targetDate},DATE_SUB(CURDATE(),INTERVAL 1 DAY)),"%Y-%m-%d")
) UNION ALL
(SELECT
DISTINCT(rr.USER_ID) AS userId,
r2.GRID_ID AS gridId,
'daily' AS type
FROM REGISTER_RELATION rr
LEFT JOIN register_relation r2 ON (r2.GRID_ID = rr.GRID_ID AND r2.DEL_FLAG = 0)
WHERE
rr.DEL_FLAG = '0'
<if test= 'regOrPartiFlag == "parti" ' >
AND ((rr.FIRST_REGISTER = '1' AND rr.REGISTER = '1' AND rr.PARTICIPATION = '1') OR (rr.FIRST_REGISTER = '0' AND rr.REGISTER = '0' AND rr.PARTICIPATION = '1'))
</if>
<if test= 'regOrPartiFlag == "reg" ' >
AND rr.FIRST_REGISTER = '1'
</if>
<foreach collection= "gridIds" item= "gridId" index= "index" open= "AND ( " separator= " OR " close= ")" >
rr.GRID_ID = #{gridId}
</foreach>
AND DATE_FORMAT(rr.CREATED_TIME,"%Y-%m-%d") = DATE_FORMAT(IF(null != #{targetDate} OR '' !=#{targetDate},#{targetDate},DATE_SUB(CURDATE(),INTERVAL 1 DAY)),"%Y-%m-%d")
)
</select>
<!-- 查询热心居民的总量与增量【新方法】 -->
<select id= "selectWarmTotalAndIncrByGrids" resultType= "com.epmet.dto.user.result.WarmTotalAndIncrResultDTO" >
SELECT
IFNULL(COUNT(DISTINCT ur.USER_ID),0) AS total,
ur.GRID_ID,
IFNULL(t.userCount,0) AS monthlyIncr,
IFNULL(d.userCount,0) AS dailyIncr
FROM USER_ROLE ur
LEFT JOIN EPMET_ROLE erole ON ( ur.ROLE_ID = erole.ID AND erole.DEL_FLAG = '0' )
LEFT JOIN (
SELECT
COUNT( DISTINCT ur.USER_ID ) AS userCount,
ur.GRID_ID
FROM USER_ROLE ur
LEFT JOIN EPMET_ROLE erole ON (ur.ROLE_ID = erole.ID AND erole.DEL_FLAG = '0')
WHERE ur.DEL_FLAG = '0'
<if test= "null != incrMonthlyUserIds and incrMonthlyUserIds.size() > 0 " >
<foreach collection= "incrMonthlyUserIds" item= "incrUserId" index= "index" open= "AND ( " separator= " OR " close= ")" >
ur.USER_ID = #{incrUserId}
</foreach>
</if>
<foreach collection= "gridIds" item= "gridId" index= "index" open= "AND ( " separator= " OR " close= ")" >
ur.GRID_ID = #{gridId}
</foreach>
AND DATE_FORMAT(ur.CREATED_TIME,"%Y-%m-%d") BETWEEN DATE_FORMAT(#{startDate},"%Y-%m-%d") AND
DATE_FORMAT(IF(null != #{targetDate} OR '' !=#{targetDate},#{targetDate},DATE_SUB(CURDATE(),INTERVAL 1 DAY)),"%Y-%m-%d")
AND erole.ROLE_NAME = '热心居民'
GROUP BY ur.GRID_ID
) t ON ( t.GRID_ID = ur.GRID_ID )
LEFT JOIN (
SELECT
COUNT( DISTINCT ur.USER_ID ) AS userCount,
ur.GRID_ID
FROM USER_ROLE ur
LEFT JOIN EPMET_ROLE erole ON (ur.ROLE_ID = erole.ID AND erole.DEL_FLAG = '0')
WHERE ur.DEL_FLAG = '0'
<if test= "null != incrDailyUserIds and incrDailyUserIds.size() > 0 " >
<foreach collection= "incrDailyUserIds" item= "incrUserId" index= "index" open= "AND ( " separator= " OR " close= ")" >
ur.USER_ID = #{incrUserId}
</foreach>
</if>
<foreach collection= "gridIds" item= "gridId" index= "index" open= "AND ( " separator= " OR " close= ")" >
ur.GRID_ID = #{gridId}
</foreach>
AND DATE_FORMAT(ur.CREATED_TIME,"%Y-%m-%d") = DATE_FORMAT(IF(null != #{targetDate} OR '' !=#{targetDate},#{targetDate},DATE_SUB(CURDATE(),INTERVAL 1 DAY)),"%Y-%m-%d")
AND erole.ROLE_NAME = '热心居民'
GROUP BY ur.GRID_ID
) d ON ( d.GRID_ID = ur.GRID_ID )
WHERE ur.DEL_FLAG = '0'
<if test= "userIds.size() > 0 and null != userIds " >
<foreach collection= "userIds" item= "incrUserId" index= "index" open= "AND ( " separator= " OR " close= ")" >
ur.USER_ID = #{incrUserId}
</foreach>
</if>
<foreach collection= "gridIds" item= "gridId" index= "index" open= "AND ( " separator= " OR " close= ")" >
ur.GRID_ID = #{gridId}
</foreach>
AND DATE_FORMAT(ur.CREATED_TIME,"%Y-%m-%d") <![CDATA[<=]]> IF(null != #{targetDate} OR '' !=#{targetDate},DATE_FORMAT(#{targetDate},"%Y-%m-%d"),DATE_FORMAT( DATE_SUB( CURDATE( ), INTERVAL 1 DAY ),"%Y-%m-%d"))
AND erole.ROLE_NAME = '热心居民'
GROUP BY ur.GRID_ID
</select>
<!-- 查询党员的总量与增量【新方法】 -->
<select id= "selectPartyTotalAndIncrNew" resultType= "com.epmet.dto.user.result.PartyTotalAndIncrResultDTO" >
SELECT
IFNULL(count(DISTINCT urole.USER_ID),0) AS total,
rr.GRID_ID,
IFNULL(t.userCount,0) AS monthlyIncr,
IFNULL(d.userCount,0) AS dailyIncr
FROM USER_ROLE urole
LEFT JOIN EPMET_ROLE erole ON (urole.ROLE_ID = erole.ID AND erole.DEL_FLAG = '0')
LEFT JOIN register_relation rr ON (rr.USER_ID = urole.USER_ID)
LEFT JOIN (
SELECT
count(distinct urole.USER_ID) AS userCount,
rr.GRID_ID
FROM USER_ROLE urole
LEFT JOIN EPMET_ROLE erole ON (urole.ROLE_ID = erole.ID AND erole.DEL_FLAG = '0')
LEFT JOIN register_relation rr ON (rr.USER_ID = urole.USER_ID)
WHERE
urole.DEL_FLAG = '0'
AND erole.ROLE_NAME = '党员'
AND DATE_FORMAT(rr.CREATED_TIME,"%Y-%m-%d") BETWEEN DATE_FORMAT(#{startDate},"%Y-%m-%d") AND
DATE_FORMAT(IF(null != #{targetDate} OR '' !=#{targetDate},#{targetDate},DATE_SUB(CURDATE(),INTERVAL 1 DAY)),"%Y-%m-%d")
<if test= 'regOrPartiFlag == "parti" ' >
AND ((rr.FIRST_REGISTER = '1' AND rr.REGISTER = '1' AND rr.PARTICIPATION = '1') OR (rr.FIRST_REGISTER = '0' AND rr.REGISTER = '0' AND rr.PARTICIPATION = '1'))
</if>
<if test= 'regOrPartiFlag == "reg" ' >
AND rr.FIRST_REGISTER = '1'
</if>
GROUP BY rr.GRID_ID
) t ON (t.GRID_ID = rr.GRID_ID)
LEFT JOIN (
SELECT
count(distinct urole.USER_ID) AS userCount,
rr.GRID_ID
FROM USER_ROLE urole
LEFT JOIN EPMET_ROLE erole ON (urole.ROLE_ID = erole.ID AND erole.DEL_FLAG = '0')
LEFT JOIN register_relation rr ON (rr.USER_ID = urole.USER_ID)
WHERE
urole.DEL_FLAG = '0'
AND erole.ROLE_NAME = '党员'
AND DATE_FORMAT(rr.CREATED_TIME,"%Y-%m-%d") = DATE_FORMAT(IF(null != #{targetDate} OR '' !=#{targetDate},#{targetDate},DATE_SUB(CURDATE(),INTERVAL 1 DAY)),"%Y-%m-%d")
<if test= 'regOrPartiFlag == "parti" ' >
AND ((rr.FIRST_REGISTER = '1' AND rr.REGISTER = '1' AND rr.PARTICIPATION = '1') OR (rr.FIRST_REGISTER = '0' AND rr.REGISTER = '0' AND rr.PARTICIPATION = '1'))
</if>
<if test= 'regOrPartiFlag == "reg" ' >
AND rr.FIRST_REGISTER = '1'
</if>
GROUP BY rr.GRID_ID
) d ON (d.GRID_ID = rr.GRID_ID)
WHERE
urole.DEL_FLAG = '0'
AND DATE_FORMAT(rr.CREATED_TIME,"%Y-%m-%d") <![CDATA[<=]]> DATE_FORMAT( IF(null != #{targetDate} OR '' != #{targetDate},#{targetDate}, DATE_SUB(CURDATE(),INTERVAL 1 DAY)),'%Y-%m-%d')
<if test= 'regOrPartiFlag == "parti" ' >
AND ((rr.FIRST_REGISTER = '1' AND rr.REGISTER = '1' AND rr.PARTICIPATION = '1') OR (rr.FIRST_REGISTER = '0' AND rr.REGISTER = '0' AND rr.PARTICIPATION = '1'))
</if>
<if test= 'regOrPartiFlag == "reg" ' >
AND rr.FIRST_REGISTER = '1'
</if>
AND erole.ROLE_NAME = '党员'
GROUP BY rr.GRID_ID
</select>
<!-- 查询指定时间范围内注册/参与用户增量【新方法】 -->
<select id= "selectIncrWithinTimeRangeByGrids" resultType= "com.epmet.dto.user.result.IncrWithinTimeRangeResultDTO" >
SELECT
IFNULL(COUNT( distinct USER_ID),0) AS userCount,
GRID_ID
FROM register_relation
WHERE
DEL_FLAG = '0'
<if test= 'regOrPartiFlag == "parti" ' >
AND ((FIRST_REGISTER = '1' AND REGISTER = '1' AND PARTICIPATION = '1') OR (FIRST_REGISTER = '0' AND REGISTER = '0' AND PARTICIPATION = '1'))
</if>
<if test= 'regOrPartiFlag == "reg" ' >
AND FIRST_REGISTER = '1'
</if>
<foreach collection= "gridIds" item= "gridId" index= "index" open= "AND ( " separator= " OR " close= ")" >
GRID_ID = #{gridId}
</foreach>
AND CREATED_TIME <![CDATA[>=]]> DATE_FORMAT(#{startDate},"%Y-%m-%d")
AND CREATED_TIME <![CDATA[<=]]> DATE_FORMAT(#{endDate},"%Y-%m-%d")
GROUP BY GRID_ID
</select>
<!-- 查询指定网格范围下单位时间内全部的注册用户Id【新方法】 -->
<resultMap id= "selectTotalUserIdsByGridsMap" type= "com.epmet.dto.user.result.IncrAndTotalUserIdsResultDTO" >
<result property= "gridId" column= "gridId" />
<collection property= "userIds" ofType= "java.lang.String" >
<result column= "userId" />
</collection>
</resultMap>
<select id= "selectTotalUserIdsByGrids" resultMap= "selectTotalUserIdsByGridsMap" >
SELECT
DISTINCT(rr.USER_ID) AS userId,
r2.GRID_ID AS gridId
FROM REGISTER_RELATION rr
LEFT JOIN register_relation r2 ON (r2.GRID_ID = rr.GRID_ID AND r2.DEL_FLAG = 0)
WHERE
rr.DEL_FLAG = '0'
<if test= 'regOrPartiFlag == "parti" ' >
AND ((rr.FIRST_REGISTER = '1' AND rr.REGISTER = '1' AND rr.PARTICIPATION = '1') OR (rr.FIRST_REGISTER = '0' AND rr.REGISTER = '0' AND rr.PARTICIPATION = '1'))
</if>
<if test= 'regOrPartiFlag == "reg" ' >
AND rr.FIRST_REGISTER = '1'
</if>
<foreach collection= "gridIds" item= "gridId" index= "index" open= "AND ( " separator= " OR " close= ")" >
rr.GRID_ID = #{gridId}
</foreach>
AND DATE_FORMAT(rr.CREATED_TIME,"%Y-%m-%d") <![CDATA[<=]]> IF(null != #{targetDate} OR '' !=#{targetDate},DATE_FORMAT(#{targetDate},"%Y-%m-%d"),DATE_FORMAT( DATE_SUB( CURDATE( ), INTERVAL 1 DAY ),"%Y-%m-%d"))
</select>
<delete id= "delGmUploadEvent" >
DELETE
FROM
stats_staff_patrol_record_daily
WHERE
customer_id = #{customerId}
AND date_id = #{dateId}
LIMIT 1000
</delete>
<insert id= "saveOrUpGmUploadEvent" >
INSERT INTO stats_staff_patrol_record_daily
(
id,
source_type,
customer_id,
source_customer_id,
date_id,
week_id,
month_id,
quarter_id,
year_id,
grid_id,
agency_id,
grid_pids,
staff_id,
patrol_total,
total_time,
report_project_count,
latest_patrol_time,
latest_patrol_status,
del_flag,
revision,
created_by,
created_time,
updated_by,
updated_time
)
VALUES
<foreach collection= "list" item= "i" separator= "," >
(
REPLACE(UUID(), '-', ''),
#{i.sourceType},
#{i.parentCustomerId},
#{i.customerId},
#{i.dateId},
#{i.weekId},
#{i.monthId},
#{i.quarterId},
#{i.yearId},
#{i.gridId},
#{i.agencyId},
#{i.gridPids},
#{i.staffId},
#{i.patrolTotal},
#{i.totalTime},
#{i.reportProjectCount},
#{i.latestPatrolTime},
#{i.latestPatrolStatus},
0,
0,
'BASE_REPORT',
NOW(),
'BASE_REPORT',
NOW()
)
</foreach>
ON DUPLICATE KEY
UPDATE
source_type = values(source_type),
customer_id = values(customer_id),
source_customer_id = values(source_customer_id),
report_project_count = values(report_project_count),
updated_by = 'BASE_REPORT',
updated_time = NOW()
</insert>
<select id= "getStaffBaseInfo" resultType= "com.epmet.dto.user.result.CustomerStaffDTO" >
SELECT
cs.*
FROM
customer_staff cs
WHERE 1=1
AND cs.customer_id = #{customerId}
<if test= "staffIdList != null and staffIdList.size() > 0" >
<foreach collection= "staffIdList" item= "staffId" open= "AND cs.user_id IN (" separator= "," close= ")" >
#{staffId}
</foreach>
</if>
</select>
<select id= "getPatrolRecordList" resultType= "com.epmet.dto.user.result.MidPatrolRecordResult" >
SELECT
id, customer_id, grid, grid_pids, staff_id, agency_id, patrol_start_time, patrol_end_time,
actrual_end_time, total_time, status, del_flag, revision, created_by, created_time, updated_by, updated_time
FROM staff_patrol_record
WHERE
1=1
<if test= "patrolId != null and patrolId != ''" >
AND ID = #{patrolId}
</if>
and CUSTOMER_ID = #{customerId}
AND DEL_FLAG = '0'
<if test= "isPage != null and isPage" >
LIMIT #{offset},#{pageSize}
</if>
order by created_time
</select>
<select id= "getPatrolDetailList" resultType= "com.epmet.dto.user.result.MidPatrolDetailResult" >
select
id, customer_id, staff_patrol_rec_id,latitude, longitude, del_flag, revision, created_by, created_time, updated_by, updated_time
from staff_patrol_detail
WHERE
1=1
<if test= "patrolId != null and patrolId != ''" >
AND staff_patrol_rec_id = #{patrolId}
</if>
and CUSTOMER_ID = #{customerId}
AND DEL_FLAG = '0'
<if test= "isPage != null and isPage" >
LIMIT #{offset},#{pageSize}
</if>
order by created_time
</select>
</mapper>