Browse Source

6、【工作日志】近12月趋势图

dev_shibei_match
sunyuchao 5 years ago
parent
commit
b1f02ebcd1
  1. 46
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/plugins/form/WorkRecordTrendFormDTO.java
  2. 56
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/plugins/result/WorkRecordTrendResultDTO.java
  3. 14
      epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/controller/plugins/WorkRecordController.java
  4. 4
      epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/dao/plugins/ScreenCustomerWorkRecordDictDao.java
  5. 9
      epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/dao/plugins/ScreenWorkRecordOrgMonthlyDao.java
  6. 8
      epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/service/plugins/ScreenWorkRecordOrgDailyService.java
  7. 76
      epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/service/plugins/impl/ScreenWorkRecordOrgDailyServiceImpl.java
  8. 33
      epmet-module/data-report/data-report-server/src/main/resources/mapper/plugins/ScreenCustomerWorkRecordDictDao.xml
  9. 32
      epmet-module/data-report/data-report-server/src/main/resources/mapper/plugins/ScreenWorkRecordOrgMonthlyDao.xml

46
epmet-module/data-report/data-report-client/src/main/java/com/epmet/plugins/form/WorkRecordTrendFormDTO.java

@ -0,0 +1,46 @@
package com.epmet.plugins.form;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* 6工作日志近12月趋势图
*
* @author sun
*/
@Data
public class WorkRecordTrendFormDTO implements Serializable {
private static final long serialVersionUID = -2934835714413031036L;
/**
* party:支部建设; union:联建共建党员志愿服务voluntaryservice
*/
@NotBlank(message = "dataType不能为空;可选值:party:支部建设; union:联建共建;党员志愿服务:voluntaryservice")
private String dataType;
/**
* 当前组织id
*/
@NotBlank(message = "agencyId不能为空")
private String agencyId;
/**
* 组织次数organize参与人数joinuser平均参与人数avguser
*/
@NotBlank(message = "type不能为空")
private String type;
@NotBlank(message = "customerId不能为空")
private String customerId;
/**
* 查询数据起始月份Id
*/
private String startMonth;
/**
* 查询数据结束月份Id
*/
private String endMonth;
}

56
epmet-module/data-report/data-report-client/src/main/java/com/epmet/plugins/result/WorkRecordTrendResultDTO.java

@ -0,0 +1,56 @@
package com.epmet.plugins.result;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.AllArgsConstructor;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* 6工作日志近12月趋势图
*
* @author sun
*/
@Data
public class WorkRecordTrendResultDTO implements Serializable {
/**
* 横轴 过去十二个月份
* ['1月', '2月', '3月', '4月', '5月','6月','7月','8月','9月','10月','11月','12月']
*/
private List<String> xAxis;
/**
* 资源标签名
* ['三会一课', '主题党日', '三述专题', '志愿服务', '党内关怀']
*/
private List<String> legend;
/**
*各项资源对应数据对象
*/
private List<WorkRecordTrendResultDTO.SeriesResultDTO> series;
@Data
public static class SeriesResultDTO {
/**
* 资源标签名
* ['三会一课', '主题党日', '三述专题', '志愿服务', '党内关怀']
*/
private String name;
/**
* 各项资源对应12月份数据
*/
private List<Integer> data;
/**
* 数据对应的月份Id
*/
@JsonIgnore
private String monthId;
/**
* 各项资源对应某一月份数据
*/
@JsonIgnore
private Integer value;
}
}

14
epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/controller/plugins/WorkRecordController.java

@ -4,7 +4,9 @@ import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.datareport.service.plugins.ScreenWorkRecordOrgDailyService;
import com.epmet.plugins.form.WorkRecordRankFormDTO;
import com.epmet.plugins.form.WorkRecordTrendFormDTO;
import com.epmet.plugins.result.WorkRecordRankResultDTO;
import com.epmet.plugins.result.WorkRecordTrendResultDTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@ -15,7 +17,7 @@ import org.springframework.web.bind.annotation.*;
* @date 2021/2/21 19:51
*/
@RestController
@RequestMapping("plugins/workrecord")
@RequestMapping("screen/plugins/workrecord")
public class WorkRecordController {
@Autowired
private ScreenWorkRecordOrgDailyService screenWorkRecordOrgDailyService;
@ -37,4 +39,14 @@ public class WorkRecordController {
//6、【工作日志】近12月趋势图
//NEI接口地址:https://nei.netease.com/interface/detail/?pid=57068&id=348967
//可以下级组织+下级网格 orgId 直接 in
/**
* @Description 6工作日志近12月趋势图
* @author sun
*/
@PostMapping("trend")
public Result<WorkRecordTrendResultDTO> trend(@RequestHeader("CustomerId")String customerId, @RequestBody WorkRecordTrendFormDTO formDTO){
formDTO.setCustomerId(customerId);
ValidatorUtils.validateEntity(formDTO);
return new Result<WorkRecordTrendResultDTO>().ok(screenWorkRecordOrgDailyService.trend(formDTO));
}
}

4
epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/dao/plugins/ScreenCustomerWorkRecordDictDao.java

@ -20,6 +20,9 @@ package com.epmet.datareport.dao.plugins;
import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.datareport.entity.plugins.ScreenCustomerWorkRecordDictEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 工作日志资源字典表
@ -30,4 +33,5 @@ import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface ScreenCustomerWorkRecordDictDao extends BaseDao<ScreenCustomerWorkRecordDictEntity> {
List<String> selectListByDataType(@Param("customerId") String customerId, @Param("dataType") String dataType);
}

9
epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/dao/plugins/ScreenWorkRecordOrgMonthlyDao.java

@ -19,8 +19,12 @@ package com.epmet.datareport.dao.plugins;
import com.epmet.commons.mybatis.dao.BaseDao;
import com.epmet.datareport.entity.plugins.ScreenWorkRecordOrgMonthlyEntity;
import com.epmet.plugins.form.WorkRecordTrendFormDTO;
import com.epmet.plugins.result.WorkRecordTrendResultDTO;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
* 工作日志-组织按月统计(增量)
*
@ -30,4 +34,9 @@ import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface ScreenWorkRecordOrgMonthlyDao extends BaseDao<ScreenWorkRecordOrgMonthlyEntity> {
/**
* @Description 按组织查询某项数据近12月趋势图
* @author sun
*/
List<WorkRecordTrendResultDTO.SeriesResultDTO> selectMonthList(WorkRecordTrendFormDTO formDTO);
}

8
epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/service/plugins/ScreenWorkRecordOrgDailyService.java

@ -22,7 +22,9 @@ import com.epmet.commons.tools.page.PageData;
import com.epmet.datareport.entity.plugins.ScreenWorkRecordOrgDailyEntity;
import com.epmet.plugins.ScreenWorkRecordOrgDailyDTO;
import com.epmet.plugins.form.WorkRecordRankFormDTO;
import com.epmet.plugins.form.WorkRecordTrendFormDTO;
import com.epmet.plugins.result.WorkRecordRankResultDTO;
import com.epmet.plugins.result.WorkRecordTrendResultDTO;
import java.util.List;
import java.util.Map;
@ -96,4 +98,10 @@ public interface ScreenWorkRecordOrgDailyService extends BaseService<ScreenWorkR
void delete(String[] ids);
WorkRecordRankResultDTO rankList(WorkRecordRankFormDTO formDTO);
/**
* @Description 6工作日志近12月趋势图
* @author sun
*/
WorkRecordTrendResultDTO trend(WorkRecordTrendFormDTO formDTO);
}

76
epmet-module/data-report/data-report-server/src/main/java/com/epmet/datareport/service/plugins/impl/ScreenWorkRecordOrgDailyServiceImpl.java

@ -19,29 +19,38 @@ package com.epmet.datareport.service.plugins.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.epmet.commons.dynamic.datasource.annotation.DataSource;
import com.epmet.commons.mybatis.service.impl.BaseServiceImpl;
import com.epmet.commons.tools.constant.FieldConstant;
import com.epmet.commons.tools.constant.NumConstant;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.commons.tools.page.PageData;
import com.epmet.commons.tools.utils.ConvertUtils;
import com.epmet.constant.DataSourceConstant;
import com.epmet.datareport.dao.plugins.ScreenCustomerWorkRecordDictDao;
import com.epmet.datareport.dao.plugins.ScreenWorkRecordOrgDailyDao;
import com.epmet.datareport.dao.plugins.ScreenWorkRecordOrgMonthlyDao;
import com.epmet.datareport.entity.plugins.ScreenWorkRecordOrgDailyEntity;
import com.epmet.datareport.service.evaluationindex.screen.AgencyService;
import com.epmet.datareport.service.plugins.ScreenWorkRecordOrgDailyService;
import com.epmet.datareport.utils.DateUtils;
import com.epmet.dto.result.ScreenCustomerAgencyDTO;
import com.epmet.plugins.ScreenWorkRecordOrgDailyDTO;
import com.epmet.plugins.form.WorkRecordRankFormDTO;
import com.epmet.plugins.form.WorkRecordTrendFormDTO;
import com.epmet.plugins.result.WorkRecordRankResultDTO;
import com.epmet.plugins.result.WorkRecordTrendResultDTO;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
/**
* 工作日志-组织按日统计(累计值)
@ -54,6 +63,12 @@ import java.util.Map;
public class ScreenWorkRecordOrgDailyServiceImpl extends BaseServiceImpl<ScreenWorkRecordOrgDailyDao, ScreenWorkRecordOrgDailyEntity> implements ScreenWorkRecordOrgDailyService {
@Autowired
private AgencyService agencyService;
@Autowired
private DateUtils dateUtils;
@Autowired
private ScreenCustomerWorkRecordDictDao screenCustomerWorkRecordDictDao;
@Autowired
private ScreenWorkRecordOrgMonthlyDao screenWorkRecordOrgMonthlyDao;
@Override
public PageData<ScreenWorkRecordOrgDailyDTO> page(Map<String, Object> params) {
@ -128,4 +143,57 @@ public class ScreenWorkRecordOrgDailyServiceImpl extends BaseServiceImpl<ScreenW
}
}
/**
* @Description 6工作日志近12月趋势图
* 查询当前组织及所有下级某项数据(组织次数参与人数平均参与人数)的某个资源(支部建设联建共建党员志愿服务)对应的每个类型的指标过去12个月的汇总数据,某个月份没数据的补0
* @author sun
*/
@Override
@DataSource(DataSourceConstant.STATS_DISPLAY)
public WorkRecordTrendResultDTO trend(WorkRecordTrendFormDTO formDTO) {
WorkRecordTrendResultDTO resultDTO = new WorkRecordTrendResultDTO();
//1.查询当前月过去12个月份
Map<String, String> map = dateUtils.getXpro();
resultDTO.setXAxis(map.values().stream().collect(Collectors.toList()));
List<String> monthIdList = map.keySet().stream().collect(Collectors.toList());
//2.根据资源编码查询资源名称集合,按sort升序
List<String> legendList = screenCustomerWorkRecordDictDao.selectListByDataType(formDTO.getCustomerId(), formDTO.getDataType());
resultDTO.setLegend(legendList);
if (null == legendList || legendList.size() < NumConstant.ONE) {
return resultDTO;
}
//3-1.查询当前组织及所有下级过去12个月份某项数据所有资源的统计数据
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyyMM");
LocalDate today = LocalDate.now();
formDTO.setStartMonth(today.minusMonths(NumConstant.TWELVE).format(fmt));
formDTO.setEndMonth(today.minusMonths(NumConstant.ZERO).format(fmt));
List<WorkRecordTrendResultDTO.SeriesResultDTO> list = screenWorkRecordOrgMonthlyDao.selectMonthList(formDTO);
//3-2.遍历封装数据并返回
LinkedList<WorkRecordTrendResultDTO.SeriesResultDTO> seriesList = new LinkedList<>();
//按资源类型封装每一个资源类型对应的过去12个月的汇总数据,某个月份没有数据的补0
legendList.forEach(le -> {
WorkRecordTrendResultDTO.SeriesResultDTO dto = new WorkRecordTrendResultDTO.SeriesResultDTO();
dto.setName(le);
LinkedList<Integer> dataList = new LinkedList<>();
monthIdList.forEach(m->{
AtomicInteger num = new AtomicInteger(0);
list.forEach(l -> {
if (m.equals(l.getMonthId())&&le.equals(l.getName())) {
//dataList.add(l.getValue());
num.set(l.getValue());
}
});
dataList.add(num.get());
});
dto.setData(dataList);
seriesList.add(dto);
});
resultDTO.setSeries(seriesList);
return resultDTO;
}
}

33
epmet-module/data-report/data-report-server/src/main/resources/mapper/plugins/ScreenCustomerWorkRecordDictDao.xml

@ -3,26 +3,17 @@
<mapper namespace="com.epmet.datareport.dao.plugins.ScreenCustomerWorkRecordDictDao">
<resultMap type="com.epmet.datareport.entity.plugins.ScreenCustomerWorkRecordDictEntity" id="screenCustomerWorkRecordDictMap">
<result property="id" column="ID"/>
<result property="customerId" column="CUSTOMER_ID"/>
<result property="dateId" column="DATE_ID"/>
<result property="dictId" column="DICT_ID"/>
<result property="pid" column="PID"/>
<result property="resourceType" column="RESOURCE_TYPE"/>
<result property="resourceCode" column="RESOURCE_CODE"/>
<result property="resourceLabel" column="RESOURCE_LABEL"/>
<result property="showFlag" column="SHOW_FLAG"/>
<result property="sort" column="SORT"/>
<result property="dataType" column="DATA_TYPE"/>
<result property="level" column="LEVEL"/>
<result property="delFlag" column="DEL_FLAG"/>
<result property="revision" column="REVISION"/>
<result property="createdBy" column="CREATED_BY"/>
<result property="createdTime" column="CREATED_TIME"/>
<result property="updatedBy" column="UPDATED_BY"/>
<result property="updatedTime" column="UPDATED_TIME"/>
</resultMap>
<select id="selectListByDataType" resultType="java.lang.String">
SELECT
resource_label
FROM
screen_customer_work_record_dict
WHERE
del_flag = '0'
AND customer_id = #{customerId}
AND data_type = #{dataType}
ORDER BY
sort ASC, resource_label DESC
</select>
</mapper>

32
epmet-module/data-report/data-report-server/src/main/resources/mapper/plugins/ScreenWorkRecordOrgMonthlyDao.xml

@ -3,6 +3,36 @@
<mapper namespace="com.epmet.datareport.dao.plugins.ScreenWorkRecordOrgMonthlyDao">
<select id="selectMonthList" resultType="com.epmet.plugins.result.WorkRecordTrendResultDTO$SeriesResultDTO">
SELECT
sw.MONTH_ID AS monthId,
(select resource_label from screen_customer_work_record_dict where resource_code = sw.type_code and customer_id = #{customerId})`name`
<if test="type != null and type.trim() != ''">
<if test="type == 'organize' ">
,SUM(sw.organize_total) as `value`
</if>
<if test="type == 'joinuser' ">
,SUM(sw.participate_user_total) as `value`
</if>
<if test="type == 'avguser' ">
,SUM(sw.avg_participate_user_total) as `value`
</if>
</if>
FROM screen_work_record_org_monthly sw
LEFT JOIN screen_customer_agency sca ON sw.org_id = sca.agency_id
LEFT JOIN screen_customer_work_record_dict wrd ON sw.type_code = wrd.resource_code
WHERE
sw.del_flag = '0'
AND sca.del_flag = '0'
AND sw.customer_id = #{customerId}
AND sca.area_code LIKE CONCAT('%',(select area_code from screen_customer_agency where agency_id = #{agencyId}),'%')
AND sw.month_id > #{startMonth}
AND sw.month_id <![CDATA[ <= ]]> #{endMonth}
AND wrd.data_type = #{dataType}
GROUP BY
sw.month_id,sw.type_code
ORDER BY
sw.month_id ASC
</select>
</mapper>
Loading…
Cancel
Save