diff --git a/src/main/java/com/zhgd/xmgl/modules/xz/controller/SafetyInspectionStandardBigScreenController.java b/src/main/java/com/zhgd/xmgl/modules/xz/controller/SafetyInspectionStandardBigScreenController.java new file mode 100644 index 000000000..8a8ab6927 --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/xz/controller/SafetyInspectionStandardBigScreenController.java @@ -0,0 +1,320 @@ +package com.zhgd.xmgl.modules.xz.controller; + +import cn.hutool.core.date.DateUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.google.common.collect.Lists; +import com.zhgd.jeecg.common.api.vo.Result; +import com.zhgd.jeecg.common.mybatis.EntityMap; +import com.zhgd.xmgl.modules.worker.service.IEnterpriseInfoService; +import com.zhgd.xmgl.modules.xz.entity.vo.SafetyDetailTotalScoreVo; +import com.zhgd.xmgl.modules.xz.entity.vo.SafetyScoreDetail; +import com.zhgd.xmgl.modules.xz.entity.vo.SafetyTypeScore; +import com.zhgd.xmgl.modules.xz.entity.vo.SafetyTypeScoreVo; +import com.zhgd.xmgl.modules.xz.security.entity.XzSecurityDangerItemRecord; +import com.zhgd.xmgl.modules.xz.security.entity.XzSecurityDangerTypeRecord; +import com.zhgd.xmgl.modules.xz.security.entity.vo.FiveScore; +import com.zhgd.xmgl.modules.xz.security.entity.vo.FiveScoresVo; +import com.zhgd.xmgl.modules.xz.security.entity.vo.XzSecurityQualityInspectionRecordVo; +import com.zhgd.xmgl.modules.xz.security.enums.TenSafetyTypeEnum; +import com.zhgd.xmgl.modules.xz.security.service.IXzSecurityDangerItemRecordService; +import com.zhgd.xmgl.modules.xz.security.service.IXzSecurityDangerTypeRecordService; +import com.zhgd.xmgl.modules.xz.security.service.IXzSecurityQualityInspectionRecordService; +import com.zhgd.xmgl.util.MapBuilder; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections.MapUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import springfox.documentation.annotations.ApiIgnore; + +import java.math.BigDecimal; +import java.util.*; +import java.util.stream.Collectors; + +@RestController +@RequestMapping("/xmgl/safetyInspectionStandardBigScreen") +@Slf4j +@Api(tags = "建筑施工安全检查标准大屏记录") +public class SafetyInspectionStandardBigScreenController { + + @Lazy + @Autowired + IXzSecurityDangerTypeRecordService xzSecurityDangerTypeRecordService; + @Lazy + @Autowired + IXzSecurityDangerItemRecordService xzSecurityDangerItemRecordService; + @Lazy + @Autowired + IXzSecurityQualityInspectionRecordService xzSecurityQualityInspectionRecordService; + @Lazy + @Autowired + IEnterpriseInfoService enterpriseInfoService; + + @ApiOperation(value = "获取月度安全综合评分(五种)", notes = "获取月度安全综合评分(五种)", httpMethod = "POST") + @ApiImplicitParams({ + @ApiImplicitParam(name = "projectSn", value = "项目sn", paramType = "body", required = true, dataType = "String"), + }) + @PostMapping(value = "/getFiveScores") + public Result getFiveScores(@ApiIgnore @RequestBody Map param) { + FiveScoresVo vo = new FiveScoresVo(); + String projectSn = MapUtils.getString(param, "projectSn"); + SafetyTypeScoreVo thisMonthScoreVo = this.getScores(new MapBuilder().put("projectSn", projectSn).put("month", DateUtil.format(new Date(), "yyyy-MM")).build()).getResult(); + SafetyTypeScoreVo lastMonthScoreVo = this.getScores(new MapBuilder().put("projectSn", projectSn).put("month", DateUtil.format(DateUtil.offsetMonth(new Date(), -1), "yyyy-MM")).build()).getResult(); + List safetyTypeScores = thisMonthScoreVo.getSafetyTypeScores(); + FiveScore fiveScore = new FiveScore(); + Map> fiveTypeScoreMap = new HashMap<>(16); + //5种:1安全管理、2文明施工、3施工支具【脚手架、模版支架】、4工程器械【物料提升机与施工升降机、塔式起重吊装、施工用具】、5危险作业【基坑工程、高处作业、施工用电】 + for (SafetyTypeScore safetyTypeScore : safetyTypeScores) { + int fiveType; + if (Objects.equals(safetyTypeScore.getTenType(), 1)) { + fiveType = 1; + } else if (Objects.equals(safetyTypeScore.getTenType(), 2)) { + fiveType = 2; + } else if (Objects.equals(safetyTypeScore.getTenType(), 3) + || Objects.equals(safetyTypeScore.getTenType(), 6) + ) { + fiveType = 3; + } else if (Objects.equals(safetyTypeScore.getTenType(), 8) + || Objects.equals(safetyTypeScore.getTenType(), 9) + || Objects.equals(safetyTypeScore.getTenType(), 10) + ) { + fiveType = 4; + } else { + fiveType = 5; + } + List typeScores = fiveTypeScoreMap.get(fiveType); + if (typeScores == null) { + typeScores = new ArrayList<>(); + } + typeScores.add(safetyTypeScore); + fiveTypeScoreMap.putIfAbsent(fiveType, typeScores); + } + for (Map.Entry> entry : fiveTypeScoreMap.entrySet()) { + List list = entry.getValue(); + BigDecimal score = list.stream().map(SafetyTypeScore::getScore).reduce(BigDecimal.ZERO, BigDecimal::add).divide(BigDecimal.valueOf(list.size()),2,BigDecimal.ROUND_HALF_UP); + switch (entry.getKey()) { + case 1: + fiveScore.setAqgl(score); + break; + case 2: + fiveScore.setWmsg(score); + break; + case 3: + fiveScore.setSgzj(score); + break; + case 4: + fiveScore.setGcqx(score); + break; + default: + fiveScore.setWxzy(score); + } + } + vo.setThisMonthScores(fiveScore); + vo.setMonthScore(thisMonthScoreVo.getScore()); + vo.setLastMonthScore(lastMonthScoreVo.getScore()); + vo.setDifferScoreRate(vo.getLastMonthScore().compareTo(BigDecimal.ZERO) == 0 ? new BigDecimal("0") : vo.getMonthScore().subtract(vo.getLastMonthScore()).divide(vo.getLastMonthScore(),4,BigDecimal.ROUND_HALF_UP).subtract(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP)); + return Result.success(vo); + } + + @ApiOperation(value = "获取月度安全综合评分(十种)", notes = "获取月度安全综合评分(十种)", httpMethod = "POST") + @ApiImplicitParams({ + @ApiImplicitParam(name = "projectSn", value = "项目sn", paramType = "body", required = true, dataType = "String"), + @ApiImplicitParam(name = "month", value = "月份(如2024-07)", paramType = "body", required = true, dataType = "String"), + }) + @PostMapping(value = "/getScores") + public Result getScores(@ApiIgnore @RequestBody Map param) { + SafetyTypeScoreVo vo = new SafetyTypeScoreVo(); + String month = MapUtils.getString(param, "month"); + String projectSn = MapUtils.getString(param, "projectSn"); + List topCodes = Arrays.asList("01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19"); + ArrayList safetyTypeScores = Lists.newArrayList(); + List allTopTypes = xzSecurityDangerTypeRecordService.getTopTypes(topCodes); + List allTypeRecords = xzSecurityDangerTypeRecordService.list(); + List allItemRecords = xzSecurityDangerItemRecordService.list(); + List inspectionRecords = xzSecurityQualityInspectionRecordService.selectQualityInspectionRecordPage(new MapBuilder().put("startMonth", month).put("status", 60).put("projectSn", projectSn).build()).getPage().getRecords(); + List enterpriseInfoList = enterpriseInfoService.getEnterpriseInfoList(new MapBuilder().put("projectSn", projectSn).build()); + Map> tenTopTypes = allTopTypes.stream().collect(Collectors.groupingBy(XzSecurityDangerTypeRecord::getTenType)); + for (Map.Entry> tenEntry : tenTopTypes.entrySet()) { + Integer tenType = tenEntry.getKey(); + List topTenTypes = tenEntry.getValue(); + ArrayList oneOfTenScores = new ArrayList<>(); + for (XzSecurityDangerTypeRecord topType : topTenTypes) { + //分项计算 + SafetyDetailTotalScoreVo totalScore = new SafetyDetailTotalScoreVo(); + List typeRecords = allTypeRecords.stream().filter(x -> Objects.equals(x.getParentId(), topType.getId())).collect(Collectors.toList()); + List typeIds = typeRecords.stream().map(XzSecurityDangerTypeRecord::getId).collect(Collectors.toList()); + List itemRecords = allItemRecords.stream().filter(x -> typeIds.contains(x.getDangerTypeId())).collect(Collectors.toList()); + List safetyScoreDetails = new ArrayList<>(); + for (XzSecurityDangerTypeRecord typeRecord : typeRecords) { + Long typeId = typeRecord.getId(); + List items = itemRecords.stream().filter(r -> Objects.equals(r.getDangerTypeId(), typeId)).collect(Collectors.toList()); + Set itemIdSet = items.stream().map(XzSecurityDangerItemRecord::getId).collect(Collectors.toSet()); + List records = inspectionRecords.stream().filter(r -> itemIdSet.contains(r.getDangerItemId())).collect(Collectors.toList()); + SafetyScoreDetail safetyScoreDetail = new SafetyScoreDetail(); + safetyScoreDetail.setName(typeRecord.getDangerName()); + safetyScoreDetail.setProjectType(typeRecord.getProjectType()); + safetyScoreDetail.setShouldScore(BigDecimal.valueOf(10)); + BigDecimal reduceScore = records.stream().filter(v -> v.getDeductScore() != null).map(v -> v.getDeductScore()).reduce(BigDecimal.ZERO, BigDecimal::add); + //扣减分值总和不得超过该检查项目的应得分值 + reduceScore = reduceScore.compareTo(safetyScoreDetail.getShouldScore()) > 0 ? safetyScoreDetail.getShouldScore() : reduceScore; + safetyScoreDetail.setDeductScore(reduceScore.setScale(2, BigDecimal.ROUND_HALF_UP)); + safetyScoreDetail.setScore(safetyScoreDetail.getShouldScore().subtract(reduceScore).setScale(2, BigDecimal.ROUND_HALF_UP)); + safetyScoreDetail.setDeductReasonList(records); + safetyScoreDetails.add(safetyScoreDetail); + } + BigDecimal tScore; + BigDecimal mustReduce = safetyScoreDetails.stream().filter(s -> Objects.equals(s.getProjectType(), 1)).map(s -> s.getScore()).reduce(BigDecimal.ZERO, BigDecimal::add); + if (safetyScoreDetails.stream().anyMatch(s -> s.getShouldScore().equals(new BigDecimal(0))) + || mustReduce.compareTo(new BigDecimal(40)) < 0) { + //保证项目中有一项未得分或保证项目小计得分不足40分,此分项检查评分表不应得分 + tScore = new BigDecimal(0); + } else { + tScore = safetyScoreDetails.stream().map(SafetyScoreDetail::getScore).reduce(BigDecimal.ZERO, BigDecimal::add); + } + totalScore.setScore(tScore); + oneOfTenScores.add(tScore); + } + BigDecimal score = oneOfTenScores.stream().reduce(BigDecimal.ZERO, BigDecimal::add); + score = score.divide(new BigDecimal(oneOfTenScores.size()),4,BigDecimal.ROUND_HALF_UP); + SafetyTypeScore safetyTypeScore = new SafetyTypeScore(); + safetyTypeScore.setName(TenSafetyTypeEnum.getEnumByCode(tenType).getDesc()); + safetyTypeScore.setWeight(TenSafetyTypeEnum.getEnumByCode(tenType).getWeight()); + safetyTypeScore.setScore(score.divide(new BigDecimal("100"),4,BigDecimal.ROUND_HALF_UP).multiply(safetyTypeScore.getWeight()).setScale(2, BigDecimal.ROUND_HALF_UP)); + safetyTypeScore.setDeductScore(safetyTypeScore.getWeight().subtract(safetyTypeScore.getScore()).setScale(2, BigDecimal.ROUND_HALF_UP)); + safetyTypeScore.setTenType(tenType); + safetyTypeScores.add(safetyTypeScore); + } + BigDecimal score = safetyTypeScores.stream().map(SafetyTypeScore::getScore).reduce(BigDecimal.ZERO, BigDecimal::add); + vo.setScore(score); + vo.setSafetyTypeScores(safetyTypeScores); + return Result.success(vo); + } + + @ApiOperation(value = "获取分项检查评分表列表", notes = "获取分项检查评分表列表", httpMethod = "POST") + @ApiImplicitParams({ + @ApiImplicitParam(name = "projectSn", value = "项目sn", paramType = "body", required = true, dataType = "String"), + @ApiImplicitParam(name = "tenType", value = "10大类型【1:安全管理;2:文明施工;3:脚手架(扣件式钢管脚手架/门式钢管脚手架/碗扣式钢管脚手架/承插型盘扣式钢管脚手架/满堂式脚手架/悬挑式脚手架/附着式升降脚手架);4:高处作业(高处作业/高处作业吊篮);5:基坑工程;6:模板支架;7:施工用电;8:物料提升机和施工升降机(物料提升机和施工升降机);9:塔式起重机和起重吊装(塔式起重机和起重吊装);10:施工机具;】", paramType = "body", required = true, dataType = "String"), + }) + @PostMapping(value = "/getTypeRecordList") + public Result> getTypeRecordList(@ApiIgnore @RequestBody Map param) { + return Result.success(xzSecurityDangerTypeRecordService.getTypeRecordList(param)); + } + + @ApiOperation(value = "获取分项检查评分表详情", notes = "获取分项检查评分表详情", httpMethod = "POST") + @ApiImplicitParams({ + @ApiImplicitParam(name = "projectSn", value = "项目sn", paramType = "body", required = true, dataType = "String"), + @ApiImplicitParam(name = "month", value = "月份(如2024-07)", paramType = "body", required = true, dataType = "String"), + @ApiImplicitParam(name = "code", value = "编码(包含自定义编码)", paramType = "body", required = true, dataType = "String"), + }) + @PostMapping(value = "/getScoresDetails") + public Result getScoresDetails(@ApiIgnore @RequestBody Map param) { + SafetyDetailTotalScoreVo totalScore = new SafetyDetailTotalScoreVo(); + String month = MapUtils.getString(param, "month"); + String code = MapUtils.getString(param, "code"); + String projectSn = MapUtils.getString(param, "projectSn"); + XzSecurityDangerTypeRecord topType = xzSecurityDangerTypeRecordService.getOne(new LambdaQueryWrapper().eq(XzSecurityDangerTypeRecord::getCode, code)); + List typeRecords = xzSecurityDangerTypeRecordService.list(new LambdaQueryWrapper().eq(XzSecurityDangerTypeRecord::getParentId, topType.getId())); + List typeIds = typeRecords.stream().map(XzSecurityDangerTypeRecord::getId).collect(Collectors.toList()); + List itemRecords = xzSecurityDangerItemRecordService.list(new LambdaQueryWrapper().in(XzSecurityDangerItemRecord::getDangerTypeId, typeIds)); + List inspectionRecords = xzSecurityQualityInspectionRecordService.selectQualityInspectionRecordPage(new MapBuilder().put("startMonth", month).put("status", 60).put("projectSn", projectSn).build()).getPage().getRecords(); + List enterpriseInfoList = enterpriseInfoService.getEnterpriseInfoList(new MapBuilder().put("projectSn", projectSn).build()); + List safetyScoreDetails = new ArrayList<>(); + for (XzSecurityDangerTypeRecord typeRecord : typeRecords) { + Long typeId = typeRecord.getId(); + List items = itemRecords.stream().filter(r -> Objects.equals(r.getDangerTypeId(), typeId)).collect(Collectors.toList()); + Set itemIdSet = items.stream().map(XzSecurityDangerItemRecord::getId).collect(Collectors.toSet()); + List records = inspectionRecords.stream().filter(r -> itemIdSet.contains(r.getDangerItemId())).collect(Collectors.toList()); + //设置总公司 + for (XzSecurityQualityInspectionRecordVo record : records) { + String mainEnterpriseName; + Optional optional = enterpriseInfoList.stream().filter(e -> Objects.equals(MapUtils.getLong(e, "id"), record.getEnterpriseId())).findFirst(); + if (optional.isPresent()) { + EntityMap entityMap = optional.get(); + String projectEnterpriseId = MapUtils.getString(entityMap, "projectEnterpriseId"); + String ancestors = MapUtils.getString(entityMap, "ancestors"); + if (Objects.equals(projectEnterpriseId, "0")) { + mainEnterpriseName = record.getEnterpriseName(); + } else { + optional = enterpriseInfoList.stream().filter(e -> MapUtils.getString(e, "projectEnterpriseId").equals(ancestors.split(",")[1])).findFirst(); + if (optional.isPresent()) { + mainEnterpriseName = MapUtils.getString(optional.get(), "enterpriseName"); + } else { + mainEnterpriseName = record.getEnterpriseName(); + } + } + } else { + mainEnterpriseName = record.getEnterpriseName(); + } + record.setMainEnterpriseName(mainEnterpriseName); + } + SafetyScoreDetail safetyScoreDetail = new SafetyScoreDetail(); + safetyScoreDetail.setName(typeRecord.getDangerName()); + safetyScoreDetail.setProjectType(typeRecord.getProjectType()); + safetyScoreDetail.setShouldScore(getShouldScore(code)); + BigDecimal reduceScore = records.stream().filter(v -> v.getDeductScore() != null).map(v -> v.getDeductScore()).reduce(BigDecimal.ZERO, BigDecimal::add); + //扣减分值总和不得超过该检查项目的应得分值 + reduceScore = reduceScore.compareTo(safetyScoreDetail.getShouldScore()) > 0 ? safetyScoreDetail.getShouldScore() : reduceScore; + safetyScoreDetail.setDeductScore(reduceScore.setScale(2, BigDecimal.ROUND_HALF_UP)); + safetyScoreDetail.setScore(safetyScoreDetail.getShouldScore().subtract(reduceScore).setScale(2, BigDecimal.ROUND_HALF_UP)); + safetyScoreDetail.setDeductReasonList(records); + safetyScoreDetails.add(safetyScoreDetail); + } + BigDecimal tScore; + BigDecimal mustReduce = safetyScoreDetails.stream().filter(s -> Objects.equals(s.getProjectType(), 1)).map(s -> s.getScore()).reduce(BigDecimal.ZERO, BigDecimal::add); + if (safetyScoreDetails.stream().anyMatch(s -> s.getShouldScore().equals(new BigDecimal(0))) + || mustReduce.compareTo(new BigDecimal(40)) < 0) { + //保证项目中有一项未得分或保证项目小计得分不足40分,此分项检查评分表不应得分 + tScore = new BigDecimal(0); + } else { + tScore = safetyScoreDetails.stream().map(SafetyScoreDetail::getScore).reduce(BigDecimal.ZERO, BigDecimal::add); + } + totalScore.setScore(tScore); + totalScore.setSafetyScoreDetails(safetyScoreDetails); + return Result.success(totalScore); + } + + private BigDecimal getShouldScore(String code) { + BigDecimal b; + switch (code) { + case "03.10": + case "03.11": + case "15.08": + case "15.10": + b = new BigDecimal(5); + break; + case "19.03": + case "19.07": + case "19.08": + case "19.10": + b = new BigDecimal(8); + break; + case "14.02": + case "14.04": + b = new BigDecimal(20); + break; + case "14.05": + case "14.06": + case "15.01": + case "15.02": + b = new BigDecimal(15); + break; + case "19.09": + b = new BigDecimal(6); + break; + case "19.11": + b = new BigDecimal(12); + break; + default: + b = new BigDecimal(10); + } + return b; + } + +} diff --git a/src/main/java/com/zhgd/xmgl/modules/xz/entity/vo/SafetyDetailTotalScoreVo.java b/src/main/java/com/zhgd/xmgl/modules/xz/entity/vo/SafetyDetailTotalScoreVo.java new file mode 100644 index 000000000..1c5001b49 --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/xz/entity/vo/SafetyDetailTotalScoreVo.java @@ -0,0 +1,15 @@ +package com.zhgd.xmgl.modules.xz.entity.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.List; + +@Data +public +class SafetyDetailTotalScoreVo { + @ApiModelProperty(value = "总分数") + private BigDecimal score; + private List safetyScoreDetails; +} diff --git a/src/main/java/com/zhgd/xmgl/modules/xz/entity/vo/SafetyScoreDetail.java b/src/main/java/com/zhgd/xmgl/modules/xz/entity/vo/SafetyScoreDetail.java new file mode 100644 index 000000000..153813bac --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/xz/entity/vo/SafetyScoreDetail.java @@ -0,0 +1,28 @@ +package com.zhgd.xmgl.modules.xz.entity.vo; + +import com.zhgd.xmgl.modules.xz.security.entity.vo.XzSecurityQualityInspectionRecordVo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.List; + +@Data +public +class SafetyScoreDetail { + @ApiModelProperty(value = "名称") + private String name; + /** + * 1保证项目2一般项目 + */ + @ApiModelProperty(value = "1保证项目2一般项目") + private Integer projectType; + @ApiModelProperty(value = "应得分数") + private BigDecimal shouldScore; + @ApiModelProperty(value = "扣除分数") + private BigDecimal deductScore; + @ApiModelProperty(value = "实得分数") + private BigDecimal score; + @ApiModelProperty(value = "扣分原因") + private List deductReasonList; +} diff --git a/src/main/java/com/zhgd/xmgl/modules/xz/entity/vo/SafetyTypeScore.java b/src/main/java/com/zhgd/xmgl/modules/xz/entity/vo/SafetyTypeScore.java new file mode 100644 index 000000000..f61ec136a --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/xz/entity/vo/SafetyTypeScore.java @@ -0,0 +1,21 @@ +package com.zhgd.xmgl.modules.xz.entity.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public +class SafetyTypeScore { + @ApiModelProperty(value = "名称") + private String name; + @ApiModelProperty(value = "10大类型【1:安全管理;2:文明施工;3:脚手架(扣件式钢管脚手架/门式钢管脚手架/碗扣式钢管脚手架/承插型盘扣式钢管脚手架/满堂式脚手架/悬挑式脚手架/附着式升降脚手架);4:高处作业(高处作业/高处作业吊篮);5:基坑工程;6:模板支架;7:施工用电;8:物料提升机和施工升降机(物料提升机和施工升降机);9:塔式起重机和起重吊装(塔式起重机和起重吊装);10:施工机具;】") + private Integer tenType; + @ApiModelProperty(value = "单模块权重") + private BigDecimal weight; + @ApiModelProperty(value = "单项扣分") + private BigDecimal deductScore; + @ApiModelProperty(value = "单项得分") + private BigDecimal score; +} diff --git a/src/main/java/com/zhgd/xmgl/modules/xz/entity/vo/SafetyTypeScoreVo.java b/src/main/java/com/zhgd/xmgl/modules/xz/entity/vo/SafetyTypeScoreVo.java new file mode 100644 index 000000000..673cd9f9b --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/xz/entity/vo/SafetyTypeScoreVo.java @@ -0,0 +1,15 @@ +package com.zhgd.xmgl.modules.xz.entity.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.List; + +@Data +public +class SafetyTypeScoreVo { + @ApiModelProperty(value = "总分数") + private BigDecimal score; + private List safetyTypeScores; +} diff --git a/src/main/java/com/zhgd/xmgl/modules/xz/security/controller/XzSecurityDangerTypeRecordController.java b/src/main/java/com/zhgd/xmgl/modules/xz/security/controller/XzSecurityDangerTypeRecordController.java index e0c530cfd..d84631d39 100644 --- a/src/main/java/com/zhgd/xmgl/modules/xz/security/controller/XzSecurityDangerTypeRecordController.java +++ b/src/main/java/com/zhgd/xmgl/modules/xz/security/controller/XzSecurityDangerTypeRecordController.java @@ -177,7 +177,7 @@ public class XzSecurityDangerTypeRecordController { response.setCharacterEncoding("UTF-8"); response.setContentType("application/vnd.ms-excel;charset=gb2312"); response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode("安全检查模板_导入模板.xlsx", "UTF-8")); - InputStream fis = new ClassPathResource("excel/安全检查模板_导入模板.xlsx").getInputStream(); + InputStream fis = new ClassPathResource("excel/安全检查模板_导入模板ag.xlsx").getInputStream(); IOUtils.copy(fis, out); out.flush(); out.close(); diff --git a/src/main/java/com/zhgd/xmgl/modules/xz/security/entity/XzSecurityDangerItemRecord.java b/src/main/java/com/zhgd/xmgl/modules/xz/security/entity/XzSecurityDangerItemRecord.java index c68a1e5aa..0746cffd7 100644 --- a/src/main/java/com/zhgd/xmgl/modules/xz/security/entity/XzSecurityDangerItemRecord.java +++ b/src/main/java/com/zhgd/xmgl/modules/xz/security/entity/XzSecurityDangerItemRecord.java @@ -92,4 +92,10 @@ public class XzSecurityDangerItemRecord implements Serializable { private String itemCode; @ApiModelProperty(value = "扣分数") private Double deductScore; + /** + * 1保证项目2一般项目 + */ + @Excel(name = "1保证项目2一般项目", width = 15) + @ApiModelProperty(value = "1保证项目2一般项目") + private Integer projectType; } diff --git a/src/main/java/com/zhgd/xmgl/modules/xz/security/entity/XzSecurityDangerTypeRecord.java b/src/main/java/com/zhgd/xmgl/modules/xz/security/entity/XzSecurityDangerTypeRecord.java index ca47007af..cc03e1e4a 100644 --- a/src/main/java/com/zhgd/xmgl/modules/xz/security/entity/XzSecurityDangerTypeRecord.java +++ b/src/main/java/com/zhgd/xmgl/modules/xz/security/entity/XzSecurityDangerTypeRecord.java @@ -3,6 +3,7 @@ package com.zhgd.xmgl.modules.xz.security.entity; import java.io.Serializable; import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; @@ -91,4 +92,17 @@ public class XzSecurityDangerTypeRecord implements Serializable { @Excel(name = "总企业sn", width = 15) @ApiModelProperty(value = "总企业sn") private String sn; + /** + * 1保证项目2一般项目 + */ + @Excel(name = "1保证项目2一般项目", width = 15) + @ApiModelProperty(value = "1保证项目2一般项目") + private Integer projectType; + + @TableField(exist = false) + @ApiModelProperty(value = "10大类型【1:安全管理;2:文明施工;3:脚手架(扣件式钢管脚手架/门式钢管脚手架/碗扣式钢管脚手架/承插型盘扣式钢管脚手架/满堂式脚手架/悬挑式脚手架/附着式升降脚手架);4:高处作业(高处作业/高处作业吊篮);5:基坑工程;6:模板支架;7:施工用电;8:物料提升机和施工升降机(物料提升机和施工升降机);9:塔式起重机和起重吊装(塔式起重机和起重吊装);10:施工机具;】") + private Integer tenType; + @TableField(exist = false) + @ApiModelProperty(value = "5大类型") + private Integer fiveType; } diff --git a/src/main/java/com/zhgd/xmgl/modules/xz/security/entity/vo/FiveScore.java b/src/main/java/com/zhgd/xmgl/modules/xz/security/entity/vo/FiveScore.java new file mode 100644 index 000000000..8cf30d874 --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/xz/security/entity/vo/FiveScore.java @@ -0,0 +1,15 @@ +package com.zhgd.xmgl.modules.xz.security.entity.vo; + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public +class FiveScore { + private BigDecimal aqgl; + private BigDecimal wmsg; + private BigDecimal sgzj; + private BigDecimal gcqx; + private BigDecimal wxzy; +} diff --git a/src/main/java/com/zhgd/xmgl/modules/xz/security/entity/vo/FiveScoresVo.java b/src/main/java/com/zhgd/xmgl/modules/xz/security/entity/vo/FiveScoresVo.java new file mode 100644 index 000000000..b496fea40 --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/xz/security/entity/vo/FiveScoresVo.java @@ -0,0 +1,14 @@ +package com.zhgd.xmgl.modules.xz.security.entity.vo; + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public +class FiveScoresVo { + private BigDecimal monthScore; + private BigDecimal lastMonthScore; + private BigDecimal differScoreRate; + private FiveScore thisMonthScores; +} diff --git a/src/main/java/com/zhgd/xmgl/modules/xz/security/entity/vo/XzSecurityQualityInspectionRecordVo.java b/src/main/java/com/zhgd/xmgl/modules/xz/security/entity/vo/XzSecurityQualityInspectionRecordVo.java index d1618ece6..7e638fb97 100644 --- a/src/main/java/com/zhgd/xmgl/modules/xz/security/entity/vo/XzSecurityQualityInspectionRecordVo.java +++ b/src/main/java/com/zhgd/xmgl/modules/xz/security/entity/vo/XzSecurityQualityInspectionRecordVo.java @@ -5,6 +5,8 @@ import com.zhgd.xmgl.modules.xz.security.entity.XzSecurityQualityInspectionRecor import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.math.BigDecimal; + @Data public class XzSecurityQualityInspectionRecordVo extends XzSecurityQualityInspectionRecord { private String inspectManName; @@ -28,11 +30,13 @@ public class XzSecurityQualityInspectionRecordVo extends XzSecurityQualityInspec private String dangerItemName; @ApiModelProperty(value = "危大工程名称") private java.lang.String engineeringName; - @TableField(exist = false) @ApiModelProperty(value = "作业申请单位名称") private String jobApplicationUnitName; - @TableField(exist = false) @ApiModelProperty(value = "作业票编号") private String workTicketCode; + @ApiModelProperty(value = "扣分数") + private BigDecimal deductScore; + @ApiModelProperty(value = "总企业名称") + private String mainEnterpriseName; } diff --git a/src/main/java/com/zhgd/xmgl/modules/xz/security/enums/FiveSafetyTypeEnum.java b/src/main/java/com/zhgd/xmgl/modules/xz/security/enums/FiveSafetyTypeEnum.java new file mode 100644 index 000000000..91738794a --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/xz/security/enums/FiveSafetyTypeEnum.java @@ -0,0 +1,25 @@ +package com.zhgd.xmgl.modules.xz.security.enums; + +import lombok.Getter; +import lombok.AllArgsConstructor; +@Getter +@AllArgsConstructor +public enum FiveSafetyTypeEnum { + ENUM0(1, "安全管理"), + ENUM1(2, "文明施工"), + ENUM2(3, "施工支具【脚手架、模版支架】"), + ENUM3(4, "工程器械【物料提升机与施工升降机、塔式起重吊装、施工用具】"), + ENUM4(5, "危险作业【基坑工程、高处作业、施工用电】"); + + private final Integer code; + private final String desc; + + public static FiveSafetyTypeEnum getEnumByCode(Integer code) { + for (FiveSafetyTypeEnum e : FiveSafetyTypeEnum.values()) { + if (e.code.equals(code)) { + return e; + } + } + return null; + } +} diff --git a/src/main/java/com/zhgd/xmgl/modules/xz/security/enums/TenSafetyTypeEnum.java b/src/main/java/com/zhgd/xmgl/modules/xz/security/enums/TenSafetyTypeEnum.java new file mode 100644 index 000000000..e05dae3e7 --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/xz/security/enums/TenSafetyTypeEnum.java @@ -0,0 +1,34 @@ +package com.zhgd.xmgl.modules.xz.security.enums; + +import lombok.Getter; +import lombok.AllArgsConstructor; + +import java.math.BigDecimal; + +@Getter +@AllArgsConstructor +public enum TenSafetyTypeEnum { + ENUM0(1, new BigDecimal("10"),"安全管理"), + ENUM1(2, new BigDecimal("15"),"文明施工"), + ENUM2(3, new BigDecimal("10"),"脚手架(扣件式钢管脚手架/门式钢管脚手架/碗扣式钢管脚手架/承插型盘扣式钢管脚手架/满堂式脚手架/悬挑式脚手架/附着式升降脚手架)"), + ENUM3(4, new BigDecimal("10"),"高处作业(高处作业/高处作业吊篮)"), + ENUM4(5, new BigDecimal("10"),"基坑工程"), + ENUM5(6, new BigDecimal("10"),"模板支架"), + ENUM6(7, new BigDecimal("10"),"施工用电"), + ENUM7(8, new BigDecimal("10"),"物料提升机和施工升降机(物料提升机和施工升降机)"), + ENUM8(9, new BigDecimal("10"),"塔式起重机和起重吊装(塔式起重机和起重吊装)"), + ENUM9(10,new BigDecimal("5"), "施工机具"); + + private final Integer code; + private final BigDecimal weight; + private final String desc; + + public static TenSafetyTypeEnum getEnumByCode(Integer code) { + for (TenSafetyTypeEnum e : TenSafetyTypeEnum.values()) { + if (e.code.equals(code)) { + return e; + } + } + return null; + } +} diff --git a/src/main/java/com/zhgd/xmgl/modules/xz/security/mapper/XzSecurityDangerTypeRecordMapper.java b/src/main/java/com/zhgd/xmgl/modules/xz/security/mapper/XzSecurityDangerTypeRecordMapper.java index 517d22009..66f07deb1 100644 --- a/src/main/java/com/zhgd/xmgl/modules/xz/security/mapper/XzSecurityDangerTypeRecordMapper.java +++ b/src/main/java/com/zhgd/xmgl/modules/xz/security/mapper/XzSecurityDangerTypeRecordMapper.java @@ -65,4 +65,20 @@ public interface XzSecurityDangerTypeRecordMapper extends BaseMapper getTopTypes(@Param("list") List topCodes); + + /** + * 获取分项检查评分表列表 + * @param param + * @return + */ + List getTypeRecordList(Map param); + } diff --git a/src/main/java/com/zhgd/xmgl/modules/xz/security/mapper/xml/XzSecurityDangerTypeRecordMapper.xml b/src/main/java/com/zhgd/xmgl/modules/xz/security/mapper/xml/XzSecurityDangerTypeRecordMapper.xml index dd727ca09..c687ab639 100644 --- a/src/main/java/com/zhgd/xmgl/modules/xz/security/mapper/xml/XzSecurityDangerTypeRecordMapper.xml +++ b/src/main/java/com/zhgd/xmgl/modules/xz/security/mapper/xml/XzSecurityDangerTypeRecordMapper.xml @@ -93,4 +93,76 @@ WHERE full_name LIKE N'${oldFullName}%' and sn = #{sn}; + + + + diff --git a/src/main/java/com/zhgd/xmgl/modules/xz/security/mapper/xml/XzSecurityQualityInspectionRecordMapper.xml b/src/main/java/com/zhgd/xmgl/modules/xz/security/mapper/xml/XzSecurityQualityInspectionRecordMapper.xml index 1102b4e6b..08a565484 100644 --- a/src/main/java/com/zhgd/xmgl/modules/xz/security/mapper/xml/XzSecurityQualityInspectionRecordMapper.xml +++ b/src/main/java/com/zhgd/xmgl/modules/xz/security/mapper/xml/XzSecurityQualityInspectionRecordMapper.xml @@ -254,10 +254,12 @@ ORDER BY create_time desc LIMIT 1) > t.change_limit_time ELSE t.change_limit_time now() END), 0) overTime, - der.engineering_name + der.engineering_name, + ic.deduct_score from xz_security_quality_inspection_record t LEFT JOIN enterprise_info b ON t.enterprise_sn = b.enterprise_sn LEFT JOIN xz_security_danger_type_record c ON t.danger_type_id = c.id + LEFT JOIN xz_security_danger_item_record ic ON t.danger_item_id = ic.id LEFT JOIN system_user d ON t.change_id = d.user_id LEFT JOIN system_user e ON t.review_id = e.user_id LEFT JOIN system_user f ON t.verify_man_id = f.user_id @@ -271,6 +273,9 @@ LEFT JOIN (SELECT quality_id,MAX(rectify_time) as rectify_time FROM xz_security_quality_rectify_record GROUP BY quality_id) r ON r.quality_id = t.id WHERE t.project_sn = #{param.projectSn} + + and t.inspect_time >= #{param.startMonth} + and t.status != 6 diff --git a/src/main/java/com/zhgd/xmgl/modules/xz/security/service/IXzSecurityDangerTypeRecordService.java b/src/main/java/com/zhgd/xmgl/modules/xz/security/service/IXzSecurityDangerTypeRecordService.java index 93030bb46..47dcecbda 100644 --- a/src/main/java/com/zhgd/xmgl/modules/xz/security/service/IXzSecurityDangerTypeRecordService.java +++ b/src/main/java/com/zhgd/xmgl/modules/xz/security/service/IXzSecurityDangerTypeRecordService.java @@ -69,4 +69,19 @@ public interface IXzSecurityDangerTypeRecordService extends IService getTopTypes(List topCodes); + + /** + * 获取分项检查评分表列表 + * @param param + * @return + */ + List getTypeRecordList(Map param); } diff --git a/src/main/java/com/zhgd/xmgl/modules/xz/security/service/impl/XzSecurityDangerTypeRecordServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/xz/security/service/impl/XzSecurityDangerTypeRecordServiceImpl.java index 20879696c..61eb29cbb 100644 --- a/src/main/java/com/zhgd/xmgl/modules/xz/security/service/impl/XzSecurityDangerTypeRecordServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/xz/security/service/impl/XzSecurityDangerTypeRecordServiceImpl.java @@ -202,6 +202,8 @@ public class XzSecurityDangerTypeRecordServiceImpl extends ServiceImpl getTopTypes(List topCodes) { + return baseMapper.getTopTypes(topCodes); + } + + @Override + public List getTypeRecordList(Map param) { + return baseMapper.getTypeRecordList(param); + } + private Integer getLevel(String level) { if (level == null) { return null; diff --git a/src/main/resources/excel/安全检查模板_导入模板ag.xlsx b/src/main/resources/excel/安全检查模板_导入模板ag.xlsx new file mode 100644 index 000000000..f27d8daf3 Binary files /dev/null and b/src/main/resources/excel/安全检查模板_导入模板ag.xlsx differ