Compare commits

...

3 Commits

  1. 22
      epdc-cloud-analysis-pc/src/main/java/com/elink/esua/epdc/modules/user/controller/UserAnalysisController.java
  2. 25
      epdc-cloud-analysis-pc/src/main/java/com/elink/esua/epdc/modules/user/dao/UserAnalysisDao.java
  3. 16
      epdc-cloud-analysis-pc/src/main/java/com/elink/esua/epdc/modules/user/service/UserAnalysisService.java
  4. 27
      epdc-cloud-analysis-pc/src/main/java/com/elink/esua/epdc/modules/user/service/impl/UserAnalysisServiceImpl.java
  5. 236
      epdc-cloud-analysis-pc/src/main/resources/mapper/user/UserAnalysisDao.xml

22
epdc-cloud-analysis-pc/src/main/java/com/elink/esua/epdc/modules/user/controller/UserAnalysisController.java

@ -6,29 +6,23 @@ import com.elink.esua.epdc.commons.tools.utils.Result;
import com.elink.esua.epdc.commons.tools.validator.ValidatorUtils;
import com.elink.esua.epdc.dto.user.form.ExportOperationFormDTO;
import com.elink.esua.epdc.dto.user.form.MemberRankFormDTO;
import com.elink.esua.epdc.dto.user.form.UserCountDTO;
import com.elink.esua.epdc.dto.user.form.UserSortRankFormDTO;
import com.elink.esua.epdc.dto.user.result.*;
import com.elink.esua.epdc.dto.user.form.UserCountDTO;
import com.elink.esua.epdc.dto.user.result.GridOpeningResultDTO;
import com.elink.esua.epdc.dto.user.result.OldMemberRankResultDTO;
import com.elink.esua.epdc.dto.user.result.UserDataRankResultDTO;
import com.elink.esua.epdc.dto.user.result.YoungMemberRankResultDTO;
import com.elink.esua.epdc.excel.ExportOperationDataExcel;
import com.elink.esua.epdc.excel.GridOpiningExcel;
import com.elink.esua.epdc.excel.PartyAnalysExcel;
import com.elink.esua.epdc.excel.RegisterExcel;
import com.elink.esua.epdc.modules.user.service.OldMemberRankService;
import com.elink.esua.epdc.modules.user.service.UserAnalysisService;
import com.elink.esua.epdc.modules.user.service.YoungMemberRankService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.elink.esua.epdc.excel.PartyAnalysExcel;
import com.elink.esua.epdc.excel.RegisterExcel;
import com.elink.esua.epdc.modules.user.service.UserAnalysisService;
import java.util.HashMap;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletResponse;
/**
* 数据端用户数据分析相关接口
*
@ -59,7 +53,7 @@ public class UserAnalysisController {
*/
@GetMapping("page/dataRank")
public Result<PageData<UserDataRankResultDTO>> pageUserDataRank(@RequestParam Map<String, Object> params) {
PageData<UserDataRankResultDTO> pageData = userAnalysisService.pageUserDataRank(params);
PageData<UserDataRankResultDTO> pageData = userAnalysisService.pageUserDataRankByGrid(params);
return new Result().ok(pageData);
}
@ -167,7 +161,7 @@ public class UserAnalysisController {
*/
@GetMapping("export/register")
public void exportRegister(@RequestParam Map<String, Object> params, HttpServletResponse response) throws Exception {
PageData<UserDataRankResultDTO> pageData = userAnalysisService.pageUserDataRank(params);
PageData<UserDataRankResultDTO> pageData = userAnalysisService.pageUserDataRankByGrid(params);
ExcelUtils.exportExcelToTarget(response, "注册用户总数排名分析", pageData.getList(), RegisterExcel.class);
}
@ -182,7 +176,7 @@ public class UserAnalysisController {
*/
@GetMapping("export/party")
public void exportParty(@RequestParam Map<String, Object> params, HttpServletResponse response) throws Exception {
PageData<UserDataRankResultDTO> pageData = userAnalysisService.pageUserDataRank(params);
PageData<UserDataRankResultDTO> pageData = userAnalysisService.pageUserDataRankByGrid(params);
ExcelUtils.exportExcelToTarget(response, "党员排名分析", pageData.getList(), PartyAnalysExcel.class);
}

25
epdc-cloud-analysis-pc/src/main/java/com/elink/esua/epdc/modules/user/dao/UserAnalysisDao.java

@ -231,7 +231,6 @@ public interface UserAnalysisDao extends BaseMapper<UserAnalysisDTO> {
*/
List<ExportOperationDataResultDTO> selectExportTopicCount(ExportOperationFormDTO exportOperationFormDTO);
/***
* 运营数据导出企业数
* @param exportOperationFormDTO
@ -251,6 +250,17 @@ public interface UserAnalysisDao extends BaseMapper<UserAnalysisDTO> {
*/
List<UserDataRankResultDTO> selectListUserDataRankByParty(Map<String, Object> params);
/**
* 查询党员数据排行
* 根据GridID进行分组但字段仍使用StreetID
*
* @param params
* @return java.util.List<com.elink.esua.epdc.dto.user.result.UserDataRankResultDTO>
* @author wanggongfeng
* @date 2020/5/20 14:48
*/
List<UserDataRankResultDTO> selectListUserDataRankOfGridByParty(Map<String, Object> params);
/**
* 查询居民数据排行
*
@ -261,8 +271,20 @@ public interface UserAnalysisDao extends BaseMapper<UserAnalysisDTO> {
*/
List<UserDataRankResultDTO> selectListUserDataRankByUser(Map<String, Object> params);
/**
* 查询居民数据排行
* 根据GridID进行分组但字段仍使用StreetID
*
* @param params
* @return java.util.List<com.elink.esua.epdc.dto.user.result.UserDataRankResultDTO>
* @author wanggongfeng
* @date 2020/5/20 14:48
*/
List<UserDataRankResultDTO> selectListUserDataRankOfGridByUser(Map<String, Object> params);
/**
* 查询企业代表数
*
* @param params
* @return
* @author wanggongfeng
@ -270,5 +292,4 @@ public interface UserAnalysisDao extends BaseMapper<UserAnalysisDTO> {
*/
List<GridOpeningResultDTO> selectExportEnterpriseCountByGridId(Map<String, Object> params);
}

16
epdc-cloud-analysis-pc/src/main/java/com/elink/esua/epdc/modules/user/service/UserAnalysisService.java

@ -3,8 +3,8 @@ package com.elink.esua.epdc.modules.user.service;
import com.elink.esua.epdc.commons.tools.page.PageData;
import com.elink.esua.epdc.commons.tools.utils.Result;
import com.elink.esua.epdc.dto.user.form.ExportOperationFormDTO;
import com.elink.esua.epdc.dto.user.form.UserSortRankFormDTO;
import com.elink.esua.epdc.dto.user.form.UserCountDTO;
import com.elink.esua.epdc.dto.user.form.UserSortRankFormDTO;
import com.elink.esua.epdc.dto.user.result.*;
import java.util.List;
@ -47,6 +47,17 @@ public interface UserAnalysisService {
*/
PageData<UserDataRankResultDTO> pageUserDataRank(Map<String, Object> params);
/**
* 用户数据排行PC端用户数据分析居民注册排行党员排行
* 根据GridID进行分组但字段仍使用StreetID
*
* @param params
* @return com.elink.esua.epdc.commons.tools.page.PageData<com.elink.esua.epdc.dto.user.result.UserDataRankResultDTO>
* @author work@yujt.net.cn
* @date 2020/2/11 15:13
*/
PageData<UserDataRankResultDTO> pageUserDataRankByGrid(Map<String, Object> params);
/**
* @return com.elink.esua.epdc.commons.tools.utils.Result<java.util.List < com.elink.esua.epdc.dto.user.result.UserSortRankResultDTO>>
* @Description 注册用户数排名
@ -56,7 +67,6 @@ public interface UserAnalysisService {
**/
Result<List<UserSortRankResultDTO>> userRegisterSort(UserSortRankFormDTO formDto);
/**
* 用户数据统计
*
@ -87,7 +97,6 @@ public interface UserAnalysisService {
*/
GridDataTotalResultDTO selectGridDataTotal(Map<String, Object> params);
/***
* 运营数据导出用户相关
* @param exportOperationFormDTO
@ -106,7 +115,6 @@ public interface UserAnalysisService {
*/
List<GridOpeningResultDTO> selectListGridHasMaCode(Map<String, Object> params);
/***
* 获取导入数据
* @param params

27
epdc-cloud-analysis-pc/src/main/java/com/elink/esua/epdc/modules/user/service/impl/UserAnalysisServiceImpl.java

@ -14,8 +14,8 @@ import com.elink.esua.epdc.datasources.DataSourceNames;
import com.elink.esua.epdc.datasources.annotation.DataSource;
import com.elink.esua.epdc.dto.user.UserAnalysisDTO;
import com.elink.esua.epdc.dto.user.form.ExportOperationFormDTO;
import com.elink.esua.epdc.dto.user.form.UserSortRankFormDTO;
import com.elink.esua.epdc.dto.user.form.UserCountDTO;
import com.elink.esua.epdc.dto.user.form.UserSortRankFormDTO;
import com.elink.esua.epdc.dto.user.result.*;
import com.elink.esua.epdc.modules.user.dao.UserAnalysisDao;
import com.elink.esua.epdc.modules.user.service.UserAnalysisService;
@ -167,6 +167,16 @@ public class UserAnalysisServiceImpl extends BaseServiceImpl<UserAnalysisDao, Us
return new PageData<>(list, page.getTotal());
}
@Override
@DataSource(name = DataSourceNames.ELEVENTH)
public PageData<UserDataRankResultDTO> pageUserDataRankByGrid(Map<String, Object> params) {
UserDetail userDetail = SecurityUser.getUser();
params.put("deptIdList", userDetail.getDeptIdList());
IPage<UserDataRankResultDTO> page = getPage(params);
List<UserDataRankResultDTO> list = getListUserDataRankResultDto(params);
return new PageData<>(list, page.getTotal());
}
private List<UserDataRankResultDTO> getListUserDataRankResultDro(Map<String, Object> params) {
/*List<UserDataRankResultDTO> list = baseDao.selectListUserDataRank(params);
@ -218,6 +228,19 @@ public class UserAnalysisServiceImpl extends BaseServiceImpl<UserAnalysisDao, Us
return list;
}
private List<UserDataRankResultDTO> getListUserDataRankResultDto(Map<String, Object> params) {
// 页码设置为1,则下面几次查询不会拼接分页
params.put("page", NumConstant.ONE);
String partyFlag = MapUtil.getStr(params, "partyFlag");
List<UserDataRankResultDTO> list;
// 党员排行列表
if (StringUtils.isNotBlank(partyFlag) && YesOrNoEnum.YES.value().equals(partyFlag)) {
list = baseDao.selectListUserDataRankOfGridByParty(params);
} else {
list = baseDao.selectListUserDataRankOfGridByUser(params);
}
return list;
}
/**
* 用户数据统计
@ -238,7 +261,6 @@ public class UserAnalysisServiceImpl extends BaseServiceImpl<UserAnalysisDao, Us
}
}
/**
* 网格开通状况
*
@ -401,5 +423,4 @@ public class UserAnalysisServiceImpl extends BaseServiceImpl<UserAnalysisDao, Us
return getListUserDataRankResultDro(params);
}
}

236
epdc-cloud-analysis-pc/src/main/resources/mapper/user/UserAnalysisDao.xml

@ -1060,6 +1060,7 @@
FROM (
SELECT
t.streetName, t.streetId,
count(t.userId) userCount,
count( (t.AUTHENTICATED_TYPE='1' and t.AUTHENTICATED_FLAG = '1' and t.SEX = '1') OR NULL ) maleCount,
count( (t.AUTHENTICATED_TYPE='1' and t.AUTHENTICATED_FLAG = '1' and t.SEX = '0') OR NULL ) femaleCount,
count( (t.AUTHENTICATED_TYPE='1' and t.AUTHENTICATED_FLAG = '1' and t.SEX = '2') OR NULL ) unknownSexCount,
@ -1162,6 +1163,110 @@
</select>
<select id="selectListUserDataRankOfGridByParty" resultType="com.elink.esua.epdc.dto.user.result.UserDataRankResultDTO">
SELECT
t1.*,
t1.oldCount / t1.partyMemberCount oldPercent,
t1.youngCount / t1.partyMemberCount youngPercent
FROM (
SELECT
t.streetName, t.streetId,
count(t.userId) userCount,
count( (t.AUTHENTICATED_TYPE='1' and t.AUTHENTICATED_FLAG = '1' and t.SEX = '1') OR NULL ) maleCount,
count( (t.AUTHENTICATED_TYPE='1' and t.AUTHENTICATED_FLAG = '1' and t.SEX = '0') OR NULL ) femaleCount,
count( (t.AUTHENTICATED_TYPE='1' and t.AUTHENTICATED_FLAG = '1' and t.SEX = '2') OR NULL ) unknownSexCount,
COUNT( (t.AUTHENTICATED_TYPE='1' and t.AUTHENTICATED_FLAG = '1') OR NULL ) partyMemberCount,
count((t.AUTHENTICATED_TYPE='1' and t.AUTHENTICATED_FLAG = '0' ) or null ) partyAuthFailureCount,
COUNT( (t.AUTHENTICATED_TYPE='1' and t.AUTHENTICATED_FLAG = '1' and t.age > 50) OR NULL ) oldCount,
COUNT( (t.AUTHENTICATED_TYPE='1' and t.AUTHENTICATED_FLAG = '1' and t.age &lt;= 50 AND t.age > 0 ) OR NULL )
youngCount
FROM (
select newuu.userId,newuu.SEX,newuu.age,ad.`name` streetName,
ad.id streetId,newuu.AUTHENTICATED_TYPE,newuu.AUTHENTICATED_FLAG,newuu.DEPT_ID
from (
SELECT
DISTINCT uu.ID userId,uu.CREATED_TIME,uu.DEL_FLAG,
CASE WHEN uu.SEX is null or uu.SEX != '0' AND uu.SEX != '1' THEN '2' ELSE uu.SEX END AS SEX,
IFNULL( TIMESTAMPDIFF( YEAR, uu.BIRTHDAY, CURDATE()), 0 ) age,
(
SELECT
AUTHENTICATED_TYPE
FROM
epdc_user_authenticate_history
WHERE
DEL_FLAG = '0'
AND AUTHENTICATED_TYPE IN ( '0', '1' )
<if test="endTime != ''">
and DATE_FORMAT(CREATED_TIME,'%Y-%m-%d') &lt;= #{endTime}
</if>
AND USER_ID = uu.ID
ORDER BY
CREATED_TIME DESC,
id
LIMIT 1
) AS AUTHENTICATED_TYPE,
(
SELECT
AUTHENTICATED_FLAG
FROM
epdc_user_authenticate_history
WHERE
DEL_FLAG = '0'
AND AUTHENTICATED_TYPE IN ( '0', '1' )
<if test="endTime != ''">
and DATE_FORMAT(CREATED_TIME,'%Y-%m-%d') &lt;= #{endTime}
</if>
AND USER_ID = uu.ID
ORDER BY
CREATED_TIME DESC ,
id
LIMIT 1
) AS AUTHENTICATED_FLAG,
ifnull(if(uu.DEPT_ID = 0, NULL, uu.DEPT_ID), (
SELECT GRID_ID FROM epdc_user_grid_relation
WHERE DEL_FLAG = '0' AND USER_ID = uu.ID
ORDER BY
CREATED_TIME,
id
LIMIT 1
)) AS DEPT_ID
FROM
epdc_user uu
) newuu
LEFT JOIN <include refid="com.elink.esua.epdc.modules.common.dao.EpdcTableNameDao.tb_admin"/>.sys_dept ad ON newuu.DEPT_ID = ad.ID AND ad.type_key = 'grid_party' AND ad.DEL_FLAG = '0'
WHERE newuu.DEL_FLAG = '0'
<choose>
<when test="gridId != null and gridId != ''">AND ad.ID = #{gridId}</when>
<otherwise>
<if test="deptIdList != null and deptIdList.size() > 0">
AND ad.ID in
<foreach collection="deptIdList" item="deptId" open="(" separator="," close=")">#{deptId}</foreach>
</if>
</otherwise>
</choose>
<if test="startTime != null and endTime != null and endTime != ''">
AND DATE_FORMAT(newuu.CREATED_TIME,'%Y-%m-%d') BETWEEN #{startTime} AND #{endTime}
</if>
AND ad.id IS NOT NULL
AND ad.DEL_FLAG = '0'
) t GROUP BY t.streetId
) t1
<choose>
<when test='category != null and category == "0"'> order by t1.oldCount desc </when>
<when test='category != null and category == "1"'> order by t1.youngCount desc </when>
<when test='category != null and category == "2"'> order by t1.oldCount asc </when>
<when test='category != null and category == "3"'> order by t1.youngCount asc </when>
<when test='category != null and category == "7"'>order by t1.userCount desc </when>
<when test='category != null and category == "8"'>order by t1.userCount asc </when>
<when test='category != null and category == "4"'>order by t1.userCount desc </when>
<when test='category != null and category == "5"'>order by t1.partyMemberCount desc </when>
<when test='category != null and category == "6"'>order by residentCount desc </when>
<otherwise> order by t1.streetId asc </otherwise>
</choose>
</select>
<select id="selectListUserDataRankByUser" resultType="com.elink.esua.epdc.dto.user.result.UserDataRankResultDTO">
SELECT
t1.*,
@ -1298,6 +1403,137 @@
</select>
<select id="selectListUserDataRankOfGridByUser" resultType="com.elink.esua.epdc.dto.user.result.UserDataRankResultDTO">
SELECT
t1.*,
(t1.userCount - t1.partyMemberCount - t1.residentCount) unAuthorizedCount,
t1.oldCount / (t1.userCount - t1.partyMemberCount) oldPercent,
t1.youngCount / (t1.userCount - t1.partyMemberCount) youngPercent
FROM (
SELECT
t.streetName, t.streetId,
count(t.userId) userCount,
count( (t.AUTHENTICATED_TYPE!='1' or t.AUTHENTICATED_FLAG != '1' and t.SEX = '1') OR NULL ) maleCount,
count( (t.AUTHENTICATED_TYPE!='1' or t.AUTHENTICATED_FLAG != '1' and t.SEX = '0') OR NULL ) femaleCount,
count( (t.AUTHENTICATED_TYPE!='1' or t.AUTHENTICATED_FLAG != '1' and t.SEX = '2') OR NULL ) unknownSexCount,
COUNT( (t.AUTHENTICATED_TYPE='1' and t.AUTHENTICATED_FLAG = '1') OR NULL ) partyMemberCount,
count( ((t.AUTHENTICATED_TYPE='0' and t.AUTHENTICATED_FLAG = '1') or (t.AUTHENTICATED_TYPE='1' and t.AUTHENTICATED_FLAG = '0' AND t.HistoryCount > 0)) or null ) residentCount,
COUNT( (t.AUTHENTICATED_TYPE!='1' or t.AUTHENTICATED_FLAG != '1' and t.age > 50) OR NULL ) oldCount,
COUNT( (t.AUTHENTICATED_TYPE!='1' or t.AUTHENTICATED_FLAG != '1' and t.age &lt;= 50 AND t.age > 0 ) OR NULL ) youngCount
FROM (
select
newuu.ID userId,
newuu.AUTHENTICATED_TYPE,
newuu.AUTHENTICATED_FLAG,
newuu.HistoryCount,
newuu.DEPT_ID,
newuu.SEX,
newuu.age,
ad.`name` streetName,
ad.id streetId
from
(
SELECT
DISTINCT uu.ID,
uu.DEL_FLAG,
uu.CREATED_TIME,
CASE WHEN uu.SEX is null or uu.SEX != '0' AND uu.SEX != '1' THEN '2' ELSE uu.SEX END AS SEX,
IFNULL( TIMESTAMPDIFF( YEAR, uu.BIRTHDAY, CURDATE()), 0 ) age,
(
SELECT
AUTHENTICATED_TYPE
FROM
epdc_user_authenticate_history
WHERE
DEL_FLAG = '0'
AND AUTHENTICATED_TYPE IN ( '0', '1' )
<if test="endTime != ''">
and DATE_FORMAT(CREATED_TIME,'%Y-%m-%d') &lt;= #{endTime}
</if>
AND USER_ID = uu.ID
ORDER BY
CREATED_TIME DESC,
id
LIMIT 1
) AS AUTHENTICATED_TYPE,
(
SELECT
AUTHENTICATED_FLAG
FROM
epdc_user_authenticate_history
WHERE
DEL_FLAG = '0'
AND AUTHENTICATED_TYPE IN ( '0', '1' )
<if test="endTime != ''">
and DATE_FORMAT(CREATED_TIME,'%Y-%m-%d') &lt;= #{endTime}
</if>
AND USER_ID = uu.ID
ORDER BY
CREATED_TIME DESC ,
id
LIMIT 1
) AS AUTHENTICATED_FLAG,
(
SELECT
count( id ) AS HistoryCount
FROM
epdc_user_authenticate_history
WHERE
DEL_FLAG = '0'
AND AUTHENTICATED_TYPE IN ( '0', '1' )
AND AUTHENTICATED_FLAG = '1'
<if test="endTime != ''">
and DATE_FORMAT(CREATED_TIME,'%Y-%m-%d') &lt;= #{endTime}
</if>
AND USER_ID = uu.ID
) AS HistoryCount,
ifnull(if(uu.DEPT_ID = 0, NULL, uu.DEPT_ID), (
SELECT GRID_ID FROM epdc_user_grid_relation
WHERE DEL_FLAG = '0' AND USER_ID = uu.ID
ORDER BY
CREATED_TIME,
id
LIMIT 1
)) AS DEPT_ID
FROM
epdc_user uu
) newuu
LEFT JOIN <include refid="com.elink.esua.epdc.modules.common.dao.EpdcTableNameDao.tb_admin"/>.sys_dept ad ON newuu.DEPT_ID = ad.ID AND ad.type_key = 'grid_party' AND ad.DEL_FLAG = '0'
WHERE
newuu.DEL_FLAG = '0'
<if test="startTime != null and endTime != null and endTime != ''">
AND DATE_FORMAT(newuu.CREATED_TIME,'%Y-%m-%d') BETWEEN #{startTime} AND #{endTime}
</if>
AND ad.id IS NOT NULL
AND ad.DEL_FLAG = '0'
<choose>
<when test="gridId != null and gridId != ''">AND ad.ID = #{gridId}</when>
<otherwise>
<if test="deptIdList != null and deptIdList.size() > 0">
AND ad.ID in
<foreach collection="deptIdList" item="deptId" open="(" separator="," close=")">#{deptId}</foreach>
</if>
</otherwise>
</choose>
) t GROUP BY t.streetId
) t1
<choose>
<when test='category != null and category == "0"'> order by t1.oldCount desc </when>
<when test='category != null and category == "1"'> order by t1.youngCount desc </when>
<when test='category != null and category == "2"'> order by t1.oldCount asc </when>
<when test='category != null and category == "3"'> order by t1.youngCount asc </when>
<when test='category != null and category == "7"'>order by t1.userCount desc </when>
<when test='category != null and category == "8"'>order by t1.userCount asc </when>
<when test='category != null and category == "4"'>order by t1.userCount desc </when>
<when test='category != null and category == "5"'>order by t1.partyMemberCount desc </when>
<when test='category != null and category == "6"'>order by residentCount desc </when>
<otherwise> order by t1.streetId asc </otherwise>
</choose>
</select>
<select id="selectExportEnterpriseCountByGridId" resultType="com.elink.esua.epdc.dto.user.result.GridOpeningResultDTO">
SELECT
t0.id gridId,

Loading…
Cancel
Save