Commit e3f7ae99 authored by 吴春's avatar 吴春

Merge branch 'master' of http://gitlab.oytour.com/Kui2/education

parents 33868749 8e1c50c7
......@@ -58,5 +58,10 @@ namespace Edu.Cache
/// </summary>
public static string QYWeChat_EmpToken_Key = "EWeChat_Token_Key_";
/// <summary>
/// 企业微信配置文件
/// </summary>
public static string QYWECHAT_GLOBAL_CONFIG_KEY = "QYWECHAT_GLOBAL_CONFIG";
}
}
......@@ -84,9 +84,7 @@ namespace Edu.Cache.User
/// 获取缓存
/// </summary>
/// <param name="cacheKey"></param>
/// <param name="Data"></param>
/// <param name="JwtExpirTime"></param>
public static object Get(string cacheKey, object Data, int JwtExpirTime)
public static object Get(string cacheKey)
{
try
{
......
using Edu.CacheManager.Base;
using Edu.Model.CacheModel;
using Edu.Repository.WeChat;
using System;
using System.Linq;
namespace Edu.Cache.WeChat
{
......@@ -15,6 +18,13 @@ namespace Edu.Cache.WeChat
static readonly RedisHelper redis = new RedisHelper(REDIS_DB3);
/// <summary>
/// 账号仓储层对象
/// </summary>
static readonly RB_WeChat_ConfigRepository configRepository = new RB_WeChat_ConfigRepository();
/// <summary>
/// 设置缓存
/// </summary>
......@@ -75,6 +85,107 @@ namespace Edu.Cache.WeChat
}
}
#region 企业微信全局配置
/// <summary>
/// 设置配置缓存
/// </summary>
/// <param name="model"></param>
public static void SetConfig(WorkChatConfig model, int JwtExpirTime)
{
try
{
TimeSpan ts = GetExpirTime(JwtExpirTime);
redis.StringSet<WorkChatConfig>(CacheKey.QYWECHAT_GLOBAL_CONFIG_KEY+"_"+model.Group_Id, model, ts);
}
catch (Exception ex)
{
Common.Plugin.LogHelper.Write(ex, "WorkChatConfig缓存设置失败");
}
}
/// <summary>
/// 更新全局配置
/// </summary>
/// <param name="id"></param>
public static void UpdateConfig(int id)
{
var model = configRepository.GetEntity(id);
if (model != null)
{
var chatConfig = new WorkChatConfig
{
Id = model.Id,
Group_Id = model.Group_Id,
Name = model.Name,
WX_CorpId = model.WX_CorpId,
Social_Code = model.Social_Code,
Employee_Secret = model.Employee_Secret,
Contact_Secret = model.Contact_Secret,
TelEvent_CallBack = model.TelEvent_CallBack,
Token = model.Token,
Encoding_Aes_Key = model.Encoding_Aes_Key,
EmpEvent_CallBack = model.EmpEvent_CallBack,
CreateBy = model.CreateBy,
CreateTime = model.CreateTime,
UpdateBy = model.UpdateBy,
UpdateTime = model.UpdateTime
};
SetConfig(chatConfig, Common.Config.JwtExpirTime);
}
}
/// <summary>
/// 获取配置换成
/// </summary>
/// <returns></returns>
public static WorkChatConfig GetWorkChatConfig(int groupId)
{
WorkChatConfig chatConfig = null;
string cacheKey = CacheKey.QYWECHAT_GLOBAL_CONFIG_KEY+"_"+groupId;
try
{
chatConfig = redis.StringGet<WorkChatConfig>(cacheKey);
}
catch (Exception ex)
{
Common.Plugin.LogHelper.Write(ex, "GeWorkChatConfig");
}
if (chatConfig == null)
{
var model = configRepository.GetList(new Model.ViewModel.WeChat.RB_WeChat_Config_ViewModel() { Group_Id= groupId }).FirstOrDefault();
if (model != null)
{
chatConfig = new WorkChatConfig
{
Id = model.Id,
Group_Id = model.Group_Id,
Name = model.Name,
WX_CorpId = model.WX_CorpId,
Social_Code = model.Social_Code,
Employee_Secret = model.Employee_Secret,
Contact_Secret = model.Contact_Secret,
TelEvent_CallBack = model.TelEvent_CallBack,
Token = model.Token,
Encoding_Aes_Key = model.Encoding_Aes_Key,
EmpEvent_CallBack = model.EmpEvent_CallBack,
CreateBy = model.CreateBy,
CreateTime = model.CreateTime,
UpdateBy = model.UpdateBy,
UpdateTime = model.UpdateTime
};
SetConfig(chatConfig, Common.Config.JwtExpirTime);
}
}
return chatConfig;
}
#endregion
}
/// <summary>
......
......@@ -159,6 +159,17 @@ namespace Edu.Common
}
}
/// <summary>
/// 企业应用APP地址
/// </summary>
public static string WorkAPPDomain
{
get
{
return ReadConfigKey("WorkAPPDomain");
}
}
/// <summary>
/// 获取Oss文件全路径
/// </summary>
......
using System;
using System.Collections.Generic;
using System.Text;
namespace Edu.Model.CacheModel
{
/// <summary>
/// 企业微信配置
/// </summary>
public class WorkChatConfig
{
/// <summary>
/// Id
/// </summary>
public int Id { get; set; }
/// <summary>
/// 企业名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 企业微信ID
/// </summary>
public string WX_CorpId { get; set; }
/// <summary>
/// 企业代码(企业统一社会信用代码)
/// </summary>
public string Social_Code { get; set; }
/// <summary>
/// 企业通讯录secret
/// </summary>
public string Employee_Secret { get; set; }
/// <summary>
/// 企业外部联系人secret
/// </summary>
public string Contact_Secret { get; set; }
/// <summary>
/// 事件回调地址(通讯录)
/// </summary>
public string TelEvent_CallBack { get; set; }
/// <summary>
/// 回调token
/// </summary>
public string Token { get; set; }
/// <summary>
/// 回调消息加密串
/// </summary>
public string Encoding_Aes_Key { get; set; }
/// <summary>
/// 事件回调地址(外部人员)
/// </summary>
public string EmpEvent_CallBack { get; set; }
/// <summary>
/// 集团编号
/// </summary>
public int Group_Id { get; set; }
/// <summary>
/// 创建人
/// </summary>
public int CreateBy { get; set; }
/// <summary>
/// 创建日期
/// </summary>
public DateTime CreateTime { get; set; }
/// <summary>
/// 修改人
/// </summary>
public int UpdateBy { get; set; }
/// <summary>
/// 更新时间
/// </summary>
public DateTime UpdateTime { get; set; }
}
}
using System;
using VT.FW.DB;
namespace Edu.Model.Entity.Exam
{
/// <summary>
/// 试卷发布实体类
/// </summary>
[Serializable]
[DB(ConnectionName = "DefaultConnection")]
public class RB_Examination_Publish
{
/// <summary>
/// 发布考试主键编号
/// </summary>
public int Id { get; set; }
/// <summary>
/// 试卷编号
/// </summary>
public int PaperId { get; set; }
/// <summary>
/// 发放类型(1-按班级发放,2-指定学生发放)
/// </summary>
public int PublishType { get; set; }
/// <summary>
/// 考试开始时间
/// </summary>
public DateTime ExamStartTime { get; set; }
/// <summary>
/// 考试结束时间
/// </summary>
public DateTime ExamEndTime { get; set; }
/// <summary>
/// 考试限时
/// </summary>
public int ExamTimes { get; set; }
/// <summary>
/// 限时提交(多少分钟内不允许提交)
/// </summary>
public int SubmitTimes { get; set; }
/// <summary>
/// 限时进入(多少分钟后不允许参加考试)
/// </summary>
public int EnterTimes { get; set; }
/// <summary>
/// 创建人
/// </summary>
public int CreateBy { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime CreateTime { get; set; }
/// <summary>
/// 集团编号
/// </summary>
public int Group_Id { get; set; }
/// <summary>
/// 学校编号
/// </summary>
public int School_Id { get; set; }
/// <summary>
/// 删除状态
/// </summary>
public int Status { get; set; }
/// <summary>
/// 题目乱序(1-是)
/// </summary>
public int IsQuestionRandom { get; set; }
/// <summary>
/// 选项乱序(1-是)
/// </summary>
public int IsOptionRandom { get; set; }
/// <summary>
/// 学生离开作答页面(1-是)
/// </summary>
public int IsLeaveAnswer { get; set; }
/// <summary>
/// 离开次数
/// </summary>
public int LeaveTimes { get; set; }
/// <summary>
/// 是否禁用多终端(1-是)
/// </summary>
public int IsDisableMultiTerminal { get; set; }
/// <summary>
/// 是否只允许(App、PC)考试(1-是)
/// </summary>
public int IsExamType { get; set; }
/// <summary>
/// 考试终端类型(1-App,2-PC)
/// </summary>
public int ExamTypeValue { get; set; }
/// <summary>
/// 考试须知
/// </summary>
public string ExamNotice { get; set; }
/// <summary>
/// 及格分数
/// </summary>
public decimal PassScore { get; set; }
/// <summary>
/// 考试到达截止时间后自动提交(1-是)
/// </summary>
public int IsAutoSubmit { get; set; }
/// <summary>
/// 填空类型的题目设为主观题(1-是)
/// </summary>
public int FillInIsSubject { get; set; }
/// <summary>
/// 填空题答案不区分大小写(1-是)
/// </summary>
public int FillInIsIgnore { get; set; }
/// <summary>
/// 多选题未选全给一半分(1-是)
/// </summary>
public int IsHalfScore { get; set; }
}
}
using Edu.Common.Enum;
using Edu.Common.Enum.Course;
using Edu.Common.Enum.Course;
using Edu.Common.Enum.Sale;
using System;
using VT.FW.DB;
......@@ -32,63 +31,83 @@ namespace Edu.Model.Entity.Sell
/// 单价
/// </summary>
public decimal Class_Price { get; set; }
/// <summary>
/// 成交单价
/// </summary>
public decimal Unit_Price { get; set; }
/// <summary>
/// 客人数量
/// </summary>
public int GuestNum { get; set; }
/// <summary>
/// 应收总额
/// </summary>
public decimal PreferPrice { get; set; }
/// <summary>
/// 实收金额
/// </summary>
public decimal Income { get; set; }
/// <summary>
/// 退款金额
/// </summary>
public decimal Refund { get; set; }
/// <summary>
/// 优惠金额
/// </summary>
public decimal DiscountMoney { get; set; }
/// <summary>
/// 每人优惠金额
/// </summary>
public decimal PerDiscountMoney { get; set; }
/// <summary>
/// 平台税金
/// </summary>
public decimal PlatformTax { get; set; }
/// <summary>
/// 订单状态 枚举
/// </summary>
public OrderStateEnum OrderState { get; set; }
/// <summary>
/// 订单来源 枚举
/// </summary>
public OrderSourceEnum OrderSource { get; set; }
/// <summary>
/// 业务人员
/// </summary>
public int EnterID { get; set; }
/// <summary>
/// 订单来自于 枚举
/// </summary>
public OrderFormEnum OrderForm { get; set; }
private decimal commission = -1;
/// <summary>
/// 提成金额
/// </summary>
public decimal CommissionMoney { get => commission; set => commission = value; }
/// <summary>
/// 额外奖励金额
/// </summary>
public decimal ExtraRewardMoney { get; set; }
/// <summary>
/// 额外扣除金额
/// </summary>
public decimal ExtraDeductMoney { get; set; }
/// <summary>
/// 提成是否已发放 1是 0否
/// </summary>
......@@ -97,14 +116,17 @@ namespace Edu.Model.Entity.Sell
/// 销售备注
/// </summary>
public string SaleRemark { get; set; }
/// <summary>
/// 教务备注
/// </summary>
public string TeacherRemark { get; set; }
/// <summary>
/// 校长备注
/// </summary>
public string RectorRemark { get; set; }
/// <summary>
/// 经理备注
/// </summary>
......@@ -186,10 +208,15 @@ namespace Edu.Model.Entity.Sell
public int IsLessPrice { get; set; }
/// <summary>
/// 少价金额
/// 少价金额(每人少价金额)
/// </summary>
public decimal LessPrice { get; set; }
/// <summary>
/// 每人少价金额
/// </summary>
public decimal PerLessMoney { get; set; }
/// <summary>
/// (教育订单使用)订单性质(1-直通车,2-代收代付,3-返佣)
/// </summary>
......
......@@ -100,5 +100,10 @@ namespace Edu.Model.Entity.User
/// 官网地址
/// </summary>
public string WebSiteDomain { get; set; }
/// <summary>
/// 企业微信应用域名
/// </summary>
public string WorkAppDomain { get; set; }
}
}
\ No newline at end of file
using System;
using System.Collections.Generic;
using System.Text;
namespace Edu.Model.ViewModel.Exam
{
/// <summary>
/// 试卷文件树形结构
/// </summary>
public class ExamFolderTreeModel
{
/// <summary>
/// 试卷编号
/// </summary>
public int PaperId { get; set; }
/// <summary>
/// 试卷名称
/// </summary>
public string PaperName { get; set; }
/// <summary>
/// 父节点编号
/// </summary>
public int ParentId { get; set; }
/// <summary>
/// 下级文件夹列表
/// </summary>
public List<ExamFolderTreeModel> ChildList { get; set; }
}
}
......@@ -21,5 +21,15 @@ namespace Edu.Model.ViewModel.Exam
/// 问题数量
/// </summary>
public int QuestionCount { get; set; }
/// <summary>
/// 试卷编号
/// </summary>
public string QPaperIds { get; set; }
/// <summary>
/// 是否查询文件夹
/// </summary>
public int IsQueryFolder { get; set; }
}
}
using Edu.Model.Entity.Exam;
using System;
using System.Collections.Generic;
using System.Text;
namespace Edu.Model.ViewModel.Exam
{
/// <summary>
/// 试卷发布视图实体类
/// </summary>
public class RB_Examination_Publish_ViewModel : RB_Examination_Publish
{
}
}
......@@ -101,5 +101,10 @@ namespace Edu.Model.ViewModel.Question
return Common.Plugin.EnumHelper.ToName(this.LevelType);
}
}
/// <summary>
/// 是否返回所有字段
/// </summary>
public int IsShowAllQuestion { get; set; }
}
}
\ No newline at end of file
......@@ -359,11 +359,11 @@ namespace Edu.Module.Course
{
try
{
decimal uPrice = item.OriginalPrice / item.JoinNum;
var orderModel = new RB_Order()
{
ClassId = item.ClassId,
Class_Price = uPrice,
Class_Price = item.OriginalPrice,
CommissionMoney = -1,
CreateBy = offerModel.CreateBy,
CreateTime = DateTime.Now,
......@@ -371,7 +371,8 @@ namespace Edu.Module.Course
School_Id = emModel?.School_Id ?? 0,
Group_Id = emModel?.Group_Id ?? 0,
DirectorRemark = "",
DiscountMoney = item.DiscountPrice,
DiscountMoney =(item.OriginalPrice - item.DiscountPrice)*item.JoinNum,
PerDiscountMoney= item.OriginalPrice - item.DiscountPrice,
EnterID = offerModel.CreateBy,
ExtraDeductMoney = 0,
ExtraRewardMoney = 0,
......@@ -383,7 +384,7 @@ namespace Edu.Module.Course
OrderSource = Common.Enum.Course.OrderSourceEnum.Employee,
OrderState = Common.Enum.Course.OrderStateEnum.Normal,
PlatformTax = 0,
PreferPrice = item.OriginalPrice,
PreferPrice = item.OriginalPrice* item.JoinNum,
RectorRemark = "",
Refund = 0,
JoinType= OrderJoinTypeEnum.Normal,
......@@ -393,7 +394,7 @@ namespace Edu.Module.Course
SaleRemark = item.Remark,
TeacherRemark = "",
TradeWay = Common.Enum.Course.TradeWayEnum.OnLine,
Unit_Price = uPrice,
Unit_Price = item.OriginalPrice,
UpdateBy = offerModel.CreateBy,
UpdateTime = DateTime.Now,
OfferId = offerId,
......
......@@ -104,9 +104,8 @@ namespace Edu.Module.Course
public object GetStudentInfoModule(int OrderId, int GuestId)
{
var obj = new object();
var glist = order_GuestRepository.GetOrderGuestListRepository(new RB_Order_Guest_ViewModel() { OrderId = OrderId });
var orderModel = orderRepository.GetEntity(OrderId);
var guestModel = glist.Where(qitem => qitem.Id == GuestId)?.FirstOrDefault();
var guestModel = order_GuestRepository.GetEntity<RB_Order_Guest_ViewModel>(GuestId);
var classModel = new RB_Class_ViewModel();
var courseModel = new RB_Course_ViewModel();
decimal PreferPrice = 0;//总金额
......@@ -122,12 +121,11 @@ namespace Edu.Module.Course
}
var qids = (classModel?.ManagerId ?? 0).ToString() + "," + (orderModel?.EnterID ?? 0).ToString();
var empList = accountRepository.GetEmployeeListRepository(new Employee_ViewModel() { QIds = qids });
if (glist != null && glist.Count > 0)
{
PreferPrice = orderModel.PreferPrice / glist.Count();
DiscountMoney = orderModel.DiscountMoney / glist.Count();
Money = (orderModel.PreferPrice - orderModel.DiscountMoney) / glist.Count();//平均每人费用
}
PreferPrice = orderModel.PreferPrice / orderModel.GuestNum;
DiscountMoney = orderModel.PerDiscountMoney;
Money = (orderModel.PreferPrice - orderModel.DiscountMoney) / orderModel.GuestNum;//平均每人费用
string dxMoney = StringHelper.MoneyToUpper(Money.ToString());
obj = new
{
......@@ -143,7 +141,7 @@ namespace Edu.Module.Course
StartLevel = guestModel?.Basics ?? "",
CourseConsultant = empList?.Where(qitem => qitem.Id == (orderModel?.EnterID ?? 0))?.FirstOrDefault()?.EmployeeName ?? "",
Payee = empList?.Where(qitem => qitem.Id == (orderModel?.EnterID ?? 0))?.FirstOrDefault()?.EmployeeName ?? "",
FirstClassHours = courseModel?.ClassHours ?? 0,
FirstClassHours = (courseModel?.ClassHours ?? 0)-(orderModel?.StartClassHours ?? 0),
FirstCourseFee = PreferPrice,
FirstBookFee = 0,
FirstClassFee = 0,
......
......@@ -408,16 +408,35 @@ namespace Edu.Module.Course
}
//课程信息
var courseModel = courseRepository.GetEntity(demodel.CourseId);
decimal coursePrice = courseModel.SellPrice;//课程最低单价
#region 计算订单优惠信息
//获取课程优惠
var coursePreferentialList = course_PreferentialRepository.GetCoursePreferentialListRepostory(new RB_Course_Preferential_Extend()
{
CourseId = demodel.CourseId
});
//课程优惠信息
//计算续费订单优惠
if (demodel.JoinType == OrderJoinTypeEnum.RenewOrder && demodel.OrderId == 0)
{
var renewOrderDiscount = coursePreferentialList?.Where(qitem => qitem.PriceDiscountType == CoursePriceDiscountEnum.Renewal)?.FirstOrDefault();
if (renewOrderDiscount != null)
{
if ((renewOrderDiscount?.PriceType ?? 0) == 0)
{
demodel.DiscountMoney = coursePrice- coursePrice * (100 - (renewOrderDiscount?.PriceMoney ?? 0)) / 100;
demodel.SaleRemark = "续费报名优惠" + renewOrderDiscount.PriceMoney + "%";
}
else
{
demodel.DiscountMoney = (coursePrice - (renewOrderDiscount?.PriceMoney ?? 0)) * demodel.GuestNum;
demodel.SaleRemark = "续费报名优惠" + renewOrderDiscount.PriceMoney + "元";
}
demodel.PerDiscountMoney = demodel.DiscountMoney / demodel.GuestNum;
}
}
decimal disMoney = 0;//课程最大优惠金额
decimal coursePrice = courseModel.SellPrice;//课程最低单价
decimal lessMoney = 0;//课程最大少价金额
var coursePreferentialModel = new RB_Course_Preferential_Extend();
if (coursePreferentialList != null && coursePreferentialList.Count > 0)
{
......@@ -433,30 +452,33 @@ namespace Edu.Module.Course
if (saleCommissionType == 0)
{
var tempMoney = (courseModel?.SellPrice ?? 0) * (coursePreferentialModel?.SaleCommissionMoney ?? 0);
disMoney = tempMoney / Convert.ToDecimal(100);
lessMoney = tempMoney / Convert.ToDecimal(100);
}
else
{
disMoney = coursePreferentialModel?.SaleCommissionMoney ?? 0;
lessMoney = coursePreferentialModel?.SaleCommissionMoney ?? 0;
}
var b2bCommissionType = coursePreferentialModel?.B2BCommissionType ?? 0;
if (b2bCommissionType == 0)
{
var tempMoney = (courseModel?.SellPrice ?? 0) * (coursePreferentialModel?.B2BCommissionMoney ?? 0);
disMoney += tempMoney / Convert.ToDecimal(100);
lessMoney += tempMoney / Convert.ToDecimal(100);
}
else
{
disMoney = coursePreferentialModel?.B2BCommissionMoney ?? 0;
lessMoney = coursePreferentialModel?.B2BCommissionMoney ?? 0;
}
var priceCommissionType = coursePreferentialModel?.PriceType ?? 0;
if (priceCommissionType == 0)
{
disMoney = (100 - (coursePreferentialModel?.PriceMoney ?? 0)) / 100;
coursePrice = coursePrice * (100 - (coursePreferentialModel?.PriceMoney ?? 0)) / 100;
}
else
{
disMoney = coursePreferentialModel?.PriceMoney ?? 0;
coursePrice -= (coursePreferentialModel?.PriceMoney ?? 0);
}
#region 记录提成信息
......@@ -478,7 +500,7 @@ namespace Edu.Module.Course
{
if (coursePreferentialList != null && coursePreferentialList.Count > 0)
{
if (demodel.LessPrice > disMoney)
if (demodel.LessPrice > lessMoney)
{
message = string.Format("优惠金额不能大于{0}", disMoney.ToString("0.00"));
return flag;
......@@ -510,6 +532,7 @@ namespace Edu.Module.Course
if (demodel.IsLessPrice == 0)
{
demodel.LessPrice = 0;
demodel.PerLessMoney = 0;
}
var orderModel = new RB_Order();
if (demodel.OrderId > 0)
......@@ -626,6 +649,8 @@ namespace Edu.Module.Course
{
{ nameof(RB_Order_ViewModel.GuestNum),demodel.GuestNum},
{ nameof(RB_Order_ViewModel.Unit_Price),demodel.Unit_Price},
{ nameof(RB_Order_ViewModel.DiscountMoney),demodel.DiscountMoney},
{ nameof(RB_Order_ViewModel.PerDiscountMoney),demodel.PerDiscountMoney},
{ nameof(RB_Order_ViewModel.PreferPrice),demodel.PreferPrice},
{ nameof(RB_Order_ViewModel.OrderSource),demodel.OrderSource},
{ nameof(RB_Order_ViewModel.SaleRemark),demodel.SaleRemark},
......@@ -634,6 +659,7 @@ namespace Edu.Module.Course
{ nameof(RB_Order_ViewModel.EduOccupation),demodel.EduOccupation},
{ nameof(RB_Order_ViewModel.IsLessPrice),demodel.IsLessPrice},
{ nameof(RB_Order_ViewModel.LessPrice),demodel.LessPrice},
{ nameof(RB_Order_ViewModel.PerLessMoney),demodel.PerLessMoney},
{ nameof(RB_Order_ViewModel.StartClassHours),demodel.StartClassHours},
{ nameof(RB_Order_ViewModel.CourseId),demodel.CourseId},
{ nameof(RB_Order_ViewModel.EffectStatus),demodel.EffectStatus},
......@@ -641,7 +667,6 @@ namespace Edu.Module.Course
{ nameof(RB_Order_ViewModel.UpOrderId),demodel.UpOrderId},
};
flag = orderRepository.Update(keyValues, new WhereHelper(nameof(RB_Order_ViewModel.OrderId), demodel.OrderId));
//记录日志信息
LogContent = $"修改日语培训订单【{demodel.OrderId}】";
if (orderModel.GuestNum != demodel.GuestNum)
......@@ -652,6 +677,14 @@ namespace Edu.Module.Course
{
LogContent += $",成交单价由【{orderModel.Unit_Price}】修改为【{demodel.Unit_Price}】";
}
if (orderModel.DiscountMoney != demodel.DiscountMoney)
{
LogContent += $",优惠金额由【{(orderModel.DiscountMoney)}】修改为【{(demodel.DiscountMoney)}】";
}
if (orderModel.PerDiscountMoney != demodel.PerDiscountMoney)
{
LogContent += $",每人优惠金额由【{(orderModel.PerDiscountMoney)}】修改为【{(demodel.PerDiscountMoney)}】";
}
if (orderModel.PreferPrice != demodel.PreferPrice)
{
LogContent += $",应收金额由【{orderModel.PreferPrice}】修改为【{demodel.PreferPrice}】";
......@@ -679,7 +712,11 @@ namespace Edu.Module.Course
}
if (orderModel.LessPrice != demodel.LessPrice)
{
LogContent += $",少价金额由【{(orderModel.LessPrice)}】修改为【{(demodel.LessPrice)}】";
LogContent += $",少价金额由【{(orderModel.LessPrice)}】修改为【{(demodel.LessPrice)}】";
}
if (orderModel.PerLessMoney != demodel.PerLessMoney)
{
LogContent += $",每人少价金额由【{(orderModel.PerLessMoney)}】修改为【{(demodel.PerLessMoney)}】";
}
//记录订单备注
if (orderModel.SaleRemark != demodel.SaleRemark)
......
......@@ -277,22 +277,8 @@ namespace Edu.Module.Course
}
foreach (var item in classList)
{
var priceModel = coursePriceList?.Where(qitem => qitem.CourseId == item.CouseId && qitem.PriceDiscountType == CoursePriceDiscountEnum.Renewal)?.FirstOrDefault();
decimal SellPrice = item.SellPrice;
decimal OriginalPrice = item.SellPrice;
if (priceModel != null)
{
if (priceModel.PriceType == 0)
{
SellPrice = Math.Round(SellPrice * (100 - priceModel.PriceMoney) / 100, 2);
OriginalPrice = Math.Round(SellPrice * (100 - priceModel.PriceMoney) / 100, 2);
}
else
{
SellPrice = Math.Round(SellPrice - priceModel.PriceMoney, 2);
OriginalPrice = Math.Round(SellPrice - priceModel.PriceMoney, 2);
}
}
var obj = new
{
item.ClassId,
......
......@@ -255,6 +255,9 @@ namespace Edu.Module.EduTask
SourceId = 0,
IsLessPrice = 0,
LessPrice = 0,
PerLessMoney=0,
DiscountMoney=0,
PerDiscountMoney=0,
OrderNature = oldOrderModel.OrderNature,
OldPreferPrice = newPreferPrice,//应收,
CourseId = orderChangeModel.NewCourseId,
......@@ -702,6 +705,9 @@ namespace Edu.Module.EduTask
SourceId = 0,
IsLessPrice = 0,
LessPrice = 0,
PerLessMoney=0,
DiscountMoney=0,
PerDiscountMoney=0,
OrderNature = oldOrderModel.OrderNature,
OldPreferPrice = newPreferPrice,//应收,
CourseId = orderChangeModel.NewCourseId,
......
This diff is collapsed.
......@@ -10,6 +10,8 @@ using Edu.Model.CacheModel;
using Edu.Model.ViewModel.WeChat;
using Edu.Repository.WeChat;
using Edu.ThirdCore.QYWinXin;
using Newtonsoft.Json.Linq;
using Senparc.Weixin.Work.AdvancedAPIs.OAuth2;
using VT.FW.DB;
namespace Edu.Module.QYWeChat
......@@ -32,11 +34,11 @@ namespace Edu.Module.QYWeChat
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public RB_WeChat_Config_ViewModel GetWeChatConfigModel(RB_WeChat_Config_ViewModel model)
public WorkChatConfig GetWeChatConfigModel(RB_WeChat_Config_ViewModel model)
{
var dmodel = weChat_ConfigRepository.GetList(model).FirstOrDefault();
if (dmodel == null) { dmodel = new RB_WeChat_Config_ViewModel(); }
return dmodel;
//var dmodel = weChat_ConfigRepository.GetList(model).FirstOrDefault();
//if (dmodel == null) { dmodel = new RB_WeChat_Config_ViewModel(); }
return WeChatReidsCache.GetWorkChatConfig(model.Group_Id);
}
/// <summary>
......@@ -79,15 +81,30 @@ namespace Edu.Module.QYWeChat
OperatorEnum=OperatorEnum.Equal
}
};
bool flag = weChat_ConfigRepository.Update(keyValues, wheres);
bool flag = false;
if (weChat_ConfigRepository.Update(keyValues, wheres))
{
flag = true;
//更新缓存
WeChatReidsCache.UpdateConfig(demdoel.Id);
}
return flag ? "" : "出错了,请联系管理员";
}
else {
bool flag = weChat_ConfigRepository.Insert(demdoel) > 0;
var id = weChat_ConfigRepository.Insert(demdoel);
bool flag = false;
if (id > 0)
{
flag = true;
//更新缓存
WeChatReidsCache.UpdateConfig(id);
}
return flag ? "" : "出错了,请联系管理员";
}
}
#endregion
#endregion
}
}
......@@ -66,6 +66,16 @@ namespace Edu.Module.User
return GetGroupListModule(new RB_Group_ViewModel() { GId = GId })?.FirstOrDefault() ?? new RB_Group_ViewModel();
}
/// <summary>
/// 获取集团实体类
/// </summary>
/// <param name="GId"></param>
/// <returns></returns>
public RB_Group_ViewModel GetGroupEntityModule(string workDomainUrl)
{
return GetGroupListModule(new RB_Group_ViewModel() { WorkAppDomain=workDomainUrl })?.FirstOrDefault() ?? new RB_Group_ViewModel();
}
/// <summary>
/// 新增修改集团
/// </summary>
......
......@@ -43,11 +43,73 @@ WHERE 1=1
builder.AppendFormat(" AND A.{0} LIKE @PaperName ", nameof(RB_Examination_Paper_ViewModel.PaperName));
parameters.Add("PaperName", "%" + query.PaperName.Trim() + "%");
}
if (query.ParentId > 0)
{
builder.AppendFormat(@" AND A.{0}={1} ", nameof(RB_Examination_Paper_ViewModel.ParentId), query.ParentId);
}
if (query.PaperId > 0)
{
builder.AppendFormat(@" AND A.{0}={1} ", nameof(RB_Examination_Paper_ViewModel.PaperId), query.PaperId);
}
if (!string.IsNullOrEmpty(query.QPaperIds))
{
builder.AppendFormat(@" AND A.{0} IN({1}) ", nameof(RB_Examination_Paper_ViewModel.PaperId), query.QPaperIds);
}
}
builder.AppendFormat(" ORDER BY A.{0} DESC ", nameof(RB_Examination_Paper_ViewModel.PaperId));
return GetPage<RB_Examination_Paper_ViewModel>(pageIndex, pageSize, out rowsCount, builder.ToString(), parameters).ToList();
}
/// <summary>
/// 获取试卷列表
/// </summary>
/// <param name="query"></param>
/// <returns></returns>
public List<RB_Examination_Paper_ViewModel> GetExaminationPaperListRepository(RB_Examination_Paper_ViewModel query)
{
var parameters = new DynamicParameters();
StringBuilder builder = new StringBuilder();
builder.AppendFormat(@"
SELECT A.*
FROM RB_Examination_Paper AS A
WHERE 1=1
");
builder.AppendFormat(@" AND A.{0}={1} ", nameof(RB_Examination_Paper_ViewModel.ParentId), 0);
if (query != null)
{
if (query.Group_Id > 0)
{
builder.AppendFormat(@" AND A.{0}={1} ", nameof(RB_Examination_Paper_ViewModel.Group_Id), query.Group_Id);
}
if (!string.IsNullOrEmpty(query.PaperName))
{
builder.AppendFormat(" AND A.{0} LIKE @PaperName ", nameof(RB_Examination_Paper_ViewModel.PaperName));
parameters.Add("PaperName", "%" + query.PaperName.Trim() + "%");
}
if (query.ParentId > 0)
{
builder.AppendFormat(@" AND A.{0}={1} ", nameof(RB_Examination_Paper_ViewModel.ParentId), query.ParentId);
}
if (query.PaperId > 0)
{
builder.AppendFormat(@" AND A.{0}={1} ", nameof(RB_Examination_Paper_ViewModel.PaperId), query.PaperId);
}
if (!string.IsNullOrEmpty(query.QPaperIds))
{
builder.AppendFormat(@" AND A.{0} IN({1}) ", nameof(RB_Examination_Paper_ViewModel.PaperId), query.QPaperIds);
}
//查询文件夹
if (query.IsQueryFolder == 1)
{
builder.AppendFormat(@" AND A.{0}=1 ", nameof(RB_Examination_Paper_ViewModel.PaperType));
}
}
builder.AppendFormat(" ORDER BY A.{0} DESC ", nameof(RB_Examination_Paper_ViewModel.PaperId));
return Get<RB_Examination_Paper_ViewModel>(builder.ToString(), parameters).ToList();
}
/// <summary>
/// 获取试卷所有下级列表
/// </summary>
......
using Edu.Model.Entity.Exam;
using Edu.Model.ViewModel.Exam;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Edu.Repository.Exam
{
/// <summary>
/// 试卷发布仓储层
/// </summary>
public class RB_Examination_PublishRepository : BaseRepository<RB_Examination_Publish>
{
/// <summary>
/// 获取发布试卷分页列表
/// </summary>
/// <param name="pageIndex"></param>
/// <param name="pageSize"></param>
/// <param name="rowsCount"></param>
/// <param name="query"></param>
/// <returns></returns>
public List<RB_Examination_Publish_ViewModel> GetExaminationPublishPageRepository(int pageIndex, int pageSize, out long rowsCount, RB_Examination_Publish_ViewModel query)
{
StringBuilder builder = new StringBuilder();
builder.AppendFormat(@"
SELECT A.*
FROM RB_Examination_Publish AS A
WHERE 1=1
");
if (query != null)
{
if (query.Group_Id > 0)
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Examination_Publish_ViewModel.Group_Id), query.Group_Id);
}
}
return GetPage<RB_Examination_Publish_ViewModel>(pageIndex, pageSize, out rowsCount, builder.ToString()).ToList();
}
}
}
......@@ -58,6 +58,10 @@ WHERE 1=1
{
builder.AppendFormat(" AND {0}={1} ", nameof(RB_Group_ViewModel.GId),query.GId);
}
if (!string.IsNullOrEmpty(query.WorkAppDomain))
{
builder.AppendFormat(" AND {0}='{1}' ", nameof(RB_Group_ViewModel.WorkAppDomain), query.WorkAppDomain);
}
if (!string.IsNullOrEmpty(query.WebSiteDomain))
{
builder.AppendFormat(" AND {0}='{1}' ", nameof(RB_Group_ViewModel.WebSiteDomain), query.WebSiteDomain);
......
......@@ -19,6 +19,7 @@
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Edu.Cache\Edu.Cache.csproj" />
<ProjectReference Include="..\Edu.Common\Edu.Common.csproj" />
</ItemGroup>
......
using System;
using System.Collections.Generic;
using System.Text;
namespace Edu.ThirdCore.QYWinXin
{
/// <summary>
///
/// </summary>
public class QYWeiXinConfig
{
}
}
using System;
using System.Collections.Generic;
using System.Text;
using System.Web;
using Edu.Cache.User;
using Edu.Cache.WeChat;
using Edu.Common.Plugin;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Senparc.Weixin.Work;
using Senparc.Weixin.Work.AdvancedAPIs;
using Senparc.Weixin.Work.AdvancedAPIs.OAuth2;
using Senparc.Weixin.Work.Containers;
namespace Edu.ThirdCore.QYWinXin
......@@ -14,6 +19,74 @@ namespace Edu.ThirdCore.QYWinXin
/// </summary>
public class QYWeiXinHelper
{
#region 全局静态
private static string WORK_KEY = string.Empty;
#endregion
#region 令牌
public static string GetToken(int groupId,bool newToken=false)
{
var config = WeChatReidsCache.GetWorkChatConfig(groupId);
if (config != null) {
var token = AccessTokenContainer.GetTokenAsync(config.WX_CorpId, config.Employee_Secret, newToken);
return token.Result;
}
else
{
return string.Empty;
}
}
#endregion
/// <summary>
/// 解析用户信息
/// </summary>
/// <param name="groupId"></param>
/// <param name="code"></param>
/// <returns></returns>
public (bool status, GetUserInfoResult result) GetLoginWorkUserInfo(int groupId,string code)
{
var token = GetToken(groupId);
if (!string.IsNullOrEmpty(token))
{
var result = Senparc.Weixin.Work.AdvancedAPIs.OAuth2Api.GetUserId(token, code);
return (true, result);
}
else
{
return (false, null);
}
}
/// <summary>
/// 组装跳转地址
/// </summary>
/// <param name="groupId">集团编号</param>
/// <param name="mark">唯一标识</param>
/// <returns></returns>
public string GetUserAuthorizationCodePath(int groupId, string mark)
{
var config = WeChatReidsCache.GetWorkChatConfig(groupId);
var token = GetToken(groupId);
if (!string.IsNullOrEmpty(token))
{
string redirect_uri = $"http://mobileapis.kookaku.com/api/QYWeChat/UserCodeCallBack";
string state = mark;
JObject cacheContent = new JObject();
cacheContent.Add("group_id",groupId);
UserReidsCache.Set(mark, cacheContent, 60);
return Senparc.Weixin.Work.AdvancedAPIs.OAuth2Api.GetCode(config.WX_CorpId, redirect_uri, state, "1000004");
}
else
{
return string.Empty;
}
}
/// <summary>
/// 获取token
/// </summary>
......
......@@ -182,6 +182,7 @@ namespace Edu.WebApi.Controllers.Course
item.ClassName,
item.CouseId,
item.CourseName,
item.ClassNo,
item.Teacher_Id,
OpenTime = Common.ConvertHelper.FormatDate(item.OpenTime),
PlanList = planList
......
......@@ -66,7 +66,7 @@ namespace Edu.WebApi.Controllers.Course
{
int IsInsertClass = 0;//不能插班报入
int SurplusNum = x.ClassPersion - x.OrderStudentCount;
if (x.ClassStatus == ClassStatusEnum.StudyIng && SurplusNum > 0)
if (x.ClassStatus != ClassStatusEnum.EndClass && SurplusNum > 0)
{
IsInsertClass = 1;//可以插班报入
}
......@@ -480,18 +480,21 @@ namespace Edu.WebApi.Controllers.Course
HelpEnterId = base.ParmJObj.GetInt("HelpEnterId"),
GeneralOccupation = base.ParmJObj.GetStringValue("GeneralOccupation"),
EduOccupation = base.ParmJObj.GetStringValue("EduOccupation"),
IsLessPrice = base.ParmJObj.GetInt("IsLessPrice"),
LessPrice = base.ParmJObj.GetDecimal("LessPrice"),
OrderNature = (OrderNatureEnum)base.ParmJObj.GetInt("OrderNature"),
OldPreferPrice = base.ParmJObj.GetDecimal("OldPreferPrice"),
CourseId = base.ParmJObj.GetInt("CourseId"),
StartClassHours = base.ParmJObj.GetInt("StartClassHours"),
EffectTime = base.ParmJObj.GetDateTime("EffectTime"),
UpOrderId = base.ParmJObj.GetInt("UpOrderId"),
VisitorReserveId = base.ParmJObj.GetInt("VisitorReserveId"),
JoinType = OrderJoinTypeEnum.Normal,
TargetJoinType = OrderJoinTypeEnum.Normal,
DiscountMoney = base.ParmJObj.GetDecimal("DiscountMoney"),
PerDiscountMoney=base.ParmJObj.GetDecimal("PerDiscountMoney"),
IsLessPrice = base.ParmJObj.GetInt("IsLessPrice"),
LessPrice = base.ParmJObj.GetDecimal("LessPrice"),
PerLessMoney =base.ParmJObj.GetDecimal("PerLessMoney"),
};
var IsInsertClass = base.ParmJObj.GetInt("IsChaBan");
if (IsInsertClass == 1)
......@@ -624,6 +627,9 @@ namespace Edu.WebApi.Controllers.Course
model.EduOccupation,
model.IsLessPrice,
model.LessPrice,
model.PerLessMoney,
model.DiscountMoney,
model.PerDiscountMoney,
model.OrderNature,
OrderNatureName = model.OrderNature.ToName(),
model.OldPreferPrice,
......
......@@ -31,6 +31,9 @@ namespace Edu.WebApi.Controllers.Course
/// </summary>
private readonly StudentBillModule studentBillModule = AOP.AOPHelper.CreateAOPObject<StudentBillModule>();
/// <summary>
/// 订单处理类对象
/// </summary>
private readonly OrderModule orderModule = AOP.AOPHelper.CreateAOPObject<OrderModule>();
/// <summary>
......@@ -63,11 +66,6 @@ namespace Edu.WebApi.Controllers.Course
var SpecialNode = base.ParmJObj.GetInt("SpecialNode");
//抄送人
string RecipientIds = base.ParmJObj.GetStringValue("RecipientIds");
// var flag = studentBillModule.SetBackBillAduitModule(BackId, AuditStatus, Description, base.UserInfo, out string message, SpecialNode: SpecialNode, BackMoney: BackMoney, RecipientIds: RecipientIds);
//return flag ? ApiResult.Success(message: message) : ApiResult.Failed(message: message);
return ApiResult.Failed();
}
......@@ -140,6 +138,9 @@ namespace Edu.WebApi.Controllers.Course
SourceId = 0,
IsLessPrice = 0,
LessPrice = 0,
PerLessMoney=0,
DiscountMoney=0,
PerDiscountMoney=0,
OrderNature = oldOrderModel.OrderNature,
OldPreferPrice = base.ParmJObj.GetDecimal("PreferPrice"),//应收,
CourseId = 0,
......@@ -164,6 +165,7 @@ namespace Edu.WebApi.Controllers.Course
orderModel.UpdateBy = base.UserInfo.Id;
orderModel.UpdateTime = DateTime.Now;
orderModel.OldGuestId = guestId;
bool flag = orderModule.SetClassOrderModule(orderModel, base.UserInfo, base.CheckUserActionAuth("Edit_Order"), out string message);
if (flag)
{
......
......@@ -3,12 +3,16 @@ using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Edu.Cache.User;
using Edu.Common;
using Edu.Common.API;
using Edu.Common.Enum.Finance;
using Edu.Common.Plugin;
using Edu.Model.ViewModel.WeChat;
using Edu.Module.QYWeChat;
using Edu.Module.User;
using Edu.ThirdCore.QYWinXin;
using Edu.WebApi.Filter;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Cors;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json.Linq;
......@@ -29,6 +33,8 @@ namespace Edu.WebApi.Controllers.Finance
/// </summary>
private readonly QYWeChatModule weChatModule = new QYWeChatModule();
private readonly GroupModule groupModule = new GroupModule();
#region 微信配置
/// <summary>
/// 获取活动配置
......@@ -83,5 +89,135 @@ namespace Edu.WebApi.Controllers.Finance
}
#endregion
#region 企业微信客户端API
/// <summary>
/// 获取企业微信TOKEN
/// </summary>
/// <returns></returns>
[HttpPost]
[AllowAnonymous]
public ApiResult GetWorkToken()
{
var referer = Request.Headers["Origin"].ToString().Replace("http://", "");
if (!string.IsNullOrEmpty(referer))
{
var group = groupModule.GetGroupEntityModule(referer);
if (group.GId != 0)
{
var query = QYWeiXinHelper.GetToken(group.GId);
if (!string.IsNullOrEmpty(query))
{
return ApiResult.Success(data: query);
}
else
{
return ApiResult.Failed(message: "解析用户信息失败");
}
}
else
{
return ApiResult.Failed(message: "未知的集团信息");
}
}
else
{
return ApiResult.Failed(message: "未找到域名来源");
}
}
/// <summary>
/// 发起登录请求
/// </summary>
/// <returns></returns>
[HttpPost]
[AllowAnonymous]
public ApiResult SetUserAutoLogin()
{
var referer = Request.Headers["Origin"].ToString().Replace("http://","");
if (!string.IsNullOrEmpty(referer))
{
var group = groupModule.GetGroupEntityModule(referer);
if (group.GId != 0)
{
var query = JObject.Parse(RequestParm.Msg.ToString());
var mark = query.GetStringValue("mark");
var path = new QYWeiXinHelper().GetUserAuthorizationCodePath(group.GId, mark);
if (!string.IsNullOrEmpty(path))
{
HttpHelper.HttpGet(path);
return ApiResult.Success(data:path);
}
else
{
return ApiResult.Failed(message: "获取登录信息失败");
}
}
else
{
return ApiResult.Failed(message: "未知的集团信息");
}
}
else
{
return ApiResult.Failed(message:"未找到域名来源");
}
}
/// <summary>
/// 获取登录信息
/// </summary>
/// <returns></returns>
[HttpPost]
[AllowAnonymous]
public ApiResult GetLoginUserInfo()
{
var mark = JObject.FromObject(RequestParm.Msg).GetStringValue("mark");
mark += "_Finish";
if (UserReidsCache.Exists(mark))
{
var cacheObj = UserReidsCache.Get(mark);
var cacheContent = JObject.FromObject(cacheObj);
return ApiResult.Success(data: cacheContent["user"].ToString());
}
else
{
return ApiResult.Success(data:"");
}
}
/// <summary>
/// 获取用户Code
/// </summary>
/// <returns></returns>
[HttpGet]
[AllowAnonymous]
public IActionResult UserCodeCallBack()
{
var mark = Request.Query["state"].ToString();
var code = Request.Query["code"].ToString();
var cacheObj = UserReidsCache.Get(mark);
if (cacheObj != null && !string.IsNullOrEmpty(code))
{
var cacheContent = JObject.FromObject(cacheObj);
var userInfo = new QYWeiXinHelper().GetLoginWorkUserInfo(cacheContent.GetInt("group_id"),code);
if (userInfo.status)
{
cacheContent.Add("user", JObject.FromObject(userInfo.result));
UserReidsCache.Set(mark+"_Finish", cacheContent, 60);
}
}
var redirect_url = $"{Config.WorkAPPDomain}/login?mark={mark}";
return Redirect(redirect_url);
}
#endregion
}
}
......@@ -12,6 +12,8 @@ using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Options;
using Senparc.CO2NET;
using Senparc.CO2NET.RegisterServices;
using Senparc.Weixin;
using Senparc.Weixin.Entities;
using Senparc.Weixin.RegisterServices;
using Senparc.Weixin.Work;
......@@ -42,6 +44,7 @@ namespace Edu.WebApi
List<string> corsArray = new List<string>()
{
"http://192.168.20.214:8400",
"http://localhost",
"http://localhost:8400",
"http://localhost:8081",
"http://localhost:8080",
......@@ -68,15 +71,23 @@ namespace Edu.WebApi
"https://edu.kookaku.com",
"https://eduapi.oytour.com",
"http://eduapi.oytour.com",
"http://mobile.kookaku.com"
};
services.AddCors(options => options.AddPolicy("AllowCors", policy => policy.AllowAnyHeader().AllowAnyMethod().AllowCredentials().WithOrigins(corsArray.ToArray())));
services.Configure<IISServerOptions>(options => options.AllowSynchronousIO = true);
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
services.AddMemoryCache();//使用本地缓存必须添加
services.AddSenparcGlobalServices(Configuration)//Senparc.CO2NET 全局注册
.AddSenparcWeixinServices(Configuration);
services.AddSenparcWeixinServices(Configuration);//注册全局微信服务
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IHostApplicationLifetime appLifetime)
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IHostApplicationLifetime appLifetime, IOptions<SenparcSetting> senparcSetting, IOptions<SenparcWeixinSetting> senparcWeixinSetting)
{
if (env.IsDevelopment())
{
......@@ -120,6 +131,9 @@ namespace Edu.WebApi
Path.Combine(Directory.GetCurrentDirectory(), "upfile")),
RequestPath = "/upfile"
});
IRegisterService register = RegisterService.Start(senparcSetting.Value).UseSenparcGlobal();
register.UseSenparcWeixin(senparcWeixinSetting.Value, senparcSetting.Value);
}
}
}
\ No newline at end of file
......@@ -29,6 +29,7 @@
"UploadSiteUrl": "http://192.168.1.36:8120",
"ViewFileSiteUrl": "https://viitto-1301420277.cos.ap-chengdu.myqcloud.com",
"ErpViewFileSiteUrl": "http://imgfile.oytour.com",
"WorkAPPDomain": "http://mobile.kookaku.com",
"Mongo": "mongodb://47.96.25.130:27017",
"MongoDBName": "Edu",
"WkHtmlToPdfPath": "D:/wkhtmltopdf/bin/",
......
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