using SqlSugar;
|
using System;
|
using System.Collections.Generic;
|
using MES.Service.DB;
|
using MES.Service.Modes;
|
|
using Newtonsoft.Json.Linq; // 解析 JSON
|
using System.Net.Http; // HttpClient
|
using System.Threading.Tasks;
|
using Masuit.Tools;
|
|
namespace MES.Service.service
|
{
|
public class DingStaffManager : Repository<DingStaff>
|
{
|
|
//当前类已经继承了 Repository 增、删、查、改的方法
|
|
//这里面写的代码不会给覆盖,如果要重新生成请删除 DingStaffManager.cs
|
|
|
#region 教学方法
|
/// <summary>
|
/// 仓储方法满足不了复杂业务需求,业务代码请在这里面定义方法
|
/// </summary>
|
public void Study()
|
{
|
|
/*********查询*********/
|
|
var data1 = base.GetById(1);//根据ID查询
|
var data2 = base.GetList();//查询所有
|
var data3 = base.GetList(it => 1 == 1); //根据条件查询
|
//var data4 = base.GetSingle(it => 1 == 1);//根据条件查询一条,如果超过一条会报错
|
|
var p = new PageModel() { PageIndex = 1, PageSize = 2 };// 分页查询
|
var data5 = base.GetPageList(it => 1 == 1, p);
|
Console.Write(p.TotalCount);//返回总数
|
|
var data6 = base.GetPageList(it => 1 == 1, p, it => SqlFunc.GetRandom(), OrderByType.Asc);// 分页查询加排序
|
Console.Write(p.TotalCount);//返回总数
|
|
List<IConditionalModel> conModels = new List<IConditionalModel>(); //组装条件查询作为条件实现 分页查询加排序
|
conModels.Add(new ConditionalModel() { FieldName= typeof(DingStaff).GetProperties()[0].Name, ConditionalType = ConditionalType.Equal, FieldValue = "1" });//id=1
|
var data7 = base.GetPageList(conModels, p, it => SqlFunc.GetRandom(), OrderByType.Asc);
|
|
base.AsQueryable().Where(x => 1 == 1).ToList();//支持了转换成queryable,我们可以用queryable实现复杂功能
|
|
|
|
/*********插入*********/
|
var insertData = new DingStaff() { };//测试参数
|
var insertArray = new DingStaff[] { insertData };
|
base.Insert(insertData);//插入
|
base.InsertRange(insertArray);//批量插入
|
var id = base.InsertReturnIdentity(insertData);//插入返回自增列
|
base.AsInsertable(insertData).ExecuteCommand();//我们可以转成 Insertable实现复杂插入
|
|
|
|
/*********更新*********/
|
var updateData = new DingStaff() { };//测试参数
|
var updateArray = new DingStaff[] { updateData };//测试参数
|
base.Update(updateData);//根据实体更新
|
base.UpdateRange(updateArray);//批量更新
|
//base.Update(it => new DingStaff() { ClassName = "a", CreateTime = DateTime.Now }, it => it.id==1);// 只更新ClassName列和CreateTime列,其它列不更新,条件id=1
|
base.AsUpdateable(updateData).ExecuteCommand(); //转成Updateable可以实现复杂的插入
|
|
|
|
/*********删除*********/
|
var deldata = new DingStaff() { };//测试参数
|
base.Delete(deldata);//根据实体删除
|
base.DeleteById(1);//根据主键删除
|
base.DeleteById(new int[] { 1,2});//根据主键数组删除
|
base.Delete(it=>1==2);//根据条件删除
|
base.AsDeleteable().Where(it=>1==2).ExecuteCommand();//转成Deleteable实现复杂的操作
|
}
|
#endregion
|
|
public async Task<bool> GetDingData()
|
{
|
string tokenApi = "https://oapi.dingtalk.com/gettoken?appkey=dingyzos0r1bizj7g6lr&appsecret=-HP4RvK2OUbqhG3iBUpd_TPe5MZRj8cfLc0b8Skt8rhC3I38kVLY9SS8P3kLWFcH";
|
|
// 清空旧数据
|
Db.Deleteable<DingStaff>().ExecuteCommand();
|
|
var staffList = new List<DingStaff>();
|
|
using (var http = new HttpClient())
|
{
|
// 1. 获取 access_token
|
var tokenResponse = await http.GetStringAsync(tokenApi);
|
var tokenJson = JObject.Parse(tokenResponse);
|
string accessToken = tokenJson["access_token"]?.ToString();
|
|
if (string.IsNullOrEmpty(accessToken))
|
return false;
|
|
// 2. 获取部门列表
|
var departApi = $"https://oapi.dingtalk.com/department/list?access_token={accessToken}";
|
var departResponse = await http.GetStringAsync(departApi);
|
var departJson = JObject.Parse(departResponse);
|
|
var departments = departJson["department"] as JArray;
|
if (departments == null)
|
return false;
|
|
// 3. 遍历部门
|
foreach (var dept in departments)
|
{
|
string deptId = (string)dept["id"];
|
|
int cursor = 0;
|
bool hasMore;
|
|
do
|
{
|
var userApi =
|
$"https://oapi.dingtalk.com/topapi/v2/user/list?access_token={accessToken}&dept_id={deptId}&cursor={cursor}&size=100";
|
|
var userResp = await http.GetStringAsync(userApi);
|
var userJson = JObject.Parse(userResp);
|
|
var result = userJson["result"];
|
var list = result?["list"] as JArray;
|
|
hasMore = result?["has_more"]?.Value<bool>() ?? false;
|
|
if (list != null)
|
{
|
foreach (var user in list)
|
{
|
Console.WriteLine($"{user["userid"]?.ToString()},{user["name"]?.ToString()},{deptId}");
|
staffList.Add(new DingStaff
|
{
|
Id = user["userid"]?.ToString(),
|
StaffName = user["name"]?.ToString(),
|
DeptID = deptId
|
});
|
}
|
}
|
|
cursor++;
|
|
} while (hasMore);
|
}
|
}
|
|
// 4. 一次性插入,极大提升性能!
|
Db.Fastest<DingStaff>().BulkCopy(staffList);
|
|
return true;
|
}
|
|
|
|
}
|
}
|