Commit e6f56fd2 authored by 李健华's avatar 李健华

Merge branch 'feature/security-2022-04-02' into 'feature/security-2022-03-23'

# Conflicts:
#   src/main/java/cn/quantgroup/xyqb/controller/external/UserController.java
parents 4d2d1ad9 95f66962
package cn.quantgroup.user.enums;
/**
* Created by FrankChow on 15/7/15.
*/
public enum RecordType {
LOGINRECORD("login"),
REGISTERRECORD("register");
private String name;
RecordType(String name) {
this.name = name;
}
public String getName() {
return name;
}
@Override
public String toString() {
return name;
}
}
......@@ -8,10 +8,7 @@ import cn.quantgroup.xyqb.aspect.captcha.LoginInterceptor;
import cn.quantgroup.xyqb.aspect.limit.PasswordFreeAccessValidator;
import cn.quantgroup.xyqb.aspect.lock.PasswordErrorFiniteValidator;
import cn.quantgroup.xyqb.controller.IBaseController;
import cn.quantgroup.xyqb.entity.Merchant;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.entity.UserAttached;
import cn.quantgroup.xyqb.entity.UserDetail;
import cn.quantgroup.xyqb.entity.*;
import cn.quantgroup.xyqb.exception.UserNotExistException;
import cn.quantgroup.xyqb.exception.VerificationCodeErrorException;
import cn.quantgroup.xyqb.model.*;
......@@ -95,6 +92,9 @@ public class UserController implements IBaseController {
@Autowired
private IHttpService httpService;
@Autowired
private ILoginRecordService loginRecordService;
/**
* 登录(账号 + 密码)
......@@ -832,19 +832,13 @@ public class UserController implements IBaseController {
return JsonResult.buildSuccessResult("登出成功");
}
/**
*
*/
@RequestMapping(value = "/encrypted", method = RequestMethod.GET)
public JsonResult encrypted() {
List<User> userList = userService.findAll();
/* 加密 */
AESEncryption aesEncryption = ApplicationContextHolder.getBean(AESEncryption.class);
for (User user : userList) {
String phoneNo = user.getPhoneNo();
user.setEncryptedPhoneNo(phoneNo);
userService.saveUser(user);
@RequestMapping(value = "/kdsp/loginRecord", method = RequestMethod.POST)
public JsonResult loginRecord(@RequestParam(required = true) String deviceId) {
if (null == deviceId || "".equals(deviceId)) {
return JsonResult.buildErrorStateResult("请传入正确的设备ID", null);
}
return JsonResult.buildSuccessResult();
LoginRecord loginRecord = loginRecordService.findFirstLoginRecord(deviceId);
return JsonResult.buildSuccessResult("", loginRecord);
}
}
......@@ -6,26 +6,29 @@ import cn.quantgroup.xyqb.entity.Merchant;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.entity.WechatUserInfo;
import cn.quantgroup.xyqb.model.AuthBean;
import cn.quantgroup.xyqb.model.JsonResult;
import cn.quantgroup.xyqb.model.LoginProperties;
import cn.quantgroup.xyqb.model.webchat.AccessTokenResponse;
import cn.quantgroup.xyqb.service.merchant.IMerchantService;
import cn.quantgroup.xyqb.service.session.ISessionService;
import cn.quantgroup.xyqb.service.user.IUserService;
import cn.quantgroup.xyqb.service.wechat.IWechatFollowService;
import cn.quantgroup.xyqb.service.wechat.IWechatService;
import cn.quantgroup.xyqb.util.EmojiUtil;
import cn.quantgroup.xyqb.util.TenantUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.google.common.base.Joiner;
import com.google.common.collect.ImmutableList;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.http.HttpStatus;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
......@@ -37,6 +40,7 @@ import java.net.MalformedURLException;
import java.net.URL;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.text.SimpleDateFormat;
import java.util.*;
/**
......@@ -83,6 +87,9 @@ public class WeChatController implements IBaseController {
*/
@Value("${m.https}")
private String xjdDomain;
@Autowired
private IWechatFollowService wechatFollowService;
/**
* 开发者资质认证,有必要吗?
*
......@@ -447,4 +454,51 @@ public class WeChatController implements IBaseController {
}
@RequestMapping("/userIdToUnionId")
public JsonResult userIdToUnionId(@RequestParam Long userId) {
List<WechatUserInfo> wechatUserInfoList = null;
if (userId != null && userId > 0) {
wechatUserInfoList = wechatService.queryListByUserId(userId);
}
return JsonResult.buildSuccessResult("通过用户ID查询的绑定微信相关信息", wechatUserInfoList);
}
@RequestMapping("/unionIdToUserId")
public JsonResult unionIdToUserId(@RequestParam String unionId) {
List<WechatUserInfo> wechatUserInfoList = null;
if (unionId != null && !"".equals(unionId)) {
wechatUserInfoList = wechatService.queryListByUnionId(unionId);
}
return JsonResult.buildSuccessResult("通过unionId查询的绑定微信相关信息", wechatUserInfoList);
}
@PostMapping("/unionIdToUserIds")
public JsonResult unionIdToUserIds(@RequestBody Map<String, Object> params) {
List<WechatUserInfo> wechatUserInfoList = null;
if (MapUtils.isNotEmpty(params)) {
List<String> unionIds = (List<String>) params.get("unionIds");
if (CollectionUtils.isNotEmpty(unionIds)) {
if (unionIds.size() > 500) {
unionIds = unionIds.subList(0,500);
}
wechatUserInfoList = wechatService.queryListByUnionIds(unionIds);
}
}
return JsonResult.buildSuccessResult("通过unionId查询的绑定微信相关信息", wechatUserInfoList);
}
@PostMapping("/getByUnionIdsToUserIds")
public JsonResult getByUnionIdsToUserIds(@RequestBody Map<String, Object> params) {
log.info("根据unionIds获取企业绑定用户信息 {}", params);
List<String> unionIds = (List<String>) params.get("unionIds");
if (unionIds.size() > 500) {
unionIds = unionIds.subList(0,500);
}
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("YYYYMMdd");
String period = simpleDateFormat.format(new Date());
return JsonResult.buildSuccessResultGeneric(wechatFollowService.findByUnionIdsToUserIds(unionIds, period));
}
}
package cn.quantgroup.xyqb.entity;
import lombok.Data;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.io.Serializable;
/**
* Created by 11 on 2017/3/22.
*/
@Data
@Entity
@Table(name = "login_record")
public class LoginRecord extends BaseEntity implements Serializable {
@Column(name = "user_id")
private Long userId;
@Column(name = "type")
private String type;
@Column(name = "qg_tenant_id")
private Long qgTenantId;
@Column(name = "vcc_channel")
private Long vccChannel;
@Column(name = "user_terminal")
private String userTerminal;
@Column(name = "ip")
private String ip;
@Column(name = "app_name")
private String appName;
@Column(name = "version")
private String version;
@Column(name = "user_agent")
private String userAgent;
@Column(name = "device_id")
private String deviceId;
@Column(name = "app_channel")
private String appChannel;
}
......@@ -6,6 +6,7 @@ import org.springframework.beans.BeanUtils;
import javax.persistence.*;
import java.io.Serializable;
import java.sql.Date;
import java.sql.Timestamp;
/**
......@@ -23,14 +24,10 @@ public class WechatInfoRelation extends BaseEntity implements Serializable {
private String openId;
@Column(name = "union_id")
private String unionId;
@Column(name = "is_follow_wechat")
private Integer isFollowWechat;
@Column(name = "is_follow_enterprise_wechat")
private Integer isFollowEnterpriseWechat;
@Column(name = "is_followed_wechat")
private Integer isFollowedWechat;
@Column(name = "is_followed_enterprise_wechat")
private Integer isFollowedEnterpriseWechat;
@Column(name = "type")
private Integer type;
@Column(name = "task_period")
private String taskPeriod;
}
......@@ -45,7 +45,7 @@ public class KinesisRegisteredEventListener implements ApplicationListener<Regis
private void sendRecord(User user) {
// EnvironmentConfig.DEV 环境变量配置
KinesisProducerClient kinesisProducerClient = new KinesisProducerClient(
TechEnvironment.isPro() ? EnvironmentConfig.PROD : EnvironmentConfig.DEV);
TechEnvironment.isPro() ? EnvironmentConfig.PROD : EnvironmentConfig.DEV);
// 用户登录事件发送
// UserBaseDetailEvent regEvent = UserBaseDetailEvent
......
......@@ -16,7 +16,7 @@ import org.springframework.stereotype.Component;
* @author ag
*/
@Slf4j
@Component
//@Component
public class LkbRegisteredEventListener implements ApplicationListener<RegisterEvent> {
@Autowired
......
package cn.quantgroup.xyqb.repository;
import cn.quantgroup.xyqb.entity.LoginRecord;
import cn.quantgroup.xyqb.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
public interface ILoginRecordRepository extends JpaRepository<LoginRecord, Long>, JpaSpecificationExecutor<LoginRecord> {
LoginRecord findFirstByDeviceIdOrderByCreatedAtDesc(String deviceId);
}
......@@ -19,4 +19,6 @@ public interface IWeChatInfoRelationRepository extends JpaRepository<WechatInfoR
@Query(value = "update wechat_info_relation as wir set wir.is_follow_wechat = 1 where wir.open_id IN (?1)", nativeQuery = true)
void updateIsFollowWechatInOpenIdList(List<String> openIdList);
List<WechatInfoRelation> findByUnionIdInAndTaskPeriodAndType(List<String> unionIdList, String period, Integer type);
}
......@@ -7,6 +7,8 @@ import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import static org.springframework.transaction.annotation.Propagation.MANDATORY;
/**
......@@ -90,4 +92,16 @@ public interface IWeChatUserRepository extends JpaRepository<WechatUserInfo, Lon
@Transactional
void deleteByUserId(Long userId);
/**
* 通过userId查询相关绑定微信记录
*/
List<WechatUserInfo> findByUserId(Long userId);
/**
* 通过unionId查询相关绑定微信记录
*/
List<WechatUserInfo> findByUnionId(String unionId);
List<WechatUserInfo> findByUnionIdIn(List<String> unionIds);
}
package cn.quantgroup.xyqb.service.register.impl;
import cn.quantgroup.user.enums.RecordType;
import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.entity.Address;
import cn.quantgroup.xyqb.entity.Contact;
......@@ -10,6 +11,7 @@ import cn.quantgroup.xyqb.exception.UserRegisterLoginException;
import cn.quantgroup.xyqb.model.UserRegisterParam;
import cn.quantgroup.xyqb.service.register.IUserDeregisterService;
import cn.quantgroup.xyqb.service.register.IUserRegisterService;
import cn.quantgroup.xyqb.service.user.ILoginRecordService;
import cn.quantgroup.xyqb.service.user.IUserService;
import cn.quantgroup.xyqb.util.DateUtils;
import cn.quantgroup.xyqb.util.PasswordUtil;
......@@ -40,6 +42,9 @@ public class UserRegisterServiceImpl implements IUserRegisterService {
@Resource
private IUserService userService;
@Resource
private ILoginRecordService loginRecordService;
@Resource
private IUserDeregisterService userDeregisterService;
......@@ -156,6 +161,9 @@ public class UserRegisterServiceImpl implements IUserRegisterService {
user.setPassword(PasswordUtil.MD5WithSalt(password));
}
user = userService.saveUser(user);
// 注册添加日志
loginRecordService.saveLoginRecord(user.getId(), RecordType.REGISTERRECORD.getName());
userRegisterParam.setUser(user);
return user;
}
......@@ -186,7 +194,7 @@ public class UserRegisterServiceImpl implements IUserRegisterService {
@Override
public User register(String phoneNo, Long channelId, Long registerFrom, String appChannel, Long btRegisterChannelId, String dimension) {
// deregisterCheck(phoneNo);
deregisterCheck(phoneNo);
UserRegisterParam userRegisterParam = UserRegisterParam.builder()
.registerFrom(registerFrom)
......
package cn.quantgroup.xyqb.service.session.impl;
import cn.quantgroup.user.enums.RecordType;
import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.model.AuthBean;
......@@ -9,6 +10,7 @@ import cn.quantgroup.xyqb.model.session.SessionStruct;
import cn.quantgroup.xyqb.model.session.SessionValue;
import cn.quantgroup.xyqb.service.session.ISessionService;
import cn.quantgroup.xyqb.service.session.aspect.UserBtRegisterFill;
import cn.quantgroup.xyqb.service.user.ILoginRecordService;
import cn.quantgroup.xyqb.util.MqUtils;
import cn.quantgroup.xyqb.util.TenantUtil;
import com.alibaba.fastjson.JSON;
......@@ -21,8 +23,11 @@ import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.sql.Timestamp;
import java.util.*;
import java.util.concurrent.TimeUnit;
......@@ -38,6 +43,9 @@ public class SessionServiceImpl implements ISessionService {
@Resource
private RedisTemplate<String, String> stringRedisTemplate;
@Resource
private ILoginRecordService loginRecordService;
@Value("${token.prefix}")
private String prefix;
......@@ -74,6 +82,10 @@ public class SessionServiceImpl implements ISessionService {
authBean.setUuid(uuid);
authBean.setHasPassword(user.getHasPassword());
log.info("用户登录成功, loginFrom:{}, phoneNo:{},appChannel:{},channelId:{}", properties.getCreatedFrom(), user.getPhoneNo(), properties.getAppChannel(), properties.getChannelId());
// 添加登陆日志
loginRecordService.saveLoginRecord(user.getId(), RecordType.LOGINRECORD.getName());
return authBean;
}
......
package cn.quantgroup.xyqb.service.user;
import cn.quantgroup.user.enums.RecordType;
import cn.quantgroup.xyqb.controller.internal.user.resp.UserFullResp;
import cn.quantgroup.xyqb.entity.LoginRecord;
import cn.quantgroup.xyqb.entity.Merchant;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.model.JsonResult;
import cn.quantgroup.xyqb.model.LoginProperties;
import cn.quantgroup.xyqb.model.UserInfo;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;
/**
* Created by Miraculous on 15/7/5.
*/
public interface ILoginRecordService {
void saveLoginRecord(Long id, String name);
LoginRecord findFirstLoginRecord(String deviceId);
}
package cn.quantgroup.xyqb.service.user.impl;
import cn.quantgroup.tech.db.DSType;
import cn.quantgroup.tech.db.TargetDataSource;
import cn.quantgroup.user.enums.BizType;
import cn.quantgroup.user.enums.IncomeRangeEnum;
import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.aspect.lock.RedisLock;
import cn.quantgroup.xyqb.controller.IBaseController;
import cn.quantgroup.xyqb.controller.internal.user.resp.UserFullResp;
import cn.quantgroup.xyqb.entity.*;
import cn.quantgroup.xyqb.event.PhoneNoUpdateEvent;
import cn.quantgroup.xyqb.exception.DataException;
import cn.quantgroup.xyqb.exception.UserNotExistException;
import cn.quantgroup.xyqb.exception.UserRegisterLoginException;
import cn.quantgroup.xyqb.model.*;
import cn.quantgroup.xyqb.repository.*;
import cn.quantgroup.xyqb.service.register.IUserDeregisterService;
import cn.quantgroup.xyqb.service.register.IUserRegisterService;
import cn.quantgroup.xyqb.service.session.ISessionService;
import cn.quantgroup.xyqb.service.user.*;
import cn.quantgroup.xyqb.service.wechat.IWechatService;
import cn.quantgroup.xyqb.util.*;
import com.alibaba.fastjson.JSON;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.sensorsdata.analytics.javasdk.ISensorsAnalytics;
import com.sensorsdata.analytics.javasdk.bean.EventRecord;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Caching;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/**
* Created by Miraculous on 15/7/5.
*/
@Service
@Slf4j
public class LoginRecordServiceImpl implements ILoginRecordService, IBaseController {
@Autowired
private ILoginRecordRepository loginRecordRepository;
@Override
public void saveLoginRecord(Long userId, String name) {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
LoginRecord loginRecord = new LoginRecord();
loginRecord.setUserId(userId);
loginRecord.setType(name);
String qgTenantId = request.getHeader("qg-tenant-id");
String vccChannel = request.getHeader("vccChannel");
if (null != qgTenantId && !"".equals(qgTenantId)) {
loginRecord.setQgTenantId(Long.parseLong(qgTenantId));
}
if (null != vccChannel && !"".equals(vccChannel)) {
loginRecord.setVccChannel(Long.parseLong(vccChannel));
}
loginRecord.setUserTerminal(request.getHeader("x-user-terminal"));
loginRecord.setIp(request.getHeader("x-original-client-ip"));
loginRecord.setAppName(request.getHeader("appName"));
loginRecord.setVersion(request.getHeader("version"));
loginRecord.setUserAgent(request.getHeader("User-Agent"));
loginRecord.setDeviceId(request.getHeader("scDeviceId"));
loginRecord.setAppChannel(request.getHeader("appChannel"));
loginRecordRepository.saveAndFlush(loginRecord);
}
@Override
public LoginRecord findFirstLoginRecord(String deviceId) {
return loginRecordRepository.findFirstByDeviceIdOrderByCreatedAtDesc(deviceId);
}
}
......@@ -4,10 +4,14 @@ import cn.quantgroup.xyqb.entity.WechatUserInfo;
import cn.quantgroup.xyqb.model.JsonResult;
import cn.quantgroup.xyqb.model.webchat.AccessTokenResponse;
import java.util.List;
public interface IWechatFollowService {
AccessTokenResponse getToken();
JsonResult executeWechatFollowStatus(String nextOpenId, String period);
void executeTask();
Object findByUnionIdsToUserIds(List<String> unionIds, String period);
}
......@@ -3,6 +3,8 @@ package cn.quantgroup.xyqb.service.wechat;
import cn.quantgroup.xyqb.entity.WechatUserInfo;
import cn.quantgroup.xyqb.model.webchat.AccessTokenResponse;
import java.util.List;
/**
* Created by Miraculous on 2017/1/19.
*/
......@@ -47,4 +49,10 @@ public interface IWechatService {
* @return 禁用结果
*/
int forbiddenXyqbAndWuxiUserByUserId(Long userId);
List<WechatUserInfo> queryListByUserId(Long userId);
List<WechatUserInfo> queryListByUnionId(String unionId);
List<WechatUserInfo> queryListByUnionIds(List<String> unionIds);
}
......@@ -68,6 +68,8 @@ public class WechatFollowServiceImpl implements IWechatFollowService {
private String customerInfoListBatchUrl;
// 消息中心
private String msgEnterpriseToken;
@Resource
......@@ -80,6 +82,9 @@ public class WechatFollowServiceImpl implements IWechatFollowService {
@Qualifier("stringRedisTemplate")
private RedisTemplate<String, String> redisTemplate;
@Value("${mo-msg.http}")
private String msgCenter;
@Resource
private ApplicationEventPublisher applicationEventPublisher;
......@@ -110,6 +115,9 @@ public class WechatFollowServiceImpl implements IWechatFollowService {
//批量获取客户详情
customerInfoListBatchUrl = "https://qyapi.weixin.qq.com/cgi-bin/externalcontact/batch/get_by_user?access_token=%s";
// 消息中心获取企业微信Token
msgEnterpriseToken = String.format("%s/middle_office/token/enterprise?corpId=%s", msgCenter, corpid);
}
@Override
......@@ -181,17 +189,24 @@ public class WechatFollowServiceImpl implements IWechatFollowService {
executeEnterpriseFollowStatus("", period);
}
@Override
public Object findByUnionIdsToUserIds(List<String> unionIds, String period) {
return weChatInfoRelationRepository.findByUnionIdInAndTaskPeriodAndType(unionIds, period, ENTERPRISE_WECHAT);
}
private JsonResult executeEnterpriseFollowStatus(String s, String period) {
try {
String response = httpService.get(qyAccessTokenUrl);
// String response = httpService.get(qyAccessTokenUrl);
String response = httpService.get(msgEnterpriseToken);
if (StringUtils.isEmpty(response)) {
log.info("请求消息中心企业微信Token为空---{}", response);
return null;
}
AccessTokenResponse accessTokenResponse = JSONObject.parseObject(response,
AccessTokenResponse.class);
if (accessTokenResponse.getAccessToken() != null) {
String deparmentList = String.format(departmentUserListUrl, accessTokenResponse.getAccessToken(), departmentId);
Map<String, Object> tokenReponseMap = JSONObject.parseObject(response, Map.class);
String token = tokenReponseMap.get("data").toString();
if (token != null && !"".equals(token)) {
String deparmentList = String.format(departmentUserListUrl, token, departmentId);
String departmentRep = httpService.get(deparmentList);
DepartmentListResponse departmentListResponse = JSONObject.parseObject(departmentRep, DepartmentListResponse.class);
if (!departmentListResponse.getUserlist().isEmpty()) {
......@@ -199,7 +214,7 @@ public class WechatFollowServiceImpl implements IWechatFollowService {
System.out.println(userIdList);
if (!userIdList.isEmpty()) {
// 批量查询客户详情
batchQueryCustomerDetailInfo2(accessTokenResponse.getAccessToken(), userIdList, "", period);
batchQueryCustomerDetailInfo2(token, userIdList, "", period);
}
}
}
......
......@@ -24,6 +24,7 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.concurrent.TimeUnit;
......@@ -255,4 +256,19 @@ public class WechatServiceImpl implements IWechatService {
public int forbiddenXyqbAndWuxiUserByUserId(Long userId) {
return weChatUserRepository.forbiddenXyqbAndWuxiUserByUserId(userId);
}
@Override
public List<WechatUserInfo> queryListByUserId(Long userId) {
return weChatUserRepository.findByUserId(userId);
}
@Override
public List<WechatUserInfo> queryListByUnionId(String unionId) {
return weChatUserRepository.findByUnionId(unionId);
}
@Override
public List<WechatUserInfo> queryListByUnionIds(List<String> unionIds) {
return weChatUserRepository.findByUnionIdIn(unionIds);
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment