Commit 63fc61a1 authored by litengwei's avatar litengwei

Merge remote-tracking branch 'origin/develop_tzs_register' into develop_tzs_register

parents 7fb7be17 e3f1eff4
......@@ -33,4 +33,9 @@ public interface BizCommonConstant {
*/
String TCM_ALL_DATA_DICT_REDIS_KEY = "TCM_ALL_DATA_DICT_REDIS_KEY";
/**
* 监管单位列表redisKey
* */
String REGULATOR_UNIT_LIST = "REGULATOR_UNIT_LIST";
}
package com.yeejoin.amos.boot.module.tcm.api.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.boot.module.tcm.api.dto.TzsTwoStaffingCompanyDto;
import com.yeejoin.amos.boot.module.tcm.api.entity.TzsTwoStaffing;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
......@@ -19,5 +19,10 @@ public interface TzsTwoStaffingMapper extends BaseMapper<TzsTwoStaffing> {
Page<TzsTwoStaffingCompanyDto> getCompanyList(@Param("page")Page<TzsTwoStaffingCompanyDto> page,
@Param("companyDto") TzsTwoStaffingCompanyDto companyDto,
@Param("orgCode") String orgCode);
List<TzsTwoStaffing> getListByOrgCode(@Param("orgCode")String orgCode, @Param("type")String type);
List<TzsTwoStaffingCompanyDto> getListAll();
void truncateTwoStaffingStatistics();
List<TzsTwoStaffing> getListByOrgCode(@Param("orgCode")String orgCode, @Param("type")String type, @Param("level")String level);
}
......@@ -2,10 +2,8 @@ package com.yeejoin.amos.boot.module.tcm.api.service;
import com.yeejoin.amos.boot.module.tcm.api.dto.TzsTwoStaffingCompanyDto;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import java.util.List;
import com.yeejoin.amos.boot.module.tcm.api.dto.TzsTwoStaffingCompanyDto;
import com.yeejoin.amos.boot.module.tcm.api.entity.TzsTwoStaffing;
import java.util.LinkedHashMap;
......@@ -21,4 +19,6 @@ public interface ITzsTwoStaffingService {
List<TzsTwoStaffing> getStatisticsMessage(List<LinkedHashMap> list, String type);
Page<TzsTwoStaffingCompanyDto> getCompanyList(String orgCode, TzsTwoStaffingCompanyDto companyDto,Page<TzsTwoStaffingCompanyDto> page);
public void generateTwoStaffingStatistics();
}
<?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.yeejoin.amos.boot.module.tcm.api.mapper.TzsTwoStaffingMapper">
<select id="getCompanyList" resultType="com.yeejoin.amos.boot.module.tcm.api.dto.TzsTwoStaffingCompanyDto">
<select id="getCompanyList" resultType="com.yeejoin.amos.boot.module.tcm.api.dto.TzsTwoStaffingCompanyDto">
SELECT
*
......@@ -43,4 +42,13 @@
and supervisory_unit_level = #{level}
</if>
</select>
<select id="getListAll" resultType="com.yeejoin.amos.boot.module.tcm.api.dto.TzsTwoStaffingCompanyDto">
SELECT
*
FROM
view_two_staffing
</select>
<select id="truncateTwoStaffingStatistics">
TRUNCATE TABLE tzs_two_staffing;
</select>
</mapper>
......@@ -4,9 +4,9 @@ import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.boot.biz.common.controller.BaseController;
import com.yeejoin.amos.boot.biz.common.excel.ExcelUtil;
import com.yeejoin.amos.boot.biz.common.utils.RedisUtils;
import com.yeejoin.amos.boot.module.tcm.api.dto.TzsTwoStaffingCompanyDto;
import com.yeejoin.amos.boot.biz.common.excel.ExcelUtil;
import com.yeejoin.amos.boot.module.tcm.api.entity.TzsTwoStaffing;
import com.yeejoin.amos.boot.module.tcm.api.service.ITzsTwoStaffingService;
import com.yeejoin.amos.boot.module.tcm.api.vo.TzsTwoStaffingExportVo;
......@@ -73,8 +73,6 @@ public class TzsTwoStaffingController extends BaseController {
ExcelUtil.createTemplate(response, "企业两员配备情况", "企业两员配备情况", equipExportData, TzsTwoStaffingCompanyDto.class, null, false);
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping(value = "/getStatisticsMessage")
@ApiOperation(httpMethod = "GET", value = "监管单位统计信息", notes = "监管单位统计信息")
......@@ -88,6 +86,14 @@ public class TzsTwoStaffingController extends BaseController {
return ResponseHelper.buildResponse(tzsTwoStaffingPage);
}
@TycloudOperation(ApiLevel = UserType.AGENCY, needAuth = false)
@GetMapping(value = "/generateTwoStaffingStatistics")
@ApiOperation(httpMethod = "GET", value = "生成两员配备统计", notes = "生成两员配备统计")
public ResponseModel<Object> generateTwoStaffingStatistics() {
tzsTwoStaffingService.generateTwoStaffingStatistics();
return ResponseHelper.buildResponse("ok");
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping(value = "/exportData")
@ApiOperation(httpMethod = "GET", value = "监管单位统计信息导出", notes = "监管单位统计信息导出")
......
package com.yeejoin.amos.boot.module.tcm.biz.service.impl;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.google.common.collect.Lists;
import com.yeejoin.amos.boot.biz.common.utils.RedisUtils;
import com.yeejoin.amos.boot.module.tcm.api.common.BizCommonConstant;
import com.yeejoin.amos.boot.module.tcm.api.dto.TzsTwoStaffingCompanyDto;
import com.yeejoin.amos.boot.module.tcm.api.dto.TzsTwoStaffingDto;
import com.yeejoin.amos.boot.module.tcm.api.entity.TzsTwoStaffing;
import com.yeejoin.amos.boot.module.tcm.api.enums.SupervisoryEnum;
import com.yeejoin.amos.boot.module.tcm.api.mapper.TzsTwoStaffingMapper;
import com.yeejoin.amos.boot.module.tcm.api.service.ITzsTwoStaffingService;
import com.yeejoin.amos.boot.module.tcm.api.dto.TzsTwoStaffingDto;
import org.springframework.beans.factory.annotation.Autowired;
import lombok.extern.slf4j.Slf4j;
import net.javacrumbs.shedlock.spring.annotation.SchedulerLock;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StopWatch;
import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
import org.typroject.tyboot.core.rdbms.service.BaseService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.stream.Collectors;
/**
* 服务实现类
......@@ -27,25 +36,127 @@ import java.util.List;
* @date 2023-10-27
*/
@Service
@Slf4j
public class TzsTwoStaffingServiceImpl extends BaseService<TzsTwoStaffingDto, TzsTwoStaffing, TzsTwoStaffingMapper> implements ITzsTwoStaffingService {
// 监管列表key
private static final String REGULATOR_UNIT_LIST = "REGULATOR_UNIT_LIST";
@Autowired
RedisUtils redisUtils;
@Autowired
TzsTwoStaffingMapper tzsTwoStaffingMapper;
@Override
@Scheduled(cron = "0 0 2,13 * * ?")
@SchedulerLock(name = "twoStaffingStatisticsTask", lockAtMostFor = "PT1H")
public void generateTwoStaffingStatistics() {
StopWatch timeWatch = new StopWatch();
timeWatch.start();
// 所有监管单位列表
List<LinkedHashMap<String, Object>> supervisionList = getSupervisionList();
// 所有企业人员配备情况列表
List<TzsTwoStaffingCompanyDto> staffingCompanyList = tzsTwoStaffingMapper.getListAll();
// 两员配备统计列表
List<TzsTwoStaffingDto> allStaffingDto = Lists.newArrayList();
supervisionList.forEach(i -> {
TzsTwoStaffingDto useUnitTwoStaffingDto = new TzsTwoStaffingDto();
TzsTwoStaffingDto productUnitTwoStaffingDto = new TzsTwoStaffingDto();
List<TzsTwoStaffingCompanyDto> useUnit =
staffingCompanyList.stream().filter(ii -> ii.getSuperviseOrgCode().startsWith(i.get("orgCode").toString()) && ii.getUnitType().contains("使用单位")).collect(Collectors.toList());
// 使用单位总数
int useUnitCount = useUnit.size();
// 已完成单位数
int useUnitFinished = useUnit.stream().mapToInt(s -> Integer.parseInt(s.getUseDone())).sum();
// 已配备主要负责人单位数
int useUnitMainChargerFinished = useUnit.stream().mapToInt(s -> Integer.parseInt(s.getMainCharger())).sum();
/**
* 分页查询
*/
public Page<TzsTwoStaffingDto> queryForTzsTwoStaffingPage(Page<TzsTwoStaffingDto> page) {
return this.queryForPage(page, null, false);
if (useUnitCount == 0) {
useUnitTwoStaffingDto.setCompletionRatio("0%");
useUnitTwoStaffingDto.setProportion("0%");
} else {
DecimalFormat decimalFormat = new DecimalFormat("0.##");
BigDecimal result = new BigDecimal(useUnitFinished).divide(new BigDecimal(useUnitCount), 4, RoundingMode.HALF_UP);
useUnitTwoStaffingDto.setCompletionRatio(decimalFormat.format(result.multiply(new BigDecimal(100))) + "%");
result = new BigDecimal(useUnitMainChargerFinished).divide(new BigDecimal(useUnitCount), 4, RoundingMode.HALF_UP);
useUnitTwoStaffingDto.setProportion(decimalFormat.format(result.multiply(new BigDecimal(100))) + "%");
}
/**
* 列表查询 示例
*/
public List<TzsTwoStaffingDto> queryForTzsTwoStaffingList() {
return this.queryForList("", false);
useUnitTwoStaffingDto.setUnitType("使用单位");
useUnitTwoStaffingDto.setNumberOfUnits(useUnitCount);
useUnitTwoStaffingDto.setNumberOfCompletedUnits(useUnitFinished);
useUnitTwoStaffingDto.setResponsibleUnitsAllocateNumber(useUnitMainChargerFinished);
useUnitTwoStaffingDto.setSupervisoryUnitId(i.get("sequenceNbr").toString());
useUnitTwoStaffingDto.setSupervisoryUnitLevel(i.get("level").toString());
useUnitTwoStaffingDto.setSupervisoryUnitName(i.get("companyName").toString());
useUnitTwoStaffingDto.setSupervisoryUnitOrgcode(i.get("orgCode").toString());
allStaffingDto.add(useUnitTwoStaffingDto);
List<TzsTwoStaffingCompanyDto> productUnit =
staffingCompanyList.stream().filter(ii -> ii.getSuperviseOrgCode().startsWith(i.get("orgCode").toString()) && (ii.getUnitType().contains("充装单位") || ii.getUnitType().contains("安装改造维修单位") || ii.getUnitType().contains("制造单位") || ii.getUnitType().contains("设计单位"))).collect(Collectors.toList());
// 生产单位总数
int productUnitCount = productUnit.size();
// 已完成单位数
int productUnitFinished = productUnit.stream().mapToInt(s -> Integer.parseInt(s.getProductDone())).sum();
// 已配备主要负责人单位数
int productUnitMainChargerFinished =
productUnit.stream().mapToInt(s -> Integer.parseInt(s.getMainCharger())).sum();
if (productUnitCount == 0) {
productUnitTwoStaffingDto.setCompletionRatio("0%");
productUnitTwoStaffingDto.setProportion("0%");
} else {
DecimalFormat decimalFormat = new DecimalFormat("0.##");
BigDecimal result = new BigDecimal(productUnitFinished).divide(new BigDecimal(productUnitCount), 4, RoundingMode.HALF_UP);
productUnitTwoStaffingDto.setCompletionRatio(decimalFormat.format(result.multiply(new BigDecimal(100))) + "%");
result = new BigDecimal(productUnitMainChargerFinished).divide(new BigDecimal(productUnitCount), 4, RoundingMode.HALF_UP);
productUnitTwoStaffingDto.setProportion(decimalFormat.format(result.multiply(new BigDecimal(100))) + "%");
}
productUnitTwoStaffingDto.setUnitType("生产单位");
productUnitTwoStaffingDto.setNumberOfUnits(productUnitCount);
productUnitTwoStaffingDto.setNumberOfCompletedUnits(productUnitFinished);
productUnitTwoStaffingDto.setResponsibleUnitsAllocateNumber(productUnitMainChargerFinished);
productUnitTwoStaffingDto.setSupervisoryUnitId(i.get("sequenceNbr").toString());
productUnitTwoStaffingDto.setSupervisoryUnitLevel(i.get("level").toString());
productUnitTwoStaffingDto.setSupervisoryUnitName(i.get("companyName").toString());
productUnitTwoStaffingDto.setSupervisoryUnitOrgcode(i.get("orgCode").toString());
allStaffingDto.add(productUnitTwoStaffingDto);
});
// 先清两员配备统计空表
tzsTwoStaffingMapper.truncateTwoStaffingStatistics();
// 再重新生成统计信息
List<TzsTwoStaffing> allStaffing = Lists.newArrayList();
if (!ValidationUtil.isEmpty(allStaffingDto)) {
allStaffingDto.forEach(e -> {
TzsTwoStaffing tzsTwoStaffing = new TzsTwoStaffing();
BeanUtils.copyProperties(e, tzsTwoStaffing);
allStaffing.add(tzsTwoStaffing);
});
}
this.saveBatch(allStaffing);
timeWatch.stop();
log.info("两员配备统计耗时{}秒/n", timeWatch.getTotalTimeSeconds());
}
private List<LinkedHashMap<String, Object>> getSupervisionList() {
List<LinkedHashMap<String, Object>> supervisionList =
(List<LinkedHashMap<String, Object>>) redisUtils.get(BizCommonConstant.REGULATOR_UNIT_LIST);
if (ValidationUtil.isEmpty(supervisionList)) {
// 监管单位树
List<LinkedHashMap<String, Object>> supervisionTree =
(List<LinkedHashMap<String, Object>>) redisUtils.get(BizCommonConstant.COMPANY_TREE_REDIS_KEY);
if (!ValidationUtil.isEmpty(supervisionTree)) {
List<LinkedHashMap<String, Object>> supervisionTree2List = tree2List(supervisionTree);
redisUtils.set(REGULATOR_UNIT_LIST, supervisionTree2List);
return supervisionTree2List;
}
}
return supervisionList;
}
@Override
......@@ -101,11 +212,19 @@ public class TzsTwoStaffingServiceImpl extends BaseService<TzsTwoStaffingDto, Tz
return null;
}
private List<LinkedHashMap> treeToList(List<LinkedHashMap> result, List<LinkedHashMap> list){
if (!ObjectUtils.isEmpty(list) && !ObjectUtils.isEmpty(list.get(0).get("children"))){
result.addAll((List<LinkedHashMap>)list.get(0).get("children"));
}else {
result.add(list.get(0));
private List<LinkedHashMap<String, Object>> tree2List(List<LinkedHashMap<String, Object>> supervisionList) {
List<LinkedHashMap<String, Object>> result = Lists.newArrayList();
for (LinkedHashMap<String, Object> map : supervisionList) {
result.add(map);
if (!ValidationUtil.isEmpty(map.get("children"))) {
List<LinkedHashMap<String, Object>> childrenList = tree2List((List<LinkedHashMap<String, Object>>) map.get("children"));
result.addAll(childrenList);
}
}
if (result.size() > 0) {
for (LinkedHashMap<String, Object> map : result) {
map.put("children", null);
}
}
return result;
}
......@@ -113,7 +232,6 @@ public class TzsTwoStaffingServiceImpl extends BaseService<TzsTwoStaffingDto, Tz
@Override
public Page<TzsTwoStaffingCompanyDto> getCompanyList(String orgCode, TzsTwoStaffingCompanyDto companyDto, Page<TzsTwoStaffingCompanyDto> page) {
Page<TzsTwoStaffingCompanyDto> companyList = tzsTwoStaffingMapper.getCompanyList(page, companyDto, orgCode);
if(!ObjectUtils.isEmpty(companyList.getRecords())){
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment