Commit 05a34c99 authored by tianbo's avatar tianbo

两员配备统计表生成

parent 7ff006e3
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;
......@@ -20,4 +20,8 @@ public interface TzsTwoStaffingMapper extends BaseMapper<TzsTwoStaffing> {
@Param("companyDto") TzsTwoStaffingCompanyDto companyDto,
@Param("orgCode") String orgCode);
List<TzsTwoStaffing> getListByOrgCode(@Param("orgCode")String orgCode, @Param("type")String type);
List<TzsTwoStaffingCompanyDto> getListAll();
void truncateTwoStaffingStatistics();
}
......@@ -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);
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
*
......@@ -23,4 +22,13 @@
<select id="getListByOrgCode" resultType="com.yeejoin.amos.boot.module.tcm.api.entity.TzsTwoStaffing">
</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>
......@@ -2,34 +2,18 @@ package com.yeejoin.amos.boot.module.tcm.biz.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.alibaba.fastjson.JSON;
import com.yeejoin.amos.boot.biz.common.bo.ReginParams;
import com.yeejoin.amos.boot.biz.common.controller.BaseController;
import com.yeejoin.amos.boot.module.tcm.api.dto.TzsEquipListDto;
import com.yeejoin.amos.boot.module.tcm.api.dto.TzsTwoStaffingCompanyDto;
import com.yeejoin.amos.boot.biz.common.utils.RedisKey;
import com.yeejoin.amos.boot.biz.common.utils.RedisUtils;
import com.yeejoin.amos.boot.module.tcm.api.dto.TzsTwoStaffingCompanyDto;
import com.yeejoin.amos.boot.module.tcm.api.service.ITzsTwoStaffingService;
import com.yeejoin.amos.boot.module.tcm.biz.service.impl.TzsUserInfoServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;;
import org.springframework.web.bind.annotation.*;
import org.typroject.tyboot.core.foundation.enumeration.UserType;
import org.typroject.tyboot.core.restful.doc.TycloudOperation;
import org.typroject.tyboot.core.restful.utils.ResponseHelper;
import org.typroject.tyboot.core.restful.utils.ResponseModel;
import java.util.List;
import java.util.Map;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.typroject.tyboot.core.foundation.context.RequestContext;
import org.typroject.tyboot.core.foundation.enumeration.UserType;
import org.typroject.tyboot.core.restful.doc.TycloudOperation;
import org.typroject.tyboot.core.restful.utils.ResponseHelper;
......@@ -39,6 +23,8 @@ import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
;
@RestController
@Api(tags = "统计")
@RequestMapping(value = "/twoStaff")
......@@ -80,4 +66,11 @@ public class TzsTwoStaffingController extends BaseController {
return ResponseHelper.buildResponse(tzsTwoStaffingService.getStatisticsMessage(list));
}
@TycloudOperation(ApiLevel = UserType.AGENCY, needAuth = false)
@GetMapping(value = "/generateTwoStaffingStatistics")
@ApiOperation(httpMethod = "GET", value = "生成两员配备统计", notes = "生成两员配备统计")
public ResponseModel<Object> generateTwoStaffingStatistics() {
tzsTwoStaffingService.generateTwoStaffingStatistics();
return ResponseHelper.buildResponse(null);
}
}
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.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.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;
/**
* 服务实现类
......@@ -24,80 +34,215 @@ import java.util.List;
* @date 2023-10-27
*/
@Service
@Slf4j
public class TzsTwoStaffingServiceImpl extends BaseService<TzsTwoStaffingDto, TzsTwoStaffing, TzsTwoStaffingMapper> implements ITzsTwoStaffingService {
@Autowired
TzsTwoStaffingMapper tzsTwoStaffingMapper;
/**
* 分页查询
*/
public Page<TzsTwoStaffingDto> queryForTzsTwoStaffingPage(Page<TzsTwoStaffingDto> page) {
return this.queryForPage(page, null, false);
}
/**
* 列表查询 示例
*/
public List<TzsTwoStaffingDto> queryForTzsTwoStaffingList() {
return this.queryForList("", false);
}
@Override
public List<TzsTwoStaffing> getStatisticsMessage(List<LinkedHashMap> list) {
ArrayList<TzsTwoStaffing> tzsTwoStaffings = new ArrayList<>();
List<LinkedHashMap> supervisory = treeToList(new ArrayList<>(), list);
for (LinkedHashMap map : supervisory) {
TzsTwoStaffing tzsTwoStaffing = new TzsTwoStaffing();
tzsTwoStaffing.setSupervisoryUnitId(String.valueOf(map.get("sequenceNbr")));
tzsTwoStaffing.setSupervisoryUnitName(String.valueOf(map.get("companyName")));
tzsTwoStaffing.setSupervisoryUnitOrgcode(String.valueOf(map.get("orgCode")));
tzsTwoStaffings.add(tzsTwoStaffing);
}
return tzsTwoStaffings;
}
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));
// 监管树key
private static final String REGULATOR_UNIT_TREE = "REGULATOR_UNIT_TREE";
// 监管列表key
private static final String REGULATOR_UNIT_LIST = "REGULATOR_UNIT_LIST";
@Autowired
RedisUtils redisUtils;
@Autowired
TzsTwoStaffingMapper tzsTwoStaffingMapper;
/**
* 分页查询
*/
public Page<TzsTwoStaffingDto> queryForTzsTwoStaffingPage(Page<TzsTwoStaffingDto> page) {
return this.queryForPage(page, null, false);
}
/**
* 列表查询 示例
*/
public List<TzsTwoStaffingDto> queryForTzsTwoStaffingList() {
return this.queryForList("", false);
}
@Override
public List<TzsTwoStaffing> getStatisticsMessage(List<LinkedHashMap> list) {
ArrayList<TzsTwoStaffing> tzsTwoStaffings = new ArrayList<>();
List<LinkedHashMap> supervisory = treeToList(new ArrayList<>(), list);
for (LinkedHashMap map : supervisory) {
TzsTwoStaffing tzsTwoStaffing = new TzsTwoStaffing();
tzsTwoStaffing.setSupervisoryUnitId(String.valueOf(map.get("sequenceNbr")));
tzsTwoStaffing.setSupervisoryUnitName(String.valueOf(map.get("companyName")));
tzsTwoStaffing.setSupervisoryUnitOrgcode(String.valueOf(map.get("orgCode")));
tzsTwoStaffings.add(tzsTwoStaffing);
}
return tzsTwoStaffings;
}
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));
}
return result;
}
@Override
public Page<TzsTwoStaffingCompanyDto> getCompanyList(String orgCode, TzsTwoStaffingCompanyDto companyDto, Page<TzsTwoStaffingCompanyDto> page) {
Page<TzsTwoStaffingCompanyDto> companyList = tzsTwoStaffingMapper.getCompanyList(page, companyDto, orgCode);
companyList.getRecords().stream().map(item -> {
if (item.getUnitType().contains("使用单位")) {
item.setCompleteNormal(Integer.valueOf(item.getUseDone()) > 1 ? "是" : "否");
}
if (item.getUnitType().contains("充装单位")
|| item.getUnitType().contains("安装改造维修单位")
|| item.getUnitType().contains("制造单位")
|| item.getUnitType().contains("设计单位")) {
item.setCompleteNormal(Integer.valueOf(item.getProductDone()) > 1 ? "是" : "否");
}
if (item.getUnitType().contains("使用单位") && (item.getUnitType().contains("充装单位")
|| item.getUnitType().contains("安装改造维修单位")
|| item.getUnitType().contains("制造单位")
|| item.getUnitType().contains("设计单位"))) {
item.setCompleteNormal(Integer.valueOf(item.getAllDone()) > 1 ? "是" : "否");
}
return item;
});
return companyList;
}
@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();
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))) + "%");
}
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(REGULATOR_UNIT_LIST);
if (ValidationUtil.isEmpty(supervisionList)) {
// 监管单位树
List<LinkedHashMap<String, Object>> supervisionTree =
(List<LinkedHashMap<String, Object>>) redisUtils.get(REGULATOR_UNIT_TREE);
if (!ValidationUtil.isEmpty(supervisionTree)) {
List<LinkedHashMap<String, Object>> supervisionTree2List = tree2List(supervisionTree);
redisUtils.set(REGULATOR_UNIT_LIST, supervisionTree2List);
return supervisionTree2List;
}
}
return result;
return supervisionList;
}
@Override
public Page<TzsTwoStaffingCompanyDto> getCompanyList(String orgCode, TzsTwoStaffingCompanyDto companyDto, Page<TzsTwoStaffingCompanyDto> page) {
Page<TzsTwoStaffingCompanyDto> companyList = tzsTwoStaffingMapper.getCompanyList(page, companyDto, orgCode);
companyList.getRecords().stream().map(item -> {
if (item.getUnitType().contains("使用单位")) {
item.setCompleteNormal(Integer.valueOf(item.getUseDone()) > 1 ? "是" : "否");
}
if (item.getUnitType().contains("充装单位")
|| item.getUnitType().contains("安装改造维修单位")
|| item.getUnitType().contains("制造单位")
|| item.getUnitType().contains("设计单位")) {
item.setCompleteNormal(Integer.valueOf(item.getProductDone()) > 1 ? "是" : "否");
}
if (item.getUnitType().contains("使用单位") && (item.getUnitType().contains("充装单位")
|| item.getUnitType().contains("安装改造维修单位")
|| item.getUnitType().contains("制造单位")
|| item.getUnitType().contains("设计单位"))) {
item.setCompleteNormal(Integer.valueOf(item.getAllDone()) > 1 ? "是" : "否");
}
return item;
});
return companyList;
}
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;
}
}
\ No newline at end of file
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