This commit is contained in:
Yuan
2022-07-24 14:48:54 +08:00
parent 5907f586ce
commit baf1bae943
115 changed files with 19923 additions and 0 deletions

View File

@@ -0,0 +1,39 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<DocumentationFile>Appointment.Entity.xml</DocumentationFile>
<NoWarn>1701;1702;1591</NoWarn>
</PropertyGroup>
<ItemGroup>
<Compile Remove="Request\ApptSummaryReq - 复制.cs" />
<Compile Remove="Utility\ApiResult - 复制.cs" />
</ItemGroup>
<ItemGroup>
<None Remove="Model\_data\迪联OA预定补丁%28含转审抄送).sql" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Log4NetCore" Version="1.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="3.1.7" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="3.1.7" />
<PackageReference Include="sqlSugarCore" Version="5.0.1.5" />
<PackageReference Include="System.Drawing.Common" Version="5.0.2" />
</ItemGroup>
<ItemGroup>
<Folder Include="Model\_data\" />
</ItemGroup>
<ItemGroup>
<None Update="Appointment.Entity.xml">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,168 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Appointment.Entity
{
public enum EnumCommStatus
{
屏蔽 = 0,
有效 = 1,
}
public enum EnumAuditorStatus
{
全部 = 0,
// 常规流程
//保存 = 0,
//待审核 = 1,
审核中 = 2,
审核通过 = 3,
驳回 = 4,
作废 = 5,
取消 = 6,
// 江南春模式
// ---- 以下为暂定单状态,一个单子必有其一
/// <summary>
/// 暂订单
/// </summary>
/// <remarks>
/// 销售人员创建,
/// 创建完成后,提示是保存还是提交
/// </remarks>
江南春模式暂订单 = 20,
/// <summary>
/// 待审核的暂订单
/// </summary>
/// <remarks>
/// 暂订单提交之后,待生成确订单
/// 只有待状态下的订单才能生成确定单
/// </remarks>
江南春模式暂订单审核中 = 21,
/// <summary>
/// 暂订单已提交
/// </summary>
江南春模式暂订单已生成确定单 = 22,
江南春模式暂订单驳回 = 23,
// ---- 以下为确认单状态,
/// <summary>
/// 预定处根据销售提示的暂定单编号 及订金生成
/// </summary>
/// <remarks>
/// 销售人员提供单号
/// 客户交订金
/// 预定处办理
/// 占用资源
/// </remarks>
江南春模式确定单 = 30,
江南春模式销售申请OA单 = 31,
江南春模式销售经理审核中 = 32,
江南春模式财务经理审核中 = 33,
江南春模式财务总监审核中 = 34,
江南春模式总经理审核中 = 35,
江南春模式完成预定 = 36,
江南春模式历史单 = 37,
江南春模式确定单驳回 = 38,
}
/// <summary>
/// 江南春流程状态
/// </summary>
public enum EnumAuditorJncStatus
{
全部 = 0,
// ---- 江南春流程
/// <summary>
/// 销售员保存单
/// </summary>
暂订单 = 20,
/// <summary>
/// 业务员已提交申请审核
/// </summary>
审核单申请 = 21,
/// <summary>
/// 预定部已审核通过
/// </summary>
审核单预定部 = 22,
/// <summary>
/// 销售经理已审核通过
/// </summary>
审核单销售经理 = 23,
/// <summary>
/// 财务经理已审核通过
/// </summary>
审核单财务经理 = 24,
/// <summary>
/// 财务总监已审核通过
/// </summary>
审核单财务总监 = 25,
/// <summary>
/// 总经理已审核通过
/// </summary>
确定单 = 26,
/// <summary>
/// 销售员已确定完成,已群发,自动抄送
/// </summary>
完成单 = 27,
/// <summary>
/// 审核被驳回的单子
/// </summary>
驳回单 = 30,
/// <summary>
/// 预约被取消的单子
/// </summary>
取消单 = 31,
/// <summary>
/// 订单占用资源时,原来的暂定单被归档
/// </summary>
归档暂定单 = 32,
/// <summary>
/// 订单占用资源后,原来的单子被归档
/// </summary>
归档资源单 = 33,
}
public enum EnumSysCodeClass
{
/// <summary>
/// 预订类型
/// </summary>
apptremark
}
}

View File

@@ -0,0 +1,99 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Text;
namespace Appointment.Entity
{
/// <summary>
/// 预订审核记录表
/// 抄送表
/// </summary>
[Serializable]
[SugarTable("appt_audit_log")]
public class ApptAuditLog
{
/// <summary>
/// 递增主键
/// </summary>
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
public int Id { get; set; }
/// <summary>
/// 类型:1-审核,2-抄送,3-消息回复
/// </summary>
public int Type { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime CreateTime { get; set; }
/// <summary>
/// 审核人员/抄送接收人/回复操作人
/// </summary>
public string UserId { get; set; }
/// <summary>
/// 所属预订主单
/// 消息回复可为0
/// </summary>
[SugarColumn(ColumnName = "appt_id")]
public int ApptId { get; set; }
/// <summary>
/// 审核状态(不适用抄送) :0-驳回,1-审核通过,2-转审批,3-抄送,10-江南春模式销售员重新提交,
/// </summary>
/// <remarks>
/// 2021-5-17 自动 手动抄送都改为3,以前
/// 2021-10-9 新的江南春驳回状态为30
/// 为消息回复类型时 数据为0
/// </remarks>
[SugarColumn(ColumnName = "auditor_status")]
public int AuditorStatus { get; set; }
/// <summary>
/// 审核备注
/// </summary>
public string Remark { get; set; }
/// <summary>
/// 图片
/// </summary>
public string Pic0 { get; set; }
/// <summary>
/// 图片
/// </summary>
public string Pic1 { get; set; }
/// <summary>
/// 图片
/// </summary>
public string Pic2 { get; set; }
/// <summary>
/// 图片
/// </summary>
public string Pic3 { get; set; }
/// <summary>
/// 图片
/// </summary>
public string Pic4 { get; set; }
/// <summary>
/// 抄送发起人
/// </summary>
public string Source { get; set; }
/// <summary>
/// 被手工回复的父结点
/// </summary>
public int PId { get; set; }
}
}

View File

@@ -0,0 +1,59 @@
using Appointment.Entity.ValidateAttribute;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Text;
namespace Appointment.Entity
{
/// <summary>
/// 预订审核结构
/// </summary>
[Serializable]
[SugarTable("appt_auditor")]
public class ApptAuditor
{
/// <summary>
/// 递增主键
/// </summary>
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
public int Id { get; set; }
/// <summary>
/// 审批类型[apptType.id]
/// </summary>
[SugarColumn(ColumnName = "Appt_type_id")]
public int ApptTypeId { get; set; }
/// <summary>
/// 角色代码[uc_groupRes.op_group]
/// </summary>
[StringLength(50, MinLength = 2, ErrorMessage = "角色代码必须为2~50个字符")]
[SugarColumn(ColumnName = "op_group")]
public string OpGroup { get; set; }
/// <summary>
/// 角色名称[uc_groupRes.descript]
/// </summary>
[StringLength(50, MinLength = 2, ErrorMessage = "角色名称必须为2~50个字符")]
[SugarColumn(ColumnName = "op_descript")]
public string OpDescript { get; set; }
/// <summary>
/// 所属父级:0-首审,
/// </summary>
[SugarColumn(ColumnName = "pid")]
public int Pid { get; set; }
/// <summary>
/// 是否支持转审:0-不支持,1-支持(当转审之后,不再回到审批流程)
/// </summary>
public int Custom { get; set; }
/// <summary>
/// 子结点
/// </summary>
[SugarColumn(IsIgnore = true)]
public ApptAuditor Child { get; set; }
}
}

View File

@@ -0,0 +1,99 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Text;
namespace Appointment.Entity
{
/// <summary>
/// 餐饮预订明细实体
/// </summary>
[Serializable]
[SugarTable("appt_catering")]
public class ApptCatering
{
/// <summary>
/// 自增主键
/// </summary>
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
public int? Id { get; set; }
/// <summary>
/// guid
/// </summary>
/// <remarks>
/// 同一个订单的的(暂订单、确认单)GUID相同
/// </remarks>
public string Guid { get; set; }
/// <summary>
/// 所属预订主单
/// </summary>
[SugarColumn(ColumnName = "appt_id")]
public int? ApptId { get; set; }
/// <summary>
/// 餐饮入场日期
/// </summary>
[SugarColumn(ColumnName = "catering_time")]
public DateTime CateringTime { get; set; }
/// <summary>
/// 场次 如上午、下午、晚上存储结果为"1,2,3",早为“1”
/// </summary>
public string Groups { get; set; }
/// <summary>
/// 餐厅名称
/// </summary>
/// <remarks>
/// 手输名称
/// </remarks>
[SugarColumn(ColumnName = "catering_room")]
public string CateringRoom { get; set; }
/// <summary>
/// 用餐地点
/// </summary>
[SugarColumn(ColumnName = "catering_code")]
public string CateringCode { get; set; }
/// <summary>
/// 用餐类型 0-桌数,1-人数
/// </summary>
[SugarColumn(ColumnName = "catering_type")]
public int CateringType { get; set; }
/// <summary>
/// 桌数或人数数量
/// </summary>
[SugarColumn(ColumnName = "catering_num")]
public int CateringNum { get; set; }
/// <summary>
/// 每桌或每人单价
/// </summary>
[SugarColumn(ColumnName = "catering_price")]
public decimal CateringPrice { get; set; }
/// <summary>
/// 餐饮-桌型
/// </summary>
[SugarColumn(ColumnName = "catering_table")]
public string CateringTable { get; set; }
/// <summary>
/// 酒水
/// </summary>
public string Wine { get; set; }
/// <summary>
/// 备注
/// </summary>
public string Remark { get; set; }
}
}

View File

@@ -0,0 +1,57 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Text;
namespace Appointment.Entity
{
/// <summary>
/// 预订日志表实体
/// </summary>
[Serializable]
[SugarTable("appt_log")]
public class ApptLog
{
/// <summary>
/// 自增主键
/// </summary>
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
public int Id { get; set; }
/// <summary>
/// 数据表
/// </summary>
public string TableName { get; set; }
/// <summary>
/// 表主键值
/// </summary>
public string KeyId { get; set; }
/// <summary>
/// 原始数据
/// </summary>
public string OldData { get; set; }
/// <summary>
/// 新数据
/// </summary>
public string NewData { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime CreateTime { get; set; }
/// <summary>
/// 操作人
/// </summary>
public string UserId { get; set; }
/// <summary>
/// 用户类型:0-普通用户,1-管理人员
/// </summary>
public int SystemUser { get; set; }
}
}

View File

@@ -0,0 +1,97 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Text;
namespace Appointment.Entity
{
/// <summary>
/// 会议室预订明细实体
/// </summary>
[Serializable]
[SugarTable("appt_meeting")]
public class ApptMeeting
{
/// <summary>
/// 自增主键
/// </summary>
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
public int? Id { get; set; }
/// <summary>
/// guid
/// </summary>
/// <remarks>
/// 同一个订单的的(暂订单、确认单)GUID相同
/// </remarks>
public string Guid { get; set; }
/// <summary>
/// 所属预订主单
/// </summary>
[SugarColumn(ColumnName = "appt_id")]
public int? ApptId { get; set; }
/// <summary>
/// 会议入场时间
/// </summary>
[SugarColumn(ColumnName = "meeting_time")]
public DateTime MeetingTime { get; set; }
/// <summary>
/// 场次,如上午、下午、晚上存储结果为"1,2,3",早为“1”
/// </summary>
public string Groups { get; set; }
/// <summary>
/// 会议厅名称(手输或根据类型选择自动填入),手输不占用资源
/// </summary>
[SugarColumn(ColumnName = "meeting_room")]
public string MeetingRoom { get; set; }
/// <summary>
/// 会议厅代码(手输类型时为空,不占用资源)
/// </summary>
[SugarColumn(ColumnName = "meeting_code")]
public string MeetingCode { get; set; }
/// <summary>
/// 会议室主席台位
/// </summary>
[SugarColumn(ColumnName = "meeting_rostrum")]
public string MeetingRostrum { get; set; }
/// <summary>
/// 会议室-台型(课桌)
/// </summary>
[SugarColumn(ColumnName = "meeting_shape")]
public string MeetingShape { get; set; }
/// <summary>
/// 人数:0-待定,
/// </summary>
[SugarColumn(ColumnName = "meeting_num")]
public int MeetingNum { get; set; }
/// <summary>
/// 单价
/// </summary>
[SugarColumn(ColumnName = "meeting_price")]
public decimal MeetingPrice { get; set; }
/// <summary>
/// 横幅内容
/// </summary>
[SugarColumn(ColumnName = "meeting_title")]
public string MeetingTitle { get; set; }
/// <summary>
/// 议厅备注
/// </summary>
public string Remark { get; set; }
}
}

View File

@@ -0,0 +1,48 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Text;
namespace Appointment.Entity
{
/// <summary>
/// 预订备注扩展表
/// </summary>
[Serializable]
[SugarTable("appt_remark")]
public class ApptRemark
{
/// <summary>
/// 递增主键
/// </summary>
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
public int? Id { get; set; }
/// <summary>
/// guid
/// </summary>
/// <remarks>
/// 同一个订单的的(暂订单、确认单)GUID相同
/// </remarks>
public string Guid { get; set; }
/// <summary>
/// 预订主键
/// </summary>
/// <remarks>
/// appt_summary.id
/// </remarks>
[SugarColumn(ColumnName = "appt_id")]
public int? ApptId { get; set; }
/// <summary>
/// 备注分类
/// </summary>
public string Title { get; set; }
/// <summary>
/// 备注内容
/// </summary>
public string Info { get; set; }
}
}

View File

@@ -0,0 +1,79 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Text;
namespace Appointment.Entity
{
/// <summary>
/// 操作展示日志
/// </summary>
[Serializable]
[SugarTable("appt_remark_log")]
public class ApptRemarkLog
{
/// <summary>
/// 递增主键
/// </summary>
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
public int Id { get; set; }
/// <summary>
/// 操作时间
/// </summary>
public DateTime CreateTime { get; set; }
/// <summary>
/// 所属父级
/// </summary>
/// <remarks>
/// 0-默认,
/// 其他-对操作备注进行追加备注
/// </remarks>
public int Pid { get; set; }
/// <summary>
/// 预订单主键
/// </summary>
/// <remarks>
/// appt_summary.id
/// </remarks>
[SugarColumn(ColumnName = "appt_id")]
public int ApptId { get; set; }
/// <summary>
/// 操作人账号
/// </summary>
public string Account { get; set; }
/// <summary>
/// 操作人姓名
/// </summary>
public string UserName { get; set; }
/// <summary>
/// 提交前状态
/// </summary>
[SugarColumn(ColumnName = "old_status")]
public int OldStatus { get; set; }
/// <summary>
/// 提交后状态
/// </summary>
[SugarColumn(ColumnName = "new_status")]
public int NewStatus { get; set; }
/// <summary>
/// 备注内容
/// </summary>
public string Remark { get; set; }
/// <summary>
/// 变更的数据
/// </summary>
[SugarColumn(ColumnName = "update_data")]
public string UpdateData { get; set; }
}
}

View File

@@ -0,0 +1,104 @@
using Appointment.Entity.ValidateAttribute;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Text;
namespace Appointment.Entity
{
/// <summary>
/// 客房预订明细表实体
/// </summary>
[Serializable]
[SugarTable("appt_room")]
public class ApptRoom
{
/// <summary>
/// 自增主键
/// </summary>
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
public int? Id { get; set; }
/// <summary>
/// guid
/// </summary>
/// <remarks>
/// 同一个订单的的(暂订单、确认单)GUID相同
/// </remarks>
public string Guid { get; set; }
/// <summary>
/// 所属预订主单
/// </summary>
[SugarColumn(ColumnName = "appt_id")]
public int? ApptId { get; set; }
/// <summary>
/// 抵达时间
/// </summary>
[SugarColumn(ColumnName = "room_in")]
public DateTime RoomIn { get; set; }
/// <summary>
/// 离开时间
/// </summary>
[SugarColumn(ColumnName = "room_out")]
public DateTime RoomOut { get; set; }
/// <summary>
/// 房型(手输或根据类型选择自动填入),手输不占用资源
/// </summary>
[StringLength(30, MinLength = 2, ErrorMessage = "房型必须为2~30个字符")]
[SugarColumn(ColumnName = "room_group")]
public string RoomGroup { get; set; }
/// <summary>
/// 选择房间类型(手输类型时为空,不占用资源)
/// </summary>
[SugarColumn(ColumnName = "room_code")]
public string RoomCode { get; set; }
/// <summary>
/// 房间数量
/// </summary>
/// <remarks>
/// 不占用资源的可以为0
/// </remarks>
[SugarColumn(ColumnName = "room_num")]
public int RoomNum { get; set; }
/// <summary>
/// 房间单价
/// </summary>
[SugarColumn(ColumnName = "room_price")]
public decimal RoomPrice { get; set; }
/// <summary>
/// 总早餐数:0-无早餐,
/// </summary>
[SugarColumn(ColumnName = "breakfast_num")]
public int BreakfastNum { get; set; }
/// <summary>
/// 长途电话:0-关,1-开,
/// </summary>
[SugarColumn(ColumnName = "long_distance")]
public int LongDistance { get; set; }
/// <summary>
/// 客房吧:0-关,1-开,
/// </summary>
[SugarColumn(ColumnName = "min_shop")]
public int MinShop { get; set; }
/// <summary>
/// 客房备注
/// </summary>
[SugarColumn(ColumnName = "remark")]
public string RoomRemark { get; set; }
}
}

View File

@@ -0,0 +1,77 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Text;
namespace Appointment.Entity
{
/// <summary>
/// 温泉预订明细实体
/// </summary>
[Serializable]
[SugarTable("appt_spring")]
public class ApptSpring
{
/// <summary>
/// 自增主键
/// </summary>
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
public int? Id { get; set; }
/// <summary>
/// guid
/// </summary>
/// <remarks>
/// 同一个订单的的(暂订单、确认单)GUID相同
/// </remarks>
public string Guid { get; set; }
/// <summary>
/// 所属预订主单
/// </summary>
[SugarColumn(ColumnName = "appt_id")]
public int? ApptId { get; set; }
/// <summary>
/// 温泉_日期
/// </summary>
[SugarColumn(ColumnName = "spring_time")]
public DateTime SpringTime { get; set; }
/// <summary>
/// 总人数(自动计算):0-待定
/// </summary>
[SugarColumn(ColumnName = "people_num")]
public int PeopleNum { get; set; }
/// <summary>
/// spring_men
/// </summary>
[SugarColumn(ColumnName = "spring_men")]
public int SpringMen { get; set; }
/// <summary>
/// 女性人数:0-待定
/// </summary>
[SugarColumn(ColumnName = "spring_women")]
public int SpringWomen { get; set; }
/// <summary>
/// 二次消费
/// </summary>
public string Consume { get; set; }
/// <summary>
/// 单价
/// </summary>
[SugarColumn(ColumnName = "spring_price")]
public decimal SpringPrice { get; set; }
/// <summary>
/// 备注
/// </summary>
public string Remark { get; set; }
}
}

View File

@@ -0,0 +1,239 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Text;
namespace Appointment.Entity
{
/// <summary>
/// 预订主单
/// </summary>
[Serializable]
[SugarTable("appt_summary")]
public class ApptSummary
{
/// <summary>
/// 递增主键
/// </summary>
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
public int? Id { get; set; }
/// <summary>
/// guid
/// </summary>
/// <remarks>
/// 同一个订单的的(暂订单、确认单)GUID相同
/// </remarks>
public string Guid { get; set; }
/// <summary>
/// 所属用户
/// </summary>
public string UserId { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime? CreateTime { get; set; }
/// <summary>
/// 预订类型[appt_type.id]
/// 1- 默认模式,
/// 2- 江南春模式,
/// </summary>
[SugarColumn(ColumnName = "appt_typeid")]
public int? ApptTypeId { get; set; }
/// <summary>
/// 审核状态:见EnumAuditorStatus
/// </summary>
[SugarColumn(ColumnName = "auditor_status")]
public int? AuditorStatus { get; set; }
/// <summary>
/// 待审核角色id:0-无 appt_type
/// </summary>
/// <remarks>
/// 江南春模式=0
/// </remarks>
[SugarColumn(ColumnName = "auditor_id")]
public int? AuditorId { get; set; }
/// <summary>
/// 转审账号(当有转审时,将AuditorId=0)
/// </summary>
[SugarColumn(ColumnName = "transfer_audit")]
public string TransferAudit { get; set; }
/// <summary>
/// 订单类型预留字段
/// </summary>
[SugarColumn(ColumnName = "appt_type")]
public int? ApptType { get; set; }
/// <summary>
/// 编号(生成确认单时产生)
/// </summary>
public string No { get; set; }
/// <summary>
/// 组织单位
/// </summary>
[SugarColumn(ColumnName = "buyer_name")]
public string BuyerName { get; set; }
/// <summary>
/// 公司地址
/// </summary>
[SugarColumn(ColumnName = "buyer_address")]
public string BuyerAddress { get; set; }
/// <summary>
/// 订单名称
/// </summary>
[SugarColumn(ColumnName = "buyer_title")]
public string BuyerTitle { get; set; }
/// <summary>
/// 组织负责人
/// </summary>
[SugarColumn(ColumnName = "leader_name")]
public string LeaderName { get; set; }
/// <summary>
/// 组织负责人电话
/// </summary>
[SugarColumn(ColumnName = "leader_mobile")]
public string LeaderMobile { get; set; }
/// <summary>
/// 会议组房号
/// </summary>
[SugarColumn(ColumnName = "leader_room")]
public string LeaderRoom { get; set; }
/// <summary>
/// 营销部跟单人(发起人)
/// </summary>
[SugarColumn(ColumnName = "sale_name")]
public string SaleName { get; set; }
/// <summary>
/// 营销部跟单电话
/// </summary>
[SugarColumn(ColumnName = "sale_mobile")]
public string SaleMobile { get; set; }
/// <summary>
/// 营销总监 手工写
/// </summary>
[SugarColumn(ColumnName = "sale_director")]
public string SaleDirector { get; set; }
/// <summary>
/// 客房总备注
/// </summary>
[SugarColumn(ColumnName = "room_remark")]
public string RoomRemark { get; set; }
/// <summary>
/// 会议室总备注
/// </summary>
[SugarColumn(ColumnName = "meeting_remark")]
public string MeetingRemark { get; set; }
/// <summary>
/// 餐饮总备注
/// </summary>
[SugarColumn(ColumnName = "catering_remark")]
public string CateringRemark { get; set; }
/// <summary>
/// 温泉总备注
/// </summary>
[SugarColumn(ColumnName = "spring_remark")]
public string SpringRemark { get; set; }
/// <summary>
/// 编辑之前的主键
/// </summary>
public int? Pid { get; set; }
/// <summary>
/// 团队编号
/// </summary>
/// <remarks>
/// 2021-6-16 江南春模式有效
/// </remarks>
[SugarColumn(ColumnName = "grp_no")]
public string GrpNo { get; set; }
/// <summary>
/// 预定信息最小开始日期
/// </summary>
[SugarColumn(ColumnName = "start_day")]
public DateTime StartDay { get; set; }
/// <summary>
/// 预定信息最大结果日期
/// </summary>
[SugarColumn(ColumnName = "end_day")]
public DateTime EndDay { get; set; }
/// <summary>
/// 申请OA单状态:0-未占用资源,1-已占用资源
/// </summary>
[SugarColumn(ColumnName = "apply_oa")]
public int ApplyOA { get; set; }
/// <summary>
/// 为销售员再次编辑提交的时间,文件对比中使用该时间,显示什么时候改了内容
/// </summary>
[SugarColumn(ColumnName = "alter_time")]
public DateTime AlterTime { get; set; }
// 关联表信息
/// <summary>
/// 客房预订明细列表
/// </summary>
[SqlSugar.SugarColumn(IsIgnore = true)]
public List<ApptRoom> ApptRoomList { get; set; }
/// <summary>
/// 会议室预订明细列表
/// </summary>
[SqlSugar.SugarColumn(IsIgnore = true)]
public List<ApptMeeting> ApptMeetingList { get; set; }
/// <summary>
/// 餐饮预订明细列表
/// </summary>
[SqlSugar.SugarColumn(IsIgnore = true)]
public List<ApptCatering> ApptCateringList { get; set; }
/// <summary>
/// 温泉预订明细列表
/// </summary>
[SqlSugar.SugarColumn(IsIgnore = true)]
public List<ApptSpring> ApptSpringList { get; set; }
/// <summary>
/// 自定义备注
/// </summary>
[SqlSugar.SugarColumn(IsIgnore = true)]
public List<ApptRemark> ApptRemarks { get; set; }
}
}

View File

@@ -0,0 +1,43 @@
using Appointment.Entity.ValidateAttribute;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Text;
namespace Appointment.Entity
{
/// <summary>
/// 审核类型
/// </summary>
/// <remarks>
/// 建议:
/// 根据ApptName(预订类型名称) 判断审核模式
///
/// ApptName:
/// DefaultAuditProcess - 标准审核流程,最后一级审核通过后,占用资料,实现抄送,支持转审批(跳转审核流程);
/// JNCcustom - 江南春模式,
/// </remarks>
[Serializable]
[SugarTable("appt_type")]
public class ApptType
{
/// <summary>
/// 递增主键
/// </summary>
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
public int Id { get; set; }
/// <summary>
/// 预订类型名称
/// </summary>
[StringLength(30, MinLength = 2, ErrorMessage = "预订类型名称必须为2~30个字符")]
[SugarColumn(ColumnName = "appt_name")]
public string ApptName { get; set; }
/// <summary>
/// 备注说明
/// </summary>
[StringMaxLength(200, ErrorMessage = "备注说明最大长度200个字符")]
public string Remark { get; set; }
}
}

View File

@@ -0,0 +1,264 @@
using Appointment.Entity.ValidateAttribute;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Text;
namespace Appointment.Entity
{
/// <summary>
/// 团队表实体
/// </summary>
[Serializable]
[SugarTable("grpinfo")]
public class GrpInfo
{
/// <summary>
/// 团队账号
/// </summary>
[SugarColumn(IsPrimaryKey = true)]
public string Accnt { get; set; }
/// <summary>
/// 状态:R-预订,I-在住
/// </summary>
public string Sta { get; set; }
/// <summary>
/// 团名
/// </summary>
public string Gname { get; set; }
/// <summary>
/// 团名(英文)首字母自动生成
/// </summary>
public string Ename { get; set; }
/// <summary>
/// 代号
/// </summary>
public string Code { get; set; }
/// <summary>
/// 预订号
/// </summary>
public string Resno { get; set; }
/// <summary>
///
/// </summary>
/// <remarks>
/// 默认与Accnt一致
/// </remarks>
public string Grpno { get; set; }
/// <summary>
/// 来源
/// </summary>
public string Src { get; set; }
/// <summary>
/// 市场码
/// </summary>
public string Mkt { get; set; }
/// <summary>
/// 抵达时间
/// </summary>
public DateTime? Arr { get; set; }
/// <summary>
/// 离开时间
/// </summary>
public DateTime? Dep { get; set; }
/// <summary>
/// 国家
/// </summary>
/// <remarks>
/// 默认:CN
/// </remarks>
public string Country { get; set; }
/// <summary>
/// 籍贯编号
/// </summary>
/// <remarks>
/// 默认:null
/// </remarks>
public string Navite { get; set; }
/// <summary>
/// 地址
/// </summary>
public string Address { get; set; }
/// <summary>
/// 领队
/// </summary>
public string Leader { get; set; }
/// <summary>
/// 领队电话
/// </summary>
public string Phone { get; set; }
/// <summary>
/// 人数
/// </summary>
public int? Guests { get; set; }
/// <summary>
/// 房数
/// </summary>
public int? Rooms { get; set; }
/// <summary>
/// 单位号
/// </summary>
public string Cropsno { get; set; }
/// <summary>
/// 单位名称
/// </summary>
public string Cropname { get; set; }
/// <summary>
/// 付款码
/// </summary>
/// <remarks>
/// 现金:9001
/// </remarks>
public string Paycode { get; set; }
/// <summary>
/// 备注说明
/// </summary>
public string Ramark { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime? Sysdate { get; set; }
/// <summary>
/// 更新次数
/// </summary>
[SugarColumn(ColumnName = "log_num")]
public int? LogNum { get; set; }
/// <summary>
/// 操作账号
/// </summary>
[SugarColumn(ColumnName = "log_id")]
public string LogId { get; set; }
/// <summary>
///
/// </summary>
/// <remarks>
/// 默认1
/// </remarks>
[SugarColumn(ColumnName = "log_shift")]
public char LogShift { get; set; }
/// <summary>
/// 操作IP
/// </summary>
[SugarColumn(ColumnName = "log_ip")]
public string LogIp { get; set; }
/// <summary>
/// 最后操作时间
/// </summary>
/// <remarks>
/// 默认为创建时间
/// </remarks>
[SugarColumn(ColumnName = "log_date")]
public DateTime? LogDate { get; set; }
/// <summary>
///
/// </summary>
/// <remarks>
/// 默认:"团队"
/// </remarks>
public string Payroom { get; set; }
/// <summary>
/// 主账房
/// </summary>
public string Payaccnt { get; set; }
/// <summary>
/// IVP
/// </summary>
/// <remarks>
/// 默认0
/// </remarks>
public string Vip { get; set; }
/// <summary>
///
/// </summary>
/// <remarks>
/// 默认0
/// </remarks>
public string Sec { get; set; }
/// <summary>
/// 特殊要求代码
/// </summary>
public string Special { get; set; }
/// <summary>
/// 应收账号
/// </summary>
public string Araccnt { get; set; }
/// <summary>
/// 销售员编号
/// </summary>
public string Saleid { get; set; }
/// <summary>
/// 总消费
/// </summary>
public decimal? Charge { get; set; }
/// <summary>
///
/// </summary>
public decimal? Credit { get; set; }
/// <summary>
/// 余额,合计余额
/// </summary>
public decimal? Balance { get; set; }
/// <summary>
///
/// </summary>
public decimal? Ybalance { get; set; }
/// <summary>
///
/// </summary>
public decimal? Accntnumb { get; set; }
/// <summary>
/// 允许POS账转入:T/F
/// </summary>
public char Flag { get; set; }
/// <summary>
/// 房价码
/// </summary>
public string Rmcode { get; set; }
/// <summary>
/// package码
/// </summary>
public string Rmpackage { get; set; }
}
}

View File

@@ -0,0 +1,59 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Text;
namespace Appointment.Entity
{
/// <summary>
/// 入住客户表
/// </summary>
[SugarTable("mstinfo")]
public class Mstinfo
{
/// <summary>
/// 入住信息的账号
/// </summary>
[SugarColumn(IsPrimaryKey = true)]
public string Accnt { get; set; }
/// <summary>
/// 入住状态:R-预订, I-在住, O-结账, D-待删, H-历史,C-取消,
/// </summary>
public string Sta { get; set; }
/// <summary>
/// 系统时间
/// </summary>
public string SysDate { get; set; }
/// <summary>
/// 宾客姓名
/// </summary>
public string Gname { get; set; }
/// <summary>
/// 操作管理员账号
/// </summary>
[SugarColumn(ColumnName = "log_id")]
public string LogId { get; set; }
/// <summary>
/// 操作管理员名称
/// </summary>
[SugarColumn(ColumnName = "log_name")]
public string LogName { get; set; }
/// <summary>
/// 班别
/// </summary>
[SugarColumn(ColumnName = "log_shift")]
public string LogShift { get; set; }
/// <summary>
/// 日志操作IP
/// </summary>
[SugarColumn(ColumnName = "log_ip")]
public string LogIp { get; set; }
}
}

View File

@@ -0,0 +1,70 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Text;
namespace Appointment.Entity
{
/// <summary>
/// 取消预定单是,录入的取消信息
/// </summary>
[SugarTable("rcancel_log")]
public class RcancelLog
{
/// <summary>
/// 入住信息的账号
/// </summary>
[SugarColumn(IsPrimaryKey = true)]
public string Accnt { get; set; }
/// <summary>
/// 订单操作次数,默认1
/// </summary>
public int Number { get; set; }
/// <summary>
/// 宾客姓名
/// </summary>
public string Gname { get; set; }
/// <summary>
/// 操作备注
/// </summary>
public string Reason { get; set; }
/// <summary>
/// 操作管理员账号
/// </summary>
[SugarColumn(ColumnName = "log_id")]
public string LogId { get; set; }
/// <summary>
/// 操作管理员名称
/// </summary>
[SugarColumn(ColumnName = "log_name")]
public string LogName { get; set; }
/// <summary>
/// 班别
/// </summary>
[SugarColumn(ColumnName = "log_shift")]
public string LogShift { get; set; }
/// <summary>
/// 创建日志时间
/// </summary>
[SugarColumn(ColumnName = "log_date")]
public DateTime LogDate { get; set; }
/// <summary>
/// 日志操作IP
/// </summary>
[SugarColumn(ColumnName = "log_ip")]
public string LogIp { get; set; }
/// <summary>
/// 系统时间
/// </summary>
public string SysDate { get; set; }
}
}

View File

@@ -0,0 +1,52 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Text;
namespace Appointment.Entity
{
/// <summary>
/// 会议厅
/// </summary>
[Serializable]
[SugarTable("res_code")]
public class ResCode
{
/// <summary>
/// 会议厅代码
/// </summary>
public string Code { get; set; }
/// <summary>
/// 代码:A-会议室,B-会议室设备,C-汽车,D-自行车.
/// </summary>
public string Sort { get; set; }
/// <summary>
/// 厅名称
/// </summary>
public string Descript1 { get; set; }
public string Descript2 { get; set; }
/// <summary>
/// 状态:T-有效,
/// </summary>
public string Sta { get; set; }
public int Numbers { get; set; }
public string Pccode { get; set; }
/// <summary>
/// 价格
/// </summary>
public decimal Price { get; set; }
public int Period { get; set; }
public string Remark { get; set; }
public int Sequence { get; set; }
}
}

View File

@@ -0,0 +1,117 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Text;
namespace Appointment.Entity
{
/// <summary>
/// 会议室流水
/// </summary>
[Serializable]
[SugarTable("res_info")]
public class ResInfo
{
/// <summary>
/// 会议室流水号
/// </summary>
public string No { get; set; }
/// <summary>
/// 状态:R-预订
/// </summary>
public string Sta { get; set; }
/// <summary>
/// 订单号
/// </summary>
public string Accnt { get; set; }
public string Accnt1 { get; set; }
/// <summary>
/// 会议室代码[res_code.code]
/// </summary>
public string Rescode { get; set; }
/// <summary>
/// 数量
/// </summary>
public int Numbers { get; set; }
public DateTime Bdate { get; set; }
/// <summary>
/// 开始日期
/// </summary>
public DateTime? Stime { get; set; }
/// <summary>
/// 结束日期
/// </summary>
public DateTime? Etime { get; set; }
/// <summary>
/// 开始场次
/// </summary>
public int Sfield { get; set; }
/// <summary>
/// 结束场次
/// </summary>
public int Efield { get; set; }
/// <summary>
/// 开始时间
/// </summary>
public string Sfieldtime { get; set; }
/// <summary>
/// 结束时间
/// </summary>
public string Efieldtime { get; set; }
/// <summary>
/// 会场备注
/// </summary>
public string Summary { get; set; }
/// <summary>
/// 价格
/// </summary>
public decimal Price0 { get; set; }
/// <summary>
/// 价格
/// </summary>
public decimal Price { get; set; }
/// <summary>
/// 是否入账:T/F
/// </summary>
public string Paid { get; set; }
/// <summary>
/// 操作账号
/// </summary>
public string Resby { get; set; }
/// <summary>
/// 操作人员姓名
/// </summary>
public string Resbyname { get; set; }
/// <summary>
/// 操作时间
/// </summary>
public DateTime? Reserved { get; set; }
public string Cby { get; set; }
public string Cbyname { get; set; }
public DateTime? Cbytime { get; set; }
public int Logmark { get; set; }
}
}

View File

@@ -0,0 +1,116 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Text;
namespace Appointment.Entity
{
/// <summary>
/// 房类实体(部分)
/// </summary>
[Serializable]
[SugarTable("room_type")]
public class RoomType
{
/// <summary>
/// 房类代码
/// </summary>
[SugarColumn(IsPrimaryKey = true)]
public string Id { get; set; }
/// <summary>
/// 房类中文描述(中文名称)
/// </summary>
public string Descript1 { get; set; }
/// <summary>
/// 房类英文描述
/// </summary>
public string Descript2 { get; set; }
/// <summary>
/// 门市价
/// </summary>
public decimal Price0 { get; set; }
/// <summary>
/// 优惠价
/// </summary>
public decimal Price { get; set; }
/// <summary>
/// 超预订
/// </summary>
public int Exceed { get; set; }
/// <summary>
/// 总房数
/// </summary>
public int Total { get; set; }
/// <summary>
/// 钟点房起步时间
/// </summary>
[SugarColumn(ColumnName = "dayuse_base")]
public decimal? DayuseBase { get; set; }
/// <summary>
/// 钟点房基本价
/// </summary>
[SugarColumn(ColumnName = "base_price")]
public decimal? BasePrice { get; set; }
/// <summary>
/// 每小时单价
/// </summary>
public decimal? Hourly { get; set; }
/// <summary>
/// 钟点房最长时间
/// </summary>
[SugarColumn(ColumnName = "dayuse_top")]
public decimal? DayuseTop { get; set; }
/// <summary>
/// 钟点房选项(可手动录入):T/F
/// </summary>
[SugarColumn(ColumnName = "dayuse_flag")]
public string DayuseFlag { get; set; }
/// <summary>
/// 排序号(升序)
/// </summary>
public int? Sequence { get; set; }
/// <summary>
/// 大房类
/// </summary>
public string Stype { get; set; }
/// <summary>
/// 客房打扫工作量
/// </summary>
public decimal? Mone1 { get; set; }
/// <summary>
/// 中央预定最大可用房数
/// </summary>
public decimal? Mone2 { get; set; }
public string Char1 { get; set; }
/// <summary>
/// 房类描述
/// </summary>
public string Char2 { get; set; }
public DateTime? Date1 { get; set; }
public DateTime? Date2 { get; set; }
// <summary>
// x7不存在
// </summary>
//public string Defpackage { get; set; }
}
}

View File

@@ -0,0 +1,34 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Text;
namespace Appointment.Entity
{
/// <summary>
/// 销售人员表实体
/// </summary>
[Serializable]
public class Saleid
{
/// <summary>
/// 自增主键
/// </summary>
public string Id { get; set; }
/// <summary>
/// 姓名
/// </summary>
public string Name { get; set; }
/// <summary>
/// 其他描述
/// </summary>
public string Descript { get; set; }
/// <summary>
/// 对应操作员,注意:uc_login也添加了Saleid,两种对应方式,有点重复了
/// </summary>
public string Op_id { get; set; }
}
}

View File

@@ -0,0 +1,35 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Text;
namespace Appointment.Entity
{
/// <summary>
/// 综合数据
/// </summary>
[Serializable]
[SugarTable("sys_code")]
public class SysCode
{
/// <summary>
/// 类型
/// </summary>
public string Class { get; set; }
/// <summary>
/// 编号
/// </summary>
public string Id { get; set; }
public string Descript1 { get; set; }
public string Descript2 { get; set; }
public string Remark { get; set; }
public string System { get; set; }
public int Sequence { get; set; }
}
}

View File

@@ -0,0 +1,33 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Text;
namespace Appointment.Entity
{
/// <summary>
/// 用户组别
/// </summary>
[Serializable]
[SugarTable("uc_group")]
public class UcGroup
{
/// <summary>
/// 代码
/// </summary>
[SugarColumn(ColumnName = "op_group")]
public string OpGroup { get; set; }
/// <summary>
/// 名称
/// </summary>
[SugarColumn(ColumnName = "descript")]
public string Descript { get; set; }
/// <summary>
/// 描述
/// </summary>
[SugarColumn(ColumnName = "op_func")]
public string OpFunc { get; set; }
}
}

View File

@@ -0,0 +1,153 @@
using Appointment.Entity.ValidateAttribute;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Text;
namespace Appointment.Entity
{
/// <summary>
/// 工作人员
/// </summary>
[Serializable]
[SugarTable("uc_login")]
public class UcLogin
{
/// <summary>
/// 账号
/// </summary>
[SugarColumn(IsPrimaryKey = true, ColumnName = "op_id")]
public string OpId { get; set; }
/// <summary>
/// 姓名
/// </summary>
[SugarColumn(IsPrimaryKey = true, ColumnName = "op_name")]
public string OpName { get; set; }
/// <summary>
/// 密码
/// </summary>
public string Password { get; set; }
/// <summary>
/// 组别
/// </summary>
[SugarColumn(IsPrimaryKey = true, ColumnName = "op_group")]
public string OpGroup { get; set; }
/// <summary>
/// 部门
/// </summary>
public string Deptno { get; set; }
/// <summary>
/// 账号锁定:T/F
/// </summary>
public string Locked { get; set; }
/// <summary>
/// 密码提示
/// </summary>
public string Question { get; set; }
/// <summary>
/// 提示答案
/// </summary>
public string Answer { get; set; }
/// <summary>
///
/// </summary>
public int X { get; set; }
/// <summary>
///
/// </summary>
public int Y { get; set; }
/// <summary>
///
/// </summary>
public int Width { get; set; }
/// <summary>
///
/// </summary>
public int Height { get; set; }
/// <summary>
///
/// </summary>
public string Winstate { get; set; }
/// <summary>
///
/// </summary>
public string Tips { get; set; }
/// <summary>
/// 登录显示邮件提示
/// </summary>
public string Mail { get; set; }
/// <summary>
///
/// </summary>
public string Font { get; set; }
/// <summary>
///
/// </summary>
public string Text { get; set; }
/// <summary>
///
/// </summary>
public string Pop { get; set; }
/// <summary>
/// 员工工号
/// </summary>
public string Errinfo { get; set; }
/// <summary>
/// 手机号
/// </summary>
public string Mobile { get; set; }
/// <summary>
/// 微信小程序openid
/// </summary>
[SugarColumn(ColumnName = "wxopenId")]
public string WxOpenId { get; set; }
/// <summary>
/// 用户所属销售员
/// </summary>
public string Saleid { get; set; }
/// <summary>
/// 授权服务号状态,用于消息推送
/// </summary>
[SugarColumn(ColumnName = "wx_service_id")]
public string WxServiceId { get; set; }
/// <summary>
/// OA是否可做为被转审人
/// </summary>
public string Appttrans { get; set; }
/// <summary>
/// OA是否可做为被抄送人
/// </summary>
public string Apptsend { get; set; }
/// <summary>
/// 部门备注自动发送以#隔离
/// </summary>
public string Autosendcond { get; set; }
}
}

View File

@@ -0,0 +1,732 @@
-- <20><>Ա<EFBFBD><D4B1>
if not exists (select 1 from syscolumns where name = 'wxopenid' and id = (select id from sysobjects where name = 'uc_login'))
ALTER TABLE uc_login add wxopenid varchar(100) null -- ΢<><CEA2>С<EFBFBD><D0A1><EFBFBD><EFBFBD>Ψһ<CEA8><D2BB><EFBFBD><EFBFBD>
;
if not exists (select 1 from syscolumns where name = 'wx_service_id' and id = (select id from sysobjects where name = 'uc_login'))
ALTER TABLE uc_login add wx_service_id varchar(100) null -- ΢<>ŷ<EFBFBD><C5B7><EFBFBD><EFBFBD><EFBFBD>Ψһ<CEA8><D2BB><EFBFBD><EFBFBD>֤
;
if not exists (select 1 from syscolumns where name = 'saleid' and id = (select id from sysobjects where name = 'uc_login'))
ALTER TABLE uc_login add saleid varchar(4) null -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>
;
if not exists (select 1 from syscolumns where name = 'appttrans' and id = (select id from sysobjects where name = 'uc_login'))
ALTER TABLE uc_login add appttrans char(1) null -- OA<4F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>
;
if not exists (select 1 from syscolumns where name = 'apptsend' and id = (select id from sysobjects where name = 'uc_login'))
ALTER TABLE uc_login add apptsend char(1) null -- OA<4F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
;
if not exists (select 1 from syscolumns where name = 'autosendcond' and id = (select id from sysobjects where name = 'uc_login'))
ALTER TABLE uc_login add autosendcond varchar(500) null -- <20>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD> <20><>#<23><><EFBFBD><EFBFBD>
;
--Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if object_id('appt_type') is null --<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϣ<EFBFBD><EFBFBD><EFBFBD>SQL<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǿ<EFBFBD><EFBFBD>Է<EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>е<EFBFBD>
CREATE TABLE appt_type( -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
[Id] [int] IDENTITY(1,1) PRIMARY key , --<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD>ֶκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>﷨<EFBFBD><EFBFBD><EFBFBD>Ӷȣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>߿ɶ<EFBFBD><EFBFBD><EFBFBD>
[appt_name] [varchar](30) NULL, -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
[remark] [varchar](200) NULL -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD>ע
)
;
if not exists (select 1 from appt_type) --<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϣ<EFBFBD><EFBFBD><EFBFBD>SQL<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǿ<EFBFBD><EFBFBD>Է<EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>е<EFBFBD>
INSERT INTO appt_type (appt_name,remark)VALUES('Ĭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>','')
;
--Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̱<EFBFBD>
if object_id('appt_auditor') is null create table appt_auditor( -- Ԥ<><D4A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
[id] [int] IDENTITY(1,1) PRIMARY key , -- <20><><EFBFBD><EFBFBD>
[appt_type_id] [int] NULL, -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
[op_group] [varchar](30) NULL, -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><>Ϊ<EFBFBD><CEAA>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>ɲ<EFBFBD><C9B2><EFBFBD>)
[op_descript] [varchar](50) NULL, -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
[pid] [int] NULL, -- (ȫ<>¿ɸ<C2BF><C9B8><EFBFBD>Ϊoper_seq)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><CBB3>[<5B>ɲ<EFBFBD><C9B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:0-<2D>ײ㣬<D7B2><E3A3AC>ϵ<EFBFBD><CFB5>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
[custom] int default(0) not null -- <20>Ƿ<EFBFBD>֧<EFBFBD><D6A7>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>0-<2D><>֧<EFBFBD><D6A7>,1-֧<><D6A7>(<28><>ת<EFBFBD><D7AA>֮<EFBFBD>󣬲<EFBFBD><F3A3ACB2>ٻص<D9BB><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
);
if not exists (select 1 from sysobjects as t join syscolumns as c on t.id=c.id where t.name='appt_auditor' and c.name='rejectid')
alter table appt_auditor add [rejectid] int default(1); -- <20><><EFBFBD>ػص<D8BB><D8B5>Ľڵ<C4BD>
--Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if object_id('appt_summary') is null
CREATE TABLE appt_summary( --Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
[id] int IDENTITY(1,1) PRIMARY KEY --<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
,[guid] nvarchar(50) not null --GUID
,[userid] nvarchar(20) NULL --<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>
,[createtime] datetime default getdate() NOT NULL --<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
,[appt_typeid] int NULL --Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[appt_type.id]<EFBFBD><EFBFBD>0-<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
,[auditor_status] int NULL --<EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬:0-<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,1-<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,2-<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,3-<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD>(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽԤ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>),4-<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
,[auditor_id] int NULL --<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫid:0-<EFBFBD><EFBFBD>
,[transfer_audit] nvarchar(50) default('')
,[appt_type] int default 0 not NULL --<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD>
,[no] nvarchar(50) NULL --<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
,[buyer_name] nvarchar(50) NULL --<EFBFBD><EFBFBD>֯<EFBFBD><EFBFBD>λ
,[buyer_address] nvarchar(200) NULL --<EFBFBD><EFBFBD>˾<EFBFBD><EFBFBD>ַ
,[buyer_title] nvarchar(100) NULL --<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
,[leader_name] nvarchar(20) NULL --<EFBFBD><EFBFBD>֯<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
,[leader_mobile] nvarchar(20) NULL --<EFBFBD><EFBFBD>֯<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵绰
,[leader_room] nvarchar(50) NULL --<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>鷿<EFBFBD><EFBFBD>
,[sale_name] nvarchar(20) NULL --Ӫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
,[sale_mobile] nvarchar(20) NULL --Ӫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>绰
,[sale_director] nvarchar(20) NULL --Ӫ<EFBFBD><EFBFBD><EFBFBD>ܼ<EFBFBD>(<EFBFBD>ֹ<EFBFBD>д)<EFBFBD><EFBFBD>
,[room_remark] nvarchar(200) NULL --<EFBFBD>ͷ<EFBFBD><EFBFBD>ܱ<EFBFBD>ע
,[meeting_remark] nvarchar(200) NULL --<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܱ<EFBFBD>ע
,[catering_remark] nvarchar(200) NULL --<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܱ<EFBFBD>ע
,[spring_remark] nvarchar(200) NULL --<EFBFBD><EFBFBD>Ȫ<EFBFBD>ܱ<EFBFBD>ע
,[pid] int default(0) not null -- <20>༭ǰ<E0BCAD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,ԭʼ<D4AD><CABC><EFBFBD>ݴ<EFBFBD>appt_log<6F><67><EFBFBD>ж<EFBFBD>ȡ
,[grp_no] nvarchar(100) null -- <20>Ŷӱ<C5B6><D3B1><EFBFBD>
,[start_day] datetime null -- Ԥ<><D4A4><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>С<EFBFBD><D0A1>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
,[end_day] datetime null -- Ԥ<><D4A4><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
,[apply_oa] int default(0) -- <20><><EFBFBD><EFBFBD>OA<4F><41>״̬:0-δռ<CEB4><D5BC><EFBFBD><EFBFBD>Դ,1-ռ<><D5BC><EFBFBD><EFBFBD>Դ,2-<2D><><EFBFBD><EFBFBD>OA<4F><41>
,[alter_time] datetime not null -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD>ʱ<EFBFBD><CAB1>
)
;
--<EFBFBD>ͷ<EFBFBD>Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD><EFBFBD>
if object_id('appt_room') is null
CREATE TABLE appt_room( -- <20>ͷ<EFBFBD>
[id] int IDENTITY(1,1) PRIMARY KEY --<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
,[guid] nvarchar(50) not null --GUID
,[appt_id] int NOT NULL --<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
,[room_in] datetime NULL --<EFBFBD>ִ<EFBFBD>ʱ<EFBFBD><EFBFBD>
,[room_out] datetime NULL --<EFBFBD>뿪ʱ<EFBFBD><EFBFBD>
,[room_group] nvarchar(50) NULL --<EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>䲻ռ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
,[room_code] nvarchar(20) NULL--ѡ<EFBFBD>񷿼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱΪ<EFBFBD><EFBFBD>,<EFBFBD><EFBFBD>ռ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ)
,[room_num] int NOT NULL--<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
,[room_price] money default 0 NOT NULL--<EFBFBD><EFBFBD><EFBFBD>䵥<EFBFBD><EFBFBD>
,[breakfast_num] int NOT NULL--<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:0-<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
,[long_distance] int NOT NULL--<EFBFBD><EFBFBD>;<EFBFBD>绰:0-<EFBFBD>أ<EFBFBD>1-<EFBFBD><EFBFBD>,
,[min_shop] int NOT NULL--<EFBFBD><EFBFBD><EFBFBD><EFBFBD>:0-<EFBFBD><EFBFBD>,1-<EFBFBD><EFBFBD>,
,[remark] nvarchar(200) NULL --<EFBFBD>ͷ<EFBFBD><EFBFBD><EFBFBD>ע
)
;
--<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD><EFBFBD>
if object_id('appt_meeting') is null
CREATE TABLE appt_meeting(
[id] int IDENTITY(1,1) PRIMARY KEY --<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
,[guid] nvarchar(50) not null --GUID
,[appt_id] int NOT NULL--<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
,[meeting_time] datetime NULL-- <20><><EFBFBD><EFBFBD><EFBFBD>볡<EFBFBD><EBB3A1><EFBFBD><EFBFBD>
,[groups] nvarchar(50) NOT NULL --<EFBFBD><EFBFBD><EFBFBD><EFBFBD>:1-<EFBFBD><EFBFBD>,2-<EFBFBD><EFBFBD>,3-<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
,[meeting_room] nvarchar(50) NULL --<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>䲻ռ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
,[meeting_code] nvarchar(20) NULL --<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱΪ<EFBFBD><EFBFBD>,<EFBFBD><EFBFBD>ռ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ)
,[meeting_rostrum] nvarchar(50) NULL --<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϯ̨λ
,[meeting_shape] nvarchar(50) NULL --<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-̨<EFBFBD><EFBFBD>(<EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
,[meeting_num] int NULL --<EFBFBD><EFBFBD><EFBFBD><EFBFBD>:0-<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
,[meeting_price] money default 0 not NULL --<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
,[meeting_title] nvarchar(50) NULL --<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<EFBFBD><EFBFBD>-<EFBFBD>޺<EFBFBD><EFBFBD><EFBFBD>,
,[remark] nvarchar(200) NULL --<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע
)
;
--<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD><EFBFBD>
if object_id('appt_catering') is null
CREATE TABLE appt_catering(
[id] int IDENTITY(1,1) PRIMARY KEY --<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
,[guid] nvarchar(50) not null --GUID
,[appt_id] int NOT NULL--<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
,[catering_time] datetime NOT NULL --<EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
,[groups] nvarchar(50) NOT NULL --<EFBFBD>ͱ<EFBFBD>:1-<EFBFBD><EFBFBD>,2-<EFBFBD><EFBFBD>,3-<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
,[catering_room] nvarchar(50) NULL --<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
,[catering_code] nvarchar(50) NULL--<EFBFBD>ò͵ص<EFBFBD>
,[catering_type] int default 0 not null -- <20>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD> 0-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1-<2D><><EFBFBD><EFBFBD>
,[catering_num] int default 1 not null -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
,[catering_price] money default 0 not NULL--ÿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD>
,[catering_table] nvarchar(50) NULL--<EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
,[wine] nvarchar(50) NULL--<EFBFBD><EFBFBD>ˮ
,[remark] nvarchar(200) NULL --<EFBFBD><EFBFBD>ע
)
;
--<EFBFBD><EFBFBD>ȪԤ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD><EFBFBD>
if object_id('appt_spring') is null
CREATE TABLE appt_spring(
[id] int IDENTITY(1,1) PRIMARY KEY --<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
,[guid] nvarchar(50) not null --GUID
,[appt_id] int NOT NULL --<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
,[spring_time] datetime NULL --<EFBFBD><EFBFBD>Ȫ_<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
,[people_num] int NULL--<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>):0-<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
,[spring_men] int NULL--<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:0-<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
,[spring_women] int NULL--Ů<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:0-<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
,[consume] nvarchar(50) NULL--<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
,[spring_price] money default 0 not NULL--<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
,[remark] nvarchar(200) NULL --<EFBFBD><EFBFBD>ע
)
;
--Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD>չ<EFBFBD><EFBFBD>
if object_id('appt_remark') is null
CREATE TABLE appt_remark(
[id] int IDENTITY(1,1) PRIMARY KEY --<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
,[guid] nvarchar(50) not null --GUID
,[appt_id] int NOT NULL --Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע
,[title] nvarchar(50) NULL--<EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
,[info] nvarchar(500) NULL --<EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
)
;
-- Ԥ<><D4A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD>
if object_id('appt_audit_log') is null
CREATE TABLE appt_audit_log(
[id] int IDENTITY(1,1) PRIMARY KEY --<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
,[type] int NOT NULL --<EFBFBD><EFBFBD><EFBFBD><EFBFBD>:1-<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,2-<EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD>
,[createtime] datetime default getdate() NOT NULL--<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
,[userid] nvarchar(20) NOT NULL--<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա/<EFBFBD><EFBFBD><EFBFBD>ͽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
,[appt_id] int NOT NULL--<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
,[auditor_status] int NOT NULL--<EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬:1-<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD>,0-<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,2-ת<EFBFBD><EFBFBD><EFBFBD><EFBFBD>,3-<EFBFBD>ֶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
,[remark] nvarchar(200) NULL--<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע
,[pic0] nvarchar(max) -- ͼƬ0
,[pic1] nvarchar(max) -- ͼƬ1
,[pic2] nvarchar(max) -- ͼƬ2
,[pic3] nvarchar(max) -- ͼƬ3
,[pic4] nvarchar(max) -- ͼƬ4
,[source] nvarchar(20) NULL --<EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
,[pid] int not null default 0 -- <20><><EFBFBD>ظ<EFBFBD><D8B8>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD>
)
;
--<EFBFBD><EFBFBD>־<EFBFBD><EFBFBD>
if object_id('appt_log') is null
CREATE TABLE appt_log(
[id] [int] IDENTITY(1,1) PRIMARY KEY, --<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
[tableName] [varchar](100) NULL,-- <20><><EFBFBD>ݱ<EFBFBD>
[keyId] [varchar](100) NULL, --<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
[oldData] [varchar](2000) NULL, --ԭʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
[newData] [varchar](2000) NULL, --<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
[createTime] [datetime] default getdate() NOT NULL, --<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
[userId] [nvarchar](20) NULL, --<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
[systemUser] [int] NULL --<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:0-<EFBFBD><EFBFBD>ͨ<EFBFBD>û<EFBFBD>,1-<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա
)
;
--<EFBFBD><EFBFBD><EFBFBD><EFBFBD>չʾ<EFBFBD><EFBFBD>־
if object_id('appt_remark_log') is null
CREATE TABLE appt_remark_log(
[id] [int] IDENTITY(1,1) PRIMARY KEY --<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
,[createTime] [datetime] default getdate() NOT NULL --<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
,[pid] [int] default(0) not null -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
,[appt_id] [int] NOT NULL --<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
,[account] [nvarchar](20) not null --<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˺<EFBFBD>
,[username] [nvarchar](20) null --<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
,[old_status] [int] not null -- <20>ύǰ״̬
,[new_status] [int] not null -- <20>ύ<EFBFBD><E1BDBB>״̬
,[remark] [varchar](2000) NULL --<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˱<EFBFBD>ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
,[update_data] [varchar](2000) NULL, --<EFBFBD><EFBFBD><EFBFBD>ݱ仯
)
;
-- <20><><EFBFBD><EFBFBD><EFBFBD>ڶ<EFBFBD>ȡÿ<C8A1>տ<EFBFBD><D5BF>۷<EFBFBD><DBB7><EFBFBD>
if object_id('p_yyj_ota_type_rsv_tend') is not null
drop proc p_yyj_ota_type_rsv_tend;
create proc p_yyj_ota_type_rsv_tend
@rm_type varchar(255), -- <20><><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>#<23><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>#BJ#DJ# , Ҳ<><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> % <20><><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
@s_time datetime, -- <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
@e_time datetime, -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
@tentative char(1) = 'T' -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7> OTAĬ<41>ϴ<EFBFBD><CFB4><EFBFBD> T
as
update room_type set sequence = 10 where sequence = 0
select @s_time = convert(datetime, convert(char(10), @s_time, 111))
select @e_time = convert(datetime, convert(char(10), @e_time, 111))
declare
@result int
-- ------------------------------------------------------------------------------------
-- <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
-- ------------------------------------------------------------------------------------
create table #inventory --<2D><><EFBFBD><EFBFBD><EFBFBD>̷<EFBFBD><CCB7><EFBFBD>ֵ
(
date datetime null, --<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
type char(3) null, --<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
sequence int null, --<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
quan int null --<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
)
create table #tmp
(
type char(3) null,
quan int null
)
declare @type char(3),
@tennum int
-- ƴ<>ַ<EFBFBD><D6B7><EFBFBD>
if @rm_type='%'
begin
select @rm_type='#'
select @type=isnull((select min(id) from room_type where id>''), '')
while @type <> ''
begin
select @rm_type = @rm_type+substring(@type+space(3), 1, 3)+'#'
select @type=isnull((select min(id) from room_type where id>@type ), '')
end
end
else
select @rm_type = '#'+@rm_type+'#' --ǿ<EFBFBD>Ƽ<EFBFBD><EFBFBD><EFBFBD>YYJ
while @s_time <= @e_time
begin
-- <20><><EFBFBD>Ȳ<EFBFBD><C8B2><EFBFBD>Ԥ<EFBFBD><D4A4>
if @tentative = 'T'
begin
insert #inventory select @s_time, c.id, 0,
quan=isnull((select sum(a.rooms) from rsvinfo a, mstinfo b
where charindex('#'+substring(a.type+' ',1,3)+'#',@rm_type)>0 and a.begin_<>a.end_ and a.begin_<=@s_time and a.end_>@s_time and substring(a.accnt,1,1) <> 'G%'
and a.accnt=b.accnt and (a.roomno is null or a.roomno='') and c.id = b.type
and b.sta in ('R','I')
),0) + (select isnull(count(distinct a.roomno),0) from rsvinfo a, mstinfo b
where charindex('#'+substring(a.type+' ',1,3)+'#',@rm_type)>0 and a.begin_<>a.end_ and a.begin_<=@s_time and a.end_>@s_time and substring(a.accnt,1,1) <> 'G%'
and a.accnt=b.accnt and a.roomno is not null and a.roomno<>'' and c.id = b.type
and b.sta in ('R','I'))
from room_type c where charindex('#'+substring(c.id+' ',1,3)+'#', @rm_type) > 0
end
else
begin
delete #tmp
insert #inventory select @s_time, c.id, 0,
quan=isnull((select sum(a.rooms) from rsvinfo a, mstinfo b
where charindex('#'+substring(a.type+' ',1,3)+'#',@rm_type)>0 and a.begin_<>a.end_ and a.begin_<=@s_time and a.end_>@s_time and substring(a.accnt,1,1) <> 'G%'
and a.accnt=b.accnt and (a.roomno is null or a.roomno='') and c.id = b.type
and b.sta in ('R','I') and b.resclass not in (select id from sys_code where class='resclass' and charindex('Tentative',remark)>0)
),0) + (select isnull(count(distinct a.roomno),0) from rsvinfo a, mstinfo b
where charindex('#'+substring(a.type+' ',1,3)+'#',@rm_type)>0 and a.begin_<>a.end_ and a.begin_<=@s_time and a.end_>@s_time and substring(a.accnt,1,1) <> 'G%'
and a.accnt=b.accnt and a.roomno is not null and a.roomno<>'' and c.id = b.type
and b.sta in ('R','I') and b.resclass not in (select id from sys_code where class='resclass' and charindex('Tentative',remark)>0))
from room_type c where charindex('#'+substring(c.id+' ',1,3)+'#', @rm_type) > 0
end
-- modi by shr 2014.4.3
update #inventory set #inventory.quan =(select isnull(count(c.roomno),0) from room_list c where #inventory.type=C.type and
c.tag1 <> 'VR') - #inventory.quan where #inventory.date = @s_time and #inventory.type<>'TEN'
update #inventory set #inventory.quan = #inventory.quan - (select isnull(count(1),0) from room_oo b where b.sta='I' and b.type='OO'
and b.bdate <= @s_time and b.edate > @s_time and b.rmtype = #inventory.type)
where #inventory.date = @s_time and #inventory.type<>'TEN'
-- YYJ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD><EFBFBD><EFBFBD>ӳ<EFBFBD>Ԥ<EFBFBD><D4A4><EFBFBD>ۼ<EFBFBD>
if exists(select 1 from sys_option where catalog = 'reserver' and item = 'rsvtendovr' and rtrim(value)='T')
update #inventory set #inventory.quan = #inventory.quan + (select isnull(sum(exceed),0) from room_type b where b.id = #inventory.type)
where #inventory.date = @s_time and #inventory.type<>'TEN'
select @s_time = dateadd(day, 1, @s_time)
end
update #inventory set sequence = a.sequence from room_type a where rtrim(#inventory.type)=rtrim(a.id)
select a.date,a.type,a.sequence,a.quan
from #inventory a order by a.date, a.sequence
return 0
;
if object_id('p_yyj_grpadd_inter') is not null
drop proc p_yyj_grpadd_inter ;
create proc p_yyj_grpadd_inter
@gname varchar(50) , --<EFBFBD>Ŷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
@leader char(20), --<EFBFBD><EFBFBD><EFBFBD>ӻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><EFBFBD>
@phone char(20), --<EFBFBD><EFBFBD><EFBFBD>ӵ绰
@arr datetime , --<EFBFBD>ִ<EFBFBD>ʱ<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>ں<EFBFBD>ʱ<EFBFBD>䣬<EFBFBD><EFBFBD>2019-01-17 18:00:00
@dep datetime, --<EFBFBD>뿪ʱ<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>ں<EFBFBD>ʱ<EFBFBD>䣬<EFBFBD><EFBFBD>2019-01-18 14:00:00
@rooms integer, --<EFBFBD>Ŷ<EFBFBD><EFBFBD>ܹ<EFBFBD><EFBFBD>ķ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD>ֻ<EFBFBD>DZ<EFBFBD>ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD>÷<EFBFBD><EFBFBD>䣩
@guests integer, --<EFBFBD>Ŷӵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD>ֻ<EFBFBD>DZ<EFBFBD>ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD>÷<EFBFBD><EFBFBD>䣩
@remark varchar(255), --<EFBFBD>Ŷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע
@log_id char(5), --<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Աû<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĺ<EFBFBD><EFBFBD>ţ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>ͨ<EFBFBD>õĹ<EFBFBD><EFBFBD><EFBFBD>
@log_ip char(16), --<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><EFBFBD>߽ӿڵ<EFBFBD><EFBFBD>Ե<EFBFBD>IP<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>
@saleid char(4) --<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD><EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>۲˵<EFBFBD><EFBFBD>¿<EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><EFBFBD>鿴<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD>Ĺ<EFBFBD><EFBFBD>ţ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>
as
declare
@resno char(10) ,
@accnt varchar(10),
@msg varchar(60),
@ret integer ,
@sysdate datetime,
@newno char(10)
select @ret = 0
select @msg = ''
if rtrim(isnull(@gname,'')) = ''
select @msg = '<EFBFBD>Ŷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʋ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
if @arr = null or @dep= null
select @msg = '<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>䲻<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>'
if @rooms = null or @rooms=0
select @rooms =1
if @guests = null or @guests=0
select @guests =1
if datediff(dd,@arr,@dep)<1
select @msg = '<EFBFBD>뿪<EFBFBD><EFBFBD><EFBFBD>ڱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ס<EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
if @msg <> ''
begin
select @ret = 1
select @ret , @msg
return @ret
end
select @sysdate = sysdate from sys_data
select @resno = no from sys_acctno where class ='reserve'
select @accnt = no from sys_acctno where class ='group'
if exists (select 1 from grpinfo where accnt =@accnt)
begin
select @accnt = "G0" + right("00000" + convert(varchar(4),convert(integer,right(max(rtrim(accnt)),4))+1),5) from grpinfo
end
insert grpinfo( accnt,sta, gname,src,mkt,arr,dep,country, leader,phone,guests,rooms,cropsno,cropname,paycode,
ramark,sysdate,log_num,log_id,log_shift,log_ip,log_date,navite,address,payroom,ename,resno,
grpno,payaccnt,code,vip,sec,special,araccnt,saleid)
select @accnt,'R',@gname,'LOC','GRP',@arr,@dep,'CN',@leader,@phone,@guests,@rooms,'','','9001',
@remark, @sysdate,0,@log_id,'1',@log_ip,getdate(),'','','<EFBFBD>Ŷ<EFBFBD>','',@resno,
@accnt,@accnt,'G','0','0','','',@saleid
if exists (select 1 from grpinfo where accnt =@accnt)
begin
select @newno = "G0" + right("00000" + convert(varchar(4),convert(integer,(right(rtrim(@accnt),4))) + 1),5)
update sys_acctno set no = @newno where class ='group'
select @newno = "R0" + right("00000" + convert(varchar(4),convert(integer,(right(rtrim(@resno),4))) + 1),5)
update sys_acctno set no =@newno where class ='reserve'
end
select @ret = 0
select @msg = @accnt
select @ret,@msg
return @ret
;
if object_id('p_yyj_grpmeet_inter') is not null
drop proc p_yyj_grpmeet_inter;
create proc p_yyj_grpmeet_inter
@accnt char(7), --<EFBFBD>Ŷ<EFBFBD><EFBFBD>˺ţ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŷ<EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>
@date datetime, --<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ֻҪ<EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD>Ҫʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
@rescode varchar(3), --<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ұ<EFBFBD><EFBFBD><EFBFBD>,<EFBFBD><EFBFBD><EFBFBD>Դӵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>鿴<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>res_code<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>code<EFBFBD>ֶ<EFBFBD>
@sfield integer, --<EFBFBD><EFBFBD><EFBFBD>Σ<EFBFBD> 0<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><EFBFBD> 1<EFBFBD><EFBFBD><EFBFBD>糡 2<EFBFBD><EFBFBD><EFBFBD>糡 3<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
@price money, --<EFBFBD>۸񡣿<EFBFBD><EFBFBD>Դӵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>鿴<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>res_code<EFBFBD><EFBFBD>ȡprice<EFBFBD>ֶΣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD>ΪԤ<EFBFBD><EFBFBD><EFBFBD>ο<EFBFBD><EFBFBD>ۣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>嶩<EFBFBD><EFBFBD><EFBFBD>۸<EFBFBD><EFBFBD>Ըò<EFBFBD><EFBFBD><EFBFBD>Ϊ׼<EFBFBD><EFBFBD>
@op_id char(5) --<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Աû<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĺ<EFBFBD><EFBFBD>ţ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>ͨ<EFBFBD>õĹ<EFBFBD><EFBFBD><EFBFBD>
as
declare
@sysno char(6) ,
@maxno integer ,
@no char(10),
@bdate datetime ,
@op_name varchar(16),
@sfieldtime varchar(5),
@efieldtime varchar(5)
if not exists( select 1 from grpinfo where sta in ('I','R') and accnt = @accnt )
begin
select 1,'<EFBFBD>Ŷ<EFBFBD><EFBFBD>˺<EFBFBD> ' + @accnt + '<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч״̬'
return 1
end
if exists (select 1 from res_info where @date>=stime and @date<=etime and rescode = @rescode and (sfield = @sfield or sfield=0 or @sfield=0) and sta in ('R','O'))
begin
select 1,'<EFBFBD>û<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѱ<EFBFBD>Ԥ<EFBFBD><EFBFBD>!'
return 1
end
select @op_name = op_name from uc_login where op_id = @op_id
select @bdate = sysdate from sys_data
select @sysno = convert ( char ( 6 ) , getdate ( ) , 12 ) from sys_data
select @maxno = isnull ( max ( convert ( int , substring ( no , 7 , 4 ) ) ) , 0 ) + 1 from res_info where
substring ( no , 1 , 6 ) =convert ( char ( 6 ) , getdate ( ) , 12 )
select @no = @sysno + right('0000' + convert(varchar(4),@maxno),4)
if @sfield = 0
begin
select @sfieldtime = '08:30'
select @efieldtime = '22:30'
end
else if @sfield = 1
begin
select @sfieldtime = '08:30'
select @efieldtime = '11:30'
end
else if @sfield = 2
begin
select @sfieldtime = '13:00'
select @efieldtime = '17:30'
end
else if @sfield = 3
begin
select @sfieldtime = '19:30'
select @efieldtime = '22:30'
end
INSERT INTO res_info select
@no,'R',@accnt,'',@rescode,1,@bdate,@date,@date,@sfield,@sfield,
@sfieldtime,@efieldtime,NULL,@price,@price,'F',@op_id,@op_name,
getdate(),NULL,NULL,NULL,0
if @@rowcount = 1
select 0,'<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>!'
else
select 1,'<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!'
return 0
;
if object_id('p_yyj_gblock_inter') is not null
drop proc p_yyj_gblock_inter ;
create proc p_yyj_gblock_inter
@log_id char(5), --<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Աû<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĺ<EFBFBD><EFBFBD>ţ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>ͨ<EFBFBD>õĹ<EFBFBD><EFBFBD>ţ<EFBFBD>
@log_ip char(16), --<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><EFBFBD>߽ӿڵ<EFBFBD><EFBFBD>Ե<EFBFBD>IP<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>
@grpno char(7), --<EFBFBD>Ŷ<EFBFBD><EFBFBD>˺ţ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŷ<EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>
@arr datetime, --<EFBFBD>ִ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ֻҪ<EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD>Ҫʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
@dep datetime, --<EFBFBD>뿪<EFBFBD><EFBFBD><EFBFBD><EFBFBD> ֻҪ<EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD>Ҫʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
@type char(3), --<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>룬<EFBFBD><EFBFBD>BJ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>鿴<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD>ϵͳ<EFBFBD>з<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
@rooms integer, --Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>᷵<EFBFBD>ش<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
@price money, --<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
@guests integer, -- һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ס<EFBFBD><D7A1><EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD>Ĭ<EFBFBD><C4AC>Ϊ1
@remark varchar(255), --<EFBFBD><EFBFBD>Ԥ<EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD>ע<EFBFBD><EFBFBD><EFBFBD>ŷ<EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD>Կ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>˱<EFBFBD>ע
@rmcode char(4) --<EFBFBD>밴<EFBFBD><EFBFBD>Ĭ<EFBFBD>ϵ<EFBFBD>RACK<EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
as
declare
@ret integer,
@accnt char(10),
@resno char(10),
@sysdate datetime,
@price0 money,
@log_name char(12),
@mkt char(3),
@src char(3),
@gname varchar(50),
@ename char(50),
@country char(3),
@vip char(2),
@sec char(2),
@cropsno char(7),
@special varchar(50),
@saleid char(4),
@araccnt char(10),
@msg varchar(60),
@deptime varchar(8),
@postopen char(1),
@rmpackage varchar(50),
@ooo integer,
@blk integer,
@avl integer
select @rmpackage = ''
select @postopen = isnull(value,'') from sys_option where catalog = 'group' and item = 'postopen'
if @postopen is null
set @postopen = 'F'
if charindex(@postopen,'TF') = 0
set @postopen = 'F'
if not exists( select 1 from grpinfo where sta in ('I','R') and accnt = @grpno )
begin
select @ret=1, @msg = '<EFBFBD>Ŷ<EFBFBD><EFBFBD>˺<EFBFBD> ' + @grpno + '<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч״̬'
select @ret, @msg
return @ret
end
select @ooo = 0
select @blk=0
select @avl=0
exec p_xx_reserve_chkavail @type,@arr,@dep,'N',@ooo out ,@blk out ,@avl out,''
if @avl is null or @avl<@rooms
begin
select @ret=@avl, @msg = '<EFBFBD>÷<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
select @ret, @msg
return @ret
end
select @sysdate = sysdate from sys_data
select @log_name = op_name from uc_login where op_id=@log_id
select @src=src,@mkt=mkt,@gname=gname,@ename=ename,@country=country,@resno=rtrim(resno),@vip=vip,@sec=sec,
@cropsno=cropsno,@special=special,@saleid=saleid,@araccnt=araccnt from grpinfo where accnt = @grpno
if @resno is null
exec p_xx_pub_getno 'RESE',@resno output
select @deptime = deptime from mkt_deptime where id = 'GRP' and isnull(flag,'') = 'T'
if @deptime <> '' and @deptime is not null
begin
select @dep = convert(datetime,(rtrim(left(convert(varchar,@dep,120),10)) + ' ' + @deptime))
end
select @price0 = price0 from room_type where id=@type
exec p_xx_pub_getno 'ACCT',@accnt output
insert mstinfo(accnt,grpno,sta,src,mkt,sysdate,resno,arr,dep,type,roomno,price0,price,rooms,numbs,gname,ename,sex,
vip,sec,cropsno,special,saleid,araccnt,country,rmcode,remark,log_id,log_name,log_shift,log_ip,log_date,logmark,res,restime,idcls,rmpackage,flag)
select @accnt,@grpno,'R',@src,@mkt,@sysdate,@resno,@arr,@dep,@type,'',@price0,@price,@rooms,@guests,@gname,@ename,'M',
@vip,@sec,@cropsno,@special,@saleid,@araccnt,@country,@rmcode,@remark,@log_id,@log_name,'1',@log_ip,getdate(),0,@log_id,getdate(),'01',@rmpackage,@postopen
select @ret = 0, @msg = '<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>'
select @ret, @msg
return @ret
;
if object_id('p_xx_res_info_view3') is not null
drop proc p_xx_res_info_view3 ;
create proc p_xx_res_info_view3
@startday datetime,
@enddate datetime,
@sort varchar(3),
@accnt varchar(10) = '%'
as
declare
@rdate datetime,
@accnt1 varchar(10)
if exists(select 1 from mstinfo where accnt=@accnt)
select @accnt1=grpno from mstinfo where accnt=@accnt
select @rdate=@startday
CREATE TABLE #query (
code varchar(6) not null,
descript char(20) null,
sort char(3) null,
day11 char(2) null,
day12 char(2) null,
day13 char(2) null,
day21 char(2) null,
day22 char(2) null,
day23 char(2) null,
day31 char(2) null,
day32 char(2) null,
day33 char(2) null,
day41 char(2) null,
day42 char(2) null,
day43 char(2) null,
day51 char(2) null,
day52 char(2) null,
day53 char(2) null,
day61 char(2) null,
day62 char(2) null,
day63 char(2) null,
day71 char(2) null,
day72 char(2) null,
day73 char(2) null,
day81 char(2) null,
day82 char(2) null,
day83 char(2) null,
day91 char(2) null,
day92 char(2) null,
day93 char(2) null
)
insert #query (code,descript,sort)
select code,descript1,sort from res_code where sta='T' and sort like @sort
CREATE TABLE #tblav (
rescode char(4) not null,
bdate datetime not null,
sfield int null,
accnt varchar(10) null,
accnt1 varchar(10) null,
sta char(1) not null)
insert #tblav(rescode,bdate,sfield,accnt,accnt1,sta)
select rescode,stime,sfield,accnt,accnt1,min(sta) from res_info where sta in ('R','O')
group by rescode,stime,sfield,accnt,accnt1
order by rescode,stime,sfield,accnt,accnt1
update #tblav set sta='S' where accnt=@accnt or accnt1=@accnt1
select @rdate=dateadd(day,0,@startday)
update #query set #query.day11=b.sta + '0' from #tblav b where #query.code=b.rescode and datediff(dd,b.bdate,@rdate)=0 and b.sfield=0
update #query set #query.day11=b.sta from #tblav b where #query.code=b.rescode and datediff(dd,b.bdate,@rdate)=0 and b.sfield=1
update #query set #query.day12=b.sta from #tblav b where #query.code=b.rescode and datediff(dd,b.bdate,@rdate)=0 and b.sfield=2
update #query set #query.day13=b.sta from #tblav b where #query.code=b.rescode and datediff(dd,b.bdate,@rdate)=0 and b.sfield=3
select @rdate=dateadd(day,1,@startday)
update #query set #query.day21=b.sta + '0' from #tblav b where #query.code=b.rescode and datediff(dd,b.bdate,@rdate)=0 and b.sfield=0
update #query set #query.day21=b.sta from #tblav b where #query.code=b.rescode and datediff(dd,b.bdate,@rdate)=0 and b.sfield=1
update #query set #query.day22=b.sta from #tblav b where #query.code=b.rescode and datediff(dd,b.bdate,@rdate)=0 and b.sfield=2
update #query set #query.day23=b.sta from #tblav b where #query.code=b.rescode and datediff(dd,b.bdate,@rdate)=0 and b.sfield=3
select @rdate=dateadd(day,2,@startday)
update #query set #query.day31=b.sta + '0' from #tblav b where #query.code=b.rescode and datediff(dd,b.bdate,@rdate)=0 and b.sfield=0
update #query set #query.day31=b.sta from #tblav b where #query.code=b.rescode and datediff(dd,b.bdate,@rdate)=0 and b.sfield=1
update #query set #query.day32=b.sta from #tblav b where #query.code=b.rescode and datediff(dd,b.bdate,@rdate)=0 and b.sfield=2
update #query set #query.day33=b.sta from #tblav b where #query.code=b.rescode and datediff(dd,b.bdate,@rdate)=0 and b.sfield=3
select @rdate=dateadd(day,3,@startday)
update #query set #query.day41=b.sta + '0' from #tblav b where #query.code=b.rescode and datediff(dd,b.bdate,@rdate)=0 and b.sfield=0
update #query set #query.day41=b.sta from #tblav b where #query.code=b.rescode and datediff(dd,b.bdate,@rdate)=0 and b.sfield=1
update #query set #query.day42=b.sta from #tblav b where #query.code=b.rescode and datediff(dd,b.bdate,@rdate)=0 and b.sfield=2
update #query set #query.day43=b.sta from #tblav b where #query.code=b.rescode and datediff(dd,b.bdate,@rdate)=0 and b.sfield=3
select @rdate=dateadd(day,4,@startday)
update #query set #query.day51=b.sta + '0' from #tblav b where #query.code=b.rescode and datediff(dd,b.bdate,@rdate)=0 and b.sfield=0
update #query set #query.day51=b.sta from #tblav b where #query.code=b.rescode and datediff(dd,b.bdate,@rdate)=0 and b.sfield=1
update #query set #query.day52=b.sta from #tblav b where #query.code=b.rescode and datediff(dd,b.bdate,@rdate)=0 and b.sfield=2
update #query set #query.day53=b.sta from #tblav b where #query.code=b.rescode and datediff(dd,b.bdate,@rdate)=0 and b.sfield=3
select @rdate=dateadd(day,5,@startday)
update #query set #query.day61=b.sta + '0' from #tblav b where #query.code=b.rescode and datediff(dd,b.bdate,@rdate)=0 and b.sfield=0
update #query set #query.day61=b.sta from #tblav b where #query.code=b.rescode and datediff(dd,b.bdate,@rdate)=0 and b.sfield=1
update #query set #query.day62=b.sta from #tblav b where #query.code=b.rescode and datediff(dd,b.bdate,@rdate)=0 and b.sfield=2
update #query set #query.day63=b.sta from #tblav b where #query.code=b.rescode and datediff(dd,b.bdate,@rdate)=0 and b.sfield=3
select @rdate=dateadd(day,6,@startday)
update #query set #query.day71=b.sta + '0' from #tblav b where #query.code=b.rescode and datediff(dd,b.bdate,@rdate)=0 and b.sfield=0
update #query set #query.day71=b.sta from #tblav b where #query.code=b.rescode and datediff(dd,b.bdate,@rdate)=0 and b.sfield=1
update #query set #query.day72=b.sta from #tblav b where #query.code=b.rescode and datediff(dd,b.bdate,@rdate)=0 and b.sfield=2
update #query set #query.day73=b.sta from #tblav b where #query.code=b.rescode and datediff(dd,b.bdate,@rdate)=0 and b.sfield=3
select @rdate=dateadd(day,7,@startday)
update #query set #query.day81=b.sta + '0' from #tblav b where #query.code=b.rescode and datediff(dd,b.bdate,@rdate)=0 and b.sfield=0
update #query set #query.day81=b.sta from #tblav b where #query.code=b.rescode and datediff(dd,b.bdate,@rdate)=0 and b.sfield=1
update #query set #query.day82=b.sta from #tblav b where #query.code=b.rescode and datediff(dd,b.bdate,@rdate)=0 and b.sfield=2
update #query set #query.day83=b.sta from #tblav b where #query.code=b.rescode and datediff(dd,b.bdate,@rdate)=0 and b.sfield=3
select @rdate=dateadd(day,8,@startday)
update #query set #query.day91=b.sta + '0' from #tblav b where #query.code=b.rescode and datediff(dd,b.bdate,@rdate)=0 and b.sfield=0
update #query set #query.day91=b.sta from #tblav b where #query.code=b.rescode and datediff(dd,b.bdate,@rdate)=0 and b.sfield=1
update #query set #query.day92=b.sta from #tblav b where #query.code=b.rescode and datediff(dd,b.bdate,@rdate)=0 and b.sfield=2
update #query set #query.day93=b.sta from #tblav b where #query.code=b.rescode and datediff(dd,b.bdate,@rdate)=0 and b.sfield=3
select sort,code,descript,day11,day12,day13,day21,day22,day23,day31,day32,day33,day41,day42,day43,day51,day52,day53,
day61,day62,day63,day71,day72,day73,day81,day82,day83,day91,day92,day93 from #query order by sort,code
return 0
;
-- ȡ<><C8A1><EFBFBD><EFBFBD>Դռ<D4B4>ô洢<C3B4><E6B4A2><EFBFBD><EFBFBD>
if object_id('p_yyj_gblock_cancel') is not null
drop proc p_yyj_gblock_cancel;
create proc p_yyj_gblock_cancel
@accnt char(7), --<EFBFBD>Ŷ<EFBFBD><EFBFBD>˺ţ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŷ<EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>
@op_id char(5) --<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Աû<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĺ<EFBFBD><EFBFBD>ţ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>ͨ<EFBFBD>õĹ<EFBFBD><EFBFBD><EFBFBD>
as
declare
@op_name varchar(16),
@sysdate datetime,
@ret integer,
@msg varchar(60)
--<EFBFBD>ù<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŷӵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>䡢<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
select @sysdate = sysdate from sys_data
select @op_name = op_name from uc_login where op_id = @op_id
update res_info set sta='C',cby = @op_id , cbyname = @op_name,cbytime=getdate(),logmark = logmark +1 where accnt = @accnt
update mstinfo set sta='C',log_id =@op_id , log_shift ='1', log_date =getdate() ,log_name = @op_name,
logmark = logmark+1 where grpno = @accnt
select @ret = 0, @msg = '<EFBFBD><EFBFBD>Դȡ<EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>'
select @ret, @msg
return @ret
;

View File

@@ -0,0 +1,356 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Appointment.Entity
{
#region 添加
/// <summary>
/// 创建订单入参
/// </summary>
public class AddSummaryJncReq : ApptSummary
{
/// <summary>
/// [必填] 客户端保存用户信息
/// </summary>
public string AccountDes { get; set; }
}
#endregion
#region 修改暂定单
public class UpdateSummaryReq : ApptSummary
{
/// <summary>
/// [必填] 客户端保存用户信息
/// </summary>
public string AccountDes { get; set; }
}
#endregion
#region 申请确定单
/// <summary>
/// 申请确定单入参 | 预定部对预定单进行审批通过 | 其他部门审批通过 | 驳回
/// </summary>
public class ApplyOrderReq
{
/// <summary>
/// [必填] 客户端保存用户信息
/// </summary>
public string AccountDes { get; set; }
/// <summary>
/// [必填] 预订单主键
/// </summary>
public int Id { get; set; }
/// <summary>
/// 申请确定单备注
/// </summary>
public string Remark { get; set; }
/// <summary>
/// 申请确定单图片备注(最多5张)
/// </summary>
public List<string> RemarkPics { get; set; }
}
#endregion
#region 获取实体
/// <summary>
/// 获取实体入参 | 订单对比 | 根据回复编号获取回复中的图片列表
/// </summary>
public class SummaryJncModelReq
{
/// <summary>
/// 客户端保存用户信息
/// </summary>
public string AccountDes { get; set; }
/// <summary>
/// 预订单主键
/// </summary>
public int Id { get; set; }
}
public class SummaryJncDetailRep : ApptSummary
{
public string UserName { get; set; }
/// <summary>
/// 图标状态:0-未提交,1-审核中,2-通过,3-驳回;4-取消;
/// </summary>
public int IconStatus { get; set; }
}
#endregion
#region 分页
/// <summary>
/// 分页入参
/// </summary>
public class SummaryJNCPageReq
{
/// <summary>
/// [必填]客户端保存用户信息
/// </summary>
public string AccountDES { get; set; }
/// <summary>
/// 当前页从1开始(默认1)
/// </summary>
public int PageIndex { get; set; }
/// <summary>
/// 页大小(默认10)
/// </summary>
public int PageSize { get; set; }
/// <summary>
/// 查询标签
/// </summary>
public int Menu { get; set; }
/// <summary>
/// 开始日期(包含当日,默认全部)[格式 2021-06-24]
/// </summary>
public string StartDay { get; set; }
/// <summary>
/// 截止日期(包含当日,默认全部)[格式 2021-06-24]
/// </summary>
public string EndDay { get; set; }
/// <summary>
/// 预订单编号
/// </summary>
public string No { get; set; }
/// <summary>
/// 搜索
/// </summary>
public string KeyWord { get; set; }
}
#endregion
#region 生成确认单
/// <summary>
/// 生成确认单入参
/// </summary>
public class CreateOrderReq
{
/// <summary>
/// 客户端保存用户信息
/// </summary>
public string AccountDes { get; set; }
/// <summary>
/// 预订单主键
/// </summary>
public int Id { get; set; }
}
#endregion
#region 审核订单
public class CheckerOrderReq
{
/// <summary>
/// 客户端保存用户信息
/// </summary>
public string AccountDes { get; set; }
/// <summary>
/// 预订单主键
/// </summary>
public int Id { get; set; }
/// <summary>
/// 审核状态:1-审核通过,2-驳回
/// </summary>
public int Status { get; set; }
/// <summary>
/// 备注
/// </summary>
public string Remark { get; set; }
}
#endregion
/// <summary>
/// 销售员修改确订单或驳回订单入参
/// </summary>
public class UpdateOrderBySaleReq
{
/// <summary>
/// 客户端保存用户信息
/// </summary>
public string AccountDes { get; set; }
/// <summary>
/// 预订单主键
/// </summary>
public int Id { get; set; }
/// <summary>
/// 备注
/// </summary>
public string Remark { get; set; }
}
public class AuditorLogReq
{
/// <summary>
/// 是否有审核权限:0-否,1-是,
/// </summary>
public int Authority { get; set; }
/// <summary>
/// 是否有修改权限:0-否,1-是,
/// </summary>
public int UpdateStatus { get; set; }
/// <summary>
/// 是否可提交审核:0-不可,1-可以,
/// </summary>
public int SubmitStatus { get; set; }
/// <summary>
/// 是否显示生成完成单:0-不显示,1-显示
/// </summary>
public int SumbitFinish { get; set; }
/// <summary>
/// 取消订单功能显示:0-不显示,1-显示
/// </summary>
public int SumbitCancel { get; set; }
public List<AuditorLogDataReq> AuditorLog { get; set; }
}
/// <summary>
/// 返回的日志记录
/// </summary>
public class AuditorLogDataReq
{
/// <summary>
/// 日志编号
/// </summary>
public int Id { get; set; }
/// <summary>
/// 标题
/// </summary>
public string Title { get; set; }
/// <summary>
/// 状态:1-已操作,2-待操作
/// </summary>
public int Status { get; set; }
/// <summary>
/// 修改信息
/// </summary>
public List<string> Info { get; set; }
/// <summary>
/// 图片
/// </summary>
public List<string> PicList { get; set; }
/// <summary>
/// 手动回复的信息列表
/// </summary>
public List<ReplyResp> ReplyList { get; set; }
}
/// <summary>
/// 手动回复信息 数据类型
/// </summary>
public class ReplyResp
{
/// <summary>
/// 创建时间
/// </summary>
public DateTime CreateTime { get; set; }
/// <summary>
/// 审核人员/抄送接收人/回复操作人
/// </summary>
public string UserName { get; set; }
/// <summary>
/// 回复信息内容的主键
/// </summary>
public int Id { get; set; }
/// <summary>
/// 审核备注
/// </summary>
public string Remark { get; set; }
/// <summary>
/// 图片数量
/// </summary>
public int PicNum { get; set; }
}
/// <summary>
/// 订单数据对比返回数据类型
/// </summary>
public class DisparityReq
{
public string Title { get; set; }
public DateTime Time { get; set; }
public List<string> Info { get; set; }
}
public class CompareSummaryReq
{
/// <summary>
/// 客户端保存用户信息
/// </summary>
public string AccountDes { get; set; }
/// <summary>
/// 订单的guid
/// </summary>
public string Guid { get; set; }
/// <summary>
/// 状态:0-获取暂订单与最新确认单的对比,
/// </summary>
public int Status { get; set; }
}
/// <summary>
/// 信息回复 入参
/// </summary>
public class AddMsgReq
{
/// <summary>
/// [必填] 客户端保存用户信息
/// </summary>
public string AccountDes { get; set; }
/// <summary>
/// 被回复的主键
/// </summary>
public int Id { get; set; }
/// <summary>
/// 回复内容
/// </summary>
public string Remark { get; set; }
/// <summary>
/// 图片
/// </summary>
public List<string> PicList { get; set; }
}
}

View File

@@ -0,0 +1,29 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Appointment.Entity
{
public class ApptSendReq
{
/// <summary>
/// 被抄送的预订主键
/// </summary>
public int ApptId { get; set; }
/// <summary>
/// 客户端保存用户信息
/// </summary>
public string AccountDES { get; set; }
/// <summary>
/// 抄送到账号
/// </summary>
public string[] ToUserAccounts { get; set; }
/// <summary>
/// 抄送备注
/// </summary>
public string Remark { get; set; }
}
}

View File

@@ -0,0 +1,380 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Appointment.Entity
{
/// <summary>
/// 预订申请提交表单
/// </summary>
public class ApptSummaryReq1
{
/// <summary>
/// 自增主键
/// </summary>
public int Id { get; set; }
///// <summary>
///// 客户端保存用户信息
///// </summary>
//public string AccountDES { get; set; }
///// <summary>
///// 组织单位
///// </summary>
//public string BuyerName { get; set; }
///// <summary>
///// 公司地址
///// </summary>
//public string BuyerAddress { get; set; }
///// <summary>
///// 会议名称
///// </summary>
//public string BuyerTitle { get; set; }
///// <summary>
///// 组织负责人
///// </summary>
//public string LeaderName { get; set; }
///// <summary>
///// 组织负责人电话
///// </summary>
//public string LeaderMobile { get; set; }
///// <summary>
///// 会议组房号
///// </summary>
//public string LeaderRoom { get; set; }
///// <summary>
///// 客房总备注
///// </summary>
//public string RoomRemark { get; set; }
///// <summary>
///// 议室总备注
///// </summary>
//public string MeetingRemark { get; set; }
///// <summary>
///// 餐饮总备注
///// </summary>
//public string CateringRemark { get; set; }
///// <summary>
///// 温泉总备注
///// </summary>
//public string SpringRemark { get; set; }
///// <summary>
///// 驳回备注
///// </summary>
//public string RebutRemark { get; set; }
///// <summary>
///// 会议室预订明细列表
///// </summary>
////public List<ApptMeetingReq1> ApptMeetingList { get; set; }
///// <summary>
///// 客房预订明细列表
///// </summary>
////public List<ApptRoomReq1> ApptRoomList { get; set; }
///// <summary>
///// 餐饮预订明细列表
///// </summary>
////public List<ApptCateringReq1> ApptCateringList { get; set; }
///// <summary>
///// 温泉预订明细列表
///// </summary>
////public List<ApptSpringReq1> ApptSpringList { get; set; }
///// <summary>
///// 其他备注
///// </summary>
////public List<RemarkReq1> Remarks { get; set; }
///// <summary>
///// 提交人
///// </summary>
//public string UserId { get; set; }
///// <summary>
///// 销售人员姓名
///// </summary>
//public string SaleName { get; set; }
///// <summary>
///// 销售人员姓名电话
///// </summary>
//public string SalePhone { get; set; }
///// <summary>
///// 审核状态:1-待审核,2-审核中,3-审核通过,4-驳回,
///// </summary>
//public int? AuditorStatus { get; set; }
///// <summary>
///// 创建时间
///// </summary>
////public DateTime CreateTime { get; set; }
}
/// <summary>
/// 会议室预订明细
/// </summary>
public class ApptMeetingReq1
{
/// <summary>
/// 自增主键
/// </summary>
public int Id { get; set; }
/// <summary>
/// 会议入场日期
/// </summary>
public DateTime? MeetingTime { get; set; }
/// <summary>
/// 场次:1-早,2-中,3-晚
/// </summary>
public int[] MeetingGroup { get; set; }
/// <summary>
/// 会议厅名称(手输或根据类型选择自动填入),手输不占用资源
/// </summary>
public string MeetingRoom { get; set; }
/// <summary>
/// 会议厅代码(手输类型时为空,不占用资源)
/// </summary>
public string MeetingCode { get; set; }
/// <summary>
/// 会议室主席台位
/// </summary>
public string MeetingRostrum { get; set; }
/// <summary>
/// 会议室-台型(课桌)
/// </summary>
public string MeetingShape { get; set; }
/// <summary>
/// 人数:0-待定,
/// </summary>
public int? MeetingNum { get; set; }
/// <summary>
/// 单价
/// </summary>
public decimal? MeetingPrice { get; set; }
/// <summary>
/// 横幅内容:
/// </summary>
public string MeetingTitle { get; set; }
/// <summary>
/// 会议厅备注
/// </summary>
public string Remark { get; set; }
}
/// <summary>
/// 客房预订明细
/// </summary>
public class ApptRoomReq1
{
/// <summary>
/// 自增主键
/// </summary>
public int Id { get; set; }
/// <summary>
/// 抵达时间
/// </summary>
public DateTime? RoomIn { get; set; }
/// <summary>
/// 离开时间
/// </summary>
public DateTime? RoomOut { get; set; }
/// <summary>
/// 房型(手输或根据类型选择自动填入),手输不占用资源
/// </summary>
public string RoomGroup { get; set; }
/// <summary>
/// 选择房间类型(手输类型时为空,不占用资源)
/// </summary>
public string RooomCode { get; set; }
/// <summary>
/// 房间数量
/// </summary>
public int? RoomNum { get; set; }
/// <summary>
/// 房间单价[当输入为0时,会根据房类代码获取优惠价]
/// </summary>
public decimal? RoomPrice { get; set; }
/// <summary>
/// 总早餐数:0-无早餐,
/// </summary>
public int? BreakfastNum { get; set; }
/// <summary>
/// 长途电话:0-关,1-开,
/// </summary>
public int? LongDistance { get; set; }
/// <summary>
/// 房吧:0-关,1-开,
/// </summary>
public int? MinShop { get; set; }
/// <summary>
/// 总温泉数:0-无,
/// </summary>
public int? SpringNum { get; set; }
/// <summary>
/// 客房备注
/// </summary>
public string RoomRemark { get; set; }
}
/// <summary>
/// 餐饮预订明细
/// </summary>
public class ApptCateringReq1
{
/// <summary>
/// 自增主键
/// </summary>
public int Id { get; set; }
/// <summary>
/// 用餐日期
/// </summary>
public DateTime? CateringTime { get; set; }
/// <summary>
/// 场次:1-早,2-中,3-晚
/// </summary>
public int[] CateringGroup { get; set; }
/// <summary>
/// 餐厅名称(手输或根据类型选择自动填入),手输不占用资源
/// </summary>
public string CateringRoom { get; set; }
/// <summary>
/// 用餐地点(手输类型时为空,不占用资源)
/// </summary>
public string CateringCode { get; set; }
/// <summary>
/// 用餐类型 0-桌数,1-人数
/// </summary>
public int CateringType { get; set; }
/// <summary>
/// 桌数或人数数量
/// </summary>
public int CateringNum { get; set; }
/// <summary>
/// 每桌或每人单价
/// </summary>
public decimal CateringPrice { get; set; }
/// <summary>
/// 桌型
/// </summary>
public string CateringTable { get; set; }
/// <summary>
/// 酒水
/// </summary>
public string Wine { get; set; }
/// <summary>
/// 备注
/// </summary>
public string Remark { get; set; }
}
/// <summary>
/// 温泉预订明细
/// </summary>
public class ApptSpringReq1
{
/// <summary>
/// 自增主键
/// </summary>
public int Id { get; set; }
/// <summary>
/// 温泉_日期
/// </summary>
public DateTime? SpringTime { get; set; }
/// <summary>
/// 总人数(自动计算):0-待定
/// </summary>
public int? PeopleNum { get; set; }
/// <summary>
/// spring_men
/// </summary>
public int? SpringMen { get; set; }
/// <summary>
/// 女性人数:0-待定
/// </summary>
public int? SpringWomen { get; set; }
/// <summary>
/// 二次消费
/// </summary>
public string Consume { get; set; }
/// <summary>
/// 单价
/// </summary>
public decimal? SpringPrice { get; set; }
/// <summary>
/// 备注
/// </summary>
public string Remark { get; set; }
}
public class RemarkReq1
{
/// <summary>
/// 备注名称
/// </summary>
public string RemarkName { get; set; }
/// <summary>
/// 备注内容
/// </summary>
public string RemarkContent { get; set; }
}
}

View File

@@ -0,0 +1,381 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Appointment.Entity
{
/// <summary>
/// 预订申请提交表单
/// </summary>
public class ApptSummaryReq
{
/// <summary>
/// 自增主键
/// </summary>
public int Id { get; set; }
/// <summary>
/// 客户端保存用户信息
/// </summary>
public string AccountDES { get; set; }
/// <summary>
/// 组织单位
/// </summary>
public string BuyerName { get; set; }
/// <summary>
/// 公司地址
/// </summary>
public string BuyerAddress { get; set; }
/// <summary>
/// 会议名称
/// </summary>
public string BuyerTitle { get; set; }
/// <summary>
/// 组织负责人
/// </summary>
public string LeaderName { get; set; }
/// <summary>
/// 组织负责人电话
/// </summary>
public string LeaderMobile { get; set; }
/// <summary>
/// 会议组房号
/// </summary>
public string LeaderRoom { get; set; }
/// <summary>
/// 客房总备注
/// </summary>
public string RoomRemark { get; set; }
/// <summary>
/// 议室总备注
/// </summary>
public string MeetingRemark { get; set; }
/// <summary>
/// 餐饮总备注
/// </summary>
public string CateringRemark { get; set; }
/// <summary>
/// 温泉总备注
/// </summary>
public string SpringRemark { get; set; }
/// <summary>
/// 驳回备注
/// </summary>
public string RebutRemark { get; set; }
/// <summary>
/// 会议室预订明细列表
/// </summary>
public List<ApptMeetingReq> ApptMeetingList { get; set; }
/// <summary>
/// 客房预订明细列表
/// </summary>
public List<ApptRoomReq> ApptRoomList { get; set; }
/// <summary>
/// 餐饮预订明细列表
/// </summary>
public List<ApptCateringReq> ApptCateringList { get; set; }
/// <summary>
/// 温泉预订明细列表
/// </summary>
public List<ApptSpringReq> ApptSpringList { get; set; }
/// <summary>
/// 其他备注
/// </summary>
public List<RemarkReq> Remarks { get; set; }
/// <summary>
/// 提交人
/// </summary>
public string UserId { get; set; }
/// <summary>
/// 销售人员姓名
/// </summary>
public string SaleName { get; set; }
/// <summary>
/// 销售人员姓名电话
/// </summary>
public string SalePhone { get; set; }
/// <summary>
/// 审核状态:1-待审核,2-审核中,3-审核通过,4-驳回,
/// </summary>
public int? AuditorStatus { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime CreateTime { get; set; }
}
/// <summary>
/// 会议室预订明细
/// </summary>
public class ApptMeetingReq
{
/// <summary>
/// 自增主键
/// </summary>
public int Id { get; set; }
/// <summary>
/// 会议入场日期
/// </summary>
public DateTime? MeetingTime { get; set; }
/// <summary>
/// 场次:1-上午,2-下午,3-晚上
/// </summary>
public int[] MeetingGroup { get; set; }
/// <summary>
/// 会议厅名称(手输或根据类型选择自动填入),手输不占用资源
/// </summary>
public string MeetingRoom { get; set; }
/// <summary>
/// 会议厅代码(手输类型时为空,不占用资源)
/// </summary>
public string MeetingCode { get; set; }
/// <summary>
/// 会议室主席台位
/// </summary>
public string MeetingRostrum { get; set; }
/// <summary>
/// 会议室-台型(课桌)
/// </summary>
public string MeetingShape { get; set; }
/// <summary>
/// 人数:0-待定,
/// </summary>
public int? MeetingNum { get; set; }
/// <summary>
/// 单价
/// </summary>
public decimal? MeetingPrice { get; set; }
/// <summary>
/// 横幅内容:
/// </summary>
public string MeetingTitle { get; set; }
/// <summary>
/// 会议厅备注
/// </summary>
public string Remark { get; set; }
}
/// <summary>
/// 客房预订明细
/// </summary>
public class ApptRoomReq
{
/// <summary>
/// 自增主键
/// </summary>
public int Id { get; set; }
/// <summary>
/// 抵达时间
/// </summary>
public DateTime? RoomIn { get; set; }
/// <summary>
/// 离开时间
/// </summary>
public DateTime? RoomOut { get; set; }
/// <summary>
/// 房型(手输或根据类型选择自动填入),手输不占用资源
/// </summary>
public string RoomGroup { get; set; }
/// <summary>
/// 选择房间类型(手输类型时为空,不占用资源)
/// </summary>
public string RooomCode { get; set; }
/// <summary>
/// 房间数量
/// </summary>
public int? RoomNum { get; set; }
/// <summary>
/// 房间单价[当输入为0时,会根据房类代码获取优惠价]
/// </summary>
public decimal? RoomPrice { get; set; }
/// <summary>
/// 总早餐数:0-无早餐,
/// </summary>
public int? BreakfastNum { get; set; }
/// <summary>
/// 长途电话:0-关,1-开,
/// </summary>
public int? LongDistance { get; set; }
/// <summary>
/// 房吧:0-关,1-开,
/// </summary>
public int? MinShop { get; set; }
/// <summary>
/// 总温泉数:0-无,
/// </summary>
public int? SpringNum { get; set; }
/// <summary>
/// 客房备注
/// </summary>
public string RoomRemark { get; set; }
}
/// <summary>
/// 餐饮预订明细
/// </summary>
public class ApptCateringReq
{
/// <summary>
/// 自增主键
/// </summary>
public int Id { get; set; }
/// <summary>
/// 用餐日期
/// </summary>
public DateTime? CateringTime { get; set; }
/// <summary>
/// 晚上
/// 场次:1-上午,2-下午,3-晚上
/// </summary>
public int[] CateringGroup { get; set; }
/// <summary>
/// 餐厅名称(手输或根据类型选择自动填入),手输不占用资源
/// </summary>
public string CateringRoom { get; set; }
/// <summary>
/// 用餐地点(手输类型时为空,不占用资源)
/// </summary>
public string CateringCode { get; set; }
/// <summary>
/// 用餐类型 0-桌数,1-人数
/// </summary>
public int CateringType { get; set; }
/// <summary>
/// 桌数或人数数量
/// </summary>
public int CateringNum { get; set; }
/// <summary>
/// 每桌或每人单价
/// </summary>
public decimal CateringPrice { get; set; }
/// <summary>
/// 桌型
/// </summary>
public string CateringTable { get; set; }
/// <summary>
/// 酒水
/// </summary>
public string Wine { get; set; }
/// <summary>
/// 备注
/// </summary>
public string Remark { get; set; }
}
/// <summary>
/// 温泉预订明细
/// </summary>
public class ApptSpringReq
{
/// <summary>
/// 自增主键
/// </summary>
public int Id { get; set; }
/// <summary>
/// 温泉_日期
/// </summary>
public DateTime? SpringTime { get; set; }
/// <summary>
/// 总人数(自动计算):0-待定
/// </summary>
public int? PeopleNum { get; set; }
/// <summary>
/// spring_men
/// </summary>
public int? SpringMen { get; set; }
/// <summary>
/// 女性人数:0-待定
/// </summary>
public int? SpringWomen { get; set; }
/// <summary>
/// 二次消费
/// </summary>
public string Consume { get; set; }
/// <summary>
/// 单价
/// </summary>
public decimal? SpringPrice { get; set; }
/// <summary>
/// 备注
/// </summary>
public string Remark { get; set; }
}
public class RemarkReq
{
/// <summary>
/// 备注名称
/// </summary>
public string RemarkName { get; set; }
/// <summary>
/// 备注内容
/// </summary>
public string RemarkContent { get; set; }
}
}

View File

@@ -0,0 +1,22 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Appointment.Entity
{
/// <summary>
/// 预订类型添加
/// </summary>
public class ApptTypeAddReq
{
/// <summary>
/// 类型名称
/// </summary>
public string ApptName { get; set; }
/// <summary>
/// 备注说明
/// </summary>
public string Remark { get; set; }
}
}

View File

@@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Appointment.Entity
{
public class ApptUsableMeetingReq
{
/// <summary>
/// 启始时间(默认从昨天开始)
/// </summary>
public string Startday { get; set; }
/// <summary>
/// 截止时间(默认截止到3个月后)
/// </summary>
public string EndDay { get; set; }
}
}

View File

@@ -0,0 +1,22 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Appointment.Entity
{
/// <summary>
/// 删除预订请求参数
/// </summary>
public class AuditDeleteReq
{
/// <summary>
/// 要删除的预订对应的主键
/// </summary>
public int Id { get; set; }
/// <summary>
/// 删除的类型:1-预订主单与详情,2-客房详情,3-会议详情,4-餐饮详情,5-温泉详情
/// </summary>
public int Type { get; set; }
}
}

View File

@@ -0,0 +1,32 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Appointment.Entity
{
/// <summary>
/// 预订审核
/// </summary>
public class ApptAuditReq
{
/// <summary>
/// 要审核的主键
/// </summary>
public int ApptId { get; set; }
/// <summary>
/// 客户端保存用户信息
/// </summary>
public string AccountDES { get; set; }
/// <summary>
/// 审核状态:1-审核通过,0-驳回,
/// </summary>
public int AuditorStatus { get; set; }
/// <summary>
/// 审核说明
/// </summary>
public string Remark { get; set; }
}
}

View File

@@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Appointment.Entity
{
/// <summary>
/// 绑定用户
/// </summary>
public class BindUserReq
{
/// <summary>
/// 客户端保留用户信息
/// </summary>
public string AccountDES { get; set; }
}
}

View File

@@ -0,0 +1,43 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Appointment.Entity
{
/// <summary>
/// 日期时间
/// </summary>
public class CommDayReq
{
public DateTime Date { get; set; }
}
/// <summary>
/// int型
/// </summary>
public class CommIntReq
{
public int? IntValue { get; set; }
}
/// <summary>
/// id
/// </summary>
public class CommIntIdReq
{
public int Id { get; set; }
}
/// <summary>
/// 分页
/// </summary>
public class CommPageReq
{
public int PageIndex { get; set; }
public int PageSize { get; set; }
public string Keywords { get; set; }
}
}

View File

@@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Appointment.Entity
{
/// <summary>
/// 获取会议室资源
/// </summary>
public class MeetingReq
{
/// <summary>
/// 起始时间
/// </summary>
public DateTime StartDay { get; set; }
/// <summary>
/// 截止时间(包含当天)
/// </summary>
public DateTime EndDay { get; set; }
/// <summary>
/// 客户端保留用户信息
/// </summary>
public string AccountDES { get; set; }
}
}

View File

@@ -0,0 +1,35 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Appointment.Entity
{
/// <summary>
/// 我发起的预订
/// </summary>
public class MyApptApplyPageReq
{
/// <summary>
/// 当前页从1开始
/// </summary>
public int PageIndex { get; set; }
/// <summary>
/// 页大小
/// </summary>
public int PageSize { get; set; }
/// <summary>
/// 客户端保存用户信息
/// </summary>
public string AccountDES { get; set; }
/// <summary>
/// 审核状态:null/0-全部,1-审订中,2-审核通过,3-驳回,6-取消
/// </summary>
/// <remarks>
/// EnumAuditorStatus
/// </remarks>
public int? AuditorStatus { get; set; }
}
}

View File

@@ -0,0 +1,35 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Appointment.Entity
{
/// <summary>
/// 与我有关的预订
/// </summary>
public class MyApptAuditPageReq
{
/// <summary>
/// 当前页从1开始
/// </summary>
public int PageIndex { get; set; }
/// <summary>
/// 页大小
/// </summary>
public int PageSize { get; set; }
/// <summary>
/// 客户端保存用户信息
/// </summary>
public string AccountDES { get; set; }
/// <summary>
/// 审核状态:0-我的审核,1-待我审核,2-我抄送的,3-抄送给我的
/// </summary>
/// <remarks>
/// EnumAuditorStatus
/// </remarks>
public int? AuditorStatus { get; set; }
}
}

View File

@@ -0,0 +1,32 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Appointment.Entity
{
/// <summary>
/// 转审
/// </summary>
public class TransferAuditReq
{
/// <summary>
/// 要审核的主键
/// </summary>
public int ApptId { get; set; }
/// <summary>
/// 客户端保存用户信息
/// </summary>
public string AccountDES { get; set; }
/// <summary>
/// 转审给哪个账号
/// </summary>
public string ToAccount { get; set; }
/// <summary>
/// 审核说明
/// </summary>
public string Remark { get; set; }
}
}

View File

@@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Appointment.Entity
{
/// <summary>
/// 根据日期与场次获取可用会议厅资源
/// </summary>
public class UsableMeetingReq
{
/// <summary>
/// 日期
/// </summary>
public DateTime Day { get; set; }
/// <summary>
/// 场次
/// </summary>
public int[] Groups { get; set; }
/// <summary>
/// 占用状态:0-默认,只返回未占用的,1-返回所有 由Numbers判断是否被占用
/// </summary>
public int Status { get; set; }
}
}

View File

@@ -0,0 +1,22 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Appointment.Entity
{
/// <summary>
/// 获取客房资源
/// </summary>
public class UsableRoomReq
{
/// <summary>
/// 起始时间
/// </summary>
public DateTime StartDay { get; set; }
/// <summary>
/// 截止时间(包含当天)
/// </summary>
public DateTime EndDay { get; set; }
}
}

View File

@@ -0,0 +1,32 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Appointment.Entity
{
/// <summary>
/// 账号密码登录入参
/// </summary>
public class UserLoginAccountReq
{
/// <summary>
/// 用户名
/// </summary>
public string UserName { get; set; }
/// <summary>
/// 密码
/// </summary>
public string UserPwd { get; set; }
/// <summary>
/// 微信小程序wx.login下的code,实现首次授权
/// </summary>
public string Code { get; set; }
/// <summary>
/// 酒店id
/// </summary>
public string Hotelid { get; set; }
}
}

View File

@@ -0,0 +1,22 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Appointment.Entity
{
/// <summary>
/// 微信Code登录
/// </summary>
public class UserLoginCodeReq
{
/// <summary>
/// 微信Code登录
/// </summary>
public string Code { get; set; }
/// <summary>
/// 酒店id
/// </summary>
public string Hotelid { get; set; }
}
}

View File

@@ -0,0 +1,68 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Appointment.Entity
{
/// <summary>
/// 返回审批流程记录
/// </summary>
public class AuditorLogTreeRes
{
/// <summary>
/// 预订编号
/// </summary>
public int Id { get; set; }
/// <summary>
/// 预订申请时间
/// </summary>
public DateTime CreateTime { get; set; }
/// <summary>
/// 预订申请人姓名
/// </summary>
public string SaleName { get; set; }
/// <summary>
/// 状态 EnumAuditorStatus
/// </summary>
public int AuditorStatus { get; set; }
/// <summary>
/// 作废时产生的新单子名称
/// </summary>
public string NewName { get; set; }
/// <summary>
/// 审批流程
/// </summary>
public List<AudioLogRes> AudioLogList { get; set; }
}
public class AudioLogRes
{
/// <summary>
/// 编号
/// </summary>
public int Id { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime? CreateTime { get; set; }
/// <summary>
/// 操作人员姓名
/// </summary>
public string UserName { get; set; }
/// <summary>
/// 审核状态:0-驳回,1-审核通过,2-转审批,3-待审批
/// </summary>
public int Status { get; set; }
public string Remark { get; set; }
}
}

View File

@@ -0,0 +1,61 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Appointment.Entity
{
/// <summary>
/// 用户登录返回结果
/// </summary>
[Serializable]
public class LoginUserRes
{
/// <summary>
/// 用户账号
/// </summary>
public string UserAccount { get; set; }
/// <summary>
/// 用户名称
/// </summary>
public string UserName { get; set; }
/// <summary>
/// 用户组别
/// </summary>
public string UserGroup { get; set; }
/// <summary>
/// 酒店id
/// </summary>
public string Hotelid { get; set; }
}
public class UserInfoRes
{
/// <summary>
/// 绑定微信服务号状态:0-未绑定,1-绑定
/// </summary>
public int BindStatus { get; set; }
public string UserAccount { get; set; }
/// <summary>
/// 明文小程序AppId
/// </summary>
public string Token { get; set; }
/// <summary>
/// 用户角色:0-全部;1-审核员;
/// </summary>
/// <remarks>
/// 预留:2-销售员
/// </remarks>
public int Role { get; set; }
/// <summary>
/// 加密后的用户信息
/// </summary>
public string AccountDES { get; set; }
}
}

View File

@@ -0,0 +1,44 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Appointment.Entity
{
/// <summary>
/// 会议室资源
/// </summary>
public class MeetingRes
{
/// <summary>
/// 资源代码
/// </summary>
public string Code { get; set; }
/// <summary>
/// 资源名称
/// </summary>
public string Descript { get; set; }
/// <summary>
/// 使用状态:R-预定
/// </summary>
public List<MeetingStatus> DayStatus { get; set; }
}
/// <summary>
/// 当天3场使用状态
/// </summary>
public class MeetingStatus
{
/// <summary>
/// 日期
/// </summary>
public DateTime Day { get; set; }
/// <summary>
/// 状态:第1场,第2场,第3场 状态
/// </summary>
public string[] Status { get; set; }
}
}

View File

@@ -0,0 +1,162 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Appointment.Entity
{
/// <summary>
/// 存储过程返回数据
/// </summary>
public class P_xx_res_info_view3_Res
{
/// <summary>
/// 资源类型代码:A-会议室,B-会议室设备,C-汽车,D-自行车.
/// </summary>
public string Sort { get; set; }
/// <summary>
/// 资源编码
/// </summary>
public string Code { get; set; }
/// <summary>
/// 资源名称
/// </summary>
public string Descript { get; set; }
/// <summary>
/// 第一天 上午场
/// </summary>
public string Day11 { get; set; }
/// <summary>
/// 第一天 下午场
/// </summary>
public string Day12 { get; set; }
/// <summary>
/// 第一天 晚上场
/// </summary>
public string Day13 { get; set; }
/// <summary>
/// 第二天 上午场
/// </summary>
public string Day21 { get; set; }
/// <summary>
/// 第二天 下午场
/// </summary>
public string Day22 { get; set; }
/// <summary>
/// 第二天 晚上场
/// </summary>
public string Day23 { get; set; }
/// <summary>
/// 第三天 上午场
/// </summary>
public string Day31 { get; set; }
/// <summary>
/// 第三天 下午场
/// </summary>
public string Day32 { get; set; }
/// <summary>
/// 第三天 晚上场
/// </summary>
public string Day33 { get; set; }
/// <summary>
/// 第四天 上午场
/// </summary>
public string Day41 { get; set; }
/// <summary>
/// 第四天 下午场
/// </summary>
public string Day42 { get; set; }
/// <summary>
/// 第四天 晚上场
/// </summary>
public string Day43 { get; set; }
/// <summary>
/// 第五天 上午场
/// </summary>
public string Day51 { get; set; }
/// <summary>
/// 第五天 下午场
/// </summary>
public string Day52 { get; set; }
/// <summary>
/// 第五天 晚上场
/// </summary>
public string Day53 { get; set; }
/// <summary>
/// 第六天 上午场
/// </summary>
public string Day61 { get; set; }
/// <summary>
/// 第六天 下午场
/// </summary>
public string Day62 { get; set; }
/// <summary>
/// 第六天 晚上场
/// </summary>
public string Day63 { get; set; }
/// <summary>
/// 第七天 上午场
/// </summary>
public string Day71 { get; set; }
/// <summary>
/// 第七天 下午场
/// </summary>
public string Day72 { get; set; }
/// <summary>
/// 第七天 晚上场
/// </summary>
public string Day73 { get; set; }
/// <summary>
/// 第八天 上午场
/// </summary>
public string Day81 { get; set; }
/// <summary>
/// 第八天 下午场
/// </summary>
public string Day82 { get; set; }
/// <summary>
/// 第八天 晚上场
/// </summary>
public string Day83 { get; set; }
/// <summary>
/// 第九天 上午场
/// </summary>
public string Day91 { get; set; }
/// <summary>
/// 第九天 下午场
/// </summary>
public string Day92 { get; set; }
/// <summary>
/// 第九天 晚上场
/// </summary>
public string Day93 { get; set; }
}
}

View File

@@ -0,0 +1,32 @@
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Text;
namespace Appointment.Entity
{
/// <summary>
/// 返回组别
/// </summary>
[Serializable]
public class Uc_groupRes
{
/// <summary>
/// 代码
/// </summary>
[SugarColumn(ColumnName = "op_group")]
public string OpGroup { get; set; }
/// <summary>
/// 名称
/// </summary>
[SugarColumn(ColumnName = "descript")]
public string Descript { get; set; }
/// <summary>
/// 描述
/// </summary>
[SugarColumn(ColumnName = "op_func")]
public string OpFunc { get; set; }
}
}

View File

@@ -0,0 +1,23 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Appointment.Entity
{
/// <summary>
/// 会议厅中间转换
/// </summary>
public class UsableMeetingMiddleRes
{
public string MeetingName { get; set; }
public string Code { get; set; }
public DateTime Stime { get; set; }
public string Sta { get; set; }
public int Sfield { get; set; }
public string Resby { get; set; }
}
}

View File

@@ -0,0 +1,45 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Appointment.Entity
{
[Serializable]
public class UsableRoomRes
{
/// <summary>
/// 日期
/// </summary>
public DateTime? Date { get; set; }
/// <summary>
/// 房型
/// </summary>
public string Type { get; set; }
/// <summary>
/// 排序
/// </summary>
public int? Sequence { get; set; }
/// <summary>
/// 可卖数(可用数量)
/// </summary>
public int Quan { get; set; }
/// <summary>
/// 类型名称
/// </summary>
public string RoomName { get; set; }
/// <summary>
/// 价格
/// </summary>
public decimal? RoomPrice { get; set; }
/// <summary>
/// 总房数
/// </summary>
public int? RoomTotal { get; set; }
}
}

View File

@@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Appointment.Entity
{
public class WeChatLoginRes
{
/// <summary>
/// 微信用户Openid
/// </summary>
public string Openid { get; set; }
public string Guid { get; set; }
}
}

View File

@@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Appointment.Entity
{
public class WxServiceSetRes
{
/// <summary>
/// 用户信息
/// </summary>
public string UserAccount { get; set; }
/// <summary>
/// 微信公共号Code
/// </summary>
public string Code { get; set; }
}
}

View File

@@ -0,0 +1,468 @@
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Net.Http;
using System.Text;
using System.Threading;
namespace Appointment.Entity
{
public class AizhuhotelHelper
{
private static readonly log4net.ILog _logger = log4net.LogManager.GetLogger(typeof(AizhuhotelHelper));
// ---- 获取公众号 Access_token
private class LoveInnGetAccessTokenRes
{
/// <summary>
/// 200-成功,400-出错,
/// </summary>
public int Code { get; set; }
/// <summary>
/// 返回信息:正确、错误都提示
/// </summary>
public string Message { get; set; }
/// <summary>
/// 信息
/// </summary>
public GetAccessTokenRes Data { get; set; }
}
private class GetAccessTokenRes
{
public string Access_token { get; set; }
public int? Expires_in { get; set; }
public string Errcode { get; set; }
public string Errmsg { get; set; }
}
/// <summary>
/// 通过爱住接口获取Accesstoken
/// </summary>
/// <returns></returns>
public static ApiResult<string> AizhuhotelGetAccesstoken()
{
var url = "https://pay.aizhuhotel.com/dlwx/api/WD/LoveInnGetAccessToken";
string AppId = BaseConfig.App(new string[] { "WeChatService", "AppId" });
if (string.IsNullOrWhiteSpace(AppId)) return ApiResult<string>.Failed("配置文件中未获取有效的消息推送AppId");
string AppName = BaseConfig.App(new string[] { "WeChatService", "AppName" });
if (string.IsNullOrWhiteSpace(AppName)) return ApiResult<string>.Failed("配置文件中未获取有效的消息推送AppName");
string AppSecret = BaseConfig.App(new string[] { "WeChatService", "AppSecret" });
if (string.IsNullOrWhiteSpace(AppSecret)) return ApiResult<string>.Failed("配置文件中未获取有效的消息推送AppSecret");
var json = JsonConvert.SerializeObject(new { AppId, AppName, AppSecret });
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Proxy = null;
request.Method = "POST";
request.ContentType = "application/json";
// request.Timeout = 10000;
using (StreamWriter dataStream = new StreamWriter(request.GetRequestStream()))
{
dataStream.Write(json);
dataStream.Close();
}
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
if (response == null)
{
return ApiResult<string>.Failed("远程服务器没有响应!");
}
string encoding = response.ContentEncoding;
if (encoding == null || encoding.Length < 1)
{
encoding = "UTF-8"; //默认编码
}
StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding(encoding));
string retString = reader.ReadToEnd();
var res = JsonConvert.DeserializeObject<LoveInnGetAccessTokenRes>(retString);
if (res.Code != 200) return ApiResult<string>.Failed(res.Message);
if (res.Data == null) return ApiResult<string>.Failed("未获取到有效信息");
return ApiResult<string>.Success(string.Empty, res.Data.Access_token);
}
catch (Exception ex)
{
_logger.Debug(ex.ToString());
return ApiResult<string>.Failed("http请求异常,异常信息:" + ex.Message);
}
}
// ---- 通过微信服务器获取access_token
private static WxAccessTokenData accessCacheToken = null;
public class WxAccessTokenData
{
/// <summary>
/// 获取到的access_token
/// </summary>
public string Access_token { get; set; }
/// <summary>
/// 获取时间
/// </summary>
public DateTime GetDate { get; set; }
}
/// <summary>
/// 微信授权返回结果
/// </summary>
public class WxAuthorizationCodeRep
{
/// <summary>
/// 网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同
/// </summary>
public string Access_token { get; set; }
/// <summary>
/// access_token接口调用凭证超时时间,单位(秒)
/// 错误时不返回
/// </summary>
public int? Expires_in { get; set; }
/// <summary>
/// 用户刷新access_token
/// </summary>
public string Refresh_token { get; set; }
/// <summary>
/// 用户唯一标识
/// </summary>
public string Openid { get; set; }
/// <summary>
/// 用户授权的作用域,使用逗号(,)分隔
/// </summary>
public string Scope { get; set; }
/// <summary>
/// 错误码:返回码
/// 正确时不返回
/// </summary>
public int? Errcode { get; set; }
/// <summary>
/// 错误信息
/// </summary>
public string Errmsg { get; set; }
}
/// <summary>
/// 获取服务号AccessToken
/// </summary>
/// <param name="forceUpdate">强制刷新</param>
/// <returns></returns>
public static ApiResult<string> GetAccessToken(bool forceUpdate = false)
{
try
{
string AppId = BaseConfig.App(new string[] { "WeChatService", "AppId" });
if (string.IsNullOrWhiteSpace(AppId)) return ApiResult<string>.Failed("配置文件中未获取有效的服务号AppId");
string AppSecret = BaseConfig.App(new string[] { "WeChatService", "AppSecret" });
if (string.IsNullOrWhiteSpace(AppSecret)) return ApiResult<string>.Failed("配置文件中未获取有效的服务号AppSecret");
DateTime now = DateTime.Now;
if (forceUpdate == false && accessCacheToken != null && now.AddSeconds(-1 * 55 * 2) < accessCacheToken.GetDate)
{
return ApiResult<string>.Success(string.Empty, accessCacheToken.Access_token);
}
var url = $"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={AppId}&secret={AppSecret}";
using (var http = new HttpClient(new HttpClientHandler()))
{
var res = http.GetAsync(url).Result;
if (res.StatusCode != HttpStatusCode.OK)
{
_logger.Error("获取公众号access_token失败,微信服务接口响应" + res.StatusCode.ToString());
return ApiResult<string>.Failed("获取公众号access_token失败,微信服务接口响应" + res.StatusCode.ToString());
}
var reContent = res.Content.ReadAsStringAsync().Result;
if (!string.IsNullOrWhiteSpace(reContent))
{
var reToken = JsonConvert.DeserializeObject<WxAuthorizationCodeRep>(reContent);
if (!string.IsNullOrEmpty(reToken.Access_token))
{
accessCacheToken = new WxAccessTokenData()
{
Access_token = reToken.Access_token,
GetDate = now
};
return ApiResult<string>.Success(string.Empty, reToken.Access_token);
}
else
{
_logger.Error(reContent);
}
}
return ApiResult<string>.Failed(string.Empty);
}
}
catch (Exception ex)
{
_logger.Error(ex.Message);
return ApiResult<string>.Failed(ex.Message);
}
}
// ---- 获取用户Openid
private class WxServiceRes
{
public string Access_token { get; set; }
public int? Expires_in { get; set; }
public string Refresh_token { get; set; }
public string Openid { get; set; }
public string Errcode { get; set; }
public string Errmsg { get; set; }
}
public static ApiResult<string> GetWxSericeOpenId(string code)
{
if (string.IsNullOrWhiteSpace(code)) return ApiResult<string>.Failed("未获取到有效的code");
string AppId = BaseConfig.App(new string[] { "WeChatService", "AppId" });
if (string.IsNullOrWhiteSpace(AppId)) return ApiResult<string>.Failed("配置文件中未获取有效的消息推送AppId");
string AppSecret = BaseConfig.App(new string[] { "WeChatService", "AppSecret" });
if (string.IsNullOrWhiteSpace(AppSecret)) return ApiResult<string>.Failed("配置文件中未获取有效的消息推送AppSecret");
string url = $"https://api.weixin.qq.com/sns/oauth2/access_token?appid={AppId}&secret={AppSecret}&code={code}&grant_type=authorization_code";
using (var http = new HttpClient(new HttpClientHandler()))
{
var response = http.GetAsync(url).Result;
if (response.StatusCode != HttpStatusCode.OK) return ApiResult<string>.Failed("微信接口无响应");
string res = response.Content.ReadAsStringAsync().Result;
if (!string.IsNullOrWhiteSpace(res))
{
var wxServiceRes = JsonConvert.DeserializeObject<WxServiceRes>(res);
if (!string.IsNullOrWhiteSpace(wxServiceRes.Openid))
{
return ApiResult<string>.Success(string.Empty, wxServiceRes.Openid);
}
else
{
_logger.Error(res);
return ApiResult<string>.Failed(wxServiceRes.Errcode);
}
}
return ApiResult<string>.Failed("返回空");
}
}
// ---- 发送消息模板
public static ApiResult SendTemplateMsg(string touser, string template_id, string url, string first, string remark, params object[] args)
{
try
{
string error = string.Empty;
for (int i = 0; i < 3; i++)
{
error = string.Empty;
var msg = WechatHelper.BuildTemlMsg(touser, template_id, url, first, remark, args);
string accessTokenMode = BaseConfig.App(new string[] { "AccessTokenMode" });
if (string.IsNullOrWhiteSpace(accessTokenMode))
{
_logger.Error("配置文件中未获取有效的AccessTokenMode");
return ApiResult.Failed("配置文件中未获取有效的AccessTokenMode");
}
ApiResult<string> tokenResult = null;
if (i == 0)
{
tokenResult = accessTokenMode == "1" ? AizhuhotelGetAccesstoken() : GetAccessToken();
}
else
{
tokenResult = accessTokenMode == "1" ? AizhuhotelGetAccesstoken() : GetAccessToken(true);
}
if (!tokenResult.IsSuccess)
{
error = "配置文件中未获取有效的AccessTokenMode";
_logger.Error(error);
continue;
}
var postUrl = $"https://api.weixin.qq.com/cgi-bin/message/template/send?access_token={tokenResult.Info}";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(postUrl);
request.Proxy = null;
request.Method = "POST";
request.ContentType = "application/json";
// request.Timeout = 10000;
using (StreamWriter dataStream = new StreamWriter(request.GetRequestStream()))
{
dataStream.Write(msg);
dataStream.Close();
}
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
if (response == null)
{
error = "远程服务器没有响应!";
_logger.Error(error);
continue;
}
string encoding = response.ContentEncoding;
if (encoding == null || encoding.Length < 1)
{
encoding = "UTF-8"; //默认编码
}
StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding(encoding));
string retString = reader.ReadToEnd();
if (!string.IsNullOrWhiteSpace(retString))
{
var sendTemplateMsgRes = JsonConvert.DeserializeObject<SendTemplateMsgRes>(retString);
if (sendTemplateMsgRes.Errmsg.ToLower() == "ok")
{
return ApiResult.Success(string.Empty);
}
else
{
error = $"接收者openid:{touser},错误代码{sendTemplateMsgRes.Errcode}";
_logger.Error(error);
continue;
}
}
}
return ApiResult.Failed(msg: "", info: error);
}
catch (Exception ex)
{
_logger.Debug(ex.ToString());
return ApiResult.Failed(msg: "", info: ex.Message);
}
}
/// <summary>
/// 发送模板消息返回结果
/// </summary>
private class SendTemplateMsgRes
{
/// <summary>
/// 返回代码,0-发送成功
/// </summary>
public int Errcode { get; set; }
/// <summary>
/// 返回消息:"ok"-成功
/// </summary>
public string Errmsg { get; set; }
/// <summary>
/// 发送成功返回编号:失败不返回
/// </summary>
public long? Msgid { get; set; }
}
public static void SendTemplateMsg(List<string> tousers, string template_id, string url, string first, string remark, params object[] args)
{
if (tousers == null || tousers.Count == 0) return;
string accessTokenMode = BaseConfig.App(new string[] { "AccessTokenMode" });
if (string.IsNullOrWhiteSpace(accessTokenMode))
{
_logger.Error("配置文件中未获取有效的AccessTokenMode");
return;
}
ApiResult<string> tokenResult = accessTokenMode == "1" ? AizhuhotelGetAccesstoken() : GetAccessToken();
if (!tokenResult.IsSuccess)
{
_logger.Error(tokenResult.Msg);
return;
}
List<string> msgList = new List<string>();
foreach (var touser in tousers)
{
msgList.Add(WechatHelper.BuildTemlMsg(touser, template_id, url, first, remark, args));
}
int send = 0;
_logger.Info($"发送推送消息,模板:{template_id}, 接收者openId:{string.Join(",", msgList)} 。");
StringBuilder msg = new StringBuilder();
foreach (var itemMsg in msgList)
{
for (int i = 0; i < 3; i++)
{
if (i > 0)
{
Thread.Sleep(100);
tokenResult = accessTokenMode == "1" ? AizhuhotelGetAccesstoken() : GetAccessToken(true);
if (!tokenResult.IsSuccess)
{
_logger.Error(tokenResult.Msg);
continue;
}
}
var postUrl = $"https://api.weixin.qq.com/cgi-bin/message/template/send?access_token={tokenResult.Info}";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(postUrl);
request.Proxy = null;
request.Method = "POST";
request.ContentType = "application/json";
// request.Timeout = 10000;
using (StreamWriter dataStream = new StreamWriter(request.GetRequestStream()))
{
dataStream.Write(itemMsg);
dataStream.Close();
}
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
if (response == null)
{
_logger.Error("微信接口远程服务器没有响应");
continue;
}
string encoding = response.ContentEncoding;
if (encoding == null || encoding.Length < 1)
{
encoding = "UTF-8"; //默认编码
}
StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding(encoding));
string retString = reader.ReadToEnd();
_logger.Info("-->" + itemMsg);
if (!string.IsNullOrWhiteSpace(retString))
{
var sendTemplateMsgRes = JsonConvert.DeserializeObject<SendTemplateMsgRes>(retString);
if (sendTemplateMsgRes.Errmsg.ToLower() == "ok")
{
send += 1;
break;
}
else
{
if (msg.Length == 0) msg.AppendFormat("消息推送失败:消息模板{0}", template_id);
msg.AppendFormat("接收者openid:{0},错误代码{1}", itemMsg, sendTemplateMsgRes.Errcode);
continue;
}
}
}
Thread.Sleep(100);
}
if (msg.Length > 0) _logger.Error(msg.ToString());
}
}
}

View File

@@ -0,0 +1,192 @@
using System;
using System.Collections.Generic;
using System.Net;
using System.Text;
namespace Appointment.Entity
{
/// <summary>
/// 接口返回数据标准
/// </summary>
public class ApiResult
{
/// <summary>
/// 响应状态:true-成功执行,flase-响应异常
/// </summary>
public bool IsSuccess { get { return this.Code == (int)HttpStatusCode.OK; } }
/// <summary>
/// 是否有效执行以IsSuccess为基准
/// 200-有效执行,500-服务错误
/// </summary>
/// <remarks>
/// 此属性为定制化返回代码,例如登录成功并需要返回提示修改密码等相关类似的业务
/// </remarks>
public int Code { get; set; }
/// <summary>
/// 返回消息文本内容
/// </summary>
public string Msg { get; set; }
/// <summary>
/// 返回数据
/// </summary>
public object Info { get; set; }
/// <summary>
/// 构造函数
/// </summary>
/// <param name="code"></param>
/// <param name="msg"></param>
/// <param name="info"></param>
public ApiResult(int code = (int)HttpStatusCode.OK, string msg = "操作成功", object info = null)
{
this.Code = code;
this.Msg = msg;
this.Info = info;
}
/// <summary>
/// 成功执行
/// </summary>
/// <param name="msg"></param>
/// <param name="info"></param>
/// <returns></returns>
public static ApiResult Success(string msg = "操作成功", object info = null)
{
return new ApiResult
{
Code = (int)HttpStatusCode.OK,
Msg = msg,
Info = info,
};
}
/// <summary>
/// 执行错误
/// </summary>
/// <param name="msg"></param>
/// <param name="code"></param>
/// <param name="info"></param>
/// <returns></returns>
public static ApiResult Failed(string msg = "操作失败", object info = null, int code = (int)HttpStatusCode.InternalServerError)
{
return new ApiResult
{
Code = code,
Msg = msg,
Info = info,
};
}
}
/// <summary>
/// 接口返回数据标准
/// </summary>
/// <typeparam name="T"></typeparam>
public class ApiResult<T>
{
/// <summary>
/// 响应状态:true-成功执行,flase-响应异常
/// </summary>
public bool IsSuccess { get { return this.Code == (int)HttpStatusCode.OK; } }
/// <summary>
/// 是否有效执行以IsSuccess为基准
/// 200-有效执行,500-服务错误
/// </summary>
/// <remarks>
/// 此属性为定制化返回代码,例如登录成功并需要返回提示修改密码等相关类似的业务
/// </remarks>
public int Code { get; set; }
/// <summary>
/// 返回消息文本内容
/// </summary>
public string Msg { get; set; }
/// <summary>
/// 返回数据
/// </summary>
public T Info { get; set; }
/// <summary>
/// 构造函数
/// </summary>
/// <param name="code"></param>
/// <param name="msg"></param>
/// <param name="info"></param>
public ApiResult(int code = (int)HttpStatusCode.OK, string msg = "操作成功", T info = default)
{
this.Code = code;
this.Msg = msg;
this.Info = info;
}
/// <summary>
/// 执行成功
/// </summary>
/// <param name="msg"></param>
/// <param name="info"></param>
/// <returns></returns>
public static ApiResult<T> Success(string msg = "操作成功", T info = default)
{
return new ApiResult<T>
{
Code = (int)HttpStatusCode.OK,
Msg = msg,
Info = info,
};
}
/// <summary>
/// 出现错误
/// </summary>
/// <param name="msg"></param>
/// <param name="code"></param>
/// <param name="info"></param>
/// <returns></returns>
public static ApiResult<T> Failed(string msg = "操作失败", int code = (int)HttpStatusCode.InternalServerError, T info = default)
{
return new ApiResult<T>
{
Code = code,
Msg = msg,
Info = info,
};
}
}
/// <summary>
/// 公共Msg
/// </summary>
public class ApiResultMsg
{
/// <summary>
/// 参数无效
/// </summary>
public string InvalidParameter { get { return $"参数[{_InvalidParameter}]无效!"; } set { _InvalidParameter = value; } }
private string _InvalidParameter;
/// <summary>
/// 缺少参数
/// </summary>
public static string NoParameter { get { return "缺少参数!"; } }
/// <summary>
/// 没有权限
/// </summary>
public static string NoPower { get { return "没有权限,操作失败!"; } }
/// <summary>
/// 没有数据
/// </summary>
public static string NoData { get { return "没有数据!"; } }
/// <summary>
/// 数据不正确
/// </summary>
public static string ErrorData { get { return "数据不正确!"; } }
}
}

View File

@@ -0,0 +1,119 @@
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Configuration.Json;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Appointment.Entity
{
public class BaseConfig
{
/// <summary>
/// 缓存配置文件
/// </summary>
static IConfiguration configuration { get; set; }
static BaseConfig()
{
/* 当配置文件更新后,IConfiguration会自动更新,使用缓存为了双重保障 */
DateTime now = DateTime.Now;
if (validTime < now)
{
string path = "appsettings.json";
var _newCreateTime = System.IO.File.GetCreationTime(path);
if (_newCreateTime != createTime)
{
configuration = new ConfigurationBuilder()
.Add(new JsonConfigurationSource
{
Path = path,
Optional = false,
ReloadOnChange = true
}).Build();
createTime = _newCreateTime;
}
validTime = now.AddSeconds(60);
}
}
/// <summary>
/// 缓存配置文件创建时间
/// </summary>
static DateTime createTime;
/// <summary>
/// 缓存配置文件失效时间
/// </summary>
static DateTime validTime;
/// <summary>
/// 获取配置信息(必项)
/// </summary>
/// <param name="sections"></param>
/// <returns>当不存在或为空是输出异常</returns>
public static string App(params string[] sections)
{
try
{
if (sections.Any())
{
string str = configuration[string.Join(":", sections)];
if (!string.IsNullOrEmpty(str))
{
return str;
}
}
throw new Exception($"没有在配置文件中的appSettings中找到{sections.Last()}的配置,请检查配置文件配置!");
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
/// <summary>
/// 获取配置文件
/// </summary>
/// <param name="sections"></param>
/// <param name="defaultValue">默认返回值</param>
/// <returns>当不存在的配置项会返回null</returns>
/// <remarks>
/// 获取实例:
/// BaseConfig.App(new string[] { "Logging" });
/// BaseConfig.App(new string[] { "Logging", "LogLevel" });
/// </remarks>
public static string App(string[] sections, string defaultValue)
{
try
{
if (sections.Any())
{
string stre = configuration[string.Join(":", sections)];
if (!string.IsNullOrEmpty(stre)) return stre;
}
return defaultValue;
}
catch (Exception)
{
return defaultValue;
}
}
/// <summary>
/// 递归获取配置信息数组
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="sections"></param>
/// <returns></returns>
public static List<T> App<T>(params string[] sections)
{
List<T> list = new List<T>();
configuration.Bind(string.Join(":", sections), list);
return list;
}
}
}

View File

@@ -0,0 +1,109 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Security.Cryptography;
using System.Text;
namespace Appointment.Entity
{
public static class CryptoHelper
{
private static byte[] DESKeys = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
/// <summary>
/// MD5小写加密
/// </summary>
/// <param name="token">加密前字符串</param>
/// <returns></returns>
/// <remarks>
/// 使用了UTF8格式
/// </remarks>
public static string Md5(string token)
{
StringBuilder strHash = new StringBuilder();
System.Security.Cryptography.MD5CryptoServiceProvider md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
byte[] bytHash;
bytHash = md5.ComputeHash(Encoding.UTF8.GetBytes(token));
md5.Clear();
for (int i = 0; i < bytHash.Length; i++)
{
strHash.Append(bytHash[i].ToString("x").PadLeft(2, '0'));
}
return strHash.ToString();
}
/// <summary>
/// MD5大写加密
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
/// <remarks>
/// 字符串转为ASCII再加密
/// 与前面方法Md5()的区别是汉字加密后的结构不一致,
/// </remarks>
public static string Md5Hash(string input)
{
string strResult;
using (var md51 = System.Security.Cryptography.MD5.Create())
{
var result = md51.ComputeHash(Encoding.ASCII.GetBytes(input));
strResult = BitConverter.ToString(result);
strResult = strResult.Replace("-", "");
}
return strResult;
}
/// <summary>
/// DES加密字符串
/// </summary>
/// <param name="encryptString">待加密的字符串</param>
/// <param name="encryptKey">加密密钥,要求为8位</param>
/// <returns>加密成功返回加密后的字符串,失败返回源串</returns>
public static string DES_Encode(string encryptString, string encryptKey = "dlhisapi")
{
encryptKey = encryptKey.Substring(0, 8);
encryptKey = encryptKey.PadRight(8, ' ');
byte[] rgbKey = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 8));
byte[] rgbIV = DESKeys;
byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString);
DESCryptoServiceProvider dCSP = new DESCryptoServiceProvider();
MemoryStream mStream = new MemoryStream();
CryptoStream cStream = new CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
cStream.Write(inputByteArray, 0, inputByteArray.Length);
cStream.FlushFinalBlock();
return Convert.ToBase64String(mStream.ToArray());
}
/// <summary>
/// DES解密字符串
/// </summary>
/// <param name="decryptString">待解密的字符串</param>
/// <param name="decryptKey">解密密钥,要求为8位,和加密密钥相同</param>
/// <returns>解密成功返回解密后的字符串,失败返源串</returns>
public static string DES_Decode(string decryptString, string decryptKey = "dlhisapi")
{
try
{
decryptKey = decryptKey.Substring(0, 8);
decryptKey = decryptKey.PadRight(8, ' ');
byte[] rgbKey = Encoding.UTF8.GetBytes(decryptKey);
byte[] rgbIV = DESKeys;
byte[] inputByteArray = Convert.FromBase64String(decryptString);
DESCryptoServiceProvider DCSP = new DESCryptoServiceProvider();
MemoryStream mStream = new MemoryStream();
CryptoStream cStream = new CryptoStream(mStream, DCSP.CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
cStream.Write(inputByteArray, 0, inputByteArray.Length);
cStream.FlushFinalBlock();
return Encoding.UTF8.GetString(mStream.ToArray());
}
catch
{
return "";
}
}
}
}

View File

@@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Appointment.Entity
{
public static class DateTimeHelper
{
/// <summary>
/// 获取sql server最小时间
/// </summary>
public static DateTime MSSQLMinValue { get { return _MSSQLMinValue; }}
private static DateTime _MSSQLMinValue = new DateTime(1753, 1, 1);
}
}

View File

@@ -0,0 +1,24 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Appointment.Entity
{
/// <summary>
/// 上下文分页类型
/// </summary>
/// <typeparam name="T"></typeparam>
/// <remarks>
/// Add:yuangb 2017-3-1
/// </remarks>
public class PagerData<T>
{
public int PageIndex { get; set; }
public int PageSize { get; set; }
public int Total { get; set; }
public List<T> Data { get; set; }
}
}

View File

@@ -0,0 +1,111 @@
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Text;
namespace Appointment.Entity
{
public static class PicHelper
{
/// <summary>
/// 获取图片域名
/// </summary>
/// <returns></returns>
public static string GetPicDomain()
{
string value = string.Empty;
using (System.IO.StreamReader file = System.IO.File.OpenText("appsettings.json"))
{
using JsonTextReader reader = new JsonTextReader(file);
JObject o = (JObject)JToken.ReadFrom(reader);
value = Convert.ToString(o["WebApiDomain"]);
}
if (string.IsNullOrWhiteSpace(value)) throw new Exception("配置信息中缺少WebApiDomain");
return value;
}
/// <summary>
/// 获取图片保存服务器完整路径
/// </summary>
/// <returns></returns>
public static string GetPicRootPath()
{
string value = string.Empty;
using (System.IO.StreamReader file = System.IO.File.OpenText("appsettings.json"))
{
using JsonTextReader reader = new JsonTextReader(file);
JObject o = (JObject)JToken.ReadFrom(reader);
value = Convert.ToString(o["PicRootPath"]);
}
if (string.IsNullOrWhiteSpace(value)) throw new Exception("配置信息中缺少PicRootPath");
return value;
}
/// <summary>
/// 保存图片
/// </summary>
/// <param name="base64str">图片BASE64</param>
/// <returns>NULL-保存图片异常,""-没有图片,其他-保存后的路径</returns>
public static ApiResult<string> SavePic(string base64str)
{
try
{
if (string.IsNullOrWhiteSpace(base64str)) return ApiResult<string>.Success(string.Empty);
if (base64str.ToLower().IndexOf("imgfile") > 0) return ApiResult<string>.Success(base64str.Substring(base64str.ToLower().IndexOf("imgfile") - 1));
DateTime now = DateTime.Now;
var rd = new Random().Next(100, 999);
string filePath = $"/ImgFile/{now:yyyyMM}";
string fileName = $"{now:yyyyMMddHHmmssfff}{rd}";
base64str = base64str.Substring(base64str.IndexOf(",") + 1).Trim('\0');
byte[] arr = Convert.FromBase64String(base64str);
using (MemoryStream ms = new MemoryStream(arr))
{
if (!Directory.Exists(GetPicRootPath() + filePath)) Directory.CreateDirectory(GetPicRootPath() + filePath);
Bitmap bmp = new Bitmap(ms);
ImageCodecInfo myImageCodecInfo = GetEnoderInfo(bmp.RawFormat.ToString().ToLower());
if (bmp.RawFormat.ToString().ToLower().Contains("jpeg"))
{
fileName = $"{fileName}.jpg";
myImageCodecInfo = GetEnoderInfo("png");
}
else
{
fileName = $"{fileName}.{bmp.RawFormat}";
}
EncoderParameters destEncParams = new EncoderParameters(1);
destEncParams.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 100);
bmp.Save($"{GetPicRootPath()}{filePath}/{fileName}", myImageCodecInfo, destEncParams);
ms.Close();
}
return ApiResult<string>.Success($"{filePath}/{fileName}");
}
catch (Exception ex)
{
return ApiResult<string>.Failed("保存图片失败,失败信息:" + ex.Message);
}
}
#region private
private static ImageCodecInfo GetEnoderInfo(string mineType)
{
ImageCodecInfo[] myEncoders = ImageCodecInfo.GetImageEncoders();
foreach (System.Drawing.Imaging.ImageCodecInfo myEncoder in myEncoders)
if (myEncoder.MimeType.Contains(mineType))
return myEncoder;
return null;
}
#endregion
}
}

View File

@@ -0,0 +1,44 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
namespace Appointment.Entity.Utility
{
/// <summary>
/// 正则表达式
/// </summary>
public static class RegexHelper
{
/// <summary>
/// 判断是否为手机号码
/// </summary>
/// <param name="value">字符串</param>
/// <returns>True-是,False-否</returns>
/// <remarks>
/// Add:yuangb 2016-6-12
/// </remarks>
public static bool IsPhone(this string value)
{
value = value.Replace("+86", "");
return Regex.IsMatch(value, @"^1[3-9]{1}[0-9]{9}$");
}
public static TChild AutoCopy<TParent, TChild>(TParent parent) where TChild : TParent, new()
{
TChild child = new TChild();
var ParentType = typeof(TParent);
var Properties = ParentType.GetProperties();
foreach (var Propertie in Properties)
{
//循环遍历属性
if (Propertie.CanRead && Propertie.CanWrite)
{
//进行属性拷贝
Propertie.SetValue(child, Propertie.GetValue(parent, null), null);
}
}
return child;
}
}
}

View File

@@ -0,0 +1,150 @@
using System;
using System.Collections.Generic;
using System.Reflection;
using System.Text;
namespace Appointment.Entity
{
public static class StringHelper
{
/// <summary>
/// 去除对象字符串后面的空格
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="t"></param>
/// <returns></returns>
public static T Replace<T>(this T t)
{
string jsonStr = Newtonsoft.Json.JsonConvert.SerializeObject(t);
while (true)
{
if (jsonStr.IndexOf(" \"") > -1)
{
jsonStr = jsonStr.Replace(" \"","\"");
}
else
{
break;
}
}
return Newtonsoft.Json.JsonConvert.DeserializeObject<T>(jsonStr);
}
/// <summary>
/// 得到一个汉字的拼音第一个字母,如果是一个英文字母则直接返回大写字母
/// </summary>
/// <param name="CnChar">单个汉字</param>
/// <returns>单个大写字母</returns>
public static string GetCharSpellCode(string CnChar)
{
long iCnChar;
byte[] ZW = System.Text.Encoding.Default.GetBytes(CnChar);
//如果是字母,则直接返回首字母
if (ZW.Length == 1)
{
return CnChar.ToUpper();
}
else
{
int i1 = (short)(ZW[0]);
int i2 = (short)(ZW[1]);
iCnChar = i1 * 256 + i2;
}
if ((iCnChar >= 45217) && (iCnChar <= 45252))
{
return "A";
}
else if ((iCnChar >= 45253) && (iCnChar <= 45760))
{
return "B";
}
else if ((iCnChar >= 45761) && (iCnChar <= 46317))
{
return "C";
}
else if ((iCnChar >= 46318) && (iCnChar <= 46825))
{
return "D";
}
else if ((iCnChar >= 46826) && (iCnChar <= 47009))
{
return "E";
}
else if ((iCnChar >= 47010) && (iCnChar <= 47296))
{
return "F";
}
else if ((iCnChar >= 47297) && (iCnChar <= 47613))
{
return "G";
}
else if ((iCnChar >= 47614) && (iCnChar <= 48118))
{
return "H";
}
else if ((iCnChar >= 48119) && (iCnChar <= 49061))
{
return "J";
}
else if ((iCnChar >= 49062) && (iCnChar <= 49323))
{
return "K";
}
else if ((iCnChar >= 49324) && (iCnChar <= 49895))
{
return "L";
}
else if ((iCnChar >= 49896) && (iCnChar <= 50370))
{
return "M";
}
else if ((iCnChar >= 50371) && (iCnChar <= 50613))
{
return "N";
}
else if ((iCnChar >= 50614) && (iCnChar <= 50621))
{
return "O";
}
else if ((iCnChar >= 50622) && (iCnChar <= 50905))
{
return "P";
}
else if ((iCnChar >= 50906) && (iCnChar <= 51386))
{
return "Q";
}
else if ((iCnChar >= 51387) && (iCnChar <= 51445))
{
return "R";
}
else if ((iCnChar >= 51446) && (iCnChar <= 52217))
{
return "S";
}
else if ((iCnChar >= 52218) && (iCnChar <= 52697))
{
return "T";
}
else if ((iCnChar >= 52698) && (iCnChar <= 52979))
{
return "W";
}
else if ((iCnChar >= 52980) && (iCnChar <= 53640))
{
return "X";
}
else if ((iCnChar >= 53689) && (iCnChar <= 54480))
{
return "Y";
}
else if ((iCnChar >= 54481) && (iCnChar <= 55289))
{
return "Z";
}
else
return ("?");
}
}
}

View File

@@ -0,0 +1,123 @@
using System;
using System.Collections.Generic;
using System.Net;
using System.Net.Http;
using System.Text;
namespace Appointment.Entity
{
public class WechatHelper
{
private static HttpClient _HttpClient = null;
static WechatHelper()
{
_HttpClient = new HttpClient(new HttpClientHandler());
}
public object JsonConvert { get; private set; }
/// <summary>
/// 根据小程序登录code获取用户信息
/// </summary>
/// <param name="code"></param>
/// <returns></returns>
public ApiResult<WeChatLoginRes> Code2Session(string code)
{
string appId = BaseConfig.App(new string[] { "WeChat", "AppId" });
if(string.IsNullOrWhiteSpace(appId)) ApiResult<WeChatLoginRes>.Failed("缺少配置参数 [AppId]!");
string appSecret = BaseConfig.App(new string[] { "WeChat", "AppSecret" });
if (string.IsNullOrWhiteSpace(appSecret)) ApiResult<WeChatLoginRes>.Failed("缺少配置参数 [AppSecret]!");
if (string.IsNullOrWhiteSpace(code) || string.IsNullOrWhiteSpace(appId) || string.IsNullOrWhiteSpace(appSecret))
{
return ApiResult<WeChatLoginRes>.Failed("获取小程序配置信息出错");
}
string url = $"https://api.weixin.qq.com/sns/jscode2session?appid={appId}&secret={appSecret}&js_code={code}&grant_type=authorization_code";
var res = _HttpClient.GetAsync(url).Result;
if (res.StatusCode == HttpStatusCode.OK)
{
var result = Encoding.Default.GetString(res.Content.ReadAsByteArrayAsync().Result);
if (string.IsNullOrWhiteSpace(result) || result.IndexOf("session_key") == -1)
{
return ApiResult<WeChatLoginRes>.Failed("调用微信接口失败,可能code已失效");
}
var weChatDto = Newtonsoft.Json.JsonConvert.DeserializeObject<WeChatLoginRes>(result);
return ApiResult<WeChatLoginRes>.Success("", weChatDto);
}
else
{
return ApiResult<WeChatLoginRes>.Failed("调用微信接口失败");
}
}
//
public class LoveInnGetAccessTokenReq
{
public string AppId { get; set; }
public string AppName { get; set; }
public string AppSecret { get; set; }
}
/// <summary>
/// 模版信息
/// </summary>
/// <returns></returns>
public static string BuildTemlMsg(string toUser, string tmplId, string url, string first, string remark, params object[] args)
{
string appId = BaseConfig.App(new string[] { "WeChat", "AppId" });
if (string.IsNullOrWhiteSpace(appId)) ApiResult<WeChatLoginRes>.Failed("缺少配置参数 [AppId]!");
StringBuilder sbMsg = new StringBuilder();
sbMsg.Append("{");
sbMsg.AppendFormat("\"touser\":\"{0}\",", toUser);
sbMsg.AppendFormat("\"template_id\":\"{0}\",", tmplId);
sbMsg.Append("\"miniprogram\":{");
sbMsg.AppendFormat("\"appid\":\"{0}\",", appId);
sbMsg.AppendFormat("\"pagepath\":\"{0}\"", url);
sbMsg.Append("},");
sbMsg.Append("\"topcolor\":\"#FF0000\",");
sbMsg.Append("\"data\":");
sbMsg.Append("{");
sbMsg.Append("\"first\":");
sbMsg.Append("{");
sbMsg.AppendFormat("\"value\":\"{0}\",", first);
sbMsg.AppendFormat("\"color\":\"{0}\"", "#333333");
sbMsg.Append("},");
for (int i = 0; i < args.Length; i++)
{
sbMsg.AppendFormat("\"keyword{0}\":", i + 1);
sbMsg.Append("{");
sbMsg.AppendFormat("\"value\":\"{0}\",", args[i]);
sbMsg.AppendFormat("\"color\":\"{0}\"", "#333333");
sbMsg.Append("},");
}
sbMsg.Append("\"remark\":");
sbMsg.Append("{");
sbMsg.AppendFormat("\"value\":\"{0}\",", remark);
sbMsg.AppendFormat("\"color\":\"{0}\"", "#333333");
sbMsg.Append("}");
sbMsg.Append("}");
sbMsg.Append("}");
return sbMsg.ToString();
}
}
}

View File

@@ -0,0 +1,116 @@
using Appointment.Entity.Utility;
using System;
using System.Collections.Generic;
using System.Reflection;
using System.Text;
namespace Appointment.Entity.ValidateAttribute
{
/// <summary>
/// 验证的执行
/// </summary>
/// <remarks>
/// Add:yuangb 2019-3-5
/// </remarks>
public static class AttributeExtend
{
/// <summary>
/// 全部实体属性根据特性校验
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="t">验证的实体</param>
/// <returns></returns>
public static ApiResult Validate<T>(this T t) where T : class
{
List<string> validates = new List<string>();
Type type = t.GetType();
foreach (PropertyInfo prop in type.GetProperties())
{
object oValue = prop.GetValue(t);
foreach (ValidateAttribute attr in prop.GetCustomAttributes(typeof(ValidateAttribute), true))
{
string msg = attr.Validate(oValue);
if (!string.IsNullOrWhiteSpace(msg)) validates.Add(msg);
}
// 2020-10-12 添加屏蔽HTML注入
if (prop.PropertyType.Name == "String")
{
string sValue = (string)prop.GetValue(t);
if (sValue != null && !string.IsNullOrEmpty(sValue))
{
var isIgnoreHtml = prop.GetCustomAttribute(typeof(IsIgnoreHtml), true);
if (isIgnoreHtml == null)
{
sValue = sValue.Replace("<", "&lt;").Replace(">", "&gt;");
prop.SetValue(t, sValue);
}
}
}
}
return validates.Count == 0 ? ApiResult.Success() : ApiResult.Failed(string.Join(",", validates));
}
/// <summary>
/// 指定实体的属性名称,根据特性进行校验
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="t">验证的实体</param>
/// <param name="list">实体的属性名称</param>
/// <returns></returns>
public static ApiResult Validate<T>(this T t, List<string> list) where T : class
{
List<string> validates = new List<string>();
Type type = t.GetType();
foreach (PropertyInfo prop in type.GetProperties())
{
object oValue = prop.GetValue(t);
if (list.Contains(prop.Name))
{
foreach (ValidateAttribute attr in prop.GetCustomAttributes(typeof(ValidateAttribute), true))
{
string msg = attr.Validate(oValue);
if (!string.IsNullOrWhiteSpace(msg)) validates.Add(msg);
}
}
}
return validates.Count == 0 ? ApiResult.Success() : ApiResult.Failed(string.Join(",", validates));
}
/// <summary>
/// 使用委托,全部实体属性根据特性校验
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="t">验证的实体</param>
/// <param name="func">一个ApiResult入参,一个ApiResult返回值的委托</param>
/// <returns></returns>
public static ApiResult Validate<T>(this T t, Func<ApiResult, ApiResult> func)
{
List<string> validates = new List<string>();
Type type = t.GetType();
foreach (PropertyInfo prop in type.GetProperties())
{
object oValue = prop.GetValue(t);
foreach (ValidateAttribute attr in prop.GetCustomAttributes(typeof(ValidateAttribute), true))
{
string msg = attr.Validate(oValue);
if (!string.IsNullOrWhiteSpace(msg))
{
validates.Add(msg);
}
}
}
return validates.Count == 0 ? func.Invoke(ApiResult.Success()) : ApiResult.Failed(string.Join(",", validates));
}
}
}

View File

@@ -0,0 +1,20 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Appointment.Entity.ValidateAttribute
{
/// <summary>
/// 忽略HTML标签
/// </summary>
/// <remarks>
/// Add:yuangb 2019-10-15
/// </remarks>
public class IsIgnoreHtml : ValidateAttribute
{
public override string Validate(object oValue)
{
return "";
}
}
}

View File

@@ -0,0 +1,52 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Appointment.Entity.ValidateAttribute
{
/// <summary>
/// 整型数值值范围效验
/// </summary>
/// <remarks>
/// Add:yuangb 2019-3-11
/// 使用格式:实体属性前加[IntValue(minValue: 1000, maxValue: 999999, ErrorMessage = "验证码长度不正确")]
/// </remarks>
public class LongValueAttribute : ValidateAttribute
{
/// <summary>
/// 报错提示
/// </summary>
public string ErrorMessage { get; set; }
/// <summary>
/// 最小值(包含)
/// </summary>
public long MinValue { get; private set; }
/// <summary>
/// 最大值(包含)
/// </summary>
public long MaxValue { get; private set; }
/// <summary>
///
/// </summary>
/// <param name="minValue">最小值(包含)</param>
/// <param name="maxValue">最大值(包含)</param>
public LongValueAttribute(long minValue, long maxValue)
{
this.MinValue = minValue;
this.MaxValue = maxValue;
}
public override string Validate(object oValue)
{
if (oValue != null)
{
long lValue = Convert.ToInt64(oValue);
if (lValue < MinValue || lValue > MaxValue) return ErrorMessage;
}
return null;
}
}
}

View File

@@ -0,0 +1,34 @@
using Appointment.Entity.Utility;
using System;
using System.Collections.Generic;
using System.Text;
namespace Appointment.Entity.ValidateAttribute
{
/// <summary>
/// 手机格式校验
/// 注意:当存在内容时才校验,如果为必填信息,请同时使用必填特性
/// </summary>
/// <remarks>
/// Add:yuangb 2019-3-11
/// 使用格式:实体属性前加 [Phone(ErrorMessage = "手机号码不正确")]
/// </remarks>
public class PhoneAttribute : ValidateAttribute
{
/// <summary>
/// 报错提示信息
/// </summary>
public string ErrorMessage { get; set; }
public override string Validate(object oValue)
{
if (oValue != null && !string.IsNullOrWhiteSpace(oValue.ToString()))
{
string sPhone = oValue.ToString().Replace("+86", "");
if (!sPhone.IsPhone()) return ErrorMessage;
}
return null;
}
}
}

View File

@@ -0,0 +1,45 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Appointment.Entity.ValidateAttribute
{
/// <summary>
/// 字符串长度校验特性
/// </summary>
/// <remarks>
/// Add:yuangb 2019-3-5
/// 使用格式:实体属性前加[StringLength(50, MinLength = 2, ErrorMessage = "获取微信用户信息失败")]
/// </remarks>
public class StringLengthAttribute : ValidateAttribute
{
/// <summary>
/// 最小长度
/// </summary>
public int MinLength { get; set; }
/// <summary>
/// 报错提示
/// </summary>
public string ErrorMessage { get; set; }
private int _maxLength;
public StringLengthAttribute(int maxLength)
{
this._maxLength = maxLength;
}
public override string Validate(object oValue)
{
if (oValue == null || string.IsNullOrWhiteSpace(oValue.ToString()) || oValue.ToString().Length > this._maxLength || oValue.ToString().Length < this.MinLength)
{
return ErrorMessage;
}
else
{
return null;
}
}
}
}

View File

@@ -0,0 +1,37 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Appointment.Entity.ValidateAttribute
{
/// <summary>
/// 字符串最大长度
/// </summary>
/// <remarks>
/// Add:yuangb 2020-12-9
/// 使用格式:实体属性前加 [StringMaxLength(200, ErrorMessage = "备注说明最大长度200个字符")]
/// </remarks>
public class StringMaxLengthAttribute : ValidateAttribute
{
private int _MaxLength = 0;
/// <summary>
/// 报错提示
/// </summary>
public string ErrorMessage { get; set; }
public StringMaxLengthAttribute(int maxLength)
{
_MaxLength = maxLength;
}
public override string Validate(object oValue)
{
if (oValue != null && oValue.ToString().Length > _MaxLength)
{
return ErrorMessage;
}
return null;
}
}
}

View File

@@ -0,0 +1,33 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Appointment.Entity.ValidateAttribute
{
/// <summary>
/// 必填项
/// </summary>
/// <remarks>
/// Add:yuangb 2019-3-11
/// [StringRequired(ErrorMessage ="状态不能为空")]
/// </remarks>
public class StringRequiredAttribute : ValidateAttribute
{
/// <summary>
/// 报错提示信息
/// </summary>
public string ErrorMessage { get; set; }
public override string Validate(object oValue)
{
if (oValue == null || string.IsNullOrWhiteSpace(oValue.ToString()))
{
return ErrorMessage;
}
else
{
return null;
}
}
}
}

View File

@@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Appointment.Entity.ValidateAttribute
{
/// <summary>
/// 特性基类
/// </summary>
/// <remarks>
/// Add:yuangb 2019-3-5
/// </remarks>
public abstract class ValidateAttribute : Attribute
{
public abstract string Validate(object oValue);
}
}