diff --git a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/shiro/ShiroConfig.java b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/shiro/ShiroConfig.java index 844252322..01933e2bc 100644 --- a/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/shiro/ShiroConfig.java +++ b/jero-boot/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/shiro/ShiroConfig.java @@ -140,6 +140,7 @@ public class ShiroConfig { filterChainDefinitionMap.put("/opensso/**", "anon"); //单点登录 filterChainDefinitionMap.put("/project/projectLawsInventoryEO/processCall", "anon"); // 项目库-法规清单 工作流处理数据接口排除 + filterChainDefinitionMap.put("/project/projectTaskInventoryEO/processCall", "anon"); // 项目库-任务清单 工作流处理数据接口排除 filterChainDefinitionMap.put("/sys/user/querySysUserListByIdList", "anon"); // 工作流根据用户idList获取用户信息接口 // 添加自己的过滤器并且取名为jwt diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/controller/ProjectTaskInventoryEOController.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/controller/ProjectTaskInventoryEOController.java index 875529992..1cc62f664 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/controller/ProjectTaskInventoryEOController.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/controller/ProjectTaskInventoryEOController.java @@ -4,6 +4,8 @@ import java.util.Arrays; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; + +import com.alibaba.fastjson.JSONObject; import com.jero.common.api.vo.Result; import com.jero.common.system.query.QueryGenerator; import com.jero.modules.project.entity.ProjectTaskInventoryEO; @@ -167,4 +169,27 @@ public class ProjectTaskInventoryEOController extends JeroController processCall(@RequestBody JSONObject jsonObject){ + return this.projectTaskInventoryEOService.processCall(jsonObject); + } + + /** + * 提醒办理 + * @param jsonObject + * @return + */ + @AutoLog(value = "项目库-任务清单表-提醒办理") + @ApiOperation(value="项目库-任务清单表-提醒办理", notes="项目库-任务清单表-提醒办理") + @PostMapping(value = "/remindDispose") + public Result remindDispose(@RequestBody JSONObject jsonObject){ + return this.projectTaskInventoryEOService.remindDispose(jsonObject); + } } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/enums/MsgTypeEnum.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/enums/MsgTypeEnum.java index 7684c1f02..83b5b50d5 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/enums/MsgTypeEnum.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/enums/MsgTypeEnum.java @@ -8,6 +8,9 @@ public enum MsgTypeEnum { TASK_AFFIRM_ISSUE_DRE_MSG("任务确认分配dre消息","taskAffirmIssueDreMsg"), TASK_AFFIRM_DRE_ACCEPTED("任务确认DRE通过消息","taskAffirmDreAccepted"), TASK_AFFIRM_DRE_REJECTED("任务确认DRE退回消息","taskAffirmDreRejected"), + + DESIGN_ISSUE_DRE_MSG("设计符合性确认分配dre消息","designIssueDreMsg"), + DESIGN_REMIND_MSG("设计符合性提醒办理","designRemindMsg"), ; String name; diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/enums/OperatorTypeEnum.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/enums/OperatorTypeEnum.java index 7fb37f152..db22b91d7 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/enums/OperatorTypeEnum.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/enums/OperatorTypeEnum.java @@ -18,6 +18,7 @@ public enum OperatorTypeEnum { TASK_AFFIRM_QUERY("任务确认流程,查询法规清单信息","taskAffirmQuery"), + ADD_TASK_INVENTORY_DETAIL("添加法规清单明细信息","addTaskInventoryDetail"), ; String name; diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/job/InventoryAffirmJob.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/job/InventoryAffirmJob.java index c3a989e5c..cae7a657c 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/job/InventoryAffirmJob.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/job/InventoryAffirmJob.java @@ -130,9 +130,9 @@ public class InventoryAffirmJob implements Job { currentDaysUserIdList = currentDaysUserIdList.stream().distinct().collect(Collectors.toList()); /*String msgContentCN = "您" + projectLibraryBase.getProjectName() + "(项目名称)法规清单的任务今天即将结束,请及时查看处理*/ - String msgContentEN = "The the regulation task confirmation of GB 7258 in " + String msgContentEN = "The the regulation list confirmation of " + projectNameInfoEO.getProjectName() - + "(projectname) is coming to an end today. Please check and deal with it intime"; + + "(project name) is coming to an end today. Please check and deal with it in time"; //发送消息 projectLawsInventoryEOService.sendMessage(msgContentEN,currentDaysUserIdList,projectLibraryBase.getId()); } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/IProjectTaskInventoryEOService.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/IProjectTaskInventoryEOService.java index 2cc6fbef1..b13e63b72 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/IProjectTaskInventoryEOService.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/IProjectTaskInventoryEOService.java @@ -1,5 +1,7 @@ package com.jero.modules.project.service; +import com.alibaba.fastjson.JSONObject; +import com.jero.common.api.vo.Result; import com.jero.modules.project.entity.ProjectTaskInventoryEO; import com.baomidou.mybatisplus.extension.service.IService; @@ -60,4 +62,18 @@ public interface IProjectTaskInventoryEOService extends IService queryList(ProjectTaskInventoryEO projectTaskInventoryEO, HttpServletRequest req); + + /** + * 项目库-任务清单表-流程调用 + * @param jsonObject + * @return + */ + Result processCall(JSONObject jsonObject); + + /** + * 项目库-任务清单表-提醒办理 + * @param jsonObject + * @return + */ + Result remindDispose(JSONObject jsonObject); } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/ProjectTaskInventoryEOServiceImpl.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/ProjectTaskInventoryEOServiceImpl.java index c0abe9436..0af3ffb81 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/ProjectTaskInventoryEOServiceImpl.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/ProjectTaskInventoryEOServiceImpl.java @@ -1,21 +1,18 @@ package com.jero.modules.project.service.impl; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.jero.common.api.vo.Result; import com.jero.common.exception.JeroBootException; import com.jero.common.system.vo.LoginUser; -import com.jero.modules.project.entity.ProjectLawsInventoryEO; -import com.jero.modules.project.entity.ProjectLibraryBase; -import com.jero.modules.project.entity.ProjectTaskInventoryDetailEO; -import com.jero.modules.project.entity.ProjectTaskInventoryEO; -import com.jero.modules.project.enums.InventoryAffirmStatusEnum; -import com.jero.modules.project.enums.ProjectRoleEnum; -import com.jero.modules.project.enums.TaskAffirmStatusEnum; -import com.jero.modules.project.enums.TaskStatusEnum; -import com.jero.modules.project.mapper.ProjectLawsInventoryEOMapper; -import com.jero.modules.project.mapper.ProjectLibraryBaseMapper; -import com.jero.modules.project.mapper.ProjectTaskInventoryDetailEOMapper; -import com.jero.modules.project.mapper.ProjectTaskInventoryEOMapper; +import com.jero.modules.project.entity.*; +import com.jero.modules.project.enums.*; +import com.jero.modules.project.mapper.*; import com.jero.modules.project.service.IProjectTaskInventoryEOService; +import com.jero.modules.project.util.SendMessageUtils; +import com.jero.modules.system.entity.SysUser; +import com.jero.modules.system.mapper.SysUserMapper; import com.jero.modules.wkflow.enums.FlowTypeEnum; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; @@ -24,6 +21,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.Date; import java.util.stream.Collectors; @@ -50,6 +48,12 @@ public class ProjectTaskInventoryEOServiceImpl extends ServiceImpl processCall(JSONObject jsonObject) { + String requestSource = jsonObject.getString("requestSource"); + if(StringUtils.isEmpty(requestSource)){ + throw new JeroBootException("请求来源不能为空!"); + } + if(!StringUtils.equals(requestSource, RequestSourceEnum.WORK_FLOW.getValue())){ + throw new JeroBootException("来源有误,没有权限调用该接口!"); + } + String operatorType = jsonObject.getString("operatorType"); + if(StringUtils.isEmpty(operatorType)){ + throw new JeroBootException("操作类型不能为空!"); + } + + if(StringUtils.equals(operatorType,OperatorTypeEnum.UPDATE_STATUS.getValue())){ + ProjectTaskInventoryEO projectTaskInventoryEO = JSONObject.parseObject(jsonObject.toString(), ProjectTaskInventoryEO.class); + this.baseMapper.updateById(projectTaskInventoryEO); + }else if(StringUtils.equals(operatorType,OperatorTypeEnum.SEND_MSG.getValue())){ + workFlowSendMsg(jsonObject); + }else if(StringUtils.equals(operatorType,OperatorTypeEnum.ADD_TASK_INVENTORY_DETAIL.getValue())){ + //添加法规清单明细数据。 + JSONArray taskInventoryDetailList = jsonObject.getJSONArray("taskInventoryDetailList"); + ProjectTaskInventoryDetailEO projectTaskInventoryDetailEO = null; + for (Object detail : taskInventoryDetailList) { + projectTaskInventoryDetailEO = JSONObject.parseObject(JSONObject.toJSONString(detail),ProjectTaskInventoryDetailEO.class); + projectTaskInventoryDetailEOMapper.insert(projectTaskInventoryDetailEO); + } + } + + return new Result<>().success("调用成功!"); + } + + /** + * 项目库-任务清单表-提醒办理 + * @param jsonObject + * @return + */ + @Override + public Result remindDispose(JSONObject jsonObject) { + + //发送消息类型 + String msgType = jsonObject.getString("msgType"); + + if(StringUtils.isEmpty(msgType)){ + throw new JeroBootException("发送消息类型不能为空,请检查!"); + } + String serialNumber = jsonObject.getString("serialNumber"); + //项目库id + String projectLibraryId = jsonObject.getString("projectLibraryId"); + + String msgContentEN = ""; + List userIdList = new ArrayList<>(); + + ProjectLibraryBase projectLibraryBase = projectLibraryBaseMapper.selectOne(new QueryWrapper() + .lambda().eq(ProjectLibraryBase::getId, projectLibraryId)); + + QueryWrapper projectNameInfoEOQueryWrapper = new QueryWrapper<>(); + projectNameInfoEOQueryWrapper.lambda().eq(ProjectNameInfoEO::getId,projectLibraryBase.getProjectNameId()); + ProjectNameInfoEO projectNameInfoEO = projectNameInfoEOMapper.selectOne(projectNameInfoEOQueryWrapper); + + if(StringUtils.equals(msgType,MsgTypeEnum.DESIGN_REMIND_MSG.getValue())){ + String dreUserIds = jsonObject.getString("dreUserIds"); //dre用户id + userIdList.addAll(Arrays.asList(dreUserIds.split(","))); + msgContentEN = "Please check and deal with the design compliance confirmation process of " + + serialNumber + " in "+ projectNameInfoEO.getProjectName() + " (project name) in time."; + } + + if(CollectionUtils.isNotEmpty(userIdList) && StringUtils.isNotEmpty(msgContentEN)){ + //发送消息 + SendMessageUtils.sendMessage(msgContentEN,userIdList,projectLibraryId); + } + return new Result<>().success("提醒办理成功!"); + } + /** * 创建任务清单列表数据 * @param projectTaskInventoryEOList @@ -305,4 +383,43 @@ public class ProjectTaskInventoryEOServiceImpl extends ServiceImpl() + .lambda().eq(ProjectLibraryBase::getId, projectLibraryId)); + + QueryWrapper projectNameInfoEOQueryWrapper = new QueryWrapper<>(); + projectNameInfoEOQueryWrapper.lambda().eq(ProjectNameInfoEO::getId,projectLibraryBase.getProjectNameId()); + ProjectNameInfoEO projectNameInfoEO = projectNameInfoEOMapper.selectOne(projectNameInfoEOQueryWrapper); + + SysUser sysUser = sysUserMapper.selectOne(new QueryWrapper().lambda().eq(SysUser::getId, currentUserId)); + + String msgContentEN = ""; + List userIdList = new ArrayList<>(); + String dreUserIds = jsonObject.getString("dreUserIds"); //dre用户id + userIdList.addAll(Arrays.asList(dreUserIds.split(","))); + + if (StringUtils.equals(msgType, MsgTypeEnum.DESIGN_ISSUE_DRE_MSG.getValue())) { + msgContentEN = sysUser.getUsername() + "has distributed the design compliance confirmation process of " + serialNumber + " in "+ projectNameInfoEO.getProjectName() + + " (project name) to you. Please check and handle it in time."; + } + + if(CollectionUtils.isNotEmpty(userIdList) && StringUtils.isNotEmpty(msgContentEN)){ + //发送消息 + SendMessageUtils.sendMessage(msgContentEN,userIdList,id); + } + } } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/util/SendMessageUtils.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/util/SendMessageUtils.java new file mode 100644 index 000000000..22e78ee15 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/util/SendMessageUtils.java @@ -0,0 +1,99 @@ +package com.jero.modules.project.util; + +import com.alibaba.fastjson.JSONObject; +import com.jero.common.constant.CommonConstant; +import com.jero.common.constant.WebsocketConst; +import com.jero.common.constant.enums.MessageTypeEnum; +import com.jero.modules.feishu.service.IFeishuService; +import com.jero.modules.message.websocket.WebSocket; +import com.jero.modules.system.entity.SysAnnouncement; +import com.jero.modules.system.entity.SysUser; +import com.jero.modules.system.service.ISysAnnouncementService; +import com.jero.modules.system.service.ISysUserService; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.jetbrains.annotations.NotNull; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + +@Component +public class SendMessageUtils { + private final static Logger logger= LoggerFactory.getLogger(SendMessageUtils.class); + + private static ISysUserService sysUserService; + @Autowired + public void setISysUserService(ISysUserService sysUserService){ + SendMessageUtils.sysUserService = sysUserService; + } + + private static ISysAnnouncementService sysAnnouncementService; + @Autowired + public void setISysAnnouncementService(ISysAnnouncementService sysAnnouncementService){ + SendMessageUtils.sysAnnouncementService = sysAnnouncementService; + } + + @Autowired + private static IFeishuService iFeishuService; + public void setIFeishuService(IFeishuService iFeishuService){ + SendMessageUtils.iFeishuService = iFeishuService; + } + + private static WebSocket webSocket; + @Autowired + public void setWebSocket(IFeishuService iFeishuService){ + SendMessageUtils.iFeishuService = iFeishuService; + } + + public static void sendMessage(String msgContent, List userIdList, String projectLibraryId) { + String idTemp = projectLibraryId; + + List sysUsers = sysUserService.listByIds(userIdList); + List thirdIdList = new ArrayList<>(); + if(CollectionUtils.isNotEmpty(sysUsers)){ + thirdIdList = sysUsers.stream().map(SysUser::getThirdId).collect(Collectors.toList()); + } + + //系统消息 + SysAnnouncement sysAnnouncement = getSysAnnouncement(userIdList, msgContent, ""); + sysAnnouncementService.saveAnnouncement(sysAnnouncement); + sendWebsocket(idTemp, idTemp); + + //飞书消息 + try { + iFeishuService.batchSendMessage(thirdIdList.toArray(new String[]{}), msgContent, MessageTypeEnum.PUSH.getName(), ""); + } catch (IOException e) { + logger.error("飞书消息推送失败"); + } + } + + @NotNull + private static SysAnnouncement getSysAnnouncement(List userIdList, String content, String contentInfo) { + SysAnnouncement sysAnnouncement = new SysAnnouncement(); + sysAnnouncement.setDelFlag("0"); + sysAnnouncement.setSendStatus("0"); + sysAnnouncement.setSendTime(new Date()); + sysAnnouncement.setMsgCategory(MessageTypeEnum.READ.getValue());//消息类型 + sysAnnouncement.setMsgType(CommonConstant.MSG_TYPE_UESR);//指定用户 + sysAnnouncement.setMsgContent(content); + sysAnnouncement.setMsgContentInfo(contentInfo); + sysAnnouncement.setUserIds(StringUtils.join(userIdList, ",")); + return sysAnnouncement; + } + + private static void sendWebsocket(String msgId, String msgTet) { + JSONObject obj = new JSONObject(); + obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_TOPIC); + obj.put(WebsocketConst.MSG_ID, msgId); + obj.put(WebsocketConst.MSG_TXT, msgTet); + webSocket.sendMessage(obj.toJSONString()); + } + +}