Commit a08d9abe authored by 黄奎's avatar 黄奎

Merge branch 'master' of http://gitlab.oytour.com/Kui2/education

parents 35eee09d fa4acefc
...@@ -40,5 +40,9 @@ ...@@ -40,5 +40,9 @@
/// 表单重复提交 /// 表单重复提交
/// </summary> /// </summary>
FormRepeatSubmit = 10003, FormRepeatSubmit = 10003,
/// <summary>
/// 不在打卡范围
/// </summary>
NotInCardRange = 20001,
} }
} }
...@@ -274,6 +274,15 @@ namespace Edu.Common ...@@ -274,6 +274,15 @@ namespace Edu.Common
} }
} }
public static int IsSendMsg
{
get
{
int.TryParse(ReadConfigKey("IsSendMsg"), out int _isSendMsg);
return _isSendMsg;
}
}
/// <summary> /// <summary>
/// 导出文件保存路径 /// 导出文件保存路径
/// </summary> /// </summary>
......
...@@ -16,6 +16,11 @@ namespace Edu.Common.Enum.Public ...@@ -16,6 +16,11 @@ namespace Edu.Common.Enum.Public
/// 阿里云 /// 阿里云
/// </summary> /// </summary>
[EnumField("阿里云")] [EnumField("阿里云")]
Alicloud = 2 Alicloud = 2,
/// <summary>
/// 系统
/// </summary>
[EnumField("系统")]
System = 3
} }
} }
using System;
using System.Collections.Generic;
using System.Text;
using Edu.Common.Plugin;
namespace Edu.Common.Enum.System
{
public enum BaseTemplateTypeEnum
{
/// <summary>
/// 订单下单成功通知
/// </summary>
[EnumField("订单下单成功通知")]
OrderSuccess = 1,
/// <summary>
/// 订单下单失败通知
/// </summary>
[EnumField("订单下单失败通知")]
OrderFail = 2
}
}
using System;
using System.Collections.Generic;
using System.Text;
using Edu.Common.Plugin;
namespace Edu.Common.Enum.System
{
public enum MsgSendStatusEnum
{
//发送状态1:等待回执,2:发送失败,3:发送成功。
/// <summary>
/// 等待回执
/// </summary>
[EnumField("等待回执")]
InReceipt = 1,
/// <summary>
/// 发送失败
/// </summary>
[EnumField("发送失败")]
Fail = 2,
/// <summary>
/// 发送成功
/// </summary>
[EnumField("发送成功")]
Success = 3,
}
}
using Edu.Common.Plugin;
namespace Edu.Common.Enum.User
{
/// <summary>
/// 特殊日期打卡类型
/// </summary>
public enum TechnicalTypeEnum
{
/// <summary>
/// 打卡
/// </summary>
PunchCard = 1,
/// <summary>
/// 不打卡
/// </summary>
NoPunchCard = 2
}
}
\ No newline at end of file
using System;
namespace Edu.Common.Plugin
{
/// <summary>
/// 地图帮助类
/// </summary>
public class MapHelper
{
//地球半径,单位米
private const double EARTH_RADIUS = 6378137;
/// <summary>
/// 计算两点位置的距离,返回两点的距离,单位 米
/// </summary>
/// <param name="lat1">第一点纬度</param>
/// <param name="lng1">第一点经度</param>
/// <param name="lat2">第二点纬度</param>
/// <param name="lng2">第二点经度</param>
/// <returns></returns>
public static double GetDistance(double lat1, double lng1, double lat2, double lng2)
{
double radLat1 = Rad(lat1);
double radLng1 = Rad(lng1);
double radLat2 = Rad(lat2);
double radLng2 = Rad(lng2);
double a = radLat1 - radLat2;
double b = radLng1 - radLng2;
double result = 2 * Math.Asin(Math.Sqrt(Math.Pow(Math.Sin(a / 2), 2) + Math.Cos(radLat1) * Math.Cos(radLat2) * Math.Pow(Math.Sin(b / 2), 2))) * EARTH_RADIUS;
return result;
}
/// <summary>
/// 计算两个坐标点之间的距离
/// 计算两点位置的距离,返回两点的距离,单位 米
/// </summary>
/// <param name="firstPoint">第一个坐标点的(纬度,经度)</param>
/// <param name="secondPoint">第二个坐标点的(纬度,经度)</param>
/// <returns>返回两点之间的距离,单位:公里/千米</returns>
public static double GetPointDistance(string firstPoint, string secondPoint)
{
var firstArray = firstPoint.Split(',');
var secondArray = secondPoint.Split(',');
var firstLatitude = Convert.ToDouble(firstArray[0].Trim());
var firstLongitude = Convert.ToDouble(firstArray[1].Trim());
var secondLatitude = Convert.ToDouble(secondArray[0].Trim());
var secondLongitude = Convert.ToDouble(secondArray[1].Trim());
return GetDistance(firstLatitude, firstLongitude, secondLatitude, secondLongitude);
}
/// <summary>
/// 经纬度转化成弧度
/// </summary>
/// <param name="d"></param>
/// <returns></returns>
private static double Rad(double d)
{
return (double)d * Math.PI / 180d;
}
}
}
using System;
using System.Collections.Generic;
using System.Text;
using Edu.Common.Enum.Public;
using Edu.Common.Enum.System;
using VT.FW.DB;
namespace Edu.Model.Entity.System
{
/// <summary>
/// 短信发送记录实体表
/// </summary>
[Serializable]
[DB(ConnectionName = "DefaultConnection")]
public class RB_Msg_BaseTemplate
{
public int ID { get; set; }
/// <summary>
/// 集团编号
/// </summary>
public int Group_Id { get; set; }
/// <summary>
/// 模板状态,0-正常,1-禁用
/// </summary>
public int TemplateStaus { get; set; }
public BaseTemplateTypeEnum BaseTemplateType { get; set; }
/// <summary>
/// 存储位置,1-腾讯云,2-阿里,3-其他
/// </summary>
public StoreTypeEnum StoreType { get; set; }
/// <summary>
/// 签名
/// </summary>
public string Sign { get; set; }
/// <summary>
/// 消息配置信息
/// </summary>
public string TemplateId { get; set; }
/// <summary>
/// 创建人
/// </summary>
public int CreateBy { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime CreateDate { get; set; }
}
}
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
using Edu.Common.Enum.System;
using VT.FW.DB; using VT.FW.DB;
namespace Edu.Model.Entity.System namespace Edu.Model.Entity.System
...@@ -36,10 +37,10 @@ namespace Edu.Model.Entity.System ...@@ -36,10 +37,10 @@ namespace Edu.Model.Entity.System
public DateTime CreateDate { get; set; } public DateTime CreateDate { get; set; }
/// <summary> /// <summary>
/// 发送状态1-失败,2-成功 /// 发送状态1:等待回执,2:发送失败,3:发送成功。
/// </summary> /// </summary>
public int SendStatus { get; set; } public MsgSendStatusEnum? SendStatus { get; set; }
/// <summary> /// <summary>
...@@ -67,5 +68,17 @@ namespace Edu.Model.Entity.System ...@@ -67,5 +68,17 @@ namespace Edu.Model.Entity.System
/// 接收人电话 /// 接收人电话
/// </summary> /// </summary>
public string ReceiverPhone { get; set; } public string ReceiverPhone { get; set; }
/// <summary>
/// 存储位置,1-腾讯云,2-阿里,3-其他
/// </summary>
public Common.Enum.Public.StoreTypeEnum StoreType { get; set; }
/// <summary>
/// 消息配置信息
/// </summary>
public string MsgConfigure { get; set; }
} }
} }
...@@ -56,6 +56,10 @@ namespace Edu.Model.Public ...@@ -56,6 +56,10 @@ namespace Edu.Model.Public
/// </summary> /// </summary>
public string CustomDomain { get; set; } public string CustomDomain { get; set; }
/// <summary>
/// 上传域名
/// </summary>
public string UploadDomain { get; set; }
/// <summary> /// <summary>
/// 自定义域名 /// 自定义域名
...@@ -65,7 +69,7 @@ namespace Edu.Model.Public ...@@ -65,7 +69,7 @@ namespace Edu.Model.Public
/// 自定义域名 /// 自定义域名
/// </summary> /// </summary>
public string SecretId { get; set; } public string SecretId { get; set; }
} }
} }
using System;
using System.Collections.Generic;
using System.Text;
using Edu.Model.Entity.System;
namespace Edu.Model.ViewModel.System
{
public class RB_Msg_BaseTemplate_ViewModel: RB_Msg_BaseTemplate
{
/// <summary>
/// 创建时间字符串
/// </summary>
public string CreateDateStr
{
get
{
return Common.ConvertHelper.FormatTime(this.CreateDate);
}
}
public string BaseTemplateTypeStr { get; set; }
}
}
...@@ -28,5 +28,8 @@ namespace Edu.Model.ViewModel.System ...@@ -28,5 +28,8 @@ namespace Edu.Model.ViewModel.System
/// </summary> /// </summary>
public string EndDate { get; set; } public string EndDate { get; set; }
public RB_Msg_Base_ViewModel MsgBase { get; set; }
} }
} }
...@@ -9,6 +9,13 @@ ...@@ -9,6 +9,13 @@
<ProjectReference Include="..\Edu.Common\Edu.Common.csproj" /> <ProjectReference Include="..\Edu.Common\Edu.Common.csproj" />
<ProjectReference Include="..\Edu.Model\Edu.Model.csproj" /> <ProjectReference Include="..\Edu.Model\Edu.Model.csproj" />
<ProjectReference Include="..\Edu.Repository\Edu.Repository.csproj" /> <ProjectReference Include="..\Edu.Repository\Edu.Repository.csproj" />
<ProjectReference Include="..\Edu.ThirdCore\Edu.ThirdCore.csproj" />
</ItemGroup>
<ItemGroup>
<Reference Include="aliyun-net-sdk-dysmsapi">
<HintPath>..\Edu.ThirdCore\lib\aliyun-net-sdk-dysmsapi.dll</HintPath>
</Reference>
</ItemGroup> </ItemGroup>
</Project> </Project>
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using System.Text; using System.Text;
using Edu.Common.Enum; using Edu.Common.Enum;
using Edu.Model.Entity.System; using Edu.Model.Entity.System;
using Edu.Model.ViewModel.System; using Edu.Model.ViewModel.System;
using Edu.Repository.System; using Edu.Repository.System;
using VT.FW.DB; using VT.FW.DB;
using Aliyun.Net.SDK.Core;
namespace Edu.Module.System namespace Edu.Module.System
{ {
...@@ -21,6 +23,11 @@ namespace Edu.Module.System ...@@ -21,6 +23,11 @@ namespace Edu.Module.System
/// </summary> /// </summary>
private readonly RB_Msg_BaseRepository msgBaseRepository = new RB_Msg_BaseRepository(); private readonly RB_Msg_BaseRepository msgBaseRepository = new RB_Msg_BaseRepository();
/// <summary>
/// 短信模板配置仓储层对象
/// </summary>
private readonly RB_Msg_BaseTemplateRepository msgBaseTemplateRepository = new RB_Msg_BaseTemplateRepository();
#region 短信记录 #region 短信记录
...@@ -42,7 +49,7 @@ namespace Edu.Module.System ...@@ -42,7 +49,7 @@ namespace Edu.Module.System
/// <summary> /// <summary>
/// 获取班级列表 /// 获取短信配置列表
/// </summary> /// </summary>
/// <param name="query"></param> /// <param name="query"></param>
/// <returns></returns> /// <returns></returns>
...@@ -52,7 +59,7 @@ namespace Edu.Module.System ...@@ -52,7 +59,7 @@ namespace Edu.Module.System
} }
/// <summary> /// <summary>
/// 获取班级分页列表 /// 获取短信配置列表
/// </summary> /// </summary>
/// <param name="pageIndex"></param> /// <param name="pageIndex"></param>
/// <param name="pageSize"></param> /// <param name="pageSize"></param>
...@@ -76,7 +83,8 @@ namespace Edu.Module.System ...@@ -76,7 +83,8 @@ namespace Edu.Module.System
{ {
{ nameof(RB_Msg_Base.CreateDate),model.CreateDate}, { nameof(RB_Msg_Base.CreateDate),model.CreateDate},
{ nameof(RB_Msg_Base.CreateBy),model.CreateBy}, { nameof(RB_Msg_Base.CreateBy),model.CreateBy},
{ nameof(RB_Msg_Base.MsgConfigure),model.MsgConfigure} { nameof(RB_Msg_Base.StoreType),model.StoreType},
{ nameof(RB_Msg_Base.MsgConfigure),model.MsgConfigure}
}; };
return msgBaseRepository.Update(fileds, new WhereHelper(nameof(RB_Msg_Base.ID), model.ID)); return msgBaseRepository.Update(fileds, new WhereHelper(nameof(RB_Msg_Base.ID), model.ID));
} }
...@@ -111,5 +119,194 @@ namespace Edu.Module.System ...@@ -111,5 +119,194 @@ namespace Edu.Module.System
return msgBaseRepository.Update(fileds, new WhereHelper(nameof(RB_Msg_Base.ID), ID)); return msgBaseRepository.Update(fileds, new WhereHelper(nameof(RB_Msg_Base.ID), ID));
} }
#endregion #endregion
#region 短信模板配置
/// <summary>
/// 获取短信模板配置列表
/// </summary>
/// <param name="query"></param>
/// <returns></returns>
public List<RB_Msg_BaseTemplate_ViewModel> GetMsgBaseTemplateListModule(RB_Msg_BaseTemplate_ViewModel query)
{
return msgBaseTemplateRepository.GetListRepository(query);
}
/// <summary>
/// 获取短信模板配置分页列表
/// </summary>
/// <param name="pageIndex"></param>
/// <param name="pageSize"></param>
/// <param name="rowsCount"></param>
/// <param name="query"></param>
/// <returns></returns>
public List<RB_Msg_BaseTemplate_ViewModel> GetMsgBaseTemplatePageListModule(int pageIndex, int pageSize, out long rowsCount, RB_Msg_BaseTemplate_ViewModel query)
{
return msgBaseTemplateRepository.GetPageListRepository(pageIndex, pageSize, out rowsCount, query);
}
/// <summary>
/// 新增修改 短信模板配置
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public bool SetMsgBaseTemplateModule(RB_Msg_BaseTemplate_ViewModel model)
{
if (model.ID > 0)
{
Dictionary<string, object> fileds = new Dictionary<string, object>()
{
{ nameof(RB_Msg_BaseTemplate_ViewModel.CreateDate),model.CreateDate},
{ nameof(RB_Msg_BaseTemplate_ViewModel.CreateBy),model.CreateBy},
{ nameof(RB_Msg_BaseTemplate_ViewModel.TemplateStaus),model.TemplateStaus},
{ nameof(RB_Msg_BaseTemplate_ViewModel.TemplateId),model.TemplateId},
{ nameof(RB_Msg_BaseTemplate_ViewModel.StoreType),model.StoreType},
{ nameof(RB_Msg_BaseTemplate_ViewModel.Sign),model.Sign},
{ nameof(RB_Msg_BaseTemplate_ViewModel.BaseTemplateType),model.BaseTemplateType}
};
return msgBaseTemplateRepository.Update(fileds, new WhereHelper(nameof(RB_Msg_BaseTemplate_ViewModel.ID), model.ID));
}
else
{
var newId = msgBaseTemplateRepository.Insert(model);
return newId > 0;
}
}
/// <summary>
/// 根据短信模板配置编号获取短信配置详细信息
/// </summary>
/// <param name="ClassId"></param>
/// <returns></returns>
public RB_Msg_BaseTemplate_ViewModel GetMsgBaseTemplateModule(object ClassId)
{
return msgBaseTemplateRepository.GetEntity<RB_Msg_BaseTemplate_ViewModel>(ClassId);
}
/// <summary>
/// 删除短信模板配置
/// </summary>
/// <param name="ClassId"></param>
/// <returns></returns>
public bool RemoveMsgBaseTemplateModule(object ID)
{
Dictionary<string, object> fileds = new Dictionary<string, object>()
{
{ nameof(RB_Msg_BaseTemplate_ViewModel.TemplateStaus),(int)DateStateEnum.Delete},
};
return msgBaseTemplateRepository.Update(fileds, new WhereHelper(nameof(RB_Msg_BaseTemplate_ViewModel.ID), ID));
}
#endregion
#region 发送短信统一方法
public void SendMsg(object PhoneMessage, Common.Enum.System.BaseTemplateTypeEnum BaseTemplateType, RB_Msg_Log msgLogModel)
{
//查询当前集团的短信基础配置
var msgBaseList = msgBaseRepository.GetListRepository(new RB_Msg_Base_Function_ViewModel { Group_Id = msgLogModel.Group_Id });
//查询当前下面是否有模板
var allMsgBaseTemplateList = msgBaseTemplateRepository.GetListRepository(new RB_Msg_BaseTemplate_ViewModel { BaseTemplateType = BaseTemplateType, Group_Id = msgLogModel.Group_Id }).Where(x => x.TemplateStaus == 0);
if (msgBaseList != null && msgBaseList.Any() && allMsgBaseTemplateList != null && allMsgBaseTemplateList.Any())
{
RB_Msg_Base_Function_ViewModel model = new RB_Msg_Base_Function_ViewModel(); // msgBaseList.OrderBy(x => x.ID).FirstOrDefault();
if (allMsgBaseTemplateList.Where(x => x.BaseTemplateType == BaseTemplateType).GroupBy(x => x.StoreType).Count() > 1)
{
model = msgBaseList.OrderBy(x => x.ID).FirstOrDefault();
}
else
{
model = msgBaseList.Where(x => x.StoreType == allMsgBaseTemplateList.FirstOrDefault().StoreType).FirstOrDefault();
}
if (model != null && model.ID > 0)
{
if (!string.IsNullOrWhiteSpace(model.MsgConfigure))
{
msgLogModel.StoreType = model.StoreType;
msgLogModel.MsgConfigure = model.MsgConfigure;
int id = msgLogRepository.Insert(msgLogModel);
model.MsgBase = Common.Plugin.JsonHelper.DeserializeObject<RB_Msg_Base_ViewModel>(model.MsgConfigure);
var msgBaseTemplateList = allMsgBaseTemplateList.Where(x => x.BaseTemplateType == BaseTemplateType);
if (!string.IsNullOrWhiteSpace(model.MsgBase.AccessKeyId) && !string.IsNullOrWhiteSpace(model.MsgBase.AccessSecret) && !string.IsNullOrWhiteSpace(model.MsgBase.Domain) && !string.IsNullOrWhiteSpace(model.MsgBase.RegionId))
{
if (msgBaseTemplateList != null && msgBaseTemplateList.Any(x => x.TemplateStaus == 0))
{
var msgBaseTemplateModel = msgBaseTemplateList.Where(x => x.TemplateStaus == 0).FirstOrDefault();
if (Common.Config.IsSendMsg == 1)
{
ThirdCore.Message.SMSService.SendMsg(msgLogModel.ReceiverPhone, PhoneMessage, msgBaseTemplateModel.TemplateId, msgBaseTemplateModel.Sign, model.MsgBase.Domain, model.MsgBase.AccessKeyId, model.MsgBase.AccessSecret, model.MsgBase.RegionId, id.ToString());
}
}
}
}
}
}
// ThirdCore.Message.SMSService.SendMsg("13551132417", PhoneMessage, "SMS_201722097", "印象之旅", "dysmsapi.aliyuncs.com", "LTAIwE7l9dImZSa3", "j47Ajn0d0WzUCIX8Biyj3P2r8QDltI", "cn-hangzhou");
}
/// <summary>
/// 更新消息发送状态
/// </summary>
public void UpdateMsgSendStatus()
{
var list = msgLogRepository.GetListRepository(new RB_Msg_Log { SendStatus = Common.Enum.System.MsgSendStatusEnum.InReceipt });
foreach (var item in list.GroupBy(x => new { x.ReceiverPhone, x.StoreType, x.MsgConfigure, CreateDate = x.CreateDate.ToString("yyyyMMdd") }))
{
if (item.Key.StoreType == Common.Enum.Public.StoreTypeEnum.Alicloud)
{
try
{
RB_Msg_Base_ViewModel msgBase = new RB_Msg_Base_ViewModel();
if (!string.IsNullOrWhiteSpace(item.Key.MsgConfigure))
{
msgBase = Common.Plugin.JsonHelper.DeserializeObject<RB_Msg_Base_ViewModel>(item.Key.MsgConfigure);
}
Aliyun.Acs.Dysmsapi.Model.V20170525.QuerySendDetailsResponse querySendDetailsResponse = Edu.ThirdCore.Message.MessageCore.QuerySendDetails(item.Key.ReceiverPhone, DateTime.Now.ToString("yyyyMMdd"), "", msgBase.Domain, msgBase.AccessKeyId, msgBase.AccessSecret, msgBase.RegionId);
if (querySendDetailsResponse.Code == "OK")
{
if (querySendDetailsResponse.SmsSendDetailDTOs != null && querySendDetailsResponse.SmsSendDetailDTOs.Any())
{
foreach (var modelSmsSendDetailDTO in querySendDetailsResponse.SmsSendDetailDTOs)
{
int sendStatus = 1;
if (modelSmsSendDetailDTO != null && !string.IsNullOrWhiteSpace(modelSmsSendDetailDTO.OutId))
{
sendStatus = (int)(modelSmsSendDetailDTO.SendStatus ?? 1);
}
if (sendStatus > 1)
{
Dictionary<string, object> fileds = new Dictionary<string, object>()
{
{ nameof(RB_Msg_Log.SendStatus),sendStatus}
};
msgLogRepository.Update(fileds, new WhereHelper(nameof(RB_Msg_Log.ID), Convert.ToInt32(modelSmsSendDetailDTO.OutId)));
}
}
}
}
}
catch (Exception ex)
{
}
}
}
}
#endregion
} }
} }
using Edu.Common.API;
using Edu.Common.Enum.User;
using Edu.Common.Plugin;
using Edu.Model.CacheModel;
using Edu.Model.Entity.User;
using Edu.Model.Public;
using Edu.Model.ViewModel.User;
using Edu.Repository.User;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using VT.FW.DB;
namespace Edu.Module.User
{
/// <summary>
/// 考勤处理类
/// </summary>
public class AttendanceRecodModule
{
private Rb_attendanceRepository respository = new Rb_attendanceRepository();
private Rb_attendance_wayRepository AWrespository = new Rb_attendance_wayRepository();
private Rb_workdaysetingRepository WDrespository = new Rb_workdaysetingRepository();
private Rb_technicaldatesRepository TDrespository = new Rb_technicaldatesRepository();
private Rb_attendance_recordRepository attendRecordRespository = new Rb_attendance_recordRepository();
/// <summary>
/// 获取打卡信息
/// </summary>
/// <param name="empId">员工id</param>
/// <param name="RB_Department_Id">部门id</param>
/// <param name="date">打卡日期</param>
/// <returns></returns>
public JObject GetAttendRecod(int empId, int RB_Department_Id, string date)
{
if (Convert.ToDateTime(date).Date > DateTime.Now.Date)
{
return null;
}
RB_Attendance_Extend attendance = respository.GetAttendanceByEmpId(empId);
if (attendance != null)
{
if (attendance.CreateTime.Date > Convert.ToDateTime(date).Date)
{
return null;
}
}
else
{
return null;
}
//打卡记录信息
RB_Attendance_Record_Extend recode = attendRecordRespository.GetAttendRecod(empId, date);
JObject result = new JObject();
//先查询特殊日期打卡时间
//RB_Technicaldates_Extend technical = TDrespository.GetSpecialDate(empId, RB_Department_Id, date);
var technicalList = TDrespository.GetSpecialDateList(empId, date);// ld 2020-05-25调整
RB_Technicaldates_Extend technical = null;
if (technicalList.Any())
{
if (technicalList.Where(x => x.EmployeeId > 0).Any() && technicalList.Where(x => x.EmployeeId == empId).Any())
{
technical = technicalList.Where(x => x.EmployeeId == empId).FirstOrDefault();
}
else if (technicalList.Where(x => x.RB_Department_Id > 0).Any() && technicalList.Where(x => x.RB_Department_Id == RB_Department_Id).Any())
{
technical = technicalList.Where(x => x.RB_Department_Id == RB_Department_Id).FirstOrDefault();
}
else
{
if (technicalList.Where(x => x.RB_Department_Id == 0 && x.EmployeeId == 0).Any())
{
technical = technicalList.Where(x => x.RB_Department_Id == 0 && x.EmployeeId == 0).FirstOrDefault();
}
}
}
if (technical != null)
{
if (technical.Type == (int)TechnicalTypeEnum.PunchCard)
{
result["onTime"] = technical.BeOnDutyTime;
result["offTime"] = technical.OffDutyTime;
}
else
{
//特殊日期不打卡
return null;
}
}
else
{
//正常打卡日期
RB_WorkdaySeting_Extend workDay = WDrespository.GetWorkDay(empId, StringHelper.GetWeek(Convert.ToDateTime(date)));
if (workDay != null)
{
result["onTime"] = workDay.BeOnDutyTime;
result["offTime"] = workDay.OffDutyTime;
}
else
{
return null;
}
}
if (recode != null)
{
if (!string.IsNullOrEmpty(recode.BeOnTime))
{
result["onTime"] = recode.BeOnTime;
}
if (!string.IsNullOrEmpty(recode.OffTime))
{
result["offTime"] = recode.OffTime;
}
result["id"] = recode.Id;
result["onStatus"] = (int)recode.BeOnStatus;
result["onPunshCardTime"] = recode.BeOnDutyTime == null ? "" : recode.BeOnDutyTime.Value.ToString("HH:mm");
result["onPunshCardAddress"] = recode.BeOnVerifyAddress;
result["isLackCard"] = recode.BeOnStatus == AttendanceEnum.QK ? true : false;
result["offStatus"] = (int)recode.OffStatus;
result["offPunshCardTime"] = recode.OffDutyTime?.ToString("HH:mm");
result["offPunshCardAddress"] = recode.OffVerifyAddress;
}
else
{
result["id"] = 0;
result["onStatus"] = 0;
result["onPunshCardTime"] = null;
result["onPunshCardAddress"] = "";
result["isLackCard"] = false;
result["offStatus"] = 0;
result["offPunshCardTime"] = null;
result["offPunshCardAddress"] = "";
}
string[] tempTypeStr = WFTTemplateTypeEnum.ReissueCard.ToName().Split('|');
result["cmd"] = tempTypeStr[3];//请求表单cmd
result["submitCmd"] = tempTypeStr[4];//提交表单cmd
return result;
}
/// <summary>
/// 验证是否在打卡范围
/// </summary>
/// <param name="empId">员工id</param>
/// <param name="latAndLong">经纬度(维度,经度)</param>
/// <param name="wifiMac">mac地址</param>
/// <param name="oldWifiMac">原始wifiMac</param>
/// <param name="wayList">公司考勤方式</param>
/// <returns></returns>
public bool VerifyPunchCard(int empId, string latAndLong, string wifiMac, string oldWifiMac, out List<RB_Attendance_Way_Extend> wayList)
{
//verifyAddress合法类型名称
//type合法类型 1 地点 2 wifi
wayList = AWrespository.GetWayByEmployeeId(empId);
return IsRange(empId, latAndLong, wifiMac, oldWifiMac, out int type, out string verifyAddress);
}
/// <summary>
/// App考勤打卡
/// </summary>
/// <param name="empId">员工id</param>
/// <param name="RB_Department_Id">部门id</param>
/// <param name="latAndLong">经纬度(维度,经度)</param>
/// <param name="wifiMac">mac地址</param>
/// <param name="oldWifiMac">原始mac</param>
/// <param name="phoneId">手机唯一id</param>
/// <param name="address">打卡地址</param>
/// <param name="PhoneName">打卡地址</param>
/// <param name="PunchCardType">1上班,2下班</param>
/// <param name="isNotVerifyVifi">是否验证wifi</param>
/// <returns></returns>
public string PunchCard(int empId, int RB_Department_Id, string latAndLong, string wifiMac, string oldWifiMac, string phoneId, string address, string PhoneName, out int PunchCardType, bool isNotVerifyVifi = false)
{
PunchCardType = 1;
string date = DateTime.Now.ToShortDateString();
//打卡记录信息
RB_Attendance_Record_Extend recode = attendRecordRespository.GetAttendRecod(empId, date);
//根据手机标识码获取打卡记录信息
RB_Attendance_Record_Extend phoneIdRecode = attendRecordRespository.GetAttendRecodByPhoneId(phoneId, date);
string onTime = "";
string offTime = "";
//先查询特殊日期打卡时间
#region 获取打卡时间
//RB_Technicaldates_Extend technical = TDrespository.GetSpecialDate(empId, RB_Department_Id, date);
var technicalList = TDrespository.GetSpecialDateList(empId, date);// ld 2020-01-25 调整
RB_Technicaldates_Extend technical = null;
if (technicalList.Any())
{
if (technicalList.Where(x => x.EmployeeId > 0).Any() && technicalList.Where(x => x.EmployeeId == empId).Any())
{
technical = technicalList.Where(x => x.EmployeeId == empId).FirstOrDefault();
}
else if (technicalList.Where(x => x.RB_Department_Id > 0).Any() && technicalList.Where(x => x.RB_Department_Id == RB_Department_Id).Any())
{
technical = technicalList.Where(x => x.RB_Department_Id == RB_Department_Id).FirstOrDefault();
}
else
{
if (technicalList.Where(x => x.RB_Department_Id == 0 && x.EmployeeId == 0).Any())
{
technical = technicalList.Where(x => x.RB_Department_Id == 0 && x.EmployeeId == 0).FirstOrDefault();
}
}
}
if (technical != null)
{
if (technical.Type == (int)TechnicalTypeEnum.PunchCard)
{
onTime = technical.BeOnDutyTime;
offTime = technical.OffDutyTime;
}
else
{
//特殊日期不打卡
return "ok";
}
}
else
{
//正常打卡日期
RB_WorkdaySeting_Extend workDay = WDrespository.GetWorkDay(empId, StringHelper.GetWeek(Convert.ToDateTime(date)));
if (workDay != null)
{
onTime = workDay.BeOnDutyTime;
offTime = workDay.OffDutyTime;
}
else
{
return "今天休息,无需打卡";
}
}
#endregion
#region 验证打卡方式
//type合法类型 1 地点 2 wifi
//是否在范围
int type = 2;
string verifyAddress = "";
bool isRange = isNotVerifyVifi ? isNotVerifyVifi : IsRange(empId, latAndLong, wifiMac, oldWifiMac, out type, out verifyAddress);
if (!isRange && string.IsNullOrWhiteSpace(latAndLong))
{
type = 2;
}
#endregion
#region 打卡
if (recode == null)//上班打卡
{
if (phoneIdRecode != null && phoneIdRecode.EmployeeId != empId)
{
return "一台手机一天不能为多个账号打卡";
}
else
{
RB_Attendance_Record dbRecord = new RB_Attendance_Record
{
EmployeeId = empId,
BeOnAddress = address,
BeOnDutyTime = DateTime.Now,
BeOnType = type,
BeOnVerifyAddress = verifyAddress
};
if (dbRecord.BeOnType == 1)
{
dbRecord.BeOnTargetAddress = latAndLong;
}
else
{
dbRecord.BeOnTargetAddress = wifiMac;
}
dbRecord.PhoneId = phoneId;
dbRecord.PhoneName = PhoneName;
dbRecord.Date = DateTime.Now;
dbRecord.BeOnTime = onTime;
//string punchCardTime = dbRecord.BeOnDutyTime.ToShortTimeString();
DateTime punchCardDateTime = DateTime.Now;//打卡时间
DateTime onDateTime = Convert.ToDateTime(onTime);//上班时间
if (isRange)
{
if (punchCardDateTime.AddMinutes(-1) <= onDateTime)
{
dbRecord.BeOnStatus = AttendanceEnum.ZC;
}
else
{
dbRecord.BeOnStatus = AttendanceEnum.CD;
TimeSpan timeSpan = punchCardDateTime - onDateTime;
dbRecord.BeLateTime = (int)timeSpan.TotalMinutes;//迟到分钟数
}
}
else
{
return "不在打卡范围";
}
attendRecordRespository.Insert(dbRecord);
return "ok";
}
}
else
{
if (phoneIdRecode != null && phoneIdRecode.Id != recode.Id)
{
return "一台手机一天不能为多个账号打卡";
}
else
{
RB_Attendance_Record dbRecord = recode.RefMapperTo<RB_Attendance_Record>();
dbRecord.OffAddress = address;
if (dbRecord.BeOnType == 1)
{
dbRecord.OffTargetAddress = latAndLong;
}
else
{
dbRecord.OffTargetAddress = wifiMac;
}
dbRecord.OffDutyTime = DateTime.Now;
dbRecord.OffType = type;
dbRecord.PhoneId = phoneId;
dbRecord.PhoneName = PhoneName;
dbRecord.OffVerifyAddress = verifyAddress;
dbRecord.OffTime = offTime;
//string punchCardTime = dbRecord.BeOnDutyTime.ToShortTimeString();
DateTime punchCardDateTime = DateTime.Now;//打卡时间
DateTime offDateTime = Convert.ToDateTime(offTime);//下班时间
if (isRange)
{
if (punchCardDateTime >= offDateTime)
{
dbRecord.OffStatus = AttendanceEnum.ZC;
PunchCardType = 2;
}
else
{
return "没到下班时间,打卡失败";
}
}
else
{
return "不在打卡范围";
}
attendRecordRespository.Update(dbRecord);
return "ok";
}
}
#endregion
}
/// <summary>
/// 验证打卡范围
/// </summary>
/// <param name="empId"></param>
/// <param name="latAndLong"></param>
/// <param name="wifiMac"></param>
/// <param name="oldWifiMac"></param>
/// <param name="type">合法类型 1 地点 2 wifi</param>
/// <param name="verifyAddress">合法类型 名称</param>
/// <returns></returns>
private bool IsRange(int empId, string latAndLong, string wifiMac, string oldWifiMac, out int type, out string verifyAddress)
{
type = 1;
verifyAddress = "";
List<RB_Attendance_Way_Extend> wayList = AWrespository.GetWayByEmployeeId(empId);
if (wayList != null && wayList.Count() > 0)
{
if (!string.IsNullOrWhiteSpace(wifiMac))
{
List<RB_Attendance_Way_Extend> wifiWay = wayList.Where(t => t.Type == (int)AttendWayTypeEnum.Wifi && (t.TargetAddress.ToLower() == wifiMac || t.TargetAddress.ToLower() == oldWifiMac)).ToList();
if (wifiWay != null && wifiWay.Count() > 0)
{
verifyAddress = wifiWay.FirstOrDefault().Name;
type = 2;
return true;
}
}
if (!string.IsNullOrWhiteSpace(latAndLong))
{
List<RB_Attendance_Way_Extend> addressList = wayList.Where(t => t.Type == (int)AttendWayTypeEnum.Address).ToList();
if (addressList != null && addressList.Count() > 0)
{
foreach (var item in addressList)
{
double distance = MapHelper.GetPointDistance(item.TargetAddress, latAndLong);
if (distance <= item.Scope)
{
verifyAddress = item.Name;
type = 1;
return true;
}
}
}
}
return false;
}
else
{
return false;
}
}
/// <summary>
/// 获取打卡信息统计
/// </summary>
/// <param name="empId">员工id</param>
/// <param name="date">获取日期(年-月-日)</param>
/// <returns></returns>
public List<JObject> PunchCardStatistical(int empId, string date)
{
//打卡记录信息
List<RB_Attendance_Record_Extend> recodeList = attendRecordRespository.PunchCardStatistical(empId, date);
List<JObject> result = new List<JObject>();
#region 出勤天数
{
JObject attendance = new JObject
{
["name"] = $"出勤天数",
["day"] = $"{recodeList.Count} 天"
};
if (recodeList.Count > 0)
{
attendance["color"] = "black";
}
else
{
attendance["color"] = "gray";
}
List<string> dataList = new List<string>();
foreach (var item in recodeList)
{
dataList.Add($"{item.Date.ToShortDateString().Replace("/", "-")}({StringHelper.GetWeekChar(item.Date)})");
}
attendance["dataList"] = JsonConvert.SerializeObject(dataList);
result.Add(attendance);
}
#endregion
#region 休息天数
{
JObject rest = new JObject
{
["name"] = $"休息天数"
};
DateTime searchDate = Convert.ToDateTime(date);
List<string> dataList = new List<string>();
if (DateTime.Now.ToString("yyyy-MM") == searchDate.ToString("yyyy-MM"))//本月
{
TimeSpan timeSpan = DateTime.Now - new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);
int days = timeSpan.Days + 1;
rest["day"] = $"{days - recodeList.Count()} 天";
rest["color"] = "gray";
for (int i = 1; i <= days; i++)
{
DateTime dt = new DateTime(searchDate.Year, searchDate.Month, i);
if (recodeList.Where(t => t.Date.ToShortDateString() == dt.ToShortDateString()).Count() == 0)
{
dataList.Add($"{dt.Date.ToShortDateString().Replace("/", "-")}({StringHelper.GetWeekChar(dt.Date)})");
}
}
//foreach (var item in recodeList)
//{
// dataList.Add($"{item.Date.ToShortDateString().Replace("/", "-")}({StringHelper.GetWeekChar(item.Date)})");
//}
}
else
{
int days = DateTime.DaysInMonth(searchDate.Year, searchDate.Month);
rest["day"] = $"{days - recodeList.Count } 天";
rest["color"] = "black";
for (int i = 1; i <= days; i++)
{
DateTime dt = new DateTime(searchDate.Year, searchDate.Month, i);
if (recodeList.Where(t => t.Date.ToShortDateString() == dt.ToShortDateString()).Count() == 0)
{
dataList.Add($"{dt.Date.ToShortDateString().Replace("/", "-")}({StringHelper.GetWeekChar(dt.Date)})");
}
}
}
rest["dataList"] = JsonConvert.SerializeObject(dataList);
result.Add(rest);
}
#endregion
#region 迟到
{
JObject late = new JObject
{
["name"] = $"迟到"
};
List<RB_Attendance_Record_Extend> lateRecodeList = recodeList.Where(t => t.BeOnStatus == AttendanceEnum.CD).ToList();
late["day"] = $"{lateRecodeList.Count} 天";
if (recodeList.Count > 0)
{
late["color"] = "black";
}
else
{
late["color"] = "gray";
}
List<string> dataList = new List<string>();
foreach (var item in lateRecodeList)
{
dataList.Add($"{item.Date.ToShortDateString().Replace("/", "-")}({StringHelper.GetWeekChar(item.Date)})");
}
late["dataList"] = JsonConvert.SerializeObject(dataList);
result.Add(late);
}
#endregion
#region 缺卡
{
JObject lackOfCard = new JObject
{
["name"] = $"缺卡"
};
List<RB_Attendance_Record_Extend> lackOfCardRecodeList = recodeList.Where(t => t.BeOnStatus != AttendanceEnum.QK && t.OffStatus == AttendanceEnum.QK).ToList();
lackOfCard["day"] = $"{lackOfCardRecodeList.Count} 天";
if (lackOfCardRecodeList.Count > 0)
{
lackOfCard["color"] = "black";
}
else
{
lackOfCard["color"] = "gray";
}
List<string> dataList = new List<string>();
foreach (var item in lackOfCardRecodeList)
{
dataList.Add($"{item.Date.ToShortDateString().Replace("/", "-")}({StringHelper.GetWeekChar(item.Date)})");
}
lackOfCard["dataList"] = JsonConvert.SerializeObject(dataList);
result.Add(lackOfCard);
}
#endregion
#region 旷工
{
JObject absenteeism = new JObject
{
["name"] = $"旷工"
};
List<RB_Attendance_Record_Extend> absenteeismRecodeList = recodeList.Where(t => t.BeOnStatus == AttendanceEnum.QK && t.OffStatus == AttendanceEnum.QK).ToList();
absenteeism["day"] = $"{absenteeismRecodeList.Count} 天";
if (absenteeismRecodeList.Count > 0)
{
absenteeism["color"] = "red";
}
else
{
absenteeism["color"] = "gray";
}
List<string> dataList = new List<string>();
foreach (var item in absenteeismRecodeList)
{
dataList.Add($"{item.Date.ToShortDateString().Replace("/", "-")}({StringHelper.GetWeekChar(item.Date)})");
}
absenteeism["dataList"] = JsonConvert.SerializeObject(dataList);
result.Add(absenteeism);
}
#endregion
#region 外勤
{
JObject field = new JObject
{
["name"] = $"外勤"
};
List<RB_Attendance_Record_Extend> fieldRecodeList = recodeList.Where(t => t.BeOnStatus == AttendanceEnum.WQ || t.OffStatus == AttendanceEnum.WQ).ToList();
field["day"] = $"{fieldRecodeList.Count} 天";
if (fieldRecodeList.Count > 0)
{
field["color"] = "black";
}
else
{
field["color"] = "gray";
}
List<string> dataList = new List<string>();
foreach (var item in fieldRecodeList)
{
dataList.Add($"{item.Date.ToShortDateString().Replace("/", "-")}({StringHelper.GetWeekChar(item.Date)})");
}
field["dataList"] = JsonConvert.SerializeObject(dataList);
result.Add(field);
}
#endregion
return result;
}
/// <summary>
/// 获取打卡月历
/// </summary>
/// <param name="empId">员工id</param>
/// <param name="date">获取日期(年-月-日)</param>
/// <returns></returns>
public List<JObject> PunchCardCalendar(int empId, string date)
{
//打卡记录信息
List<RB_Attendance_Record_Extend> recodeList = attendRecordRespository.PunchCardStatistical(empId, date);
List<JObject> result = new List<JObject>();
DateTime searchDate = Convert.ToDateTime(date);
List<string> dataList = new List<string>();
int days = DateTime.DaysInMonth(searchDate.Year, searchDate.Month);
for (int i = 1; i <= days; i++)
{
DateTime dt = new DateTime(searchDate.Year, searchDate.Month, i);
if (dt.Date < DateTime.Now.Date)
{
JObject data = new JObject
{
["day"] = i
};
RB_Attendance_Record_Extend recode = recodeList.Where(t => t.Date.ToShortDateString() == dt.ToShortDateString()).FirstOrDefault();
if (recode != null)
{
data["id"] = recode.Id;
data["rest"] = false;
if (recode.BeOnStatus == AttendanceEnum.ZC && recode.OffStatus == AttendanceEnum.ZC)
{
data["stateColor"] = "#09D49D";//正常
}
else if (recode.BeOnStatus == AttendanceEnum.CD)
{
data["stateColor"] = "#FF7D4C";//迟到
}
else if (recode.BeOnStatus == AttendanceEnum.QK || recode.OffStatus == AttendanceEnum.QK)
{
data["stateColor"] = "#FF6868";//缺卡
}
else if (recode.BeOnStatus == AttendanceEnum.WQ || recode.OffStatus == AttendanceEnum.WQ)
{
data["stateColor"] = "#548DFF";//外勤
}
else if (recode.BeOnStatus == AttendanceEnum.QJ || recode.OffStatus == AttendanceEnum.QJ)
{
data["stateColor"] = "#FF7D4C";//请假
}
else if (recode.BeOnStatus == AttendanceEnum.BK || recode.OffStatus == AttendanceEnum.BK)
{
data["stateColor"] = "#37CCE7";//补卡
}
else
{
data["stateColor"] = "#FF6868";//异常
}
}
else
{
data["rest"] = true;
data["stateColor"] = "#CCCCCC";
}
result.Add(data);
}
else
{
break;
}
}
return result;
}
}
}
...@@ -2293,14 +2293,14 @@ ...@@ -2293,14 +2293,14 @@
"Microsoft.NETCore.Targets/1.1.0": { "Microsoft.NETCore.Targets/1.1.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-jtuKp4+ddUpehBOlmQJNWek/tXwXLeDAGtkkrHS1Qi6nOPmaLCuvDKFaqBu2c4DGKci+JMDUk4R+6jQ8P8l1aw==", "sha512": "sha512-aOZA3BWfz9RXjpzt0sRJJMjAscAUm3Hoa4UWAfceV9UTYxgwZ1lZt5nO2myFf+/jetYQo4uTP7zS8sJY67BBxg==",
"path": "microsoft.netcore.targets/1.1.0", "path": "microsoft.netcore.targets/1.1.0",
"hashPath": "microsoft.netcore.targets.1.1.0.nupkg.sha512" "hashPath": "microsoft.netcore.targets.1.1.0.nupkg.sha512"
}, },
"Microsoft.Win32.Primitives/4.3.0": { "Microsoft.Win32.Primitives/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-ZthhVqE8T07PsCHMAixDJJjmbdc07VO3GW8FULO+YWr/CmTLolwJoJdXRL/z2/4FAOtCJaJ/H+TPhtH2v1oaUA==", "sha512": "sha512-9ZQKCWxH7Ijp9BfahvL2Zyf1cJIk8XYLF6Yjzr2yi0b2cOut/HQ31qf1ThHAgCc3WiZMdnWcfJCgN82/0UunxA==",
"path": "microsoft.win32.primitives/4.3.0", "path": "microsoft.win32.primitives/4.3.0",
"hashPath": "microsoft.win32.primitives.4.3.0.nupkg.sha512" "hashPath": "microsoft.win32.primitives.4.3.0.nupkg.sha512"
}, },
...@@ -2356,7 +2356,7 @@ ...@@ -2356,7 +2356,7 @@
"NETStandard.Library/1.6.1": { "NETStandard.Library/1.6.1": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-UQNdem5WY//vGStfYv8LFMcWvNTLxUocZ9YfGg4Ps2WaDerp+HrO46tDjQX88/wZaBkwv+Xq/mqjfPeMDz6QnQ==", "sha512": "sha512-WcSp3+vP+yHNgS8EV5J7pZ9IRpeDuARBPN28by8zqff1wJQXm26PVU8L3/fYLBJVU7BtDyqNVWq2KlCVvSSR4A==",
"path": "netstandard.library/1.6.1", "path": "netstandard.library/1.6.1",
"hashPath": "netstandard.library.1.6.1.nupkg.sha512" "hashPath": "netstandard.library.1.6.1.nupkg.sha512"
}, },
...@@ -2391,28 +2391,28 @@ ...@@ -2391,28 +2391,28 @@
"runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-uoCdP75em+GOf04ew/VTet4nr9h/uVMJkrAF9vgRXc4NV4c94R5bzL853tU/kjEfQEUn79aEzzL/ETNhLTasow==", "sha512": "sha512-HdSSp5MnJSsg08KMfZThpuLPJpPwE5hBXvHwoKWosyHHfe8Mh5WKT0ylEOf6yNzX6Ngjxe4Whkafh5q7Ymac4Q==",
"path": "runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl/4.3.0", "path": "runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl/4.3.0",
"hashPath": "runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" "hashPath": "runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512"
}, },
"runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-h6SbWq7Fjz9udTUOzuhx1sLYBaIs9YmKpiAb17H9E0YYYIOknAusPKVGv1bExrka1WRtbnpTXpuoBfYU8zVH1w==", "sha512": "sha512-+yH1a49wJMy8Zt4yx5RhJrxO/DBDByAiCzNwiETI+1S4mPdCu0OY4djdciC7Vssk0l22wQaDLrXxXkp+3+7bVA==",
"path": "runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl/4.3.0", "path": "runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl/4.3.0",
"hashPath": "runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" "hashPath": "runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512"
}, },
"runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-cHH7MckuzKikSR6L6RrySZ2m2C9DDsse28va9U2bE2Op1KotonVDj8JB8qLlXC3jNrdH0SuHfZ4jsHpKuTT0iw==", "sha512": "sha512-c3YNH1GQJbfIPJeCnr4avseugSqPrxwIqzthYyZDN6EuOyNOzq+y2KSUfRcXauya1sF4foESTgwM5e1A8arAKw==",
"path": "runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl/4.3.0", "path": "runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl/4.3.0",
"hashPath": "runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" "hashPath": "runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512"
}, },
"runtime.native.System/4.3.0": { "runtime.native.System/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-S+nQhAdiCsSEeAqawUDCKvQl6sO501hZaT/8V49VpKGSNJQKZh0z2pw+TRDOo9LJv8yjCWMHypHgQBTEEUmw2w==", "sha512": "sha512-c/qWt2LieNZIj1jGnVNsE2Kl23Ya2aSTBuXMD6V7k9KWr6l16Tqdwq+hJScEpWER9753NWC8h96PaVNY5Ld7Jw==",
"path": "runtime.native.system/4.3.0", "path": "runtime.native.system/4.3.0",
"hashPath": "runtime.native.system.4.3.0.nupkg.sha512" "hashPath": "runtime.native.system.4.3.0.nupkg.sha512"
}, },
...@@ -2426,84 +2426,84 @@ ...@@ -2426,84 +2426,84 @@
"runtime.native.System.IO.Compression/4.3.0": { "runtime.native.System.IO.Compression/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-ubimUZNWVWNbB55MO1Ev9uq66w2jmHgx4wNCaUHUs4G6qHPyGm5b0cV+zS2ai0aS9sO1e6StzJJ98OIhVQ2Oyw==", "sha512": "sha512-INBPonS5QPEgn7naufQFXJEp3zX6L4bwHgJ/ZH78aBTpeNfQMtf7C6VrAFhlq2xxWBveIOWyFzQjJ8XzHMhdOQ==",
"path": "runtime.native.system.io.compression/4.3.0", "path": "runtime.native.system.io.compression/4.3.0",
"hashPath": "runtime.native.system.io.compression.4.3.0.nupkg.sha512" "hashPath": "runtime.native.system.io.compression.4.3.0.nupkg.sha512"
}, },
"runtime.native.System.Net.Http/4.3.0": { "runtime.native.System.Net.Http/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-iTbzUFkAYPzlBjSNi4/tv6GWiw4c3D2mYScFgPgS5BUEO7K21AYXeIU7l8KtErqYEn/+DJ5FZLDDd9xMEASN4Q==", "sha512": "sha512-ZVuZJqnnegJhd2k/PtAbbIcZ3aZeITq3sj06oKfMBSfphW3HDmk/t4ObvbOk/JA/swGR0LNqMksAh/f7gpTROg==",
"path": "runtime.native.system.net.http/4.3.0", "path": "runtime.native.system.net.http/4.3.0",
"hashPath": "runtime.native.system.net.http.4.3.0.nupkg.sha512" "hashPath": "runtime.native.system.net.http.4.3.0.nupkg.sha512"
}, },
"runtime.native.System.Security.Cryptography.Apple/4.3.0": { "runtime.native.System.Security.Cryptography.Apple/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-5DyXXwEyil5vfxbfszS9HVXqMrPBsvZtTe1COwiDt4hfjp/yTFbACWb4JZ2IfYP+r+mb0pwobpBLQ5aW7qUv3Q==", "sha512": "sha512-DloMk88juo0OuOWr56QG7MNchmafTLYWvABy36izkrLI5VledI0rq28KGs1i9wbpeT9NPQrx/wTf8U2vazqQ3Q==",
"path": "runtime.native.system.security.cryptography.apple/4.3.0", "path": "runtime.native.system.security.cryptography.apple/4.3.0",
"hashPath": "runtime.native.system.security.cryptography.apple.4.3.0.nupkg.sha512" "hashPath": "runtime.native.system.security.cryptography.apple.4.3.0.nupkg.sha512"
}, },
"runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { "runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-fFcF1RvzmvWvBqBeyLa5MX/HO5cGe2Tef6uZnUKv0LJ0MwKhXensaDd48pXDgDLrHOCH9yLg8ENb6ppmgA/Upw==", "sha512": "sha512-NS1U+700m4KFRHR5o4vo9DSlTmlCKu/u7dtE5sUHVIPB+xpXxYQvgBgA6wEIeCz6Yfn0Z52/72WYsToCEPJnrw==",
"path": "runtime.native.system.security.cryptography.openssl/4.3.0", "path": "runtime.native.system.security.cryptography.openssl/4.3.0",
"hashPath": "runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" "hashPath": "runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512"
}, },
"runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-y1X4xOQmneMsDwpkiRAzHI+PaH7eycMb1jIFU3bAb20Ks0l14ZSOx9HTHQviOtztYuLZ9shZNRJNvWVbJSIMpg==", "sha512": "sha512-b3pthNgxxFcD+Pc0WSEoC0+md3MyhRS6aCEeenvNE3Fdw1HyJ18ZhRFVJJzIeR/O/jpxPboB805Ho0T3Ul7w8A==",
"path": "runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl/4.3.0", "path": "runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl/4.3.0",
"hashPath": "runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" "hashPath": "runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512"
}, },
"runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-vv4ZlH/xxDOrL3r5y76cdsmzlCS/yrOTs4xjGNwe1P57f0CkTQdzMz9dSHo4tWk9Eg4bA3DiVwVpVO+kqAEZQg==", "sha512": "sha512-KeLz4HClKf+nFS7p/6Fi/CqyLXh81FpiGzcmuS8DGi9lUqSnZ6Es23/gv2O+1XVGfrbNmviF7CckBpavkBoIFQ==",
"path": "runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl/4.3.0", "path": "runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl/4.3.0",
"hashPath": "runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" "hashPath": "runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512"
}, },
"runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple/4.3.0": { "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-FwiyAuPHsMyQVxhdC9NvJgnaYzEu0080It56MNVonOUX54ezZzafsjuSeRht8R4slkTDwU0laIXWuUEN7U6tTA==", "sha512": "sha512-kVXCuMTrTlxq4XOOMAysuNwsXWpYeboGddNGpIgNSZmv1b6r/s/DPk0fYMB7Q5Qo4bY68o48jt4T4y5BVecbCQ==",
"path": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.apple/4.3.0", "path": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.apple/4.3.0",
"hashPath": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.apple.4.3.0.nupkg.sha512" "hashPath": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.apple.4.3.0.nupkg.sha512"
}, },
"runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-wH7IrGz1YyAPIt4nJXut7EyjQ5xgs2qc23YN0OiMCoA0i2OoAXgpNAPSl0QDjXB+CeKe+ZRnhGNeKfYBX1YdLw==", "sha512": "sha512-X7IdhILzr4ROXd8mI1BUCQMSHSQwelUlBjF1JyTKCjXaOGn2fB4EKBxQbCK2VjO3WaWIdlXZL3W6TiIVnrhX4g==",
"path": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl/4.3.0", "path": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl/4.3.0",
"hashPath": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" "hashPath": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512"
}, },
"runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-WWabnawXg2BVm76El1mwkgzOljzAOK8YHe4AenFiKKDG8/nXs38RtInyrHcG2xNLrCLSfRwrhfS4RPAQH5E0ew==", "sha512": "sha512-nyFNiCk/r+VOiIqreLix8yN+q3Wga9+SE8BCgkf+2BwEKiNx6DyvFjCgkfV743/grxv8jHJ8gUK4XEQw7yzRYg==",
"path": "runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl/4.3.0", "path": "runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl/4.3.0",
"hashPath": "runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" "hashPath": "runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512"
}, },
"runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-rBEA8wlrj/iZvNMyz/lksEz+ps3LknjwavzCG+23vm1WwLZWYIEoQIDi10pgXzgUROHC9j2ppoownmB9YzARmQ==", "sha512": "sha512-ytoewC6wGorL7KoCAvRfsgoJPJbNq+64k2SqW6JcOAebWsFUvCCYgfzQMrnpvPiEl4OrblUlhF2ji+Q1+SVLrQ==",
"path": "runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl/4.3.0", "path": "runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl/4.3.0",
"hashPath": "runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" "hashPath": "runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512"
}, },
"runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-0DLUJpbpi+CthPVmOzA7bkNKwNuxvFi4V8sYsSYQuLuQbBAd462CHOrIMM29ivBeUsEvdtdAel+JZa4s9t6dFQ==", "sha512": "sha512-I8bKw2I8k58Wx7fMKQJn2R8lamboCAiHfHeV/pS65ScKWMMI0+wJkLYlEKvgW1D/XvSl/221clBoR2q9QNNM7A==",
"path": "runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl/4.3.0", "path": "runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl/4.3.0",
"hashPath": "runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" "hashPath": "runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512"
}, },
"runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-Tq1k9cfn9PGxTwX8QmWS9NQ9Rt4HS/r+i6SPe2R5cM9OO+RgWbRK0ExGGcZqjuqyzekHfHBYrW8sVUNvaZjw8w==", "sha512": "sha512-VB5cn/7OzUfzdnC8tqAIMQciVLiq2epm2NrAm1E9OjNRyG4lVhfR61SMcLizejzQP8R8Uf/0l5qOIbUEi+RdEg==",
"path": "runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl/4.3.0", "path": "runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl/4.3.0",
"hashPath": "runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512" "hashPath": "runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512"
}, },
...@@ -2566,7 +2566,7 @@ ...@@ -2566,7 +2566,7 @@
"System.AppContext/4.3.0": { "System.AppContext/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-do9UYqgS80R3NfDLsxXgAyv0w4y003ik6KmfYBpJ5CTBQb/K8ylQfrx7WlnXwvdmxj2kti2NKPv8/8nua54/ng==", "sha512": "sha512-fKC+rmaLfeIzUhagxY17Q9siv/sPrjjKcfNg1Ic8IlQkZLipo8ljcaZQu4VtI4Jqbzjc2VTjzGLF6WmsRXAEgA==",
"path": "system.appcontext/4.3.0", "path": "system.appcontext/4.3.0",
"hashPath": "system.appcontext.4.3.0.nupkg.sha512" "hashPath": "system.appcontext.4.3.0.nupkg.sha512"
}, },
...@@ -2580,14 +2580,14 @@ ...@@ -2580,14 +2580,14 @@
"System.Collections/4.3.0": { "System.Collections/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-tfqWMsO3XZc72+g/jdFG2bdAErjOc/SlQBXa9+maU/TvZPu6Ew8a2HQOfLAuY8CVuqviTaeEu7ptsbxPB+8SaA==", "sha512": "sha512-3Dcj85/TBdVpL5Zr+gEEBUuFe2icOnLalmEh9hfck1PTYbbyWuZgh4fmm2ysCLTrqLQw6t3TgTyJ+VLp+Qb+Lw==",
"path": "system.collections/4.3.0", "path": "system.collections/4.3.0",
"hashPath": "system.collections.4.3.0.nupkg.sha512" "hashPath": "system.collections.4.3.0.nupkg.sha512"
}, },
"System.Collections.Concurrent/4.3.0": { "System.Collections.Concurrent/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-tRgZFvPa9jMS4qRluyUvD5Ll6gJeG5vG5UHWZ7nK83dOzpCux8pRuJY2TiPvoqx/anCRNEweVl+89ieenbnHHg==", "sha512": "sha512-ztl69Xp0Y/UXCL+3v3tEU+lIy+bvjKNUmopn1wep/a291pVPK7dxBd6T7WnlQqRog+d1a/hSsgRsmFnIBKTPLQ==",
"path": "system.collections.concurrent/4.3.0", "path": "system.collections.concurrent/4.3.0",
"hashPath": "system.collections.concurrent.4.3.0.nupkg.sha512" "hashPath": "system.collections.concurrent.4.3.0.nupkg.sha512"
}, },
...@@ -2608,7 +2608,7 @@ ...@@ -2608,7 +2608,7 @@
"System.ComponentModel/4.3.0": { "System.ComponentModel/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-0WhdQqaBmYmIgmgADNmjTenYep1MsRO2qgATQiGkLVjinEfRBATw+OaMUTU3FQtUDxCyl2HNz789BpBCb9NcSQ==", "sha512": "sha512-VyGn1jGRZVfxnh8EdvDCi71v3bMXrsu8aYJOwoV7SNDLVhiEqwP86pPMyRGsDsxhXAm2b3o9OIqeETfN5qfezw==",
"path": "system.componentmodel/4.3.0", "path": "system.componentmodel/4.3.0",
"hashPath": "system.componentmodel.4.3.0.nupkg.sha512" "hashPath": "system.componentmodel.4.3.0.nupkg.sha512"
}, },
...@@ -2643,7 +2643,7 @@ ...@@ -2643,7 +2643,7 @@
"System.Console/4.3.0": { "System.Console/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-HyI4eNqHaD7sDyxN7eTC3MmVA34LrK86IgXY4bznqGgpJ52zrigum5ZZj0ZxD+Xbnwhix/cwgJazOstiKBP/LQ==", "sha512": "sha512-DHDrIxiqk1h03m6khKWV2X8p/uvN79rgSqpilL6uzpmSfxfU5ng8VcPtW4qsDsQDHiTv6IPV9TmD5M/vElPNLg==",
"path": "system.console/4.3.0", "path": "system.console/4.3.0",
"hashPath": "system.console.4.3.0.nupkg.sha512" "hashPath": "system.console.4.3.0.nupkg.sha512"
}, },
...@@ -2657,7 +2657,7 @@ ...@@ -2657,7 +2657,7 @@
"System.Diagnostics.Debug/4.3.0": { "System.Diagnostics.Debug/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-3jTiSHr6dO9uSJAoUcH8Wg29Nc+cQHSmkkn9ul6a9HQhW0KboGrGLiHGCt2AXISFHK7YlGP0fzes2X6/gbpDgQ==", "sha512": "sha512-ZUhUOdqmaG5Jk3Xdb8xi5kIyQYAA4PnTNlHx1mu9ZY3qv4ELIdKbnL/akbGaKi2RnNUWaZsAs31rvzFdewTj2g==",
"path": "system.diagnostics.debug/4.3.0", "path": "system.diagnostics.debug/4.3.0",
"hashPath": "system.diagnostics.debug.4.3.0.nupkg.sha512" "hashPath": "system.diagnostics.debug.4.3.0.nupkg.sha512"
}, },
...@@ -2678,7 +2678,7 @@ ...@@ -2678,7 +2678,7 @@
"System.Diagnostics.Tools/4.3.0": { "System.Diagnostics.Tools/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-uVam5oaDJ+lrCkzR5paF0bXKewt8/h8ZaX8xIqm48ypbpdpkp/EWM+uTegiUvraO3Fv+o3oj0cPtprJISNhXXQ==", "sha512": "sha512-UUvkJfSYJMM6x527dJg2VyWPSRqIVB0Z7dbjHst1zmwTXz5CcXSYJFWRpuigfbO1Lf7yfZiIaEUesfnl/g5EyA==",
"path": "system.diagnostics.tools/4.3.0", "path": "system.diagnostics.tools/4.3.0",
"hashPath": "system.diagnostics.tools.4.3.0.nupkg.sha512" "hashPath": "system.diagnostics.tools.4.3.0.nupkg.sha512"
}, },
...@@ -2692,7 +2692,7 @@ ...@@ -2692,7 +2692,7 @@
"System.Diagnostics.Tracing/4.3.0": { "System.Diagnostics.Tracing/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-sRRUOGLj+PCOa9xei6b4JUSg0CSxwBm+EkyNAngFW9ARE6S3D19o9Ol5SeGUr1tFSVt4vX+xdl0OSz581Ksd4Q==", "sha512": "sha512-rswfv0f/Cqkh78rA5S8eN8Neocz234+emGCtTF3lxPY96F+mmmUen6tbn0glN6PMvlKQb9bPAY5e9u7fgPTkKw==",
"path": "system.diagnostics.tracing/4.3.0", "path": "system.diagnostics.tracing/4.3.0",
"hashPath": "system.diagnostics.tracing.4.3.0.nupkg.sha512" "hashPath": "system.diagnostics.tracing.4.3.0.nupkg.sha512"
}, },
...@@ -2706,63 +2706,63 @@ ...@@ -2706,63 +2706,63 @@
"System.Dynamic.Runtime/4.3.0": { "System.Dynamic.Runtime/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-zxQXMykO4ZAptqREvoqNlbzdBz+SusbQqr8acRtXQGZ3wDyH+Mi6VFImuIyeFsPMkNLhNvk2xBzNHnY1Bi9zjQ==", "sha512": "sha512-SNVi1E/vfWUAs/WYKhE9+qlS6KqK0YVhnlT0HQtr8pMIA8YX3lwy3uPMownDwdYISBdmAF/2holEIldVp85Wag==",
"path": "system.dynamic.runtime/4.3.0", "path": "system.dynamic.runtime/4.3.0",
"hashPath": "system.dynamic.runtime.4.3.0.nupkg.sha512" "hashPath": "system.dynamic.runtime.4.3.0.nupkg.sha512"
}, },
"System.Globalization/4.3.0": { "System.Globalization/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-QsvKtsliUgA7KWLgXPibgflvlvg0r3g05jzNMwz5tvRg4ZPnRT8xtzr8CBCDdBVQs7x8qUcHvciUykA8bAo7jw==", "sha512": "sha512-kYdVd2f2PAdFGblzFswE4hkNANJBKRmsfa2X5LG2AcWE1c7/4t0pYae1L8vfZ5xvE2nK/R9JprtToA61OSHWIg==",
"path": "system.globalization/4.3.0", "path": "system.globalization/4.3.0",
"hashPath": "system.globalization.4.3.0.nupkg.sha512" "hashPath": "system.globalization.4.3.0.nupkg.sha512"
}, },
"System.Globalization.Calendars/4.3.0": { "System.Globalization.Calendars/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-AaI3lmNJGDhuQ2gvrcj1mL4mFMVNXQ+mQ4a4nMq+jiZk3tDJO6SShiteHoJ+tMAF8u4ipEF0oUHe8aL7hYiFxg==", "sha512": "sha512-GUlBtdOWT4LTV3I+9/PJW+56AnnChTaOqqTLFtdmype/L500M2LIyXgmtd9X2P2VOkmJd5c67H5SaC2QcL1bFA==",
"path": "system.globalization.calendars/4.3.0", "path": "system.globalization.calendars/4.3.0",
"hashPath": "system.globalization.calendars.4.3.0.nupkg.sha512" "hashPath": "system.globalization.calendars.4.3.0.nupkg.sha512"
}, },
"System.Globalization.Extensions/4.3.0": { "System.Globalization.Extensions/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-YTMfoFzh5xRVINlBLjD1b5quJPh9eMpFr4xg17wSRFnVz4IxKltD084XB1curpdQlrAsYjf1wIsf+ddlQl0HnA==", "sha512": "sha512-FhKmdR6MPG+pxow6wGtNAWdZh7noIOpdD5TwQ3CprzgIE1bBBoim0vbR1+AWsWjQmU7zXHgQo4TWSP6lCeiWcQ==",
"path": "system.globalization.extensions/4.3.0", "path": "system.globalization.extensions/4.3.0",
"hashPath": "system.globalization.extensions.4.3.0.nupkg.sha512" "hashPath": "system.globalization.extensions.4.3.0.nupkg.sha512"
}, },
"System.IO/4.3.0": { "System.IO/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-lHnCA1CwGlY3hbvMSgRrjGLpj6XJKvvrZ4I/0IFV+CrjPXorggUMrdjFWzWMngdWbYQMYIE3sCatHKInWtMBTQ==", "sha512": "sha512-3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg==",
"path": "system.io/4.3.0", "path": "system.io/4.3.0",
"hashPath": "system.io.4.3.0.nupkg.sha512" "hashPath": "system.io.4.3.0.nupkg.sha512"
}, },
"System.IO.Compression/4.3.0": { "System.IO.Compression/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-S2tSQT+SjN1MIbKlgqmkowPHD384bX1O1U7vbg+RDMQVLWNUqqOCADy4y/lGkLFwj6P4MfVoukR6HKm3HjmH9w==", "sha512": "sha512-YHndyoiV90iu4iKG115ibkhrG+S3jBm8Ap9OwoUAzO5oPDAWcr0SFwQFm0HjM8WkEZWo0zvLTyLmbvTkW1bXgg==",
"path": "system.io.compression/4.3.0", "path": "system.io.compression/4.3.0",
"hashPath": "system.io.compression.4.3.0.nupkg.sha512" "hashPath": "system.io.compression.4.3.0.nupkg.sha512"
}, },
"System.IO.Compression.ZipFile/4.3.0": { "System.IO.Compression.ZipFile/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-SapbBchwyGYdnkT1vtLcKSJHHtQ8r8qhsJ7NTMwK9WQijD7y73L9OTf75iGIAHS7RCZbAyBefsSvHw6RmUEjZQ==", "sha512": "sha512-G4HwjEsgIwy3JFBduZ9quBkAu+eUwjIdJleuNSgmUojbH6O3mlvEIme+GHx/cLlTAPcrnnL7GqvB9pTlWRfhOg==",
"path": "system.io.compression.zipfile/4.3.0", "path": "system.io.compression.zipfile/4.3.0",
"hashPath": "system.io.compression.zipfile.4.3.0.nupkg.sha512" "hashPath": "system.io.compression.zipfile.4.3.0.nupkg.sha512"
}, },
"System.IO.FileSystem/4.3.0": { "System.IO.FileSystem/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-Uoayf21U2TOqHjRz1/nxbVvanOaOkisgy8bZLwJUPeloZLiS7TL+t2/doDWQ4Wzq1Xc5qmwtmR3GpRUgh9s5UA==", "sha512": "sha512-3wEMARTnuio+ulnvi+hkRNROYwa1kylvYahhcLk4HSoVdl+xxTFVeVlYOfLwrDPImGls0mDqbMhrza8qnWPTdA==",
"path": "system.io.filesystem/4.3.0", "path": "system.io.filesystem/4.3.0",
"hashPath": "system.io.filesystem.4.3.0.nupkg.sha512" "hashPath": "system.io.filesystem.4.3.0.nupkg.sha512"
}, },
"System.IO.FileSystem.Primitives/4.3.0": { "System.IO.FileSystem.Primitives/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-qCnhqnKBWOop9amxE4FdfIdhnrHk2nXp/Vbn5ea1/vGXgvA+IrqI/YRSP0TB00ajXKOrZTthyhRwmNx2YFtKNA==", "sha512": "sha512-6QOb2XFLch7bEc4lIcJH49nJN2HV+OC3fHDgsLVsBVBk3Y4hFAnOBGzJ2lUu7CyDDFo9IBWkSsnbkT6IBwwiMw==",
"path": "system.io.filesystem.primitives/4.3.0", "path": "system.io.filesystem.primitives/4.3.0",
"hashPath": "system.io.filesystem.primitives.4.3.0.nupkg.sha512" "hashPath": "system.io.filesystem.primitives.4.3.0.nupkg.sha512"
}, },
...@@ -2776,14 +2776,14 @@ ...@@ -2776,14 +2776,14 @@
"System.Linq/4.3.0": { "System.Linq/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-/OIh4dHw7pUiq4t06EMVZOL3DhQY+1wCtjiUHZwFmm83cnpwTv6hKNtULiMP8Q26HYXOx7u3d+AY0IzYPGxOtQ==", "sha512": "sha512-5DbqIUpsDp0dFftytzuMmc0oeMdQwjcP/EWxsksIz/w1TcFRkZ3yKKz0PqiYFMmEwPSWw+qNVqD7PJ889JzHbw==",
"path": "system.linq/4.3.0", "path": "system.linq/4.3.0",
"hashPath": "system.linq.4.3.0.nupkg.sha512" "hashPath": "system.linq.4.3.0.nupkg.sha512"
}, },
"System.Linq.Expressions/4.3.0": { "System.Linq.Expressions/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-0jD/FCSXymfWCrk0UAR9Q2wmNk3VJ0f28ECpZdw2Dj56e4gYrdduDxrMZKCDu8oDJJSFGUIcuXT6cDodrd4wVQ==", "sha512": "sha512-PGKkrd2khG4CnlyJwxwwaWWiSiWFNBGlgXvJpeO0xCXrZ89ODrQ6tjEWS/kOqZ8GwEOUATtKtzp1eRgmYNfclg==",
"path": "system.linq.expressions/4.3.0", "path": "system.linq.expressions/4.3.0",
"hashPath": "system.linq.expressions.4.3.0.nupkg.sha512" "hashPath": "system.linq.expressions.4.3.0.nupkg.sha512"
}, },
...@@ -2797,7 +2797,7 @@ ...@@ -2797,7 +2797,7 @@
"System.Net.Http/4.3.0": { "System.Net.Http/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-Yp04JL85F38LQzElsET91QqJsNQm+BHOZ5PR8IHpi+yM8KBIOVc8RkZXrRYtmDw/4Pu0zxqNKupI9xNUkuZv7A==", "sha512": "sha512-sYg+FtILtRQuYWSIAuNOELwVuVsxVyJGWQyOnlAzhV4xvhyFnON1bAzYYC+jjRW8JREM45R0R5Dgi8MTC5sEwA==",
"path": "system.net.http/4.3.0", "path": "system.net.http/4.3.0",
"hashPath": "system.net.http.4.3.0.nupkg.sha512" "hashPath": "system.net.http.4.3.0.nupkg.sha512"
}, },
...@@ -2811,84 +2811,84 @@ ...@@ -2811,84 +2811,84 @@
"System.Net.Primitives/4.3.0": { "System.Net.Primitives/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-BZYIpCiPjW/UhJ5sir6sU3qtLD/0NuAsrUS0CUubAywpuDEPwTaKrN33OJ5FVpLO8aLqfCGRJQAjWgQvZHkbqg==", "sha512": "sha512-qOu+hDwFwoZPbzPvwut2qATe3ygjeQBDQj91xlsaqGFQUI5i4ZnZb8yyQuLGpDGivEPIt8EJkd1BVzVoP31FXA==",
"path": "system.net.primitives/4.3.0", "path": "system.net.primitives/4.3.0",
"hashPath": "system.net.primitives.4.3.0.nupkg.sha512" "hashPath": "system.net.primitives.4.3.0.nupkg.sha512"
}, },
"System.Net.Sockets/4.3.0": { "System.Net.Sockets/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-JS4gfkz7iImQFscfYrIHeEGNyttsC7pjBtdpglbvVO15VrvOa1jaIEeCnopKNrI/XCJWihhbYNgdLNm5v4CFKA==", "sha512": "sha512-m6icV6TqQOAdgt5N/9I5KNpjom/5NFtkmGseEH+AK/hny8XrytLH3+b5M8zL/Ycg3fhIocFpUMyl/wpFnVRvdw==",
"path": "system.net.sockets/4.3.0", "path": "system.net.sockets/4.3.0",
"hashPath": "system.net.sockets.4.3.0.nupkg.sha512" "hashPath": "system.net.sockets.4.3.0.nupkg.sha512"
}, },
"System.ObjectModel/4.3.0": { "System.ObjectModel/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-eASwOXeVD6d04alRZz9htFleUhFGAm9QT9pU71FCUvew58ojSGQ91OpK753Qv0LdqeUk6Oskqs4LZHaY6OCxhw==", "sha512": "sha512-bdX+80eKv9bN6K4N+d77OankKHGn6CH711a6fcOpMQu2Fckp/Ft4L/kW9WznHpyR0NRAvJutzOMHNNlBGvxQzQ==",
"path": "system.objectmodel/4.3.0", "path": "system.objectmodel/4.3.0",
"hashPath": "system.objectmodel.4.3.0.nupkg.sha512" "hashPath": "system.objectmodel.4.3.0.nupkg.sha512"
}, },
"System.Reflection/4.3.0": { "System.Reflection/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-/U196t6BR0QGPIodNy1kESvR1co1pW6fhtNZXyOIrers7dpk4+sHvuQjOfZq++KhcpTVZYAttknYEpLBrqn1Bw==", "sha512": "sha512-KMiAFoW7MfJGa9nDFNcfu+FpEdiHpWgTcS2HdMpDvt9saK3y/G4GwprPyzqjFH9NTaGPQeWNHU+iDlDILj96aQ==",
"path": "system.reflection/4.3.0", "path": "system.reflection/4.3.0",
"hashPath": "system.reflection.4.3.0.nupkg.sha512" "hashPath": "system.reflection.4.3.0.nupkg.sha512"
}, },
"System.Reflection.Emit/4.3.0": { "System.Reflection.Emit/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-GCAFZkuA/6JuYqVQIpDh1+DNdPZ9cfUY7NvAnQ0DBs3avOZVNVTRIhqZE1eIMu+Qj7sF4U+eRxW0gSfV6hQAgQ==", "sha512": "sha512-228FG0jLcIwTVJyz8CLFKueVqQK36ANazUManGaJHkO0icjiIypKW7YLWLIWahyIkdh5M7mV2dJepllLyA1SKg==",
"path": "system.reflection.emit/4.3.0", "path": "system.reflection.emit/4.3.0",
"hashPath": "system.reflection.emit.4.3.0.nupkg.sha512" "hashPath": "system.reflection.emit.4.3.0.nupkg.sha512"
}, },
"System.Reflection.Emit.ILGeneration/4.3.0": { "System.Reflection.Emit.ILGeneration/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-/fyzpXnU506v9HfSpaTSGSPnJWFg4b8t0nbKHNwJ5LFquvJAtND6td2Cpp+Ek1OLRuR0WxJ+YCB6ZW2GyvpBZQ==", "sha512": "sha512-59tBslAk9733NXLrUJrwNZEzbMAcu8k344OYo+wfSVygcgZ9lgBdGIzH/nrg3LYhXceynyvTc8t5/GD4Ri0/ng==",
"path": "system.reflection.emit.ilgeneration/4.3.0", "path": "system.reflection.emit.ilgeneration/4.3.0",
"hashPath": "system.reflection.emit.ilgeneration.4.3.0.nupkg.sha512" "hashPath": "system.reflection.emit.ilgeneration.4.3.0.nupkg.sha512"
}, },
"System.Reflection.Emit.Lightweight/4.3.0": { "System.Reflection.Emit.Lightweight/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-FX/zDlUSbxIwBM3ePmXoFfeiEPXRqwtoDH12velyRYhTv41pmM3fKLWL2vceLrJ1kOZTKFjHScPz+j3arI2p7g==", "sha512": "sha512-oadVHGSMsTmZsAF864QYN1t1QzZjIcuKU3l2S9cZOwDdDueNTrqq1yRj7koFfIGEnKpt6NjpL3rOzRhs4ryOgA==",
"path": "system.reflection.emit.lightweight/4.3.0", "path": "system.reflection.emit.lightweight/4.3.0",
"hashPath": "system.reflection.emit.lightweight.4.3.0.nupkg.sha512" "hashPath": "system.reflection.emit.lightweight.4.3.0.nupkg.sha512"
}, },
"System.Reflection.Extensions/4.3.0": { "System.Reflection.Extensions/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-gfClVzHQcT0eY3qSVcMI6cQxwRmjFQfIrINEpBJMA6ftlNIhO/H8/e6V78YzX+0z7Bw2VJFJP4G7oIcbO32olQ==", "sha512": "sha512-rJkrJD3kBI5B712aRu4DpSIiHRtr6QlfZSQsb0hYHrDCZORXCFjQfoipo2LaMUHoT9i1B7j7MnfaEKWDFmFQNQ==",
"path": "system.reflection.extensions/4.3.0", "path": "system.reflection.extensions/4.3.0",
"hashPath": "system.reflection.extensions.4.3.0.nupkg.sha512" "hashPath": "system.reflection.extensions.4.3.0.nupkg.sha512"
}, },
"System.Reflection.Primitives/4.3.0": { "System.Reflection.Primitives/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-uln4id8a086oqZBDylX/0jTZQ8qkoAdTjI1ZkUieD+nJkH9qQfRxCWSNCe2W0qVyRiQZe+iKerY5T5dtOyYcXA==", "sha512": "sha512-5RXItQz5As4xN2/YUDxdpsEkMhvw3e6aNveFXUn4Hl/udNTCNhnKp8lT9fnc3MhvGKh1baak5CovpuQUXHAlIA==",
"path": "system.reflection.primitives/4.3.0", "path": "system.reflection.primitives/4.3.0",
"hashPath": "system.reflection.primitives.4.3.0.nupkg.sha512" "hashPath": "system.reflection.primitives.4.3.0.nupkg.sha512"
}, },
"System.Reflection.TypeExtensions/4.3.0": { "System.Reflection.TypeExtensions/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-ER4elwccfGOYXV69hI3W3nCwMelkAtu3VSs8lhHfE0EjqW5qG8qmv9lbhCdKOEWwI4B/LlXCbsyo38nGYY1Bnw==", "sha512": "sha512-7u6ulLcZbyxB5Gq0nMkQttcdBTx57ibzw+4IOXEfR+sXYQoHvjW5LTLyNr8O22UIMrqYbchJQJnos4eooYzYJA==",
"path": "system.reflection.typeextensions/4.3.0", "path": "system.reflection.typeextensions/4.3.0",
"hashPath": "system.reflection.typeextensions.4.3.0.nupkg.sha512" "hashPath": "system.reflection.typeextensions.4.3.0.nupkg.sha512"
}, },
"System.Resources.ResourceManager/4.3.0": { "System.Resources.ResourceManager/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-AN3tKJp9LAOcCA9l+sm67HYGSAhMIWApcLYl6U6yuB9/7U8vybia7BhPUWvlO9D1Bojqhh7fQs4KWYoHLG+Jyw==", "sha512": "sha512-/zrcPkkWdZmI4F92gL/TPumP98AVDu/Wxr3CSJGQQ+XN6wbRZcyfSKVoPo17ilb3iOr0cCRqJInGwNMolqhS8A==",
"path": "system.resources.resourcemanager/4.3.0", "path": "system.resources.resourcemanager/4.3.0",
"hashPath": "system.resources.resourcemanager.4.3.0.nupkg.sha512" "hashPath": "system.resources.resourcemanager.4.3.0.nupkg.sha512"
}, },
"System.Runtime/4.3.0": { "System.Runtime/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-R7ADy3PoW/NP1vgBNBlitlNxZm9OjzlHnPAyY0xvrcJjyh3PqrcDbRErvZwR5TRZxgMnaBT0hZRpHS4EHXzKLw==", "sha512": "sha512-JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==",
"path": "system.runtime/4.3.0", "path": "system.runtime/4.3.0",
"hashPath": "system.runtime.4.3.0.nupkg.sha512" "hashPath": "system.runtime.4.3.0.nupkg.sha512"
}, },
...@@ -2902,35 +2902,35 @@ ...@@ -2902,35 +2902,35 @@
"System.Runtime.Extensions/4.3.0": { "System.Runtime.Extensions/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-KqXVl/pu190dAwqKc8fczs34LdLeNEuH69NmCTKmKoN8y1fcxapVIEtrbUVTebiyO2r66m/VP5HaPLU0ejzP6w==", "sha512": "sha512-guW0uK0fn5fcJJ1tJVXYd7/1h5F+pea1r7FLSOz/f8vPEqbR2ZAknuRDvTQ8PzAilDveOxNjSfr0CHfIQfFk8g==",
"path": "system.runtime.extensions/4.3.0", "path": "system.runtime.extensions/4.3.0",
"hashPath": "system.runtime.extensions.4.3.0.nupkg.sha512" "hashPath": "system.runtime.extensions.4.3.0.nupkg.sha512"
}, },
"System.Runtime.Handles/4.3.0": { "System.Runtime.Handles/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-yDJvHNMQNLHqvBxK63gK5/TrEbNuaZJkBTHapyiq8FwQycDoWlHwSWPqzcpbDnNH3adqL1AV+3Crpuye5Q+QNg==", "sha512": "sha512-OKiSUN7DmTWeYb3l51A7EYaeNMnvxwE249YtZz7yooT4gOZhmTjIn48KgSsw2k2lYdLgTKNJw/ZIfSElwDRVgg==",
"path": "system.runtime.handles/4.3.0", "path": "system.runtime.handles/4.3.0",
"hashPath": "system.runtime.handles.4.3.0.nupkg.sha512" "hashPath": "system.runtime.handles.4.3.0.nupkg.sha512"
}, },
"System.Runtime.InteropServices/4.3.0": { "System.Runtime.InteropServices/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-HU/IH6woK1FxbYPBBvVADidlk74DZIFlXgk7VTxmsrlNjS9mq9biwgq25YgMvqRllCFtvuNEKcK6zVcMj8S/jA==", "sha512": "sha512-uv1ynXqiMK8mp1GM3jDqPCFN66eJ5w5XNomaK2XD+TuCroNTLFGeZ+WCmBMcBDyTFKou3P6cR6J/QsaqDp7fGQ==",
"path": "system.runtime.interopservices/4.3.0", "path": "system.runtime.interopservices/4.3.0",
"hashPath": "system.runtime.interopservices.4.3.0.nupkg.sha512" "hashPath": "system.runtime.interopservices.4.3.0.nupkg.sha512"
}, },
"System.Runtime.InteropServices.RuntimeInformation/4.3.0": { "System.Runtime.InteropServices.RuntimeInformation/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-AwOv0R98WGNhdLNFQGvC027YvE4VUsTmDnkSAoxLUcZVrW/KSXCdeevtBdDuP8JvlSy2MoBaEkI45vdwoxYjxQ==", "sha512": "sha512-cbz4YJMqRDR7oLeMRbdYv7mYzc++17lNhScCX0goO2XpGWdvAt60CGN+FHdePUEHCe/Jy9jUlvNAiNdM+7jsOw==",
"path": "system.runtime.interopservices.runtimeinformation/4.3.0", "path": "system.runtime.interopservices.runtimeinformation/4.3.0",
"hashPath": "system.runtime.interopservices.runtimeinformation.4.3.0.nupkg.sha512" "hashPath": "system.runtime.interopservices.runtimeinformation.4.3.0.nupkg.sha512"
}, },
"System.Runtime.Numerics/4.3.0": { "System.Runtime.Numerics/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-fbmlkJiM9SEw6chayUoKRdBP7DOXObYAxP7d4xuKk6PU8nClgrf4LGPo/Nd3cqXD0+Uvs5G3fxyS8vrAfRrIAg==", "sha512": "sha512-yMH+MfdzHjy17l2KESnPiF2dwq7T+xLnSJar7slyimAkUh/gTrS9/UQOtv7xarskJ2/XDSNvfLGOBQPjL7PaHQ==",
"path": "system.runtime.numerics/4.3.0", "path": "system.runtime.numerics/4.3.0",
"hashPath": "system.runtime.numerics.4.3.0.nupkg.sha512" "hashPath": "system.runtime.numerics.4.3.0.nupkg.sha512"
}, },
...@@ -2944,42 +2944,42 @@ ...@@ -2944,42 +2944,42 @@
"System.Security.Cryptography.Algorithms/4.3.0": { "System.Security.Cryptography.Algorithms/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-NG72ASyDyPOSIimdioqz0fI9GQckfzbPvQvEQxuIQKLQ0SacMyQRLWPIre2f6i5P8bhEKO7yKX5nZ0a8dL+33w==", "sha512": "sha512-W1kd2Y8mYSCgc3ULTAZ0hOP2dSdG5YauTb1089T0/kRcN2MpSAW1izOFROrJgxSlMn3ArsgHXagigyi+ibhevg==",
"path": "system.security.cryptography.algorithms/4.3.0", "path": "system.security.cryptography.algorithms/4.3.0",
"hashPath": "system.security.cryptography.algorithms.4.3.0.nupkg.sha512" "hashPath": "system.security.cryptography.algorithms.4.3.0.nupkg.sha512"
}, },
"System.Security.Cryptography.Cng/4.3.0": { "System.Security.Cryptography.Cng/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-eew12RoETmll8EN7kEzW7y9jZVbhD/JC5LASxkjrfPesTNQnZMZeeGwV+EY+VqKf2s15IcdI/MUiaN5b+IDueA==", "sha512": "sha512-03idZOqFlsKRL4W+LuCpJ6dBYDUWReug6lZjBa3uJWnk5sPCUXckocevTaUA8iT/MFSrY/2HXkOt753xQ/cf8g==",
"path": "system.security.cryptography.cng/4.3.0", "path": "system.security.cryptography.cng/4.3.0",
"hashPath": "system.security.cryptography.cng.4.3.0.nupkg.sha512" "hashPath": "system.security.cryptography.cng.4.3.0.nupkg.sha512"
}, },
"System.Security.Cryptography.Csp/4.3.0": { "System.Security.Cryptography.Csp/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-kCLk/d0VSgm6jjp4vgJUM77z/+BAUkNt5JvQxs+vQm6RZjYSmmluxWdeI30B8js9rc5ja978s6RYZwoNiJDd9g==", "sha512": "sha512-X4s/FCkEUnRGnwR3aSfVIkldBmtURMhmexALNTwpjklzxWU7yjMk7GHLKOZTNkgnWnE0q7+BCf9N2LVRWxewaA==",
"path": "system.security.cryptography.csp/4.3.0", "path": "system.security.cryptography.csp/4.3.0",
"hashPath": "system.security.cryptography.csp.4.3.0.nupkg.sha512" "hashPath": "system.security.cryptography.csp.4.3.0.nupkg.sha512"
}, },
"System.Security.Cryptography.Encoding/4.3.0": { "System.Security.Cryptography.Encoding/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-LJJnwE5qD790h2DPHhlXsmlewEmg2xZducxHhNpoWrk9rNDb71HSKMJpioCJ3hCBtQeDSCsj6uhUeipQ8KS9qA==", "sha512": "sha512-1DEWjZZly9ae9C79vFwqaO5kaOlI5q+3/55ohmq/7dpDyDfc8lYe7YVxJUZ5MF/NtbkRjwFRo14yM4OEo9EmDw==",
"path": "system.security.cryptography.encoding/4.3.0", "path": "system.security.cryptography.encoding/4.3.0",
"hashPath": "system.security.cryptography.encoding.4.3.0.nupkg.sha512" "hashPath": "system.security.cryptography.encoding.4.3.0.nupkg.sha512"
}, },
"System.Security.Cryptography.OpenSsl/4.3.0": { "System.Security.Cryptography.OpenSsl/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-8+yrkPIQ7N9oxskjATGoYWqNyPdyXqeN08jRQfdybm2TCyObj81iz/zSytiozBSf8GDpNOfiQ4DqAT9t4zfP5g==", "sha512": "sha512-h4CEgOgv5PKVF/HwaHzJRiVboL2THYCou97zpmhjghx5frc7fIvlkY1jL+lnIQyChrJDMNEXS6r7byGif8Cy4w==",
"path": "system.security.cryptography.openssl/4.3.0", "path": "system.security.cryptography.openssl/4.3.0",
"hashPath": "system.security.cryptography.openssl.4.3.0.nupkg.sha512" "hashPath": "system.security.cryptography.openssl.4.3.0.nupkg.sha512"
}, },
"System.Security.Cryptography.Primitives/4.3.0": { "System.Security.Cryptography.Primitives/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-hFqAVt9OsfH5loeAlpDj+apYs+RzUdmaI19+f2Cq78Vn1bCvVZxEzrECKJH4iD6foRCpIQCwQ/inxz8KKg7XCw==", "sha512": "sha512-7bDIyVFNL/xKeFHjhobUAQqSpJq9YTOpbEs6mR233Et01STBMXNAc/V+BM6dwYGc95gVh/Zf+iVXWzj3mE8DWg==",
"path": "system.security.cryptography.primitives/4.3.0", "path": "system.security.cryptography.primitives/4.3.0",
"hashPath": "system.security.cryptography.primitives.4.3.0.nupkg.sha512" "hashPath": "system.security.cryptography.primitives.4.3.0.nupkg.sha512"
}, },
...@@ -2993,7 +2993,7 @@ ...@@ -2993,7 +2993,7 @@
"System.Security.Cryptography.X509Certificates/4.3.0": { "System.Security.Cryptography.X509Certificates/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-G15jaQeTp4XU5A3TI+CiJKhji49hqjZSNbz+R0V2dY7hT6gR4zLpEASYqH3m51JTZtmRx0WhBYxbx13OaQuBFA==", "sha512": "sha512-t2Tmu6Y2NtJ2um0RtcuhP7ZdNNxXEgUm2JeoA/0NvlMjAhKCnM1NX07TDl3244mVp3QU6LPEhT3HTtH1uF7IYw==",
"path": "system.security.cryptography.x509certificates/4.3.0", "path": "system.security.cryptography.x509certificates/4.3.0",
"hashPath": "system.security.cryptography.x509certificates.4.3.0.nupkg.sha512" "hashPath": "system.security.cryptography.x509certificates.4.3.0.nupkg.sha512"
}, },
...@@ -3014,7 +3014,7 @@ ...@@ -3014,7 +3014,7 @@
"System.Text.Encoding/4.3.0": { "System.Text.Encoding/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-9+kKiGF7iM11HWsWhHv0bJaY3DdabXRK3A0LAu4RES+F0qf/G9OK2xrzaLVOFXjykQw0V9+y5XBbsTrBgU1C5w==", "sha512": "sha512-BiIg+KWaSDOITze6jGQynxg64naAPtqGHBwDrLaCtixsa5bKiR8dpPOHA7ge3C0JJQizJE+sfkz1wV+BAKAYZw==",
"path": "system.text.encoding/4.3.0", "path": "system.text.encoding/4.3.0",
"hashPath": "system.text.encoding.4.3.0.nupkg.sha512" "hashPath": "system.text.encoding.4.3.0.nupkg.sha512"
}, },
...@@ -3028,7 +3028,7 @@ ...@@ -3028,7 +3028,7 @@
"System.Text.Encoding.Extensions/4.3.0": { "System.Text.Encoding.Extensions/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-vnL/fBuhf/rHeEsYpSIx14QsU8DLXtoekPCSTeZN4RO3pVweHpnwlGN7Hgs75yY6TVtcYob7za8dufR/wG8WOA==", "sha512": "sha512-YVMK0Bt/A43RmwizJoZ22ei2nmrhobgeiYwFzC4YAN+nue8RF6djXDMog0UCn+brerQoYVyaS+ghy9P/MUVcmw==",
"path": "system.text.encoding.extensions/4.3.0", "path": "system.text.encoding.extensions/4.3.0",
"hashPath": "system.text.encoding.extensions.4.3.0.nupkg.sha512" "hashPath": "system.text.encoding.extensions.4.3.0.nupkg.sha512"
}, },
...@@ -3049,14 +3049,14 @@ ...@@ -3049,14 +3049,14 @@
"System.Text.RegularExpressions/4.3.0": { "System.Text.RegularExpressions/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-Cs0QoguH5Uw4d66xuhgS/X4Tjm/Mncged1C2fGRXdhPJr9pUhbir59lm40f/RZsxQLL19efaeedWQbtpJryfAg==", "sha512": "sha512-RpT2DA+L660cBt1FssIE9CAGpLFdFPuheB7pLpKpn6ZXNby7jDERe8Ua/Ne2xGiwLVG2JOqziiaVCGDon5sKFA==",
"path": "system.text.regularexpressions/4.3.0", "path": "system.text.regularexpressions/4.3.0",
"hashPath": "system.text.regularexpressions.4.3.0.nupkg.sha512" "hashPath": "system.text.regularexpressions.4.3.0.nupkg.sha512"
}, },
"System.Threading/4.3.0": { "System.Threading/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-GUdTRQI5b7tP+bxn0wb1H2urT4gVyZmAMAiAsmExO8xGfxbVYnJnaErE1Qz/K1TL/lpymoQUwgaqj8295vHK+w==", "sha512": "sha512-VkUS0kOBcUf3Wwm0TSbrevDDZ6BlM+b/HRiapRFWjM5O0NS0LviG0glKmFK+hhPDd1XFeSdU1GmlLhb2CoVpIw==",
"path": "system.threading/4.3.0", "path": "system.threading/4.3.0",
"hashPath": "system.threading.4.3.0.nupkg.sha512" "hashPath": "system.threading.4.3.0.nupkg.sha512"
}, },
...@@ -3070,7 +3070,7 @@ ...@@ -3070,7 +3070,7 @@
"System.Threading.Tasks/4.3.0": { "System.Threading.Tasks/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-KlMDBDsVbQ/dfjAKi23D1QMSDRE4SmlEXatGsgBmDXZ1dqpnLdJOe/NVyc9Dt2T6Adgo6pBJSucmn/QTj6JWdA==", "sha512": "sha512-LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXiA==",
"path": "system.threading.tasks/4.3.0", "path": "system.threading.tasks/4.3.0",
"hashPath": "system.threading.tasks.4.3.0.nupkg.sha512" "hashPath": "system.threading.tasks.4.3.0.nupkg.sha512"
}, },
...@@ -3098,7 +3098,7 @@ ...@@ -3098,7 +3098,7 @@
"System.Threading.Timer/4.3.0": { "System.Threading.Timer/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-N9AzP8dUwPxMhg2jh33pV8bOVms5HkXoTWsm/mnfRYPOy842yZkaqTFyz1qEDqneksg8qzSEA2JPnZNqIe68Kg==", "sha512": "sha512-Z6YfyYTCg7lOZjJzBjONJTFKGN9/NIYKSxhU5GRd+DTwHSZyvWp1xuI5aR+dLg+ayyC5Xv57KiY4oJ0tMO89fQ==",
"path": "system.threading.timer/4.3.0", "path": "system.threading.timer/4.3.0",
"hashPath": "system.threading.timer.4.3.0.nupkg.sha512" "hashPath": "system.threading.timer.4.3.0.nupkg.sha512"
}, },
...@@ -3112,14 +3112,14 @@ ...@@ -3112,14 +3112,14 @@
"System.Xml.ReaderWriter/4.3.0": { "System.Xml.ReaderWriter/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-e9D+WUChqF7SZDcRYiH+NNxXeP5eTKbbvwhnAhs4s5mLcXvGOVR7IynsDxI87hzUwihj6xMx23S4SiLLOUL7kg==", "sha512": "sha512-GrprA+Z0RUXaR4N7/eW71j1rgMnEnEVlgii49GZyAjTH7uliMnrOU3HNFBr6fEDBCJCIdlVNq9hHbaDR621XBA==",
"path": "system.xml.readerwriter/4.3.0", "path": "system.xml.readerwriter/4.3.0",
"hashPath": "system.xml.readerwriter.4.3.0.nupkg.sha512" "hashPath": "system.xml.readerwriter.4.3.0.nupkg.sha512"
}, },
"System.Xml.XDocument/4.3.0": { "System.Xml.XDocument/4.3.0": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-gUE7UkiymHpxEDSWJ2oiycH43yvGk51NHzbY7Ub7ZIEFPh6oi5HjWatH4bJc2IeBQhOeRZ/akadnr0YEXH6wZA==", "sha512": "sha512-5zJ0XDxAIg8iy+t4aMnQAu0MqVbqyvfoUVl1yDV61xdo3Vth45oA2FoY4pPkxYAH5f8ixpmTqXeEIya95x0aCQ==",
"path": "system.xml.xdocument/4.3.0", "path": "system.xml.xdocument/4.3.0",
"hashPath": "system.xml.xdocument.4.3.0.nupkg.sha512" "hashPath": "system.xml.xdocument.4.3.0.nupkg.sha512"
}, },
...@@ -3133,7 +3133,7 @@ ...@@ -3133,7 +3133,7 @@
"System.Xml.XPath/4.0.1": { "System.Xml.XPath/4.0.1": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,
"sha512": "sha512-7lq2TCqxJ+6eIDZOc7HBVN6TcX4HzuO11O0wuS7XZprAMvxVCqTZQoDArlEglmo2yvTIDKtGYQ3ByIIDZx7bIQ==", "sha512": "sha512-UWd1H+1IJ9Wlq5nognZ/XJdyj8qPE4XufBUkAW59ijsCPjZkZe0MUzKKJFBr+ZWBe5Wq1u1d5f2CYgE93uH7DA==",
"path": "system.xml.xpath/4.0.1", "path": "system.xml.xpath/4.0.1",
"hashPath": "system.xml.xpath.4.0.1.nupkg.sha512" "hashPath": "system.xml.xpath.4.0.1.nupkg.sha512"
}, },
......
...@@ -7,7 +7,7 @@ using Edu.Model.ViewModel.System; ...@@ -7,7 +7,7 @@ using Edu.Model.ViewModel.System;
namespace Edu.Repository.System namespace Edu.Repository.System
{ {
public class RB_Msg_BaseRepository:BaseRepository<RB_Msg_Base> public class RB_Msg_BaseRepository : BaseRepository<RB_Msg_Base>
{ {
/// <summary> /// <summary>
/// 表名称 /// 表名称
...@@ -22,7 +22,7 @@ namespace Edu.Repository.System ...@@ -22,7 +22,7 @@ namespace Edu.Repository.System
public List<RB_Msg_Base_Function_ViewModel> GetListRepository(RB_Msg_Base_Function_ViewModel query) public List<RB_Msg_Base_Function_ViewModel> GetListRepository(RB_Msg_Base_Function_ViewModel query)
{ {
StringBuilder builder = new StringBuilder(); StringBuilder builder = new StringBuilder();
builder.Append($" SELECT * FROM {TableName} "); builder.Append($" SELECT * FROM {TableName} where Status=0 ");
if (query != null) if (query != null)
{ {
if (query.Group_Id > 0) if (query.Group_Id > 0)
...@@ -31,9 +31,9 @@ namespace Edu.Repository.System ...@@ -31,9 +31,9 @@ namespace Edu.Repository.System
} }
if (query.StoreType > 0) if (query.StoreType > 0)
{ {
builder.Append($" AND {nameof(RB_Msg_Base.StoreType)}={query.StoreType}"); builder.Append($" AND {nameof(RB_Msg_Base.StoreType)}={(int)query.StoreType}");
} }
} }
return Get<RB_Msg_Base_Function_ViewModel>(builder.ToString()).ToList(); return Get<RB_Msg_Base_Function_ViewModel>(builder.ToString()).ToList();
...@@ -48,7 +48,7 @@ namespace Edu.Repository.System ...@@ -48,7 +48,7 @@ namespace Edu.Repository.System
public List<RB_Msg_Base_Function_ViewModel> GetPageListRepository(int pageIndex, int pageSize, out long rowsCount, RB_Msg_Base_Function_ViewModel query) public List<RB_Msg_Base_Function_ViewModel> GetPageListRepository(int pageIndex, int pageSize, out long rowsCount, RB_Msg_Base_Function_ViewModel query)
{ {
StringBuilder builder = new StringBuilder(); StringBuilder builder = new StringBuilder();
builder.Append($" SELECT * FROM {TableName} where 1=1 "); builder.Append($" SELECT * FROM {TableName} where Status=0 ");
if (query != null) if (query != null)
{ {
if (query.Group_Id > 0) if (query.Group_Id > 0)
...@@ -57,7 +57,7 @@ namespace Edu.Repository.System ...@@ -57,7 +57,7 @@ namespace Edu.Repository.System
} }
if (query.StoreType > 0) if (query.StoreType > 0)
{ {
builder.Append($" AND {nameof(RB_Msg_Base.StoreType)}={query.StoreType}"); builder.Append($" AND {nameof(RB_Msg_Base.StoreType)}={(int)query.StoreType}");
} }
} }
......
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Edu.Model.Entity.System;
using Edu.Model.ViewModel.System;
namespace Edu.Repository.System
{
/// <summary>
/// 短信模板仓储层
/// </summary>
public class RB_Msg_BaseTemplateRepository : BaseRepository<RB_Msg_BaseTemplate>
{
/// <summary>
/// 表名称
/// </summary>
public string TableName { get { return nameof(RB_Msg_BaseTemplate); } }
/// <summary>
/// 获取短信模板配置信息
/// </summary>
/// <param name="query">查询条件</param>
/// <returns></returns>
public List<RB_Msg_BaseTemplate_ViewModel> GetListRepository(RB_Msg_BaseTemplate_ViewModel query)
{
StringBuilder builder = new StringBuilder();
builder.Append($" SELECT * FROM {TableName} where 1=1 ");
if (query != null)
{
if (query.Group_Id > 0)
{
builder.Append($" AND {nameof(RB_Msg_BaseTemplate.Group_Id)}={query.Group_Id}");
}
if (query.StoreType > 0)
{
builder.Append($" AND {nameof(RB_Msg_BaseTemplate.StoreType)}={(int)query.StoreType}");
}
if (query.BaseTemplateType > 0)
{
builder.Append($" AND {nameof(RB_Msg_BaseTemplate.BaseTemplateType)}={(int)query.BaseTemplateType}");
}
}
return Get<RB_Msg_BaseTemplate_ViewModel>(builder.ToString()).ToList();
}
/// <summary>
/// 获取短信模板配置信息
/// </summary>
/// <param name="query">查询条件</param>
/// <returns></returns>
public List<RB_Msg_BaseTemplate_ViewModel> GetPageListRepository(int pageIndex, int pageSize, out long rowsCount, RB_Msg_BaseTemplate_ViewModel query)
{
StringBuilder builder = new StringBuilder();
builder.Append($" SELECT * FROM {TableName} where 1=1 ");
if (query != null)
{
if (query.Group_Id > 0)
{
builder.Append($" AND {nameof(RB_Msg_BaseTemplate.Group_Id)}={query.Group_Id}");
}
if (query.StoreType > 0)
{
builder.Append($" AND {nameof(RB_Msg_BaseTemplate.StoreType)}={(int)query.StoreType}");
}
if (query.BaseTemplateType > 0)
{
builder.Append($" AND {nameof(RB_Msg_BaseTemplate.BaseTemplateType)}={(int)query.BaseTemplateType}");
}
}
return GetPage<RB_Msg_BaseTemplate_ViewModel>(pageIndex, pageSize, out rowsCount, builder.ToString()).ToList();
}
}
}
...@@ -21,7 +21,7 @@ namespace Edu.Repository.System ...@@ -21,7 +21,7 @@ namespace Edu.Repository.System
public List<RB_Msg_Log> GetListRepository(RB_Msg_Log query) public List<RB_Msg_Log> GetListRepository(RB_Msg_Log query)
{ {
StringBuilder builder = new StringBuilder(); StringBuilder builder = new StringBuilder();
builder.Append($" SELECT * FROM {TableName} "); builder.Append($" SELECT * FROM {TableName} where 1=1 ");
if (query != null) if (query != null)
{ {
if (query.Group_Id > 0) if (query.Group_Id > 0)
...@@ -32,7 +32,7 @@ namespace Edu.Repository.System ...@@ -32,7 +32,7 @@ namespace Edu.Repository.System
{ {
builder.Append($" AND {nameof(RB_Msg_Log.School_Id)}={query.School_Id}"); builder.Append($" AND {nameof(RB_Msg_Log.School_Id)}={query.School_Id}");
} }
if (query.SendStatus > 0) if (query.SendStatus.HasValue&& query.SendStatus > 0)
{ {
builder.Append($" AND {nameof(RB_Msg_Log.SendStatus)}={(int)query.SendStatus}"); builder.Append($" AND {nameof(RB_Msg_Log.SendStatus)}={(int)query.SendStatus}");
} }
...@@ -62,7 +62,7 @@ namespace Edu.Repository.System ...@@ -62,7 +62,7 @@ namespace Edu.Repository.System
builder.Append($" AND {nameof(RB_Msg_Log.School_Id)}={query.School_Id}"); builder.Append($" AND {nameof(RB_Msg_Log.School_Id)}={query.School_Id}");
} }
if (query.SendStatus > 0) if (query.SendStatus.HasValue && query.SendStatus > 0)
{ {
builder.Append($" AND {nameof(RB_Msg_Log.SendStatus)}={(int)query.SendStatus}"); builder.Append($" AND {nameof(RB_Msg_Log.SendStatus)}={(int)query.SendStatus}");
} }
......
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp3.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Folder Include="Oss\" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Aliyun.Net.SDK.Core" Version="1.0.3" />
<PackageReference Include="Aliyun.OSS.SDK.NetCore" Version="2.10.0" />
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
</ItemGroup>
<ItemGroup>
<Reference Include="aliyun-net-sdk-core">
<HintPath>lib\aliyun-net-sdk-core.dll</HintPath>
</Reference>
<Reference Include="aliyun-net-sdk-dysmsapi">
<HintPath>lib\aliyun-net-sdk-dysmsapi.dll</HintPath>
</Reference>
</ItemGroup>
</Project>
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Threading;
using Aliyun.Acs.Core;
using Aliyun.Acs.Core.Exceptions;
using Aliyun.Acs.Core.Profile;
using Aliyun.Acs.Dysmsapi.Model.V20170525;
namespace Edu.ThirdCore.Message
{
/// <summary>
/// 消息发送中心
/// </summary>
public class MessageCore
{
private static bool IsFinish = true;
public static void Init()
{
while (QueueHelper.Queue.Count == 0 || !IsFinish)
{
Thread.Sleep(1000);
};
IsFinish = false;
string content = QueueHelper.Queue.Dequeue() as string;
Run(content);
Init();
}
public static void Run(string content)
{
try
{
JObject obj = JObject.Parse(content);
switch (obj["cmd"].ToString().ToLower())
{
case "sms":
SendSMS(obj);
break;
default:
break;
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
IsFinish = true;
}
private static void SendSMS(JObject obj)
{
SendSmsRequest request = new SendSmsRequest();
try
{
String product = "Dysmsapi";//短信API产品名称(短信产品名固定,无需修改)
String domain = obj["Domain"].ToString(); //短信API产品域名(接口地址固定,无需修改)
String accessKeyId = obj["AccessKeyId"].ToString();
String accessKeySecret = obj["AccessKeySecret"].ToString();
IClientProfile profile = DefaultProfile.GetProfile(obj["RegionId"].ToString(), accessKeyId, accessKeySecret);
DefaultProfile.AddEndpoint(obj["RegionId"].ToString(), obj["RegionId"].ToString(), product, domain);
IAcsClient acsClient = new DefaultAcsClient(profile);
//必填:待发送手机号。支持以逗号分隔的形式进行批量调用,批量上限为1000个手机号码,批量调用相对于单条调用及时性稍有延迟,验证码类型的短信推荐使用单条调用的方式
request.PhoneNumbers = obj["phoneNumber"].ToString();
request.SignName = obj["SignName"].ToString(); //aliSms["signName"].ToString();
//必填:短信模板-可在短信控制台中找到
request.TemplateCode = obj["templateCode"].ToString();
//可选:模板中的变量替换JSON串,如模板内容为"您的验证码为${code}"时,此处的值为
request.TemplateParam = obj["templateParam"].ToString();
//可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
request.OutId = obj["OutId"].ToString();
//请求失败这里会抛ClientException异常
SendSmsResponse sendSmsResponse = acsClient.GetAcsResponse(request);
if (!sendSmsResponse.Code.Equals("OK"))
{
var data = new { phoneNumber = obj["phoneNumber"].ToString(), templateParam = obj["templateParam"].ToString(), code = sendSmsResponse.Code, message = sendSmsResponse.Message };
//return data;
}
var datatst = new { phoneNumber = obj["phoneNumber"].ToString(), templateParam = obj["templateParam"].ToString(), code = sendSmsResponse.Code, message = sendSmsResponse.Message };
//return datatst;
// Mall.Common.Plugin.LogHelper.WriteInfo(JsonConvert.SerializeObject(datatst));
}
catch (Aliyun.Acs.Core.Exceptions.ServerException ex)
{
var data = new { phoneNumber = obj["phoneNumber"].ToString(), templateParam = obj["templateParam"].ToString(), code = "NO", message = ex.ToString() };
// return data;
//LogHelper.Write(ex, "SendSMS1");
}
catch (ClientException ex)
{
var data = new { phoneNumber = obj["phoneNumber"].ToString(), templateParam = obj["templateParam"].ToString(), code = "NO", message = ex.ToString() };
// return data;
// LogHelper.Write(ex, "SendSMS2");
}
}
/// <summary>
/// java调用
/// </summary>
/// <param name="obj"></param>
public static string SendSMSToJava(string phoneNumber, string templateCode, string templateParam, string SignName, string Domain, string AccessKeyId, string AccessKeySecret, string RegionId)
{
SendSmsRequest request = new SendSmsRequest();
try
{
//JObject aliSms = Config.AliSms;
//String product = "Dysmsapi";//短信API产品名称(短信产品名固定,无需修改)
//String domain = "dysmsapi.aliyuncs.com";//短信API产品域名(接口地址固定,无需修改)
//String accessKeyId = aliSms["accessKeyId"].ToString();
//String accessKeySecret = aliSms["accessKeySecret"].ToString();
//IClientProfile profile = DefaultProfile.GetProfile("cn-hangzhou", accessKeyId, accessKeySecret);
//DefaultProfile.AddEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
String product = "Dysmsapi";//短信API产品名称(短信产品名固定,无需修改)
String domain = Domain; //短信API产品域名(接口地址固定,无需修改)
String accessKeyId = AccessKeyId;
String accessKeySecret = AccessKeySecret;
IClientProfile profile = DefaultProfile.GetProfile(RegionId, accessKeyId, accessKeySecret);
DefaultProfile.AddEndpoint(RegionId, RegionId, product, domain);
IAcsClient acsClient = new DefaultAcsClient(profile);
//必填:待发送手机号。支持以逗号分隔的形式进行批量调用,批量上限为1000个手机号码,批量调用相对于单条调用及时性稍有延迟,验证码类型的短信推荐使用单条调用的方式
request.PhoneNumbers = phoneNumber;
request.SignName = SignName;// aliSms["signName"].ToString();
//必填:短信模板-可在短信控制台中找到
request.TemplateCode = templateCode;
//可选:模板中的变量替换JSON串,如模板内容为"您的验证码为${code}"时,此处的值为
request.TemplateParam = templateParam;
//可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
request.OutId = "";
//请求失败这里会抛ClientException异常
SendSmsResponse sendSmsResponse = acsClient.GetAcsResponse(request);
if (!sendSmsResponse.Code.Equals("OK"))
{
var data = new { phoneNumber, templateParam, code = sendSmsResponse.Code, message = sendSmsResponse.Message };
return "";
}
else
{
return sendSmsResponse.BizId;
}
}
catch (Aliyun.Acs.Core.Exceptions.ServerException ex)
{
//LogHelper.Write(ex, "SendSMSToJava1");
}
catch (ClientException ex)
{
//LogHelper.Write(ex, "SendSMSToJava2");
}
return "";
}
/// <summary>
/// 获取短信发送状态
/// </summary>
/// <param name="phoneNumber"></param>
/// <param name="SendDate"></param>
/// <param name="BizId"></param>
/// <returns></returns>
public static string SendSMSStatus(string phoneNumber, string SendDate, string BizId, string Domain, string AccessKeyId, string AccessKeySecret, string RegionId)
{
// JObject aliSms = Config.AliSms;
String product = "Dysmsapi";//短信API产品名称(短信产品名固定,无需修改)
String domain = Domain;// "dysmsapi.aliyuncs.com";//短信API产品域名(接口地址固定,无需修改)
String accessKeyId = AccessKeyId;// aliSms["accessKeyId"].ToString();
String accessKeySecret = AccessKeySecret; //aliSms["accessKeySecret"].ToString();
IClientProfile profile = DefaultProfile.GetProfile(RegionId, accessKeyId, accessKeySecret);
DefaultProfile.AddEndpoint(RegionId, RegionId, product, domain);
IAcsClient acsClient = new DefaultAcsClient(profile);
//拼接参数 返回url
string url = $@"https://{domain}/?AccessKeyId={accessKeyId}&Action=QuerySendDetails&CurrentPage=1&Format=JSON&PageSize=12&PhoneNumber={phoneNumber}&RegionId=cn-hangzhou&SecureTransport=true&SendDate={SendDate}&BizId={BizId}&SignatureMethod=HMAC-SHA1&SignatureNonce=46edc0b6cc74e437aa0ba1703c71a99b&SignatureVersion=1.0&SourceIp=171.88.98.6&Timestamp=2019-09-25T02%3A12%3A35Z&Version=2017-05-25&Signature=Uvqz3E13092wPxNYUt3ytDojV50%3D";
return url;
}
/// <summary>
/// 获取短信发送状态
/// </summary>
/// <param name="phoneNumber"></param>
/// <param name="SendDate"></param>
/// <param name="BizId"></param>
/// <returns></returns>
public static QuerySendDetailsResponse QuerySendDetails(string phoneNumber, string SendDate, string BizId, string Domain, string AccessKeyId, string AccessKeySecret, string RegionId)
{
String product = "Dysmsapi";//短信API产品名称(短信产品名固定,无需修改)
// 初始化acsClient,暂不支持region化
IClientProfile profile = DefaultProfile.GetProfile(RegionId, AccessKeyId, AccessKeySecret);
DefaultProfile.AddEndpoint(RegionId, RegionId, product, Domain);
IAcsClient acsClient = new DefaultAcsClient(profile);
// 组装请求对象
QuerySendDetailsRequest request = new QuerySendDetailsRequest
{
PhoneNumber = phoneNumber,
BizId = BizId,
SendDate = SendDate,
PageSize = 10,
CurrentPage = 1
};
QuerySendDetailsResponse querySendDetailsResponse = null;
try
{
// 请求失败这里会抛ClientException异常
querySendDetailsResponse = acsClient.GetAcsResponse(request);
}
catch (ServerException e)
{
querySendDetailsResponse = new QuerySendDetailsResponse();
// LogHelper.LogException<ServerException>(e.ErrorMessage);
}
catch (ClientException e)
{
querySendDetailsResponse = new QuerySendDetailsResponse();
// LogHelper.LogException<ClientException>(e.ErrorMessage);
}
return querySendDetailsResponse;
}
/// <summary>
/// 获取短信状态
/// </summary>
/// <param name="phoneNumber"></param>
/// <param name="SendDate"></param>
/// <param name="BizId"></param>
/// <returns></returns>
public static string SendSMSStatus2(string phoneNumber, string SendDate, string BizId, string Domain, string AccessKeyId, string AccessKeySecret, string RegionId)
{
//JObject aliSms = Config.AliSms;
String product = "Dysmsapi";//短信API产品名称(短信产品名固定,无需修改)
String domain = Domain;//"dysmsapi.aliyuncs.com";//短信API产品域名(接口地址固定,无需修改)
String accessKeyId = AccessKeyId;//aliSms["accessKeyId"].ToString();
String accessKeySecret = AccessKeySecret; //aliSms["accessKeySecret"].ToString();
IClientProfile profile = DefaultProfile.GetProfile(RegionId, accessKeyId, accessKeySecret);
DefaultProfile.AddEndpoint(RegionId, RegionId, product, domain);
IAcsClient acsClient = new DefaultAcsClient(profile);
QuerySendDetailsRequest request = new QuerySendDetailsRequest();
request.CurrentPage = 1;
request.PageSize = 12;
request.PhoneNumber = phoneNumber;
request.SendDate = SendDate;
request.BizId = BizId;
//请求失败这里会抛ClientException异常
var robj = acsClient.DoAction(request);
if (robj.Status == 200)
{
System.IO.Stream stream = new System.IO.MemoryStream(robj.Content);
var reader = new System.IO.StreamReader(stream, System.Text.Encoding.UTF8);
string rrrr = reader.ReadToEnd();
return rrrr;
}
return "";
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Threading;
namespace Edu.ThirdCore.Message
{
/// <summary>
/// 消息队列
/// </summary>
public class QueueHelper
{
/// <summary>
/// 任务队列
/// </summary>
public static Queue<string> Queue = new Queue<string>();
/// <summary>
/// 线程锁
/// </summary>
private static object locker = new object();
/// <summary>
/// 添加消息到队列
/// </summary>
/// <param name="task"></param>
public static void EnqueueTask(string task)
{
lock (locker)
{
//同样的任务,不同时加入
IList<string> tasks = Queue.ToList();
if (tasks.Count(p => p == task) == 0)
{
Queue.Enqueue(task);
Monitor.PulseAll(locker);
}
}
}
}
}

using System;
using System.Collections.Generic;
using System.Text;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace Edu.ThirdCore.Message
{
/// <summary>
/// 短信消息
/// </summary>
public class SMSService
{
/// <summary>
/// 发送证码
/// </summary>
/// <param name="phoneNumber">电话号码</param>
/// <param name="code">验证码</param>
public static void SendCode(string phoneNumber, string code, string templateCode, string SignName, string Domain, string AccessKeyId, string AccessKeySecret, string RegionId, string OutId)
{
JObject obj = new JObject();
obj["cmd"] = "sms";
obj["phoneNumber"] = phoneNumber;
obj["templateCode"] = templateCode;
obj["SignName"] = SignName;
obj["Domain"] = Domain;
obj["AccessKeyId"] = AccessKeyId;
obj["AccessKeySecret"] = AccessKeySecret;
obj["RegionId"] = RegionId;
var TemplateParam = new { code = code };
obj["OutId"] = OutId;
obj["templateParam"] = JsonConvert.SerializeObject(TemplateParam);
QueueHelper.EnqueueTask(JsonConvert.SerializeObject(obj));
}
/// <summary>
/// 发送短信通知
/// </summary>
/// <param name="phoneNumber"></param>
/// <param name="content"></param>
/// <param name="templateCode"></param>
public static void SendMsg(string phoneNumber, string content, string templateCode, string SignName, string Domain, string AccessKeyId, string AccessKeySecret, string RegionId, string OutId)
{
JObject obj = new JObject();
obj["cmd"] = "sms";
obj["phoneNumber"] = phoneNumber;
obj["templateCode"] = templateCode;
obj["SignName"] = SignName;
obj["Domain"] = Domain;
obj["AccessKeyId"] = AccessKeyId;
obj["RegionId"] = RegionId;
obj["AccessKeySecret"] = AccessKeySecret;
var TemplateParam = new { content };
obj["OutId"] = OutId;
obj["templateParam"] = JsonConvert.SerializeObject(TemplateParam);
//LogHelper.WriteInfo("发送短信信息");
QueueHelper.EnqueueTask(JsonConvert.SerializeObject(obj));
}
/// <summary>
/// 发送短信通知
/// </summary>
/// <param name="phoneNumber"></param>
/// <param name="templateParam">通知参数</param>
/// <param name="templateCode"></param>
public static void SendMsg(string phoneNumber, object templateParam, string templateCode, string SignName, string Domain, string AccessKeyId, string AccessKeySecret, string RegionId,string OutId)
{
JObject obj = new JObject();
obj["cmd"] = "sms";
obj["phoneNumber"] = phoneNumber;
obj["templateCode"] = templateCode;
var TemplateParam = templateParam;
obj["SignName"] = SignName;
obj["Domain"] = Domain;
obj["RegionId"] = RegionId;
obj["AccessKeyId"] = AccessKeyId;
obj["AccessKeySecret"] = AccessKeySecret;
obj["OutId"] = OutId;
obj["templateParam"] = JsonConvert.SerializeObject(TemplateParam);
QueueHelper.EnqueueTask(JsonConvert.SerializeObject(obj));
}
}
}
...@@ -28,7 +28,7 @@ namespace Edu.WebApi.Controllers.Public ...@@ -28,7 +28,7 @@ namespace Edu.WebApi.Controllers.Public
/// </summary> /// </summary>
private readonly MsgLogModule msgLogModule = new MsgLogModule(); private readonly MsgLogModule msgLogModule = new MsgLogModule();
#region 短信记录信息
/// <summary> /// <summary>
/// 获取短信记录分页列表 /// 获取短信记录分页列表
/// </summary> /// </summary>
...@@ -47,6 +47,18 @@ namespace Edu.WebApi.Controllers.Public ...@@ -47,6 +47,18 @@ namespace Edu.WebApi.Controllers.Public
} }
/// <summary>
/// 获取触发事件枚举
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult GetMsgSendStatusEnumList()
{
var list = EnumHelper.EnumToList(typeof(Common.Enum.System.MsgSendStatusEnum));
return ApiResult.Success("", list);
}
#endregion
#region 短信配置 #region 短信配置
...@@ -71,6 +83,7 @@ namespace Edu.WebApi.Controllers.Public ...@@ -71,6 +83,7 @@ namespace Edu.WebApi.Controllers.Public
} }
pageModel.Count = rowsCount; pageModel.Count = rowsCount;
pageModel.PageData = list; pageModel.PageData = list;
return ApiResult.Success(data: pageModel); return ApiResult.Success(data: pageModel);
} }
...@@ -106,13 +119,14 @@ namespace Edu.WebApi.Controllers.Public ...@@ -106,13 +119,14 @@ namespace Edu.WebApi.Controllers.Public
var model = new RB_Msg_Base(); var model = new RB_Msg_Base();
model.CreateDate = DateTime.Now; model.CreateDate = DateTime.Now;
model.CreateBy = UserInfo.Id; model.CreateBy = UserInfo.Id;
model.Group_Id = this.UserInfo.Group_Id; model.Group_Id = base.UserInfo.Group_Id;
model.ID = extModel.ID; model.ID = extModel.ID;
model.StoreType = extModel.StoreType;
if (extModel.MsgBase != null) if (extModel.MsgBase != null)
{ {
model.MsgConfigure = Common.Plugin.JsonHelper.Serialize(extModel.MsgBase); model.MsgConfigure = Common.Plugin.JsonHelper.Serialize(extModel.MsgBase);
} }
bool flag = msgLogModule.SetMsgBaseModule(extModel); bool flag = msgLogModule.SetMsgBaseModule(model);
return flag ? ApiResult.Success() : ApiResult.Failed(); return flag ? ApiResult.Success() : ApiResult.Failed();
} }
...@@ -145,5 +159,153 @@ namespace Edu.WebApi.Controllers.Public ...@@ -145,5 +159,153 @@ namespace Edu.WebApi.Controllers.Public
} }
#endregion #endregion
#region 短信模板配置
/// <summary>
/// 获取触发事件枚举
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult GetBaseTemplateTypeEnumList()
{
var list = EnumHelper.EnumToList(typeof(Common.Enum.System.BaseTemplateTypeEnum));
return ApiResult.Success("", list);
}
/// <summary>
/// 获取短信模板配置页列表
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult GetMsgBaseTemplatePageList()
{
var pageModel = Common.Plugin.JsonHelper.DeserializeObject<ResultPageModel>(RequestParm.Msg.ToString());
var query = Common.Plugin.JsonHelper.DeserializeObject<RB_Msg_BaseTemplate_ViewModel>(RequestParm.Msg.ToString());
query.Group_Id = base.UserInfo.Group_Id;
var list = msgLogModule.GetMsgBaseTemplatePageListModule(pageModel.PageIndex, pageModel.PageSize, out long rowsCount, query);
foreach (var item in list)
{
item.BaseTemplateTypeStr = EnumHelper.ToName(item.BaseTemplateType);
}
pageModel.Count = rowsCount;
pageModel.PageData = list;
return ApiResult.Success(data: pageModel);
}
/// <summary>
/// 获取短信模板配置列表
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult GetMsgBaseTemplateList()
{
var query = Common.Plugin.JsonHelper.DeserializeObject<RB_Msg_BaseTemplate_ViewModel>(RequestParm.Msg.ToString());
query.Group_Id = base.UserInfo.Group_Id;
var list = msgLogModule.GetMsgBaseTemplateModule(query);
return ApiResult.Success(data: list);
}
/// <summary>
/// 添加修改短信模板配置
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult SetMsgBaseTemplate()
{
var extModel = Common.Plugin.JsonHelper.DeserializeObject<RB_Msg_BaseTemplate_ViewModel>(RequestParm.Msg.ToString());
extModel.CreateDate = DateTime.Now;
extModel.CreateBy = UserInfo.Id;
extModel.Group_Id = base.UserInfo.Group_Id;
bool flag = msgLogModule.SetMsgBaseTemplateModule(extModel);
return flag ? ApiResult.Success() : ApiResult.Failed();
}
/// <summary>
/// 获取短信模板配置实体
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult GetMsgBaseTemplate()
{
var ID = base.ParmJObj.GetInt("ID", 0);
var extModel = msgLogModule.GetMsgBaseTemplateModule(ID);
return ApiResult.Success(data: extModel);
}
/// <summary>
/// 删除短信模板配置
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult RemoveMsgBaseTemplate()
{
var ClassId = base.ParmJObj.GetInt("ID", 0);
var flag = msgLogModule.RemoveMsgBaseTemplateModule(ClassId);
return flag ? ApiResult.Success() : ApiResult.Failed();
}
#endregion
#region 发短信测试
[HttpPost]
public ApiResult TestSendMsg()
{
object PhoneMessage = new
{
OrderNo = "1111111111111",
Name = "李三",
Mobile = "13551132418",
TripDate = "2020-11-30",//item.TripSTime.Value.ToString("yyyy-MM-dd HH:mm") + " " + ((item.UseDay ?? 0) == Convert.ToDecimal(0.5) ? "半" : Convert.ToInt32(item.UseDay ?? 0).ToString()) + "日",
Address = "阳光新业2号楼",
Number = "李四"
};
//新增短信记录信息
var msgLogModel = new RB_Msg_Log
{
Group_Id = 100000,
School_Id = 1,
Student_Id = 2,
CreateDate = DateTime.Now,
SendStatus = Common.Enum.System.MsgSendStatusEnum.InReceipt,
CreateBy = 0,
CreateByName = "系统自动发送",
SendContent = "测试内容",
ReceiverName = "张学生",
ReceiverPhone = "13551132417"
};
msgLogModule.SendMsg(PhoneMessage, Common.Enum.System.BaseTemplateTypeEnum.OrderSuccess, msgLogModel);
// ThirdCore.Message.SMSService.SendMsg("13551132417", PhoneMessage, "SMS_201722097", "印象之旅", "dysmsapi.aliyuncs.com", "LTAIwE7l9dImZSa3", "j47Ajn0d0WzUCIX8Biyj3P2r8QDltI", "cn-hangzhou");
return ApiResult.Success("");
}
[HttpPost]
public ApiResult TestUpdateSendMsg()
{
msgLogModule.UpdateMsgSendStatus();
return ApiResult.Success("");
}
#endregion
} }
} }
...@@ -366,8 +366,17 @@ namespace Edu.WebApi.Controllers.Public ...@@ -366,8 +366,17 @@ namespace Edu.WebApi.Controllers.Public
[HttpPost] [HttpPost]
public ApiResult GetStoreTypeEnumList() public ApiResult GetStoreTypeEnumList()
{ {
int type = base.ParmJObj.GetInt("ID", 0);
var list = EnumHelper.EnumToList(typeof(Common.Enum.Public.StoreTypeEnum)); var list = EnumHelper.EnumToList(typeof(Common.Enum.Public.StoreTypeEnum));
return ApiResult.Success("", list); if (type == 1)
{
return ApiResult.Success("", list.Where(x => x.Id != 3));
}
else
{
return ApiResult.Success("", list);
}
} }
/// <summary> /// <summary>
......
...@@ -29,17 +29,21 @@ namespace Edu.WebApi.Controllers.User ...@@ -29,17 +29,21 @@ namespace Edu.WebApi.Controllers.User
/// <summary> /// <summary>
/// 助教处理类对象 /// 助教处理类对象
/// </summary> /// </summary>
private readonly NoticeModule noticeModule = AOPHelper.CreateAOPObject<NoticeModule>(); private readonly NoticeModule noticeModule = new NoticeModule();
/// <summary> /// <summary>
/// 考勤处理类 /// 考勤处理类
/// </summary> /// </summary>
private readonly AttendanceModule attendancemodule = new AttendanceModule(); private readonly AttendanceModule attendancemodule = new AttendanceModule();
/// <summary> /// <summary>
/// 审核处理 /// 审核处理
/// </summary> /// </summary>
private readonly WorkFlowModule workFlowModule = new WorkFlowModule(); private readonly WorkFlowModule workFlowModule = new WorkFlowModule();
/// <summary>
/// 考勤记录处理类
/// </summary>
public AttendanceRecodModule attendRecodeModule = new AttendanceRecodModule();
#region 公告管理 #region 公告管理
...@@ -1799,5 +1803,181 @@ namespace Edu.WebApi.Controllers.User ...@@ -1799,5 +1803,181 @@ namespace Edu.WebApi.Controllers.User
} }
#endregion #endregion
#region APP考勤
/// <summary>
/// App获取今天打卡信息
/// </summary>
/// <returns></returns>
public ApiResult GetAttendRecod()
{
JObject parm = JObject.Parse(RequestParm.Msg.ToString());
UserInfo userInfo = UserReidsCache.GetUserLoginInfo(RequestParm.Uid);
string date = JsonHelper.GetStringValue(parm, "date");
if (string.IsNullOrWhiteSpace(date))
{
return ApiResult.ParamIsNull("日期时间为空");
}
JObject result = new JObject();
JObject recodeInfo = attendRecodeModule.GetAttendRecod(userInfo.Id, userInfo.DeptId, date);
if (recodeInfo == null)
{
result["isNeedCard"] = false;
result["recodeInfo"] = recodeInfo;
}
else
{
result["isNeedCard"] = true;
result["recodeInfo"] = recodeInfo;
}
return ApiResult.Success("获取成功", data: result);
}
/// <summary>
/// App验证是否在打卡范围
/// </summary>
/// <returns></returns>
public ApiResult VerifyPunchCard()
{
JObject parm = JObject.Parse(RequestParm.Msg.ToString());
string latAndLong = JsonHelper.GetStringValue(parm, "latAndLong");
string wifiMac = JsonHelper.GetStringValue(parm, "wifiMac");
string oldWifiMac = JsonHelper.GetStringValue(parm, "wifiMac");
string version = JsonHelper.GetStringValue(parm, "version");
if (string.IsNullOrWhiteSpace(latAndLong) && string.IsNullOrWhiteSpace(wifiMac))
{
return ApiResult.ParamIsNull("参数为空");
}
int empId = Convert.ToInt32(RequestParm.Uid);
List<RB_Attendance_Way_Extend> wayList = new List<RB_Attendance_Way_Extend>();
wifiMac = GetMdifyWifiMac(wifiMac);
bool isNotVerifyVifi = JudgeNotVerifyVifi(version, empId);
bool isRang = isNotVerifyVifi ? isNotVerifyVifi : attendRecodeModule.VerifyPunchCard(empId, latAndLong, wifiMac, oldWifiMac, out wayList);
var attendWay = wayList.Select(t => new { type = t.Type, name = t.Name, address = t.Address, targetAddress = t.TargetAddress, scope = t.Scope });
var result = new { isLegal = isRang, attendWay };
return ApiResult.Success("获取成功", data: result);
}
/// <summary>
/// App考勤打卡
/// </summary>
/// <returns></returns>
public ApiResult PunchCard()
{
JObject parm = JObject.Parse(RequestParm.Msg.ToString());
string latAndLong = JsonHelper.GetStringValue(parm, "latAndLong");
string address = JsonHelper.GetStringValue(parm, "address");
string wifiMac = JsonHelper.GetStringValue(parm, "wifiMac");
string oldWifiMac = wifiMac;
string phoneId = JsonHelper.GetStringValue(parm, "phoneId");
string PhoneName = JsonHelper.GetStringValue(parm, "PhoneName");
string version = JsonHelper.GetStringValue(parm, "version");
if (string.IsNullOrWhiteSpace(latAndLong) && string.IsNullOrWhiteSpace(wifiMac))
{
return ApiResult.ParamIsNull("参数为空");
}
if (string.IsNullOrWhiteSpace(phoneId))
{
return ApiResult.ParamIsNull("手机标识码为空");
}
UserInfo userInfo = UserReidsCache.GetUserLoginInfo(RequestParm.Uid);
string date = JsonHelper.GetStringValue(parm, "date");
wifiMac = GetMdifyWifiMac(wifiMac);
LogHelper.WriteInfo($"打卡信息:{JsonConvert.SerializeObject(RequestParm)}-->更新后的mac:{wifiMac}");
int PunchCardType;
bool isNotVerifyVifi = JudgeNotVerifyVifi(version, userInfo.Id);
string result = attendRecodeModule.PunchCard(userInfo.Id, userInfo.DeptId, latAndLong, wifiMac, oldWifiMac, phoneId, address, PhoneName, out PunchCardType, isNotVerifyVifi);
var resultData = new { punchCardType = PunchCardType };
if (result.Equals("ok"))
{
return ApiResult.Success("打卡成功", data: resultData);
}
else if (result.Equals("不在打卡范围"))
{
return new ApiResult() { Code = (int)ResultCode.NotInCardRange, Message = result };
}
else
{
return ApiResult.Failed(message: result);
}
}
/// <summary>
/// 不打卡wifi版本
/// </summary>
/// <param name="version"></param>
/// <param name="EmpId"></param>
/// <returns></returns>
private bool JudgeNotVerifyVifi(string version, int EmpId)
{
bool isNotVerifyVifi = false;
if (!string.IsNullOrWhiteSpace(version))
{
string[] versionInfo = version.Split('&');
if (versionInfo.Length == 3 && versionInfo[1].ToLower().Equals("ios") && versionInfo[2].Equals("1.1.8"))
{
isNotVerifyVifi = true;
}
}
return isNotVerifyVifi;
}
/// <summary>
/// 获取修改后wifimac
/// </summary>
/// <param name="wifiMac">原始</param>
/// <returns></returns>
private string GetMdifyWifiMac(string wifiMac)
{
if (!string.IsNullOrWhiteSpace(wifiMac))
{
string[] mac = wifiMac.Split(':');
for (int i = 0; i < mac.Length; i++)
{
if (mac[i].Length == 1)
{
mac[i] = $"0{mac[i]}";
}
}
wifiMac = string.Join(":", mac).ToLower();
}
return wifiMac;
}
/// <summary>
/// App考勤打卡统计
/// </summary>
/// <returns></returns>
public ApiResult PunchCardStatistical()
{
JObject parm = JObject.Parse(RequestParm.Msg.ToString());
string date = JsonHelper.GetStringValue(parm, "date");
if (string.IsNullOrWhiteSpace(date))
{
return ApiResult.ParamIsNull("日期为空");
}
int empId = Convert.ToInt32(RequestParm.Uid);
List<JObject> result = attendRecodeModule.PunchCardStatistical(empId, date);
return ApiResult.Success("获取成功", data: result);
}
/// <summary>
/// App考勤打卡月历
/// </summary>
/// <returns></returns>
public ApiResult PunchCardCalendar()
{
JObject parm = JObject.Parse(RequestParm.Msg.ToString());
string date = JsonHelper.GetStringValue(parm, "date");
if (string.IsNullOrWhiteSpace(date))
{
return ApiResult.ParamIsNull("日期为空");
}
int empId = Convert.ToInt32(RequestParm.Uid);
List<JObject> result = attendRecodeModule.PunchCardCalendar(empId, date);
return ApiResult.Success("获取成功", data: result);
}
#endregion
} }
} }
\ No newline at end of file
...@@ -31,6 +31,7 @@ ...@@ -31,6 +31,7 @@
<ProjectReference Include="..\Edu.Module.System\Edu.Module.System.csproj" /> <ProjectReference Include="..\Edu.Module.System\Edu.Module.System.csproj" />
<ProjectReference Include="..\Edu.Module.User\Edu.Module.User.csproj" /> <ProjectReference Include="..\Edu.Module.User\Edu.Module.User.csproj" />
<ProjectReference Include="..\Edu.Repository\Edu.Repository.csproj" /> <ProjectReference Include="..\Edu.Repository\Edu.Repository.csproj" />
<ProjectReference Include="..\Edu.ThirdCore\Edu.ThirdCore.csproj" />
</ItemGroup> </ItemGroup>
</Project> </Project>
using System.Collections.Generic; using System.Collections.Generic;
using System.Text.Encodings.Web; using System.Text.Encodings.Web;
using System.Text.Unicode; using System.Text.Unicode;
using System.Threading.Tasks;
using Edu.ThirdCore.Message;
using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
...@@ -50,7 +52,7 @@ namespace Edu.WebApi ...@@ -50,7 +52,7 @@ namespace Edu.WebApi
}; };
services.AddCors(options => options.AddPolicy("AllowCors", policy => policy.AllowAnyHeader().AllowAnyMethod().AllowCredentials().WithOrigins(corsArray.ToArray()))); services.AddCors(options => options.AddPolicy("AllowCors", policy => policy.AllowAnyHeader().AllowAnyMethod().AllowCredentials().WithOrigins(corsArray.ToArray())));
} }
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IHostApplicationLifetime appLifetime) public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IHostApplicationLifetime appLifetime)
...@@ -67,7 +69,9 @@ namespace Edu.WebApi ...@@ -67,7 +69,9 @@ namespace Edu.WebApi
app.UseCors("AllowCors"); app.UseCors("AllowCors");
app.UseAuthorization(); app.UseAuthorization();
//启动信息发送
// Task.Run(() => MessageCore.Init());
Task.Run(() => MessageCore.Init());
app.UseEndpoints(endpoints => app.UseEndpoints(endpoints =>
{ {
endpoints.MapControllers(); endpoints.MapControllers();
......
{ {
"ConnectionStrings": { "ConnectionStrings": {
"DefaultConnection": "server=192.168.1.214;user id=reborn;password=Reborn@2018;database=reborn_edu;CharSet=utf8mb4; Convert Zero Datetime=true; ", "DefaultConnection": "server=192.168.1.214;user id=reborn;password=Reborn@2018;database=reborn_edu;CharSet=utf8mb4; Convert Zero Datetime=true; ",
"DefaultConnectionPName": "MySql.Data.MySqlClient" "DefaultConnectionPName": "MySql.Data.MySqlClient"
}, },
"Logging": { "Logging": {
"LogLevel": { "LogLevel": {
"Default": "Information", "Default": "Information",
"Microsoft": "Warning", "Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information" "Microsoft.Hosting.Lifetime": "Information"
} }
}, },
"JwtSecretKey": "@VIITTOREBORN*2018", "JwtSecretKey": "@VIITTOREBORN*2018",
"JwtExpirTime": 2592000, "JwtExpirTime": 2592000,
"AllowedHosts": "*", "IsSendMsg": 1,
"OpenValidation": "False", "AllowedHosts": "*",
"UploadSiteUrl": "http://192.168.1.214:8120", "OpenValidation": "False",
"ViewFileSiteUrl": "https://viitto-1301420277.cos.ap-chengdu.myqcloud.com", "UploadSiteUrl": "http://192.168.1.214:8120",
"Mongo": "mongodb://47.96.25.130:27017", "ViewFileSiteUrl": "https://viitto-1301420277.cos.ap-chengdu.myqcloud.com",
"MongoDBName": "Edu", "Mongo": "mongodb://47.96.25.130:27017",
"RabbitMqConfig": { "MongoDBName": "Edu",
"HostName": "47.96.25.130", "RabbitMqConfig": {
"VirtualHost": "/", "HostName": "47.96.25.130",
"Port": 5672, "VirtualHost": "/",
"UserName": "guest", "Port": 5672,
"Password": "viitto2019" "UserName": "guest",
}, "Password": "viitto2019"
"RedisSetting": { },
"RedisServer": "47.96.23.199", "RedisSetting": {
"RedisPort": "6379", "RedisServer": "47.96.23.199",
"RedisPwd": "Viitto2018" "RedisPort": "6379",
}, "RedisPwd": "Viitto2018"
"VirtualDirectory": "WebFile", },
//Ƿϻ "VirtualDirectory": "WebFile",
"IsOnline": false //Ƿϻ
"IsOnline": false
} }
\ No newline at end of file
...@@ -37,7 +37,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Edu.Module.User", "Edu.Modu ...@@ -37,7 +37,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Edu.Module.User", "Edu.Modu
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Edu.Module.Public", "Edu.Module.Public\Edu.Module.Public.csproj", "{8E34CE2D-AAF3-481C-A5E3-5AECC8F7F1B5}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Edu.Module.Public", "Edu.Module.Public\Edu.Module.Public.csproj", "{8E34CE2D-AAF3-481C-A5E3-5AECC8F7F1B5}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Edu.Module.Log", "Edu.Module.Log\Edu.Module.Log.csproj", "{809E4C87-97F6-4DCB-9232-9C70ECEF2655}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Edu.Module.Log", "Edu.Module.Log\Edu.Module.Log.csproj", "{809E4C87-97F6-4DCB-9232-9C70ECEF2655}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Edu.ThirdCore", "Edu.ThirdCore\Edu.ThirdCore.csproj", "{5F76907A-7181-4FC5-B224-52CDD5B90359}"
EndProject EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
...@@ -93,6 +95,10 @@ Global ...@@ -93,6 +95,10 @@ Global
{809E4C87-97F6-4DCB-9232-9C70ECEF2655}.Debug|Any CPU.Build.0 = Debug|Any CPU {809E4C87-97F6-4DCB-9232-9C70ECEF2655}.Debug|Any CPU.Build.0 = Debug|Any CPU
{809E4C87-97F6-4DCB-9232-9C70ECEF2655}.Release|Any CPU.ActiveCfg = Release|Any CPU {809E4C87-97F6-4DCB-9232-9C70ECEF2655}.Release|Any CPU.ActiveCfg = Release|Any CPU
{809E4C87-97F6-4DCB-9232-9C70ECEF2655}.Release|Any CPU.Build.0 = Release|Any CPU {809E4C87-97F6-4DCB-9232-9C70ECEF2655}.Release|Any CPU.Build.0 = Release|Any CPU
{5F76907A-7181-4FC5-B224-52CDD5B90359}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5F76907A-7181-4FC5-B224-52CDD5B90359}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5F76907A-7181-4FC5-B224-52CDD5B90359}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5F76907A-7181-4FC5-B224-52CDD5B90359}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE
...@@ -109,6 +115,7 @@ Global ...@@ -109,6 +115,7 @@ Global
{AD259CCC-048A-4F65-A368-91B8B4A9F200} = {7AC0A4EC-3215-4FF2-96DC-DE8325ED6915} {AD259CCC-048A-4F65-A368-91B8B4A9F200} = {7AC0A4EC-3215-4FF2-96DC-DE8325ED6915}
{8E34CE2D-AAF3-481C-A5E3-5AECC8F7F1B5} = {7AC0A4EC-3215-4FF2-96DC-DE8325ED6915} {8E34CE2D-AAF3-481C-A5E3-5AECC8F7F1B5} = {7AC0A4EC-3215-4FF2-96DC-DE8325ED6915}
{809E4C87-97F6-4DCB-9232-9C70ECEF2655} = {7AC0A4EC-3215-4FF2-96DC-DE8325ED6915} {809E4C87-97F6-4DCB-9232-9C70ECEF2655} = {7AC0A4EC-3215-4FF2-96DC-DE8325ED6915}
{5F76907A-7181-4FC5-B224-52CDD5B90359} = {52C9E4CB-A475-4232-95A3-4508B6592AC7}
EndGlobalSection EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {8763B446-FAB1-46BF-9743-F2628533241B} SolutionGuid = {8763B446-FAB1-46BF-9743-F2628533241B}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment