欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

运维工作台方案详解

程序员文章站 2022-03-12 20:18:22
一、运维工作台功能简介...

一、运维工作台功能简介    

  1. 用户发起运维问题操作页面
  2. 运维工作台查收问题平台
  3. 运维问题查询报表

  

运维问题报表,查看当前问题的处理情况:运维工作台方案详解

      

运维工作台,管理员可以在此页面解决提交过来的问题,解决完毕的问题会在已解决页面展示出来: 

运维工作台方案详解

 已解决页面: 

运维工作台方案详解

我的问题单,用户可以在我的问题单提出系统存在的问题或者bug:

运维工作台方案详解

 

 运维工作台方案详解

可以点击再次提问,重复在问题描述中提出问题, 然后点击保存,即可到运维工作台页面: 

 运维工作台方案详解

第一版数据库设计:

sys_problem_record 与 sys_problem_message 关联关系为:

(sys_problem_record)message_id =(sys_problem_message ) id

 

  数据库表设计:

运维工作台方案详解


SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for sys_problem_record
-- ----------------------------
DROP TABLE IF EXISTS `sys_problem_record`;
CREATE TABLE `sys_problem_record`  (
  `id` bigint(20) NOT NULL,
  `title` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '问题标题',
  `problem_status` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '问题状态',
  `problem_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '问题类型',
  `problem_level` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '问题级别',
  `problem_phone` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '联系电话',
  `problem_email` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '联系方式',
  `attachment_oid` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '附件Oid',
  `message_id` bigint(20) NULL DEFAULT NULL COMMENT '消息id',
  `version_number` int(11) NOT NULL DEFAULT 1,
  `created_by` bigint(20) NULL DEFAULT NULL COMMENT '创建人',
  `created_date` timestamp(0) NULL DEFAULT CURRENT_TIMESTAMP,
  `last_updated_by` bigint(20) NULL DEFAULT NULL COMMENT '最后更新人',
  `last_updated_date` timestamp(0) NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

 

 

消息表:

运维工作台方案详解

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for sys_problem_message
-- ----------------------------
DROP TABLE IF EXISTS `sys_problem_message`;
CREATE TABLE `sys_problem_message`  (
  `id` bigint(20) NOT NULL,
  `message_desc` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '问题描述',
  `message_reply` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '问题答复',
  `version_number` int(11) NOT NULL DEFAULT 1,
  `created_by` bigint(20) NULL DEFAULT NULL COMMENT '创建人',
  `created_date` timestamp(0) NULL DEFAULT CURRENT_TIMESTAMP,
  `last_updated_by` bigint(20) NULL DEFAULT NULL COMMENT '最后更新人',
  `last_updated_date` timestamp(0) NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

 

存在的问题:

      1.  用户如果多次回复,那么会出现id主键重复的情况。 

      2.  怎么将用户每次提交和回复的消息存放到一条记录里。

      3.   需要考虑到运维工作台那边不过有多少次消息的提交和回复,都应该只有一条记录。

 

 

第二版: 

    在sys_proplem_message表里新增一个字段message_id,用来与sys_proplem_record做关联。

    运维工作台方案详解

    每次提交任务的时候,判断一下body的sys_problem_record是否含有Message_id,如果每个message里不含有id,表示是新增提交任务,如果带id那么就是消息的回复,根据message表的id来找到对应的message_desc。

  接口:

   http://10.72.9.128:9098/api/insertOrUpdate/problem/record       POST方式 

提交任务的body:

{
    "title": "发票录入bug",
    "problemType": "01",
    "problemLevel": "01",
    "problemPhone": "15997937193",
    "problemEmail": "2432835715@qq.com",
    "sysProblemMessage": [
        {
            "messageDesc": "发票操作的时候出现问题",
            "messageReply": ""
        }
    ],
    "attachments":[
        {
            "attachmentOid":"5aeb4d56-0e4e-4572-9b0a-8b55a394e715"
        },{
            "attachmentOid":"86aa448d-e027-4b4a-aca4-2e216f03648d"
        }
    ]
}

 

实现原理:
 1. 根据record的id来判断是不是新提的问题。

  2. 根据message的id判断是不是提交的任务。

  3. 每次去获取到最新的最大的messageId+1最为最新的提交任务的message_id。

   /**
     *  提交任务或连续提交任务。
     */
    @PostMapping("/insertOrUpdate/problem/record")
    @Transactional(rollbackFor = Exception.class)
    public ResponseEntity<ProblemRecordDTO> insertOrUpdateProbleam(@RequestBody ProblemRecordDTO dto){
        SysProblemRecord sysProblemRecord=new SysProblemRecord();
        BeanUtils.copyProperties(dto, sysProblemRecord);
        //消息处理
        List<SysProblemMessage> messages=dto.getSysProblemMessage();
        //附件处理
        List<AttachmentDTO> attachmentDTOS=dto.getAttachments();
        if (!CollectionUtils.isEmpty(attachmentDTOS)){
            List<UUID> oids = attachmentDTOS.stream().map(AttachmentDTO::getAttachmentOid).collect(toList());
            sysProblemRecord.setAttachmentOid(listToString(oids,","));
        }

        Long maxMessageId=null;
        if (dto.getMessageId()==null){
            maxMessageId=problemMessageService.selectMaxMessageId();
        }

        for (SysProblemMessage e:messages){
            // 1. 如果是单个来回的回复,那么只需要插入消息和更新消息
            //新增
            if (!StringUtils.isEmpty(e.getMessageReply())){
                sysProblemRecord.setProblemStatus("R");
            }

            if (e.getMessageId()==null){
                //创建新的一个消息
                if (dto.getMessageId()!=null){
                    //连续回复的消息Id设置
                    e.setMessageId(dto.getMessageId());
                }else{
                    // 新增提交消息
                    e.setMessageId(maxMessageId+1);
                }
                problemMessageService.insert(e);
                //如果说已经存在了消息,那么就不设置消息id
                sysProblemRecord.setMessageId(e.getMessageId());
                //每次新插入一条消息,表示问题待提交
                sysProblemRecord.setProblemStatus("P");
            }else{
                //更新
                problemMessageService.updateById(e);
            }
        }
        if (dto.getId()==null){
            sysProblemRecord.setProblemStatus("P");
            //获取创建人的公司和部门id
            CompanyCO companyCO= companyClient.getByUserOid(OrgInformationUtil.getCurrentUserOid());
            if (companyCO!=null){
                sysProblemRecord.setCompanyId(companyCO.getId());
            }
            Optional<Department> departmentUser=departmentUserService.getDepartmentByUserId(OrgInformationUtil.getCurrentUserId());
            Department department=  departmentUser.get();
            if (department!=null){
                sysProblemRecord.setDepartmentId(department.getId());
            }
            problemService.insert(sysProblemRecord);
        }else{
            problemService.updateById(sysProblemRecord);
        }
        BeanUtils.copyProperties(sysProblemRecord,dto);
        return new ResponseEntity<>(dto, HttpStatus.OK);
    }

 

本文地址:https://blog.csdn.net/qq_33036061/article/details/107255706

相关标签: 项目总结