修改bug
This commit is contained in:
		| @ -26,7 +26,7 @@ import java.util.stream.Collectors; | |||||||
|  * @date 2025/6/18 15:59 |  * @date 2025/6/18 15:59 | ||||||
|  */ |  */ | ||||||
| @Slf4j | @Slf4j | ||||||
| //@Component | @Component | ||||||
| public class IncSyncYs7DeviceCapturePicData { | public class IncSyncYs7DeviceCapturePicData { | ||||||
|  |  | ||||||
|     @Resource |     @Resource | ||||||
|  | |||||||
| @ -31,7 +31,6 @@ public class MatMaterialIssueItemDto { | |||||||
|     /** |     /** | ||||||
|      * 名称 |      * 名称 | ||||||
|      */ |      */ | ||||||
|     @NotBlank(message = "名称不能为空") |  | ||||||
|     private String name; |     private String name; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
| @ -49,7 +48,6 @@ public class MatMaterialIssueItemDto { | |||||||
|     /** |     /** | ||||||
|      * 库存 |      * 库存 | ||||||
|      */ |      */ | ||||||
|     @NotNull(message = "库存数量不能为空") |  | ||||||
|     private BigDecimal stockQuantity; |     private BigDecimal stockQuantity; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
| @ -61,7 +59,6 @@ public class MatMaterialIssueItemDto { | |||||||
|     /** |     /** | ||||||
|      * 剩余 |      * 剩余 | ||||||
|      */ |      */ | ||||||
|     @NotNull(message = "剩余数量不能为空") |  | ||||||
|     private BigDecimal remainingQuantity; |     private BigDecimal remainingQuantity; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|  | |||||||
| @ -239,7 +239,6 @@ public class MatMaterialIssueServiceImpl extends ServiceImpl<MatMaterialIssueMap | |||||||
|     @Override |     @Override | ||||||
|     @Transactional(rollbackFor = Exception.class) |     @Transactional(rollbackFor = Exception.class) | ||||||
|     public Boolean insertByBo(MatMaterialIssueCreateReq req) { |     public Boolean insertByBo(MatMaterialIssueCreateReq req) { | ||||||
|         String nickname = LoginHelper.getLoginUser().getNickname(); |  | ||||||
|         MatMaterialIssue materialIssue = new MatMaterialIssue(); |         MatMaterialIssue materialIssue = new MatMaterialIssue(); | ||||||
|         BeanUtils.copyProperties(req, materialIssue); |         BeanUtils.copyProperties(req, materialIssue); | ||||||
|         validEntityBeforeSave(materialIssue, true); |         validEntityBeforeSave(materialIssue, true); | ||||||
|  | |||||||
| @ -211,7 +211,12 @@ public class OthYs7DeviceImgServiceImpl extends ServiceImpl<OthYs7DeviceImgMappe | |||||||
|                 othYs7DeviceImg.setUrl(ossUrl); |                 othYs7DeviceImg.setUrl(ossUrl); | ||||||
|                 // 将抓取的图片进行识别 |                 // 将抓取的图片进行识别 | ||||||
|                 List<RecognizerTypeEnum> recTypes = List.of(RecognizerTypeEnum.HARDHAT, RecognizerTypeEnum.SMOKING, RecognizerTypeEnum.FIRE); |                 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())) { |                 if (recognizeVo != null && recognizeVo.getHasTarget().equals(RecognizerHasTargetEnum.YES.getValue())) { | ||||||
|                     // 记录识别信息 |                     // 记录识别信息 | ||||||
|                     HseRecognizeRecordCreateDto record = new HseRecognizeRecordCreateDto(); |                     HseRecognizeRecordCreateDto record = new HseRecognizeRecordCreateDto(); | ||||||
|  | |||||||
| @ -119,8 +119,8 @@ public class BusProjectController extends BaseController { | |||||||
|      */ |      */ | ||||||
|     @SaCheckPermission("project:project:listProjectContractorList") |     @SaCheckPermission("project:project:listProjectContractorList") | ||||||
|     @GetMapping("/list/project/contractorList") |     @GetMapping("/list/project/contractorList") | ||||||
|     public R<List<BusProjectContractorListVo>> listProjectContractorList() { |     public R<List<BusProjectContractorTeamListVo>> listProjectContractorList() { | ||||||
|         return R.ok(projectService.queryProjectContractorList()); |         return R.ok(projectService.queryContractorTeamList()); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|  | |||||||
| @ -1,10 +1,7 @@ | |||||||
| package org.dromara.project.controller.app; | package org.dromara.project.controller.app; | ||||||
|  |  | ||||||
| import cn.dev33.satoken.annotation.SaCheckPermission; |  | ||||||
| import jakarta.annotation.Resource; | import jakarta.annotation.Resource; | ||||||
| import jakarta.validation.constraints.NotNull; |  | ||||||
| import org.dromara.common.core.domain.R; | 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.idempotent.annotation.RepeatSubmit; | ||||||
| import org.dromara.common.log.annotation.Log; | import org.dromara.common.log.annotation.Log; | ||||||
| import org.dromara.common.log.enums.BusinessType; | 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.mybatis.core.page.TableDataInfo; | ||||||
| import org.dromara.common.satoken.utils.LoginHelper; | import org.dromara.common.satoken.utils.LoginHelper; | ||||||
| import org.dromara.common.web.core.BaseController; | import org.dromara.common.web.core.BaseController; | ||||||
| import org.dromara.contractor.domain.SubConstructionUser; |  | ||||||
| import org.dromara.contractor.service.ISubConstructionUserService; | 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.BusLeaveAddReq; | ||||||
| import org.dromara.project.domain.dto.leave.BusLeaveManagerReviewReq; |  | ||||||
| import org.dromara.project.domain.dto.leave.BusLeaveQueryReq; | import org.dromara.project.domain.dto.leave.BusLeaveQueryReq; | ||||||
| import org.dromara.project.domain.vo.leave.BusLeaveVo; | import org.dromara.project.domain.vo.leave.BusLeaveVo; | ||||||
| import org.dromara.project.service.IBusLeaveService; | import org.dromara.project.service.IBusLeaveService; | ||||||
| @ -24,6 +18,8 @@ import org.springframework.validation.annotation.Validated; | |||||||
| import org.springframework.web.bind.annotation.*; | import org.springframework.web.bind.annotation.*; | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  |  * 施工人员请假申请 app 接口 | ||||||
|  |  * | ||||||
|  * @author lilemy |  * @author lilemy | ||||||
|  * @date 2025-07-24 14:51 |  * @date 2025-07-24 14:51 | ||||||
|  */ |  */ | ||||||
| @ -60,11 +56,4 @@ public class BusLeaveAppController extends BaseController { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| } | } | ||||||
|  | |||||||
| @ -1,11 +1,13 @@ | |||||||
| package org.dromara.project.controller.app; | package org.dromara.project.controller.app; | ||||||
|  |  | ||||||
| import jakarta.annotation.Resource; | import jakarta.annotation.Resource; | ||||||
|  | import jakarta.validation.constraints.NotNull; | ||||||
| import org.dromara.common.core.domain.R; | 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.dromara.project.service.IBusProjectService; | ||||||
| import org.springframework.validation.annotation.Validated; | import org.springframework.validation.annotation.Validated; | ||||||
| import org.springframework.web.bind.annotation.GetMapping; | 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.RequestMapping; | ||||||
| import org.springframework.web.bind.annotation.RestController; | import org.springframework.web.bind.annotation.RestController; | ||||||
|  |  | ||||||
| @ -26,10 +28,19 @@ public class BusProjectAppController { | |||||||
|     private IBusProjectService projectService; |     private IBusProjectService projectService; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * 查询项目以及项目下的分包公司列表 |      * 查询项目以及项目下的分包公司、班组列表 | ||||||
|      */ |      */ | ||||||
|     @GetMapping("/list/project/contractorList") |     @GetMapping("/contractorTeamList") | ||||||
|     public R<List<BusProjectContractorListVo>> listProjectContractorList() { |     public R<List<BusProjectContractorTeamListVo>> listContractorList() { | ||||||
|         return R.ok(projectService.queryProjectContractorList()); |         return R.ok(projectService.queryContractorTeamList()); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 根据 id 查询项目以及项目下的分包公司、班组列表 | ||||||
|  |      */ | ||||||
|  |     @GetMapping("/contractorTeamList/{id}") | ||||||
|  |     public R<BusProjectContractorTeamListVo> listContractorListById(@NotNull(message = "主键不能为空") | ||||||
|  |                                                                     @PathVariable Long id) { | ||||||
|  |         return R.ok(projectService.queryContractorTeamListById(id)); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -9,9 +9,7 @@ import org.dromara.common.mybatis.core.page.PageQuery; | |||||||
| import org.dromara.common.mybatis.core.page.TableDataInfo; | import org.dromara.common.mybatis.core.page.TableDataInfo; | ||||||
| import org.dromara.common.satoken.utils.LoginHelper; | import org.dromara.common.satoken.utils.LoginHelper; | ||||||
| import org.dromara.common.web.core.BaseController; | import org.dromara.common.web.core.BaseController; | ||||||
| import org.dromara.contractor.domain.SubConstructionUser; |  | ||||||
| import org.dromara.contractor.service.ISubConstructionUserService; | 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.BusReissueCardAddReq; | ||||||
| import org.dromara.project.domain.dto.reissuecard.BusReissueCardQueryReq; | import org.dromara.project.domain.dto.reissuecard.BusReissueCardQueryReq; | ||||||
| import org.dromara.project.domain.vo.reissuecard.BusReissueCardVo; | import org.dromara.project.domain.vo.reissuecard.BusReissueCardVo; | ||||||
| @ -20,6 +18,8 @@ import org.springframework.validation.annotation.Validated; | |||||||
| import org.springframework.web.bind.annotation.*; | import org.springframework.web.bind.annotation.*; | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  |  * 施工人员补卡申请 app 接口 | ||||||
|  |  * | ||||||
|  * @author lilemy |  * @author lilemy | ||||||
|  * @date 2025-07-24 14:51 |  * @date 2025-07-24 14:51 | ||||||
|  */ |  */ | ||||||
|  | |||||||
| @ -12,7 +12,7 @@ import java.util.List; | |||||||
|  * @date 2025/3/31 16:16 |  * @date 2025/3/31 16:16 | ||||||
|  */ |  */ | ||||||
| @Data | @Data | ||||||
| public class BusProjectContractorListVo implements Serializable { | public class BusProjectContractorTeamListVo implements Serializable { | ||||||
| 
 | 
 | ||||||
|     @Serial |     @Serial | ||||||
|     private static final long serialVersionUID = 3089953733712392942L; |     private static final long serialVersionUID = 3089953733712392942L; | ||||||
| @ -32,4 +32,9 @@ public class BusProjectContractorListVo implements Serializable { | |||||||
|      */ |      */ | ||||||
|     private List<IdAndNameVO> contractorList; |     private List<IdAndNameVO> contractorList; | ||||||
| 
 | 
 | ||||||
|  |     /** | ||||||
|  |      * 项目下的班组列表 | ||||||
|  |      */ | ||||||
|  |     private List<IdAndNameVO> teamList; | ||||||
|  | 
 | ||||||
| } | } | ||||||
| @ -63,11 +63,19 @@ public interface IBusProjectService extends IService<BusProject> { | |||||||
|     List<BusSubProjectMatrixVo> querySubProjectMatrixList(Long id); |     List<BusSubProjectMatrixVo> querySubProjectMatrixList(Long id); | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * 查询当前登录用户项目列表以及项目列表下的分包公司列表 |      * 查询当前登录用户项目列表以及项目列表下的分包公司、班组列表 | ||||||
|      * |      * | ||||||
|      * @return 项目列表以及项目列表下的分包公司列表 |      * @return 项目列表以及项目列表下的分包公司、班组列表 | ||||||
|      */ |      */ | ||||||
|     List<BusProjectContractorListVo> queryProjectContractorList(); |     List<BusProjectContractorTeamListVo> queryContractorTeamList(); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 根据项目id查询项目下的分包公司、班组列表 | ||||||
|  |      * | ||||||
|  |      * @param id 项目id | ||||||
|  |      * @return 项目下的分包公司、班组列表 | ||||||
|  |      */ | ||||||
|  |     BusProjectContractorTeamListVo queryContractorTeamListById(Long id); | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * 新增项目 |      * 新增项目 | ||||||
|  | |||||||
| @ -44,18 +44,12 @@ import org.dromara.progress.domain.vo.progresscategory.PgsProgressCategoryStruct | |||||||
| import org.dromara.progress.service.IPgsProgressCategoryService; | import org.dromara.progress.service.IPgsProgressCategoryService; | ||||||
| import org.dromara.progress.service.IPgsProgressCategoryTemplateService; | import org.dromara.progress.service.IPgsProgressCategoryTemplateService; | ||||||
| import org.dromara.project.constant.BusProjectConstant; | import org.dromara.project.constant.BusProjectConstant; | ||||||
| import org.dromara.project.domain.BusProject; | import org.dromara.project.domain.*; | ||||||
| import org.dromara.project.domain.BusProjectFile; |  | ||||||
| import org.dromara.project.domain.BusProjectPunchrange; |  | ||||||
| import org.dromara.project.domain.BusUserProjectRelevancy; |  | ||||||
| import org.dromara.project.domain.bo.Punchrange; | import org.dromara.project.domain.bo.Punchrange; | ||||||
| import org.dromara.project.domain.dto.project.*; | import org.dromara.project.domain.dto.project.*; | ||||||
| import org.dromara.project.domain.vo.project.*; | import org.dromara.project.domain.vo.project.*; | ||||||
| import org.dromara.project.mapper.BusProjectMapper; | import org.dromara.project.mapper.BusProjectMapper; | ||||||
| import org.dromara.project.service.IBusProjectFileService; | import org.dromara.project.service.*; | ||||||
| import org.dromara.project.service.IBusProjectPunchrangeService; |  | ||||||
| import org.dromara.project.service.IBusProjectService; |  | ||||||
| import org.dromara.project.service.IBusUserProjectRelevancyService; |  | ||||||
| import org.dromara.quality.service.IQltKnowledgeDocumentService; | import org.dromara.quality.service.IQltKnowledgeDocumentService; | ||||||
| import org.dromara.safety.service.IHseKnowledgeDocumentService; | import org.dromara.safety.service.IHseKnowledgeDocumentService; | ||||||
| import org.dromara.workflow.service.IFlwDefinitionService; | import org.dromara.workflow.service.IFlwDefinitionService; | ||||||
| @ -138,6 +132,10 @@ public class BusProjectServiceImpl extends ServiceImpl<BusProjectMapper, BusProj | |||||||
|     @Resource |     @Resource | ||||||
|     private IPgsProgressCategoryService progressCategoryService; |     private IPgsProgressCategoryService progressCategoryService; | ||||||
|  |  | ||||||
|  |     @Lazy | ||||||
|  |     @Resource | ||||||
|  |     private IBusProjectTeamService projectTeamService; | ||||||
|  |  | ||||||
|     private final Cache<String, String> WEATHER_CACHE = |     private final Cache<String, String> WEATHER_CACHE = | ||||||
|         Caffeine.newBuilder().initialCapacity(1024) |         Caffeine.newBuilder().initialCapacity(1024) | ||||||
|             .maximumSize(10000L) |             .maximumSize(10000L) | ||||||
| @ -274,12 +272,12 @@ public class BusProjectServiceImpl extends ServiceImpl<BusProjectMapper, BusProj | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * 查询当前登录用户项目列表以及项目列表下的分包公司列表 |      * 查询当前登录用户项目列表以及项目列表下的分包公司、班组列表 | ||||||
|      * |      * | ||||||
|      * @return 项目列表以及项目列表下的分包公司列表 |      * @return 项目列表以及项目列表下的分包公司、班组列表 | ||||||
|      */ |      */ | ||||||
|     @Override |     @Override | ||||||
|     public List<BusProjectContractorListVo> queryProjectContractorList() { |     public List<BusProjectContractorTeamListVo> queryContractorTeamList() { | ||||||
|         Long userId = LoginHelper.getUserId(); |         Long userId = LoginHelper.getUserId(); | ||||||
|         // 获取当前登录用户的项目列表 |         // 获取当前登录用户的项目列表 | ||||||
|         LambdaQueryWrapper<BusUserProjectRelevancy> userProjectRelevancyLqw = Wrappers.lambdaQuery(BusUserProjectRelevancy.class) |         LambdaQueryWrapper<BusUserProjectRelevancy> userProjectRelevancyLqw = Wrappers.lambdaQuery(BusUserProjectRelevancy.class) | ||||||
| @ -299,7 +297,7 @@ public class BusProjectServiceImpl extends ServiceImpl<BusProjectMapper, BusProj | |||||||
|                 return !CollUtil.isEmpty(contractorList); // 过滤掉没有分包单位的项目 |                 return !CollUtil.isEmpty(contractorList); // 过滤掉没有分包单位的项目 | ||||||
|             }) |             }) | ||||||
|             .map(project -> { |             .map(project -> { | ||||||
|                 BusProjectContractorListVo projectContractorListResp = new BusProjectContractorListVo(); |                 BusProjectContractorTeamListVo projectContractorListResp = new BusProjectContractorTeamListVo(); | ||||||
|                 // 添加项目信息 |                 // 添加项目信息 | ||||||
|                 projectContractorListResp.setId(project.getId()); |                 projectContractorListResp.setId(project.getId()); | ||||||
|                 projectContractorListResp.setProjectName(project.getProjectName()); |                 projectContractorListResp.setProjectName(project.getProjectName()); | ||||||
| @ -312,6 +310,45 @@ public class BusProjectServiceImpl extends ServiceImpl<BusProjectMapper, BusProj | |||||||
|             }).toList(); |             }).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; | ||||||
|  |     } | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * 新增项目 |      * 新增项目 | ||||||
|      * |      * | ||||||
|  | |||||||
| @ -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)); | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -7,6 +7,7 @@ import lombok.EqualsAndHashCode; | |||||||
| import org.dromara.common.mybatis.core.domain.BaseEntity; | import org.dromara.common.mybatis.core.domain.BaseEntity; | ||||||
|  |  | ||||||
| import java.io.Serial; | import java.io.Serial; | ||||||
|  | import java.time.LocalDate; | ||||||
| import java.util.Date; | 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 Date rectificationTime; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 整改附件 | ||||||
|  |      */ | ||||||
|  |     private String rectificationFile; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * 复查情况 |      * 复查情况 | ||||||
|      */ |      */ | ||||||
|  | |||||||
| @ -1,15 +1,13 @@ | |||||||
| package org.dromara.safety.domain.dto.violationrecord; | package org.dromara.safety.domain.dto.violationrecord; | ||||||
|  |  | ||||||
| import com.fasterxml.jackson.annotation.JsonFormat; |  | ||||||
| import jakarta.validation.constraints.Future; | import jakarta.validation.constraints.Future; | ||||||
| import jakarta.validation.constraints.NotBlank; | import jakarta.validation.constraints.NotBlank; | ||||||
| import jakarta.validation.constraints.NotNull; | import jakarta.validation.constraints.NotNull; | ||||||
| import lombok.Data; | import lombok.Data; | ||||||
| import org.springframework.format.annotation.DateTimeFormat; |  | ||||||
|  |  | ||||||
| import java.io.Serial; | import java.io.Serial; | ||||||
| import java.io.Serializable; | import java.io.Serializable; | ||||||
| import java.util.Date; | import java.time.LocalDate; | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * @author lilemy |  * @author lilemy | ||||||
| @ -49,9 +47,7 @@ public class HseViolationRecordCreateHandlerReq implements Serializable { | |||||||
|      */ |      */ | ||||||
|     @NotNull(message = "处理期限不能为空") |     @NotNull(message = "处理期限不能为空") | ||||||
|     @Future(message = "处理期限不能小于当前时间") |     @Future(message = "处理期限不能小于当前时间") | ||||||
|     @DateTimeFormat(pattern = "yyyy-MM-dd") |     private LocalDate disposeDeadline; | ||||||
|     @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd") |  | ||||||
|     private Date disposeDeadline; |  | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * 备注 |      * 备注 | ||||||
|  | |||||||
| @ -1,11 +1,10 @@ | |||||||
| package org.dromara.safety.domain.dto.violationrecord; | package org.dromara.safety.domain.dto.violationrecord; | ||||||
|  |  | ||||||
| import lombok.Data; | import lombok.Data; | ||||||
| import org.springframework.format.annotation.DateTimeFormat; |  | ||||||
|  |  | ||||||
| import java.io.Serial; | import java.io.Serial; | ||||||
| import java.io.Serializable; | import java.io.Serializable; | ||||||
| import java.util.Date; | import java.time.LocalDate; | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * @author lilemy |  * @author lilemy | ||||||
| @ -17,11 +16,6 @@ public class HseViolationRecordQueryReq implements Serializable { | |||||||
|     @Serial |     @Serial | ||||||
|     private static final long serialVersionUID = 1084576574388146447L; |     private static final long serialVersionUID = 1084576574388146447L; | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * 主键id |  | ||||||
|      */ |  | ||||||
|     private Long id; |  | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * 项目id |      * 项目id | ||||||
|      */ |      */ | ||||||
| @ -35,8 +29,7 @@ public class HseViolationRecordQueryReq implements Serializable { | |||||||
|     /** |     /** | ||||||
|      * 违章时间 |      * 违章时间 | ||||||
|      */ |      */ | ||||||
|     @DateTimeFormat(pattern = "yyyy-MM-dd") |     private LocalDate violationTime; | ||||||
|     private Date violationTime; |  | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * 整改单位(1分包 2班组) |      * 整改单位(1分包 2班组) | ||||||
|  | |||||||
| @ -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; | ||||||
|  | } | ||||||
| @ -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.HseViolationRecordCreateDto; | ||||||
| import org.dromara.safety.domain.dto.violationrecord.HseViolationRecordCreateHandlerReq; | import org.dromara.safety.domain.dto.violationrecord.HseViolationRecordCreateHandlerReq; | ||||||
| import org.dromara.safety.domain.dto.violationrecord.HseViolationRecordQueryReq; | 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.domain.vo.violationrecord.HseViolationRecordVo; | ||||||
|  |  | ||||||
| import java.util.Collection; | import java.util.Collection; | ||||||
| @ -94,4 +95,11 @@ public interface IHseViolationRecordService extends IService<HseViolationRecord> | |||||||
|      */ |      */ | ||||||
|     Page<HseViolationRecordVo> getVoPage(Page<HseViolationRecord> violationRecordPage); |     Page<HseViolationRecordVo> getVoPage(Page<HseViolationRecord> violationRecordPage); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 新增违章整改信息 | ||||||
|  |      * | ||||||
|  |      * @param req 违章整改信息 | ||||||
|  |      * @return 是否新增成功 | ||||||
|  |      */ | ||||||
|  |     Boolean insertRectification(HseViolationRecordRectificationReq req); | ||||||
| } | } | ||||||
|  | |||||||
| @ -14,6 +14,7 @@ import org.dromara.common.core.utils.ObjectUtils; | |||||||
| import org.dromara.common.core.utils.StringUtils; | import org.dromara.common.core.utils.StringUtils; | ||||||
| import org.dromara.common.mybatis.core.page.PageQuery; | import org.dromara.common.mybatis.core.page.PageQuery; | ||||||
| import org.dromara.common.mybatis.core.page.TableDataInfo; | 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.config.SseProperties; | ||||||
| import org.dromara.common.sse.dto.SeeMessageContentDto; | import org.dromara.common.sse.dto.SeeMessageContentDto; | ||||||
| import org.dromara.common.sse.dto.SseMessageDto; | 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.HseViolationRecordCreateDto; | ||||||
| import org.dromara.safety.domain.dto.violationrecord.HseViolationRecordCreateHandlerReq; | import org.dromara.safety.domain.dto.violationrecord.HseViolationRecordCreateHandlerReq; | ||||||
| import org.dromara.safety.domain.dto.violationrecord.HseViolationRecordQueryReq; | 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.domain.vo.violationrecord.HseViolationRecordVo; | ||||||
| import org.dromara.safety.mapper.HseViolationRecordMapper; | import org.dromara.safety.mapper.HseViolationRecordMapper; | ||||||
| import org.dromara.safety.service.IHseRecognizeRecordService; | import org.dromara.safety.service.IHseRecognizeRecordService; | ||||||
| @ -40,7 +42,6 @@ import org.springframework.transaction.annotation.Transactional; | |||||||
|  |  | ||||||
| import java.time.LocalDate; | import java.time.LocalDate; | ||||||
| import java.time.LocalDateTime; | import java.time.LocalDateTime; | ||||||
| import java.time.ZoneId; |  | ||||||
| import java.util.*; | import java.util.*; | ||||||
| import java.util.stream.Collectors; | import java.util.stream.Collectors; | ||||||
|  |  | ||||||
| @ -298,24 +299,17 @@ public class HseViolationRecordServiceImpl extends ServiceImpl<HseViolationRecor | |||||||
|         if (req == null) { |         if (req == null) { | ||||||
|             return lqw; |             return lqw; | ||||||
|         } |         } | ||||||
|         Long id = req.getId(); |  | ||||||
|         Long projectId = req.getProjectId(); |         Long projectId = req.getProjectId(); | ||||||
|         String violationType = req.getViolationType(); |         String violationType = req.getViolationType(); | ||||||
|         Date violationTime = req.getViolationTime(); |         LocalDate violationTime = req.getViolationTime(); | ||||||
|         lqw.eq(ObjectUtils.isNotEmpty(id), HseViolationRecord::getId, id); |  | ||||||
|         lqw.eq(ObjectUtils.isNotEmpty(projectId), HseViolationRecord::getProjectId, projectId); |         lqw.eq(ObjectUtils.isNotEmpty(projectId), HseViolationRecord::getProjectId, projectId); | ||||||
|         lqw.eq(StringUtils.isNotBlank(violationType), HseViolationRecord::getViolationType, violationType); |         lqw.eq(StringUtils.isNotBlank(violationType), HseViolationRecord::getViolationType, violationType); | ||||||
|         if (violationTime != null) { |         if (violationTime != null) { | ||||||
|             // 构造当天的起始和结束时间 |             // 构造当天的起始和结束时间 | ||||||
|             LocalDate localDate = violationTime.toInstant() |             LocalDateTime startOfDay = violationTime.atStartOfDay(); | ||||||
|                 .atZone(ZoneId.systemDefault()) |             LocalDateTime startOfNextDay = violationTime.plusDays(1).atStartOfDay(); | ||||||
|                 .toLocalDate(); |             lqw.ge(HseViolationRecord::getViolationTime, startOfDay) | ||||||
|             LocalDateTime startOfDay = localDate.atStartOfDay(); |                 .lt(HseViolationRecord::getViolationTime, startOfNextDay); | ||||||
|             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); |  | ||||||
|         } |         } | ||||||
|         return lqw; |         return lqw; | ||||||
|     } |     } | ||||||
| @ -368,4 +362,29 @@ public class HseViolationRecordServiceImpl extends ServiceImpl<HseViolationRecor | |||||||
|         violationRecordVoPage.setRecords(violationRecordVoList); |         violationRecordVoPage.setRecords(violationRecordVoList); | ||||||
|         return violationRecordVoPage; |         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); | ||||||
|  |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -135,6 +135,11 @@ public class SysRoleServiceImpl implements ISysRoleService, RoleService { | |||||||
|     @Override |     @Override | ||||||
|     public List<SysProjectRolePermissionVo> selectRolePermissionByUserId(Long userId) { |     public List<SysProjectRolePermissionVo> selectRolePermissionByUserId(Long userId) { | ||||||
|         List<ProjectRolesItem> items = baseMapper.selectProjectRolesByUserId(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() |         return items.stream() | ||||||
|             .filter(Objects::nonNull) // 保证不为空 |             .filter(Objects::nonNull) // 保证不为空 | ||||||
|             .peek(item -> { |             .peek(item -> { | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user