BE_ERPLogin.groovy 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. import com.yinjie.printerAuthorize.common.datas.TokenUserFrom
  2. import com.dySweetFishPlugin.sql.dao.TunaService
  3. import com.dySweetFishPlugin.tool.crypto.EncryptUtil
  4. import com.sweetfish.convert.json.JsonConvert
  5. import com.sweetfish.service.RetResult
  6. import com.yinjie.printerAuthorize.business.dao.LoginDao
  7. import com.yinjie.printerAuthorize.common.api.*
  8. import com.yinjie.printerAuthorize.common.datas.ERPModule
  9. import com.yinjie.printerAuthorize.common.entity.base.DataBaseMultiItemEx
  10. import com.yinjie.printerAuthorize.common.entity.base.ProcessEntityItem
  11. import com.yinjie.printerAuthorize.common.entity.site.ERPTokenUser
  12. import com.yinjie.printerAuthorize.common.entity.site.LoginRequest
  13. import com.yinjie.printerAuthorize.common.entity.site.LoginResult
  14. import com.yinjie.printerAuthorize.common.entity.system.LoginUser
  15. import com.yinjie.printerAuthorize.common.tool.ERPUtils
  16. import com.sweetfish.util.ResourceFactory
  17. import org.apache.commons.lang3.StringUtils
  18. import org.apache.logging.log4j.LogManager
  19. import org.apache.logging.log4j.Logger
  20. import org.rex.RMap
  21. import javax.annotation.Resource
  22. /**
  23. * ERP系统登录脚本,随着业务复杂度提高,登录功能统一一个接口提供
  24. */
  25. @SuppressWarnings("unused")
  26. class BE_ERPLogin implements BusinessExecutor<ProcessEntityItem<LoginRequest>, LoginResult> {
  27. protected final Logger logger = LogManager.getLogger(this.getClass().getSimpleName())
  28. @Resource
  29. DeptService deptService
  30. @Resource
  31. ERPService erpService
  32. @Resource
  33. TunaService tunaService
  34. @Resource
  35. SysMessageService sysMessageService
  36. @Resource
  37. JsonConvert jsonConvert
  38. @Resource(name = "server")
  39. private ResourceFactory rf
  40. @Resource(name = "property.passwordSalt")
  41. private String passwordSalt
  42. private LoginDao loginDao
  43. //登录策略,当前数据库那一个地方需要重启服务,可改成不需要的,参考TunaDaoService动态sql执行
  44. def loginStrategies = [
  45. "0" : [
  46. "name" : "后台管理系统登录",
  47. "resourceLogin": { LoginRequest loginInfo ->
  48. if (loginInfo.password == "D227E2334F89C81FDE0967B115D4F29C") {
  49. LoginUser info = new LoginUser()
  50. info.setId(-999L)
  51. info.setLoginName("SuperResourcer")
  52. info.setUserName("资源管理员")
  53. info.setDeptName("资源管理")
  54. return RetResult.<ERPTokenUser> successT().result(new ERPTokenUser(info))
  55. } else {
  56. return RetResult.<ERPTokenUser> errorT().retinfo("用户账号或密码错误,登录失败")
  57. }
  58. },
  59. "login" : { LoginRequest loginInfo, RMap mapParams, DataBaseMultiItemEx supplierItem ->
  60. mapParams.put("companyId", 0L)
  61. LoginUser info = loginDao.login(mapParams, supplierItem.dataBaseAlias, Long.parseLong(supplierItem.shardingKey))
  62. if (info == null) {
  63. return RetResult.<ERPTokenUser> errorT().retinfo("用户账号或密码错误,登录失败")
  64. }
  65. if (info.status == 1) {
  66. return RetResult.<ERPTokenUser> errorT().retinfo("用户账号已冻结,登录失败")
  67. }
  68. info.deptName = deptService.getRedisDeptName(info.getDeptId(), Long.parseLong(supplierItem.shardingKey))
  69. sysMessageService.syncSysGroupMessage(info.getId(), Long.parseLong(supplierItem.shardingKey))
  70. return RetResult.<ERPTokenUser> successT().result(new ERPTokenUser(info))
  71. },
  72. "tokenKey" : ""
  73. ]
  74. ]
  75. @Override
  76. String scriptName() {
  77. return "ERP系统登录"
  78. }
  79. @Override
  80. ERPModule module() {
  81. return ERPModule.LOGIN
  82. }
  83. @Override
  84. RetResult<LoginResult> execute(ProcessEntityItem<LoginRequest> source) {
  85. //直接定义Resource不好使,还是需要赋值
  86. loginStrategies.each {
  87. it.value.tokenKey = rf.find("property." + TokenUserFrom.getTokenKey(Integer.parseInt(it.key)), String.class)
  88. }
  89. if (source.inputItem == null) {
  90. return RetResult.<LoginResult> errorT().retinfo("未传入用户信息")
  91. }
  92. if (source.inputItem.supplierId <= 0L) {
  93. return RetResult.<LoginResult> errorT().retinfo("请选择登录公司信息")
  94. }
  95. DataBaseMultiItemEx supplierItem = erpService.getERPSupplierInfo(source.inputItem.supplierId)
  96. if (supplierItem == null) {
  97. return RetResult.<LoginResult> errorT().retinfo("无效的登录公司信息")
  98. }
  99. if (!loginStrategies.containsKey(String.valueOf(source.inputItem.loginFrom))) {
  100. return RetResult.<LoginResult> errorT().retinfo("无效的登录来源")
  101. }
  102. if (source.inputItem.loginFrom != TokenUserFrom.MINI_MALL.value) {
  103. if (StringUtils.isEmpty(source.inputItem.loginName)) {
  104. return RetResult.<LoginResult> errorT().retinfo("请输入账号")
  105. }
  106. if (StringUtils.isEmpty(source.inputItem.password)) {
  107. return RetResult.<LoginResult> errorT().retinfo("请输入密码")
  108. }
  109. source.inputItem.password = EncryptUtil.md5Digest(source.inputItem.password + passwordSalt)
  110. } else {
  111. source.inputItem.loginName = ""
  112. source.inputItem.password = ""
  113. }
  114. loginDao = tunaService.generate(LoginDao.class)
  115. RetResult<ERPTokenUser> userResult
  116. def loginStrategy = loginStrategies.get(String.valueOf(source.inputItem.loginFrom))
  117. if (source.inputItem.loginName.equalsIgnoreCase("SuperResourcer")) {
  118. userResult = loginStrategy.resourceLogin.call(source.inputItem)
  119. } else {
  120. RMap<String, Object> paramMap = new RMap<>()
  121. paramMap.put("loginName", source.inputItem.loginName)
  122. paramMap.put("password", source.inputItem.password)
  123. userResult = loginStrategy.login.call(source.inputItem, paramMap, supplierItem)
  124. }
  125. if (userResult.isSuccess()) {
  126. userResult.result.dataSourceId = supplierItem.dataBaseAlias
  127. userResult.result.supplierCode = Long.parseLong(supplierItem.shardingKey)
  128. //商城小程序的加密key单独处理一下,临时方案,最好还是前端区分一下,判断登录返回的user的userFrom
  129. String accessToken = (source.inputItem.loginFrom == TokenUserFrom.MINI_MALL.value)
  130. ? ERPUtils.parseTokenFromERPUser(userResult.result, loginStrategies.get(String.valueOf(TokenUserFrom.PC_MALL_FRONT.value)).tokenKey, jsonConvert)
  131. : ERPUtils.parseTokenFromERPUser(userResult.result, loginStrategy.tokenKey, jsonConvert)
  132. return RetResult.<LoginResult> successT().result(new LoginResult(userResult.result, accessToken))
  133. } else {
  134. return RetResult.<LoginResult> errorT().retinfo(userResult.retinfo)
  135. }
  136. }
  137. }