// 处理登录
String echoStr = "";
DOService aService = DOService
.getService("multi_tenancy_browse_byname");
// ////////////根据用户查找租户
BOInstance tenant = aService.getInstance(formBI.getValue("tenancyId"));
// ////////如果租户不存在
if (tenant == null || tenant.getName() == null) {
return I18n.instance().get("该账号没有被激活!");
}
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 = null;
DODataSource dds = null;
if (multi_datasource_uid != null && model_datasource_uid != 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);
}
// /model datasource
aBI = findDataSource.getInstance(model_datasource_uid);
if (aBI != null) {
dds = (DODataSource) aBI.toObject(DODataSource.class);
// /现在多租户情况下默认都是mysql
dds.setDialect(DODataSource.DIALECT_MYSQL);
}
}
if (dataDds == null || dds == null) {
return I18n.instance().get("该账号没有被激活或者没有正确初始化,请与管理员联系!");
}
// /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"));
BOInstance user = new BOInstance();
// /设置公司名称
user.putValue("company", tenant.getValue("l10n"));
if (ma != null) {
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"));
} else {// //////////直接可以从用户表中访问,可以考虑,计费时根据这个表计费,肯定还需要一个计费表和这个表关联。另外一个思路是同意注册。
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);
}
}