Files
AppointmentOA/api_v1/Appointment.Repository/ApptRepo.cs
2022-07-24 16:47:31 +08:00

1930 lines
86 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Appointment.Entity;
using Appointment.IRepository;
using System;
using System.Linq;
using System.Collections.Generic;
using System.Data;
using System.Text;
using SqlSugar;
using System.Threading.Tasks;
using Newtonsoft.Json;
using System.Net.Http;
using static Appointment.Entity.WechatHelper;
namespace Appointment.Repository
{
/// <summary>
/// 标准预订业务
/// </summary>
public class ApptRepo : DbContext, IApptRepo
{
private readonly log4net.ILog _logger = log4net.LogManager.GetLogger(typeof(ApptRepo));
IApptLogRepo _ApptLog;
public ApptRepo(IApptLogRepo apptLog)
{
_ApptLog = apptLog;
}
// ---- 会议室
/// <summary>
/// 可用会议室资源列表
/// </summary>
/// <param name="req"></param>
/// <returns></returns>
public ApiResult<List<MeetingRes>> UsableMeetingList(MeetingReq req)
{
var loginUserRes = BaseRepo.DECLoginInfo(req.AccountDES);
if (!loginUserRes.IsSuccess) return ApiResult<List<MeetingRes>>.Failed(loginUserRes.Msg);
if (req.StartDay == DateTime.MinValue) return ApiResult<List<MeetingRes>>.Failed("操作失败,[StartTime]不正确!");
req.StartDay = new DateTime(req.StartDay.Year, req.StartDay.Month, req.StartDay.Day);
if (req.EndDay == DateTime.MinValue) return ApiResult<List<MeetingRes>>.Failed("操作失败,[EndTime]不正确!");
var endd = req.EndDay.AddDays(1);
req.EndDay = new DateTime(endd.Year, endd.Month, endd.Day);
var ls = Db.Queryable<ResInfo, ResCode>((i, c) => new JoinQueryInfos(
JoinType.Left, i.Rescode == c.Code
))
.Where((i, c) => i.Stime >= req.StartDay && i.Etime <= req.EndDay && c.Sta == "T" && i.Sta != "C")
.Select((i, c) => new UsableMeetingMiddleRes()
{
MeetingName = c.Descript1,
Code = c.Code,
Stime = i.Stime.Value,
Sta = i.Sta == "O" ? "I" : i.Sta,
Sfield = i.Sfield,
Resby = i.Resby
})
.ToList().Replace();
List<MeetingRes> reList = new List<MeetingRes>();
var resCode = Db.Queryable<ResCode>()
.Where(t => t.Sort == "A" && t.Sta == "T").OrderBy(t => t.Code, OrderByType.Asc).ToList().Replace();
if (resCode == null || resCode.Count == 0) return ApiResult<List<MeetingRes>>.Success(string.Empty);
int days = (req.EndDay - req.StartDay).Days;
/* 封装暂订单数量 */
var zy = Db.Queryable<ApptSummary>().Where(t => t.ApplyOA == 1 && t.StartDay >= req.StartDay.AddMonths(-2) && t.EndDay <= req.EndDay.AddMonths(2))
.Select(t => t.Guid).ToList();
var meets = Db.Queryable<ApptMeeting, ApptSummary>((m, s) => new JoinQueryInfos(
JoinType.Left, m.ApptId == s.Id))
.Where((m, s) => s.ApptTypeId == 2 && s.ApptType != 4 && m.MeetingTime >= req.StartDay && m.MeetingTime <= req.EndDay && !zy.Contains(s.Guid)).ToList();
//var inSumGuid = Db.Queryable<ApptSummary>().Where(t => meets.Select(t => t.ApptId).Contains(t.Id)).Select(t => t.Guid).ToList();
//var _inSumGuid = Db.Queryable<ApptSummary>().Where(t => t.ApplyOA == 1 && inSumGuid.Contains(t.Guid)).ToList();
//meets= meets.Where(t=> !_inSumGuid.Contains(t.gui))
foreach (var item in resCode)
{
DateTime curDay = req.StartDay;
MeetingRes meetingRes = new MeetingRes();
meetingRes.Code = item.Code;
meetingRes.Descript = item.Descript1;
meetingRes.DayStatus = new List<MeetingStatus>();
for (int i = 0; i < days; i++)
{
MeetingStatus meetingStatus = new MeetingStatus();
meetingStatus.Day = curDay;
string[] st = new string[] { "", "", "" };
for (int j = 0; j < 3; j++)
{
var meetingNum = new MeetingNum();
int sField = j + 1;
var model = ls.Where(t => t.Stime == curDay && t.Sfield == sField && t.Code == item.Code).FirstOrDefault();
if (model != null)
{
if (model.Resby == loginUserRes.Info.UserAccount)
{
meetingNum.Group = "M";
st[j] = "M";
}
else
{
st[j] = model.Sta;
meetingNum.Group = model.Sta;
}
}
if (meets != null)
{
var m = meets.Where(t => t.MeetingTime == meetingStatus.Day && t.MeetingCode == item.Code && t.Groups.Contains(sField.ToString()))
.Select(t => t.ApptId.Value).ToList();
meetingNum.Num = m.Count();
if (meetingNum.Num > 0)
{
meetingNum.SummaryList = m;
}
}
if (meetingStatus.MeetingNums == null) meetingStatus.MeetingNums = new List<MeetingNum>();
meetingStatus.MeetingNums.Add(meetingNum);
}
meetingStatus.Status = st;
meetingRes.DayStatus.Add(meetingStatus);
curDay = curDay.AddDays(1);
}
reList.Add(meetingRes);
}
return ApiResult<List<MeetingRes>>.Success(string.Empty, reList);
}
/// <summary>
/// 当天可用会议室资源
/// </summary>
/// <param name="req"></param>
/// <returns></returns>
public ApiResult<List<ResCode>> UsableMeeting(UsableMeetingReq req)
{
// 获取会议室列表
var resCodeList = Db.Queryable<ResCode>().Where(t => t.Sort == "A").OrderBy(t => t.Code, OrderByType.Asc).ToList();
if (resCodeList == null || resCodeList.Count == 0) return ApiResult<List<ResCode>>.Success(string.Empty);
// 获取占用的会议室
req.Day = new DateTime(req.Day.Year, req.Day.Month, req.Day.Day);
ISugarQueryable<ResInfo> sugar = Db.Queryable<ResInfo>().Where(t => t.Stime == req.Day && t.Sta != "C");
if (req.Groups != null && req.Groups.Length > 0) sugar = sugar.In(t => t.Sfield, req.Groups);
var resInfoList = sugar.ToList();
List<ResCode> list = new List<ResCode>();
foreach (var item in resCodeList)
{
int rows = resInfoList.Where(t => t.Rescode == item.Code).Count();
if (rows > 0)
{
if (req.Status == 1)
{
item.Numbers = 0;
}
else
{
continue;
}
}
list.Add(item);
}
// 获取待审核的信息
return ApiResult<List<ResCode>>.Success(string.Empty, list);
}
// ---- 客房
/// <summary>
/// 可用客房资源列表
/// </summary>
/// <param name="req"></param>
/// <returns></returns>
public ApiResult<List<UsableRoomRes>> UsableRoom(UsableRoomReq req)
{
if (req.StartDay == DateTime.MinValue) return ApiResult<List<UsableRoomRes>>.Failed("操作失败,[StartTime]不正确!");
req.StartDay = new DateTime(req.StartDay.Year, req.StartDay.Month, req.StartDay.Day);
if (req.EndDay == DateTime.MinValue) return ApiResult<List<UsableRoomRes>>.Failed("操作失败,[EndTime]不正确!");
var endd = req.EndDay.AddDays(-1);
req.EndDay = new DateTime(endd.Year, endd.Month, endd.Day);
string rm_type = "%"; // 全部
var dt2 = Db.Ado.UseStoredProcedure().SqlQuery<UsableRoomRes>("p_yyj_ota_type_rsv_tend", new { rm_type = rm_type, s_time = req.StartDay, e_time = req.EndDay, tentative = "T" });
if (dt2.Count == 0) return ApiResult<List<UsableRoomRes>>.Success(String.Empty, null);
dt2 = dt2.Replace();
var ls = Db.Queryable<RoomType>().ToList().Replace();
for (int i = 0; i < dt2.Count; i++)
{
dt2[i].RoomName = ls.Where(t => t.Id == dt2[i].Type).FirstOrDefault()?.Descript1;
dt2[i].RoomPrice = ls.Where(t => t.Id == dt2[i].Type).FirstOrDefault()?.Price;
dt2[i].RoomTotal = ls.Where(t => t.Id == dt2[i].Type).FirstOrDefault()?.Total;
}
dt2 = dt2.OrderBy(t => t.Quan).ToList();
return ApiResult<List<UsableRoomRes>>.Success(String.Empty, dt2);
}
/// <summary>
/// 根据时间段获取房类最小可用数
/// </summary>
/// <param name="req"></param>
/// <returns></returns>
public ApiResult<List<UsableRoomRes>> UsableRoomMin(UsableRoomReq req)
{
if (req.StartDay == DateTime.MinValue) return ApiResult<List<UsableRoomRes>>.Failed("操作失败,[StartTime]不正确!");
req.StartDay = new DateTime(req.StartDay.Year, req.StartDay.Month, req.StartDay.Day);
if (req.EndDay == DateTime.MinValue) return ApiResult<List<UsableRoomRes>>.Failed("操作失败,[EndTime]不正确!");
/* 获取基本客房类型数据 */
var ls = Db.Queryable<RoomType>().ToList().Replace();
if (ls == null && ls.Count == 0) return ApiResult<List<UsableRoomRes>>.Success(String.Empty, null);
var usableTypeList = new List<UsableRoomRes>();
for (int i = 0; i < ls.Count; i++)
{
usableTypeList.Add(new UsableRoomRes()
{
Sequence = ls[i].Sequence.Value,
Type = ls[i].Id,
Quan = ls[i].Total,
RoomName = ls[i].Descript1,
RoomPrice = ls[i].Price,
RoomTotal = ls[i].Total
});
}
/* 获取正式库客房使用数量 */
var endday = req.EndDay.AddDays(-1);
endday = new DateTime(endday.Year, endday.Month, endday.Day);
string rm_type = "%"; // 全部
var dt2 = Db.Ado.UseStoredProcedure().SqlQuery<UsableRoomRes>("p_yyj_ota_type_rsv_tend", new { rm_type = rm_type, s_time = req.StartDay, e_time = endday, tentative = "T" });
if (dt2.Count == 0) return ApiResult<List<UsableRoomRes>>.Success(String.Empty, null);
dt2 = dt2.Replace();
/* 获取临时表客户使用数量 */
//DateTime eTime = req.EndDay.AddDays(1);
//var SummaryIds = Db.Queryable<ApptSummary>()
// .Where(t => t.AuditorStatus == (int)EnumAuditorStatus.审核中)
// .Select(t => t.Id).ToList();
//var apptRoomList = Db.Queryable<ApptRoom>()
// .In(t => t.ApptId, SummaryIds)
// .Where(t => !(t.RoomOut < eTime || t.RoomIn > req.EndDay))
// .ToList();
foreach (var item in usableTypeList)
{
item.Quan = dt2.Where(t => t.Type == item.Type).Min(t => t.Quan); // 正式数据可使用的最小客房
}
usableTypeList = usableTypeList.Where(t => t.Quan > 0).OrderBy(t => t.Sequence).ToList();
return ApiResult<List<UsableRoomRes>>.Success(String.Empty, usableTypeList);
}
/// <summary>
/// 备注列表项
/// </summary>
/// <returns></returns>
public ApiResult<List<string>> RemarkList()
{
var ls = Db.Queryable<SysCode>()
.Where(t => t.Class == EnumSysCodeClass.apptremark.ToString())
.OrderBy(t => t.Id, OrderByType.Asc)
.Select(t => t.Descript1).ToList().Replace();
return ApiResult<List<string>>.Success(string.Empty, ls);
}
// ---- 预订管理
/// <summary>
/// 创建暂定单
/// </summary>
/// <param name="req"></param>
/// <returns></returns>
public ApiResult Add(ApptSummaryReq req)
{
DateTime now = DateTime.Now;
var loginUserRes = BaseRepo.DECLoginInfo(req.AccountDES);
if (!loginUserRes.IsSuccess) return ApiResult.Failed(loginUserRes.Msg);
int pid = 0;
if (req.Id != 0)
{
var summary = Db.Queryable<ApptSummary>().Where(t => t.Id == req.Id).First();
if (summary != null)
{
if (summary.AuditorStatus == (int)EnumAuditorStatus.审核中)
{
string oldData = JsonConvert.SerializeObject(summary);
summary.AuditorStatus = (int)EnumAuditorStatus.作废;
Db.Updateable(summary).UpdateColumns(t => new { t.AuditorStatus }).ExecuteCommand();
string newData = JsonConvert.SerializeObject(summary);
_ApptLog.SetLog("appt_summary", summary.Id.ToString(), oldData, newData, loginUserRes.Info.UserAccount, 0);
pid = req.Id;
}
else if (summary.AuditorStatus == (int)EnumAuditorStatus.审核通过 || summary.AuditorStatus == (int)EnumAuditorStatus.作废)
{
return ApiResult.Failed("操作无效");
}
else if (summary.AuditorStatus == (int)EnumAuditorStatus.驳回)
{
// 驳回的复制新建,原来的不需要更改
}
}
}
if (
(req.ApptRoomList == null || req.ApptRoomList.Count == 0)
&& (req.ApptMeetingList == null || req.ApptMeetingList.Count == 0)
&& (req.ApptCateringList == null || req.ApptCateringList.Count == 0)
&& (req.ApptSpringList == null || req.ApptSpringList.Count == 0)
)
{
return ApiResult.Failed("添加失败,预订详情全为空!");
}
/* 主体 */
// 审批状态
var auditorStatus = EnumAuditorStatus.审核中;
int apptTypeId = 0;//现不使用类型
var auditorId = 0;
var apptType = Db.Queryable<ApptAuditor>().ToList();
var apptTypeModel = apptType.Where(t => t.Pid == 0).FirstOrDefault();
if (apptTypeModel == null)
{
auditorId = 0;
}
else
{
if (apptTypeModel.OpGroup != loginUserRes.Info.UserGroup)
{
auditorId = apptTypeModel.Id;
}
else
{
var nextAuditor = apptType.Where(t => t.Pid == apptTypeModel.Id).FirstOrDefault();
if (nextAuditor == null)
{
auditorId = 0;
}
else
{
auditorId = nextAuditor.Id;
}
}
}
StringBuilder no = new StringBuilder();
string NoPrefix = BaseConfig.App(new string[] { "NoPrefix" });
if (!string.IsNullOrWhiteSpace(NoPrefix))
{
no.AppendFormat("{0}-", NoPrefix);
}
no.Append($"{now:yyyy}-{now:MM}-{now:dd}-");
// 计算序号
DateTime sTime = new DateTime(now.Year, now.Month, now.Day);
var count = Db.Queryable<ApptSummary>()
.Where(t => t.CreateTime > sTime).Count() + 1;
no.Append(count.ToString().PadLeft(2, '0'));
/* 会议室预订明细 */
var apptMeetingList = new List<ApptMeeting>();
if (req.ApptMeetingList != null && req.ApptMeetingList.Count > 0)
{
List<ResCode> resCodeList = Db.Queryable<ResCode>().Where(t => t.Sort == "A" && t.Sta == "T").ToList();
foreach (var item in req.ApptMeetingList)
{
if (item.MeetingGroup.Length == 0) return ApiResult.Failed("添加失败,未获取到选择的场次!");
string meetingRoom = item.MeetingRoom;
string meetingCode = item.MeetingCode;
decimal meetingPrice = item.MeetingPrice == null ? 0 : item.MeetingPrice.Value;
if (!string.IsNullOrWhiteSpace(item.MeetingCode))
{
var resCode = resCodeList.Where(t => t.Code == item.MeetingCode).FirstOrDefault();
if (resCode == null) return ApiResult.Failed("添加失败,无效的会议厅代码!");
meetingRoom = resCode.Descript1;
if (item.MeetingTime != null)
{
item.MeetingTime = new DateTime(item.MeetingTime.Value.Year, item.MeetingTime.Value.Month, item.MeetingTime.Value.Day);
// 判断正式表 会议厅资源是否被占用
var resInfo = Db.Queryable<ResInfo>()
.Where(t => t.Rescode == item.MeetingCode && t.Stime == item.MeetingTime.Value)
.In(t => t.Sfield, item.MeetingGroup).Any();
if (resInfo) return ApiResult.Failed("添加失败,会议室已被占用!");
}
}
for (int i = 0; i < item.MeetingGroup.Length; i++)
{
apptMeetingList.Add(new ApptMeeting()
{
MeetingTime = item.MeetingTime.Value,
//MeetingGroup = item.MeetingGroup[i],
MeetingRoom = meetingRoom,
MeetingCode = meetingCode,
MeetingRostrum = item.MeetingRostrum,
MeetingShape = item.MeetingShape,
MeetingNum = item.MeetingNum == null ? 0 : item.MeetingNum.Value,
MeetingPrice = meetingPrice,
MeetingTitle = item.MeetingTitle,
Remark = item.Remark
});
}
}
}
/* 客房预订明细 */
var apptRoomList = new List<ApptRoom>();
if (req.ApptRoomList != null && req.ApptRoomList.Count > 0)
{
List<RoomType> roomTypeList = Db.Queryable<RoomType>().ToList();
roomTypeList = StringHelper.Replace(roomTypeList);
foreach (var item in req.ApptRoomList)
{
if (item.RoomIn != null && item.RoomIn.Value.Hour == 0) item.RoomIn = new DateTime(item.RoomIn.Value.Year, item.RoomIn.Value.Month, item.RoomIn.Value.Day, 18, 0, 0);
if (item.RoomOut != null && item.RoomOut.Value.Hour == 0) item.RoomOut = new DateTime(item.RoomOut.Value.Year, item.RoomOut.Value.Month, item.RoomOut.Value.Day, 14, 0, 0);
if (item.RoomNum == null) return ApiResult.Failed("添加失败,房间数无效!");
string roomGroup = item.RoomGroup;
string roomCode = string.Empty;
decimal roomPrice = item.RoomPrice == null ? 0 : item.RoomPrice.Value;
if (!string.IsNullOrWhiteSpace(item.RooomCode))
{
var room = roomTypeList.Where(t => t.Id == item.RooomCode).FirstOrDefault();
if (room == null) return ApiResult.Failed("添加失败,房类代码不存在!");
roomGroup = room.Descript1;
roomCode = room.Id;
if (roomPrice == 0) roomPrice = room.Price;
}
if (!string.IsNullOrWhiteSpace(roomCode))
{
// 判断正式表 客房资源是否被占用
DateTime s_time = item.RoomIn == null ? now.AddYears(1) : item.RoomIn.Value;
DateTime e_time = item.RoomOut == null ? now.AddYears(1) : item.RoomOut.Value.AddDays(-1);
string rm_type = roomCode;
if (string.IsNullOrEmpty(rm_type)) rm_type = "%";
rm_type = rm_type.PadRight(3, ' ');
var _dt = Db.Ado.UseStoredProcedure().GetDataTable("p_yyj_ota_type_rsv_tend", new { rm_type, s_time = item.RoomIn, e_time = item.RoomOut });
if (_dt == null || _dt.Rows.Count == 0) throw new Exception("已没有空的客房");
for (int i = 0; i < _dt.Rows.Count; i++)
{
int quan = Convert.ToInt32(_dt.Rows[i]["quan"]);
string type = _dt.Rows[i]["type"].ToString();
if (quan < item.RoomNum)
{
return ApiResult.Failed($"操作失败,[{item.RoomIn:yyyy-MM-dd}]房类[{type}]只剩{quan}套!");
}
}
}
apptRoomList.Add(new ApptRoom()
{
RoomIn = item.RoomIn.Value,
RoomOut = item.RoomOut.Value,
RoomGroup = roomGroup,
RoomCode = roomCode,
RoomNum = item.RoomNum.Value,
RoomPrice = roomPrice,
BreakfastNum = item.BreakfastNum == null ? 0 : item.BreakfastNum.Value,
LongDistance = item.LongDistance == null ? 0 : item.LongDistance.Value,
MinShop = item.MinShop == null ? 0 : item.MinShop.Value,
RoomRemark = item.RoomRemark
});
}
}
/* 餐饮预订明细 */
var apptCateringList = new List<ApptCatering>();
if (req.ApptCateringList != null && req.ApptCateringList.Count > 0)
{
foreach (var item in req.ApptCateringList)
{
string cateringRoom = item.CateringRoom;
string cateringCode = item.CateringCode;
for (int i = 0; i < item.CateringGroup.Length; i++)
{
apptCateringList.Add(new ApptCatering()
{
CateringTime = item.CateringTime.Value,
//CateringGroup = item.CateringGroup[i],
CateringRoom = item.CateringRoom,
CateringCode = item.CateringCode,
CateringType = item.CateringType,
CateringNum = item.CateringNum,
CateringPrice = item.CateringPrice,
CateringTable = item.CateringTable,
Wine = item.Wine,
Remark = item.Remark,
});
}
}
}
/* 温泉预订明细 */
var ApptSpringList = new List<ApptSpring>();
if (req.ApptSpringList != null && req.ApptSpringList.Count > 0)
{
foreach (var item in req.ApptSpringList)
{
ApptSpringList.Add(new ApptSpring()
{
SpringTime = item.SpringTime.Value,
PeopleNum = item.PeopleNum == null ? 0 : item.PeopleNum.Value,
SpringMen = item.SpringMen == null ? 0 : item.SpringMen.Value,
SpringWomen = item.SpringWomen == null ? 0 : item.SpringWomen.Value,
Consume = item.Consume,
SpringPrice = item.SpringPrice == null ? 0 : item.SpringPrice.Value,
Remark = item.Remark,
});
}
}
ApptSummary appt = new ApptSummary
{
UserId = loginUserRes.Info.UserAccount,
CreateTime = DateTime.Now,
ApptTypeId = apptTypeId,
AuditorStatus = (int)auditorStatus,
AuditorId = auditorId,
TransferAudit = string.Empty,
ApptType = 0,
No = no.ToString(),
BuyerName = req.BuyerName,
BuyerAddress = req.BuyerAddress,
BuyerTitle = req.BuyerTitle,
LeaderName = req.LeaderName,
LeaderMobile = req.LeaderMobile,
LeaderRoom = req.LeaderRoom,
SaleName = loginUserRes.Info.UserName,
SaleMobile = "", // 组织负责人电话从哪获取,获取微信员工手机号
SaleDirector = "", // 营销总监(手工写),
RoomRemark = req.RoomRemark,
MeetingRemark = req.MeetingRemark,
CateringRemark = req.CateringRemark,
SpringRemark = req.SpringRemark,
Pid = pid
};
int summaryId = 0;
try
{
Db.Ado.BeginTran();
var resultSummary = InsertReturnId(appt);
if (!resultSummary.IsSuccess)
{
Db.Ado.RollbackTran();
return ApiResult.Failed(resultSummary.Msg);
}
summaryId = resultSummary.Info;
if (apptRoomList.Count > 0)
{
for (int i = 0; i < apptRoomList.Count; i++)
{
apptRoomList[i].ApptId = resultSummary.Info;
}
InsertRange(apptRoomList);
}
if (apptMeetingList.Count > 0)
{
for (int i = 0; i < apptMeetingList.Count; i++)
{
apptMeetingList[i].ApptId = resultSummary.Info;
}
InsertRange(apptMeetingList);
}
if (apptCateringList.Count > 0)
{
for (int i = 0; i < apptCateringList.Count; i++)
{
apptCateringList[i].ApptId = resultSummary.Info;
}
InsertRange(apptCateringList);
}
if (ApptSpringList.Count > 0)
{
for (int i = 0; i < ApptSpringList.Count; i++)
{
ApptSpringList[i].ApptId = resultSummary.Info;
}
InsertRange(ApptSpringList);
}
if (req.Remarks != null && req.Remarks.Count > 0)
{
var reList = new List<ApptRemark>();
foreach (var item in req.Remarks)
{
if (!string.IsNullOrEmpty(item.RemarkContent))
{
reList.Add(new ApptRemark()
{
ApptId = resultSummary.Info,
Title = item.RemarkName,
Info = item.RemarkContent
});
}
}
if (reList.Count > 0) InsertRange(reList);
}
Db.Ado.CommitTran();
}
catch (Exception ex)
{
Db.Ado.RollbackTran();
throw new Exception("提交预订失败,出现异常,异常信息:" + ex.Message);
}
/* 审批流程 */
if (summaryId > 0)
{
if (auditorId == 0 && string.IsNullOrEmpty(appt.TransferAudit))
{
var auditLog = new ApptAuditLog()
{
Type = 1,
CreateTime = DateTime.Now,
UserId = loginUserRes.Info.UserAccount,
ApptId = summaryId,
AuditorStatus = 3,
Remark = "自动"
};
InsertReturnId(auditLog);
return InAppt(summaryId);
}
else
{
SetMsgAuditing(summaryId, auditorId, loginUserRes.Info.Hotelid);
}
}
return ApiResult.Success();
}
/// <summary>
/// 删除预定
/// </summary>
/// <param name="req"></param>
/// <returns></returns>
public ApiResult DeleteAppt(AuditDeleteReq req)
{
if (req.Type == 1)
{
var summary = GetById<ApptSummary>(req.Id);
if (summary != null)
{
_ApptLog.SetLog("appt_summary", summary.Id.ToString(), JsonConvert.SerializeObject(summary), null, null, 1);
DeleteById<ApptSummary>(req.Id);
}
}
else if (req.Type == 2)
{
var item = GetById<ApptRoom>(req.Id);
if (item != null)
{
_ApptLog.SetLog("appt_room", item.Id.ToString(), JsonConvert.SerializeObject(item), null, null, 1);
DeleteById<ApptRoom>(req.Id);
}
}
else if (req.Type == 3)
{
var item = Db.Queryable<ApptMeeting>().Where(t => t.Id == req.Id).First();
if (item != null)
{
_ApptLog.SetLog("appt_meeting", item.Id.ToString(), JsonConvert.SerializeObject(item), null, null, 1);
DeleteById<ApptRoom>(req.Id);
}
}
else if (req.Type == 4)
{
var item = GetById<ApptCatering>(req.Id);
if (item != null)
{
_ApptLog.SetLog("appt_catering", item.Id.ToString(), JsonConvert.SerializeObject(item), null, null, 1);
DeleteById<ApptRoom>(req.Id);
}
}
else if (req.Type == 5)
{
var item = GetById<ApptSpring>(req.Id);
if (item != null)
{
_ApptLog.SetLog("appt_spring", item.Id.ToString(), JsonConvert.SerializeObject(item), null, null, 1);
DeleteById<ApptRoom>(req.Id);
}
}
else
{
return ApiResult.Failed("操作失败,类型无效!");
}
return ApiResult.Success(string.Empty);
}
/// <summary>
/// 预订审批
/// </summary>
/// <param name="req"></param>
/// <returns></returns>
public ApiResult ApptAudit(ApptAuditReq req)
{
var loginUserRes = BaseRepo.DECLoginInfo(req.AccountDES);
if (!loginUserRes.IsSuccess) return ApiResult.Failed(loginUserRes.Msg);
var sum = GetById<ApptSummary>(req.ApptId);
if (sum == null) return ApiResult.Failed("操作失败,信息不存在!");
if (sum.AuditorStatus != (int)EnumAuditorStatus.审核中) return ApiResult.Failed("操作失败,当前预订不在审核状态!");
var oldData = JsonConvert.SerializeObject(sum);
var apptAuditorModel = GetById<ApptAuditor>(sum.AuditorId);
if (sum.AuditorId > 0)
{
if (apptAuditorModel == null) return ApiResult.Failed("操作失败,无效的审核流程!");
if (loginUserRes.Info.UserGroup != apptAuditorModel.OpGroup) return ApiResult.Failed("操作失败,没有审核权限!");
}
else if (!string.IsNullOrEmpty(sum.TransferAudit))
{
if (sum.TransferAudit != loginUserRes.Info.UserAccount)
{
return ApiResult.Failed("操作失败,没有审核权限!");
}
else
{
sum.TransferAudit = string.Empty;
}
}
else
{
return InAppt(req.ApptId);
}
if (req.AuditorStatus == 1)
{
var apptMeetingList = Db.Queryable<ApptMeeting>().Where(t => t.ApptId == sum.Id && !SqlFunc.IsNullOrEmpty(t.MeetingCode)).ToList();
//if (apptMeetingList != null && apptMeetingList.Count > 0)
//{
// foreach (var item in apptMeetingList)
// {
// if (!string.IsNullOrWhiteSpace(item.MeetingCode))
// {
// DateTime enddate = item.MeetingTime.AddDays(8);
// var ls = Db.Ado.UseStoredProcedure().SqlQuery<P_xx_res_info_view3_Res>("p_xx_res_info_view3", new { startday = item.MeetingTime, enddate, sort = "A", accnt = "%" });
// if (ls != null && ls.Count > 0)
// {
// var model = ls.Where(t => t.Code == item.MeetingCode).FirstOrDefault();
// if (model != null)
// {
// }
// }
// }
// }
//}
var apptRoomList = Db.Queryable<ApptRoom>().Where(t => t.ApptId == sum.Id && !SqlFunc.IsNullOrEmpty(t.RoomCode)).ToList();
if (apptRoomList != null && apptRoomList.Count > 0)
{
foreach (var item in apptRoomList)
{
string rm_type = item.RoomCode;
if (string.IsNullOrEmpty(rm_type)) rm_type = "%";
rm_type = rm_type.PadRight(3, ' ');
var _dt = Db.Ado.UseStoredProcedure().GetDataTable("p_yyj_ota_type_rsv_tend", new { rm_type, s_time = item.RoomIn, e_time = item.RoomOut });
if (_dt == null || _dt.Rows.Count == 0) throw new Exception("已没有空的客房");
for (int i = 0; i < _dt.Rows.Count; i++)
{
int quan = Convert.ToInt32(_dt.Rows[i]["quan"]);
string type = _dt.Rows[i]["type"].ToString();
if (quan < item.RoomNum)
{
return ApiResult.Failed($"操作失败,[{item.RoomIn:yyyy-MM-dd}]房类[{type}]只剩{quan}套!");
}
}
}
}
sum.AuditorStatus = (int)EnumAuditorStatus.审核中;
}
else if (req.AuditorStatus == 0)
{
sum.AuditorStatus = (int)EnumAuditorStatus.驳回;
var usr = Db.Queryable<UcLogin>().Where(t => t.OpId == sum.UserId).First();
SetMsgaudited(usr.WxServiceId, EnumAuditorStatus.驳回, loginUserRes.Info.Hotelid, sum.BuyerTitle, req.Remark, loginUserRes.Info.UserName);
}
else
{
return ApiResult.Failed($"操作失败,无效操作!");
}
var auditLog = new ApptAuditLog()
{
Type = 1,
CreateTime = DateTime.Now,
UserId = loginUserRes.Info.UserAccount,
ApptId = req.ApptId,
AuditorStatus = req.AuditorStatus,
Remark = req.Remark
};
if (sum.AuditorId > 0)
{
var nextAudit = Db.Queryable<ApptAuditor>().Where(t => t.Pid == apptAuditorModel.Id).OrderBy(t => t.Id, OrderByType.Desc).First();
if (nextAudit == null)
{
sum.AuditorId = 0;
}
else
{
sum.AuditorId = nextAudit.Id;
SetMsgAuditing(req.ApptId, nextAudit.Id, loginUserRes.Info.Hotelid);
}
}
try
{
Db.Ado.BeginTran();
InsertReturnId(auditLog);
Db.Updateable(sum).UpdateColumns(t => new { t.AuditorStatus, t.AuditorId, t.TransferAudit, t.Id }).ExecuteCommand();
_ApptLog.SetLog("appt_summary", req.ApptId.ToString(), oldData, JsonConvert.SerializeObject(sum), null, 1);
Db.Ado.CommitTran();
}
catch (Exception ex)
{
Db.Ado.RollbackTran();
_logger.Error(ex);
throw new Exception(ex.Message);
}
if (sum.AuditorId == 0 && string.IsNullOrEmpty(sum.TransferAudit) && req.AuditorStatus == 1)
{
var usr = Db.Queryable<UcLogin>().Where(t => t.OpId == sum.UserId).First();
InAppt(sum.Id.Value);
SetMsgaudited(usr.WxServiceId, EnumAuditorStatus.审核通过, loginUserRes.Info.Hotelid, sum.BuyerTitle, req.Remark, loginUserRes.Info.UserName);
}
return ApiResult.Success(string.Empty);
}
/// <summary>
/// 取消预订
/// </summary>
/// <param name="req"></param>
/// <returns></returns>
public ApiResult CancelAudit(ApptAuditReq req)
{
var loginUserRes = BaseRepo.DECLoginInfo(req.AccountDES);
if (!loginUserRes.IsSuccess) return ApiResult.Failed(loginUserRes.Msg);
var summaryM = GetById<ApptSummary>(req.ApptId);
if (summaryM == null) return ApiResult.Failed("操作失败,信息不存在!");
if (summaryM.AuditorStatus != (int)EnumAuditorStatus.审核中) return ApiResult.Failed($"操作失败,当前为{(EnumAuditorStatus)summaryM.AuditorStatus},不允许取消!");
string oldData = JsonConvert.SerializeObject(summaryM);
summaryM.AuditorStatus = (int)EnumAuditorStatus.取消;
summaryM.AuditorId = 0;
summaryM.TransferAudit = string.Empty;
var auditLog = new ApptAuditLog()
{
Type = 1,
CreateTime = DateTime.Now,
UserId = loginUserRes.Info.UserAccount,
ApptId = req.ApptId,
AuditorStatus = (int)EnumAuditorStatus.取消,
Remark = req.Remark
};
try
{
Db.Ado.BeginTran();
InsertReturnId(auditLog);
Update(summaryM);
_ApptLog.SetLog("appt_summary", req.ApptId.ToString(), oldData, JsonConvert.SerializeObject(summaryM), null, 1);
Db.Ado.CommitTran();
return ApiResult.Success(string.Empty);
}
catch (Exception ex)
{
Db.Ado.RollbackTran();
_logger.Error(ex);
throw new Exception(ex.Message);
}
}
/// <summary>
/// 转审批
/// </summary>
/// <param name="req"></param>
/// <returns></returns>
public ApiResult TransferAudit(TransferAuditReq req)
{
bool transferWhere = false;
var loginUserRes = BaseRepo.DECLoginInfo(req.AccountDES);
if (!loginUserRes.IsSuccess) return ApiResult.Failed(loginUserRes.Msg);
var sum = GetById<ApptSummary>(req.ApptId);
if (sum == null) return ApiResult.Failed("操作失败,信息不存在!");
if (sum.AuditorStatus != (int)EnumAuditorStatus.审核中) return ApiResult.Failed("操作失败,当前预订不在审核状态!");
if (sum.AuditorId > 0)
{
var aptAuditorModel = GetById<ApptAuditor>(sum.AuditorId);
if (aptAuditorModel != null)
{
if (aptAuditorModel.OpGroup == loginUserRes.Info.UserGroup) transferWhere = true;
}
}
else if (!string.IsNullOrEmpty(sum.TransferAudit))
{
if (sum.TransferAudit == loginUserRes.Info.UserAccount) transferWhere = true;
}
if (transferWhere)
{
string oldData = JsonConvert.SerializeObject(sum);
var userModel = Db.Queryable<UcLogin>().Where(t => t.OpId.Trim() == req.ToAccount && t.Locked == "F").First();
if (userModel == null) return ApiResult.Failed("操作失败,转审批接收人不存在!");
if (string.IsNullOrEmpty(userModel.WxOpenId) || string.IsNullOrEmpty(userModel.WxServiceId))
{
return ApiResult.Failed("操作失败,转审批接收人需要授权小程序与公众号!");
}
sum.AuditorId = 0;
sum.TransferAudit = req.ToAccount;
var auditLog = new ApptAuditLog()
{
Type = 1,
CreateTime = DateTime.Now,
UserId = loginUserRes.Info.UserAccount,
ApptId = req.ApptId,
AuditorStatus = 2,
Remark = req.Remark
};
try
{
Db.Ado.BeginTran();
Db.Updateable(sum).UpdateColumns(t => new { t.AuditorId, t.TransferAudit }).ExecuteCommand();
InsertReturnId(auditLog);
_ApptLog.SetLog("appt_summary", req.ApptId.ToString(), oldData, JsonConvert.SerializeObject(sum), loginUserRes.Info.UserAccount, 2);
Db.Ado.CommitTran();
TransferAuditMsg(req.ApptId, userModel.WxServiceId, loginUserRes.Info.Hotelid);
return ApiResult.Success();
}
catch (Exception ex)
{
Db.Ado.RollbackTran();
_logger.Error(ex);
throw new Exception(ex.Message);
}
}
else
{
return ApiResult.Failed("转审批失败!");
}
}
/// <summary>
/// 抄送
/// </summary>
/// <param name="req"></param>
/// <returns></returns>
public ApiResult ApptSend(ApptSendReq req)
{
var loginUserRes = BaseRepo.DECLoginInfo(req.AccountDES);
if (!loginUserRes.IsSuccess) return ApiResult.Failed(loginUserRes.Msg);
DateTime now = DateTime.Now;
var summary = GetById<ApptSummary>(req.ApptId);
if (summary == null || summary.AuditorStatus == (int)EnumAuditorStatus.驳回 || summary.AuditorStatus == (int)EnumAuditorStatus.作废 || summary.AuditorStatus == (int)EnumAuditorStatus.取消) return ApiResult.Failed("操作失败,数据不存在!");
if (req.ToUserAccounts == null || req.ToUserAccounts.Length <= 0) return ApiResult.Failed("操作失败,未选择抄送人!");
var userList = Db.Queryable<UcLogin>().Where(t => t.Locked == "F").In(t => t.OpId, req.ToUserAccounts).ToList().Replace();
if (userList.Count != req.ToUserAccounts.Length)
{
List<string> notUser = new List<string>();
for (int i = 0; i < req.ToUserAccounts.Length; i++)
{
var _userList = userList.Select(t => t.OpId).ToList();
if (!_userList.Contains(req.ToUserAccounts[i]))
{
notUser.Add(req.ToUserAccounts[i]);
}
}
if (notUser.Count > 0) return ApiResult.Failed($"操作失败,用户[{string.Join(",", notUser)}]不存在!");
}
List<ApptAuditLog> ls = new List<ApptAuditLog>();
for (int i = 0; i < req.ToUserAccounts.Length; i++)
{
ls.Add(new ApptAuditLog()
{
Type = 2,
CreateTime = now,
UserId = req.ToUserAccounts[i],
ApptId = req.ApptId,
AuditorStatus = 3,
Remark = string.Empty,
Source = loginUserRes.Info.UserAccount
});
}
if (ls.Count > 0) InsertRange(ls);
return ApiResult.Success(string.Empty);
}
/// <summary>
/// 获取实体
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public ApiResult<ApptSummaryReq> GetModel(int id)
{
ApptSummaryReq result = new ApptSummaryReq();
var apptSum = Db.Queryable<ApptSummary>().Where(t => t.Id == id).First();
if (apptSum == null) return ApiResult<ApptSummaryReq>.Success(string.Empty, null);
result.Id = apptSum.Id.Value;
result.BuyerName = apptSum.BuyerName;
result.BuyerAddress = apptSum.BuyerAddress;
result.BuyerTitle = apptSum.BuyerTitle;
result.LeaderName = apptSum.LeaderName;
result.LeaderMobile = apptSum.LeaderMobile;
result.LeaderRoom = apptSum.LeaderRoom;
result.RoomRemark = apptSum.RoomRemark;
result.CateringRemark = apptSum.CateringRemark;
result.SpringRemark = apptSum.SpringRemark;
result.UserId = apptSum.UserId;
result.AuditorStatus = apptSum.AuditorStatus;
result.CreateTime = apptSum.CreateTime.Value;
result.AccountDES = string.Empty;
var ls = new List<ApptSummaryReq>();
ls.Add(result);
var dt = new BaseRepo().FormatApptSummaryReq(ls);
if (dt.Count > 0)
{
return ApiResult<ApptSummaryReq>.Success(string.Empty, dt[0]);
}
else
{
return ApiResult<ApptSummaryReq>.Success(string.Empty, result);
}
}
/// <summary>
/// 我发起的预订列表
/// </summary>
/// <param name="req"></param>
/// <returns></returns>
public ApiResult<PagerData<ApptSummaryReq>> MyApptApplyPageReq(MyApptApplyPageReq req)
{
int total = 0;
var reList = new PagerData<ApptSummaryReq>()
{
PageIndex = req.PageIndex,
PageSize = req.PageSize,
Total = total,
Data = new List<ApptSummaryReq>()
};
var loginUserRes = BaseRepo.DECLoginInfo(req.AccountDES);
if (!loginUserRes.IsSuccess) return ApiResult<PagerData<ApptSummaryReq>>.Failed(loginUserRes.Msg);
int auditorStatus = req.AuditorStatus == null ? 0 : req.AuditorStatus.Value;
var _summarys = Db.Queryable<ApptSummary>()
.Where(t => t.UserId == loginUserRes.Info.UserAccount)
.WhereIF(auditorStatus == 1, t => t.AuditorStatus == (int)EnumAuditorStatus.审核中)
.WhereIF(auditorStatus == 2, t => t.AuditorStatus == (int)EnumAuditorStatus.审核通过)
.WhereIF(auditorStatus == 3, t => t.AuditorStatus == (int)EnumAuditorStatus.驳回)
.WhereIF(auditorStatus == 6, t => t.AuditorStatus == (int)EnumAuditorStatus.取消)
.OrderBy(t => t.Id, OrderByType.Desc)
.Select(p => new ApptSummaryReq()
{
Id = p.Id.Value,
AccountDES = string.Empty,
BuyerName = p.BuyerName,
BuyerAddress = p.BuyerAddress,
BuyerTitle = p.BuyerTitle,
LeaderName = p.LeaderName,
LeaderMobile = p.LeaderMobile,
LeaderRoom = p.LeaderRoom,
RoomRemark = p.RoomRemark,
MeetingRemark = p.MeetingRemark,
CateringRemark = p.CateringRemark,
SpringRemark = p.SpringRemark,
UserId = p.UserId,
AuditorStatus = p.AuditorStatus,
CreateTime = p.CreateTime.Value,
})
.ToPageList(req.PageIndex, req.PageSize, ref total);
if (_summarys.Count == 0) return ApiResult<PagerData<ApptSummaryReq>>.Success(string.Empty, reList);
reList.Total = total;
reList.Data = new BaseRepo().FormatApptSummaryReq(_summarys).Replace();
for (int i = 0; i < reList.Data.Count; i++)
{
if (reList.Data[i].AuditorStatus == (int)EnumAuditorStatus.驳回)
{
var log = Db.Queryable<ApptAuditLog>()
.Where(t => t.ApptId == reList.Data[i].Id && t.Type == 1 && t.AuditorStatus == 0)
.First();
if (log != null)
{
reList.Data[i].RebutRemark = log.Remark;
}
}
}
List<string> users = reList.Data.Select(t => t.UserId).ToList();
var userList = Db.Queryable<UcLogin>().Where(t => t.Locked == "F" && users.Contains(t.OpId)).ToList();
var saleList = Db.Queryable<Saleid>().ToList();
UcLogin ucLogin = null;
Saleid saleid = null;
reList.Data.ForEach(t =>
{
ucLogin = userList.Where(it => it.OpId == t.UserId).FirstOrDefault();
if (ucLogin != null)
{
t.SaleName = ucLogin.OpName;
t.SalePhone = ucLogin.Mobile;
saleid = saleList.Where(it => it.Id == ucLogin.Saleid).FirstOrDefault();
if (saleid != null) t.SaleName = saleid.Name;
}
});
return ApiResult<PagerData<ApptSummaryReq>>.Success(string.Empty, reList);
}
/// <summary>
/// 和我关联的预订(我审核的、我有权审核的、我抄送的、抄送给我的)
/// </summary>
/// <param name="req"></param>
/// <returns></returns>
public ApiResult<PagerData<ApptSummaryReq>> MyPartakePage(MyApptAuditPageReq req)
{
int total = 0;
PagerData<ApptSummaryReq> pager = new PagerData<ApptSummaryReq>()
{
PageIndex = req.PageIndex,
PageSize = req.PageSize,
Total = total,
Data = new List<ApptSummaryReq>()
};
var loginUserRes = BaseRepo.DECLoginInfo(req.AccountDES);
if (!loginUserRes.IsSuccess) return ApiResult<PagerData<ApptSummaryReq>>.Failed(loginUserRes.Msg);
ISugarQueryable<ApptSummary> summarys = Db.Queryable<ApptSummary>();
if (req.AuditorStatus == 0)
{
var auditApptId = Db.Queryable<ApptAuditLog>()
.Where(t => t.Type == 1 && t.UserId == loginUserRes.Info.UserAccount && t.AuditorStatus != (int)EnumAuditorStatus.取消)
.Select(t => t.ApptId).ToList();
summarys.In(t => t.Id, auditApptId);
}
else if (req.AuditorStatus == 1)
{
var auditorIds = Db.Queryable<ApptAuditor>().Where(t => t.OpGroup == loginUserRes.Info.UserGroup).Select(t => t.Id).ToList();
//if (auditorIds.Count == 0) return ApiResult<PagerData<ApptSummaryReq>>.Success("没有要审核的预订", pager);
summarys.Where(t => t.AuditorStatus == (int)EnumAuditorStatus.审核中).Where(t => auditorIds.Contains(t.AuditorId.Value) || t.TransferAudit == loginUserRes.Info.UserAccount);
}
else if (req.AuditorStatus == 2)
{
var auditApptId = Db.Queryable<ApptAuditLog>().Where(t => t.Type == 2 && t.Source == loginUserRes.Info.UserAccount).Select(t => t.ApptId).ToList();
summarys.In(t => t.Id, auditApptId);
}
else if (req.AuditorStatus == 3)
{
var auditApptId = Db.Queryable<ApptAuditLog>().Where(t => t.Type == 2 && t.UserId == loginUserRes.Info.UserAccount).Select(t => t.ApptId).ToList();
summarys.In(t => t.Id, auditApptId);
}
else
{
return ApiResult<PagerData<ApptSummaryReq>>.Failed("操作失败,无效的审核状态参数!");
}
var _summarys = summarys.OrderBy(t => t.Id, OrderByType.Desc)
.Select(p => new ApptSummaryReq()
{
Id = p.Id.Value,
AccountDES = string.Empty,
BuyerName = p.BuyerName,
BuyerAddress = p.BuyerAddress,
BuyerTitle = p.BuyerTitle,
LeaderName = p.LeaderName,
LeaderMobile = p.LeaderMobile,
LeaderRoom = p.LeaderRoom,
RoomRemark = p.RoomRemark,
MeetingRemark = p.MeetingRemark,
CateringRemark = p.CateringRemark,
SpringRemark = p.SpringRemark,
UserId = p.UserId,
AuditorStatus = p.AuditorStatus,
CreateTime = p.CreateTime.Value,
})
.ToPageList(req.PageIndex, req.PageSize, ref total);
if (_summarys.Count == 0) return ApiResult<PagerData<ApptSummaryReq>>.Success(string.Empty, pager);
pager.Total = total;
pager.Data = new BaseRepo().FormatApptSummaryReq(_summarys).Replace();
for (int i = 0; i < pager.Data.Count; i++)
{
if (pager.Data[i].AuditorStatus == (int)EnumAuditorStatus.驳回)
{
var log = Db.Queryable<ApptAuditLog>()
.Where(t => t.ApptId == pager.Data[i].Id && t.Type == 1 && t.AuditorStatus == 0)
.First();
if (log != null)
{
pager.Data[i].RebutRemark = log.Remark;
}
}
}
List<string> users = pager.Data.Select(t => t.UserId).ToList();
var userList = Db.Queryable<UcLogin>().Where(t => t.Locked == "F" && users.Contains(t.OpId)).ToList().Replace();
var saleList = Db.Queryable<Saleid>().ToList().Replace();
UcLogin ucLogin = null;
Saleid saleid = null;
pager.Data.ForEach(t =>
{
_logger.Debug("测试:userList==" + Newtonsoft.Json.JsonConvert.SerializeObject(userList));
_logger.Debug("测试:UserId==" + t.UserId);
ucLogin = userList.Where(it => it.OpId == t.UserId).FirstOrDefault();
if (ucLogin != null)
{
t.SaleName = ucLogin.OpName;
t.SalePhone = ucLogin.Mobile;
saleid = saleList.Where(it => it.Id == ucLogin.Saleid).FirstOrDefault();
if (saleid != null) t.SaleName = saleid.Name;
}
});
return ApiResult<PagerData<ApptSummaryReq>>.Success(string.Empty, pager);
}
/// <summary>
/// 获取预订审核记录表
/// </summary>
/// <param name="req"></param>
/// <returns></returns>
public ApiResult<AuditorLogTreeRes> AuditorLogTree(CommIntReq req)
{
if (req.IntValue == null) return ApiResult<AuditorLogTreeRes>.Failed("参数无效");
AuditorLogTreeRes auditorLogTreeRes = new AuditorLogTreeRes();
var summaryModel = GetById<ApptSummary>(req.IntValue.Value);
if (summaryModel == null) return ApiResult<AuditorLogTreeRes>.Failed("数据不存在");
auditorLogTreeRes.Id = summaryModel.Id.Value;
auditorLogTreeRes.CreateTime = summaryModel.CreateTime.Value;
auditorLogTreeRes.SaleName = summaryModel.SaleName;
var list = Db.Queryable<ApptAuditLog, UcLogin>((a, u) => new JoinQueryInfos(
JoinType.Left, a.UserId == u.OpId
))
.Where((a, u) => a.Type == 1 && a.ApptId == req.IntValue.Value)
.OrderBy((a, u) => a.CreateTime, OrderByType.Asc)
.Select((a, u) => new AudioLogRes()
{
Id = a.Id,
CreateTime = a.CreateTime,
UserName = "审核人:" + u.OpName,
Status = a.AuditorStatus,
Remark = a.Remark
}).ToList();
if (summaryModel.AuditorStatus == (int)EnumAuditorStatus.审核中)
{
if (summaryModel.AuditorId > 0)
{
var auditorMo = GetById<ApptAuditor>(summaryModel.AuditorId);
if (auditorMo != null)
{
var userList = Db.Queryable<UcLogin>().Where(t => t.OpGroup == auditorMo.OpGroup).Select(t => t.OpName).ToList();
userList = userList.Replace();
for (int i = 0; i < userList.Count; i++)
{
userList[i] = "【" + userList[i] + "】";
}
var users = $"待审核人:{string.Join(",", userList)}";
list.Add(new AudioLogRes()
{
Id = 0,
CreateTime = null,
UserName = users,
Status = 3,
Remark = string.Empty
});
}
}
else if (!string.IsNullOrEmpty(summaryModel.TransferAudit))
{
var userM = Db.Queryable<UcLogin>().Where(t => t.OpId == summaryModel.TransferAudit).First();
if (userM != null)
{
userM = userM.Replace();
list.Add(new AudioLogRes()
{
Id = 0,
CreateTime = null,
UserName = "审核人:" + userM.OpName,
Status = 3,
Remark = string.Empty
});
}
}
}
else if (summaryModel.AuditorStatus == (int)EnumAuditorStatus.作废)
{
var sumM = Db.Queryable<ApptSummary>()
.Where(t => t.Pid == summaryModel.Id).First();
if (sumM != null)
{
list.Add(new AudioLogRes()
{
Id = 0,
CreateTime = sumM.CreateTime,
UserName = "审核人:" + summaryModel.SaleName,
Status = (int)EnumAuditorStatus.作废,
Remark = string.Empty
});
}
var appS = Db.Queryable<ApptSummary>().Where(t => t.Pid == summaryModel.Id).First();
if (appS != null)
{
auditorLogTreeRes.NewName = appS.BuyerTitle;
}
}
auditorLogTreeRes.AudioLogList = list;
return ApiResult<AuditorLogTreeRes>.Success(string.Empty, auditorLogTreeRes);
}
public ApiResult Demo(CommPageReq req)
{
var summary = GetDataModel(1);
SetMsgAuditing(1, 1, "85217777");
SetMsgaudited("oGHnajgL33R4afH_emyTIe4B54hg", EnumAuditorStatus.审核通过, "85217777", "DDDD");
return null;
}
// ---- 私有方法
private ApiResult<ApptSummary> GetDataModel(int id)
{
var summary = Db.Queryable<ApptSummary>()
.Where(t => t.Id == id)
.Mapper((sum) =>
{
sum.ApptRoomList = Db.Queryable<ApptRoom>()
.Where(t => t.ApptId == sum.Id).ToList();
sum.ApptMeetingList = Db.Queryable<ApptMeeting>()
.Where(t => t.ApptId == sum.Id).ToList();
sum.ApptCateringList = Db.Queryable<ApptCatering>()
.Where(t => t.ApptId == sum.Id).ToList();
sum.ApptSpringList = Db.Queryable<ApptSpring>()
.Where(t => t.ApptId == sum.Id).ToList();
sum.ApptRemarks = Db.Queryable<ApptRemark>()
.Where(t => t.ApptId == sum.Id).ToList();
}).First();
if (summary == null) return ApiResult<ApptSummary>.Failed("操作失败,不存在的数据");
return ApiResult<ApptSummary>.Success(string.Empty, summary);
}
/// <summary>
/// 预订信息入正式表
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
private ApiResult InAppt(int id)
{
var appt = GetDataModel(id);
if (!appt.IsSuccess) return ApiResult.Failed(appt.Msg);
if (appt.Info == null) return ApiResult.Failed("生成正式预订失败,数据不存在!");
if (appt.Info == null || appt.Info.AuditorStatus == (int)EnumAuditorStatus.审核通过) return ApiResult.Success(string.Empty);
if (appt.Info.AuditorStatus == (int)EnumAuditorStatus.驳回) return ApiResult.Failed("生成正式预订失败,该预订为驳回状态!");
if (appt.Info.AuditorId != 0) return ApiResult.Failed("生成正式预订失败,请等待上级审核!");
DateTime now = DateTime.Now;
var userList = Db.Queryable<UcLogin>().ToList().Replace();
var user = userList.Where(t => t.OpId == appt.Info.UserId).FirstOrDefault();
if (user == null && user.Locked == "T") return ApiResult.Failed("生成正式预订失败,提交人不存在!");
// 创建团队
string gname = $"{appt.Info.BuyerName}"; // 团队名称
if (gname.Length > 10)
{
gname = gname.Substring(0, 10);
}
string leader = appt.Info.LeaderName; //领队或导游或联系人
string phone = appt.Info.LeaderMobile; //领队电话
DateTime arr = DateTime.MinValue; // 抵达时间 日期和时间,如2019-01-17 18:00:00
DateTime dep = DateTime.MinValue; // 离开时间 日期和时间,如2019-01-18 14:00:00
int rooms = 0; // 团队总共的房间数备注(只是备注,不占用房间)
int guests = 0; //团队的总人数备注(只是备注,不占用房间)
string remark = appt.Info.UserId + "预订"; //团队主单备注
string log_id = appt.Info.UserId; // 操作员工号(如果操作员没有软件的工号,第三方可以在迪联软件中创建一个通用的工号
string log_ip = ""; //操作电脑或者接口电脑的IP,可以用空字符串或者任意字符串
string saleid = user.Saleid; // 销售员工号,在迪联软件销售菜单下可以打开销售员设置,查看销售员的工号,可以为空字符换
DateTime minTime = DateTime.MinValue;
if (appt.Info.ApptRoomList != null && appt.Info.ApptRoomList.Count > 0)
{
var tempMin = appt.Info.ApptRoomList.Where(t => t.RoomIn != null && t.RoomIn > minTime).Min(t => t.RoomIn);
if (tempMin != null) arr = tempMin;
var tempMax = appt.Info.ApptRoomList.Where(t => t.RoomOut != null && t.RoomOut > minTime).Max(t => t.RoomOut);
if (tempMax != null) dep = tempMax;
rooms = appt.Info.ApptRoomList.Sum(t => t.RoomNum);
int breakfastNum = appt.Info.ApptRoomList.Sum(t => t.BreakfastNum);
if (breakfastNum > 0)
{
guests = breakfastNum;
}
else
{
guests = rooms;
}
}
else if (appt.Info.ApptMeetingList != null && appt.Info.ApptMeetingList.Count > 0)
{
arr = appt.Info.ApptMeetingList.Min(t => t.MeetingTime);
dep = appt.Info.ApptMeetingList.Max(t => t.MeetingTime);
if (arr == dep)
{
dep = dep.AddDays(1);// 创建团队预订时,离开日期不应该早于到达日期,所以必须不在同一天,
}
guests = appt.Info.ApptMeetingList.Sum(t => t.MeetingNum);
}
else if (appt.Info.ApptSpringList != null && appt.Info.ApptSpringList.Count > 0)
{
arr = appt.Info.ApptSpringList.Min(t => t.SpringTime);
dep = appt.Info.ApptSpringList.Max(t => t.SpringTime);
if (arr == dep)
{
dep = dep.AddDays(1);
}
}
else if (appt.Info.ApptCateringList != null && appt.Info.ApptCateringList.Count > 0)
{
arr = appt.Info.ApptCateringList.Min(t => t.CateringTime);
dep = appt.Info.ApptCateringList.Max(t => t.CateringTime);
if (arr == dep)
{
dep = dep.AddDays(1);
}
}
if (arr == minTime || dep == minTime) return ApiResult.Failed("生成正式预订失败,抵离时间不允许为空!");
if (arr > dep) return ApiResult.Failed("生成正式预订失败,离开日期必须大于入住日期!");
try
{
Db.Ado.BeginTran();
// 创建团队
string grpno = string.Empty;
var dt = Db.Ado.UseStoredProcedure().GetDataTable("p_yyj_grpadd_inter", new { gname, leader, phone, arr, dep, rooms, guests, remark, log_id, log_ip, saleid });
if (dt.Rows.Count > 0 && dt.Rows[0][0] != null && dt.Rows[0][0].ToString() == "1")
{
string msg = $"创建团队失败,失败原因:{dt.Rows[0][1]}";
_logger.Error(msg);
return ApiResult.Failed(msg);
}
else if (dt.Rows.Count > 0 && dt.Rows[0][0] != null && dt.Rows[0][0].ToString() == "0")
{ }
else
{
return ApiResult.Failed("创建团队失败");
}
grpno = dt.Rows[0][1].ToString().Trim();
if (appt.Info.ApptMeetingList != null && appt.Info.ApptMeetingList.Count > 0)
{
foreach (var item in appt.Info.ApptMeetingList)
{
string accnt = grpno; // 团队账号(创建团队时获得)
if (item.MeetingTime == null)
{
Db.Ado.RollbackTran();
return ApiResult.Failed($"生成正式预订失败,会议预订[{item.MeetingRoom}]日期不可能空!");
}
// 会议预订的日期 只要日期不需要时分秒
DateTime date = new DateTime(item.MeetingTime.Year, item.MeetingTime.Month, item.MeetingTime.Day);
if (string.IsNullOrWhiteSpace(item.MeetingCode)) continue;
string rescode = item.MeetingCode; // 会议室编号,可以从迪联软件查看,或者res_code表取对照code字段
//int sfield = item.MeetingGroup; // 场次, 0代表全天 1上午场 2下午场 3晚场
int sfield = 0;
decimal price = item.MeetingPrice; // 价格。可以从迪联软件查看,或者res_code表取price字段,该字段为预设参考价,具体订单价格以该参数为准。
string op_id = appt.Info.UserId; // 操作员工号(如果操作员没有软件的工号,第三方可以在迪联软件中创建一个通用的工号
dt = Db.Ado.UseStoredProcedure().GetDataTable("p_yyj_grpmeet_inter", new { accnt, date, rescode, sfield, price, op_id });
if (dt.Rows.Count > 0 && dt.Rows[0][0] != null && dt.Rows[0][0].ToString() == "1")
{
string msg = $"创建团队失败,失败原因:{dt.Rows[0][1]}";
_logger.Error(msg);
return ApiResult.Failed(msg);
}
}
}
if (appt.Info.ApptRoomList != null && appt.Info.ApptRoomList.Count > 0)
{
foreach (var item in appt.Info.ApptRoomList)
{
log_id = appt.Info.UserId; // 操作员工号(如果操作员没有软件的工号,第三方可以在迪联软件中创建一个通用的工号)
log_ip = ""; // 操作电脑或者接口电脑的IP,可以用空字符串或者任意字符串
if (item.RoomIn == null)
{
Db.Ado.RollbackTran();
return ApiResult.Failed($"生成正式预订失败,客房预订[{item.RoomGroup}]抵达日期不可能空!");
}
arr = new DateTime(item.RoomIn.Year, item.RoomIn.Month, item.RoomIn.Day); // 抵达日期 只要日期不需要时分秒
if (item.RoomOut == null)
{
Db.Ado.RollbackTran();
return ApiResult.Failed($"生成正式预订失败,客房预订[{item.RoomGroup}]离开日期不可能空!");
}
dep = new DateTime(item.RoomOut.Year, item.RoomOut.Month, item.RoomOut.Day); // 离开日期 只要日期不需要时分秒
if (string.IsNullOrWhiteSpace(item.RoomCode)) continue;
string type = item.RoomCode; // 房类代码,如BJ,请查看迪联酒店系统中房类的设置
rooms = item.RoomNum; // 预留的数量,此为真实数量,如果超过酒店可用数会返回错误信息
decimal price = item.RoomPrice; // 房价
guests = 1; // 一个房间住几个人,默认为1
remark = item.RoomRemark; // 该预留的备注,排房时可以看到此备注
string rmcode = "RACK"; // 请按照默认的RACK填写,此为房价码
dt = Db.Ado.UseStoredProcedure().GetDataTable("p_yyj_gblock_inter", new { log_id, log_ip, grpno, arr, dep, type, rooms, price, guests, remark, rmcode });
if (dt.Rows.Count > 0 && dt.Rows[0][0] != null && dt.Rows[0][0].ToString() == "1")
{
string msg = $"创建团队失败,失败原因:{dt.Rows[0][1]}";
_logger.Error(msg);
return ApiResult.Failed(msg);
}
}
}
var model = GetById<ApptSummary>(appt.Info.Id);
string oldData = JsonConvert.SerializeObject(model);
if (model == null)
{
return ApiResult.Failed("生成正式预订失败,预订信息不存在!");
}
model.AuditorStatus = (int)EnumAuditorStatus.审核通过;
Update(model);
string newData = JsonConvert.SerializeObject(model);
_ApptLog.SetLog("appt_summary", appt.Info.Id.ToString(), oldData, newData, null);
Db.Ado.CommitTran();
}
catch (Exception ex)
{
Db.Ado.RollbackTran();
_logger.Error(ex);
throw new Exception(ex.Message);
}
/* 自动抄送 */
List<UcLogin> toSend = userList.Where(t => !SqlFunc.IsNullOrEmpty(t.Autosendcond) && t.Autosendcond.Contains("#所有部门#")).ToList();
if (appt.Info.ApptRoomList != null && appt.Info.ApptRoomList.Count > 0)
{
var sendTemp = userList.Where(t => !SqlFunc.IsNullOrEmpty(t.Autosendcond) && t.Autosendcond.Contains("#客房#")).ToList();
foreach (var item in sendTemp)
{
if (toSend.Where(t => t.OpId == item.OpId).Count() == 0)
{
toSend.Add(item);
}
}
}
if (appt.Info.ApptMeetingList != null && appt.Info.ApptMeetingList.Count > 0)
{
var sendTemp = userList.Where(t => !SqlFunc.IsNullOrEmpty(t.Autosendcond) && t.Autosendcond.Contains("#会议#")).ToList();
foreach (var item in sendTemp)
{
if (toSend.Where(t => t.OpId == item.OpId).Count() == 0)
{
toSend.Add(item);
}
}
}
if (appt.Info.ApptCateringList != null && appt.Info.ApptCateringList.Count > 0)
{
var sendTemp = userList.Where(t => !SqlFunc.IsNullOrEmpty(t.Autosendcond) && t.Autosendcond.Contains("#餐饮#")).ToList();
foreach (var item in sendTemp)
{
if (toSend.Where(t => t.OpId == item.OpId).Count() == 0)
{
toSend.Add(item);
}
}
}
if (appt.Info.ApptSpringList != null && appt.Info.ApptSpringList.Count > 0)
{
var sendTemp = userList.Where(t => !SqlFunc.IsNullOrEmpty(t.Autosendcond) && t.Autosendcond.Contains("#温泉#")).ToList();
foreach (var item in sendTemp)
{
if (toSend.Where(t => t.OpId == item.OpId).Count() == 0)
{
toSend.Add(item);
}
}
}
if (appt.Info.ApptRemarks != null && appt.Info.ApptRemarks.Count > 0)
{
foreach (var item in appt.Info.ApptRemarks)
{
if (!string.IsNullOrEmpty(item.Info))
{
var sendTemp = userList.Where(t => !SqlFunc.IsNullOrEmpty(t.Autosendcond) && t.Autosendcond.Contains($"#{item.Title}#")).ToList();
foreach (var _item in sendTemp)
{
if (toSend.Where(t => t.OpId == _item.OpId).Count() == 0)
{
toSend.Add(_item);
}
}
}
}
}
if (toSend.Count > 0)
{
List<ApptAuditLog> apptAuditLogs = new List<ApptAuditLog>();
foreach (var item in toSend)
{
apptAuditLogs.Add(new ApptAuditLog()
{
Type = 2,
CreateTime = now,
UserId = item.OpId,
ApptId = appt.Info.Id.Value,
AuditorStatus = 3,
Remark = string.Empty,
Source = string.Empty
});
if (!string.IsNullOrEmpty(item.WxServiceId))
{
SetCopyMsg(item.WxServiceId);
}
}
InsertRange(apptAuditLogs);
}
return ApiResult.Success(string.Empty);
}
/// <summary>
/// 向审核人员发送审核消息
/// </summary>
/// <param name="apptId"></param>
/// <param name="auditorId"></param>
/// <param name="hotelid">酒店id</param>
/// <returns></returns>
private void SetMsgAuditing(int apptId, int auditorId, string hotelid)
{
try
{
string AppId = BaseConfig.App(new string[] { "WeChatService", "AppId" });
var apptSummary = Db.Queryable<ApptSummary>().Where(t => t.Id == apptId && t.AuditorStatus == (int)EnumAuditorStatus.审核中).First();
if (apptSummary == null) return;
var auditorModel = GetById<ApptAuditor>(auditorId);
if (auditorModel != null)
{
var userList = Db.Queryable<UcLogin>().Where(t => t.OpGroup == auditorModel.OpGroup && !SqlFunc.IsNullOrEmpty(t.WxServiceId)).Select(t => t.WxServiceId).ToList();
if (userList != null && userList.Count > 0)
{
if (AppId == "wx1f646438a23bd3bc")
{
List<string> keydows = new List<string>();
keydows.Add($"OA预订:{apptSummary.BuyerTitle}");
keydows.Add(apptSummary.CreateTime.Value.ToString("yyyy-MM-dd HH:mm"));
string first = "OA预约待审核";
AizhuhotelHelper.SendTemplateMsg(userList, "DYuAAPUkuy5BCRmZ4jAfsIBuT5_xsisVIFD3nnL9MdA", "pages/index/index?status=2&hotelid=oatest", first, "", keydows);
}
else
{
string template_id = BaseConfig.App(new string[] { "SendTemplateMsgAuditing", "template_id" });
string first = BaseConfig.App(new string[] { "SendTemplateMsgAuditing", "first" });
string remark = BaseConfig.App(new string[] { "SendTemplateMsgAuditing", "remark" });
string url = BaseConfig.App(new string[] { "SendTemplateMsgAuditing", "url" });
url += $"&hotelid={hotelid}";
string[] keydows = new[] { "新预订:" + apptSummary.BuyerTitle, apptSummary.CreateTime.Value.ToString("yyyy-MM-dd HH:mm") };
AizhuhotelHelper.SendTemplateMsg(userList, template_id, url, first, remark, keydows);
}
}
}
}
catch (Exception)
{ }
}
/// <summary>
/// 转审批
/// </summary>
/// <param name="wxSericeOpenId"></param>
/// <param name="auditorId"></param>
/// <param name="hotelid"></param>
private void TransferAuditMsg(int wxSericeOpenId, string auditorId, string hotelid)
{
try
{
string AppId = BaseConfig.App(new string[] { "WeChatService", "AppId" });
var apptSummary = Db.Queryable<ApptSummary>().Where(t => t.Id == wxSericeOpenId && t.AuditorStatus == (int)EnumAuditorStatus.审核中).First();
if (apptSummary == null) return;
var auditorModel = GetById<ApptAuditor>(auditorId);
if (auditorModel != null)
{
var userList = new List<string>() { auditorId };
if (userList != null && userList.Count > 0)
{
if (AppId == "wx1f646438a23bd3bc")
{
// 爱住网
List<string> keydows = new List<string>();
keydows.Add($"OA预订:{apptSummary.BuyerTitle}");
keydows.Add(apptSummary.CreateTime.Value.ToString("yyyy-MM-dd HH:mm"));
string first = "OA预约待审核";
AizhuhotelHelper.SendTemplateMsg(userList, "DYuAAPUkuy5BCRmZ4jAfsIBuT5_xsisVIFD3nnL9MdA", "pages/index/index?status=2&hotelid=oatest", first, "", keydows.ToArray());
}
else
{
string template_id = BaseConfig.App(new string[] { "SendTemplateMsgAuditing", "template_id" });
string first = BaseConfig.App(new string[] { "SendTemplateMsgAuditing", "first" });
string remark = BaseConfig.App(new string[] { "SendTemplateMsgAuditing", "remark" });
string url = BaseConfig.App(new string[] { "SendTemplateMsgAuditing", "url" });
url += $"&hotelid={hotelid}";
string[] keydows = new[] { "新预订:" + apptSummary.BuyerTitle, apptSummary.CreateTime.Value.ToString("yyyy-MM-dd HH:mm") };
AizhuhotelHelper.SendTemplateMsg(userList, template_id, url, first, remark, keydows);
}
}
}
}
catch (Exception)
{ }
}
/// <summary>
/// 审核通过向提交人发送信息
/// </summary>
/// <param name="wxSericeOpenId"></param>
/// <param name="auditorStatus"></param>
/// <param name="hotelid"></param>
/// <param name="title"></param>
/// <param name="reason"></param>
/// <param name="auditer"></param>
private void SetMsgaudited(string wxSericeOpenId, EnumAuditorStatus auditorStatus, string hotelid, string title, string reason = "", string auditer = "")
{
if (string.IsNullOrEmpty(wxSericeOpenId)) return;
try
{
List<string> user = new List<string>() { wxSericeOpenId };
List<string> keydows = new List<string>();
if (auditorStatus == EnumAuditorStatus.审核通过)
{
keydows.Add("预订审核通过");
}
else if (auditorStatus == EnumAuditorStatus.驳回)
{
keydows.Add("预订被驳回");
}
else
{
keydows.Add("预订有变更");
}
keydows.Add(DateTime.Now.ToString("yyyy-MM-dd HH:mm"));
string AppId = BaseConfig.App(new string[] { "WeChatService", "AppId" });
if (AppId == "wx1f646438a23bd3bc")
{
// 爱住网
string[] keydowsArr = new[] { $"OA预订:{title}", auditorStatus.ToString(), reason, auditer };
AizhuhotelHelper.SendTemplateMsg(user, "26IpDf3ii9pSO7SJrQfpevbc_VMqatiGi0PguHuG-Cc", "pages/index/index?status=3&hotelid=oatest", "OA预约审核结果", "", keydowsArr);
}
else
{
string template_id = BaseConfig.App(new string[] { "SendTemplateMsgAudited", "template_id" });
string url = BaseConfig.App(new string[] { "SendTemplateMsgAudited", "url" });
url += $"&hotelid={hotelid}";
string first = BaseConfig.App(new string[] { "SendTemplateMsgAudited", "first" });
string remark = BaseConfig.App(new string[] { "SendTemplateMsgAudited", "remark" });
AizhuhotelHelper.SendTemplateMsg(user, template_id, url, first, remark, keydows.ToArray());
}
}
catch (Exception)
{ }
}
/// <summary>
/// 抄送 消息模板
/// </summary>
/// <param name="wxSericeOpenId">接收人程序openid</param>
private void SetCopyMsg(string wxSericeOpenId)
{
try
{
string AppId = BaseConfig.App(new string[] { "WeChatService", "AppId" });
if (AppId == "wx3f193488e04b2ed8")
{
// 江南春
List<string> keydows = new List<string>();
keydows.Add("收到一条新的OA预定抄送");
keydows.Add(DateTime.Now.ToString("yyyy-MM-dd HH:mm"));
var first = "您收到一条新的OA预定抄送";
var remark = "点击查看结果";
AizhuhotelHelper.SendTemplateMsg(wxSericeOpenId, "G1L7IvGNZGmSKlgsiYNr1iDtGLLVJ8ZKAKDB525HEA0", "pages/index/index?status=6&hotelid=85217777", first, remark, keydows.ToArray());
}
else if (AppId == "wx2b6e92e9e0c6025f")
{
// 香堤湾
List<string> keydows = new List<string>();
keydows.Add("收到一条新的OA预定抄送");
keydows.Add(DateTime.Now.ToString("yyyy-MM-dd HH:mm"));
var first = "您收到一条新的OA预定抄送";
var remark = "点击查看结果";
AizhuhotelHelper.SendTemplateMsg(wxSericeOpenId, "G1L7IvGNZGmSKlgsiYNr1iDtGLLVJ8ZKAKDB525HEA0", "pages/index/index?status=6&hotelid=85216666", first, remark, keydows.ToArray());
}
else if (AppId == "wx1f646438a23bd3bc")
{
// 爱住网
List<string> keydows = new List<string>();
keydows.Add("收到一条新的OA预定抄送");
keydows.Add(DateTime.Now.ToString("yyyy-MM-dd HH:mm"));
var first = "您收到一条新的OA预定抄送";
var remark = "点击查看结果";
AizhuhotelHelper.SendTemplateMsg(wxSericeOpenId, "DYuAAPUkuy5BCRmZ4jAfsIBuT5_xsisVIFD3nnL9MdA", "pages/index/index?status=6&hotelid=oatest", first, remark, keydows.ToArray());
}
}
catch (Exception ex)
{
_logger.Error(ex.ToString());
}
}
}
}