【世华】【消息通知】通知消息推送企微

master
xiaochanghai 7 months ago
parent 7fd7584f30
commit a48ea71b42
  1. 5
      Tiobon.Core.Api/Tiobon.Core.Model.xml
  2. 5
      Tiobon.Core.Model/View/Ghrh/Ghrh_Resume.Dto.View.cs
  3. 21
      Tiobon.Core.Services/BASE/BaseServices.cs
  4. 2
      Tiobon.Core.Services/Ghrh/Ghrh_InterviewOrderServices.cs
  5. 47
      Tiobon.Core.Services/Ghrh/Ghrh_ResumeServices.cs
  6. 5
      Tiobon.Core/Tiobon.Core.Model.xml

@ -26252,6 +26252,11 @@
已报到转入人事资料类型,Fast,快速入职;Normal,正常入职
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrh_ResumeDto.InterviewStepName">
<summary>
面试环节
</summary>
</member>
<member name="T:Tiobon.Core.Model.Models.Ghrh_ResumeEduBGDto">
<summary>
教育背景(Dto.View1)

@ -242,6 +242,9 @@ public class Ghrh_ResumeDto : Ghrh_Resume
/// </summary>
public string TransferStaffType { get; set; }
/// <summary>
/// 面试环节
/// </summary>
public string InterviewStepName { get; set; }
}

@ -2028,7 +2028,28 @@ ORDER BY SortNo ASC";
}
await SendQYWechateMessage(staffIds, title, content);
}
public async Task SendQYWechateMessage(List<int> staffIds, string title, string content, string webUrl = null)
{
string sql = @$"Declare @Json nvarchar(max) = ''
set @Json = (select '{title}' title,
'textcard' msgtype,
'<div class=\""gray\"">'+CONVERT(nvarchar(16),getdate(),121)+'</div>
<div class=\""normal\""> {content}</div>
<div class=\""highlight\""> </div>' [description] ,
'Re'+(select Top 1 ParameterValue from Ghrs_Parameter where ParameterNo='GHRURL')+'/appOauth.html?jumpPage='+'F_APP_message/msgGroupList' url,
'GHR' picurl,
'' htmlStr,
{string.Join(',', staffIds.Select(x => x))} toStaffIDs
for json path)
-- select @Json
exec [dbo].[PS_CreateWorkwxMsg] @Json,'Resume'";
await Db.Ado.ExecuteCommandAsync(sql);
}
#endregion
#endregion

@ -47,7 +47,7 @@ public class Ghrh_InterviewOrderServices : BaseServices<Ghrh_InterviewOrder, Ghr
data.ForEach(x =>
{
var record = records.Where(o => x.Round == o.Round).FirstOrDefault();
var record = records.Where(o => x.Round == o.Round && o.OrderId == x.Id).FirstOrDefault();
if (record != null)
{

@ -269,6 +269,7 @@ public class Ghrh_ResumeServices : BaseServices<Ghrh_Resume, Ghrh_ResumeDto, Ins
var entitys = await query
.WhereIF(condition.IsNotEmptyOrNull(), condition)
.Where(whereExpression.ToExpression())
.OrderBy(it => new { UpdateTime = SqlFunc.Desc(it.UpdateTime), CreateTime = SqlFunc.Desc(it.CreateTime) })
.ToPageListAsync(filter.pageNum, filter.pageSize, total);
var result = new ServicePageResult<Ghrh_ResumeDto>(filter.pageNum, total, filter.pageSize, Mapper.Map(entitys).ToANew<List<Ghrh_ResumeDto>>());
var list = result.result.DT_TableDataT1;
@ -324,6 +325,7 @@ public class Ghrh_ResumeServices : BaseServices<Ghrh_Resume, Ghrh_ResumeDto, Ins
x.InterviewResult = order.InterviewResult;
x.OptionalInterviewTime = order.OptionalInterviewTime;
x.InterviewTime = order.InterviewTime;
x.InterviewStepName = order.InterviewStepName;
if (x.Status != DIC_INTERVIEW_ORDER_STATUS.WaitRecommended)
{
x.HireDeptName = order.HireDeptName;
@ -1652,12 +1654,19 @@ END";
for (int i = 0; i < form.Times.Count; i++)
{
var time = form.Times[i];
if (time.IsNotEmptyOrNull())
{
var time1 = time.Split('~');
time = DateTimeHelper.ConvertToMiniuteString(time1[0]) + "~" + DateTimeHelper.ConvertToOnlyHourMinuteString(time1[1]);
}
if (i == 0)
records.ForEach(record => record.PlanInterviewTime1 = form.Times[i]);
records.ForEach(record => record.PlanInterviewTime1 = time);
else if (i == 1)
records.ForEach(record => record.PlanInterviewTime2 = form.Times[i]);
records.ForEach(record => record.PlanInterviewTime2 = time);
else if (i == 2)
records.ForEach(record => record.PlanInterviewTime3 = form.Times[i]);
records.ForEach(record => record.PlanInterviewTime3 = time);
}
if (isChangeInterviewTime)
order.WaitInterviewStatus = "HasChangeInterviewTime";
@ -1716,13 +1725,20 @@ END";
record.InterviewAddress = body.InterviewAddress;
});
await _ghrh_InterviewRecordServices.Update(records, ["InterviewTime", "InterviewBeginTime", "InterviewEndTime", "Status"]);
await _ghrh_InterviewOrderServices.Update(order, ["InterviewStepName"]);
await _ghrh_InterviewRecordServices.Update(records, ["InterviewTime", "InterviewBeginTime", "InterviewEndTime", "Status", "UpdateTime", "UpdateBy"]);
await _ghrh_InterviewOrderServices.Update(order, ["InterviewStepName", "UpdateTime", "UpdateBy"]);
await LogRecord(order.Id, $"安排面试,面试时间:{body.Time}");
entity.Status = DIC_INTERVIEW_ORDER_STATUS.WaitInterview;
await Update(entity, ["Status"]);
await Update(entity, ["Status", "UpdateTime", "UpdateBy"]);
for (int i = 0; i < records.Count; i++)
{
await SendMessage([records[i].StaffId.Value], "面试提醒", $"您有个简历待面试,面试时间:{body.Time},请及时查看!", "/M_ESS_Recruit/F_ESS_Candidate");
}
}
return ServiceResult.OprateSuccess();
@ -2067,13 +2083,14 @@ END";
var order = await _ghrh_InterviewOrderServices.QuerySingle(x => x.ResumeId == id);
if (order != null)
{
//var record = await _ghrh_InterviewRecordServices.QuerySingle(x => x.Round == order.Round && x.OrderId == order.Id);
var record = await _ghrh_InterviewRecordServices.QuerySingle(x => x.Round == order.Round && x.OrderId == order.Id);
//if (record.ReceiverIds.IsNotEmptyOrNull())
//{
// var staffs = JsonHelper.JsonToObj<List<ResumeRecommendFormStaff>>(record.ReceiverIds);
// await SendMessage(staffs.Select(x => x.StaffId).ToList(), "简历提醒", "您有个简历【待面试】,请及时查看面试时间!");
//}
await SendMessage([record.StaffId.Value], "简历提醒", "您有个简历【待面试】,请及时查看面试时间!");
await LogRecord(order.Id, "发送待已发offer提醒!");
}
@ -2107,7 +2124,6 @@ END";
order.Status = DIC_INTERVIEW_ORDER_STATUS.HasOffer;
records.ForEach(record => record.Status = DIC_INTERVIEW_ORDER_STATUS.HasOffer);
await SyncToStaff(id);
}
else
@ -2306,7 +2322,8 @@ END";
C.StaffId,
C.CancelReason,
CONVERT
(BIT, CASE B.[Round] WHEN C.[Round] THEN 'true' ELSE 'false' END) AS IsAllowAssess
(BIT, CASE B.[Round] WHEN C.[Round] THEN 'true' ELSE 'false' END) AS IsAllowAssess,
ISNULL(A.UpdateTime, A.CreateTime) CreateTime1
FROM Ghrh_Resume A
JOIN Ghrh_InterviewOrder B ON A.ID = B.ResumeId
JOIN Ghrh_InterviewRecord C
@ -2315,7 +2332,7 @@ FROM Ghrh_Resume A
WHERE A.IsEnable = 1 AND C.IsEnable = 1 AND C.Status = A.Status";
if (string.IsNullOrWhiteSpace(filter.orderBy))
filter.orderBy = "CreateTime ASC";
filter.orderBy = "CreateTime1 ASC";
sql += $" AND C.StaffId={staffId}";
@ -3200,12 +3217,12 @@ WHERE A.IsEnable = 1 AND C.IsEnable = 1 AND C.Status = A.Status";
public async Task UpdateResumeStatus(Ghrh_Resume entity, string Status)
{
entity.Status = Status;
await Update(entity, ["Status"]);
await Update(entity, ["Status", "UpdateTime", "UpdateBy"]);
}
public async Task UpdateInterviewOrderStatus(Ghrh_InterviewOrder order, string Status)
{
order.Status = Status;
await _ghrh_InterviewOrderServices.Update(order, ["Status"]);
await _ghrh_InterviewOrderServices.Update(order, ["Status", "UpdateTime", "UpdateBy"]);
}
/// <summary>
/// 修改面试记录状态
@ -3217,7 +3234,7 @@ WHERE A.IsEnable = 1 AND C.IsEnable = 1 AND C.Status = A.Status";
{
var records = await _ghrh_InterviewRecordServices.Query(x => x.Round == order.Round && x.OrderId == order.Id);
records.ForEach(record => record.Status = Status);
await _ghrh_InterviewRecordServices.Update(records, ["Status"]);
await _ghrh_InterviewRecordServices.Update(records, ["Status", "UpdateTime", "CreateBy"]);
}
/// <summary>
/// 同步数据进入认识资料
@ -3288,8 +3305,6 @@ WHERE A.IsEnable = 1 AND C.IsEnable = 1 AND C.Status = A.Status";
staff.IsEnable = 1;
#endregion
var applyOrder = await Db.Queryable<Ghrh_OfferApplyOrder>().Where(x => x.ResumeId == id).FirstAsync();
if (applyOrder != null)
{

@ -26252,6 +26252,11 @@
已报到转入人事资料类型,Fast,快速入职;Normal,正常入职
</summary>
</member>
<member name="P:Tiobon.Core.Model.Models.Ghrh_ResumeDto.InterviewStepName">
<summary>
面试环节
</summary>
</member>
<member name="T:Tiobon.Core.Model.Models.Ghrh_ResumeEduBGDto">
<summary>
教育背景(Dto.View1)

Loading…
Cancel
Save