package net.dev123.yibo.db; import java.util.ArrayList; import java.util.Date; import java.util.List; import net.dev123.commons.Paging; import net.dev123.commons.ServiceProvider; import net.dev123.commons.util.ListUtil; import net.dev123.entity.BaseUser; import net.dev123.mblog.entity.User; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; public class TaskDao extends BaseDao<Task> { private static final String TABLE = "Task"; private UserDao userDao; public TaskDao(Context context) { super(context); userDao = new UserDao(context); } public Task save(Task task) { if (task == null) { return null; } SQLiteDatabase sqLiteDatabase = dbHelper.getWritableDatabase(); sqLiteDatabase.beginTransaction(); try { ContentValues values = new ContentValues(); values.put("Task_ID", task.getTaskId()); values.put("Type", task.getType()); values.put("Content", task.getContent()); values.put("Result_ID", task.getResultId()); if (task.getCreatedAt() == null) { task.setCreatedAt(new Date()); } values.put("Created_At", task.getCreatedAt().getTime()); if (task.getFinishedAt() != null) { values.put("Finished_At", task.getFinishedAt().getTime()); } values.put("State", task.getState()); values.put("Service_Provider", task.getServiceProvider().getServiceProviderNo()); values.put("Account_ID", task.getAccountId()); long rowId = sqLiteDatabase.replace(TABLE, null, values); task.setTaskId(rowId); sqLiteDatabase.setTransactionSuccessful(); } finally { sqLiteDatabase.endTransaction(); } return task; } public int udpate(Task task) { if (task == null || task.getTaskId() == null) { return -1; } SQLiteDatabase sqLiteDatabase = dbHelper.getWritableDatabase(); sqLiteDatabase.beginTransaction(); int rowsAffected = 0; try { ContentValues values = new ContentValues(); values.put("Result_ID", task.getResultId()); if (task.getFinishedAt() != null) { values.put("Finished_At", task.getFinishedAt().getTime()); } values.put("State", task.getState()); rowsAffected = sqLiteDatabase.update(TABLE, values, "Task_ID = " + task.getTaskId(), null); } finally { sqLiteDatabase.endTransaction(); } return rowsAffected; } public List<Task> findTaskList(LocalAccount account, int type, int state, Paging<?> paging) { List<Task> taskList = null; if (account == null || paging == null) { return taskList; } String sql = "select " + " * " + "from " + " Task " + "where " + " Type = " + type + " and " + " State = " + state + " and " + " Account_ID = " + account.getAccountId() + " " + "order by Created_At desc"; taskList = find(sql, paging.getPageIndex(), paging.getPageSize()); if (ListUtil.isEmpty(taskList) || taskList.size() < paging.getPageSize() / 2) { paging.setLastPage(true); } return taskList; } public List<BaseUser> findRecentContact(LocalAccount account, Paging<User> paging) { List<BaseUser> userList = null;; if (account == null || paging == null) { return userList; } List<Task> taskList = findTaskList(account, Task.TYPE_RECENT_CONTACK, Task.STATE_FINISHED, paging); if (ListUtil.isEmpty(taskList)) { return userList; } userList = new ArrayList<BaseUser>(); for (Task task : taskList) { BaseUser user = userDao.findById(task.getResultId(), task.getServiceProvider()); if (user != null && !userList.contains(user)) { userList.add(user); } } return userList; } public void saveRecentContact(LocalAccount account, List<BaseUser> userList) { if (account == null || ListUtil.isEmpty(userList)) { return; } Task task = new Task(); task.setType(Task.TYPE_RECENT_CONTACK); task.setContent(null); Date currentDate = new Date(); task.setCreatedAt(currentDate); task.setFinishedAt(currentDate); task.setState(Task.STATE_FINISHED); task.setServiceProvider(account.getServiceProvider()); task.setAccountId(account.getAccountId()); for (BaseUser user : userList) { task.setTaskId(null); task.setResultId(user.getId()); saveRecentContact(task); } } public Task saveRecentContact(Task task) { if (task == null) { return null; } SQLiteDatabase sqLiteDatabase = dbHelper.getWritableDatabase(); sqLiteDatabase.beginTransaction(); try { ContentValues values = new ContentValues(); //values.put("Task_ID", task.getTaskId()); values.put("Type", task.getType()); values.put("Content", task.getContent()); values.put("Result_ID", task.getResultId()); if (task.getCreatedAt() == null) { task.setCreatedAt(new Date()); } values.put("Created_At", task.getCreatedAt().getTime()); if (task.getFinishedAt() != null) { values.put("Finished_At", task.getFinishedAt().getTime()); } values.put("State", task.getState()); values.put("Service_Provider", task.getServiceProvider().getServiceProviderNo()); values.put("Account_ID", task.getAccountId()); int rowsAffected = sqLiteDatabase.update( TABLE, values, "Type = " + task.getType() + " and Account_ID = " + task.getAccountId() + " and Result_ID = '" + task.getResultId() + "'", null); if (rowsAffected <= 0) { values.put("Task_ID", task.getTaskId()); long rowId = sqLiteDatabase.replace(TABLE, null, values); task.setTaskId(rowId); } sqLiteDatabase.setTransactionSuccessful(); } finally { sqLiteDatabase.endTransaction(); } return task; } @Override public Task extractData(SQLiteDatabase sqLiteDatabase, Cursor cursor) { Task task = new Task(); task.setTaskId(cursor.getLong(cursor.getColumnIndex("Task_ID"))); task.setType(cursor.getInt(cursor.getColumnIndex("Type"))); task.setContent(cursor.getString(cursor.getColumnIndex("Content"))); task.setResultId(cursor.getString(cursor.getColumnIndex("Result_ID"))); Long createdAt = cursor.getLong(cursor.getColumnIndex("Created_At")); if (createdAt != null && createdAt > 0) { task.setCreatedAt(new Date(createdAt)); } Long finishedAt = cursor.getLong(cursor.getColumnIndex("Finished_At")); if (finishedAt != null && finishedAt > 0) { task.setFinishedAt(new Date(finishedAt)); } task.setState(cursor.getInt(cursor.getColumnIndex("State"))); int spNo = cursor.getInt(cursor.getColumnIndex("Service_Provider")); task.setServiceProvider(ServiceProvider.getServiceProvider(spNo)); task.setAccountId(cursor.getLong(cursor.getColumnIndex("Account_ID"))); return task; } }