diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysMessageService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysMessageService.java index 67b69ef..80280c3 100644 --- a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysMessageService.java +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysMessageService.java @@ -139,4 +139,20 @@ public interface ISysMessageService { */ @ApiOperation(value = "批量删除用户消息") void deleteSysRefUserMessageByIds(Long[] ids); + + /** + * 根据消息id和用户id找到用户消息记录 + * @param msgId + * @param userId + */ + @ApiOperation(value = "根据消息id和用户id找到用户消息记录") + SysRefUserMessage getSysRefUserMessageByMsgIdAndUserId(Long msgId,Long userId); + + /** + * + * @param sysRefUserMessage + * @return + */ + @ApiOperation(value = "查询用户消息") + List findSysRefUserMessage(SysRefUserMessage sysRefUserMessage); } diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysRefUserExternalService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysRefUserExternalService.java new file mode 100644 index 0000000..0cb71c2 --- /dev/null +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysRefUserExternalService.java @@ -0,0 +1,37 @@ +package cn.estsh.i3plus.core.api.iservice.busi; + +import cn.estsh.i3plus.pojo.platform.bean.SysRefUserExternal; +import cn.estsh.impp.framework.base.service.ICrudService; + +import java.util.List; + +/** + * @Description : 用户外部关联关系 + * @Reference : + * @Author : yunhao + * @CreateDate : 2020-09-03 13:45 + * @Modify: + **/ +public interface ISysRefUserExternalService extends ICrudService { + + /** + * 根据外部值和关联关系查询用户id + * @param externalRef 外部关联关系 + * @param valueList 值集合 + * @return 用户id + */ + List findUserByExternalRefAndValue(Integer externalRef, List valueList); + + /** + * 根据外部关系和用户id查询外部关联值 + * @param externalRef 关系 + * @param userIdList 用户id列表 + * @return 外部关联值 + */ + List findExternalValueByRefAndUserId(Integer externalRef, List userIdList); + + SysRefUserExternal getSysRefUserExternalByRefAndValue(Integer externalRef, String value); + + SysRefUserExternal getSysRefUserExternalByRefAndUserId(Integer externalRef, Long userId); + +} diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysUserService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysUserService.java index 8df4140..d330fdd 100644 --- a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysUserService.java +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysUserService.java @@ -125,6 +125,13 @@ public interface ISysUserService { List list(); /** + * 查询所有数据 + * @return + */ + @ApiOperation(value = "查询所有",notes = "查询所有账号信息") + List listByUserOrganizeCode(); + + /** * 根据角色查询用户信息 * @param roleId 角色ID * @return 获取用户ID 集合 diff --git a/modules/i3plus-core-apiservice/pom.xml b/modules/i3plus-core-apiservice/pom.xml index ebb3a1f..b3574bf 100644 --- a/modules/i3plus-core-apiservice/pom.xml +++ b/modules/i3plus-core-apiservice/pom.xml @@ -81,6 +81,12 @@ i3plus-core-api + + + i3plus.sdk + i3plus-sdk-wechat + + impp.framework diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/ExternalSystemController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/ExternalSystemController.java new file mode 100644 index 0000000..f108dbb --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/ExternalSystemController.java @@ -0,0 +1,187 @@ +package cn.estsh.i3plus.core.apiservice.controller.base; + +import cn.estsh.i3plus.core.api.iservice.busi.ISysRefUserExternalService; +import cn.estsh.i3plus.core.api.iservice.busi.ISysUserService; +import cn.estsh.i3plus.platform.common.util.CommonConstWords; +import cn.estsh.i3plus.platform.common.util.PlatformConstWords; +import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.i3plus.pojo.platform.bean.SysRefUserExternal; +import cn.estsh.i3plus.pojo.platform.bean.SysUser; +import cn.estsh.i3plus.sdk.webchat.work.aes.AesException; +import cn.estsh.i3plus.sdk.webchat.work.enumutil.WorkWeChatEnumUtil; +import cn.estsh.i3plus.sdk.webchat.work.pojo.MsgTaskCardEvent; +import cn.estsh.i3plus.sdk.webchat.work.pojo.WorkWeChatUser; +import cn.estsh.i3plus.sdk.webchat.work.util.WorkWeChatTool; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.util.RedisCacheTool; +import cn.estsh.impp.framework.boot.util.ResultBean; +import com.alibaba.fastjson.JSON; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.xml.bind.JAXBContext; +import javax.xml.bind.JAXBException; +import javax.xml.bind.Unmarshaller; +import java.io.StringReader; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * @Description : + * @Reference : + * @Author : yunhao + * @CreateDate : 2020-09-02 19:08 + * @Modify: + **/ +@RestController +@Api(tags = "外部系统对接") +@RequestMapping("/impp/external-system") +public class ExternalSystemController { + + public static final Logger LOGGER = LoggerFactory.getLogger(ExternalSystemController.class); + + @Autowired + private ISysUserService sysUserService; + + @Autowired + private ISysRefUserExternalService sysRefUserExternalService; + + /** + * rabbitMQ队列 + */ + @Autowired + private RabbitTemplate rabbitTemplate; + + @GetMapping(value = "/enterprise-wechat/msg-callback") + @ApiOperation(value = "消息回调测试",notes = "消息回调测试") + public String test(@RequestParam(name = "msg_signature") String msgSignature, String timestamp, + String nonce, String echostr) throws AesException { + return new WorkWeChatTool().msgCallbackVerify(msgSignature, timestamp,nonce, echostr); + } + + @PostMapping(value = "/enterprise-wechat/msg-callback") + @ApiOperation(value = "消息回调",notes = "消息回调") + public ResultBean listSysLocaleLanguage(@RequestParam(name = "msg_signature") String msgSignature, String timestamp, + String nonce,@RequestBody String msgStr) { + try { + WorkWeChatTool workWeChatTool = new WorkWeChatTool(); + MsgTaskCardEvent msgTaskCardEvent = workWeChatTool.msgCallbackDecrypt(msgSignature,timestamp,nonce,msgStr); + rabbitTemplate.convertAndSend(PlatformConstWords.QUEUE_IMPP_WORK_WECHAT_MSG_CALLBACK, JSON.toJSONString(msgTaskCardEvent)); + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultObject(msgTaskCardEvent); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @GetMapping(value = "/enterprise-wechat/bind-user-ref") + @ApiOperation(value = "绑定用户关系",notes = "绑定用户关系") + public ResultBean workWeChatUserBind() { + try { + WorkWeChatTool workWeChatTool = new WorkWeChatTool(); + + // 获取所有微信用户,并按照配置的绑定数据转为map + WorkWeChatEnumUtil.WECHAT_USER_BIND_PROPERTY weChatUserBindProperty = WorkWeChatEnumUtil.WECHAT_USER_BIND_PROPERTY + .valueOfEnum(RedisCacheTool.getSysConfigStrVal(CommonConstWords.CONFIG_WORK_WECHAT_BIND_USER_PROPERTY)); + List weChatUserList = workWeChatTool.getAllDeptUserListDetail(); + Map weChatUserMap = weChatUserList.stream() + .collect( + Collectors.toMap( + weChatUserBindProperty::getUserProperty, + Function.identity(), + (existing, replacement) -> existing) + ); + + // 查询所有用户并根据配置属性进行匹配创建关系数据 + ImppEnumUtil.USER_BIND_PROPERTY userBindProperty = ImppEnumUtil.USER_BIND_PROPERTY + .valueOfEnum( + RedisCacheTool.getSysConfigStrVal(CommonConstWords.CONFIG_WORK_WECHAT_BIND_IMPP_USER_PROPERTY) + ); + List sysUserList = sysUserService.list(); + for (SysUser sysUser : sysUserList) { + String propertyValue = getUserProperty(userBindProperty, sysUser); + if (propertyValue != null && weChatUserMap.containsKey(propertyValue)) { + String webChatUserId = weChatUserMap.get(propertyValue).getUserId(); + SysRefUserExternal sysRefUserExternal = + sysRefUserExternalService.getSysRefUserExternalByRefAndUserId( + ImppEnumUtil.USER_EXTERNAL_REF.WORK_WECHAT.getValue(), sysUser.getId() + ); + + // 判断是否存在如果存在则修改,不存在则新增 + if(sysRefUserExternal == null){ + sysRefUserExternal = new SysRefUserExternal(); + sysRefUserExternal.setUserId(sysUser.getId()); + sysRefUserExternal.setExternalRef(ImppEnumUtil.USER_EXTERNAL_REF.WORK_WECHAT.getValue()); + sysRefUserExternal.setRefValue(webChatUserId); + sysRefUserExternalService.insert(sysRefUserExternal); + } else if (!webChatUserId.equals(sysRefUserExternal.getRefValue())) { + sysRefUserExternal.setRefValue(webChatUserId); + sysRefUserExternalService.update(sysRefUserExternal); + } + } + } + + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + private String getUserProperty(ImppEnumUtil.USER_BIND_PROPERTY userBindProperty,SysUser sysUser){ + String userBindPropertyValue = null; + switch (userBindProperty){ + case USER_LOGIN_NAME: + userBindPropertyValue =sysUser.getUserLoginName(); + break; + case USER_NAME: + userBindPropertyValue = sysUser.getUserName(); + break; + case USER_EMP_NO: + userBindPropertyValue =sysUser.getUserEmpNo(); + break; + case EMAIL: + userBindPropertyValue =sysUser.getUserEmail(); + break; + case USER_PHONE: + userBindPropertyValue =sysUser.getUserPhone(); + break; + case USER_WECHAT_NO: + userBindPropertyValue =sysUser.getUserWeChatNo(); + break; + } + return userBindPropertyValue; + } + + public static void main(String[] args) throws JAXBException { + String xml = "\n" + + "\n" + + "\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " 1599057699\n" + + " \n" + + " \n" + + " 1000002\n" + + "\n"; + + JAXBContext context = JAXBContext.newInstance(MsgTaskCardEvent.class); + Unmarshaller unmarshaller = context.createUnmarshaller(); + MsgTaskCardEvent boy2 = (MsgTaskCardEvent) unmarshaller.unmarshal(new StringReader(xml)); + System.out.println(boy2); + System.out.println(JSON.toJSONString(boy2)); + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysEnumController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysEnumController.java index df015ac..adb4828 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysEnumController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysEnumController.java @@ -3,6 +3,7 @@ package cn.estsh.i3plus.core.apiservice.controller.busi; import cn.estsh.i3plus.platform.common.util.PlatformConstWords; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil; +import cn.estsh.i3plus.sdk.webchat.work.enumutil.WorkWeChatEnumUtil; import cn.estsh.impp.framework.base.controller.CoreBaseController; import cn.estsh.impp.framework.boot.util.LocaleUtils; import cn.estsh.impp.framework.boot.util.ResultBean; @@ -355,4 +356,28 @@ public class SysEnumController extends CoreBaseController { return new ResultBean(true, "操作成功", LocaleUtils.getEnumLocaleResValuesToList(ImppEnumUtil.USER_CUSTOMIZE_CONFIG_TYPE.values())); } + + /** + * 用户绑定属性 + * + * @return 处理结果 + */ + @GetMapping("/user-bind-property") + @ApiOperation(value = "用户绑定属性", notes = "用户绑定属性") + public ResultBean getUserBindProperty() { + return new ResultBean(true, "操作成功", + LocaleUtils.getEnumLocaleResValuesToList(ImppEnumUtil.USER_BIND_PROPERTY.values())); + } + + /** + * 企业微信用户绑定属性 + * + * @return 处理结果 + */ + @GetMapping("/work-wechat-user-bind-property") + @ApiOperation(value = "企业微信用户绑定属性", notes = "企业微信用户绑定属性") + public ResultBean getWeChatUserBindProperty() { + return new ResultBean(true, "操作成功", + LocaleUtils.getEnumLocaleResValuesToList(WorkWeChatEnumUtil.WECHAT_USER_BIND_PROPERTY.values())); + } } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysMessageController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysMessageController.java index 5acd640..3f02d29 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysMessageController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysMessageController.java @@ -174,7 +174,6 @@ public class SysMessageController extends CoreBaseController { public ResultBean queryOutboxByPager(SysMessage sysMessage,Pager pager){ try { // 发件人为当前用户 - sysMessage.setMessageType(ImppEnumUtil.MESSAGE_TYPE.LETTER.getValue()); sysMessage.setMessageSenderId(getSessionUser().getUser().getId()); ListPager sysMessageListPager = sysMessageService.querySysMessageByPager(sysMessage,pager); @@ -299,6 +298,23 @@ public class SysMessageController extends CoreBaseController { } /** + * CORE - 查询消息接收状态 + * @return 处理结果 + */ + @GetMapping(value = "/operate/user-message/find") + @ApiOperation(value = "查看用户未读站内信") + public ResultBean findReceiveStatus(SysRefUserMessage sysRefUserMessage){ + try { + List userMessageList = sysMessageService.findSysRefUserMessage(sysRefUserMessage); + return ResultBean.success("操作成功").setResultList(userMessageList).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + }catch(ImppBusiException busExcep){ + return ResultBean.fail(busExcep); + }catch(Exception e){ + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + /** * 用户消息复杂查询,分页,排序 * @param refUserMessagePagerModel 查询条件及分页信息 * @return 处理结果 diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysUserController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysUserController.java index 11013fc..fbc54a3 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysUserController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysUserController.java @@ -276,7 +276,7 @@ public class SysUserController extends CoreBaseController{ @ApiOperation(value = "查询所有用户", notes = "查询所有系统用户") public ResultBean findAll() { try { - List list = sysUserService.list(); + List list = sysUserService.listByUserOrganizeCode(); return ResultBean.success("操作成功") .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) .setResultList(list); diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/MessageWorkWeChatQueueReceiver.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/MessageWorkWeChatQueueReceiver.java new file mode 100644 index 0000000..35cb9d0 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/MessageWorkWeChatQueueReceiver.java @@ -0,0 +1,208 @@ +package cn.estsh.i3plus.core.apiservice.mq; + +import cn.estsh.i3plus.core.api.iservice.busi.ISysMessageService; +import cn.estsh.i3plus.core.api.iservice.busi.ISysRefUserExternalService; +import cn.estsh.i3plus.core.api.iservice.busi.ISysUserService; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; +import cn.estsh.i3plus.platform.common.tool.JsonUtilTool; +import cn.estsh.i3plus.platform.common.tool.TimeTool; +import cn.estsh.i3plus.platform.common.util.PlatformConstWords; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil; +import cn.estsh.i3plus.pojo.platform.bean.SysMessage; +import cn.estsh.i3plus.pojo.platform.bean.SysRefUserExternal; +import cn.estsh.i3plus.pojo.platform.bean.SysRefUserMessage; +import cn.estsh.i3plus.pojo.platform.bean.SysUser; +import cn.estsh.i3plus.sdk.webchat.work.enumutil.WorkWeChatEnumUtil; +import cn.estsh.i3plus.sdk.webchat.work.pojo.MsgResponse; +import cn.estsh.i3plus.sdk.webchat.work.pojo.MsgTaskCardEvent; +import cn.estsh.i3plus.sdk.webchat.work.util.WorkWeChatTool; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import com.alibaba.fastjson.JSON; +import com.rabbitmq.client.Channel; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.amqp.core.Message; +import org.springframework.amqp.core.Queue; +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +/** + * @Description : 邮件队列处理 + * @Reference : + * @Author : yunhao + * @CreateDate : 2018-11-15 22:15 + * @Modify: + **/ +@ConditionalOnExpression("'${impp.mq.queue.work.we-chat:true}' == 'true'") +@Configuration +public class MessageWorkWeChatQueueReceiver { + + private static final Logger LOGGER = LoggerFactory.getLogger(MessageWorkWeChatQueueReceiver.class); + + @Autowired + private ISysMessageService sysMessageService; + + @Autowired + private ISysUserService sysUserService; + + @Autowired + private ISysRefUserExternalService sysRefUserExternalService; + + @Bean + public Queue getQueueImppWorkWeChatMsg(){ + return new Queue(PlatformConstWords.QUEUE_IMPP_WORK_WECHAT_MSG); + } + + @Bean + public Queue getQueueImppWorkWeChatMsgCallback(){ + return new Queue(PlatformConstWords.QUEUE_IMPP_WORK_WECHAT_MSG_CALLBACK); + } + + /** + * 系统邮件处理队列 + * + * @param data 系统消息信息 + * @param channel 通道 + * @param message 消息 + */ + @RabbitListener(queues = PlatformConstWords.QUEUE_IMPP_WORK_WECHAT_MSG) + public void processWorkWeChatMsg(String data, Channel channel, Message message) { + SysMessage msg = JsonUtilTool.decode(data, SysMessage.class); + Long startTime = System.currentTimeMillis(); + try { + LOGGER.debug("【MQ-QUEUE_IMPP_WORK_WECHAT_MSG】数据接收成功:{}", msg); + if (msg.getMessageSendTime() == null) { + msg.setMessageSendTime(TimeTool.getNowTime(true)); + } + + // 持久化消息化消息并初始化状态 + ConvertBean.serviceModelInitialize(msg, msg.getMessageSenderNameRdd()); + msg.setSendStatus(ImppEnumUtil.MESSAGE_SEND_STATUS.SENDING.getValue()); + msg = sysMessageService.insertSysMessage(msg); + + // 默认发送成功 + msg.setSendStatus(ImppEnumUtil.MESSAGE_SEND_STATUS.SEND_SUCCESS.getValue()); + + // 收件人信息 + List userIdList = new ArrayList<>(); + SysRefUserMessage refUserMessage; + SysUser sysUser; + Long userId; + for (String userIdStr : msg.getMessageReceiversId().split(",")) { + userId =Long.valueOf(userIdStr); + sysUser = sysUserService.getSysUserById(userId); + + refUserMessage = new SysRefUserMessage(); + refUserMessage.setMessageId(msg.getId()); + refUserMessage.setMessageSoftType(msg.getMessageSoftType()); + refUserMessage.setMessageTitleRdd(msg.getMessageTitle()); + refUserMessage.setMessageTypeRdd(msg.getMessageType()); + refUserMessage.setMessageSenderNameRdd(msg.getMessageSenderNameRdd()); + refUserMessage.setReceiverId(sysUser.getId()); + refUserMessage.setReceiverNameRdd(sysUser.getUserName()); + refUserMessage.setMessageStatus(ImppEnumUtil.MESSAGE_STATUS.UNREAD.getValue()); + refUserMessage.setReceiverTime(TimeTool.getNowTime(true)); + refUserMessage.setIsUrgent(msg.getIsUrgent()); + + sysMessageService.insertSysRefUserMessage(refUserMessage); + + userIdList.add(userId); + } + + // 查询到关联的用户企业微信账号并发送 + List weChatUserIdList = sysRefUserExternalService.findExternalValueByRefAndUserId( + ImppEnumUtil.USER_EXTERNAL_REF.WORK_WECHAT.getValue(), userIdList); + + WorkWeChatTool workWeChatTool = new WorkWeChatTool(); + MsgResponse msgResponse = null; + try { + msgResponse = workWeChatTool.sendTaskCardMsg(weChatUserIdList, msg.getMessageTitle(), + msg.getMessageContent(), msg.getId().toString()); + LOGGER.info("企业微信信息发送结果{}", JsonUtilTool.encode(msgResponse)); + } catch (Exception e) { + msg.setSendStatus(ImppEnumUtil.MESSAGE_SEND_STATUS.SEND_FAIL.getValue()); + msg.setErrorMessage(e.getMessage()); + + } + + sysMessageService.updateSysMessage(msg); + + //信息已处理 + channel.basicAck(message.getMessageProperties().getDeliveryTag(), false); + } catch (Exception e) { + LOGGER.error("【MQ-QUEUE_IMPP_WORK_WECHAT_MSG】处理出错:{}", e.getMessage(), e); + //丢弃这条消息 + try { + // 未成功处理,重新发送 + channel.basicNack(message.getMessageProperties().getDeliveryTag(),false,true); + } catch (IOException e1) { + e1.printStackTrace(); + } + } finally { + LOGGER.info("[Core Work WeChat] Message Id:{} , 耗时{}, Message Info :{}", msg.getId(), + System.currentTimeMillis() - startTime, JSON.toJSONString(msg)); + } + } + + /** + * 系统邮件处理队列 + * + * @param data 系统消息信息 + * @param channel 通道 + * @param message 消息 + */ + @RabbitListener(queues = PlatformConstWords.QUEUE_IMPP_WORK_WECHAT_MSG_CALLBACK) + public void processWorkWeChatMsgCallback(String data, Channel channel, Message message) { + MsgTaskCardEvent msgTaskCardEvent = JsonUtilTool.decode(data, MsgTaskCardEvent.class); + Long startTime = System.currentTimeMillis(); + try { + if (!WorkWeChatEnumUtil.MSG_EVENT.TASK_CARD_CLICK.getValue().equals(msgTaskCardEvent.getEvent())) { + channel.basicAck(message.getMessageProperties().getDeliveryTag(), false); + return; + } + + Long msgId = Long.parseLong(msgTaskCardEvent.getTaskId()); + SysRefUserExternal sysRefUserExternal = sysRefUserExternalService.getSysRefUserExternalByRefAndValue( + ImppEnumUtil.USER_EXTERNAL_REF.WORK_WECHAT.getValue(), msgTaskCardEvent.getFromUserName() + ); + + if(sysRefUserExternal == null ){ + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.IMPP.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode()) + .setErrorDetail("用户关系不存在") + .build(); + } + SysRefUserMessage sysRefUserMessage = sysMessageService.getSysRefUserMessageByMsgIdAndUserId(msgId, + sysRefUserExternal.getUserId()); + + sysMessageService.updateSysRefUserMessageStatusByIds(new Long[]{sysRefUserMessage.getId()}, + ImppEnumUtil.MESSAGE_STATUS.READ.getValue()); + + //信息已处理 + channel.basicAck(message.getMessageProperties().getDeliveryTag(), false); + } catch (Exception e) { + LOGGER.error("【MQ-QUEUE_IMPP_WORK_WECHAT_MSG_CALLBACK】处理出错:{}", e.getMessage(), e); + //丢弃这条消息 + try { + // 未成功处理,重新发送 +// channel.basicNack(message.getMessageProperties().getDeliveryTag(),false,true); + channel.basicAck(message.getMessageProperties().getDeliveryTag(), false); + } catch (IOException e1) { + e1.printStackTrace(); + } + } finally { + LOGGER.info("[Core Work WeChat] Email Id:{} , 耗时{}, Message Info :{}", msgTaskCardEvent.getTaskId(), + System.currentTimeMillis() - startTime, JSON.toJSONString(msgTaskCardEvent)); + } + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysMessageService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysMessageService.java index f977032..8fb7a0d 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysMessageService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysMessageService.java @@ -158,6 +158,9 @@ public class SysMessageService implements ISysMessageService { // 邮件 if(ImppEnumUtil.MESSAGE_TYPE.MAIL.getValue() == sysMessage.getMessageTypeValue()){ rabbitTemplate.convertAndSend(PlatformConstWords.QUEUE_IMPP_MESSAGE_MAIL, JSON.toJSONString(sysMessage)); + // 微信信息 + }else if(ImppEnumUtil.MESSAGE_TYPE.WORK_WECHAT_TASK_CARD.getValue() == sysMessage.getMessageTypeValue()){ + rabbitTemplate.convertAndSend(PlatformConstWords.QUEUE_IMPP_WORK_WECHAT_MSG, JSON.toJSONString(sysMessage)); // 站内信 }else if(ImppEnumUtil.MESSAGE_TYPE.LETTER.getValue() == sysMessage.getMessageTypeValue()){ rabbitTemplate.convertAndSend(PlatformConstWords.QUEUE_IMPP_MESSAGE_LETTER,JSON.toJSONString(sysMessage)); @@ -251,4 +254,27 @@ public class SysMessageService implements ISysMessageService { sysRefUserMessageRDao.deleteByIds(ids); } + /** + * 批量修改用户消息状态 + * + * @param msgId + * @param userId + */ + @Override + public SysRefUserMessage getSysRefUserMessageByMsgIdAndUserId(Long msgId, Long userId) { + return sysRefUserMessageRDao.getByProperty( + new String[]{"messageId", "receiverId"}, + new Object[]{msgId, userId} + ); + } + + /** + * @param sysRefUserMessage + * @return + */ + @Override + public List findSysRefUserMessage(SysRefUserMessage sysRefUserMessage) { + return sysRefUserMessageRDao.findByHqlWhere(CoreHqlPack.packHqlSysRefUserMessage(sysRefUserMessage)); + } + } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysRefUserExternalService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysRefUserExternalService.java new file mode 100644 index 0000000..54fd0f4 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysRefUserExternalService.java @@ -0,0 +1,65 @@ +package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; + +import cn.estsh.i3plus.core.api.iservice.busi.ISysRefUserExternalService; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.platform.bean.SysRefUserExternal; +import cn.estsh.i3plus.pojo.platform.sqlpack.CoreHqlPack; +import cn.estsh.impp.framework.base.service.CrudService; +import org.apache.commons.collections.CollectionUtils; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Description : 用户外部关系 + * @Reference : + * @Author : yunhao + * @CreateDate : 2020-09-03 13:46 + * @Modify: + **/ +@Service +public class SysRefUserExternalService extends CrudService implements ISysRefUserExternalService { + + public List findUserByExternalRefAndValue(Integer externalRef, List valueList) { + List userIdList = new ArrayList<>(); + + DdlPackBean ddlPackBean = CoreHqlPack.packHqlFindUserIdByExternalRef(externalRef, valueList); + List sysRefUserExternalList = getRepository().findByHqlWhere(ddlPackBean); + if (CollectionUtils.isNotEmpty(sysRefUserExternalList)) { + sysRefUserExternalList.forEach(item -> userIdList.add(item.getUserId())); + } + + return userIdList; + } + + public List findExternalValueByRefAndUserId(Integer externalRef, List userIdList) { + List refValList = new ArrayList<>(); + + DdlPackBean ddlPackBean = CoreHqlPack.packHqlFindExternalRefByUserId(externalRef, userIdList); + List sysRefUserExternalList = getRepository().findByHqlWhere(ddlPackBean); + if (CollectionUtils.isNotEmpty(sysRefUserExternalList)) { + sysRefUserExternalList.forEach(item -> refValList.add(item.getRefValue())); + } + + return refValList; + } + + @Override + public SysRefUserExternal getSysRefUserExternalByRefAndValue(Integer externalRef, String value) { + SysRefUserExternal sysRefUserExternal = new SysRefUserExternal(); + sysRefUserExternal.setExternalRef(externalRef); + sysRefUserExternal.setRefValue(value); + return getRepository().getByProperty(CoreHqlPack.packHqlGetSysRefUserExternal(sysRefUserExternal)); + } + + @Override + public SysRefUserExternal getSysRefUserExternalByRefAndUserId(Integer externalRef, Long userId) { + SysRefUserExternal sysRefUserExternal = new SysRefUserExternal(); + sysRefUserExternal.setExternalRef(externalRef); + sysRefUserExternal.setUserId(userId); + return getRepository().getByProperty(CoreHqlPack.packHqlGetSysRefUserExternal(sysRefUserExternal)); + } + + +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysUserService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysUserService.java index 49cd5c7..976701e 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysUserService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysUserService.java @@ -401,6 +401,22 @@ public class SysUserService implements ISysUserService { public List list() { LOGGER.debug("平台用户 SYS_USER find All"); return userRDao.findByProperty( + new String[]{"isDeleted","isValid"}, + new Object[]{ + CommonEnumUtil.IS_DEAL.NO.getValue(), + CommonEnumUtil.IS_VAILD.VAILD.getValue() + }); + } + + /** + * 查询所有数据 + * + * @return + */ + @Override + public List listByUserOrganizeCode() { + LOGGER.debug("平台用户 SYS_USER listByUserOrganizeCode"); + return userRDao.findByProperty( new String[]{"isDeleted","isValid","organizeCode"}, new Object[]{ CommonEnumUtil.IS_DEAL.NO.getValue(), diff --git a/pom.xml b/pom.xml index ffb4ca3..d19e188 100644 --- a/pom.xml +++ b/pom.xml @@ -128,6 +128,12 @@ + i3plus.sdk + i3plus-sdk-wechat + ${project.version} + + + i3plus.platform i3plus-platform-common ${project.version}