You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

267 lines
9.2 KiB
C#

9 months ago
using CommonModel;
using Dapr.Actors;
using Dapr.Actors.Client;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ZhongLianInterface;
using ZhongLianModel;
namespace ZhongLianService
{
/// <summary>
/// 工程服务
/// </summary>
public class ProjectService : IProjectService
{
public ProjectService(IServiceProvider services, ISqlSugarClient sqlSugarClient)
{
Services = services;
Db = sqlSugarClient;
//创建表
Db.CodeFirst.SetStringDefaultLength(200).InitTables(typeof(ProjectDO));
//Db.CodeFirst.InitTables(typeof(GroupDO), typeof(CompanyDO), typeof(DeviceDO));
}
private readonly IServiceProvider Services;
private readonly ISqlSugarClient Db;
/// <summary>
/// 插入
/// </summary>
/// <param name="project">工程实体</param>
/// <returns>工程实体</returns>
public Task<ProjectDO> Insert(ProjectDO project)
{
try
{
Db.Ado.BeginTran();
var group = new GroupDO
{
Id = Guid.NewGuid().ToString(),
Name = project.Name,
System = "ZL",
Type = 0,
PId = project.CompanyId
};
if (string.IsNullOrEmpty(group.Code))
{
var _MaxCode = Db.Queryable<GroupDO>().MaxAsync(x => x.Code).Result;
if (string.IsNullOrEmpty(_MaxCode))
{
group.Code = "GP00001";
}
else
{
group.Code = $"GP{(Convert.ToInt32(_MaxCode.Substring(2, 5)) + 1).ToString().PadLeft(5, '0')}";
}
}
group.CreateDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
group.Deleted = 0;
Db.Insertable<GroupDO>(group).ExecuteCommand();
project.Id = group.Id;
if (string.IsNullOrEmpty(project.Code))
{
//生成用户编号
var _MaxCode = Db.Queryable<ProjectDO>().MaxAsync(x => x.Code).Result;
if (string.IsNullOrEmpty(_MaxCode))
{
project.Code = "PJ00001";
}
else
{
project.Code = $"PJ{(Convert.ToInt32(_MaxCode.Substring(2, 5)) + 1).ToString().PadLeft(5, '0')}";
}
}
project.CreateDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
project.Deleted = 0;
Db.Insertable<ProjectDO>(project).ExecuteCommand();
Db.Ado.CommitTran();
return Task.FromResult(project);
}
catch
{
Db.Ado.RollbackTran();
throw;
}
}
/// <summary>
/// 更新
/// </summary>
/// <param name="project">工程实体</param>
/// <returns>工程实体</returns>
public Task<ProjectDO> Update(ProjectDO project)
{
try
{
Db.Ado.BeginTran();
Db.Updateable<GroupDO>(new GroupDO
{
Id = project.Id,
Name = project.Name,
System = "ZL",
Type = 0,
PId = project.CompanyId
}).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommand();
Db.Updateable<ProjectDO>(project)
.IgnoreColumns(ignoreAllNullColumns: true)
.ExecuteCommand();
Db.Ado.CommitTran();
return Task.FromResult(project);
}
catch
{
Db.Ado.RollbackTran();
throw;
}
}
/// <summary>
/// 删除
/// </summary>
/// <param name="Ids">Id数组</param>
/// <returns></returns>
public Task Delete(string[] ids)
{
try
{
Db.Ado.BeginTran();
Db.Deleteable<GroupDO>().In(ids).ExecuteCommand();
Db.Deleteable<ProjectDO>().In(ids).ExecuteCommand();
Db.Ado.CommitTran();
return Task.CompletedTask;
}
catch
{
Db.Ado.RollbackTran();
throw;
}
}
/// <summary>
/// 根据编号查询
/// </summary>
/// <param name="id">编号</param>
/// <returns>工程</returns>
public Task<ProjectDO> Get(string id)
{
var result = Db.Queryable<ProjectDO>()
.LeftJoin<CompanyDO>((a, b) => a.CompanyId == b.Id)
.Select((a, b) => new ProjectDO
{
Id = a.Id.SelectAll(),
CompanyName = b.Name
}).First();
return Task.FromResult<ProjectDO>(result);
}
/// <summary>
/// 分页查询
/// </summary>
/// <param name="page">分页对象</param>
/// <returns>分页对象</returns>
public Task<PageData<ProjectDO>> List(PageSearch<ProjectDO> page)
{
RefAsync<int> total = 0;
string _Search = page.Search!;
string _Code = page.Mode!.Code!;
string _Name = page.Mode!.Name!;
string _CompanyId = page.Mode!.CompanyId!;
string _Area = page.Mode!.Area!;
string _AddressName = page.Mode!.AddressName!;
string _CU = page.Mode!.CU!;
string _SU = page.Mode!.SU!;
string _PM = page.Mode!.PM!;
var result = Db.Queryable<ProjectDO>()
.LeftJoin<CompanyDO>((x, y) => x.CompanyId == y.Id)
.Where(x => x.Deleted == 0)
.WhereIF(!string.IsNullOrEmpty(_Search),
x => x.Name!.Contains(_Search) || x.Code!.Contains(_Search)
)
.WhereIF(!string.IsNullOrEmpty(_Code), x => x.Code!.Contains(_Code))
.WhereIF(!string.IsNullOrEmpty(_Name), x => x.Name!.Contains(_Name))
.WhereIF(!string.IsNullOrEmpty(_CompanyId), x => x.CompanyId!.Contains(_CompanyId))
.WhereIF(!string.IsNullOrEmpty(_Area), x => x.Area!.Contains(_Area))
.WhereIF(!string.IsNullOrEmpty(_AddressName), x => x.AddressName!.Contains(_AddressName))
.WhereIF(!string.IsNullOrEmpty(_CU), x => x.CU!.Contains(_CU))
.WhereIF(!string.IsNullOrEmpty(_SU), x => x.SU!.Contains(_SU))
.WhereIF(!string.IsNullOrEmpty(_PM), x => x.PM!.Contains(_PM))
.Select((x, y) => new ProjectDO
{
Id = x.Id.SelectAll(),
CompanyName = y.Name
})
.OrderBy((x) => new { NameF = "CONVERT(Name USING GBK) ASC", x.Name })
.ToPageListAsync(page.Index!, page.Size!, total).Result;
return Task.FromResult(new PageData<ProjectDO>
{
Data = result,
Total = total.Value
});
}
/// <summary>
/// 3D地图设备数量获取
/// </summary>
/// <returns></returns>
public Task<List<GeoProjectDTO>> GeoCount()
{
var Province = Db.Queryable<ProjectDO>()
.LeftJoin<DeviceDO>((x, y) => x.Id == y.ProjectId)
.Where((x,y)=>x.Deleted == 0 && y.Deleted == 0)
.GroupBy((x, y) => x.ProvinceCode)
.Select((x, y) => new GeoProjectDTO
{
Code = x.ProvinceCode,
ParentCode = "100000",
Count = SqlFunc.AggregateCount(y.ProjectId)
});
var City = Db.Queryable<ProjectDO>()
.LeftJoin<DeviceDO>((x, y) => x.Id == y.ProjectId)
.Where((x, y) => x.Deleted == 0 && y.Deleted == 0)
.GroupBy((x, y) => new { x.CityCode, x.ProvinceCode })
.Select((x, y) => new GeoProjectDTO
{
Code = x.CityCode,
ParentCode = x.ProvinceCode,
Count = SqlFunc.AggregateCount(y.ProjectId)
});
var Area = Db.Queryable<ProjectDO>()
.LeftJoin<DeviceDO>((x, y) => x.Id == y.ProjectId)
.Where((x, y) => x.Deleted == 0 && y.Deleted == 0)
.GroupBy((x, y) => new { x.AreaCode, x.CityCode })
.Select((x, y) => new GeoProjectDTO
{
Code = x.AreaCode,
ParentCode = x.CityCode,
Count = SqlFunc.AggregateCount(y.ProjectId)
});
return Task.FromResult(Db.Union(Province, City, Area).ToList());
}
}
}