diff --git a/qms-server/src/main/resources/application-local.yml b/qms-server/src/main/resources/application-local.yml index 1728cedd..156238cf 100644 --- a/qms-server/src/main/resources/application-local.yml +++ b/qms-server/src/main/resources/application-local.yml @@ -65,7 +65,7 @@ rocketmq: xxl: job: admin: - addresses: http://172.16.46.63:30082/xxl-job-admin # 调度中心部署跟地址 + addresses: http://192.168.26.116:888/xxl-job-admin # 调度中心部署跟地址 # Lock4j 配置项 lock4j: diff --git a/qms-server/src/main/resources/application.yml b/qms-server/src/main/resources/application.yml index 932188ed..c46b1b17 100644 --- a/qms-server/src/main/resources/application.yml +++ b/qms-server/src/main/resources/application.yml @@ -97,7 +97,8 @@ easy-trans: xxl: job: executor: - appname: ${spring.application.name} # 执行器 AppName +# appname: ${spring.application.name} # 执行器 AppName + appname: xxl-job-executor-sample # 执行器 AppName logpath: ${user.home}/logs/xxl-job/${spring.application.name} # 执行器运行日志文件存储磁盘路径 accessToken: default_token # 执行器通讯TOKEN diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordrecord/RecordRecordController.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordrecord/RecordRecordController.java index f18648eb..7c349f08 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordrecord/RecordRecordController.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordrecord/RecordRecordController.java @@ -1,6 +1,8 @@ package com.zt.plat.module.qms.resource.record.controller.admin.recordrecord; import com.zt.plat.framework.datapermission.core.annotation.DeptDataPermissionIgnore; +import com.zt.plat.framework.security.core.LoginUser; +import com.zt.plat.framework.security.core.util.SecurityFrameworkUtils; import com.zt.plat.module.qms.common.service.BusinessFileService; import com.zt.plat.module.qms.resource.clientManage.controller.vo.VersionManagementRespVO; import com.zt.plat.module.qms.resource.record.constant.RecordConstants; @@ -14,6 +16,9 @@ import com.zt.plat.module.qms.resource.record.controller.admin.recordrecord.vo.R import com.zt.plat.module.qms.resource.record.dal.dataobject.recordpermission.RecordPermissionDO; import com.zt.plat.module.qms.resource.record.service.recordcategory.RecordCategoryService; import com.zt.plat.module.qms.resource.record.service.recordpermission.RecordPermissionService; +import com.zt.plat.module.system.api.dept.DeptApi; +import com.zt.plat.module.system.api.dept.dto.*; +import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; import jakarta.annotation.Resource; import org.springframework.validation.annotation.Validated; @@ -42,10 +47,12 @@ import com.zt.plat.framework.excel.core.util.ExcelUtils; import com.zt.plat.framework.apilog.core.annotation.ApiAccessLog; import static com.zt.plat.framework.apilog.core.enums.OperateTypeEnum.*; +import static com.zt.plat.module.qms.enums.ErrorCodeConstants.RECORD_PERMISSION_NOT_ALLOW; import com.zt.plat.module.qms.resource.record.dal.dataobject.recordrecord.RecordRecordDO; import com.zt.plat.module.qms.resource.record.service.recordrecord.RecordRecordService; +@Slf4j @Tag(name = "管理后台 - 文件、模板、记录") @RestController @RequestMapping("/qms/resource/record-record") @@ -69,6 +76,43 @@ public class RecordRecordController extends AbstractFileUploadController impleme @Resource private BusinessFileService businessFileService; +// @Resource +// private DeptApi deptApi; + +// @GetMapping("/deptList") +// @Operation(summary = "获得文件记录关系") + //@PreAuthorize("@ss.hasPermission('qms:record-relation:query')") +// public CommonResult> getRecordRelation() { +// // 获取当前部门的所有子部门 +// LoginUser loginUser = SecurityFrameworkUtils.getLoginUser(); +// Long visitCompanyId = loginUser.getVisitCompanyId(); +// log.info("visitCompanyId:{}", visitCompanyId); +// Long deptId = loginUser.getVisitDeptId(); +// DeptListReqDTO dto = new DeptListReqDTO(); +// List deptIds = new ArrayList<>(); +// deptIds.add(deptId.toString()); +// dto.setIds(deptIds); +// CommonResult> deptList = deptApi.getDeptList(dto); +// log.info("deptList:{}", deptList); +// // 获取当前所属公司下面的所有的部门 +// if (visitCompanyId != null) { +//// return deptApi.getChildDeptList(visitCompanyId); +// CommonResult> allCompanyList = deptApi.getAllCompanyList(); +// log.info("allCompanyList:{}", allCompanyList); +// DeptSimpleRespDTO deptSimpleRespDTO = allCompanyList.getData().get(0); +// deptSimpleRespDTO.getIsCompany(); +// log.info("deptSimpleRespDTO:{}", deptSimpleRespDTO); +// CommonResult> childDeptList = deptApi.getChildDeptList(deptId); +// log.info("childDeptList:{}", childDeptList); +// CommonResult> companyDeptInfoListByUserId = deptApi.getCompanyDeptInfoListByUserId(loginUser.getId()); +// log.info("companyDeptInfoListByUserId:{}", companyDeptInfoListByUserId); +// return childDeptList; +// } +// Long visitDeptId = loginUser.getVisitDeptId(); +// if (visitDeptId == null) return CommonResult.error(RECORD_PERMISSION_NOT_ALLOW.getCode(), "用户部门不存在"); +// return deptApi.getChildDeptList(visitDeptId); +// } + @PostMapping("/create") @Operation(summary = "创建文件、模板、记录->分类明细") @@ -151,5 +195,25 @@ public class RecordRecordController extends AbstractFileUploadController impleme return success(BeanUtils.toBean(result, RecordRecordRespVO.class)); } + // 已由 XXL-Job 定时任务(updateRecordStatusJob)驱动,此接口保留用于手动触发/测试 + @GetMapping("/timing-updateRecordStatus") + @Operation(summary = "定时更新文件、模板、记录状态") + //@PreAuthorize("@ss.hasPermission('qms:record-record:update')") + public CommonResult timingUpdateRecordStatus() { + recordRecordService.updateRecordStatus(); + return success(true); + } + /** + * 通过定时任务,判断文件是否到期(到期自动作废) + * @return + */ + // 已由 XXL-Job 定时任务(XXX)驱动,此接口保留用于手动触发/测试 +// @GetMapping("/timing-updateRecordStatus") +// @Operation(summary = "定时更新文件、模板、记录状态") +// //@PreAuthorize("@ss.hasPermission('qms:record-record:update')") +// public CommonResult timingUpdateRecordStatus() { +// recordRecordService.updateRecordStatus(); +// return success(true); +// } } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/job/RecordRecordJob.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/job/RecordRecordJob.java new file mode 100644 index 00000000..e689bbd8 --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/job/RecordRecordJob.java @@ -0,0 +1,40 @@ +package com.zt.plat.module.qms.resource.record.job; + +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import com.zt.plat.module.qms.resource.record.service.recordrecord.RecordRecordService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +/** + * 文件记录相关定时任务 + */ +@Component +@Slf4j +public class RecordRecordJob { + + @Autowired + private RecordRecordService recordRecordService; + + /** + * 定时更新文件记录生效状态 + * 检测 effectiveDate <= 当前时间 且 recordStatus != 1 的记录,将其更新为已生效(recordStatus = 1) + * + * JobHandler 名称: updateRecordStatusJob + * 推荐 Cron: 0 0 0 * * ?(每天零点执行) + */ + @XxlJob("updateRecordStatusJob") + public void updateRecordStatusJob() { + log.info("[updateRecordStatusJob] 开始执行文件记录生效状态更新任务"); + try { + Integer updateCount = recordRecordService.updateRecordStatus(); + log.info("[updateRecordStatusJob] 任务执行成功,共更新 {} 条记录", updateCount); + XxlJobHelper.handleSuccess(String.format("任务执行成功,共更新 %d 条记录", updateCount)); + } catch (Exception e) { + log.error("[updateRecordStatusJob] 任务执行失败:{}", e.getMessage(), e); + throw e; + } + } + +} diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordapply/RecordApplyServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordapply/RecordApplyServiceImpl.java index 0d291607..6f3fe0b0 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordapply/RecordApplyServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordapply/RecordApplyServiceImpl.java @@ -529,20 +529,25 @@ public class RecordApplyServiceImpl implements RecordApplyService, BMPCallbackIn throw exception(RECORD_APPLY_NOT_EXISTS); RecordCategoryDO category = recordCategoryService.getRecordCategory(Long.valueOf(s)); String customConfig = category.getCustomConfig(); - if (!ObjectUtils.isEmpty(customConfig)) { - JSONObject jsonObject = JSONObject.parseObject(customConfig); - Integer submitFlag = jsonObject.getInteger("submitFlag"); - if (submitFlag == 0) { - // 不允许提交,直接修改文件记录状态 - recordDO.setRecordStatus(1); // 已生效 - recordRecordService.updateRecordRecordById(recordDO); - return true; - } else { - // 判断是否到生效日期 - RecordRecordDO effectiveRecordRecordDO = isEffective(recordDO); - recordRecordService.updateRecordRecordById(effectiveRecordRecordDO); - } + if (ObjectUtils.isEmpty(customConfig)) { // 空,直接判断是否到生效日期 + // 判断是否到生效日期 + RecordRecordDO effectiveRecordRecordDO = isEffective(recordDO); + recordRecordService.updateRecordRecordById(effectiveRecordRecordDO); + return true; } + JSONObject jsonObject = JSONObject.parseObject(customConfig); + Integer submitFlag = jsonObject.getInteger("submitFlag"); + if (submitFlag == 0) { + // 不允许提交,直接修改文件记录状态 + recordDO.setRecordStatus(1); // 已生效 + recordRecordService.updateRecordRecordById(recordDO); + return true; + } else { + // 判断是否到生效日期 + RecordRecordDO effectiveRecordRecordDO = isEffective(recordDO); + recordRecordService.updateRecordRecordById(effectiveRecordRecordDO); + } + return false; } @@ -555,9 +560,10 @@ public class RecordApplyServiceImpl implements RecordApplyService, BMPCallbackIn LocalDateTime now = LocalDateTime.now(); if (now.isAfter(effectiveDate) || now.isEqual(effectiveDate)) { recordDO.setRecordStatus(1); // 已生效 - } else { - recordDO.setRecordStatus(3); // 待生效 } +// else { +// recordDO.setRecordStatus(3); // 待生效 +// } } return recordDO; } @@ -816,9 +822,10 @@ public class RecordApplyServiceImpl implements RecordApplyService, BMPCallbackIn LocalDateTime now = LocalDateTime.now(); if (now.isAfter(effectiveDate) || now.isEqual(effectiveDate)) { entity.setRecordStatus(1); // 已生效 - } else { - entity.setRecordStatus(3); // 待生效 } +// else { +// entity.setRecordStatus(0); // 待生效 +// } } else { entity.setRecordStatus(1); // 默认已生效 } diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordrecord/RecordRecordService.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordrecord/RecordRecordService.java index 33dd4d98..838052c2 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordrecord/RecordRecordService.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordrecord/RecordRecordService.java @@ -90,6 +90,13 @@ public interface RecordRecordService { List getRecordList(RecordRecordPageReqVO pageReqVO); + /** + * 定时任务:将生效日期已到的记录状态更新为已生效(recordStatus = 1) + * + * @return 更新条数 + */ + Integer updateRecordStatus(); + /** * 文件更改申请流程-- 查询文件记录数据 */ diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordrecord/RecordRecordServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordrecord/RecordRecordServiceImpl.java index a3ef6561..f0f524b6 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordrecord/RecordRecordServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordrecord/RecordRecordServiceImpl.java @@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -33,6 +34,7 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.util.ObjectUtils; import org.springframework.validation.annotation.Validated; +import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; import java.util.Optional; @@ -452,5 +454,20 @@ public class RecordRecordServiceImpl implements RecordRecordService { return recordRecordMapper.selectPage(pageReqVO); } + /** + * 定时任务:将生效日期已到的记录状态更新为已生效(recordStatus = 1) + * 筛选条件:effectiveDate <= 当前时间 且 recordStatus != 1 + */ + @Override + public Integer updateRecordStatus() { + LocalDateTime now = LocalDateTime.now(); + LambdaUpdateWrapper updateWrapper = Wrappers.lambdaUpdate(); + updateWrapper.isNotNull(RecordRecordDO::getEffectiveDate) + .le(RecordRecordDO::getEffectiveDate, now) + .ne(RecordRecordDO::getRecordStatus, 1) + .set(RecordRecordDO::getRecordStatus, 1); + return recordRecordMapper.update(null, updateWrapper); + } + } \ No newline at end of file