564 lines
32 KiB
C#
564 lines
32 KiB
C#
using APT.BaseData.Domain.Entities.FM;
|
|
using APT.Infrastructure.Core;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using APT.Infrastructure.Api;
|
|
using System.Collections.Generic;
|
|
using System.Linq.Expressions;
|
|
using System;
|
|
using System.Linq;
|
|
using APT.BaseData.Domain.ApiModel;
|
|
using Ubiety.Dns.Core;
|
|
using System.Security.AccessControl;
|
|
using APT.MS.Domain.Entities.FO;
|
|
using APT.BaseData.Domain.Entities;
|
|
using APT.MS.Domain.Enums;
|
|
using APT.MS.Domain.Entities.BI;
|
|
using static APT.MS.Domain.Enums.BI.BIEnums;
|
|
using NPOI.SS.Formula.Functions;
|
|
using APT.PP.WebApi.Controllers.Api.PP;
|
|
using APT.Utility;
|
|
using Google.Protobuf.WellKnownTypes;
|
|
using APT.WebApi.Models;
|
|
|
|
namespace APT.SC.WebApi.Controllers.Api.BI
|
|
{
|
|
/// <summary>
|
|
/// 年度监测汇总
|
|
/// </summary>
|
|
[Route("api/PP/BIController")]
|
|
[TypeFilter(typeof(CustomActionFilterAttribute))]
|
|
public class BIController : AuthorizeApiController<T_FM_BASE_CONFIG>
|
|
{
|
|
/// <summary>
|
|
/// 提取安全任务完成分析数据
|
|
/// </summary>
|
|
/// <param name="pageFilter">更新超时时间</param>
|
|
/// <returns></returns>
|
|
[HttpPost, Route("updateSafeTaskData")]
|
|
public JsonActionResult<bool> updateSafeTaskData([FromBody] KeywordFilter filter)
|
|
{
|
|
return SafeExecute<bool>(() =>
|
|
{
|
|
try
|
|
{
|
|
var param = GetEntity<T_FM_SYNC_TASK>(t => t.CODE == "BI001");
|
|
param.SYNC_PARAM = DateTime.Now.AddMonths(-3).ToShortDateString();
|
|
UpdateEntity(param);
|
|
BaseFilter basefilter1 = new BaseFilter(filter.GetOrgId());
|
|
basefilter1.SelectField = new string[] { "ID" };
|
|
BaseFilter basefilter2 = new BaseFilter(filter.GetOrgId());
|
|
basefilter2.SelectField = new string[] { "SOURCE_DATA_ID" };
|
|
var allnoticeTask = GetEntities<T_FM_NOTIFICATION_TASK>(t => t.NOTICE_STATUS == 2 && t.CREATE_TIME > DateTime.Parse(param.SYNC_PARAM), basefilter2);
|
|
List<T_FO_PRE_SHIFT_MEETING_RECORD> fo01s = new List<T_FO_PRE_SHIFT_MEETING_RECORD>();
|
|
List<T_FO_CURRENT_CLASS_RECORD> fo02s = new List<T_FO_CURRENT_CLASS_RECORD>();
|
|
List<T_FO_CHANGE_SHIFT_RECORD> fo03s = new List<T_FO_CHANGE_SHIFT_RECORD>();
|
|
List<T_FO_TEAM_ACTIVITY> fo04s = new List<T_FO_TEAM_ACTIVITY>();
|
|
|
|
var fo01 = GetEntities<T_FO_PRE_SHIFT_MEETING_RECORD>(t => t.PRE_MEETING_STATUS == FOPreMeetingStatusEnum.归档 && t.OVERTIME == FOISOVERTIME.未统计, basefilter1);
|
|
foreach (var item in fo01)
|
|
{
|
|
var isOver = allnoticeTask.Where(t => t.SOURCE_DATA_ID == item.ID);
|
|
if (isOver.Any())
|
|
{
|
|
item.OVERTIME = FOISOVERTIME.超时;
|
|
}
|
|
else
|
|
{
|
|
item.OVERTIME = FOISOVERTIME.未超时;
|
|
}
|
|
fo01s.Add(item);
|
|
}
|
|
BantchUpdateEntity(fo01s, "OVERTIME");
|
|
var fo02 = GetEntities<T_FO_CURRENT_CLASS_RECORD>(t => t.SHIFT_STATUS == (int)FOShiftStatusEnum.归档 && t.OVERTIME == FOISOVERTIME.未统计, basefilter1);
|
|
foreach (var item in fo02)
|
|
{
|
|
var isOver = allnoticeTask.Where(t => t.SOURCE_DATA_ID == item.ID);
|
|
if (isOver.Any())
|
|
{
|
|
item.OVERTIME = FOISOVERTIME.超时;
|
|
}
|
|
else
|
|
{
|
|
item.OVERTIME = FOISOVERTIME.未超时;
|
|
}
|
|
fo02s.Add(item);
|
|
}
|
|
BantchUpdateEntity(fo02s, "OVERTIME");
|
|
var fo03 = GetEntities<T_FO_CHANGE_SHIFT_RECORD>(t => t.SHIFT_STATUS == (int)FOChangeShiftStatusEnum.归档 && t.OVERTIME == FOISOVERTIME.未统计, basefilter1);
|
|
foreach (var item in fo03)
|
|
{
|
|
var isOver = allnoticeTask.Where(t => t.SOURCE_DATA_ID == item.ID);
|
|
if (isOver.Any())
|
|
{
|
|
item.OVERTIME = FOISOVERTIME.超时;
|
|
}
|
|
else
|
|
{
|
|
item.OVERTIME = FOISOVERTIME.未超时;
|
|
}
|
|
fo03s.Add(item);
|
|
}
|
|
BantchUpdateEntity(fo03s, "OVERTIME");
|
|
var fo04 = GetEntities<T_FO_TEAM_ACTIVITY>(t => t.TA_STATUS == (int)FOTeamActivityState.已归档 && t.OVERTIME == FOISOVERTIME.未统计, basefilter1);
|
|
foreach (var item in fo04)
|
|
{
|
|
var isOver = allnoticeTask.Where(t => t.SOURCE_DATA_ID == item.ID);
|
|
if (isOver.Any())
|
|
{
|
|
item.OVERTIME = FOISOVERTIME.超时;
|
|
}
|
|
else
|
|
{
|
|
item.OVERTIME = FOISOVERTIME.未超时;
|
|
}
|
|
fo04s.Add(item);
|
|
}
|
|
BantchUpdateEntity(fo04s, "OVERTIME");
|
|
|
|
DeleteEntity<T_BI_SAFETASK_FINISH>(t => true);
|
|
BaseFilter baseFilter = new BaseFilter(filter.GetOrgId());
|
|
baseFilter.Include = new string[] { "Nav_Department.Nav_Parent.Nav_Parent", "Nav_ChargePerson" };
|
|
var allTeams = GetEntities<T_FM_TEAM>(t => t.IS_DELETED == false && t.ENABLE_STATUS == 0 && t.CHARGE_PERSON_ID != null, baseFilter);
|
|
List<T_BI_SAFETASK_FINISH> biSafeFinishs = new List<T_BI_SAFETASK_FINISH>();
|
|
var selectFilter = new BaseFilter(filter.GetOrgId());
|
|
foreach (var team in allTeams)
|
|
{
|
|
var filterTime = new DateTime[] { DateTime.Now.AddDays(-7), DateTime.Now.AddMonths(-1), DateTime.Now.AddMonths(-3), DateTime.Now.AddMonths(-6), DateTime.Now.AddMonths(-12), DateTime.Now.AddYears(-10) };
|
|
for (int i = 0; i < filterTime.Length; i++)
|
|
{
|
|
var biSafeFinish = new T_BI_SAFETASK_FINISH();
|
|
biSafeFinish.ORG_ID = filter.GetOrgId();
|
|
biSafeFinish.TEAM_ID = team.ID;
|
|
biSafeFinish.TEAM_NAME = team.NAME;
|
|
biSafeFinish.TEAM_CHARGE_USER = team.Nav_ChargePerson.NAME;
|
|
biSafeFinish.DEPARTMENT_NAME = team.Nav_Department.Nav_Parent.Nav_Parent.NAME;
|
|
selectFilter.SelectField = new string[] { "ID", "PRE_MEETING_STATUS", "OVERTIME" };
|
|
var fo01a = GetEntities<T_FO_PRE_SHIFT_MEETING_RECORD>(t => t.TEAM_ID == team.ID && t.MEETING_TIME > filterTime[i], selectFilter);
|
|
biSafeFinish.FO01_TOTAL = fo01a.Count();
|
|
biSafeFinish.FO01_FINISH = fo01a.Count(t => t.PRE_MEETING_STATUS == FOPreMeetingStatusEnum.归档 && t.OVERTIME != FOISOVERTIME.超时);
|
|
biSafeFinish.FO01_UNFINISH = fo01a.Count(t => t.PRE_MEETING_STATUS < FOPreMeetingStatusEnum.归档);
|
|
biSafeFinish.FO01_OVERTIME = fo01a.Count(t => t.OVERTIME == FOISOVERTIME.超时);
|
|
selectFilter.SelectField = new string[] { "ID", "SHIFT_STATUS", "OVERTIME" };
|
|
var fo02a = GetEntities<T_FO_CURRENT_CLASS_RECORD>(t => t.CLASS_TEAM_ID == team.ID && t.RECORD_DATE > filterTime[i], selectFilter);
|
|
biSafeFinish.FO02_TOTAL = fo02a.Count();
|
|
biSafeFinish.FO02_FINISH = fo02a.Count(t => t.SHIFT_STATUS == (int)FOShiftStatusEnum.归档 && t.OVERTIME != FOISOVERTIME.超时);
|
|
biSafeFinish.FO02_UNFINISH = fo02a.Count(t => t.SHIFT_STATUS < (int)FOShiftStatusEnum.归档);
|
|
biSafeFinish.FO02_OVERTIME = fo02a.Count(t => t.OVERTIME == FOISOVERTIME.超时);
|
|
selectFilter.SelectField = new string[] { "ID", "SHIFT_STATUS", "OVERTIME" };
|
|
var fo03a = GetEntities<T_FO_CHANGE_SHIFT_RECORD>(t => t.TEAM_ID == team.ID && t.CHANGE_SHIFT_TIME > filterTime[i], selectFilter);
|
|
biSafeFinish.FO03_TOTAL = fo03a.Count();
|
|
biSafeFinish.FO03_FINISH = fo03a.Count(t => t.SHIFT_STATUS == (int)FOChangeShiftStatusEnum.归档 && t.OVERTIME != FOISOVERTIME.超时);
|
|
biSafeFinish.FO03_UNFINISH = fo03a.Count(t => t.SHIFT_STATUS < (int)FOChangeShiftStatusEnum.归档);
|
|
biSafeFinish.FO03_OVERTIME = fo03a.Count(t => t.OVERTIME == FOISOVERTIME.超时);
|
|
selectFilter.SelectField = new string[] { "ID", "TA_STATUS", "OVERTIME" };
|
|
var fo04a = GetEntities<T_FO_TEAM_ACTIVITY>(t => t.TEAM_ID == team.ID && t.ACTIVITY_TIME > filterTime[i], selectFilter);
|
|
biSafeFinish.FO04_TOTAL = fo04a.Count();
|
|
biSafeFinish.FO04_FINISH = fo04a.Count(t => t.TA_STATUS == (int)FOTeamActivityState.已归档 && t.OVERTIME != FOISOVERTIME.超时);
|
|
biSafeFinish.FO04_UNFINISH = fo04a.Count(t => t.TA_STATUS < (int)FOTeamActivityState.已归档);
|
|
biSafeFinish.FO04_OVERTIME = fo04a.Count(t => t.OVERTIME == FOISOVERTIME.超时);
|
|
biSafeFinish.ENDTIME = DateTime.Now;
|
|
biSafeFinish.STARTTIME = filterTime[i];
|
|
if (i == 0)
|
|
{
|
|
biSafeFinish.FILTER_TIME = FilterTimeType.LastWeek;
|
|
}
|
|
else if (i == 1)
|
|
{
|
|
biSafeFinish.FILTER_TIME = FilterTimeType.LastMonth;
|
|
}
|
|
else if (i == 2)
|
|
{
|
|
biSafeFinish.FILTER_TIME = FilterTimeType.LastThreeMonth;
|
|
}
|
|
else if (i == 3)
|
|
{
|
|
biSafeFinish.FILTER_TIME = FilterTimeType.LastHalfYear;
|
|
}
|
|
else if (i == 4)
|
|
{
|
|
biSafeFinish.FILTER_TIME = FilterTimeType.LastYear;
|
|
}
|
|
else if (i == 5)
|
|
{
|
|
biSafeFinish.FILTER_TIME = 0;
|
|
}
|
|
biSafeFinishs.Add(biSafeFinish);
|
|
}
|
|
}
|
|
UnifiedCommit(() =>
|
|
{
|
|
if (biSafeFinishs.Any())
|
|
BantchAddEntityNoCommit(biSafeFinishs);
|
|
});
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
if (!string.IsNullOrEmpty(ex.StackTrace))
|
|
throw new Exception("错误日志:[StackTrace]" + ex.StackTrace);
|
|
else
|
|
throw new Exception("【" + HttpContext.Request.Path + "】错误日志:[Message]" + ex.Message);
|
|
}
|
|
return true;
|
|
});
|
|
}
|
|
/// <summary>
|
|
/// 用户登录统计分析
|
|
/// </summary>
|
|
/// <param name="pageFilter">用户登录统计分析</param>
|
|
/// <returns></returns>
|
|
[HttpPost, Route("updateUserLogin")]
|
|
public JsonActionResult<bool> updateUserLogin([FromBody] KeywordFilter filter)
|
|
{
|
|
return SafeExecute<bool>(() =>
|
|
{
|
|
try
|
|
{
|
|
var dtnow = DateTime.Now;
|
|
if (filter.Parameter1 != null)
|
|
{
|
|
dtnow = DateTime.Parse(filter.Parameter1);
|
|
}
|
|
//dtnow = dtnow.AddDays(-10);
|
|
//for (int i = 0; i < 11; i++)
|
|
//{
|
|
//var dtnow1 = dtnow.AddDays(i);
|
|
DateTime maxDate = dtnow.Date;
|
|
DateTime minDate = dtnow.AddDays(-3).Date;
|
|
|
|
var allLoginRecord = GetEntities<T_BI_LOGIN_RECORD>(t => t.CREATE_TIME > minDate && t.CREATE_TIME < maxDate, new BaseFilter(filter.GetOrgId())).Select(t => new { t.USER_ID, ((DateTime)t.CREATE_TIME).Date });
|
|
var alldistinctUser = allLoginRecord.Select(t => t.USER_ID).Distinct();
|
|
int count = 0;
|
|
foreach (var user in alldistinctUser)
|
|
{
|
|
var d1 = allLoginRecord.Where(t => t.USER_ID == user && t.Date == maxDate.Date.AddDays(-1));
|
|
var d2 = allLoginRecord.Where(t => t.USER_ID == user && t.Date == maxDate.Date.AddDays(-2));
|
|
var d3 = allLoginRecord.Where(t => t.USER_ID == user && t.Date == maxDate.Date.AddDays(-3));
|
|
if (d1.Any() && d2.Any() && d3.Any())
|
|
{
|
|
count++;
|
|
}
|
|
}
|
|
|
|
T_BI_ACTIVE_USER_RECORD activeUserCount = new T_BI_ACTIVE_USER_RECORD
|
|
{
|
|
COUNT = count,
|
|
DATE = maxDate.AddDays(-1),
|
|
ORG_ID = filter.GetOrgId(),
|
|
type = 0
|
|
};
|
|
T_BI_ACTIVE_USER_RECORD LoginUserCount = new T_BI_ACTIVE_USER_RECORD
|
|
{
|
|
COUNT = allLoginRecord.Where(t => t.Date == maxDate.AddDays(-1)).Distinct(t => t.USER_ID).Count(),
|
|
DATE = maxDate.AddDays(-1),
|
|
ORG_ID = filter.GetOrgId(),
|
|
type = 1
|
|
};
|
|
UnifiedCommit(() =>
|
|
{
|
|
DeleteEntityNoCommit<T_BI_ACTIVE_USER_RECORD>(t => t.DATE == maxDate.AddDays(-1));
|
|
AddEntityNoCommit(activeUserCount);
|
|
AddEntityNoCommit(LoginUserCount);
|
|
});
|
|
//}
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
if (!string.IsNullOrEmpty(ex.StackTrace))
|
|
throw new Exception("错误日志:[StackTrace]" + ex.StackTrace);
|
|
else
|
|
throw new Exception("【" + HttpContext.Request.Path + "】错误日志:[Message]" + ex.Message);
|
|
}
|
|
|
|
return true;
|
|
});
|
|
}
|
|
|
|
/// <summary>
|
|
/// 定期短信发送
|
|
/// </summary>
|
|
/// <param name="pageFilter">定期短信发送</param>
|
|
/// <returns></returns>
|
|
[HttpPost, Route("regularSendSMS")]
|
|
public JsonActionResult<bool> regularSendSMS([FromBody] KeywordFilter filter)
|
|
{
|
|
return SafeExecute<bool>(() =>
|
|
{
|
|
try
|
|
{
|
|
DateTime now = DateTime.Now;
|
|
var allUsers = GetEntities<T_FM_USER>(t => t.ENABLE_STATUS == 0, new BaseFilter(filter.GetOrgId()));
|
|
var approveUsers = GetEntities<T_FM_USER>(t => t.ENABLE_STATUS == 0 && t.Nav_Department.DEPARTMENT_TYPE != 2, new BaseFilter(filter.GetOrgId()));//FMDepartmentType 部门=0, 车间=1, 班组=2, 公司=3
|
|
var userIds = approveUsers.Select(t => t.ID);
|
|
List<T_FM_NOTIFICATION_TASK> sendSMSs = null;
|
|
List<Guid> listTaskIDDone = new List<Guid>();
|
|
TencentSendSMS tencentSendSMS = new TencentSendSMS();
|
|
if (now.Hour >= 7 && now.Hour < 23)//早上 7点到晚上23点做提醒 其余时间不提醒
|
|
{
|
|
sendSMSs = GetEntities<T_FM_NOTIFICATION_TASK>(t => t.NOTICE_STATUS == 0 && !t.ISCANCEL && !t.IS_DELETED && t.CREATE_TIME > now.AddDays(-6) && !t.SOURCE_FORMCODE.Contains("FO005") && t.SENDTIME == DateTime.MinValue, new BaseFilter(filter.GetOrgId())).ToList();
|
|
var sendSMSs2 = sendSMSs.Where(t => t.TASK_ENDDT < now.AddHours(1) && t.TASK_ENDDT > t.TASK_STARTDT);//临超期待办提醒所有人
|
|
foreach (var send in sendSMSs2)
|
|
{
|
|
List<string> phoneNumbers = new List<string>();
|
|
List<string> templates = new List<string>();
|
|
var user = allUsers.FirstOrDefault(t => t.ID == send.USER_ID);
|
|
if (user != null && user.PHONE != null && !string.IsNullOrEmpty(user.PHONE))
|
|
{
|
|
listTaskIDDone.Add(send.ID);
|
|
send.SENDTIME = DateTime.Now;
|
|
phoneNumbers.Add(user.PHONE);
|
|
templates.Add(send.NOTICE_TITLE);
|
|
templates.Add(send.TASK_ENDDT.ToString());
|
|
var result = tencentSendSMS.sendSMS("1747259", phoneNumbers.ToArray(), templates.ToArray());
|
|
if (result.SendStatusSet[0].Code.Equals("Ok"))
|
|
{
|
|
UnifiedCommit(() =>
|
|
{
|
|
UpdateEntityNoCommit(send);
|
|
});
|
|
}
|
|
}
|
|
}
|
|
//&& t.NOTICE_TITLE.Contains("审批")
|
|
var sendSMSs1 = sendSMSs.Where(t => userIds.Contains(t.USER_ID) && t.CREATE_TIME > now.AddHours(-8));//8小时前创建的 非班组级成员 未办都做提醒
|
|
foreach (var send in sendSMSs1)
|
|
{
|
|
if (listTaskIDDone.Contains(send.ID))//避免同事发送2条短信
|
|
{
|
|
continue;
|
|
}
|
|
List<string> phoneNumbers = new List<string>();
|
|
List<string> templates = new List<string>();
|
|
var user = approveUsers.FirstOrDefault(t => t.ID == send.USER_ID);
|
|
if (user != null && user.PHONE != null && !string.IsNullOrEmpty(user.PHONE))
|
|
{
|
|
send.SENDTIME = DateTime.Now;
|
|
phoneNumbers.Add(user.PHONE);
|
|
templates.Add(send.NOTICE_TITLE);
|
|
templates.Add(send.TASK_ENDDT.ToString());
|
|
//TencentSendSMS tencentSendSMS = new TencentSendSMS();
|
|
var result = tencentSendSMS.sendSMS("1747261", phoneNumbers.ToArray(), templates.ToArray());
|
|
if (result.SendStatusSet[0].Code.Equals("Ok"))
|
|
{
|
|
UnifiedCommit(() =>
|
|
{
|
|
UpdateEntityNoCommit(send);
|
|
});
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
if (!string.IsNullOrEmpty(ex.StackTrace))
|
|
throw new Exception("错误日志:[StackTrace]" + ex.StackTrace);
|
|
else
|
|
throw new Exception("【" + HttpContext.Request.Path + "】错误日志:[Message]" + ex.Message);
|
|
}
|
|
|
|
return true;
|
|
});
|
|
}
|
|
|
|
/// <summary>
|
|
/// 定期短信发送
|
|
/// </summary>
|
|
/// <param name="pageFilter">定期短信发送</param>
|
|
/// <returns></returns>
|
|
[HttpPost, Route("regularSendSMSDCJD")]
|
|
public JsonActionResult<bool> regularSendSMSDCJD([FromBody] KeywordFilter filter)
|
|
{
|
|
return SafeExecute<bool>(() =>
|
|
{
|
|
|
|
try
|
|
{
|
|
|
|
DateTime now = DateTime.Now;
|
|
BaseFilter userfilter = new BaseFilter(filter.GetOrgId());
|
|
userfilter.SelectField = new string[] { "PHONE" };
|
|
var allUsers = GetEntities<T_FM_USER>(t => t.ENABLE_STATUS == 0, userfilter);
|
|
var approveUsers = GetEntities<T_FM_USER>(t => t.Nav_Department.DEPARTMENT_TYPE != 2 && t.ENABLE_STATUS == 0, new BaseFilter(filter.GetOrgId()));
|
|
var userIds = approveUsers.Select(t => t.ID);
|
|
List<T_FM_NOTIFICATION_TASK> sendSMSs = null;
|
|
if (now.Hour >= 7 && now.Hour < 23)
|
|
{
|
|
sendSMSs = GetEntities<T_FM_NOTIFICATION_TASK>(t => t.NOTICE_STATUS == 0 && t.CREATE_TIME > now.AddDays(-6) && !t.SOURCE_FORMCODE.Contains("FO005") && t.SENDTIME == DateTime.MinValue, new BaseFilter(filter.GetOrgId())).ToList();
|
|
var sendSMSs2 = sendSMSs.Where(t => t.TASK_ENDDT < now.AddHours(1) && t.TASK_ENDDT > t.TASK_STARTDT);
|
|
foreach (var send in sendSMSs2)
|
|
{
|
|
List<string> phoneNumbers = new List<string>();
|
|
List<string> templates = new List<string>();
|
|
var user = allUsers.FirstOrDefault(t => t.ID == send.USER_ID);
|
|
if (user != null && user.PHONE != null && !string.IsNullOrEmpty(user.PHONE))
|
|
{
|
|
send.SENDTIME = DateTime.Now;
|
|
phoneNumbers.Add(user.PHONE);
|
|
string paddedStr = send.NOTICE_TITLE.Length < 18 ? send.NOTICE_TITLE.PadRight(18) : send.NOTICE_TITLE.Substring(0, 18);
|
|
var length = paddedStr.Length;
|
|
templates.Add(paddedStr.Substring(0, 6));
|
|
templates.Add(paddedStr.Substring(6, 6));
|
|
templates.Add(paddedStr.Substring(12, 5));
|
|
templates[1] = templates[1].Trim();
|
|
templates[2] = templates[2].Trim();
|
|
templates.Add(send.TASK_ENDDT.Year.ToString());
|
|
templates.Add(send.TASK_ENDDT.Month.ToString("00"));
|
|
templates.Add(send.TASK_ENDDT.Day.ToString("00"));
|
|
templates.Add(send.TASK_ENDDT.Hour.ToString("00"));
|
|
templates.Add(send.TASK_ENDDT.Minute.ToString("00"));
|
|
templates.Add(send.TASK_ENDDT.Second.ToString("00"));
|
|
|
|
TencentSendSMS tencentSendSMS = new TencentSendSMS();
|
|
var result = tencentSendSMS.sendSMSDCJD("2163511", phoneNumbers.ToArray(), templates.ToArray());
|
|
if (result.SendStatusSet[0].Code.Equals("Ok"))
|
|
{
|
|
UnifiedCommit(() =>
|
|
{
|
|
UpdateEntityNoCommit(send);
|
|
});
|
|
}
|
|
}
|
|
}
|
|
//&& t.NOTICE_TITLE.Contains("审批")
|
|
var sendSMSs1 = sendSMSs.Where(t => userIds.Contains(t.USER_ID) && t.CREATE_TIME > now.AddHours(-8));
|
|
foreach (var send in sendSMSs1)
|
|
{
|
|
List<string> phoneNumbers = new List<string>();
|
|
List<string> templates = new List<string>();
|
|
var user = approveUsers.FirstOrDefault(t => t.ID == send.USER_ID);
|
|
if (user != null && user.PHONE != null && !string.IsNullOrEmpty(user.PHONE))
|
|
{
|
|
send.SENDTIME = DateTime.Now;
|
|
phoneNumbers.Add(user.PHONE);
|
|
string paddedStr = send.NOTICE_TITLE.Length < 18 ? send.NOTICE_TITLE.PadRight(18) : send.NOTICE_TITLE.Substring(0, 18);
|
|
templates.Add(paddedStr.Substring(0, 6));
|
|
templates.Add(paddedStr.Substring(6, 6));
|
|
templates.Add(paddedStr.Substring(12, 5));
|
|
templates[1] = templates[1].Trim();
|
|
templates[2] = templates[2].Trim();
|
|
templates.Add(send.TASK_ENDDT.Year.ToString());
|
|
templates.Add(send.TASK_ENDDT.Month.ToString("00"));
|
|
templates.Add(send.TASK_ENDDT.Day.ToString("00"));
|
|
templates.Add(send.TASK_ENDDT.Hour.ToString("00"));
|
|
templates.Add(send.TASK_ENDDT.Minute.ToString("00"));
|
|
templates.Add(send.TASK_ENDDT.Second.ToString("00"));
|
|
TencentSendSMS tencentSendSMS = new TencentSendSMS();
|
|
var result = tencentSendSMS.sendSMSDCJD("2163620", phoneNumbers.ToArray(), templates.ToArray());
|
|
if (result.SendStatusSet[0].Code.Equals("Ok"))
|
|
{
|
|
UnifiedCommit(() =>
|
|
{
|
|
UpdateEntityNoCommit(send);
|
|
});
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
if (!string.IsNullOrEmpty(ex.StackTrace))
|
|
throw new Exception("错误日志:[StackTrace]" + ex.StackTrace);
|
|
else
|
|
throw new Exception("【" + HttpContext.Request.Path + "】错误日志:[Message]" + ex.Message);
|
|
}
|
|
|
|
return true;
|
|
});
|
|
}
|
|
public static AlibabaCloud.SDK.Dysmsapi20170525.Client CreateClient(string accessKeyId, string accessKeySecret)
|
|
{
|
|
AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config();
|
|
config.AccessKeyId = accessKeyId;
|
|
config.AccessKeySecret = accessKeySecret;
|
|
return new AlibabaCloud.SDK.Dysmsapi20170525.Client(config);
|
|
}
|
|
/// <summary>
|
|
/// 定期短信发送
|
|
/// </summary>
|
|
/// <param name="filter">定期短信发送</param>
|
|
/// <returns></returns>
|
|
[HttpPost, Route("regularSendSMSLYYL")]
|
|
public JsonActionResult<bool> regularSendSMSLYYL([FromBody] KeywordFilter filter)
|
|
{
|
|
return SafeExecute<bool>(() =>
|
|
{
|
|
try
|
|
{
|
|
AlibabaCloud.SDK.Dysmsapi20170525.Client client = CreateClient("LTAI5tAfy6VEGWSSAf73LqP2", "RrWf2l0ZnSe0JsMDPHx9r1ouQNPGYm");
|
|
DateTime now = DateTime.Now;
|
|
BaseFilter userfilter = new BaseFilter(filter.GetOrgId());
|
|
userfilter.SelectField = new string[] { "PHONE" };
|
|
var allUsers = GetEntities<T_FM_USER>(t => t.ENABLE_STATUS == 0, userfilter);
|
|
var approveUsers = GetEntities<T_FM_USER>(t => t.Nav_Department.DEPARTMENT_TYPE != 2 && t.ENABLE_STATUS == 0, new BaseFilter(filter.GetOrgId()));
|
|
var userIds = approveUsers.Select(t => t.ID);
|
|
List<T_FM_NOTIFICATION_TASK> sendSMSs = null;
|
|
if (now.Hour >= 7 && now.Hour < 23)
|
|
{
|
|
sendSMSs = GetEntities<T_FM_NOTIFICATION_TASK>(t => t.NOTICE_STATUS == 0 && t.CREATE_TIME > now.AddDays(-6) && !t.SOURCE_FORMCODE.Contains("FO005") && t.SENDTIME == DateTime.MinValue, new BaseFilter(filter.GetOrgId())).ToList();
|
|
var sendSMSs2 = sendSMSs.Where(t => t.TASK_ENDDT < now.AddHours(1) && t.TASK_ENDDT > t.TASK_STARTDT);
|
|
foreach (var send in sendSMSs2)
|
|
{
|
|
List<string> phoneNumbers = new List<string>();
|
|
List<string> templates = new List<string>();
|
|
var user = allUsers.FirstOrDefault(t => t.ID == send.USER_ID);
|
|
if (user != null && user.PHONE != null)
|
|
{
|
|
AlibabaCloud.SDK.Dysmsapi20170525.Models.SendSmsRequest sendReq = new AlibabaCloud.SDK.Dysmsapi20170525.Models.SendSmsRequest { };
|
|
sendReq.PhoneNumbers = user.PHONE;
|
|
sendReq.SignName = "厦门鸣鹤";// "小鸣学习";
|
|
sendReq.TemplateCode = "SMS_485890176";// "SMS_472015260";
|
|
//sendReq.TemplateParam = "{'name':'" + send.NOTICE_TITLE + "','time':'" + send.TASK_ENDDT + "'}";
|
|
sendReq.TemplateParam = "{'state':'临超期','name':'" + send.NOTICE_TITLE + "','time':'" + send.TASK_ENDDT + "'}";
|
|
|
|
AlibabaCloud.SDK.Dysmsapi20170525.Models.SendSmsResponse sendResp = client.SendSms(sendReq);
|
|
string code = sendResp.Body.Code;
|
|
if (AlibabaCloud.TeaUtil.Common.EqualString(code, "OK"))
|
|
{
|
|
send.SENDTIME = DateTime.Now;
|
|
UpdateEntity(send);
|
|
}
|
|
}
|
|
}
|
|
var sendSMSs1 = sendSMSs.Where(t => userIds.Contains(t.USER_ID) && t.CREATE_TIME > now.AddHours(-8));
|
|
foreach (var send in sendSMSs1)
|
|
{
|
|
List<string> phoneNumbers = new List<string>();
|
|
List<string> templates = new List<string>();
|
|
var user = approveUsers.FirstOrDefault(t => t.ID == send.USER_ID);
|
|
if (user != null && user.PHONE != null)
|
|
{
|
|
AlibabaCloud.SDK.Dysmsapi20170525.Models.SendSmsRequest sendReq = new AlibabaCloud.SDK.Dysmsapi20170525.Models.SendSmsRequest { };
|
|
sendReq.PhoneNumbers = user.PHONE;
|
|
sendReq.SignName = "厦门鸣鹤";// "小鸣学习";
|
|
sendReq.TemplateCode = "SMS_485890176";// "SMS_472025278";
|
|
//sendReq.TemplateParam = "{'name':'" + send.NOTICE_TITLE + "','time':'" + send.TASK_ENDDT + "'}";
|
|
sendReq.TemplateParam = "{'state':'新','name':'" + send.NOTICE_TITLE + "','time':'" + send.TASK_ENDDT + "'}";
|
|
AlibabaCloud.SDK.Dysmsapi20170525.Models.SendSmsResponse sendResp = client.SendSms(sendReq);
|
|
string code = sendResp.Body.Code;
|
|
if (AlibabaCloud.TeaUtil.Common.EqualString(code, "OK"))
|
|
{
|
|
send.SENDTIME = DateTime.Now;
|
|
UpdateEntity(send);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
if (!string.IsNullOrEmpty(ex.StackTrace))
|
|
throw new Exception("错误日志:[StackTrace]" + ex.StackTrace);
|
|
else
|
|
throw new Exception("【" + HttpContext.Request.Path + "】错误日志:[Message]" + ex.Message);
|
|
}
|
|
|
|
return true;
|
|
});
|
|
}
|
|
}
|
|
}
|