Selaa lähdekoodia

Merge remote-tracking branch 'origin/master' into prod

tanbin 1 vuosi sitten
vanhempi
commit
378df93fae

+ 35 - 0
sys-api-service/src/main/java/com/xy/handler/ScanHandler.java

@@ -0,0 +1,35 @@
+package com.xy.handler;
+
+import lombok.extern.slf4j.Slf4j;
+import me.chanjar.weixin.common.session.WxSessionManager;
+import me.chanjar.weixin.mp.api.WxMpMessageHandler;
+import me.chanjar.weixin.mp.api.WxMpService;
+import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;
+import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * 微信服务号扫码处理器
+ */
+@Component("scanHandler")
+@Slf4j
+public class ScanHandler implements WxMpMessageHandler {
+
+    /**
+     * 扫码事件 (暂不实现逻辑)
+     *
+     * @param wxMessage
+     * @param context
+     * @param wxMpService
+     * @param sessionManager
+     * @return
+     */
+    @Override
+    public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map<String, Object> context, WxMpService wxMpService, WxSessionManager sessionManager) {
+        return WxMpXmlOutMessage.TEXT().fromUser(wxMessage.getToUser()).toUser(wxMessage.getFromUser())
+                .content("扫一扫关注公众号").build();
+    }
+
+}

+ 58 - 0
sys-api-service/src/main/java/com/xy/handler/SubscribeHandler.java

@@ -0,0 +1,58 @@
+package com.xy.handler;
+
+import com.alibaba.fastjson.JSON;
+import com.google.common.base.Throwables;
+
+import com.xy.config.WeChatOfficialConfig;
+import lombok.extern.slf4j.Slf4j;
+import me.chanjar.weixin.common.session.WxSessionManager;
+import me.chanjar.weixin.mp.api.WxMpMessageHandler;
+import me.chanjar.weixin.mp.api.WxMpService;
+import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;
+import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;
+import me.chanjar.weixin.mp.bean.result.WxMpUser;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
+
+/**
+ * 微信服务号 关注 事件 处理器
+ * 将eventKey 存储在 redis
+ *
+ * @author 谭斌
+ * @date 2024/02/21
+ */
+@Component("subscribeHandler")
+@Slf4j
+public class SubscribeHandler implements WxMpMessageHandler {
+
+    @Autowired
+    private StringRedisTemplate redisTemplate;
+
+    /**
+     * 拿到场景值和用户信息,写入到redis
+     *
+     * @param wxMessage
+     * @param context
+     * @param wxMpService
+     * @param sessionManager
+     * @return
+     */
+    @Override
+    public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map<String, Object> context, WxMpService wxMpService
+            , WxSessionManager sessionManager) {
+        try {
+            WxMpUser user = wxMpService.getUserService().userInfo(wxMessage.getFromUser());
+            String eventKey = wxMessage.getEventKey().replaceAll(WeChatOfficialConfig.QR_CODE_SCENE_PREFIX, "");
+            redisTemplate.opsForValue().set(eventKey, JSON.toJSONString(user), 30, TimeUnit.DAYS);
+        } catch (Exception e) {
+            log.error("SubscribeHandler#handle fail:{}", Throwables.getStackTraceAsString(e));
+        }
+        return WxMpXmlOutMessage.TEXT().fromUser(wxMessage.getToUser()).toUser(wxMessage.getFromUser())
+                .content("感谢您的关注!").build();
+    }
+}

+ 29 - 0
sys-api-service/src/main/java/com/xy/handler/UnSubscribeHandler.java

@@ -0,0 +1,29 @@
+package com.xy.handler;
+
+import lombok.extern.slf4j.Slf4j;
+import me.chanjar.weixin.common.session.WxSessionManager;
+import me.chanjar.weixin.mp.api.WxMpMessageHandler;
+import me.chanjar.weixin.mp.api.WxMpService;
+import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;
+import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+
+/**
+ * 取关
+ *
+ * @author 谭斌
+ * @date 2024/02/21
+ */
+@Component("unSubscribeHandler")
+@Slf4j
+public class UnSubscribeHandler implements WxMpMessageHandler {
+
+    @Override
+    public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map<String, Object> context, WxMpService wxMpService, WxSessionManager sessionManager) {
+        return WxMpXmlOutMessage.TEXT().fromUser(wxMessage.getToUser()).toUser(wxMessage.getFromUser())
+                .content("我会想你的!").build();
+    }
+}

+ 35 - 0
sys-api-service/src/main/java/com/xy/service/UserInfoServiceImpl.java

@@ -1,16 +1,20 @@
 package com.xy.service;
 
+import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.github.yitter.idgen.YitIdHelper;
 import com.xy.annotation.Lock;
 import com.xy.config.WebMqttConfig;
+import com.xy.consts.CommConsts;
 import com.xy.dto.SysWorkUser.AddDto;
 import com.xy.dto.SysWorkUser.DelDto;
+import com.xy.dto.SysWorkUser.ListByRoleDto;
 import com.xy.dto.SysWorkUser.UpdateDto;
 import com.xy.dto.UserInfoDto;
 import com.xy.entity.UserInfo;
@@ -25,7 +29,9 @@ import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 
+import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import static com.xy.utils.Beans.copy;
 import static com.xy.utils.PlusBeans.toIPage;
@@ -50,6 +56,34 @@ public class UserInfoServiceImpl extends ServiceImpl<UserInfoMapper, UserInfo> i
 
     private WebMqttConfig webMqttConfig;
 
+    private static final Long BIZ_SYS_ID = 374535878972677L;
+
+
+    @ApiOperation("获取所有售后权限用户ID")
+    @Override
+    public R<UserInfoDto.SaleBackUsersVO> getSaleBackUsers() {
+        UserInfoDto.SaleBackUsersVO vo = new UserInfoDto.SaleBackUsersVO();
+        ListByRoleDto listByRoleDto = new ListByRoleDto();
+        listByRoleDto.setRoleCode(CommConsts.MERC_SH_ADMIN);
+        listByRoleDto.setSysId(BIZ_SYS_ID);
+        List<Long> userIds = R.feignCheckData(sysWorkUserService.getUserIdListByRole(listByRoleDto));
+        //所有售后管理员及管理员创建的用户
+        List<UserInfo> userInfoList = this.list(Wrappers.<UserInfo>lambdaQuery()
+                .and(deviceAlgorithmChargingLambdaQueryWrapper -> deviceAlgorithmChargingLambdaQueryWrapper
+                        .in(UserInfo::getCreateUser, userIds)
+                        .or()
+                        .in(UserInfo::getAuthorizeUserId, userIds)
+                )
+        );
+        if (CollUtil.isNotEmpty(userInfoList)) {
+            List<Long> ids = userInfoList.stream().map(UserInfo::getAuthorizeUserId).distinct().collect(Collectors.toList());
+            List<String> wxMpOpenIds = userInfoList.stream().map(UserInfo::getMpOpenid).distinct().collect(Collectors.toList());
+            vo.setAuthUserIds(ids);
+            vo.setMpOpenIds(wxMpOpenIds);
+        }
+        return R.ok(vo);
+    }
+
     @Override
     @ApiOperation("集合查询")
     public R<List<UserInfoDto.Vo>> list(UserInfoDto.SelectListDto selectList) {
@@ -216,4 +250,5 @@ public class UserInfoServiceImpl extends ServiceImpl<UserInfoMapper, UserInfo> i
         return R.ok();
     }
 
+
 }

+ 50 - 0
sys-api/src/main/java/com/xy/dto/UserInfoDto.java

@@ -143,6 +143,28 @@ public class UserInfoDto {
         private String mpOpenid;
     }
 
+    @Data
+    @Accessors(chain = true)
+    public static class SaleBackUsersVO {
+        @ApiModelProperty(value = "所有售后用户ID")
+        private List<Long> authUserIds;
+        @ApiModelProperty(value = "所有售后用户openID")
+        private List<String> mpOpenIds;
+    }
+
+    @Data
+    @Accessors(chain = true)
+    public static class SaleBackUsersDTO {
+        @NotEmpty(message = "角色编号不可为空")
+        @ApiModelProperty(value = "角色编号", required = true)
+        private String roleCode;
+        @NotEmpty(message = "系统ID不可为空")
+        @ApiModelProperty(value = "用户ID", required = true)
+        private Long sysId;
+
+    }
+
+
     @Data
     @Accessors(chain = true)
     public static class Vo {
@@ -269,4 +291,32 @@ public class UserInfoDto {
         private String aliUserId;
 
     }
+
+    @Data
+    @Accessors(chain = true)
+    public static class WxQrCode {
+        //        @NotBlank(message = "用户ID不能为空")
+        @ApiModelProperty(value = "id")
+        private String userId;
+    }
+
+    @Data
+    @Accessors(chain = true)
+    public static class WxQrCodeVO {
+        @ApiModelProperty(value = "imgList")
+        private List<String> imgList;
+
+        @ApiModelProperty(value = "ticket")
+        private String ticket;
+    }
+
+    @Data
+    @Accessors(chain = true)
+    public static class CheckSubWx {
+        @NotBlank(message = "ticketId不可为空")
+        @ApiModelProperty(value = "ticketId")
+        private String ticketId;
+        @ApiModelProperty(value = "userId")
+        private String userId;
+    }
 }

+ 43 - 0
sys-api/src/main/java/com/xy/dto/WxServiceMsgDto.java

@@ -0,0 +1,43 @@
+package com.xy.dto;
+
+import lombok.Data;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+
+/**
+ * 公众号返回参数封装
+ */
+@XmlRootElement(name = "xml")
+@XmlAccessorType(XmlAccessType.FIELD)
+@Data
+public class WxServiceMsgDto {
+
+    @XmlElement(name = "Event")
+    private String event;
+
+    @XmlElement(name = "Content")
+    private String content;
+
+    @XmlElement(name = "MsgType")
+    private String msgType;
+
+
+    @XmlElement(name = "ToUserName")
+    private String toUserName;
+
+    @XmlElement(name = "EventKey")
+    private String eventKey;
+
+    @XmlElement(name = "CreateTime")
+    private String createTime;
+
+    /**
+     * fromUserName为关注人的openId
+     **/
+    @XmlElement(name = "FromUserName")
+    private String fromUserName;
+
+}

+ 10 - 0
sys-api/src/main/java/com/xy/service/UserInfoService.java

@@ -69,6 +69,7 @@ public interface UserInfoService {
 
     /**
      * 修改支付宝信息
+     *
      * @param dto
      * @return
      */
@@ -78,9 +79,18 @@ public interface UserInfoService {
 
     /**
      * 修改微信信息
+     *
      * @param dto
      * @return
      */
     @PostMapping("updateByWechat")
     R updateByWechat(@RequestBody @Validated UserInfoDto.UpdateByWechat dto);
+
+    /**
+     * 获取所有售后权限用户ID
+     *
+     * @return {@link R}<{@link List}<{@link UserInfoDto.SaleBackUsersVO}>>
+     */
+    R<UserInfoDto.SaleBackUsersVO> getSaleBackUsers();
+
 }

BIN
sys-start/src/main/resources/back1.png