Files
AppointmentOA/api_v1/Appointment.Repository/ApptRepoJNC.cs
2024-09-12 19:00:52 +08:00

4501 lines
237 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

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

using Appointment.Entity;
using Appointment.Entity.Utility;
using Appointment.IRepository;
using Google.Protobuf.WellKnownTypes;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Appointment.Repository
{
/// <summary>
/// 江南春模式
/// </summary>
public class ApptRepoJNC : DbContext, IApptRepoJNC
{
private readonly log4net.ILog _logger = log4net.LogManager.GetLogger(typeof(ApptRepoJNC));
/// <summary>
/// "预定部", "销售经理", "财务经理", "财务总监", "总经理"
/// </summary>
static string[] JncAuditor = new string[] { "预定部", "销售经理", "财务经理", "财务总监", "总经理" };
// 销售 91-王应哲-123,预定部 92-曹青青-123,销售经理 TEST-123,财务经理 WJ-123,财务总监 LJJ-123
IApptLogRepo _ApptLog;
public ApptRepoJNC(IApptLogRepo apptLog)
{
_ApptLog = apptLog;
}
// ---- 增
/// <summary>
/// 创建暂订单
/// </summary>
/// <param name="req"></param>
/// <returns></returns>
public ApiResult<int> AddApptSummary(AddSummaryJncReq req)
{
DateTime now = DateTime.Now;
req = req.Replace();
/* 数据校验 */
if (req == null) return ApiResult<int>.Failed(ApiResultMsg.NoParameter);
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<int>.Failed("操作无效,预订详情全为空!");
}
ApiResult<LoginUserRes> loginUserRes = BaseRepo.DECLoginInfo(req.AccountDes);
if (!loginUserRes.IsSuccess) return ApiResult<int>.Failed(loginUserRes.Msg);
string ApptType = BaseConfig.App(new string[] { "ApptType" });
if (ApptType != "2") return ApiResult<int>.Failed("操作失败,预订类型不正确!");
var user = Db.Queryable<UcLogin>().Where(t => t.OpId == loginUserRes.Info.UserAccount).First();
/* 订单主体 */
ApptSummary appt = new ApptSummary
{
Guid = Guid.NewGuid().ToString(),
UserId = loginUserRes.Info.UserAccount,
CreateTime = DateTime.Now,
ApptTypeId = Convert.ToInt32(ApptType),
AuditorStatus = (int)EnumAuditorJncStatus.暂订单,
AuditorId = 0,
TransferAudit = "",
ApptType = 0,
No = "",
BuyerName = req.BuyerName,
BuyerAddress = req.BuyerAddress,
BuyerTitle = req.BuyerTitle,
LeaderName = req.LeaderName,
LeaderMobile = req.LeaderMobile,
LeaderRoom = req.LeaderRoom,
SaleName = loginUserRes.Info.UserName,
SaleMobile = user?.Mobile,
SaleDirector = req.SaleDirector,
RoomRemark = req.RoomRemark,
MeetingRemark = req.MeetingRemark,
CateringRemark = req.CateringRemark,
SpringRemark = req.SpringRemark,
Pid = 0,
GrpNo = "",
StartDay = DateTimeHelper.MSSQLMinValue,
EndDay = DateTimeHelper.MSSQLMinValue,
ApplyOA = 0,
};
/* 客房预订明细 */
var apptRoomList = new List<ApptRoom>();
if (req.ApptRoomList != null && req.ApptRoomList.Count > 0)
{
List<RoomType> roomTypeList = Db.Queryable<RoomType>().ToList().Replace();
foreach (var item in req.ApptRoomList)
{
if (item.RoomIn != null && item.RoomIn.Hour == 0) item.RoomIn = new DateTime(item.RoomIn.Year, item.RoomIn.Month, item.RoomIn.Day, 18, 0, 0);
if (item.RoomOut != null && item.RoomOut.Hour == 0) item.RoomOut = new DateTime(item.RoomOut.Year, item.RoomOut.Month, item.RoomOut.Day, 14, 0, 0);
if (!string.IsNullOrEmpty(item.RoomCode))
{
var room = roomTypeList.Where(t => t.Id == item.RoomCode).FirstOrDefault();
if (room == null) return ApiResult<int>.Failed("添加失败,房类代码不存在!");
if (item.RoomNum < 1) return ApiResult<int>.Failed("添加失败,房间数量无效!");
item.RoomGroup = room.Descript1;
}
if (appt.StartDay == DateTimeHelper.MSSQLMinValue || appt.StartDay > item.RoomIn)
{
appt.StartDay = new DateTime(item.RoomIn.Year, item.RoomIn.Month, item.RoomIn.Day);
}
if (appt.EndDay == DateTimeHelper.MSSQLMinValue || appt.EndDay < item.RoomOut)
{
appt.EndDay = new DateTime(item.RoomOut.Year, item.RoomOut.Month, item.RoomOut.Day);
}
apptRoomList.Add(new ApptRoom()
{
Guid = Guid.NewGuid().ToString(),
ApptId = 0,
RoomIn = item.RoomIn,
RoomOut = item.RoomOut,
RoomGroup = item.RoomGroup,
RoomCode = item.RoomCode,
RoomNum = item.RoomNum,
RoomPrice = item.RoomPrice,
BreakfastNum = item.BreakfastNum,
LongDistance = item.LongDistance,
MinShop = item.MinShop,
RoomRemark = item.RoomRemark
});
}
}
/* 会议室预订明细 */
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 (!string.IsNullOrWhiteSpace(item.MeetingCode))
{
var resCode = resCodeList.Where(t => t.Code == item.MeetingCode).FirstOrDefault();
if (resCode == null) return ApiResult<int>.Failed("添加失败,无效的会议厅代码!");
item.MeetingRoom = resCode.Descript1;
}
// 场次数据判断
if (string.IsNullOrEmpty(item.Groups)) return ApiResult<int>.Failed($"添加失败,会议室{item.MeetingRoom}未设置场次!");
List<int> groups = new List<int>();
try
{
groups = item.Groups.Split(',', StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToList();
if (groups.Count < 1) throw new Exception("");
if (groups.Where(t => t != 1 && t != 2 && t != 3).Count() > 1) throw new Exception("");
}
catch (Exception)
{
return ApiResult<int>.Failed($"会议室{item.MeetingRoom}场次格式不正确!");
}
if (appt.StartDay == DateTimeHelper.MSSQLMinValue || appt.StartDay > item.MeetingTime)
{
appt.StartDay = new DateTime(item.MeetingTime.Year, item.MeetingTime.Month, item.MeetingTime.Day);
}
if (appt.EndDay == DateTimeHelper.MSSQLMinValue || appt.EndDay < item.MeetingTime)
{
appt.EndDay = new DateTime(item.MeetingTime.Year, item.MeetingTime.Month, item.MeetingTime.Day);
}
apptMeetingList.Add(new ApptMeeting()
{
Guid = Guid.NewGuid().ToString(),
ApptId = 0,
MeetingTime = item.MeetingTime,
Groups = string.Join(",", groups),
MeetingRoom = item.MeetingRoom,
MeetingCode = item.MeetingCode,
MeetingRostrum = item.MeetingRostrum,
MeetingShape = item.MeetingShape,
MeetingNum = item.MeetingNum,
MeetingPrice = item.MeetingPrice,
MeetingTitle = item.MeetingTitle,
Remark = item.Remark
});
}
}
/* 餐饮预订明细 */
var apptCateringList = new List<ApptCatering>();
if (req.ApptCateringList != null && req.ApptCateringList.Count > 0)
{
foreach (ApptCatering item in req.ApptCateringList)
{
if (item.CateringType != 0 && item.CateringType != 1) return ApiResult<int>.Failed($"用餐类型不正确!");
// 场次数据判断
if (string.IsNullOrEmpty(item.Groups)) return ApiResult<int>.Failed($"添加失败,餐厅{item.CateringRoom}未设置场次!");
List<int> groups = new List<int>();
try
{
groups = item.Groups.Split(',', StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToList();
if (groups.Count < 1) throw new Exception("");
if (groups.Where(t => t != 1 && t != 2 && t != 3).Count() > 1) throw new Exception("");
}
catch (Exception)
{
return ApiResult<int>.Failed($"餐厅{item.CateringRoom}场次格式不正确!");
}
if (appt.StartDay == DateTimeHelper.MSSQLMinValue || appt.StartDay > item.CateringTime)
{
appt.StartDay = new DateTime(item.CateringTime.Year, item.CateringTime.Month, item.CateringTime.Day);
}
if (appt.EndDay == DateTimeHelper.MSSQLMinValue || appt.EndDay < item.CateringTime)
{
appt.EndDay = new DateTime(item.CateringTime.Year, item.CateringTime.Month, item.CateringTime.Day);
}
apptCateringList.Add(new ApptCatering()
{
Guid = Guid.NewGuid().ToString(),
ApptId = 0,
CateringTime = item.CateringTime,
Groups = string.Join(",", groups),
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 (ApptSpring item in req.ApptSpringList)
{
if (appt.StartDay == DateTimeHelper.MSSQLMinValue || appt.StartDay > item.SpringTime)
{
appt.StartDay = new DateTime(item.SpringTime.Year, item.SpringTime.Month, item.SpringTime.Day);
}
if (appt.EndDay == DateTimeHelper.MSSQLMinValue || appt.EndDay < item.SpringTime)
{
appt.EndDay = new DateTime(item.SpringTime.Year, item.SpringTime.Month, item.SpringTime.Day);
}
apptSpringList.Add(new ApptSpring()
{
Guid = Guid.NewGuid().ToString(),
ApptId = 0,
SpringTime = item.SpringTime,
PeopleNum = item.PeopleNum,
SpringMen = item.SpringMen,
SpringWomen = item.SpringWomen,
Consume = item.Consume,
SpringPrice = item.SpringPrice,
Remark = item.Remark,
});
}
}
/* 自定义备注 */
var ApptRemarkList = new List<ApptRemark>();
if (req.ApptRemarks != null && req.ApptRemarks.Count > 0)
{
foreach (var item in req.ApptRemarks)
{
ApptRemarkList.Add(new ApptRemark
{
Guid = Guid.NewGuid().ToString(),
ApptId = 0,
Title = item.Title,
Info = item.Info,
});
}
}
try
{
Db.Ado.BeginTran();
var resultSummary = InsertReturnId(appt);
if (!resultSummary.IsSuccess) throw new Exception(resultSummary.Msg);
appt.Id = resultSummary.Info;
_ApptLog.SetLog("appt_summary", appt.Id.ToString(), null, JsonConvert.SerializeObject(appt), loginUserRes.Info.UserAccount, 1);
foreach (ApptRoom item in apptRoomList)
{
item.ApptId = appt.Id.Value;
var inR = InsertReturnId(item);
if (!inR.IsSuccess) throw new Exception(inR.Msg);
item.Id = inR.Info;
_ApptLog.SetLog("appt_room", item.Id.ToString(), null, JsonConvert.SerializeObject(item), loginUserRes.Info.UserAccount, 1);
}
foreach (ApptMeeting item in apptMeetingList)
{
item.ApptId = appt.Id.Value;
var inR = InsertReturnId(item);
if (!inR.IsSuccess) throw new Exception(inR.Msg);
item.Id = inR.Info;
_ApptLog.SetLog("appt_meeting", item.Id.ToString(), null, JsonConvert.SerializeObject(item), loginUserRes.Info.UserAccount, 1);
}
foreach (ApptCatering item in apptCateringList)
{
item.ApptId = appt.Id.Value;
var inR = InsertReturnId(item);
if (!inR.IsSuccess) throw new Exception(inR.Msg);
item.Id = inR.Info;
_ApptLog.SetLog("appt_catering", item.Id.ToString(), null, JsonConvert.SerializeObject(item), loginUserRes.Info.UserAccount, 1);
}
foreach (ApptSpring item in apptSpringList)
{
item.ApptId = appt.Id.Value;
var inR = InsertReturnId(item);
if (!inR.IsSuccess) throw new Exception(inR.Msg);
item.Id = inR.Info;
_ApptLog.SetLog("appt_spring", item.Id.ToString(), null, JsonConvert.SerializeObject(item), loginUserRes.Info.UserAccount, 1);
}
foreach (ApptRemark item in ApptRemarkList)
{
item.ApptId = appt.Id.Value;
var inR = InsertReturnId(item);
if (!inR.IsSuccess) throw new Exception(inR.Msg);
item.Id = inR.Info;
_ApptLog.SetLog("appt_remark", item.Id.ToString(), null, JsonConvert.SerializeObject(item), loginUserRes.Info.UserAccount, 1);
}
InsertReturnId(new ApptAuditLog()
{
Type = 1,
CreateTime = now,
UserId = loginUserRes.Info.UserAccount,
ApptId = appt.Id.Value,
AuditorStatus = (int)EnumAuditorJncStatus.暂订单,
Remark = "",
});
Db.Ado.CommitTran();
}
catch (Exception ex)
{
Db.Ado.RollbackTran();
throw new Exception("提交预订失败,出现异常,异常信息:" + ex.Message);
}
return ApiResult<int>.Success("", appt.Id.Value);
}
// ---- 改
/// <summary>
/// 修改暂订单
/// </summary>
/// <param name="req"></param>
/// <returns></returns>
public ApiResult<int> UpdateSummary(UpdateSummaryReq req)
{
DateTime now = DateTime.Now;
req = req.Replace();
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<int>.Failed("操作无效,预订详情全为空!");
}
var loginUserRes = BaseRepo.DECLoginInfo(req.AccountDes);
if (!loginUserRes.IsSuccess) return ApiResult<int>.Failed(loginUserRes.Msg);
var summaryM = Db.Queryable<ApptSummary>().Where(t => t.Id == req.Id).First();
if (summaryM == null || summaryM.ApptTypeId != 2) return ApiResult<int>.Failed("未获取订单数据!");
if (summaryM.UserId != loginUserRes.Info.UserAccount) return ApiResult<int>.Failed("只有创建人员具有操作权限!");
string oldData = "";
string newData = "";
try
{
Db.Ado.BeginTran();
if (summaryM.AuditorStatus == (int)EnumAuditorJncStatus.暂订单)
{
summaryM.BuyerName = req.BuyerName;
summaryM.BuyerAddress = req.BuyerAddress;
summaryM.BuyerTitle = req.BuyerTitle;
summaryM.LeaderName = req.LeaderName;
summaryM.LeaderMobile = req.LeaderMobile;
summaryM.LeaderRoom = req.LeaderRoom;
summaryM.SaleDirector = req.SaleDirector;
summaryM.RoomRemark = req.RoomRemark;
summaryM.MeetingRemark = req.MeetingRemark;
summaryM.CateringRemark = req.CateringRemark;
summaryM.SpringRemark = req.SpringRemark;
summaryM.AlterTime = now;
newData = JsonConvert.SerializeObject(summaryM);
if (oldData != newData)
{
Update(summaryM);
_ApptLog.SetLog("appt_summary", summaryM.Id.ToString(), oldData, newData, loginUserRes.Info.UserAccount, 1);
}
}
else if (summaryM.AuditorStatus == (int)EnumAuditorJncStatus.审核单申请
|| (summaryM.AuditorStatus == (int)EnumAuditorJncStatus.驳回单 && summaryM.ApplyOA == 0)
)
{
oldData = JsonConvert.SerializeObject(summaryM);
summaryM.AuditorStatus = (int)EnumAuditorJncStatus.暂订单;
summaryM.BuyerName = req.BuyerName;
summaryM.BuyerAddress = req.BuyerAddress;
summaryM.BuyerTitle = req.BuyerTitle;
summaryM.LeaderName = req.LeaderName;
summaryM.LeaderMobile = req.LeaderMobile;
summaryM.LeaderRoom = req.LeaderRoom;
summaryM.SaleDirector = req.SaleDirector;
summaryM.RoomRemark = req.RoomRemark;
summaryM.MeetingRemark = req.MeetingRemark;
summaryM.CateringRemark = req.CateringRemark;
summaryM.SpringRemark = req.SpringRemark;
summaryM.AlterTime = now;
newData = JsonConvert.SerializeObject(summaryM);
if (oldData != newData)
{
Update(summaryM);
_ApptLog.SetLog("appt_summary", summaryM.Id.ToString(), oldData, JsonConvert.SerializeObject(summaryM), loginUserRes.Info.UserAccount, 1);
InsertReturnId(new ApptAuditLog()
{
Type = 1,
CreateTime = now,
UserId = loginUserRes.Info.UserAccount,
ApptId = summaryM.Id.Value,
AuditorStatus = (int)EnumAuditorJncStatus.暂订单,
Remark = $"{loginUserRes.Info.UserName} 修改了内容,审核被自动撤回。",
});
}
}
else if (summaryM.AuditorStatus == (int)EnumAuditorJncStatus.审核单预定部
|| summaryM.AuditorStatus == (int)EnumAuditorJncStatus.审核单销售经理
|| summaryM.AuditorStatus == (int)EnumAuditorJncStatus.审核单财务经理
|| summaryM.AuditorStatus == (int)EnumAuditorJncStatus.审核单财务总监
|| summaryM.AuditorStatus == (int)EnumAuditorJncStatus.确定单
|| summaryM.AuditorStatus == (int)EnumAuditorJncStatus.完成单
|| (summaryM.AuditorStatus == (int)EnumAuditorJncStatus.驳回单 && summaryM.ApplyOA == 1))
{
//throw new Exception("应该修改暂订单的数据,不应该修改确定单");
#region 调整到获取实体
summaryM.AuditorStatus = (int)EnumAuditorJncStatus.归档资源单;
Update(summaryM);
summaryM = Db.Queryable<ApptSummary>()
.Where(t => t.Guid == summaryM.Guid && t.AuditorStatus == (int)EnumAuditorJncStatus.归档暂定单)
.First();
if (summaryM == null)
{
throw new Exception("未获取到暂订单数据!");
}
oldData = JsonConvert.SerializeObject(summaryM);
summaryM.AuditorStatus = (int)EnumAuditorJncStatus.暂订单;
summaryM.BuyerName = req.BuyerName;
summaryM.BuyerAddress = req.BuyerAddress;
summaryM.BuyerTitle = req.BuyerTitle;
summaryM.LeaderName = req.LeaderName;
summaryM.LeaderMobile = req.LeaderMobile;
summaryM.LeaderRoom = req.LeaderRoom;
summaryM.SaleDirector = req.SaleDirector;
summaryM.RoomRemark = req.RoomRemark;
summaryM.MeetingRemark = req.MeetingRemark;
summaryM.CateringRemark = req.CateringRemark;
summaryM.SpringRemark = req.SpringRemark;
summaryM.AlterTime = now;
newData = JsonConvert.SerializeObject(summaryM);
if (newData != oldData)
{
Update(summaryM);
_ApptLog.SetLog("appt_summary", summaryM.Id.ToString(), oldData, JsonConvert.SerializeObject(summaryM), loginUserRes.Info.UserAccount, 1);
InsertReturnId(new ApptAuditLog()
{
Type = 1,
CreateTime = now,
UserId = loginUserRes.Info.UserAccount,
ApptId = summaryM.Id.Value,
AuditorStatus = (int)EnumAuditorJncStatus.暂订单,
Remark = $"{loginUserRes.Info.UserName} 修改了订单内容",
});
}
#endregion
}
else
{
throw new Exception("不支持的操作!");
}
DateTime startDay = DateTimeHelper.MSSQLMinValue;
DateTime endDay = DateTimeHelper.MSSQLMinValue;
var roomList = Db.Queryable<ApptRoom>().Where(t => t.ApptId == summaryM.Id).ToList();
if (req.ApptRoomList == null || req.ApptRoomList.Count == 0)
{
if (roomList.Count > 0)
{
foreach (ApptRoom roomItem in roomList)
{
oldData = JsonConvert.SerializeObject(roomItem);
_ApptLog.SetLog("appt_room", roomItem.Id.ToString(), oldData, null, loginUserRes.Info.UserAccount, 1);
}
DeleteRange<ApptRoom>(roomList.Select(t => t.Id.Value).ToList());
}
}
else
{
List<RoomType> roomTypeList = Db.Queryable<RoomType>().ToList().Replace();
// 删除不在提交列表中的旧预定客房
foreach (var oldRoom in roomList)
{
var OldM = req.ApptRoomList.Where(t => t.Guid == oldRoom.Guid).FirstOrDefault();
if (OldM == null)
{
oldData = JsonConvert.SerializeObject(oldRoom);
_ApptLog.SetLog("appt_room", oldRoom.Id.ToString(), oldData, null, loginUserRes.Info.UserAccount, 1);
Db.Deleteable<ApptRoom>().Where(t => t.ApptId == summaryM.Id && t.Guid == oldRoom.Guid).ExecuteCommand();
}
}
// 添加新增加的预定客房
var addList = req.ApptRoomList.Where(t => t.Id == null || t.Id == 0).ToList();
if (addList.Count > 0)
{
foreach (var item in addList)
{
if (!string.IsNullOrEmpty(item.RoomCode))
{
var room = roomTypeList.Where(t => t.Id == item.RoomCode).FirstOrDefault();
if (room == null) throw new Exception($"操作失败,房类代码[{item.RoomCode}]不存在!");
if (item.RoomNum < 1) throw new Exception($"操作失败,房间{item.RoomGroup}数量无效!");
item.RoomGroup = room.Descript1;
}
var newM = new ApptRoom
{
Guid = Guid.NewGuid().ToString(),
ApptId = summaryM.Id,
RoomIn = item.RoomIn,
RoomOut = item.RoomOut,
RoomGroup = item.RoomGroup,
RoomCode = item.RoomCode,
RoomNum = item.RoomNum,
RoomPrice = item.RoomPrice,
BreakfastNum = item.BreakfastNum,
LongDistance = item.LongDistance,
MinShop = item.MinShop,
RoomRemark = item.RoomRemark,
};
var reR = InsertReturnId(newM);
if (!reR.IsSuccess) throw new Exception(reR.Msg);
newM.Id = reR.Info;
_ApptLog.SetLog("appt_room", newM.Id.ToString(), null, JsonConvert.SerializeObject(newM), loginUserRes.Info.UserAccount, 1);
if (startDay == DateTimeHelper.MSSQLMinValue || startDay > item.RoomIn)
{
startDay = new DateTime(item.RoomIn.Year, item.RoomIn.Month, item.RoomIn.Day);
}
if (endDay == DateTimeHelper.MSSQLMinValue || endDay < item.RoomOut)
{
endDay = new DateTime(item.RoomOut.Year, item.RoomOut.Month, item.RoomOut.Day);
}
}
}
// 修改原来的数据
var upls = req.ApptRoomList.Where(t => !string.IsNullOrEmpty(t.Guid) && roomList.Select(r => r.Guid).Contains(t.Guid)).ToList();
var roomListUpdate = new List<ApptRoom>();
foreach (var item in upls)
{
var model = roomList.Where(t => t.Guid == item.Guid).FirstOrDefault();
if (model != null)
{
if (item.RoomIn.Hour == 0)
{
item.RoomIn = new DateTime(item.RoomIn.Year, item.RoomIn.Month, item.RoomIn.Day, 18, 0, 0);
}
if (item.RoomOut.Hour == 0)
{
item.RoomOut = new DateTime(item.RoomOut.Year, item.RoomOut.Month, item.RoomOut.Day, 14, 0, 0);
}
if (model.RoomPrice == item.RoomPrice) model.RoomPrice = item.RoomPrice;
oldData = JsonConvert.SerializeObject(model);
newData = JsonConvert.SerializeObject(item);
if (oldData != newData)
{
if (!string.IsNullOrEmpty(item.RoomCode))
{
var room = roomTypeList.Where(t => t.Id == item.RoomCode).FirstOrDefault();
if (room == null) throw new Exception($"操作失败,房类代码[{item.RoomCode}]不存在!");
if (item.RoomNum < 1) throw new Exception($"操作失败,房间{item.RoomGroup}数量无效!");
item.RoomGroup = room.Descript1;
}
model.RoomGroup = item.RoomGroup;
model.RoomCode = item.RoomCode;
model.RoomNum = item.RoomNum;
model.RoomPrice = item.RoomPrice;
model.BreakfastNum = item.BreakfastNum;
model.LongDistance = item.LongDistance;
model.MinShop = item.MinShop;
model.RoomRemark = item.RoomRemark;
roomListUpdate.Add(model);
_ApptLog.SetLog("appt_room", model.Id.ToString(), oldData, JsonConvert.SerializeObject(model), loginUserRes.Info.UserAccount, 1);
}
if (startDay == DateTimeHelper.MSSQLMinValue || startDay > item.RoomIn)
{
startDay = new DateTime(item.RoomIn.Year, item.RoomIn.Month, item.RoomIn.Day);
}
if (endDay == DateTimeHelper.MSSQLMinValue || endDay < item.RoomOut)
{
endDay = new DateTime(item.RoomOut.Year, item.RoomOut.Month, item.RoomOut.Day);
}
}
}
if (roomListUpdate.Count > 0) UpdateRange(roomListUpdate);
}
var meetList = Db.Queryable<ApptMeeting>().Where(t => t.ApptId == summaryM.Id).ToList();
if (req.ApptMeetingList == null || req.ApptMeetingList.Count == 0)
{
if (meetList.Count > 0)
{
foreach (ApptMeeting item in meetList)
{
oldData = JsonConvert.SerializeObject(item);
_ApptLog.SetLog("appt_meeting", item.Id.ToString(), oldData, null, loginUserRes.Info.UserAccount, 1);
}
DeleteRange<ApptMeeting>(meetList.Select(t => t.Id.Value).ToList());
}
}
else
{
List<ResCode> resCodeList = Db.Queryable<ResCode>().Where(t => t.Sort == "A" && t.Sta == "T").ToList();
// 删除不在提交列表中的旧预定会议室
foreach (var oldRoom in meetList)
{
var OldM = req.ApptMeetingList.Where(t => t.Guid == oldRoom.Guid).FirstOrDefault();
if (OldM == null)
{
oldData = JsonConvert.SerializeObject(oldRoom);
_ApptLog.SetLog("appt_meeting", oldRoom.Id.ToString(), oldData, null, loginUserRes.Info.UserAccount, 1);
Db.Deleteable<ApptMeeting>().Where(t => t.ApptId == summaryM.Id && t.Guid == oldRoom.Guid).ExecuteCommand();
}
}
// 添加新增加的预定会议室
var addList = req.ApptMeetingList.Where(t => t.Id == null || t.Id == 0).ToList();
if (addList.Count > 0)
{
var dataInList = new List<ApptMeeting>();
foreach (var item in addList)
{
if (!string.IsNullOrWhiteSpace(item.MeetingCode))
{
var resCode = resCodeList.Where(t => t.Code == item.MeetingCode).FirstOrDefault();
if (resCode == null) throw new Exception("添加失败,无效的会议厅代码!");
item.MeetingRoom = resCode.Descript1;
}
// 场次数据判断
if (string.IsNullOrEmpty(item.Groups)) throw new Exception($"添加失败,会议室{item.MeetingRoom}未设置场次!");
List<int> groups = new List<int>();
try
{
groups = item.Groups.Split(',', StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToList();
if (groups.Count < 1) throw new Exception("");
if (groups.Where(t => t != 1 && t != 2 && t != 3).Count() > 1) throw new Exception("");
}
catch (Exception)
{
throw new Exception($"会议室{item.MeetingRoom}场次格式不正确!");
}
var newM = new ApptMeeting
{
Guid = Guid.NewGuid().ToString(),
ApptId = summaryM.Id,
MeetingTime = item.MeetingTime,
Groups = string.Join(",", groups),
MeetingRoom = item.MeetingRoom,
MeetingCode = item.MeetingCode,
MeetingRostrum = item.MeetingRostrum,
MeetingShape = item.MeetingShape,
MeetingNum = item.MeetingNum,
MeetingPrice = item.MeetingPrice,
MeetingTitle = item.MeetingTitle,
Remark = item.Remark,
};
var reR = InsertReturnId(newM);
if (!reR.IsSuccess) throw new Exception(reR.Msg);
newM.Id = reR.Info;
_ApptLog.SetLog("appt_meeting", newM.Id.ToString(), null, JsonConvert.SerializeObject(newM), loginUserRes.Info.UserAccount, 1);
if (startDay == DateTimeHelper.MSSQLMinValue || startDay > item.MeetingTime)
{
startDay = new DateTime(item.MeetingTime.Year, item.MeetingTime.Month, item.MeetingTime.Day);
}
if (endDay == DateTimeHelper.MSSQLMinValue || endDay < item.MeetingTime)
{
endDay = new DateTime(item.MeetingTime.Year, item.MeetingTime.Month, item.MeetingTime.Day);
}
}
}
// 修改原来的数据
var upls = req.ApptMeetingList.Where(t => !string.IsNullOrEmpty(t.Guid) && meetList.Select(r => r.Guid).Contains(t.Guid)).ToList();
var update = new List<ApptMeeting>();
foreach (var item in upls)
{
var model = meetList.Where(t => t.Guid == item.Guid).FirstOrDefault();
if (model != null)
{
if (model.MeetingPrice == item.MeetingPrice) model.MeetingPrice = item.MeetingPrice;
oldData = JsonConvert.SerializeObject(model);
newData = JsonConvert.SerializeObject(item);
if (oldData != newData)
{
if (!string.IsNullOrWhiteSpace(item.MeetingCode))
{
var resCode = resCodeList.Where(t => t.Code == item.MeetingCode).FirstOrDefault();
if (resCode == null) throw new Exception("添加失败,无效的会议厅代码!");
item.MeetingRoom = resCode.Descript1;
}
// 场次数据判断
if (string.IsNullOrEmpty(item.Groups)) throw new Exception($"添加失败,会议室{item.MeetingRoom}未设置场次!");
List<int> groups = new List<int>();
try
{
groups = item.Groups.Split(',', StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToList();
if (groups.Count < 1) throw new Exception("");
if (groups.Where(t => t != 1 && t != 2 && t != 3).Count() > 1) throw new Exception("");
}
catch (Exception)
{
throw new Exception($"会议室{item.MeetingRoom}场次格式不正确!");
}
model.MeetingTime = item.MeetingTime;
model.Groups = string.Join(",", groups);
model.MeetingRoom = item.MeetingRoom;
model.MeetingCode = item.MeetingCode;
model.MeetingRostrum = item.MeetingRostrum;
model.MeetingShape = item.MeetingShape;
model.MeetingNum = item.MeetingNum;
model.MeetingPrice = item.MeetingPrice;
model.MeetingTitle = item.MeetingTitle;
model.Remark = item.Remark;
update.Add(model);
_ApptLog.SetLog("appt_meeting", model.Id.ToString(), oldData, JsonConvert.SerializeObject(model), loginUserRes.Info.UserAccount, 1);
}
if (startDay == DateTimeHelper.MSSQLMinValue || startDay > item.MeetingTime)
{
startDay = new DateTime(item.MeetingTime.Year, item.MeetingTime.Month, item.MeetingTime.Day);
}
if (endDay == DateTimeHelper.MSSQLMinValue || endDay < item.MeetingTime)
{
endDay = new DateTime(item.MeetingTime.Year, item.MeetingTime.Month, item.MeetingTime.Day);
}
}
}
if (update.Count > 0) UpdateRange(update);
}
var caterList = Db.Queryable<ApptCatering>().Where(t => t.ApptId == summaryM.Id).ToList();
if (req.ApptCateringList == null || req.ApptCateringList.Count == 0)
{
foreach (ApptCatering item in caterList)
{
oldData = JsonConvert.SerializeObject(item);
_ApptLog.SetLog("appt_catering", item.Id.ToString(), oldData, null, loginUserRes.Info.UserAccount, 1);
}
if (caterList.Count > 0) DeleteRange<ApptCatering>(caterList.Select(t => t.Id.Value).ToList());
}
else
{
// 删除旧数据
foreach (var oldRoom in caterList)
{
var OldM = req.ApptCateringList.Where(t => t.Guid == oldRoom.Guid).FirstOrDefault();
if (OldM == null)
{
oldData = JsonConvert.SerializeObject(oldRoom);
_ApptLog.SetLog("appt_catering", oldRoom.Id.ToString(), oldData, null, loginUserRes.Info.UserAccount, 1);
Db.Deleteable<ApptCatering>().Where(t => t.ApptId == summaryM.Id && t.Guid == oldRoom.Guid).ExecuteCommand();
}
}
// 添加新数据
var addList = req.ApptCateringList.Where(t => t.Id == null || t.Id.Value == 0).ToList();
if (addList.Count > 0)
{
var dataInList = new List<ApptCatering>();
foreach (var item in addList)
{
if (item.CateringType != 0 && item.CateringType != 1) return ApiResult<int>.Failed($"用餐类型不正确!");
// 场次数据判断
if (string.IsNullOrEmpty(item.Groups)) return ApiResult<int>.Failed($"添加失败,餐厅{item.CateringRoom}未设置场次!");
List<int> groups = new List<int>();
try
{
groups = item.Groups.Split(',', StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToList();
if (groups.Count < 1) throw new Exception("");
if (groups.Where(t => t != 1 && t != 2 && t != 3).Count() > 1) throw new Exception("");
}
catch (Exception)
{
return ApiResult<int>.Failed($"餐厅{item.CateringRoom}场次格式不正确!");
}
var newM = new ApptCatering
{
Guid = Guid.NewGuid().ToString(),
ApptId = summaryM.Id,
CateringTime = item.CateringTime,
Groups = string.Join(",", groups),
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 reR = InsertReturnId(newM);
if (!reR.IsSuccess) throw new Exception(reR.Msg);
newM.Id = reR.Info;
_ApptLog.SetLog("appt_catering", newM.Id.ToString(), null, JsonConvert.SerializeObject(newM), loginUserRes.Info.UserAccount, 1);
if (startDay == DateTimeHelper.MSSQLMinValue || startDay > item.CateringTime)
{
startDay = new DateTime(item.CateringTime.Year, item.CateringTime.Month, item.CateringTime.Day);
}
if (endDay == DateTimeHelper.MSSQLMinValue || endDay < item.CateringTime)
{
endDay = new DateTime(item.CateringTime.Year, item.CateringTime.Month, item.CateringTime.Day);
}
}
}
// 修改
var upls = req.ApptCateringList.Where(t => !string.IsNullOrEmpty(t.Guid) && caterList.Select(r => r.Guid).Contains(t.Guid)).ToList();
var update = new List<ApptCatering>();
foreach (var item in upls)
{
var model = caterList.Where(t => t.Guid == item.Guid).FirstOrDefault();
if (model != null)
{
if (model.CateringPrice == item.CateringPrice) model.CateringPrice = item.CateringPrice;
oldData = JsonConvert.SerializeObject(model);
newData = JsonConvert.SerializeObject(item);
if (oldData != newData)
{
if (item.CateringType != 0 && item.CateringType != 1) return ApiResult<int>.Failed($"用餐类型不正确!");
// 场次数据判断
if (string.IsNullOrEmpty(item.Groups)) return ApiResult<int>.Failed($"添加失败,餐厅{item.CateringRoom}未设置场次!");
List<int> groups = new List<int>();
try
{
groups = item.Groups.Split(',', StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToList();
if (groups.Count < 1) throw new Exception("");
if (groups.Where(t => t != 1 && t != 2 && t != 3).Count() > 1) throw new Exception("");
}
catch (Exception)
{
return ApiResult<int>.Failed($"餐厅{item.CateringRoom}场次格式不正确!");
}
model.CateringTime = item.CateringTime;
model.Groups = string.Join(",", groups);
model.CateringRoom = item.CateringRoom;
model.CateringCode = item.CateringCode;
model.CateringType = item.CateringType;
model.CateringNum = item.CateringNum;
model.CateringPrice = item.CateringPrice;
model.CateringTable = item.CateringTable;
model.Wine = item.Wine;
model.Remark = item.Remark;
update.Add(model);
_ApptLog.SetLog("appt_catering", model.Id.ToString(), oldData, JsonConvert.SerializeObject(model), loginUserRes.Info.UserAccount, 1);
}
}
if (startDay == DateTimeHelper.MSSQLMinValue || startDay > item.CateringTime)
{
startDay = new DateTime(item.CateringTime.Year, item.CateringTime.Month, item.CateringTime.Day);
}
if (endDay == DateTimeHelper.MSSQLMinValue || endDay < item.CateringTime)
{
endDay = new DateTime(item.CateringTime.Year, item.CateringTime.Month, item.CateringTime.Day);
}
}
if (update.Count > 0) UpdateRange(update);
}
var springList = Db.Queryable<ApptSpring>().Where(t => t.ApptId == summaryM.Id).ToList();
if (req.ApptSpringList == null || req.ApptSpringList.Count == 0)
{
if (springList.Count > 0)
{
foreach (ApptSpring item in springList)
{
oldData = JsonConvert.SerializeObject(item);
_ApptLog.SetLog("appt_spring", item.Id.ToString(), oldData, null, loginUserRes.Info.UserAccount, 1);
}
DeleteRange<ApptSpring>(springList.Select(t => t.Id.Value).ToList());
}
}
else
{
// 删除旧数据
foreach (var oldRoom in springList)
{
var OldM = req.ApptSpringList.Where(t => t.Guid == oldRoom.Guid).FirstOrDefault();
if (OldM == null)
{
oldData = JsonConvert.SerializeObject(oldRoom);
_ApptLog.SetLog("appt_spring", oldRoom.Id.ToString(), oldData, null, loginUserRes.Info.UserAccount, 1);
Db.Deleteable<ApptSpring>().Where(t => t.ApptId == summaryM.Id && t.Guid == oldRoom.Guid).ExecuteCommand();
}
}
// 添加新数据
var addList = req.ApptSpringList.Where(t => t.Id == null || t.Id == 0).ToList();
if (addList.Count > 0)
{
var dataInList = new List<ApptSpring>();
foreach (var item in addList)
{
var newM = new ApptSpring
{
Guid = Guid.NewGuid().ToString(),
ApptId = summaryM.Id,
SpringTime = item.SpringTime,
PeopleNum = item.PeopleNum,
SpringMen = item.SpringMen,
SpringWomen = item.SpringWomen,
Consume = item.Consume,
SpringPrice = item.SpringPrice,
Remark = item.Remark,
};
var reR = InsertReturnId(newM);
if (!reR.IsSuccess) throw new Exception(reR.Msg);
newM.Id = reR.Info;
_ApptLog.SetLog("appt_spring", newM.Id.ToString(), null, JsonConvert.SerializeObject(newM), loginUserRes.Info.UserAccount, 1);
if (startDay == DateTimeHelper.MSSQLMinValue || startDay > item.SpringTime)
{
startDay = new DateTime(item.SpringTime.Year, item.SpringTime.Month, item.SpringTime.Day);
}
if (endDay == DateTimeHelper.MSSQLMinValue || endDay < item.SpringTime)
{
endDay = new DateTime(item.SpringTime.Year, item.SpringTime.Month, item.SpringTime.Day);
}
}
}
// 修改
var upls = req.ApptSpringList.Where(t => !string.IsNullOrEmpty(t.Guid) && springList.Select(r => r.Guid).Contains(t.Guid)).ToList();
var update = new List<ApptSpring>();
foreach (var item in upls)
{
var model = springList.Where(t => t.Guid == item.Guid).FirstOrDefault();
if (model != null)
{
if (model.SpringPrice == item.SpringPrice) model.SpringPrice = item.SpringPrice;
oldData = JsonConvert.SerializeObject(model);
newData = JsonConvert.SerializeObject(item);
if (oldData != newData)
{
model.SpringTime = item.SpringTime;
model.PeopleNum = item.PeopleNum;
model.SpringMen = item.SpringMen;
model.SpringWomen = item.SpringWomen;
model.Consume = item.Consume;
model.SpringPrice = item.SpringPrice;
model.Remark = item.Remark;
update.Add(model);
_ApptLog.SetLog("appt_spring", item.Id.ToString(), oldData, JsonConvert.SerializeObject(model), loginUserRes.Info.UserAccount, 1);
}
if (startDay == DateTimeHelper.MSSQLMinValue || startDay > item.SpringTime)
{
startDay = new DateTime(item.SpringTime.Year, item.SpringTime.Month, item.SpringTime.Day);
}
if (endDay == DateTimeHelper.MSSQLMinValue || endDay < item.SpringTime)
{
endDay = new DateTime(item.SpringTime.Year, item.SpringTime.Month, item.SpringTime.Day);
}
}
}
if (update.Count > 0) UpdateRange(update);
}
var remarkList = Db.Queryable<ApptRemark>().Where(t => t.ApptId == summaryM.Id).ToList();
if (req.ApptRemarks == null || req.ApptRemarks.Count == 0)
{
if (remarkList.Count > 0)
{
foreach (ApptRemark item in remarkList)
{
oldData = JsonConvert.SerializeObject(item);
_ApptLog.SetLog("appt_remark", item.Id.ToString(), oldData, null, loginUserRes.Info.UserAccount, 1);
}
DeleteRange<ApptRemark>(remarkList.Select(t => t.Id.Value).ToList());
}
}
else
{
// 删除旧数据
foreach (var oldRoom in remarkList)
{
var OldM = req.ApptRemarks.Where(t => t.Guid == oldRoom.Guid).FirstOrDefault();
if (OldM == null)
{
oldData = JsonConvert.SerializeObject(oldRoom);
_ApptLog.SetLog("appt_remark", oldRoom.Id.ToString(), oldData, null, loginUserRes.Info.UserAccount, 1);
Db.Deleteable<ApptRemark>().Where(t => t.ApptId == summaryM.Id && t.Guid == oldRoom.Guid).ExecuteCommand();
}
}
// 添加新数据
var addList = req.ApptRemarks.Where(t => t.Id == null || t.Id.Value == 0).ToList();
if (addList.Count > 0)
{
var dataInList = new List<ApptRemark>();
foreach (var item in addList)
{
var newM = new ApptRemark
{
Guid = Guid.NewGuid().ToString(),
ApptId = summaryM.Id,
Title = item.Title,
Info = item.Info,
};
var reR = InsertReturnId(newM);
if (!reR.IsSuccess) throw new Exception(reR.Msg);
newM.Id = reR.Info;
_ApptLog.SetLog("appt_remark", newM.Id.ToString(), null, JsonConvert.SerializeObject(newM), loginUserRes.Info.UserAccount, 1);
}
}
// 修改
var upls = req.ApptRemarks.Where(t => !string.IsNullOrEmpty(t.Guid) && remarkList.Select(r => r.Guid).Contains(t.Guid)).ToList();
var update = new List<ApptRemark>();
foreach (var item in upls)
{
var model = remarkList.Where(t => t.Guid == item.Guid).FirstOrDefault();
if (model != null)
{
oldData = JsonConvert.SerializeObject(model);
if (oldData != JsonConvert.SerializeObject(item))
{
model.Title = item.Title;
model.Info = item.Info;
update.Add(model);
_ApptLog.SetLog("appt_remark", item.Id.ToString(), oldData, JsonConvert.SerializeObject(model), loginUserRes.Info.UserAccount, 1);
}
}
}
if (update.Count > 0) UpdateRange(update);
}
if (summaryM.StartDay != startDay || summaryM.EndDay != endDay)
{
summaryM.StartDay = startDay;
summaryM.EndDay = endDay;
Update(summaryM);
}
Db.Ado.CommitTran();
}
catch (Exception ex)
{
Db.Ado.RollbackTran();
return ApiResult<int>.Failed(ex.Message);
}
return ApiResult<int>.Success(info: summaryM.Id.Value);
}
/// <summary>
/// 申请审核单
/// </summary>
/// <param name="req"></param>
/// <returns></returns>
public ApiResult ApplyOrder(ApplyOrderReq req)
{
DateTime now = DateTime.Now;
req = req.Replace();
if (req.RemarkPics != null && req.RemarkPics.Count > 5)
{
return ApiResult.Failed("操作失败,最多只可上传5张图片!");
}
var loginUserRes = BaseRepo.DECLoginInfo(req.AccountDes);
if (!loginUserRes.IsSuccess) return ApiResult.Failed(loginUserRes.Msg);
var summaryM = Db.Queryable<ApptSummary>().Where(t => t.Id == req.Id).First();
if (summaryM == null || summaryM.ApptTypeId != 2) return ApiResult.Failed("未获取订单数据!");
if (summaryM.UserId != loginUserRes.Info.UserAccount) return ApiResult.Failed("只有创建人具有操作权限!");
//if (summaryM.AuditorStatus != (int)EnumAuditorStatus.江南春模式暂订单
// && summaryM.AuditorStatus != (int)EnumAuditorStatus.江南春模式确定单
// && summaryM.AuditorStatus != (int)EnumAuditorStatus.江南春模式暂订单驳回
// && summaryM.AuditorStatus != (int)EnumAuditorStatus.江南春模式确定单驳回)
if (summaryM.AuditorStatus != (int)EnumAuditorJncStatus.暂订单) return ApiResult.Failed("该订单类型不可提交!");
string oldData = JsonConvert.SerializeObject(summaryM);
//int status = 0; // 1-已经申请为确定单,销售申请OA
var audits = Db.Queryable<ApptSummary>()
.Where(t => t.Guid == summaryM.Guid && summaryM.AuditorStatus == (int)EnumAuditorJncStatus.归档资源单)
.ToList();
if (audits != null && audits.Count > 0)
{
summaryM.ApplyOA = 1;
}
summaryM.AuditorStatus = (int)EnumAuditorJncStatus.审核单申请;
Update(summaryM);
_ApptLog.SetLog("appt_summary", summaryM.Id.ToString(), oldData, JsonConvert.SerializeObject(summaryM), loginUserRes.Info.UserAccount, 1);
var apptAuditLog = new ApptAuditLog()
{
Type = 1,
CreateTime = now,
UserId = loginUserRes.Info.UserAccount,
ApptId = summaryM.Id.Value,
AuditorStatus = summaryM.AuditorStatus.Value,
Remark = req.Remark,
};
if (req.RemarkPics != null)
{
if (req.RemarkPics.Count > 0) apptAuditLog.Pic0 = req.RemarkPics[0];
if (req.RemarkPics.Count > 1) apptAuditLog.Pic1 = req.RemarkPics[1];
if (req.RemarkPics.Count > 2) apptAuditLog.Pic2 = req.RemarkPics[2];
if (req.RemarkPics.Count > 3) apptAuditLog.Pic3 = req.RemarkPics[3];
if (req.RemarkPics.Count > 4) apptAuditLog.Pic4 = req.RemarkPics[4];
}
InsertReturnId(apptAuditLog);
PostMsg(summaryM);
return ApiResult.Success();
}
/// <summary>
/// 取消OA单
/// </summary>
/// <param name="req"></param>
/// <returns></returns>
/// <remarks>
/// 未占用资源时,只有发起人可以取消;
/// 未用资源后,只有预定部可以取消;
/// </remarks>
public ApiResult Cancel(ApplyOrderReq req)
{
DateTime now = DateTime.Now;
req = req.Replace();
var loginUserRes = BaseRepo.DECLoginInfo(req.AccountDes);
if (!loginUserRes.IsSuccess) return ApiResult.Failed(loginUserRes.Msg);
var summaryM = Db.Queryable<ApptSummary>().Where(t => t.Id == req.Id).First();
if (summaryM == null || summaryM.ApptTypeId != 2) return ApiResult.Failed("未获取订单数据!");
if (summaryM.AuditorStatus == (int)EnumAuditorJncStatus.取消单) return ApiResult.Success();
if (string.IsNullOrEmpty(req.Remark)) return ApiResult.Failed("取消订单内容不能为空!");
if (summaryM.ApplyOA == 0 && summaryM.UserId == loginUserRes.Info.UserAccount) // 发起人
{
summaryM.AuditorStatus = (int)EnumAuditorJncStatus.取消单;
Update(summaryM);
var apptAuditLog = new ApptAuditLog()
{
Type = 1,
CreateTime = now,
UserId = loginUserRes.Info.UserAccount,
ApptId = summaryM.Id.Value,
AuditorStatus = (int)EnumAuditorJncStatus.取消单,
Remark = req.Remark,
};
if (req.RemarkPics != null)
{
if (req.RemarkPics.Count > 0) apptAuditLog.Pic0 = req.RemarkPics[0];
if (req.RemarkPics.Count > 1) apptAuditLog.Pic1 = req.RemarkPics[1];
if (req.RemarkPics.Count > 2) apptAuditLog.Pic2 = req.RemarkPics[2];
if (req.RemarkPics.Count > 3) apptAuditLog.Pic3 = req.RemarkPics[3];
if (req.RemarkPics.Count > 4) apptAuditLog.Pic4 = req.RemarkPics[4];
}
InsertReturnId(apptAuditLog);
}
else if (summaryM.ApplyOA == 1)
{
string jncAuditor = JncAuditor[0];
string group = Db.Queryable<ApptAuditor>().Where(t => t.OpDescript == jncAuditor).First()?.OpGroup;
if (loginUserRes.Info.UserGroup == group) // 预定部
{
if (!string.IsNullOrEmpty(summaryM.GrpNo))
{
string accnt = summaryM.GrpNo;
string op_id = "xx";
var dt1 = Db.Ado.UseStoredProcedure().GetDataTable("p_yyj_gblock_cancel", new { accnt, op_id });
if (dt1.Rows.Count > 0 && dt1.Rows[0][0] != null && dt1.Rows[0][0].ToString() != "0")
{
string msg = $"取消团队失败,失败原因:{dt1.Rows[0][1]}";
_logger.Error(msg);
throw new Exception(msg);
}
var result = Db.Updateable<GrpInfo>()
.SetColumns(t => new GrpInfo { Sta = "C" })
.Where(t => t.Accnt == summaryM.GrpNo)
.ExecuteCommand();
}
summaryM.AuditorStatus = (int)EnumAuditorJncStatus.归档资源单;
Update(summaryM);
var sm = Db.Queryable<ApptSummary>().Where(t => t.Guid == summaryM.Guid && t.AuditorStatus == (int)EnumAuditorJncStatus.归档暂定单).First();
if (sm == null) return ApiResult.Failed("未找到归档暂定单!");
sm.AuditorStatus = (int)EnumAuditorJncStatus.取消单;
Update(sm);
var apptAuditLog = new ApptAuditLog()
{
Type = 1,
CreateTime = now,
UserId = loginUserRes.Info.UserAccount,
ApptId = sm.Id.Value,
AuditorStatus = (int)EnumAuditorJncStatus.取消单,
Remark = req.Remark,
};
if (req.RemarkPics != null)
{
if (req.RemarkPics.Count > 0) apptAuditLog.Pic0 = req.RemarkPics[0];
if (req.RemarkPics.Count > 1) apptAuditLog.Pic1 = req.RemarkPics[1];
if (req.RemarkPics.Count > 2) apptAuditLog.Pic2 = req.RemarkPics[2];
if (req.RemarkPics.Count > 3) apptAuditLog.Pic3 = req.RemarkPics[3];
if (req.RemarkPics.Count > 4) apptAuditLog.Pic4 = req.RemarkPics[4];
}
InsertReturnId(apptAuditLog);
var userWxServiceId = Db.Queryable<UcLogin>().Where(t => t.OpId == summaryM.UserId).First()?.WxServiceId;
if (!string.IsNullOrEmpty(userWxServiceId))
{
string AppId = BaseConfig.App(new string[] { "WeChatService", "AppId" });
string Hotelid = BaseConfig.App(new string[] { "Hotelid" });
if (AppId == "wx3f193488e04b2ed8") // 江南春
{
// 80CnTAF5tLIPJgi6GPS2eEit-bDqFZ_IjYEeGjarQx8 内容示例
// 审核提醒
//===========================
// 资料已提交,请尽快审核 {{first.DATA}}
// 审核内容:XX资料 审核内容:{{keyword1.DATA}} [建议标题]
// 时间:2015-06-22 {{keyword2.DATA}}
// 请尽快审核 {{remark.DATA}}
//-----------------------------
// 详情
//===========================
string first = $"预定部 {loginUserRes.Info.UserName}取消了您的订单";
var keyword = new[] { $"{summaryM.BuyerTitle}", now.ToString("yyyy-MM-dd HH:mm") };
string remark = "请注意查看";
AizhuhotelHelper.SendTemplateMsg(userWxServiceId, "80CnTAF5tLIPJgi6GPS2eEit-bDqFZ_IjYEeGjarQx8", $"pages/index/index?hotelid={Hotelid}&status=5", first, remark, keyword);
}
else if (AppId == "wx2b6e92e9e0c6025f") // 香堤湾
{
//---------------
// {{first.DATA}}
// 订单编号:{{OrderSn.DATA}}
// 订单状态:{{OrderStatus.DATA}}
// {{remark.DATA}}
//-----------
// 详情 >
//---------------
// 2024-09-12
string appId = BaseConfig.App(new string[] { "WeChat", "AppId" });
if (string.IsNullOrWhiteSpace(appId)) ApiResult<WeChatLoginRes>.Failed("缺少配置参数 [AppId]!");
var first = $"预定部 {loginUserRes.Info.UserName}取消了您的订单";
var json = new
{
touser = userWxServiceId,
template_id = "21Qr9bf5k3UlxD3K6EBKjEnxrz8Djiw6TIu6yExMGLg",
miniprogram = new
{
appid = appId, // 小程序appId
pagepath = $"pages/index/index?hotelid={Hotelid}&status=5" // 跳转到小程序中的地址
},
topcolor = "#FF0000",
data = new
{
first = new { value = first },
keyword1 = new { value = summaryM.No },
keyword2 = new { value = first },
remark = new { value = "请注意查看" }
}
};
var msg = JsonConvert.SerializeObject(json);
AizhuhotelHelper.SendTempMsg(msg);
}
else
{
throw new Exception("消息模板未配置");
}
}
}
else
{
return ApiResult.Failed("没有操作权限!");
}
}
else
{
return ApiResult.Failed("没有操作权限!");
}
return ApiResult.Success();
}
/// <summary>
/// 审核通过
/// </summary>
/// <param name="req"></param>
/// <returns></returns>
public ApiResult AuditorSummary(ApplyOrderReq req)
{
req = req.Replace();
if (req.RemarkPics != null && req.RemarkPics.Count > 5)
{
return ApiResult.Failed("操作失败,最多只可上传5张图片!");
}
ApptSummary summaryM = Db.Queryable<ApptSummary>()
.Where(t => t.Id == req.Id && t.ApptTypeId == 2).First();
if (summaryM == null) return ApiResult.Failed("订单不存在");
if (summaryM.AuditorStatus == (int)EnumAuditorJncStatus.审核单申请)
{
return ApprovedByAuditor(req);
}
DateTime now = DateTime.Now;
if (JncAuditor.Length != 5) return ApiResult.Failed("审核配置无效!");
var loginUserRes = BaseRepo.DECLoginInfo(req.AccountDes);
if (!loginUserRes.IsSuccess) return ApiResult.Failed(loginUserRes.Msg);
// 判断权限
EnumAuditorJncStatus nextStatus = EnumAuditorJncStatus.全部;
string descript = "";
switch ((EnumAuditorJncStatus)summaryM.AuditorStatus)
{
case EnumAuditorJncStatus.审核单预定部:
descript = JncAuditor[1];
nextStatus = EnumAuditorJncStatus.审核单销售经理;
break;
case EnumAuditorJncStatus.审核单销售经理:
descript = JncAuditor[2];
nextStatus = EnumAuditorJncStatus.审核单财务经理;
break;
case EnumAuditorJncStatus.审核单财务经理:
descript = JncAuditor[3];
nextStatus = EnumAuditorJncStatus.审核单财务总监;
break;
case EnumAuditorJncStatus.审核单财务总监:
descript = JncAuditor[4];
nextStatus = EnumAuditorJncStatus.确定单;
break;
case EnumAuditorJncStatus.确定单:
if (summaryM.UserId != loginUserRes.Info.UserAccount)
{
return ApiResult.Failed("没有操作权限!");
}
descript = "本人";
nextStatus = EnumAuditorJncStatus.完成单;
break;
default:
return ApiResult.Failed("审核状态不正确!");
}
if (descript != "本人")
{
var userGroup = Db.Queryable<UcLogin, ApptAuditor>((u, a) => new JoinQueryInfos(
JoinType.Left, u.OpGroup == a.OpGroup
))
.Where((u, a) => u.OpId.Trim() == loginUserRes.Info.UserAccount && a.ApptTypeId == 2 && a.OpDescript == descript)
.ToList();
if (userGroup == null || userGroup.Count < 1) return ApiResult.Failed("没有操作权限!");
}
string oldData = JsonConvert.SerializeObject(summaryM);
summaryM.AuditorStatus = (int)nextStatus;
var upRe = Update(summaryM);
if (!upRe.IsSuccess) return upRe;
_ApptLog.SetLog("appt_summary", req.Id.ToString(), oldData, JsonConvert.SerializeObject(summaryM), loginUserRes.Info.UserAccount, 1);
ApptAuditLog apptAuditLog = new ApptAuditLog
{
Type = 1,
CreateTime = now,
UserId = loginUserRes.Info.UserAccount,
ApptId = summaryM.Id.Value,
AuditorStatus = (int)nextStatus,
Remark = req.Remark,
Source = "",
};
if (req.RemarkPics != null)
{
if (req.RemarkPics.Count > 0) apptAuditLog.Pic0 = req.RemarkPics[0];
if (req.RemarkPics.Count > 1) apptAuditLog.Pic1 = req.RemarkPics[1];
if (req.RemarkPics.Count > 2) apptAuditLog.Pic2 = req.RemarkPics[2];
if (req.RemarkPics.Count > 3) apptAuditLog.Pic3 = req.RemarkPics[3];
if (req.RemarkPics.Count > 4) apptAuditLog.Pic4 = req.RemarkPics[4];
}
InsertReturnId(apptAuditLog);
if (nextStatus == EnumAuditorJncStatus.完成单)
{
AotoCopy(summaryM.Id.Value);
}
PostMsg(summaryM);
return ApiResult.Success();
}
/// <summary>
/// 被驳回
/// </summary>
/// <param name="req"></param>
/// <returns></returns>
public ApiResult RejectSummary(ApplyOrderReq req)
{
DateTime now = DateTime.Now;
req = req.Replace();
if (req.RemarkPics != null && req.RemarkPics.Count > 5)
{
return ApiResult.Failed("操作失败,最多只可上传5张图片!");
}
if (string.IsNullOrEmpty(req.Remark)) return ApiResult.Failed("驳回时内容不能为空!");
var loginUserRes = BaseRepo.DECLoginInfo(req.AccountDes);
if (!loginUserRes.IsSuccess) return ApiResult.Failed(loginUserRes.Msg);
if (JncAuditor.Length != 5) return ApiResult.Failed("审核配置无效!");
ApptSummary summaryM = Db.Queryable<ApptSummary>()
.Where(t => t.Id == req.Id && t.ApptTypeId == 2).First();
if (summaryM == null) return ApiResult.Failed("订单不存在");
// 判断权限
string descript = "";
switch ((EnumAuditorJncStatus)summaryM.AuditorStatus)
{
case EnumAuditorJncStatus.审核单申请:
descript = JncAuditor[0];
break;
case EnumAuditorJncStatus.审核单预定部:
descript = JncAuditor[1];
break;
case EnumAuditorJncStatus.审核单销售经理:
descript = JncAuditor[2];
break;
case EnumAuditorJncStatus.审核单财务经理:
descript = JncAuditor[3];
break;
case EnumAuditorJncStatus.审核单财务总监:
descript = JncAuditor[4];
break;
default:
return ApiResult.Failed("审核状态不正确!");
}
var userGroup = Db.Queryable<UcLogin, ApptAuditor>((u, a) => new JoinQueryInfos(
JoinType.Left, u.OpGroup == a.OpGroup
))
.Where((u, a) => u.OpId.Trim() == loginUserRes.Info.UserAccount && a.ApptTypeId == 2 && a.OpDescript == descript)
.ToList();
if (userGroup == null || userGroup.Count < 1) return ApiResult.Failed("没有操作权限!");
string oldData = JsonConvert.SerializeObject(summaryM);
summaryM.AuditorStatus = (int)EnumAuditorJncStatus.驳回单;
var upRe = Update(summaryM);
if (!upRe.IsSuccess) return upRe;
ApptAuditLog apptAuditLog = new ApptAuditLog
{
Type = 1,
CreateTime = now,
UserId = loginUserRes.Info.UserAccount,
ApptId = summaryM.Id.Value,
AuditorStatus = (int)EnumAuditorJncStatus.驳回单,
Remark = req.Remark,
Source = "",
};
if (req.RemarkPics != null)
{
if (req.RemarkPics.Count > 0) apptAuditLog.Pic0 = req.RemarkPics[0];
if (req.RemarkPics.Count > 1) apptAuditLog.Pic1 = req.RemarkPics[1];
if (req.RemarkPics.Count > 2) apptAuditLog.Pic2 = req.RemarkPics[2];
if (req.RemarkPics.Count > 3) apptAuditLog.Pic3 = req.RemarkPics[3];
if (req.RemarkPics.Count > 4) apptAuditLog.Pic4 = req.RemarkPics[4];
}
var inRe = InsertReturnId(apptAuditLog);
if (!inRe.IsSuccess) return ApiResult.Failed(inRe.Msg);
_ApptLog.SetLog("appt_summary", req.Id.ToString(), oldData, JsonConvert.SerializeObject(summaryM), loginUserRes.Info.UserAccount, 1);
PostMsg(summaryM);
return ApiResult.Success();
}
/// <summary>
/// 手动抄送
/// </summary>
/// <param name="req"></param>
/// <returns></returns>
public ApiResult ManualCopy(ApptSendReq req)
{
DateTime now = DateTime.Now;
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 (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.IsNullOrEmpty(req.Remark) ? "" : req.Remark,
Source = loginUserRes.Info.UserAccount
});
}
if (ls.Count > 0) InsertRange(ls);
foreach (var item in userList)
{
if (!string.IsNullOrEmpty(item.WxServiceId))
{
SetCopyMsg(loginUserRes.Info.UserName, summaryM.BuyerTitle, item.WxServiceId, false, req.Remark);
}
}
return ApiResult.Success();
}
/// <summary>
/// 信息回复
/// </summary>
/// <param name="req"></param>
/// <returns></returns>
public ApiResult AddReply(AddMsgReq req)
{
DateTime now = DateTime.Now;
if (string.IsNullOrEmpty(req.Remark)) return ApiResult.Failed("信息回复时内容不能为空!");
var loginUserRes = BaseRepo.DECLoginInfo(req.AccountDes);
if (!loginUserRes.IsSuccess) return ApiResult.Failed(loginUserRes.Msg);
var apptAuditLogM = Db.Queryable<ApptAuditLog>().Where(t => t.Id == req.Id).First();
if (apptAuditLogM == null) return ApiResult.Failed("信息不存在,无法回复");
var apptAuditLog = new ApptAuditLog()
{
Type = 3,
CreateTime = now,
UserId = loginUserRes.Info.UserAccount,
ApptId = 0,
AuditorStatus = 0,
Remark = req.Remark,
Pic0 = null,
Pic1 = null,
Pic2 = null,
Pic3 = null,
Pic4 = null,
Source = null,
PId = req.Id,
};
if (req.PicList != null)
{
if (req.PicList.Count > 0) apptAuditLog.Pic0 = req.PicList[0];
if (req.PicList.Count > 1) apptAuditLog.Pic1 = req.PicList[1];
if (req.PicList.Count > 2) apptAuditLog.Pic2 = req.PicList[2];
if (req.PicList.Count > 3) apptAuditLog.Pic3 = req.PicList[3];
if (req.PicList.Count > 4) apptAuditLog.Pic4 = req.PicList[4];
}
var inRe = InsertReturnId(apptAuditLog);
if (!inRe.IsSuccess)
{
return ApiResult.Failed(inRe.Msg);
}
else
{
return ApiResult.Success();
}
}
// ---- 查
/// <summary>
/// 根据订单主键获取实体
/// </summary>
/// <param name="req"></param>
/// <returns></returns>
public ApiResult<SummaryJncDetailRep> GetSummaryModel(SummaryJncModelReq req)
{
ApiResult<LoginUserRes> loginUserRes = BaseRepo.DECLoginInfo(req.AccountDes);
if (!loginUserRes.IsSuccess) return ApiResult<SummaryJncDetailRep>.Failed(loginUserRes.Msg);
ApptSummary summaryM = Db.Queryable<ApptSummary>()
.Mapper(t => t.ApptRoomList, t => t.ApptRoomList.First().ApptId)
.Mapper(t => t.ApptMeetingList, t => t.ApptMeetingList.First().ApptId)
.Mapper(t => t.ApptCateringList, t => t.ApptCateringList.First().ApptId)
.Mapper(t => t.ApptSpringList, t => t.ApptSpringList.First().ApptId)
.Mapper(t => t.ApptRemarks, t => t.ApptRemarks.First().ApptId)
.Where(t => t.Id == req.Id && t.ApptTypeId == 2).First();
if (summaryM == null) return ApiResult<SummaryJncDetailRep>.Success(string.Empty, null);
// 如果不是正常单子返回 暂定单
if (summaryM.AuditorStatus == (int)EnumAuditorJncStatus.归档暂定单 || summaryM.AuditorStatus == (int)EnumAuditorJncStatus.归档资源单)
{
summaryM = Db.Queryable<ApptSummary>()
.Mapper(t => t.ApptRoomList, t => t.ApptRoomList.First().ApptId)
.Mapper(t => t.ApptMeetingList, t => t.ApptMeetingList.First().ApptId)
.Mapper(t => t.ApptCateringList, t => t.ApptCateringList.First().ApptId)
.Mapper(t => t.ApptSpringList, t => t.ApptSpringList.First().ApptId)
.Mapper(t => t.ApptRemarks, t => t.ApptRemarks.First().ApptId)
.Where(t => t.Guid == summaryM.Guid && (t.AuditorStatus == (int)EnumAuditorJncStatus.归档暂定单 || summaryM.AuditorStatus == (int)EnumAuditorJncStatus.归档资源单)).First();
}
SummaryJncDetailRep re = RegexHelper.AutoCopy<ApptSummary, SummaryJncDetailRep>(summaryM);
var user = Db.Queryable<UcLogin>().Where(t => t.OpId == re.UserId).First();
re.UserName = user?.OpName;
return ApiResult<SummaryJncDetailRep>.Success(string.Empty, re);
}
public ApiResult<PagerData<SummaryJncDetailRep>> ApptSummaryPager(SummaryJNCPageReq req)
{
int total = 0;
DateTime now = DateTime.Now;
if (req.PageIndex < 1) req.PageIndex = 1;
if (req.PageSize < 1) req.PageSize = 10;
var reList = new PagerData<SummaryJncDetailRep>()
{
PageIndex = req.PageIndex,
PageSize = req.PageSize,
Total = total,
Data = new List<SummaryJncDetailRep>()
};
var loginUserRes = BaseRepo.DECLoginInfo(req.AccountDES);
if (!loginUserRes.IsSuccess) return ApiResult<PagerData<SummaryJncDetailRep>>.Failed(loginUserRes.Msg);
var _summarys = Db.Queryable<ApptSummary>().Where(t => t.ApptTypeId == 2);
// 查询标签
if (req.Menu == 21) // 暂定单 我的
{
_summarys = _summarys.Where(t => t.AuditorStatus == (int)EnumAuditorJncStatus.暂订单 && t.UserId == loginUserRes.Info.UserAccount);
}
else if (req.Menu == 22 || req.Menu == 3) // 暂定单 全部
{
_summarys = _summarys.Where(t => t.AuditorStatus == (int)EnumAuditorJncStatus.暂订单);
}
else if (req.Menu == 31) // 审核单 我的
{
_summarys = _summarys.Where(t => t.UserId == loginUserRes.Info.UserAccount &&
(
t.AuditorStatus == (int)EnumAuditorJncStatus.审核单申请
|| t.AuditorStatus == (int)EnumAuditorJncStatus.审核单预定部
|| t.AuditorStatus == (int)EnumAuditorJncStatus.审核单销售经理
|| t.AuditorStatus == (int)EnumAuditorJncStatus.审核单财务经理
|| t.AuditorStatus == (int)EnumAuditorJncStatus.审核单财务总监
)
);
}
else if (req.Menu == 32 || req.Menu == 4) // 审核单 全部
{
_summarys = _summarys.Where(t =>
t.AuditorStatus == (int)EnumAuditorJncStatus.审核单申请
|| t.AuditorStatus == (int)EnumAuditorJncStatus.审核单预定部
|| t.AuditorStatus == (int)EnumAuditorJncStatus.审核单销售经理
|| t.AuditorStatus == (int)EnumAuditorJncStatus.审核单财务经理
|| t.AuditorStatus == (int)EnumAuditorJncStatus.审核单财务总监
);
}
else if (req.Menu == 41) // 确定单 我的
{
_summarys = _summarys.Where(t => t.UserId == loginUserRes.Info.UserAccount && t.AuditorStatus == (int)EnumAuditorJncStatus.确定单);
}
else if (req.Menu == 42) // 确定单 全部
{
_summarys = _summarys.Where(t => t.AuditorStatus == (int)EnumAuditorJncStatus.确定单);
}
else if (req.Menu == 51) // 完成单 我的
{
_summarys = _summarys.Where(t => t.UserId == loginUserRes.Info.UserAccount && t.AuditorStatus == (int)EnumAuditorJncStatus.完成单);
}
else if (req.Menu == 52) // 完成单 全部
{
_summarys = _summarys.Where(t => t.AuditorStatus == (int)EnumAuditorJncStatus.完成单);
}
else if (req.Menu == 61) // 取消单 我的
{
_summarys = _summarys.Where(t => t.UserId == loginUserRes.Info.UserAccount && t.AuditorStatus == (int)EnumAuditorJncStatus.取消单);
}
else if (req.Menu == 62) // 取消单 全部
{
_summarys = _summarys.Where(t => t.AuditorStatus == (int)EnumAuditorJncStatus.取消单);
}
else if (req.Menu == 11) // 驳回单 我的
{
_summarys = _summarys.Where(t => t.UserId == loginUserRes.Info.UserAccount && t.AuditorStatus == (int)EnumAuditorJncStatus.驳回单);
}
else if (req.Menu == 12) // 驳回单 全部
{
_summarys = _summarys.Where(t => t.AuditorStatus == (int)EnumAuditorJncStatus.驳回单);
}
//else if (req.Menu == 72) // 前端销售角色多写的。。。。
//{
// return ApiResult<PagerData<SummaryJncDetailRep>>.Success(info: reList);
//}
// 审核员
List<int> apptIdShList = new List<int>();
if (req.Menu == 1) // 待我审核的
{
var myGroupM = Db.Queryable<ApptAuditor>().Where(t => t.OpGroup == loginUserRes.Info.UserGroup).First();
if (myGroupM == null) return ApiResult<PagerData<SummaryJncDetailRep>>.Success(info: reList);
if (myGroupM.OpDescript == JncAuditor[0]) // 当前审核员是 预定部
{
apptIdShList = Db.Queryable<ApptSummary>()
.Where(t => t.AuditorStatus == (int)EnumAuditorJncStatus.审核单申请).Select(t => t.Id.Value).ToList();
}
else if (myGroupM.OpDescript == JncAuditor[1])
{
apptIdShList = Db.Queryable<ApptSummary>()
.Where(t => t.AuditorStatus == (int)EnumAuditorJncStatus.审核单预定部).Select(t => t.Id.Value).ToList();
}
else if (myGroupM.OpDescript == JncAuditor[2])
{
apptIdShList = Db.Queryable<ApptSummary>()
.Where(t => t.AuditorStatus == (int)EnumAuditorJncStatus.审核单销售经理).Select(t => t.Id.Value).ToList();
}
else if (myGroupM.OpDescript == JncAuditor[3])
{
apptIdShList = Db.Queryable<ApptSummary>()
.Where(t => t.AuditorStatus == (int)EnumAuditorJncStatus.审核单财务经理).Select(t => t.Id.Value).ToList();
}
else if (myGroupM.OpDescript == JncAuditor[4])
{
apptIdShList = Db.Queryable<ApptSummary>()
.Where(t => t.AuditorStatus == (int)EnumAuditorJncStatus.审核单财务总监).Select(t => t.Id.Value).ToList();
}
_summarys = _summarys.In(t => t.Id, apptIdShList);
}
else if (req.Menu == 2) // 我审核过的
{
var auditorLogs = Db.Queryable<ApptAuditLog>()
.Where(t => t.Type == 1 && t.UserId == loginUserRes.Info.UserAccount && (
t.AuditorStatus == (int)EnumAuditorJncStatus.驳回单
|| t.AuditorStatus == (int)EnumAuditorJncStatus.审核单预定部
|| t.AuditorStatus == (int)EnumAuditorJncStatus.审核单销售经理
|| t.AuditorStatus == (int)EnumAuditorJncStatus.审核单财务经理
|| t.AuditorStatus == (int)EnumAuditorJncStatus.审核单财务总监
|| t.AuditorStatus == (int)EnumAuditorJncStatus.确定单
|| t.AuditorStatus == (int)EnumAuditorJncStatus.取消单
))
.Select(t => t.ApptId).ToList();
if (auditorLogs.Count > 0) apptIdShList.AddRange(auditorLogs);
_summarys = _summarys.In(t => t.Id, apptIdShList);
_summarys = _summarys.Where(t => t.AuditorStatus != (int)EnumAuditorJncStatus.归档暂定单 && t.AuditorStatus != (int)EnumAuditorJncStatus.归档资源单);
}
//else if (req.Menu == 5) // 审核员 全部订单 2021-10-10 去除了菜单
//{
// _summarys = _summarys.Where(t => t.AuditorStatus != (int)EnumAuditorJncStatus.归档暂定单 && t.AuditorStatus == (int)EnumAuditorJncStatus.归档资源单);
//}
else if (req.Menu == 6) // 抄送给我的
{
var auditorLogs = Db.Queryable<ApptAuditLog>()
.Where(t => t.Type == 2 && t.UserId == loginUserRes.Info.UserAccount && t.AuditorStatus != (int)EnumAuditorJncStatus.归档暂定单 && t.AuditorStatus != (int)EnumAuditorJncStatus.归档资源单)
.Select(t => t.ApptId).ToList();
if (auditorLogs.Count > 0) apptIdShList.AddRange(auditorLogs);
_summarys = _summarys.In(t => t.Id, apptIdShList);
}
// 日期跨度
if (!string.IsNullOrEmpty(req.StartDay))
{
if (!DateTime.TryParse(req.StartDay, out DateTime day))
{
return ApiResult<PagerData<SummaryJncDetailRep>>.Failed("日期格式无效!");
}
_summarys = _summarys.Where(t => t.StartDay <= day && t.EndDay >= day);
}
if (!string.IsNullOrEmpty(req.KeyWord))
{
_summarys = _summarys.Where(t => t.BuyerName.Contains(req.KeyWord) || t.BuyerTitle.Contains(req.KeyWord) || t.LeaderName.Contains(req.KeyWord));
}
var summarys = _summarys
.WhereIF(!string.IsNullOrEmpty(req.No), t => t.No.Contains(req.No))
.OrderBy(t => t.Id, OrderByType.Desc)
.ToPageList(req.PageIndex, req.PageSize, ref total);
List<SummaryJncDetailRep> detailList = new List<SummaryJncDetailRep>();
if (summarys != null && summarys.Count > 0)
{
List<UcLogin> users = Db.Queryable<UcLogin>().ToList();
foreach (var item in summarys)
{
var model = RegexHelper.AutoCopy<ApptSummary, SummaryJncDetailRep>(item);
model.UserName = users.Where(t => t.OpId.Trim() == item.UserId).FirstOrDefault()?.OpName;
if (item.AuditorStatus == (int)EnumAuditorJncStatus.暂订单)
{
model.IconStatus = 0;
}
else if (item.AuditorStatus == (int)EnumAuditorJncStatus.完成单)
{
model.IconStatus = 2;
}
else if (item.AuditorStatus == (int)EnumAuditorJncStatus.驳回单)
{
model.IconStatus = 3;
}
else if (item.AuditorStatus == (int)EnumAuditorJncStatus.取消单
|| item.AuditorStatus == (int)EnumAuditorJncStatus.归档暂定单
|| item.AuditorStatus == (int)EnumAuditorJncStatus.归档资源单)
{
model.IconStatus = 4;
}
else
{
model.IconStatus = 1;
}
detailList.Add(model);
}
}
reList.Total = total;
reList.Data = detailList;
// 打日志
if (detailList == null && detailList.Count == 0)
{
_logger.Info("未获取到列表数据,入参:" + JsonConvert.SerializeObject(req));
}
return ApiResult<PagerData<SummaryJncDetailRep>>.Success(string.Empty, reList);
}
/// <summary>
/// 获取审批流程
/// </summary>
/// <param name="req"></param>
/// <returns></returns>
public ApiResult<AuditorLogReq> AuditorLogTree(SummaryJncModelReq req)
{
if (JncAuditor.Length != 5) return ApiResult<AuditorLogReq>.Failed("审核配置无效!");
AuditorLogReq logRe = new AuditorLogReq
{
Authority = 0,
UpdateStatus = 0,
SubmitStatus = 0,
SumbitFinish = 0,
SumbitCancel = 0,
AuditorLog = new List<AuditorLogDataReq>(),
};
ApiResult<LoginUserRes> loginUserRes = BaseRepo.DECLoginInfo(req.AccountDes);
if (!loginUserRes.IsSuccess) return ApiResult<AuditorLogReq>.Failed(loginUserRes.Msg);
try
{
ApptSummary summaryM = Db.Queryable<ApptSummary>()
.Where(t => t.Id == req.Id && t.ApptTypeId == 2).First(); // 当前订单实体
var idList = Db.Queryable<ApptSummary>()
.Where(t => t.Guid == summaryM.Guid).Select(t => t.Id.Value).ToList(); // 当前订单的所有副本
var logL = Db.Queryable<ApptAuditLog>()
.Where(t => idList.Contains(t.ApptId)).OrderBy(t => t.Id, OrderByType.Asc).ToList(); // 当前订单副本的所有日志记录
var audotorL = Db.Queryable<ApptAuditor>().ToList(); // 审核权限表
if (summaryM.UserId == loginUserRes.Info.UserAccount)
{
logRe.UpdateStatus = 1; // 发起人具有修改权限
if (summaryM.ApplyOA == 0 && (
summaryM.AuditorStatus == (int)EnumAuditorJncStatus.暂订单
|| summaryM.AuditorStatus == (int)EnumAuditorJncStatus.审核单申请)
)
{
logRe.SumbitCancel = 1; // 当占用资源前,发起人具有取消权限
}
}
// 预定部取消权限判断
if (summaryM.ApplyOA == 1 && (
summaryM.AuditorStatus == (int)EnumAuditorJncStatus.暂订单
|| summaryM.AuditorStatus == (int)EnumAuditorJncStatus.审核单申请
|| summaryM.AuditorStatus == (int)EnumAuditorJncStatus.审核单预定部
|| summaryM.AuditorStatus == (int)EnumAuditorJncStatus.审核单销售经理
|| summaryM.AuditorStatus == (int)EnumAuditorJncStatus.审核单财务经理
|| summaryM.AuditorStatus == (int)EnumAuditorJncStatus.审核单财务总监
|| summaryM.AuditorStatus == (int)EnumAuditorJncStatus.确定单
|| summaryM.AuditorStatus == (int)EnumAuditorJncStatus.完成单
|| summaryM.AuditorStatus == (int)EnumAuditorJncStatus.驳回单)
)
{
string jncAuditor = JncAuditor[0];
string roup = audotorL.Where(t => t.OpDescript == jncAuditor).FirstOrDefault()?.OpGroup;
if (loginUserRes.Info.UserGroup == roup) logRe.SumbitCancel = 1;
}
if (logL != null && logL.Count > 0)
{
var userL = Db.Queryable<UcLogin>().ToList().Replace(); // 所人有员信息
var createUserM = userL.Where(t => t.OpId == summaryM.UserId).FirstOrDefault(); // 发起人
if (createUserM == null) return ApiResult<AuditorLogReq>.Failed("获取发起人失败!");
// var allReplys = Db.Queryable<ApptAuditLog>().Where(t => t.Type == 3).ToList(); // 所有回复的内容 [包含图片,查询很慢]
// 已操作的流程日志
List<int> statusList = new List<int>();
foreach (var item in logL)
{
var opNameM = userL.Where(t => t.OpId == item.UserId).FirstOrDefault(); // 审核人实体
var OpName = opNameM?.OpName;
var info = new List<string>()
{
$"操作时间:{item.CreateTime:yyyy-MM-dd HH:mm:ss}"
};
if (!string.IsNullOrEmpty(item.Remark))
{
if (item.UserId == summaryM.UserId)
{
info.Add($"提交备注:{item.Remark}");
}
else
{
info.Add($"审批备注:{item.Remark}");
}
}
List<string> picList = new List<string>();
if (!string.IsNullOrEmpty(item.Pic0)) picList.Add(item.Pic0);
if (!string.IsNullOrEmpty(item.Pic1)) picList.Add(item.Pic1);
if (!string.IsNullOrEmpty(item.Pic2)) picList.Add(item.Pic2);
if (!string.IsNullOrEmpty(item.Pic3)) picList.Add(item.Pic3);
if (!string.IsNullOrEmpty(item.Pic4)) picList.Add(item.Pic4);
// 组装回复贪睡
List<ReplyResp> replyList = GetReplyList(userL, item.Id);
if (replyList == null || replyList.Count == 0) replyList = null;
if (item.AuditorStatus == (int)EnumAuditorJncStatus.暂订单)
{
if (statusList.Where(t => t == (int)EnumAuditorJncStatus.暂订单).Count() == 0)
{
logRe.AuditorLog.Add(new AuditorLogDataReq
{
Id = item.Id,
Title = $"{OpName}发起",
Status = 1,
Info = info,
PicList = picList,
ReplyList = replyList,
});
statusList.Add((int)EnumAuditorJncStatus.暂订单);
}
}
else if (item.AuditorStatus == (int)EnumAuditorJncStatus.审核单申请)
{
int num = statusList.Where(t => t == (int)EnumAuditorJncStatus.审核单申请).Count();
logRe.AuditorLog.Add(new AuditorLogDataReq
{
Id = item.Id,
Title = num == 0 ? $"{OpName}提交申请确定单" : $"{OpName}重新提交申请确定单",
Status = 1,
Info = info,
PicList = picList,
ReplyList = replyList,
});
statusList.Add((int)EnumAuditorJncStatus.审核单申请);
}
else if (item.AuditorStatus == (int)EnumAuditorJncStatus.审核单预定部)
{
int num = statusList.Where(t => t == (int)EnumAuditorJncStatus.审核单预定部).Count();
logRe.AuditorLog.Add(new AuditorLogDataReq
{
Id = item.Id,
Title = num == 0 ? $"预定部{OpName}审核通过" : $"预定部{OpName}审核通过",
Status = 1,
Info = info,
PicList = picList,
ReplyList = replyList,
});
statusList.Add((int)EnumAuditorJncStatus.审核单预定部);
}
else if (item.AuditorStatus == (int)EnumAuditorJncStatus.审核单销售经理)
{
int num = statusList.Where(t => t == (int)EnumAuditorJncStatus.审核单销售经理).Count();
logRe.AuditorLog.Add(new AuditorLogDataReq
{
Id = item.Id,
Title = num == 0 ? $"销售经理{OpName}审核通过" : $"销售经理{OpName}重新审核通过",
Status = 1,
Info = info,
PicList = picList,
ReplyList = replyList,
});
statusList.Add((int)EnumAuditorJncStatus.审核单销售经理);
}
else if (item.AuditorStatus == (int)EnumAuditorJncStatus.审核单财务经理)
{
int num = statusList.Where(t => t == (int)EnumAuditorJncStatus.审核单财务经理).Count();
logRe.AuditorLog.Add(new AuditorLogDataReq
{
Id = item.Id,
Title = num == 0 ? $"财务经理{OpName}审核通过" : $"财务经理{OpName}重新审核通过",
Status = 1,
Info = info,
PicList = picList,
ReplyList = replyList,
});
statusList.Add((int)EnumAuditorJncStatus.审核单财务经理);
}
else if (item.AuditorStatus == (int)EnumAuditorJncStatus.审核单财务总监)
{
int num = statusList.Where(t => t == (int)EnumAuditorJncStatus.审核单财务总监).Count();
logRe.AuditorLog.Add(new AuditorLogDataReq
{
Id = item.Id,
Title = num == 0 ? $"财务总监{OpName}审核通过" : $"财务总监{OpName}重新审核通过",
Status = 1,
Info = info,
PicList = picList,
ReplyList = replyList,
});
statusList.Add((int)EnumAuditorJncStatus.审核单财务总监);
}
else if (item.AuditorStatus == (int)EnumAuditorJncStatus.确定单)
{
int num = statusList.Where(t => t == (int)EnumAuditorJncStatus.确定单).Count();
info.Add("订单状态:审批完成");
logRe.AuditorLog.Add(new AuditorLogDataReq
{
Id = item.Id,
Title = num == 0 ? $"总经理{OpName}审核通过" : $"总经理{OpName}重新审核通过",
Status = 1,
Info = info,
PicList = picList,
ReplyList = replyList,
});
statusList.Add((int)EnumAuditorJncStatus.确定单);
}
else if (item.AuditorStatus == (int)EnumAuditorJncStatus.完成单)
{
int num = statusList.Where(t => t == (int)EnumAuditorJncStatus.完成单).Count();
info.Add("订单状态:订单流程结束");
logRe.AuditorLog.Add(new AuditorLogDataReq
{
Id = item.Id,
Title = num == 0 ? $"{createUserM.OpName}发起完成单,订单流程结束" : $"{createUserM.OpName}发起完成单,订单流程再次结束",
Status = 1,
Info = info,
PicList = picList,
ReplyList = replyList,
});
statusList.Add((int)EnumAuditorJncStatus.完成单);
}
else if (item.AuditorStatus == (int)EnumAuditorJncStatus.驳回单)
{
string opGroup = "";
if (opNameM != null)
{
opGroup = audotorL.Where(t => t.OpGroup == opNameM.OpGroup).FirstOrDefault()?.OpDescript;
}
int num = statusList.Where(t => t == (int)EnumAuditorJncStatus.驳回单).Count();
info.Add("订单状态:订单被驳回,请调整订单重新提交或取消订单。");
logRe.AuditorLog.Add(new AuditorLogDataReq
{
Id = item.Id,
Title = num == 0 ? $"{opGroup}{OpName}驳回了订单" : $"{opGroup}{OpName}再次驳回了订单",
Status = 1,
Info = info,
PicList = picList,
ReplyList = replyList,
});
statusList.Add((int)EnumAuditorJncStatus.驳回单);
}
else if (item.AuditorStatus == (int)EnumAuditorJncStatus.取消单)
{
int num = statusList.Where(t => t == (int)EnumAuditorJncStatus.取消单).Count();
info.Add("订单状态:订单被取消");
string goupName = "";
if (summaryM.UserId != item.UserId)
{
goupName = audotorL.Where(t => t.OpGroup == opNameM.OpGroup).FirstOrDefault()?.OpDescript;
}
logRe.AuditorLog.Add(new AuditorLogDataReq
{
Id = item.Id,
Title = num == 0 ? $"{goupName}{OpName}取消了订单,订单流程结束" : $"{goupName}{OpName}取消了订单,订单流程再次结束",
Status = 1,
Info = info,
PicList = picList,
ReplyList = replyList,
});
statusList.Add((int)EnumAuditorJncStatus.取消单);
}
else if (item.AuditorStatus == 3)
{
string _rem = string.IsNullOrEmpty(item.Remark) ? "无" : item.Remark;
if (string.IsNullOrEmpty(item.Source))
{
if (item.UserId == loginUserRes.Info.UserAccount)
{
// 我收到的自动抄送
logRe.AuditorLog.Add(new AuditorLogDataReq
{
Id = item.Id,
Title = $"自动抄送",
Status = 1,
Info = new List<string>
{
$"操作时间:{item.CreateTime:yyyy-MM-dd HH:mm:ss}",
$"抄送备注:{_rem}"
},
PicList = picList,
ReplyList = replyList,
});
}
}
else
{
if (item.UserId == loginUserRes.Info.UserAccount)
{
// 手动抄送给我的
int num = statusList.Where(t => t == 3).Count();
var sourceN = userL.Where(t => t.OpId == item.Source).FirstOrDefault()?.OpName;
logRe.AuditorLog.Add(new AuditorLogDataReq
{
Id = item.Id,
Title = num == 0 ? $"{sourceN}抄送给我" : $"{sourceN}再次抄送给我",
Status = 1,
Info = new List<string>
{
$"操作时间:{item.CreateTime:yyyy-MM-dd HH:mm:ss}",
$"抄送备注:{_rem}"
},
PicList = picList,
ReplyList = replyList,
});
statusList.Add(3);
}
else if (item.Source == loginUserRes.Info.UserAccount)
{
int num = statusList.Where(t => t == 4).Count();
logRe.AuditorLog.Add(new AuditorLogDataReq
{
Id = item.Id,
Title = num == 0 ? $"我抄送给{OpName}" : $"我再次抄送给{OpName}",
Status = 1,
Info = new List<string>
{
$"操作时间:{item.CreateTime:yyyy-MM-dd HH:mm:ss}",
$"抄送备注:{_rem}"
},
PicList = picList,
ReplyList = replyList,
});
statusList.Add(4);
}
}
}
}
// 待操作的流程
var next = logL.Where(t => t.AuditorStatus != 3).LastOrDefault();
if (next != null)
{
int num = 0;
if (next.AuditorStatus == (int)EnumAuditorJncStatus.暂订单)
{
var newLog = new AuditorLogDataReq
{
Id = 0,
Title = $"{createUserM.OpName}待提交申请确定单",
Status = 2,
Info = new List<string>(),
PicList = new List<string>(),
};
num = statusList.Where(t =>
t == (int)EnumAuditorJncStatus.审核单申请
|| t == (int)EnumAuditorJncStatus.审核单预定部
|| t == (int)EnumAuditorJncStatus.审核单销售经理
|| t == (int)EnumAuditorJncStatus.审核单财务经理
|| t == (int)EnumAuditorJncStatus.审核单财务总监
|| t == (int)EnumAuditorJncStatus.确定单
).Count();
if (num > 0) newLog.Title = $"{createUserM.OpName}撤回订单重新发起";
logRe.AuditorLog.Add(newLog);
if (createUserM.OpId == loginUserRes.Info.UserAccount)
{
logRe.SubmitStatus = 1;
}
}
else if (next.AuditorStatus == (int)EnumAuditorJncStatus.审核单申请)
{
var OpGroup = audotorL.Where(t => t.OpDescript == JncAuditor[0]).FirstOrDefault()?.OpGroup;
var userSH = string.Join(",", userL.Where(t => t.OpGroup.Trim() == OpGroup).Select(t => t.OpName).ToList());
logRe.AuditorLog.Add(new AuditorLogDataReq
{
Id = 0,
Title = $"待生成确定单",
Status = 2,
Info = new List<string>() { $"可操作人员:{userSH}", },
PicList = new List<string>(),
});
if (loginUserRes.Info.UserGroup == OpGroup)
{
logRe.Authority = 1;
}
}
else if (next.AuditorStatus == (int)EnumAuditorJncStatus.审核单预定部)
{
var OpGroup = audotorL.Where(t => t.OpDescript == JncAuditor[1]).FirstOrDefault()?.OpGroup;
var userSH = string.Join(",", userL.Where(t => t.OpGroup.Trim() == OpGroup).Select(t => t.OpName).ToList());
logRe.AuditorLog.Add(new AuditorLogDataReq
{
Id = 0,
Title = $"销售经理审核中",
Status = 2,
Info = new List<string>() { $"可操作人员:{userSH}", },
PicList = new List<string>(),
});
if (loginUserRes.Info.UserGroup == OpGroup)
{
logRe.Authority = 1;
}
}
else if (next.AuditorStatus == (int)EnumAuditorJncStatus.审核单销售经理)
{
var OpGroup = audotorL.Where(t => t.OpDescript == JncAuditor[2]).FirstOrDefault()?.OpGroup;
var userSH = string.Join(",", userL.Where(t => t.OpGroup.Trim() == OpGroup).Select(t => t.OpName).ToList());
logRe.AuditorLog.Add(new AuditorLogDataReq
{
Id = 0,
Title = $"财务经理审核中",
Status = 2,
Info = new List<string>() { $"可操作人员:{userSH}", },
PicList = new List<string>(),
});
if (loginUserRes.Info.UserGroup == OpGroup)
{
logRe.Authority = 1;
}
}
else if (next.AuditorStatus == (int)EnumAuditorJncStatus.审核单财务经理)
{
var OpGroup = audotorL.Where(t => t.OpDescript == JncAuditor[3]).FirstOrDefault()?.OpGroup;
var userSH = string.Join(",", userL.Where(t => t.OpGroup.Trim() == OpGroup).Select(t => t.OpName).ToList());
logRe.AuditorLog.Add(new AuditorLogDataReq
{
Id = 0,
Title = $"财务总监审核中",
Status = 2,
Info = new List<string>() { $"可操作人员:{userSH}", },
PicList = new List<string>(),
});
if (loginUserRes.Info.UserGroup == OpGroup)
{
logRe.Authority = 1;
}
}
else if (next.AuditorStatus == (int)EnumAuditorJncStatus.审核单财务总监)
{
var OpGroup = audotorL.Where(t => t.OpDescript == JncAuditor[4]).FirstOrDefault()?.OpGroup;
var userSH = string.Join(",", userL.Where(t => t.OpGroup.Trim() == OpGroup).Select(t => t.OpName).ToList());
logRe.AuditorLog.Add(new AuditorLogDataReq
{
Id = 0,
Title = $"总经理审核中",
Status = 2,
Info = new List<string>() { $"可操作人员:{userSH}", },
PicList = new List<string>(),
});
if (loginUserRes.Info.UserGroup == OpGroup)
{
logRe.Authority = 1;
}
}
else if (next.AuditorStatus == (int)EnumAuditorJncStatus.确定单)
{
logRe.AuditorLog.Add(new AuditorLogDataReq
{
Id = 0,
Title = $"审核完成",
Status = 2,
Info = new List<string>() { $"可操作人员:{createUserM.OpName}", "操作提示:请在时间来临时,与客户确定后点击完成,以便将该OA信息推送给相关人员。" },
PicList = new List<string>(),
});
if (createUserM.OpId == loginUserRes.Info.UserAccount)
{
logRe.SumbitFinish = 1;
}
}
else if (next.AuditorStatus == (int)EnumAuditorJncStatus.驳回单)
{
logRe.AuditorLog.Add(new AuditorLogDataReq
{
Id = 0,
Title = $"编辑或取消订单",
Status = 2,
Info = new List<string>() { $"可操作人员:{createUserM.OpName}", "操作提示:请编辑重新提交或取消订单。" },
PicList = new List<string>(),
});
}
}
}
return ApiResult<AuditorLogReq>.Success(info: logRe);
}
catch (Exception ex)
{
return ApiResult<AuditorLogReq>.Failed(ex.Message);
}
}
/// <summary>
/// 订单数据差异
/// </summary>
/// <param name="req"></param>
/// <returns></returns>
/// <remarks>
/// </remarks>
public ApiResult<List<DisparityReq>> Disparity(SummaryJncModelReq req)
{
List<DisparityReq> list = new List<DisparityReq>();
ApiResult<LoginUserRes> loginUserRes = BaseRepo.DECLoginInfo(req.AccountDes);
if (!loginUserRes.IsSuccess) return ApiResult<List<DisparityReq>>.Failed(loginUserRes.Msg);
string summaryGuid = Db.Queryable<ApptSummary>().Where(t => t.Id == req.Id && t.ApptTypeId == 2).First()?.Guid;
if (string.IsNullOrEmpty(summaryGuid)) return ApiResult<List<DisparityReq>>.Failed("订单不存在");
List<ApptSummary> summaryAll = Db.Queryable<ApptSummary>().Where(t => t.Guid == summaryGuid).ToList();
if (summaryAll.Count <= 0)
{
return ApiResult<List<DisparityReq>>.Failed("订单不存在");
}
else if (summaryAll.Count == 1)
{
list.Add(new DisparityReq
{
Title = "创建新的暂订单",
Time = summaryAll[0].CreateTime.Value,
Info = new List<string>(),
});
return ApiResult<List<DisparityReq>>.Success(info: list);
}
// 获取归档资源单列表
var summaryL2 = summaryAll.Where(t => t.AuditorStatus == (int)EnumAuditorJncStatus.归档资源单).OrderBy(t => t.Id).ToList();
// 获取最新的数据
var summaryM1 = summaryAll.Where(
t => t.AuditorStatus == (int)EnumAuditorJncStatus.暂订单
|| t.AuditorStatus == (int)EnumAuditorJncStatus.审核单申请
|| t.AuditorStatus == (int)EnumAuditorJncStatus.审核单预定部
|| t.AuditorStatus == (int)EnumAuditorJncStatus.审核单销售经理
|| t.AuditorStatus == (int)EnumAuditorJncStatus.审核单财务经理
|| t.AuditorStatus == (int)EnumAuditorJncStatus.审核单财务总监
|| t.AuditorStatus == (int)EnumAuditorJncStatus.确定单
|| t.AuditorStatus == (int)EnumAuditorJncStatus.完成单
|| t.AuditorStatus == (int)EnumAuditorJncStatus.驳回单
).FirstOrDefault();
if (summaryM1 != null) summaryL2.Add(summaryM1);
// 对比源对象
ApptSummary baseSummary = null;
List<string> equalStr = new List<string>();
foreach (var curSum in summaryL2)
{
if (baseSummary == null)
{
list.Add(new DisparityReq
{
Title = "首次生成确认单",
Time = curSum.CreateTime.Value,
Info = new List<string>(),
});
baseSummary = curSum;
continue;
}
List<string> infoList = new List<string>();
#region 主体对比
equalStr = new List<string>();
if (baseSummary.BuyerName != curSum.BuyerName)
{
if (string.IsNullOrEmpty(baseSummary.BuyerName)) baseSummary.BuyerName = "空";
if (string.IsNullOrEmpty(curSum.BuyerName)) curSum.BuyerName = "空";
equalStr.Add($"组织单位从“{baseSummary.BuyerName}”更改为“{curSum.BuyerName}”");
}
if (baseSummary.BuyerAddress != curSum.BuyerAddress)
{
if (string.IsNullOrEmpty(baseSummary.BuyerAddress)) baseSummary.BuyerAddress = "空";
if (string.IsNullOrEmpty(curSum.BuyerAddress)) curSum.BuyerAddress = "空";
equalStr.Add($"公司地址从“{baseSummary.BuyerAddress}”更改为“{curSum.BuyerAddress}”");
}
if (baseSummary.BuyerTitle != curSum.BuyerTitle)
{
if (string.IsNullOrEmpty(baseSummary.BuyerTitle)) baseSummary.BuyerTitle = "空";
if (string.IsNullOrEmpty(curSum.BuyerTitle)) curSum.BuyerTitle = "空";
equalStr.Add($"会议名称从“{baseSummary.BuyerTitle}”更改为“{curSum.BuyerTitle}”");
}
if (baseSummary.LeaderName != curSum.LeaderName)
{
if (string.IsNullOrEmpty(baseSummary.LeaderName)) baseSummary.LeaderName = "空";
if (string.IsNullOrEmpty(curSum.LeaderName)) curSum.LeaderName = "空";
equalStr.Add($"组织负责人从“{baseSummary.LeaderName}”更改为“{curSum.LeaderName}”");
}
if (baseSummary.LeaderMobile != curSum.LeaderMobile)
{
if (string.IsNullOrEmpty(baseSummary.LeaderMobile)) baseSummary.LeaderMobile = "空";
if (string.IsNullOrEmpty(curSum.LeaderMobile)) curSum.LeaderMobile = "空";
equalStr.Add($"负责人电话从“{baseSummary.LeaderMobile}”更改为“{curSum.LeaderMobile}”");
}
if (baseSummary.LeaderRoom != curSum.LeaderRoom)
{
if (string.IsNullOrEmpty(baseSummary.LeaderRoom)) baseSummary.LeaderRoom = "空";
if (string.IsNullOrEmpty(curSum.LeaderRoom)) curSum.LeaderRoom = "空";
equalStr.Add($"会议组房号从“{baseSummary.LeaderRoom}”更改为“{curSum.LeaderRoom}”");
}
if (baseSummary.RoomRemark != curSum.RoomRemark)
{
if (string.IsNullOrEmpty(baseSummary.RoomRemark)) baseSummary.RoomRemark = "空";
if (string.IsNullOrEmpty(curSum.RoomRemark)) curSum.RoomRemark = "空";
equalStr.Add($"客房总备注从“{baseSummary.RoomRemark}”更改为“{curSum.RoomRemark}”");
}
if (baseSummary.MeetingRemark != curSum.MeetingRemark)
{
if (string.IsNullOrEmpty(baseSummary.MeetingRemark)) baseSummary.MeetingRemark = "空";
if (string.IsNullOrEmpty(curSum.MeetingRemark)) curSum.MeetingRemark = "空";
equalStr.Add($"会议室总备注从“{baseSummary.MeetingRemark}”更改为“{curSum.MeetingRemark}”");
}
if (baseSummary.CateringRemark != curSum.CateringRemark)
{
if (string.IsNullOrEmpty(baseSummary.CateringRemark)) baseSummary.CateringRemark = "空";
if (string.IsNullOrEmpty(curSum.CateringRemark)) curSum.CateringRemark = "空";
equalStr.Add($"餐饮总备注从“{baseSummary.CateringRemark}”更改为“{curSum.CateringRemark}”");
}
if (baseSummary.SpringRemark != curSum.SpringRemark)
{
if (string.IsNullOrEmpty(baseSummary.SpringRemark)) baseSummary.SpringRemark = "空";
if (string.IsNullOrEmpty(curSum.SpringRemark)) curSum.SpringRemark = "空";
equalStr.Add($"温泉总备注从“{baseSummary.SpringRemark}”更改为“{curSum.SpringRemark}”");
}
if (equalStr.Count > 0)
{
infoList.Add($"订单主体:{string.Join(",", equalStr)}");
}
#endregion
#region 客房对比
equalStr = new List<string>();
var baseRoomList = Db.Queryable<ApptRoom>().Where(t => t.ApptId == baseSummary.Id).ToList();
var curRoomList = Db.Queryable<ApptRoom>().Where(t => t.ApptId == curSum.Id).ToList();
// 原数据遍历与新列表对比 如果存在对比实体差异,如果不存在是删除的
if (baseRoomList.Count > 0)
{
foreach (var baseRoom in baseRoomList)
{
var curRoom = curRoomList.Where(t => t.Guid == baseRoom.Guid).FirstOrDefault();
if (curRoom == null)
{ // 删除的
equalStr.Add($"删除了{baseRoom.RoomIn:yyyy-MM-dd}~{baseRoom.RoomOut:yyyy-MM-dd}预订客房{baseRoom.RoomGroup}{baseRoom.RoomNum}套");
}
else
{
if (baseRoom.RoomIn != curRoom.RoomIn)
{
equalStr.Add($"抵达时间从“{baseRoom.RoomIn:yyyy-MM-dd}”更改为“{curRoom.RoomIn:yyyy-MM-dd}”");
}
if (baseRoom.RoomOut != curRoom.RoomOut)
{
equalStr.Add($"离开时间从“{baseRoom.RoomOut:yyyy-MM-dd}”更改为“{curRoom.RoomOut:yyyy-MM-dd}”");
}
if (baseRoom.RoomGroup != curRoom.RoomGroup)
{
equalStr.Add($"房型从“{baseRoom.RoomGroup}”更改为“{curRoom.RoomGroup}”");
}
if (baseRoom.RoomNum != curRoom.RoomNum)
{
equalStr.Add($"房间数量从“{baseRoom.RoomNum}”更改为“{curRoom.RoomNum}”");
}
if (baseRoom.RoomPrice != curRoom.RoomPrice)
{
equalStr.Add($"单价从“{baseRoom.RoomPrice:#.##}”更改为“{curRoom.RoomPrice:#.##}”");
}
if (baseRoom.BreakfastNum != curRoom.BreakfastNum)
{
string baseRoomNum = baseRoom.BreakfastNum == 0 ? "无" : baseRoom.BreakfastNum.ToString();
string curRoomNum = curRoom.BreakfastNum == 0 ? "无" : curRoom.BreakfastNum.ToString();
equalStr.Add($"早餐数从“{baseRoomNum}”更改为“{curRoomNum}”");
}
if (baseRoom.LongDistance != curRoom.LongDistance)
{
string baseRoomNum = baseRoom.LongDistance == 0 ? "关" : "开";
string curRoomNum = curRoom.LongDistance == 0 ? "关" : "开";
equalStr.Add($"长途电话从“{baseRoomNum}”更改为“{curRoomNum}”");
}
if (baseRoom.MinShop != curRoom.MinShop)
{
string baseRoomNum = baseRoom.MinShop == 0 ? "关" : "开";
string curRoomNum = curRoom.MinShop == 0 ? "关" : "开";
equalStr.Add($"客房吧从“{baseRoomNum}”更改为“{curRoomNum}”");
}
if (baseRoom.RoomRemark != curRoom.RoomRemark)
{
if (string.IsNullOrEmpty(baseRoom.RoomRemark)) baseRoom.RoomRemark = "无";
if (string.IsNullOrEmpty(curRoom.RoomRemark)) curRoom.RoomRemark = "无";
equalStr.Add($"客房备注从“{baseRoom.RoomRemark}”更改为“{curRoom.RoomRemark}”");
}
}
}
}
// 新数据遍历与原列表对比,如果不存在是新增的
if (curRoomList.Count > 0)
{
foreach (var curRoom in curRoomList)
{
var baseRoom = baseRoomList.Where(t => t.Guid == curRoom.Guid).FirstOrDefault();
if (baseRoom == null)
{ // 新增的
equalStr.Add($"新增了{curRoom.RoomIn:yyyy-MM-dd}~{curRoom.RoomOut:yyyy-MM-dd}预订客房{curRoom.RoomGroup} {curRoom.RoomNum}套");
}
}
}
if (equalStr.Count > 0)
{
infoList.Add($"客房:{string.Join(",", equalStr)}");
}
#endregion
#region 会议厅
equalStr = new List<string>();
var baseMeetList = Db.Queryable<ApptMeeting>().Where(t => t.ApptId == baseSummary.Id).ToList();
var curMeetList = Db.Queryable<ApptMeeting>().Where(t => t.ApptId == curSum.Id).ToList();
if (baseMeetList.Count > 0)
{
foreach (var baseMeet in baseMeetList)
{
var curMeet = curMeetList.Where(t => t.Guid == baseMeet.Guid).FirstOrDefault();
if (curMeet == null)
{
var groups = "";
if (baseMeet.Groups.IndexOf("1") != -1) groups += "早";
if (baseMeet.Groups.IndexOf("2") != -1) groups += "中";
if (baseMeet.Groups.IndexOf("3") != -1) groups += "晚";
equalStr.Add($"删除了{baseMeet.MeetingTime:yyyy-MM-dd}预订会议厅{baseMeet.MeetingRoom}{groups}");
}
else
{
if (baseMeet.MeetingTime != curMeet.MeetingTime)
{
equalStr.Add($"会议入场时间从“{baseMeet.MeetingTime:yyyy-MM-dd}”更改为“{curMeet.MeetingTime:yyyy-MM-dd}”");
}
if (baseMeet.Groups != curMeet.Groups)
{
var baseGroups = "";
if (baseMeet.Groups.IndexOf("1") != -1) baseGroups += "早";
if (baseMeet.Groups.IndexOf("2") != -1) baseGroups += "中";
if (baseMeet.Groups.IndexOf("3") != -1) baseGroups += "晚";
var curMeetGroups = "";
if (curMeet.Groups.IndexOf("1") != -1) curMeetGroups += "早";
if (curMeet.Groups.IndexOf("2") != -1) curMeetGroups += "中";
if (curMeet.Groups.IndexOf("3") != -1) curMeetGroups += "晚";
equalStr.Add($"会议场次从“{baseGroups}”更改为“{curMeetGroups}”");
}
if (baseMeet.MeetingRoom != curMeet.MeetingRoom)
{
equalStr.Add($"会议厅名称从“{baseMeet.MeetingRoom}”更改为“{curMeet.MeetingRoom}”");
}
if (baseMeet.MeetingRostrum != curMeet.MeetingRostrum)
{
equalStr.Add($"主席台位从“{baseMeet.MeetingRostrum}”更改为“{curMeet.MeetingRostrum}”");
}
if (baseMeet.MeetingShape != curMeet.MeetingShape)
{
equalStr.Add($"台型从“{baseMeet.MeetingShape}”更改为“{curMeet.MeetingShape}”");
}
if (baseMeet.MeetingNum != curMeet.MeetingNum)
{
string baseMeetMeetingNum = baseMeet.MeetingNum == 0 ? "待定" : baseMeet.MeetingNum.ToString();
string curMeetMeetingNum = curMeet.MeetingNum == 0 ? "待定" : curMeet.MeetingNum.ToString();
equalStr.Add($"人数从“{baseMeetMeetingNum}”更改为“{curMeetMeetingNum}”");
}
if (baseMeet.MeetingPrice != curMeet.MeetingPrice)
{
equalStr.Add($"单价从“{baseMeet.MeetingPrice:#.##}”更改为“{curMeet.MeetingPrice:#.##}”");
}
if (baseMeet.MeetingTitle != curMeet.MeetingTitle)
{
string baseMeetMeetingTitle = string.IsNullOrEmpty(baseMeet.MeetingTitle) ? "无" : baseMeet.MeetingTitle;
string curMeetMeetingTitle = string.IsNullOrEmpty(curMeet.MeetingTitle) ? "无" : curMeet.MeetingTitle;
equalStr.Add($"横幅从“{baseMeetMeetingTitle}”更改为“{curMeetMeetingTitle}”");
}
if (baseMeet.Remark != curMeet.Remark)
{
string baseMeetRemark = string.IsNullOrEmpty(baseMeet.Remark) ? "无" : baseMeet.Remark;
string curMeetRemark = string.IsNullOrEmpty(curMeet.Remark) ? "无" : curMeet.Remark;
equalStr.Add($"横幅从“{baseMeetRemark}”更改为“{curMeetRemark}”");
}
}
}
}
if (curMeetList.Count > 0)
{
foreach (var curMeet in curMeetList)
{
var baseMeet = baseMeetList.Where(t => t.Guid == curMeet.Guid).FirstOrDefault();
if (baseMeet == null)
{
var groups = "";
if (curMeet.Groups.IndexOf("1") != -1) groups += "早";
if (curMeet.Groups.IndexOf("2") != -1) groups += "中";
if (curMeet.Groups.IndexOf("3") != -1) groups += "晚";
equalStr.Add($"新增了{curMeet.MeetingTime:yyyy-MM-dd}预订会议厅{curMeet.MeetingRoom} {groups}");
}
}
}
if (equalStr.Count > 0)
{
infoList.Add($"会议厅:{string.Join(",", equalStr)}");
}
#endregion
#region 餐饮
equalStr = new List<string>();
var baseCaterList = Db.Queryable<ApptCatering>().Where(t => t.ApptId == baseSummary.Id).ToList();
var curCaterList = Db.Queryable<ApptCatering>().Where(t => t.ApptId == curSum.Id).ToList();
if (baseCaterList.Count > 0)
{
foreach (var baseCater in baseCaterList)
{
var curCater = curCaterList.Where(t => t.Guid == baseCater.Guid).FirstOrDefault();
if (curCater == null)
{
var groups = "";
if (baseCater.Groups.IndexOf("1") != -1) groups += "早";
if (baseCater.Groups.IndexOf("2") != -1) groups += "中";
if (baseCater.Groups.IndexOf("3") != -1) groups += "晚";
equalStr.Add($"删除了{baseCater.CateringTime:yyyy-MM-dd}预订餐饮{baseCater.CateringRoom}{groups}");
}
else
{
if (baseCater.CateringTime != curCater.CateringTime)
{
equalStr.Add($"餐饮入场日期从“{baseCater.CateringTime:yyyy-MM-dd}”更改为“{curCater.CateringTime:yyyy-MM-dd}”");
}
if (baseCater.Groups != curCater.Groups)
{
var baseGroups = "";
if (baseCater.Groups.IndexOf("1") != -1) baseGroups += "早";
if (baseCater.Groups.IndexOf("2") != -1) baseGroups += "中";
if (baseCater.Groups.IndexOf("3") != -1) baseGroups += "晚";
var curMeetGroups = "";
if (curCater.Groups.IndexOf("1") != -1) curMeetGroups += "早";
if (curCater.Groups.IndexOf("2") != -1) curMeetGroups += "中";
if (curCater.Groups.IndexOf("3") != -1) curMeetGroups += "晚";
equalStr.Add($"场次从“{baseGroups}”更改为“{curMeetGroups}”");
}
if (baseCater.CateringRoom != curCater.CateringRoom)
{
equalStr.Add($"餐厅名称从“{baseCater.CateringRoom}”更改为“{curCater.CateringRoom}”");
}
if (baseCater.CateringType != curCater.CateringType)
{
string baseCaterCateringType = baseCater.CateringType == 0 ? "桌数" : "人数";
string curCaterCateringType = curCater.CateringType == 0 ? "桌数" : "人数";
equalStr.Add($"用餐类型从“{baseCaterCateringType}”更改为“{curCaterCateringType}”");
}
if (baseCater.CateringNum != curCater.CateringNum)
{
string baseCaterNum = baseCater.CateringNum == 0 ? "待定" : baseCater.CateringNum.ToString();
string curCaterNum = curCater.CateringNum == 0 ? "桌数" : curCater.CateringNum.ToString();
equalStr.Add($"桌数或人数从“{baseCaterNum}”更改为“{curCaterNum}”");
}
if (baseCater.CateringPrice != curCater.CateringPrice)
{
equalStr.Add($"每桌或每人单价从“{baseCater.CateringPrice:#.##}”更改为“{curCater.CateringPrice:#.##}”");
}
if (baseCater.CateringTable != curCater.CateringTable)
{
equalStr.Add($"桌型从“{baseCater.CateringTable}”更改为“{curCater.CateringTable}”");
}
if (baseCater.Wine != curCater.Wine)
{
equalStr.Add($"酒水从“{baseCater.Wine}”更改为“{curCater.Wine}”");
}
if (baseCater.Remark != curCater.Remark)
{
equalStr.Add($"备注从“{baseCater.Remark}”更改为“{curCater.Remark}”");
}
}
}
}
if (curCaterList.Count > 0)
{
foreach (var curCater in curCaterList)
{
var baseCater = baseCaterList.Where(t => t.Guid == curCater.Guid).FirstOrDefault();
if (baseCater == null)
{
var groups = "";
if (curCater.Groups.IndexOf("1") != -1) groups += "早";
if (curCater.Groups.IndexOf("2") != -1) groups += "中";
if (curCater.Groups.IndexOf("3") != -1) groups += "晚";
equalStr.Add($"新增了{curCater.CateringTime:yyyy-MM-dd}预订餐饮{curCater.CateringCode} {groups}");
}
}
}
if (equalStr.Count > 0)
{
infoList.Add($"餐饮:{string.Join(",", equalStr)}");
}
#endregion
#region 温泉
equalStr = new List<string>();
var baseSpringList = Db.Queryable<ApptSpring>().Where(t => t.ApptId == baseSummary.Id).ToList();
var curSpringList = Db.Queryable<ApptSpring>().Where(t => t.ApptId == curSum.Id).ToList();
if (baseSpringList.Count > 0)
{
foreach (var baseSpring in baseSpringList)
{
var curSpring = curSpringList.Where(t => t.Guid == baseSpring.Guid).FirstOrDefault();
if (curSpring == null)
{
equalStr.Add($"删除了{baseSpring.SpringTime:yyyy-MM-dd}预订温泉{baseSpring.PeopleNum}人");
}
else
{
if (baseSpring.SpringTime != curSpring.SpringTime)
{
equalStr.Add($"入场日期从“{baseSpring.SpringTime:yyyy-MM-dd}”更改为“{curSpring.SpringTime:yyyy-MM-dd}”");
}
if (baseSpring.PeopleNum != curSpring.PeopleNum)
{
equalStr.Add($"总人数从“{baseSpring.PeopleNum}”更改为“{curSpring.PeopleNum}”");
}
if (baseSpring.SpringMen != curSpring.SpringMen)
{
equalStr.Add($"男士人数从“{baseSpring.SpringMen}”更改为“{curSpring.SpringMen}”");
}
if (baseSpring.SpringWomen != curSpring.SpringWomen)
{
equalStr.Add($"女士人数从“{baseSpring.SpringWomen}”更改为“{curSpring.SpringWomen}”");
}
if (baseSpring.Consume != curSpring.Consume)
{
equalStr.Add($"二次消费从“{baseSpring.Consume}”更改为“{curSpring.Consume}”");
}
if (baseSpring.SpringPrice != curSpring.SpringPrice)
{
equalStr.Add($"单价从“{baseSpring.SpringPrice}”更改为“{curSpring.SpringPrice}”");
}
if (baseSpring.Remark != curSpring.Remark)
{
equalStr.Add($"备注从“{baseSpring.Remark}”更改为“{curSpring.Remark}”");
}
}
}
}
if (curSpringList.Count > 0)
{
foreach (var curSpring in curSpringList)
{
var baseSpring = baseSpringList.Where(t => t.Guid == curSpring.Guid).FirstOrDefault();
if (baseSpring == null)
{
equalStr.Add($"新增了{curSpring.SpringTime:yyyy-MM-dd}预订温泉{curSpring.PeopleNum}人");
}
}
}
if (equalStr.Count > 0)
{
infoList.Add($"温泉:{string.Join(",", equalStr)}");
}
#endregion
#region 备注
equalStr = new List<string>();
var baseRemarkList = Db.Queryable<ApptRemark>().Where(t => t.ApptId == baseSummary.Id).ToList();
var curRemarkList = Db.Queryable<ApptRemark>().Where(t => t.ApptId == curSum.Id).ToList();
if (baseRemarkList.Count > 0)
{
foreach (var baseRemark in baseRemarkList)
{
var curRemark = curRemarkList.Where(t => t.Guid == baseRemark.Guid).FirstOrDefault();
if (curRemark == null)
{
equalStr.Add($"删除了备注{curRemark.Title} {curRemark.Info}");
}
else
{
equalStr = new List<string>();
if (baseRemark.Title != curRemark.Title)
{
equalStr.Add($"备注分类从“{baseRemark.Title}”更改为“{curRemark.Title}”");
}
if (baseRemark.Info != curRemark.Info)
{
equalStr.Add($"备注内容从“{baseRemark.Info}”更改为“{curRemark.Info}”");
}
}
}
}
if (curRemarkList.Count > 0)
{
foreach (var curRemark in curRemarkList)
{
var baseRemark = baseRemarkList.Where(t => t.Guid == curRemark.Guid).FirstOrDefault();
if (baseRemark == null)
{
equalStr.Add($"新增了备注{baseRemark.Title} {baseRemark.Info}");
}
}
}
if (equalStr.Count > 0)
{
infoList.Add($"备注:{string.Join(",", equalStr)}");
}
#endregion
if (infoList.Count > 0)
{
var title = "修改订单";
if (curSum.AuditorStatus == (int)EnumAuditorJncStatus.暂订单)
{
title = "新提交更改";
}
list.Add(new DisparityReq
{
Title = title,
Time = curSum.AlterTime,
Info = infoList,
});
}
baseSummary = curSum;
}
return ApiResult<List<DisparityReq>>.Success(info: list);
}
/// <summary>
/// 返回回复中的图片列表
/// </summary>
/// <returns></returns>
public ApiResult<List<string>> GetReplyPicList(SummaryJncModelReq req)
{
ApiResult<LoginUserRes> loginUserRes = BaseRepo.DECLoginInfo(req.AccountDes);
if (!loginUserRes.IsSuccess) return ApiResult<List<string>>.Failed(loginUserRes.Msg);
var apptAuditLogM = Db.Queryable<ApptAuditLog>().Where(t => t.Id == req.Id).First();
if (apptAuditLogM == null) return ApiResult<List<string>>.Success();
List<string> list = new List<string>();
if (!string.IsNullOrEmpty(apptAuditLogM.Pic0)) list.Add(apptAuditLogM.Pic0);
if (!string.IsNullOrEmpty(apptAuditLogM.Pic1)) list.Add(apptAuditLogM.Pic1);
if (!string.IsNullOrEmpty(apptAuditLogM.Pic2)) list.Add(apptAuditLogM.Pic2);
if (!string.IsNullOrEmpty(apptAuditLogM.Pic3)) list.Add(apptAuditLogM.Pic3);
if (!string.IsNullOrEmpty(apptAuditLogM.Pic4)) list.Add(apptAuditLogM.Pic4);
return ApiResult<List<string>>.Success(info: list);
}
// ---- 私有
/// <summary>
/// 预定部对预定单进行审批通过 【新的订单替换原来的订单】
/// </summary>
/// <returns></returns>
private ApiResult ApprovedByAuditor(ApplyOrderReq req)
{
DateTime now = DateTime.Now;
var loginUserRes = BaseRepo.DECLoginInfo(req.AccountDes);
if (!loginUserRes.IsSuccess) return ApiResult.Failed(loginUserRes.Msg);
if (JncAuditor.Length != 5) return ApiResult.Failed("审核配置无效!");
var summaryM = Db.Queryable<ApptSummary>()
.Mapper(t => t.ApptRoomList, t => t.ApptRoomList.First().ApptId)
.Mapper(t => t.ApptMeetingList, t => t.ApptMeetingList.First().ApptId)
.Mapper(t => t.ApptCateringList, t => t.ApptCateringList.First().ApptId)
.Mapper(t => t.ApptSpringList, t => t.ApptSpringList.First().ApptId)
.Mapper(t => t.ApptRemarks, t => t.ApptRemarks.First().ApptId)
.Where(t => t.Id == req.Id).First();
if (summaryM == null || summaryM.ApptTypeId != 2) return ApiResult.Failed("未获取订单数据!");
if (summaryM.AuditorStatus != (int)EnumAuditorJncStatus.审核单申请) return ApiResult.Failed("非待确定状态不可提交!");
string jncAuditor = JncAuditor[0];
var userGroup = Db.Queryable<UcLogin, ApptAuditor>((u, a) => new JoinQueryInfos(
JoinType.Left, u.OpGroup == a.OpGroup
))
.Where((u, a) => u.OpId.Trim() == loginUserRes.Info.UserAccount && a.ApptTypeId == 2 && a.OpDescript == jncAuditor)
.ToList();
if (userGroup == null || userGroup.Count < 1) return ApiResult.Failed("没有操作权限!");
var auditM = Db.Queryable<ApptSummary>()
.Where(t => t.Guid == summaryM.Guid && t.AuditorStatus == (int)EnumAuditorJncStatus.归档资源单)
.ToList();
if (auditM == null || auditM.Count == 0) // 首次生成审核单-预定部(占用资源)
{
try
{
Db.Ado.BeginTran();
summaryM.AuditorStatus = (int)EnumAuditorJncStatus.归档暂定单;
summaryM.ApplyOA = 1;
var upR = Update(summaryM);
if (!upR.IsSuccess) throw new Exception(upR.Msg);
summaryM.AuditorStatus = (int)EnumAuditorJncStatus.审核单预定部;
string no = "";
while (true)
{
string NoPrefix = BaseConfig.App(new string[] { "NoPrefix" });
if (!string.IsNullOrWhiteSpace(NoPrefix))
{
no += $"{NoPrefix}-";
}
no += $"{now:yyyy}-{now:MM}-{now:dd}-{now:fff}";
var any = Db.Queryable<ApptSummary>()
.Where(t => t.No == no).Any();
if (!any) break;
}
summaryM.No = no.ToString();
// 客房资源判断
if (summaryM.ApptRoomList != null)
{
foreach (ApptRoom item in summaryM.ApptRoomList)
{
if (!string.IsNullOrEmpty(item.RoomCode))
{
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.AddDays(-1) });
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)
{
throw new Exception($"操作失败,[{item.RoomIn:yyyy-MM-dd}]房类[{type}]只剩{quan}套!");
}
}
}
}
}
// 会议室资源判断
if (summaryM.ApptMeetingList != null)
{
foreach (ApptMeeting item in summaryM.ApptMeetingList)
{
if (!string.IsNullOrEmpty(item.MeetingCode))
{
List<int> groups = item.Groups.Split(',', StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToList();
var any = Db.Queryable<ResInfo>().Where(t => t.Rescode == item.MeetingCode && t.Stime == item.MeetingTime && t.Sta != "C")
.In(t => t.Sfield, groups).Any();
if (any) throw new Exception($"会议室{item.MeetingTime:yyyy-MM-dd} {item.MeetingRoom}已被占用!");
}
}
}
var user = Db.Queryable<UcLogin>().Where(t => t.OpId.Trim() == summaryM.UserId).First(); //提交人
// 创建团队
string gname = $"{summaryM.BuyerName}"; // 团队名称
if (gname.Length > 10) gname = gname.Substring(0, 10);
string leader = summaryM.LeaderName; //领队或导游或联系人
string phone = summaryM.LeaderMobile; //领队电话
// 抵达时间 日期和时间,如2019-01-17 18:00:00
DateTime arr = new DateTime(summaryM.StartDay.Year, summaryM.StartDay.Month, summaryM.StartDay.Day, 18, 0, 0);
// 离开时间 日期和时间,如2019-01-18 14:00:00
DateTime dep = new DateTime(summaryM.EndDay.Year, summaryM.EndDay.Month, summaryM.EndDay.Day, 14, 0, 0);
if (summaryM.StartDay == summaryM.EndDay) dep = dep.AddDays(1);
int rooms = 0; // 团队总共的房间数备注(只是备注,不占用房间)
int guests = 0; //团队的总人数备注(只是备注,不占用房间)
string remark = user?.OpName + "预订"; //团队主单备注
string log_id = summaryM.UserId; // 操作员工号(如果操作员没有软件的工号,第三方可以在迪联软件中创建一个通用的工号
string log_ip = ""; //操作电脑或者接口电脑的IP,可以用空字符串或者任意字符串
string saleid = user.Saleid; // 销售员工号,在迪联软件销售菜单下可以打开销售员设置,查看销售员的工号,可以为空字符换
DateTime minTime = DateTime.MinValue;
if (summaryM.ApptRoomList != null && summaryM.ApptRoomList.Count > 0)
{
rooms = summaryM.ApptRoomList.Sum(t => t.RoomNum);
int breakfastNum = summaryM.ApptRoomList.Sum(t => t.BreakfastNum);
guests = breakfastNum > 0 ? breakfastNum : rooms;
}
else if (summaryM.ApptMeetingList != null && summaryM.ApptMeetingList.Count > 0)
{
guests = summaryM.ApptMeetingList.Sum(t => t.MeetingNum);
}
// 创建团队
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);
throw new Exception(msg);
}
else if (dt.Rows.Count > 0 && dt.Rows[0][0] != null && dt.Rows[0][0].ToString() == "0")
{ }
else
{
throw new Exception("创建团队失败");
}
grpno = dt.Rows[0][1].ToString().Trim();
if (summaryM.ApptRoomList != null && summaryM.ApptRoomList.Count > 0)
{
foreach (var item in summaryM.ApptRoomList)
{
log_id = summaryM.UserId; // 操作员工号(如果操作员没有软件的工号,第三方可以在迪联软件中创建一个通用的工号)
log_ip = ""; // 操作电脑或者接口电脑的IP,可以用空字符串或者任意字符串
arr = new DateTime(item.RoomIn.Year, item.RoomIn.Month, item.RoomIn.Day); // 抵达日期 只要日期不需要时分秒
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);
throw new Exception(msg);
}
}
}
if (summaryM.ApptMeetingList != null && summaryM.ApptMeetingList.Count > 0)
{
foreach (var item in summaryM.ApptMeetingList)
{
string accnt = grpno; // 团队账号(创建团队时获得)
// 会议预订的日期 只要日期不需要时分秒
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字段
decimal price = item.MeetingPrice; // 价格。可以从迪联软件查看,或者res_code表取price字段,该字段为预设参考价,具体订单价格以该参数为准。
string op_id = summaryM.UserId; // 操作员工号(如果操作员没有软件的工号,第三方可以在迪联软件中创建一个通用的工号
if (string.IsNullOrEmpty(item.Groups)) throw new Exception("场次不能为空"); // 场次
List<int> groupList = item.Groups.Split(',', StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToList();
if (groupList.Count < 1) throw new Exception("场次不能为空");
foreach (var sfield in groupList)
{
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);
throw new Exception(msg);
}
}
}
}
summaryM.GrpNo = grpno; //... 保存错了,应该是预定号,保存了团队号
var inR = InsertReturnId(summaryM);
if (!inR.IsSuccess) throw new Exception(inR.Msg);
summaryM.Id = inR.Info;
if (summaryM.ApptRoomList != null && summaryM.ApptRoomList.Count > 0)
{
foreach (var item in summaryM.ApptRoomList)
{
item.Guid = item.Guid;
item.ApptId = summaryM.Id;
}
var irR = InsertRange(summaryM.ApptRoomList);
if (!irR.IsSuccess) throw new Exception(irR.Msg);
}
if (summaryM.ApptMeetingList != null && summaryM.ApptMeetingList.Count > 0)
{
foreach (var item in summaryM.ApptMeetingList)
{
item.Guid = item.Guid;
item.ApptId = summaryM.Id;
}
var irR = InsertRange(summaryM.ApptMeetingList);
if (!irR.IsSuccess) throw new Exception(irR.Msg);
}
if (summaryM.ApptCateringList != null && summaryM.ApptCateringList.Count > 0)
{
foreach (var item in summaryM.ApptCateringList)
{
item.Guid = item.Guid;
item.ApptId = summaryM.Id;
}
var irR = InsertRange(summaryM.ApptCateringList);
if (!irR.IsSuccess) throw new Exception(irR.Msg);
}
if (summaryM.ApptSpringList != null && summaryM.ApptSpringList.Count > 0)
{
foreach (var item in summaryM.ApptSpringList)
{
item.Guid = item.Guid;
item.ApptId = summaryM.Id;
}
var irR = InsertRange(summaryM.ApptSpringList);
if (!irR.IsSuccess) throw new Exception(irR.Msg);
}
if (summaryM.ApptRemarks != null && summaryM.ApptRemarks.Count > 0)
{
foreach (var item in summaryM.ApptRemarks)
{
item.Guid = item.Guid;
item.ApptId = summaryM.Id;
}
var irR = InsertRange(summaryM.ApptRemarks);
if (!irR.IsSuccess) throw new Exception(irR.Msg);
}
var apptAuditLog = new ApptAuditLog()
{
Type = 1,
CreateTime = now,
UserId = loginUserRes.Info.UserAccount,
ApptId = summaryM.Id.Value,
AuditorStatus = (int)EnumAuditorJncStatus.审核单预定部,
Remark = req.Remark,
};
if (req.RemarkPics != null)
{
if (req.RemarkPics.Count > 0) apptAuditLog.Pic0 = req.RemarkPics[0];
if (req.RemarkPics.Count > 1) apptAuditLog.Pic1 = req.RemarkPics[1];
if (req.RemarkPics.Count > 2) apptAuditLog.Pic2 = req.RemarkPics[2];
if (req.RemarkPics.Count > 3) apptAuditLog.Pic3 = req.RemarkPics[3];
if (req.RemarkPics.Count > 4) apptAuditLog.Pic4 = req.RemarkPics[4];
}
InsertReturnId(apptAuditLog);
Db.Ado.CommitTran();
}
catch (Exception ex)
{
Db.Ado.RollbackTran();
_logger.Error(ex.ToString());
return ApiResult.Failed(ex.Message);
}
}
else
{
try
{
Db.Ado.BeginTran();
// 查看是否有确定单,如果有 改为过期确定单,并释放资源
var auditLastM = auditM.OrderByDescending(t => t.Id).First();
if (auditLastM != null)
{
string accnt = auditLastM.GrpNo;
string op_id = "xx";
var dt1 = Db.Ado.UseStoredProcedure().GetDataTable("p_yyj_gblock_cancel", new { accnt, op_id });
if (dt1.Rows.Count > 0 && dt1.Rows[0][0] != null && dt1.Rows[0][0].ToString() != "0")
{
string msg = $"创建团队失败,失败原因:{dt1.Rows[0][1]}";
_logger.Error(msg);
throw new Exception(msg);
}
}
summaryM.AuditorStatus = (int)EnumAuditorJncStatus.归档暂定单;
var upR = Update(summaryM);
if (!upR.IsSuccess) throw new Exception(upR.Msg);
// 将该订单复制一份,生成确定单,占用资料
//summaryM.CreateTime = now; // 创建时间调整为生成确定单时间,
summaryM.AuditorStatus = (int)EnumAuditorJncStatus.审核单预定部;
// 客房资源判断
if (summaryM.ApptRoomList != null)
{
foreach (ApptRoom item in summaryM.ApptRoomList)
{
if (!string.IsNullOrEmpty(item.RoomCode))
{
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.AddDays(-1) });
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)
{
throw new Exception($"操作失败,[{item.RoomIn:yyyy-MM-dd}]房类[{type}]只剩{quan}套!");
}
}
}
}
}
// 会议室资源判断
if (summaryM.ApptMeetingList != null)
{
foreach (ApptMeeting item in summaryM.ApptMeetingList)
{
if (!string.IsNullOrEmpty(item.MeetingCode))
{
List<int> groups = item.Groups.Split(',', StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToList();
var any = Db.Queryable<ResInfo>().Where(t => t.Sta != "C" && t.Rescode == item.MeetingCode && t.Stime == item.MeetingTime)
.In(t => t.Sfield, groups).Any();
if (any) throw new Exception($"会议室{item.MeetingTime:yyyy-MM-dd} {item.MeetingRoom}已被占用!");
}
}
}
var user = Db.Queryable<UcLogin>().Where(t => t.OpId.Trim() == summaryM.UserId).First();
if (summaryM.ApptRoomList != null && summaryM.ApptRoomList.Count > 0)
{
foreach (var item in summaryM.ApptRoomList)
{
var grpno = auditLastM.GrpNo;
var log_id = summaryM.UserId; // 操作员工号(如果操作员没有软件的工号,第三方可以在迪联软件中创建一个通用的工号)
var log_ip = ""; // 操作电脑或者接口电脑的IP,可以用空字符串或者任意字符串
var arr = new DateTime(item.RoomIn.Year, item.RoomIn.Month, item.RoomIn.Day); // 抵达日期 只要日期不需要时分秒
var dep = new DateTime(item.RoomOut.Year, item.RoomOut.Month, item.RoomOut.Day); // 离开日期 只要日期不需要时分秒
if (string.IsNullOrWhiteSpace(item.RoomCode)) continue;
string type = item.RoomCode; // 房类代码,如BJ,请查看迪联酒店系统中房类的设置
var rooms = item.RoomNum; // 预留的数量,此为真实数量,如果超过酒店可用数会返回错误信息
decimal price = item.RoomPrice; // 房价
var guests = 1; // 一个房间住几个人,默认为1
var remark = item.RoomRemark; // 该预留的备注,排房时可以看到此备注
string rmcode = "RACK"; // 请按照默认的RACK填写,此为房价码
var 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);
throw new Exception(msg);
}
}
}
if (summaryM.ApptMeetingList != null && summaryM.ApptMeetingList.Count > 0)
{
foreach (var item in summaryM.ApptMeetingList)
{
string accnt = auditLastM.GrpNo; // 团队账号(创建团队时获得)
// 会议预订的日期 只要日期不需要时分秒
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字段
decimal price = item.MeetingPrice; // 价格。可以从迪联软件查看,或者res_code表取price字段,该字段为预设参考价,具体订单价格以该参数为准。
string op_id = summaryM.UserId; // 操作员工号(如果操作员没有软件的工号,第三方可以在迪联软件中创建一个通用的工号
if (string.IsNullOrEmpty(item.Groups)) throw new Exception("场次不能为空"); // 场次
List<int> groupList = item.Groups.Split(',', StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToList();
if (groupList.Count < 1) throw new Exception("场次不能为空");
foreach (var sfield in groupList)
{
var 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);
throw new Exception(msg);
}
}
}
}
summaryM.GrpNo = auditLastM.GrpNo;
var inR = InsertReturnId(summaryM);
if (!inR.IsSuccess) throw new Exception(inR.Msg);
summaryM.Id = inR.Info;
if (summaryM.ApptRoomList != null && summaryM.ApptRoomList.Count > 0)
{
foreach (var item in summaryM.ApptRoomList)
{
item.Guid = item.Guid;
item.ApptId = summaryM.Id;
}
var irR = InsertRange(summaryM.ApptRoomList);
if (!irR.IsSuccess) throw new Exception(irR.Msg);
}
if (summaryM.ApptMeetingList != null && summaryM.ApptMeetingList.Count > 0)
{
foreach (var item in summaryM.ApptMeetingList)
{
item.Guid = item.Guid;
item.ApptId = summaryM.Id;
}
var irR = InsertRange(summaryM.ApptMeetingList);
if (!irR.IsSuccess) throw new Exception(irR.Msg);
}
if (summaryM.ApptCateringList != null && summaryM.ApptCateringList.Count > 0)
{
foreach (var item in summaryM.ApptCateringList)
{
item.Guid = item.Guid;
item.ApptId = summaryM.Id;
}
var irR = InsertRange(summaryM.ApptCateringList);
if (!irR.IsSuccess) throw new Exception(irR.Msg);
}
if (summaryM.ApptSpringList != null && summaryM.ApptSpringList.Count > 0)
{
foreach (var item in summaryM.ApptSpringList)
{
item.Guid = item.Guid;
item.ApptId = summaryM.Id;
}
var irR = InsertRange(summaryM.ApptSpringList);
if (!irR.IsSuccess) throw new Exception(irR.Msg);
}
if (summaryM.ApptRemarks != null && summaryM.ApptRemarks.Count > 0)
{
foreach (var item in summaryM.ApptRemarks)
{
item.Guid = item.Guid;
item.ApptId = summaryM.Id;
}
var irR = InsertRange(summaryM.ApptRemarks);
if (!irR.IsSuccess) throw new Exception(irR.Msg);
}
var apptAuditLog = new ApptAuditLog()
{
Type = 1,
CreateTime = now,
UserId = loginUserRes.Info.UserAccount,
ApptId = summaryM.Id.Value,
AuditorStatus = (int)EnumAuditorJncStatus.审核单预定部,
Remark = req.Remark,
};
if (req.RemarkPics != null)
{
if (req.RemarkPics.Count > 0) apptAuditLog.Pic0 = req.RemarkPics[0];
if (req.RemarkPics.Count > 1) apptAuditLog.Pic1 = req.RemarkPics[1];
if (req.RemarkPics.Count > 2) apptAuditLog.Pic2 = req.RemarkPics[2];
if (req.RemarkPics.Count > 3) apptAuditLog.Pic3 = req.RemarkPics[3];
if (req.RemarkPics.Count > 4) apptAuditLog.Pic4 = req.RemarkPics[4];
}
InsertReturnId(apptAuditLog);
Db.Ado.CommitTran();
}
catch (Exception ex)
{
Db.Ado.RollbackTran();
_logger.Error(ex.ToString());
return ApiResult.Failed(ex.Message);
}
}
PostMsg(summaryM);
return ApiResult.Success();
}
/// <summary>
/// 实时计算机发送消息模板
/// </summary>
/// <returns></returns>
private void PostMsg(ApptSummary summary)
{
try
{
DateTime now = DateTime.Now;
string AppId = BaseConfig.App(new string[] { "WeChatService", "AppId" });
string Hotelid = BaseConfig.App(new string[] { "Hotelid" });
string appId = BaseConfig.App(new string[] { "WeChat", "AppId" });// 小程序的appid
var userAll = Db.Queryable<UcLogin>().ToList().Replace();
var userCreate = userAll.Where(t => t.OpId == summary.UserId).FirstOrDefault();
if (userCreate == null) return;
List<string> createUserOpenid = new List<string>() { userCreate.WxServiceId };
var audimM = Db.Queryable<ApptAuditLog>().Where(t => t.ApptId == summary.Id).OrderBy(t => t.Id, OrderByType.Desc).First();
if (summary.AuditorStatus == (int)EnumAuditorJncStatus.审核单申请)
{
// 发送给预定部审核人员
string jncAuditor = JncAuditor[0];
var auditorS = Db.Queryable<ApptAuditor>().Where(t => t.OpDescript == jncAuditor).First();
if (auditorS != null)
{
var usersPost = Db.Queryable<UcLogin>().Where(t => t.OpGroup == auditorS.OpGroup && !string.IsNullOrEmpty(t.WxServiceId)).ToList();
if (usersPost != null && usersPost.Count > 0)
{
if (AppId == "wx3f193488e04b2ed8") // 江南春
{
// 80CnTAF5tLIPJgi6GPS2eEit-bDqFZ_IjYEeGjarQx8 内容示例
// 审核提醒
//===========================
// 资料已提交,请尽快审核 {{first.DATA}}
// 审核内容:XX资料 审核内容:{{keyword1.DATA}} [建议标题]
// 时间:2015-06-22 {{keyword2.DATA}}
// 请尽快审核 {{remark.DATA}}
//-----------------------------
// 详情
//===========================
string first = $"{userCreate.OpName}提交了新的预订申请";
var keyword = new[] { $"{summary.BuyerTitle}", now.ToString("yyyy-MM-dd HH:mm") };
string remark = "请尽快审核";
AizhuhotelHelper.SendTemplateMsg(usersPost.Select(t => t.WxServiceId).ToList(), "80CnTAF5tLIPJgi6GPS2eEit-bDqFZ_IjYEeGjarQx8", $"pages/index/index?hotelid={Hotelid}&status=2", first, remark, keyword);
}
else if (AppId == "wx2b6e92e9e0c6025f") // 香堤湾
{
string first = $"{userCreate.OpName}提交了新的预订申请";
string remark = "请尽快审核";
var tousers = usersPost.Select(t => t.WxServiceId).ToList();
if (tousers != null && tousers.Count > 0)
{
if (string.IsNullOrWhiteSpace(appId)) ApiResult<WeChatLoginRes>.Failed("缺少配置参数 [AppId]!");
foreach (var touser in tousers)
{
var json = new
{
touser = touser,
template_id = "21Qr9bf5k3UlxD3K6EBKjEnxrz8Djiw6TIu6yExMGLg",
miniprogram = new
{
appid = appId, // 小程序appId
pagepath = $"pages/index/index?hotelid={Hotelid}&status=2" // 跳转到小程序中的地址
},
topcolor = "#FF0000",
data = new
{
first = new { value = first },
keyword1 = new { value = $"{summary.BuyerTitle}" },
keyword2 = new { value = first },
remark = new { value = remark }
}
};
var msg = JsonConvert.SerializeObject(json);
AizhuhotelHelper.SendTempMsg(msg);
}
}
}
else
{
throw new Exception("消息模板未配置");
}
}
}
}
else if (summary.AuditorStatus == (int)EnumAuditorJncStatus.审核单预定部)
{
// 生成确定单 发消息给申请人
if (AppId == "wx3f193488e04b2ed8") // 江南春
{
string audoter = userAll.Where(t => t.OpId == audimM.UserId).FirstOrDefault()?.OpName;
string first = $"预定部{audoter}审核通过了您的预定申请";
var keyword = new[] { $"{summary.BuyerTitle}", now.ToString("yyyy-MM-dd HH:mm") };
string remark = "";
if (!string.IsNullOrEmpty(audimM.Remark)) remark += $"审核评语[{audimM.Remark}],";
remark += "后续流程:请等待销售经理审核";
AizhuhotelHelper.SendTemplateMsg(createUserOpenid, "80CnTAF5tLIPJgi6GPS2eEit-bDqFZ_IjYEeGjarQx8", $"pages/index/index?hotelid={Hotelid}&status=7", first, remark, keyword);
}
else if (AppId == "wx2b6e92e9e0c6025f") // 香堤湾
{
if (createUserOpenid != null && createUserOpenid.Count > 0)
{
if (string.IsNullOrWhiteSpace(appId)) ApiResult<WeChatLoginRes>.Failed("缺少配置参数 [AppId]!");
string audoter = userAll.Where(t => t.OpId == audimM.UserId).FirstOrDefault()?.OpName;
string first = $"预定部{audoter}审核通过了您的预定申请";
string remark = "";
if (!string.IsNullOrEmpty(audimM.Remark)) remark += $"审核评语[{audimM.Remark}],";
remark += "后续流程:请等待销售经理审核";
foreach (var createUserOpenidItem in createUserOpenid)
{
var json = new
{
touser = createUserOpenidItem,
template_id = "21Qr9bf5k3UlxD3K6EBKjEnxrz8Djiw6TIu6yExMGLg",
miniprogram = new
{
appid = appId, // 小程序appId
pagepath = $"pages/index/index?hotelid={Hotelid}&status=7" // 跳转到小程序中的地址
},
topcolor = "#FF0000",
data = new
{
first = new { value = first },
keyword1 = new { value = $"{summary.BuyerTitle}" },
keyword2 = new { value = first },
remark = new { value = remark }
}
};
var msg = JsonConvert.SerializeObject(json);
AizhuhotelHelper.SendTempMsg(msg);
}
}
}
else
{
throw new Exception("消息模板未配置");
}
// 2.向销售经理发送审核消息;
string jncAuditor = JncAuditor[1];
var auditorS = Db.Queryable<ApptAuditor>().Where(t => t.OpDescript == jncAuditor).First();
if (auditorS != null)
{
var usersPost = Db.Queryable<UcLogin>().Where(t => t.OpGroup == auditorS.OpGroup && !string.IsNullOrEmpty(t.WxServiceId)).ToList();
if (usersPost != null && usersPost.Count > 0)
{
if (AppId == "wx3f193488e04b2ed8") // 江南春
{
string first = $"{userCreate.OpName}提交了预订申请";
var keyword = new[] { $"{summary.BuyerTitle}", now.ToString("yyyy-MM-dd HH:mm") };
string remark = "请尽快审核";
AizhuhotelHelper.SendTemplateMsg(usersPost.Select(t => t.WxServiceId).ToList(), "80CnTAF5tLIPJgi6GPS2eEit-bDqFZ_IjYEeGjarQx8", $"pages/index/index?hotelid={Hotelid}&status=2", first, remark, keyword);
}
else if (AppId == "wx2b6e92e9e0c6025f") // 香堤湾
{
string first = $"{userCreate.OpName}提交了预订申请";
string remark = "请尽快审核";
var tousers = usersPost.Select(t => t.WxServiceId).ToList();
if (tousers != null && tousers.Count > 0)
{
if (string.IsNullOrWhiteSpace(appId)) ApiResult<WeChatLoginRes>.Failed("缺少配置参数 [AppId]!");
foreach (var touser in tousers)
{
var json = new
{
touser = touser,
template_id = "21Qr9bf5k3UlxD3K6EBKjEnxrz8Djiw6TIu6yExMGLg",
miniprogram = new
{
appid = appId, // 小程序appId
pagepath = $"pages/index/index?hotelid={Hotelid}&status=2" // 跳转到小程序中的地址
},
topcolor = "#FF0000",
data = new
{
first = new { value = first },
keyword1 = new { value = summary.BuyerTitle },
keyword2 = new { value = first },
remark = new { value = remark }
}
};
var msg = JsonConvert.SerializeObject(json);
AizhuhotelHelper.SendTempMsg(msg);
}
}
}
else
{
throw new Exception("消息模板未配置");
}
}
}
}
else if (summary.AuditorStatus == (int)EnumAuditorJncStatus.审核单销售经理)
{
// 1.向发起人发送
if (AppId == "wx3f193488e04b2ed8") // 江南春
{
string audoter = userAll.Where(t => t.OpId == audimM.UserId).FirstOrDefault()?.OpName;
string first = $"销售经理{audoter}审核通过了您的预订申请";
var keyword = new[] { $"{summary.BuyerTitle}", now.ToString("yyyy-MM-dd HH:mm") };
string remark = "";
if (!string.IsNullOrEmpty(audimM.Remark)) remark += $"审核评语[{audimM.Remark}],";
remark += "后续流程:请等待财务经理审核";
AizhuhotelHelper.SendTemplateMsg(createUserOpenid, "80CnTAF5tLIPJgi6GPS2eEit-bDqFZ_IjYEeGjarQx8", $"pages/index/index?hotelid={Hotelid}&status=7", first, remark, keyword);
}
else if (AppId == "wx2b6e92e9e0c6025f") // 香堤湾
{
if (createUserOpenid != null && createUserOpenid.Count > 0)
{
string audoter = userAll.Where(t => t.OpId == audimM.UserId).FirstOrDefault()?.OpName;
string first = $"销售经理{audoter}审核通过了您的预订申请";
string remark = "";
if (!string.IsNullOrEmpty(audimM.Remark)) remark += $"审核评语[{audimM.Remark}],";
remark += "后续流程:请等待财务经理审核";
foreach (var item in createUserOpenid)
{
var json = new
{
touser = item,
template_id = "21Qr9bf5k3UlxD3K6EBKjEnxrz8Djiw6TIu6yExMGLg",
miniprogram = new
{
appid = appId, // 小程序appId
pagepath = $"pages/index/index?hotelid={Hotelid}&status=7" // 跳转到小程序中的地址
},
topcolor = "#FF0000",
data = new
{
first = new { value = first },
keyword1 = new { value = summary.BuyerTitle },
keyword2 = new { value = first },
remark = new { value = remark }
}
};
var msg = JsonConvert.SerializeObject(json);
AizhuhotelHelper.SendTempMsg(msg);
}
}
}
else
{
throw new Exception("消息模板未配置");
}
// 2.向财务经理发送审核消息;
string jncAuditor = JncAuditor[2];
var auditorS = Db.Queryable<ApptAuditor>().Where(t => t.OpDescript == jncAuditor).First();
if (auditorS != null)
{
var usersPost = Db.Queryable<UcLogin>().Where(t => t.OpGroup == auditorS.OpGroup && !string.IsNullOrEmpty(t.WxServiceId)).ToList();
if (usersPost != null && usersPost.Count > 0)
{
if (AppId == "wx3f193488e04b2ed8") // 江南春
{
string first = $"{userCreate.OpName}提交了预订申请";
var keyword = new[] { $"{summary.BuyerTitle}", now.ToString("yyyy-MM-dd HH:mm") };
string remark = "请尽快审核";
AizhuhotelHelper.SendTemplateMsg(usersPost.Select(t => t.WxServiceId).ToList(), "80CnTAF5tLIPJgi6GPS2eEit-bDqFZ_IjYEeGjarQx8", $"pages/index/index?hotelid={Hotelid}&status=2", first, remark, keyword);
}
else if (AppId == "wx2b6e92e9e0c6025f") // 香堤湾
{
var tousers = usersPost.Select(t => t.WxServiceId).ToList();
if (tousers != null && tousers.Count > 0)
{
string first = $"{userCreate.OpName}提交了预订申请";
var keyword = new[] { $"{summary.BuyerTitle}", now.ToString("yyyy-MM-dd HH:mm") };
string remark = "请尽快审核";
foreach (var touser in tousers)
{
var json = new
{
touser = touser,
template_id = "21Qr9bf5k3UlxD3K6EBKjEnxrz8Djiw6TIu6yExMGLg",
miniprogram = new
{
appid = appId, // 小程序appId
pagepath = $"pages/index/index?hotelid={Hotelid}&status=2" // 跳转到小程序中的地址
},
topcolor = "#FF0000",
data = new
{
first = new { value = first },
keyword1 = new { value = summary.BuyerTitle },
keyword2 = new { value = first },
remark = new { value = remark }
}
};
var msg = JsonConvert.SerializeObject(json);
AizhuhotelHelper.SendTempMsg(msg);
}
}
}
else
{
throw new Exception("消息模板未配置");
}
}
}
}
else if (summary.AuditorStatus == (int)EnumAuditorJncStatus.审核单财务经理)
{
// 1.向发起人发送
if (AppId == "wx3f193488e04b2ed8") // 江南春
{
string audoter = userAll.Where(t => t.OpId == audimM.UserId).FirstOrDefault()?.OpName;
string first = $"财务经理{audoter}审核通过了您的预订申请";
var keyword = new[] { $"{summary.BuyerTitle}", now.ToString("yyyy-MM-dd HH:mm") };
string remark = "";
if (!string.IsNullOrEmpty(audimM.Remark)) remark += $"审核评语[{audimM.Remark}],";
remark += "后续流程:请等待财务总监审核";
AizhuhotelHelper.SendTemplateMsg(createUserOpenid, "80CnTAF5tLIPJgi6GPS2eEit-bDqFZ_IjYEeGjarQx8", $"pages/index/index?hotelid={Hotelid}&status=7", first, remark, keyword);
}
else if (AppId == "wx2b6e92e9e0c6025f") // 香堤湾
{
if (createUserOpenid != null && createUserOpenid.Count > 0)
{
string audoter = userAll.Where(t => t.OpId == audimM.UserId).FirstOrDefault()?.OpName;
string first = $"财务经理{audoter}审核通过了您的预订申请";
string remark = "";
if (!string.IsNullOrEmpty(audimM.Remark)) remark += $"审核评语[{audimM.Remark}],";
remark += "后续流程:请等待财务总监审核";
foreach (var item in createUserOpenid)
{
var json = new
{
touser = item,
template_id = "21Qr9bf5k3UlxD3K6EBKjEnxrz8Djiw6TIu6yExMGLg",
miniprogram = new
{
appid = appId, // 小程序appId
pagepath = $"pages/index/index?hotelid={Hotelid}&status=7" // 跳转到小程序中的地址
},
topcolor = "#FF0000",
data = new
{
first = new { value = first },
keyword1 = new { value = summary.BuyerTitle },
keyword2 = new { value = first },
remark = new { value = remark }
}
};
var msg = JsonConvert.SerializeObject(json);
AizhuhotelHelper.SendTempMsg(msg);
}
}
}
else
{
throw new Exception("消息模板未配置");
}
// 2.向财务总监发送审核消息;
string jncAuditor = JncAuditor[3];
var auditorS = Db.Queryable<ApptAuditor>().Where(t => t.OpDescript == jncAuditor).First();
if (auditorS != null)
{
var usersPost = Db.Queryable<UcLogin>().Where(t => t.OpGroup == auditorS.OpGroup && !string.IsNullOrEmpty(t.WxServiceId)).ToList();
if (usersPost != null && usersPost.Count > 0)
{
if (AppId == "wx3f193488e04b2ed8") // 江南春
{
string first = $"{userCreate.OpName}提交了预订申请";
var keyword = new[] { $"{summary.BuyerTitle}", now.ToString("yyyy-MM-dd HH:mm") };
string remark = "请尽快审核";
AizhuhotelHelper.SendTemplateMsg(usersPost.Select(t => t.WxServiceId).ToList(), "80CnTAF5tLIPJgi6GPS2eEit-bDqFZ_IjYEeGjarQx8", $"pages/index/index?hotelid={Hotelid}&status=2", first, remark, keyword);
}
else if (AppId == "wx2b6e92e9e0c6025f") // 香堤湾
{
var tousers = usersPost.Select(t => t.WxServiceId).ToList();
if (tousers != null && tousers.Count > 0)
{
string first = $"{userCreate.OpName}提交了预订申请";
string remark = "请尽快审核";
foreach (var touser in tousers)
{
var json = new
{
touser = touser,
template_id = "21Qr9bf5k3UlxD3K6EBKjEnxrz8Djiw6TIu6yExMGLg",
miniprogram = new
{
appid = appId, // 小程序appId
pagepath = $"pages/index/index?hotelid={Hotelid}&status=2" // 跳转到小程序中的地址
},
topcolor = "#FF0000",
data = new
{
first = new { value = first },
keyword1 = new { value = summary.BuyerTitle },
keyword2 = new { value = first },
remark = new { value = remark }
}
};
var msg = JsonConvert.SerializeObject(json);
AizhuhotelHelper.SendTempMsg(msg);
}
}
}
else
{
throw new Exception("消息模板未配置");
}
}
}
}
else if (summary.AuditorStatus == (int)EnumAuditorJncStatus.审核单财务总监)
{
// 1.向发起人发送
if (AppId == "wx3f193488e04b2ed8") // 江南春
{
string audoter = userAll.Where(t => t.OpId == audimM.UserId).FirstOrDefault()?.OpName;
string first = $"财务总监{audoter}审核通过了您的预订申请";
var keyword = new[] { $"{summary.BuyerTitle}", now.ToString("yyyy-MM-dd HH:mm") };
string remark = "";
if (!string.IsNullOrEmpty(audimM.Remark)) remark += $"审核评语[{audimM.Remark}],";
remark += "后续流程:请等待总经理审核";
AizhuhotelHelper.SendTemplateMsg(createUserOpenid, "80CnTAF5tLIPJgi6GPS2eEit-bDqFZ_IjYEeGjarQx8", $"pages/index/index?hotelid={Hotelid}&status=7", first, remark, keyword);
}
else if (AppId == "wx2b6e92e9e0c6025f") // 香堤湾
{
if (createUserOpenid != null && createUserOpenid.Count > 0)
{
string audoter = userAll.Where(t => t.OpId == audimM.UserId).FirstOrDefault()?.OpName;
string first = $"财务总监{audoter}审核通过了您的预订申请";
string remark = "";
if (!string.IsNullOrEmpty(audimM.Remark)) remark += $"审核评语[{audimM.Remark}],";
remark += "后续流程:请等待总经理审核";
foreach (var item in createUserOpenid)
{
var json = new
{
touser = item,
template_id = "21Qr9bf5k3UlxD3K6EBKjEnxrz8Djiw6TIu6yExMGLg",
miniprogram = new
{
appid = appId, // 小程序appId
pagepath = $"pages/index/index?hotelid={Hotelid}&status=7" // 跳转到小程序中的地址
},
topcolor = "#FF0000",
data = new
{
first = new { value = first },
keyword1 = new { value = summary.BuyerTitle },
keyword2 = new { value = first },
remark = new { value = remark }
}
};
var msg = JsonConvert.SerializeObject(json);
AizhuhotelHelper.SendTempMsg(msg);
}
}
}
else
{
throw new Exception("消息模板未配置");
}
// 2.向总经理发送审核消息;
string jncAuditor = JncAuditor[4];
var auditorS = Db.Queryable<ApptAuditor>().Where(t => t.OpDescript == jncAuditor).First();
if (auditorS != null)
{
var usersPost = Db.Queryable<UcLogin>().Where(t => t.OpGroup == auditorS.OpGroup && !string.IsNullOrEmpty(t.WxServiceId)).ToList();
if (usersPost != null && usersPost.Count > 0)
{
if (AppId == "wx3f193488e04b2ed8") // 江南春
{
string first = $"{userCreate.OpName}提交了预订申请";
var keyword = new[] { $"{summary.BuyerTitle}", now.ToString("yyyy-MM-dd HH:mm") };
string remark = "请尽快审核";
AizhuhotelHelper.SendTemplateMsg(usersPost.Select(t => t.WxServiceId).ToList(), "80CnTAF5tLIPJgi6GPS2eEit-bDqFZ_IjYEeGjarQx8", $"pages/index/index?hotelid={Hotelid}&status=2", first, remark, keyword);
}
else if (AppId == "wx2b6e92e9e0c6025f") // 香堤湾
{
var tousers = usersPost.Select(t => t.WxServiceId).ToList();
if (tousers != null && tousers.Count > 0)
{
string first = $"{userCreate.OpName}提交了预订申请";
var keyword = new[] { $"{summary.BuyerTitle}", now.ToString("yyyy-MM-dd HH:mm") };
string remark = "请尽快审核";
foreach (var touser in tousers)
{
var json = new
{
touser = touser,
template_id = "21Qr9bf5k3UlxD3K6EBKjEnxrz8Djiw6TIu6yExMGLg",
miniprogram = new
{
appid = appId, // 小程序appId
pagepath = $"pages/index/index?hotelid={Hotelid}&status=2" // 跳转到小程序中的地址
},
topcolor = "#FF0000",
data = new
{
first = new { value = first },
keyword1 = new { value = summary.BuyerTitle },
keyword2 = new { value = first },
remark = new { value = remark }
}
};
var msg = JsonConvert.SerializeObject(json);
AizhuhotelHelper.SendTempMsg(msg);
}
}
}
else
{
throw new Exception("消息模板未配置");
}
}
}
}
else if (summary.AuditorStatus == (int)EnumAuditorJncStatus.确定单)
{
// 1.向发起人发送
if (AppId == "wx3f193488e04b2ed8") // 江南春
{
string audoter = userAll.Where(t => t.OpId == audimM.UserId).FirstOrDefault()?.OpName;
string first = $"总经理{audoter}审核通过了您的预订申请";
var keyword = new[] { $"{summary.BuyerTitle}", now.ToString("yyyy-MM-dd HH:mm") };
string remark = "";
if (!string.IsNullOrEmpty(audimM.Remark)) remark += $"审核评语[{audimM.Remark}],";
remark += "后续流程:请团队来临前生成完成单,以便触发消息推送给相关人员";
AizhuhotelHelper.SendTemplateMsg(createUserOpenid, "80CnTAF5tLIPJgi6GPS2eEit-bDqFZ_IjYEeGjarQx8", $"pages/index/index?hotelid={Hotelid}&status=8", first, remark, keyword);
}
else if (AppId == "wx2b6e92e9e0c6025f") // 香堤湾
{
if (createUserOpenid != null && createUserOpenid.Count > 0)
{
string audoter = userAll.Where(t => t.OpId == audimM.UserId).FirstOrDefault()?.OpName;
string first = $"总经理{audoter}审核通过了您的预订申请";
string remark = "";
if (!string.IsNullOrEmpty(audimM.Remark)) remark += $"审核评语[{audimM.Remark}],";
remark += "后续流程:请团队来临前生成完成单,以便触发消息推送给相关人员";
foreach (var item in createUserOpenid)
{
var json = new
{
touser = item,
template_id = "21Qr9bf5k3UlxD3K6EBKjEnxrz8Djiw6TIu6yExMGLg",
miniprogram = new
{
appid = appId, // 小程序appId
pagepath = $"pages/index/index?hotelid={Hotelid}&status=8" // 跳转到小程序中的地址
},
topcolor = "#FF0000",
data = new
{
first = new { value = first },
keyword1 = new { value = summary.BuyerTitle },
keyword2 = new { value = first },
remark = new { value = remark }
}
};
var msg = JsonConvert.SerializeObject(json);
AizhuhotelHelper.SendTempMsg(msg);
}
}
}
else
{
throw new Exception("消息模板未配置");
}
}
else if (summary.AuditorStatus == (int)EnumAuditorJncStatus.驳回单)
{
// 1.向发起人发送
if (AppId == "wx3f193488e04b2ed8") // 江南春
{
// 获取驳回前最后一条审核记录以推理驳回人的角色
// 因为驳回即发送信息,不做严谨判断了
var _audimM = Db.Queryable<ApptAuditLog>().Where(t => t.ApptId == summary.Id && t.Type == 1 && t.Id != audimM.Id).OrderBy(t => t.Id, OrderByType.Desc).First();
string zw = "";
switch ((EnumAuditorJncStatus)_audimM.AuditorStatus)
{
case EnumAuditorJncStatus.审核单申请:
zw = "预定部";
break;
case EnumAuditorJncStatus.审核单预定部:
zw = "销售经理";
break;
case EnumAuditorJncStatus.审核单销售经理:
zw = "财务经理";
break;
case EnumAuditorJncStatus.审核单财务经理:
zw = "财务总监";
break;
case EnumAuditorJncStatus.审核单财务总监:
zw = "总经理";
break;
default:
break;
}
string audoter = userAll.Where(t => t.OpId == audimM.UserId).FirstOrDefault()?.OpName;
var first = $"{zw}{audoter}驳回了您的预订申请";
var keyword = new[] { $"{summary.BuyerTitle}", now.ToString("yyyy-MM-dd HH:mm") };
string remark = "";
if (!string.IsNullOrEmpty(audimM.Remark)) remark += $"驳回评语[{audimM.Remark}],";
remark += "后续流程:请核对信息进行修改后重新提交";
AizhuhotelHelper.SendTemplateMsg(createUserOpenid, "80CnTAF5tLIPJgi6GPS2eEit-bDqFZ_IjYEeGjarQx8", $"pages/index/index?hotelid={Hotelid}&status=4", first, remark, keyword);
}
else if (AppId == "wx2b6e92e9e0c6025f") // 香堤湾
{
if (createUserOpenid != null && createUserOpenid.Count > 0)
{
// 获取驳回前最后一条审核记录以推理驳回人的角色
// 因为驳回即发送信息,不做严谨判断了
var _audimM = Db.Queryable<ApptAuditLog>().Where(t => t.ApptId == summary.Id && t.Type == 1 && t.Id != audimM.Id).OrderBy(t => t.Id, OrderByType.Desc).First();
string zw = "";
switch ((EnumAuditorJncStatus)_audimM.AuditorStatus)
{
case EnumAuditorJncStatus.审核单申请:
zw = "预定部";
break;
case EnumAuditorJncStatus.审核单预定部:
zw = "销售经理";
break;
case EnumAuditorJncStatus.审核单销售经理:
zw = "财务经理";
break;
case EnumAuditorJncStatus.审核单财务经理:
zw = "财务总监";
break;
case EnumAuditorJncStatus.审核单财务总监:
zw = "总经理";
break;
default:
break;
}
string audoter = userAll.Where(t => t.OpId == audimM.UserId).FirstOrDefault()?.OpName;
var first = $"{zw}{audoter}驳回了您的预订申请";
string remark = "";
if (!string.IsNullOrEmpty(audimM.Remark)) remark += $"驳回评语[{audimM.Remark}],";
remark += "后续流程:请核对信息进行修改后重新提交";
foreach (var item in createUserOpenid)
{
var json = new
{
touser = item,
template_id = "21Qr9bf5k3UlxD3K6EBKjEnxrz8Djiw6TIu6yExMGLg",
miniprogram = new
{
appid = appId, // 小程序appId
pagepath = $"pages/index/index?hotelid={Hotelid}&status=4" // 跳转到小程序中的地址
},
topcolor = "#FF0000",
data = new
{
first = new { value = first },
keyword1 = new { value = summary.BuyerTitle },
keyword2 = new { value = first },
remark = new { value = remark }
}
};
var msg = JsonConvert.SerializeObject(json);
AizhuhotelHelper.SendTempMsg(msg);
}
}
}
else
{
throw new Exception("消息模板未配置");
}
}
}
catch (Exception ex)
{
_logger.Error(ex.Message);
}
}
/// <summary>
/// 抄送消息推送
/// </summary>
/// <param name="createUserName">发起人姓名</param>
/// <param name="buyerTitle">订单标题</param>
/// <param name="wxSericeOpenId">接收人程序openid</param>
/// <param name="autoCopy">自动手动,true-自动,false-手动</param>
/// <param name="remark">手动自动备注</param>
private void SetCopyMsg(string createUserName, string buyerTitle, string wxSericeOpenId, bool autoCopy, string remark)
{
// 收到的自动抄送的消息
try
{
DateTime now = DateTime.Now;
string AppId = BaseConfig.App(new string[] { "WeChatService", "AppId" });
string Hotelid = BaseConfig.App(new string[] { "Hotelid" });
string appId = BaseConfig.App(new string[] { "WeChat", "AppId" });
if (string.IsNullOrWhiteSpace(appId)) ApiResult<WeChatLoginRes>.Failed("缺少配置参数 [AppId]!");
if (AppId == "wx3f193488e04b2ed8")
{
string first = "";
string msgremark = "";
if (autoCopy)
{
first = $"您收到一条来自{createUserName}的自动抄送预订单";
}
else
{
first = $"您收到一条来自{createUserName}的手工抄送预订单";
if (string.IsNullOrEmpty(remark))
{
msgremark += $"抄送备注[无],";
}
else
{
msgremark += $"抄送备注[{remark}],";
}
}
msgremark += "请关注订单信息";
var keyword = new[] { $"{buyerTitle}", now.ToString("yyyy-MM-dd HH:mm") };
AizhuhotelHelper.SendTemplateMsg(wxSericeOpenId, "80CnTAF5tLIPJgi6GPS2eEit-bDqFZ_IjYEeGjarQx8", $"pages/index/index?hotelid={Hotelid}&status=6", first, msgremark, keyword);
}
else if (AppId == "wx2b6e92e9e0c6025f") // 香堤湾
{
string first = "";
string msgremark = "";
if (autoCopy)
{
first = $"您收到一条来自{createUserName}的自动抄送预订单";
}
else
{
first = $"您收到一条来自{createUserName}的手工抄送预订单";
if (string.IsNullOrEmpty(remark))
{
msgremark += $"抄送备注[无],";
}
else
{
msgremark += $"抄送备注[{remark}],";
}
}
msgremark += "请关注订单信息";
var json = new
{
touser = wxSericeOpenId,
template_id = "21Qr9bf5k3UlxD3K6EBKjEnxrz8Djiw6TIu6yExMGLg",
miniprogram = new
{
appid = appId, // 小程序appId
pagepath = $"pages/index/index?hotelid={Hotelid}&status=6" // 跳转到小程序中的地址
},
topcolor = "#FF0000",
data = new
{
first = new { value = first },
keyword1 = new { value = buyerTitle },
keyword2 = new { value = first },
remark = new { value = msgremark }
}
};
var msg = JsonConvert.SerializeObject(json);
AizhuhotelHelper.SendTempMsg(msg);
}
else
{
throw new Exception("消息模板未配置");
}
}
catch (Exception ex)
{
_logger.Error(ex.ToString());
}
}
/// <summary>
/// 自动抄送
/// </summary>
/// <param name="id"></param>
private void AotoCopy(int id)
{
DateTime now = DateTime.Now;
ApptSummary summary = Db.Queryable<ApptSummary>()
.Mapper(t => t.ApptRoomList, t => t.ApptRoomList.First().ApptId)
.Mapper(t => t.ApptMeetingList, t => t.ApptMeetingList.First().ApptId)
.Mapper(t => t.ApptCateringList, t => t.ApptCateringList.First().ApptId)
.Mapper(t => t.ApptSpringList, t => t.ApptSpringList.First().ApptId)
.Mapper(t => t.ApptRemarks, t => t.ApptRemarks.First().ApptId)
.Where(t => t.Id == id && t.ApptTypeId == 2).First();
if (summary.AuditorStatus != (int)EnumAuditorJncStatus.完成单) return;
try
{
var userList = Db.Queryable<UcLogin>().ToList().Replace();
List<UcLogin> toSend = userList.Where(t => !SqlFunc.IsNullOrEmpty(t.Autosendcond) && t.Autosendcond.Contains("#所有部门#")).ToList();
if (summary.ApptRoomList != null && summary.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 (summary.ApptMeetingList != null && summary.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 (summary.ApptCateringList != null && summary.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 (summary.ApptSpringList != null && summary.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 (summary.ApptRemarks != null && summary.ApptRemarks.Count > 0)
{
foreach (var item in summary.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>();
string createUserName = userList.Where(t => t.OpId == summary.UserId).FirstOrDefault()?.OpName;
foreach (var item in toSend)
{
apptAuditLogs.Add(new ApptAuditLog()
{
Type = 2,
CreateTime = now,
UserId = item.OpId,
ApptId = summary.Id.Value,
AuditorStatus = 3,
Remark = string.Empty,
Source = string.Empty
});
if (!string.IsNullOrEmpty(item.WxServiceId))
{
SetCopyMsg(createUserName, summary.BuyerTitle, item.WxServiceId, true, "");
}
}
InsertRange(apptAuditLogs);
}
}
catch (Exception ex)
{
_logger.Error(ex.Message);
}
}
/// <summary>
/// 封装手工回复信息
/// </summary>
/// <param name="allUser">所有人员</param>
/// <param name="id">要查看的回复的主键</param>
/// <returns></returns>
private List<ReplyResp> GetReplyList(List<UcLogin> allUser, int id)
{
List<ApptAuditLog> ls = Db.Queryable<ApptAuditLog>().Where(t => t.PId == id).OrderBy(t => t.Id, OrderByType.Asc).ToList();
if (ls == null || ls.Count == 0) return null;
List<ReplyResp> list = new List<ReplyResp>();
foreach (var item in ls)
{
var userName = allUser.Where(t => t.OpId == item.UserId).FirstOrDefault()?.OpName;
int picNum = 0;
if (!string.IsNullOrEmpty(item.Pic0)) picNum += 1;
if (!string.IsNullOrEmpty(item.Pic1)) picNum += 1;
if (!string.IsNullOrEmpty(item.Pic2)) picNum += 1;
if (!string.IsNullOrEmpty(item.Pic3)) picNum += 1;
if (!string.IsNullOrEmpty(item.Pic4)) picNum += 1;
list.Add(new ReplyResp()
{
CreateTime = item.CreateTime,
UserName = userName,
Id = item.Id,
Remark = item.Remark,
PicNum = picNum,
});
}
return list;
}
}
}