using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using SqlSugar;
using Models;
using WebApplication.Dao;
using System.Text; namespace WebApplication.Controllers
{
/// <summary>
/// 分类接口
/// </summary>
public class classificationController : ApiController
{
/// <summary>
/// 获取分类列表(条件查询,分页) http://192.168.2.177:1222/api/classification/GetclassificationListPage?pageIndex=1&pageSize=10&status=2&title=
/// </summary>
/// <param name="pageIndex">分页索引</param>
/// <param name="pageSize">分页大小</param>
/// <param name="status">状态:0:下线 1:上线 -1:失效,默认传入2获取所有数据</param>
/// <param name="title"></param>
/// <returns></returns>
[Route("api/classification/GetclassificationListPage")]
[HttpGet]
public string GetclassificationListPage(int pageIndex, int pageSize, int status, string title)
{
try
{
using (var db = SugarDao.GetInstance())
{ var qable = db.Queryable<tb_classification>();
var dataCountTable = db.Queryable<tb_classification>(); if (status != )
{
qable = qable.Where(i => i.status == status);
dataCountTable = dataCountTable.Where(i => i.status == status);
}
if (status == )
{
dataCountTable = dataCountTable.Where(i => i.status != status);
}
if (!string.IsNullOrEmpty(title))
{
qable = qable.Where(i => i.title.Contains(title));
dataCountTable = dataCountTable.Where(i => i.title.Contains(title));
} var data = qable.OrderBy(it => it.createtime, OrderByType.Asc).ToPageList(pageIndex, pageSize); var dataCount = dataCountTable.ToList().Count; if (data.Count > )
{
return SqlSugar.JsonConverter.Serialize(new { Result = , Msg = "获取数据成功", Data = data, Count = dataCount });
}
else
{
return SqlSugar.JsonConverter.Serialize(new { Result = , Msg = "获取数据失败", Data = data, Count = dataCount });
} }
}
catch (Exception ex)
{
return SqlSugar.JsonConverter.Serialize(new { Result = , Msg = "获取数据失败,原因为:" + ex.Message });
}
} /// <summary>
/// 获取分类数据,不分页 http://192.168.2.177:1222/api/classification/GetclassificationList?status=2&title=
/// </summary>
/// <param name="status"></param>
/// <param name="title"></param>
/// <returns></returns>
[Route("api/classification/GetclassificationList")]
[HttpGet]
public string GetclassificationList(int status, string title)
{
try
{
using (var db = SugarDao.GetInstance())
{
var qable = db.Queryable<tb_classification>();
if (status != )
{
qable = qable.Where(i => i.status == status);
}
if (!string.IsNullOrEmpty(title))
{
qable = qable.Where(i => i.title.Contains(title));
}
var data = qable.OrderBy(it => it.createtime, OrderByType.Asc).ToList();
var dataCount = db.Queryable<tb_classification>().Where(it => it.status != status).ToList().Count;
if (data.Count > )
{
return SqlSugar.JsonConverter.Serialize(new { Result = , Msg = "获取数据成功", Data = data, Count = dataCount });
}
else
{
return SqlSugar.JsonConverter.Serialize(new { Result = , Msg = "获取数据失败", Data = data, Count = dataCount });
} }
}
catch (Exception ex)
{
return SqlSugar.JsonConverter.Serialize(new { Result = , Msg = "获取数据失败,原因为:" + ex.Message });
}
} /// <summary>
/// 根据id得到对象 http://192.168.2.177:1222/api/classification/GetclassificationModel?id=1
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[Route("api/classification/GetclassificationModel")]
[HttpGet, HttpPost]
public string GetclassificationModel(int id)
{
try
{
using (var db = SugarDao.GetInstance())
{
if (id != )
{
var classification = db.Queryable<tb_classification>().Single(it => it.id == id);
if (classification != null)
{
return SqlSugar.JsonConverter.Serialize(new { Result = , Msg = "获取数据成功", Data = classification });
}
else
{
return SqlSugar.JsonConverter.Serialize(new { Result = , Msg = "获取数据失败", Data = classification });
}
}
else
{
return SqlSugar.JsonConverter.Serialize(new { Result = , Msg = "获取数据失败,无法找到id为:" + id + "的数据", });
} }
}
catch (Exception ex)
{
return SqlSugar.JsonConverter.Serialize(new { Result = , Msg = "获取数据失败,原因为:" + ex.Message });
}
}
/// <summary>
/// 新增分类 http://192.168.2.177:1222/api/classification/Postclassification
/// </summary>
/// <param name="classification"></param>
[Route("api/classification/Postclassification")]
[HttpPost]
public string Postclassification(tb_classification classification)
{
try
{
classification.createtime = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
using (var db = SugarDao.GetInstance())
{
object result = db.Insert<tb_classification>(classification);
if (Convert.ToInt64(result) > )
{
return SqlSugar.JsonConverter.Serialize(new { Result = , Msg = "添加成功" });
}
else
{
return SqlSugar.JsonConverter.Serialize(new { Result = , Msg = "添加失败" });
}
}
}
catch (Exception ex)
{ return SqlSugar.JsonConverter.Serialize(new { Result = , Msg = "添加失败,原因为:" + ex.Message });
}
}
/// <summary>
/// 修改分类
/// </summary>
/// <param name="id"></param>
/// <param name="value"></param>
[Route("api/classification/Putclassification")]
[HttpPost]
public string Putclassification(tb_classification classification)
{
try
{
classification.createtime = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
using (var db = SugarDao.GetInstance())
{
bool result = db.Update<tb_classification>(classification, it => it.id == classification.id);
if (result == true)
{
return SqlSugar.JsonConverter.Serialize(new { Result = , Msg = "更新成功" });
}
else
{
return SqlSugar.JsonConverter.Serialize(new { Result = , Msg = "更新失败" });
}
}
}
catch (Exception ex)
{
return SqlSugar.JsonConverter.Serialize(new { Result = , Msg = "更新失败,原因为:" + ex.Message });
}
}
/// <summary>
/// 删除 http://192.168.2.177:1222/api/classification/Deleteclassification?ids=4,5
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[Route("api/classification/Deleteclassification")]
[HttpGet, HttpPost]
public string Deleteclassification(string ids)
{
try
{
string[] input = ids.Split(',');
int[] output = Array.ConvertAll<string, int>(input, delegate (string s) { return int.Parse(s); }); using (var db = SugarDao.GetInstance())
{
bool result = db.Delete<tb_classification, int>(output);
if (result == true)
{
return SqlSugar.JsonConverter.Serialize(new { Result = , Msg = "删除成功" });
}
else
{
return SqlSugar.JsonConverter.Serialize(new { Result = , Msg = "删除失败" });
}
}
}
catch (Exception ex)
{
return SqlSugar.JsonConverter.Serialize(new { Result = , Msg = "删除失败,原因为:" + ex.Message });
}
} /// <summary>
/// 更新状态 http://192.168.2.177:1222/api/classification/UpdateStatus?status=0&ids=2,7
/// </summary>
/// <param name="status">状态:0:下线 1:上线 -1:失效 </param>
/// <param name="ids"></param>
/// <returns></returns>
[Route("api/classification/UpdateStatus")]
[HttpGet]
public string UpdateStatus(int status, string ids)
{
try
{
string[] input = ids.Split(',');
int[] output = Array.ConvertAll<string, int>(input, delegate (string s) { return int.Parse(s); });
using (var db = SugarDao.GetInstance())
{
bool result = db.Update<tb_classification, int>(new { status = status }, output);
if (result == true)
{
return SqlSugar.JsonConverter.Serialize(new { Result = , Msg = "状态更改成功" });
}
else
{
return SqlSugar.JsonConverter.Serialize(new { Result = , Msg = "状态更改失败" });
}
}
}
catch (Exception ex)
{
return SqlSugar.JsonConverter.Serialize(new { Result = , Msg = "状态更改失败,原因为:" + ex.Message });
}
} string result = string.Empty;
/// <summary>
/// 分类树形结构 http://192.168.2.177:1222/api/classification/GetclassificationTree
/// </summary>
/// <returns></returns>
[Route("api/classification/GetclassificationTree")]
[HttpGet]
public string GetclassificationTree()
{ WebApplication.Controllers.TreeMethod tm = new TreeMethod(); // 找到所有的父节点
List<TreeEntity> treeList1 = tm.findAllParents(); if (treeList1 != null)
{
for (int i = ; i < treeList1.Count; i++)
{
TreeEntity tree = treeList1[i];
// 打印父节点
result += "|--" + tree.name;
// 绑定孩子
result+=tm.BindChildByParent(tree.id, "");
}
}
else
{
result += "没有数据!";
}
return SqlSugar.JsonConverter.Serialize(new { Result = , Msg = "获取数据成功",Data= result });
}
}
public class TreeEntity
{
public string id { get; set; }
public string name { get; set; }
public string pid { get; set; }
}
internal class TreeMethod
{
/// <summary>
/// 找到所有的父节点
/// </summary>
/// <returns></returns>
public List<TreeEntity> findAllParents()
{
List<TreeEntity> treeList = new List<TreeEntity>(); using (var db = SugarDao.GetInstance())
{
var list = db.Queryable<tb_classification>().Where(it => it.pid == && it.status==).ToList();
if (list.Count > )
{
for (int i = ; i < list.Count; i++)
{
TreeEntity myTree = new TreeEntity();
myTree.id = list[i].id.ToString();
myTree.name = list[i].title;
myTree.pid = list[i].pid.ToString();
treeList.Add(myTree);
}
}
}
return treeList;
} /// <summary>
/// 根据父节点找到所有的子节点
/// </summary>
/// <param name="pid"></param>
/// <returns></returns>
public List<TreeEntity> findChildByPid(string pid)
{
int p_id = Convert.ToInt32(pid);
List<TreeEntity> treeList = new List<TreeEntity>(); using (var db = SugarDao.GetInstance())
{
var list = db.Queryable<tb_classification>().Where(it => it.pid == p_id&&it.status==).ToList();
if (list.Count > )
{
for (int i = ; i < list.Count; i++)
{
TreeEntity myTree = new TreeEntity();
myTree.id = list[i].id.ToString();
myTree.name = list[i].title;
myTree.pid = list[i].pid.ToString();
treeList.Add(myTree);
}
}
}
return treeList;
}
/// <summary>
/// 查看是否存在子节点
/// </summary>
/// <param name="pid"></param>
/// <returns></returns>
public bool HasChild(string pid)
{
int p_id = Convert.ToInt32(pid);
int count = ;
bool flag = false;
using (var db = SugarDao.GetInstance())
{
var list = db.Queryable<tb_classification>().Where(it => it.pid == p_id&it.status==).ToList(); for (int i = ; i < list.Count; i++)
{
count++;
}
if (count > )
{
flag = true;
}
}
return flag;
}
string Tree = string.Empty;
/// <summary>
/// 使用递归拼接父节点的子节点
/// </summary>
/// <param name="pid"></param>
/// <param name="prefix"></param>
public string BindChildByParent(string pid, string prefix)
{ if (this.HasChild(pid))
{
// 得到当前父节点下的所有孩子
List<TreeEntity> list = this.findChildByPid(pid);
// 循环打印当前父节点下的孩子
for (int i = ; i < list.Count; i++)
{
Tree += "|----" + prefix + list[i].name;
if (this.HasChild(list[i].id))
{
this.BindChildByParent(list[i].id, "--");
}
}
}
return Tree;
}
}
}

web api+递归树型结构的更多相关文章

  1. NET Core Web API下事件驱动型架构CQRS架构中聚合与聚合根的实现

    NET Core Web API下事件驱动型架构在前面两篇文章中,我详细介绍了基本事件系统的实现,包括事件派发和订阅.通过事件处理器执行上下文来解决对象生命周期问题,以及一个基于RabbitMQ的事件 ...

  2. 重温.NET下Assembly的加载过程 ASP.NET Core Web API下事件驱动型架构的实现(三):基于RabbitMQ的事件总线

    重温.NET下Assembly的加载过程   最近在工作中牵涉到了.NET下的一个古老的问题:Assembly的加载过程.虽然网上有很多文章介绍这部分内容,很多文章也是很久以前就已经出现了,但阅读之后 ...

  3. dzzoffice的树型结构用户管理设计

    在DzzOffice1.1的开发中,针对用户使用群体重新设计了,机构.部门.用户管理应用. 传统OA,企业相关程序,一般是设置机构-设置部门-设置职位-添加用户这样的步骤.每个步骤分为不同的管理界面. ...

  4. JSP中的一个树型结构

    看方力勋的javaWeb,采用左右值来表示树型结构(就是俺门的多级分类)表结构 页面代码 <%@ page language="java" import="java ...

  5. java树型结构的数据展现设计

    在做一个需求管理的页面时,需求的展现是不限层级树型结构,需求下还可以分拆任务,页面要展现的字段有20多个,而且需求采用通用表单设计,db采用大宽表存储,有一百多个字段.目前数据量不大,第一版采用普通的 ...

  6. 20-Ubuntu-文件和目录命令-查看目录树型结构-tree

    tree 以树状图列出当前目录下的文件目录结构 选项 含义 -d 只显示当前目录的子目录树型结构   显示当前目录的子目录和文件树型结构 例: 1.查看文档目录下的子目录和文件树型结构 2.查看文档目 ...

  7. ASP.NET Core Web API下事件驱动型架构的实现(一):一个简单的实现

    很长一段时间以来,我都在思考如何在ASP.NET Core的框架下,实现一套完整的事件驱动型架构.这个问题看上去有点大,其实主要目标是为了实现一个基于ASP.NET Core的微服务,它能够非常简单地 ...

  8. ASP.NET Core Web API下事件驱动型架构的实现(二):事件处理器中对象生命周期的管理

    在上文中,我介绍了事件驱动型架构的一种简单的实现,并演示了一个完整的事件派发.订阅和处理的流程.这种实现太简单了,百十行代码就展示了一个基本工作原理.然而,要将这样的解决方案运用到实际生产环境,还有很 ...

  9. ASP.NET Core Web API下事件驱动型架构的实现(三):基于RabbitMQ的事件总线

    在上文中,我们讨论了事件处理器中对象生命周期的问题,在进入新的讨论之前,首先让我们总结一下,我们已经实现了哪些内容.下面的类图描述了我们已经实现的组件及其之间的关系,貌似系统已经变得越来越复杂了. 其 ...

随机推荐

  1. Android studio 中的配置编译错误总结

    1.编译Andorid 工程的时候,有时候出现gradle 报下面的错误. Error:(1, 0) Cause: com/android/build/gradle/LibraryPlugin : U ...

  2. Connect to Database Using Custom params链接数据库配置参数说明

    使用RF的关键字Connect to Database Using Custom params链接数据库,对应的参数说明: a)     第一个参数我使用的是cx_Oracle,就写这个 b)     ...

  3. Hello Spring Framework——依赖注入(DI)与控制翻转(IoC)

    又到年关了,还有几天就是春节.趁最后还有些时间,复习一下Spring的官方文档. 写在前面的话: Spring是我首次开始尝试通过官方文档来学习的框架(以前学习Struts和Hibernate都大多是 ...

  4. [译]Dynamics AX 2012 R2 BI系列-Cube概览

    https://msdn.microsoft.com/EN-US/library/dd252604.aspx     Cube是一个多维度的结构,它是BI应用开发的基础.本文描述了cube的组成部分, ...

  5. Cocos2dx3.11.1Android播放视频,后台 黑屏,无法记忆播放bug修改

    /* * Copyright (C) 2006 The Android Open Source Project * Copyright (c) 2014 Chukong Technologies In ...

  6. PAT算法题学习笔记

    1001. 害死人不偿命的(3n+1)猜想 (15) 卡拉兹(Callatz)猜想: 对任何一个自然数n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把(3n+1)砍掉一半.这样一直反复砍下去, ...

  7. I2S/PCM/IOM-2、I2C/SPI/UART/GPIO/slimbus

    概述 I2S,PCM,IOM-2都是数字音频接口,传数据的. I2C,SPI,UART,GPIO是控制接口,传控制信令的. I2S I2S(Inter-IC Sound Bus)是飞利浦公司为数字音频 ...

  8. apache开启.htaccess及.htaccess的使用方法(转)

    apache开启.htaccess及.htaccess的使用方法 作者: 字体:[增加 减小] 类型:转载 时间:2010-12-02 今天本地调试PHP程序,用到了.htaccess,而默认配置里面 ...

  9. RMQ

    1.概念: RMQ(Range Minimum/Maximum Query),即区间最值查询,是指这样一个问题:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A ...

  10. NPOI导入xls,xlsx格式实例

    NPOI DLL下载地:http://npoi.codeplex.com/releases using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; us ...