diff --git a/src/main/java/com/kiisoo/ic/config/ShiroConfig.java b/src/main/java/com/kiisoo/ic/config/ShiroConfig.java index 1478484..d6e5b57 100644 --- a/src/main/java/com/kiisoo/ic/config/ShiroConfig.java +++ b/src/main/java/com/kiisoo/ic/config/ShiroConfig.java @@ -51,6 +51,10 @@ public class ShiroConfig { filterChainDefinitionMap.put("/view/**", "anon"); filterChainDefinitionMap.put("/templates/**", "anon"); filterChainDefinitionMap.put("/login", "anon"); + filterChainDefinitionMap.put("/qy/mini/login", "anon"); + filterChainDefinitionMap.put("/mini/login", "anon"); + filterChainDefinitionMap.put("/login/bind", "anon"); + filterChainDefinitionMap.put("/user/qrCode", "anon"); // 配置退出 过滤器,其中的具体的退出代码Shiro已经替我们实现了 filterChainDefinitionMap.put("/logout", "logout"); // 过滤链定义,从上向下顺序执行,一般将/**放在最为下边 -->:这是一个坑呢,一不小心代码就不好使了 diff --git a/src/main/java/com/kiisoo/ic/constants/Constants.java b/src/main/java/com/kiisoo/ic/constants/Constants.java index 0a7570c..8dea57f 100644 --- a/src/main/java/com/kiisoo/ic/constants/Constants.java +++ b/src/main/java/com/kiisoo/ic/constants/Constants.java @@ -1,6 +1,8 @@ package com.kiisoo.ic.constants; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; /** @@ -36,6 +38,20 @@ public class Constants { public static final String ERROR_MSG_ACCOUNT_NOT_EXIST = "该账号不存在"; + /** + * 该账号不存在 + */ + public static final String ERROR_ACCOUNT_NOT_BIND = "0005"; + + public static final String ERROR_MSG_ACCOUNT_NOT_BIND = "该账号未绑定"; + + /** + * 该账号不存在 + */ + public static final String ERROR_ROLE_NO_PERMISSION = "0006"; + + public static final String ERROR_MSG_ROLE_NO_PERMISSION = "该角色没有登录权限"; + /** * 系统异常 */ @@ -59,4 +75,12 @@ public class Constants { } }; + /** 数字对应周 */ + public static final List MINI_ROLE_CODE = new ArrayList() { + private static final long serialVersionUID = 1L; + { + add("DZ-DIANZHANG"); + add("DG-DAOGOU"); + } + }; } diff --git a/src/main/java/com/kiisoo/ic/employee/entity/PrivilageCpUserDO.java b/src/main/java/com/kiisoo/ic/employee/entity/PrivilageCpUserDO.java index cdd081c..8e9e02b 100644 --- a/src/main/java/com/kiisoo/ic/employee/entity/PrivilageCpUserDO.java +++ b/src/main/java/com/kiisoo/ic/employee/entity/PrivilageCpUserDO.java @@ -51,6 +51,10 @@ public class PrivilageCpUserDO { * 手机号(唯一) */ private String mobile; + /** + * 二维码 + */ + private String qrCode; /** * 成员状态 */ 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 5aa3c17..737a147 100644 --- a/src/main/java/com/kiisoo/ic/login/controller/LoginController.java +++ b/src/main/java/com/kiisoo/ic/login/controller/LoginController.java @@ -4,7 +4,9 @@ import com.kiisoo.ic.common.BaseController; import com.kiisoo.ic.login.bean.LoginBean; import com.kiisoo.ic.login.enums.LoginEnum; import com.kiisoo.ic.login.service.LoginService; +import com.kiisoo.ic.wx.service.QWMailListManageService; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.apache.shiro.SecurityUtils; import org.apache.shiro.subject.Subject; import org.springframework.beans.factory.annotation.Autowired; @@ -18,6 +20,8 @@ import javax.servlet.http.HttpSession; import java.util.HashMap; import java.util.Map; +import static com.kiisoo.ic.constants.Constants.ERROR_ACCOUNT_NOT_BIND; + /** * @Description: 用户登入 * @Author: wangyinjia @@ -63,6 +67,63 @@ public class LoginController extends BaseController { } } + /** + * 小程序登录账号 + * @param login 用户名 + * @param password 密码 + * @return 成功/失败 + */ + @RequestMapping(value = "/mini/login",method = RequestMethod.GET) + @ResponseBody + public Map miniLoginAccount(@RequestParam(value = "login")String login, + @RequestParam(value = "password")String password, + @RequestParam(value = "isMD5",required = false,defaultValue = "false")Boolean isMD5){ + try{ + Map resultMap = new HashMap<>(); + LoginBean loginBean = loginService.miniLogin(login, password,isMD5); + resultMap.put("code", loginBean.getLoginInfo().get("code")); + resultMap.put("results", loginBean); + resultMap.put("success", Boolean.TRUE); + return resultMap; + }catch (Exception e){ + log.error("登录失败", e); + return fail(); + } + } + + /** + * 登录账号 + * @param code + * @return 成功/失败 + */ + @RequestMapping(value = "/qy/mini/login",method = RequestMethod.GET) + @ResponseBody + public Map qyMiniAutoLogin(@RequestParam(value = "code")String code){ + try{ + Map resultMap = new HashMap<>(); + 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); + resultMap.put("code", loginBean.getLoginInfo().get("code")); + resultMap.put("results", loginBean); + }else{ + if (StringUtils.isNotBlank(accountInfo.get("cpUserId"))){ + String cpUserId = accountInfo.get("cpUserId"); + resultMap.put("code", ERROR_ACCOUNT_NOT_BIND); + resultMap.put("results", cpUserId); + } + } + } + + resultMap.put("success", Boolean.TRUE); + return resultMap; + }catch (Exception e){ + log.error("登录失败", e); + return fail(); + } + } + /** * 登录账号 * @param login 用户名 @@ -76,7 +137,7 @@ public class LoginController extends BaseController { @RequestParam("qywxUserId")String qywxUserId){ try{ Map resultMap = new HashMap<>(); - LoginBean loginBean = loginService.login(login, password,false); + LoginBean loginBean = loginService.miniLogin(login, password,false); resultMap.put("code", loginBean.getLoginInfo().get("code")); if (LoginEnum.LOGIN_SUCCEED.getCode().equals(loginBean.getLoginInfo().get("code"))){ loginService.bindQywxUserIdByUserId(loginBean.getUserId(),qywxUserId); diff --git a/src/main/java/com/kiisoo/ic/login/enums/LoginEnum.java b/src/main/java/com/kiisoo/ic/login/enums/LoginEnum.java index e574a6a..44b9452 100644 --- a/src/main/java/com/kiisoo/ic/login/enums/LoginEnum.java +++ b/src/main/java/com/kiisoo/ic/login/enums/LoginEnum.java @@ -22,6 +22,8 @@ public enum LoginEnum { LOGIN_ROLE_NONENTITY("角色不存在", "0004"), LOGIN_USER_NONENTITY("用户不存在", "0005"), + + LOGIN_ROLE_NO_PERMISSION("该角色不能登录", "0006"), ; /** diff --git a/src/main/java/com/kiisoo/ic/login/service/LoginService.java b/src/main/java/com/kiisoo/ic/login/service/LoginService.java index d8b43b1..98dfd7b 100644 --- a/src/main/java/com/kiisoo/ic/login/service/LoginService.java +++ b/src/main/java/com/kiisoo/ic/login/service/LoginService.java @@ -1,6 +1,7 @@ package com.kiisoo.ic.login.service; import com.kiisoo.ic.login.bean.LoginBean; +import me.chanjar.weixin.common.error.WxErrorException; import java.util.Map; @@ -20,6 +21,14 @@ public interface LoginService { * @return 登录bean */ LoginBean login(String login, String password, Boolean isMD5); + /** + * 登录标识 + * @param login 登录账号 + * @param password 密码 + * @param isMD5 密码是否MD5 + * @return 登录bean + */ + LoginBean miniLogin(String login, String password, Boolean isMD5); /** * 绑定企业微信id(账户)到userId @@ -34,4 +43,11 @@ public interface LoginService { * @return 返回信息 */ Map getLoginInfoByQywxUserId(String qywxUserId); + + /** + * 根据code自动登录 + * @param code + * @return + */ + Map qyMiniAutoLogin(String code) throws WxErrorException; } 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 96687db..a86560c 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 @@ -13,7 +13,10 @@ import com.kiisoo.ic.system.enums.AccountEnum; import com.kiisoo.ic.system.mapper.PrivilageAccountDOMapper; import com.kiisoo.ic.system.mapper.PrivilageRoleDOMapper; import com.kiisoo.ic.system.mapper.PrivilageUserDOMapper; +import com.kiisoo.ic.wx.service.QWMailListManageService; import lombok.extern.slf4j.Slf4j; +import me.chanjar.weixin.common.error.WxErrorException; +import org.apache.commons.lang3.StringUtils; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authc.*; import org.apache.shiro.subject.Subject; @@ -25,6 +28,8 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import static com.kiisoo.ic.constants.Constants.MINI_ROLE_CODE; + /** * @author jinchaofan * @Date 2020/2/25 12:57 @@ -50,11 +55,17 @@ public class LoginServiceImpl implements LoginService { */ private final PrivilageRoleDOMapper privilageRoleDOMapper; + /** + * 企业微信service + */ + private final QWMailListManageService qwMailListManageService; + @Autowired - public LoginServiceImpl(PrivilageAccountDOMapper privilageAccountDOMapper, PrivilageUserDOMapper privilageUserDOMapper, PrivilageRoleDOMapper privilageRoleDOMapper) { + public LoginServiceImpl(PrivilageAccountDOMapper privilageAccountDOMapper, PrivilageUserDOMapper privilageUserDOMapper, PrivilageRoleDOMapper privilageRoleDOMapper, QWMailListManageService qwMailListManageService) { this.privilageAccountDOMapper = privilageAccountDOMapper; this.privilageUserDOMapper = privilageUserDOMapper; this.privilageRoleDOMapper = privilageRoleDOMapper; + this.qwMailListManageService = qwMailListManageService; } @@ -95,6 +106,46 @@ public class LoginServiceImpl implements LoginService { return loginBean; } + @Override + public LoginBean miniLogin(String login, String password, Boolean isMD5) { + UsernamePasswordToken token = new UsernamePasswordToken(login, password, isMD5); + Subject subject = SecurityUtils.getSubject(); + + try { + subject.login(token); + } catch (UnknownAccountException e) {//账号不存在 + return new LoginBean(Constants.ERROR_ACCOUNT_NOT_EXIST); + } catch (IncorrectCredentialsException e) {//密码错误 + return new LoginBean(Constants.ERROR_PASSWORD); + }catch (AuthenticationException e) { + log.info("login exception", e); + return new LoginBean(Constants.ERROR_SYSTEM); + } + + LoginBean loginBean = new LoginBean(); + if (subject.isAuthenticated()) { + PrivilageAccountDO privilageAccountDO = (PrivilageAccountDO) SecurityUtils.getSubject().getPrincipal(); + Map loginInfoMap = new HashMap<>(); + PrivilageUserDO privilageUserDO = privilageUserDOMapper.selectById(privilageAccountDO.getUserId()); + PrivilageRoleDO roleDO = privilageRoleDOMapper.selectRoleName(privilageAccountDO.getUserId()); + + //成功设置信息 + loginBean.setUserName(privilageUserDO.getName()); + loginBean.setUserId(privilageAccountDO.getUserId()); + loginBean.setRoleId(privilageAccountDO.getId()); + loginBean.setRoleCode(roleDO.getCode()); + if (StringUtils.isNotBlank(roleDO.getCode()) && !MINI_ROLE_CODE.contains(roleDO.getCode())){ + return new LoginBean(Constants.ERROR_ROLE_NO_PERMISSION); + } + loginBean.setLogin(login); + loginInfoMap.put("code", LoginEnum.LOGIN_SUCCEED.getCode()); + loginBean.setLoginInfo(loginInfoMap); + }else { + return new LoginBean(Constants.LOGIN_NO_PERMISSIONS); + } + return loginBean; + } + @Override public void bindQywxUserIdByUserId(Long userId, String qywxUserId) { Map selectAccountMap = new HashMap<>(); @@ -139,4 +190,28 @@ public class LoginServiceImpl implements LoginService { } } + + @Override + public Map qyMiniAutoLogin(String code) throws WxErrorException { + Map result = new HashMap<>(3); + + String cpUserId = qwMailListManageService.getCpUserIdByCode(code); + result.put("cpUserId",cpUserId); + Map selectAccountMap = new HashMap<>(); + selectAccountMap.put("login", cpUserId); + selectAccountMap.put("type", AccountEnum.ACCOUNT_TYPE_QYWX.getType()); + List privilageAccountDOS = privilageAccountDOMapper.selectByMap(selectAccountMap); + //账号不存在 + if (privilageAccountDOS != null && privilageAccountDOS.size() > 0) { + selectAccountMap = new HashMap<>(); + selectAccountMap.put("user_id", privilageAccountDOS.get(0).getUserId()); + selectAccountMap.put("type", AccountEnum.ACCOUNT_TYPE_SYSTEM.getType()); + List accountDOS = privilageAccountDOMapper.selectByMap(selectAccountMap); + if (accountDOS != null && accountDOS.size() > 0) { + result.put("login", accountDOS.get(0).getLogin()); + result.put("password", accountDOS.get(0).getPassword()); + } + } + return result; + } } 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 80144c3..3d9c644 100644 --- a/src/main/java/com/kiisoo/ic/store/controller/StoreEmployeeController.java +++ b/src/main/java/com/kiisoo/ic/store/controller/StoreEmployeeController.java @@ -49,7 +49,7 @@ public class StoreEmployeeController extends BaseController { } /** - * + * 批量上传文件 * @return */ @RequestMapping(value = "import",method = RequestMethod.POST) @@ -63,4 +63,20 @@ public class StoreEmployeeController extends BaseController { return fail(); } } + + /** + * 批量上传文件 + * @return + */ +// @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(); +// } +// } } 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 51c3842..9503ef1 100644 --- a/src/main/java/com/kiisoo/ic/store/service/StoreEmployeeService.java +++ b/src/main/java/com/kiisoo/ic/store/service/StoreEmployeeService.java @@ -129,6 +129,48 @@ public class StoreEmployeeService { return new PageInfo<>(cpUserStoreDO) ; } + + /** + * 查询门店号 + * @param storeId 门店id + * @param regionId 区域id + */ + public void downloadStoreUserCode(Long storeId, Long regionId) { + 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); + } + } + } + if (CollectionUtils.isNotEmpty(storeUserDTOS)){ + storeUserDTOS.forEach(storeUser -> { + + }); + } + + } + /** * 导入excel门店号 * @param file excel文件 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 d8b6a73..95b66ff 100644 --- a/src/main/java/com/kiisoo/ic/wx/service/QWMailListManageService.java +++ b/src/main/java/com/kiisoo/ic/wx/service/QWMailListManageService.java @@ -9,6 +9,7 @@ import me.chanjar.weixin.common.bean.result.WxMediaUploadResult; import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.cp.api.*; import me.chanjar.weixin.cp.bean.WxCpDepart; +import me.chanjar.weixin.cp.bean.WxCpMaJsCode2SessionResult; import me.chanjar.weixin.cp.bean.WxCpTag; import me.chanjar.weixin.cp.bean.WxCpUser; import org.springframework.beans.BeanUtils; @@ -226,4 +227,16 @@ public class QWMailListManageService { //todo判断返回码 } + + /** + * 获取企业微信code + * @param code + * @return + * @throws WxErrorException + */ + public String getCpUserIdByCode(String code) throws WxErrorException { + wxCpService = WxCpConfiguration.getCpService(1000043); + WxCpMaJsCode2SessionResult wxCpMaJsCode2SessionResult = wxCpService.jsCode2Session(code); + return wxCpMaJsCode2SessionResult.getUserId(); + } }