diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/constant/RecordConstants.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/constant/RecordConstants.java index 57b98cf7..57df5265 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/constant/RecordConstants.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/constant/RecordConstants.java @@ -26,7 +26,7 @@ public class RecordConstants { */ public static class PermissionType { /** key */ - public static final String PERMISSION_KEY = "file_record_permission type"; + public static final String PERMISSION_KEY = "file_record_permission_type"; /** 管理员 */ public static final String ADMIN = "管理员"; /** 查看 */ @@ -47,19 +47,19 @@ public class RecordConstants { /** * 分发 */ - public static final String DISTRIBUTION = "分发"; + public static final String DISTRIBUTION = "文件分发"; /** * 查看申请 */ - public static final String VIEW_APPLY = "查看申请"; + public static final String VIEW_APPLY = "文件查看申请"; /** * 作废 */ - public static final String INVALID = "作废"; + public static final String INVALID = "文件作废"; /** * 评审 */ - public static final String REVIEW = "评审"; + public static final String REVIEW = "文件评审"; /** * 文件提交 * */ @@ -67,7 +67,7 @@ public class RecordConstants { /** * 文件提交 * */ - public static final String RECORD_UPDATE = "文件修改"; + public static final String RECORD_UPDATE = "文件修改申请"; } /** @@ -77,7 +77,7 @@ public class RecordConstants { /** * 分发 */ - public static final String DISTRIBUTION__DEFINITION_KEY = "分发"; + public static final String DISTRIBUTION__DEFINITION_KEY = "QMS_RECORD_DISTRIBUTION"; /** * 查看申请 */ @@ -89,7 +89,7 @@ public class RecordConstants { /** * 评审 */ - public static final String REVIEW_DEFINITION_KEY = "评审"; + public static final String REVIEW_DEFINITION_KEY = "QMS_RECORD_REVIEW"; /** * 文件提交 */ diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordapply/vo/RecordApplyPageReqVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordapply/vo/RecordApplyPageReqVO.java index e6def553..877c0d0c 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordapply/vo/RecordApplyPageReqVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordapply/vo/RecordApplyPageReqVO.java @@ -1,5 +1,6 @@ package com.zt.plat.module.qms.resource.record.controller.admin.recordapply.vo; +import com.baomidou.mybatisplus.annotation.TableField; import lombok.*; import java.util.*; import io.swagger.v3.oas.annotations.media.Schema; @@ -40,6 +41,9 @@ public class RecordApplyPageReqVO extends PageParam { @Schema(description = "参加评审人员id") private String reviewUserIds; + @Schema(description = "表单数据") + private String formData; + @Schema(description = "申请事由") private String applyContent; diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordapply/vo/RecordApplyRespVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordapply/vo/RecordApplyRespVO.java index ad89b5ff..f81fbc2b 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordapply/vo/RecordApplyRespVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordapply/vo/RecordApplyRespVO.java @@ -54,6 +54,10 @@ public class RecordApplyRespVO { @ExcelProperty("参加评审人员id") private String reviewUserIds; + @Schema(description = "表单数据") + @ExcelProperty("表单数据") + private String formData; + @Schema(description = "申请事由") @ExcelProperty("申请事由") private String applyContent; @@ -105,7 +109,16 @@ public class RecordApplyRespVO { @Schema(description = "是否需要申请") private Boolean needApply; - @Schema(description = "流程类型") + @Schema(description = "文件记录ID") private Long recordId; + @Schema(description = "文件记录IDS") + private Long[] recordIdS; + + @Schema(description = "用户IDs") + private Long[] userIds; + + @Schema(description = "用户IDs") + private Long[] deptIds; + } \ 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/controller/admin/recordapply/vo/RecordApplySaveReqVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordapply/vo/RecordApplySaveReqVO.java index f7048b16..455e5bee 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordapply/vo/RecordApplySaveReqVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordapply/vo/RecordApplySaveReqVO.java @@ -48,6 +48,9 @@ public class RecordApplySaveReqVO { @Schema(description = "参加评审人员id") private String reviewUserIds; + @Schema(description = "表单数据") + private String formData; + @Schema(description = "申请事由") private String applyContent; diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordapplydetail/vo/RecordApplyDetailPageReqVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordapplydetail/vo/RecordApplyDetailPageReqVO.java index 6414bd65..4b9c4952 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordapplydetail/vo/RecordApplyDetailPageReqVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordapplydetail/vo/RecordApplyDetailPageReqVO.java @@ -1,5 +1,7 @@ package com.zt.plat.module.qms.resource.record.controller.admin.recordapplydetail.vo; +import com.baomidou.mybatisplus.annotation.TableField; +import jakarta.validation.constraints.NotEmpty; import lombok.*; import java.util.*; import io.swagger.v3.oas.annotations.media.Schema; @@ -19,6 +21,12 @@ public class RecordApplyDetailPageReqVO extends PageParam { @Schema(description = "文件id", example = "3188") private Long documentId; + @Schema(description = "授权类型") + private String TargetType; + + @Schema(description = "授权Id") + private Long targetId; + @Schema(description = "是否长期有效") private String permanently; diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordapplydetail/vo/RecordApplyDetailRespVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordapplydetail/vo/RecordApplyDetailRespVO.java index 2efbbd13..a69f0224 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordapplydetail/vo/RecordApplyDetailRespVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordapplydetail/vo/RecordApplyDetailRespVO.java @@ -20,10 +20,18 @@ public class RecordApplyDetailRespVO { @ExcelProperty("父id") private Long applyId; + @Schema(description = "授权类型") + @ExcelProperty("授权类型") + private String TargetType; + @Schema(description = "文件id", example = "3188") @ExcelProperty("文件id") private Long documentId; + @Schema(description = "授权Id") + @ExcelProperty("授权Id") + private Long targetId; + @Schema(description = "是否长期有效") @ExcelProperty("是否长期有效") private String permanently; diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordapplydetail/vo/RecordApplyDetailSaveReqVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordapplydetail/vo/RecordApplyDetailSaveReqVO.java index c2966d20..f299d07e 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordapplydetail/vo/RecordApplyDetailSaveReqVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordapplydetail/vo/RecordApplyDetailSaveReqVO.java @@ -17,9 +17,15 @@ public class RecordApplyDetailSaveReqVO { @Schema(description = "父id", example = "28812") private Long applyId; + @Schema(description = "授权类型") + private String TargetType; + @Schema(description = "文件id", example = "3188") private Long documentId; + @Schema(description = "授权Id") + private Long targetId; + @Schema(description = "是否长期有效") private String permanently; 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 026eb3f2..a34828a7 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 @@ -63,14 +63,6 @@ public class RecordRecordController extends AbstractFileUploadController impleme @Resource private BusinessFileService businessFileService; -// @GetMapping("/getRecordListByCategoryId") -// @Operation(summary = "根据文件分类ID获取分类明细记录") -// @Parameter(name = "id", description = "编号", required = true, example = "1024") -// //@PreAuthorize("@ss.hasPermission('qms:record-record:query')") -// public CommonResult> getRecordListByCategoryId(@RequestParam("id") Long categoryId) { -// PageResult recordRecordListByCategoryId = recordRecordService.getRecordListByCategoryId(categoryId); -// return success(BeanUtils.toBean(recordRecordListByCategoryId, RecordRecordRespVO.class)); -// } @PostMapping("/create") @Operation(summary = "创建文件、模板、记录->分类明细") @@ -105,12 +97,6 @@ public class RecordRecordController extends AbstractFileUploadController impleme return success(true); } -// @PostMapping("/submitRecordApply") -// @Operation(summary = "提交流程申请") -// public CommonResult submitRecordApply(@RequestBody RecordRecordSaveReqVO param) { -// return recordRecordService.submitRecordApply(param); -// } - @GetMapping("/get") @Operation(summary = "获得文件、模板、记录") diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/dal/dataobject/recordapply/RecordApplyDO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/dal/dataobject/recordapply/RecordApplyDO.java index c3bb8a8e..3304ece7 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/dal/dataobject/recordapply/RecordApplyDO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/dal/dataobject/recordapply/RecordApplyDO.java @@ -88,6 +88,11 @@ public class RecordApplyDO extends BusinessBaseDO { */ @TableField("RVW_USER_IDS") private String reviewUserIds; + /** + * 表单数据 + */ + @TableField("FORM_DAT") + private String formData; /** * 申请事由 */ diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/dal/dataobject/recordapplydetail/RecordApplyDetailDO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/dal/dataobject/recordapplydetail/RecordApplyDetailDO.java index a44d8ec8..f92d704d 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/dal/dataobject/recordapplydetail/RecordApplyDetailDO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/dal/dataobject/recordapplydetail/RecordApplyDetailDO.java @@ -1,5 +1,6 @@ package com.zt.plat.module.qms.resource.record.dal.dataobject.recordapplydetail; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import java.util.*; import java.time.LocalDateTime; @@ -43,6 +44,16 @@ public class RecordApplyDetailDO extends BusinessBaseDO { */ @TableField("DOC_ID") private Long documentId; + /** + * 授权类型 + */ + @TableField("TGT_TP") + private String targetType; + /** + * 授权ID(下发流程使用) + */ + @TableField("TGT_ID") + private Long targetId; /** * 是否长期有效 */ 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 989429b7..f05f2d13 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 @@ -3,6 +3,8 @@ package com.zt.plat.module.qms.resource.record.service.recordapply; import cn.hutool.core.collection.CollUtil; import com.alibaba.fastjson.JSONObject; import com.zt.plat.framework.common.pojo.CommonResult; +import com.zt.plat.framework.common.pojo.PageResult; +import com.zt.plat.framework.common.util.object.BeanUtils; import com.zt.plat.framework.security.core.LoginUser; import com.zt.plat.framework.security.core.util.SecurityFrameworkUtils; import com.zt.plat.module.bpm.api.task.BpmProcessInstanceApi; @@ -21,18 +23,20 @@ import com.zt.plat.module.qms.resource.record.controller.admin.recordapply.vo.Re import com.zt.plat.module.qms.resource.record.controller.admin.recordapply.vo.RecordApplyRespVO; import com.zt.plat.module.qms.resource.record.controller.admin.recordapply.vo.RecordApplySaveReqVO; import com.zt.plat.module.qms.resource.record.controller.admin.recordapplydetail.vo.RecordApplyDetailPageReqVO; -import com.zt.plat.module.qms.resource.record.controller.admin.recordapplydetail.vo.RecordApplyDetailSaveReqVO; +import com.zt.plat.module.qms.resource.record.controller.admin.recordpermission.vo.RecordPermissionSaveReqVO; +import com.zt.plat.module.qms.resource.record.dal.dao.recordapply.RecordApplyMapper; import com.zt.plat.module.qms.resource.record.dal.dataobject.recordapply.RecordApplyDO; import com.zt.plat.module.qms.resource.record.dal.dataobject.recordapplydetail.RecordApplyDetailDO; -import com.zt.plat.module.qms.resource.record.controller.admin.recordapplydetail.vo.RecordApplyDetailJoinVO; import com.zt.plat.module.qms.resource.record.dal.dataobject.recordcategory.RecordCategoryDO; +import com.zt.plat.module.qms.resource.record.dal.dataobject.recordpermission.RecordPermissionDO; import com.zt.plat.module.qms.resource.record.dal.dataobject.recordrecord.RecordRecordDO; import com.zt.plat.module.qms.resource.record.service.recordapplydetail.RecordApplyDetailService; 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.qms.resource.record.service.recordrecord.RecordRecordService; +import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; -import jakarta.annotation.Resource; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.ObjectUtils; import org.springframework.validation.annotation.Validated; @@ -42,15 +46,10 @@ import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.*; -import com.zt.plat.framework.common.pojo.PageResult; -import com.zt.plat.framework.common.util.object.BeanUtils; - -import com.zt.plat.module.qms.resource.record.dal.dao.recordapply.RecordApplyMapper; - import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception0; -import static com.zt.plat.framework.common.util.collection.CollectionUtils.convertList; -import static com.zt.plat.module.qms.enums.ErrorCodeConstants.*; +import static com.zt.plat.module.qms.enums.ErrorCodeConstants.ERROR_CODE_MODULE_COMMON; +import static com.zt.plat.module.qms.enums.ErrorCodeConstants.RECORD_APPLY_NOT_EXISTS; import static com.zt.plat.module.qms.enums.QmsBpmConstant.BPM_CALLBACK_BEAN_NAME; /** @@ -80,6 +79,9 @@ public class RecordApplyServiceImpl implements RecordApplyService, BMPCallbackIn @Resource private RecordCategoryService recordCategoryService; + @Resource + private RecordPermissionService recordPermissionService; + private LoginUser loginUser = SecurityFrameworkUtils.getLoginUser(); @Override @@ -272,6 +274,7 @@ public class RecordApplyServiceImpl implements RecordApplyService, BMPCallbackIn return CommonResult.success(json); } + // 判断文件提交是否需要走流程 public boolean justifyRecordApply(RecordRecordDO recordDO) { Integer recordStatus = recordDO.getRecordStatus(); if (recordStatus != null) throw exception(RECORD_APPLY_NOT_EXISTS, "文件已提交,无法提交申请"); @@ -284,7 +287,7 @@ 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)){ + if (!ObjectUtils.isEmpty(customConfig)) { JSONObject jsonObject = JSONObject.parseObject(customConfig); Integer submitFlag = jsonObject.getInteger("submitFlag"); if (submitFlag == 0) { @@ -292,7 +295,7 @@ public class RecordApplyServiceImpl implements RecordApplyService, BMPCallbackIn recordDO.setRecordStatus(1); // 已生效 recordRecordService.updateRecordRecordById(recordDO); return true; - }else { + } else { // 把状态改为0 recordDO.setRecordStatus(0); // 未生效 recordRecordService.updateRecordRecordById(recordDO); @@ -301,6 +304,19 @@ public class RecordApplyServiceImpl implements RecordApplyService, BMPCallbackIn return false; } + public void updateReviewFlag(RecordApplyRespVO param) { + Long[] recordIdS = param.getRecordIdS(); + // 修改recordRecord的submitFlag 字段状态为0,评审中 + List recordRecordDOS = new ArrayList<>(); + for (Long recordId : recordIdS) { + RecordRecordDO recordRecordDO = new RecordRecordDO(); + recordRecordDO.setSubmitFlag("0"); // 评审中 + recordRecordDO.setId(recordId); + recordRecordDOS.add(recordRecordDO); + } + recordRecordService.updateRecordRecordListByIds(recordRecordDOS); + } + //提交申请-发起流程 @Override @Transactional(rollbackFor = Exception.class) @@ -308,55 +324,82 @@ public class RecordApplyServiceImpl implements RecordApplyService, BMPCallbackIn LoginUser loginUser = SecurityFrameworkUtils.getLoginUser(); String nickName = SecurityFrameworkUtils.getLoginUserNickname(); Long recordId = param.getRecordId();// 文件Id + String businessType = param.getBusinessType(); - RecordRecordDO entity = recordRecordService.getRecordById(recordId); + + RecordRecordDO entity = new RecordRecordDO(); + JSONObject formData = new JSONObject(); +// formData.put("mainId", recordId); + + Long[] recordIdS = param.getRecordIdS(); + if (RecordConstants.BusinessType.REVIEW.equals(businessType)) {// 文件评审 + if (ObjectUtils.isEmpty(recordIdS)) + return CommonResult.error(RECORD_APPLY_NOT_EXISTS.getCode(), "请选择文件"); + } else { + if (ObjectUtils.isEmpty(recordId)) + return CommonResult.error(RECORD_APPLY_NOT_EXISTS.getCode(), "请选择文件记录"); + entity = recordRecordService.getRecordById(recordId); +// formData.put("mainId", recordId); + } if (ObjectUtils.isEmpty(entity)) throw exception(RECORD_APPLY_NOT_EXISTS); BpmProcessInstanceCreateReqDTO reqDTO = new BpmProcessInstanceCreateReqDTO(); - reqDTO.setBusinessKey(String.valueOf(recordId)); + + // 通用申请 + RecordApplyDO recordApplyDO = new RecordApplyDO(); + recordApplyDO.setApplyUserId(loginUser.getId()); + recordApplyDO.setApplyUserName(SecurityFrameworkUtils.getLoginUserNickname()); + recordApplyDO.setApplyDepartmentId(loginUser.getVisitDeptId()); + recordApplyDO.setApplyDepartmentName(loginUser.getVisitDeptName()); + recordApplyDO.setBusinessType(businessType); // 业务类型:记录提交 + recordApplyDO.setTitle(businessType); + // recordApplyDO.setTitle(entity.getName()); + recordApplyMapper.insert(recordApplyDO); + + reqDTO.setBusinessKey(String.valueOf(recordApplyDO.getId())); // TODO 流程定义key 待定 switch (businessType) { case RecordConstants.BusinessType.RECORD_SUBMIT: // 判断根分类上是否配置自定义配置,允许提交,则需要走流程,否则直接提交 boolean b = justifyRecordApply(entity); - if (b) { - // 不需要走流程,直接返回成功 - return CommonResult.success(BeanUtils.toBean(entity, RecordApplyRespVO.class)); - } + if (b) { + // 不需要走流程,直接返回成功 + return CommonResult.success(BeanUtils.toBean(entity, RecordApplyRespVO.class)); + } reqDTO.setProcessDefinitionKey(RecordConstants.ProcessDefinitionKey.RECORD_SUBMIT_DEFINITION_KEY); break; - case RecordConstants.BusinessType.DISTRIBUTION: + case RecordConstants.BusinessType.DISTRIBUTION: // 分发 reqDTO.setProcessDefinitionKey(RecordConstants.ProcessDefinitionKey.DISTRIBUTION__DEFINITION_KEY); - // 文件分发需要关联权限表 + // 文件分发需要关联权限表, break; - case RecordConstants.BusinessType.VIEW_APPLY: + case RecordConstants.BusinessType.VIEW_APPLY: // 查看申请 reqDTO.setProcessDefinitionKey(RecordConstants.ProcessDefinitionKey.VIEW_APPLY_DEFINITION_KEY); break; - case RecordConstants.BusinessType.INVALID: + case RecordConstants.BusinessType.INVALID: // 作废 reqDTO.setProcessDefinitionKey(RecordConstants.ProcessDefinitionKey.INVALID_DEFINITION_KEY); break; - case RecordConstants.BusinessType.REVIEW: + case RecordConstants.BusinessType.REVIEW: // 评审 reqDTO.setProcessDefinitionKey(RecordConstants.ProcessDefinitionKey.REVIEW_DEFINITION_KEY); + // 修改评审状态(null,0,1) + updateReviewFlag(param); break; - case RecordConstants.BusinessType.RECORD_UPDATE: + case RecordConstants.BusinessType.RECORD_UPDATE: // 文件修改申请 reqDTO.setProcessDefinitionKey(RecordConstants.ProcessDefinitionKey.RECORD_UPDATE_DEFINITION_KEY); break; default: throw exception(RECORD_APPLY_NOT_EXISTS, "未知的业务类型"); } - reqDTO.setProcessDefinitionKey(RecordConstants.ProcessDefinitionKey.RECORD_SUBMIT_DEFINITION_KEY); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - JSONObject formData = new JSONObject(); - formData.put("mainId", recordId); + formData.put("mainId", recordApplyDO.getId()); formData.put("applyUser", nickName); formData.put("applyUserId", loginUser.getId()); formData.put("applyDepartment", loginUser.getVisitDeptName()); formData.put("applyDepartmentId", loginUser.getVisitDeptId()); formData.put("applyTime", sdf.format(new Date())); formData.put("businessType", businessType); - formData.put("title", entity.getName()); // 文件名 + formData.put("title", businessType); // 文件名 Map variables = formData.toJavaObject(Map.class); variables.put(BPM_CALLBACK_BEAN_NAME, "recordApplyService"); @@ -369,24 +412,54 @@ public class RecordApplyServiceImpl implements RecordApplyService, BMPCallbackIn } String wfInsId = result.getData(); - - RecordApplyDO recordApplyDO = new RecordApplyDO(); - recordApplyDO.setApplyUserId(loginUser.getId()); - recordApplyDO.setApplyUserName(SecurityFrameworkUtils.getLoginUserNickname()); - recordApplyDO.setApplyDepartmentId(loginUser.getVisitDeptId()); - recordApplyDO.setApplyDepartmentName(loginUser.getVisitDeptName()); - recordApplyDO.setBusinessType(businessType); // 业务类型:记录提交 - recordApplyDO.setTitle(entity.getName()); recordApplyDO.setFlowInstanceId(wfInsId); - // 提交后状态变更为审核中 + // 更新申请实例Id recordApplyDO.setBusinessStatus(QmsCommonConstant.RUNNING); - recordApplyMapper.insert(recordApplyDO); + recordApplyMapper.updateById(recordApplyDO); + //申请通用明细记录 - RecordApplyDetailSaveReqVO recordApplyDetailSaveReqVO = new RecordApplyDetailSaveReqVO(); - recordApplyDetailSaveReqVO.setApplyId(recordApplyDO.getId()); - recordApplyDetailSaveReqVO.setDocumentId(recordId); // 文件Id - recordApplyDetailService.createRecordApplyDetail(recordApplyDetailSaveReqVO); + List detailSaveReqVOList = new ArrayList<>(); + // 判断是否是评审,如果是评审,一批评审文件对应一个申请记录,对应多条申请明细记录 + if (RecordConstants.BusinessType.REVIEW.equals(businessType)) { + for (Long id : recordIdS) { + RecordApplyDetailDO recordApplyDetailDO = new RecordApplyDetailDO(); + recordApplyDetailDO.setApplyId(recordApplyDO.getId()); + recordApplyDetailDO.setDocumentId(id); // 文件Id + detailSaveReqVOList.add(recordApplyDetailDO); + } + } else if (RecordConstants.BusinessType.DISTRIBUTION.equals(businessType)) { + Long[] userIds = param.getUserIds(); + Long[] deptIds = param.getDeptIds(); + if (!ObjectUtils.isEmpty(userIds)){ // 用户 + for (Long userId : userIds) { + RecordApplyDetailDO recordApplyDetailDO = new RecordApplyDetailDO(); + recordApplyDetailDO.setApplyId(recordApplyDO.getId()); + recordApplyDetailDO.setTargetId(userId);//用户Id + recordApplyDetailDO.setTargetType(RecordConstants.TargetType.USER); + recordApplyDetailDO.setApplyStartDate(LocalDateTime.now()); // TODO 申请开始时间 + detailSaveReqVOList.add(recordApplyDetailDO); + } + }else { + if (ObjectUtils.isEmpty(deptIds)) throw exception(RECORD_APPLY_NOT_EXISTS, "请选择分发对象"); + for (Long deptId : deptIds) { + RecordApplyDetailDO recordApplyDetailDO = new RecordApplyDetailDO(); + recordApplyDetailDO.setApplyId(recordApplyDO.getId()); + recordApplyDetailDO.setTargetId(deptId);//部门Id + recordApplyDetailDO.setTargetType(RecordConstants.TargetType.DEPT); + recordApplyDetailDO.setApplyStartDate(LocalDateTime.now()); // TODO 申请开始时间 + detailSaveReqVOList.add(recordApplyDetailDO); + } + } + } else { // 分发 + RecordApplyDetailDO recordApplyDetailDO = new RecordApplyDetailDO(); + recordApplyDetailDO.setApplyId(recordApplyDO.getId()); + recordApplyDetailDO.setDocumentId(recordId); // 文件Id + detailSaveReqVOList.add(recordApplyDetailDO); + } + boolean recordApplyDetailBatch = recordApplyDetailService.createRecordApplyDetailBatch(detailSaveReqVOList); + if (!recordApplyDetailBatch) + throw exception(RECORD_APPLY_NOT_EXISTS, "保存申请明细失败"); return CommonResult.success(BeanUtils.toBean(recordApplyDO, RecordApplyRespVO.class)); } @@ -405,6 +478,11 @@ public class RecordApplyServiceImpl implements RecordApplyService, BMPCallbackIn String currentActivityName = variables.getString(QmsBpmConstant.BPM_CALLBACK_ACTIVITY_NAME); String returnFlag = variables.getString(QmsBpmConstant.BPM_REJECT_TO_FIRST_FLAG); String businessType = variables.getString("businessType"); + String mainId = variables.getString("mainId"); // 申请ID + + RecordApplyDO recordApplyDO = recordApplyMapper.selectById(Long.valueOf(mainId)); // 申请记录 + if (recordApplyDO == null) throw exception(RECORD_APPLY_NOT_EXISTS, "申请记录不存在"); + //同一个节点实例只触发一次 String checkKey = currentActivityInsId; @@ -420,64 +498,95 @@ public class RecordApplyServiceImpl implements RecordApplyService, BMPCallbackIn } String PROCESS_STATUS = variables.getString(QmsBpmConstant.PROCESS_INSTANCE_VARIABLE_STATUS); - String recordId = variables.getString("mainId"); - RecordRecordDO entity = recordRecordService.getRecordById(Long.valueOf(recordId)); - if (ObjectUtils.isEmpty(entity)) - return CommonResult.error(RECORD_APPLY_NOT_EXISTS.getCode(), "申请不存在"); - - List recordApplyDetailJoinList = recordApplyDetailService.getRecordApplyDetailJoinList(Long.valueOf(recordId), businessType); - RecordApplyDetailJoinVO recordApplyDetailJoinVO = recordApplyDetailJoinList.get(0); - if (ObjectUtils.isEmpty(recordApplyDetailJoinVO)) { - log.error("未找到对应的申请明细记录,recordId={}", recordId); - return CommonResult.error(RECORD_APPLY_NOT_EXISTS.getCode(), "未找到对应的申请明细记录"); - } if (("1").equals(returnFlag)) { - //驳回,状态变更为未发起 + //驳回,状态变更为未发起 TODO // entity.setBusinessStatus(QmsCommonConstant.NOT_START); - dataOpinionService.disableOpinionsByBusId(entity.getId()); +// dataOpinionService.disableOpinionsByBusId(entity.getId()); } else if ("4".equals(PROCESS_STATUS)) { - //作废 + //作废 TODO // entity.setBusinessStatus(QmsCommonConstant.VOID); } else if ("1".equals(PROCESS_STATUS)) { //通过 + List recordApplyDetailDOS = recordApplyDetailService.selectList(new RecordApplyDetailPageReqVO().setApplyId(Long.valueOf(mainId))); + if (ObjectUtils.isEmpty(recordApplyDetailDOS)) + return CommonResult.error(RECORD_APPLY_NOT_EXISTS.getCode(), "未找到对应的申请明细记录"); // TODO 业务代码,通过业务类型判断 + List recordRecordDOS = new ArrayList<>(); switch (businessType) { case RecordConstants.BusinessType.RECORD_SUBMIT: - recordRecordFlowStatus(entity,1); + RecordApplyDetailDO recordApplyDetailDO = recordApplyDetailDOS.get(0); + Long documentId = recordApplyDetailDO.getDocumentId(); + RecordRecordDO entity = recordRecordService.getRecordById(documentId); + entity.setRecordStatus(1);// 已生效 + // 修改状态 + recordApplyFlowStatus(entity); + break; + case RecordConstants.BusinessType.REVIEW: // 评审 + // 1条申请----> 多条明细记录 ----> 多条文件记录 + for (RecordApplyDetailDO applyDetailDO : recordApplyDetailDOS) { + RecordRecordDO recordRecordDO = new RecordRecordDO(); + recordRecordDO.setId(applyDetailDO.getDocumentId()); + recordRecordDO.setSubmitFlag("1"); // 评审通过 + recordRecordDOS.add(recordRecordDO); + } + recordReviewFlowStatus(recordRecordDOS); break; case RecordConstants.BusinessType.DISTRIBUTION: // 分发 - + // formData 字符串解析成 List + for (RecordApplyDetailDO applyDetailDO : recordApplyDetailDOS) { + // 添加记录 + String targetType = applyDetailDO.getTargetType(); + if (ObjectUtils.isEmpty(targetType)) throw exception(RECORD_APPLY_NOT_EXISTS, "分发对象类型不能为空"); + // 通过-----> 创建人员权限表记录 + RecordPermissionDO permissionDO = new RecordPermissionDO(); + permissionDO.setPermission(RecordConstants.PermissionType.VIEW); // 可查看 + permissionDO.setSourceId(applyDetailDO.getDocumentId()); // 文件Id + permissionDO.setDeptId(loginUser.getVisitDeptId()); + permissionDO.setDeptName(loginUser.getVisitDeptName()); + List permissionDOList = new ArrayList<>(); + if (targetType.equals(RecordConstants.TargetType.USER)) { + permissionDO.setTargetId(String.valueOf(applyDetailDO.getTargetId())); // 用户Id + permissionDO.setTargetType(RecordConstants.TargetType.USER); + }else { // 部门 + permissionDO.setTargetId(String.valueOf(applyDetailDO.getTargetId())); // 部门Id + permissionDO.setTargetType(RecordConstants.TargetType.DEPT); + } + permissionDOList.add(permissionDO); + boolean b = recordPermissionService.insertRecordPermissionBatch(permissionDOList); + if (!b) throw exception(RECORD_APPLY_NOT_EXISTS, "保存分发权限失败"); + } + // 更改申请流程 + break; default: throw exception(RECORD_APPLY_NOT_EXISTS, "未知的业务类型"); } - } - Long applyId = recordApplyDetailJoinVO.getApplyId(); - RecordApplyDO recordApplyDO = recordApplyMapper.selectById(applyId); - DataCommonType dataCommonType = new DataCommonType(); - dataCommonType.setBusinessId(entity.getId()); + dataCommonType.setBusinessId(Long.valueOf(mainId)); dataCommonType.setFlowInstanceId(recordApplyDO.getFlowInstanceId()); dataOpinionService.saveOpinionByWfCallback(dataCommonType, currentActivityId, currentActivityName, taskVariables); // 审批完成,修改申请通用记录状态为已完成 - RecordApplySaveReqVO updateReqVO = new RecordApplySaveReqVO(); - updateReqVO.setId(recordApplyDetailJoinVO.getApplyId()); - updateReqVO.setBusinessStatus(QmsCommonConstant.COMPLETED); - recordApplyMapper.updateById(BeanUtils.toBean(updateReqVO, RecordApplyDO.class)); + recordApplyDO.setBusinessStatus(QmsCommonConstant.COMPLETED); + recordApplyMapper.updateById(recordApplyDO); JSONObject ret = new JSONObject(); return CommonResult.success(ret); } // 文件提交-更改状态 - public void recordRecordFlowStatus(RecordRecordDO recordDO, Integer status) { + public void recordApplyFlowStatus(RecordRecordDO recordDO) { // 修改文件状态为已生效 - recordDO.setRecordStatus(status); recordRecordService.updateRecordRecordById(recordDO); } + + // 文件批量跟新状态 + public void recordReviewFlowStatus(List recordDO) { + // 修改文件状态为已生效 + recordRecordService.updateRecordRecordListByIds(recordDO); + } } \ 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/service/recordapplydetail/RecordApplyDetailService.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordapplydetail/RecordApplyDetailService.java index ef47676b..d55aea19 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordapplydetail/RecordApplyDetailService.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordapplydetail/RecordApplyDetailService.java @@ -78,4 +78,6 @@ public interface RecordApplyDetailService { * @return 联合查询结果列表 */ List getRecordApplyDetailJoinList(Long documentId, String businessType); + + boolean createRecordApplyDetailBatch(List detailSaveReqVOList); } \ 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/service/recordapplydetail/RecordApplyDetailServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordapplydetail/RecordApplyDetailServiceImpl.java index 1164c2c6..91555848 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordapplydetail/RecordApplyDetailServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordapplydetail/RecordApplyDetailServiceImpl.java @@ -102,4 +102,9 @@ public class RecordApplyDetailServiceImpl implements RecordApplyDetailService { return recordApplyDetailMapper.selectJoinByDocumentIdAndBusinessType(documentId, businessType); } + @Override + public boolean createRecordApplyDetailBatch(List detailSaveReqVOList) { + return recordApplyDetailMapper.insertBatch(detailSaveReqVOList); + } + } \ 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/service/recordpermission/RecordPermissionService.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordpermission/RecordPermissionService.java index ab6d4858..109ad5ac 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordpermission/RecordPermissionService.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordpermission/RecordPermissionService.java @@ -64,4 +64,7 @@ public interface RecordPermissionService { List selectAllList(RecordPermissionDO recordPermissionDO); List selectRecordPermission(RecordPermissionDO recordPermissionDO); + + // 批量查询 + boolean insertRecordPermissionBatch(List recordPermissionDO); } \ 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/service/recordpermission/RecordPermissionServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordpermission/RecordPermissionServiceImpl.java index 44fef636..d91da87b 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordpermission/RecordPermissionServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordpermission/RecordPermissionServiceImpl.java @@ -44,7 +44,8 @@ public class RecordPermissionServiceImpl implements RecordPermissionService { @Override public List selectAllList(RecordPermissionDO recordPermissionDO) { LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); - if (!ObjectUtils.isEmpty(recordPermissionDO.getSourceId())) wrapper.eq(RecordPermissionDO::getSourceId, recordPermissionDO.getSourceId()); + if (!ObjectUtils.isEmpty(recordPermissionDO.getSourceId())) + wrapper.eq(RecordPermissionDO::getSourceId, recordPermissionDO.getSourceId()); return recordPermissionMapper.selectList(wrapper); } @@ -52,15 +53,21 @@ public class RecordPermissionServiceImpl implements RecordPermissionService { @Override public List selectRecordPermission(RecordPermissionDO recordPermissionDO) { LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(); - queryWrapper - .eq(RecordPermissionDO::getTargetId, recordPermissionDO.getTargetId()) - .eq(RecordPermissionDO::getTargetType, recordPermissionDO.getTargetType()) - .eq(RecordPermissionDO::getPermission, recordPermissionDO.getPermission()); - if (!ObjectUtils.isEmpty(recordPermissionDO.getSourceId())) queryWrapper.eq(RecordPermissionDO::getSourceId, recordPermissionDO.getSourceId()); - if (!ObjectUtils.isEmpty(recordPermissionDO.getSourceType())) queryWrapper.eq(RecordPermissionDO::getSourceType, recordPermissionDO.getSourceType()); + queryWrapper.eq(RecordPermissionDO::getTargetId, recordPermissionDO.getTargetId()); + queryWrapper.eq(RecordPermissionDO::getTargetType, recordPermissionDO.getTargetType()); + queryWrapper.eq(RecordPermissionDO::getPermission, recordPermissionDO.getPermission()); + if (!ObjectUtils.isEmpty(recordPermissionDO.getSourceId())) + queryWrapper.eq(RecordPermissionDO::getSourceId, recordPermissionDO.getSourceId()); + if (!ObjectUtils.isEmpty(recordPermissionDO.getSourceType())) + queryWrapper.eq(RecordPermissionDO::getSourceType, recordPermissionDO.getSourceType()); return recordPermissionMapper.selectList(queryWrapper); } + @Override + public boolean insertRecordPermissionBatch(List permissionDOList) { + return recordPermissionMapper.insertBatch(permissionDOList); + } + @Override public RecordPermissionRespVO createRecordPermission(RecordPermissionSaveReqVO createReqVO) { // 插入 @@ -88,12 +95,12 @@ public class RecordPermissionServiceImpl implements RecordPermissionService { } @Override - public void deleteRecordPermissionListByIds(List ids) { + public void deleteRecordPermissionListByIds(List ids) { // 校验存在 validateRecordPermissionExists(ids); // 删除 recordPermissionMapper.deleteByIds(ids); - } + } private void validateRecordPermissionExists(List ids) { List list = recordPermissionMapper.selectByIds(ids); 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 35506515..18962bd4 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 @@ -81,4 +81,6 @@ public interface RecordRecordService { RecordRecordDO getRecordById(Long id); RecordRecordRespVO updateRecordRecordById(RecordRecordDO recordDO); + + void updateRecordRecordListByIds(List recordRecordDOS); } \ 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/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 c84d799d..441ee3d8 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 @@ -154,6 +154,15 @@ public class RecordRecordServiceImpl implements RecordRecordService { } } + @Override + public void updateRecordRecordListByIds(List recordRecordDOS) { + try { + recordRecordMapper.updateBatch(recordRecordDOS); + } catch (Exception e) { + throw new RuntimeException("update record list error"); + } + } + @Override @Transactional(rollbackFor = Exception.class) public RecordRecordRespVO updateRecordRecord(RecordRecordSaveReqVO updateReqVO) { @@ -298,6 +307,12 @@ public class RecordRecordServiceImpl implements RecordRecordService { public List selectDictPermissionByKey(String targetKey) { return businessDOList = dictionaryBusinessService.queryDictItemsByKey(targetKey); } +// +// //判断当前用户是不是最高管理员 +// public List isAdmin(){ +// +// } +// // 判断当前用户管理员权限(用户,角色,部门),返回权限列表 public List judgeIsAdmin(Long parentCategoryId, String dept,String role) { @@ -310,12 +325,12 @@ public class RecordRecordServiceImpl implements RecordRecordService { dictionaryBusinessDOS = selectDictTargetTypeByKey(RecordConstants.TargetType.TARGET_KEY); String targetUser = getDictValueByKey(dictionaryBusinessDOS, RecordConstants.TargetType.USER);// 用户权限 - recordPermissionDO.setTargetType(targetUser); - recordPermissionDO.setTargetId(userId.toString()); - recordPermissionDO.setPermission(permissionAdmin); + recordPermissionDO.setTargetType(targetUser);// 用户 + recordPermissionDO.setTargetId(userId.toString()); // 用户ID + recordPermissionDO.setPermission(permissionAdmin); // 管理员 // 判断是否是最高管理员权限 - recordPermissionDO.setSourceType(RecordConstants.TargetType.ADMIN); + recordPermissionDO.setSourceType(RecordConstants.TargetType.ADMIN); //admin List recordPermissionDOS = recordPermissionService.selectRecordPermission(recordPermissionDO); if (!ObjectUtils.isEmpty(recordPermissionDOS)) return recordPermissionDOS; @@ -482,8 +497,6 @@ public class RecordRecordServiceImpl implements RecordRecordService { PageResult recordRecordDOPageResult; - // TODO 问价下发,跳过权限校验,后续完善 - //不是管理员,判断部门、角色权限 // 获取分类ID 的父节点,并校验当前用户是否有权限 RecordCategoryDO recordCategoryDO = recordCategoryMapper.selectById(categoryId); @@ -550,6 +563,17 @@ public class RecordRecordServiceImpl implements RecordRecordService { // 获取当前登录用户 LoginUser loginUser = SecurityFrameworkUtils.getLoginUser(); Long userId = loginUser.getId(); + + // 如果是最高管理员(条件:sourceType:admin;targetId:当前用户;targetType:用户),直接返回该分类下的所有权限记录, + // 无需过滤,按照sourceId 跟 permission 字段进行分类 + List adminCheckResult = judgeIsAdmin(categoryId, null, null); + if (!ObjectUtils.isEmpty(adminCheckResult)) { + // 用户是最高管理员,直接返回该分类下的所有权限记录 + RecordPermissionDO query = new RecordPermissionDO(); + query.setSourceId(categoryId); + List allPermissions = recordPermissionService.selectAllList(query); + return ObjectUtils.isEmpty(allPermissions) ? new ArrayList<>() : allPermissions; + } // 1. 查询该分类下所有权限配置(sourceId = categoryId) RecordPermissionDO query = new RecordPermissionDO();