private static string GetConditionSql(DispatchQueryCondition condition) { var sql = " and vendor_id=@p_vendor_id and hospital_id=@p_hospital_id "; sql += @" and product_id in (select b.product_id from user_privilege a join vendor_products b on a.unit_id=b.unit_id where user_id=@p_user_id and operate=1) "; if (condition.FormNo.HasValue) { sql += " and order_form_no=@p_form_no"; } if (!string.IsNullOrEmpty(condition.Status)) { if (string.Compare(condition.Status, DispatchFormStatus.QueryDispatchable, true) == 0) { sql += " and (status=@p_waiting or status=@p_dispatching)"; } else { sql += " and status=@p_status"; } } return(sql); }
public static IList <DispatchFormEntity> Query(DispatchQueryCondition condition, PagerInfo pager) { var baseSql = @"select {0} from dispatch_form where 1=1 {1}"; var conditionSql = GetConditionSql(condition); var db = DatabaseFactory.CreateDatabase(); pager.ComputePageCount(QueryCount(baseSql, conditionSql, condition, db)); var orderSql = " order by "; if (pager.OrderFields.Count > 0) { foreach (var field in pager.OrderFields) { orderSql += field.Field + (field.Desc ? " DESC" : "") + ","; } } else { orderSql += " order_form_no desc,product_id,created_time desc,status "; } var sql = string.Format(baseSql, COLUMN_SQL, conditionSql); sql = @"SELECT * FROM ( SELECT ROW_NUMBER() OVER(" + orderSql + @") pid," + COLUMN_SQL + @" FROM (" + sql + @") t ) t1 WHERE t1.pid BETWEEN @p_pageNo * @p_pageSize + 1 AND (@p_pageNo + 1) * @p_pageSize "; var cmd = db.GetSqlStringCommand(sql); AddParameters(condition, db, cmd); db.AddInParameter(cmd, "p_pageNo", DbType.Int32, pager.PageIndex); db.AddInParameter(cmd, "p_pageSize", DbType.Int32, pager.PageSize); var list = new List <DispatchFormEntity>(); using (var reader = db.ExecuteReader(cmd)) { while (reader.Read()) { var entity = new DispatchFormEntity(); entity.Init(reader); list.Add(entity); } } return(list); }
private static int QueryCount(string baseSql, string conditionSql, DispatchQueryCondition condition, Database db) { var sql = string.Format(baseSql, "count(*)", conditionSql); var cmd = db.GetSqlStringCommand(sql); AddParameters(condition, db, cmd); using (IDataReader reader = db.ExecuteReader(cmd)) { reader.Read(); return(reader.GetInt32(0)); } }
private static void AddParameters(DispatchQueryCondition condition, Database db, DbCommand cmd) { db.AddInParameter(cmd, "p_vendor_id", DbType.String, condition.VendorId); db.AddInParameter(cmd, "p_hospital_id", DbType.String, condition.HospitalId); db.AddInParameter(cmd, "p_user_id", DbType.String, condition.UserId); if (condition.FormNo.HasValue) { db.AddInParameter(cmd, "p_form_no", DbType.String, condition.FormNo); } if (!string.IsNullOrEmpty(condition.Status)) { if (string.Compare(condition.Status, DispatchFormStatus.QueryDispatchable, true) == 0) { db.AddInParameter(cmd, "p_waiting", DbType.String, DispatchFormStatus.Waiting); db.AddInParameter(cmd, "p_dispatching", DbType.String, DispatchFormStatus.Dispatching); } else { db.AddInParameter(cmd, "p_status", DbType.String, condition.Status); } } }