@@ -17,15 +17,21 @@ import java.util.Objects; | |||||
@NoArgsConstructor | @NoArgsConstructor | ||||
public enum MsgTypeEnum { | public enum MsgTypeEnum { | ||||
/** | /** | ||||
* 消息类型 | |||||
* 消息类型 项目评审 | |||||
*/ | */ | ||||
AUDIT(1, "项目审核(待审核)"), | |||||
PASS(2, "项目审核(通过)"), | |||||
REJECTED(3,"项目审核(被驳回)"), | |||||
BACKED(4,"项目审核(被退回)"), | |||||
WARING(5,"预警提醒"), | |||||
EXPORT_REVIEW(6,"专家评审"), | |||||
REVIEW_MEETING(7,"评审会议"); | |||||
PROJECT_REVIEW, | |||||
/** | |||||
* 异常告警 | |||||
*/ | |||||
WARING, | |||||
/** | |||||
* 专家评审 | |||||
*/ | |||||
EXPERT_REVIEW, | |||||
/** | |||||
* 专家会议 | |||||
*/ | |||||
REVIEW_MEETING; | |||||
private Integer code; | private Integer code; | ||||
private String desc; | private String desc; | ||||
@@ -1,21 +1,14 @@ | |||||
package com.ningdatech.pmapi.sys.controller; | package com.ningdatech.pmapi.sys.controller; | ||||
import com.ningdatech.basic.model.IdVo; | |||||
import com.ningdatech.basic.model.PageVo; | import com.ningdatech.basic.model.PageVo; | ||||
import com.ningdatech.log.annotation.WebLog; | |||||
import com.ningdatech.pmapi.sys.manage.NoticeManage; | |||||
import com.ningdatech.pmapi.sys.model.req.NoticeListReq; | |||||
import com.ningdatech.pmapi.sys.model.req.NoticeSaveReq; | |||||
import com.ningdatech.pmapi.sys.model.req.NoticeStatusModifyReq; | |||||
import com.ningdatech.pmapi.sys.model.vo.NoticeDetailVO; | |||||
import com.ningdatech.pmapi.sys.model.vo.NoticeListItemVO; | |||||
import com.ningdatech.pmapi.sys.manage.NotifyManage; | |||||
import com.ningdatech.pmapi.sys.model.req.NotifyListReq; | |||||
import com.ningdatech.pmapi.sys.model.vo.NotifyVO; | |||||
import io.swagger.annotations.Api; | import io.swagger.annotations.Api; | ||||
import io.swagger.annotations.ApiOperation; | import io.swagger.annotations.ApiOperation; | ||||
import lombok.RequiredArgsConstructor; | import lombok.RequiredArgsConstructor; | ||||
import org.springframework.web.bind.annotation.*; | import org.springframework.web.bind.annotation.*; | ||||
import javax.validation.Valid; | |||||
/** | /** | ||||
* <p> | * <p> | ||||
* 通知消息 前端控制器 | * 通知消息 前端控制器 | ||||
@@ -30,53 +23,24 @@ import javax.validation.Valid; | |||||
@RequestMapping("/api/v1/notify") | @RequestMapping("/api/v1/notify") | ||||
public class NotifyController { | public class NotifyController { | ||||
private final NoticeManage noticeManage; | |||||
private final NotifyManage notifyManage; | |||||
@PostMapping("/save") | |||||
@ApiOperation("新增公告") | |||||
@WebLog("新增公告") | |||||
public IdVo<Long> save(@Valid @RequestBody NoticeSaveReq req) { | |||||
return noticeManage.saveOrModify(req); | |||||
@GetMapping("/list") | |||||
@ApiOperation("通知列表") | |||||
public PageVo<NotifyVO> page(@ModelAttribute NotifyListReq notifyListReq){ | |||||
return notifyManage.page(notifyListReq); | |||||
} | } | ||||
@GetMapping("/detail/{id}") | @GetMapping("/detail/{id}") | ||||
@ApiOperation("公告详情") | |||||
public NoticeDetailVO save(@PathVariable Long id) { | |||||
return noticeManage.detail(id); | |||||
} | |||||
@PostMapping("/enabled") | |||||
@ApiOperation("启用/禁用") | |||||
@WebLog("启用/禁用") | |||||
public Boolean save(@Valid @RequestBody NoticeStatusModifyReq req) { | |||||
return noticeManage.changeEnabled(req); | |||||
} | |||||
@PostMapping("/topped") | |||||
@ApiOperation("置顶") | |||||
@WebLog("置顶") | |||||
public void topped(@RequestBody IdVo<Long> id) { | |||||
noticeManage.topped(id.getId()); | |||||
} | |||||
@GetMapping("/dashboard/list") | |||||
@ApiOperation("工作台公告列表") | |||||
public PageVo<NoticeListItemVO> dashboardList(@RequestParam(required = false, defaultValue = "3") Integer limit, | |||||
@RequestParam(required = false) Integer type) { | |||||
return noticeManage.dashboardList(limit, type); | |||||
} | |||||
@GetMapping("/manage/list") | |||||
@ApiOperation("公告管理列表") | |||||
public PageVo<NoticeListItemVO> listByManager(NoticeListReq req) { | |||||
return noticeManage.listByManager(req); | |||||
@ApiOperation("通知详情") | |||||
public NotifyVO save(@PathVariable Long id) { | |||||
return notifyManage.detail(id); | |||||
} | } | ||||
@DeleteMapping("/del") | |||||
@ApiOperation("删除公告") | |||||
@WebLog("删除公告") | |||||
public void delNotice(@RequestBody IdVo<Long> req) { | |||||
noticeManage.delNotice(req.getId()); | |||||
@PostMapping("/read/{id}") | |||||
@ApiOperation("已读") | |||||
public Boolean read(@PathVariable Long id) { | |||||
return notifyManage.read(id); | |||||
} | } | ||||
} | } |
@@ -1,9 +1,22 @@ | |||||
package com.ningdatech.pmapi.sys.manage; | package com.ningdatech.pmapi.sys.manage; | ||||
import cn.hutool.core.bean.BeanUtil; | |||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | |||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers; | |||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | |||||
import com.ningdatech.basic.function.VUtils; | |||||
import com.ningdatech.basic.model.PageVo; | |||||
import com.ningdatech.pmapi.sys.model.entity.Notify; | |||||
import com.ningdatech.pmapi.sys.model.req.NotifyListReq; | |||||
import com.ningdatech.pmapi.sys.model.vo.NotifyVO; | |||||
import com.ningdatech.pmapi.sys.service.INotifyService; | import com.ningdatech.pmapi.sys.service.INotifyService; | ||||
import lombok.RequiredArgsConstructor; | import lombok.RequiredArgsConstructor; | ||||
import org.springframework.stereotype.Component; | import org.springframework.stereotype.Component; | ||||
import java.util.List; | |||||
import java.util.Objects; | |||||
import java.util.stream.Collectors; | |||||
/** | /** | ||||
* <p> | * <p> | ||||
* NotifyManage | * NotifyManage | ||||
@@ -18,4 +31,32 @@ public class NotifyManage { | |||||
private final INotifyService notifyService; | private final INotifyService notifyService; | ||||
public PageVo<NotifyVO> page(NotifyListReq notifyListReq) { | |||||
Page<Notify> page = notifyListReq.page(); | |||||
LambdaQueryWrapper<Notify> wrapper = Wrappers.lambdaQuery(Notify.class) | |||||
.eq(Objects.nonNull(notifyListReq.getReaded()), Notify::getReaded, notifyListReq.getReaded()) | |||||
.eq(Objects.nonNull(notifyListReq.getUserId()), Notify::getUserId, notifyListReq.getUserId()) | |||||
.like(Objects.nonNull(notifyListReq.getTitle()), Notify::getTitle, notifyListReq.getTitle()) | |||||
.eq(Objects.nonNull(notifyListReq.getType()), Notify::getType, notifyListReq.getType()); | |||||
notifyService.page(page,wrapper); | |||||
if(page.getTotal() == 0L){ | |||||
return PageVo.empty(); | |||||
} | |||||
List<NotifyVO> list = page.getRecords().stream() | |||||
.map(n -> BeanUtil.copyProperties(n,NotifyVO.class)) | |||||
.collect(Collectors.toList()); | |||||
return PageVo.of(list,page.getTotal()); | |||||
} | |||||
public NotifyVO detail(Long id) { | |||||
Notify one = notifyService.getById(id); | |||||
return BeanUtil.copyProperties(one,NotifyVO.class); | |||||
} | |||||
public Boolean read(Long id) { | |||||
Notify one = notifyService.getById(id); | |||||
VUtils.isTrue(Objects.isNull(one)).throwMessage("该通知不存在"); | |||||
one.setReaded(Boolean.TRUE); | |||||
return notifyService.updateById(one); | |||||
} | |||||
} | } |
@@ -1,5 +1,5 @@ | |||||
<?xml version="1.0" encoding="UTF-8"?> | <?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"> | <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | ||||
<mapper namespace="com.ningdatech.pmapi.sys.mapper.NotifyMapperr"> | |||||
<mapper namespace="com.ningdatech.pmapi.sys.mapper.NotifyMapper"> | |||||
</mapper> | </mapper> |
@@ -0,0 +1,34 @@ | |||||
package com.ningdatech.pmapi.sys.model.req; | |||||
import com.ningdatech.basic.model.PagePo; | |||||
import io.swagger.annotations.ApiModel; | |||||
import io.swagger.annotations.ApiModelProperty; | |||||
import lombok.Data; | |||||
import lombok.EqualsAndHashCode; | |||||
/** | |||||
* <p> | |||||
* NoticeListReq | |||||
* </p> | |||||
* | |||||
* @author zpf | |||||
* @since 00:32 2023/3/23 | |||||
*/ | |||||
@Data | |||||
@ApiModel("通知查询参数类") | |||||
@EqualsAndHashCode(callSuper = true) | |||||
public class NotifyListReq extends PagePo { | |||||
@ApiModelProperty("用户ID") | |||||
private Integer userId; | |||||
@ApiModelProperty("是否已读") | |||||
private Boolean readed; | |||||
@ApiModelProperty("公告标题") | |||||
private String title; | |||||
@ApiModelProperty("类型") | |||||
private String type; | |||||
} |
@@ -0,0 +1,53 @@ | |||||
package com.ningdatech.pmapi.sys.model.vo; | |||||
import com.baomidou.mybatisplus.annotation.IdType; | |||||
import com.baomidou.mybatisplus.annotation.TableId; | |||||
import io.swagger.annotations.ApiModel; | |||||
import io.swagger.annotations.ApiModelProperty; | |||||
import lombok.Data; | |||||
import java.io.Serializable; | |||||
import java.time.LocalDateTime; | |||||
/** | |||||
* <p> | |||||
* 通知 | |||||
* </p> | |||||
* | |||||
* @author zpf | |||||
* @since 2023-03-21 | |||||
*/ | |||||
@Data | |||||
@ApiModel(value = "消息通知VO", description = "消息通知") | |||||
public class NotifyVO implements Serializable { | |||||
private static final long serialVersionUID = 1L; | |||||
@ApiModelProperty("ID") | |||||
@TableId(type = IdType.AUTO) | |||||
private Long id; | |||||
@ApiModelProperty("消息类型") | |||||
private String type; | |||||
@ApiModelProperty("标题") | |||||
private String title; | |||||
@ApiModelProperty("内容") | |||||
private String content; | |||||
@ApiModelProperty("实例id") | |||||
private String instanceId; | |||||
@ApiModelProperty("是否已读") | |||||
private Boolean readed; | |||||
@ApiModelProperty("用户ID") | |||||
private Long userId; | |||||
@ApiModelProperty("link") | |||||
private String link; | |||||
@ApiModelProperty("创建时间") | |||||
private LocalDateTime createTime; | |||||
} |
@@ -371,7 +371,7 @@ public class TodoCenterManage { | |||||
String passMsg2 = String.format(PASS_MSG_TEMPLATE2, projectName, processDefinitionName); | String passMsg2 = String.format(PASS_MSG_TEMPLATE2, projectName, processDefinitionName); | ||||
passWorkNoticeInfo2.setMsg(passMsg2); | passWorkNoticeInfo2.setMsg(passMsg2); | ||||
// 放入工作通知暂存表中,通过扫表异步发送 | // 放入工作通知暂存表中,通过扫表异步发送 | ||||
workNoticeStagingService.addByWorkNotice(passWorkNoticeInfo2, MsgTypeEnum.PASS); | |||||
workNoticeStagingService.addByWorkNotice(passWorkNoticeInfo2, MsgTypeEnum.PROJECT_REVIEW); | |||||
} else { | } else { | ||||
// 若有下一个审核人(当前节点的用户), | // 若有下一个审核人(当前节点的用户), | ||||
// 向其发送浙政钉工作通知:标题:审核任务 内容:【单位名称】的【项目名称】需要您审核。 | // 向其发送浙政钉工作通知:标题:审核任务 内容:【单位名称】的【项目名称】需要您审核。 | ||||
@@ -383,7 +383,7 @@ public class TodoCenterManage { | |||||
String msg = String.format(PASS_MSG_TEMPLATE, sendWorkNoticeInfo.getOrganizationName(), projectName); | String msg = String.format(PASS_MSG_TEMPLATE, sendWorkNoticeInfo.getOrganizationName(), projectName); | ||||
sendWorkNoticeInfo.setMsg(msg); | sendWorkNoticeInfo.setMsg(msg); | ||||
// 放入工作通知暂存表中,通过扫表异步发送 | // 放入工作通知暂存表中,通过扫表异步发送 | ||||
workNoticeStagingService.addByWorkNotice(sendWorkNoticeInfo, MsgTypeEnum.AUDIT); | |||||
workNoticeStagingService.addByWorkNotice(sendWorkNoticeInfo, MsgTypeEnum.PROJECT_REVIEW); | |||||
} | } | ||||
break; | break; | ||||
// 驳回 | // 驳回 | ||||
@@ -398,7 +398,7 @@ public class TodoCenterManage { | |||||
String rejectMsg = String.format(REJECT_MSG_TEMPLATE, projectName, processDefinitionName); | String rejectMsg = String.format(REJECT_MSG_TEMPLATE, projectName, processDefinitionName); | ||||
rejectWorkNoticeInfo.setMsg(rejectMsg); | rejectWorkNoticeInfo.setMsg(rejectMsg); | ||||
// 放入工作通知暂存表中,通过扫表异步发送 | // 放入工作通知暂存表中,通过扫表异步发送 | ||||
workNoticeStagingService.addByWorkNotice(rejectWorkNoticeInfo, MsgTypeEnum.REJECTED); | |||||
workNoticeStagingService.addByWorkNotice(rejectWorkNoticeInfo, MsgTypeEnum.PROJECT_REVIEW); | |||||
break; | break; | ||||
// 退回 | // 退回 | ||||
case BACK: | case BACK: | ||||
@@ -410,7 +410,7 @@ public class TodoCenterManage { | |||||
String backMsg = String.format(BACK_MSG_TEMPLATE, projectName, processDefinitionName); | String backMsg = String.format(BACK_MSG_TEMPLATE, projectName, processDefinitionName); | ||||
backWorkNoticeInfo.setMsg(backMsg); | backWorkNoticeInfo.setMsg(backMsg); | ||||
// 放入工作通知暂存表中,通过扫表异步发送 | // 放入工作通知暂存表中,通过扫表异步发送 | ||||
workNoticeStagingService.addByWorkNotice(backWorkNoticeInfo, MsgTypeEnum.BACKED); | |||||
workNoticeStagingService.addByWorkNotice(backWorkNoticeInfo, MsgTypeEnum.PROJECT_REVIEW); | |||||
break; | break; | ||||
// 撤回(流程发起人和当前流程审核人的前一个审核人操作) | // 撤回(流程发起人和当前流程审核人的前一个审核人操作) | ||||
case WITHDRAW: | case WITHDRAW: | ||||