Authored by zhengyouwei

db work

package com.model;
import lombok.Data;
import java.util.List;
/**
* Created by zhengyouwei on 2016/9/2.
*
* 发布工单
*/
@Data
public class DBWorkJob {
/**
* id
*/
private String id;
/**
* 主题
*/
private String title;
/**
* 内容
*/
private String text;
/**
* 开发
*/
private String develop;
/**
* dba
*/
private String dba;
/**
* WorkStatus 详见
*
*/
private int status;
/**
* 工单操作记录
*/
private List<HandledJob> handleList;
private String createTime;
private String updateTime;
}
... ...
package com.monitor.mysql.mapper;
import com.model.DBWorkJob;
import com.model.ReleaseWorkJob;
import com.monitor.model.domain.PageBean;
import java.util.List;
/**
* Created by zhengyouwei on 2016/9/2.
*/
public interface DBWorkJobMapper {
int insert(DBWorkJob dbWorkJob);
List<DBWorkJob> selectByPage(PageBean page);
int selectCount();
DBWorkJob selectById(String id);
int update(DBWorkJob dbWorkJob);
}
... ...
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.monitor.mysql.mapper.DBWorkJobMapper" >
<resultMap id="BaseResultMap" type="com.model.DBWorkJob" >
<id column="id" property="id" jdbcType="VARCHAR" />
<result column="title" property="title" jdbcType="VARCHAR" />
<result column="text" property="text" jdbcType="VARCHAR" />
<result column="develop" property="develop" jdbcType="VARCHAR" />
<result column="dba" property="dba" jdbcType="VARCHAR" />
<result column="status" property="status" jdbcType="INTEGER" />
<result column="createTime" property="createTime" jdbcType="VARCHAR" />
<result column="updateTime" property="updateTime" jdbcType="VARCHAR" />
</resultMap>
<sql id="Base_Column_List" >
id, title,text,develop,dba,status,DATE_FORMAT(create_time,'%Y-%m-%d %H:%i:%S') AS createTime,DATE_FORMAT(update_time,'%Y-%m-%d %H:%i:%S') AS updateTime
</sql>
<select id="selectCount" resultType="java.lang.Integer">
select
count(1)
from db_work_job
where
</select>
<select id="selectByPage" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from db_work_job
order by id desc
limit #{startIndex},#{pageSize}
</select>
<select id="selectById" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from db_work_job
where
id = #{id}
</select>
<insert id="insert" parameterType="com.model.DBWorkJob" >
insert into db_work_job
(
id,
title,
text,
develop,
status,
create_time,
update_time
)
values
(
#{id,jdbcType=VARCHAR},
#{title,jdbcType=VARCHAR},
#{text,jdbcType=VARCHAR},
#{develop,jdbcType=VARCHAR},
#{status,jdbcType=INTEGER},
now(),
now())
</insert>
<update id="update" parameterType="com.model.DBWorkJob">
UPDATE db_work_job
set
status = #{status,jdbcType=INTEGER},
dba = #{dba,jdbcType=INTEGER},
update_time = now()
where
id = #{id,jdbcType=VARCHAR}
</update>
</mapper>
\ No newline at end of file
... ...
... ... @@ -11,6 +11,8 @@ public class HandlerRole {
public static final String OPERATOR = "operator";
public static final String DBA = "dba";
public static final String LEADER = "leader";
}
... ...
... ... @@ -7,4 +7,6 @@ public class WorkType {
public static final String RELEASE_PROJECT = "release";
public static final String DB_PROJECT = "db";
}
... ...
package com.monitor.other.worksystem.ctrl;
import com.model.DBWorkJob;
import com.monitor.model.response.BaseResponse;
import com.monitor.other.worksystem.contants.HandlerRole;
import com.monitor.other.worksystem.service.DBService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* Created by zhengyouwei on 2016/10/11.
*
* 数据库工单
*
*/
@Controller
@RequestMapping("/dbWork")
public class DBWorkCtrl {
Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
private DBService dbService;
/**
* 查询发布工单
* @return
*/
@RequestMapping("/getDBWorkJob")
@ResponseBody
public BaseResponse<DBWorkJob> getDBWorkJob(String id) {
try {
DBWorkJob dBWorkJob = dbService.getDBWorkJob(id);
return new BaseResponse<DBWorkJob>(dBWorkJob);
}catch (Exception e){
logger.error("getDBWorkJob ~",e);
return new BaseResponse<>();
}
}
/**
* 发起工单
* @return
*/
@RequestMapping("/createDBWorkJob")
@ResponseBody
public BaseResponse<Integer> createDBWorkJob(@RequestBody DBWorkJob dBWorkJob) {
try {
int result = dbService.createDBWorkJob(dBWorkJob);
return new BaseResponse<Integer>(result);
}catch (Exception e){
logger.error("createDBWorkJob ~",e);
return new BaseResponse<>();
}
}
/**
* 发起工单
* @return
*/
@RequestMapping("/checkRole")
@ResponseBody
public BaseResponse<Integer> checkRole(String role) {
if (HandlerRole.DEVELOP.equals(role)){
return new BaseResponse<>(1);
}
return new BaseResponse<>(0);
}
}
... ...
... ... @@ -6,6 +6,7 @@ import com.monitor.model.request.WorkSystemReq;
import com.monitor.model.response.BaseResponse;
import com.monitor.model.response.PageResponse;
import com.monitor.other.worksystem.contants.WorkType;
import com.monitor.other.worksystem.service.DBService;
import com.monitor.other.worksystem.service.HandledService;
import com.monitor.other.worksystem.service.ReleaseService;
import org.slf4j.Logger;
... ... @@ -33,6 +34,8 @@ public class HandledCtrl {
@Autowired
private ReleaseService releaseService;
@Autowired
private DBService dbService;
/**
* 获取用户已办工单
* @param req
... ... @@ -64,6 +67,8 @@ public class HandledCtrl {
int result = 0;
if (WorkType.RELEASE_PROJECT.equals(handledJob.getType())){
result = releaseService.dealWorkJob(handledJob);
}else if (WorkType.DB_PROJECT.equals(handledJob.getType())){
result = dbService.dealWorkJob(handledJob);
}
BaseResponse baseResponse = new BaseResponse<Integer>(result);
if(result == 2){
... ...
... ... @@ -45,20 +45,4 @@ public class WorkJobCtrl {
}
}
/**
* 查询发布工单
* @return
*/
@RequestMapping("/getWorkJob")
@ResponseBody
public BaseResponse<WorkJob> getWorkJob(String id) {
try {
WorkJob releaseWorkJob = worksService.getWorkJob(id);
return new BaseResponse<WorkJob>(releaseWorkJob);
}catch (Exception e){
logger.error("getReleaseWorkJob ~",e);
return new BaseResponse<>();
}
}
}
... ...
package com.monitor.other.worksystem.service;
import com.model.DBWorkJob;
import com.model.HandledJob;
import com.model.ReleaseWorkJob;
import com.monitor.model.page.PageRequest;
import com.monitor.model.response.PageResponse;
/**
* Created by zhengyouwei on 2016/9/2.
*/
public interface DBService {
DBWorkJob getDBWorkJob(String id);
int createDBWorkJob(DBWorkJob dbWorkJob);
int dealWorkJob(HandledJob handledJob);
}
... ...
... ... @@ -14,6 +14,4 @@ public interface WorksService {
PageResponse<WorkJob> getWorkJobs(PageRequest req);
WorkJob getWorkJob(String id);
}
... ...
package com.monitor.other.worksystem.service.impl;
import com.model.*;
import com.monitor.mysql.mapper.*;
import com.monitor.other.worksystem.contants.HandleType;
import com.monitor.other.worksystem.contants.HandlerRole;
import com.monitor.other.worksystem.contants.WorkStatus;
import com.monitor.other.worksystem.contants.WorkType;
import com.monitor.other.worksystem.service.DBService;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* Created by zhengyouwei on 2016/9/2.
*/
@Service
public class DBServiceImpl implements DBService {
@Autowired
private DBWorkJobMapper dbWorkJobMapper;
@Autowired
private HandledJobMapper handledJobMapper;
@Autowired
private PendingJobMapper pendingJobMapper;
@Autowired
private WorkSystemSupport workSystemSupport;
@Autowired
private WorkJobMapper workJobMapper;
/**
* 根据工单ID查询工单
*
* @param id
* @return
*/
@Override
public DBWorkJob getDBWorkJob(String id) {
DBWorkJob dbWorkJob = dbWorkJobMapper.selectById(id);
//获取工单操作记录
List<HandledJob> list = handledJobMapper.selectByworkId(id);
dbWorkJob.setHandleList(list);
return dbWorkJob;
}
/**
* 创建工单
*
* @return
*/
@Override
public int createDBWorkJob(DBWorkJob dbWorkJob) {
//插入工单表
WorkJob workJob = new WorkJob();
workJob.setType(WorkType.DB_PROJECT);
workJob.setTitle(dbWorkJob.getTitle());
workJobMapper.insert(workJob);
//生成工单id
String workId = WorkType.DB_PROJECT + StringUtils.leftPad(workJob.getId() + "", 7, "0");
workJob.setWorkId(workId);
workJobMapper.update(workJob);
dbWorkJob.setId(workId);
//插入发布工单表
dbWorkJob.setStatus(WorkStatus.PUBLISH);
int result = dbWorkJobMapper.insert(dbWorkJob);
if (result < 1) {
return -1;
}
//插入用户处理工单表
HandledJob handledJob = new HandledJob(WorkType.DB_PROJECT, dbWorkJob.getId(), dbWorkJob.getTitle(), dbWorkJob.getDevelop(), HandlerRole.DEVELOP, HandleType.CREATE, HandleType.getCtype(HandleType.CREATE));
handledJobMapper.insert(handledJob);
//插入用户待处理工单表
PendingJob pendingJob = new PendingJob(WorkType.DB_PROJECT, dbWorkJob.getId(), dbWorkJob.getTitle(), null, HandlerRole.DBA, WorkStatus.PUBLISH);
workSystemSupport.addPendingByRole(pendingJob, false);
return result;
}
@Override
public int dealWorkJob(HandledJob handledJob) {
//查询待处理工单是否还存在
PendingJob pendingJob = pendingJobMapper.selectByid(handledJob.getId());
if (pendingJob == null) {//工单不存在,则返回
return 2;
}
DBWorkJob dbWorkJob = dbWorkJobMapper.selectById(pendingJob.getWorkId());
//删除该工单的待处理
pendingJobMapper.delete(dbWorkJob.getId());
handledJob.setWorkId(dbWorkJob.getId());
handledJob.setTitle(dbWorkJob.getTitle());
handledJob.setType(WorkType.DB_PROJECT);
handledJob.setHandlecType(HandleType.getCtype(handledJob.getHandleType()));
//插入用户处理列表
handledJobMapper.insert(handledJob);
int handleType = handledJob.getHandleType();
//如果关闭则直接关闭
if (handleType == HandleType.CLOSE) {
dbWorkJob.setStatus(WorkStatus.CLOSE);
dbWorkJob.setDba(handledJob.getHandler());
dbWorkJobMapper.update(dbWorkJob);//关闭工单
workSystemSupport.workend(dbWorkJob.getId(), WorkType.DB_PROJECT, dbWorkJob.getTitle(), WorkStatus.getCstatus(WorkStatus.CLOSE));
return 1;
}
int currentStatus = pendingJob.getCurrentStatus();
if (currentStatus == WorkStatus.PUBLISH) {
dbWorkJob.setDba(handledJob.getHandler());
if (handleType == HandleType.PASS) {//发布成功
dbWorkJob.setStatus(WorkStatus.EXE_SUCCESS);
workSystemSupport.workend(dbWorkJob.getId(), WorkType.DB_PROJECT, dbWorkJob.getTitle(), WorkStatus.getCstatus(WorkStatus.EXE_SUCCESS));
} else {//发布失败
dbWorkJob.setStatus(WorkStatus.EXE_FAILE);
workSystemSupport.workend(dbWorkJob.getId(), WorkType.DB_PROJECT, dbWorkJob.getTitle(), WorkStatus.getCstatus(WorkStatus.EXE_FAILE));
}
dbWorkJobMapper.update(dbWorkJob);//填写工单结果
}
return 1;
}
}
... ...
package com.monitor.other.worksystem.service.impl;
import com.model.HandledJob;
import com.model.PendingJob;
import com.model.ReleaseWorkJob;
import com.model.User;
import com.model.*;
import com.monitor.common.service.AlarmMsgService;
import com.monitor.common.service.MailService;
import com.monitor.common.util.MailUtil;
import com.monitor.model.domain.Mail;
import com.monitor.mysql.mapper.HandledJobMapper;
import com.monitor.mysql.mapper.PendingJobMapper;
import com.monitor.mysql.mapper.ReleaseWorkJobMapper;
import com.monitor.mysql.mapper.UserMapper;
import com.monitor.mysql.mapper.*;
import com.monitor.other.worksystem.contants.HandlerRole;
import com.monitor.other.worksystem.contants.WorkStatus;
import com.monitor.other.worksystem.contants.WorkType;
... ... @@ -44,6 +38,9 @@ public class WorkSystemSupport {
private ReleaseWorkJobMapper releaseWorkJobMapper;
@Autowired
private DBWorkJobMapper dbWorkJobMapper;
@Autowired
private HandledJobMapper handledJobMapper;
@Autowired
... ... @@ -116,7 +113,25 @@ public class WorkSystemSupport {
if (WorkType.RELEASE_PROJECT.equals(pendingJob.getType())) {
ReleaseWorkJob releaseWorkJob = releaseWorkJobMapper.selectById(pendingJob.getWorkId());
releaseSmsAndMail(mobileBuilder.toString().substring(0, mobileBuilder.toString().length() - 1), builder, releaseWorkJob, sendLeader);
}else if (WorkType.DB_PROJECT.equals(pendingJob.getType())){
DBWorkJob dbWorkJob = dbWorkJobMapper.selectById(pendingJob.getWorkId());
dbSmsAndMail(mobileBuilder.toString().substring(0, mobileBuilder.toString().length() - 1), builder, dbWorkJob, sendLeader);
}
}
/**
* 发送短信和邮件
*/
public void dbSmsAndMail(String mobiles, Mail.Builder builder, DBWorkJob dbWorkJob, boolean sendLeader) {
String sms = builddbSms(dbWorkJob);
alarmMsgService.sendSms("work_system", sms, mobiles);
buildDBMail(dbWorkJob, builder);
//抄送给leader
if (sendLeader) {
addLeader(builder);
}
//发送邮件
mailService.sendHTMLMail(builder.build());
}
/**
... ... @@ -135,6 +150,21 @@ public class WorkSystemSupport {
}
/**
* 组建DBA发布工单短信
*
* @return
*/
public String builddbSms(DBWorkJob dbWorkJob) {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("工单系统有您的待办:");
stringBuilder.append("数据库变更|");
stringBuilder.append(dbWorkJob.getId()).append("|");
stringBuilder.append(dbWorkJob.getTitle());
stringBuilder.append("!");
return stringBuilder.toString();
}
/**
* 组建项目发布工单短信
*
* @return
... ... @@ -153,6 +183,20 @@ public class WorkSystemSupport {
/**
* 组建待办邮件
*/
public Mail.Builder buildDBMail(DBWorkJob dbWorkJob, Mail.Builder builder) {
builder.message("<span style=\"display: inline-block;width: 100px;font-weight:bold;\">工单ID:</span>" + dbWorkJob.getId());
builder.message("<span style=\"display: inline-block;width: 100px;font-weight:bold;\">工单类型:</span>" + WorkType.DB_PROJECT);
builder.message("<span style=\"display: inline-block;width: 100px;font-weight:bold;\">工单状态:</span>" + WorkStatus.getCstatus(dbWorkJob.getStatus()));
builder.message("<span style=\"display: inline-block;width: 100px;font-weight:bold;\">工单标题:</span>" + dbWorkJob.getTitle());
builder.message("<span style=\"display: inline-block;width: 100px;font-weight:bold;\">需求内容:</span>" + dbWorkJob.getText());
return builder;
}
/**
* 组建待办邮件
*/
public Mail.Builder buildReleaseMail(ReleaseWorkJob releaseWorkJob, Mail.Builder builder) {
builder.message("<span style=\"display: inline-block;width: 100px;font-weight:bold;\">工单ID:</span>" + releaseWorkJob.getId());
... ...
... ... @@ -46,9 +46,4 @@ public class WorksServiceImpl implements WorksService {
return response;
}
@Override
public WorkJob getWorkJob(String id) {
WorkJob workJob = workJobMapper.selectByWorkId(id);
return workJob;
}
}
... ...