|
|
@ -22,6 +22,7 @@ import org.springframework.web.bind.annotation.*; |
|
|
import java.security.MessageDigest; |
|
|
import java.security.MessageDigest; |
|
|
import java.security.NoSuchAlgorithmException; |
|
|
import java.security.NoSuchAlgorithmException; |
|
|
import java.util.HashMap; |
|
|
import java.util.HashMap; |
|
|
|
|
|
import java.util.List; |
|
|
import java.util.Map; |
|
|
import java.util.Map; |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
@ -146,15 +147,112 @@ public class AppEnfLoginController extends LoginController { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* 深政易用户登录 |
|
|
* 深圳易平台登录 |
|
|
* @param code 授权码 |
|
|
|
|
|
* @return 登录结果,包含token和用户信息 |
|
|
|
|
|
*/ |
|
|
*/ |
|
|
@PostMapping("/szyptLogin") |
|
|
@GetMapping("/szyptLogin/{code}") |
|
|
@ResponseBody |
|
|
@ResponseBody |
|
|
public R<Map<String, Object>> szyptLogin(@RequestBody Map<String, String> params ){ |
|
|
public R<Map<String, Object>> szyptLogin(@PathVariable String code){ |
|
|
String code = params.get("code"); |
|
|
|
|
|
return appEnfLoginService.szyptLogin(code); |
|
|
log.info("--> 深政易用户登录code:{}",code); |
|
|
|
|
|
|
|
|
|
|
|
String accessTokenJson = ""; |
|
|
|
|
|
String userJson = ""; |
|
|
|
|
|
SysUserVo user = null; |
|
|
|
|
|
try { |
|
|
|
|
|
// 获取 access_token
|
|
|
|
|
|
accessTokenJson = HttpUtil.HttpSendGet(szyptUrl + "/cgi-bin/gettoken?corpid="+szyptCorpid+"&corpsecret="+szyptCorpsecret, null); |
|
|
|
|
|
JSONObject tokenObj = JSONObject.parseObject(accessTokenJson); |
|
|
|
|
|
String token = tokenObj.getString("access_token"); |
|
|
|
|
|
// 获取 用户Id
|
|
|
|
|
|
userJson = HttpUtil.HttpSendGet(szyptUrl + "/cgi-bin/user/getuserinfo?access_token="+token+"&code="+code, null); |
|
|
|
|
|
log.info(">>> {} 市认证用户信息: {}", code, userJson); |
|
|
|
|
|
JSONObject userOjb = JSONObject.parseObject(userJson); |
|
|
|
|
|
String loginName = userOjb.getString("UserId"); |
|
|
|
|
|
|
|
|
|
|
|
user = sysUserService.selectUserByLoginName(loginName); |
|
|
|
|
|
if (user == null) { |
|
|
|
|
|
return R.fail("用户不存在"); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 3. 检查用户状态(0正常 1停用)
|
|
|
|
|
|
if ("1".equals(user.getStatus())) { |
|
|
|
|
|
return R.fail("该用户已被停用"); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 4. AES解密前端传来的密码
|
|
|
|
|
|
String decryptedPassword = decryptPassword(""); |
|
|
|
|
|
if (decryptedPassword == null) { |
|
|
|
|
|
return R.fail("密码解密失败"); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 5. MD5加盐校验密码(使用loginName作为加盐因子)
|
|
|
|
|
|
if (!verifyPassword(loginName, decryptedPassword, user.getSalt(), user.getPassword())) { |
|
|
|
|
|
return R.fail("用户名或密码错误"); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 6. 检查执法证件号是否为空
|
|
|
|
|
|
if (user.getLawCertificateNum() == null || user.getLawCertificateNum().isBlank()) { |
|
|
|
|
|
return R.fail("该用户不是执法人员,无法登录执法端"); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 7. 查询部门信息
|
|
|
|
|
|
SrzDeptVo srzOrgan = com.zdxt.enforcementcode.common.util.DataFilterUtil.getUserOrganDept(user.getUserId()); |
|
|
|
|
|
SysDeptVo sysDept = com.zdxt.enforcementcode.common.util.DataFilterUtil.getUserSysDept(user.getUserId()); |
|
|
|
|
|
SysDeptVo bureauDept = com.zdxt.enforcementcode.common.util.DataFilterUtil.getUserBureauDept(user.getUserId()); |
|
|
|
|
|
|
|
|
|
|
|
// 7. 构建LoginUser并生成SaToken
|
|
|
|
|
|
token = doSaTokenLogin(user.getUserId(), user.getUserName(), user.getNickName(), |
|
|
|
|
|
user.getDeptId(), "app_user", "enforcement_app", "f0535c2a32ab4d0496ab9a699b2a7d36"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 验证关键组织信息不能为空
|
|
|
|
|
|
if (srzOrgan == null) { |
|
|
|
|
|
return R.fail("该用户未关联认证机构,无法登录执法端"); |
|
|
|
|
|
} |
|
|
|
|
|
if (sysDept == null) { |
|
|
|
|
|
return R.fail("该用户未关联部门,无法登录执法端"); |
|
|
|
|
|
} |
|
|
|
|
|
if (bureauDept == null) { |
|
|
|
|
|
return R.fail("该用户未关联执法单位,无法登录执法端"); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (!sysDept.getDeptId().equals(user.getDeptId())){ |
|
|
|
|
|
return R.fail("部门ID查找错误!"); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 8. 手机号解密处理(如是加密存储则返回明文以供前端展示与业务使用)
|
|
|
|
|
|
String phonenumber = user.getPhonenumber(); |
|
|
|
|
|
if (CommonUtil.isPhoneEncrypted(phonenumber)) { |
|
|
|
|
|
phonenumber = CommonUtil.decryptPhone(phonenumber); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 9. 构造返回数据
|
|
|
|
|
|
Map<String, Object> data = new HashMap<>(); |
|
|
|
|
|
data.put("token", token); |
|
|
|
|
|
data.put("userId", user.getUserId()); |
|
|
|
|
|
data.put("userName", user.getUserName()); |
|
|
|
|
|
data.put("loginName", user.getLoginName()); |
|
|
|
|
|
data.put("nickName", user.getNickName()); |
|
|
|
|
|
data.put("phonenumber", phonenumber != null ? phonenumber : ""); |
|
|
|
|
|
|
|
|
|
|
|
data.put("deptId", user.getDeptId()); |
|
|
|
|
|
data.put("deptName", sysDept.getDeptName()); |
|
|
|
|
|
|
|
|
|
|
|
data.put("organId", srzOrgan.getOrganizationid()); |
|
|
|
|
|
data.put("organName", srzOrgan.getName()); |
|
|
|
|
|
|
|
|
|
|
|
data.put("bureauUnitId", bureauDept.getDeptId()); |
|
|
|
|
|
data.put("bureauUnitName", bureauDept.getDeptName()); |
|
|
|
|
|
data.put("lawOfficer", true); |
|
|
|
|
|
data.put("platformType", PlatformTypeEnums.ENFORCEMENT.getKey()); |
|
|
|
|
|
return R.ok(data); |
|
|
|
|
|
} catch (Exception e) { |
|
|
|
|
|
log.error("---> {} 市认证用户信息: {}", code, userJson); |
|
|
|
|
|
log.error("---> 本系统用户信息: {}", user); |
|
|
|
|
|
log.error(e.getMessage()); |
|
|
|
|
|
e.printStackTrace(); |
|
|
|
|
|
} |
|
|
|
|
|
return R.ok(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
|