using Dapper; using SolarPower.Helper; using SolarPower.Models; using SolarPower.Repository.Interface; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Threading.Tasks; namespace SolarPower.Repository.Implement { public class OperationRepository : RepositoryBase, IOperationRepository { public OperationRepository(IDatabaseHelper databaseHelper) : base(databaseHelper) { tableName = "operation_plan_create"; } public async Task> GetPowerStationIdList(int UserId) { List result; using (IDbConnection conn = this._databaseHelper.GetConnection()) { try { var sql = @$"SELECT tn.Id AS Value, tn.Name AS Text FROM power_station tn LEFT JOIN power_station_operation_personnel pp ON tn.Id=pp.PowerStationId WHERE pp.UserId = @userid"; result = (await conn.QueryAsync(sql, new { userid = UserId })).ToList(); } catch (Exception exception) { throw exception; } return result; } } public async Task AddOperationPlan(OperationCreatePlan OperationPlan, List properties) { using (IDbConnection conn = _databaseHelper.GetConnection()) { conn.Open(); try { string sql = GenerateInsertQuery(properties); await conn.ExecuteAsync(sql, OperationPlan); } catch (Exception exception) { throw exception; } finally { conn.Close(); } } } public async Task> OperationPlanTable(List id) { List result; var count = 0; string Wheresql = "oc.PowerStationId = "; foreach (int too in id) { if(count == id.Count-1) { Wheresql += too.ToString(); } else { Wheresql += too.ToString() + " OR oc.PowerStationId = "; } count++; } using (IDbConnection conn = this._databaseHelper.GetConnection()) { try { var sql = @$"SELECT oc.Id,oc.PlanId,oc.PowerStationId,oc.Type, oc.ScheduleNum,oc.ScheduleType,oc.WorkDay,oc.StartTime, oc.EmailType,oc.Description,oc.CreatedAt,ps.Name AS PowerStationName ,us.Name AS CreatedPerson FROM operation_plan_create oc LEFT JOIN power_station ps ON oc.PowerStationId = ps.Id LEFT JOIN user us ON us.Id = oc.CreatedBy WHERE {Wheresql} AND oc.Deleted = 0"; result = (await conn.QueryAsync(sql)).ToList(); } catch (Exception exception) { throw exception; } return result; } } public async Task GetOneOperation(int id) { OperationCreatePlan result; using (IDbConnection conn = _databaseHelper.GetConnection()) { conn.Open(); try { var sql = @"SELECT * FROM operation_plan_create WHERE Deleted =0 AND Id = @Id"; result = await conn.QueryFirstOrDefaultAsync(sql, new { Id = id }); } catch (Exception exception) { throw exception; } finally { conn.Close(); } return result; } } public async Task UpdateOperationPlan(OperationCreatePlan OperationPlan, List properties) { using (IDbConnection conn = _databaseHelper.GetConnection()) { conn.Open(); var trans = conn.BeginTransaction(); try { var sql = GenerateUpdateQuery(properties); await conn.ExecuteAsync(sql, OperationPlan, trans); trans.Commit(); } catch (Exception exception) { trans.Rollback(); throw exception; } finally { conn.Close(); } } } public async Task AddToRecord(PlanToRecord record, List properties2) { using (IDbConnection conn = _databaseHelper.GetConnection()) { conn.Open(); var trans = conn.BeginTransaction(); try { string sql = GenerateInsertQueryWithCustomTable(properties2, "operation_record"); await conn.ExecuteAsync(sql, record); trans.Commit(); } catch (Exception exception) { trans.Rollback(); throw exception; } finally { conn.Close(); } } } /// /// 透過搜尋條件,查詢過濾後的運維作業記錄 /// /// /// public async Task> GetAllRecodeByFilterAsync(PostOperationRecodeFilter filter) { List result; using (IDbConnection conn = this._databaseHelper.GetConnection()) { try { var sql = @$"SELECT ps.Name AS PowerStationName, opr.FormId, opr.WorkType, opr.FixDO, opr.Status, u.Name AS WorkPersonName, opr.StartTime, opr.EndTime, opr.FinishTime FROM operation_record opr LEFT JOIN power_station ps ON opr.PowerStationId = ps.Id LEFT JOIN user u ON opr.WorkPersonId = u.ID WHERE opr.Deleted = 0 AND ps.CityId IN @CityIds AND ps.Id IN @PowerStationIds"; if (filter.WorkType > 0) { sql += @" AND opr.WorkType = @WorkType"; if (!string.IsNullOrEmpty(filter.Range)) { } } else { sql += @" AND opr.WorkType IN (0, 1)"; sql += @" UNION"; sql += @" SELECT ps.Name AS PowerStationName, opr.FormId, opr.WorkType, opr.FixDO, opr.Status, u.Name AS WorkPersonName, opr.StartTime, opr.EndTime, opr.FinishTime FROM operation_record opr LEFT JOIN power_station ps ON opr.PowerStationId = ps.Id LEFT JOIN user u ON opr.WorkPersonId = u.ID WHERE opr.Deleted = 0 AND ps.CityId IN @CityIds AND ps.Id IN @PowerStationIds AND opr.WorkType = 2"; } result = (await conn.QueryAsync(sql, filter)).ToList(); } catch (Exception exception) { throw exception; } return result; } } } }