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
{
///
/// 标准预订业务
///
public class ApptRepo : DbContext, IApptRepo
{
private readonly log4net.ILog _logger = log4net.LogManager.GetLogger(typeof(ApptRepo));
IApptLogRepo _ApptLog;
public ApptRepo(IApptLogRepo apptLog)
{
_ApptLog = apptLog;
}
// ---- 会议室
///
/// 可用会议室资源列表
///
///
///
public ApiResult> UsableMeetingList(MeetingReq req)
{
var loginUserRes = BaseRepo.DECLoginInfo(req.AccountDES);
if (!loginUserRes.IsSuccess) return ApiResult>.Failed(loginUserRes.Msg);
if (req.StartDay == DateTime.MinValue) return ApiResult>.Failed("操作失败,[StartTime]不正确!");
req.StartDay = new DateTime(req.StartDay.Year, req.StartDay.Month, req.StartDay.Day);
if (req.EndDay == DateTime.MinValue) return ApiResult>.Failed("操作失败,[EndTime]不正确!");
var endd = req.EndDay.AddDays(1);
req.EndDay = new DateTime(endd.Year, endd.Month, endd.Day);
var ls = Db.Queryable((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 reList = new List();
var resCode = Db.Queryable()
.Where(t => t.Sort == "A" && t.Sta == "T").OrderBy(t => t.Code, OrderByType.Asc).ToList().Replace();
if (resCode == null || resCode.Count == 0) return ApiResult>.Success(string.Empty);
int days = (req.EndDay - req.StartDay).Days;
/* 封装暂订单数量 */
var zy = Db.Queryable().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((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().Where(t => meets.Select(t => t.ApptId).Contains(t.Id)).Select(t => t.Guid).ToList();
//var _inSumGuid = Db.Queryable().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();
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();
meetingStatus.MeetingNums.Add(meetingNum);
}
meetingStatus.Status = st;
meetingRes.DayStatus.Add(meetingStatus);
curDay = curDay.AddDays(1);
}
reList.Add(meetingRes);
}
return ApiResult>.Success(string.Empty, reList);
}
///
/// 当天可用会议室资源
///
///
///
public ApiResult> UsableMeeting(UsableMeetingReq req)
{
// 获取会议室列表
var resCodeList = Db.Queryable().Where(t => t.Sort == "A").OrderBy(t => t.Code, OrderByType.Asc).ToList();
if (resCodeList == null || resCodeList.Count == 0) return ApiResult>.Success(string.Empty);
// 获取占用的会议室
req.Day = new DateTime(req.Day.Year, req.Day.Month, req.Day.Day);
ISugarQueryable sugar = Db.Queryable().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 list = new List();
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>.Success(string.Empty, list);
}
// ---- 客房
///
/// 可用客房资源列表
///
///
///
public ApiResult> UsableRoom(UsableRoomReq req)
{
if (req.StartDay == DateTime.MinValue) return ApiResult>.Failed("操作失败,[StartTime]不正确!");
req.StartDay = new DateTime(req.StartDay.Year, req.StartDay.Month, req.StartDay.Day);
if (req.EndDay == DateTime.MinValue) return ApiResult>.Failed("操作失败,[EndTime]不正确!");
//var endd = req.EndDay.AddDays(-1);
//req.EndDay = new DateTime(endd.Year, endd.Month, endd.Day);
req.EndDay = req.EndDay.Date;
string rm_type = "%"; // 全部
var dt2 = Db.Ado.UseStoredProcedure().SqlQuery("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>.Success(String.Empty, null);
dt2 = dt2.Replace();
var ls = Db.Queryable().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>.Success(String.Empty, dt2);
}
///
/// 根据时间段获取房类最小可用数
///
///
///
public ApiResult> UsableRoomMin(UsableRoomReq req)
{
if (req.StartDay == DateTime.MinValue) return ApiResult>.Failed("操作失败,[StartTime]不正确!");
req.StartDay = new DateTime(req.StartDay.Year, req.StartDay.Month, req.StartDay.Day);
if (req.EndDay == DateTime.MinValue) return ApiResult>.Failed("操作失败,[EndTime]不正确!");
/* 获取基本客房类型数据 */
var ls = Db.Queryable().ToList().Replace();
if (ls == null && ls.Count == 0) return ApiResult>.Success(String.Empty, null);
var usableTypeList = new List();
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("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>.Success(String.Empty, null);
dt2 = dt2.Replace();
/* 获取临时表客户使用数量 */
//DateTime eTime = req.EndDay.AddDays(1);
//var SummaryIds = Db.Queryable()
// .Where(t => t.AuditorStatus == (int)EnumAuditorStatus.审核中)
// .Select(t => t.Id).ToList();
//var apptRoomList = Db.Queryable()
// .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>.Success(String.Empty, usableTypeList);
}
///
/// 备注列表项
///
///
public ApiResult> RemarkList()
{
var ls = Db.Queryable()
.Where(t => t.Class == EnumSysCodeClass.apptremark.ToString())
.OrderBy(t => t.Id, OrderByType.Asc)
.Select(t => t.Descript1).ToList().Replace();
return ApiResult>.Success(string.Empty, ls);
}
// ---- 预订管理
///
/// 创建暂定单
///
///
///
public async Task 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().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().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()
.Where(t => t.CreateTime > sTime).Count() + 1;
no.Append(count.ToString().PadLeft(2, '0'));
/* 会议室预订明细 */
var apptMeetingList = new List();
if (req.ApptMeetingList != null && req.ApptMeetingList.Count > 0)
{
List resCodeList = Db.Queryable().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()
.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();
if (req.ApptRoomList != null && req.ApptRoomList.Count > 0)
{
List roomTypeList = Db.Queryable().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();
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();
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();
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 await InAppt(summaryId);
}
else
{
SetMsgAuditing(summaryId, auditorId, loginUserRes.Info.Hotelid);
}
}
return ApiResult.Success();
}
///
/// 删除预定
///
///
///
public ApiResult DeleteAppt(AuditDeleteReq req)
{
if (req.Type == 1)
{
var summary = GetById(req.Id);
if (summary != null)
{
_ApptLog.SetLog("appt_summary", summary.Id.ToString(), JsonConvert.SerializeObject(summary), null, null, 1);
DeleteById(req.Id);
}
}
else if (req.Type == 2)
{
var item = GetById(req.Id);
if (item != null)
{
_ApptLog.SetLog("appt_room", item.Id.ToString(), JsonConvert.SerializeObject(item), null, null, 1);
DeleteById(req.Id);
}
}
else if (req.Type == 3)
{
var item = Db.Queryable().Where(t => t.Id == req.Id).First();
if (item != null)
{
_ApptLog.SetLog("appt_meeting", item.Id.ToString(), JsonConvert.SerializeObject(item), null, null, 1);
DeleteById(req.Id);
}
}
else if (req.Type == 4)
{
var item = GetById(req.Id);
if (item != null)
{
_ApptLog.SetLog("appt_catering", item.Id.ToString(), JsonConvert.SerializeObject(item), null, null, 1);
DeleteById(req.Id);
}
}
else if (req.Type == 5)
{
var item = GetById(req.Id);
if (item != null)
{
_ApptLog.SetLog("appt_spring", item.Id.ToString(), JsonConvert.SerializeObject(item), null, null, 1);
DeleteById(req.Id);
}
}
else
{
return ApiResult.Failed("操作失败,类型无效!");
}
return ApiResult.Success(string.Empty);
}
///
/// 预订审批
///
///
///
public async Task ApptAudit(ApptAuditReq req)
{
var loginUserRes = BaseRepo.DECLoginInfo(req.AccountDES);
if (!loginUserRes.IsSuccess) return ApiResult.Failed(loginUserRes.Msg);
var sum = GetById(req.ApptId);
if (sum == null) return ApiResult.Failed("操作失败,信息不存在!");
if (sum.AuditorStatus != (int)EnumAuditorStatus.审核中) return ApiResult.Failed("操作失败,当前预订不在审核状态!");
var oldData = JsonConvert.SerializeObject(sum);
var apptAuditorModel = GetById(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 await InAppt(req.ApptId);
}
if (req.AuditorStatus == 1)
{
var apptMeetingList = Db.Queryable().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", 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().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().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().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().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);
}
///
/// 取消预订
///
///
///
public ApiResult CancelAudit(ApptAuditReq req)
{
var loginUserRes = BaseRepo.DECLoginInfo(req.AccountDES);
if (!loginUserRes.IsSuccess) return ApiResult.Failed(loginUserRes.Msg);
var summaryM = GetById(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);
}
}
///
/// 转审批
///
///
///
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(req.ApptId);
if (sum == null) return ApiResult.Failed("操作失败,信息不存在!");
if (sum.AuditorStatus != (int)EnumAuditorStatus.审核中) return ApiResult.Failed("操作失败,当前预订不在审核状态!");
if (sum.AuditorId > 0)
{
var aptAuditorModel = GetById(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().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("转审批失败!");
}
}
///
/// 抄送
///
///
///
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(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().Where(t => t.Locked == "F").In(t => t.OpId, req.ToUserAccounts).ToList().Replace();
if (userList.Count != req.ToUserAccounts.Length)
{
List notUser = new List();
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 ls = new List();
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);
}
///
/// 获取实体
///
///
///
public ApiResult GetModel(int id)
{
ApptSummaryReq result = new ApptSummaryReq();
var apptSum = Db.Queryable().Where(t => t.Id == id).First();
if (apptSum == null) return ApiResult.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();
ls.Add(result);
var dt = new BaseRepo().FormatApptSummaryReq(ls);
if (dt.Count > 0)
{
return ApiResult.Success(string.Empty, dt[0]);
}
else
{
return ApiResult.Success(string.Empty, result);
}
}
///
/// 我发起的预订列表
///
///
///
public ApiResult> MyApptApplyPageReq(MyApptApplyPageReq req)
{
int total = 0;
var reList = new PagerData()
{
PageIndex = req.PageIndex,
PageSize = req.PageSize,
Total = total,
Data = new List()
};
var loginUserRes = BaseRepo.DECLoginInfo(req.AccountDES);
if (!loginUserRes.IsSuccess) return ApiResult>.Failed(loginUserRes.Msg);
int auditorStatus = req.AuditorStatus == null ? 0 : req.AuditorStatus.Value;
var _summarys = Db.Queryable()
.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>.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()
.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 users = reList.Data.Select(t => t.UserId).ToList();
var userList = Db.Queryable().Where(t => t.Locked == "F" && users.Contains(t.OpId)).ToList();
var saleList = Db.Queryable().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>.Success(string.Empty, reList);
}
///
/// 和我关联的预订(我审核的、我有权审核的、我抄送的、抄送给我的)
///
///
///
public ApiResult> MyPartakePage(MyApptAuditPageReq req)
{
int total = 0;
PagerData pager = new PagerData()
{
PageIndex = req.PageIndex,
PageSize = req.PageSize,
Total = total,
Data = new List()
};
var loginUserRes = BaseRepo.DECLoginInfo(req.AccountDES);
if (!loginUserRes.IsSuccess) return ApiResult>.Failed(loginUserRes.Msg);
ISugarQueryable summarys = Db.Queryable();
if (req.AuditorStatus == 0)
{
var auditApptId = Db.Queryable()
.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().Where(t => t.OpGroup == loginUserRes.Info.UserGroup).Select(t => t.Id).ToList();
//if (auditorIds.Count == 0) return ApiResult>.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().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().Where(t => t.Type == 2 && t.UserId == loginUserRes.Info.UserAccount).Select(t => t.ApptId).ToList();
summarys.In(t => t.Id, auditApptId);
}
else
{
return ApiResult>.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>.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()
.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 users = pager.Data.Select(t => t.UserId).ToList();
var userList = Db.Queryable().Where(t => t.Locked == "F" && users.Contains(t.OpId)).ToList().Replace();
var saleList = Db.Queryable().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>.Success(string.Empty, pager);
}
///
/// 获取预订审核记录表
///
///
///
public ApiResult AuditorLogTree(CommIntReq req)
{
if (req.IntValue == null) return ApiResult.Failed("参数无效");
AuditorLogTreeRes auditorLogTreeRes = new AuditorLogTreeRes();
var summaryModel = GetById(req.IntValue.Value);
if (summaryModel == null) return ApiResult.Failed("数据不存在");
auditorLogTreeRes.Id = summaryModel.Id.Value;
auditorLogTreeRes.CreateTime = summaryModel.CreateTime.Value;
auditorLogTreeRes.SaleName = summaryModel.SaleName;
var list = Db.Queryable((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(summaryModel.AuditorId);
if (auditorMo != null)
{
var userList = Db.Queryable().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().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()
.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().Where(t => t.Pid == summaryModel.Id).First();
if (appS != null)
{
auditorLogTreeRes.NewName = appS.BuyerTitle;
}
}
auditorLogTreeRes.AudioLogList = list;
return ApiResult.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 GetDataModel(int id)
{
var summary = Db.Queryable()
.Where(t => t.Id == id)
.Mapper((sum) =>
{
sum.ApptRoomList = Db.Queryable()
.Where(t => t.ApptId == sum.Id).ToList();
sum.ApptMeetingList = Db.Queryable()
.Where(t => t.ApptId == sum.Id).ToList();
sum.ApptCateringList = Db.Queryable()
.Where(t => t.ApptId == sum.Id).ToList();
sum.ApptSpringList = Db.Queryable()
.Where(t => t.ApptId == sum.Id).ToList();
sum.ApptRemarks = Db.Queryable()
.Where(t => t.ApptId == sum.Id).ToList();
}).First();
if (summary == null) return ApiResult.Failed("操作失败,不存在的数据");
return ApiResult.Success(string.Empty, summary);
}
///
/// 预订信息入正式表
///
///
///
private async Task 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 =await Db.Queryable().ToListAsync().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(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 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 apptAuditLogs = new List();
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);
}
///
/// 向审核人员发送审核消息
///
///
///
/// 酒店id
///
private void SetMsgAuditing(int apptId, int auditorId, string hotelid)
{
try
{
string AppId = BaseConfig.App(new string[] { "WeChatService", "AppId" });
var apptSummary = Db.Queryable().Where(t => t.Id == apptId && t.AuditorStatus == (int)EnumAuditorStatus.审核中).First();
if (apptSummary == null) return;
var auditorModel = GetById(auditorId);
if (auditorModel != null)
{
var userList = Db.Queryable().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 keydows = new List();
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)
{ }
}
///
/// 转审批
///
///
///
///
private void TransferAuditMsg(int wxSericeOpenId, string auditorId, string hotelid)
{
try
{
string AppId = BaseConfig.App(new string[] { "WeChatService", "AppId" });
var apptSummary = Db.Queryable().Where(t => t.Id == wxSericeOpenId && t.AuditorStatus == (int)EnumAuditorStatus.审核中).First();
if (apptSummary == null) return;
var auditorModel = GetById(auditorId);
if (auditorModel != null)
{
var userList = new List() { auditorId };
if (userList != null && userList.Count > 0)
{
if (AppId == "wx1f646438a23bd3bc")
{
// 爱住网
List keydows = new List();
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)
{ }
}
///
/// 审核通过向提交人发送信息
///
///
///
///
///
///
///
private void SetMsgaudited(string wxSericeOpenId, EnumAuditorStatus auditorStatus, string hotelid, string title, string reason = "", string auditer = "")
{
if (string.IsNullOrEmpty(wxSericeOpenId)) return;
try
{
List user = new List() { wxSericeOpenId };
List keydows = new List();
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)
{ }
}
///
/// 抄送 消息模板
///
/// 接收人程序openid
private async Task SetCopyMsg(string wxSericeOpenId)
{
try
{
await Task.Delay(1);
string AppId = BaseConfig.App(new string[] { "WeChatService", "AppId" });
if (AppId == "wx3f193488e04b2ed8")
{
// 江南春
List keydows = new List();
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 keydows = new List();
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 keydows = new List();
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());
}
return ApiResult.Success(string.Empty);
}
}
}