diff --git a/Edu.Common/Config.cs b/Edu.Common/Config.cs index 0770f44f3d6d4fe3f70181f38ea9867246641cc2..a61d11559697153d09f05bb67e0290ca91d7e749 100644 --- a/Edu.Common/Config.cs +++ b/Edu.Common/Config.cs @@ -541,5 +541,51 @@ namespace Edu.Common } } + + /// <summary> + /// 甲鹤教育接å£è¯·æ±‚åœ°å€ + /// </summary> + public static string DmcMallApi + { + get + { + return ReadConfigKey("DmcMallApi"); + } + } + + + /// <summary> + /// 甲鹤教育商户id + /// </summary> + public static string JHTenantId + { + get + { + return ReadConfigKey("JHTenantId"); + } + } + + + /// <summary> + /// 甲鹤教育å°ç¨‹åºid + /// </summary> + public static string JHMallBaseId + { + get + { + return ReadConfigKey("JHMallBaseId"); + } + } + + /// <summary> + /// ç”µå•†åŠ å¯† + /// </summary> + public static string MallJwtSecretKey + { + get + { + return ReadConfigKey("MallJwtSecretKey"); + } + } } } \ No newline at end of file diff --git a/Edu.Common/Enum/ApiRequestFromEnum.cs b/Edu.Common/Enum/ApiRequestFromEnum.cs index 1d7e533cb804c880c2a4b348174e523831601ebb..b44531752846ed8b932a569257fbbb700ff230ba 100644 --- a/Edu.Common/Enum/ApiRequestFromEnum.cs +++ b/Edu.Common/Enum/ApiRequestFromEnum.cs @@ -38,6 +38,13 @@ namespace Edu.Common.Enum [EnumField("ERP")] ERP =6, + /// <summary> + /// Mallã€ç”ŸæˆToken使用】 + /// </summary> + [EnumField("Mall")] + Mall = 7, + + /// <summary> /// Appå¦ç”Ÿç«¯ /// </summary> diff --git a/Edu.Common/Enum/Course/FinanceConfigTypeEnum.cs b/Edu.Common/Enum/Course/FinanceConfigTypeEnum.cs index 02f0e388289a9247e596c8eb0919445e66851f0e..a95e73b58228cd72e5cb6bc3a4d321bf411a859b 100644 --- a/Edu.Common/Enum/Course/FinanceConfigTypeEnum.cs +++ b/Edu.Common/Enum/Course/FinanceConfigTypeEnum.cs @@ -52,6 +52,18 @@ namespace Edu.Common.Enum.Course /// å¦è´¹æ”¶å…¥ /// </summary> [EnumField("å¦è´¹æ”¶å…¥")] - Tuition = 8 + Tuition = 8, + /// <summary> + /// 活动收入(电商) + /// </summary> + [EnumField("活动收入")] + ActivityIncome = 9, + + /// <summary> + /// 活动退款(电商) + /// </summary> + [EnumField("活动退款")] + ActivityExpenditure = 10, + } } diff --git a/Edu.Model/CacheModel/UserInfo.cs b/Edu.Model/CacheModel/UserInfo.cs index 51c1c27c786f4326cd37155880cc5315204475e2..a661b439345d7ecfb06febe446bf3eb43713e02b 100644 --- a/Edu.Model/CacheModel/UserInfo.cs +++ b/Edu.Model/CacheModel/UserInfo.cs @@ -67,6 +67,22 @@ namespace Edu.Model.CacheModel /// </summary> public string ErpToken { get; set; } + /// <summary> + /// 电商-token + /// </summary> + public string MallToken { get; set; } + + /// <summary> + /// 电商-JHTenantId + /// </summary> + public string JHTenantId { get; set; } + + /// <summary> + /// 电商-JHMallBaseId + /// </summary> + public string JHMallBaseId { get; set; } + + /// <summary> /// èœå•åˆ—表 /// </summary> diff --git a/Edu.Model/ViewModel/Question/RB_Question_RoomUseLog_ViewModel.cs b/Edu.Model/ViewModel/Question/RB_Question_RoomUseLog_ViewModel.cs index 797fcae087f9714704e3dd2a35e4523b596e5140..ac9acfbb1fe9371f02b59c03c531c8ef7a67532b 100644 --- a/Edu.Model/ViewModel/Question/RB_Question_RoomUseLog_ViewModel.cs +++ b/Edu.Model/ViewModel/Question/RB_Question_RoomUseLog_ViewModel.cs @@ -45,5 +45,20 @@ namespace Edu.Model.ViewModel.Question /// 间隔多少个15分钟 /// </summary> public int IntervalNum { get; set; } + + /// <summary> + /// 课程å称 + /// </summary> + public string CourseName { get; set; } + + /// <summary> + /// 课程进度 + /// </summary> + public decimal CompleteProgress { get; set; } + + /// <summary> + /// å¦ç”Ÿ + /// </summary> + public string StudentName { get; set; } } } diff --git a/Edu.Module.Course/ClassModule.cs b/Edu.Module.Course/ClassModule.cs index e0a78ec7c243214e19b1e57767b94d7b9680602c..01f026fd585475379af76e6f60ee52563163315e 100644 --- a/Edu.Module.Course/ClassModule.cs +++ b/Edu.Module.Course/ClassModule.cs @@ -1372,7 +1372,7 @@ namespace Edu.Module.Course public object GetClassPlanLogPageListModule(int pageIndex, int pageSize, out long rowsCount, RB_Class_Plan_ViewModel query) { List<object> result = new List<object>(); - var list= class_PlanRepository.GetClassPlanLogPageListRepository(pageIndex, pageSize, out rowsCount, query); + var list = class_PlanRepository.GetClassPlanLogPageListRepository(pageIndex, pageSize, out rowsCount, query); if (list != null && list.Count > 0) { List<RB_Class_Check_ViewModel> checkLogList = new List<RB_Class_Check_ViewModel>(); @@ -1421,7 +1421,7 @@ namespace Edu.Module.Course MonthStr = item.ClassDate.ToString("MM"), DayStr = item.ClassDate.ToString("dd"), YearStr = item.ClassDate.ToString("yyyy"), - TimeList=time + TimeList = time }; result.Add(planCheckObj); } @@ -1490,7 +1490,29 @@ namespace Edu.Module.Course /// <returns></returns> public List<RB_Class_Plan_ViewModel> GetClassPlanList_V2(RB_Class_Plan_ViewModel query) { - return class_PlanRepository.GetClassPlanList_V2(query); + var list = class_PlanRepository.GetClassPlanList_V2(query); + + + if (list != null && list.Any()) + { + string ClassIds = string.Join(",", list.Distinct().Select(x => x.ClassId)); + var orderStudentList = order_GuestRepository.GetList(new RB_Order_Guest_ViewModel() + { + ClassIds = ClassIds, + Group_Id = query.Group_Id, + School_Id = -1 + }).Where(x => x.GuestState == 1).ToList(); + + if (orderStudentList != null && orderStudentList.Any()) + { + foreach (var item in list) + { + item.GuestList = new List<RB_Order_Guest_ViewModel>(); + item.GuestList = orderStudentList.Where(x => x.ClassId == item.ClassId).ToList(); + } + } + } + return list; } /// <summary> diff --git a/Edu.WebApi/Controllers/Course/ClassRoomController.cs b/Edu.WebApi/Controllers/Course/ClassRoomController.cs index fe4afe259f08c031acb65563d9c601412e77c976..b95a88a4b3e3c1b76cc4cbc7846e41a5504014aa 100644 --- a/Edu.WebApi/Controllers/Course/ClassRoomController.cs +++ b/Edu.WebApi/Controllers/Course/ClassRoomController.cs @@ -277,7 +277,7 @@ namespace Edu.WebApi.Controllers.Course InfoTime = item.CreateTime, Type = item.ErrorType == 0 ? 1 : 2, ClassStatus = -1, - IntervalNum = IntervalNum + IntervalNum = IntervalNum, }); } foreach (var item in timeList) @@ -291,17 +291,22 @@ namespace Edu.WebApi.Controllers.Course var planModel = roomList.Where(x => x.ClassPlanId == item.ClassPlanId).FirstOrDefault(); if (planModel != null && planModel.ClassPlanId > 0) { + var roomModel = roomList.Where(x => x.ClassPlanId == item.ClassPlanId).FirstOrDefault(); resultList.Add(new Model.ViewModel.Question.RB_Question_RoomUseLog_ViewModel { Id = item.ClassTimeId, - Title = roomList.Where(x => x.ClassPlanId == item.ClassPlanId).FirstOrDefault()?.ClassName, - Content = roomList.Where(x => x.ClassPlanId == item.ClassPlanId).FirstOrDefault()?.TeacherName, + Title = roomModel?.ClassName, + Content = roomModel?.TeacherName, StartTime = item.StartTime, EndTime = item.EndTime, InfoTime = Convert.ToDateTime(planModel.ClassDate.ToString("yyyy-MM-dd ") + item.StartTime), Type = 0, ClassStatus = item.ClassStatus, - IntervalNum = IntervalNum + IntervalNum = IntervalNum, + CourseName = roomModel?.CourseName, + CompleteProgress = roomModel?.CompleteProgress ?? 0, + StudentName = (roomModel != null && roomModel.GuestList != null && roomModel.GuestList.Any()) ? string.Join(",", roomModel.GuestList.Select(x => x.GuestName)) : "" + }); } } diff --git a/Edu.WebApi/Controllers/User/LoginController.cs b/Edu.WebApi/Controllers/User/LoginController.cs index 36639b072a9f58f39d8ef92dea6bc88fd14a6326..3bfd2436545c02698134004f3dd0b5ac625fd2cd 100644 --- a/Edu.WebApi/Controllers/User/LoginController.cs +++ b/Edu.WebApi/Controllers/User/LoginController.cs @@ -2,7 +2,9 @@ using System.Collections.Generic; using System.Linq; using Edu.Cache.User; +using Edu.Common; using Edu.Common.API; +using Edu.Common.Enum; using Edu.Common.Enum.User; using Edu.Common.Plugin; using Edu.Model.CacheModel; @@ -108,6 +110,59 @@ namespace Edu.WebApi.Controllers.User string token = WebApiTokenHelper.CreateToken(Common.GlobalKey.JWT_User_Key, eduUserInfo); string erpToken = WebApiTokenHelper.CreateToken(Common.GlobalKey.JWT_ERP_User_Key, erpUserInfo); + + + + + + #region 获å–甲鹤教育Token + string JHTenantId = Config.JHTenantId; + string JHMallBaseId = Config.JHMallBaseId; + + + IUserInfoToken mallJHUserInfo = new ErpTokenUserInfo() + { + requestFrom = Common.Enum.ApiRequestFromEnum.Mall, + uid = JHTenantId, + groupId = model.Group_Id + }; + + #region JWT + + // string mallToken = WebApiTokenHelper.CreateToken(Common.GlobalKey.JWT_Mall_User_Key, mallJHUserInfo); + + #endregion + + #endregion + + + + + #region 获å–甲鹤教育Token + + + #region JWT + JWT.IDateTimeProvider provider2 = new JWT.UtcDateTimeProvider(); + var now2 = provider2.GetNow().AddMinutes(-1); + var unixEpoch2 = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); // or use JwtValidator.UnixEpoch + var secondsSinceEpoch2 = Math.Round((now2 - unixEpoch2).TotalSeconds); + var payload2 = new Dictionary<string, object> + { + {"iat",secondsSinceEpoch2 }, + {"exp",secondsSinceEpoch2+Config.JwtExpirTime}, + {"mall_userInfoJH",mallJHUserInfo } + }; + JWT.Algorithms.IJwtAlgorithm algorithm2 = new JWT.Algorithms.HMACSHA256Algorithm(); + JWT.IJsonSerializer serializer2 = new JWT.Serializers.JsonNetSerializer(); + JWT.IBase64UrlEncoder urlEncoder2 = new JWT.JwtBase64UrlEncoder(); + JWT.IJwtEncoder encoder2 = new JWT.JwtEncoder(algorithm2, serializer2, urlEncoder2); + string secret2 = Config.MallJwtSecretKey; + string malltokenJH = encoder2.Encode(payload2, secret2); + #endregion + + #endregion + + var treeList = menuModule.GetPostMenuTreeModule(new Model.ViewModel.System.RB_Menu_ViewModel() { MenuType = accountType @@ -130,6 +185,9 @@ namespace Edu.WebApi.Controllers.User SchoolName = model.SchoolName, Token = token, ErpToken = erpToken, + MallToken = malltokenJH, + JHMallBaseId = JHMallBaseId, + JHTenantId = JHTenantId, MenuList = treeList, UserCenterList = userCenterList, GroupLogo = model.GroupLogo, diff --git a/Edu.WebApi/Controllers/WeChatPay/WeChatPayController.cs b/Edu.WebApi/Controllers/WeChatPay/WeChatPayController.cs index a6a006f6780fed6e4d208424b5dace9cbee40998..44844a6b37c96f9f8b606e3f7fdc8385fa434d26 100644 --- a/Edu.WebApi/Controllers/WeChatPay/WeChatPayController.cs +++ b/Edu.WebApi/Controllers/WeChatPay/WeChatPayController.cs @@ -149,7 +149,7 @@ namespace Edu.WebApi.Controllers.WeChatPay Cache.User.UserReidsCache.Set(Cache.CacheKey.WeChatPay_Callback_Key + payModel.out_trade_no, payModel.out_trade_no, 1800); isAdd = true; Cache.User.UserReidsCache.Set(Cache.CacheKey.WeChatPay_Callback_Key + payModel.out_trade_no, payModel.out_trade_no, 1800); - var oldOrderRecordModel = educationContractModule.GetOrderRecordList(new RB_Finance_OrderRecord { ContractId = contractId, OutTradeNo = payModel.out_trade_no }).FirstOrDefault(); + var oldOrderRecordModel = educationContractModule.GetOrderRecordList(new RB_Finance_OrderRecord { ContractId = contractId, OutTradeNo = payModel.out_trade_no, Type = 1 }).FirstOrDefault(); if (oldOrderRecordModel == null || oldOrderRecordModel.ID == 0) { isAdd = true; @@ -338,7 +338,7 @@ namespace Edu.WebApi.Controllers.WeChatPay contractId = Convert.ToInt32(outTradeNo[17..]); } var orderModle = educationContractModule.GetEducationContractModule(contractId); - var orderRecordModel = educationContractModule.GetOrderRecordList(new RB_Finance_OrderRecord { ContractId = contractId, OutTradeNo = outTradeNo }).FirstOrDefault(); + var orderRecordModel = educationContractModule.GetOrderRecordList(new RB_Finance_OrderRecord { ContractId = contractId, OutTradeNo = outTradeNo, Type = 2 }).FirstOrDefault(); if (orderRecordModel == null) { return ApiResult.Failed("未查询到当å‰å•†æˆ·è®¢å•å·å¯¹åº”的支付记录"); @@ -433,7 +433,7 @@ namespace Edu.WebApi.Controllers.WeChatPay Cache.User.UserReidsCache.Set(Cache.CacheKey.WeChatPay_Callback_Key + payModel.out_trade_no, payModel.out_trade_no, 1800); isAdd = true; Cache.User.UserReidsCache.Set(Cache.CacheKey.WeChatPay_Callback_Key + payModel.out_trade_no, payModel.out_trade_no, 1800); - var oldOrderRecordModel = educationContractModule.GetOrderRecordList(new RB_Finance_OrderRecord { ContractId = contractId, OutTradeNo = payModel.out_trade_no }).FirstOrDefault(); + var oldOrderRecordModel = educationContractModule.GetOrderRecordList(new RB_Finance_OrderRecord { ContractId = contractId, OutTradeNo = payModel.out_trade_no, Type = 2 }).FirstOrDefault(); if (oldOrderRecordModel == null || oldOrderRecordModel.ID == 0) { isAdd = true; @@ -442,7 +442,7 @@ namespace Edu.WebApi.Controllers.WeChatPay { var orderModle = educationContractModule.GetEducationContractModule(contractId); var orderModel = orderModule.GetClassOrderInfoModule(orderModle.OrderId); - var payOrderRecordModel = educationContractModule.GetOrderRecordList(new RB_Finance_OrderRecord { ContractId = contractId, OutTradeNo = payModel.out_trade_no }).FirstOrDefault(); + var payOrderRecordModel = educationContractModule.GetOrderRecordList(new RB_Finance_OrderRecord { ContractId = contractId, OutTradeNo = payModel.out_trade_no, Type = 1 }).FirstOrDefault(); var userInfo = employeeModule.GetEmployeeListModule(new Model.ViewModel.User.Employee_ViewModel { Id = orderModel.EnterID, Group_Id = orderModel.Group_Id }).ToList().FirstOrDefault(); var OriginalFee = Math.Round(Convert.ToDecimal((Convert.ToDecimal(Config.SettlementRate) / 100) * (Convert.ToDecimal(payModel.amount.payer_total) / 100)), 2, MidpointRounding.AwayFromZero);//手ç»è´¹ RB_Online_Trade_Detail model = new RB_Online_Trade_Detail();