diff --git a/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeCommunityNewGroupController.java b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeCommunityNewGroupController.java index 3b8c0cc710afa13e5e839002649f3968fff846e1..b37752f80d57df975a3e60f896848aa4da9c9e34 100644 --- a/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeCommunityNewGroupController.java +++ b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeCommunityNewGroupController.java @@ -1,14 +1,11 @@ package com.linkwechat.web.controller.wecom; -import cn.hutool.core.collection.CollectionUtil; import com.linkwechat.common.annotation.Log; import com.linkwechat.common.constant.HttpStatus; import com.linkwechat.common.core.controller.BaseController; import com.linkwechat.common.core.domain.AjaxResult; import com.linkwechat.common.core.page.TableDataInfo; import com.linkwechat.common.enums.BusinessType; -import com.linkwechat.common.exception.wecom.WeComException; -import com.linkwechat.common.utils.StringUtils; import com.linkwechat.common.utils.file.FileUtils; import com.linkwechat.wecom.domain.WeCommunityNewGroup; import com.linkwechat.wecom.domain.WeEmpleCode; diff --git a/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeMomentsController.java b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeMomentsController.java new file mode 100644 index 0000000000000000000000000000000000000000..a4620aa7c5767ac42b9e818a143265a87ffe081a --- /dev/null +++ b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeMomentsController.java @@ -0,0 +1,66 @@ +package com.linkwechat.web.controller.wecom; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.linkwechat.common.core.controller.BaseController; +import com.linkwechat.common.core.domain.AjaxResult; +import com.linkwechat.common.core.page.TableDataInfo; +import com.linkwechat.common.utils.StringUtils; +import com.linkwechat.wecom.domain.WeMessagePush; +import com.linkwechat.wecom.domain.WeMoments; +import com.linkwechat.wecom.service.IWeMomentsService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + + +/** + * 朋友圈相关 + */ +@RestController +@RequestMapping("/wecom/moments") +public class WeMomentsController extends BaseController { + + + @Autowired + IWeMomentsService iWeMomentsService; + + + /** + * 获取朋友圈列表 + * @param weMoments + * @return + */ + @GetMapping("/list") + public TableDataInfo list(WeMoments weMoments) { + startPage(); + return getDataTable( + iWeMomentsService.list( + new LambdaQueryWrapper() + .eq(StringUtils.isNotEmpty(weMoments.getCreateBy()), WeMoments::getCreateBy + , weMoments.getCreateBy()) + .apply(weMoments.getBeginTime() != null, "to_date(create_time::text,'YYYY-MM-DD') >= to_date('" + weMoments.getBeginTime() + "','YYYY-MM-DD')") + .apply(weMoments.getEndTime() != null, "to_date(create_time::text,'YYYY-MM-DD') <= to_date('" + weMoments.getEndTime() + "','YYYY-MM-DD')") + ) + ); + } + + + /** + * 新增或者编辑朋友圈 + * @return + */ + @PostMapping("/addOrUpdate") + public AjaxResult addOrUpdate(@RequestBody WeMoments weMoments){ + + iWeMomentsService.addOrUpdateMoments(weMoments); + + + return AjaxResult.success(); + } + + + + + +} diff --git a/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeMsgTlpController.java b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeMsgTlpController.java index 595dbb28d559761047d7b26b9216840be5ac1db4..647d4906b2c226dc560208283f4870f329a23a42 100644 --- a/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeMsgTlpController.java +++ b/linkwe-admin/src/main/java/com/linkwechat/web/controller/wecom/WeMsgTlpController.java @@ -46,6 +46,7 @@ public class WeMsgTlpController extends BaseController } + /** * 新增欢迎语模板 */ diff --git a/linkwe-common/src/main/java/com/linkwechat/common/config/RuoYiConfig.java b/linkwe-common/src/main/java/com/linkwechat/common/config/RuoYiConfig.java index 1fc8aede7c60b1d6dca99e6952d5a944126c6ba2..1a6828ddbaefae657606de392ee506688e31cbcc 100644 --- a/linkwe-common/src/main/java/com/linkwechat/common/config/RuoYiConfig.java +++ b/linkwe-common/src/main/java/com/linkwechat/common/config/RuoYiConfig.java @@ -46,6 +46,10 @@ public class RuoYiConfig private boolean editPwd=true; + /**无需同步的用户*/ + private String[] noSyncWeUser; + + /**匿名访问的URL*/ private String[] anonUrl; @@ -185,4 +189,13 @@ public class RuoYiConfig public void setEditPwd(boolean editPwd) { this.editPwd = editPwd; } + + + public String[] getNoSyncWeUser() { + return noSyncWeUser; + } + + public void setNoSyncWeUser(String[] noSyncWeUser) { + this.noSyncWeUser = noSyncWeUser; + } } diff --git a/linkwe-quartz/src/main/java/com/linkwechat/quartz/task/GroupMessageTask.java b/linkwe-quartz/src/main/java/com/linkwechat/quartz/task/GroupMessageTask.java index 4d45d38c01bc0e92e4e7640d848e4cbca20821d6..00d42a9f7817394894758ee66067dad1b386c99c 100644 --- a/linkwe-quartz/src/main/java/com/linkwechat/quartz/task/GroupMessageTask.java +++ b/linkwe-quartz/src/main/java/com/linkwechat/quartz/task/GroupMessageTask.java @@ -35,17 +35,22 @@ public class GroupMessageTask { if (CollectionUtils.isNotEmpty(weCustomerMessageTimeTasks)) { weCustomerMessageTimeTasks.forEach( s -> { + Integer solved=new Integer(1); + String exceMsg=null; try { if (s.getMessageInfo() != null && s.getMessageId() != null || (s.getMessageInfo().getPushType().equals(WeConstans.SEND_MESSAGE_CUSTOMER) && CollectionUtils.isNotEmpty(s.getCustomersInfo())) || (s.getMessageInfo().getPushType().equals(WeConstans.SEND_MESSAGE_GROUP) && CollectionUtils.isNotEmpty(s.getGroupsInfo()))) { weCustomerMessageService.sendMessgae(s.getMessageInfo(), s.getMessageId(), s.getCustomersInfo(), s.getGroupsInfo()); - //更新消息处理状态 - customerMessageTimeTaskMapper.updateTaskSolvedById(s.getTaskId()); + } } catch (Exception e) { log.error("定时群发消息处理异常:ex:{}", e); - e.printStackTrace(); + solved=new Integer(2); + exceMsg=e.getMessage(); + }finally { + //更新消息处理状态 + customerMessageTimeTaskMapper.updateTaskSolvedById(s.getTaskId(),solved,exceMsg); } } ); diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeMomentsClient.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeMomentsClient.java new file mode 100644 index 0000000000000000000000000000000000000000..c49b8ae288c80f8f16a7d772eb1dda95bf68e392 --- /dev/null +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/client/WeMomentsClient.java @@ -0,0 +1,29 @@ +package com.linkwechat.wecom.client; + + +import com.dtflys.forest.annotation.BaseRequest; +import com.dtflys.forest.annotation.JSONBody; +import com.dtflys.forest.annotation.PostRequest; +import com.dtflys.forest.annotation.Retry; +import com.linkwechat.wecom.domain.dto.WeResultDto; +import com.linkwechat.wecom.domain.dto.moments.MomentsParamDto; +import com.linkwechat.wecom.retry.WeCommonRetryWhen; + + +/** + * 朋友圈 + */ +@BaseRequest(baseURL = "${weComServerUrl}${weComePrefix}",retryer = WeCommonRetryWhen.class) +@Retry(maxRetryCount = "3", maxRetryInterval = "1000", condition = WeCommonRetryWhen.class) +public interface WeMomentsClient { + + + /** + * 创建朋友圈 + * @param momentsParamDto + * @return + */ + @PostRequest("/externalcontact/add_moment_task") + WeResultDto addMomentTask(@JSONBody MomentsParamDto momentsParamDto); + +} diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeMoments.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeMoments.java new file mode 100644 index 0000000000000000000000000000000000000000..38a486c565f1f4124b70109aa7bbc45d9a3d29d2 --- /dev/null +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeMoments.java @@ -0,0 +1,75 @@ +package com.linkwechat.wecom.domain; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableLogic; +import com.baomidou.mybatisplus.annotation.TableName; +import com.linkwechat.common.core.domain.BaseEntity; +import com.linkwechat.wecom.handler.GenericTypeHandler; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 朋友圈 + */ +@Data +@TableName("we_moments") +public class WeMoments extends BaseEntity { + + @TableId + private Long id; + + /**可见类型:1:全部;2:部分;*/ + private Integer scopeType; + + /**朋友圈类型:1:企业动态;2:个人动态*/ + private Integer type; + + /**客户标签,多个使用逗号隔开*/ + private String customerTag; + + /**添加人,多个使用逗号隔开,(已发送员工)*/ + private String addUser; + + /**发送员工名称,使用逗号隔开*/ + private String addUserName; + + /**未发送员工,使用逗号隔开*/ + private String noAddUser; + + /**未发送员工名称,使用逗号隔开*/ + private String noAddUserName; + + /**文字内容*/ + private String textContent; + + /**附件*/ + @TableField(typeHandler = GenericTypeHandler.class) + private OtherContent otherContent; + + @TableLogic + private Integer delFlag; + + /**异步任务id,最大长度为64字节,24小时有效;可使用获取发表朋友圈任务结果查询任务状态*/ + private String jobId; + + + + + + @Data + public static class OtherContent{ + + //附件类型:1:图片 2:视频 3:网页 + private Integer annexType; + + //多个资源url,使用逗号隔开 + private String annexUrl; + + //多个媒体id,使用逗号隔开 + private String annexMediaid; + } + +} diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeMsgTlp.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeMsgTlp.java index 4891401f44be33b10a3ba2813411599f35bd686c..b183bbe9ee54c63770eff493699d75dc1f9b479e 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeMsgTlp.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/WeMsgTlp.java @@ -19,7 +19,7 @@ import java.util.List; * @date 2020-10-04 */ @Data -@TableName("we_msg_tlp") +@TableName(value = "we_msg_tlp",autoResultMap = true) public class WeMsgTlp extends BaseEntity { private static final long serialVersionUID = 1L; @@ -38,13 +38,13 @@ public class WeMsgTlp extends BaseEntity /**图文*/ @TableField(typeHandler = GenericTypeHandler.class) - private ImageText imageText; + private List imageText; /**小程序*/ @TableField(typeHandler = GenericTypeHandler.class) - private Applet applet; + private List applet; /** 0:正常;1:删除; */ diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/moments/MomentsParamDto.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/moments/MomentsParamDto.java new file mode 100644 index 0000000000000000000000000000000000000000..6056d837d4628eda425de03e2e3194b59fbb7d13 --- /dev/null +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/moments/MomentsParamDto.java @@ -0,0 +1,144 @@ +package com.linkwechat.wecom.domain.dto.moments; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.ArrayList; +import java.util.List; + +/** + * 朋友圈如参相关 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class MomentsParamDto { + + + //文本 + private Text text; + + //附件 + private List attachments; + + //可见范围 + private VisibleRange visible_range; + + + + + + + @Data + @Builder + public static class Text{ + private String content; + } + + /** + * 附件上级类 + */ + @Data + public static class BaseAttachments{ + //类型:image:图片;video:视频;link:图文; + private String msgtype; + } + + + /** + * 图片附件 + */ + @Data + @Builder + public static class ImageAttachments extends BaseAttachments { + + private Image image; + + + + } + + /** + * 视频附件 + */ + @Data + @Builder + public static class VideoAttachments extends BaseAttachments{ + private Video video; + } + + + /** + * 图文附件 + */ + @Data + @Builder + public static class LinkAttachments extends BaseAttachments{ + private Link link; + } + + + + + @Data + @Builder + public static class Image{ + private String mediaId; + } + + + @Data + @Builder + public static class Video{ + private String mediaId; + } + + + + @Data + @Builder + public static class Link{ + private String title; + private String url; + private String mediaId; + } + + + /**************************************** + ******************范围相关*************** + ***************************************/ + + @Data + @Builder + public static class VisibleRange{ + + + private SenderList sender_list; + + private ExternalContactList external_contact_list; + + } + + @Data + @Builder + public static class SenderList{ + + private String[] user_list; + + private String[] department_list; + + } + + @Data + @Builder + public static class ExternalContactList{ + + private String[] tag_list; + } + + + +} diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/moments/MomentsResultDto.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/moments/MomentsResultDto.java new file mode 100644 index 0000000000000000000000000000000000000000..e2282bc9007783ed206bcda7b643f75b911b6da7 --- /dev/null +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/domain/dto/moments/MomentsResultDto.java @@ -0,0 +1,10 @@ +package com.linkwechat.wecom.domain.dto.moments; + +import com.linkwechat.wecom.domain.dto.WeResultDto; +import lombok.Data; + +@Data +public class MomentsResultDto extends WeResultDto { + + private String jobid; +} diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/handler/GenericTypeHandler.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/handler/GenericTypeHandler.java index 794779742e7a8a5c13a3785db28c0fef92751c0b..914f2a0959cf60598da02a4a658f63c295c0ddb4 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/handler/GenericTypeHandler.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/handler/GenericTypeHandler.java @@ -2,6 +2,7 @@ package com.linkwechat.wecom.handler; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; +import com.linkwechat.wecom.domain.WeMoments; import com.linkwechat.wecom.domain.WeMsgTlp; import com.linkwechat.wecom.domain.dto.message.CustomerMessagePushDto; import org.apache.ibatis.type.BaseTypeHandler; @@ -19,7 +20,8 @@ import java.sql.SQLException; * @param */ @SuppressWarnings("all") -@MappedTypes(value = {JSONObject.class, CustomerMessagePushDto.class, WeMsgTlp.Applet.class,WeMsgTlp.ImageText.class}) +@MappedTypes(value = {JSONObject.class, CustomerMessagePushDto.class, WeMsgTlp.Applet.class,WeMsgTlp.ImageText.class, + WeMoments.OtherContent.class}) @MappedJdbcTypes(value = {JdbcType.VARCHAR}, includeNullJdbcType = true) public class GenericTypeHandler extends BaseTypeHandler { diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeCustomerMessageTimeTaskMapper.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeCustomerMessageTimeTaskMapper.java index 4d48cdee10147b3c2d117863862ef97754df90e7..897f8d4e4e11522172f57c3660802f24817481ee 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeCustomerMessageTimeTaskMapper.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/mapper/WeCustomerMessageTimeTaskMapper.java @@ -37,6 +37,6 @@ public interface WeCustomerMessageTimeTaskMapper extends BaseMapper { +} diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeMomentsService.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeMomentsService.java new file mode 100644 index 0000000000000000000000000000000000000000..7e28aeec69121c0f3f8b396860a97c408356dad8 --- /dev/null +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/IWeMomentsService.java @@ -0,0 +1,10 @@ +package com.linkwechat.wecom.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.linkwechat.wecom.domain.WeMoments; +import com.linkwechat.wecom.mapper.WeMomentsMapper; + +public interface IWeMomentsService extends IService { + + void addOrUpdateMoments(WeMoments weMoments); +} diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeCustomerServiceImpl.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeCustomerServiceImpl.java index 4ed4085954cb98379f91a3a8f4ba6daf215eac86..b0b3a95ff2b7996b249b93b03c87a064c98e7c27 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeCustomerServiceImpl.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeCustomerServiceImpl.java @@ -251,6 +251,10 @@ public class WeCustomerServiceImpl extends ServiceImpl() + .notIn(WeCustomer::getExternalUserid,weCustomerList.stream().map(WeCustomer::getExternalUserid).collect(Collectors.toList())) + ); //移除,同一个客户不同首位添加人id客户,保留最早时间客户 this.saveOrUpdateBatch( weCustomerList.stream().collect( diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeMomentsServiceImpl.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeMomentsServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..121f666172fed67b979c1b562dd765529af35652 --- /dev/null +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeMomentsServiceImpl.java @@ -0,0 +1,183 @@ +package com.linkwechat.wecom.service.impl; + +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.collection.ListUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.google.common.base.Joiner; +import com.linkwechat.common.constant.WeConstans; +import com.linkwechat.common.utils.StringUtils; +import com.linkwechat.wecom.client.WeMomentsClient; +import com.linkwechat.wecom.domain.WeMoments; +import com.linkwechat.wecom.domain.WeUser; +import com.linkwechat.wecom.domain.dto.WeResultDto; +import com.linkwechat.wecom.domain.dto.moments.MomentsParamDto; +import com.linkwechat.wecom.mapper.WeMomentsMapper; +import com.linkwechat.wecom.service.IWeMomentsService; +import com.linkwechat.wecom.service.IWeUserService; +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.stream.Collectors; + +@Service +public class WeMomentsServiceImpl extends ServiceImpl implements IWeMomentsService { + + + @Autowired + WeMomentsClient weMomentsClient; + + + @Autowired + IWeUserService iWeUserService; + + + /** + * 发送更新朋友圈 + * @param weMoments + */ + @Override + public void addOrUpdateMoments(WeMoments weMoments) { + + + String addUser = weMoments.getAddUser(); + if(StringUtils.isNotEmpty(addUser)){ + + List weUsers = iWeUserService.listByIds( + ListUtil.toList(addUser.split(",")) + ); + if(CollectionUtil.isNotEmpty(weUsers)){ + weMoments.setAddUserName( + Joiner.on(",").join( weUsers.stream().map(WeUser::getName).collect(Collectors.toList())) + ); + } + + List noWeUser = iWeUserService.list(new LambdaQueryWrapper() + .notIn(WeUser::getUserId, ListUtil.toList(addUser.split(","))) + ); + + if(CollectionUtil.isNotEmpty(noWeUser)){ + + weMoments.setNoAddUser( + Joiner.on(",").join( noWeUser.stream().map(WeUser::getUserId).collect(Collectors.toList())) + ); + + + weMoments.setNoAddUserName( + Joiner.on(",").join( noWeUser.stream().map(WeUser::getName).collect(Collectors.toList())) + ); + + } + + + + } + + + + if(this.saveOrUpdate(weMoments)){ + + //企业动态,同步企业微信端 + if(weMoments.getType() + .equals(new Integer(1))){ + //附件封装 + List attachments=new ArrayList<>(); + WeMoments.OtherContent otherContent = weMoments.getOtherContent(); + if(null != otherContent){ + //图片 + if(otherContent.getAnnexType().equals(new Integer(1))){ + + if(StringUtils.isNotEmpty(otherContent.getAnnexMediaid())){ + Arrays.stream(otherContent.getAnnexMediaid().split(",")) + .forEach(k->{ + attachments.add( + MomentsParamDto.ImageAttachments.builder().image( + MomentsParamDto.Image.builder() + .mediaId(null) + .build() + ).build() + ); + + }); + } + } + + //视频 + if(otherContent.getAnnexType().equals(new Integer(2))){ + if(StringUtils.isNotEmpty(otherContent.getAnnexMediaid())){ + attachments.add( + MomentsParamDto.VideoAttachments.builder().video( + MomentsParamDto.Video.builder() + .mediaId(otherContent.getAnnexMediaid()) + .build() + ).build() + ); + } + + } + + //链接 + if(otherContent.getAnnexType().equals(new Integer(3))){ + if(StringUtils.isNotEmpty(otherContent.getAnnexUrl()) + &&StringUtils.isNotEmpty(otherContent.getAnnexMediaid())){ + attachments.add( + MomentsParamDto.LinkAttachments.builder().link( + MomentsParamDto.Link.builder() + .url(otherContent.getAnnexUrl()) + .mediaId(otherContent.getAnnexMediaid()) + .build() + ).build() + ); + } + } + } + + + MomentsParamDto.VisibleRange visibleRange + = MomentsParamDto.VisibleRange.builder().build(); + + if(weMoments.getScopeType().equals(new Integer(2))){ //部分 + if(StringUtils.isNotEmpty(weMoments.getCustomerTag())){ //客户标签 + visibleRange.setExternal_contact_list( + MomentsParamDto.ExternalContactList.builder() + .tag_list(weMoments.getCustomerTag().split(",")) + .build() + ); + } + + if(StringUtils.isNotEmpty(weMoments.getAddUser())){//指定发送人 + visibleRange.setSender_list( + MomentsParamDto.SenderList.builder() + .user_list(weMoments.getAddUser().split(",")) + .build() + ); + } + + + } + WeResultDto weResultDto = weMomentsClient.addMomentTask( + MomentsParamDto.builder() + .text(MomentsParamDto.Text.builder() + .content(weMoments.getTextContent()) + .build()) + .visible_range(visibleRange) + .attachments(attachments) + .build() + ); + //更新jobid + if(weResultDto.getErrcode().equals(WeConstans.WE_SUCCESS_CODE)){ + weMoments.setJobId(weMoments.getJobId()); + this.updateById(weMoments); + } + + } + } + + + } + + +} diff --git a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeUserServiceImpl.java b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeUserServiceImpl.java index 85a73ee29cb56bedac4d6b5f62fbcfe76689dd24..bec830f6bef832ec6f5e9c00def3ee59a29f8270 100644 --- a/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeUserServiceImpl.java +++ b/linkwe-wecom/src/main/java/com/linkwechat/wecom/service/impl/WeUserServiceImpl.java @@ -1,11 +1,14 @@ package com.linkwechat.wecom.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.collection.ListUtil; import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.ArrayUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.toolkit.SqlHelper; import com.google.common.collect.Lists; +import com.linkwechat.common.config.RuoYiConfig; import com.linkwechat.common.constant.WeConstans; import com.linkwechat.common.core.redis.RedisCache; import com.linkwechat.common.exception.wecom.WeComException; @@ -52,6 +55,10 @@ public class WeUserServiceImpl extends ServiceImpl impleme @Autowired private WeMsgAuditClient weMsgAuditClient; + + @Autowired + private RuoYiConfig ruoYiConfig; + @Override public List getListByIds(List idList) { return this.list(new LambdaQueryWrapper().in(WeUser::getUserId,idList)); @@ -207,9 +214,21 @@ public class WeUserServiceImpl extends ServiceImpl impleme List weUsers = weUserClient.list(WeConstans.WE_ROOT_DEPARMENT_ID, WeConstans.DEPARTMENT_SUB_WEUSER).getWeUsers(); if (CollectionUtil.isNotEmpty(weUsers)) { - List collect - = weUsers.stream().filter(o -> !o.getUserId().equals("45DuXiangShangQingXie")).collect(Collectors.toList()); - List> lists = Lists.partition(collect, 500); + //不存在的客户设置为离职未分配状态 + this.update(WeUser.builder() + .isActivate(WeConstans.WE_USER_IS_LEAVE) + .isAllocate(WeConstans.LEAVE_NO_ALLOCATE_STATE) + .dimissionTime(new Date()) + .build(),new LambdaQueryWrapper() + .notIn(WeUser::getUserId,weUsers.stream().map(WeUser::getUserId).collect(Collectors.toList()))); + + + String[] noSyncWeUser = ruoYiConfig.getNoSyncWeUser(); + if(ArrayUtil.isNotEmpty(noSyncWeUser)){ + weUsers=weUsers.stream().filter(o -> !ListUtil.toList(noSyncWeUser).contains(o.getUserId())).collect(Collectors.toList()); + } + + List> lists = Lists.partition(weUsers, 500); for(List list : lists){ this.weUserMapper.insertBatch(list); } diff --git a/linkwe-wecom/src/main/resources/mapper/wecom/WeCustomerMessageTimeTaskMapper.xml b/linkwe-wecom/src/main/resources/mapper/wecom/WeCustomerMessageTimeTaskMapper.xml index f3aa22194f58527ab1ccdbd53c4ebe93548dd147..f7315cb7feaed14e8c63fcb81a4b76e1989c998d 100644 --- a/linkwe-wecom/src/main/resources/mapper/wecom/WeCustomerMessageTimeTaskMapper.xml +++ b/linkwe-wecom/src/main/resources/mapper/wecom/WeCustomerMessageTimeTaskMapper.xml @@ -38,10 +38,11 @@ ) - UPDATE we_customer_messageTimeTask - - solved=1 - + UPDATE we_customer_messageTimeTask set + solved=#{solved}, + + exce_msg=#{exceMsg} + task_id=#{taskId} diff --git a/linkwe-wecom/src/main/resources/mapper/wecom/WeMomentsMapper.xml b/linkwe-wecom/src/main/resources/mapper/wecom/WeMomentsMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..1ade268c3c9a5db82337ae16fb4acc158ee45426 --- /dev/null +++ b/linkwe-wecom/src/main/resources/mapper/wecom/WeMomentsMapper.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/linkwe-wecom/src/main/resources/mapper/wecom/WeUserMapper.xml b/linkwe-wecom/src/main/resources/mapper/wecom/WeUserMapper.xml index 38e0e9d3150018c0089bba6e002defe5f23e9c54..ced40e7fab77a4cb701b93d409aeed6c0f6647c6 100644 --- a/linkwe-wecom/src/main/resources/mapper/wecom/WeUserMapper.xml +++ b/linkwe-wecom/src/main/resources/mapper/wecom/WeUserMapper.xml @@ -65,6 +65,7 @@ and birthday = #{birthday} and is_activate = #{isActivate} and is_open_chat = #{isOpenChat} + and is_activate !=6