diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/feishu/common/Constant.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/feishu/common/Constant.java new file mode 100644 index 00000000..2b3a1bfe --- /dev/null +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/feishu/common/Constant.java @@ -0,0 +1,11 @@ +package com.jero.modules.docking.feishu.common; + +public interface Constant { + + Integer OA = 1; + + Integer FEISHU_PENDING = 2; + + Integer FEISHU_MESSAGE = 3; + +} diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/feishu/service/impl/FeiShuDockingServiceImpl.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/feishu/service/impl/FeiShuDockingServiceImpl.java index 4390a10c..ee59fd8f 100644 --- a/laws-modules-docking/src/main/java/com/jero/modules/docking/feishu/service/impl/FeiShuDockingServiceImpl.java +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/feishu/service/impl/FeiShuDockingServiceImpl.java @@ -12,6 +12,7 @@ import com.jero.common.system.util.JwtUtil; import com.jero.common.system.vo.SysDictItemCore; import com.jero.common.util.RedisUtil; import com.jero.common.util.oConvertUtils; +import com.jero.modules.docking.feishu.common.Constant; import com.jero.modules.docking.feishu.dto.BotMessageDto; import com.jero.modules.docking.feishu.dto.InstanceDto; import com.jero.modules.docking.feishu.service.IFeiShuDockingService; @@ -20,11 +21,14 @@ import com.jero.modules.docking.feishu.vo.definition.*; import com.jero.modules.docking.feishu.vo.instance.ApprovalsInstanceVo; import com.jero.modules.docking.feishu.vo.instance.InstanceLink; import com.jero.modules.docking.feishu.vo.instance.InstanceTask; +import com.jero.modules.docking.hiwork.entity.LawsUnifiedTodoLog; +import com.jero.modules.docking.hiwork.service.LawsUnifiedTodoLogService; import com.jero.modules.system.entity.*; import com.jero.modules.system.service.*; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.env.Environment; @@ -35,7 +39,6 @@ import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; import org.springframework.web.util.UriComponentsBuilder; - import javax.annotation.Resource; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; @@ -65,6 +68,7 @@ public class FeiShuDockingServiceImpl implements IFeiShuDockingService { @Resource private ISysRoleService sysRoleService; @Resource + private LawsUnifiedTodoLogService lawsUnifiedTodoLogService; private CommonAPI commonAPI; @Value("${feishu.app_id}") private String appId; @@ -148,7 +152,6 @@ public class FeiShuDockingServiceImpl implements IFeiShuDockingService { List texts = new ArrayList<>(); texts.add(new DefinitionTexts("@i18n@1",approvalName)); texts.add(new DefinitionTexts("@i18n@2",approvalName)); - texts.add(new DefinitionTexts("@i18n@3","飞书")); // 构建国际化文案对象 DefinitionI18nResources definitionI18nResources = new DefinitionI18nResources(); definitionI18nResources.setLocale("zh-CN"); @@ -224,8 +227,8 @@ public class FeiShuDockingServiceImpl implements IFeiShuDockingService { } } catch (Exception e) { log.error(e.getMessage()); + throw new JeroBootException("根据手机号获取user_id失败"); } - return ""; } /** @@ -246,8 +249,11 @@ public class FeiShuDockingServiceImpl implements IFeiShuDockingService { HttpHeaders headers = createHeaders(accessToken); // 创建 HttpEntity HttpEntity entity = new HttpEntity<>(approvalsInstanceVo, headers); - restTemplate.exchange(url, HttpMethod.POST, entity, String.class); + ResponseEntity response = restTemplate.exchange(url, HttpMethod.POST, entity, String.class); + JSONObject jsonResponse = JSON.parseObject(response.getBody()); + logMessage(JSON.toJSONString(instanceDto), jsonResponse, "/feishu/synchronizeApprovalInstance", Constant.FEISHU_PENDING); }catch (Exception e) { + logError(JSON.toJSONString(instanceDto), e.getMessage(), "/feishu/synchronizeApprovalInstance", Constant.FEISHU_PENDING); log.error("同步三方审批实例异常" + e.getMessage()); } } @@ -404,6 +410,7 @@ public class FeiShuDockingServiceImpl implements IFeiShuDockingService { // 获取token String accessToken = getAccessToken(); // 构建参数 + // TODO 这里使用到了飞书的user_id,后续对接了IAM后,需验证下获取飞书id发送消息是否正常 List newPushRange = new ArrayList<>(); if (StringUtils.isNotBlank(botMessageDto.getReceiveIds())) { List pushRangeList = Arrays.asList(botMessageDto.getReceiveIds().split(",")); @@ -411,13 +418,14 @@ public class FeiShuDockingServiceImpl implements IFeiShuDockingService { SysUser reviewUser = sysUserService.getById(id); if (!Objects.isNull(reviewUser) && StringUtils.isNotBlank(reviewUser.getFeishuId())) { newPushRange.add(reviewUser.getFeishuId()); + } else { + BotMessageDto botMessageDto1 = new BotMessageDto(); + BeanUtils.copyProperties(botMessageDto,botMessageDto1); + botMessageDto1.setReceiveIds(id); + logError(JSON.toJSONString(botMessageDto1), "用户id:" + id +"对应的飞书账用户不存在", "/feishu/sendHrefMessageByBot", Constant.FEISHU_MESSAGE); } } } - if (newPushRange.isEmpty()) { - log.error("接收消息的飞书用户均不存在,消息发送终止"); - return; - } // 将url替换为单点登录的地址 // 使用 URL 编码来处理特殊字符,将url替换为单点登录的地址 String hrefUrl = URLEncoder.encode(botMessageDto.getHrefUrl(), "UTF-8"); @@ -471,13 +479,35 @@ public class FeiShuDockingServiceImpl implements IFeiShuDockingService { botMessageVo.setReceive_id(pushId); botMessageVo.setUuid(uuid); HttpEntity entity = new HttpEntity<>(botMessageVo, headers); - restTemplate.exchange(builder.toUriString(), HttpMethod.POST, entity, String.class); + ResponseEntity response = restTemplate.exchange(builder.toUriString(), HttpMethod.POST, entity, String.class); + JSONObject jsonResponse = JSON.parseObject(response.getBody()); + logMessage(JSON.toJSONString(botMessageDto), jsonResponse, "/feishu/sendHrefMessageByBot", Constant.FEISHU_MESSAGE); } } catch (Exception e) { - log.error("飞书发送消息异常" + e.getMessage()); + logError(JSON.toJSONString(botMessageDto), e.getMessage(), "/feishu/sendHrefMessageByBot", Constant.FEISHU_MESSAGE); } } + private void logMessage(String dto, JSONObject jsonResponse, String url, Integer messageType) { + LawsUnifiedTodoLog logEntry = new LawsUnifiedTodoLog(); + logEntry.setJsonStr(dto); + logEntry.setResponseBody("success"); + logEntry.setState("0".equals(jsonResponse.getString("code")) ? 1 : 2); + logEntry.setMessageType(messageType); + logEntry.setUrl(url); + lawsUnifiedTodoLogService.add(logEntry); + } + + private void logError(String dto, String errorMessage, String url, Integer messageType) { + LawsUnifiedTodoLog logEntry = new LawsUnifiedTodoLog(); + logEntry.setJsonStr(dto); + logEntry.setResponseBody(errorMessage); + logEntry.setState(2); + logEntry.setMessageType(messageType); + logEntry.setUrl(url); + lawsUnifiedTodoLogService.add(logEntry); + log.error("飞书发送消息异常: " + errorMessage); + } /** * 根据预授权码获取用户信息 diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/hiwork/entity/LawsUnifiedTodoLog.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/hiwork/entity/LawsUnifiedTodoLog.java index 44386794..89ee2e1e 100644 --- a/laws-modules-docking/src/main/java/com/jero/modules/docking/hiwork/entity/LawsUnifiedTodoLog.java +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/hiwork/entity/LawsUnifiedTodoLog.java @@ -20,7 +20,7 @@ import java.util.Date; @ApiModel(description="统一代办推送日志表") @TableName(value = "laws_unified_todo_log") public class LawsUnifiedTodoLog { - @TableId(value = "id", type = IdType.INPUT) + @TableId(value = "id", type = IdType.ASSIGN_ID) @ApiModelProperty(value="") private String id;