package com.jiuqi.njt.util.login;
import java.util.ArrayList;
import java.util.List;
import com.jiuqi.mobile.nigo.comeclose.bean.base.RoleClientModuleBean;
import com.jiuqi.mobile.nigo.comeclose.bean.base.UserBean;
import com.jiuqi.mobile.nigo.comeclose.bean.base.UserClientModuleBean;
import com.jiuqi.mobile.nigo.comeclose.bean.base.UserRolesBean;
import com.jiuqi.mobile.nigo.comeclose.manager.base.IRoleClientModuleManager;
import com.jiuqi.mobile.nigo.comeclose.manager.base.IUserClientModuleManager;
import com.jiuqi.mobile.nigo.comeclose.ws.client.ClientContext;
import com.jiuqi.njt.data.MyApp;
import com.jiuqi.njt.data.OptsharepreInterface;
import com.jiuqi.njt.db.ModuleDBHelper;
import com.jiuqi.njt.model.CModuleBean;
import com.jiuqi.njt.util.Constants;
import com.jiuqi.njt.util.ModuleUtil;
import android.annotation.SuppressLint;
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.util.Log;
/**
* 根据roleGuid、角色Guid获取客户端角色模块和 用户模块
* @param roleGuid,guid
*
*/
public class GetRoleAndUserModuleTask extends AsyncTask<Void, Void, List<RoleClientModuleBean>> {
private MyApp application;
private OptsharepreInterface sharePre;
private List<RoleClientModuleBean> roleModuleList;
private List<UserClientModuleBean> userNewModuleList;
private Context context;
private ModuleDBHelper dbHelper;
/**
* 是否需要更新角色模块数据
*/
private boolean isUpDateRoleModule;
/**
* 是否获取数据成功
*/
private boolean finish = false;
private final static String TAG = "GetRoleAndUserModuleTask";
// private WriteFile writeFile = new WriteFile(TAG+ JqydDateUtil.getDateDayOne(new Date()));
public GetRoleAndUserModuleTask(Context context,boolean isUpDateRoleModule) {
super();
this.context = context;
this.application = (MyApp) context.getApplicationContext();
this.isUpDateRoleModule = isUpDateRoleModule;
sharePre = new OptsharepreInterface(context);
dbHelper = new ModuleDBHelper(context);
}
@Override
protected void onPreExecute() {
super.onPreExecute();
Log.e(TAG, "onPreExecute");
}
@Override
protected List<RoleClientModuleBean> doInBackground(Void... arg0) {
try {
ClientContext context = application.getClientContext();
if (null == context) {
context = ClientContext.getClientContext(Constants.SERVER_URL, sharePre.getPres("account"),sharePre.getPres("password"));
application.setClientContext(context);
}
UserBean user = context.getUser();
List<UserRolesBean> rolesBeanList = user.getUserRolesBeans();
List<String> roleGuids = new ArrayList<String>();
for (UserRolesBean userRolesBean : rolesBeanList) {
roleGuids.add(userRolesBean.getRoleGuid());
}
if(isUpDateRoleModule){
//获取客户端角色模块
IRoleClientModuleManager roleManager = context.getManager(IRoleClientModuleManager.class);
roleModuleList = roleManager.getRoleByRoleGuid(roleGuids);
}
//获取客户端用户模块
IUserClientModuleManager userManager = context.getManager(IUserClientModuleManager.class);
userNewModuleList = userManager.getByUserGuid(context.getUser().getGuid());
finish = true;
} catch (Exception e) {
e.printStackTrace();
}
return roleModuleList;
}
@Override
protected void onPostExecute(List<RoleClientModuleBean> result) {
super.onPostExecute(result);
Log.e(TAG, "onPostExecute");
List<CModuleBean> cmoduleUserList = null ;
//查询出数据库中保存的用户模块数据
List<CModuleBean> userOldModuleList = dbHelper.queryUserModule(sharePre.getPres("guid"));
/**
* 将角色数据进行类型转化,List<CModuleBean>
*/
cmoduleUserList= dbHelper.getModuleBeanFromUser(userNewModuleList);
/**
* 判断是不是更新用户模块数据
*/
boolean updateUserModules = false ;
//如果原来的用户模块数据是空,表示需要更新用户模块数据
if((null==userOldModuleList||userOldModuleList.size()<1)&&(null!=cmoduleUserList&&cmoduleUserList.size()>0)){
updateUserModules = true;
}else{
//如果原来的模块数据大小小于现在的模块数据,表示需要更新用户模块数据
if(userOldModuleList.size()!=cmoduleUserList.size()){
updateUserModules = true;
}else{
//如果原来的模块数据不等于现在的模块数据,表示需要更新用户模块数据
if(!userOldModuleList.equals(cmoduleUserList)){
updateUserModules = true;
}
}
}
if(updateUserModules){
dbHelper.deleteUserModule();
dbHelper.addUserModule(cmoduleUserList,sharePre.getPres("guid"));
if(null==cmoduleUserList||cmoduleUserList.size()<1){
ModuleUtil moduleUtil = new ModuleUtil();
List<String> userModuleStrList = moduleUtil.getUserModuleDefalut();
cmoduleUserList = getCModuleBeanList(userModuleStrList);
dbHelper.addUserModule(cmoduleUserList,sharePre.getPres("guid"));
}
}
/**
* 线程执行完毕
* 发送一个GetModuleBroatCastReceiver广播,通知Home1Activity数据已经获取可以取消提示框
* 需要等待2秒钟,等待首页加载完成后发送
*/
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(2000);
Intent intent = new Intent();
intent.setAction("GetModuleBroatCastReceiver");
context.sendBroadcast(intent);
Log.e(TAG, " context.sendBroadcast(intent);");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();;
/**
* 如果需要更新角色模块数据,并且获取数据成功
* 就删除原来的角色数据,并把新的角色数据存储到数据库中
*/
if(isUpDateRoleModule && finish){
dbHelper.deleteRolseModule();
/**
* 将角色数据进行类型转化,List<CModuleBean>
*/
List<CModuleBean> cmoduleRoleList = dbHelper.getModuleBeanFromRole(roleModuleList,sharePre.getPres("roleguid"));
// if(null!=roleModuleList&&roleModuleList.size()>0){
// sharePre.putPres("roleguid", roleModuleList.get(0).getRoleGuid());
// }
/**
* 把新的角色数据存储到数据库中
*/
dbHelper.addRoleModule(cmoduleRoleList);
//如果用户模块为空,则设置默认显示角色模块的默认显示模块到用户模块表
if(cmoduleUserList==null || cmoduleUserList.size()<1){
for(CModuleBean bean :cmoduleRoleList){
if(bean.isDefaultDisplay()){
cmoduleUserList.add(bean);
for(CModuleBean sbean :cmoduleRoleList){
if(sbean.getpCode() == bean.getCode()){
cmoduleUserList.add(sbean);
}
}
}
}
}
/**
* 从数据库中查询用户的模块数据
* 如果用户的模块数据为空,就把从用户角色的默认显示模块存到用户模块表
*/
userOldModuleList = dbHelper.queryUserModule(sharePre.getPres("guid"));
if(null==userOldModuleList||userOldModuleList.size()==0){
dbHelper.deleteUserModule();
dbHelper.addUserModule(cmoduleUserList,sharePre.getPres("guid"));
}
}
}
// 把List<String>拆分再转换成List<CModule>集合的方法
@SuppressLint("NewApi")
private List<CModuleBean> getCModuleBeanList(List<String> list) {
List<CModuleBean> moduleBeanslist = new ArrayList<CModuleBean>();
CModuleBean cmBean;
for (int i = 0; i < list.size(); i++) {
String sigleModulestr = list.get(i);
String[] strarray = sigleModulestr.split(",");
cmBean = new CModuleBean();
cmBean.setCode(Integer.parseInt(strarray[0]));
cmBean.setpCode(Integer.parseInt(strarray[1]));
cmBean.setName(strarray[2]);
cmBean.setImage(strarray[3]);
if (strarray[4].equals("1")) {
cmBean.setShow(true);
} else {
cmBean.setShow(false);
}
cmBean.setOrderNumber(Integer.parseInt(strarray[5]));
cmBean.setLevel(Integer.parseInt(strarray[6]));
cmBean.setTypeModule("1");
if (strarray[7].equals("1")) {
cmBean.setDefaultDisplay(true);
} else {
cmBean.setDefaultDisplay(false);
}
cmBean.setUrl("");
cmBean.setRoleGuid(sharePre.getPres("roleguid"));
moduleBeanslist.add(cmBean);
}
return moduleBeanslist;
}
}