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; using System.Threading.Tasks; namespace Appointment.Repository { /// /// 江南春模式 /// 2025-05-12 现在使用的审核流程模式 /// public class ApptRepoJNC : DbContext, IApptRepoJNC { private readonly log4net.ILog _logger = log4net.LogManager.GetLogger(typeof(ApptRepoJNC)); /// /// "预定部", "销售经理", "财务经理", "财务总监", "总经理" /// static string[] JncAuditor = new string[] { "预定部", "销售经理", "财务经理", "财务总监", "总经理" }; // 销售 91-王应哲-123,预定部 92-曹青青-123,销售经理 TEST-123,财务经理 WJ-123,财务总监 LJJ-123 IApptLogRepo _ApptLog; public ApptRepoJNC(IApptLogRepo apptLog) { _ApptLog = apptLog; } // ---- 增 /// /// 创建暂订单 /// /// /// public ApiResult AddApptSummary(AddSummaryJncReq req) { DateTime now = DateTime.Now; req = req.Replace(); /* 数据校验 */ if (req == null) return ApiResult.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.Failed("操作无效,预订详情全为空!"); } ApiResult loginUserRes = BaseRepo.DECLoginInfo(req.AccountDes); if (!loginUserRes.IsSuccess) return ApiResult.Failed(loginUserRes.Msg); string ApptType = BaseConfig.App(new string[] { "ApptType" }); if (ApptType != "2") return ApiResult.Failed("操作失败,预订类型不正确!"); var user = Db.Queryable().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(); if (req.ApptRoomList != null && req.ApptRoomList.Count > 0) { List roomTypeList = Db.Queryable().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.Failed("添加失败,房类代码不存在!"); if (item.RoomNum < 1) return ApiResult.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(); if (req.ApptMeetingList != null && req.ApptMeetingList.Count > 0) { List resCodeList = Db.Queryable().Where(t => t.Sort == "A" && t.Sta == "T").ToList(); foreach (var item in req.ApptMeetingList) { if (!string.IsNullOrWhiteSpace(item.MeetingCode)) { var resCode = resCodeList.Where(t => t.Code == item.MeetingCode).FirstOrDefault(); if (resCode == null) return ApiResult.Failed("添加失败,无效的会议厅代码!"); item.MeetingRoom = resCode.Descript1; } // 场次数据判断 if (string.IsNullOrEmpty(item.Groups)) return ApiResult.Failed($"添加失败,会议室{item.MeetingRoom}未设置场次!"); List groups = new List(); 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.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(); if (req.ApptCateringList != null && req.ApptCateringList.Count > 0) { foreach (ApptCatering item in req.ApptCateringList) { if (item.CateringType != 0 && item.CateringType != 1) return ApiResult.Failed($"用餐类型不正确!"); // 场次数据判断 if (string.IsNullOrEmpty(item.Groups)) return ApiResult.Failed($"添加失败,餐厅{item.CateringRoom}未设置场次!"); List groups = new List(); 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.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(); 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(); 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.Success("", appt.Id.Value); } // ---- 改 /// /// 修改暂订单 /// /// /// public ApiResult 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.Failed("操作无效,预订详情全为空!"); } var loginUserRes = BaseRepo.DECLoginInfo(req.AccountDes); if (!loginUserRes.IsSuccess) return ApiResult.Failed(loginUserRes.Msg); var summaryM = Db.Queryable().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("只有创建人员具有操作权限!"); 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() .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().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(roomList.Select(t => t.Id.Value).ToList()); } } else { List roomTypeList = Db.Queryable().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().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(); 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().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(meetList.Select(t => t.Id.Value).ToList()); } } else { List resCodeList = Db.Queryable().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().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(); 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 groups = new List(); 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(); 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 groups = new List(); 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().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(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().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(); foreach (var item in addList) { if (item.CateringType != 0 && item.CateringType != 1) return ApiResult.Failed($"用餐类型不正确!"); // 场次数据判断 if (string.IsNullOrEmpty(item.Groups)) return ApiResult.Failed($"添加失败,餐厅{item.CateringRoom}未设置场次!"); List groups = new List(); 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.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(); 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.Failed($"用餐类型不正确!"); // 场次数据判断 if (string.IsNullOrEmpty(item.Groups)) return ApiResult.Failed($"添加失败,餐厅{item.CateringRoom}未设置场次!"); List groups = new List(); 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.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().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(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().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(); 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(); 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().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(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().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(); 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(); 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.Failed(ex.Message); } return ApiResult.Success(info: summaryM.Id.Value); } /// /// 申请审核单 /// /// /// public async Task ApplyOrder(ApplyOrderReq req) { DateTime now = DateTime.Now; req = req.Replace(); if (req.RemarkPics != null && req.RemarkPics.Count > 10) { return ApiResult.Failed("操作失败,最多只可上传10张图片!"); } var loginUserRes = BaseRepo.DECLoginInfo(req.AccountDes); if (!loginUserRes.IsSuccess) return ApiResult.Failed(loginUserRes.Msg); var summaryM = await Db.Queryable().Where(t => t.Id == req.Id).FirstAsync(); 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() .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]; //if (req.RemarkPics.Count > 5) apptAuditLog.Pic5 = req.RemarkPics[5]; //if (req.RemarkPics.Count > 6) apptAuditLog.Pic6 = req.RemarkPics[6]; //if (req.RemarkPics.Count > 7) apptAuditLog.Pic7 = req.RemarkPics[7]; //if (req.RemarkPics.Count > 8) apptAuditLog.Pic8 = req.RemarkPics[8]; //if (req.RemarkPics.Count > 9) apptAuditLog.Pic9 = req.RemarkPics[9]; } InsertReturnId(apptAuditLog); _ = await PostMsg(summaryM); return ApiResult.Success(); } /// /// 取消OA单 /// /// /// /// /// 未占用资源时,只有发起人可以取消; /// 未用资源后,只有预定部可以取消; /// 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().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]; //if (req.RemarkPics.Count > 5) apptAuditLog.Pic5 = req.RemarkPics[5]; //if (req.RemarkPics.Count > 6) apptAuditLog.Pic6 = req.RemarkPics[6]; //if (req.RemarkPics.Count > 7) apptAuditLog.Pic7 = req.RemarkPics[7]; //if (req.RemarkPics.Count > 8) apptAuditLog.Pic8 = req.RemarkPics[8]; //if (req.RemarkPics.Count > 9) apptAuditLog.Pic9 = req.RemarkPics[9]; } InsertReturnId(apptAuditLog); } else if (summaryM.ApplyOA == 1) { string jncAuditor = JncAuditor[0]; string group = Db.Queryable().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() .SetColumns(t => new GrpInfo { Sta = "C" }) .Where(t => t.Accnt == summaryM.GrpNo) .ExecuteCommand(); } summaryM.AuditorStatus = (int)EnumAuditorJncStatus.归档资源单; Update(summaryM); var sm = Db.Queryable().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]; //if (req.RemarkPics.Count > 5) apptAuditLog.Pic5 = req.RemarkPics[5]; //if (req.RemarkPics.Count > 6) apptAuditLog.Pic6 = req.RemarkPics[6]; //if (req.RemarkPics.Count > 7) apptAuditLog.Pic7 = req.RemarkPics[7]; //if (req.RemarkPics.Count > 8) apptAuditLog.Pic8 = req.RemarkPics[8]; //if (req.RemarkPics.Count > 9) apptAuditLog.Pic9 = req.RemarkPics[9]; } InsertReturnId(apptAuditLog); var userWxServiceId = Db.Queryable().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.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(); } /// /// 审核通过 /// /// /// public async Task AuditorSummary(ApplyOrderReq req) { req = req.Replace(); if (req.RemarkPics != null && req.RemarkPics.Count > 5) { return ApiResult.Failed("操作失败,最多只可上传5张图片!"); } ApptSummary summaryM = await Db.Queryable() .Where(t => t.Id == req.Id && t.ApptTypeId == 2).FirstAsync(); if (summaryM == null) return ApiResult.Failed("订单不存在"); if (summaryM.AuditorStatus == (int)EnumAuditorJncStatus.审核单申请) { return await ApprovedByAuditor(req); } DateTime now = DateTime.Now; if (JncAuditor.Length != 5) return ApiResult.Failed("审核配置无效!"); ApiResult loginUserRes = null; if (req.AccountDes == "@@@自动@@@") // 2025-05-14 总经理审核通过后,自动完成发起人的 生成完成单操作流程 { loginUserRes = ApiResult.Success(); loginUserRes.Info = new LoginUserRes { UserAccount = "自动" }; } else { 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) // 2025-05-14 屏蔽 //{ // return ApiResult.Failed("没有操作权限!"); //} descript = "本人"; nextStatus = EnumAuditorJncStatus.完成单; break; default: return ApiResult.Failed("审核状态不正确!"); } if (descript != "本人") { var userGroup = Db.Queryable((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]; //if (req.RemarkPics.Count > 5) apptAuditLog.Pic5 = req.RemarkPics[5]; //if (req.RemarkPics.Count > 6) apptAuditLog.Pic6 = req.RemarkPics[6]; //if (req.RemarkPics.Count > 7) apptAuditLog.Pic7 = req.RemarkPics[7]; //if (req.RemarkPics.Count > 8) apptAuditLog.Pic8 = req.RemarkPics[8]; //if (req.RemarkPics.Count > 9) apptAuditLog.Pic9 = req.RemarkPics[9]; } InsertReturnId(apptAuditLog); if (nextStatus == EnumAuditorJncStatus.完成单) { _ = await AotoCopy(summaryM.Id.Value); } _ = await PostMsg(summaryM); //2025-05-14 确定单(总经理审核通过)后 直接变成完成单(销售员已确定完成,已群发,自动抄送) 省去 销售员再次 确定 if (nextStatus == EnumAuditorJncStatus.确定单) { await AuditorSummary(new ApplyOrderReq { AccountDes = "@@@自动@@@", Id = summaryM.Id.Value, Remark = null, RemarkPics = new List() }); } return ApiResult.Success(); } /// /// 被驳回 /// /// /// public async Task 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 = await Db.Queryable() .Where(t => t.Id == req.Id && t.ApptTypeId == 2).FirstAsync(); 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((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]; //if (req.RemarkPics.Count > 5) apptAuditLog.Pic5 = req.RemarkPics[5]; //if (req.RemarkPics.Count > 6) apptAuditLog.Pic6 = req.RemarkPics[6]; //if (req.RemarkPics.Count > 7) apptAuditLog.Pic7 = req.RemarkPics[7]; //if (req.RemarkPics.Count > 8) apptAuditLog.Pic8 = req.RemarkPics[8]; //if (req.RemarkPics.Count > 9) apptAuditLog.Pic9 = req.RemarkPics[9]; } 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); _ = await PostMsg(summaryM); return ApiResult.Success(); } /// /// 手动抄送 /// /// /// public async Task ManualCopy(ApptSendReq req) { DateTime now = DateTime.Now; var loginUserRes = BaseRepo.DECLoginInfo(req.AccountDES); if (!loginUserRes.IsSuccess) return ApiResult.Failed(loginUserRes.Msg); var summaryM = GetById(req.ApptId); if (summaryM == null) return ApiResult.Failed("订单不存在!"); if (req.ToUserAccounts == null || req.ToUserAccounts.Length <= 0) return ApiResult.Failed("操作失败,未选择抄送人!"); var userList = await Db.Queryable().Where(t => t.Locked == "F").In(t => t.OpId, req.ToUserAccounts).ToListAsync(); userList = userList.Replace(); if (userList.Count != req.ToUserAccounts.Length) { List notUser = new List(); for (int i = 0; i < req.ToUserAccounts.Length; i++) { var _userList = userList.Select(t => t.OpId).ToList(); if (!_userList.Contains(req.ToUserAccounts[i])) { notUser.Add(req.ToUserAccounts[i]); } } if (notUser.Count > 0) return ApiResult.Failed($"操作失败,用户[{string.Join(",", notUser)}]不存在!"); } List ls = new List(); for (int i = 0; i < req.ToUserAccounts.Length; i++) { ls.Add(new ApptAuditLog() { Type = 2, CreateTime = now, UserId = req.ToUserAccounts[i], ApptId = req.ApptId, AuditorStatus = 3, Remark = string.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)) { await SetCopyMsg(loginUserRes.Info.UserName, summaryM.BuyerTitle, item.WxServiceId, false, req.Remark); } } return ApiResult.Success(); } /// /// 信息回复 /// /// /// 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().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, 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]; //if (req.PicList.Count > 5) apptAuditLog.Pic5 = req.PicList[5]; //if (req.PicList.Count > 6) apptAuditLog.Pic6 = req.PicList[6]; //if (req.PicList.Count > 7) apptAuditLog.Pic7 = req.PicList[7]; //if (req.PicList.Count > 8) apptAuditLog.Pic8 = req.PicList[8]; //if (req.PicList.Count > 9) apptAuditLog.Pic9 = req.PicList[9]; } var inRe = InsertReturnId(apptAuditLog); if (!inRe.IsSuccess) { return ApiResult.Failed(inRe.Msg); } else { return ApiResult.Success(); } } // ---- 查 /// /// 根据订单主键获取实体 /// /// /// public ApiResult GetSummaryModel(SummaryJncModelReq req) { ApiResult loginUserRes = BaseRepo.DECLoginInfo(req.AccountDes); if (!loginUserRes.IsSuccess) return ApiResult.Failed(loginUserRes.Msg); ApptSummary summaryM = Db.Queryable() .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.Success(string.Empty, null); // 如果不是正常单子返回 暂定单 if (summaryM.AuditorStatus == (int)EnumAuditorJncStatus.归档暂定单 || summaryM.AuditorStatus == (int)EnumAuditorJncStatus.归档资源单) { summaryM = Db.Queryable() .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(summaryM); var user = Db.Queryable().Where(t => t.OpId == re.UserId).First(); re.UserName = user?.OpName; return ApiResult.Success(string.Empty, re); } public ApiResult> 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() { PageIndex = req.PageIndex, PageSize = req.PageSize, Total = total, Data = new List() }; var loginUserRes = BaseRepo.DECLoginInfo(req.AccountDES); if (!loginUserRes.IsSuccess) return ApiResult>.Failed(loginUserRes.Msg); var _summarys = Db.Queryable().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>.Success(info: reList); //} // 审核员 List apptIdShList = new List(); if (req.Menu == 1) // 待我审核的 { var myGroupM = Db.Queryable().Where(t => t.OpGroup == loginUserRes.Info.UserGroup).First(); if (myGroupM == null) return ApiResult>.Success(info: reList); if (myGroupM.OpDescript == JncAuditor[0]) // 当前审核员是 预定部 { apptIdShList = Db.Queryable() .Where(t => t.AuditorStatus == (int)EnumAuditorJncStatus.审核单申请).Select(t => t.Id.Value).ToList(); } else if (myGroupM.OpDescript == JncAuditor[1]) { apptIdShList = Db.Queryable() .Where(t => t.AuditorStatus == (int)EnumAuditorJncStatus.审核单预定部).Select(t => t.Id.Value).ToList(); } else if (myGroupM.OpDescript == JncAuditor[2]) { apptIdShList = Db.Queryable() .Where(t => t.AuditorStatus == (int)EnumAuditorJncStatus.审核单销售经理).Select(t => t.Id.Value).ToList(); } else if (myGroupM.OpDescript == JncAuditor[3]) { apptIdShList = Db.Queryable() .Where(t => t.AuditorStatus == (int)EnumAuditorJncStatus.审核单财务经理).Select(t => t.Id.Value).ToList(); } else if (myGroupM.OpDescript == JncAuditor[4]) { apptIdShList = Db.Queryable() .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() .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() .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>.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 detailList = new List(); if (summarys != null && summarys.Count > 0) { List users = Db.Queryable().ToList(); foreach (var item in summarys) { var model = RegexHelper.AutoCopy(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>.Success(string.Empty, reList); } /// /// 获取审批流程 /// /// /// public ApiResult AuditorLogTree(SummaryJncModelReq req) { if (JncAuditor.Length != 5) return ApiResult.Failed("审核配置无效!"); AuditorLogReq logRe = new AuditorLogReq { Authority = 0, UpdateStatus = 0, SubmitStatus = 0, SumbitFinish = 0, SumbitCancel = 0, AuditorLog = new List(), }; ApiResult loginUserRes = BaseRepo.DECLoginInfo(req.AccountDes); if (!loginUserRes.IsSuccess) return ApiResult.Failed(loginUserRes.Msg); try { ApptSummary summaryM = Db.Queryable() .Where(t => t.Id == req.Id && t.ApptTypeId == 2).First(); // 当前订单实体 var idList = Db.Queryable() .Where(t => t.Guid == summaryM.Guid).Select(t => t.Id.Value).ToList(); // 当前订单的所有副本 var logL = Db.Queryable() .Where(t => idList.Contains(t.ApptId)).OrderBy(t => t.Id, OrderByType.Asc).ToList(); // 当前订单副本的所有日志记录 var audotorL = Db.Queryable().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().ToList().Replace(); // 所人有员信息 var createUserM = userL.Where(t => t.OpId == summaryM.UserId).FirstOrDefault(); // 发起人 if (createUserM == null) return ApiResult.Failed("获取发起人失败!"); // var allReplys = Db.Queryable().Where(t => t.Type == 3).ToList(); // 所有回复的内容 [包含图片,查询很慢] // 已操作的流程日志 List statusList = new List(); foreach (var item in logL) { var opNameM = userL.Where(t => t.OpId == item.UserId).FirstOrDefault(); // 审核人实体 var OpName = opNameM?.OpName; var info = new List() { $"操作时间:{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 picList = new List(); 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); //if (!string.IsNullOrEmpty(item.Pic5)) picList.Add(item.Pic5); //if (!string.IsNullOrEmpty(item.Pic6)) picList.Add(item.Pic6); //if (!string.IsNullOrEmpty(item.Pic7)) picList.Add(item.Pic7); //if (!string.IsNullOrEmpty(item.Pic8)) picList.Add(item.Pic8); //if (!string.IsNullOrEmpty(item.Pic9)) picList.Add(item.Pic9); // 组装回复贪睡 List 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 { $"操作时间:{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 { $"操作时间:{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 { $"操作时间:{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(), PicList = new List(), }; 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() { $"可操作人员:{userSH}", }, PicList = new List(), }); 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() { $"可操作人员:{userSH}", }, PicList = new List(), }); 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() { $"可操作人员:{userSH}", }, PicList = new List(), }); 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() { $"可操作人员:{userSH}", }, PicList = new List(), }); 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() { $"可操作人员:{userSH}", }, PicList = new List(), }); 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() { $"可操作人员:{createUserM.OpName}", "操作提示:请在时间来临时,与客户确定后点击完成,以便将该OA信息推送给相关人员。" }, PicList = new List(), }); 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() { $"可操作人员:{createUserM.OpName}", "操作提示:请编辑重新提交或取消订单。" }, PicList = new List(), }); } } } return ApiResult.Success(info: logRe); } catch (Exception ex) { return ApiResult.Failed(ex.Message); } } /// /// 订单数据差异 /// /// /// /// /// public ApiResult> Disparity(SummaryJncModelReq req) { List list = new List(); ApiResult loginUserRes = BaseRepo.DECLoginInfo(req.AccountDes); if (!loginUserRes.IsSuccess) return ApiResult>.Failed(loginUserRes.Msg); string summaryGuid = Db.Queryable().Where(t => t.Id == req.Id && t.ApptTypeId == 2).First()?.Guid; if (string.IsNullOrEmpty(summaryGuid)) return ApiResult>.Failed("订单不存在"); List summaryAll = Db.Queryable().Where(t => t.Guid == summaryGuid).ToList(); if (summaryAll.Count <= 0) { return ApiResult>.Failed("订单不存在"); } else if (summaryAll.Count == 1) { list.Add(new DisparityReq { Title = "创建新的暂订单", Time = summaryAll[0].CreateTime.Value, Info = new List(), }); return ApiResult>.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 equalStr = new List(); foreach (var curSum in summaryL2) { if (baseSummary == null) { list.Add(new DisparityReq { Title = "首次生成确认单", Time = curSum.CreateTime.Value, Info = new List(), }); baseSummary = curSum; continue; } List infoList = new List(); #region 主体对比 equalStr = new List(); 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(); var baseRoomList = Db.Queryable().Where(t => t.ApptId == baseSummary.Id).ToList(); var curRoomList = Db.Queryable().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(); var baseMeetList = Db.Queryable().Where(t => t.ApptId == baseSummary.Id).ToList(); var curMeetList = Db.Queryable().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(); var baseCaterList = Db.Queryable().Where(t => t.ApptId == baseSummary.Id).ToList(); var curCaterList = Db.Queryable().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(); var baseSpringList = Db.Queryable().Where(t => t.ApptId == baseSummary.Id).ToList(); var curSpringList = Db.Queryable().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(); var baseRemarkList = Db.Queryable().Where(t => t.ApptId == baseSummary.Id).ToList(); var curRemarkList = Db.Queryable().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(); 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>.Success(info: list); } /// /// 返回回复中的图片列表 /// /// public ApiResult> GetReplyPicList(SummaryJncModelReq req) { ApiResult loginUserRes = BaseRepo.DECLoginInfo(req.AccountDes); if (!loginUserRes.IsSuccess) return ApiResult>.Failed(loginUserRes.Msg); var apptAuditLogM = Db.Queryable().Where(t => t.Id == req.Id).First(); if (apptAuditLogM == null) return ApiResult>.Success(); List list = new List(); 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); //if (!string.IsNullOrEmpty(apptAuditLogM.Pic5)) list.Add(apptAuditLogM.Pic5); //if (!string.IsNullOrEmpty(apptAuditLogM.Pic6)) list.Add(apptAuditLogM.Pic6); //if (!string.IsNullOrEmpty(apptAuditLogM.Pic7)) list.Add(apptAuditLogM.Pic7); //if (!string.IsNullOrEmpty(apptAuditLogM.Pic8)) list.Add(apptAuditLogM.Pic8); //if (!string.IsNullOrEmpty(apptAuditLogM.Pic9)) list.Add(apptAuditLogM.Pic9); return ApiResult>.Success(info: list); } // ---- 私有 /// /// 预定部对预定单进行审批通过 【新的订单替换原来的订单】 /// /// private async Task 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 = await Db.Queryable() .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).FirstAsync(); if (summaryM == null || summaryM.ApptTypeId != 2) return ApiResult.Failed("未获取订单数据!"); if (summaryM.AuditorStatus != (int)EnumAuditorJncStatus.审核单申请) return ApiResult.Failed("非待确定状态不可提交!"); string jncAuditor = JncAuditor[0]; var userGroup = await Db.Queryable((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) .ToListAsync(); if (userGroup == null || userGroup.Count < 1) return ApiResult.Failed("没有操作权限!"); var auditM = Db.Queryable() .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() .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 groups = item.Groups.Split(',', StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToList(); var any = Db.Queryable().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().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 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]; //if (req.RemarkPics.Count > 5) apptAuditLog.Pic5 = req.RemarkPics[5]; //if (req.RemarkPics.Count > 6) apptAuditLog.Pic6 = req.RemarkPics[6]; //if (req.RemarkPics.Count > 7) apptAuditLog.Pic7 = req.RemarkPics[7]; //if (req.RemarkPics.Count > 8) apptAuditLog.Pic8 = req.RemarkPics[8]; //if (req.RemarkPics.Count > 9) apptAuditLog.Pic9 = req.RemarkPics[9]; } 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 groups = item.Groups.Split(',', StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToList(); var any = Db.Queryable().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().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 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]; //if (req.RemarkPics.Count > 5) apptAuditLog.Pic5 = req.RemarkPics[5]; //if (req.RemarkPics.Count > 6) apptAuditLog.Pic6 = req.RemarkPics[6]; //if (req.RemarkPics.Count > 7) apptAuditLog.Pic7 = req.RemarkPics[7]; //if (req.RemarkPics.Count > 8) apptAuditLog.Pic8 = req.RemarkPics[8]; //if (req.RemarkPics.Count > 9) apptAuditLog.Pic9 = req.RemarkPics[9]; } InsertReturnId(apptAuditLog); Db.Ado.CommitTran(); } catch (Exception ex) { Db.Ado.RollbackTran(); _logger.Error(ex.ToString()); return ApiResult.Failed(ex.Message); } } _ = await PostMsg(summaryM); return ApiResult.Success(); } /// /// 实时计算机发送消息模板 /// /// private async Task 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 = await Db.Queryable().ToListAsync(); userAll = userAll.Replace(); var userCreate = userAll.Where(t => t.OpId == summary.UserId).FirstOrDefault(); if (userCreate == null) return new ApiResult { Code = 500, Msg = "用户信息不存在" }; List createUserOpenid = new List() { userCreate.WxServiceId }; var audimM = await Db.Queryable().Where(t => t.ApptId == summary.Id).OrderBy(t => t.Id, OrderByType.Desc).FirstAsync(); if (summary.AuditorStatus == (int)EnumAuditorJncStatus.审核单申请) { // 发送给预定部审核人员 string jncAuditor = JncAuditor[0]; var auditorS = await Db.Queryable().Where(t => t.OpDescript == jncAuditor).FirstAsync(); if (auditorS != null) { var usersPost = await Db.Queryable().Where(t => t.OpGroup == auditorS.OpGroup && !string.IsNullOrEmpty(t.WxServiceId)).ToListAsync(); 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)) return new ApiResult { Code = 500, Msg = "缺少配置参数 [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.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().Where(t => t.OpDescript == jncAuditor).First(); if (auditorS != null) { var usersPost = Db.Queryable().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.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().Where(t => t.OpDescript == jncAuditor).First(); if (auditorS != null) { var usersPost = Db.Queryable().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().Where(t => t.OpDescript == jncAuditor).First(); if (auditorS != null) { var usersPost = Db.Queryable().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().Where(t => t.OpDescript == jncAuditor).First(); if (auditorS != null) { var usersPost = Db.Queryable().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().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().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); } return ApiResult.Success(); } /// /// 抄送消息推送 /// /// 发起人姓名 /// 订单标题 /// 接收人程序openid /// 自动手动,true-自动,false-手动 /// 手动自动备注 private async Task SetCopyMsg(string createUserName, string buyerTitle, string wxSericeOpenId, bool autoCopy, string remark) { // 收到的自动抄送的消息 try { await Task.Delay(1); 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.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()); } return ApiResult.Success(); } /// /// 自动抄送 /// /// private async Task AotoCopy(int id) { DateTime now = DateTime.Now; ApptSummary summary = await Db.Queryable() .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).FirstAsync(); if (summary.AuditorStatus != (int)EnumAuditorJncStatus.完成单) return new ApiResult { Code = 500, Msg = "不符合自动抄送条件" }; try { var userList = Db.Queryable().ToList().Replace(); List 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 apptAuditLogs = new List(); 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); } return new ApiResult { Code = 200, Msg = "自动抄送成功" }; } /// /// 封装手工回复信息 /// /// 所有人员 /// 要查看的回复的主键 /// private List GetReplyList(List allUser, int id) { List ls = Db.Queryable().Where(t => t.PId == id).OrderBy(t => t.Id, OrderByType.Asc).ToList(); if (ls == null || ls.Count == 0) return null; List list = new List(); 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; //if (!string.IsNullOrEmpty(item.Pic5)) picNum += 1; //if (!string.IsNullOrEmpty(item.Pic6)) picNum += 1; //if (!string.IsNullOrEmpty(item.Pic7)) picNum += 1; //if (!string.IsNullOrEmpty(item.Pic8)) picNum += 1; //if (!string.IsNullOrEmpty(item.Pic9)) picNum += 1; list.Add(new ReplyResp() { CreateTime = item.CreateTime, UserName = userName, Id = item.Id, Remark = item.Remark, PicNum = picNum, }); } return list; } } }