修改bug

This commit is contained in:
lcj
2025-09-02 20:30:01 +08:00
parent e8da350f0b
commit f584e6233c
19 changed files with 257 additions and 73 deletions

View File

@ -26,7 +26,7 @@ import java.util.stream.Collectors;
* @date 2025/6/18 15:59
*/
@Slf4j
//@Component
@Component
public class IncSyncYs7DeviceCapturePicData {
@Resource

View File

@ -31,7 +31,6 @@ public class MatMaterialIssueItemDto {
/**
* 名称
*/
@NotBlank(message = "名称不能为空")
private String name;
/**
@ -49,7 +48,6 @@ public class MatMaterialIssueItemDto {
/**
* 库存
*/
@NotNull(message = "库存数量不能为空")
private BigDecimal stockQuantity;
/**
@ -61,7 +59,6 @@ public class MatMaterialIssueItemDto {
/**
* 剩余
*/
@NotNull(message = "剩余数量不能为空")
private BigDecimal remainingQuantity;
/**

View File

@ -239,7 +239,6 @@ public class MatMaterialIssueServiceImpl extends ServiceImpl<MatMaterialIssueMap
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean insertByBo(MatMaterialIssueCreateReq req) {
String nickname = LoginHelper.getLoginUser().getNickname();
MatMaterialIssue materialIssue = new MatMaterialIssue();
BeanUtils.copyProperties(req, materialIssue);
validEntityBeforeSave(materialIssue, true);

View File

@ -211,7 +211,12 @@ public class OthYs7DeviceImgServiceImpl extends ServiceImpl<OthYs7DeviceImgMappe
othYs7DeviceImg.setUrl(ossUrl);
// 将抓取的图片进行识别
List<RecognizerTypeEnum> recTypes = List.of(RecognizerTypeEnum.HARDHAT, RecognizerTypeEnum.SMOKING, RecognizerTypeEnum.FIRE);
RecognizeVo recognizeVo = recognizerManager.recognize(ossUrl, recTypes);
RecognizeVo recognizeVo = null;
try {
recognizeVo = recognizerManager.recognize(ossUrl, recTypes);
} catch (Exception e) {
log.error("图片识别异常", e);
}
if (recognizeVo != null && recognizeVo.getHasTarget().equals(RecognizerHasTargetEnum.YES.getValue())) {
// 记录识别信息
HseRecognizeRecordCreateDto record = new HseRecognizeRecordCreateDto();

View File

@ -119,8 +119,8 @@ public class BusProjectController extends BaseController {
*/
@SaCheckPermission("project:project:listProjectContractorList")
@GetMapping("/list/project/contractorList")
public R<List<BusProjectContractorListVo>> listProjectContractorList() {
return R.ok(projectService.queryProjectContractorList());
public R<List<BusProjectContractorTeamListVo>> listProjectContractorList() {
return R.ok(projectService.queryContractorTeamList());
}
/**

View File

@ -1,10 +1,7 @@
package org.dromara.project.controller.app;
import cn.dev33.satoken.annotation.SaCheckPermission;
import jakarta.annotation.Resource;
import jakarta.validation.constraints.NotNull;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
@ -12,11 +9,8 @@ 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.common.web.core.BaseController;
import org.dromara.contractor.domain.SubConstructionUser;
import org.dromara.contractor.service.ISubConstructionUserService;
import org.dromara.project.domain.bo.BusAttendanceBo;
import org.dromara.project.domain.dto.leave.BusLeaveAddReq;
import org.dromara.project.domain.dto.leave.BusLeaveManagerReviewReq;
import org.dromara.project.domain.dto.leave.BusLeaveQueryReq;
import org.dromara.project.domain.vo.leave.BusLeaveVo;
import org.dromara.project.service.IBusLeaveService;
@ -24,6 +18,8 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/**
* 施工人员请假申请 app 接口
*
* @author lilemy
* @date 2025-07-24 14:51
*/
@ -60,11 +56,4 @@ public class BusLeaveAppController extends BaseController {
}
}

View File

@ -1,11 +1,13 @@
package org.dromara.project.controller.app;
import jakarta.annotation.Resource;
import jakarta.validation.constraints.NotNull;
import org.dromara.common.core.domain.R;
import org.dromara.project.domain.vo.project.BusProjectContractorListVo;
import org.dromara.project.domain.vo.project.BusProjectContractorTeamListVo;
import org.dromara.project.service.IBusProjectService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@ -26,10 +28,19 @@ public class BusProjectAppController {
private IBusProjectService projectService;
/**
* 查询项目以及项目下的分包公司列表
* 查询项目以及项目下的分包公司、班组列表
*/
@GetMapping("/list/project/contractorList")
public R<List<BusProjectContractorListVo>> listProjectContractorList() {
return R.ok(projectService.queryProjectContractorList());
@GetMapping("/contractorTeamList")
public R<List<BusProjectContractorTeamListVo>> listContractorList() {
return R.ok(projectService.queryContractorTeamList());
}
/**
* 根据 id 查询项目以及项目下的分包公司、班组列表
*/
@GetMapping("/contractorTeamList/{id}")
public R<BusProjectContractorTeamListVo> listContractorListById(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(projectService.queryContractorTeamListById(id));
}
}

View File

@ -9,9 +9,7 @@ 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.common.web.core.BaseController;
import org.dromara.contractor.domain.SubConstructionUser;
import org.dromara.contractor.service.ISubConstructionUserService;
import org.dromara.project.domain.dto.leave.BusLeaveAddReq;
import org.dromara.project.domain.dto.reissuecard.BusReissueCardAddReq;
import org.dromara.project.domain.dto.reissuecard.BusReissueCardQueryReq;
import org.dromara.project.domain.vo.reissuecard.BusReissueCardVo;
@ -20,6 +18,8 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/**
* 施工人员补卡申请 app 接口
*
* @author lilemy
* @date 2025-07-24 14:51
*/

View File

@ -12,7 +12,7 @@ import java.util.List;
* @date 2025/3/31 16:16
*/
@Data
public class BusProjectContractorListVo implements Serializable {
public class BusProjectContractorTeamListVo implements Serializable {
@Serial
private static final long serialVersionUID = 3089953733712392942L;
@ -32,4 +32,9 @@ public class BusProjectContractorListVo implements Serializable {
*/
private List<IdAndNameVO> contractorList;
/**
* 项目下的班组列表
*/
private List<IdAndNameVO> teamList;
}

View File

@ -63,11 +63,19 @@ public interface IBusProjectService extends IService<BusProject> {
List<BusSubProjectMatrixVo> querySubProjectMatrixList(Long id);
/**
* 查询当前登录用户项目列表以及项目列表下的分包公司列表
* 查询当前登录用户项目列表以及项目列表下的分包公司、班组列表
*
* @return 项目列表以及项目列表下的分包公司列表
* @return 项目列表以及项目列表下的分包公司、班组列表
*/
List<BusProjectContractorListVo> queryProjectContractorList();
List<BusProjectContractorTeamListVo> queryContractorTeamList();
/**
* 根据项目id查询项目下的分包公司、班组列表
*
* @param id 项目id
* @return 项目下的分包公司、班组列表
*/
BusProjectContractorTeamListVo queryContractorTeamListById(Long id);
/**
* 新增项目

View File

@ -44,18 +44,12 @@ import org.dromara.progress.domain.vo.progresscategory.PgsProgressCategoryStruct
import org.dromara.progress.service.IPgsProgressCategoryService;
import org.dromara.progress.service.IPgsProgressCategoryTemplateService;
import org.dromara.project.constant.BusProjectConstant;
import org.dromara.project.domain.BusProject;
import org.dromara.project.domain.BusProjectFile;
import org.dromara.project.domain.BusProjectPunchrange;
import org.dromara.project.domain.BusUserProjectRelevancy;
import org.dromara.project.domain.*;
import org.dromara.project.domain.bo.Punchrange;
import org.dromara.project.domain.dto.project.*;
import org.dromara.project.domain.vo.project.*;
import org.dromara.project.mapper.BusProjectMapper;
import org.dromara.project.service.IBusProjectFileService;
import org.dromara.project.service.IBusProjectPunchrangeService;
import org.dromara.project.service.IBusProjectService;
import org.dromara.project.service.IBusUserProjectRelevancyService;
import org.dromara.project.service.*;
import org.dromara.quality.service.IQltKnowledgeDocumentService;
import org.dromara.safety.service.IHseKnowledgeDocumentService;
import org.dromara.workflow.service.IFlwDefinitionService;
@ -138,6 +132,10 @@ public class BusProjectServiceImpl extends ServiceImpl<BusProjectMapper, BusProj
@Resource
private IPgsProgressCategoryService progressCategoryService;
@Lazy
@Resource
private IBusProjectTeamService projectTeamService;
private final Cache<String, String> WEATHER_CACHE =
Caffeine.newBuilder().initialCapacity(1024)
.maximumSize(10000L)
@ -274,12 +272,12 @@ public class BusProjectServiceImpl extends ServiceImpl<BusProjectMapper, BusProj
}
/**
* 查询当前登录用户项目列表以及项目列表下的分包公司列表
* 查询当前登录用户项目列表以及项目列表下的分包公司、班组列表
*
* @return 项目列表以及项目列表下的分包公司列表
* @return 项目列表以及项目列表下的分包公司、班组列表
*/
@Override
public List<BusProjectContractorListVo> queryProjectContractorList() {
public List<BusProjectContractorTeamListVo> queryContractorTeamList() {
Long userId = LoginHelper.getUserId();
// 获取当前登录用户的项目列表
LambdaQueryWrapper<BusUserProjectRelevancy> userProjectRelevancyLqw = Wrappers.lambdaQuery(BusUserProjectRelevancy.class)
@ -299,7 +297,7 @@ public class BusProjectServiceImpl extends ServiceImpl<BusProjectMapper, BusProj
return !CollUtil.isEmpty(contractorList); // 过滤掉没有分包单位的项目
})
.map(project -> {
BusProjectContractorListVo projectContractorListResp = new BusProjectContractorListVo();
BusProjectContractorTeamListVo projectContractorListResp = new BusProjectContractorTeamListVo();
// 添加项目信息
projectContractorListResp.setId(project.getId());
projectContractorListResp.setProjectName(project.getProjectName());
@ -312,6 +310,45 @@ public class BusProjectServiceImpl extends ServiceImpl<BusProjectMapper, BusProj
}).toList();
}
/**
* 根据项目id查询项目下的分包公司、班组列表
*
* @param id 项目id
* @return 项目下的分包公司、班组列表
*/
@Override
public BusProjectContractorTeamListVo queryContractorTeamListById(Long id) {
BusProjectContractorTeamListVo vo = new BusProjectContractorTeamListVo();
BusProject project = this.getById(id);
if (project == null) {
throw new ServiceException("对应项目不存在", HttpStatus.NOT_FOUND);
}
vo.setId(id);
vo.setProjectName(project.getProjectName());
// 获取分包信息
List<SubContractor> contractorList = contractorService.lambdaQuery()
.eq(SubContractor::getProjectId, id)
.list();
if (CollUtil.isEmpty(contractorList)) {
return vo;
}
List<IdAndNameVO> idAndNameVOS = contractorList.stream()
.map(contractor -> IdAndNameVO.build(contractor.getId(), contractor.getName())).toList();
vo.setContractorList(idAndNameVOS);
// 获取班组信息
List<BusProjectTeam> teamList = projectTeamService.lambdaQuery()
.eq(BusProjectTeam::getProjectId, id)
.list();
if (CollUtil.isEmpty(teamList)) {
return vo;
}
List<IdAndNameVO> teamIdAndNameVOS = teamList.stream()
.map(projectTeam -> IdAndNameVO.build(projectTeam.getId(), projectTeam.getTeamName()))
.toList();
vo.setTeamList(teamIdAndNameVOS);
return vo;
}
/**
* 新增项目
*

View File

@ -0,0 +1,70 @@
package org.dromara.safety.controller.app;
import jakarta.annotation.Resource;
import jakarta.validation.constraints.NotNull;
import org.dromara.common.core.domain.R;
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.safety.domain.dto.violationrecord.HseViolationRecordCreateHandlerReq;
import org.dromara.safety.domain.dto.violationrecord.HseViolationRecordQueryReq;
import org.dromara.safety.domain.dto.violationrecord.HseViolationRecordRectificationReq;
import org.dromara.safety.domain.vo.violationrecord.HseViolationRecordVo;
import org.dromara.safety.service.IHseViolationRecordService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/**
* 违规记录 app 接口
*
* @author lilemy
* @date 2025-09-02 18:17
*/
@Validated
@RestController
@RequestMapping("/app/safety/violationRecord")
public class HseViolationRecordAppController extends BaseController {
@Resource
private IHseViolationRecordService violationRecordService;
/**
* 查询违规记录列表
*/
@GetMapping("/list")
public TableDataInfo<HseViolationRecordVo> queryPageList(HseViolationRecordQueryReq req, PageQuery pageQuery) {
return violationRecordService.queryPageList(req, pageQuery);
}
/**
* 获取违规记录详细信息
*/
@GetMapping("/{id}")
public R<HseViolationRecordVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(violationRecordService.queryById(id));
}
/**
* 新增违规记录处理人
*/
@Log(title = "违规记录", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping("/handler")
public R<Void> insertHandler(@Validated @RequestBody HseViolationRecordCreateHandlerReq req) {
return toAjax(violationRecordService.insertHandler(req));
}
/**
* 新增违规记录整改
*/
@Log(title = "违规记录", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping("/rectification")
public R<Void> insertRectification(@Validated @RequestBody HseViolationRecordRectificationReq req) {
return toAjax(violationRecordService.insertRectification(req));
}
}

View File

@ -7,6 +7,7 @@ import lombok.EqualsAndHashCode;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import java.io.Serial;
import java.time.LocalDate;
import java.util.Date;
/**
@ -72,7 +73,7 @@ public class HseViolationRecord extends BaseEntity {
/**
* 处理期限
*/
private Date disposeDeadline;
private LocalDate disposeDeadline;
/**
* 处理时间
@ -89,6 +90,11 @@ public class HseViolationRecord extends BaseEntity {
*/
private Date rectificationTime;
/**
* 整改附件
*/
private String rectificationFile;
/**
* 复查情况
*/

View File

@ -1,15 +1,13 @@
package org.dromara.safety.domain.dto.violationrecord;
import com.fasterxml.jackson.annotation.JsonFormat;
import jakarta.validation.constraints.Future;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
import java.time.LocalDate;
/**
* @author lilemy
@ -49,9 +47,7 @@ public class HseViolationRecordCreateHandlerReq implements Serializable {
*/
@NotNull(message = "处理期限不能为空")
@Future(message = "处理期限不能小于当前时间")
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
private Date disposeDeadline;
private LocalDate disposeDeadline;
/**
* 备注

View File

@ -1,11 +1,10 @@
package org.dromara.safety.domain.dto.violationrecord;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
import java.time.LocalDate;
/**
* @author lilemy
@ -17,11 +16,6 @@ public class HseViolationRecordQueryReq implements Serializable {
@Serial
private static final long serialVersionUID = 1084576574388146447L;
/**
* 主键id
*/
private Long id;
/**
* 项目id
*/
@ -35,8 +29,7 @@ public class HseViolationRecordQueryReq implements Serializable {
/**
* 违章时间
*/
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date violationTime;
private LocalDate violationTime;
/**
* 整改单位(1分包 2班组)

View File

@ -0,0 +1,36 @@
package org.dromara.safety.domain.dto.violationrecord;
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-09-02 18:39
*/
@Data
public class HseViolationRecordRectificationReq implements Serializable {
@Serial
private static final long serialVersionUID = 8509850792799321449L;
/**
* 主键id
*/
@NotNull(message = "主键不能为空")
private Long id;
/**
* 整改措施
*/
@NotBlank(message = "整改措施不能为空")
private String measure;
/**
* 整改附件
*/
private String rectificationFile;
}

View File

@ -9,6 +9,7 @@ import org.dromara.safety.domain.HseViolationRecord;
import org.dromara.safety.domain.dto.violationrecord.HseViolationRecordCreateDto;
import org.dromara.safety.domain.dto.violationrecord.HseViolationRecordCreateHandlerReq;
import org.dromara.safety.domain.dto.violationrecord.HseViolationRecordQueryReq;
import org.dromara.safety.domain.dto.violationrecord.HseViolationRecordRectificationReq;
import org.dromara.safety.domain.vo.violationrecord.HseViolationRecordVo;
import java.util.Collection;
@ -94,4 +95,11 @@ public interface IHseViolationRecordService extends IService<HseViolationRecord>
*/
Page<HseViolationRecordVo> getVoPage(Page<HseViolationRecord> violationRecordPage);
/**
* 新增违章整改信息
*
* @param req 违章整改信息
* @return 是否新增成功
*/
Boolean insertRectification(HseViolationRecordRectificationReq req);
}

View File

@ -14,6 +14,7 @@ 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.common.sse.config.SseProperties;
import org.dromara.common.sse.dto.SeeMessageContentDto;
import org.dromara.common.sse.dto.SseMessageDto;
@ -25,6 +26,7 @@ import org.dromara.safety.domain.HseViolationRecord;
import org.dromara.safety.domain.dto.violationrecord.HseViolationRecordCreateDto;
import org.dromara.safety.domain.dto.violationrecord.HseViolationRecordCreateHandlerReq;
import org.dromara.safety.domain.dto.violationrecord.HseViolationRecordQueryReq;
import org.dromara.safety.domain.dto.violationrecord.HseViolationRecordRectificationReq;
import org.dromara.safety.domain.vo.violationrecord.HseViolationRecordVo;
import org.dromara.safety.mapper.HseViolationRecordMapper;
import org.dromara.safety.service.IHseRecognizeRecordService;
@ -40,7 +42,6 @@ import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.*;
import java.util.stream.Collectors;
@ -298,24 +299,17 @@ public class HseViolationRecordServiceImpl extends ServiceImpl<HseViolationRecor
if (req == null) {
return lqw;
}
Long id = req.getId();
Long projectId = req.getProjectId();
String violationType = req.getViolationType();
Date violationTime = req.getViolationTime();
lqw.eq(ObjectUtils.isNotEmpty(id), HseViolationRecord::getId, id);
LocalDate violationTime = req.getViolationTime();
lqw.eq(ObjectUtils.isNotEmpty(projectId), HseViolationRecord::getProjectId, projectId);
lqw.eq(StringUtils.isNotBlank(violationType), HseViolationRecord::getViolationType, violationType);
if (violationTime != null) {
// 构造当天的起始和结束时间
LocalDate localDate = violationTime.toInstant()
.atZone(ZoneId.systemDefault())
.toLocalDate();
LocalDateTime startOfDay = localDate.atStartOfDay();
LocalDateTime startOfNextDay = localDate.plusDays(1).atStartOfDay();
Date start = Date.from(startOfDay.atZone(ZoneId.systemDefault()).toInstant());
Date end = Date.from(startOfNextDay.atZone(ZoneId.systemDefault()).toInstant());
lqw.ge(HseViolationRecord::getViolationTime, start)
.lt(HseViolationRecord::getViolationTime, end);
LocalDateTime startOfDay = violationTime.atStartOfDay();
LocalDateTime startOfNextDay = violationTime.plusDays(1).atStartOfDay();
lqw.ge(HseViolationRecord::getViolationTime, startOfDay)
.lt(HseViolationRecord::getViolationTime, startOfNextDay);
}
return lqw;
}
@ -368,4 +362,29 @@ public class HseViolationRecordServiceImpl extends ServiceImpl<HseViolationRecor
violationRecordVoPage.setRecords(violationRecordVoList);
return violationRecordVoPage;
}
/**
* 新增违章整改信息
*
* @param req 违章整改信息
* @return 是否新增成功
*/
@Override
public Boolean insertRectification(HseViolationRecordRectificationReq req) {
Long id = req.getId();
HseViolationRecord violationRecord = this.getById(id);
if (violationRecord == null) {
throw new ServiceException("违规记录信息不存在", HttpStatus.BAD_REQUEST);
}
Long correctorId = violationRecord.getCorrectorId();
// 只有指定用户可以整改
Long userId = LoginHelper.getUserId();
if (!correctorId.equals(userId)) {
throw new ServiceException("当前用户不是指定整改人", HttpStatus.BAD_REQUEST);
}
// 填充默认值
violationRecord.setRectificationTime(new Date());
// 操作数据库
return this.updateById(violationRecord);
}
}

View File

@ -135,6 +135,11 @@ public class SysRoleServiceImpl implements ISysRoleService, RoleService {
@Override
public List<SysProjectRolePermissionVo> selectRolePermissionByUserId(Long userId) {
List<ProjectRolesItem> items = baseMapper.selectProjectRolesByUserId(userId);
// 过滤掉项目id为null的数据
items = items.stream().filter(item -> item.getProjectId() != null).toList();
if (CollUtil.isEmpty(items)) {
return new ArrayList<>();
}
return items.stream()
.filter(Objects::nonNull) // 保证不为空
.peek(item -> {