String returnUrl = "";
DOService aService = DOService
.getService("multi_tenancy_browse_byname");
// ////////////根据用户查找租户
BOInstance tenant = aService.getInstance(formBI.getValue("tenancyId"));
// ////////如果租户不存在
if (tenant == null || tenant.getName() == null) {
ret[0] = I18n.instance().get("该账号没有被激活!");
return ret;
}
log.info("当前登录的租户为::" + formBI.getValue("tenancyId"));
// tenant data datastore url
String multi_datasource_uid = tenant.getValue("multi_datasource_uid");
// tenant config datastore url
String model_datasource_uid = tenant.getValue("model_datasource_uid");
DODataSource dataDds = dsConfig.get(multi_datasource_uid);
DODataSource dds = dsConfig.get(model_datasource_uid);
if (dataDds == null && dds == null) {
DOService findDataSource = DOService
.getService("multi_datasource_browse");
// //data datasource
BOInstance aBI = findDataSource.getInstance(multi_datasource_uid);
if (aBI != null) {
dataDds = (DODataSource) aBI.toObject(DODataSource.class);
// /现在多租户情况下默认都是mysql
dataDds.setDialect(DODataSource.DIALECT_MYSQL);
dsConfig.put(multi_datasource_uid, dataDds);
}
// /model datasource
aBI = findDataSource.getInstance(model_datasource_uid);
if (aBI != null) {
dds = (DODataSource) aBI.toObject(DODataSource.class);
// /现在多租户情况下默认都是mysql
dds.setDialect(DODataSource.DIALECT_MYSQL);
dsConfig.put(model_datasource_uid, dds);
}
}
if (dataDds == null || dds == null) {
ret[0] = I18n.instance().get("该账号没有被激活或者没有正确初始化,请与管理员联系!");
return ret;
}
// /globals 放到session中
// //需要更改多租户表中,租户数据库中的数据源
// ////每个租户为定位到某个物理数据库中
// ///租户数据库分配
TenancyValues tv = new TenancyValues(dds, tenant);
tv.setDataDDS(dataDds);
DOGlobals.getInstance().getSessoinContext().setTenancyValues(tv);
/**
* 查找账号
*/
MultiAccount ma = MultiAccount.findAccount(formBI.getValue("name"),
formBI.getValue("password"), formBI.getValue("tenancyId"));
BOInstance user = new BOInstance();
if (ma == null) {
// //////////直接可以从用户表中访问,可以考虑,计费时根据这个表计费,肯定还需要一个计费表和这个表关联。另外一个思路是同意注册。
String serviceName = request.getParameter("contextServiceName");
BOInstance biUser = null;
if (serviceName != null && !serviceName.trim().equals("")) {
DOService findUserByUserNamePassword = DOService
.getService(serviceName);
List listUser = findUserByUserNamePassword.invokeSelect();
if (listUser != null && listUser.size() > 0) {
biUser = (BOInstance) listUser.get(0);
}
}
if (biUser == null) {
ret[0] = I18n.instance().get("账号/密码出错,请重试!");
return ret;
} else {
user = biUser;
// /设置公司名称
user.putValue("company", tenant.getValue("l10n"));
}
} else {
user.fromObject(ma);
DOService findUserService = DOService
.getService("do_org_user_browse");
List corrUsers = findUserService.invokeSelect(ma.getObjUid());
BOInstance employee = null;
try {
if (corrUsers == null || corrUsers.size() == 0) {
// user.putValue("objuid",
// ma.getObjUid());
DOService storeUser = DOService
.getService("do_org_user_insert");
// /建立用户间的对应关系
user.putValue("user_code", user.getValue("name"));
employee = storeUser.store(user);
} else {
employee = (BOInstance) corrUsers.get(0);
}
} catch (ExedoException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
user.putValue("name", employee.getValue("name"));
// /设置公司名称
user.putValue("company", tenant.getValue("l10n"));
}
// /ret return path