Browse Source

更新新测试版本

master
wtp 2 years ago
parent
commit
ab7dfdddfe
  1. 7
      .vs/VSWorkspaceState.json
  2. 11
      docker/Dockerfile
  3. 7
      src/Dockerfile
  4. 305
      src/Znyc.Dispatching.Application/Cache/Services/CacheService.cs
  5. 67
      src/Znyc.Dispatching.Application/Cache/Services/ICacheService.cs
  6. 2
      src/Znyc.Dispatching.Application/Company/Dto/Input/RegisterInuput.cs
  7. 10
      src/Znyc.Dispatching.Application/Company/Dto/OutPut/CompanyOutput.cs
  8. 47
      src/Znyc.Dispatching.Application/Company/Services/CompanyService.cs
  9. 17
      src/Znyc.Dispatching.Application/Consumption/Dto/Output/CakeJson.cs
  10. 27
      src/Znyc.Dispatching.Application/Consumption/Dto/Output/CarTotalOutPut.cs
  11. 18
      src/Znyc.Dispatching.Application/Consumption/Dto/Output/ColumnJson.cs
  12. 69
      src/Znyc.Dispatching.Application/Consumption/Dto/Output/ConsumptionMeterOutput.cs
  13. 65
      src/Znyc.Dispatching.Application/Consumption/Dto/Output/ConsumptionOutput.cs
  14. 55
      src/Znyc.Dispatching.Application/Consumption/Dto/input/ConsumptionInput.cs
  15. 434
      src/Znyc.Dispatching.Application/Consumption/Services/ConsumptionService.cs
  16. 14
      src/Znyc.Dispatching.Application/Consumption/Services/IConsumptionService.cs
  17. 42
      src/Znyc.Dispatching.Application/Declaration/Dto/Output/WorkDeclarationOutput.cs
  18. 52
      src/Znyc.Dispatching.Application/Declaration/Services/DeclarationService.cs
  19. 13
      src/Znyc.Dispatching.Application/Declaration/Services/IDeclarationService.cs
  20. 4
      src/Znyc.Dispatching.Application/Document/Services/DocumentService.cs
  21. 34
      src/Znyc.Dispatching.Application/Employee/Services/EmployeeService.cs
  22. 8
      src/Znyc.Dispatching.Application/Job/IJobService.cs
  23. 186
      src/Znyc.Dispatching.Application/Job/JobService.cs
  24. 20
      src/Znyc.Dispatching.Application/Login/Dto/Output/TicketOut.cs
  25. 50
      src/Znyc.Dispatching.Application/Login/Services/LoginService.cs
  26. 16
      src/Znyc.Dispatching.Application/Mapper/Mapper.cs
  27. 8
      src/Znyc.Dispatching.Application/Oil/Dto/Input/OilAddInput.cs
  28. 38
      src/Znyc.Dispatching.Application/Oil/Dto/OutPut/NewCensusOilOutput.cs
  29. 45
      src/Znyc.Dispatching.Application/Oil/Dto/OutPut/OilCatTotalOutput.cs
  30. 7
      src/Znyc.Dispatching.Application/Oil/Dto/OutPut/OilOutput.cs
  31. 3
      src/Znyc.Dispatching.Application/Oil/Services/IOilService.cs
  32. 263
      src/Znyc.Dispatching.Application/Oil/Services/OilService.cs
  33. 2
      src/Znyc.Dispatching.Application/Order/Dto/Input/Sign/SignInput.cs
  34. 3
      src/Znyc.Dispatching.Application/Order/Dto/Input/StayAssign/StayAssignInput.cs
  35. 19
      src/Znyc.Dispatching.Application/Order/Dto/OutPut/DistinguishOut.cs
  36. 32
      src/Znyc.Dispatching.Application/Order/Dto/OutPut/OrderOutput.cs
  37. 785
      src/Znyc.Dispatching.Application/Order/Services/OrderService.cs
  38. 27
      src/Znyc.Dispatching.Application/OrderCheck/Dto/Input/CheckInput.cs
  39. 16
      src/Znyc.Dispatching.Application/OrderCheck/Dto/OutPut/CheckOutPut.cs
  40. 17
      src/Znyc.Dispatching.Application/PayType/Dto/Enum/PayTypeOutEnum.cs
  41. 32
      src/Znyc.Dispatching.Application/PayType/Dto/InPut/PayTypeInput.cs
  42. 30
      src/Znyc.Dispatching.Application/PayType/Dto/OutPut/PayTypeOutPut.cs
  43. 16
      src/Znyc.Dispatching.Application/PayType/Services/IPayTypeService.cs
  44. 110
      src/Znyc.Dispatching.Application/PayType/Services/PayTypeService.cs
  45. 5
      src/Znyc.Dispatching.Application/Project/Services/ProjectService.cs
  46. 13
      src/Znyc.Dispatching.Application/SpareTimeWorker/Server/ISpareTimeWorkerService.cs
  47. 35
      src/Znyc.Dispatching.Application/SpareTimeWorker/Server/SpareTimeWorkerService.cs
  48. 2
      src/Znyc.Dispatching.Application/User/Dto/Input/UserAddInput.cs
  49. 71
      src/Znyc.Dispatching.Application/User/Services/UserService.cs
  50. 300
      src/Znyc.Dispatching.Application/Vehicle/Dto/OutPut/MapMonitorDataOutput.cs
  51. 2
      src/Znyc.Dispatching.Application/Vehicle/Dto/OutPut/VehicleBaiscListOutput.cs
  52. 5
      src/Znyc.Dispatching.Application/Vehicle/Dto/OutPut/VehicleGpsOutput.cs
  53. 22
      src/Znyc.Dispatching.Application/Vehicle/Dto/OutPut/VehiclesOutPut.cs
  54. 744
      src/Znyc.Dispatching.Application/Vehicle/Services/VehicleService.cs
  55. 12
      src/Znyc.Dispatching.Application/WorkPlace/Dto/Output/WorkPlaceOutput.cs
  56. 12
      src/Znyc.Dispatching.Application/WorkPlace/Dto/input/WorkPlaceAddInput.cs
  57. 13
      src/Znyc.Dispatching.Application/WorkPlace/Dto/input/WorkPlaceListPage.cs
  58. 12
      src/Znyc.Dispatching.Application/WorkPlace/Dto/input/WorkPlaceUpdateInput.cs
  59. 42
      src/Znyc.Dispatching.Application/WorkPlace/Services/IWorkPlaceService.cs
  60. 55
      src/Znyc.Dispatching.Application/WorkPlace/Services/WorkPlaceService.cs
  61. 4
      src/Znyc.Dispatching.Application/Znyc.Dispatching.Application.csproj
  62. 881
      src/Znyc.Dispatching.Application/Znyc.Dispatching.Application.xml
  63. 2
      src/Znyc.Dispatching.Core/Config/UploadOptions.cs
  64. 28
      src/Znyc.Dispatching.Core/Config/WxOpenSetting.cs
  65. 40
      src/Znyc.Dispatching.Core/Const/CommonConst.cs
  66. 18
      src/Znyc.Dispatching.Core/Entitys/Company.cs
  67. 70
      src/Znyc.Dispatching.Core/Entitys/Consumption.cs
  68. 131
      src/Znyc.Dispatching.Core/Entitys/Declaration.cs
  69. 8
      src/Znyc.Dispatching.Core/Entitys/Oil.cs
  70. 17
      src/Znyc.Dispatching.Core/Entitys/Order.cs
  71. 31
      src/Znyc.Dispatching.Core/Entitys/OrderCheck.cs
  72. 2
      src/Znyc.Dispatching.Core/Entitys/OrderVehicle.cs
  73. 3
      src/Znyc.Dispatching.Core/Entitys/OrderVisa.cs
  74. 36
      src/Znyc.Dispatching.Core/Entitys/PayType.cs
  75. 51
      src/Znyc.Dispatching.Core/Entitys/RecordPlusOil.cs
  76. 23
      src/Znyc.Dispatching.Core/Entitys/Vehicle.cs
  77. 2
      src/Znyc.Dispatching.Core/Entitys/VehiclePerson.cs
  78. 79
      src/Znyc.Dispatching.Core/Entitys/WorkPlace.cs
  79. 42
      src/Znyc.Dispatching.Core/Entitys/WorkPlaceEmployee.cs
  80. 1
      src/Znyc.Dispatching.Core/Entitys/Yard.cs
  81. 55
      src/Znyc.Dispatching.Core/Enums/DeclarationEnum.cs
  82. 10
      src/Znyc.Dispatching.Core/Enums/OrderStatus.cs
  83. 25
      src/Znyc.Dispatching.Core/Extension/DictionaryExtensions.cs
  84. 1
      src/Znyc.Dispatching.Core/Extension/RestfulResultProvider.cs
  85. 9
      src/Znyc.Dispatching.Core/Helpers/DateTimeHelper.cs
  86. 206
      src/Znyc.Dispatching.Core/Helpers/MapHelper/MapHelper.cs
  87. 214
      src/Znyc.Dispatching.Core/Helpers/MapHelper/MapModel/GeocoderLoaction.cs
  88. 6
      src/Znyc.Dispatching.Core/Helpers/MapHelper/MapModel/PathPlanning.cs
  89. 1
      src/Znyc.Dispatching.Core/Helpers/RegexHelper.cs
  90. 16
      src/Znyc.Dispatching.Core/Helpers/TimeHelper.cs
  91. 324
      src/Znyc.Dispatching.Core/Helpers/WaterMarkHelper.cs
  92. 56
      src/Znyc.Dispatching.Core/Options/Drivings.cs
  93. 254
      src/Znyc.Dispatching.Core/Util/COSClientUtil.cs
  94. 11
      src/Znyc.Dispatching.Core/Znyc.Dispatching.Core.csproj
  95. 561
      src/Znyc.Dispatching.Core/Znyc.Dispatching.Core.xml
  96. 9
      src/Znyc.Dispatching.Core/coreconfig.Development.json
  97. 4
      src/Znyc.Dispatching.Core/coreconfig.Production.json
  98. 6
      src/Znyc.Dispatching.Core/coreconfig.Staging.json
  99. 3
      src/Znyc.Dispatching.EntityFramework.Core/dbsettings.Development.json
  100. 1
      src/Znyc.Dispatching.MongoDb.Repository/IRepositorys/IGpsRealTimeRepository.cs

7
.vs/VSWorkspaceState.json

@ -0,0 +1,7 @@
{
"ExpandedNodes": [
""
],
"SelectedNode": "\\Znyc.Dispatching.sln",
"PreviewInSolutionExplorer": false
}

11
docker/Dockerfile

@ -7,8 +7,14 @@ EXPOSE 443
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN sed -i 's@/deb.debian.org/@/mirrors.aliyun.com/@g' /etc/apt/sources.list
RUN apt-get clean
RUN apt update && apt install libgdiplus -y
RUN ln -s /usr/lib/libgdiplus.so /usr/lib/gdiplus.dll
COPY msyh.ttc /usr/share/fonts/msyh.tt
COPY msyhbd.ttc /usr/share/fonts/msyhbd.tt
COPY msyhl.ttc /usr/share/fonts/msyhl.tt
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
@ -25,9 +31,12 @@ COPY . .
WORKDIR "/src/Znyc.Dispatching.Web.Entry"
RUN dotnet build "Znyc.Dispatching.Web.Entry.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "Znyc.Dispatching.Web.Entry.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .

7
src/Dockerfile

@ -7,7 +7,14 @@ EXPOSE 443
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN sed -i 's@/deb.debian.org/@/mirrors.aliyun.com/@g' /etc/apt/sources.list
RUN apt-get clean
RUN apt update && apt install libgdiplus -y
RUN ln -s /usr/lib/libgdiplus.so /usr/lib/gdiplus.dll
COPY msyh.ttc /usr/share/fonts/msyh.tt
COPY msyhbd.ttc /usr/share/fonts/msyhbd.tt
COPY msyhl.ttc /usr/share/fonts/msyhl.tt
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src

305
src/Znyc.Dispatching.Application/Cache/Services/CacheService.cs

@ -9,6 +9,7 @@ using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Znyc.Dispatching.Common.Extensions;
using Znyc.Dispatching.Core;
using Znyc.Dispatching.Core.Cache;
using Znyc.Dispatching.Core.Entitys;
@ -35,6 +36,8 @@ namespace Znyc.Dispatching.Application
private readonly IRepository<Order> _orderRepository;
private readonly IRepository<VehiclePerson> _vehiclePersonRepository;
private readonly IRepository<User> _userRepository;
private readonly IRepository<PayType> PayTypeRepository;
public CacheService(IRedisCache redisCache,
IRepository<Vehicle> vehicleRepository,
@ -47,6 +50,7 @@ namespace Znyc.Dispatching.Application
IRepository<ProjectPerson> projectPersonRepository,
IRepository<Project> projectRepository,
IRepository<User> userRepository,
IRepository<PayType> PayTypeRepository,
IRepository<Order> orderRepository)
{
_redisCache = redisCache;
@ -61,6 +65,7 @@ namespace Znyc.Dispatching.Application
_vehiclePersonRepository = vehiclePersonRepositor;
_userRepository = userRepository;
_orderRepository = orderRepository;
this.PayTypeRepository = PayTypeRepository;
}
#region 短信验证码
@ -326,7 +331,9 @@ namespace Znyc.Dispatching.Application
StopTag = x.StopTag,
IsOpenDispatch = x.IsOpenDispatch,
IsSchedulingAddProject = x.IsSchedulingAddProject,
IsOpenVehicleType = x.IsOpenVehicleType
IsOpenVehicleType = x.IsOpenVehicleType,
IsShowDate = x.IsShowDate,
IsShowCheckType = x.IsShowCheckType
}).FirstOrDefaultAsync());
if (companyOutput.IsNotNull())
{
@ -514,7 +521,7 @@ namespace Znyc.Dispatching.Application
public async Task<List<VehicleGpsOutput>> GetVehicleByCompanyIdAsync(long companyId)
{
string cacheKey = CommonConst.CACHE_KEY_VEHICLEBYCOMPANYID + $"{companyId}";
return await _redisCache.CacheShellAsync(cacheKey, (int)TimeSpan.FromDays(60).TotalSeconds, () =>
var res = await _redisCache.CacheShellAsync(cacheKey, (int)TimeSpan.FromDays(60).TotalSeconds, () =>
_vehicleRepository
.Where(x => x.CompanyId == companyId)
.Select(x => new VehicleGpsOutput
@ -538,6 +545,12 @@ namespace Znyc.Dispatching.Application
})
.OrderBy(x => x.Sort)
.ToListAsync());
return res;
}
/// <summary>
@ -614,11 +627,19 @@ namespace Znyc.Dispatching.Application
public async Task<Vehicle> GetVehicleAsync(long vehicleId)
{
string cacheKey = CommonConst.CACHE_KEY_VEHICLE + $"{vehicleId}";
return await _redisCache.CacheShellAsync(cacheKey, (int)TimeSpan.FromDays(90).TotalSeconds,
() => _vehicleRepository.Where(x => x.Id == vehicleId).FirstOrDefaultAsync());
Vehicle vehicle = await _redisCache.GetAsync<Vehicle>(cacheKey);
if (vehicle == null)
{
vehicle = _vehicleRepository.DetachedEntities.Where(x => x.Id == vehicleId).FirstOrDefault();
if (vehicle.IsNotNull())
await _redisCache.SetAsync(cacheKey, vehicle, TimeSpan.FromDays(8));
}
return vehicle;
}
#endregion 车辆
#region 员工
@ -696,6 +717,7 @@ namespace Znyc.Dispatching.Application
await _redisCache.DelAsync(cacheKey);
}
/// <summary>
/// 获取员工列表缓存
/// </summary>
@ -734,6 +756,35 @@ namespace Znyc.Dispatching.Application
return _redisCache.Subscribe(channels);
}
/// <summary>
/// 员工分页
/// </summary>
/// <param name="employeeListPage"></param>
/// <returns></returns>
[NonAction]
public async Task SetEmployeeListPageAsync(EmployeeListPage employeeListPage,long companyId)
{
string cacheKey = string.Format(CommonConst.EMPLOYEELISTPAGE, companyId);
await _redisCache.SetAsync(cacheKey, employeeListPage, TimeSpan.FromDays(13));
}
[NonAction]
public async Task RemoveEmployeeListPageAsync(long companyId)
{
string cacheKey = string.Format(CommonConst.EMPLOYEELISTPAGE, companyId);
await _redisCache.DelAsync(cacheKey);
}
[NonAction]
public async Task<EmployeeListPage> GetEmployeeListPageAsync(long companyId)
{
string cacheKey = string.Format(CommonConst.EMPLOYEELISTPAGE, companyId);
return await _redisCache.GetAsync<EmployeeListPage>(cacheKey);
}
#endregion 员工
#region 未读警报提醒
@ -914,6 +965,198 @@ namespace Znyc.Dispatching.Application
}
#endregion
#region 设置超速车辆
/// <summary>
///
/// </summary>
/// <param name="vehicleId"></param>
/// <returns></returns>
[NonAction]
public async Task<GpsRealTime> GetSpeedAsync(long vehicleId)
{
string cacheKey = CommonConst.CACHE_KEY_VEHICLESTART + $"{vehicleId}";
return await _redisCache.GetAsync<GpsRealTime>(cacheKey);
}
/// <summary>
///
/// </summary>
/// <param name="vehicleId"></param>
/// <returns></returns>
[NonAction]
public async Task<GpsRealTime> GetStopAsync(long vehicleId)
{
string cacheKey = CommonConst.CACHE_KEY_VEHICLESTOP + $"{vehicleId}";
return await _redisCache.GetAsync<GpsRealTime>(cacheKey);
}
/// <summary>
///
/// </summary>
/// <param name="vehicleId"></param>
/// <returns></returns>
[NonAction]
public async Task DelSpeedAsync(long vehicleId)
{
string cacheKey = CommonConst.CACHE_KEY_VEHICLESTOP + $"{vehicleId}";
await _redisCache.DelAsync(cacheKey);
}
/// <summary>
///
/// </summary>
/// <param name="vehicleId"></param>
/// <returns></returns>
[NonAction]
public async Task DelStopAsync(long vehicleId)
{
string cacheKey = CommonConst.CACHE_KEY_VEHICLESTART + $"{vehicleId}";
await _redisCache.DelAsync(cacheKey);
}
/// <summary>
/// 获取设置超速车辆
/// </summary>
/// <param name="companyId"></param>
/// <returns></returns>
[NonAction]
public async Task<List<Vehicle>> GetSpeedVehicleAsync()
{
string cacheKey = CommonConst.CACHE_KEY_VEHICLE+"Speed";
return await _redisCache.CacheShellAsync(cacheKey, (int)TimeSpan.FromDays(90).TotalSeconds,
() => _vehicleRepository.Where(x => x.IsOverspeedAlarm).ToListAsync());
}
/// <summary>
/// 设置车辆缓存
/// </summary>
/// <param name="vehicle"></param>
/// <returns></returns>
[NonAction]
public async Task SetSpeedVehicleAsync(Vehicle vehicle)
{
string cacheKey = CommonConst.CACHE_KEY_SPEEDVEHICLE + $"{vehicle.Id}";
await _redisCache.SetAsync(cacheKey, vehicle, TimeSpan.FromDays(8));
}
/// <summary>
/// 删除车辆缓存
/// </summary>
/// <param name="vehicleId"></param>
/// <returns></returns>
[NonAction]
public async Task RemoveSpeedVehicleAsync(long vehicleId)
{
string cacheKey = CommonConst.CACHE_KEY_SPEEDVEHICLE + $"{vehicleId}";
await _redisCache.DelAsync(cacheKey);
}
/// <summary>
/// 获取设置离线报警车辆
/// </summary>
/// <returns></returns>
[NonAction]
public async Task<List<Vehicle>> GetoffVehiclesAsync()
{
string cacheKey = CommonConst.CACHE_KEY_VEHICLE + "Off";
return await _redisCache.CacheShellAsync(cacheKey, (int)TimeSpan.FromDays(90).TotalSeconds,
() => _vehicleRepository.Where(x => x.IsOveroffAlarm).ToListAsync());
}
/// <summary>
/// 获取是否已经推送
/// </summary>
/// <param name="vehicle"></param>
/// <returns></returns>
[NonAction]
public async Task<Vehicle> GetOffVehicleAsync(long vehicleId)
{
string cacheKey = CommonConst.CACHE_KEY_OFFVEHICLE + $"{vehicleId}";
return await _redisCache.GetAsync<Vehicle>(cacheKey);
}
/// <summary>
/// 设置推送标志
/// </summary>
/// <param name="vehicle"></param>
/// <returns></returns>
[NonAction]
public async Task SetOffVehicleAsync(Vehicle vehicle)
{
string cacheKey = CommonConst.CACHE_KEY_OFFVEHICLE + $"{vehicle.Id}";
await _redisCache.SetAsync(cacheKey, vehicle);
}
#endregion
#region
/// <summary>
///
/// </summary>
/// <param name="companyId"></param>
/// <returns></returns>
[NonAction]
public async Task<List<Vehicle>> GetStopVehicleAsync()
{
string cacheKey = CommonConst.CACHE_KEY_VEHICLE+"Stop";
return await _redisCache.CacheShellAsync(cacheKey, (int)TimeSpan.FromMinutes(1).TotalSeconds,
() => _vehicleRepository.Where(x => x.IsOverstopAlarm).ToListAsync());
}
/// <summary>
/// 删除车辆缓存
/// </summary>
/// <param name="vehicleId"></param>
/// <returns></returns>
[NonAction]
public async Task RemoveStopVehicleAsync()
{
string cacheKey = CommonConst.CACHE_KEY_VEHICLE + "Stop";
await _redisCache.DelAsync(cacheKey);
}
///// <summary>
///// 设置车辆缓存
///// </summary>
///// <param name="vehicle"></param>
///// <returns></returns>
//[NonAction]
//public async Task<bool> SetStopVehicleAsync(Vehicle vehicle)
//{
// string cacheKey = CommonConst.CACHE_KEY_VEHICLE+ "Stop";
// await _redisCache.SetAsync(cacheKey, vehicle, TimeSpan.FromDays(8));
//}
#endregion
#region 工程信息
/// <summary>
/// 同步工程列表缓存
@ -1043,7 +1286,43 @@ namespace Znyc.Dispatching.Application
#endregion
#region 开支类型
public async Task<List<PayTypeOutPut>> GetPayTypeAll(long compayId,bool isenable=true)
{
string cacheKey = string.Format(CommonConst.CACHE_KEY_PAYTYPE);
var projectOutput = await _redisCache.GetAsync<List<PayTypeOutPut>>(cacheKey);
if (projectOutput.IsNotNull())
return projectOutput;
var res = await this.PayTypeRepository.DetachedEntities
.Where(x => x.IsDeleted == false)
.WhereIf(isenable,x => x.Enable ==0)
.Where(x =>x.CompayId == 0 || x.CompayId == compayId)
.Select(x => new PayTypeOutPut()
{
ID= x.Id,
Enable = (PayTypeOutEnum)x.Enable,
TypeName = x.TypeName,
IsEdit = (PayTypeOutEnum)x.IsEdit
}).ToListAsync();
return res;
}
/// <summary>
/// 删除订单列表缓存
/// </summary>
/// <param name="companyId"></param>
/// <returns></returns>
[NonAction]
public async Task RemovePayTypeAllAsync(long companyId)
{
string cacheKey = string.Format(CommonConst.CACHE_KEY_PAYTYPE);
await _redisCache.DelAsync(cacheKey);
}
#endregion
#region 订单
@ -1123,6 +1402,19 @@ namespace Znyc.Dispatching.Application
await _redisCache.DelAsync(cacheKey);
}
/// <summary>
/// 获取车辆车组人员缓存
/// </summary>
/// <param name="vehicleId"></param>
/// <returns></returns>
[NonAction]
public async Task<List<VehiclePersonOutput>> GetVehiclePersonByIDAsync(long vehicleId)
{
string cacheKey = CommonConst.CACHE_KEY_VEHICLEPERSON + $"{vehicleId}";
return await _redisCache.GetAsync<List<VehiclePersonOutput>>(cacheKey);
}
/// <summary>
/// 获取车辆车组人员缓存
/// </summary>
@ -1146,7 +1438,6 @@ namespace Znyc.Dispatching.Application
#endregion
#region Order
/// <summary>
/// 设置缓存
@ -1183,7 +1474,7 @@ namespace Znyc.Dispatching.Application
string cacheKey = CommonConst.CACHE_KEY_GPSREALTIME + $"{orderId}";
return await _redisCache.GetAsync<GpsRealTime>(cacheKey);
}
#endregion
@ -1230,6 +1521,6 @@ namespace Znyc.Dispatching.Application
string cacheKey = CommonConst.CACHE_KEY_ORDERREAD + $"{orderId}";
return await _redisCache.ExistsAsync(cacheKey);
}
#endregion
}
}

67
src/Znyc.Dispatching.Application/Cache/Services/ICacheService.cs

@ -424,6 +424,16 @@ namespace Znyc.Dispatching.Application
Task<List<YardOutput>> GetYardListAsync(long companyId);
#endregion
#region 开支类型缓存
Task<List<PayTypeOutPut>> GetPayTypeAll(long compayId,bool isEnable);
/// <summary>
/// 删除缓存
/// </summary>
/// <param name="orderId"></param>
/// <returns></returns>
Task RemovePayTypeAllAsync(long orderId);
#endregion
#region 工程信息
/// <summary>
@ -493,6 +503,9 @@ namespace Znyc.Dispatching.Application
/// <returns></returns>
Task<List<VehiclePersonOutput>> GetVehiclePersonAsync(long vehicleId);
Task<List<VehiclePersonOutput>> GetVehiclePersonByIDAsync(long vehicleId);
#endregion
#region Order
@ -550,5 +563,59 @@ namespace Znyc.Dispatching.Application
/// <returns></returns>
Task<bool> ExistsOrderReadAsync(long orderId);
#endregion
#region 超速车辆
/// <summary>
/// 获取所有公司超速车辆缓存
/// </summary>
/// <returns></returns>
Task<List<Vehicle>> GetSpeedVehicleAsync();
/// <summary>
/// 获取所有公司超速车辆缓存
/// </summary>
/// <returns></returns>
Task<List<Vehicle>> GetoffVehiclesAsync();
/// <summary>
/// 获取所有公司超速车辆缓存
/// </summary>
/// <returns></returns>
Task<Vehicle> GetOffVehicleAsync(long id);
Task SetOffVehicleAsync(Vehicle vehicle);
Task<List<Vehicle>> GetStopVehicleAsync();
Task RemoveStopVehicleAsync();
Task SetSpeedVehicleAsync(Vehicle vehicle);
Task RemoveSpeedVehicleAsync(long vehicleId);
Task<GpsRealTime> GetStopAsync(long ID);
Task<GpsRealTime> GetSpeedAsync(long ID);
Task SetEmployeeListPageAsync(EmployeeListPage employeeListPage, long companyId);
Task RemoveEmployeeListPageAsync(long companyId);
Task<EmployeeListPage> GetEmployeeListPageAsync(long companyId);
Task DelStopAsync(long ID);
Task DelSpeedAsync(long ID);
#endregion
}
}

2
src/Znyc.Dispatching.Application/Company/Dto/Input/RegisterInuput.cs

@ -16,7 +16,7 @@ namespace Znyc.Dispatching.Application
/// <summary>
/// 用户名
/// </summary>
[MaxLength(8, ErrorMessage = "用户名不得超过8个字")]
public string UserName { get; set; }
/// <summary>

10
src/Znyc.Dispatching.Application/Company/Dto/OutPut/CompanyOutput.cs

@ -77,5 +77,15 @@ namespace Znyc.Dispatching.Application
public bool IsOpenVehicleType { get; set; }
#endregion
///// <summary>
///// 是否启用安全检查
///// </summary>
public bool IsShowCheckType { get; set; }
public bool IsShowDate { get; set; }
}
}

47
src/Znyc.Dispatching.Application/Company/Services/CompanyService.cs

@ -109,7 +109,7 @@ namespace Znyc.Dispatching.Application
}
/// <summary>
/// 平台入驻
/// 平台入驻
/// </summary>
/// <param name="registerInuput"></param>
/// <returns></returns>
@ -119,8 +119,7 @@ namespace Znyc.Dispatching.Application
[Route("api/v1/register")]
public async Task RegisterAsync(RegisterInuput registerInuput)
{
var jsCode2JsonResult =
await SnsApi.JsCode2JsonAsync(_weixinSettingOptions.WxOpenAppId, _weixinSettingOptions.WxOpenAppSecret,
var jsCode2JsonResult = await SnsApi.JsCode2JsonAsync(_weixinSettingOptions.WxOpenAppId, _weixinSettingOptions.WxOpenAppSecret,
registerInuput.JsCode);
if (jsCode2JsonResult.IsNull())
{
@ -141,10 +140,11 @@ namespace Znyc.Dispatching.Application
}
}
System.Console.WriteLine(registerInuput.UserName.Length.ToString());
System.Console.WriteLine(registerInuput.UserName);
var entity = registerInuput.Adapt<Company>();
entity.Status = (int)CommonStatusEnum.REVIEW;
entity.ContactPerson = registerInuput.UserName ?? "企业管理员";
entity.ContactPerson = registerInuput.UserName.ToString() ?? "企业管理员";
entity.ContactPhone = registerInuput.Phone;
entity.CompanyLogo = CommonConst.DEFAULT_AVATARURL;
entity.StopTag = CommonConst.DEFAULT_STAPTAG;
@ -303,5 +303,42 @@ namespace Znyc.Dispatching.Application
await _repository.UpdateNowAsync(company);
await _cacheService.RemoveCompanyAsync(_userManager.CompanyId);
}
/// <summary>
///
/// </summary>
/// <returns></returns>
[HttpPut]
[Route("api/v1/company/showcheck")]
public async Task UpdateShowcheckAsync()
{
var company = await _repository.FirstOrDefaultAsync(x => x.Id == _userManager.CompanyId);
if (company.IsNull())
{
throw Oops.Bah("公司不存在");
}
company.IsShowCheckType = !company.IsShowCheckType;
await _repository.UpdateNowAsync(company);
await _cacheService.RemoveCompanyAsync(_userManager.CompanyId);
}
/// <summary>
///
/// </summary>
/// <returns></returns>
[HttpPut]
[Route("api/v1/company/showDate")]
public async Task UpdateShowDateAsync()
{
var company = await _repository.FirstOrDefaultAsync(x => x.Id == _userManager.CompanyId);
if (company.IsNull())
{
throw Oops.Bah("公司不存在");
}
company.IsShowDate = !company.IsShowDate;
await _repository.UpdateNowAsync(company);
await _cacheService.RemoveCompanyAsync(_userManager.CompanyId);
}
}
}

17
src/Znyc.Dispatching.Application/Consumption/Dto/Output/CakeJson.cs

@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Znyc.Dispatching.Application
{
public class CakeJson
{
public string name { get; set; }
public string CarNo { get; set; }
public decimal value { get; set; }
}
}

27
src/Znyc.Dispatching.Application/Consumption/Dto/Output/CarTotalOutPut.cs

@ -0,0 +1,27 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Znyc.Dispatching.Application
{
public class CarTotalOutPut
{
public List<CarTotalOutPutInfo> CarTotalOutPutInfo { get; set; }
[Column(TypeName = "decimal(10, 2)")]
public decimal Total { get; set; }
}
public class CarTotalOutPutInfo
{
public long CarNo { get; set; }
public String CarName { get; set; }
[Column(TypeName = "decimal(10, 2)")]
public decimal Money { get; set; }
}
}

18
src/Znyc.Dispatching.Application/Consumption/Dto/Output/ColumnJson.cs

@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Znyc.Dispatching.Application
{
public class ColumnJson
{
public List<string> categories { get; set; } = new List<string>();
public List<decimal> data { get; set; } = new List<decimal>();
}
}

69
src/Znyc.Dispatching.Application/Consumption/Dto/Output/ConsumptionMeterOutput.cs

@ -0,0 +1,69 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Znyc.Dispatching.Application
{
public class ConsumptionMeterOutput
{
/// <summary>
/// 累计花费
/// </summary>
public string Cumulative { get; set; }
/// <summary>
/// 平均日花费
/// </summary>
public string Average { get; set; }
///// <summary>
///// 饼状图json
///// </summary>
//public string CakeJson { get; set; }
///// <summary>
///// 柱状图json
///// </summary>
//public string ColumnJson { get; set; }
/// <summary>
/// 饼状图
/// </summary>
public List<Expenditure> Expenditures { get; set; }
/// <summary>
/// 柱状图
/// </summary>
public ColumnJson ColumnJson { get; set; }
}
public class Expenditure
{
/// <summary>
/// 类型名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 车辆编号
/// </summary>
public string CarNo { get; set; }
/// <summary>
/// 花费金额
/// </summary>
[Column(TypeName = "decimal(10, 2)")]
public decimal Value { get; set; }
}
}

65
src/Znyc.Dispatching.Application/Consumption/Dto/Output/ConsumptionOutput.cs

@ -0,0 +1,65 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Znyc.Dispatching.Application
{
public class ConsumptionOutput
{
/// <summary>
/// ID
/// </summary>
public long ID { get; set; }
/// <summary>
/// 时间
/// </summary>
public DateTime CreatedTime { get; set; }
/// <summary>
/// 车辆编号
/// </summary>
public string CarNo { get; set; }
/// <summary>
/// 开支类别ID
/// </summary>
public long PayTyepID { get; set; }
/// <summary>
/// 开支类别
/// </summary>
public string PayTyepName { get; set; }
/// <summary>
/// 车ID
/// </summary>
public long CarID { get; set; }
/// <summary>
/// 车名称
/// </summary>
public string CarName { get; set; }
/// <summary>
/// 支付途径
/// </summary>
public string PayChannel { get; set; }
/// <summary>
/// 金额
/// </summary>
public decimal Money { get; set; }
/// <summary>
/// 备注
/// </summary>
public string Remarks { get; set; }
}
}

55
src/Znyc.Dispatching.Application/Consumption/Dto/input/ConsumptionInput.cs

@ -0,0 +1,55 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Znyc.Dispatching.Application
{
public class ConsumptionInput
{
public long? ID { get; set; }
/// <summary>
/// 开支类别ID
/// </summary>
public long PayTyepID { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime CreatedTime { get; set; }
/// <summary>
/// 开支类别
/// </summary>
public string PayTyepName { get; set; }
/// <summary>
/// 车ID
/// </summary>
public List<long> CarIDs { get; set; }
/// <summary>
/// 车牌号
/// </summary>
public string CarName { get; set; }
/// <summary>
/// 支付途径
/// </summary>
public string PayChannel { get; set; }
/// <summary>
/// 金额
/// </summary>
public decimal Money { get; set; }
/// <summary>
/// 备注
/// </summary>
public string Remarks { get; set; }
}
}

434
src/Znyc.Dispatching.Application/Consumption/Services/ConsumptionService.cs

@ -0,0 +1,434 @@
using Furion.DatabaseAccessor;
using Furion.DependencyInjection;
using Furion.DynamicApiController;
using Furion.FriendlyException;
using Mapster;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.Json;
using System.Threading.Tasks;
using Yitter.IdGenerator;
using Znyc.Dispatching.Common.Extensions;
using Znyc.Dispatching.Core;
using Znyc.Dispatching.Core.Entitys;
using Znyc.Dispatching.Core.Extension;
using Znyc.Dispatching.Core.Helpers;
namespace Znyc.Dispatching.Application
{
/// <summary>
/// 开支记录
/// </summary>
[ApiDescriptionSettings(Name = "consumption", Order = 33)]
public class ConsumptionService : IConsumptionService, IDynamicApiController, ITransient
{
private readonly IUserManager userManager;
private readonly ICacheService cacheService;
private readonly IRepository<Consumption> repository;
private readonly IRepository<Vehicle> vehicleRepository;
public ConsumptionService(IRepository<Consumption> repository,
IUserManager userManager,
ICacheService cacheService, IRepository<Vehicle> vehicleRepository)
{
this.repository = repository;
this.userManager = userManager;
this.cacheService = cacheService;
this.vehicleRepository = vehicleRepository;
}
/// <summary>
/// 开支记录分页查询
/// </summary>
/// <param name="currentPage"></param>
/// <param name="pageSize"></param>
/// <param name="type"></param>
/// <param name="CarNo" ></param>
/// <param name="startTime"></param>
/// <param name="endTime"></param>
/// <returns></returns>
[HttpGet]
[Route("api/v1/consumption/search")]
public async Task<PagedList<ConsumptionOutput>> PageAsync(DateTime startTime, DateTime endTime, int? type, long? CarNo, int currentPage = 1, int pageSize = 10)
{
var res = from x in this.repository.AsQueryable()
.WhereIf(type.IsNotNull(), x => x.PayTyepID == type)
.Where(x => x.IsDeleted == false)
.Where(x => x.CreatedTime >= startTime && x.CreatedTime < endTime)
.Where(x => x.CompayID == this.userManager.CompanyId)
.OrderByDescending(x => x.CreatedTime)
join d in this.vehicleRepository.AsQueryable() on x.CarID equals d.Id into results
from d in results.DefaultIfEmpty()
select new
{
x.ProductID,
x.Id,
x.PayTyepID,
x.CarID,
x.CarName,
CarNo = x.CarNo == "全部" ? x.CarNo : d.VehicleCode,
x.CompayID,
x.CreatedTime,
x.CreatedUserId,
x.IsDeleted,
x.PayChannel,
x.PayTyepName,
x.Remarks,
x.ModifiedTime,
x.ModifiedUserId,
Money = x.Money
};
var page = res.ToPagedList(currentPage, pageSize);
var respage = page.Adapt<PagedList<ConsumptionOutput>>();
return respage;
}
/// <summary>
/// 开支记录分页查询
/// </summary>
/// <param name="currentPage"></param>
/// <param name="pageSize"></param>
/// <param name="type"></param>
/// <param name="CarNo" ></param>
/// <param name="startTime"></param>
/// <param name="endTime"></param>
/// <returns></returns>
[HttpGet]
[Route("api/v1/consumption/Info")]
public async Task<PagedList<ConsumptionOutput>> PageInfoAsync(DateTime startTime, DateTime endTime, int? type, long? CarNo, int currentPage = 1, int pageSize = 10)
{
//统计所有车辆数
var conut = await this.vehicleRepository.DetachedEntities
.Where(x => x.IsDeleted == false)
.Where(x => x.CompanyId == this.userManager.CompanyId).ToListAsync();
//获取当前车牌号
var cars = await this.vehicleRepository.DetachedEntities
.Where(x => x.IsDeleted == false)
.Where(x => x.Id == CarNo)
.Where(x => x.CompanyId == this.userManager.CompanyId).FirstOrDefaultAsync();
var res = from x in this.repository.AsQueryable()
.WhereIf(type.IsNotNull(), x => x.PayTyepID == type)
.Where(x => x.IsDeleted == false)
.Where(x => x.CarID == CarNo || x.CarNo == "全部")
.Where(x => x.CreatedTime >= startTime && x.CreatedTime < endTime)
.Where(x => x.CompayID == this.userManager.CompanyId)
.OrderByDescending(x => x.CreatedTime)
join d in this.vehicleRepository.AsQueryable() on x.CarID equals d.Id into results
from d in results.DefaultIfEmpty()
select new
{
x.ProductID,
x.Id,
x.PayTyepID,
x.CarID,
x.CarName,
CarNo = x.CarNo == "全部" ? cars.VehicleCode: d.VehicleCode,
x.CompayID,
x.CreatedTime,
x.CreatedUserId,
x.IsDeleted,
x.PayChannel,
x.PayTyepName,
x.Remarks,
x.ModifiedTime,
x.ModifiedUserId,
Money = x.CarNo =="全部" ? (x.Money /conut.Count) :x.Money
};
var page = res.ToPagedList(currentPage, pageSize);
var respage = page.Adapt<PagedList<ConsumptionOutput>>();
return respage;
}
/// <summary>
/// 开支统计
/// </summary>
/// <param name="startTime"></param>
/// <param name="endTime"></param>
/// <returns></returns>
[HttpGet]
[Route("api/v1/consumption/Statistics")]
public async Task<ConsumptionMeterOutput> Statistics(DateTime startTime, DateTime endTime)
{
List<Expenditure> expenditures = new List<Expenditure>();
ColumnJson columnJson = new ColumnJson();
List<CakeJson> cakeJsons = new List<CakeJson>();
var allCar = await this.vehicleRepository
.Where(x => x.IsDeleted == false)
.Where(x => x.CompanyId == this.userManager.CompanyId).ToListAsync();
var Day = TimeHelper.ExecDateDay(startTime,endTime);
var reslq = from x in this.repository.AsQueryable()
.Where(x => x.IsDeleted == false)
.Where(x => x.CompayID == this.userManager.CompanyId)
.Where(x => x.CreatedTime >= startTime && x.CreatedTime < endTime)
.OrderByDescending(x => x.CreatedTime)
join d in this.vehicleRepository.AsQueryable() on x.CarID equals d.Id into results
from d in results.DefaultIfEmpty()
select new
{
x.ProductID,
x.Id,
x.PayTyepID,
x.CarID,
x.CarName,
CarNo = x.CarNo == "全部" ? x.CarNo : d.VehicleCode,
x.CompayID,
x.CreatedTime,
x.CreatedUserId,
x.IsDeleted,
x.PayChannel,
x.PayTyepName,
x.Remarks,
x.ModifiedTime,
x.ModifiedUserId,
Money = x.Money
};
var res = reslq.ToList();
var sum = res.Sum(x => x.Money);
var Avg = Math.Round(sum / Day, 2);
var PayTyeps = res.GroupBy(x => x.PayTyepID).ToList();
foreach (var item in PayTyeps)
{
expenditures.Add(new Expenditure()
{
Name = res.Where(x =>x.PayTyepID == item.Key).FirstOrDefault().PayTyepName,
Value = res.Where(x => x.PayTyepID == item.Key).Sum((x) => x.Money)
});
}
foreach (var item in allCar)
{
//设置平摊
columnJson.categories.Add(item.VehicleCode);
var CarSum = res.Where(x => x.CarNo == item.VehicleCode).Sum(x =>x.Money);
var CarAvg = res.Where(x =>x.PayChannel.Contains("平摊")).Sum(x => x.Money)/allCar.Count;
columnJson.data.Add(Math.Round(CarSum + CarAvg,2));
}
return new ConsumptionMeterOutput()
{
Cumulative = sum.ToString(),
Average = Avg.ToString(),
ColumnJson = columnJson,
Expenditures = expenditures
};
}
/// <summary>
/// 车辆分组开支统计
/// </summary>
/// <param name="startTime"></param>
/// <param name="endTime"></param>
/// <returns></returns>
[HttpGet]
[Route("api/v1/consumption/CarTotal")]
public async Task<CarTotalOutPut> CarTotal(DateTime startTime, DateTime endTime)
{
CarTotalOutPut carTotalOutPut = new CarTotalOutPut();
var reslq = from x in this.repository.AsQueryable()
.Where(x => x.IsDeleted == false)
.Where(x => x.CompayID == this.userManager.CompanyId)
.Where(x => x.CreatedTime >= startTime && x.CreatedTime < endTime)
.OrderByDescending(x => x.CreatedTime)
join d in this.vehicleRepository.AsQueryable() on x.CarID equals d.Id into results
from d in results.DefaultIfEmpty()
select new
{
x.ProductID,
x.Id,
x.PayTyepID,
x.CarID,
x.CarName,
CarNo = d.VehicleCode,
x.CompayID,
x.CreatedTime,
x.CreatedUserId,
x.IsDeleted,
x.PayChannel,
x.PayTyepName,
x.Remarks,
x.ModifiedTime,
x.ModifiedUserId,
Money = x.Money
};
//var carmoney = reslq.GroupBy(x => x.CarID, x => x.Money);
var allCar = await this.vehicleRepository
.Where(x => x.IsDeleted == false)
.Where(x => x.CompanyId == this.userManager.CompanyId).ToListAsync();
List<CarTotalOutPutInfo> grres = new List<CarTotalOutPutInfo>();
var JunMoney = reslq.Where(x =>x.PayChannel == "平摊").Sum(x=>x.Money)/allCar.Count;
foreach (var item in allCar)
{
var money = reslq.Where(x => x.CarID == item.Id).Where(x=>x.PayChannel != "平摊").Sum(x => x.Money);
grres.Add(new CarTotalOutPutInfo()
{
CarNo = item.Id,
CarName = item.VehicleCode,
Money = Math.Round(JunMoney + money, 2)
});
}
return new CarTotalOutPut()
{
Total = (int)grres.Sum(x => x.Money),
CarTotalOutPutInfo = grres
};
}
/// <summary>
/// 新增开支
/// </summary>
/// <param name="consumptionInput"></param>
/// <returns></returns>
[HttpPost]
[Route("api/v1/consumption/InsertAsync")]
public async Task<bool> InsertAsync(ConsumptionInput consumptionInput)
{
var result = false;
long ProductID = YitIdHelper.NextId();
//平摊
if (consumptionInput.PayChannel == "平摊")
{
var res = await this.vehicleRepository
.Where(x => x.IsDeleted == false)
.Where(x => x.CompanyId == this.userManager.CompanyId).ToListAsync();
if (res.Count == 0)
return result;
consumptionInput.CarIDs.Add(1);
}
var avg = consumptionInput.Money / consumptionInput.CarIDs.Count;
foreach (var item in consumptionInput.CarIDs)
{
var map = consumptionInput.Adapt<Consumption>();
Console.WriteLine("车辆ID" + item);
var carRes = await this.cacheService.GetVehicleAsync(item);
if (carRes.IsNull())
{
map.CarID = item;
map.CarName = "平摊";
map.CarNo = "全部";
}
else
{
map.CarName = carRes.VehiclePlate;
map.CarNo = carRes.VehicleCode;
map.CarID = item;
}
map.Money = avg;
map.ProductID = ProductID;
map.CreatedTime = consumptionInput.CreatedTime;
map.CreatedUserId = this.userManager.CompanyId;
map.CompayID = this.userManager.CompanyId;
var res = await this.repository.InsertNowAsync(map);
if (res.IsNotNull())
result = true;
}
return result;
}
/// <summary>
/// 更新开支
/// </summary>
/// <param name="payTypeInput"></param>
/// <returns></returns>
[HttpPut]
[Route("api/v1/consumption/UpdateAsync")]
public async Task<bool> UpdateAsync(ConsumptionInput payTypeInput)
{
bool result = false;
if (payTypeInput.ID.IsNull())
throw Oops.Oh($"编辑缺少ID!");
var carres = await this.vehicleRepository
.Where(x => x.IsDeleted == false)
.Where(x => x.CompanyId == this.userManager.CompanyId).ToListAsync();
//平摊
if (payTypeInput.PayChannel == "平摊")
{
if (carres.Count == 0)
return result;
var map = payTypeInput.Adapt<Consumption>();
map.CarID = 1;
map.CarName = "平摊";
map.CompayID = this.userManager.CompanyId;
map.ModifiedUserId = this.userManager.UserId;
map.ModifiedTime = System.DateTime.Now;
var resUp = await this.repository.UpdateNowAsync(map);
if (resUp.IsNotNull())
result = true;
return result;
}
for (int i = 0; i < payTypeInput.CarIDs.Count; i++)
{
var carRes = carres.Where(x => x.Id == payTypeInput.CarIDs[i]).FirstOrDefault();
if (carRes.IsNull())
throw Oops.Oh("车辆信息不存在!");
var map = payTypeInput.Adapt<Consumption>();
map.CarID = payTypeInput.CarIDs[i];
map.CarName = carRes.VehiclePlate;
map.CarNo = carRes.VehicleCode;
map.CompayID = this.userManager.CompanyId;
map.ModifiedUserId = this.userManager.UserId;
map.ModifiedTime = System.DateTime.Now;
var resUp = await this.repository.UpdateNowAsync(map);
if (resUp.IsNotNull())
result = true;
}
return result;
}
/// <summary>
/// 删除油耗信息
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpDelete]
[Route("api/v1/consumption/{id}")]
public async Task DeleteAsync(long id)
{
var oil = await this.repository.FirstOrDefaultAsync(x => x.Id == id);
if (oil.IsNull())
throw Oops.Oh("暂无该信息");
oil.IsDeleted = true;
var result = await this.repository.UpdateNowAsync(oil);
if (result.IsNull())
{
throw Oops.Oh("删除油耗信息失败");
}
}
}
}

14
src/Znyc.Dispatching.Application/Consumption/Services/IConsumptionService.cs

@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Znyc.Dispatching.Application
{
public interface IConsumptionService
{
}
}

42
src/Znyc.Dispatching.Application/Declaration/Dto/Output/WorkDeclarationOutput.cs

@ -0,0 +1,42 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Znyc.Dispatching.Application
{
public class WorkDeclarationOutput
{
/// <summary>
/// 公司名称
/// </summary>
public long CompanyName { get; set; }
/// <summary>
/// 车型
/// </summary>
public int CarType { get; set; }
/// <summary>
/// 到场时间
/// </summary>
public DateTime ArriveDate { get; set; }
/// <summary>
/// 报单信息
/// </summary>
public string Info { get; set; }
/// <summary>
/// 报单员
/// </summary>
public string ReportSheetName { get; set; }
/// <summary>
/// 联系电话
/// </summary>
public string Phone { get; set; }
}
}

52
src/Znyc.Dispatching.Application/Declaration/Services/DeclarationService.cs

@ -0,0 +1,52 @@
using Furion.DatabaseAccessor;
using Furion.DependencyInjection;
using Furion.DynamicApiController;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Znyc.Dispatching.Core;
using Znyc.Dispatching.Core.Entitys;
namespace Znyc.Dispatching.Application
{
public class DeclarationService : IDeclarationService, IDynamicApiController, ITransient
{
private readonly IUserManager userManager;
private readonly IRepository<Declaration> repository;
public DeclarationService(IRepository<Declaration> repository,
IUserManager userManager)
{
this.repository = repository;
this.userManager = userManager;
}
#region 工地方
///// <summary>
///// 工地端报单列表
///// </summary>
///// <param name="status"></param>
///// <param name="currentPage"></param>
///// <param name="pageSize"></param>
///// <param name="key"></param>
///// <returns></returns>
//[HttpGet]
//[Route("api/v1/admin/declaration/search")]
//public async Task<WorkDeclarationOutput> PageAsync(int status = 0, int currentPage = 1, int pageSize = 10, string key = "")
//{
// //var compay = this,
// //var res = this.repository.Where(x =>x.State == status).Where(x =>x.CompanyId == user)
//}
#endregion
}
}

13
src/Znyc.Dispatching.Application/Declaration/Services/IDeclarationService.cs

@ -0,0 +1,13 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Znyc.Dispatching.Application
{
public interface IDeclarationService
{
}
}

4
src/Znyc.Dispatching.Application/Document/Services/DocumentService.cs

@ -46,6 +46,10 @@ namespace Znyc.Dispatching.Application
["secretId"] = _uploadInfoOptions.secretId,
["secretKey"] = _uploadInfoOptions.secretKey
};
foreach (var item in values)
{
Console.WriteLine(item.Value);
}
Dictionary<string, object> credential = STSClient.genCredential(values);
foreach (KeyValuePair<string, object> kvp in credential)
{

34
src/Znyc.Dispatching.Application/Employee/Services/EmployeeService.cs

@ -78,6 +78,12 @@ namespace Znyc.Dispatching.Application
public async Task<EmployeeListPage> PageAsync([Required] int currentPage, [Required] int pageSize, [FromQuery] int status, [Required] int roleId, [FromQuery] string orderby, [FromQuery] string key = "")
{
//var employeeListPage = await _cacheService.GetEmployeeListPageAsync(_userManager.CompanyId);
//if (employeeListPage.IsNotNull())
// return employeeListPage;
//查询角色表看看是否是业务员 -- 如果不是,提示不可以进行邀请工地人员
var employees = (await _cacheService.GetEmployeeListAsync(_userManager.CompanyId))
.WhereIf(status != 0, x => x.Status == status)
.WhereIf(roleId > 0, x => x.RoleId == roleId)
@ -85,7 +91,10 @@ namespace Znyc.Dispatching.Application
x => new long[] { (long)RoleStatusEnum.CrewMembers, (long)RoleStatusEnum.Outside,
(long)RoleStatusEnum.PartTimeSalesman,(long)RoleStatusEnum.Salesman }.Contains(x.RoleId))
.WhereIf(key.IsNotEmptyOrNull(), x => x.EmployeeName.Contains(key) || x.EmployeePhone.Contains(key))
.Adapt<List<EmployeeListOutput>>();
.OrderBy(x => x.EmployeeName)
.Skip((currentPage - 1) * pageSize)
.Take(pageSize);
//.Adapt<List<EmployeeListOutput>>();
var employeeOutputs = new List<EmployeeListOutputs>();
if (orderby == "role")
@ -93,10 +102,11 @@ namespace Znyc.Dispatching.Application
employees = employees.OrderBy(x => x.RoleName).ToList();
foreach (var INDEX_STRING in ROLEINDEX_STRINGS)
{
var res = employees.Where(x => StringHelper.GetStringFirstSpell(x.RoleName) == INDEX_STRING);
employeeOutputs.Add(new EmployeeListOutputs()
{
Char = INDEX_STRING,
List = employees.Where(x => StringHelper.GetStringFirstSpell(x.RoleName) == INDEX_STRING).ToList()
List = res.Adapt<List<EmployeeListOutput>>()
});
};
}
@ -106,18 +116,20 @@ namespace Znyc.Dispatching.Application
foreach (var INDEX_STRING in INDEX_STRINGS)
{
var res = employees.Where(x => StringHelper.GetStringFirstSpell(x.EmployeeName) == INDEX_STRING);
employeeOutputs.Add(new EmployeeListOutputs()
{
Char = INDEX_STRING,
List = employees.Where(x => StringHelper.GetStringFirstSpell(x.EmployeeName) == INDEX_STRING).ToList()
List = res.Adapt<List<EmployeeListOutput>>()
});
};
}
var data = new EmployeeListPage()
{
EmployeeList = employeeOutputs,
Total = employees.Count
Total = employees.Count()
};
await _cacheService.SetEmployeeListPageAsync(data, _userManager.CompanyId);
return data;
}
@ -129,7 +141,13 @@ namespace Znyc.Dispatching.Application
[Route("api/v1/employee/{id}")]
public async Task<EmployeeOutput> GetByIdAsync(long id)
{
return await _cacheService.GetEmployeeAsync(id);
var res = await _cacheService.GetEmployeeAsync(id);
if(res == null)
{
var reares = await this._repository.DetachedEntities.FirstOrDefaultAsync(x =>x.Id== id);
return reares.Adapt<EmployeeOutput>();
}
return res;
}
/// <summary>
@ -181,6 +199,7 @@ namespace Znyc.Dispatching.Application
RoleId = employeeAdd.RoleId,
});
//清除员工列表Cache
await _cacheService.RemoveEmployeeListPageAsync(_userManager.CompanyId);
await _cacheService.RemoveEmployeeListAsync(_userManager.CompanyId);
return employee.Entity.UserId;
}
@ -237,8 +256,8 @@ namespace Znyc.Dispatching.Application
await _cacheService.RemoveEmployeeListAsync(employee2.CompanyId);
}
}
//分页列表清除
await _cacheService.RemoveEmployeeListPageAsync(_userManager.CompanyId);
//清除员工Cache
await _cacheService.RemoveEmployeeAsync(employee.Id);
//清除用户Cache
@ -294,6 +313,7 @@ namespace Znyc.Dispatching.Application
.FirstOrDefaultAsync(x => x.Id == id && x.CompanyId == _userManager.CompanyId);
employee.IsDeleted = true;
await _repository.UpdateNowAsync(employee);
await _cacheService.RemoveEmployeeListPageAsync(_userManager.CompanyId);
await _cacheService.RemoveCacheByUserIdAsync(employee.UserId);
await _cacheService.RemoveEmployeeAsync(employee.Id);
await _cacheService.RemoveEmployeeListAsync(_userManager.CompanyId);

8
src/Znyc.Dispatching.Application/Job/IJobService.cs

@ -1,4 +1,5 @@
using System.Threading.Tasks;
using Furion.TaskScheduler;
using System.Threading.Tasks;
namespace Dilon.Core.Service
{
@ -6,5 +7,10 @@ namespace Dilon.Core.Service
{
Task SyncOrderStatusAsync();
Task SyncVehicleOff();
Task Syncspeeding();
}
}

186
src/Znyc.Dispatching.Application/Job/JobService.cs

@ -1,6 +1,8 @@
using Furion.DatabaseAccessor;
using Furion;
using Furion.DatabaseAccessor;
using Furion.DependencyInjection;
using Furion.DynamicApiController;
using Furion.TaskScheduler;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
@ -8,7 +10,10 @@ using Microsoft.Extensions.Options;
using Newtonsoft.Json;
using Senparc.Weixin.MP.AdvancedAPIs;
using Senparc.Weixin.MP.AdvancedAPIs.TemplateMessage;
using Senparc.Weixin.MP.CommonAPIs;
using Senparc.Weixin.MP.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Znyc.Dispatching.Application;
@ -16,6 +21,7 @@ using Znyc.Dispatching.Core;
using Znyc.Dispatching.Core.Entitys;
using Znyc.Dispatching.Core.Extension;
using Znyc.Dispatching.Core.Helpers;
using Znyc.Dispatching.MongoDb.Repository.Collection;
using Znyc.Dispatching.MongoDb.Repository.Repositorys;
using Znyc.Dispatching.WeChat.Core.CommonService.TemplateMessage;
@ -25,7 +31,7 @@ namespace Dilon.Core.Service
/// 任务调度服务
/// </summary>
[ApiDescriptionSettings(Name = "job", Order = 40)]
public class JobService : IJobService, IDynamicApiController, IScoped
public class JobService : IJobService, IDynamicApiController, IScoped, ISpareTimeWorker
{
private readonly IRepository<Role> _roleRepository;
private readonly IVehicleService _vehicleService;
@ -40,6 +46,8 @@ namespace Dilon.Core.Service
private readonly WeixinSettingOptions _weixinSettingOptions;
private readonly IRepository<Yard> _yardRepository;
private readonly IRepository<Company> _companyRepository;
private readonly IRepository<User> _userRepository;
public JobService(
IRepository<Role> roleRepository,
IVehicleService vehicleService,
@ -53,6 +61,7 @@ namespace Dilon.Core.Service
IRepository<WxUserRelation> wxUserRelationRepository,
IOptions<WeixinSettingOptions> weixinSettingOptions,
IRepository<Yard> yardRepository,
IRepository<User> userRepository,
IRepository<Company> companyRepository)
{
_roleRepository = roleRepository;
@ -68,9 +77,167 @@ namespace Dilon.Core.Service
_weixinSettingOptions = weixinSettingOptions.Value;
_yardRepository = yardRepository;
_companyRepository = companyRepository;
_userRepository = userRepository;
}
/// <summary>
/// 停留提醒
/// </summary>
/// <returns></returns>
[HttpGet]
[AllowAnonymous]
public async Task Syncstoping()
{
//查询设置了停留提醒 +
List<Vehicle> vehicleList = await _cacheService.GetStopVehicleAsync();
//var wxUser = _wxUserRelationRepository.Where(x => x.WxOfficialOpenId.IsNotNull()).ToArray();
vehicleList.ForEach(async v =>
{
//获取车辆启动时间
var stop = await _cacheService.GetStopAsync(v.Id);
//获取车辆停留时间
var start = await _cacheService.GetSpeedAsync(v.Id);
if (stop.IsNotNull() && start.IsNotNull())
{
var vehicle = await _cacheService.GetVehicleAsync(v.Id);
var actual = (stop.GpsTime - start.GpsTime).TotalMinutes;
var isPush = vehicle.Overstop < (stop.GpsTime - start.GpsTime).TotalMinutes;
if (isPush)
{
var userss = from e in _employeeRepository.Where(x =>x.CompanyId == v.CompanyId && x.RoleId == 1005 && x.Status == (int)CommonStatusEnum.ENABLE)
.AsQueryable()
join u in _wxUserRelationRepository.Where(x =>x.IsDeleted == false).AsQueryable()
on e.UserId equals u.UserId
select new NoticeOutput
{
OpenId = u.WxOfficialOpenId
};
foreach (NoticeOutput i in userss.ToList())
{
Console.WriteLine(i.OpenId);
var time = (start.GpsTime - stop.GpsTime).TotalMinutes.ToString()+"分";
if (!string.IsNullOrEmpty(i.OpenId.Trim()))
{
var url = "pages/callPhone/callPhone?phone=" + vehicle.DriverPhone;
WeixinTemplate_Stop data = new WeixinTemplate_Stop("车辆停留提醒", start.VehicleCode, stop.GpsTime.ToString(), start.GpsTime.ToString(), time, stop.Address, "点击联系司机", url);
TemplateModel_MiniProgram miniProgram = new TemplateModel_MiniProgram();
miniProgram.appid = _weixinSettingOptions.WxOpenAppId;
miniProgram.pagepath = url;
AccessTokenResult accessTokenResult = await CommonApi.GetTokenAsync(App.Configuration["SenparcWeixinSetting:WeixinAppId"], App.Configuration["SenparcWeixinSetting:WeixinAppSecret"]);
SendTemplateMessageResult result = await TemplateApi.SendTemplateMessageAsync(_weixinSettingOptions.WeixinAppId, i.OpenId, data.TemplateId, "", data, miniProgram);
};
}
}
await _cacheService.DelStopAsync(v.Id);
}
await _cacheService.DelSpeedAsync(v.Id);
});
}
/// <summary>
/// 超速提醒
/// </summary>
/// <returns></returns>
[HttpGet]
[AllowAnonymous]
public async Task Syncspeeding()
{
//查询设置了超速的车辆 +
List<Vehicle> vehicleList = await _cacheService.GetSpeedVehicleAsync();
var vehicleGpss = await _gpsRealTimeRepository.GetGpsRealTimeListByVehicleId(vehicleList.Select(x => x.Id).ToList());
var time = DateTime.Now.AddSeconds(-40);
vehicleGpss.ForEach(async vehicle =>
{
Console.WriteLine("超速提醒:" + vehicle.VehiclePlate);
var car = await _cacheService.GetVehicleAsync(vehicle.VehicleId);
if (car?.Overspeed <= vehicle.Speed && vehicle?.GpsTime.AddHours(8) > time)
{
var userss = from e in _employeeRepository.Where(x =>
x.CompanyId == vehicle.CompanyId && x.RoleId == 1005 && x.Status == (int)CommonStatusEnum.ENABLE)
.AsQueryable()
join u in _userRepository.Where(x => x.Status == CommonStatusEnum.ENABLE).AsQueryable()
on e.UserId equals u.Id
select new NoticeOutput
{
OpenId = u.OpenId
};
foreach (NoticeOutput i in userss.ToList())
{
var wxUser = _wxUserRelationRepository.Where(x => x.OpenId == i.OpenId).FirstOrDefault();
if (wxUser.IsNotNull() && !string.IsNullOrEmpty(wxUser.WxOfficialOpenId.Trim()))
{
var url = "pages/callPhone/callPhone?phone=" + vehicle.DriverPhone;
WeixinTemplate_Speed data = new WeixinTemplate_Speed("车辆超速提醒", vehicle.GpsTime.ToString(), vehicle.Address, vehicle.VehicleCode, "点击联系司机", url);
AccessTokenResult accessTokenResult = await CommonApi.GetTokenAsync(App.Configuration["SenparcWeixinSetting:WeixinAppId"], App.Configuration["SenparcWeixinSetting:WeixinAppSecret"]);
SendTemplateMessageResult result = await TemplateApi.SendTemplateMessageAsync(_weixinSettingOptions.WeixinAppId,
wxUser.WxOfficialOpenId, data.TemplateId, "", data);
};
}
}
});
}
#region Order
/// <summary>
/// 离线设置提醒
/// </summary>
/// <returns></returns>
[HttpGet]
[AllowAnonymous]
public async Task SyncVehicleOff()
{
List<Vehicle> vehicleList = await _cacheService.GetoffVehiclesAsync();
vehicleList.ForEach(async x => {
var vehicle = await _cacheService.GetOffVehicleAsync(x.Id);
if(vehicle == null)
{
var car = await _gpsRealTimeRepository.GetGpsRealTimeByVehicleId(x.Id);
if (car != null)
{
var userss = await _employeeRepository.Where(x => x.CompanyId == car.CompanyId && (x.RoleId == 1005 || x.RoleId == 1007 || x.RoleId == 1002) && x.Status == (int)CommonStatusEnum.ENABLE).ToListAsync();
userss.ForEach(async x => {
var users = await _userRepository.Where(u => u.Id == x.UserId).ToListAsync();
foreach (var user in users)
{
var wxUser = _wxUserRelationRepository.Where(x => x.OpenId == user.OpenId).FirstOrDefault();
if (wxUser.IsNotNull() && !string.IsNullOrEmpty(wxUser.WxOfficialOpenId.Trim()))
{
var url = "pages/callPhone/callPhone?phone=" + car.DriverPhone;
WeixinTemplate_AssignOrder data = new WeixinTemplate_AssignOrder("车辆离线提醒", car.VehicleCode, DateTime.Now.ToString(), car.Address, "尊敬的用户,你的车辆于" + DateTime.Now + ",地点:" + car.Address + "已离线:编号" + car.VehicleCode, "", null, "PCzqF_bIWdxCwPnS-Xhk47qQPWaxNv75L9oedwsD44c");
AccessTokenResult accessTokenResult = await CommonApi.GetTokenAsync(App.Configuration["SenparcWeixinSetting:WeixinAppId"], App.Configuration["SenparcWeixinSetting:WeixinAppSecret"]);
SendTemplateMessageResult result = await TemplateApi.SendTemplateMessageAsync(_weixinSettingOptions.WeixinAppId,
wxUser.WxOfficialOpenId, data.TemplateId, "", data);
};
await _cacheService.SetOffVehicleAsync(vehicle);
}
});
}
}
});
}
#region Order
[HttpGet]
[AllowAnonymous]
@ -100,7 +267,7 @@ namespace Dilon.Core.Service
var orderContent = arriveOrder.OrderContent.Length > 45 ? HtmlHelper.ReplaceHtmlMark(arriveOrder.OrderContent.Substring(0, 45)) + "..." : HtmlHelper.ReplaceHtmlMark(arriveOrder.OrderContent) + "...";
//管理员
var adminUserIds = await _employeeRepository.DetachedEntities.Where(x => x.CompanyId == arriveOrder.CompanyId && x.RoleId == (int)RoleStatusEnum.Administrator && x.Status == 1 && !x.IsDeleted).Select(x => x.UserId).ToListAsync();
var adminUserIds = await _employeeRepository.DetachedEntities.Where(x => x.CompanyId == arriveOrder.CompanyId && x.UserId != arriveOrder.AssignUserId && x.RoleId == (int)RoleStatusEnum.Administrator && x.Status == 1 && !x.IsDeleted).Select(x => x.UserId).ToListAsync();
//派单人
adminUserIds.Add(arriveOrder.AssignUserId);
//获取订单所有车组人员信息
@ -148,7 +315,7 @@ namespace Dilon.Core.Service
var orderContent = appearOrder.OrderContent.Length > 45 ? HtmlHelper.ReplaceHtmlMark(appearOrder.OrderContent.Substring(0, 45)) + "..." : HtmlHelper.ReplaceHtmlMark(appearOrder.OrderContent) + "...";
//管理员
var adminUserIds = await _employeeRepository.DetachedEntities.Where(x => x.CompanyId == appearOrder.CompanyId && x.RoleId == (int)RoleStatusEnum.Administrator && x.Status == 1 && !x.IsDeleted).Select(x => x.UserId).ToListAsync();
var adminUserIds = await _employeeRepository.DetachedEntities.Where(x => x.CompanyId == appearOrder.CompanyId && x.UserId != appearOrder.AssignUserId && x.RoleId == (int)RoleStatusEnum.Administrator && x.Status == 1 && !x.IsDeleted).Select(x => x.UserId).ToListAsync();
//派单人
adminUserIds.Add(appearOrder.AssignUserId);
//获取订单所有车组人员信息
@ -192,7 +359,7 @@ namespace Dilon.Core.Service
var orderContent = signeOrder.OrderContent.Length > 45 ? HtmlHelper.ReplaceHtmlMark(signeOrder.OrderContent.Substring(0, 45)) + "..." : HtmlHelper.ReplaceHtmlMark(signeOrder.OrderContent) + "...";
//管理员
var adminUserIds = await _employeeRepository.DetachedEntities.Where(x => x.CompanyId == signeOrder.CompanyId && x.RoleId == (int)RoleStatusEnum.Administrator && x.Status == 1 && !x.IsDeleted).Select(x => x.UserId).ToListAsync();
var adminUserIds = await _employeeRepository.DetachedEntities.Where(x => x.CompanyId == signeOrder.CompanyId && x.UserId != signeOrder.AssignUserId && x.RoleId == (int)RoleStatusEnum.Administrator && x.Status == 1 && !x.IsDeleted).Select(x => x.UserId).ToListAsync();
//派单人
adminUserIds.Add(signeOrder.AssignUserId);
//获取订单所有车组人员信息
@ -204,7 +371,7 @@ namespace Dilon.Core.Service
var wxAdminUser = _wxUserRelationRepository.Where(x => x.UserId == adminUserId).FirstOrDefault();
if (wxAdminUser.IsNotNull() && wxAdminUser.WxOfficialOpenId.IsNotNull())
{
var data = new WeixinTemplate_AssignOrder("完工返回提醒", signeOrder.ProjectName, "出车任务", orderContent, signeOrder.ArriveDate.ToString("yyyy -MM-dd HH:mm:ss"), $"[{signeOrder.VehicleCode}]号车,{orderVehicleDriverName},{orderVehicleCrewsName}已完工返回");
var data = new WeixinTemplate_AssignOrder("离开返回提醒", signeOrder.ProjectName, "出车任务", orderContent, signeOrder.ArriveDate.ToString("yyyy -MM-dd HH:mm:ss"), $"[{signeOrder.VehicleCode}]号车,{orderVehicleDriverName},{orderVehicleCrewsName}已离开");
TemplateModel_MiniProgram miniProgram = new TemplateModel_MiniProgram();
miniProgram.appid = _weixinSettingOptions.WxOpenAppId;
miniProgram.pagepath = $"pages/taskInfo/taskInfo?id={signeOrder.Id}&isDriver=false&type=2";
@ -243,7 +410,7 @@ namespace Dilon.Core.Service
var orderContent = homeOrder.OrderContent.Length > 45 ? HtmlHelper.ReplaceHtmlMark(homeOrder.OrderContent.Substring(0, 45)) + "..." : HtmlHelper.ReplaceHtmlMark(homeOrder.OrderContent) + "...";
//管理员
var adminUserIds = await _employeeRepository.DetachedEntities.Where(x => x.CompanyId == homeOrder.CompanyId && x.RoleId == (int)RoleStatusEnum.Administrator && x.Status == 1 && !x.IsDeleted).Select(x => x.UserId).ToListAsync();
var adminUserIds = await _employeeRepository.DetachedEntities.Where(x => x.CompanyId == homeOrder.CompanyId && x.UserId != homeOrder.AssignUserId && x.RoleId == (int)RoleStatusEnum.Administrator && x.Status == 1 && !x.IsDeleted).Select(x => x.UserId).ToListAsync();
//派单人
adminUserIds.Add(homeOrder.AssignUserId);
//获取订单所有车组人员信息
@ -273,5 +440,8 @@ namespace Dilon.Core.Service
}
}
#endregion
}
}

20
src/Znyc.Dispatching.Application/Login/Dto/Output/TicketOut.cs

@ -0,0 +1,20 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Znyc.Dispatching.Application.Login
{
public class TicketOut
{
public int Id { get; set; }
public string Name { get; set; }
/// <summary>
/// Ticket值
/// </summary>
public string TicketStr { get; set; }
}
}

50
src/Znyc.Dispatching.Application/Login/Services/LoginService.cs

@ -11,10 +11,12 @@ using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using System.Collections.Generic;
using System.Linq;
using Newtonsoft.Json;
using System.Threading.Tasks;
using Znyc.Dispatching.Core;
using Znyc.Dispatching.Core.Entitys;
using Znyc.Dispatching.Core.Extension;
using Znyc.Dispatching.WeChat.Core;
using Znyc.Dispatching.WeChat.Core.CommonService.TemplateMessage.WxOpen;
namespace Znyc.Dispatching.Application
@ -31,6 +33,7 @@ namespace Znyc.Dispatching.Application
private readonly IUserManager _userManager;
private readonly IRepository<User> _userRepository;
private readonly WeixinSettingOptions _weixinSettingOptions;
private readonly WxOpenSetting wxOpenSetting;
private readonly IWxUserRelationService _wxUserRelationService;
private readonly ILogger<LoginService> _logger;
private readonly IRoleMenuService _roleMenuService;
@ -46,6 +49,7 @@ namespace Znyc.Dispatching.Application
IWxUserRelationService wxUserRelationService,
ILogger<LoginService> logger,
IMapper mapper,
IOptions<WxOpenSetting> wxOpenSetting,
IRoleMenuService roleMenuService
)
{
@ -59,6 +63,7 @@ namespace Znyc.Dispatching.Application
_logger = logger;
_mapper = mapper;
_roleMenuService = roleMenuService;
this.wxOpenSetting = wxOpenSetting.Value;
}
/// <summary>
@ -115,7 +120,7 @@ namespace Znyc.Dispatching.Application
if (company.IsNull())
{
throw Oops.Bah("").StatusCode(4012);
throw Oops.Bah("公司错误,请联系管理员").StatusCode(4012);
}
var employee = employeeList.Find(x => x.CompanyId == company.Id);
if (employee.Status == (int)CommonStatusEnum.DISABLE)
@ -125,6 +130,7 @@ namespace Znyc.Dispatching.Application
//用户中间表
await _wxUserRelationService.AddOrUpdateAsync(user.Id, jsCode2JsonResult.openid, jsCode2JsonResult.unionid);
// 生成 token
string accessToken = JWTEncryption.Encrypt(new Dictionary<string, object>
{
@ -178,5 +184,47 @@ namespace Znyc.Dispatching.Application
{
await _cacheService.RemoveCacheByUserIdAsync(_userManager.UserId);
}
/// <summary>
/// 获取Ticket
/// </summary>
/// <param name="loginInput"></param>
/// <returns></returns>
[HttpPost]
[UnitOfWork]
[AllowAnonymous]
[Route("api/v1/WxScanCode")]
public async Task<TicketOut> WxScanCode()
{
var jsCode2JsonResult = await SnsApi.GetToken("wx35b31406546e5430", "67bced4e3f1120e7aaf2b84fb8a281d5");
TicketArg ticketArg = new TicketArg();
ticketArg.expire_seconds = 604800;
ticketArg.action_name = "QR_SCENE";
ticketArg.action_info = new Action_Info() { scene = new Scene() { scene_id = 10 } };
var ticket = await SnsApi.GetTicket(jsCode2JsonResult.Access_Token, ticketArg);
return ticket;
}
/// <summary>
/// 获取Ticket
/// </summary>
/// <param name="loginInput"></param>
/// <returns></returns>
[HttpGet]
[UnitOfWork]
[AllowAnonymous]
[Route("api/v1/WxScanCodeCallback")]
public async Task<string> WxScanCodeCallback(string token, string timestamp, string nonce)
{
return "";
}
}
}

16
src/Znyc.Dispatching.Application/Mapper/Mapper.cs

@ -1,4 +1,5 @@
using Mapster;
using System.Collections.Generic;
using Znyc.Dispatching.Core;
using Znyc.Dispatching.Core.Entitys;
@ -16,6 +17,21 @@ namespace Znyc.Dispatching.Application.Mapper
config.ForType<OrderVisa, OrderVisaOutput>()
.Map(dest => dest.Picture, src => CommonConst.DEFAULT_ORDERVISA + src.Picture);
config.ForType<OrderCheck, CheckOutPut>()
.Map(dest => dest.Picture, src => CommonConst.DEFAULT_ORDERVISA + src.Picture);
#region 支付类型
config.ForType<PayType, PayTypeInput>()
.Map(dest => dest.Enable, s =>s.Enable);
config.ForType<PayTypeInput, PayType>()
.Map(dest => dest.Enable, s => s.Enable);
#endregion
#region 开支登记
config.ForType<PagedList<Consumption>, PagedList<ConsumptionOutput>>();
config.ForType<PagedList<ConsumptionOutput>, PagedList<Consumption>>();
#endregion
}
}

8
src/Znyc.Dispatching.Application/Oil/Dto/Input/OilAddInput.cs

@ -41,11 +41,17 @@ namespace Znyc.Dispatching.Application
/// <summary>
/// 油单价
/// </summary>
public decimal OilPrice { get; set; }
public decimal? OilPrice { get; set; } = 0;
/// <summary>
/// 金额
/// </summary>
public decimal AmountMoney { get; set; }
/// <summary>
/// 备注
/// </summary>
public string Remarks { get; set; }
}
}

38
src/Znyc.Dispatching.Application/Oil/Dto/OutPut/NewCensusOilOutput.cs

@ -0,0 +1,38 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Znyc.Dispatching.Application
{
public class NewCensusOilOutput
{
/// <summary>
/// 累计花费
/// </summary>
public string Cumulative { get; set; }
/// <summary>
/// 平均日花费
/// </summary>
public string Average { get; set; }
/// <summary>
/// 柱状图
/// </summary>
public ColumnJson ColumnJson { get; set; }
/// <summary>
/// 饼图
/// </summary>
public List<Expenditure> Expenditures { get; set; }
/// <summary>
/// 四大标签
/// </summary>
public List<Expenditure> FourExpenditures { get; set; }
}
}

45
src/Znyc.Dispatching.Application/Oil/Dto/OutPut/OilCatTotalOutput.cs

@ -0,0 +1,45 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Znyc.Dispatching.Application
{
public class OilCatTotalOutput
{
public List<OilCatOutputInfo> OilCatOutputInfos { get; set; }
public int Total { get; set; }
}
public class OilCatOutputInfo
{
public long ID { get; set; }
/// <summary>
/// 车牌号
/// </summary>
public string CarName { get; set; }
/// <summary>
/// 工作时长
/// </summary>
public string WoekAmount { get; set; }
/// <summary>
/// 时长
/// </summary>
public int TimeAmount { get; set; }
/// <summary>
/// 油耗
/// </summary>
public int OilPtion { get; set; }
/// <summary>
/// 油耗比
/// </summary>
public string OilThan { get; set; }
}
}

7
src/Znyc.Dispatching.Application/Oil/Dto/OutPut/OilOutput.cs

@ -32,11 +32,16 @@
/// <summary>
/// 油单价
/// </summary>
public decimal OilPrice { get; set; }
public decimal? OilPrice { get; set; } = 0;
/// <summary>
/// 金额
/// </summary>
public decimal AmountMoney { get; set; }
/// <summary>
/// 备注
/// </summary>
public string Remarks { get; set; }
}
}

3
src/Znyc.Dispatching.Application/Oil/Services/IOilService.cs

@ -13,12 +13,13 @@ namespace Znyc.Dispatching.Application
/// <summary>
/// 加油记录
/// </summary>
/// <param name="VehicleId"></param>
/// <param name="currentPage"></param>
/// <param name="pageSize"></param>
/// <param name="startTime"></param>
/// <param name="endTime"></param>
/// <returns></returns>
Task<PagedList<OilOutput>> PlusOilPageAsync(int currentPage, int pageSize, DateTime startTime, DateTime endTime);
Task<PagedList<OilOutput>> PlusOilPageAsync(long? VehicleId, int currentPage, int pageSize, DateTime startTime, DateTime endTime);
/// <summary>
/// 油耗统计

263
src/Znyc.Dispatching.Application/Oil/Services/OilService.cs

@ -13,6 +13,9 @@ using System.Threading.Tasks;
using Znyc.Dispatching.Core;
using Znyc.Dispatching.Core.Entitys;
using Znyc.Dispatching.Core.Extension;
using Znyc.Dispatching.Core.Helpers;
using System.Text.Json;
using Znyc.Dispatching.Common.Extensions;
namespace Znyc.Dispatching.Application
{
@ -24,12 +27,15 @@ namespace Znyc.Dispatching.Application
{
private readonly IRepository<Oil> _repository;
private readonly IUserManager _userManager;
private readonly IRepository<Vehicle> vehicleRepository;
public OilService(
IRepository<Oil> repository,
IRepository<Vehicle> vehicleRepository,
IUserManager userManager
)
{
this.vehicleRepository = vehicleRepository;
_repository = repository;
_userManager = userManager;
}
@ -38,6 +44,7 @@ namespace Znyc.Dispatching.Application
/// <summary>
/// 加油记录
/// </summary>
/// <param name="VehicleId"></param>
/// <param name="currentPage"></param>
/// <param name="pageSize"></param>
/// <param name="startTime"></param>
@ -45,26 +52,27 @@ namespace Znyc.Dispatching.Application
/// <returns></returns>
[HttpGet]
[Route("api/v1/plus/oils/search")]
public async Task<PagedList<OilOutput>> PlusOilPageAsync(int currentPage, int pageSize, DateTime startTime, DateTime endTime)
public async Task<PagedList<OilOutput>> PlusOilPageAsync(long? VehicleId, int currentPage, int pageSize, DateTime startTime, DateTime endTime)
{
var oils = (await _repository.DetachedEntities
var res = from x in _repository.AsQueryable()
.Where(x => x.CompanyId == _userManager.CompanyId && x.IsDeleted == false)
.Where(startTime.IsNotNull(), x => x.CreatedTime >= startTime)
.Where(endTime.IsNotNull(), x => x.CreatedTime <= endTime)
.OrderByDescending(x => x.PlusOilDate)
.Select(x => new OilOutput()
{
Id = x.Id,
VehicleId = x.VehicleId,
PlusOilDate = x.PlusOilDate.ToString("yyyy-MM-dd"),
VehicleCode = x.VehicleCode,
PlusOilOrder = x.PlusOilOrder,
PlusOilAmount = x.PlusOilAmount,
OilPrice = x.OilPrice,
AmountMoney = x.AmountMoney
})
.ToPagedListAsync(currentPage, pageSize)).Adapt<PagedList<OilOutput>>();
return oils;
.WhereIf(VehicleId.IsNotNull(), x => x.VehicleId == VehicleId)
join d in this.vehicleRepository.AsQueryable() on x.VehicleId equals d.Id
select new OilOutput
{
Id = x.Id,
VehicleId = x.VehicleId,
PlusOilDate = x.PlusOilDate.ToString("yyyy-MM-dd"),
VehicleCode = d.VehicleCode,
PlusOilOrder = x.PlusOilOrder,
PlusOilAmount = x.PlusOilAmount,
OilPrice = x.OilPrice,
AmountMoney = x.AmountMoney
};
return res.ToPagedList(currentPage, pageSize).Adapt<PagedList<OilOutput>>(); ;
}
/// <summary>
@ -83,7 +91,7 @@ namespace Znyc.Dispatching.Application
SUM(PlusOilAmount)AS PlusOilAmount
FROM dc_oil WHERE CompanyId = @companyId AND IsDeleted=FALSE AND VehicleId > 0 And PlusOilDate >= @startTime And PlusOilDate <= @endTime
GROUP BY VehicleId,VehicleCode
ORDER BY PlusOilCount DESC,PlusOilAmount DESC,AmountMoney DESC"
ORDER BY PlusOilCount DESC,PlusOilAmount DESC,AmountMoney D ESC"
.SqlQueryAsync<CensusOilListOutput>(new { companyId = _userManager.CompanyId, startTime = startTime, endTime = endTime });
CensusOilOutput data = new CensusOilOutput() { CensusOilList = oilList };
foreach (var item in oilList)
@ -103,9 +111,23 @@ namespace Znyc.Dispatching.Application
[Route("api/v1/oil/{id}")]
public async Task<OilOutput> GetByIdAsync(long id)
{
Oil oil = await _repository.DetachedEntities.FirstOrDefaultAsync(x => x.Id == id);
var result = oil.Adapt<OilOutput>();
result.PlusOilDate = oil.PlusOilDate.ToString("yyyy-MM-dd");
var oil = from x in _repository.AsQueryable()
.Where(x => x.CompanyId == _userManager.CompanyId && x.IsDeleted == false)
.Where(x => x.Id == id)
join d in this.vehicleRepository.AsQueryable() on x.VehicleId equals d.Id
select new Oil
{
Id = x.Id,
VehicleId = x.VehicleId,
PlusOilDate = x.PlusOilDate,
VehicleCode = d.VehicleCode,
PlusOilOrder = x.PlusOilOrder,
PlusOilAmount = x.PlusOilAmount,
OilPrice = x.OilPrice,
AmountMoney = x.AmountMoney
};
var result = oil.SingleOrDefault().Adapt<OilOutput>();
result.PlusOilDate = result.PlusOilDate.ToString("yyyy-MM-dd");
return result;
}
@ -165,5 +187,206 @@ namespace Znyc.Dispatching.Application
}
}
/// <summary>
/// 油耗统计
/// </summary>
/// <param name="startTime"></param>
/// <param name="endTime"></param>
/// <returns></returns>
[HttpGet]
[Route("api/v1/newcensus/oils/search")]
public async Task<NewCensusOilOutput> NewOilCensusPageAsync(DateTime startTime, DateTime endTime)
{
List<Expenditure> expenditures = new List<Expenditure>();
List<Expenditure> fourExpenditures = new List<Expenditure>();
List<CakeJson> cakeJsons = new List<CakeJson>();
var Day = TimeHelper.ExecDateDay(startTime, endTime);
var reslq = from x in _repository.AsQueryable()
.Where(x => x.IsDeleted == false)
.Where(x => x.CompanyId == _userManager.CompanyId)
.Where(x => x.CreatedTime >= startTime && x.CreatedTime < endTime)
join d in this.vehicleRepository.AsQueryable() on x.VehicleId equals d.Id
select new Oil
{
VehicleCode = d.VehicleCode,
VehicleId = x.VehicleId,
AmountMoney = x.AmountMoney,
PlusOilAmount = x.PlusOilAmount,
CompanyId = x.CompanyId,
CreatedTime = x.CreatedTime,
CreatedUserId = x.CreatedUserId,
Id = x.Id,
IsDeleted = x.IsDeleted,
ModifiedTime = x.ModifiedTime,
ModifiedUserId = x.ModifiedUserId,
OilPrice = x.OilPrice,
PlusOilDate = x.PlusOilDate,
PlusOilOrder = x.PlusOilOrder,
Remarks = x.Remarks
};
var res = reslq.ToList();
//var res = await _repository.DetachedEntities
// .Where(x => x.IsDeleted == false)
// .Where(x => x.CompanyId == _userManager.CompanyId)
// .Where(x => x.CreatedTime >= startTime && x.CreatedTime < endTime)
// .OrderByDescending(x => x.CreatedTime).Select(x => new Oil { AmountMoney = x.AmountMoney, PlusOilAmount = x.PlusOilAmount, VehicleCode = x.VehicleCode, }).ToListAsync();
var sum = res.Sum(x => x.AmountMoney);
var Avg = Math.Round(sum / Day, 2);
ColumnJson columnJson = new ColumnJson();
var carsinfo = res.GroupBy(x => x.VehicleCode,x => new { x.AmountMoney,x.PlusOilAmount }).ToList();
if (carsinfo.Count() == 0)
return new NewCensusOilOutput();
var cars = carsinfo.Select(x => x.Key);
foreach (var item in cars)
{
var car = res.Where(x => x.VehicleCode == item);
expenditures.Add(new Expenditure()
{
CarNo = item,
Name = car.FirstOrDefault().VehicleCode,
Value = car.Sum(x =>(Convert.ToInt32(x.PlusOilAmount)))
});
columnJson.categories.Add(car.FirstOrDefault().VehicleCode);
columnJson.data.Add(car.Sum(x => x.AmountMoney));
}
//油量最高得车
var TopAmoCode = carsinfo.OrderByDescending(x => x.Sum(x => Convert.ToInt32(x.PlusOilAmount))).Select(x => new { VehicleCode = x.Key, PlusOilAmount = x.Sum(x => Convert.ToInt32(x.PlusOilAmount)) }).FirstOrDefault();
if (TopAmoCode.IsNotNull())
{
fourExpenditures.Add(new Expenditure()
{
Name = "油量最高",
CarNo = TopAmoCode.VehicleCode,
Value = TopAmoCode.PlusOilAmount,
});
}
//油量最低得车
var DowAmoCode = carsinfo.OrderBy(x => x.Sum(x => Convert.ToInt32(x.PlusOilAmount))).Select(x => new { VehicleCode = x.Key, PlusOilAmount = x.Sum(x => Convert.ToInt32(x.PlusOilAmount)) }).FirstOrDefault();
if (DowAmoCode.IsNotNull())
{
fourExpenditures.Add(new Expenditure()
{
Name = "油量最低",
CarNo = DowAmoCode.VehicleCode,
Value = DowAmoCode.PlusOilAmount,
});
}
//油费最高得车
var TopMonCode = carsinfo.OrderByDescending(x => x.Sum(x => x.AmountMoney)).Select(x => new { VehicleCode = x.Key, AmountMoney = x.Sum(x => x.AmountMoney) }).FirstOrDefault();
if (TopMonCode.IsNotNull())
{
fourExpenditures.Add(new Expenditure()
{
Name = "油费最高",
CarNo = TopMonCode.VehicleCode,
Value = TopMonCode.AmountMoney,
});
}
//邮费最低的车
var DowMonCode = carsinfo.OrderBy(x =>x.Sum(x=>x.AmountMoney)).Select(x => new { VehicleCode = x.Key, AmountMoney = x.Sum(x => x.AmountMoney) }).FirstOrDefault();
if (DowMonCode.IsNotNull())
{
fourExpenditures.Add(new Expenditure()
{
Name = "油费最低",
CarNo = DowMonCode.VehicleCode,
Value = DowMonCode.AmountMoney,
});
}
return new NewCensusOilOutput()
{
Average = Avg.ToString(),
Cumulative = sum.ToString(),
ColumnJson = columnJson,
Expenditures = expenditures,
FourExpenditures = fourExpenditures
};
}
/// <summary>
/// 车辆分组统计
/// </summary>
/// <param name="startTime"></param>
/// <param name="endTime"></param>
/// <returns></returns>
[HttpGet]
[Route("api/v1/newcensus/OilsTotal")]
public async Task<OilCatTotalOutput> CarTotal(DateTime startTime, DateTime endTime)
{
OilCatTotalOutput carTotalOutPut = new OilCatTotalOutput();
//var res = await _repository.DetachedEntities
// .Where(x => x.IsDeleted == false)
// .Where(x => x.CompanyId == _userManager.CompanyId)
// .Where(x => x.CreatedTime >= startTime && x.CreatedTime < endTime)
// .OrderByDescending(x => x.CreatedTime).ToListAsync();
var reslq = from x in _repository.AsQueryable()
.Where(x => x.IsDeleted == false)
.Where(x => x.CompanyId == _userManager.CompanyId)
.Where(x => x.CreatedTime >= startTime && x.CreatedTime < endTime)
join d in this.vehicleRepository.AsQueryable() on x.VehicleId equals d.Id
select new Oil
{
VehicleCode = d.VehicleCode,
VehicleId = x.VehicleId,
AmountMoney = x.AmountMoney,
PlusOilAmount = x.PlusOilAmount,
CompanyId = x.CompanyId,
CreatedTime = x.CreatedTime,
CreatedUserId = x.CreatedUserId,
Id = x.Id,
IsDeleted = x.IsDeleted,
ModifiedTime = x.ModifiedTime,
ModifiedUserId = x.ModifiedUserId,
OilPrice = x.OilPrice,
PlusOilDate = x.PlusOilDate,
PlusOilOrder = x.PlusOilOrder,
Remarks = x.Remarks
};
var res = reslq.ToList();
var grres = res.GroupBy(x => x.VehicleId, x => new { x.PlusOilAmount,x.VehicleCode }).Select(x => new OilCatOutputInfo() {
ID = x.Key,
CarName = x.First().VehicleCode,
OilPtion = x.Sum(x=> Convert.ToInt32(x.PlusOilAmount)),
WoekAmount = "0",
OilThan = "0",
TimeAmount = 0
}) .ToList();
return new OilCatTotalOutput()
{
Total = grres.Sum(x => x.OilPtion),
OilCatOutputInfos = grres
};
}
}
}

2
src/Znyc.Dispatching.Application/Order/Dto/Input/Sign/SignInput.cs

@ -19,5 +19,7 @@ namespace Znyc.Dispatching.Application
/// </summary>
[Required(ErrorMessage = "请上传签证单")]
public string Picture { get; set; }
}
}

3
src/Znyc.Dispatching.Application/Order/Dto/Input/StayAssign/StayAssignInput.cs

@ -8,6 +8,7 @@ namespace Znyc.Dispatching.Application
/// </summary>
public class StayAssignInput
{
[Required(ErrorMessage = "缺少ID")]
public long Id { get; set; }
/// <summary>
@ -18,7 +19,7 @@ namespace Znyc.Dispatching.Application
/// <summary>
/// 工程名称
/// </summary>
public string ProjectName { get; set; }
public string? ProjectName { get; set; }
/// <summary>
/// 业务员Id

19
src/Znyc.Dispatching.Application/Order/Dto/OutPut/DistinguishOut.cs

@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Znyc.Dispatching.Application
{
public class DistinguishOut
{
public long vehicleTypeID { get; set; }
public string vehicleName { get; set; }
public DateTime dateTime { get; set; }
}
}

32
src/Znyc.Dispatching.Application/Order/Dto/OutPut/OrderOutput.cs

@ -161,6 +161,15 @@ namespace Znyc.Dispatching.Application
/// </summary>
public List<OrderVisaOutput> OrderVisas { get; set; }
/// <summary>
/// 安检明细
/// </summary>
public List<CheckOutPut> OrderCheck { get; set; }
/// <summary>
/// 是否外请车
/// </summary>
@ -205,6 +214,29 @@ namespace Znyc.Dispatching.Application
/// </summary>
public DateTime? ArriveHomeDate { get; set; }
//泵送时长
public string Time { get; set; }
/// <summary>
/// 到达时间
/// </summary>
public DateTime ArriveTime { get; set; }
/// <summary>
/// 小时
/// </summary>
public string Hour { get; set; }
/// <summary>
/// 分钟
/// </summary>
public string Minute { get; set; }
/// <summary>
/// 方量
/// </summary>
public string Party { get; set; }
}
/// <summary>

785
src/Znyc.Dispatching.Application/Order/Services/OrderService.cs

File diff suppressed because it is too large

27
src/Znyc.Dispatching.Application/OrderCheck/Dto/Input/CheckInput.cs

@ -0,0 +1,27 @@
using Microsoft.AspNetCore.Http;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Znyc.Dispatching.Application
{
public class CheckInput
{
/// <summary>
/// OrderId
/// </summary>
public long OrderId { get; set; }
/// <summary>
/// 图片路径
/// </summary>
public string location { get; set; }
public IFormFile FormFiles { get; set; }
}
}

16
src/Znyc.Dispatching.Application/OrderCheck/Dto/OutPut/CheckOutPut.cs

@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Znyc.Dispatching.Application
{
public class CheckOutPut
{
/// <summary>
/// 图片路径
/// </summary>
public string Picture { get; set; }
}
}

17
src/Znyc.Dispatching.Application/PayType/Dto/Enum/PayTypeOutEnum.cs

@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Znyc.Dispatching.Application
{
/// <summary>
///
/// </summary>
public enum PayTypeOutEnum
{
= 0,
= 1,
}
}

32
src/Znyc.Dispatching.Application/PayType/Dto/InPut/PayTypeInput.cs

@ -0,0 +1,32 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Znyc.Dispatching.Application
{
public class PayTypeInput
{
/// <summary>
/// 类别ID
/// </summary>
public long? ID { get; set; }
/// <summary>
/// 开支类别
/// </summary>
public string TypeName { get; set; }
/// <summary>
/// 是否启用
/// </summary>
public PayTypeOutEnum Enable { get; set; }
}
}

30
src/Znyc.Dispatching.Application/PayType/Dto/OutPut/PayTypeOutPut.cs

@ -0,0 +1,30 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Znyc.Dispatching.Application
{
public class PayTypeOutPut
{
/// <summary>
/// 类比ID 修改删除用
/// </summary>
public long ID { get; set; }
/// <summary>
/// 开支类别
/// </summary>
public string TypeName { get; set; }
/// <summary>
/// 是否启用
/// </summary>
public PayTypeOutEnum Enable { get; set; }
/// <summary>
/// 是否能编辑 0 可以 1 否
/// </summary>
public PayTypeOutEnum IsEdit { get; set; }
}
}

16
src/Znyc.Dispatching.Application/PayType/Services/IPayTypeService.cs

@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Znyc.Dispatching.Application
{
/// <summary>
/// 支付类型管理接口
/// </summary>
public interface IPayTypeService
{
}
}

110
src/Znyc.Dispatching.Application/PayType/Services/PayTypeService.cs

@ -0,0 +1,110 @@
using Furion.DatabaseAccessor;
using Furion.DependencyInjection;
using Furion.DynamicApiController;
using Furion.FriendlyException;
using Mapster;
using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
using System.Threading.Tasks;
using Znyc.Dispatching.Core;
using Znyc.Dispatching.Core.Entitys;
using Znyc.Dispatching.Core.Extension;
namespace Znyc.Dispatching.Application
{
/// <summary>
/// 支付类型管理
/// </summary>
[ApiDescriptionSettings(Name = "paytype", Order = 32)]
public class PayTypeService : IPayTypeService, IDynamicApiController, ITransient
{
private readonly IUserManager userManager;
private readonly ICacheService cacheService;
private readonly IRepository<PayType> repository;
public PayTypeService(IRepository<PayType> repository,
IUserManager userManager,
ICacheService cacheService)
{
this.repository = repository;
this.userManager = userManager;
this.cacheService = cacheService;
}
/// <summary>
/// 获取开支类别
/// </summary>
/// <returns></returns>
[HttpGet]
[Route("api/v1/PayType")]
public async Task<List<PayTypeOutPut>> GetAll(bool Enable)
{
var compayId = this.userManager.CompanyId;
if (compayId.IsNull())
throw Oops.Oh($"用户公司为空!");
if(this.userManager.RoleId == 1005 || this.userManager.RoleId == 1004)
return await this.cacheService.GetPayTypeAll(compayId, Enable);
return await this.cacheService.GetPayTypeAll(compayId, Enable);
}
/// <summary>
/// 添加支付类型
/// </summary>
/// <param name="payTypeInput"></param>
/// <returns></returns>
[HttpPost]
[Route("api/v1/paytype/InsertAsync")]
public async Task<bool> InsertAsync(PayTypeInput payTypeInput)
{
var result = false;
if (payTypeInput.IsNull())
return result;
var res = await this.repository.InsertNowAsync(new PayType()
{
TypeName = payTypeInput.TypeName,
Enable = 0,
CreatedTime = System.DateTime.Now,
CreatedUserId = this.userManager.UserId,
IsDeleted = false,
CompayId = this.userManager.CompanyId,
IsEdit = 0,
});
await this.cacheService.RemovePayTypeAllAsync(userManager.CompanyId);
if (res.Entity.Id > 0)
result = true;
return result;
}
/// <summary>
/// 编辑支付类型
/// </summary>
/// <returns></returns>
[HttpPut]
[UnitOfWork]
[Route("api/v1/paytype/UpdateAsync")]
public async Task<bool> UpdateAsync(PayTypeInput payTypeInput)
{
bool result = false;
if (payTypeInput.IsNull())
return result;
if (payTypeInput.ID.IsNull())
throw Oops.Oh($"编辑缺少ID!");
var res = await this.repository.FindOrDefaultAsync(payTypeInput.ID);
if (res.IsNull())
throw Oops.Oh("ID查询为空");
res.TypeName = payTypeInput.TypeName;
res.Enable = (int)payTypeInput.Enable;
res.ModifiedUserId = this.userManager.UserId;
res.ModifiedTime = System.DateTime.Now;
var resUp = await this.repository.UpdateNowAsync(res);
if(resUp.IsNotNull())
result = true;
return result;
}
}
}

5
src/Znyc.Dispatching.Application/Project/Services/ProjectService.cs

@ -78,7 +78,10 @@ namespace Znyc.Dispatching.Application
.WhereIf(new long[] { (long)RoleStatusEnum.Salesman, (long)RoleStatusEnum.PartTimeSalesman }.Contains(_userManager.RoleId),
x => x.SalesmanId == _userManager.UserId)
.WhereIf(key.IsNotEmptyOrNull(), x => x.ProjectName.Contains(key))
.Adapt<List<ProjectListOutput>>();
.OrderBy(x =>x.ProjectName)
.Skip((currentPage - 1) * pageSize)
.Take(pageSize)
.Adapt<List<ProjectListOutput>>();
var projectOutputs = new List<ProjectListOutputs>();
foreach (var INDEX_STRING in INDEX_STRINGS)

13
src/Znyc.Dispatching.Application/SpareTimeWorker/Server/ISpareTimeWorkerService.cs

@ -0,0 +1,13 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Znyc.Dispatching.Application.SpareTimeWorker.Server
{
public interface ISpareTimeWorkerService
{
Task TimeWorker();
}
}

35
src/Znyc.Dispatching.Application/SpareTimeWorker/Server/SpareTimeWorkerService.cs

@ -0,0 +1,35 @@
using Furion.RemoteRequest.Extensions;
using Furion.TaskScheduler;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Znyc.Dispatching.Application.SpareTimeWorker.Server
{
public class SpareTimeWorkerService: ISpareTimeWorker
{
[SpareTime(600000, "jobName", StartNow = true)]
public async Task TimeWorker(SpareTimer timer, long count)
{
await "http://localhost/api/job/sync-vehicle-off".GetAsync();
// await "http://localhost/api/job/sync-vehicle-off".GetAsync();
}
[SpareTime(60000, "vehicleName", StartNow = true)]
public async Task VehicleWorker(SpareTimer timer, long count)
{
Console.WriteLine("车辆异常提醒");
////停留
await "http://localhost/api/job/syncstoping".GetAsync();
////超速
//await "http://localhost/api/job/syncspeeding".GetAsync();
}
}
}

2
src/Znyc.Dispatching.Application/User/Dto/Input/UserAddInput.cs

@ -36,6 +36,8 @@ namespace Znyc.Dispatching.Application.Dto.Input
/// </summary>
[Required(ErrorMessage = "请选择角色")]
public long RoleId { get; set; }
}
}

71
src/Znyc.Dispatching.Application/User/Services/UserService.cs

@ -31,18 +31,26 @@ namespace Znyc.Dispatching.Application
public class UserService : IUserService, IDynamicApiController, ITransient
{
private readonly ICacheService _cacheService;
private readonly IRepository<Company> _companyRepository;
private readonly IRepository<Employee> _employeeRepository;
private readonly IRepository<User> _repository;
private readonly SmsProviderOptions _smsProviderOptions;
private readonly IUserManager _userManager;
private readonly WeixinSettingOptions _weixinSettingOptions;
private readonly IRepository<UserRole> _userRoleRepository;
private readonly IWxUserRelationService _wxUserRelationService;
private readonly IRoleMenuService _roleMenuService;
private readonly ILogger<UserService> _logger;
private readonly IRepository<User> _repository;
private readonly IRepository<Company> _companyRepository;
private readonly IRepository<Employee> _employeeRepository;
private readonly IRepository<UserRole> _userRoleRepository;
private readonly IRepository<VehiclePerson> _vehiclePersonRepository;
private readonly IRepository<WorkPlace> workPlaceRepository;
private readonly IRepository<ProjectPerson> _projectPersonRepository;
private readonly IRepository<WorkPlaceEmployee> wrokPlaceEmployee;
public UserService(
IUserManager userManager,
ICacheService cacheService,
@ -56,6 +64,8 @@ namespace Znyc.Dispatching.Application
IOptions<WeixinSettingOptions> weixinSettingOptions,
ILogger<UserService> logger,
IRepository<VehiclePerson> vehiclePersonRepository,
IRepository<WorkPlace> workPlaceRepository,
IRepository<WorkPlaceEmployee> wrokPlaceEmployee,
IRepository<ProjectPerson> projectPersonRepository)
{
_repository = repository;
@ -71,6 +81,8 @@ namespace Znyc.Dispatching.Application
_logger = logger;
_vehiclePersonRepository = vehiclePersonRepository;
_projectPersonRepository = projectPersonRepository;
this.workPlaceRepository = workPlaceRepository;
this.wrokPlaceEmployee = wrokPlaceEmployee;
}
/// <summary>
@ -141,6 +153,9 @@ namespace Znyc.Dispatching.Application
[Route("api/v1/user/register")]
public async Task<LoginOutput> RegisterUserAsync(UserAddInput input)
{
User userEntity = new User();
var jsCode2JsonResult =
await SnsApi.JsCode2JsonAsync(_weixinSettingOptions.WxOpenAppId, _weixinSettingOptions.WxOpenAppSecret,
input.DecryptPhoneAddInput.JsCode);
@ -205,7 +220,7 @@ namespace Znyc.Dispatching.Application
}
//用户
var userEntity = await _repository.InsertNowAsync(new User
var userEntityTask = await _repository.InsertNowAsync(new User
{
OpenId = jsCode2JsonResult.openid,
UserName = input.UserName,
@ -213,11 +228,14 @@ namespace Znyc.Dispatching.Application
Phone = phone,
Status = CommonStatusEnum.ENABLE
});
userEntity = userEntityTask.Entity;
var isDefault = input.RoleId == (int)RoleStatusEnum.Outside ? false : true;
//员工
var employeeEntity = await _employeeRepository.InsertNowAsync(new Employee
{
UserId = userEntity.Entity.Id,
UserId = userEntity.Id,
AvatarUrl = input.AvatarUrl,
EmployeeName = input.UserName,
EmployeePhone = phone,
@ -227,30 +245,29 @@ namespace Znyc.Dispatching.Application
IsDefault = isDefault,
Status = (int)CommonStatusEnum.ENABLE
});
//用户角色
//await _userRoleRepository.InsertNowAsync(new UserRole
//{
// UserId = userEntity.Entity.Id,
// RoleId = input.RoleId
//});
//清除员工列表Cache
await _cacheService.RemoveEmployeeListAsync(input.CompanyId);
//用户中间表
await _wxUserRelationService.AddOrUpdateAsync(userEntity.Entity.Id, jsCode2JsonResult.openid, jsCode2JsonResult.unionid);
user = userEntity.Entity;
await _wxUserRelationService.AddOrUpdateAsync(userEntity.Id, jsCode2JsonResult.openid, jsCode2JsonResult.unionid);
user = userEntity;
employee = employeeEntity.Entity;
}
else
{
employee = await _employeeRepository.Where(x => x.UserId == user.Id && x.Status == (int)CommonStatusEnum.ENABLE && x.CompanyId == input.CompanyId).FirstOrDefaultAsync();
userEntity = user;
employee = await _employeeRepository.Where(x => x.UserId == userEntity.Id && x.Status == (int)CommonStatusEnum.ENABLE && x.CompanyId == input.CompanyId).FirstOrDefaultAsync();
if (employee.IsNull())
{
var employeenew = new Employee
{
UserId = user.Id,
UserId = userEntity.Id,
AvatarUrl = input.AvatarUrl,
EmployeeName = input.UserName,
EmployeePhone = user.Phone,
EmployeePhone = userEntity.Phone,
CompanyId = input.CompanyId,
RoleId = input.RoleId,
RoleName = typeof(RoleStatusEnum).GetDescription((int)input.RoleId),
@ -264,10 +281,10 @@ namespace Znyc.Dispatching.Application
//员工
var employeeEntity = await _employeeRepository.InsertNowAsync(new Employee
{
UserId = user.Id,
UserId = userEntity.Id,
AvatarUrl = input.AvatarUrl,
EmployeeName = input.UserName,
EmployeePhone = user.Phone,
EmployeePhone = userEntity.Phone,
CompanyId = input.CompanyId,
RoleId = input.RoleId,
RoleName = typeof(RoleStatusEnum).GetDescription(input.RoleId.ObjToInt()),
@ -278,6 +295,18 @@ namespace Znyc.Dispatching.Application
company = new Company() { Id = input.CompanyId };
}
}
// 工地方
if(input.RoleId == 1009)
{
await this.wrokPlaceEmployee.InsertAsync(new WorkPlaceEmployee()
{
UserId = userEntity.Id,
CreatedTime = DateTime.Now,
IsDeleted= false,
});
}
// 生成 token
string accessToken = JWTEncryption.Encrypt(new Dictionary<string, object>
{
@ -319,9 +348,11 @@ namespace Znyc.Dispatching.Application
break;
}
return loginOutput;
}
}
/// <summary>
/// 修改用户信息

300
src/Znyc.Dispatching.Application/Vehicle/Dto/OutPut/MapMonitorDataOutput.cs

@ -63,157 +63,157 @@ namespace Znyc.Dispatching.Application
///// <summary>
///// 所属公司
///// </summary>
//public long CompanyId { get; set; }
///// <summary>
///// 车牌号
///// </summary>
//public string VehiclePlate { get; set; }
/// <summary>
/// 所属公司
/// </summary>
public long CompanyId { get; set; }
/// <summary>
/// 车牌号
/// </summary>
public string VehiclePlate { get; set; }
/// <summary>
/// 联系人电话
/// </summary>
public long VehicleType { get; set; }
/// <summary>
/// 联系人
/// </summary>
public string ContactPerson { get; set; }
/// <summary>
/// 联系电话
/// </summary>
public string ContactPhone { get; set; }
/// <summary>
/// SimNo
/// </summary>
public string SimNo { get; set; }
/// <summary>
/// 状态(字典 0正常 1停用 2删除)
/// </summary>
public int Status { get; set; } = 0;
/// <summary>
/// 打火状态
/// </summary>
public int Acc { get; set; } = 0;
/// <summary>
/// 工作状态
/// </summary>
public int Work { get; set; } = 0;
/// <summary>
/// GPS时间
/// </summary>
public string GpsTime { get; set; }
/// <summary>
/// Gps服务器接收时间
/// </summary>
public string RecTime { get; set; }
/// <summary>
/// gps状态
/// </summary>
public int GpsState { get; set; } = 0;
/// <summary>
/// 方向
/// </summary>
public int Direct { get; set; } = 0;
/// <summary>
/// 速度
/// </summary>
public int Speed { get; set; } = 0;
/// <summary>
/// 静止时长
/// </summary>
public string DurationTime { get; set; }
/// <summary>
/// acc工作时长
/// </summary>
public string AccDurationTime { get; set; }
/// <summary>
/// 地点
/// </summary>
public string Address { get; set; }
/// <summary>
/// work工作时长
/// </summary>
public string WorkDurationTime { get; set; }
/// <summary>
/// 离线时长
/// </summary>
public string OfflineTime { get; set; }
/// <summary>
/// 更新时间
/// </summary>
public DateTime ModifiedTime { get; set; }
/// <summary>
/// IMEL号
/// </summary>
public string ImeiNo { get; set; }
/// <summary>
/// 设备类型
/// </summary>
public int TerminalType { get; set; }
/// <summary>
/// 开通时间
/// </summary>
public DateTime OpenTime { get; set; }
/// <summary>
/// 到期时间
/// </summary>
public DateTime ExpireTime { get; set; }
/// <summary>
/// 设备类型
/// </summary>
public string TerminalTypeName { get; set; }
///// <summary>
///// 联系人电话
///// </summary>
//public long VehicleType { get; set; }
///// <summary>
///// 联系人
///// </summary>
//public string ContactPerson { get; set; }
///// <summary>
///// 联系电话
///// </summary>
//public string ContactPhone { get; set; }
///// <summary>
///// SimNo
///// </summary>
//public string SimNo { get; set; }
///// <summary>
///// 状态(字典 0正常 1停用 2删除)
///// </summary>
//public int Status { get; set; } = 0;
///// <summary>
///// 打火状态
///// </summary>
//public int Acc { get; set; } = 0;
///// <summary>
///// 工作状态
///// </summary>
//public int Work { get; set; } = 0;
///// <summary>
///// GPS时间
///// </summary>
//public string GpsTime { get; set; }
///// <summary>
///// Gps服务器接收时间
///// </summary>
//public string RecTime { get; set; }
///// <summary>
///// gps状态
///// </summary>
//public int GpsState { get; set; } = 0;
///// <summary>
///// 方向
///// </summary>
//public int Direct { get; set; } = 0;
///// <summary>
///// 速度
///// </summary>
//public int Speed { get; set; } = 0;
///// <summary>
///// 静止时长
///// </summary>
//public string DurationTime { get; set; }
///// <summary>
///// acc工作时长
///// </summary>
//public string AccDurationTime { get; set; }
///// <summary>
///// 地点
///// </summary>
//public string Address { get; set; }
///// <summary>
///// work工作时长
///// </summary>
//public string WorkDurationTime { get; set; }
///// <summary>
///// 离线时长
///// </summary>
//public string OfflineTime { get; set; }
///// <summary>
///// 更新时间
///// </summary>
//public DateTime ModifiedTime { get; set; }
///// <summary>
///// IMEL号
///// </summary>
//public string ImeiNo { get; set; }
///// <summary>
///// 设备类型
///// </summary>
//public int TerminalType { get; set; }
///// <summary>
///// 开通时间
///// </summary>
//public DateTime OpenTime { get; set; }
///// <summary>
///// 到期时间
///// </summary>
//public DateTime ExpireTime { get; set; }
///// <summary>
///// 设备类型
///// </summary>
//public string TerminalTypeName { get; set; }
///// <summary>
///// Gps信号源
///// </summary>
//public string GpsSignalSource { get; set; }
///// <summary>
///// Gps信号模式 1 GPS,2 基站
///// </summary>
//public int GpsMode { get; set; }
///// <summary>
///// 位置基本信息报警标志位 --欠压
///// </summary>
//public int GpsAlert { get; set; }
///// <summary>
///// 掉电
///// </summary>
//public int Useing { get; set; }
/// <summary>
/// Gps信号源
/// </summary>
public string GpsSignalSource { get; set; }
/// <summary>
/// Gps信号模式 1 GPS,2 基站
/// </summary>
public int GpsMode { get; set; }
/// <summary>
/// 位置基本信息报警标志位 --欠压
/// </summary>
public int GpsAlert { get; set; }
/// <summary>
/// 掉电
/// </summary>
public int Useing { get; set; }
}

2
src/Znyc.Dispatching.Application/Vehicle/Dto/OutPut/VehicleBaiscListOutput.cs

@ -24,7 +24,7 @@ namespace Znyc.Dispatching.Application
/// <summary>
/// 车组人员
/// </summary>
public List<VehiclePersonOutput> VehiclePerson { get; set; }
public List<VehiclePersonOutput>? VehiclePerson { get; set; }
/// <summary>
/// 车组人员姓名

5
src/Znyc.Dispatching.Application/Vehicle/Dto/OutPut/VehicleGpsOutput.cs

@ -203,5 +203,10 @@ namespace Znyc.Dispatching.Application
/// </summary>
public int Direct { get; set; } = 0;
public bool IsOverstopAlarm { get; set; }
public bool IsOveroffAlarm { get; set; }
public int Overstop { get; set; }
}
}

22
src/Znyc.Dispatching.Application/Vehicle/Dto/OutPut/VehiclesOutPut.cs

@ -0,0 +1,22 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Znyc.Dispatching.Application
{
public class VehiclesOutPut
{
/// <summary>
/// 车辆ID
/// </summary>
public long Id { get; set; }
/// <summary>
/// 车牌号
/// </summary>
public string VehiclePlate { get; set; }
}
}

744
src/Znyc.Dispatching.Application/Vehicle/Services/VehicleService.cs

File diff suppressed because it is too large

12
src/Znyc.Dispatching.Application/WorkPlace/Dto/Output/WorkPlaceOutput.cs

@ -0,0 +1,12 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Znyc.Dispatching.Application
{
public class WorkPlaceListPage
{
}
}

12
src/Znyc.Dispatching.Application/WorkPlace/Dto/input/WorkPlaceAddInput.cs

@ -0,0 +1,12 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Znyc.Dispatching.Application
{
public class WorkPlaceAddInput
{
}
}

13
src/Znyc.Dispatching.Application/WorkPlace/Dto/input/WorkPlaceListPage.cs

@ -0,0 +1,13 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Znyc.Dispatching.Application
{
public class WorkPlaceOutput
{
}
}

12
src/Znyc.Dispatching.Application/WorkPlace/Dto/input/WorkPlaceUpdateInput.cs

@ -0,0 +1,12 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Znyc.Dispatching.Application
{
public class WorkPlaceUpdateInput
{
}
}

42
src/Znyc.Dispatching.Application/WorkPlace/Services/IWorkPlaceService.cs

@ -0,0 +1,42 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Znyc.Dispatching.Application
{
public interface IWorkPlaceService
{
Task<WorkPlaceListPage> PageAsync(int currentPage, int pageSize, int status, int roleId, string key, string orderby);
/// <summary>
/// 根据id获取员工资料
/// </summary>
/// <returns></returns>
Task<WorkPlaceOutput> GetByIdAsync(long id);
/// <summary>
/// 添加员工信息
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
Task<long> AddAsync(WorkPlaceAddInput input);
/// <summary>
/// 编辑员工信息
/// </summary>
/// <returns></returns>
Task UpdateAsync(WorkPlaceUpdateInput input);
/// <summary>
/// 软删除员工信息
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
Task DeleteByIdAsync(long id);
}
}

55
src/Znyc.Dispatching.Application/WorkPlace/Services/WorkPlaceService.cs

@ -0,0 +1,55 @@
using Furion.DatabaseAccessor;
using Furion.DependencyInjection;
using Furion.DynamicApiController;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Znyc.Dispatching.Core.Entitys;
namespace Znyc.Dispatching.Application
{
public class WorkPlaceService : IWorkPlaceService, IDynamicApiController, ITransient
{
/// <summary>
///
/// </summary>
private readonly IRepository<WorkPlace> workPlaceRepository;
/// <summary>
///
/// </summary>
/// <param name="workPlaceRepository"></param>
public WorkPlaceService(IRepository<WorkPlace> workPlaceRepository)
{
this.workPlaceRepository = workPlaceRepository;
}
public Task<long> AddAsync(WorkPlaceAddInput input)
{
throw new NotImplementedException();
}
public Task DeleteByIdAsync(long id)
{
throw new NotImplementedException();
}
public Task<WorkPlaceOutput> GetByIdAsync(long id)
{
throw new NotImplementedException();
}
public Task<WorkPlaceListPage> PageAsync(int currentPage, int pageSize, int status, int roleId, string key, string orderby)
{
throw new NotImplementedException();
}
public Task UpdateAsync(WorkPlaceUpdateInput input)
{
throw new NotImplementedException();
}
}
}

4
src/Znyc.Dispatching.Application/Znyc.Dispatching.Application.csproj

@ -34,12 +34,14 @@
<ItemGroup>
<Folder Include="Cache\Dto\Input\" />
<Folder Include="Company\Dto\OutPut\" />
<Folder Include="Declaration\Dto\input\" />
<Folder Include="LogAudit\Dto\OutPut\" />
<Folder Include="LogEx\Dto\OutPut\" />
<Folder Include="LogOp\Dto\Input\" />
<Folder Include="LogAudit\Dto\Input\" />
<Folder Include="LogEx\Dto\Input\" />
<Folder Include="LogOp\Dto\OutPut\" />
<Folder Include="Order\Dto\Input\Check\" />
<Folder Include="UserRole\Dto\Input\" />
<Folder Include="RoleMenu\Dto\Input\" />
<Folder Include="UserRole\Dto\OutPut\" />
@ -48,10 +50,12 @@
<Folder Include="WxUserRelation\Dto\Input\" />
<Folder Include="User\Dto\Output\" />
<Folder Include="WxUserRelation\Dto\OutPut\" />
<Folder Include="WorkPlaceEmployee\" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="COSXML.Wpre" Version="1.0.7" />
<PackageReference Include="Furion" Version="3.0.6" />
<PackageReference Include="LinqPagination" Version="2.1.2" />
<PackageReference Include="Tencent.QCloud.Cos.Sts.Sdk" Version="3.0.4" />
<PackageReference Include="TencentCloudSDK.Sts" Version="3.0.404" />

881
src/Znyc.Dispatching.Application/Znyc.Dispatching.Application.xml

File diff suppressed because it is too large

2
src/Znyc.Dispatching.Core/Config/UploadOptions.cs

@ -17,7 +17,7 @@ namespace Znyc.Dispatching.Core
public string Region { get; set; }
/// <summary>
/// 头像上传配置
///头像上传配置
/// </summary>
public FileUploadConfig Avatar { get; set; }

28
src/Znyc.Dispatching.Core/Config/WxOpenSetting.cs

@ -0,0 +1,28 @@
using Furion.ConfigurableOptions;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Znyc.Dispatching.Core
{
[OptionsSettings("WxOpenSetting")]
public class WxOpenSetting : IConfigurableOptions
{
/// <summary>
/// 小程序
/// </summary>
public string AppID { get; set; }
/// <summary>
/// </summary>
public string WxOpenAppSecret { get; set; }
/// <summary>
/// 请求CODEURL
/// </summary>
public string OpenUrl { get; set; }
}
}

40
src/Znyc.Dispatching.Core/Const/CommonConst.cs

@ -149,6 +149,32 @@
/// </summary>
public const string CACHE_KEY_VEHICLE = "vehicle:_";
/// <summary>
/// 车辆停下
/// </summary>
public const string CACHE_KEY_VEHICLESTOP = "vehicleStop:_";
/// <summary>
/// 车辆启动
/// </summary>
public const string CACHE_KEY_VEHICLESTART = "vehicleStart:_";
/// <summary>
/// 超速车辆缓存
/// </summary>
public const string CACHE_KEY_OFFVEHICLE = "Offvehicle:_";
/// <summary>
/// 超速车辆缓存
/// </summary>
public const string CACHE_KEY_SPEEDVEHICLE = "speedvehicle:_";
/// <summary>
/// 车辆GPS信息缓存
/// </summary>
@ -169,6 +195,13 @@
/// </summary>
public const string CACHE_KEY_EMPLOYEES = "employees:{0}";
/// <summary>
/// 员工分页列表缓存
/// </summary>
public const string EMPLOYEELISTPAGE = "employeespage";
/// <summary>
/// 未读报警消息
/// </summary>
@ -229,5 +262,12 @@
public const string CACHE_KEY_ORDERREAD = "orderread_";
#endregion
#region 开支管理缓存
/// <summary>
/// 开支类型
/// </summary>
public const string CACHE_KEY_PAYTYPE = "pay:Type";
#endregion
}
}

18
src/Znyc.Dispatching.Core/Entitys/Company.cs

@ -31,7 +31,6 @@ namespace Znyc.Dispatching.Core.Entitys
/// </summary>
[Comment("联系人")]
[Required]
[MaxLength(30)]
public string ContactPerson { get; set; }
/// <summary>
@ -102,5 +101,22 @@ namespace Znyc.Dispatching.Core.Entitys
[Comment("是否启用任务车型选项")]
public bool IsOpenVehicleType { get; set; }
///// <summary>
///// 是否启用安全检查,默认为关
///// </summary>
//[Comment("是否启用安全检查")]
public bool IsShowCheckType { get; set; }
///// <summary>
///// 是否启用数据上传
///// </summary>
//[Comment("是否启用安全检查")]
public bool IsShowDate { get; set; }
}
}

70
src/Znyc.Dispatching.Core/Entitys/Consumption.cs

@ -0,0 +1,70 @@
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Znyc.Dispatching.Core.Entitys
{
[Table("dc_consumption")]
[Comment("消费详情表")]
public class Consumption : DEntityBase
{
/// <summary>
/// 开支类别ID
/// </summary>
public long PayTyepID { get; set; }
/// <summary>
/// 平摊ID
/// </summary>
public long ProductID { get; set; }
/// <summary>
/// 公司ID
/// </summary>
public long CompayID { get; set; }
/// <summary>
/// 开支类别
/// </summary>
public string PayTyepName { get; set; }
/// <summary>
/// 车ID
/// </summary>
public long CarID { get; set; }
/// <summary>
/// 车牌号
/// </summary>
public string CarName { get; set; }
/// <summary>
/// 车辆编号
/// </summary>
public string CarNo { get; set; }
/// <summary>
/// 支付途径
/// </summary>
public string PayChannel { get; set; }
/// <summary>
/// 金额
/// </summary>
public decimal Money { get; set; }
/// <summary>
/// 备注
/// </summary>
public string Remarks { get; set; }
}
}

131
src/Znyc.Dispatching.Core/Entitys/Declaration.cs

@ -0,0 +1,131 @@
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Znyc.Dispatching.Core.Entitys
{
/// <summary>
/// 派单订单表
/// </summary>
[Table("dc_declaration")]
[Comment("派单订单表")]
public class Declaration: DEntityBase
{
/// <summary>
/// 公司Id
/// </summary>
public long CompanyId { get; set; }
/// <summary>
/// 车型
/// </summary>
public int CarType { get; set; }
/// <summary>
/// 到场时间
/// </summary>
public DateTime ArriveDate { get; set; }
/// <summary>
/// 结束时间
/// </summary>
public DateTime EndTime { get; set; }
/// <summary>
/// 地址
/// </summary>
public string Address { get; set; }
/// <summary>
/// 报单信息
/// </summary>
public string Info { get; set; }
/// <summary>
/// 报单员
/// </summary>
public string ReportSheetID { get; set; }
/// <summary>
/// 报单员
/// </summary>
public string ReportSheetName { get; set; }
/// <summary>
/// 经度
/// </summary>
public decimal Longitude { get; set; }
/// <summary>
/// 纬度
/// </summary>
public decimal Latitude { get; set; }
/// <summary>
/// 工程名称
/// </summary>
public string ProjectName { get; set; }
/// <summary>
/// 施工位置
/// </summary>
public string Position { get; set; }
/// <summary>
/// 施工量
/// </summary>
public string Amount { get; set; }
/// <summary>
/// 公里数
/// </summary>
public long Kilometre { get; set; }
/// <summary>
/// 联系电话
/// </summary>
public string Phone { get; set; }
/// <summary>
/// 报单状态
/// </summary>
public int State { get; set; }
#region 审核
/// <summary>
/// 审核人
/// </summary>
public string ReviewName { get; set; }
/// <summary>
/// 审核人ID
/// </summary>
public string ReviewID { get; set; }
#endregion
}
}

8
src/Znyc.Dispatching.Core/Entitys/Oil.cs

@ -44,12 +44,18 @@ namespace Znyc.Dispatching.Core.Entitys
/// <summary>
/// 油单价
/// </summary>
public decimal OilPrice { get; set; }
public decimal OilPrice { get; set; } = 0;
/// <summary>
/// 金额
/// </summary>
public decimal AmountMoney { get; set; }
/// <summary>
/// 备注
/// </summary>
public string Remarks { get; set; }
}
}

17
src/Znyc.Dispatching.Core/Entitys/Order.cs

@ -48,7 +48,7 @@ namespace Znyc.Dispatching.Core.Entitys
public string Address { get; set; }
/// <summary>
/// 状态,10=待指派,20=已指派,未接单,30=已接单,40=已出发,50=已完成,60=已签单,70=已离开,80=已评价,101=撤销
/// 状态,10=待指派, 11=安全检查 20=已指派,未接单,30=已接单,40=已出发,50=已完成,60=已签单,70=已离开,80=已评价,101=撤销 新增安全状态
/// </summary>
public int Status { get; set; }
@ -152,6 +152,21 @@ namespace Znyc.Dispatching.Core.Entitys
public long ConstructionId { get; set; }
/// <summary>
/// 小时
/// </summary>
public string Hour { get;set ; }
/// <summary>
/// 分钟
/// </summary>
public string Minute { get; set; }
/// <summary>
/// 方量
/// </summary>
public string Party { get; set; }
/// <summary>

31
src/Znyc.Dispatching.Core/Entitys/OrderCheck.cs

@ -0,0 +1,31 @@
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Znyc.Dispatching.Core.Entitys
{
[Table("dc_order_check")]
[Comment("订单安检表")]
public class OrderCheck : DEntityBase
{
/// <summary>
/// 订单Id
/// </summary>
public long OrderId { get; set; }
/// <summary>
/// 图片路径
/// </summary>
public string Picture { get; set; }
public string Tag { get; set; }
}
}

2
src/Znyc.Dispatching.Core/Entitys/OrderVehicle.cs

@ -1,4 +1,5 @@
using Microsoft.EntityFrameworkCore;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace Znyc.Dispatching.Core.Entitys
@ -25,6 +26,7 @@ namespace Znyc.Dispatching.Core.Entitys
/// <summary>
/// 姓名
/// </summary>
[MaxLength(100)]
public string UserName { get; set; }

3
src/Znyc.Dispatching.Core/Entitys/OrderVisa.cs

@ -16,14 +16,13 @@ namespace Znyc.Dispatching.Core.Entitys
/// </summary>
public long OrderId { get; set; }
/// <summary>
/// 图片路径
/// </summary>
public string Picture { get; set; }
public string Tag { get; set; }
}

36
src/Znyc.Dispatching.Core/Entitys/PayType.cs

@ -0,0 +1,36 @@
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Znyc.Dispatching.Core.Entitys
{
[Table("dc_paytype")]
[Comment("支付类型表")]
public class PayType : DEntityBase
{
/// <summary>
/// 开支类别
/// </summary>
public string TypeName { get; set; }
/// <summary>
/// 是否启用 0 启用 1禁用
/// </summary>
public int Enable { get; set; }
/// <summary>
/// 是否可以编辑 0 可以编辑 1,不可以编辑
/// </summary>
public int IsEdit { get; set; }
/// <summary>
/// 公司ID
/// </summary>
public long CompayId { get; set; }
}
}

51
src/Znyc.Dispatching.Core/Entitys/RecordPlusOil.cs

@ -0,0 +1,51 @@
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Znyc.Dispatching.Core.Entitys
{
[Table("dc_recordplusoil")]
[Comment("加油记录表")]
public class RecordPlusOil : DEntityBase
{
/// <summary>
/// 车辆编号
/// </summary>
public string CarNo { get; set; }
/// <summary>
/// 加油单号
/// </summary>
public string PlusOilNo { get; set; }
/// <summary>
/// 升
/// </summary>
public string Rise { get; set; }
/// <summary>
/// 单价
/// </summary>
public decimal Price { get; set; }
/// <summary>
/// 总价
/// </summary>
public decimal Total { get; set; }
/// <summary>
/// 备注
/// </summary>
public string Remarks { get; set; }
}
}

23
src/Znyc.Dispatching.Core/Entitys/Vehicle.cs

@ -171,6 +171,29 @@ namespace Znyc.Dispatching.Core.Entitys
public int Overspeed { get; set; }
/// <summary>
/// 是否开启超速报警
/// </summary>
[Comment("是否开启超速报警")]
public bool IsOverstopAlarm { get; set; }
/// <summary>
/// 超速速度
/// </summary>
[Comment("超速速度")]
[DataValidation(ValidationTypes.PositiveNumber)]
public int Overstop { get; set; }
/// <summary>
/// 是否开启离线报警
/// </summary>
[Comment("是否开启离线报警")]
public bool IsOveroffAlarm { get; set; }
/// <summary>
/// 排序
/// </summary>

2
src/Znyc.Dispatching.Core/Entitys/VehiclePerson.cs

@ -12,7 +12,7 @@ namespace Znyc.Dispatching.Core.Entitys
{
/// <summary>
/// 公司Id
/// 车辆Id
/// </summary>
[Comment("车辆Id")]
public long VehicleId { get; set; }

79
src/Znyc.Dispatching.Core/Entitys/WorkPlace.cs

@ -0,0 +1,79 @@
using Furion.DatabaseAccessor;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Znyc.Dispatching.Core.Entitys
{
[SuppressChangedListener]
[Table("dc_workplace")]
[Comment("工地表")]
public class WorkPlace : DEntityBase
{
/// <summary>
/// 公司名称
/// </summary>
[Comment("公司名称")]
[Required]
[MaxLength(8)]
public string CompanyName { get; set; }
/// <summary>
/// 公司Logo
/// </summary>
[Comment("公司Logo")]
public string CompanyLogo { get; set; }
/// <summary>
/// 精度
/// </summary>
[Comment("精度")]
public decimal Longitude { get; set; }
/// <summary>
/// 纬度
/// </summary>
[Comment("纬度")]
public decimal Latitude { get; set; }
/// <summary>
/// 地址
/// </summary>
[Comment("地址")]
[MaxLength(35)]
public string Address { get; set; }
/// <summary>
/// 审核时间
/// </summary>
[Comment("审核时间")]
public DateTime AuditTime { get; set; }
/// <summary>
/// 状态(字典 0正常 1停用 2删除)
/// </summary>
[Comment("状态")]
public int Status { get; set; }
/// <summary>
/// 停留标示Id
/// </summary>
[Comment("停留标示Id")]
public long StopTag { get; set; }
/// <summary>
/// 是否启用任务车型选项,默认为关
/// </summary>
[Comment("是否启用任务车型选项")]
public bool IsOpenVehicleType { get; set; }
}
}

42
src/Znyc.Dispatching.Core/Entitys/WorkPlaceEmployee.cs

@ -0,0 +1,42 @@
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Znyc.Dispatching.Core.Entitys
{
[Table("dc_workplaceemployee")]
[Comment("工地中间表")]
public class WorkPlaceEmployee: DEntityBase
{
/// <summary>
/// UnionId
/// </summary>
[Comment("UnionId")]
[Required]
[MaxLength(32)]
public string UnionId { get; set; }
/// <summary>
/// 工地ID
/// </summary>
[Comment("工地ID")]
public string? WordPlaceID { get; set; }
/// <summary>
/// 用户Id
/// </summary>
[Comment("用户Id")]
[Required]
public long UserId { get; set; }
}
}

1
src/Znyc.Dispatching.Core/Entitys/Yard.cs

@ -21,7 +21,6 @@ namespace Znyc.Dispatching.Core.Entitys
/// 联系人
/// </summary>
[Comment("联系人")]
[MaxLength(30)]
public string ContactPerson { get; set; }
/// <summary>

55
src/Znyc.Dispatching.Core/Enums/DeclarationEnum.cs

@ -0,0 +1,55 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Znyc.Dispatching.Core.Enums
{
/// <summary>
/// 报单状态
/// </summary>
public enum DeclarationEnum
{
/// <summary>
/// 未接单
/// </summary>
[Description("未接单")]
MissedOrder = 0,
/// <summary>
/// 待审核
/// </summary>
[Description("待审核")]
StayCheck = 1,
/// <summary>
/// 已审核
/// </summary>
[Description("已审核")]
EndCheck = 2,
/// <summary>
/// 待指派
/// </summary>
[Description("待指派")]
Assign = 3,
/// <summary>
/// 工作中
/// </summary>
[Description("工作中")]
WordHit = 4,
/// <summary>
/// 已完工
/// </summary>
[Description("已完工")]
OverWord = 10
}
}

10
src/Znyc.Dispatching.Core/Enums/OrderStatus.cs

@ -20,6 +20,12 @@ namespace Znyc.Dispatching.Core
[Description("待指派")]
StayAssign = 10,
/// <summary>
/// 安检
/// </summary>
[Description("待安检")]
Check = 11,
/// <summary>
/// 已指派(未接单)
/// </summary>
@ -44,10 +50,12 @@ namespace Znyc.Dispatching.Core
[Description("已到达")]
Appear = 50,
/// <summary>
/// 已完成
/// </summary>
[Description("已完成")]
[Description("已安检")]
Complete = 60,
/// <summary>

25
src/Znyc.Dispatching.Core/Extension/DictionaryExtensions.cs

@ -1,4 +1,5 @@
using System.Collections.Generic;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
@ -10,6 +11,28 @@ namespace Znyc.Dispatching.Core
/// </summary>
public static class DictionaryExtensions
{
public static IEnumerable<T> Distinct<T>(
this IEnumerable<T> source, Func<T, T, bool> comparer)
where T : class
=> source.Distinct(new DynamicEqualityComparer<T>(comparer));
private sealed class DynamicEqualityComparer<T> : IEqualityComparer<T>
where T : class
{
private readonly Func<T, T, bool> _func;
public DynamicEqualityComparer(Func<T, T, bool> func)
{
_func = func;
}
public bool Equals(T x, T y) => _func(x, y);
public int GetHashCode(T obj) => 0;
}
/// <summary>
/// 将一个字典转化为 QueryString
/// </summary>

1
src/Znyc.Dispatching.Core/Extension/RestfulResultProvider.cs

@ -1,5 +1,6 @@
using Furion.DataValidation;
using Furion.DependencyInjection;
using Furion.FriendlyException;
using Furion.UnifyResult;
using Furion.UnifyResult.Internal;
using Microsoft.AspNetCore.Http;

9
src/Znyc.Dispatching.Core/Helpers/DateTimeHelper.cs

@ -18,6 +18,15 @@ namespace Znyc.Dispatching.Core.Helpers
DateTime tempToday = new DateTime(dt.Year, dt.Month, dt.Day);
return today.Equals(tempToday);
}
/// <summary>
/// 去掉字符串中的非数字
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public static string RemoveNotNumber(string key)
{
return System.Text.RegularExpressions.Regex.Replace(key, @"[^\d]*", "");
}
/// <summary>

206
src/Znyc.Dispatching.Core/Helpers/MapHelper/MapHelper.cs

@ -6,6 +6,7 @@ using System.Linq;
using System.Net;
using System.Text;
using Znyc.Dispatching.Core.MapModel;
using Znyc.Dispatching.Core.Options;
namespace Znyc.Dispatching.Core.Helpers
{
@ -13,6 +14,127 @@ namespace Znyc.Dispatching.Core.Helpers
{
private static readonly double EARTH_RADIUS = 6378.137;
private const string key = "82c0ac5c67dc9b13a3bb5b8fd4813996"; //高德
private const string keyTX = "2RRBZ-BKNW6-E6FSM-M5B4R-AMQWH-UGBGB";
/// <summary>
/// Π
/// 圆周率
/// </summary>
private const double PI = 3.14159265358979324;
private const double X_PI = 3.14159265358979324 * 3000.0 / 180.0;
private const double A = 6378245.0;
private const double EE = 0.00669342162296594323;
private const double LON_BOUNDARY_MIN = 72.004;
private const double LAT_BOUNDARY_MIN = 0.8293;
private const double LON_BOUNDARY_MAX = 137.8347;
private const double LAT_BOUNDARY_MAX = 55.8271;
/// <summary>
/// 是否中国境内坐标
/// </summary>
/// <param name="gpsLat"></param>
/// <param name="gpsLng"></param>
/// <returns></returns>
private static bool OutOfChina(double gpsLat, double gpsLng)
{
if (gpsLng < LON_BOUNDARY_MIN || gpsLng > LON_BOUNDARY_MAX)
{
return true;
}
if (gpsLat < LAT_BOUNDARY_MIN || gpsLat > LAT_BOUNDARY_MAX)
{
return true;
}
return false;
}
#region WGS坐标系与GCJ02坐标系互转
/// <summary>
/// WGS84坐标系转GCJ02坐标系
/// </summary>
/// <param name="wgsLat">WGS坐标,纬度</param>
/// <param name="wgsLng">WGS坐标,经度</param>
/// <param name="gcjLat">GCJ02坐标,纬度</param>
/// <param name="gcjLng">GCJ02坐标,经度</param>
public static void WGS84_to_GCJ02(double wgsLat, double wgsLng, out double gcjLat, out double gcjLng)
{
if (OutOfChina(wgsLat, wgsLng))
{
gcjLat = wgsLat;
gcjLng = wgsLng;
}
else
{
double dLat = TransformLat(wgsLng - 105.0, wgsLat - 35.0);
double dLon = TransformLon(wgsLng - 105.0, wgsLat - 35.0);
double radLat = wgsLat / 180.0 * PI;
double magic = Math.Sin(radLat);
magic = 1 - EE * magic * magic;
double sqrtMagic = Math.Sqrt(magic);
dLat = (dLat * 180.0) / ((A * (1 - EE)) / (magic * sqrtMagic) * PI);
dLon = (dLon * 180.0) / (A / sqrtMagic * Math.Cos(radLat) * PI);
gcjLat = wgsLat + dLat;
gcjLng = wgsLng + dLon;
}
}
public static void GCJ02_to_WGS84(double gcjLat, double gcjLng, out double wgsLat, out double wgsLng)
{
WGS84_to_GCJ02(gcjLat, gcjLng, out wgsLat, out wgsLng);
wgsLng = gcjLng * 2 - wgsLng;
wgsLat = gcjLat * 2 - wgsLat;
}
private static double TransformLat(double x, double y)
{
double ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * Math.Sqrt(Math.Abs(x));
ret += (20.0 * Math.Sin(6.0 * x * PI) + 20.0 * Math.Sin(2.0 * x * PI)) * 2.0 / 3.0;
ret += (20.0 * Math.Sin(y * PI) + 40.0 * Math.Sin(y / 3.0 * PI)) * 2.0 / 3.0;
ret += (160.0 * Math.Sin(y / 12.0 * PI) + 320 * Math.Sin(y * PI / 30.0)) * 2.0 / 3.0;
return ret;
}
private static double TransformLon(double x, double y)
{
double ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * Math.Sqrt(Math.Abs(x));
ret += (20.0 * Math.Sin(6.0 * x * PI) + 20.0 * Math.Sin(2.0 * x * PI)) * 2.0 / 3.0;
ret += (20.0 * Math.Sin(x * PI) + 40.0 * Math.Sin(x / 3.0 * PI)) * 2.0 / 3.0;
ret += (150.0 * Math.Sin(x / 12.0 * PI) + 300.0 * Math.Sin(x / 30.0 * PI)) * 2.0 / 3.0;
return ret;
}
#endregion
#region 火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的互转
public static void GCJ02_to_Bd09(double gcjLat, double gcjLng, out double bdLat, out double bdLng)
{
double z = Math.Sqrt(gcjLng * gcjLng + gcjLat * gcjLat) + 0.00002 * Math.Sin(gcjLat * PI);
double theta = Math.Atan2(gcjLat, gcjLng) + 0.000003 * Math.Cos(gcjLng * PI);
bdLng = z * Math.Cos(theta) + 0.0065;
bdLat = z * Math.Sin(theta) + 0.006;
}
public static void BD09_to_GCJ02(double bdLat, double bdLng, out double gcjLat, out double gcjLng)
{
double x = bdLng - 0.0065, y = bdLat - 0.006;
double z = Math.Sqrt(x * x + y * y) - 0.00002 * Math.Sin(y * PI);
double theta = Math.Atan2(y, x) - 0.000003 * Math.Cos(x * PI);
gcjLng = z * Math.Cos(theta);
gcjLat = z * Math.Sin(theta);
}
#endregion
/// <summary>
/// 传入经度纬度
@ -70,11 +192,21 @@ namespace Znyc.Dispatching.Core.Helpers
/// <returns>失败返回"" </returns>
public static MapLocation GetMapLocation(string strLatLng, int timeout = 10000)
{
string url =
string.Format("http://restapi.amap.com/v3/geocode/regeo?key={0}&batch=true&location={1}",
key, strLatLng);
string apiText = HttpGet(url, timeout);
return JObject.Parse(apiText).ToObject<MapLocation>();
try
{
string url =
string.Format("http://restapi.amap.com/v3/geocode/regeo?key={0}&batch=true&location={1}",
key, strLatLng);
string apiText = HttpGet(url, timeout);
return JObject.Parse(apiText).ToObject<MapLocation>();
}
catch (Exception e)
{
Console.WriteLine(e.Message);
return null;
}
}
@ -177,9 +309,10 @@ namespace Znyc.Dispatching.Core.Helpers
string strLatLng = longitude + "," + latitude;
MapLocation mapLocation = GetMapLocation(strLatLng);
Console.WriteLine("查询地址");
if (Convert.ToInt32(mapLocation.Status) == 1)
{
Regeocode map = mapLocation.Regeocodes.First();
switch (type)
{
@ -349,5 +482,66 @@ namespace Znyc.Dispatching.Core.Helpers
}
#endregion
#region 腾讯
public static Rootobject pointLatLngs(string start, string end,int timeout,int heading)
{
try
{
string url =
string.Format("https://apis.map.qq.com/ws/direction/v1/driving?output=json&key=2RRBZ-BKNW6-E6FSM-M5B4R-AMQWH-UGBGB&to={0}&from={1}&heading={2}",
start,end, heading);
string apiText = HttpGet(url, timeout);
return JObject.Parse(apiText).ToObject<Rootobject>();
}
catch (Exception e)
{
Console.WriteLine(e.Message);
return new Rootobject();
}
}
public static Rootobject pointwalkings(string start, string end, int timeout, int heading)
{
try
{
string url =
string.Format("https://apis.map.qq.com/ws/direction/v1/walking?output=json&key=2RRBZ-BKNW6-E6FSM-M5B4R-AMQWH-UGBGB&to={0}&from={1}&heading={2}",
start, end, heading);
string apiText = HttpGet(url, timeout);
return JObject.Parse(apiText).ToObject<Rootobject>();
}
catch (Exception e)
{
Console.WriteLine(e.Message);
return new Rootobject();
}
}
public static GeocoderLoaction geocoder(string location,int timeout)
{
try
{
string url =
string.Format("https://apis.map.qq.com/ws/geocoder/v1/?location={0}&key=2RRBZ-BKNW6-E6FSM-M5B4R-AMQWH-UGBGB&get_poi=1",
location);
string apiText = HttpGet(url, timeout);
return JObject.Parse(apiText).ToObject<GeocoderLoaction>();
}
catch (Exception e)
{
Console.WriteLine(e.Message);
return new GeocoderLoaction();
}
}
#endregion
}
}

214
src/Znyc.Dispatching.Core/Helpers/MapHelper/MapModel/GeocoderLoaction.cs

@ -0,0 +1,214 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Znyc.Dispatching.Core.Helpers
{
public class GeocoderLoaction
{
public int status { get; set; }
public string message { get; set; }
public string request_id { get; set; }
public Result result { get; set; }
public class Result
{
public Location location { get; set; }
public string address { get; set; }
public Formatted_Addresses formatted_addresses { get; set; }
public Address_Component address_component { get; set; }
public Ad_Info ad_info { get; set; }
public Address_Reference address_reference { get; set; }
public int poi_count { get; set; }
public Pois[] pois { get; set; }
}
public class Location
{
public float lat { get; set; }
public float lng { get; set; }
}
public class Formatted_Addresses
{
public string recommend { get; set; }
public string rough { get; set; }
}
public class Address_Component
{
public string nation { get; set; }
public string province { get; set; }
public string city { get; set; }
public string district { get; set; }
public string street { get; set; }
public string street_number { get; set; }
}
public class Ad_Info
{
public string nation_code { get; set; }
public string adcode { get; set; }
public string city_code { get; set; }
public string name { get; set; }
public Location1 location { get; set; }
public string nation { get; set; }
public string province { get; set; }
public string city { get; set; }
public string district { get; set; }
}
public class Location1
{
public float lat { get; set; }
public float lng { get; set; }
}
public class Address_Reference
{
public Business_Area business_area { get; set; }
public Famous_Area famous_area { get; set; }
public Crossroad crossroad { get; set; }
public Town town { get; set; }
public Street_Number street_number { get; set; }
public Street street { get; set; }
public Landmark_L2 landmark_l2 { get; set; }
}
public class Business_Area
{
public string id { get; set; }
public string title { get; set; }
public Location2 location { get; set; }
public int _distance { get; set; }
public string _dir_desc { get; set; }
}
public class Location2
{
public float lat { get; set; }
public float lng { get; set; }
}
public class Famous_Area
{
public string id { get; set; }
public string title { get; set; }
public Location3 location { get; set; }
public int _distance { get; set; }
public string _dir_desc { get; set; }
}
public class Location3
{
public float lat { get; set; }
public float lng { get; set; }
}
public class Crossroad
{
public string id { get; set; }
public string title { get; set; }
public Location4 location { get; set; }
public float _distance { get; set; }
public string _dir_desc { get; set; }
}
public class Location4
{
public float lat { get; set; }
public float lng { get; set; }
}
public class Town
{
public string id { get; set; }
public string title { get; set; }
public Location5 location { get; set; }
public int _distance { get; set; }
public string _dir_desc { get; set; }
}
public class Location5
{
public float lat { get; set; }
public float lng { get; set; }
}
public class Street_Number
{
public string id { get; set; }
public string title { get; set; }
public Location6 location { get; set; }
public float _distance { get; set; }
public string _dir_desc { get; set; }
}
public class Location6
{
public float lat { get; set; }
public float lng { get; set; }
}
public class Street
{
public string id { get; set; }
public string title { get; set; }
public Location7 location { get; set; }
public float _distance { get; set; }
public string _dir_desc { get; set; }
}
public class Location7
{
public float lat { get; set; }
public float lng { get; set; }
}
public class Landmark_L2
{
public string id { get; set; }
public string title { get; set; }
public Location8 location { get; set; }
public int _distance { get; set; }
public string _dir_desc { get; set; }
}
public class Location8
{
public float lat { get; set; }
public float lng { get; set; }
}
public class Pois
{
public string id { get; set; }
public string title { get; set; }
public string address { get; set; }
public string category { get; set; }
public Location9 location { get; set; }
public Ad_Info1 ad_info { get; set; }
public float _distance { get; set; }
public string _dir_desc { get; set; }
}
public class Location9
{
public float lat { get; set; }
public float lng { get; set; }
}
public class Ad_Info1
{
public string adcode { get; set; }
public string province { get; set; }
public string city { get; set; }
public string district { get; set; }
}
}
}

6
src/Znyc.Dispatching.Core/Helpers/MapHelper/MapModel/PathPlanning.cs

@ -117,4 +117,10 @@ namespace Znyc.Dispatching.Core.MapModel
[JsonProperty("polyline")]
public object Polyline { get; set; }
}
}

1
src/Znyc.Dispatching.Core/Helpers/RegexHelper.cs

@ -213,7 +213,6 @@ namespace Znyc.Dispatching.Core.Helpers
{
string pattern = @"(^|\s*\+?0?0?86|\D)(1\d{2})[-\s]{0,3}(\d{4})[-\s]{0,3}(\d{4})(?=\D|$)";
MatchCollection matchCol = Regex.Matches(value.Trim(), pattern);
string[] result = new string[matchCol.Count];
if (matchCol.Count > 0)
{

16
src/Znyc.Dispatching.Core/Helpers/TimeHelper.cs

@ -21,6 +21,22 @@ namespace Znyc.Dispatching.Core.Helpers
return Convert.ToInt32(ts3.TotalMinutes);
}
/// <summary>
/// 比较两个时间相差的天数
/// </summary>
/// <param name="dateBegin">开始时间</param>
/// <param name="dateEnd">结束时间</param>
/// <returns>返回(分钟)</returns>
public static int ExecDateDay(DateTime dateBegin, DateTime dateEnd)
{
TimeSpan ts1 = new TimeSpan(dateBegin.Ticks);
TimeSpan ts2 = new TimeSpan(dateEnd.Ticks);
TimeSpan ts3 = ts1.Subtract(ts2).Duration();
//你想转的格式
return Convert.ToInt32(ts3.TotalDays);
}
/// <summary>
/// 时间差格式转换
/// </summary>

324
src/Znyc.Dispatching.Core/Helpers/WaterMarkHelper.cs

@ -0,0 +1,324 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Znyc.Dispatching.Core.Helpers
{
public static class WaterMarkHelper
{
#region 添加水印
/// <summary>
/// 文字水印
/// </summary>
/// <param name="imgPath">服务器图片相对路径</param>
/// <param name="filename">保存文件名</param>
/// <param name="watermarkText">水印文字</param>
/// <param name="watermarkStatus">图片水印位置 0=不使用 1=左上 2=中上 3=右上 4=左中 9=右下</param>
/// <param name="quality">附加水印图片质量,0-100</param>
/// <param name="fontsize">字体大小</param>
/// <param name="fontname">字体</param>
public static void AddImageSignText(Image img, string filename, string watermarkText, int watermarkStatus, int quality, int fontsize, string fontname = "微软雅黑")
{
//byte[] _ImageBytes = File.ReadAllBytes(imgPath);
//Image img = Image.FromStream(new MemoryStream(_ImageBytes));
//filename = GetMapPath(filename);
Graphics g = Graphics.FromImage(img);
//watermarkText = get_uft8(watermarkText);
Font drawFont = new Font(fontname, fontsize, FontStyle.Regular, GraphicsUnit.Pixel);
SizeF crSize;
crSize = g.MeasureString(watermarkText, drawFont);
float xpos = 0;
float ypos = 0;
switch (watermarkStatus)
{
case 1:
xpos = (float)img.Width * (float).01;
ypos = (float)img.Height * (float).01;
break;
case 2:
xpos = ((float)img.Width * (float).50) - (crSize.Width / 2);
ypos = (float)img.Height * (float).01;
break;
case 3:
xpos = ((float)img.Width * (float).99) - crSize.Width;
ypos = (float)img.Height * (float).01;
break;
case 4:
xpos = (float)img.Width * (float).01;
ypos = ((float)img.Height * (float).50) - (crSize.Height / 2);
break;
case 5:
xpos = ((float)img.Width * (float).50) - (crSize.Width / 2);
ypos = ((float)img.Height * (float).50) - (crSize.Height / 2);
break;
case 6:
xpos = ((float)img.Width * (float).99) - crSize.Width;
ypos = ((float)img.Height * (float).50) - (crSize.Height / 2);
break;
case 7:
xpos = (float)img.Width * (float).01;
ypos = ((float)img.Height * (float).99) - crSize.Height;
break;
case 8:
xpos = ((float)img.Width * (float).50) - (crSize.Width / 2);
ypos = ((float)img.Height * (float).99) - crSize.Height;
break;
case 9:
xpos = ((float)img.Width * (float).99) - crSize.Width;
ypos = ((float)img.Height * (float).99) - crSize.Height;
break;
}
g.DrawString(watermarkText, drawFont, new SolidBrush(Color.White), xpos + 1, ypos + 1);
g.DrawString(watermarkText, drawFont, new SolidBrush(Color.Black), xpos, ypos);
ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();
ImageCodecInfo ici = null;
foreach (ImageCodecInfo codec in codecs)
{
if (codec.MimeType.IndexOf("jpeg") > -1)
ici = codec;
}
EncoderParameters encoderParams = new EncoderParameters();
long[] qualityParam = new long[1];
if (quality < 0 || quality > 100)
quality = 80;
qualityParam[0] = quality;
EncoderParameter encoderParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, qualityParam);
encoderParams.Param[0] = encoderParam;
if (ici != null)
img.Save(filename, ici, encoderParams);
else
img.Save(filename);
g.Dispose();
img.Dispose();
}
public static string get_uft8(string unicodeString)
{
string keyword;
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
byte[] buffer = Encoding.GetEncoding("GB2312").GetBytes(unicodeString);
return Encoding.GetEncoding("GB2312").GetString(buffer);
//keyword = Encoding.UTF8.GetString(buffer);
//Console.WriteLine("编码后"+keyword);
//return keyword;
}
/// <summary>
/// 添加文字水印
/// </summary>
/// <param name="image"></param>
/// <param name="text"></param>
/// <param name="fontSize">字体大小</param>
/// <param name="rectX">水印开始X坐标(自动扣除文字宽度)</param>
/// <param name="rectY">水印开始Y坐标(自动扣除文字高度</param>
/// <param name="opacity">0-255 值越大透明度越低</param>
/// <param name="externName">文件后缀名</param>
/// <returns></returns>
public static Image AddTextToImg(Image image, string text, float fontSize, float rectX, float rectY, int opacity, string externName)
{
Bitmap bitmap = new Bitmap(image, image.Width, image.Height);
Graphics g = Graphics.FromImage(bitmap);
//下面定义一个矩形区域
float rectWidth = text.Length * (fontSize + 10);
float rectHeight = fontSize + 20;
//声明矩形域
RectangleF textArea = new RectangleF(rectX - rectWidth, rectY - rectHeight, rectWidth, rectHeight);
Font font = new Font("Verdana", fontSize, FontStyle.Bold); //定义字体
Brush whiteBrush = new SolidBrush(Color.FromArgb(opacity,255, 255, 255)); //画文字用
g.DrawString(text, font, whiteBrush, textArea);
MemoryStream ms = new MemoryStream();
//保存图片
switch (externName)
{
case ".jpg":
bitmap.Save(ms, ImageFormat.Jpeg);
break;
case ".gif":
bitmap.Save(ms, ImageFormat.Gif);
break;
case ".png":
bitmap.Save(ms, ImageFormat.Png);
break;
default:
bitmap.Save(ms, ImageFormat.Jpeg);
break;
}
Image h_hovercImg = Image.FromStream(ms);
g.Dispose();
bitmap.Dispose();
return h_hovercImg;
}
/// <summary>
/// 添加图片水印
/// </summary>
/// <param name="image"></param>
/// <param name="text"></param>
/// <param name="rectX">水印开始X坐标(自动扣除图片宽度)</param>
/// <param name="rectY">水印开始Y坐标(自动扣除图片高度</param>
/// <param name="opacity">透明度 0-1</param>
/// <param name="externName">文件后缀名</param>
/// <returns></returns>
public static Image AddImgToImg(Image image, Image watermark, float rectX, float rectY, float opacity, string externName)
{
Bitmap bitmap = new Bitmap(image, image.Width, image.Height);
Graphics g = Graphics.FromImage(bitmap);
//下面定义一个矩形区域
float rectWidth = watermark.Width + 10;
float rectHeight = watermark.Height + 10;
//声明矩形域
RectangleF textArea = new RectangleF(rectX - rectWidth, rectY - rectHeight, rectWidth, rectHeight);
Bitmap w_bitmap = ChangeOpacity(watermark, opacity);
g.DrawImage(w_bitmap, textArea);
MemoryStream ms = new MemoryStream();
//保存图片
switch (externName)
{
case ".jpg":
bitmap.Save(ms, ImageFormat.Jpeg);
break;
case ".gif":
bitmap.Save(ms, ImageFormat.Gif);
break;
case ".png":
bitmap.Save(ms, ImageFormat.Png);
break;
default:
bitmap.Save(ms, ImageFormat.Jpeg);
break;
}
Image h_hovercImg = Image.FromStream(ms);
g.Dispose();
bitmap.Dispose();
return h_hovercImg;
}
/// <summary>
/// 改变图片的透明度
/// </summary>
/// <param name="img">图片</param>
/// <param name="opacityvalue">透明度</param>
/// <returns></returns>
public static Bitmap ChangeOpacity(Image img, float opacityvalue)
{
float[][] nArray ={ new float[] {1, 0, 0, 0, 0},
new float[] {0, 1, 0, 0, 0},
new float[] {0, 0, 1, 0, 0},
new float[] {0, 0, 0, opacityvalue, 0},
new float[] {0, 0, 0, 0, 1}};
ColorMatrix matrix = new ColorMatrix(nArray);
ImageAttributes attributes = new ImageAttributes();
attributes.SetColorMatrix(matrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);
Image srcImage = img;
Bitmap resultImage = new Bitmap(srcImage.Width, srcImage.Height);
Graphics g = Graphics.FromImage(resultImage);
g.DrawImage(srcImage, new Rectangle(0, 0, srcImage.Width, srcImage.Height), 0, 0, srcImage.Width, srcImage.Height, GraphicsUnit.Pixel, attributes);
return resultImage;
}
#endregion
#region 图片大小
public static Image resizeImage(Image imgToResize, Size size)
{
//获取图片宽度
int sourceWidth = imgToResize.Width;
//获取图片高度
int sourceHeight = imgToResize.Height;
float nPercent = 0;
float nPercentW = 0;
float nPercentH = 0;
//计算宽度的缩放比例
nPercentW = ((float)size.Width / (float)sourceWidth);
//计算高度的缩放比例
nPercentH = ((float)size.Height / (float)sourceHeight);
if (nPercentH < nPercentW)
nPercent = nPercentH;
else
nPercent = nPercentW;
//期望的宽度
int destWidth = (int)(sourceWidth * nPercent);
//期望的高度
int destHeight = (int)(sourceHeight * nPercent);
Bitmap b = new Bitmap(destWidth, destHeight);
Graphics g = Graphics.FromImage((System.Drawing.Image)b);
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
//绘制图像
g.DrawImage(imgToResize, 0, 0, destWidth, destHeight);
g.Dispose();
return (System.Drawing.Image)b;
}
#endregion
}
}

56
src/Znyc.Dispatching.Core/Options/Drivings.cs

@ -0,0 +1,56 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Znyc.Dispatching.Core.Options
{
public class Rootobject
{
public int status { get; set; }
public string message { get; set; }
public string request_id { get; set; }
public Result result { get; set; }
}
public class Result
{
public Route[] routes { get; set; }
}
public class Route
{
public string mode { get; set; }
public int distance { get; set; }
public int duration { get; set; }
public int traffic_light_count { get; set; }
public int toll { get; set; }
public Restriction restriction { get; set; }
public decimal[] polyline { get; set; }
public Step[] steps { get; set; }
public object[] tags { get; set; }
public Taxi_Fare taxi_fare { get; set; }
}
public class Restriction
{
public int status { get; set; }
}
public class Taxi_Fare
{
public int fare { get; set; }
}
public class Step
{
public string instruction { get; set; }
public int[] polyline_idx { get; set; }
public string road_name { get; set; }
public string dir_desc { get; set; }
public int distance { get; set; }
public string act_desc { get; set; }
public string accessorial_desc { get; set; }
}
}

254
src/Znyc.Dispatching.Core/Util/COSClientUtil.cs

@ -0,0 +1,254 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
namespace Znyc.Dispatching.Core.Util
{
public class COSClientUtil
{
string Bucket = "";
string Region = ""; //根据区域需要变更
string protocol = "";
string prefix = "https://znyc-imagers-1306377152.cos.ap-guangzhou.myqcloud.com";
// 上传文件
//NewUpload(prefix, "/dir/demo/web.rar", "C:\\web.rar");
//删除文件
// NEWDeleteFile(prefix, "/dir/demo/web.rar");
//下载文件
//FileDownload(prefix, "/dir/demo/0379aeb8-4a31-ec76-e79c-9cde8b021c98.jpg", "C:\\temp\\0379aeb8-4a31-ec76-e79c-9cde8b021c98.jpg"); //ok
public string SecretId = "AKID61h8KHyQcaJmBMHxNXS7XhcHgqmSt42k";//写自己的id
public string SecretKey = "VkkV0FEyTihSxDDyUkkV0GG0VllV0Ril";//写自己的密钥
#region 获取签名处理
/// <summary>
///
/// </summary>
/// <param name="strModel"></param>
/// <param name="pathname"></param>
/// <param name="qheaderlist"></param>
/// <param name="qurlparamlist"></param>
/// <returns></returns>
public string gettxkey(string strModel, string pathname, string qheaderlist, string qurlparamlist)
{
strModel = strModel.ToLower();
if (pathname.IndexOf("/") != 0)
{
pathname = "/" + pathname;
}
var singtime = "";
var now = new DateTimeOffset(DateTime.Now).ToUnixTimeSeconds();
var exp = new DateTimeOffset(DateTime.Now.AddMinutes(15)).ToUnixTimeSeconds();
singtime = now + ";" + exp;
string s1 = HmacSha1Sign(singtime, SecretKey);
string s2 = strModel + "\n" + pathname + "\n" + qurlparamlist + "\n" + qheaderlist + "\n";
string t1 = "";
t1 = EncryptToSHA1(s2);
string s3 = "sha1\n" + singtime + "\n" + t1 + "\n";
string s4 = HmacSha1Sign(s3, s1);
var authorization = "q-sign-algorithm=sha1&q-ak=" + SecretId + "&q-sign-time=" + singtime + "&q-key-time=" + singtime + "&q-header-list=" + qheaderlist + "&q-url-param-list=" + qurlparamlist + "&q-signature=" + s4;
return authorization;
}
public string EncryptToSHA1(string str)
{
var buffer = Encoding.UTF8.GetBytes(str);
var data = System.Security.Cryptography.SHA1.Create().ComputeHash(buffer);
var sb = new StringBuilder();
foreach (var t in data)
{
sb.Append(t.ToString("X2"));
}
return sb.ToString().ToLower();
}
/// <summary>
/// HMAC-SHA1加密算法
/// </summary>
/// <param name="secret">密钥</param>
/// <param name="strOrgData">源文</param>
/// <returns></returns>
public string HmacSha1Sign(string EncryptText, string EncryptKey)
{
HMACSHA1 myHMACSHA1 = new HMACSHA1(Encoding.Default.GetBytes(EncryptKey));
byte[] RstRes = myHMACSHA1.ComputeHash(Encoding.Default.GetBytes(EncryptText));
StringBuilder EnText = new StringBuilder();
foreach (byte Byte in RstRes)
{
EnText.AppendFormat("{0:x2}", Byte);
}
return EnText.ToString();
}
#endregion
#region 文件处理,上传,下载,删除
/// <summary>
/// put 方式上传文件
/// </summary>
/// <param name="url">路径</param>
/// <param name="remotePath">存的地址</param>
/// <param name="localPath">本地文件地址</param>
/// <returns></returns>
public string NewUpload(string url, string remotePath, string localPath)
{
var sign = gettxkey("put", remotePath, "", "");
string strurl = url + remotePath + "?sign=" + sign;
return HttpPut(strurl, localPath, sign);
}
public string HttpPut(string inUrl, string inFilePath, string sign)
{
//服务器路径      
string isok = "ok";
//文件路径      
// string fileName = "mysales.txt";
// 得到文件名,文件扩展名字,服务器路径
// 创建WebClient实例
WebClient myWebClient = new WebClient();
//header.Add("Authorization", sign);
myWebClient.Headers.Add("Authorization", sign);
//访问权限设置      
myWebClient.Credentials = CredentialCache.DefaultCredentials;
// 要上传的文件
FileStream fs = new FileStream(inFilePath, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fs);
try
{
byte[] postArray = br.ReadBytes((int)fs.Length);
Stream postStream = myWebClient.OpenWrite(inUrl, "PUT");
if (postStream.CanWrite)
{
postStream.Write(postArray, 0, postArray.Length);
}
else
{
}
postStream.Close();
}
catch (WebException errMsg)
{
isok = errMsg.Message;
}
return isok;
}
/// <summary>
/// 删除文件
/// </summary>
/// <param name="url"></param>
/// <param name="remotePath">文件路径</param>
/// <returns></returns>
public string NEWDeleteFile(string url, string remotePath)
{
string message = "ok";
var sign = gettxkey("DELETE", remotePath, "", "");
string strurl = url + remotePath;
var request = (HttpWebRequest)WebRequest.Create(strurl);
request.Method = "DELETE";
request.Headers.Add("Authorization", sign);
try
{
var response = (HttpWebResponse)request.GetResponse();
var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
}
catch (Exception ex)
{
message = ex.Message;
}
return message;
}
/// <summary>
/// 文件下载
/// </summary>
/// <param name="url"></param>
/// <param name="remotePath">下载地址</param>
/// <param name="path">保存地址</param>
/// <returns></returns>
public string FileDownload(string url, string remotePath, string path)
{
string strisok = "ok";
string tempPath = System.IO.Path.GetDirectoryName(path) + @"\temp";
System.IO.Directory.CreateDirectory(tempPath); //创建临时文件目录
string tempFile = tempPath + @"\" + System.IO.Path.GetFileName(path) + ".temp"; //临时文件
if (System.IO.File.Exists(tempFile))
{
System.IO.File.Delete(tempFile); //存在则删除
}
try
{
FileStream fs = new FileStream(tempFile, FileMode.Append, FileAccess.Write, FileShare.ReadWrite);
// 设置参数
HttpWebRequest request = WebRequest.Create(url + remotePath) as HttpWebRequest;
request.Method = "get";
var sign = gettxkey("get", remotePath, "", "");
request.Headers.Add("Authorization", sign);
//发送请求并获取相应回应数据
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
//直到request.GetResponse()程序才开始向目标网页发送Post请求
Stream responseStream = response.GetResponseStream();
//创建本地文件写入流
//Stream stream = new FileStream(tempFile, FileMode.Create);
byte[] bArr = new byte[1024];
int size = responseStream.Read(bArr, 0, (int)bArr.Length);
while (size > 0)
{
//stream.Write(bArr, 0, size);
fs.Write(bArr, 0, size);
size = responseStream.Read(bArr, 0, (int)bArr.Length);
}
//stream.Close();
fs.Close();
responseStream.Close();
System.IO.File.Move(tempFile, path);
//删除文件夹 tempPath
Directory.Delete(tempPath, true);
}
catch (Exception ex)
{
strisok = ex.Message;
}
return strisok;
}
#endregion
}
}

11
src/Znyc.Dispatching.Core/Znyc.Dispatching.Core.csproj

@ -12,6 +12,15 @@
<None Remove="Znyc.Dispatching.Core.xml" />
</ItemGroup>
<ItemGroup>
<COMReference Include="{d37e2a3e-8545-3a39-9f4f-31827c9124ab}">
<WrapperTool>tlbimp</WrapperTool>
<VersionMinor>4</VersionMinor>
<VersionMajor>2</VersionMajor>
<Guid>d37e2a3e-8545-3a39-9f4f-31827c9124ab</Guid>
</COMReference>
</ItemGroup>
<ItemGroup>
<Content Include="coreconfig.Staging.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
@ -35,6 +44,8 @@
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="6.0.1" />
<PackageReference Include="NLog.Web.AspNetCore" Version="4.14.0" />
<PackageReference Include="RabbitMQ.Client" Version="6.2.2" />
<PackageReference Include="System.Drawing.Common" Version="5.0.0" />
<PackageReference Include="System.Text.Encoding.CodePages" Version="6.0.0" />
<PackageReference Include="Tencent.QCloud.Cos.Sdk" Version="5.4.25" />
<PackageReference Include="TencentCloudSDK" Version="3.0.445" />
<PackageReference Include="UAParser" Version="3.1.47" />

561
src/Znyc.Dispatching.Core/Znyc.Dispatching.Core.xml

@ -215,9 +215,9 @@
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.UploadOptions.Avatar">
<summary>
头像上传配置
</summary>
<summary>
头像上传配置
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.UploadOptions.Document">
<summary>
@ -314,6 +314,20 @@
公众号
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.WxOpenSetting.AppID">
<summary>
小程序
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.WxOpenSetting.WxOpenAppSecret">
<summary>
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.WxOpenSetting.OpenUrl">
<summary>
请求CODEURL
</summary>
</member>
<member name="T:Znyc.Dispatching.Core.ApiGroupConsts">
<summary>
</summary>
@ -508,6 +522,26 @@
车辆缓存
</summary>
</member>
<member name="F:Znyc.Dispatching.Core.CommonConst.CACHE_KEY_VEHICLESTOP">
<summary>
车辆停下
</summary>
</member>
<member name="F:Znyc.Dispatching.Core.CommonConst.CACHE_KEY_VEHICLESTART">
<summary>
车辆启动
</summary>
</member>
<member name="F:Znyc.Dispatching.Core.CommonConst.CACHE_KEY_OFFVEHICLE">
<summary>
超速车辆缓存
</summary>
</member>
<member name="F:Znyc.Dispatching.Core.CommonConst.CACHE_KEY_SPEEDVEHICLE">
<summary>
超速车辆缓存
</summary>
</member>
<member name="F:Znyc.Dispatching.Core.CommonConst.CACHE_KEY_VEHICLEGPS">
<summary>
车辆GPS信息缓存
@ -528,6 +562,11 @@
员工列表缓存
</summary>
</member>
<member name="F:Znyc.Dispatching.Core.CommonConst.EMPLOYEELISTPAGE">
<summary>
员工分页列表缓存
</summary>
</member>
<member name="F:Znyc.Dispatching.Core.CommonConst.CACHE_KEY_UNREADALARM">
<summary>
未读报警消息
@ -583,6 +622,11 @@
</summary>
</member>
<member name="F:Znyc.Dispatching.Core.CommonConst.CACHE_KEY_PAYTYPE">
<summary>
开支类型
</summary>
</member>
<member name="T:Znyc.Dispatching.Core.Entitys.Company">
<summary>
公司表
@ -683,6 +727,151 @@
状态
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.Consumption.PayTyepID">
<summary>
开支类别ID
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.Consumption.ProductID">
<summary>
平摊ID
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.Consumption.CompayID">
<summary>
公司ID
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.Consumption.PayTyepName">
<summary>
开支类别
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.Consumption.CarID">
<summary>
车ID
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.Consumption.CarName">
<summary>
车牌号
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.Consumption.CarNo">
<summary>
车辆编号
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.Consumption.PayChannel">
<summary>
支付途径
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.Consumption.Money">
<summary>
金额
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.Consumption.Remarks">
<summary>
备注
</summary>
</member>
<member name="T:Znyc.Dispatching.Core.Entitys.Declaration">
<summary>
派单订单表
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.Declaration.CompanyId">
<summary>
公司Id
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.Declaration.CarType">
<summary>
车型
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.Declaration.ArriveDate">
<summary>
到场时间
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.Declaration.EndTime">
<summary>
结束时间
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.Declaration.Address">
<summary>
地址
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.Declaration.Info">
<summary>
报单信息
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.Declaration.ReportSheetID">
<summary>
报单员
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.Declaration.ReportSheetName">
<summary>
报单员
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.Declaration.Longitude">
<summary>
经度
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.Declaration.Latitude">
<summary>
纬度
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.Declaration.ProjectName">
<summary>
工程名称
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.Declaration.Position">
<summary>
施工位置
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.Declaration.Amount">
<summary>
施工量
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.Declaration.Kilometre">
<summary>
公里数
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.Declaration.Phone">
<summary>
联系电话
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.Declaration.State">
<summary>
报单状态
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.Declaration.ReviewName">
<summary>
审核人
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.Declaration.ReviewID">
<summary>
审核人ID
</summary>
</member>
<member name="T:Znyc.Dispatching.Core.Entitys.DEntityBase">
<summary>
自定义实体基类
@ -1261,6 +1450,11 @@
金额
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.Oil.Remarks">
<summary>
备注
</summary>
</member>
<member name="T:Znyc.Dispatching.Core.Entitys.Order">
<summary>
派工订单表
@ -1303,7 +1497,7 @@
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.Order.Status">
<summary>
状态,10=待指派,20=已指派,未接单,30=已接单,40=已出发,50=已完成,60=已签单,70=已离开,80=已评价,101=撤销
状态,10=待指派, 11=安全检查 20=已指派,未接单,30=已接单,40=已出发,50=已完成,60=已签单,70=已离开,80=已评价,101=撤销 新增安全状态
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.Order.ProjectId">
@ -1401,6 +1595,31 @@
施工单位
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.Order.Hour">
<summary>
小时
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.Order.Minute">
<summary>
分钟
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.Order.Party">
<summary>
方量
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.OrderCheck.OrderId">
<summary>
订单Id
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.OrderCheck.Picture">
<summary>
图片路径
</summary>
</member>
<member name="T:Znyc.Dispatching.Core.Entitys.OrderVehicle">
<summary>
派工订单车组人员表
@ -1446,6 +1665,26 @@
图片路径
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.PayType.TypeName">
<summary>
开支类别
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.PayType.Enable">
<summary>
是否启用 0 启用 1禁用
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.PayType.IsEdit">
<summary>
是否可以编辑 0 可以编辑 1,不可以编辑
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.PayType.CompayId">
<summary>
公司ID
</summary>
</member>
<member name="T:Znyc.Dispatching.Core.Entitys.Project">
<summary>
工程信息表
@ -1521,6 +1760,36 @@
联系人电话
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.RecordPlusOil.CarNo">
<summary>
车辆编号
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.RecordPlusOil.PlusOilNo">
<summary>
加油单号
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.RecordPlusOil.Rise">
<summary>
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.RecordPlusOil.Price">
<summary>
单价
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.RecordPlusOil.Total">
<summary>
总价
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.RecordPlusOil.Remarks">
<summary>
备注
</summary>
</member>
<member name="T:Znyc.Dispatching.Core.Entitys.Report">
<summary>
意见反馈表
@ -1821,6 +2090,21 @@
超速速度
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.Vehicle.IsOverstopAlarm">
<summary>
是否开启超速报警
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.Vehicle.Overstop">
<summary>
超速速度
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.Vehicle.IsOveroffAlarm">
<summary>
是否开启离线报警
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.Vehicle.Sort">
<summary>
排序
@ -1858,7 +2142,7 @@
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.VehiclePerson.VehicleId">
<summary>
公司Id
车辆Id
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.VehiclePerson.UserId">
@ -1906,6 +2190,66 @@
状态(字典 0正常 1停用 2删除)
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.WorkPlace.CompanyName">
<summary>
公司名称
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.WorkPlace.CompanyLogo">
<summary>
公司Logo
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.WorkPlace.Longitude">
<summary>
精度
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.WorkPlace.Latitude">
<summary>
纬度
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.WorkPlace.Address">
<summary>
地址
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.WorkPlace.AuditTime">
<summary>
审核时间
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.WorkPlace.Status">
<summary>
状态(字典 0正常 1停用 2删除)
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.WorkPlace.StopTag">
<summary>
停留标示Id
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.WorkPlace.IsOpenVehicleType">
<summary>
是否启用任务车型选项,默认为关
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.WorkPlaceEmployee.UnionId">
<summary>
UnionId
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.WorkPlaceEmployee.WordPlaceID">
<summary>
工地ID
</summary>
</member>
<member name="P:Znyc.Dispatching.Core.Entitys.WorkPlaceEmployee.UserId">
<summary>
用户Id
</summary>
</member>
<member name="T:Znyc.Dispatching.Core.Entitys.WxUserRelation">
<summary>
微信中间表
@ -2086,6 +2430,61 @@
修改状态
</summary>
</member>
<member name="T:Znyc.Dispatching.Core.Enums.DeclarationEnum">
<summary>
报单状态
</summary>
</member>
<member name="F:Znyc.Dispatching.Core.Enums.DeclarationEnum.MissedOrder">
<summary>
未接单
</summary>
</member>
<member name="F:Znyc.Dispatching.Core.Enums.DeclarationEnum.StayCheck">
<summary>
待审核
</summary>
</member>
<member name="F:Znyc.Dispatching.Core.Enums.DeclarationEnum.EndCheck">
<summary>
已审核
</summary>
</member>
<member name="F:Znyc.Dispatching.Core.Enums.DeclarationEnum.Assign">
<summary>
待指派
</summary>
</member>
<member name="F:Znyc.Dispatching.Core.Enums.DeclarationEnum.WordHit">
<summary>
工作中
</summary>
</member>
<member name="F:Znyc.Dispatching.Core.Enums.DeclarationEnum.OverWord">
<summary>
已完工
</summary>
</member>
<member name="F:Znyc.Dispatching.Core.Enums.HangFireQueuesConfig.default">
<summary>
默认
</summary>
</member>
<member name="F:Znyc.Dispatching.Core.Enums.HangFireQueuesConfig.apis">
<summary>
接口
</summary>
</member>
<member name="F:Znyc.Dispatching.Core.Enums.HangFireQueuesConfig.web">
<summary>
网站
</summary>
</member>
<member name="F:Znyc.Dispatching.Core.Enums.HangFireQueuesConfig.recurring">
<summary>
循环时间
</summary>
</member>
<member name="T:Znyc.Dispatching.Core.ErrorCode">
<summary>
系统错误码
@ -2491,26 +2890,6 @@
静止
</summary>
</member>
<member name="F:Znyc.Dispatching.Core.Enums.HangFireQueuesConfig.default">
<summary>
默认
</summary>
</member>
<member name="F:Znyc.Dispatching.Core.Enums.HangFireQueuesConfig.apis">
<summary>
接口
</summary>
</member>
<member name="F:Znyc.Dispatching.Core.Enums.HangFireQueuesConfig.web">
<summary>
网站
</summary>
</member>
<member name="F:Znyc.Dispatching.Core.Enums.HangFireQueuesConfig.recurring">
<summary>
循环时间
</summary>
</member>
<member name="T:Znyc.Dispatching.Core.HttpStatusCodeEnum">
<summary>
HTTP状态码
@ -2813,6 +3192,11 @@
待指派
</summary>
</member>
<member name="F:Znyc.Dispatching.Core.OrderStatus.Check">
<summary>
安检
</summary>
</member>
<member name="F:Znyc.Dispatching.Core.OrderStatus.Assign">
<summary>
已指派(未接单)
@ -4016,6 +4400,13 @@
<param name="dt"></param>
<returns></returns>
</member>
<member name="M:Znyc.Dispatching.Core.Helpers.DateTimeHelper.RemoveNotNumber(System.String)">
<summary>
去掉字符串中的非数字
</summary>
<param name="key"></param>
<returns></returns>
</member>
<member name="M:Znyc.Dispatching.Core.Helpers.DateTimeHelper.ToChineseDate(System.Int32)">
<summary>
时间转换
@ -4175,6 +4566,29 @@
<param name="lng2"></param>
<returns></returns>
</member>
<member name="F:Znyc.Dispatching.Core.Helpers.MapHelper.PI">
<summary>
Π
圆周率
</summary>
</member>
<member name="M:Znyc.Dispatching.Core.Helpers.MapHelper.OutOfChina(System.Double,System.Double)">
<summary>
是否中国境内坐标
</summary>
<param name="gpsLat"></param>
<param name="gpsLng"></param>
<returns></returns>
</member>
<member name="M:Znyc.Dispatching.Core.Helpers.MapHelper.WGS84_to_GCJ02(System.Double,System.Double,System.Double@,System.Double@)">
<summary>
WGS84坐标系转GCJ02坐标系
</summary>
<param name="wgsLat">WGS坐标,纬度</param>
<param name="wgsLng">WGS坐标,经度</param>
<param name="gcjLat">GCJ02坐标,纬度</param>
<param name="gcjLng">GCJ02坐标,经度</param>
</member>
<member name="M:Znyc.Dispatching.Core.Helpers.MapHelper.GetLonLatUrl(System.String,System.String)">
<summary>
传入经度纬度
@ -4535,6 +4949,14 @@
<param name="dateEnd">结束时间</param>
<returns>返回(分钟)</returns>
</member>
<member name="M:Znyc.Dispatching.Core.Helpers.TimeHelper.ExecDateDay(System.DateTime,System.DateTime)">
<summary>
比较两个时间相差的天数
</summary>
<param name="dateBegin">开始时间</param>
<param name="dateEnd">结束时间</param>
<returns>返回(分钟)</returns>
</member>
<member name="M:Znyc.Dispatching.Core.Helpers.TimeHelper.TimeSpanFormat(System.TimeSpan,System.Int32)">
<summary>
时间差格式转换
@ -4639,6 +5061,51 @@
<param name="bytes"></param>
<returns></returns>
</member>
<member name="M:Znyc.Dispatching.Core.Helpers.WaterMarkHelper.AddImageSignText(System.Drawing.Image,System.String,System.String,System.Int32,System.Int32,System.Int32,System.String)">
<summary>
文字水印
</summary>
<param name="imgPath">服务器图片相对路径</param>
<param name="filename">保存文件名</param>
<param name="watermarkText">水印文字</param>
<param name="watermarkStatus">图片水印位置 0=不使用 1=左上 2=中上 3=右上 4=左中 9=右下</param>
<param name="quality">附加水印图片质量,0-100</param>
<param name="fontsize">字体大小</param>
<param name="fontname">字体</param>
</member>
<member name="M:Znyc.Dispatching.Core.Helpers.WaterMarkHelper.AddTextToImg(System.Drawing.Image,System.String,System.Single,System.Single,System.Single,System.Int32,System.String)">
<summary>
添加文字水印
</summary>
<param name="image"></param>
<param name="text"></param>
<param name="fontSize">字体大小</param>
<param name="rectX">水印开始X坐标(自动扣除文字宽度)</param>
<param name="rectY">水印开始Y坐标(自动扣除文字高度</param>
<param name="opacity">0-255 值越大透明度越低</param>
<param name="externName">文件后缀名</param>
<returns></returns>
</member>
<member name="M:Znyc.Dispatching.Core.Helpers.WaterMarkHelper.AddImgToImg(System.Drawing.Image,System.Drawing.Image,System.Single,System.Single,System.Single,System.String)">
<summary>
添加图片水印
</summary>
<param name="image"></param>
<param name="text"></param>
<param name="rectX">水印开始X坐标(自动扣除图片宽度)</param>
<param name="rectY">水印开始Y坐标(自动扣除图片高度</param>
<param name="opacity">透明度 0-1</param>
<param name="externName">文件后缀名</param>
<returns></returns>
</member>
<member name="M:Znyc.Dispatching.Core.Helpers.WaterMarkHelper.ChangeOpacity(System.Drawing.Image,System.Single)">
<summary>
改变图片的透明度
</summary>
<param name="img">图片</param>
<param name="opacityvalue">透明度</param>
<returns></returns>
</member>
<member name="M:Znyc.Dispatching.Core.Helpers.XSSHelper.Filter(System.String)">
<summary>
XSS过滤
@ -4832,6 +5299,50 @@
sql高级代理
</summary>
</member>
<member name="M:Znyc.Dispatching.Core.Util.COSClientUtil.gettxkey(System.String,System.String,System.String,System.String)">
<summary>
</summary>
<param name="strModel"></param>
<param name="pathname"></param>
<param name="qheaderlist"></param>
<param name="qurlparamlist"></param>
<returns></returns>
</member>
<member name="M:Znyc.Dispatching.Core.Util.COSClientUtil.HmacSha1Sign(System.String,System.String)">
<summary>
HMAC-SHA1加密算法
</summary>
<param name="secret">密钥</param>
<param name="strOrgData">源文</param>
<returns></returns>
</member>
<member name="M:Znyc.Dispatching.Core.Util.COSClientUtil.NewUpload(System.String,System.String,System.String)">
<summary>
put 方式上传文件
</summary>
<param name="url">路径</param>
<param name="remotePath">存的地址</param>
<param name="localPath">本地文件地址</param>
<returns></returns>
</member>
<member name="M:Znyc.Dispatching.Core.Util.COSClientUtil.NEWDeleteFile(System.String,System.String)">
<summary>
删除文件
</summary>
<param name="url"></param>
<param name="remotePath">文件路径</param>
<returns></returns>
</member>
<member name="M:Znyc.Dispatching.Core.Util.COSClientUtil.FileDownload(System.String,System.String,System.String)">
<summary>
文件下载
</summary>
<param name="url"></param>
<param name="remotePath">下载地址</param>
<param name="path">保存地址</param>
<returns></returns>
</member>
<member name="T:Znyc.Dispatching.Core.OSSClientUtil">
<summary>
阿里云oss文件上传工具类

9
src/Znyc.Dispatching.Core/coreconfig.Development.json

@ -13,16 +13,17 @@
},
"Cache": {
//
"RedisConnectionString": "81.71.148.57:46379,password=dfeFEgeGH/,defaultDatabase=6"
"RedisConnectionString": "81.71.148.57:46379,password=dfeFEgeGH/,defaultDatabase=7"
//"RedisConnectionString": "81.71.148.57:46379,password=vtgA9HXFQQYA9g8Z,defaultDatabase=7"
//"RedisConnectionString": "127.0.0.1:6379"
},
"SnowId": {
"WorkerId": "1"
},
"SMSProvider": {
"SecretId": "AKIDGSN2VjJkZ7pIYzcdo0zjDCKCnQpEhXbW",
"SecretKey": "rQDI7fuoUyIEvLT5RWKqkUyGQJwBiU2P",
"SmsSdkAppid": "1400497500",
"SecretId": "AKID61h8KHyQcaJmBMHxNXS7XhcHgqmSt42k",
"SecretKey": "VkkV0FEyTihSxDDyUkkV0GG0VllV0Ril",
"SmsSdkAppid": "1306377152",
"Sign": "众能云车",
"Region": "ap-guangzhou",
"TemplateList": [

4
src/Znyc.Dispatching.Core/coreconfig.Production.json

@ -19,8 +19,8 @@
"WorkerId": "1"
},
"SMSProvider": {
"SecretId": "AKIDGSN2VjJkZ7pIYzcdo0zjDCKCnQpEhXbW",
"SecretKey": "rQDI7fuoUyIEvLT5RWKqkUyGQJwBiU2P",
"SecretId": "AKID61h8KHyQcaJmBMHxNXS7XhcHgqmSt42k",
"SecretKey": "VkkV0FEyTihSxDDyUkkV0GG0VllV0Ril",
"SmsSdkAppid": "1400497500",
"Sign": "众能云车",
"Region": "ap-guangzhou",

6
src/Znyc.Dispatching.Core/coreconfig.Staging.json

@ -18,9 +18,9 @@
"WorkerId": "1"
},
"SMSProvider": {
"SecretId": "AKIDGSN2VjJkZ7pIYzcdo0zjDCKCnQpEhXbW",
"SecretKey": "rQDI7fuoUyIEvLT5RWKqkUyGQJwBiU2P",
"SmsSdkAppid": "1400497500",
"SecretId": "AKID61h8KHyQcaJmBMHxNXS7XhcHgqmSt42k",
"SecretKey": "VkkV0FEyTihSxDDyUkkV0GG0VllV0Ril",
"SmsSdkAppid": "1306377152",
"Sign": "众能云车",
"Region": "ap-guangzhou",
"TemplateList": [

3
src/Znyc.Dispatching.EntityFramework.Core/dbsettings.Development.json

@ -1,7 +1,8 @@
{
"ConnectionStrings": {
//ԻãDZҪڱؽп
"DefaultConnection": "Server=81.71.148.57;Port=43306;Database=znyc_dispatching;Uid=znyc;Pwd=bIQISVSO;Charset=utf8mb4;AllowLoadLocalInfile=true"
//"DefaultConnection": "Server=81.71.148.57;Port=43306;Database=znyc_dispatching;Uid=guest;Pwd=4Y2e2WtekfDYWfT8;Charset=utf8mb4;AllowLoadLocalInfile=true",
"DefaultConnection": "Server=81.71.148.57; Port=43306; Database=znyc_dispatching; Uid=znyc; Pwd=bIQISVSO; Charset=utf8mb4"
//"DefaultConnection": "Server=127.0.0.1;Port=3306;Database=znyc_dispatching;Uid=root;Pwd=123456;Charset=utf8mb4"
}
}

1
src/Znyc.Dispatching.MongoDb.Repository/IRepositorys/IGpsRealTimeRepository.cs

@ -12,6 +12,7 @@ namespace Znyc.Dispatching.MongoDb.Repository.Repositorys
Task<List<GpsRealTime>> GetGpsRealTimeByCompanyId(long companyId);
Task<List<GpsRealTime>> GetSpeeding(int Speed);
Task<List<GpsRealTime>> GetOfflineGpsRealTime();
Task UpdateGpsRealTime(object id, GpsRealTime gpsRealTime);

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save