小程序登录

master
yechenhao 6 years ago
parent 25eb714754
commit 98c9f499c8

@ -13,6 +13,7 @@ import org.apache.shiro.subject.PrincipalCollection;
import org.apache.shiro.subject.SimplePrincipalCollection;
import javax.annotation.Resource;
import java.util.List;
/**
* Shiro
@ -44,28 +45,18 @@ public class AuthorizationRealm extends AuthorizingRealm {
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authcToken)
throws AuthenticationException {
UsernamePasswordToken token = (UsernamePasswordToken) authcToken;
// 获取用户的输入的账号.
String account = (String)token.getPrincipal();
// encrypt
token.setPassword(MD5FileUtil.getMD5String(new String(token.getPassword())).toCharArray());
// 通过username从数据库中查找 User对象如果找到没找到.
// 实际项目中这里可以根据实际情况做缓存如果不做Shiro自己也是有时间间隔机制2分钟内不会重复执行该方法
UsernamePasswordToken token = (UsernamePasswordToken) authcToken;
QueryWrapper<PrivilageAccountDO> wrapper = new QueryWrapper<>();
wrapper.eq("login",account).last("limit 1");
wrapper.eq("login",token.getUsername()).last("limit 1");
PrivilageAccountDO userInfo = privilageAccountDOMapper.selectOne(wrapper);
if(userInfo == null){
throw new UnknownAccountException("用户不存在");
throw new UnknownAccountException("用户不存在");
}
if (Constants.ACCOUNT_STATUS_UNABLE != userInfo.getStatus()) {
throw new LockedAccountException("无效账号");
}
SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(userInfo, userInfo.getPassword(), getName());
SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(userInfo.getLogin(), userInfo.getPassword(), "");
return info;
}

@ -55,6 +55,8 @@ public class ShiroConfig {
filterChainDefinitionMap.put("/mini/login", "anon");
filterChainDefinitionMap.put("/login/bind", "anon");
filterChainDefinitionMap.put("/user/qrCode", "anon");
filterChainDefinitionMap.put("/user/sync", "anon");
filterChainDefinitionMap.put("/department/sync", "anon");
// 配置退出 过滤器,其中的具体的退出代码Shiro已经替我们实现了
filterChainDefinitionMap.put("/logout", "logout");
// 过滤链定义,从上向下顺序执行,一般将/**放在最为下边 -->:这是一个坑呢,一不小心代码就不好使了

@ -36,6 +36,7 @@ import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
import static com.kiisoo.ic.employee.constant.Constants.*;
import static java.util.regex.Pattern.*;
/**
* @Description: service
@ -120,6 +121,11 @@ public class EmployeeService {
privilageCpUserStoreDOMapper.insert(cpUserStoreDO);
//成功则添加用户到企业微信
qwMailListManageService.addUser(employee);
//从企业微信通讯录反向更新(更新二维码信息)
WxCpUser wxCpUser = qwMailListManageService.getUser(employee.getUserId());
insertOrupdateUserFromNet(wxCpUser);
return ADD_CP_CODE_SUCCESS;
} else {
Long cpUserId = cuUserIdUser.get(0).getId();
@ -139,6 +145,46 @@ public class EmployeeService {
}
}
/**
*
* @param wxCpUser
* @throws Exception
*/
@Transactional(rollbackFor = Exception.class)
public void insertOrupdateUserFromNet(WxCpUser wxCpUser) throws Exception {
QueryWrapper<PrivilageCpUserDO> cuUserIdParams = new QueryWrapper<>();
cuUserIdParams.eq(DATABASE_CP_USER_ID_KEY, wxCpUser.getUserId());
List<PrivilageCpUserDO> cuUserIdUser = privilageCpUserDOMapper.selectList(cuUserIdParams);
PrivilageCpUserDO privilageCpUserDO = new PrivilageCpUserDO();
BeanUtils.copyProperties(wxCpUser, privilageCpUserDO);
privilageCpUserDO.setCpUserId(wxCpUser.getUserId());
String alias = privilageCpUserDO.getAlias();
alias = filterEmoji(alias);
privilageCpUserDO.setAlias(alias);
if (CollectionUtils.isEmpty(cuUserIdUser)) {
//添加用户
int insert = privilageCpUserDOMapper.insert(privilageCpUserDO);
} else {
privilageCpUserDO.setId(cuUserIdUser.get(0).getId());
//修改用户
int update = privilageCpUserDOMapper.updateById(privilageCpUserDO);
//维护部门关系——删除原有部门关系
QueryWrapper<PrivilageCpUserDepartmentDO> queryWrapper = new QueryWrapper<>();
queryWrapper.eq(DATABASE_CP_USER_ID_KEY, cuUserIdUser.get(0).getId());
privilageCpUserDepartmentDOMapper.delete(queryWrapper);
}
Long[] departIds = wxCpUser.getDepartIds();
Integer[] orders = wxCpUser.getOrders();
Integer[] isLeaderInDept = wxCpUser.getIsLeaderInDept();
for (int i = 0; i < departIds.length; i++) {
PrivilageCpUserDepartmentDO relation = new PrivilageCpUserDepartmentDO(privilageCpUserDO.getId(), departIds[i], orders[i], isLeaderInDept[i]);
privilageCpUserDepartmentDOMapper.insert(relation);
}
}
/**
*
*
@ -150,45 +196,18 @@ public class EmployeeService {
List<WxCpUser> wxCpUsers = qwMailListManageService.syncUser();
if (CollectionUtils.isNotEmpty(wxCpUsers)) {
wxCpUsers.forEach(wxCpUser -> {
QueryWrapper<PrivilageCpUserDO> cuUserIdParams = new QueryWrapper<>();
cuUserIdParams.eq(DATABASE_CP_USER_ID_KEY, wxCpUser.getUserId());
List<PrivilageCpUserDO> cuUserIdUser = privilageCpUserDOMapper.selectList(cuUserIdParams);
PrivilageCpUserDO privilageCpUserDO = new PrivilageCpUserDO();
BeanUtils.copyProperties(wxCpUser, privilageCpUserDO);
privilageCpUserDO.setCpUserId(wxCpUser.getUserId());
String alias = privilageCpUserDO.getAlias();
alias = filterEmoji(alias);
privilageCpUserDO.setAlias(alias);
if (CollectionUtils.isEmpty(cuUserIdUser)) {
//添加用户
int insert = privilageCpUserDOMapper.insert(privilageCpUserDO);
} else {
privilageCpUserDO.setId(cuUserIdUser.get(0).getId());
//修改用户
int update = privilageCpUserDOMapper.updateById(privilageCpUserDO);
//维护部门关系——删除原有部门关系
QueryWrapper<PrivilageCpUserDepartmentDO> queryWrapper = new QueryWrapper<>();
queryWrapper.eq(DATABASE_CP_USER_ID_KEY, cuUserIdUser.get(0).getId());
privilageCpUserDepartmentDOMapper.delete(queryWrapper);
try {
insertOrupdateUserFromNet(wxCpUser);
} catch (Exception e) {
e.printStackTrace();
}
Long[] departIds = wxCpUser.getDepartIds();
Integer[] orders = wxCpUser.getOrders();
Integer[] isLeaderInDept = wxCpUser.getIsLeaderInDept();
for (int i = 0; i < departIds.length; i++) {
PrivilageCpUserDepartmentDO relation = new PrivilageCpUserDepartmentDO(privilageCpUserDO.getId(), departIds[i], orders[i], isLeaderInDept[i]);
privilageCpUserDepartmentDOMapper.insert(relation);
}
});
}
}
public static String filterEmoji(String source) {
if (source != null) {
Pattern emoji = Pattern.compile("[\ud83c\udc00-\ud83c\udfff]|[\ud83d\udc00-\ud83d\udfff]|[\u2600-\u27ff]", Pattern.UNICODE_CASE | Pattern.CASE_INSENSITIVE);
Pattern emoji = compile("[\ud83c\udc00-\ud83c\udfff]|[\ud83d\udc00-\ud83d\udfff]|[\u2600-\u27ff]", UNICODE_CASE | CASE_INSENSITIVE);
Matcher emojiMatcher = emoji.matcher(source);
if (emojiMatcher.find()) {
source = emojiMatcher.replaceAll("*");

@ -104,7 +104,7 @@ public class LoginController extends BaseController {
Map<String, String> accountInfo = loginService.qyMiniAutoLogin(code);
if (accountInfo!=null){
if (StringUtils.isNotBlank(accountInfo.get("login")) && StringUtils.isNotBlank(accountInfo.get("password"))){
LoginBean loginBean = loginService.login(accountInfo.get("login"), accountInfo.get("login"), true);
LoginBean loginBean = loginService.miniLogin(accountInfo.get("login"), accountInfo.get("password"), false);
resultMap.put("code", loginBean.getLoginInfo().get("code"));
resultMap.put("results", loginBean);
}else{
@ -134,7 +134,7 @@ public class LoginController extends BaseController {
@RequestMapping(value = "/login/bind",method = RequestMethod.GET)
@ResponseBody
public Map<String, Object> loginAccountBind(@RequestParam("login")String login, @RequestParam("password")String password,
@RequestParam("qywxUserId")String qywxUserId){
@RequestParam("cpUserId")String qywxUserId){
try{
Map<String, Object> resultMap = new HashMap<>();
LoginBean loginBean = loginService.miniLogin(login, password,false);

@ -1,5 +1,6 @@
package com.kiisoo.ic.login.service.impl;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.kiisoo.ic.common.utils.MD5FileUtil;
import com.kiisoo.ic.constants.Constants;
@ -124,15 +125,18 @@ public class LoginServiceImpl implements LoginService {
LoginBean loginBean = new LoginBean();
if (subject.isAuthenticated()) {
PrivilageAccountDO privilageAccountDO = (PrivilageAccountDO) SecurityUtils.getSubject().getPrincipal();
Map<String, Object> selectAccountMap = new HashMap<>();
selectAccountMap.put("login", login);
selectAccountMap.put("type", AccountEnum.ACCOUNT_TYPE_SYSTEM.getType());
List<PrivilageAccountDO> privilageAccountDOS = privilageAccountDOMapper.selectByMap(selectAccountMap);
Map<String, Object> loginInfoMap = new HashMap<>();
PrivilageUserDO privilageUserDO = privilageUserDOMapper.selectById(privilageAccountDO.getUserId());
PrivilageRoleDO roleDO = privilageRoleDOMapper.selectRoleName(privilageAccountDO.getUserId());
PrivilageUserDO privilageUserDO = privilageUserDOMapper.selectById(privilageAccountDOS.get(0).getUserId());
PrivilageRoleDO roleDO = privilageRoleDOMapper.selectRoleName(privilageAccountDOS.get(0).getUserId());
//成功设置信息
loginBean.setUserName(privilageUserDO.getName());
loginBean.setUserId(privilageAccountDO.getUserId());
loginBean.setRoleId(privilageAccountDO.getId());
loginBean.setUserId(privilageUserDO.getId());
loginBean.setRoleId(privilageUserDO.getId());
loginBean.setRoleCode(roleDO.getCode());
if (StringUtils.isNotBlank(roleDO.getCode()) && !MINI_ROLE_CODE.contains(roleDO.getCode())){
return new LoginBean(Constants.ERROR_ROLE_NO_PERMISSION);

@ -14,6 +14,7 @@ import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
@ -65,18 +66,16 @@ public class StoreEmployeeController extends BaseController {
}
/**
*
* @return
*
* @param response
*/
// @RequestMapping(value = "downloadCode",method = RequestMethod.POST)
// @ResponseBody
// public Map<String,Object> downloadCode(@RequestParam("storeId")Long storeId, @RequestParam("regionId")Long regionId) {
// try {
// List<ImportErrorDTO> importErrorDTOS = storeEmployeeService.downloadStoreUserCode(storeId,regionId);
// return data(importErrorDTOS);
// } catch (Exception e) {
// log.error("添加用户失败", e);
// return fail();
// }
// }
@RequestMapping(value = "download/store/code",method = RequestMethod.POST)
@ResponseBody
public void downloadCode(HttpServletResponse response) {
try {
storeEmployeeService.downloadStoreUserCode(response);
} catch (Exception e) {
log.error("批量下载店铺二维码失败", e);
}
}
}

@ -15,7 +15,9 @@ import com.kiisoo.ic.employee.entity.ImportErrorDTO;
import com.kiisoo.ic.employee.entity.PrivilageCpUserDO;
import com.kiisoo.ic.employee.mapper.PrivilageCpUserDOMapper;
import com.kiisoo.ic.employee.service.EmployeeService;
import com.kiisoo.ic.generalize.entity.PrivilageOrganizational;
import com.kiisoo.ic.generalize.entity.PrivilageOrganizationalMember;
import com.kiisoo.ic.generalize.mapper.RetailCompanyMapper;
import com.kiisoo.ic.store.bean.PoiStoreStaffDTO;
import com.kiisoo.ic.store.entity.PoiStore;
import com.kiisoo.ic.store.entity.PrivilageCpUserStoreDO;
@ -35,10 +37,11 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.io.InputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.*;
import java.util.stream.Collectors;
import java.util.zip.ZipOutputStream;
import static com.kiisoo.ic.employee.constant.Constants.ADD_CP_CODE_BINDED;
import static com.kiisoo.ic.store.constant.Constants.*;
@ -74,6 +77,9 @@ public class StoreEmployeeService {
private PrivilageDomainService privilageDomainService;
@Autowired
private OpSellerCustomerRelationDOMapper opSellerCustomerRelationDOMapper;
@Autowired
private RetailCompanyMapper retailCompanyMapper;
/**
*
* @param storeId id
@ -131,42 +137,39 @@ public class StoreEmployeeService {
/**
*
* @param storeId id
* @param regionId id
*
* @param response
*/
public void downloadStoreUserCode(Long storeId, Long regionId) {
public void downloadStoreUserCode(HttpServletResponse response) throws IOException {
Map<String,Object> result = new HashMap<>();
List<PoiStore> poiStores = null;
if (storeId != null){
QueryWrapper<PoiStore> storeParams = new QueryWrapper<>();
poiStores = poiStoreDOMapper.selectList(storeParams);
}else if(regionId != null){
poiStores = poiStoreDOMapper.selectRegionShop(regionId);
}else{
poiStores = poiStoreDOMapper.selectList(null);
}
List<StoreUserDTO> storeUserDTOS = new ArrayList<>();
if (CollectionUtils.isNotEmpty(poiStores)){
for(PoiStore store : poiStores) {
StoreUserDTO storeUserDTO = new StoreUserDTO();
BeanUtils.copyProperties(store,storeUserDTO);
//查询店铺绑定的企业微信
QueryWrapper<PrivilageCpUserStoreDO> relationParams = new QueryWrapper<>();
relationParams.eq(DATABASE_STORE_ID_KEY,storeUserDTO.getId());
PrivilageCpUserStoreDO cpUserStoreDO = privilageCpUserStoreDOMapper.selectOne(relationParams);
if (cpUserStoreDO != null){
//企业微信存在则查询数据
PrivilageCpUserDO privilageCpUserDO = privilageCpUserDOMapper.selectById(cpUserStoreDO.getCpUserId());
storeUserDTO.setCpUserId(privilageCpUserDO.getCpUserId());
storeUserDTOS.add(storeUserDTO);
List<PrivilageOrganizational> privilageOrganizationals = retailCompanyMapper.selectList(null);
if (CollectionUtils.isNotEmpty(privilageOrganizationals)){
byte[] buffer = new byte[1024];
// 生成的ZIP文件名为Demo.zip
String strZipName = "store_qrCode.zip";
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(strZipName));
for (PrivilageOrganizational privilageOrganizational:privilageOrganizationals) {
if (privilageOrganizational == null || privilageOrganizational.getId() == null){
continue;
}
}
}
if (CollectionUtils.isNotEmpty(storeUserDTOS)){
storeUserDTOS.forEach(storeUser -> {
String fileUrl = UUID.randomUUID().toString().replace("-", "");
});
File file = new File(fileUrl);
file.mkdir();
File complayFile = new File(file.getPath()+"/"+privilageOrganizational.getName());
complayFile.mkdir();
List<PoiStore> poiStores = poiStoreDOMapper.selectShopByCompany(privilageOrganizational.getId());
if (CollectionUtils.isNotEmpty(poiStores)){
for (PoiStore poiStore:poiStores){
// poiStoreDOMapper.
}
}
}
}
}

@ -45,6 +45,13 @@ public class QWMailListManageService {
BeanUtils.copyProperties(employeeDO,wxCpUser);
userService.create(wxCpUser);
}
public WxCpUser getUser(String cpUserId) throws WxErrorException {
wxCpService = WxCpConfiguration.getCpService(applicationid);
WxCpUserService userService = wxCpService.getUserService();
WxCpUser wx = userService.getById(cpUserId);
return wx;
}
/**
*
*/
@ -239,4 +246,5 @@ public class QWMailListManageService {
WxCpMaJsCode2SessionResult wxCpMaJsCode2SessionResult = wxCpService.jsCode2Session(code);
return wxCpMaJsCode2SessionResult.getUserId();
}
}

Loading…
Cancel
Save