Commit 849f0c76 authored by liudong1993's avatar liudong1993

1 合同

parent 229296a6
......@@ -255,5 +255,10 @@ namespace REBORN.Common
/// 账号集团共享
/// </summary>
public int IsGroupShow { get; set; }
/// <summary>
/// 合同模板 0系统合同 1旅游局合同
/// </summary>
public int ContractTemplete { get; set; }
}
}
using Newtonsoft.Json;
using REBORN.Common.Plugin;
using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Security.Cryptography;
using System.Text;
using System.Text.Json;
using System.Threading;
using System.Threading.Tasks;
namespace OneTwoThreeZeroOne.ContractService{
public class TourismContractService
{
private readonly string _baseUrl;
private readonly string _appId;
private readonly string _signKey;
private static readonly JsonSerializerOptions JsonOptions = new JsonSerializerOptions
{
PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
PropertyNameCaseInsensitive = true,
WriteIndented = false
};
public TourismContractService(bool isProduction, string appId, string signKey)
{
_baseUrl = isProduction ?
"https://open-api.mr.mct.gov.cn" :
"http://econtract-api.stage.tourage.cn";
_appId = appId;
_signKey = signKey;
}
/// <summary>
/// 转json
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public string GetJson(EContracts.ApplyContractRequest request) {
var payload = System.Text.Json.JsonSerializer.Serialize(request, JsonOptions);
return payload;
}
// 1. 签名生成方法
private string GenerateSignature(long timestamp)
{
string signStr = _signKey + timestamp;
using (var md5 = MD5.Create())
{
byte[] hash = md5.ComputeHash(Encoding.UTF8.GetBytes(signStr));
return Convert.ToBase64String(hash);
}
}
// 2. 创建带签名的HTTP请求
private HttpWebRequest CreateRequest(string endpoint, string method)
{
var request = (HttpWebRequest)WebRequest.Create(_baseUrl + endpoint);
request.Method = method;
request.ContentType = "application/json;charset=utf-8";
long timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
string signature = GenerateSignature(timestamp);
request.Headers.Add("x-12301-source", _appId);
request.Headers.Add("x-12301-key", _appId);
request.Headers.Add("x-12301-version", "1.1.1");
request.Headers.Add("x-12301-timestamp", timestamp.ToString());
request.Headers.Add("x-12301-signature", signature);
return request;
}
// 3. 申报合同接口 (2.1.2)
public ContractResponse ApplyContract(string contract, string existingContractNumber = null)
{
string endpoint = existingContractNumber != null ?
$"/v1/econtract/apply/{existingContractNumber}" :
"/v1/econtract/apply";
Console.WriteLine("1");
var request = CreateRequest(endpoint, "POST");
using (var stream = request.GetRequestStream())
using (var writer = new StreamWriter(stream, Encoding.UTF8))
{
writer.Write(contract);
}
using (var response = request.GetResponse())
using (var reader = new StreamReader(response.GetResponseStream()))
{
string rstr = reader.ReadToEnd();
LogHelper.Write("合同返回数据:" + rstr);
return JsonConvert.DeserializeObject<ContractResponse>(rstr);
}
}
// 4. 获取合同状态接口 (2.1.12)
public ContractStatusResponse GetContractStatus(string contractNumber)
{
var request = CreateRequest($"/v1/econtract/status/{contractNumber}", "GET");
using (var response = request.GetResponse())
using (var reader = new StreamReader(response.GetResponseStream()))
{
return JsonConvert.DeserializeObject<ContractStatusResponse>(reader.ReadToEnd());
}
}
// 5. 作废合同接口 (2.1.6)
public BaseResponse InvalidateContract(string contractNumber)
{
var request = CreateRequest($"/v1/econtract/invalidate/{contractNumber}", "POST");
using (var response = request.GetResponse())
using (var reader = new StreamReader(response.GetResponseStream()))
{
return JsonConvert.DeserializeObject<BaseResponse>(reader.ReadToEnd());
}
}
/// <summary>
/// 2.1.9 重发作废短信接口
/// </summary>
/// <param name="contractNumber">合同编号</param>
/// <param name="phone">可选参数:指定接收短信的手机号</param>
/// <returns>操作结果</returns>
public BaseResponse ResendSms(string contractNumber, string phone = null)
{
// 构建请求路径,包含可选手机号参数
string endpoint = $"/v1/econtract/resend/{contractNumber}";
if (!string.IsNullOrEmpty(phone))
{
endpoint += $"?phone={Uri.EscapeDataString(phone)}";
}
// 创建带签名的HTTP POST请求
var request = CreateRequest(endpoint, "POST");
// 发送请求并获取响应
using (var response = request.GetResponse())
using (var reader = new StreamReader(response.GetResponseStream()))
{
return JsonConvert.DeserializeObject<BaseResponse>(reader.ReadToEnd());
}
}
/// <summary>
/// 2.1.8 重发作废短信接口(区别:2.1.9是重发签署短信,2.1.8是重发作废短信)
/// </summary>
/// <param name="contractNumber">合同编号</param>
/// <param name="phone">可选参数:指定接收短信的手机号</param>
/// <returns>操作结果</returns>
public BaseResponse ResendInvalidationSms(string contractNumber, string phone = null)
{
// 构建请求路径,包含可选手机号参数
string endpoint = $"/v1/econtract/validate/resend/{contractNumber}";
if (!string.IsNullOrEmpty(phone))
{
endpoint += $"?phone={Uri.EscapeDataString(phone)}";
}
// 创建带签名的HTTP POST请求
var request = CreateRequest(endpoint, "POST");
// 发送请求并获取响应
using (var response = request.GetResponse())
using (var reader = new StreamReader(response.GetResponseStream()))
{
return JsonConvert.DeserializeObject<BaseResponse>(reader.ReadToEnd());
}
}
}
// 合同请求数据结构
public class ContractRequest
{
public string ERPContractId { get; set; }
public string TemplateId { get; set; }
// 其他字段根据文档添加...
}
public class SignatoryID
{
public int IDType { get; set; }
public string IDNumber { get; set; }
}
// 响应数据结构
public class BaseResponse
{
public string ApiVersion { get; set; }
public ErrorInfo Error { get; set; }
public object Data { get; set; }
}
public class ContractResponse : BaseResponse
{
public new ContractData Data { get; set; }
}
public class ContractData
{
public string ContractNumber { get; set; }
public string SigningURL { get; set; }
public string QRCodeURL { get; set; }
public string FileURL { get; set; }
}
public class ContractStatusResponse : BaseResponse
{
public new StatusData Data { get; set; }
}
public class StatusData
{
public int State { get; set; }
}
public class ErrorInfo
{
public int Code { get; set; }
public string Message { get; set; }
}
}
This diff is collapsed.
......@@ -268,6 +268,8 @@
<Compile Include="API\RequestParm.cs" />
<Compile Include="API\AirOrderInfo.cs" />
<Compile Include="API\CustomerAccountInfo.cs" />
<Compile Include="ContractAPI\EContractClientV2.cs" />
<Compile Include="ContractAPI\Models.cs" />
<Compile Include="Data\AreaDataHelper.cs" />
<Compile Include="Data\PriceShopHelper.cs" />
<Compile Include="EduMessage\MessageHelper.cs" />
......
......@@ -1009,5 +1009,41 @@ namespace REBORN.Model.Entity.Dmc
/// 尾款
/// </summary>
public decimal FinalPrice { get; set; }
/// <summary>
/// 第三方合同ID
/// </summary>
public string ThirdContractID { get; set; }
/// <summary>
/// 签署链接
/// </summary>
public string ThirdContractSignUrl { get; set; }
/// <summary>
/// 二维码链接
/// </summary>
public string ThirdContractQRCode { get; set; }
/// <summary>
/// 第三方合同状态 1:已生成,2:已签署(最终状态,合同完成签署),3:已作废(最终状态,合同完成作废),4:签署(中间状态,表示某个参与者完成签署不表示合同完成签署),5:作废(中间状态,表示某个参与者完成作废不表示合同完成签署)
/// </summary>
public int ThirdContractState { get; set; }
/// <summary>
/// 合同文件地址
/// </summary>
public string ThirdContractFileUrl { get; set; }
/// <summary>
/// 合同模板 0系统合同 1旅游局合同
/// </summary>
public int ContractTemplete { get; set; }
/// <summary>
/// 费用支付说明
/// </summary>
public string PriceDescription { get; set; }
}
}
......@@ -1040,5 +1040,101 @@ namespace REBORN.Model.Entity.Dmc
get;
set;
}
/// <summary>
/// 第三方合同ID
/// </summary>
public string ThirdContractID { get; set; }
/// <summary>
/// 签署链接
/// </summary>
public string ThirdContractSignUrl { get; set; }
/// <summary>
/// 二维码链接
/// </summary>
public string ThirdContractQRCode { get; set; }
/// <summary>
/// 第三方合同状态 1:已生成,2:已签署(最终状态,合同完成签署),3:已作废(最终状态,合同完成作废),4:签署(中间状态,表示某个参与者完成签署不表示合同完成签署),5:作废(中间状态,表示某个参与者完成作废不表示合同完成签署)
/// </summary>
public int ThirdContractState { get; set; }
/// <summary>
/// 合同文件地址
/// </summary>
public string ThirdContractFileUrl { get; set; }
/// <summary>
/// 机票其他费用及说明
/// </summary>
public string TicketDescription { get; set; }
/// <summary>
/// 已包含税费
/// </summary>
public decimal TicketTax { get; set; }
/// <summary>
/// 酒店其他费用及说明
/// </summary>
public string HotelDescription { get; set; }
/// <summary>
/// 车次合计
/// </summary>
public int PickUpTNumber { get; set; }
/// <summary>
/// 用车其他费用及说明
/// </summary>
public string PickUpDescription { get; set; }
/// <summary>
/// 签证人数合计
/// </summary>
public int VisaTNumber { get; set; }
/// <summary>
/// 签证资料提交最终期限
/// </summary>
public string VisaDeadline { get; set; }
/// <summary>
/// 其他服务人数合计
/// </summary>
public int OtherTNumber { get; set; }
/// <summary>
/// 签证其他费用及说明
/// </summary>
public string VisaDescription { get; set; }
/// <summary>
/// 含购物景点名称
/// </summary>
public string ShopTicketName { get; set; }
/// <summary>
/// 旅客代表 性别
/// </summary>
public int Tourists_Sex { get; set; }
/// <summary>
/// 旅客代表 单位
/// </summary>
public string Tourists_Unit { get; set; }
/// <summary>
/// 证件类型 1:身份证,2:士官证,3:港澳通行证,4:护照,5:赴台证,6:回乡证,7:台胞证,8:其他
/// </summary>
public int Tourists_IDType { get; set; }
/// <summary>
/// 合同模板 0系统合同 1旅游局合同
/// </summary>
public int ContractTemplete { get; set; }
}
}
......@@ -272,5 +272,35 @@ namespace REBORN.Model.Entity
/// 财务单据抬头 (没有就使用集团名称)
/// </summary>
public string FinanceTitle { get; set; }
/// <summary>
/// 合同旅行社名称
/// </summary>
public string ContractTravelName { get; set; }
/// <summary>
/// 合同旅行社地址
/// </summary>
public string ContractTravelAddress { get; set; }
/// <summary>
/// 经营许可证
/// </summary>
public string ContractLicenseNum { get; set; }
/// <summary>
/// 合同模板 0系统合同 1旅游局合同
/// </summary>
public int ContractTemplete { get; set; }
/// <summary>
/// 合同是否启用审核 1启用
/// </summary>
public int ContractAudit { get; set; }
/// <summary>
/// 合同前缀
/// </summary>
public int ContractNoPrefix { get; set; }
}
}
\ No newline at end of file
......@@ -28,6 +28,11 @@ namespace REBORN.Model.Extend.Dmc
/// 公司章信息
/// </summary>
public string ZhangImg { get; set; }
/// <summary>
/// 是否上传旅游局合同 1是
/// </summary>
public int IsApplyContract { get; set; }
}
/// <summary>
......
......@@ -166,6 +166,11 @@ namespace REBORN.Model.Extend.Dmc
/// </summary>
public string StartDateStr { get; set; }
/// <summary>
/// 是否上传合同 1是
/// </summary>
public int IsApplyContract { get; set; }
}
/// <summary>
......@@ -367,6 +372,16 @@ namespace REBORN.Model.Extend.Dmc
/// 定金
/// </summary>
public string DepositPrice { get; set; }
/// <summary>
/// 机票类型 1单程 2往返
/// </summary>
public int AirType { get; set; }
/// <summary>
/// 张数
/// </summary>
public int TotalNumber { get; set; }
}
/// <summary>
......@@ -433,6 +448,16 @@ namespace REBORN.Model.Extend.Dmc
/// 离店日期
/// </summary>
public string OutDate { get; set; }
/// <summary>
/// 国家
/// </summary>
public string Country { get; set; }
/// <summary>
/// 房型
/// </summary>
public string RoomType { get; set; }
}
/// <summary>
......@@ -464,6 +489,16 @@ namespace REBORN.Model.Extend.Dmc
/// 用车类型(单程/往返)
/// </summary>
public string UseBusType { get; set; }
/// <summary>
/// 车型
/// </summary>
public string BusType { get; set; }
/// <summary>
/// 单价
/// </summary>
public decimal BusPrice { get; set; }
}
/// <summary>
......@@ -471,13 +506,38 @@ namespace REBORN.Model.Extend.Dmc
/// </summary>
public class ContractVisa
{
/// <summary>
/// 签证类型
/// </summary>
public string VisaType { get; set; }
/// <summary>
/// 国家
/// </summary>
public string Country { get; set; }
/// <summary>
/// 停留时间
/// 签证原因
/// </summary>
public string VisaReason { get; set; }
/// <summary>
/// 签证日期
/// </summary>
public string VisaDate { get; set; }
/// <summary>
/// 入境次数
/// </summary>
public int Number { get; set; }
/// <summary>
/// 签注工作日
/// </summary>
public string SigningDay { get; set; }
/// <summary>
/// 停留时间 (出行日期)
/// </summary>
public string StopTime { get; set; }
......
......@@ -194,6 +194,11 @@ namespace REBORN.Module.PlatformModule
bmodel.StandardCurrencyId = demodel.StandardCurrencyId;
bmodel.StandardCurrencyName = demodel.StandardCurrencyName;
bmodel.FinanceTitle = demodel.FinanceTitle;
bmodel.ContractTravelName = demodel.ContractTravelName;
bmodel.ContractTravelAddress = demodel.ContractTravelAddress;
bmodel.ContractLicenseNum = demodel.ContractLicenseNum;
bmodel.ContractNoPrefix = demodel.ContractNoPrefix;
bmodel.ContractTemplete = demodel.ContractTemplete;
flag = respository.Update(bmodel);
if (flag)
{
......@@ -267,7 +272,12 @@ namespace REBORN.Module.PlatformModule
IsFreeFee=demodel.IsFreeFee,
ServiceFee=demodel.ServiceFee,
StandardCurrencyId=demodel.StandardCurrencyId,
FinanceTitle = demodel.FinanceTitle
FinanceTitle = demodel.FinanceTitle,
ContractTravelName = demodel.ContractTravelName,
ContractTravelAddress = demodel.ContractTravelAddress,
ContractLicenseNum = demodel.ContractLicenseNum,
ContractNoPrefix = demodel.ContractNoPrefix,
ContractTemplete = demodel.ContractTemplete,
};
flag = respository.Insert(bmodel) > 0;
branchMCache.Set(bmodel);
......
......@@ -38,6 +38,10 @@ namespace REBORN.Repository
{
sb.AppendFormat(" AND {0}={1} ", nameof(RB_Dictvalue_Extend.RB_Group_id), where.RB_Group_id);
}
if (where.SNO > 0)
{
sb.AppendFormat(" AND {0}={1} ", nameof(RB_Dictvalue_Extend.SNO), where.SNO);
}
if (!string.IsNullOrEmpty(where.Content))
{
sb.AppendFormat(" AND {0} LIKE '%{1}%' ", nameof(RB_Dictvalue_Extend.Content), where.Content.Trim());
......
......@@ -57,7 +57,7 @@ SELECT * FROM RB_Contract WHERE 1=1 AND Status=1
public List<Model.Extend.Dmc.RB_Contract_Extend> GetContractListRepository(string TCIDs, string OrderIds, int OrderType = 0)
{
StringBuilder builder = new StringBuilder();
builder.AppendFormat(" SELECT Id,ContractNum,Client_Name,IFNULL(GuestId,0) AS GuestId,TCID,OrderId,AuditContractReason,AuditContract,TemplateType FROM RB_Contract WHERE 1=1 AND Status=1 ");
builder.AppendFormat(" SELECT Id,ContractNum,Client_Name,IFNULL(GuestId,0) AS GuestId,TCID,OrderId,AuditContractReason,AuditContract,TemplateType,ContractTemplete,ThirdContractState FROM RB_Contract WHERE 1=1 AND Status=1 ");
if (!string.IsNullOrEmpty(TCIDs))
{
builder.AppendFormat(" AND TCID IN({0}) ", TCIDs);
......@@ -85,7 +85,7 @@ SELECT * FROM RB_Contract WHERE 1=1 AND Status=1
DynamicParameters parameters = new DynamicParameters();
StringBuilder builder = new StringBuilder();
builder.AppendFormat(@"
SELECT A.Id,A.ContractNum,A.OrderId,A.TCID,A.ProductName,A.StartDate,A.ReturnDate,A.AuditContract,A.IsTravelAgencySignature,A.GuestId,A.CreateBy,A.CreateTime
SELECT A.Id,A.ContractNum,A.OrderId,A.TCID,A.ProductName,A.StartDate,A.ReturnDate,A.AuditContract,A.IsTravelAgencySignature,A.GuestId,A.CreateBy,A.CreateTime,A.ThirdContractID,A.ThirdContractState,A.ThirdContractFileUrl
FROM RB_Contract AS A
WHERE 1=1 AND Status=1
");
......
......@@ -103,7 +103,7 @@ WHERE 1=1
StringBuilder builder = new StringBuilder();
builder.AppendFormat(@"
SELECT A.ID,A.CType,A.T_ContractNum,A.Tourists_Name,A.TravelAgency_Name,A.TravelAgency_DealMan,A.C_TCNUM,A.C_ProductName,A.CreateBy,A.CreateTime,A.C_DayNum,A.C_StartDate,A.C_EndDate,A.C_NightNum,A.`Status`,A.IsTravelAgencySignature
,A.Tourists_Sign
,A.Tourists_Sign,A.ThirdContractID,A.ThirdContractState,A.ThirdContractFileUrl
FROM RB_Travel_Contract AS A
WHERE 1=1
");
......
......@@ -180,6 +180,21 @@ namespace REBORN.Services.DMCService
return model ? ApiResult.Success("操作成功!") : ApiResult.Failed("操作失败!");
}
/// <summary>
/// 重新发送短信通知签署
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public virtual ApiResult ReSendContract(RequestParm request)
{
UserInfo userInfo = CacheManager.User.RbUserCache.GetUserLoginInfo(request.uid);
JObject parm = JObject.Parse(request.msg.ToString());
int ContractId = parm.GetInt("ContractId");
int ContractType = parm.GetInt("ContractType");//1团队合同 2单项
string msg = travelContractModule.ReSendContract(ContractId, ContractType, userInfo);
return msg == "" ? ApiResult.Success("操作成功!") : ApiResult.Failed("操作失败!");
}
/// <summary>
/// 新增修改出境合同
......@@ -292,6 +307,8 @@ namespace REBORN.Services.DMCService
DepositPrice = parm.GetDecimal("depositPrice"),
DepositDate = parm.GetStringValue("depositDate"),
FinalPrice = parm.GetDecimal("finalPrice"),
PriceDescription = parm.GetStringValue("priceDescription"),
IsApplyContract = parm.GetInt("isApplyContract"),//是否上传合同
};
#region 外派订单旅客信息 2024-07-03 add by:W
......@@ -546,7 +563,8 @@ namespace REBORN.Services.DMCService
RB_Group_Id = userInfo.RB_Group_id,
RB_Branch_Id = userInfo.RB_Branch_id,
IsTravelAgencySignature = 0,
AuditContract = 0
AuditContract = 0,
PriceDescription = oldModel.PriceDescription,
};
model.EnterId = travelContractModule.GetTravelOrder(model.OrderId ?? 0)?.EnterID ?? 0;
......@@ -603,6 +621,17 @@ namespace REBORN.Services.DMCService
else
{
model = travelContractModule.GetContractModule(new RB_Contract_Extend { TCID = TCID, OrderId = orderID, GuestId = guestId, OrderType = OrderType });
UserInfo userInfo = CacheManager.User.RbUserCache.GetUserLoginInfo(request.uid);
if (userInfo != null)
{
var bmodel = travelContractModule.GetBranchInfo(userInfo.RB_Branch_id);
if (bmodel != null && !string.IsNullOrEmpty(bmodel.ContractTravelName))
{
model.Company = bmodel.ContractTravelName;
model.Company_Address = bmodel.ContractTravelAddress;
model.Business_Certificate = bmodel.ContractLicenseNum;
}
}
}
if (TCID > 0)
{
......@@ -970,6 +999,12 @@ namespace REBORN.Services.DMCService
depositPrice = model?.DepositPrice ?? 0,
depositDate = model?.DepositDate ?? "",
finalPrice = model?.FinalPrice ?? 0,
priceDescription = model?.PriceDescription ?? "",
thirdContractState = model?.ThirdContractState ?? 0,
thirdContractSignUrl = model?.ThirdContractSignUrl,
thirdContractQRCode = model?.ThirdContractQRCode,
thirdContractFileUrl = model?.ThirdContractFileUrl,
contractTemplete = model?.ContractTemplete
};
return ApiResult.Success(data: result);
}
......@@ -1066,7 +1101,17 @@ namespace REBORN.Services.DMCService
}
else
{
UserInfo userInfo = CacheManager.User.RbUserCache.GetUserLoginInfo(request.uid);
model = new RB_Travel_Contract_Extend();
if (userInfo != null)
{
var bmodel = travelContractModule.GetBranchInfo(userInfo.RB_Branch_id);
if (bmodel != null && !string.IsNullOrEmpty(bmodel.ContractTravelName)) {
model.TravelAgency_Name = bmodel.ContractTravelName;
model.TravelAgency_Address = bmodel.ContractTravelAddress;
model.TravelAgency_LicenseNum = bmodel.ContractLicenseNum;
}
}
if (TCID > 0)
{
var priceModel = travelContractModule.GetTravelPriceModule(TCID);
......@@ -1205,8 +1250,8 @@ namespace REBORN.Services.DMCService
{
CGuestName = item.Name,
CGuestSex = "",
CGuestCertificateType = "身份证",
CGuestCertificateNum = item.IdCard,
CGuestCertificateType =string.IsNullOrEmpty(item.IdCard) && !string.IsNullOrEmpty(item.PassportNo)?"护照" : "身份证",
CGuestCertificateNum = string.IsNullOrEmpty(item.IdCard) && !string.IsNullOrEmpty(item.PassportNo) ? item.PassportNo :item.IdCard,
CGuestTel = item.Tel,
CGuestHealth = "健康",
});
......@@ -1373,7 +1418,20 @@ namespace REBORN.Services.DMCService
CreateTime = DateTime.Now,
UpdateTime = DateTime.Now,
Status = 0,
GuestNum = parm.GetInt("GuestNum"),
Tourists_Sex = parm.GetInt("Tourists_Sex"),
Tourists_Unit = parm.GetStringValue("Tourists_Unit"),
Tourists_IDType = parm.GetInt("Tourists_IDType"),
ShopTicketName = parm.GetStringValue("ShopTicketName"),
VisaTNumber = parm.GetInt("VisaTNumber"),
VisaDeadline = parm.GetStringValue("VisaDeadline"),
VisaDescription = parm.GetStringValue("VisaDescription"),
PickUpTNumber = parm.GetInt("PickUpTNumber"),
OtherTNumber = parm.GetInt("OtherTNumber"),
PickUpDescription = parm.GetStringValue("PickUpDescription"),
HotelDescription = parm.GetStringValue("HotelDescription"),
TicketDescription = parm.GetStringValue("TicketDescription"),
TicketTax = parm.GetDecimal("TicketTax"),
IsApplyContract = parm.GetInt("IsApplyContract"),//是否上传旅游局合同
};
//行程列表
string contractTripListStr = parm.GetStringValue("ContractTripList");
......@@ -1510,6 +1568,8 @@ namespace REBORN.Services.DMCService
TicketPrice = subObj.GetStringValue("TicketPrice"),
AirportPirce = subObj.GetStringValue("AirportPirce"),
DepositPrice = subObj.GetStringValue("DepositPrice"),
AirType = subObj.GetInt("AirType"),
TotalNumber = subObj.GetInt("TotalNumber"),
});
}
}
......@@ -1544,6 +1604,8 @@ namespace REBORN.Services.DMCService
DepositPrice = subObj.GetStringValue("DepositPrice"),
CheckInDate = subObj.GetStringValue("CheckInDate"),
OutDate = subObj.GetStringValue("OutDate"),
Country = subObj.GetStringValue("Country"),
RoomType = subObj.GetStringValue("RoomType"),
});
}
}
......@@ -1571,6 +1633,8 @@ namespace REBORN.Services.DMCService
StartPlace = subObj.GetStringValue("StartPlace"),
ArrivePlace = subObj.GetStringValue("ArrivePlace"),
UseBusType = subObj.GetStringValue("UseBusType"),
BusType = subObj.GetStringValue("BusType"),
BusPrice = subObj.GetDecimal("BusPrice"),
});
}
}
......@@ -1597,6 +1661,11 @@ namespace REBORN.Services.DMCService
StopTime = subObj.GetStringValue("StopTime"),
VisaPrice = subObj.GetStringValue("VisaPrice"),
DepositPrice = subObj.GetStringValue("DepositPrice"),
VisaType = subObj.GetStringValue("VisaType"),
Number = subObj.GetInt("Number"),
VisaReason = subObj.GetStringValue("VisaReason"),
VisaDate = subObj.GetStringValue("VisaDate"),
SigningDay = subObj.GetStringValue("SigningDay"),
});
}
}
......
......@@ -123,6 +123,11 @@ namespace REBORN.Services.PlatformService
dmodel.ServiceFee,
dmodel.StandardCurrencyId,
dmodel.FinanceTitle,
dmodel.ContractTravelName,
dmodel.ContractTravelAddress,
dmodel.ContractLicenseNum,
dmodel.ContractNoPrefix,
dmodel.ContractTemplete,
TravelLogo = Config.GetFileUrl(dmodel.TravelLogo)
});
}
......
......@@ -289,6 +289,7 @@ namespace REBORN.Services.UserService
});
//获取集团的总公司
obj.ParentCompanyId = branchmodule.GetList(new RB_Branch_Extend() { RB_Group_Id = model.RB_Group_id, IsParentCompany = 1 }).FirstOrDefault()?.Id ?? -1;
obj.ContractTemplete = bmodel.ContractTemplete;
return ApiResult.Success(data: obj);
}
else
......
......@@ -640,6 +640,12 @@
"fullName": "REBORN.Services.DMCService.TravelContractService",
"method": "SetContractService"
},
{
"cmd": "travelcontract_post_ReSendContract", //合同重发短信
"fullName": "REBORN.Services.DMCService.TravelContractService",
"method": "ReSendContract",
"checkFormRepeatSubmit": true //验证表单重复提交
},
{
"cmd": "travelcontract_post_CopyContractServices", //复制出境合同
"fullName": "REBORN.Services.DMCService.TravelContractService",
......
......@@ -23,6 +23,7 @@ using REBORN.Repository.User;
using StackExchange.Redis;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Security.Cryptography;
......@@ -1987,5 +1988,43 @@ namespace REBORN.WebApi.Controllers
}
#endregion
#region 旅游局合同回调
private static object _lock = new object();
/// <summary>
/// 合同状态变更回调
/// </summary>
/// <returns></returns>
[HttpPost]
public string ContractNotify()
{
LogHelper.Write("进来了合同回调");
var request = HttpContext.Current.Request;
// 读取原始JSON字符串
string json;
using (var reader = new StreamReader(request.InputStream))
{
json = reader.ReadToEnd();
}
lock (_lock)
{
try
{
LogHelper.Write("合同回调:" + json);
if (json != null && json.Contains("已签署"))
{
System.Threading.Tasks.Task.Run(() => new Module.DMCModule.TravelContractModule().UpdateContractNotify(json));
}
}
catch (Exception e)
{
LogHelper.Write(e, "旅游局合同回调错误:" + json);
}
}
return "success";
}
#endregion
}
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment