1903 lines
84 KiB
C#
1903 lines
84 KiB
C#
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,
|
||
Sfield = i.Sfield,
|
||
Resby = i.Resby
|
||
})
|
||
.ToList();
|
||
|
||
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();
|
||
if (resCode == null || resCode.Count == 0) return ApiResult<List<MeetingRes>>.Success(string.Empty);
|
||
int days = (req.EndDay - req.StartDay).Days;
|
||
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++)
|
||
{
|
||
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)
|
||
{
|
||
st[j] = "M";
|
||
}
|
||
else
|
||
{
|
||
st[j] = model.Sta;
|
||
}
|
||
}
|
||
|
||
}
|
||
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());
|
||
}
|
||
}
|
||
}
|
||
}
|