diff --git a/src/main/java/com/kiisoo/ic/config/AuthorizationRealm.java b/src/main/java/com/kiisoo/ic/config/AuthorizationRealm.java index d3aea97..a739e44 100644 --- a/src/main/java/com/kiisoo/ic/config/AuthorizationRealm.java +++ b/src/main/java/com/kiisoo/ic/config/AuthorizationRealm.java @@ -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 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; } diff --git a/src/main/java/com/kiisoo/ic/config/ShiroConfig.java b/src/main/java/com/kiisoo/ic/config/ShiroConfig.java index d6e5b57..cf61270 100644 --- a/src/main/java/com/kiisoo/ic/config/ShiroConfig.java +++ b/src/main/java/com/kiisoo/ic/config/ShiroConfig.java @@ -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"); // 过滤链定义,从上向下顺序执行,一般将/**放在最为下边 -->:这是一个坑呢,一不小心代码就不好使了 diff --git a/src/main/java/com/kiisoo/ic/employee/service/EmployeeService.java b/src/main/java/com/kiisoo/ic/employee/service/EmployeeService.java index dfaad73..966f54e 100644 --- a/src/main/java/com/kiisoo/ic/employee/service/EmployeeService.java +++ b/src/main/java/com/kiisoo/ic/employee/service/EmployeeService.java @@ -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 cuUserIdParams = new QueryWrapper<>(); + cuUserIdParams.eq(DATABASE_CP_USER_ID_KEY, wxCpUser.getUserId()); + List 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 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 wxCpUsers = qwMailListManageService.syncUser(); if (CollectionUtils.isNotEmpty(wxCpUsers)) { wxCpUsers.forEach(wxCpUser -> { - QueryWrapper cuUserIdParams = new QueryWrapper<>(); - cuUserIdParams.eq(DATABASE_CP_USER_ID_KEY, wxCpUser.getUserId()); - List 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 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("*"); diff --git a/src/main/java/com/kiisoo/ic/login/controller/LoginController.java b/src/main/java/com/kiisoo/ic/login/controller/LoginController.java index 737a147..cfe1751 100644 --- a/src/main/java/com/kiisoo/ic/login/controller/LoginController.java +++ b/src/main/java/com/kiisoo/ic/login/controller/LoginController.java @@ -104,7 +104,7 @@ public class LoginController extends BaseController { Map 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 loginAccountBind(@RequestParam("login")String login, @RequestParam("password")String password, - @RequestParam("qywxUserId")String qywxUserId){ + @RequestParam("cpUserId")String qywxUserId){ try{ Map resultMap = new HashMap<>(); LoginBean loginBean = loginService.miniLogin(login, password,false); diff --git a/src/main/java/com/kiisoo/ic/login/service/impl/LoginServiceImpl.java b/src/main/java/com/kiisoo/ic/login/service/impl/LoginServiceImpl.java index a86560c..5ec2167 100644 --- a/src/main/java/com/kiisoo/ic/login/service/impl/LoginServiceImpl.java +++ b/src/main/java/com/kiisoo/ic/login/service/impl/LoginServiceImpl.java @@ -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 selectAccountMap = new HashMap<>(); + selectAccountMap.put("login", login); + selectAccountMap.put("type", AccountEnum.ACCOUNT_TYPE_SYSTEM.getType()); + List privilageAccountDOS = privilageAccountDOMapper.selectByMap(selectAccountMap); Map 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); diff --git a/src/main/java/com/kiisoo/ic/store/controller/StoreEmployeeController.java b/src/main/java/com/kiisoo/ic/store/controller/StoreEmployeeController.java index 3d9c644..660c009 100644 --- a/src/main/java/com/kiisoo/ic/store/controller/StoreEmployeeController.java +++ b/src/main/java/com/kiisoo/ic/store/controller/StoreEmployeeController.java @@ -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 downloadCode(@RequestParam("storeId")Long storeId, @RequestParam("regionId")Long regionId) { -// try { -// List 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); + } + } } diff --git a/src/main/java/com/kiisoo/ic/store/service/StoreEmployeeService.java b/src/main/java/com/kiisoo/ic/store/service/StoreEmployeeService.java index 9503ef1..2215cf9 100644 --- a/src/main/java/com/kiisoo/ic/store/service/StoreEmployeeService.java +++ b/src/main/java/com/kiisoo/ic/store/service/StoreEmployeeService.java @@ -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 result = new HashMap<>(); - List poiStores = null; - if (storeId != null){ - QueryWrapper storeParams = new QueryWrapper<>(); - poiStores = poiStoreDOMapper.selectList(storeParams); - }else if(regionId != null){ - poiStores = poiStoreDOMapper.selectRegionShop(regionId); - }else{ - poiStores = poiStoreDOMapper.selectList(null); - } - List storeUserDTOS = new ArrayList<>(); - if (CollectionUtils.isNotEmpty(poiStores)){ - for(PoiStore store : poiStores) { - StoreUserDTO storeUserDTO = new StoreUserDTO(); - BeanUtils.copyProperties(store,storeUserDTO); - //查询店铺绑定的企业微信 - QueryWrapper 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 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 poiStores = poiStoreDOMapper.selectShopByCompany(privilageOrganizational.getId()); + if (CollectionUtils.isNotEmpty(poiStores)){ + for (PoiStore poiStore:poiStores){ +// poiStoreDOMapper. + } + } + + } } } diff --git a/src/main/java/com/kiisoo/ic/wx/service/QWMailListManageService.java b/src/main/java/com/kiisoo/ic/wx/service/QWMailListManageService.java index 95b66ff..8e1c878 100644 --- a/src/main/java/com/kiisoo/ic/wx/service/QWMailListManageService.java +++ b/src/main/java/com/kiisoo/ic/wx/service/QWMailListManageService.java @@ -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(); } + }