diff --git a/cc-admin-master/dependencies/pom.xml b/cc-admin-master/dependencies/pom.xml index cf76d62..970799d 100644 --- a/cc-admin-master/dependencies/pom.xml +++ b/cc-admin-master/dependencies/pom.xml @@ -75,10 +75,26 @@ 2.0.0 1.9.5 4.7.5.B + 5.2.3 + + + org.apache.poi + poi-ooxml + ${word.version} + + + + + org.apache.poi + poi-scratchpad + ${word.version} + + + io.netty diff --git a/cc-admin-master/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/pojo/PageParam.java b/cc-admin-master/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/pojo/PageParam.java index fcea50f..268d117 100644 --- a/cc-admin-master/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/pojo/PageParam.java +++ b/cc-admin-master/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/pojo/PageParam.java @@ -30,7 +30,7 @@ public class PageParam implements Serializable { @Schema(description = "每页条数,最大值为 100", requiredMode = Schema.RequiredMode.REQUIRED, example = "10") @NotNull(message = "每页条数不能为空") @Min(value = 1, message = "每页条数最小值为 1") - @Max(value = 99999999, message = "每页条数最大值为 99999999") + @Max(value = 100, message = "每页条数最大值为 100") private Integer pageSize = PAGE_SIZE; } diff --git a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/controller/admin/PlanItemController.java b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/controller/admin/PlanItemController.java index 14eb6ee..4329e47 100644 --- a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/controller/admin/PlanItemController.java +++ b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/controller/admin/PlanItemController.java @@ -41,14 +41,14 @@ public class PlanItemController { @PostMapping("/create") @Operation(summary = "创建隔离计划子项") - @PreAuthorize("@ss.hasPermission('isolation:plan-item:create')") + //@PreAuthorize("@ss.hasPermission('isolation:plan-item:create')") public CommonResult createPlanItem(@Valid @RequestBody PlanItemSaveReqVO createReqVO) { return success(planItemService.createPlanItem(createReqVO)); } @PutMapping("/update") @Operation(summary = "更新隔离计划子项") - @PreAuthorize("@ss.hasPermission('isolation:plan-item:update')") + //@PreAuthorize("@ss.hasPermission('isolation:plan-item:update')") public CommonResult updatePlanItem(@Valid @RequestBody PlanItemSaveReqVO updateReqVO) { planItemService.updatePlanItem(updateReqVO); return success(true); @@ -75,7 +75,7 @@ public class PlanItemController { @GetMapping("/get") @Operation(summary = "获得隔离计划子项") @Parameter(name = "id", description = "编号", required = true, example = "1024") - @PreAuthorize("@ss.hasPermission('isolation:plan-item:query')") + //@PreAuthorize("@ss.hasPermission('isolation:plan-item:query')") public CommonResult getPlanItem(@RequestParam("id") Long id) { PlanItemDO planItem = planItemService.getPlanItem(id); return success(BeanUtils.toBean(planItem, PlanItemRespVO.class)); @@ -83,7 +83,7 @@ public class PlanItemController { @GetMapping("/page") @Operation(summary = "获得隔离计划子项分页") - @PreAuthorize("@ss.hasPermission('isolation:plan-item:query')") + //@PreAuthorize("@ss.hasPermission('isolation:plan-item:query')") public CommonResult> getPlanItemPage(@Valid PlanItemPageReqVO pageReqVO) { PageResult pageResult = planItemService.getPlanItemPage(pageReqVO); return success(BeanUtils.toBean(pageResult, PlanItemRespVO.class)); diff --git a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/controller/admin/PlanItemDetailController.java b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/controller/admin/PlanItemDetailController.java index 7f3aa37..05bc4cb 100644 --- a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/controller/admin/PlanItemDetailController.java +++ b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/controller/admin/PlanItemDetailController.java @@ -44,14 +44,14 @@ public class PlanItemDetailController { @PostMapping("/create") @Operation(summary = "创建隔离计划子项详情") - @PreAuthorize("@ss.hasPermission('isolation:plan-item-detail:create')") + //@PreAuthorize("@ss.hasPermission('isolation:plan-item-detail:create')") public CommonResult createPlanItemDetail(@Valid @RequestBody PlanItemDetailSaveReqVO createReqVO) { return success(planItemDetailService.createPlanItemDetail(createReqVO)); } @PutMapping("/update") @Operation(summary = "更新隔离计划子项详情") - @PreAuthorize("@ss.hasPermission('isolation:plan-item-detail:update')") + //@PreAuthorize("@ss.hasPermission('isolation:plan-item-detail:update')") public CommonResult updatePlanItemDetail(@Valid @RequestBody PlanItemDetailSaveReqVO updateReqVO) { planItemDetailService.updatePlanItemDetail(updateReqVO); return success(true); @@ -78,7 +78,7 @@ public class PlanItemDetailController { @GetMapping("/get") @Operation(summary = "获得隔离计划子项详情") @Parameter(name = "id", description = "编号", required = true, example = "1024") - @PreAuthorize("@ss.hasPermission('isolation:plan-item-detail:query')") + // @PreAuthorize("@ss.hasPermission('isolation:plan-item-detail:query')") public CommonResult getPlanItemDetail(@RequestParam("id") Long id) { PlanItemDetailDO planItemDetail = planItemDetailService.getPlanItemDetail(id); return success(BeanUtils.toBean(planItemDetail, PlanItemDetailRespVO.class)); @@ -86,7 +86,7 @@ public class PlanItemDetailController { @GetMapping("/page") @Operation(summary = "获得隔离计划子项详情分页") - @PreAuthorize("@ss.hasPermission('isolation:plan-item-detail:query')") + //@PreAuthorize("@ss.hasPermission('isolation:plan-item-detail:query')") public CommonResult> getPlanItemDetailPage(@Valid PlanItemDetailPageReqVO pageReqVO) { PageResult pageResult = planItemDetailService.getPlanItemDetailPage(pageReqVO); return success(BeanUtils.toBean(pageResult, PlanItemDetailRespVO.class)); diff --git a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/controller/admin/PlanLifeLockController.java b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/controller/admin/PlanLifeLockController.java index 3b4bca5..c6e9a5c 100644 --- a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/controller/admin/PlanLifeLockController.java +++ b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/controller/admin/PlanLifeLockController.java @@ -46,7 +46,7 @@ public class PlanLifeLockController { @PostMapping("/create") @Operation(summary = "创建个人生命锁") - @PreAuthorize("@ss.hasPermission('isolation:plan-life-lock:create')") + //@PreAuthorize("@ss.hasPermission('isolation:plan-life-lock:create')") public CommonResult createPlanLifeLock(@Valid @RequestBody PlanLifeLockSaveReqVO createReqVO) { return success(planLifeLockService.createPlanLifeLock(createReqVO)); } @@ -54,7 +54,7 @@ public class PlanLifeLockController { @PutMapping("/update") @Operation(summary = "更新个人生命锁") - @PreAuthorize("@ss.hasPermission('isolation:plan-life-lock:update')") + //@PreAuthorize("@ss.hasPermission('isolation:plan-life-lock:update')") public CommonResult updatePlanLifeLock(@Valid @RequestBody PlanLifeLockSaveReqVO updateReqVO) { planLifeLockService.updatePlanLifeLock(updateReqVO); return success(true); @@ -63,7 +63,7 @@ public class PlanLifeLockController { @DeleteMapping("/delete") @Operation(summary = "删除个人生命锁") @Parameter(name = "id", description = "编号", required = true) - @PreAuthorize("@ss.hasPermission('isolation:plan-life-lock:delete')") + //@PreAuthorize("@ss.hasPermission('isolation:plan-life-lock:delete')") public CommonResult deletePlanLifeLock(@RequestParam("id") Long id) { planLifeLockService.deletePlanLifeLock(id); return success(true); @@ -81,7 +81,7 @@ public class PlanLifeLockController { @GetMapping("/get") @Operation(summary = "获得个人生命锁") @Parameter(name = "id", description = "编号", required = true, example = "1024") - @PreAuthorize("@ss.hasPermission('isolation:plan-life-lock:query')") + //@PreAuthorize("@ss.hasPermission('isolation:plan-life-lock:query')") public CommonResult getPlanLifeLock(@RequestParam("id") Long id) { PlanLifeLockDO planLifeLock = planLifeLockService.getPlanLifeLock(id); return success(BeanUtils.toBean(planLifeLock, PlanLifeLockRespVO.class)); @@ -89,7 +89,7 @@ public class PlanLifeLockController { @GetMapping("/page") @Operation(summary = "获得个人生命锁分页") - @PreAuthorize("@ss.hasPermission('isolation:plan-life-lock:query')") + // @PreAuthorize("@ss.hasPermission('isolation:plan-life-lock:query')") public CommonResult> getPlanLifeLockPage(@Valid PlanLifeLockPageReqVO pageReqVO) { PageResult pageResult = planLifeLockService.getPlanLifeLockPage(pageReqVO); return success(BeanUtils.toBean(pageResult, PlanLifeLockRespVO.class)); diff --git a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/controller/admin/PointController.java b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/controller/admin/PointController.java index 0e4f926..e0f571d 100644 --- a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/controller/admin/PointController.java +++ b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/controller/admin/PointController.java @@ -1,10 +1,19 @@ package cn.iocoder.yudao.module.lock.controller.admin; import cn.iocoder.yudao.module.lock.dal.PointDO; +import cn.iocoder.yudao.module.lock.dal.entity.LockEntity; +import cn.iocoder.yudao.module.lock.dal.entity.PlanEntity; +import cn.iocoder.yudao.module.lock.enums.ErrorCodeConstants; import cn.iocoder.yudao.module.lock.service.PointService; +import cn.iocoder.yudao.module.lock.vo.LockStatusVo; import cn.iocoder.yudao.module.lock.vo.PointPageReqVO; import cn.iocoder.yudao.module.lock.vo.PointRespVO; import cn.iocoder.yudao.module.lock.vo.PointSaveReqVO; +import org.apache.poi.extractor.ExtractorFactory; +import org.apache.poi.extractor.POITextExtractor; +import org.apache.poi.hwpf.extractor.WordExtractor; +import org.apache.poi.xwpf.extractor.XWPFWordExtractor; +import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.springframework.web.bind.annotation.*; import jakarta.annotation.Resource; import org.springframework.validation.annotation.Validated; @@ -15,18 +24,29 @@ import io.swagger.v3.oas.annotations.Operation; import jakarta.validation.*; import jakarta.servlet.http.*; + +import java.io.File; +import java.io.FileInputStream; +import java.io.InputStream; import java.util.*; import java.io.IOException; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import cn.iocoder.yudao.framework.common.pojo.PageParam; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.error; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import org.springframework.web.multipart.MultipartFile; + import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*; @@ -102,4 +122,62 @@ public class PointController { BeanUtils.toBean(list, PointRespVO.class)); } + + @GetMapping("/getListAll") + @Operation(summary = "获取全部") + public CommonResult getListAll() { + return success(pointService.getListAll()); + } + + @PutMapping("/bindlock") + @Operation(summary = "修改锁状态") + public CommonResult bindlock(@RequestBody LockStatusVo updateReqVO) { + pointService.bindlock(updateReqVO); + return success(true); + } + + @PutMapping("/createLock") + @Operation(summary = "上锁") + public CommonResult createLock(@RequestBody LockStatusVo updateReqVO) { + pointService.createLock(updateReqVO); + return success(true); + } + @PutMapping("/verifyLock") + @Operation(summary = "验证") + public CommonResult verifyLock(@RequestBody LockStatusVo updateReqVO) { + pointService.verifyLock(updateReqVO); + return success(true); + } + @PutMapping("/verifyUnLock") + @Operation(summary = "验证解锁") + public CommonResult verifyUnLock(@RequestBody LockStatusVo updateReqVO) { + pointService.verifyUnLock(updateReqVO); + return success(true); + } + + @PutMapping("/unLock") + @Operation(summary = "解锁") + public CommonResult unLock(@RequestBody LockStatusVo updateReqVO) { + pointService.unLock(updateReqVO); + return success(true); + } + + @PostMapping(value = "/import", consumes = "multipart/form-data") + @Operation(summary = "从 Word 文件导入隔离点") + public CommonResult importPointsFromWord(@Valid @RequestPart("file") MultipartFile file) { + + if (Objects.isNull(file) || file.isEmpty()) { + throw exception(ErrorCodeConstants.IMPORT_ERROR); + } + String contentType = file.getContentType(); + if (!"application/vnd.openxmlformats-officedocument.wordprocessingml.document".equals(contentType) && + !"application/msword".equals(contentType)) { + + throw exception(ErrorCodeConstants.IMPORT_FILE_ERROR); + } + + pointService.importPointsFromWord(file); + + return success(true); + } } \ No newline at end of file diff --git a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/dal/LockDO.java b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/dal/LockDO.java index 7e1aa10..cedf03c 100644 --- a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/dal/LockDO.java +++ b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/dal/LockDO.java @@ -39,11 +39,11 @@ public class LockDO extends BaseDO { /** * 状态 */ - private String lockStatus; + private Integer lockStatus; /** * 锁具类型 */ - private String lockType; + private Integer lockType; /** * 启用状态: 0=未启用, 1=已启用 */ diff --git a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/dal/LockGuideDO.java b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/dal/LockGuideDO.java index 95f5abe..31ac4db 100644 --- a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/dal/LockGuideDO.java +++ b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/dal/LockGuideDO.java @@ -62,4 +62,5 @@ public class LockGuideDO extends BaseDO { */ @TableField(updateStrategy = FieldStrategy.ALWAYS) private Long verifierHelperId; + } \ No newline at end of file diff --git a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/dal/PlanItemDetailDO.java b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/dal/PlanItemDetailDO.java index 4d7d551..d519cb4 100644 --- a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/dal/PlanItemDetailDO.java +++ b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/dal/PlanItemDetailDO.java @@ -40,7 +40,7 @@ public class PlanItemDetailDO extends BaseDO { */ private Long lockId; /** - * 锁状态: 0=未上锁, 1=已上锁, 2=已解锁 + * 锁箱状态: 0=未上锁, 1=已上锁, 2=已解锁 */ private Integer lockStatus; diff --git a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/dal/PlanLifeLockDO.java b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/dal/PlanLifeLockDO.java index a0782e1..78db309 100644 --- a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/dal/PlanLifeLockDO.java +++ b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/dal/PlanLifeLockDO.java @@ -40,7 +40,7 @@ public class PlanLifeLockDO extends BaseDO { /** * 生命锁类型 */ - private String lockType; + private Integer lockType; /** * 锁定状态: 0=未上锁, 1=已上锁 */ diff --git a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/dal/entity/LockEntity.java b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/dal/entity/LockEntity.java new file mode 100644 index 0000000..ed4e7d8 --- /dev/null +++ b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/dal/entity/LockEntity.java @@ -0,0 +1,27 @@ +package cn.iocoder.yudao.module.lock.dal.entity; + +import cn.iocoder.yudao.module.lock.dal.*; +import lombok.Data; + +import java.util.List; + +@Data +public class LockEntity { + + private List isolationPointList; + + private List lockList; + + private List lockGuideList; + + private List planList; + + private List planItemDetailList; + + private List planItemList; + + private List planLifeLockList; + + private List pointList; + +} diff --git a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/dal/entity/PlanLifeLockEntity.java b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/dal/entity/PlanLifeLockEntity.java index 78765a6..425d6a4 100644 --- a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/dal/entity/PlanLifeLockEntity.java +++ b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/dal/entity/PlanLifeLockEntity.java @@ -30,7 +30,7 @@ public class PlanLifeLockEntity { /** * 生命锁类型 */ - private String lockType; + private Integer lockType; /** * 锁定状态: 0=未上锁, 1=已上锁 */ diff --git a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/enums/ErrorCodeConstants.java b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/enums/ErrorCodeConstants.java index 770ef48..9e417b9 100644 --- a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/enums/ErrorCodeConstants.java +++ b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/enums/ErrorCodeConstants.java @@ -10,7 +10,6 @@ public interface ErrorCodeConstants { ErrorCode LOCK_WORD_RECORD_NOT_EXISTS = new ErrorCode(1_005_000_002, "电子锁操作记录不存在"); ErrorCode ISOLATION_POINT_NOT_EXISTS = new ErrorCode(1_005_000_003, "指导书与隔离点关联不存在"); - ErrorCode PLAN_NOT_EXISTS = new ErrorCode(1_005_000_004, "隔离计划不存在"); ErrorCode PLAN_ITEM_NOT_EXISTS = new ErrorCode(1_005_000_005, "隔离计划子项不存在"); @@ -22,6 +21,24 @@ public interface ErrorCodeConstants { ErrorCode PLAN_LIFE_LOCK_NOT_EXISTS = new ErrorCode(1_005_000_008, "个人生命锁不存在"); ErrorCode POINT_NOT_EXISTS = new ErrorCode(1_005_000_009, "隔离点不存在"); + + ErrorCode POINT_NUMBER_EXISTS = new ErrorCode(1_005_000_009, "隔离点编号已经存在"); ErrorCode CENTRALIZED_LISTING_LOCK_NOT_EXISTS = new ErrorCode(1_005_000_010, "请先创建集中挂牌人锁"); ErrorCode CENTRALIZED_LISTING_LOCK_EXISTS = new ErrorCode(1_005_000_010, "请勿重复创建挂牌人锁"); + + ErrorCode ISOLATION_POINT_EXISTS = new ErrorCode(1_005_000_011, "指导书与隔离点关联已经存在"); + + ErrorCode PLAN_LIFE_LOCK_EXISTS = new ErrorCode(1_005_000_001, "需要等受影响人锁全部解开才能开锁"); + ErrorCode LOCK_STATUS_ERROR = new ErrorCode(1_005_000_001, "已经上锁无法重复上锁"); + + ErrorCode DETAIL_UNLOCK_STATUS_ERROR = new ErrorCode(1_005_000_001, "该锁已经解锁"); + ErrorCode DETAIL_LOCK_STATUS_ERROR = new ErrorCode(1_005_000_001, "该锁已经验证"); + ErrorCode DETAIL_LOCK_VERITY_ERROR = new ErrorCode(1_005_000_001, "该锁未验证"); + + ErrorCode PLAN_ITEM_DETAIL_LOCK_STATUS_ERROR = new ErrorCode(1_005_000_001, "无法重复上锁"); + + ErrorCode IMPORT_ERROR = new ErrorCode(1_005_000_001, "上传的 Word 文件不能为空"); + + ErrorCode IMPORT_FILE_ERROR = new ErrorCode(1_005_000_001, "仅支持 Word 文件(.doc 或 .docx"); + } diff --git a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/mapper/LockMapper.java b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/mapper/LockMapper.java index f573af5..28c2475 100644 --- a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/mapper/LockMapper.java +++ b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/mapper/LockMapper.java @@ -6,6 +6,10 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Update; + +import java.util.List; /** * 电子锁 Mapper @@ -28,4 +32,6 @@ public interface LockMapper extends BaseMapperX { .orderByDesc(LockDO::getId)); } + + void updateStatus(@Param("id") Long id,@Param("status")Integer status); } \ No newline at end of file diff --git a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/mapper/PlanItemDetailMapper.java b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/mapper/PlanItemDetailMapper.java index 77f3a1e..c60b9b4 100644 --- a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/mapper/PlanItemDetailMapper.java +++ b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/mapper/PlanItemDetailMapper.java @@ -6,6 +6,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Update; /** @@ -26,4 +27,5 @@ public interface PlanItemDetailMapper extends BaseMapperX { .orderByDesc(PlanItemDetailDO::getId)); } + void updateDetailLockStatus(Integer status,Long planItemDetailId, Long lockId,Long operateRecordId,Long verifyRecordId); } \ No newline at end of file diff --git a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/mapper/PlanItemMapper.java b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/mapper/PlanItemMapper.java index ce91a98..83e7684 100644 --- a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/mapper/PlanItemMapper.java +++ b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/mapper/PlanItemMapper.java @@ -28,4 +28,5 @@ public interface PlanItemMapper extends BaseMapperX { .orderByDesc(PlanItemDO::getId)); } + void updateStatus(Long isolationPlanItemId, Integer status); } \ No newline at end of file diff --git a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/mapper/PlanLifeLockMapper.java b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/mapper/PlanLifeLockMapper.java index b93025d..c57b4ad 100644 --- a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/mapper/PlanLifeLockMapper.java +++ b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/mapper/PlanLifeLockMapper.java @@ -7,6 +7,8 @@ import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import org.apache.ibatis.annotations.Mapper; +import java.util.Date; + /** * 个人生命锁 Mapper * @@ -27,4 +29,5 @@ public interface PlanLifeLockMapper extends BaseMapperX { .orderByDesc(PlanLifeLockDO::getId)); } + void updateStatus(Long id, Integer status, Date unlockTime); } \ No newline at end of file diff --git a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/mapper/PlanMapper.java b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/mapper/PlanMapper.java index 934eade..40ff4e6 100644 --- a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/mapper/PlanMapper.java +++ b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/mapper/PlanMapper.java @@ -22,4 +22,5 @@ public interface PlanMapper extends BaseMapperX { .orderByDesc(PlanDO::getId)); } + void updateStatus(Long planId, Integer status); } \ No newline at end of file diff --git a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/mapper/PointMapper.java b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/mapper/PointMapper.java index 6328cfe..531f820 100644 --- a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/mapper/PointMapper.java +++ b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/mapper/PointMapper.java @@ -6,6 +6,10 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Update; + +import java.util.List; /** * 隔离点 Mapper @@ -24,4 +28,5 @@ public interface PointMapper extends BaseMapperX { .orderByDesc(PointDO::getId)); } + void updateStatusBatch(@Param("idList") List idList, @Param("status") Integer status); } \ No newline at end of file diff --git a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/service/LockService.java b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/service/LockService.java index 1fb3b9e..fb2c448 100644 --- a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/service/LockService.java +++ b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/service/LockService.java @@ -60,4 +60,6 @@ public interface LockService { */ PageResult getLockPage(LockPageReqVO pageReqVO); + + } \ No newline at end of file diff --git a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/service/PointService.java b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/service/PointService.java index 6c65745..da80111 100644 --- a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/service/PointService.java +++ b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/service/PointService.java @@ -3,11 +3,15 @@ package cn.iocoder.yudao.module.lock.service; import java.util.*; import cn.iocoder.yudao.module.lock.dal.PointDO; +import cn.iocoder.yudao.module.lock.dal.entity.LockEntity; +import cn.iocoder.yudao.module.lock.dal.entity.PlanEntity; +import cn.iocoder.yudao.module.lock.vo.LockStatusVo; import cn.iocoder.yudao.module.lock.vo.PointPageReqVO; import cn.iocoder.yudao.module.lock.vo.PointSaveReqVO; import jakarta.validation.*; import cn.iocoder.yudao.framework.common.pojo.PageResult; +import org.springframework.web.multipart.MultipartFile; /** * 隔离点 Service 接口 @@ -61,4 +65,18 @@ public interface PointService { */ PageResult getPointPage(PointPageReqVO pageReqVO); + + LockEntity getListAll(); + + void bindlock(LockStatusVo updateReqVO); + + void createLock(LockStatusVo updateReqVO); + + void verifyLock(LockStatusVo updateReqVO); + + void verifyUnLock(LockStatusVo updateReqVO); + + void unLock(LockStatusVo updateReqVO); + + void importPointsFromWord(MultipartFile file); } \ No newline at end of file diff --git a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/service/impl/IsolationPointServiceImpl.java b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/service/impl/IsolationPointServiceImpl.java index 61f401d..f059132 100644 --- a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/service/impl/IsolationPointServiceImpl.java +++ b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/service/impl/IsolationPointServiceImpl.java @@ -7,6 +7,7 @@ import cn.iocoder.yudao.module.lock.mapper.IsolationPointMapper; import cn.iocoder.yudao.module.lock.service.IsolationPointService; import cn.iocoder.yudao.module.lock.vo.IsolationPointPageReqVO; import cn.iocoder.yudao.module.lock.vo.IsolationPointSaveReqVO; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.springframework.stereotype.Service; import jakarta.annotation.Resource; import org.springframework.validation.annotation.Validated; @@ -34,6 +35,14 @@ public class IsolationPointServiceImpl implements IsolationPointService { @Override public Long createIsolationPoint(IsolationPointSaveReqVO createReqVO) { // 插入 + QueryWrapper objectQueryWrapper = new QueryWrapper<>(); + objectQueryWrapper.eq("guide_id", createReqVO.getGuideId()); + objectQueryWrapper.eq("isolation_point_id", createReqVO.getIsolationPointId()); + IsolationPointDO isolationPointDO = isolationPointMapper.selectOne(objectQueryWrapper); + if (isolationPointDO != null) { + throw ServiceExceptionUtil.exception(ErrorCodeConstants.ISOLATION_POINT_EXISTS); + } + IsolationPointDO isolationPoint = BeanUtils.toBean(createReqVO, IsolationPointDO.class); isolationPointMapper.insert(isolationPoint); @@ -45,6 +54,15 @@ public class IsolationPointServiceImpl implements IsolationPointService { public void updateIsolationPoint(IsolationPointSaveReqVO updateReqVO) { // 校验存在 validateIsolationPointExists(updateReqVO.getId()); + + QueryWrapper objectQueryWrapper = new QueryWrapper<>(); + objectQueryWrapper.eq("guide_id", updateReqVO.getGuideId()); + objectQueryWrapper.eq("isolation_point_id", updateReqVO.getIsolationPointId()); + IsolationPointDO isolationPointDO = isolationPointMapper.selectOne(objectQueryWrapper); + if (isolationPointDO != null && !isolationPointDO.getId().equals(updateReqVO.getId())) { + throw ServiceExceptionUtil.exception(ErrorCodeConstants.ISOLATION_POINT_EXISTS); + } + // 更新 IsolationPointDO updateObj = BeanUtils.toBean(updateReqVO, IsolationPointDO.class); isolationPointMapper.updateById(updateObj); diff --git a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/service/impl/LockServiceImpl.java b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/service/impl/LockServiceImpl.java index f9a90dc..0f1bc3e 100644 --- a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/service/impl/LockServiceImpl.java +++ b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/service/impl/LockServiceImpl.java @@ -8,6 +8,7 @@ import cn.iocoder.yudao.module.lock.service.LockService; import cn.iocoder.yudao.module.lock.vo.LockPageReqVO; import cn.iocoder.yudao.module.lock.vo.LockSaveReqVO; import cn.iocoder.yudao.framework.common.pojo.PageResult; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import jakarta.annotation.Resource; @@ -49,6 +50,7 @@ public class LockServiceImpl implements LockService { // 校验存在 log.info("[updateLock][updateReqVO({})]", updateReqVO); validateLockExists(updateReqVO.getId()); + // 更新 LockDO updateObj = BeanUtils.toBean(updateReqVO, LockDO.class); lockMapper.updateById(updateObj); @@ -70,7 +72,8 @@ public class LockServiceImpl implements LockService { private void validateLockExists(Long id) { - if (lockMapper.selectById(id) == null) { + LockDO lockDO = lockMapper.selectById(id); + if (lockDO == null) { throw ServiceExceptionUtil.exception(ErrorCodeConstants.LOCK_NOT_EXISTS); } } @@ -85,4 +88,5 @@ public class LockServiceImpl implements LockService { return lockMapper.selectPage(pageReqVO); } + } \ No newline at end of file diff --git a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/service/impl/PlanItemDetailServiceImpl.java b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/service/impl/PlanItemDetailServiceImpl.java index 5502865..80a5c30 100644 --- a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/service/impl/PlanItemDetailServiceImpl.java +++ b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/service/impl/PlanItemDetailServiceImpl.java @@ -50,6 +50,12 @@ public class PlanItemDetailServiceImpl implements PlanItemDetailService { planItemDetailMapper.updateById(updateObj); } + private void checkLockStatus(PlanItemDetailSaveReqVO updateReqVO) { + if (updateReqVO.getLockStatus() != null){ + + } + } + @Override public void deletePlanItemDetail(Long id) { // 校验存在 diff --git a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/service/impl/PlanLifeLockServiceImpl.java b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/service/impl/PlanLifeLockServiceImpl.java index a04bd9c..9f4831f 100644 --- a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/service/impl/PlanLifeLockServiceImpl.java +++ b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/service/impl/PlanLifeLockServiceImpl.java @@ -1,8 +1,11 @@ package cn.iocoder.yudao.module.lock.service.impl; import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; +import cn.iocoder.yudao.module.lock.dal.LockDO; +import cn.iocoder.yudao.module.lock.dal.PlanItemDetailDO; import cn.iocoder.yudao.module.lock.dal.PlanLifeLockDO; import cn.iocoder.yudao.module.lock.enums.ErrorCodeConstants; +import cn.iocoder.yudao.module.lock.mapper.PlanItemDetailMapper; import cn.iocoder.yudao.module.lock.mapper.PlanLifeLockMapper; import cn.iocoder.yudao.module.lock.service.PlanLifeLockService; import cn.iocoder.yudao.module.lock.vo.PlanLifeLockPageReqVO; @@ -32,7 +35,8 @@ public class PlanLifeLockServiceImpl implements PlanLifeLockService { @Resource private PlanLifeLockMapper planLifeLockMapper; - @Override + @Resource + private PlanItemDetailMapper planItemDetailMapper; public Long createPlanLifeLock(PlanLifeLockSaveReqVO createReqVO) { List listAll = getListAll(createReqVO.getIsolationPlanItemDetailId()); @@ -77,9 +81,23 @@ public class PlanLifeLockServiceImpl implements PlanLifeLockService { private void validatePlanLifeLockExists(Long id) { - if (planLifeLockMapper.selectById(id) == null) { + PlanLifeLockDO planLifeLockDO = planLifeLockMapper.selectById(id); + if (planLifeLockDO == null) { throw ServiceExceptionUtil.exception(ErrorCodeConstants.PLAN_LIFE_LOCK_NOT_EXISTS); } + PlanItemDetailDO planItemDetailDO = planItemDetailMapper.selectById(planLifeLockDO.getIsolationPlanItemDetailId()); + if (!planItemDetailDO.getLockStatus().equals(3)){ + throw ServiceExceptionUtil.exception(ErrorCodeConstants.DETAIL_UNLOCK_STATUS_ERROR); + } + QueryWrapper objectQueryWrapper = new QueryWrapper<>(); + objectQueryWrapper.eq("isolation_plan_item_detail_id", planLifeLockDO.getIsolationPlanItemDetailId()); + objectQueryWrapper.eq("lock_type", 5);//5是受影响人锁 + objectQueryWrapper.eq("lock_status", 1);//1是锁已上锁 + List planLifeLockDOS = planLifeLockMapper.selectList(objectQueryWrapper); + if (!planLifeLockDOS.isEmpty() && !planLifeLockDO.getLockType().equals(5)){ + throw ServiceExceptionUtil.exception(ErrorCodeConstants.PLAN_LIFE_LOCK_EXISTS); + } + } @Override diff --git a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/service/impl/PointServiceImpl.java b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/service/impl/PointServiceImpl.java index 1328b29..b3ce223 100644 --- a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/service/impl/PointServiceImpl.java +++ b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/service/impl/PointServiceImpl.java @@ -1,22 +1,34 @@ package cn.iocoder.yudao.module.lock.service.impl; +import cn.hutool.core.collection.CollectionUtil; import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; -import cn.iocoder.yudao.module.lock.dal.PointDO; +import cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils; +import cn.iocoder.yudao.module.lock.dal.*; +import cn.iocoder.yudao.module.lock.dal.entity.*; import cn.iocoder.yudao.module.lock.enums.ErrorCodeConstants; -import cn.iocoder.yudao.module.lock.mapper.PointMapper; +import cn.iocoder.yudao.module.lock.mapper.*; +import cn.iocoder.yudao.module.lock.service.LockWorkRecordService; import cn.iocoder.yudao.module.lock.service.PointService; -import cn.iocoder.yudao.module.lock.vo.PointPageReqVO; -import cn.iocoder.yudao.module.lock.vo.PointSaveReqVO; +import cn.iocoder.yudao.module.lock.util.WordUtils; +import cn.iocoder.yudao.module.lock.vo.*; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.springframework.stereotype.Service; import jakarta.annotation.Resource; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; import org.springframework.validation.annotation.Validated; +import java.time.LocalDateTime; import java.util.*; +import java.util.List; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import org.springframework.web.multipart.MultipartFile; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static java.util.stream.Collectors.groupingBy; /** @@ -28,13 +40,42 @@ import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionU @Validated public class PointServiceImpl implements PointService { + private static final int LOCK_STATUS_UNLOCKED = 0; + private static final int LOCK_STATUS_LOCKED = 5; + private static final int UNLOCK_STATUS_LOCKED = 4; + private static final int PLAN_ITEM_STATUS_UNLOCKED = 1; + private static final int PLAN_STATUS_PARTIALLY_UNLOCKED = 2; + private static final int LOCK_MAIN_STATUS_UNLOCKED = 2; + private static final int CREATE_LOCK_STATUS = 7; + private static final int VERITY_STATUS_UNLOCKED = 3; @Resource private PointMapper pointMapper; + @Resource + private IsolationPointMapper isolationPointMapper; + @Resource + private LockGuideMapper lockGuideMapper; + @Resource + private PlanItemDetailMapper planItemDetailMapper; + @Resource + private PlanItemMapper planItemMapper; + @Resource + private PlanLifeLockMapper planLifeLockMapper; + @Resource + private LockMapper lockMapper; + @Resource + private PlanMapper planMapper; @Override public Long createPoint(PointSaveReqVO createReqVO) { // 插入 PointDO point = BeanUtils.toBean(createReqVO, PointDO.class); + + QueryWrapper objectQueryWrapper = new QueryWrapper<>(); + objectQueryWrapper.eq("ip_number", point.getIpNumber()); + PointDO pointDO = pointMapper.selectOne(objectQueryWrapper); + if (pointDO != null) { + throw ServiceExceptionUtil.exception(ErrorCodeConstants.POINT_NUMBER_EXISTS); + } pointMapper.insert(point); // 返回 @@ -45,6 +86,14 @@ public class PointServiceImpl implements PointService { public void updatePoint(PointSaveReqVO updateReqVO) { // 校验存在 validatePointExists(updateReqVO.getId()); + + QueryWrapper objectQueryWrapper = new QueryWrapper<>(); + objectQueryWrapper.eq("ip_number", updateReqVO.getIpNumber()); + PointDO pointDO = pointMapper.selectOne(objectQueryWrapper); + if (pointDO != null && !pointDO.getId().equals(updateReqVO.getId())) { + throw ServiceExceptionUtil.exception(ErrorCodeConstants.POINT_NUMBER_EXISTS); + } + // 更新 PointDO updateObj = BeanUtils.toBean(updateReqVO, PointDO.class); pointMapper.updateById(updateObj); @@ -59,10 +108,10 @@ public class PointServiceImpl implements PointService { } @Override - public void deletePointListByIds(List ids) { + public void deletePointListByIds(List ids) { // 删除 pointMapper.deleteByIds(ids); - } + } private void validatePointExists(Long id) { @@ -81,4 +130,224 @@ public class PointServiceImpl implements PointService { return pointMapper.selectPage(pageReqVO); } + + @Override + public LockEntity getListAll() { + LockEntity lockEntity = new LockEntity(); + lockEntity.setPointList(pointMapper.selectList()); + lockEntity.setIsolationPointList(isolationPointMapper.selectList()); + lockEntity.setLockGuideList(lockGuideMapper.selectList()); + lockEntity.setPlanItemDetailList(planItemDetailMapper.selectList()); + lockEntity.setPlanItemList(planItemMapper.selectList()); + lockEntity.setPlanLifeLockList(planLifeLockMapper.selectList()); + lockEntity.setLockList(lockMapper.selectList()); + lockEntity.setPlanList(planMapper.selectList()); + return lockEntity; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void bindlock(LockStatusVo updateReqVO) { + + QueryWrapper objectQueryWrapper = new QueryWrapper<>(); + objectQueryWrapper.eq("id", updateReqVO.getPlanItemDetailId()); + + List planItemDetailDOS = planItemDetailMapper.selectList(objectQueryWrapper); + if (CollectionUtils.isEmpty(planItemDetailDOS)) { + throw ServiceExceptionUtil.exception(ErrorCodeConstants.PLAN_ITEM_DETAIL_NOT_EXISTS); + } + if (planItemDetailDOS.get(0).getLockStatus().equals(1)) { + throw ServiceExceptionUtil.exception(ErrorCodeConstants.PLAN_ITEM_DETAIL_LOCK_STATUS_ERROR); + } + + lockMapper.updateStatus(updateReqVO.getLockId(), 7);//上锁已验证 + + List pointIdList = planItemDetailDOS.stream().map(PlanItemDetailDO::getIsolationPointId).toList(); + pointMapper.updateStatusBatch(pointIdList, 1); + + planItemDetailMapper.updateDetailLockStatus(1, updateReqVO.getPlanItemDetailId(), updateReqVO.getLockId(), null, null); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void createLock(LockStatusVo updateReqVO) { + PlanItemDetailDO planItemDetailDO = planItemDetailMapper.selectById(updateReqVO.getPlanItemDetailId()); + if (planItemDetailDO == null) { + throw ServiceExceptionUtil.exception(ErrorCodeConstants.PLAN_ITEM_DETAIL_NOT_EXISTS); + } + LockDO lockDO = lockMapper.selectById(planItemDetailDO.getLockId()); + if (lockDO == null) { + throw ServiceExceptionUtil.exception(ErrorCodeConstants.LOCK_NOT_EXISTS); + } + if (lockDO.getLockStatus() != CREATE_LOCK_STATUS) { + throw ServiceExceptionUtil.exception(ErrorCodeConstants.LOCK_STATUS_ERROR); + + } + lockMapper.updateStatus(lockDO.getId(), 3); + planItemDetailMapper.updateDetailLockStatus(2, updateReqVO.getPlanItemDetailId(), null, updateReqVO.getOperateRecordld(), null); + + + createPlanLiteLock(1, updateReqVO); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void verifyLock(LockStatusVo updateReqVO) { + PlanItemDetailDO planItemDetailDO = planItemDetailMapper.selectById(updateReqVO.getPlanItemDetailId()); + if (planItemDetailDO == null) { + throw ServiceExceptionUtil.exception(ErrorCodeConstants.PLAN_ITEM_DETAIL_NOT_EXISTS); + } + if (planItemDetailDO.getLockStatus() != PLAN_STATUS_PARTIALLY_UNLOCKED) { + throw ServiceExceptionUtil.exception(ErrorCodeConstants.DETAIL_LOCK_VERITY_ERROR); + } + + createPlanLiteLock(3, updateReqVO); + planItemDetailMapper.updateDetailLockStatus(3, updateReqVO.getPlanItemDetailId(), null, null, updateReqVO.getVerifyRecordId()); + + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void verifyUnLock(LockStatusVo updateReqVO) { + PlanItemDetailDO planItemDetailDO = planItemDetailMapper.selectById(updateReqVO.getPlanItemDetailId()); + if (planItemDetailDO == null) { + throw ServiceExceptionUtil.exception(ErrorCodeConstants.PLAN_ITEM_DETAIL_NOT_EXISTS); + } + if (planItemDetailDO.getLockStatus() != VERITY_STATUS_UNLOCKED) { + throw ServiceExceptionUtil.exception(ErrorCodeConstants.DETAIL_LOCK_STATUS_ERROR); + } + QueryWrapper lockDOQueryWrapper = new QueryWrapper<>(); + lockDOQueryWrapper.eq("isolation_plan_item_detail_id", planItemDetailDO.getId()); + lockDOQueryWrapper.eq("lock_type", 5); + List lockDOS = planLifeLockMapper.selectList(lockDOQueryWrapper); + + boolean lockStatus = lockDOS.stream().anyMatch(plan -> plan.getLockStatus() == 1); + if (lockStatus) { + throw exception(ErrorCodeConstants.PLAN_LIFE_LOCK_EXISTS); + } + planItemDetailDO.setLockStatus(UNLOCK_STATUS_LOCKED); + + planItemDetailMapper.updateById(planItemDetailDO); + planLifeLockMapper.updateStatus(updateReqVO.getLifelockId(), 0, new Date()); + + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void unLock(LockStatusVo updateReqVO) { + + PlanItemDetailDO planItemDetailDO = planItemDetailMapper.selectById(updateReqVO.getPlanItemDetailId()); + if (planItemDetailDO == null) { + throw exception(ErrorCodeConstants.PLAN_ITEM_DETAIL_NOT_EXISTS); + } + if (planItemDetailDO.getLockStatus() != UNLOCK_STATUS_LOCKED) { + throw exception(ErrorCodeConstants.DETAIL_UNLOCK_STATUS_ERROR); + } + QueryWrapper lockDOQueryWrapper = new QueryWrapper<>(); + lockDOQueryWrapper.eq("isolation_plan_item_detail_id", planItemDetailDO.getId()); + lockDOQueryWrapper.eq("lock_type", 5); + List lockDOS = planLifeLockMapper.selectList(lockDOQueryWrapper); + + boolean lockStatus = lockDOS.stream().anyMatch(plan -> plan.getLockStatus() == 1); + if (lockStatus) { + throw exception(ErrorCodeConstants.PLAN_LIFE_LOCK_EXISTS); + } + + planItemDetailMapper.updateDetailLockStatus(LOCK_STATUS_LOCKED, updateReqVO.getPlanItemDetailId(), + null, null, null); + + planLifeLockMapper.updateStatus(updateReqVO.getLifelockId(), LOCK_STATUS_UNLOCKED, new Date()); + + + lockMapper.updateStatus(planItemDetailDO.getLockId(), LOCK_MAIN_STATUS_UNLOCKED); + + + // 2. 查询关联的生命锁状态 + QueryWrapper lifeLockQuery = new QueryWrapper() + .eq("isolation_plan_item_detail_id", updateReqVO.getPlanItemDetailId()); + List lifeLocks = planLifeLockMapper.selectList(lifeLockQuery); + + + boolean allUnlocked = lifeLocks.stream().allMatch(plan -> plan.getLockStatus() == LOCK_STATUS_UNLOCKED); + + + QueryWrapper objectQueryWrapper11 = new QueryWrapper<>(); + objectQueryWrapper11.eq("isolation_plan_item_id", planItemDetailDO.getIsolationPlanItemId()); + List planItemDetailDOS1 = planItemDetailMapper.selectList(objectQueryWrapper11); + + boolean detailLocked = planItemDetailDOS1.stream().allMatch(plan -> plan.getLockStatus() == LOCK_STATUS_LOCKED); + + + if (allUnlocked && detailLocked) { + updatePlanAndItemStatus(planItemDetailDO.getIsolationPlanItemId(), updateReqVO.getPlanId()); + } + // 3. 更新隔离点位状态 + QueryWrapper objectQueryWrapper1 = new QueryWrapper<>(); + objectQueryWrapper1.eq("isolation_point_id", planItemDetailDO.getIsolationPointId()); + List planItemDetailDOS = planItemDetailMapper.selectList(objectQueryWrapper1); + boolean pointStatus = planItemDetailDOS.stream().allMatch(plan -> plan.getLockStatus() == LOCK_STATUS_LOCKED); + if (pointStatus) { + pointMapper.updateStatusBatch(Collections.singletonList(planItemDetailDO.getIsolationPointId()), 0); + } + + + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void importPointsFromWord(MultipartFile file) { + try { + String rawContent = WordUtils.extractTextFromWord(file); + LockWordPointVo lockWordPointVo = WordUtils.parseAndPrintStructuredContent(rawContent); + + ArrayList objects = new ArrayList<>(); + if (CollectionUtil.isNotEmpty(lockWordPointVo.getDataVoList())) { + for (LockWordPointDataVo lockWordPointDataVo : lockWordPointVo.getDataVoList()) { + PointDO pointDO = new PointDO(); + pointDO.setStatus(0); + pointDO.setIpName(lockWordPointDataVo.getLocation()); + pointDO.setIpNumber(lockWordPointDataVo.getSequence()); + pointDO.setIpType("1"); + pointDO.setGuideLockNums(Integer.valueOf(lockWordPointVo.getDeviceLock())); + objects.add(pointDO); + } + } + pointMapper.insertBatch(objects); + + + } catch (Exception e) { + throw ServiceExceptionUtil.exception(ErrorCodeConstants.IMPORT_ERROR); + } + } + + private void updatePlanAndItemStatus(Long isolationPlanItemId, Long planId) { + // 更新计划项状态 + planItemMapper.updateStatus(isolationPlanItemId, PLAN_ITEM_STATUS_UNLOCKED); + + // 检查是否需要更新主计划的状态 + QueryWrapper planItemQuery = new QueryWrapper() + .eq("isolation_plan_id", planId); + List planItems = planItemMapper.selectList(planItemQuery); + + boolean anyPlanItemUnlocked = planItems.stream() + .allMatch(plan -> plan.getStatus() == PLAN_ITEM_STATUS_UNLOCKED); + + + if (anyPlanItemUnlocked) { + planMapper.updateStatus(planId, PLAN_ITEM_STATUS_UNLOCKED); + } + } + + private void createPlanLiteLock(Integer type, LockStatusVo updateReqVO) { + Long userId = WebFrameworkUtils.getLoginUserId(); + + PlanLifeLockDO planLifeLockDO = new PlanLifeLockDO(); + planLifeLockDO.setIsolationPlanItemDetailId(updateReqVO.getPlanItemDetailId()); + planLifeLockDO.setUserId(userId); + planLifeLockDO.setLockType(type); + planLifeLockDO.setLockStatus(1); + planLifeLockDO.setLockTime(LocalDateTime.now()); + planLifeLockMapper.insert(planLifeLockDO); + } + } \ No newline at end of file diff --git a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/util/WordUtils.java b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/util/WordUtils.java new file mode 100644 index 0000000..d799093 --- /dev/null +++ b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/util/WordUtils.java @@ -0,0 +1,174 @@ +package cn.iocoder.yudao.module.lock.util; + +import cn.iocoder.yudao.module.lock.vo.LockWordPointDataVo; +import cn.iocoder.yudao.module.lock.vo.LockWordPointVo; +import lombok.extern.slf4j.Slf4j; +import org.apache.poi.extractor.ExtractorFactory; +import org.apache.poi.extractor.POITextExtractor; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.io.FileInputStream; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.regex.Pattern; + +@Slf4j +public class WordUtils { + + + public static void main(String[] args) { + // ================================================================= + // 请将此路径修改为您本地Word文件的实际路径 + // 支持 .doc 和 .docx 格式 + // ================================================================= + var filePath = "C:\\Users\\admin\\Desktop\\1.docx"; // <-- 请确保路径正确 + + var file = new File(filePath); + + if (!file.exists() || !file.isFile()) { + // 2. 使用 log.error 记录错误 + log.error("错误:文件不存在或不是一个有效的文件路径 -> {}", filePath); + return; + } + + try { + // 1. 从 Word 文件中提取纯文本 + var rawContent = extractTextFrom(file); + + // 2. 解析提取出的文本并按结构化格式打印 + parseAndPrintStructuredContent(rawContent); + + } catch (Exception e) { + // 3. 记录异常信息和堆栈 + log.error("处理文件时发生未知异常。", e); + } + } + + /** + * 整合所有解析逻辑,并结构化地打印出来。 + * + * @param rawContent 从 Word 中提取的完整纯文本 + */ + public static LockWordPointVo parseAndPrintStructuredContent(String rawContent) { + + var energyPattern = Pattern.compile("☑ ([^、☐\\s]+)"); + var energyMatcher = energyPattern.matcher(rawContent); + var selectedEnergies = new ArrayList(); + while (energyMatcher.find()) { + selectedEnergies.add(energyMatcher.group(1)); + } + + if (selectedEnergies.isEmpty()) { + log.info("未找到任何已勾选的能量项。"); + } else { + log.info("已勾选的能量: " + String.join(", ", selectedEnergies)); + } + + LockWordPointVo lockWordPointVo = new LockWordPointVo(); + // --- 2. 解析:上锁前准备 --- + String deviceLock = extractAndPrint("设备锁数量", rawContent, "准备设备锁:([^;]+);"); + String repairBrand = extractAndPrint("停机大修牌数量", rawContent, "停机大修牌:([^;]+);"); + String sixClip = extractAndPrint("6孔锁夹数量", rawContent, "6孔锁夹:([^;]+);"); + String locking = extractAndPrint("上锁装置", rawContent, "上锁装置:([^\n\r]+)"); + lockWordPointVo.setDeviceLock(deviceLock); + lockWordPointVo.setRepairBrand(repairBrand); + lockWordPointVo.setSixClip(sixClip); + lockWordPointVo.setLocking(locking); + + // --- 3. 解析:表格数据 --- + var dataList = new ArrayList(); + var lines = rawContent.split("\\r?\\n"); + var isParsingTable = false; + + for (var line : lines) { + var trimmedLine = line.trim(); + if (trimmedLine.isEmpty()) continue; + if (trimmedLine.startsWith("验证方法")) break; // 表格内容结束 + + if (trimmedLine.contains("隔离序号") && trimmedLine.contains("隔离点编号")) { + isParsingTable = true; + continue; // 这是标题行,跳过 + } + + if (isParsingTable) { + var parts = trimmedLine.split("\t"); + if (parts.length >= 4) { // 确保数据足够,避免数组越界 + var data = new LockWordPointDataVo(parts[0], parts[1], parts[2], parts[3]); + dataList.add(data); + } else { + log.warn("检测到格式不正确的表格行,已跳过: {}", trimmedLine); + } + } + } + + // 打印解析出的表格数据 + if (dataList.isEmpty()) { + log.warn("未找到或未能解析出表格数据。"); + } else { + lockWordPointVo.setDataVoList(dataList); + } + return lockWordPointVo; + } + + /** + * 辅助方法:根据正则表达式从文本中提取信息并打印。 + * + * @param label 信息的标签 + * @param content 原始内容 + * @param regex 正则表达式 + */ + private static String extractAndPrint(String label, String content, String regex) { + var pattern = Pattern.compile(regex); + var matcher = pattern.matcher(content); + String value = null; + if (matcher.find()) { + value = matcher.group(1).replaceAll("[把个]|至少", "").trim(); + log.info(label + ": " + (value.isEmpty() ? "未填写" : value)); + } else { + log.error(label + ": 未找到"); + } + return value; + } + /** + * 使用 ExtractorFactory 自动识别上传的 Office 文件真实格式并提取纯文本。 + * 该方法直接处理 MultipartFile,避免了先将文件存到本地的需要。 + * + * @param multipartFile 要处理的上传文件 (e.g., .doc, .docx, .xls, .xlsx, .ppt, .pptx) + * @return 提取出的纯文本 + * @throws Exception 如果文件处理失败,例如文件为空、无法识别格式或读取错误 + */ + public static String extractTextFromWord(MultipartFile multipartFile) throws Exception { + // 1. 校验文件是否为空,增加健壮性 + if (multipartFile == null || multipartFile.isEmpty()) { + throw new IllegalArgumentException("文件不能为空。"); + } + + // 2. 使用 try-with-resources 确保 InputStream 和 Extractor 被自动关闭 + // 直接从 MultipartFile 获取输入流,而不是从本地文件 + try (InputStream inputStream = multipartFile.getInputStream(); + POITextExtractor extractor = ExtractorFactory.createExtractor(inputStream)) { + + if (extractor == null) { + // 3. 优化了异常提示信息 + throw new IllegalArgumentException("无法识别的文件类型或文件已损坏。请确保是标准的Office格式。"); + } + // 4. 返回提取的文本 + return extractor.getText(); + } + } + + public static String extractTextFrom(File file) throws Exception { + // Java 7+ try-with-resources 自动关闭资源 + try (InputStream inputStream = new FileInputStream(file); + POITextExtractor extractor = ExtractorFactory.createExtractor(inputStream)) { + + if (extractor == null) { + throw new IllegalArgumentException("无法识别的文件类型,文件可能已损坏或非标准Office格式。"); + } + return extractor.getText(); + } + } +} + + diff --git a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/vo/LockGuideSaveReqVO.java b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/vo/LockGuideSaveReqVO.java index e644835..93dd3f4 100644 --- a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/vo/LockGuideSaveReqVO.java +++ b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/vo/LockGuideSaveReqVO.java @@ -16,6 +16,18 @@ public class LockGuideSaveReqVO { private String guideContent; /** + * 隔离指导书名称 + */ + @Schema(description = "隔离指导书名称") + private String name; + + /** + * 隔离计划编号 + */ + @Schema(description = "隔离计划编号") + private String code; + + /** * 集中挂牌人ID */ @Schema(description = "集中挂牌人ID") diff --git a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/vo/LockPageReqVO.java b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/vo/LockPageReqVO.java index 4c315e5..a47a4ff 100644 --- a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/vo/LockPageReqVO.java +++ b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/vo/LockPageReqVO.java @@ -20,10 +20,10 @@ public class LockPageReqVO extends PageParam { private String lockName; @Schema(description = "状态", example = "2") - private String lockStatus; + private Integer lockStatus; @Schema(description = "锁具类型", example = "1") - private String lockType; + private Integer lockType; @Schema(description = "启用状态: 0=未启用, 1=已启用", example = "2") private Integer lockEnableStatus; diff --git a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/vo/LockRespVO.java b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/vo/LockRespVO.java index c4cfa8e..e65b338 100644 --- a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/vo/LockRespVO.java +++ b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/vo/LockRespVO.java @@ -30,11 +30,11 @@ public class LockRespVO { @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") @ExcelProperty("状态") - private String lockStatus; + private Integer lockStatus; @Schema(description = "锁具类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") @ExcelProperty("锁具类型") - private String lockType; + private Integer lockType; @Schema(description = "启用状态: 0=未启用, 1=已启用", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") @ExcelProperty("启用状态: 0=未启用, 1=已启用") diff --git a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/vo/LockSaveReqVO.java b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/vo/LockSaveReqVO.java index 47382fd..87252af 100644 --- a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/vo/LockSaveReqVO.java +++ b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/vo/LockSaveReqVO.java @@ -23,11 +23,11 @@ public class LockSaveReqVO { private String lockName; @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") - private String lockStatus; + private Integer lockStatus; @Schema(description = "锁具类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") ////@NotEmpty(message = "锁具类型不能为空") - private String lockType; + private Integer lockType; @Schema(description = "启用状态: 0=未启用, 1=已启用", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") //@NotNull(message = "启用状态: 0=未启用, 1=已启用不能为空") diff --git a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/vo/LockStatusVo.java b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/vo/LockStatusVo.java new file mode 100644 index 0000000..231425d --- /dev/null +++ b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/vo/LockStatusVo.java @@ -0,0 +1,24 @@ +package cn.iocoder.yudao.module.lock.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Schema(description = "管理后台 - 电子锁修改") +@Data +public class LockStatusVo { + + private Long planId; + + + private Long lockId; + + private Long planItemDetailId; + + private Long operateRecordld; + + private Long verifyRecordId; + + private Long lifelockId; + + +} diff --git a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/vo/LockWordPointDataVo.java b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/vo/LockWordPointDataVo.java new file mode 100644 index 0000000..5c0187d --- /dev/null +++ b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/vo/LockWordPointDataVo.java @@ -0,0 +1,19 @@ +package cn.iocoder.yudao.module.lock.vo; + +import lombok.Data; + +@Data +public class LockWordPointDataVo { + + private String sequence; + private String isolationPointId; + private String deviceName; + private String location; + + public LockWordPointDataVo(String sequence, String isolationPointId, String deviceName, String location) { + this.sequence = sequence != null ? sequence.trim() : ""; + this.isolationPointId = isolationPointId != null ? isolationPointId.trim() : ""; + this.deviceName = deviceName != null ? deviceName.trim() : ""; + this.location = location != null ? location.trim() : ""; + } +} diff --git a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/vo/LockWordPointVo.java b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/vo/LockWordPointVo.java new file mode 100644 index 0000000..2ea4923 --- /dev/null +++ b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/vo/LockWordPointVo.java @@ -0,0 +1,19 @@ +package cn.iocoder.yudao.module.lock.vo; + +import lombok.Data; + +import java.util.List; + +@Data +public class LockWordPointVo { + + + private String deviceLock; + private String repairBrand; + private String sixClip; + private String locking; + + private List dataVoList; + + +} diff --git a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/vo/PlanLifeLockPageReqVO.java b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/vo/PlanLifeLockPageReqVO.java index 8d345d5..e3986d4 100644 --- a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/vo/PlanLifeLockPageReqVO.java +++ b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/vo/PlanLifeLockPageReqVO.java @@ -20,7 +20,7 @@ public class PlanLifeLockPageReqVO extends PageParam { private Long userId; @Schema(description = "生命锁类型", example = "2") - private String lockType; + private Integer lockType; @Schema(description = "锁定状态: 0=未上锁, 1=已上锁", example = "1") private Integer lockStatus; diff --git a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/vo/PlanLifeLockRespVO.java b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/vo/PlanLifeLockRespVO.java index 0b25df1..dcd2e87 100644 --- a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/vo/PlanLifeLockRespVO.java +++ b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/vo/PlanLifeLockRespVO.java @@ -26,7 +26,7 @@ public class PlanLifeLockRespVO { @Schema(description = "生命锁类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") @ExcelProperty("生命锁类型") - private String lockType; + private Integer lockType; @Schema(description = "锁定状态: 0=未上锁, 1=已上锁", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") @ExcelProperty("锁定状态: 0=未上锁, 1=已上锁") diff --git a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/vo/PlanLifeLockSaveReqVO.java b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/vo/PlanLifeLockSaveReqVO.java index 5271503..0b411f5 100644 --- a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/vo/PlanLifeLockSaveReqVO.java +++ b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/vo/PlanLifeLockSaveReqVO.java @@ -24,7 +24,7 @@ public class PlanLifeLockSaveReqVO { @Schema(description = "生命锁类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") //@NotEmpty(message = "生命锁类型不能为空") - private String lockType; + private Integer lockType; @Schema(description = "锁定状态: 0=未上锁, 1=已上锁", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") //@NotNull(message = "锁定状态: 0=未上锁, 1=已上锁不能为空") diff --git a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/vo/PlanPageReqVO.java b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/vo/PlanPageReqVO.java index b5a9c39..63000e5 100644 --- a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/vo/PlanPageReqVO.java +++ b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/vo/PlanPageReqVO.java @@ -16,6 +16,13 @@ public class PlanPageReqVO extends PageParam { @Schema(description = "计划名称", example = "张三") private String ipName; + + /** + * 计划状态 + */ + @Schema(description = "计划状态", example = "1") + private Integer status; + @Schema(description = "创建时间") @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) private LocalDateTime[] createTime; diff --git a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/vo/PlanRespVO.java b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/vo/PlanRespVO.java index a5587f6..a1228d2 100644 --- a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/vo/PlanRespVO.java +++ b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/vo/PlanRespVO.java @@ -19,6 +19,9 @@ public class PlanRespVO { @Schema(description = "计划名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三") @ExcelProperty("计划名称") private String ipName; + @Schema(description = "计划状态", example = "1") + @ExcelProperty("计划状态") + private Integer status; @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) @ExcelProperty("创建时间") diff --git a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/vo/PlanSaveReqVO.java b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/vo/PlanSaveReqVO.java index 0d764fd..2829bff 100644 --- a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/vo/PlanSaveReqVO.java +++ b/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/vo/PlanSaveReqVO.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.lock.vo; +import com.alibaba.excel.annotation.ExcelProperty; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import java.util.*; @@ -13,7 +14,9 @@ public class PlanSaveReqVO { private Long id; @Schema(description = "计划名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三") - @NotEmpty(message = "计划名称不能为空") + //@NotEmpty(message = "计划名称不能为空") private String ipName; + @Schema(description = "计划状态", example = "1") + private Integer status; } \ No newline at end of file diff --git a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/controller/admin/IsolationPointController.java b/cc-admin-master/yudao-module-lock/src/main/resources/IsolationPointController.java similarity index 94% rename from cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/controller/admin/IsolationPointController.java rename to cc-admin-master/yudao-module-lock/src/main/resources/IsolationPointController.java index e900b69..f8aff91 100644 --- a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/controller/admin/IsolationPointController.java +++ b/cc-admin-master/yudao-module-lock/src/main/resources/IsolationPointController.java @@ -41,14 +41,14 @@ public class IsolationPointController { @PostMapping("/create") @Operation(summary = "创建指导书与隔离点关联") - @PreAuthorize("@ss.hasPermission('guide:isolation-point:create')") + //@PreAuthorize("@ss.hasPermission('guide:isolation-point:create')") public CommonResult createIsolationPoint(@Valid @RequestBody IsolationPointSaveReqVO createReqVO) { return success(isolationPointService.createIsolationPoint(createReqVO)); } @PutMapping("/update") @Operation(summary = "更新指导书与隔离点关联") - @PreAuthorize("@ss.hasPermission('guide:isolation-point:update')") + //@PreAuthorize("@ss.hasPermission('guide:isolation-point:update')") public CommonResult updateIsolationPoint(@Valid @RequestBody IsolationPointSaveReqVO updateReqVO) { isolationPointService.updateIsolationPoint(updateReqVO); return success(true); @@ -75,7 +75,7 @@ public class IsolationPointController { @GetMapping("/get") @Operation(summary = "获得指导书与隔离点关联") @Parameter(name = "id", description = "编号", required = true, example = "1024") - @PreAuthorize("@ss.hasPermission('guide:isolation-point:query')") + //@PreAuthorize("@ss.hasPermission('guide:isolation-point:query')") public CommonResult getIsolationPoint(@RequestParam("id") Long id) { IsolationPointDO isolationPoint = isolationPointService.getIsolationPoint(id); return success(BeanUtils.toBean(isolationPoint, IsolationPointRespVO.class)); @@ -83,7 +83,7 @@ public class IsolationPointController { @GetMapping("/page") @Operation(summary = "获得指导书与隔离点关联分页") - @PreAuthorize("@ss.hasPermission('guide:isolation-point:query')") + //@PreAuthorize("@ss.hasPermission('guide:isolation-point:query')") public CommonResult> getIsolationPointPage(@Valid IsolationPointPageReqVO pageReqVO) { PageResult pageResult = isolationPointService.getIsolationPointPage(pageReqVO); return success(BeanUtils.toBean(pageResult, IsolationPointRespVO.class)); diff --git a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/mapper/xml/IsolationPointMapper.xml b/cc-admin-master/yudao-module-lock/src/main/resources/mapper/IsolationPointMapper.xml similarity index 100% rename from cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/mapper/xml/IsolationPointMapper.xml rename to cc-admin-master/yudao-module-lock/src/main/resources/mapper/IsolationPointMapper.xml diff --git a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/mapper/xml/LockGuideMapper.xml b/cc-admin-master/yudao-module-lock/src/main/resources/mapper/LockGuideMapper.xml similarity index 100% rename from cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/mapper/xml/LockGuideMapper.xml rename to cc-admin-master/yudao-module-lock/src/main/resources/mapper/LockGuideMapper.xml diff --git a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/mapper/xml/LockMapper.xml b/cc-admin-master/yudao-module-lock/src/main/resources/mapper/LockMapper.xml similarity index 78% rename from cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/mapper/xml/LockMapper.xml rename to cc-admin-master/yudao-module-lock/src/main/resources/mapper/LockMapper.xml index c30471d..3f21fb1 100644 --- a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/mapper/xml/LockMapper.xml +++ b/cc-admin-master/yudao-module-lock/src/main/resources/mapper/LockMapper.xml @@ -7,4 +7,9 @@ 无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。 代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。 --> + + UPDATE electron_lock + SET lock_status = #{status} + WHERE id = #{id} + \ No newline at end of file diff --git a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/mapper/xml/LockWordRecordMapper.xml b/cc-admin-master/yudao-module-lock/src/main/resources/mapper/LockWordRecordMapper.xml similarity index 100% rename from cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/mapper/xml/LockWordRecordMapper.xml rename to cc-admin-master/yudao-module-lock/src/main/resources/mapper/LockWordRecordMapper.xml diff --git a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/mapper/xml/PlanItemDetailMapper.xml b/cc-admin-master/yudao-module-lock/src/main/resources/mapper/PlanItemDetailMapper.xml similarity index 50% rename from cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/mapper/xml/PlanItemDetailMapper.xml rename to cc-admin-master/yudao-module-lock/src/main/resources/mapper/PlanItemDetailMapper.xml index 0c46558..373f59f 100644 --- a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/mapper/xml/PlanItemDetailMapper.xml +++ b/cc-admin-master/yudao-module-lock/src/main/resources/mapper/PlanItemDetailMapper.xml @@ -9,4 +9,23 @@ 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/ --> + + + UPDATE isolation_plan_item_detail + + + lock_status = #{status}, + + + lock_id = #{lockId}, + + + operate_record_id = #{operateRecordId}, + + + verify_record_id = #{verifyRecordId} + + + WHERE id = #{planItemDetailId} + \ No newline at end of file diff --git a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/mapper/xml/PlanItemMapper.xml b/cc-admin-master/yudao-module-lock/src/main/resources/mapper/PlanItemMapper.xml similarity index 77% rename from cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/mapper/xml/PlanItemMapper.xml rename to cc-admin-master/yudao-module-lock/src/main/resources/mapper/PlanItemMapper.xml index 6361ba0..2bd1cbc 100644 --- a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/mapper/xml/PlanItemMapper.xml +++ b/cc-admin-master/yudao-module-lock/src/main/resources/mapper/PlanItemMapper.xml @@ -9,4 +9,11 @@ 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/ --> + + + update isolation_plan_item + set status = #{status} + where id = #{isolationPlanItemId} + + \ No newline at end of file diff --git a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/mapper/xml/PlanLifeLockMapper.xml b/cc-admin-master/yudao-module-lock/src/main/resources/mapper/PlanLifeLockMapper.xml similarity index 75% rename from cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/mapper/xml/PlanLifeLockMapper.xml rename to cc-admin-master/yudao-module-lock/src/main/resources/mapper/PlanLifeLockMapper.xml index c567c27..a3eb7a1 100644 --- a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/mapper/xml/PlanLifeLockMapper.xml +++ b/cc-admin-master/yudao-module-lock/src/main/resources/mapper/PlanLifeLockMapper.xml @@ -9,4 +9,12 @@ 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/ --> + + + UPDATE isolation_plan_life_lock + SET lock_status = #{status}, + unlock_time = #{unlockTime} + WHERE id = #{id} + + \ No newline at end of file diff --git a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/mapper/xml/PlanMapper.xml b/cc-admin-master/yudao-module-lock/src/main/resources/mapper/PlanMapper.xml similarity index 80% rename from cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/mapper/xml/PlanMapper.xml rename to cc-admin-master/yudao-module-lock/src/main/resources/mapper/PlanMapper.xml index da8da92..6353a74 100644 --- a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/mapper/xml/PlanMapper.xml +++ b/cc-admin-master/yudao-module-lock/src/main/resources/mapper/PlanMapper.xml @@ -9,4 +9,10 @@ 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/ --> + + + UPDATE isolation_plan + SET status = #{status} + WHERE id = #{planId} + \ No newline at end of file diff --git a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/mapper/xml/PointMapper.xml b/cc-admin-master/yudao-module-lock/src/main/resources/mapper/PointMapper.xml similarity index 69% rename from cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/mapper/xml/PointMapper.xml rename to cc-admin-master/yudao-module-lock/src/main/resources/mapper/PointMapper.xml index 04d11ad..32c6aca 100644 --- a/cc-admin-master/yudao-module-lock/src/main/java/cn/iocoder/yudao/module/lock/mapper/xml/PointMapper.xml +++ b/cc-admin-master/yudao-module-lock/src/main/resources/mapper/PointMapper.xml @@ -9,4 +9,14 @@ 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/ --> + + + UPDATE isolation_point + SET status = #{status} + WHERE id IN + + #{item} + + \ No newline at end of file diff --git a/cc-admin-master/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/AuthRegisterReqVO.java b/cc-admin-master/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/AuthRegisterReqVO.java index bcfc3ef..65a930a 100644 --- a/cc-admin-master/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/AuthRegisterReqVO.java +++ b/cc-admin-master/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/AuthRegisterReqVO.java @@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.system.controller.admin.auth.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; +import org.checkerframework.checker.units.qual.min; import org.hibernate.validator.constraints.Length; import jakarta.validation.constraints.*; @@ -26,4 +27,13 @@ public class AuthRegisterReqVO extends CaptchaVerificationReqVO { @NotEmpty(message = "密码不能为空") @Length(min = 4, max = 16, message = "密码长度为 4-16 位") private String password; + + @Schema(description = "手机号", requiredMode = Schema.RequiredMode.REQUIRED, example = "123456") + @NotEmpty(message = "手机号") + @Size(min = 5, max = 18, message = "手机号长度为 5-18 个字符") + @Pattern(regexp = "^1[3-9]\\d{9}$", message = "手机号格式不正确") + private String mobile; + + @Schema(description = "注册类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Integer type; } \ No newline at end of file diff --git a/cc-admin-master/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserSimpleRespVO.java b/cc-admin-master/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserSimpleRespVO.java index 6dac286..69833e5 100644 --- a/cc-admin-master/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserSimpleRespVO.java +++ b/cc-admin-master/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserSimpleRespVO.java @@ -19,7 +19,10 @@ public class UserSimpleRespVO { @Schema(description = "部门ID", example = "我是一个用户") private Long deptId; + @Schema(description = "部门名称", example = "IT 部") private String deptName; + @Schema(description = "部门名称", example = "IT 部") + private String mobile; } diff --git a/cc-admin-master/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java b/cc-admin-master/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java index b1aac03..60a9e99 100644 --- a/cc-admin-master/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java +++ b/cc-admin-master/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java @@ -21,6 +21,7 @@ import cn.iocoder.yudao.module.system.enums.sms.SmsSceneEnum; import cn.iocoder.yudao.module.system.service.logger.LoginLogService; import cn.iocoder.yudao.module.system.service.member.MemberService; import cn.iocoder.yudao.module.system.service.oauth2.OAuth2TokenService; +import cn.iocoder.yudao.module.system.service.permission.PermissionService; import cn.iocoder.yudao.module.system.service.social.SocialUserService; import cn.iocoder.yudao.module.system.service.user.AdminUserService; import com.anji.captcha.model.common.ResponseModel; @@ -35,11 +36,14 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.HashSet; import java.util.Objects; +import java.util.Set; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getClientIP; import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; +import static java.util.Collections.singleton; /** * Auth Service 实现类 @@ -67,7 +71,8 @@ public class AdminAuthServiceImpl implements AdminAuthService { private SmsCodeApi smsCodeApi; @Resource private SocialUserService socialUserService; - + @Resource + private PermissionService permissionService; /** * 验证码的开关,默认为 true */ @@ -265,6 +270,10 @@ public class AdminAuthServiceImpl implements AdminAuthService { // 2. 校验用户名是否已存在 Long userId = userService.registerUser(registerReqVO); + // 分配角色 + if (1 == registerReqVO.getType()){ + permissionService.assignUserRole(userId, singleton(164L)); + } // 3. 创建 Token 令牌,记录登录日志 return createTokenAfterLoginSuccess(userId, registerReqVO.getUsername(), LoginLogTypeEnum.LOGIN_USERNAME); diff --git a/cc-admin-master/yudao-server/pom.xml b/cc-admin-master/yudao-server/pom.xml index 663b099..7ed1cb6 100644 --- a/cc-admin-master/yudao-server/pom.xml +++ b/cc-admin-master/yudao-server/pom.xml @@ -72,7 +72,7 @@ - ${project.artifactId} + lock-server