import com.dySweetFishPlugin.sql.dao.TunaService import com.dySweetFishPlugin.tool.crypto.EncryptUtil import com.sweetfish.convert.json.JsonConvert import com.sweetfish.service.RetResult import com.yinjie.heating.business.dao.LoginDao import com.yinjie.heating.common.api.BusinessExecutor import com.yinjie.heating.common.api.DeptService import com.yinjie.heating.common.api.ERPService import com.yinjie.heating.common.api.SysMessageService import com.yinjie.heating.common.datas.ERPModule import com.yinjie.heating.common.entity.base.DataBaseMultiItemEx import com.yinjie.heating.common.entity.base.ProcessEntityItem import com.yinjie.heating.common.entity.heating.HeatingApp import com.yinjie.heating.common.entity.site.ERPTokenUser import com.yinjie.heating.common.entity.site.LoginRequest import com.yinjie.heating.common.entity.site.LoginResult import com.yinjie.heating.common.entity.system.LoginUser import com.yinjie.heating.common.tool.ERPUtils import org.apache.commons.lang3.StringUtils import org.apache.logging.log4j.LogManager import org.apache.logging.log4j.Logger import org.rex.RMap import javax.annotation.Resource /** * ERP系统登录脚本,随着业务复杂度提高,登录功能统一一个接口提供 */ @SuppressWarnings("unused") class BE_ERPLogin implements BusinessExecutor, LoginResult> { protected final Logger logger = LogManager.getLogger(this.getClass().getSimpleName()) @Resource DeptService deptService @Resource ERPService erpService @Resource TunaService tunaService @Resource SysMessageService sysMessageService @Resource JsonConvert jsonConvert @Resource(name = "property.passwordSalt") private String passwordSalt @Resource(name = "property.erpToken.commonkey") private String ssoERPTokenCommonKey @Resource(name = "property.deliver.Store.commonkey") private String ssoStoreTokenCommonKey @Resource(name = "property.dnyMall.commonkey") private String ssoMallTokenCommonKey private LoginDao loginDao //登录策略,当前数据库那一个地方需要重启服务,可改成不需要的,参考TunaDaoService动态sql执行 def loginStrategies = [ "0" : [ "name" : "后台管理系统登录", "resourceLogin": { LoginRequest loginInfo -> if (loginInfo.password == "D227E2334F89C81FDE0967B115D4F29C") { LoginUser info = new LoginUser() info.setId(-999L) info.setLoginName("SuperResourcer") info.setUserName("资源管理员") info.setDeptName("资源管理") return RetResult. successT().result(new ERPTokenUser(info)) } else { return RetResult. errorT().retinfo("用户账号或密码错误,登录失败") } }, "login" : { LoginRequest loginInfo, RMap mapParams, DataBaseMultiItemEx supplierItem -> mapParams.put("companyId", 0L) HeatingApp info = loginDao.loginCompany(mapParams, supplierItem.dataBaseAlias, Long.parseLong(supplierItem.shardingKey)) if (info == null) { return RetResult. errorT().retinfo("用户账号或密码错误,登录失败") } if (info.status == 1) { return RetResult. errorT().retinfo("用户账号已冻结,登录失败") } // info.deptName = deptService.getRedisDeptName(info.getDeptId(), Long.parseLong(supplierItem.shardingKey)) // sysMessageService.syncSysGroupMessage(info.getId(), Long.parseLong(supplierItem.shardingKey)) return RetResult. successT().result(new ERPTokenUser(info)) }, "tokenKey" : ssoERPTokenCommonKey ] ] @Override String scriptName() { return "ERP系统登录" } @Override ERPModule module() { return ERPModule.SYSTEM } @Override RetResult execute(ProcessEntityItem source) { //直接定义Resource不好使,还是需要赋值 loginStrategies.get("0").tokenKey = ssoERPTokenCommonKey if (source.inputItem == null) { return RetResult. errorT().retinfo("未传入用户信息") } if (source.inputItem.supplierId <= 0L) { return RetResult. errorT().retinfo("请选择登录公司信息") } DataBaseMultiItemEx supplierItem = erpService.getERPSupplierInfo(source.inputItem.supplierId) if (supplierItem == null) { return RetResult. errorT().retinfo("无效的登录公司信息") } if (StringUtils.isEmpty(source.inputItem.loginName)) { return RetResult. errorT().retinfo("请输入账号") } if (StringUtils.isEmpty(source.inputItem.password)) { return RetResult. errorT().retinfo("请输入密码") } if (!loginStrategies.containsKey(String.valueOf(source.inputItem.loginFrom))) { return RetResult. errorT().retinfo("无效的登录来源") } source.inputItem.password = EncryptUtil.md5Digest(source.inputItem.password + passwordSalt) loginDao = tunaService.generate(LoginDao.class) RetResult userResult def loginStrategy = loginStrategies.get(String.valueOf(source.inputItem.loginFrom)) if (source.inputItem.loginName.equalsIgnoreCase("SuperResourcer")) { userResult = loginStrategy.resourceLogin.call(source.inputItem) } else { RMap paramMap = new RMap<>() paramMap.put("loginName", source.inputItem.loginName) paramMap.put("password", source.inputItem.password) userResult = loginStrategy.login.call(source.inputItem, paramMap, supplierItem) } if (userResult.isSuccess()) { userResult.result.dataSourceId = supplierItem.dataBaseAlias userResult.result.supplierCode = Long.parseLong(supplierItem.shardingKey) String accessToken = ERPUtils.parseTokenFromERPUser(userResult.result, loginStrategy.tokenKey, jsonConvert) return RetResult. successT().result(new LoginResult(userResult.result, accessToken)) } else { return RetResult. errorT().retinfo(userResult.retinfo) } } }