using System; using System.Collections.Generic; using PetaPoco; using Pingchuan.BeijingSafeguard.Model; namespace Pingchuan.BeijingSafeguard.DAL { public class TaskDAL : BaseDAL { public static void Add(Task task) { db.Insert(task); } public static List GetList(DateTime startTime, DateTime endTime) { string sql = $@"select t.*, o.name org_name, u.real_name user_name from tasks t left join orgs o on o.id = t.org_id left join users u on u.id = t.user_id where t.release_time >= @0 and t.release_time < @1 order by t.release_time desc"; return db.Fetch(sql, startTime, endTime); } public static List GetList(int userId, string regionCode, DateTime startTime, DateTime endTime, List tags) { string sql = GetSql(userId, regionCode, startTime, endTime, tags); return db.Fetch(sql); } public static void Delete(string id) { db.Execute("DELETE FROM tasks WHERE id = @0", id); } public static List GetTaskIdByRegion(string region) { string sql = $@"SELECT g.task_id id FROM tags g, tasks t WHERE g.task_id = t.id AND t.region = '{region}'"; return db.Fetch(sql); } public static string GetSql(int userId, string regionCode, DateTime startTime, DateTime endTime, List tags) { if (tags != null) { string tagsString = string.Join(",", tags.ToArray()); return $@"select c.* from tasks c, tags t where c.user_id = {userId} and c.region = '{regionCode}' and c.release_time >= '{startTime}' and c.release_time < '{endTime}' and c.id = t.task_id and t.`name` in({tagsString}) order by c.release_time desc"; } return $@"select c.* from tasks c where c.user_id = {userId} and c.region = '{regionCode}' and c.release_time >= '{startTime}' and c.release_time < '{endTime}' order by c.release_time desc"; } public static Pagination Statistics(string typeCode, DateTime fromTime, DateTime toTime, int pageIndex, int pageSize) { if (typeCode == "user") return UserStatistics(fromTime, toTime, pageIndex, pageSize); else if (typeCode == "org") return OrgStatistics(fromTime, toTime, pageIndex, pageSize); else return null; } public static Pagination UserStatistics(DateTime fromTime, DateTime toTime, int pageIndex, int pageSize) { string sql = $@"select temp.*, u.real_name user_name, o.id org_id, o.name org_name, o.name org_name2 from ( select user_id, count(*) compute_count, max(create_time) last_compute_time from tasks where create_time >= @0 and create_time < @1 group by user_id) temp left join users u on u.id = temp.user_id left join orgs o on o.id = u.org_id"; Page page = db.Page(pageIndex, pageSize, sql, fromTime, toTime, pageIndex, pageSize); return Pagination.FromPage(page); } public static Pagination OrgStatistics(DateTime fromTime, DateTime toTime, int pageIndex, int pageSize) { string sql = $@"select temp.*, o.name org_name, o.name org_name2 from ( select org_id, count(*) compute_count, max(create_time) last_compute_time from tasks where create_time >= @0 and create_time < @1 group by org_id) temp left join orgs o on o.id = temp.org_id"; Page page = db.Page(pageIndex, pageSize, sql, fromTime, toTime, pageIndex, pageSize); return Pagination.FromPage(page); } } }