进度计划,施工产值

This commit is contained in:
lcj
2025-10-12 14:16:05 +08:00
parent 51686c212e
commit 4dca396d11
35 changed files with 856 additions and 209 deletions

View File

@ -23,7 +23,7 @@ public class RecognizerTest {
@Test
void test() {
RecognizeVo recognize = recognizerManager.recognize("http://xny.yj-3d.com:7363/file/tif/20250625160218orthophoto.png", List.of(RecognizerTypeEnum.PHO));
RecognizeVo recognize = recognizerManager.recognize("http://xny.yj-3d.com:7363/file/tif/20250625160218orthophoto.png", List.of(RecognizerTypeEnum.SOLAR));
log.info("recognize: {}", recognize);
}
}

View File

@ -2,14 +2,11 @@ package org.dromara.bigscreen.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import jakarta.annotation.Resource;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import org.dromara.bigscreen.domain.dto.WurenjiQueryReq;
import org.dromara.bigscreen.domain.dto.Ys7DeviceUpdateReq;
import org.dromara.bigscreen.domain.vo.ProjectImageProgressVo;
import org.dromara.bigscreen.domain.vo.ProjectLandVo;
@ -22,12 +19,8 @@ import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.redis.utils.RedisUtils;
import org.dromara.common.web.core.BaseController;
import org.dromara.drone.service.IDroProjectDroneService;
import org.dromara.gps.domain.bo.GpsEquipmentBo;
import org.dromara.gps.domain.vo.GpsEquipmentSonVo;
import org.dromara.gps.service.IGpsEquipmentService;
import org.dromara.land.domain.BusLandBlock;
import org.dromara.land.domain.BusLandTransferLedger;
import org.dromara.land.domain.BusLandTransferLedgerSon;
@ -54,10 +47,8 @@ import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Consumer;
import java.util.stream.Collectors;
/**
@ -103,10 +94,10 @@ public class ProjectBigScreenController extends BaseController {
List<BusLandTransferLedger> levelList = busLandTransferLedgerService.list(Wrappers.lambdaQuery(BusLandTransferLedger.class)
.eq(BusLandTransferLedger::getProjectId, projectId));
if(CollectionUtil.isNotEmpty(levelList)){
if (CollectionUtil.isNotEmpty(levelList)) {
List<Long> list1 = levelList.stream().map(BusLandTransferLedger::getId).toList();
LambdaQueryWrapper<BusLandTransferLedgerSon> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.in(BusLandTransferLedgerSon::getParentId,list1);
lambdaQueryWrapper.in(BusLandTransferLedgerSon::getParentId, list1);
List<BusLandTransferLedgerSon> sonList = busLandTransferLedgerSonService.list(lambdaQueryWrapper);
Map<Long, BigDecimal> collect = sonList.stream().filter(vo -> "1".equals(vo.getTransferStatus()))
.collect(Collectors.toMap(BusLandTransferLedgerSon::getParentId, BusLandTransferLedgerSon::getAreaValue));
@ -283,7 +274,7 @@ public class ProjectBigScreenController extends BaseController {
*/
@SaCheckPermission("project:bigScreen:imageProgress")
@GetMapping("/imageProgress/{projectId}")
public R<ProjectImageProgressVo> getProjectImageProgress(@NotNull(message = "主键不能为空")
public R<List<ProjectImageProgressVo>> getProjectImageProgress(@NotNull(message = "主键不能为空")
@PathVariable Long projectId) {
return R.ok(projectBigScreenService.getProjectImageProgress(projectId));
}

View File

@ -16,39 +16,49 @@ public class ProjectImageProgressVo implements Serializable {
@Serial
private static final long serialVersionUID = 7963637133004484891L;
/**
* 类别名称
*/
private String progressName;
/**
* 进度百分比
*/
private BigDecimal progressTotal;
/**
* 场区百分比
*/
private BigDecimal areaPercentage;
// private BigDecimal areaPercentage;
/**
* 道路百分比
*/
private BigDecimal roadPercentage;
// private BigDecimal roadPercentage;
/**
* 集电线路百分比
*/
private BigDecimal collectorLinePercentage;
// private BigDecimal collectorLinePercentage;
/**
* 送出线路百分比
*/
private BigDecimal exportLinePercentage;
// private BigDecimal exportLinePercentage;
/**
* 升压站百分比
*/
private BigDecimal substationPercentage;
// private BigDecimal substationPercentage;
/**
* 箱变百分比
*/
private BigDecimal boxTransformerPercentage;
// private BigDecimal boxTransformerPercentage;
/**
* 总百分比
*/
private BigDecimal totalPercentage;
// private BigDecimal totalPercentage;
}

View File

@ -1,11 +1,10 @@
package org.dromara.bigscreen.service;
import jakarta.validation.constraints.NotNull;
import org.dromara.bigscreen.domain.vo.ProjectImageProgressVo;
import org.dromara.bigscreen.domain.vo.ProjectPeopleVo;
import org.dromara.bigscreen.domain.vo.ProjectSafetyInspectionVo;
import org.dromara.manager.weathermanager.vo.WeatherVo;
import org.dromara.gps.domain.bo.GpsEquipmentBo;
import org.dromara.manager.weathermanager.vo.WeatherVo;
import org.dromara.project.domain.vo.project.BusProjectSafetyDayVo;
import org.dromara.project.domain.vo.projectnews.BusProjectNewsVo;
@ -64,7 +63,7 @@ public interface ProjectBigScreenService {
* @param projectId 项目id
* @return 项目形象进度
*/
ProjectImageProgressVo getProjectImageProgress(Long projectId);
List<ProjectImageProgressVo> getProjectImageProgress(Long projectId);
/**
* 获取项目概括

View File

@ -4,7 +4,6 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import jakarta.annotation.Resource;
import org.dromara.bigscreen.domain.vo.ProjectImageProgressVo;
import org.dromara.bigscreen.domain.vo.ProjectPeopleVo;
@ -15,8 +14,6 @@ import org.dromara.common.core.constant.HttpStatus;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.redis.utils.RedisUtils;
import org.dromara.common.utils.BigDecimalUtil;
import org.dromara.common.websocket.dto.WebSocketMessageDto;
import org.dromara.common.websocket.utils.WebSocketUtils;
import org.dromara.contractor.domain.SubConstructionUser;
import org.dromara.contractor.service.ISubConstructionUserService;
import org.dromara.drone.service.IDroProjectDroneService;
@ -26,8 +23,8 @@ import org.dromara.gps.service.IGpsEquipmentService;
import org.dromara.manager.weathermanager.vo.WeatherVo;
import org.dromara.other.domain.OthYs7Device;
import org.dromara.other.service.IOthYs7DeviceService;
import org.dromara.progress.constant.PgsProgressCategoryConstant;
import org.dromara.progress.domain.PgsProgressCategory;
import org.dromara.progress.domain.enums.PgsProgressUnitTypeEnum;
import org.dromara.progress.service.IPgsProgressCategoryService;
import org.dromara.project.domain.BusProject;
import org.dromara.project.domain.BusProjectTeam;
@ -37,16 +34,12 @@ import org.dromara.project.domain.vo.projectnews.BusProjectNewsVo;
import org.dromara.project.service.*;
import org.dromara.safety.domain.HseRecognizeRecord;
import org.dromara.safety.service.IHseRecognizeRecordService;
import org.redisson.api.RTopic;
import org.redisson.api.RedissonClient;
import org.redisson.api.listener.MessageListener;
import org.springframework.beans.BeanUtils;
import org.springframework.context.annotation.Lazy;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
@ -241,9 +234,59 @@ public class ProjectBigScreenServiceImpl implements ProjectBigScreenService {
* @return 项目形象进度
*/
@Override
public ProjectImageProgressVo getProjectImageProgress(Long projectId) {
public List<ProjectImageProgressVo> getProjectImageProgress(Long projectId) {
checkProject(projectId);
ProjectImageProgressVo vo = new ProjectImageProgressVo();
// 获取当前项目的所有子项目
List<Long> projectIds = new ArrayList<>(projectService.lambdaQuery()
.select(BusProject::getId)
.eq(BusProject::getPId, projectId)
.list()
.stream()
.map(BusProject::getId)
.toList());
projectIds.add(projectId);
// 查询该子项目下的顶级进度类别父ID为0
List<PgsProgressCategory> list = progressCategoryService.lambdaQuery()
.in(PgsProgressCategory::getProjectId, projectIds)
.eq(PgsProgressCategory::getParentId, PgsProgressCategoryConstant.TOP_PARENT_ID)
.list();
// 如果没有查询到顶级进度类别,直接返回空集合
if (CollUtil.isEmpty(list)) {
return List.of();
}
List<ProjectImageProgressVo> topList = new ArrayList<>();
// 获取这些顶级类别的所有子节点
List<Long> ids = list.stream().map(PgsProgressCategory::getId).distinct().toList();
List<PgsProgressCategory> childrenNodes = progressCategoryService.getChildrenNodeByTopIds(ids);
if (CollUtil.isNotEmpty(list)) {
// 按名称分组(同名的放在一起)
Map<String, List<PgsProgressCategory>> subMap = list.stream()
.collect(Collectors.groupingBy(PgsProgressCategory::getName));
for (Map.Entry<String, List<PgsProgressCategory>> entry : subMap.entrySet()) {
ProjectImageProgressVo topVo = new ProjectImageProgressVo();
topVo.setProgressName(entry.getKey());
List<PgsProgressCategory> value = entry.getValue();
// 获取这些类别下的所有叶子节点
List<Long> topIds = value.stream().map(PgsProgressCategory::getId).distinct().toList();
List<PgsProgressCategory> leafNodesByTopIds = childrenNodes.stream()
.filter(node -> {
Set<Long> ancestorSet = Arrays.stream(node.getAncestors().split(","))
.map(Long::parseLong)
.collect(Collectors.toSet());
return topIds.stream().anyMatch(ancestorSet::contains);
}).toList();
// 如果有叶子节点,统计进度和状态;否则初始化为未完成
if (CollUtil.isNotEmpty(leafNodesByTopIds)) {
topVo.setProgressTotal(progressCategoryService.getCompletedPercentage(leafNodesByTopIds));
} else {
topVo.setProgressTotal(BigDecimal.ZERO);
}
// 加入结果集
topList.add(topVo);
}
}
return topList;
/* ProjectImageProgressVo vo = new ProjectImageProgressVo();
// 获取所有子项目列表
List<BusProject> subProjectList = projectService.lambdaQuery()
.eq(BusProject::getPId, projectId)
@ -368,7 +411,7 @@ public class ProjectBigScreenServiceImpl implements ProjectBigScreenService {
.add(vo.getBoxTransformerPercentage())
.divide(BigDecimal.valueOf(6), 2, RoundingMode.HALF_UP) // 保留两位小数
);
return vo;
return vo;*/
}
/**
@ -400,7 +443,7 @@ public class ProjectBigScreenServiceImpl implements ProjectBigScreenService {
@Override
public List<String> getList(Long projectId) {
if (projectId == null){
if (projectId == null) {
throw new ServiceException("项目id不能为空");
}
Object object = RedisUtils.getCacheObject("xmjdp:" + projectId);
@ -414,10 +457,10 @@ public class ProjectBigScreenServiceImpl implements ProjectBigScreenService {
@Override
public void setList(GpsEquipmentBo bo) {
if (bo.getProjectId() == null){
if (bo.getProjectId() == null) {
throw new ServiceException("项目id不能为空");
}
RedisUtils.setCacheObject("xmjdp:"+bo.getProjectId(), bo.getIdList());
RedisUtils.setCacheObject("xmjdp:" + bo.getProjectId(), bo.getIdList());
}
@Override
@ -427,8 +470,8 @@ public class ProjectBigScreenServiceImpl implements ProjectBigScreenService {
// 获取当前时间
LocalDateTime now = LocalDateTime.now();
List<GpsEquipmentSonVo> voList = gpsEquipmentService.getClientList(projectId,startOfDay,now);
List<GpsEquipmentSonVo> appList = gpsEquipmentService.getUserListByProjectId(projectId,startOfDay,now);
List<GpsEquipmentSonVo> voList = gpsEquipmentService.getClientList(projectId, startOfDay, now);
List<GpsEquipmentSonVo> appList = gpsEquipmentService.getUserListByProjectId(projectId, startOfDay, now);
List<OthYs7Device> othYs7DeviceList = othYs7DeviceService.lambdaQuery()
.eq(OthYs7Device::getProjectId, projectId)
.between(OthYs7Device::getUpdateTime, startOfDay, now)
@ -533,10 +576,10 @@ public class ProjectBigScreenServiceImpl implements ProjectBigScreenService {
sxtMap1.put("children", sxtChildrenMap1);
wrjMap.put("id", 3);
wrjMap.put("label", "无人机");
wrjMap.put("children",wrjChildrenMap);
wrjMap.put("children", wrjChildrenMap);
wrjMap1.put("id", 8);
wrjMap1.put("label", "无人机");
wrjMap1.put("children",wrjChildrenMap1);
wrjMap1.put("children", wrjChildrenMap1);
maps.add(gpsMap);

View File

@ -1,9 +1,10 @@
package org.dromara.drone.domain;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import java.io.Serial;
@ -27,11 +28,6 @@ public class DroDroneConfig extends BaseEntity {
@TableId(value = "id")
private Long id;
/**
* 项目id
*/
private Long projectId;
/**
* 无人机服务地址
*/

View File

@ -32,12 +32,6 @@ public class DroDroneConfigBo extends BaseEntity {
@NotNull(message = "主键id不能为空", groups = {EditGroup.class})
private Long id;
/**
* 项目id
*/
@NotNull(message = "项目id不能为空", groups = {AddGroup.class, EditGroup.class})
private Long projectId;
/**
* 无人机服务地址
*/

View File

@ -71,7 +71,6 @@ public class DroDroneConfigServiceImpl implements IDroDroneConfigService {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<DroDroneConfig> lqw = Wrappers.lambdaQuery();
lqw.orderByAsc(DroDroneConfig::getId);
lqw.eq(bo.getProjectId() != null, DroDroneConfig::getProjectId, bo.getProjectId());
return lqw;
}

View File

@ -6,8 +6,6 @@ import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
@ -79,7 +77,7 @@ public class FacPhotovoltaicPanelController extends BaseController {
@Log(title = "设施-光伏板", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Long> add(@Validated(AddGroup.class) @RequestBody FacPhotovoltaicPanelCreateReq req) {
public R<Long> add(@Validated @RequestBody FacPhotovoltaicPanelCreateReq req) {
return R.ok(facPhotovoltaicPanelService.insertByBo(req));
}
@ -101,7 +99,7 @@ public class FacPhotovoltaicPanelController extends BaseController {
@Log(title = "设施-光伏板", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody FacPhotovoltaicPanelUpdateReq req) {
public R<Void> edit(@Validated @RequestBody FacPhotovoltaicPanelUpdateReq req) {
return toAjax(facPhotovoltaicPanelService.updateByBo(req));
}

View File

@ -1,5 +1,7 @@
package org.dromara.facility.domain.dto.photovoltaicpanel;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import java.io.Serial;
@ -26,9 +28,16 @@ public class FacPhotovoltaicPanelCreateReq implements Serializable {
*/
private Long matrixId;
/**
* 进度类别id
*/
@NotNull(message = "进度类别id不能为空")
private Long progressCategoryId;
/**
* 光伏板名称
*/
@NotBlank(message = "光伏板名称不能为空")
private String name;
/**
@ -36,19 +45,4 @@ public class FacPhotovoltaicPanelCreateReq implements Serializable {
*/
private List<List<String>> positionList;
/**
* 完成状态0未开始 1进行中 2完成
*/
private String status;
/**
* 完成类型1手动填报 2AI填报
*/
private String finishType;
/**
* 备注
*/
private String remark;
}

View File

@ -849,7 +849,7 @@ public class FacPhotovoltaicPanelPartsServiceImpl implements IFacPhotovoltaicPan
photovoltaicPanelPointService.updateFinishNumberByCoordinate(projectIds, matchPoints);
} else if (type.equals(RecognizerTypeEnum.PILE.getValue())) {
photovoltaicPanelColumnService.updateFinishNumberByCoordinate(projectIds, matchPoints);
} else if (type.equals(RecognizerTypeEnum.SHELVES.getValue())) {
} else if (type.equals(RecognizerTypeEnum.BRACKET.getValue())) {
photovoltaicPanelSupportService.updateFinishNumberByCoordinate(projectIds, matchPoints);
}
}
@ -880,7 +880,7 @@ public class FacPhotovoltaicPanelPartsServiceImpl implements IFacPhotovoltaicPan
return list.stream().map(column ->
new IdCoordinatePoint(column.getId(), column.getPositions())).toList();
}
} else if (type.equals(RecognizerTypeEnum.SHELVES.getValue())) {
} else if (type.equals(RecognizerTypeEnum.BRACKET.getValue())) {
List<FacPhotovoltaicPanelSupport> list = photovoltaicPanelSupportService.lambdaQuery()
.in(FacPhotovoltaicPanelSupport::getProjectId, projectIds)
.ne(FacPhotovoltaicPanelSupport::getStatus, FacFinishStatusEnum.FINISH.getValue())

View File

@ -23,10 +23,7 @@ import org.dromara.facility.constant.FacRedisKeyConstant;
import org.dromara.facility.domain.FacMatrix;
import org.dromara.facility.domain.FacPhotovoltaicPanel;
import org.dromara.facility.domain.dto.geojson.*;
import org.dromara.facility.domain.dto.photovoltaicpanel.FacPhotovoltaicPanelCreateByGeoJsonReq;
import org.dromara.facility.domain.dto.photovoltaicpanel.FacPhotovoltaicPanelCreateReq;
import org.dromara.facility.domain.dto.photovoltaicpanel.FacPhotovoltaicPanelQueryReq;
import org.dromara.facility.domain.dto.photovoltaicpanel.FacPhotovoltaicPanelUpdateReq;
import org.dromara.facility.domain.dto.photovoltaicpanel.*;
import org.dromara.facility.domain.enums.FacFinishStatusEnum;
import org.dromara.facility.domain.enums.FacFinishTypeEnum;
import org.dromara.facility.domain.vo.photovoltaicpanel.FacPhotovoltaicPanelVo;
@ -152,6 +149,7 @@ public class FacPhotovoltaicPanelServiceImpl extends ServiceImpl<FacPhotovoltaic
* @return 新增光伏板id
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Long insertByBo(FacPhotovoltaicPanelCreateReq req) {
// 将实体类和 DTO 进行转换
FacPhotovoltaicPanel photovoltaicPanel = new FacPhotovoltaicPanel();
@ -162,8 +160,19 @@ public class FacPhotovoltaicPanelServiceImpl extends ServiceImpl<FacPhotovoltaic
String positionStr = JSONUtil.toJsonStr(positionList);
photovoltaicPanel.setPositions(positionStr);
}
Long progressCategoryId = req.getProgressCategoryId();
PgsProgressCategory category = progressCategoryService.getById(progressCategoryId);
if (category == null) {
throw new ServiceException("对应进度类别不存在", HttpStatus.NOT_FOUND);
}
// 填入默认值
photovoltaicPanel.setProjectId(category.getProjectId());
photovoltaicPanel.setMatrixId(category.getMatrixId());
photovoltaicPanel.setProgressCategoryId(progressCategoryId);
photovoltaicPanel.setProgressCategoryName(category.getName());
photovoltaicPanel.setRemark("手动添加");
// 数据校验
validEntityBeforeSave(photovoltaicPanel, true);
validEntityBeforeSave(photovoltaicPanel);
// 判断是否存在同名光伏板
Long count = this.lambdaQuery()
.eq(FacPhotovoltaicPanel::getProjectId, photovoltaicPanel.getProjectId())
@ -177,6 +186,14 @@ public class FacPhotovoltaicPanelServiceImpl extends ServiceImpl<FacPhotovoltaic
if (!save) {
throw new ServiceException("新增光伏板失败,数据库异常", HttpStatus.ERROR);
}
// 修改进度类别数量
PgsProgressCategory updateCategory = new PgsProgressCategory();
updateCategory.setId(progressCategoryId);
updateCategory.setTotal(category.getTotal().add(BigDecimal.ONE));
boolean update = progressCategoryService.updateById(updateCategory);
if (!update) {
throw new ServiceException("修改进度类别数量失败,数据库异常", HttpStatus.ERROR);
}
return photovoltaicPanel.getId();
}
@ -599,7 +616,7 @@ public class FacPhotovoltaicPanelServiceImpl extends ServiceImpl<FacPhotovoltaic
photovoltaicPanel.setPositions(positionStr);
}
// 数据校验
validEntityBeforeSave(photovoltaicPanel, false);
validEntityBeforeSave(photovoltaicPanel);
// 判断是否存在
FacPhotovoltaicPanel oldPhotovoltaicPanel = this.getById(photovoltaicPanel.getId());
if (oldPhotovoltaicPanel == null) {
@ -626,24 +643,8 @@ public class FacPhotovoltaicPanelServiceImpl extends ServiceImpl<FacPhotovoltaic
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(FacPhotovoltaicPanel entity, Boolean create) {
private void validEntityBeforeSave(FacPhotovoltaicPanel entity) {
// TODO 做一些数据校验,如唯一约束
Long projectId = entity.getProjectId();
Long matrixId = entity.getMatrixId();
if (create) {
if (projectId == null) {
throw new ServiceException("项目id不能为空", HttpStatus.BAD_REQUEST);
}
if (matrixId == null) {
throw new ServiceException("方阵id不能为空", HttpStatus.BAD_REQUEST);
}
}
if (projectId != null && projectService.getById(projectId) == null) {
throw new ServiceException("对应项目不存在", HttpStatus.NOT_FOUND);
}
if (matrixId != null && matrixService.getById(matrixId) == null) {
throw new ServiceException("对应方阵不存在", HttpStatus.NOT_FOUND);
}
}
/**

View File

@ -16,8 +16,9 @@ public enum RecognizerTypeEnum {
VEST("反光背心识别", "novest", ""),
SMOKING("吸烟识别", "smoking", "3"),
FIRE("火焰识别", "fire", "16"),
PHO("光伏板识别", "pho", ""),
SHELVES("光伏板支架识别", "shelves", ""),
SMOKE("烟雾识别","smoke",""),
SOLAR("光伏板识别", "solar", ""),
BRACKET("光伏板支架识别", "bracket", ""),
PILE("光伏板立柱识别", "pile", ""),
HOLE("", "hole", "");

View File

@ -1,26 +1,28 @@
package org.dromara.out.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.web.core.BaseController;
import org.dromara.common.mybatis.core.page.PageQuery;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.out.domain.vo.OutConstructionValueVo;
import org.dromara.out.domain.bo.OutConstructionValueBo;
import org.dromara.out.service.IOutConstructionValueService;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.web.core.BaseController;
import org.dromara.out.domain.bo.OutConstructionValueBo;
import org.dromara.out.domain.vo.OutConstructionAllValueVo;
import org.dromara.out.domain.vo.OutConstructionValueVo;
import org.dromara.out.service.IOutConstructionValueService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 施工产值
@ -68,6 +70,15 @@ public class OutConstructionValueController extends BaseController {
return R.ok(outConstructionValueService.queryById(id));
}
/**
* 获取所有施工产值
*/
@SaCheckPermission("out:constructionValue:query")
@GetMapping("/allValue")
public R<OutConstructionAllValueVo> getAllValue(OutConstructionValueBo bo) {
return R.ok(outConstructionValueService.getAllValue(bo));
}
/**
* 新增施工产值
*/

View File

@ -16,6 +16,7 @@ import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.web.core.BaseController;
import org.dromara.out.domain.bo.OutConstructionValueRangeBo;
import org.dromara.out.domain.vo.OutConstructionAllValueRangeVo;
import org.dromara.out.domain.vo.OutConstructionValueRangeVo;
import org.dromara.out.service.IOutConstructionValueRangeService;
import org.springframework.validation.annotation.Validated;
@ -81,6 +82,15 @@ public class OutConstructionValueRangeController extends BaseController {
return R.ok(outConstructionValueRangeService.queryById(id, true));
}
/**
* 获取所有施工产值范围
*/
@SaCheckPermission("out:constructionValueRange:query")
@GetMapping("/allValue")
public R<OutConstructionAllValueRangeVo> getAllValue(OutConstructionValueRangeBo bo) {
return R.ok(outConstructionValueRangeService.getAllValue(bo));
}
/**
* 新增施工产值范围

View File

@ -1,13 +1,13 @@
package org.dromara.out.domain.bo;
import org.dromara.out.domain.OutConstructionValue;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.out.domain.OutConstructionValue;
import java.math.BigDecimal;
import java.time.LocalDate;
@ -26,7 +26,7 @@ public class OutConstructionValueBo extends BaseEntity {
/**
* 主键ID
*/
@NotNull(message = "主键ID不能为空", groups = { EditGroup.class })
@NotNull(message = "主键ID不能为空", groups = {EditGroup.class})
private Long id;
/**
@ -37,7 +37,7 @@ public class OutConstructionValueBo extends BaseEntity {
/**
* 项目ID
*/
@NotNull(message = "项目ID不能为空", groups = { AddGroup.class, EditGroup.class })
@NotNull(message = "项目ID不能为空", groups = {AddGroup.class, EditGroup.class})
private Long projectId;
/**
@ -53,13 +53,13 @@ public class OutConstructionValueBo extends BaseEntity {
/**
* 人工填报数量
*/
@NotNull(message = "人工填报数量不能为空", groups = { AddGroup.class, EditGroup.class })
@NotNull(message = "人工填报数量不能为空", groups = {AddGroup.class, EditGroup.class})
private Integer artificialNum;
/**
* 无人机识别数量
*/
@NotNull(message = "无人机识别数量不能为空", groups = { AddGroup.class, EditGroup.class })
@NotNull(message = "无人机识别数量不能为空", groups = {AddGroup.class, EditGroup.class})
private Integer uavNum;
/**
@ -70,7 +70,7 @@ public class OutConstructionValueBo extends BaseEntity {
/**
* 确认数量
*/
@NotNull(message = "确认数量不能为空", groups = { AddGroup.class, EditGroup.class })
@NotNull(message = "确认数量不能为空", groups = {AddGroup.class, EditGroup.class})
private Integer confirmNum;
/**
@ -86,7 +86,7 @@ public class OutConstructionValueBo extends BaseEntity {
/**
* 上报日期
*/
@NotNull(message = "上报日期不能为空", groups = { AddGroup.class, EditGroup.class })
@NotNull(message = "上报日期不能为空", groups = {AddGroup.class, EditGroup.class})
private LocalDate reportDate;
/**
@ -94,5 +94,20 @@ public class OutConstructionValueBo extends BaseEntity {
*/
private String auditStatus;
/**
* 计量方式0无 1数量 2百分比
*/
private String unitType;
/**
* 开始日期
*/
private LocalDate startDate;
/**
* 结束日期
*/
private LocalDate endDate;
}

View File

@ -0,0 +1,28 @@
package org.dromara.out.domain.vo;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* @author lilemy
* @date 2025-10-11 15:10
*/
@Data
public class OutConstructionAllValueRangeVo implements Serializable {
@Serial
private static final long serialVersionUID = 1258889254649279094L;
/**
* 対乙产值
*/
private BigDecimal outValue;
/**
* 对甲产值
*/
private BigDecimal ownerValue;
}

View File

@ -0,0 +1,28 @@
package org.dromara.out.domain.vo;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* @author lilemy
* @date 2025-10-11 15:20
*/
@Data
public class OutConstructionAllValueVo implements Serializable {
@Serial
private static final long serialVersionUID = 250916682355050142L;
/**
* 対乙产值
*/
private BigDecimal outValue;
/**
* 对甲产值
*/
private BigDecimal ownerValue;
}

View File

@ -5,6 +5,7 @@ import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.out.domain.OutConstructionValueRange;
import org.dromara.out.domain.bo.OutConstructionValueRangeBo;
import org.dromara.out.domain.vo.OutConstructionAllValueRangeVo;
import org.dromara.out.domain.vo.OutConstructionValueRangeVo;
import java.util.Collection;
@ -68,4 +69,12 @@ public interface IOutConstructionValueRangeService extends IService<OutConstruct
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
/**
* 获取所有施工范围产值
*
* @param bo 查询条件
* @return 所有施工范围产值
*/
OutConstructionAllValueRangeVo getAllValue(OutConstructionValueRangeBo bo);
}

View File

@ -1,12 +1,12 @@
package org.dromara.out.service;
import org.dromara.out.domain.vo.OutConstructionValueVo;
import org.dromara.out.domain.bo.OutConstructionValueBo;
import org.dromara.out.domain.OutConstructionValue;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.service.IService;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.out.domain.OutConstructionValue;
import org.dromara.out.domain.bo.OutConstructionValueBo;
import org.dromara.out.domain.vo.OutConstructionAllValueVo;
import org.dromara.out.domain.vo.OutConstructionValueVo;
import java.math.BigDecimal;
import java.util.Collection;
@ -18,7 +18,7 @@ import java.util.List;
* @author Lion Li
* @date 2025-07-30
*/
public interface IOutConstructionValueService extends IService<OutConstructionValue>{
public interface IOutConstructionValueService extends IService<OutConstructionValue> {
/**
* 查询施工产值
@ -77,5 +77,13 @@ public interface IOutConstructionValueService extends IService<OutConstructionVa
* @param projectId 项目id
* @return 项目施工完成值
*/
BigDecimal getCompleteValue(Long projectId,String month,String type);
BigDecimal getCompleteValue(Long projectId, String month, String type);
/**
* 获取施工所有产值
*
* @param bo 查询条件
* @return 施工所有产值
*/
OutConstructionAllValueVo getAllValue(OutConstructionValueBo bo);
}

View File

@ -21,6 +21,7 @@ import org.dromara.out.domain.OutConstructionValue;
import org.dromara.out.domain.OutConstructionValueRange;
import org.dromara.out.domain.bo.OutConstructionValueBo;
import org.dromara.out.domain.bo.OutConstructionValueRangeBo;
import org.dromara.out.domain.vo.OutConstructionAllValueRangeVo;
import org.dromara.out.domain.vo.OutConstructionValueRangeVo;
import org.dromara.out.mapper.OutConstructionValueRangeMapper;
import org.dromara.out.service.IOutConstructionValueRangeService;
@ -31,6 +32,11 @@ import org.springframework.context.annotation.Lazy;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.temporal.TemporalAdjusters;
import java.util.Collection;
import java.util.List;
import java.util.Map;
@ -102,9 +108,15 @@ public class OutConstructionValueRangeServiceImpl extends ServiceImpl<OutConstru
lqw.orderByDesc(OutConstructionValueRange::getId);
lqw.eq(bo.getProjectId() != null, OutConstructionValueRange::getProjectId, bo.getProjectId());
// 日期范围过滤
if (bo.getDate() != null) {
lqw.le(OutConstructionValueRange::getStartDate, bo.getDate()) // 开始时间 <= date
.ge(OutConstructionValueRange::getEndDate, bo.getDate()); // 结束时间 >= date
if (bo.getStartDate() != null) {
// 获取本周的星期一
LocalDate monday = bo.getStartDate().with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
lqw.ge(OutConstructionValueRange::getStartDate, monday); // 开始时间 <= date
}
if (bo.getEndDate() != null) {
// 获取本周的星期日
LocalDate sunday = bo.getEndDate().with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY));
lqw.le(OutConstructionValueRange::getEndDate, sunday); // 结束时间 >= date
}
lqw.eq(StringUtils.isNotBlank(bo.getAuditStatus()), OutConstructionValueRange::getAuditStatus, bo.getAuditStatus());
return lqw;
@ -162,6 +174,31 @@ public class OutConstructionValueRangeServiceImpl extends ServiceImpl<OutConstru
return baseMapper.deleteByIds(ids) > 0;
}
/**
* 获取所有施工范围产值
*
* @param bo 查询条件
* @return 所有施工范围产值
*/
@Override
public OutConstructionAllValueRangeVo getAllValue(OutConstructionValueRangeBo bo) {
// 根据查询条件获取对应施工产值
LambdaQueryWrapper<OutConstructionValueRange> lqw = buildQueryWrapper(bo);
List<OutConstructionValueRangeVo> list = baseMapper.selectVoList(lqw);
OutConstructionAllValueRangeVo vo = new OutConstructionAllValueRangeVo();
// 统计对乙产值
BigDecimal outValue = list.stream().map(OutConstructionValueRangeVo::getOutValue)
.reduce(BigDecimal.ZERO, BigDecimal::add)
.setScale(4, RoundingMode.HALF_UP);
vo.setOutValue(outValue);
// 统计对甲产值
BigDecimal ownerValue = list.stream().map(OutConstructionValueRangeVo::getOwnerValue)
.reduce(BigDecimal.ZERO, BigDecimal::add)
.setScale(4, RoundingMode.HALF_UP);
vo.setOwnerValue(ownerValue);
return vo;
}
/**
* 总体流程监听(例如: 草稿,撤销,退回,作废,终止,已完成,单任务完成等)
* 正常使用只需#processEvent.flowCode=='leave1'

View File

@ -10,6 +10,7 @@ import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.constant.HttpStatus;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.facility.domain.FacMatrix;
@ -17,13 +18,16 @@ import org.dromara.facility.service.IFacMatrixService;
import org.dromara.out.domain.OutConstructionValue;
import org.dromara.out.domain.OutConstructionValueRange;
import org.dromara.out.domain.bo.OutConstructionValueBo;
import org.dromara.out.domain.vo.OutConstructionAllValueVo;
import org.dromara.out.domain.vo.OutConstructionValueVo;
import org.dromara.out.mapper.OutConstructionValueMapper;
import org.dromara.out.service.IOutConstructionValueRangeService;
import org.dromara.out.service.IOutConstructionValueService;
import org.dromara.progress.domain.PgsProgressCategory;
import org.dromara.progress.domain.dto.progressplandetail.PgsProgressPlanDetailCreateReq;
import org.dromara.progress.domain.vo.progresscategory.PgsProgressCategoryVo;
import org.dromara.progress.service.IPgsProgressCategoryService;
import org.dromara.progress.service.IPgsProgressPlanDetailService;
import org.dromara.project.domain.BusProject;
import org.dromara.project.domain.vo.project.BusProjectVo;
import org.dromara.project.service.IBusProjectService;
@ -31,10 +35,7 @@ import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.*;
/**
* 施工产值Service业务层处理
@ -54,6 +55,8 @@ public class OutConstructionValueServiceImpl extends ServiceImpl<OutConstruction
private final IPgsProgressCategoryService pgsProgressCategoryService;
private final IPgsProgressPlanDetailService pgsProgressPlanDetailService;
private final IBusProjectService projectService;
private final IOutConstructionValueRangeService constructionValueRangeService;
@ -105,18 +108,17 @@ public class OutConstructionValueServiceImpl extends ServiceImpl<OutConstruction
LambdaQueryWrapper<OutConstructionValue> lqw = Wrappers.lambdaQuery();
lqw.orderByDesc(OutConstructionValue::getId);
Long projectId = bo.getProjectId();
List<Long> ids = new ArrayList<>();
if (projectId != null) {
// 获取子项目列表
List<BusProject> subProjectIds = projectService.lambdaQuery()
.eq(BusProject::getPId, projectId)
.list();
if (CollUtil.isNotEmpty(subProjectIds)) {
List<Long> ids = new ArrayList<>(subProjectIds.stream().map(BusProject::getId).toList());
ids = new ArrayList<>(subProjectIds.stream().map(BusProject::getId).toList());
ids.add(projectId);
lqw.in(OutConstructionValue::getProjectId, ids);
} else {
lqw.eq(OutConstructionValue::getProjectId, projectId);
}
if (CollUtil.isNotEmpty(ids)) {
lqw.in(OutConstructionValue::getProjectId, ids);
}
lqw.eq(bo.getMatrixId() != null, OutConstructionValue::getMatrixId, bo.getMatrixId());
lqw.eq(bo.getRangeId() != null, OutConstructionValue::getRangeId, bo.getRangeId());
@ -126,7 +128,24 @@ public class OutConstructionValueServiceImpl extends ServiceImpl<OutConstruction
lqw.eq(bo.getConfirmNum() != null, OutConstructionValue::getConfirmNum, bo.getConfirmNum());
lqw.eq(bo.getOutValue() != null, OutConstructionValue::getOutValue, bo.getOutValue());
lqw.eq(bo.getReportDate() != null, OutConstructionValue::getReportDate, bo.getReportDate());
lqw.ge(bo.getStartDate() != null, OutConstructionValue::getReportDate, bo.getStartDate());
lqw.le(bo.getEndDate() != null, OutConstructionValue::getReportDate, bo.getEndDate());
lqw.eq(bo.getCreateBy() != null, OutConstructionValue::getCreateBy, bo.getCreateBy());
// 新增根据 unit_type 查询的条件
if (StringUtils.isNotBlank(bo.getUnitType())) {
LambdaQueryWrapper<PgsProgressCategory> categoryLqw = new LambdaQueryWrapper<>();
categoryLqw.select(PgsProgressCategory::getId);
categoryLqw.eq(PgsProgressCategory::getUnitType, bo.getUnitType());
categoryLqw.eq(bo.getMatrixId() != null, PgsProgressCategory::getMatrixId, bo.getMatrixId());
if (CollUtil.isNotEmpty(ids)) {
categoryLqw.in(PgsProgressCategory::getProjectId, ids);
}
List<PgsProgressCategory> progressCategories = pgsProgressCategoryService.list(categoryLqw);
if (CollUtil.isNotEmpty(progressCategories)) {
List<Long> categoryIds = progressCategories.stream().map(PgsProgressCategory::getId).toList();
lqw.in(OutConstructionValue::getProgressCategoryId, categoryIds);
}
}
return lqw;
}
@ -169,20 +188,27 @@ public class OutConstructionValueServiceImpl extends ServiceImpl<OutConstruction
}
OutConstructionValue update = MapstructUtils.convert(bo, OutConstructionValue.class);
validEntityBeforeSave(update);
//计算产值
PgsProgressCategory progressCategory = pgsProgressCategoryService.getById(bo.getProgressCategoryId());
if (progressCategory != null) {
BigDecimal outValue = progressCategory.getConstructionPrice().multiply(BigDecimal.valueOf(bo.getConfirmNum())).setScale(4, RoundingMode.HALF_UP);
// 同步确认数量
BigDecimal confirmNum = BigDecimal.valueOf(bo.getConfirmNum());
if (StringUtils.isBlank(progressCategory.getWorkType())) {
if (confirmNum.compareTo(BigDecimal.valueOf(old.getArtificialNum())) != 0) {
PgsProgressPlanDetailCreateReq req = new PgsProgressPlanDetailCreateReq();
req.setId(old.getDetailId());
req.setFinishedNumber(confirmNum);
pgsProgressPlanDetailService.insertPercentageNumberDetail(req, false);
}
}
//计算产值
BigDecimal outValue = progressCategory.getConstructionPrice().multiply(confirmNum).setScale(4, RoundingMode.HALF_UP);
update.setOutValue(outValue);
BigDecimal ownerValue = progressCategory.getOwnerPrice().multiply(BigDecimal.valueOf(bo.getConfirmNum())).setScale(4, RoundingMode.HALF_UP);
BigDecimal ownerValue = progressCategory.getOwnerPrice().multiply(confirmNum).setScale(4, RoundingMode.HALF_UP);
update.setOwnerValue(ownerValue);
OutConstructionValueRange range = constructionValueRangeService.getById(old.getRangeId());
BigDecimal allOutValue = range.getOutValue();
BigDecimal allOwnerValue = range.getOwnerValue();
range.setOutValue(allOutValue.subtract(old.getOutValue()).add(outValue).setScale(4, RoundingMode.HALF_UP));
range.setOwnerValue(allOwnerValue.subtract(old.getOwnerValue()).add(ownerValue).setScale(4, RoundingMode.HALF_UP));
}
return baseMapper.updateById(update) > 0;
}
@ -223,6 +249,31 @@ public class OutConstructionValueServiceImpl extends ServiceImpl<OutConstruction
return completeValue;
}
/**
* 获取施工所有产值
*
* @param bo 查询条件
* @return 施工所有产值
*/
@Override
public OutConstructionAllValueVo getAllValue(OutConstructionValueBo bo) {
// 根据查询条件获取对应施工产值
LambdaQueryWrapper<OutConstructionValue> lqw = buildQueryWrapper(bo);
List<OutConstructionValueVo> list = baseMapper.selectVoList(lqw);
OutConstructionAllValueVo vo = new OutConstructionAllValueVo();
// 统计对乙产值
BigDecimal outValue = list.stream().map(OutConstructionValueVo::getOutValue)
.reduce(BigDecimal.ZERO, BigDecimal::add)
.setScale(4, RoundingMode.HALF_UP);
vo.setOutValue(outValue);
// 统计对甲产值
BigDecimal ownerValue = list.stream().map(OutConstructionValueVo::getOwnerValue)
.reduce(BigDecimal.ZERO, BigDecimal::add)
.setScale(4, RoundingMode.HALF_UP);
vo.setOwnerValue(ownerValue);
return vo;
}
/**
* 补充数据
*/
@ -230,7 +281,7 @@ public class OutConstructionValueServiceImpl extends ServiceImpl<OutConstruction
for (OutConstructionValueVo vo : list) {
getName(vo);
}
list.sort(Comparator.comparing(OutConstructionValueVo::getProgressCategoryName, Comparator.nullsLast(String::compareTo)));
}
public void getName(OutConstructionValueVo vo) {

View File

@ -367,6 +367,28 @@ public class PgsProgressCategoryController extends BaseController {
return toAjax(pgsProgressCategoryService.insertByReq(req));
}
/**
* 新增设施进度类别
*/
@SaCheckPermission("progress:progressCategory:add")
@Log(title = "进度类别", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping("/facility")
public R<Void> insertFacility(@Validated @RequestBody PgsProgressCategoryCreateFacilityReq req) {
return toAjax(pgsProgressCategoryService.insertFacility(req));
}
/**
* 批量新增设施进度类别
*/
@SaCheckPermission("progress:progressCategory:add")
@Log(title = "进度类别", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping("/batch/facility")
public R<Void> insertFacility(@Validated @RequestBody PgsProgressCategoryCreateBatchFacilityReq req) {
return toAjax(pgsProgressCategoryService.insertBatchFacility(req));
}
/**
* 修改进度类别
*/

View File

@ -56,7 +56,7 @@ public class PgsProgressPlanDetailController extends BaseController {
@RepeatSubmit()
@PostMapping("/insert/percentage")
public R<Void> insertPercentageDetail(@Validated @RequestBody PgsProgressPlanDetailCreateReq req) {
return toAjax(pgsProgressPlanDetailService.insertPercentageNumberDetail(req));
return toAjax(pgsProgressPlanDetailService.insertPercentageNumberDetail(req, true));
}
/**

View File

@ -57,7 +57,7 @@ public class PgsProgressPlanDetailAppController extends BaseController {
@RepeatSubmit()
@PostMapping("/insert")
public R<Void> insertDetail(@Validated @RequestBody PgsProgressPlanDetailCreateReq req) {
return toAjax(progressPlanDetailService.insertPercentageNumberDetail(req));
return toAjax(progressPlanDetailService.insertPercentageNumberDetail(req, true));
}
/**

View File

@ -0,0 +1,32 @@
package org.dromara.progress.domain.dto.progresscategory;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
/**
* @author lilemy
* @date 2025-10-11 14:25
*/
@Data
public class PgsProgressCategoryCreateBatchFacilityReq implements Serializable {
@Serial
private static final long serialVersionUID = -1134967798239895738L;
/**
* 进度类别id
*/
@NotNull(message = "进度类别id不能为空")
private Long progressCategoryId;
/**
* 设施数量
*/
@NotNull(message = "设施数量不能为空")
@Min(value = 1, message = "设施数量不能小于1")
private Integer number;
}

View File

@ -0,0 +1,31 @@
package org.dromara.progress.domain.dto.progresscategory;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
/**
* @author lilemy
* @date 2025-10-11 11:32
*/
@Data
public class PgsProgressCategoryCreateFacilityReq implements Serializable {
@Serial
private static final long serialVersionUID = -89082568070992741L;
/**
* 进度类别id
*/
@NotNull(message = "进度类别id不能为空")
private Long progressCategoryId;
/**
* 设施名称
*/
@NotBlank(message = "设施名称不能为空")
private String name;
}

View File

@ -196,4 +196,20 @@ public interface IPgsProgressCategoryService extends IService<PgsProgressCategor
* @return 未完成数量
*/
BigDecimal getUnFinishNumber(Long id);
/**
* 新增设施
*
* @param req 设施信息
* @return 是否新增成功
*/
Boolean insertFacility(PgsProgressCategoryCreateFacilityReq req);
/**
* 批量新增设施批量
*
* @param req 设施信息
* @return 是否新增成功
*/
Boolean insertBatchFacility(PgsProgressCategoryCreateBatchFacilityReq req);
}

View File

@ -46,7 +46,7 @@ public interface IPgsProgressPlanDetailService extends IService<PgsProgressPlanD
* @param req 插入进度计划详情设施参数
* @return 是否插入成功
*/
Boolean insertPercentageNumberDetail(PgsProgressPlanDetailCreateReq req);
Boolean insertPercentageNumberDetail(PgsProgressPlanDetailCreateReq req, Boolean isCheckout);
/**
* 分页查询进度计划详情已完成设施列表

View File

@ -46,6 +46,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
@ -1497,4 +1498,329 @@ public class PgsProgressCategoryServiceImpl extends ServiceImpl<PgsProgressCateg
return total.subtract(completed);
}
/**
* 新增设施
*
* @param req 设施信息
* @return 是否新增成功
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean insertFacility(PgsProgressCategoryCreateFacilityReq req) {
Long progressCategoryId = req.getProgressCategoryId();
PgsProgressCategory category = this.getById(progressCategoryId);
if (category == null) {
throw new ServiceException("对应进度类别不存在", HttpStatus.NOT_FOUND);
}
// 根据类别,新增对应的设施
String workType = category.getWorkType();
String type = workType.split("_")[0];
// 获取当前日期
LocalDate today = LocalDate.now();
// 定义格式化器yyyyMMdd
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
// 格式化日期
String formattedDate = today.format(formatter);
Long projectId = category.getProjectId();
Long matrixId = category.getMatrixId();
String name = category.getName();
boolean isSave;
switch (type) {
case PgsProgressCategoryConstant.PHOTOVOLTAIC_PANEL_WORK_TYPE -> {
// 获取当天已创建的设施数量
Long count = photovoltaicPanelService.lambdaQuery()
.eq(FacPhotovoltaicPanel::getProjectId, projectId)
.eq(FacPhotovoltaicPanel::getMatrixId, matrixId)
.eq(FacPhotovoltaicPanel::getProgressCategoryId, progressCategoryId)
.likeRight(FacPhotovoltaicPanel::getName, formattedDate)
.count();
// 封装数据
FacPhotovoltaicPanel panel = new FacPhotovoltaicPanel();
panel.setProjectId(projectId);
panel.setMatrixId(matrixId);
panel.setName(formattedDate + "." + (count + 1));
panel.setProgressCategoryId(progressCategoryId);
panel.setProgressCategoryName(name);
panel.setRemark("手动添加");
isSave = photovoltaicPanelService.save(panel);
}
case PgsProgressCategoryConstant.INVERTER_WORK_TYPE -> {
// 获取当天已创建的设施数量
Long count = inverterService.lambdaQuery()
.eq(FacInverter::getProjectId, projectId)
.eq(FacInverter::getMatrixId, matrixId)
.eq(FacInverter::getProgressCategoryId, progressCategoryId)
.likeRight(FacInverter::getName, formattedDate)
.count();
// 封装数据
FacInverter inverter = new FacInverter();
inverter.setProjectId(projectId);
inverter.setMatrixId(matrixId);
inverter.setName(formattedDate + "." + (count + 1));
inverter.setProgressCategoryId(progressCategoryId);
inverter.setProgressCategoryName(name);
inverter.setRemark("手动添加");
isSave = inverterService.save(inverter);
}
case PgsProgressCategoryConstant.BOX_TRANSFORMER_WORK_TYPE -> {
// 获取当天已创建的设施数量
Long count = boxTransformerService.lambdaQuery()
.eq(FacBoxTransformer::getProjectId, projectId)
.eq(FacBoxTransformer::getMatrixId, matrixId)
.eq(FacBoxTransformer::getProgressCategoryId, progressCategoryId)
.likeRight(FacBoxTransformer::getName, formattedDate)
.count();
// 封装数据
FacBoxTransformer boxTransformer = new FacBoxTransformer();
boxTransformer.setProjectId(projectId);
boxTransformer.setMatrixId(matrixId);
boxTransformer.setName(formattedDate + "." + (count + 1));
boxTransformer.setProgressCategoryId(progressCategoryId);
boxTransformer.setProgressCategoryName(name);
boxTransformer.setRemark("手动添加");
isSave = boxTransformerService.save(boxTransformer);
}
case PgsProgressCategoryConstant.PHOTOVOLTAIC_PANEL_POINT_WORK_TYPE -> {
// 获取当天已创建的设施数量
Long count = photovoltaicPanelPointService.lambdaQuery()
.eq(FacPhotovoltaicPanelPoint::getProjectId, projectId)
.eq(FacPhotovoltaicPanelPoint::getMatrixId, matrixId)
.eq(FacPhotovoltaicPanelPoint::getProgressCategoryId, progressCategoryId)
.likeRight(FacPhotovoltaicPanelPoint::getName, formattedDate)
.count();
// 封装数据
FacPhotovoltaicPanelPoint point = new FacPhotovoltaicPanelPoint();
point.setProjectId(projectId);
point.setMatrixId(matrixId);
point.setName(formattedDate + "." + (count + 1));
point.setProgressCategoryId(progressCategoryId);
point.setProgressCategoryName(name);
point.setRemark("手动添加");
isSave = photovoltaicPanelPointService.save(point);
}
case PgsProgressCategoryConstant.PHOTOVOLTAIC_PANEL_COLUMN_WORK_TYPE -> {
// 获取当天已创建的设施数量
Long count = photovoltaicPanelColumnService.lambdaQuery()
.eq(FacPhotovoltaicPanelColumn::getProjectId, projectId)
.eq(FacPhotovoltaicPanelColumn::getMatrixId, matrixId)
.eq(FacPhotovoltaicPanelColumn::getProgressCategoryId, progressCategoryId)
.likeRight(FacPhotovoltaicPanelColumn::getName, formattedDate)
.count();
// 封装数据
FacPhotovoltaicPanelColumn column = new FacPhotovoltaicPanelColumn();
column.setProjectId(projectId);
column.setMatrixId(matrixId);
column.setName(formattedDate + "." + (count + 1));
column.setProgressCategoryId(progressCategoryId);
column.setProgressCategoryName(name);
column.setRemark("手动添加");
isSave = photovoltaicPanelColumnService.save(column);
}
case PgsProgressCategoryConstant.PHOTOVOLTAIC_PANEL_SUPPORT_WORK_TYPE -> {
// 获取当天已创建的设施数量
Long count = photovoltaicPanelSupportService.lambdaQuery()
.eq(FacPhotovoltaicPanelSupport::getProjectId, projectId)
.eq(FacPhotovoltaicPanelSupport::getMatrixId, matrixId)
.eq(FacPhotovoltaicPanelSupport::getProgressCategoryId, progressCategoryId)
.likeRight(FacPhotovoltaicPanelSupport::getName, formattedDate)
.count();
// 封装数据
FacPhotovoltaicPanelSupport support = new FacPhotovoltaicPanelSupport();
support.setProjectId(projectId);
support.setMatrixId(matrixId);
support.setName(formattedDate + "." + (count + 1));
support.setProgressCategoryId(progressCategoryId);
support.setProgressCategoryName(name);
support.setRemark("手动添加");
isSave = photovoltaicPanelSupportService.save(support);
}
case null, default -> throw new ServiceException("不支持的设施类型", HttpStatus.BAD_REQUEST);
}
if (!isSave) {
throw new ServiceException("添加设施失败,数据库异常", HttpStatus.ERROR);
}
// 更新进度类别数量
PgsProgressCategory updateCategory = new PgsProgressCategory();
updateCategory.setId(progressCategoryId);
updateCategory.setTotal(category.getTotal().add(BigDecimal.ONE));
boolean update = this.updateById(updateCategory);
if (!update) {
throw new ServiceException("修改进度类别数量失败,数据库异常", HttpStatus.ERROR);
}
return true;
}
/**
* 批量新增设施批量
*
* @param req 设施信息
* @return 是否新增成功
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean insertBatchFacility(PgsProgressCategoryCreateBatchFacilityReq req) {
Long progressCategoryId = req.getProgressCategoryId();
Integer number = req.getNumber();
PgsProgressCategory category = this.getById(progressCategoryId);
if (category == null) {
throw new ServiceException("对应进度类别不存在", HttpStatus.NOT_FOUND);
}
// 根据类别,新增对应的设施
String workType = category.getWorkType();
String type = workType.split("_")[0];
// 获取当前日期
LocalDate today = LocalDate.now();
// 定义格式化器yyyyMMdd
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
// 格式化日期
String formattedDate = today.format(formatter);
Long projectId = category.getProjectId();
Long matrixId = category.getMatrixId();
String name = category.getName();
switch (type) {
case PgsProgressCategoryConstant.PHOTOVOLTAIC_PANEL_WORK_TYPE -> {
// 获取当天已创建的设施数量
Long count = photovoltaicPanelService.lambdaQuery()
.eq(FacPhotovoltaicPanel::getProjectId, projectId)
.eq(FacPhotovoltaicPanel::getMatrixId, matrixId)
.eq(FacPhotovoltaicPanel::getProgressCategoryId, progressCategoryId)
.likeRight(FacPhotovoltaicPanel::getName, formattedDate)
.count();
// 封装数据
List<FacPhotovoltaicPanel> newList = new ArrayList<>();
for (int i = 1; i <= number; i++) {
FacPhotovoltaicPanel panel = new FacPhotovoltaicPanel();
panel.setProjectId(projectId);
panel.setMatrixId(matrixId);
panel.setName(formattedDate + "." + (count + i));
panel.setProgressCategoryId(progressCategoryId);
panel.setProgressCategoryName(name);
panel.setRemark("手动添加");
newList.add(panel);
}
photovoltaicPanelService.saveBatch(newList);
}
case PgsProgressCategoryConstant.INVERTER_WORK_TYPE -> {
// 获取当天已创建的设施数量
Long count = inverterService.lambdaQuery()
.eq(FacInverter::getProjectId, projectId)
.eq(FacInverter::getMatrixId, matrixId)
.eq(FacInverter::getProgressCategoryId, progressCategoryId)
.likeRight(FacInverter::getName, formattedDate)
.count();
// 封装数据
List<FacInverter> newList = new ArrayList<>();
for (int i = 1; i <= number; i++) {
FacInverter inverter = new FacInverter();
inverter.setProjectId(projectId);
inverter.setMatrixId(matrixId);
inverter.setName(formattedDate + "." + (count + i));
inverter.setProgressCategoryId(progressCategoryId);
inverter.setProgressCategoryName(name);
inverter.setRemark("手动添加");
newList.add(inverter);
}
inverterService.saveBatch(newList);
}
case PgsProgressCategoryConstant.BOX_TRANSFORMER_WORK_TYPE -> {
// 获取当天已创建的设施数量
Long count = boxTransformerService.lambdaQuery()
.eq(FacBoxTransformer::getProjectId, projectId)
.eq(FacBoxTransformer::getMatrixId, matrixId)
.eq(FacBoxTransformer::getProgressCategoryId, progressCategoryId)
.likeRight(FacBoxTransformer::getName, formattedDate)
.count();
// 封装数据
List<FacBoxTransformer> newList = new ArrayList<>();
for (int i = 1; i <= number; i++) {
FacBoxTransformer boxTransformer = new FacBoxTransformer();
boxTransformer.setProjectId(projectId);
boxTransformer.setMatrixId(matrixId);
boxTransformer.setName(formattedDate + "." + (count + i));
boxTransformer.setProgressCategoryId(progressCategoryId);
boxTransformer.setProgressCategoryName(name);
boxTransformer.setRemark("手动添加");
newList.add(boxTransformer);
}
boxTransformerService.saveBatch(newList);
}
case PgsProgressCategoryConstant.PHOTOVOLTAIC_PANEL_POINT_WORK_TYPE -> {
// 获取当天已创建的设施数量
Long count = photovoltaicPanelPointService.lambdaQuery()
.eq(FacPhotovoltaicPanelPoint::getProjectId, projectId)
.eq(FacPhotovoltaicPanelPoint::getMatrixId, matrixId)
.eq(FacPhotovoltaicPanelPoint::getProgressCategoryId, progressCategoryId)
.likeRight(FacPhotovoltaicPanelPoint::getName, formattedDate)
.count();
// 封装数据
List<FacPhotovoltaicPanelPoint> newList = new ArrayList<>();
for (int i = 1; i <= number; i++) {
FacPhotovoltaicPanelPoint point = new FacPhotovoltaicPanelPoint();
point.setProjectId(projectId);
point.setMatrixId(matrixId);
point.setName(formattedDate + "." + (count + i));
point.setProgressCategoryId(progressCategoryId);
point.setProgressCategoryName(name);
point.setRemark("手动添加");
newList.add(point);
}
photovoltaicPanelPointService.saveBatch(newList);
}
case PgsProgressCategoryConstant.PHOTOVOLTAIC_PANEL_COLUMN_WORK_TYPE -> {
// 获取当天已创建的设施数量
Long count = photovoltaicPanelColumnService.lambdaQuery()
.eq(FacPhotovoltaicPanelColumn::getProjectId, projectId)
.eq(FacPhotovoltaicPanelColumn::getMatrixId, matrixId)
.eq(FacPhotovoltaicPanelColumn::getProgressCategoryId, progressCategoryId)
.likeRight(FacPhotovoltaicPanelColumn::getName, formattedDate)
.count();
// 封装数据
List<FacPhotovoltaicPanelColumn> newList = new ArrayList<>();
for (int i = 1; i <= number; i++) {
FacPhotovoltaicPanelColumn column = new FacPhotovoltaicPanelColumn();
column.setProjectId(projectId);
column.setMatrixId(matrixId);
column.setName(formattedDate + "." + (count + i));
column.setProgressCategoryId(progressCategoryId);
column.setProgressCategoryName(name);
column.setRemark("手动添加");
newList.add(column);
}
photovoltaicPanelColumnService.saveBatch(newList);
}
case PgsProgressCategoryConstant.PHOTOVOLTAIC_PANEL_SUPPORT_WORK_TYPE -> {
// 获取当天已创建的设施数量
Long count = photovoltaicPanelSupportService.lambdaQuery()
.eq(FacPhotovoltaicPanelSupport::getProjectId, projectId)
.eq(FacPhotovoltaicPanelSupport::getMatrixId, matrixId)
.eq(FacPhotovoltaicPanelSupport::getProgressCategoryId, progressCategoryId)
.likeRight(FacPhotovoltaicPanelSupport::getName, formattedDate)
.count();
// 封装数据
List<FacPhotovoltaicPanelSupport> newList = new ArrayList<>();
for (int i = 1; i <= number; i++) {
FacPhotovoltaicPanelSupport support = new FacPhotovoltaicPanelSupport();
support.setProjectId(projectId);
support.setMatrixId(matrixId);
support.setName(formattedDate + "." + (count + i));
support.setProgressCategoryId(progressCategoryId);
support.setProgressCategoryName(name);
support.setRemark("手动添加");
newList.add(support);
}
photovoltaicPanelSupportService.saveBatch(newList);
}
case null, default -> throw new ServiceException("不支持的设施类型", HttpStatus.BAD_REQUEST);
}
// 更新进度类别数量
PgsProgressCategory updateCategory = new PgsProgressCategory();
updateCategory.setId(progressCategoryId);
updateCategory.setTotal(category.getTotal().add(BigDecimal.valueOf(number)));
boolean update = this.updateById(updateCategory);
if (!update) {
throw new ServiceException("修改进度类别数量失败,数据库异常", HttpStatus.ERROR);
}
return true;
}
}

View File

@ -116,6 +116,7 @@ public class PgsProgressPlanDetailServiceImpl extends ServiceImpl<PgsProgressPla
@Resource
private IFacPhotovoltaicPanelPartsService photovoltaicPanelPartsService;
@Lazy
@Resource
private IOutConstructionValueService constructionValueService;
@ -352,7 +353,7 @@ public class PgsProgressPlanDetailServiceImpl extends ServiceImpl<PgsProgressPla
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean insertPercentageNumberDetail(PgsProgressPlanDetailCreateReq req) {
public Boolean insertPercentageNumberDetail(PgsProgressPlanDetailCreateReq req, Boolean isCheckout) {
// 校验
BigDecimal finishedNumber = req.getFinishedNumber();
if (finishedNumber == null) {
@ -373,7 +374,7 @@ public class PgsProgressPlanDetailServiceImpl extends ServiceImpl<PgsProgressPla
throw new ServiceException("完成时间不能大于当前时间", HttpStatus.BAD_REQUEST);
}*/
// 判断当前详情是否已提交
if (!progressPlanDetail.getStatus().equals("1")) {
if (isCheckout && !progressPlanDetail.getStatus().equals("1")) {
throw new ServiceException("当前详情已提交至施工产值,无法进行修改", HttpStatus.BAD_REQUEST);
}
Long progressPlanId = progressPlanDetail.getProgressPlanId();
@ -894,7 +895,8 @@ public class PgsProgressPlanDetailServiceImpl extends ServiceImpl<PgsProgressPla
);
// 为每一个项目创建一个施工产值范围
Set<Long> projectIds = planDetailList.stream()
.map(PgsProgressPlanDetail::getProjectId).collect(Collectors.toSet());
.map(PgsProgressPlanDetail::getProjectId)
.collect(Collectors.toSet());
// 获取所有父级项目
List<BusProject> projectList = projectService.listByIds(projectIds);
List<Long> allProjectIds = projectList
@ -934,8 +936,8 @@ public class PgsProgressPlanDetailServiceImpl extends ServiceImpl<PgsProgressPla
long rangeId = IdWorker.getId(range);
range.setId(rangeId);
range.setProjectId(id);
range.setStartDate(startDate);
range.setEndDate(endDate);
range.setStartDate(monday);
range.setEndDate(sunday);
// 获取所有子项目
List<Long> subProject = new ArrayList<>(projectList.stream()
.filter(project -> Objects.equals(project.getPId(), id))
@ -1139,8 +1141,8 @@ public class PgsProgressPlanDetailServiceImpl extends ServiceImpl<PgsProgressPla
}
List<Long> projectIds = projects.stream().map(BusProject::getId).distinct().toList();
// 识别类型:洞、桩、架、架子
List<RecognizerTypeEnum> enumList = List.of(RecognizerTypeEnum.HOLE, RecognizerTypeEnum.PHO,
RecognizerTypeEnum.PILE, RecognizerTypeEnum.SHELVES);
List<RecognizerTypeEnum> enumList = List.of(RecognizerTypeEnum.HOLE, RecognizerTypeEnum.SOLAR,
RecognizerTypeEnum.PILE, RecognizerTypeEnum.BRACKET);
// 调用识别算法
RecognizeVo recognizeVo = null;
try {
@ -1177,11 +1179,11 @@ public class PgsProgressPlanDetailServiceImpl extends ServiceImpl<PgsProgressPla
}
log.info("类型:{},识别到的设施:{},转换坐标:{}", type, value, coordinateList);
// 处理对应设施
if (type.equals(RecognizerTypeEnum.PHO.getValue())) {
if (type.equals(RecognizerTypeEnum.SOLAR.getValue())) {
photovoltaicPanelService.updateFinishNumberByCoordinate(projectIds, coordinateList);
} else if (type.equals(RecognizerTypeEnum.HOLE.getValue())
|| type.equals(RecognizerTypeEnum.PILE.getValue())
|| type.equals(RecognizerTypeEnum.SHELVES.getValue())) {
|| type.equals(RecognizerTypeEnum.BRACKET.getValue())) {
photovoltaicPanelPartsService.updateFinishNumberByCoordinate(projectIds, coordinateList, type);
} else {
log.error("未知设施类型:{}", type);

View File

@ -209,10 +209,13 @@ public class PgsProgressPlanServiceImpl extends ServiceImpl<PgsProgressPlanMappe
throw new ServiceException("删除进度计划失败,数据库异常", HttpStatus.ERROR);
}
// 关联删除分类中记录的计划值
boolean update = progressCategoryService.lambdaUpdate()
.eq(PgsProgressCategory::getId, progressPlan.getProgressCategoryId())
.setSql("plan_total = plan_total - " + progressPlan.getPlanNumber())
.update();
PgsProgressCategory category = progressCategoryService.getById(progressPlan.getProgressCategoryId());
BigDecimal left = category.getPlanTotal().subtract(progressPlan.getPlanNumber());
if (left.compareTo(BigDecimal.ZERO) < 0) {
left = BigDecimal.ZERO;
}
category.setPlanTotal(left);
boolean update = progressCategoryService.updateById(category);
if (!update) {
throw new ServiceException("更新进度分类计划总数量失败,数据库操作失败", HttpStatus.ERROR);
}

View File

@ -3,7 +3,6 @@ package org.dromara.quality.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@ -23,7 +22,6 @@ import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.oss.core.OssClient;
import org.dromara.common.oss.exception.OssException;
import org.dromara.common.oss.factory.OssFactory;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.utils.DocumentUtil;
import org.dromara.project.service.IBusProjectService;
import org.dromara.quality.constant.QltQualityConstant;
@ -172,9 +170,13 @@ public class QltQualityInspectionServiceImpl extends ServiceImpl<QltQualityInspe
// 获取整改情况
long passCount = 0L;
for (QltQualityInspection qualityInspection : qualityInspectionList) {
if (QltQualityInspectionStatusEnum.VERIFICATION.getValue().equals(qualityInspection.getInspectionStatus())
if ("1".equals(qualityInspection.getIsReply())
&& QltQualityInspectionStatusEnum.VERIFICATION.getValue().equals(qualityInspection.getInspectionStatus())
&& QltQualityInspectionVerificationTypeEnum.PASS.getValue().equals(qualityInspection.getVerificationType())) {
passCount++;
} else if ("2".equals(qualityInspection.getIsReply())
&& QltQualityInspectionStatusEnum.RECTIFICATION.getValue().equals(qualityInspection.getInspectionStatus())) {
passCount++;
}
}
gisVo.setList(gisList);
@ -252,7 +254,7 @@ public class QltQualityInspectionServiceImpl extends ServiceImpl<QltQualityInspe
});
}
if("2".equals(req.getVerificationType())){
if ("2".equals(req.getVerificationType())) {
handleFail(oldQualityInspection);
}
// 操作数据库
@ -267,7 +269,7 @@ public class QltQualityInspectionServiceImpl extends ServiceImpl<QltQualityInspe
qualityInspection.setRectificationTime(null);
qualityInspection.setRectificationFile(null);
qualityInspection.setRectificationImgFile(null);
qualityInspection.setVersion(qualityInspection.getVersion()+1);
qualityInspection.setVersion(qualityInspection.getVersion() + 1);
save(qualityInspection);
}
@ -359,9 +361,9 @@ public class QltQualityInspectionServiceImpl extends ServiceImpl<QltQualityInspe
Long projectId = req.getProjectId();
String inspectionType = req.getInspectionType();
String inspectionStatus = req.getInspectionStatus();
if(StrUtil.isNotBlank(inspectionStatus) ){
if (StrUtil.isNotBlank(inspectionStatus)) {
String[] split = inspectionStatus.split(",");
lqw.in( QltQualityInspection::getInspectionStatus, Arrays.asList(split));
lqw.in(QltQualityInspection::getInspectionStatus, Arrays.asList(split));
}
String rectificationUnit = req.getRectificationUnit();
Long rectificationId = req.getRectificationId();

View File

@ -11,7 +11,6 @@ import org.dromara.common.core.utils.ObjectUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.manager.recognizermanager.enums.RecognizerTypeEnum;
import org.dromara.manager.recognizermanager.vo.RecognizeTargetVo;
import org.dromara.project.service.IBusProjectService;
@ -194,15 +193,7 @@ public class HseRecognizeRecordServiceImpl extends ServiceImpl<HseRecognizeRecor
Date createTime = req.getCreateTime();
lqw.eq(ObjectUtils.isNotEmpty(projectId), HseRecognizeRecord::getProjectId, projectId);
lqw.eq(StringUtils.isNotBlank(recordCategory), HseRecognizeRecord::getRecordCategory, recordCategory);
if (StringUtils.isNotBlank(violationType)) {
lqw.likeRight(HseRecognizeRecord::getViolationType, violationType + ",")
.or()
.likeLeft(HseRecognizeRecord::getViolationType, "," + violationType)
.or()
.like(HseRecognizeRecord::getViolationType, "," + violationType + ",")
.or()
.eq(HseRecognizeRecord::getViolationType, violationType);
}
lqw.eq(StringUtils.isNotBlank(violationType), HseRecognizeRecord::getViolationType, violationType);
lqw.like(StringUtils.isNotBlank(description), HseRecognizeRecord::getDescription, description);
if (createTime != null) {
// 构造当天的起始和结束时间
@ -216,6 +207,7 @@ public class HseRecognizeRecordServiceImpl extends ServiceImpl<HseRecognizeRecor
lqw.ge(HseRecognizeRecord::getCreateTime, start)
.lt(HseRecognizeRecord::getCreateTime, end);
}
lqw.orderByDesc(HseRecognizeRecord::getCreateTime);
return lqw;
}

View File

@ -30,6 +30,7 @@ import org.dromara.project.domain.BusProjectTeam;
import org.dromara.project.service.IBusProjectService;
import org.dromara.project.service.IBusProjectTeamMemberService;
import org.dromara.project.service.IBusProjectTeamService;
import org.dromara.quality.domain.enums.QltQualityInspectionStatusEnum;
import org.dromara.safety.constant.HseSafetyConstant;
import org.dromara.safety.domain.HseSafetyInspection;
import org.dromara.safety.domain.HseTeamMeeting;
@ -222,23 +223,20 @@ public class HseSafetyInspectionServiceImpl extends ServiceImpl<HseSafetyInspect
.list();
long passCount = 0L;
for (HseSafetyInspection safetyInspection : safetyInspectionList) {
if (HseSafetyInspectionStatusEnum.REVIEW.getValue().equals(safetyInspection.getStatus())
if ("1".equals(safetyInspection.getIsReply())
&& HseSafetyInspectionStatusEnum.REVIEW.getValue().equals(safetyInspection.getStatus())
&& HseSafetyInspectionReviewTypeEnum.PASS.getValue().equals(safetyInspection.getReviewType())) {
passCount++;
} else if ("2".equals(safetyInspection.getIsReply())
&& QltQualityInspectionStatusEnum.RECTIFICATION.getValue().equals(safetyInspection.getStatus())
) {
passCount++;
}
}
int safetyInspectionCount = safetyInspectionList.stream()
.filter(inspection -> inspection.getIsReply().equals("2"))
.toList()
.size();
int correctSituationCount = safetyInspectionList.stream()
.filter(inspection -> inspection.getIsReply().equals("1") && !inspection.getStatus().equals("1"))
.toList()
.size();
gisVo.setTeamMeetingCount((long) teamMeetings.size());
gisVo.setSafetyInspectionCount((long) safetyInspectionCount);
gisVo.setCorrectSituationCount((long) correctSituationCount);
gisVo.setCorrectSituation(String.format("%.2f", correctSituationCount * 100.0 / safetyInspectionCount));
gisVo.setSafetyInspectionCount((long) safetyInspectionList.size());
gisVo.setCorrectSituationCount(passCount);
gisVo.setCorrectSituation(String.format("%.2f", passCount * 100.0 / safetyInspectionList.size()));
return gisVo;
}