Commit 3b62dd09 authored by liudong1993's avatar liudong1993

1

parents 5d9906f5 4d42b7f5
......@@ -176,10 +176,8 @@ namespace Edu.Common.Plugin
System.Net.WebResponse wResp = wReq.GetResponse();
System.IO.Stream respStream = wResp.GetResponseStream();
// Dim reader As StreamReader = New StreamReader(respStream)
using (System.IO.StreamReader reader = new System.IO.StreamReader(respStream, Encoding.GetEncoding(type)))
{
return reader.ReadToEnd();
}
using System.IO.StreamReader reader = new System.IO.StreamReader(respStream, Encoding.GetEncoding(type));
return reader.ReadToEnd();
}
catch (System.Exception ex)
{
......
......@@ -167,6 +167,11 @@ namespace Edu.Model.CacheModel
/// 客服Token
/// </summary>
public TenCccTokenItem TenCccToken { get; set; }
/// <summary>
/// 是否是课程顾问(1-是)
/// </summary>
public int IsCourseConsultant { get; set; }
}
/// <summary>
......
using Edu.Common.Enum;
using System;
using VT.FW.DB;
namespace Edu.Model.Entity.Exam
{
/// <summary>
/// 单词测试实体类
/// </summary>
[Serializable]
[DB(ConnectionName = "DefaultConnection")]
public class RB_StuWords_Exam
{
/// <summary>
/// 学员单词考试主键编号
/// </summary>
public int Id { get; set; }
/// <summary>
/// 班级编号
/// </summary>
public int ClassId { get; set; }
/// <summary>
/// 课程编号
/// </summary>
public int CourseId { get; set; }
/// <summary>
/// Account表(Id字段)学员账号
/// </summary>
public int Stu_Account_Id { get; set; }
/// <summary>
/// 章节编号
/// </summary>
public int ChapterId { get; set; }
/// <summary>
/// 创建人
/// </summary>
public int CreateBy { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime CreateTime { get; set; }
/// <summary>
/// 学校Id
/// </summary>
public int School_Id { get; set; }
/// <summary>
/// 集团编号
/// </summary>
public int? Group_Id { get; set; }
/// <summary>
/// 状态
/// </summary>
public DateStateEnum Status { get; set; }
/// <summary>
/// 得分
/// </summary>
public decimal Score { get; set; }
/// <summary>
/// 考试开始时间
/// </summary>
public DateTime? ExamStartTime { get; set; }
/// <summary>
/// 考试结束时间
/// </summary>
public DateTime? ExamEndTime { get; set; }
}
}
using System;
using VT.FW.DB;
namespace Edu.Model.Entity.Exam
{
/// <summary>
/// 单词测试详情实体类
/// </summary>
[Serializable]
[DB(ConnectionName = "DefaultConnection")]
public class RB_StuWords_ExamDetail
{
/// <summary>
/// 单词考试详情主键编号
/// </summary>
public int DetailId { get; set; }
/// <summary>
/// 单词考试编号
/// </summary>
public int ExamId { get; set; }
/// <summary>
/// 单词编号
/// </summary>
public int WordId { get; set; }
/// <summary>
/// 问题标题
/// </summary>
public string Title { get; set; }
/// <summary>
/// 问题内容
/// </summary>
public string QuestionContent { get; set; }
/// <summary>
/// 问题类型编号
/// </summary>
public int? QuestionTypeId { get; set; }
/// <summary>
/// 问题类型Key
/// </summary>
public string QuestionTypeKey { get; set; }
/// <summary>
/// 是否回答正确(1-是)
/// </summary>
public int IsRight { get; set; }
/// <summary>
/// 学生答案
/// </summary>
public string Answer { get; set; }
}
}
......@@ -63,6 +63,16 @@ namespace Edu.Model.Entity.Exam
/// </summary>
public DateStateEnum Status { get; set; }
/// <summary>
/// 当前章节单词学习数量
/// </summary>
public int PrepNum { get; set; }
/// <summary>
/// 上一章节复习单词数量
/// </summary>
public int ReviewNum { get; set; }
/// <summary>
/// 学习单词数量
/// </summary>
......
......@@ -19,5 +19,10 @@ namespace Edu.Model.ViewModel.Course
/// 章节编号
/// </summary>
public string QChapterIds { get; set; }
/// <summary>
/// 小于等于当前章节
/// </summary>
public int LessThanOrEqualChapterId { 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_StuWords_ExamDetail_Extend: RB_StuWords_ExamDetail
{
/// <summary>
/// 考试编号
/// </summary>
public string QExamIds { 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_StuWords_Exam_Extend : RB_StuWords_Exam
{
/// <summary>
/// 单词考试详情
/// </summary>
public List<RB_StuWords_ExamDetail_Extend> ExamDetailList { get; set; }
/// <summary>
/// 学习分钟数
/// </summary>
public string ExamMinutes
{
get
{
string str = "";
if (this.ExamStartTime != null && this.ExamEndTime != null)
{
str = Common.ConvertHelper.CalcMinutes(Convert.ToDateTime(this.ExamStartTime), Convert.ToDateTime(this.ExamEndTime)).ToString();
}
return str;
}
}
}
}
......@@ -11,6 +11,16 @@ namespace Edu.Model.ViewModel.Exam
/// </summary>
public class RB_StuWords_Prep_Extend: RB_StuWords_Prep
{
/// <summary>
/// 复习章节编号
/// </summary>
public int ReviewCourseChapterId { get; set; }
/// <summary>
/// 学习类型(1-预习,2-复习)
/// </summary>
public int StudyType { get; set; }
/// <summary>
/// 学习分钟数
/// </summary>
......
......@@ -10,6 +10,20 @@ namespace Edu.Model.ViewModel.Exam
/// </summary>
public class RB_StuWords_Review_Extend : RB_StuWords_Review
{
/// <summary>
/// 学习分钟数
/// </summary>
public string StartMinutes
{
get
{
string str = "";
if (this.StartTime != null && this.EndTime != null)
{
str = Common.ConvertHelper.CalcMinutes(Convert.ToDateTime(this.StartTime), Convert.ToDateTime(this.EndTime)).ToString();
}
return str;
}
}
}
}
......@@ -157,6 +157,11 @@ namespace Edu.Model.ViewModel.Grade
/// </summary>
public object Ranks { get; set; }
/// <summary>
/// 完成计划数量
/// </summary>
public int FinishNum { get; set; }
/// <summary>
/// 总的上课次数
......
using System;
using Edu.Common.Enum.User;
using System;
namespace Edu.Model.ViewModel.User
{
......@@ -92,5 +93,10 @@ namespace Edu.Model.ViewModel.User
/// 是否是电话客服
/// </summary>
public int IsTenCccUser { get; set; }
/// <summary>
/// 用户角色
/// </summary>
public UserRoleEnum UserRole { get; set; }
}
}
\ No newline at end of file
......@@ -326,5 +326,10 @@ namespace Edu.Model.ViewModel.User
/// </summary>
public int Q_EnrollState { get; set; }
#endregion
/// <summary>
/// 是否存在课程顾问(1-存在,2-不存在)
/// </summary>
public int ExistCourseConsultant { get; set; }
}
}
\ No newline at end of file
......@@ -31,6 +31,8 @@ using Edu.Repository.Sell;
using Edu.Module.User;
using System.Web;
using Edu.Common.Enum.System;
using Edu.Repository.Exam;
using Edu.Model.ViewModel.Exam;
namespace Edu.Module.Course
{
......@@ -205,6 +207,11 @@ namespace Edu.Module.Course
/// </summary>
private readonly RB_Class_FeedBackRepository class_FeedBackRepository = new RB_Class_FeedBackRepository();
/// <summary>
/// 学员单词预习仓储层对象
/// </summary>
private readonly RB_StuWords_PrepRepository stuWords_PrepRepository = new RB_StuWords_PrepRepository();
/// <summary>
/// 获取班级列表
/// </summary>
......@@ -1823,7 +1830,7 @@ namespace Edu.Module.Course
}
list.Add(new
{
UserIcon = item.UserIcon,
item.UserIcon,
item.Id,
SexStr = item.Sex == 1 ? "男" : "女",
item.GuestName,
......@@ -3721,6 +3728,11 @@ namespace Edu.Module.Course
{
tempTimeGuestList.AddRange(tempGuestList.Where(qitem => qitem.ClassId == subItem.ClassId && subItem.ClassPlanId == qitem.ClassPlanId && (qitem.GuestState == GuestStateEnum.Normal || qitem.GuestState == GuestStateEnum.StopClassesApplyIng || ((qitem.GuestState == GuestStateEnum.StopClasses || qitem.GuestState == GuestStateEnum.Graduate) && qitem.ChangeEffectTime.HasValue && Convert.ToDateTime(Common.ConvertHelper.FormatDate(qitem.ChangeEffectTime)) >= subItem.ClassDate))));
}
int CompleteProgress = 0;
if (subItem.TotalPlanNum > 0)
{
CompleteProgress = (int)((Convert.ToDecimal(subItem.FinishNum) / Convert.ToDecimal(subItem.TotalPlanNum)) * 100);
}
subList.Add(new
{
ClassType = 1,
......@@ -3729,7 +3741,7 @@ namespace Edu.Module.Course
subItem.CourseName,
subItem.RoomName,
subItem.TeacherName,
subItem.CompleteProgress,
CompleteProgress,
subItem.Ranks,
subItem.TotalPlanNum,
TimeStr = Common.ConvertHelper.GetTimeStr(currentDate),
......@@ -4176,6 +4188,12 @@ namespace Edu.Module.Course
}
}
int CompleteProgress = 0;
if(subItem.TotalPlanNum>0)
{
CompleteProgress = (int)(Convert.ToDecimal(subItem.FinishNum) / Convert.ToDecimal(subItem.TotalPlanNum) * 100);
}
subList.Add(new
{
Id = item?.ClassTimeId ?? 0,
......@@ -4185,7 +4203,7 @@ namespace Edu.Module.Course
subItem.CourseName,
subItem.RoomName,
subItem.TeacherName,
subItem.CompleteProgress,
CompleteProgress,
subItem.TotalPlanNum,
subItem.Ranks,
TimeStr = Common.ConvertHelper.GetTimeStr(currentDate),
......@@ -4850,7 +4868,7 @@ namespace Edu.Module.Course
/// </summary>
/// <param name="classId"></param>
/// <returns></returns>
public object GetIndexWords(int classId, int courseId, int groupId)
public object GetIndexWords(int classId, int courseId, int groupId,int Stu_Account_Id=0)
{
int NextCourseNo = 0, ReviewCourseNo = 0;
var planModel = class_PlanRepository.GetToDayClassPlan(classId, groupId);
......@@ -4900,13 +4918,23 @@ namespace Edu.Module.Course
{
ReviewNum = course_WordsRepository.GetCourseWordsNum(courseId, ReviewCourseNo, groupId);
}
decimal TotalScore = 0;
if (Stu_Account_Id > 0)
{
TotalScore= stuWords_PrepRepository.GetStuWordsPrepScoreRepository(new RB_StuWords_Prep_Extend()
{
CourseId = courseId,
Stu_Account_Id = Stu_Account_Id
});
}
return new
{
NextWord = NextNum,
NextCourseNo,
ReviewWord = ReviewNum,
ReviewCourseNo,
CourseId= courseId
CourseId = courseId,
TotalScore
};
}
......@@ -4919,7 +4947,8 @@ namespace Edu.Module.Course
public List<RB_Class_Plan_ViewModel> GetMyStudyCourseList(int classId, int group_Id)
{
var planList = class_PlanRepository.GetStudyClassPlanList(classId, group_Id);
if (planList.Any()) {
if (planList.Any())
{
string planIds = string.Join(",", planList.Select(x => x.ClassPlanId));
var timeList = class_TimeRepository.GetClassTimeListRepository(new RB_Class_Time_ViewModel() { Group_Id = group_Id, QClassPlanIds = planIds });
var MaxPlan = planList.OrderByDescending(x => x.ClassDate).FirstOrDefault();
......@@ -4935,7 +4964,8 @@ namespace Edu.Module.Course
}
}
planList = planList.OrderByDescending(x => x.ClassDate).ToList();
foreach (var item in planList) {
foreach (var item in planList)
{
item.PlanTimeList = timeList.Where(x => x.ClassPlanId == item.ClassPlanId).ToList();
}
}
......
This diff is collapsed.
......@@ -423,7 +423,6 @@ namespace Edu.Module.Course
{
Id = 0,
OrderId = orderModel.OrderId,
ClassId = orderModel.ClassId,
GuestName = item.StuName,
GuestState = GuestStateEnum.Normal,
Profession = item?.StuProfession ?? "",
......@@ -456,9 +455,20 @@ namespace Edu.Module.Course
CompleteHours = 0,
MakeUpHours = 0,
StuIcon = item.StuIcon,
TotalHours = Convert.ToInt32(courseModel.ClassHours),
RenewState = 1
};
if (orderModel.OrderType == OrderTypeEnum.CourseOrder)
{
guestModel.ClassId = orderModel.ClassId;
guestModel.SourceId = 0;
guestModel.TotalHours = Convert.ToInt32(courseModel?.ClassHours ?? 0);
}
else if (orderModel.OrderType == OrderTypeEnum.StudyabroadOrder)
{
guestModel.ClassId = 0;
guestModel.CourseId = 0;
guestModel.SourceId = orderModel.SourceId;
}
SetOrderGuestInfo(guestModel, out string Nmessage);
}
return "";
......
This diff is collapsed.
......@@ -298,11 +298,12 @@ namespace Edu.Module.User
{
List<WhereHelper> where = new List<WhereHelper>()
{
new WhereHelper(nameof(RB_Student_ViewModel.Group_Id),model.Group_Id),
new WhereHelper(nameof(RB_Student_ViewModel.Group_Id),model.Group_Id),
new WhereHelper(nameof(RB_Student_ViewModel.Status),(int)DateStateEnum.Normal),
};
if (Type == 1)
{
where.Add(new WhereHelper(nameof(RB_Student_ViewModel.StuTel), model.StuTel));
where.Add(new WhereHelper(nameof(RB_Student_ViewModel.StuRealMobile), model.StuRealMobile));
}
if (Type == 2)
{
......@@ -321,7 +322,8 @@ namespace Edu.Module.User
OperatorEnum = OperatorEnum.NotEqual
});
}
return studentRepository.Exists(where);
var NewId= studentRepository.Exists("StuId", where);
return NewId > 0;
}
/// <summary>
......
......@@ -86,6 +86,10 @@ WHERE 1=1
{
builder.AppendFormat(" AND A.{0} IN({1}) ", nameof(RB_Course_Words_Extend.ChapterId), query.QChapterIds);
}
if (query.LessThanOrEqualChapterId > 0)
{
builder.AppendFormat(" AND A.{0}<={1} ", nameof(RB_Course_Words_Extend.ChapterId), query.LessThanOrEqualChapterId);
}
}
return Get<RB_Course_Words_Extend>(builder.ToString()).ToList();
}
......
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_StuWords_ExamDetailRepository : BaseRepository<RB_StuWords_ExamDetail>
{
/// <summary>
/// 获取学员单词测试详情列表
/// </summary>
/// <param name="query"></param>
/// <returns></returns>
public List<RB_StuWords_ExamDetail_Extend> GetStuWordsExamDetailListRepository(RB_StuWords_ExamDetail_Extend query)
{
StringBuilder builder = new StringBuilder();
builder.AppendFormat(@"
SELECT A.*
FROM RB_StuWords_ExamDetail AS A
WHERE 1=1
");
if (query != null)
{
if (query.ExamId > 0)
{
builder.AppendFormat(" A.{0}={1} ", nameof(RB_StuWords_ExamDetail_Extend.ExamId), query.ExamId);
}
if (!string.IsNullOrEmpty(query.QExamIds))
{
builder.AppendFormat(" A.{0} IN({1}) ", nameof(RB_StuWords_ExamDetail_Extend.ExamId), query.QExamIds);
}
}
return Get<RB_StuWords_ExamDetail_Extend>(builder.ToString()).ToList();
}
}
}
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_StuWords_ExamRepository : BaseRepository<RB_StuWords_Exam>
{
/// <summary>
/// 获取学员单词考试分页列表
/// </summary>
/// <param name="pageIndex"></param>
/// <param name="pageSize"></param>
/// <param name="rowsCount"></param>
/// <param name="query"></param>
/// <returns></returns>
public List<RB_StuWords_Exam_Extend> GetStuWordsExamPageRepository(int pageIndex, int pageSize, out long rowsCount, RB_StuWords_Exam_Extend query)
{
StringBuilder builder = new StringBuilder();
builder.AppendFormat(@"
SELECT A.*
FROM RB_StuWords_Exam AS A
WHERE 1=1
");
if (query != null)
{
if (query.Group_Id > 0)
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_StuWords_Exam_Extend.Group_Id), query.Group_Id);
}
if (query.Stu_Account_Id > 0)
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_StuWords_Exam_Extend.Stu_Account_Id), query.Stu_Account_Id);
}
if (query.CourseId > 0)
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_StuWords_Exam_Extend.CourseId), query.CourseId);
}
if (query.ChapterId > 0)
{
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_StuWords_Exam_Extend.ChapterId), query.ChapterId);
}
}
return GetPage<RB_StuWords_Exam_Extend>(pageIndex, pageSize, out rowsCount, builder.ToString()).ToList();
}
}
}
......@@ -49,10 +49,10 @@ namespace Edu.Repository.Exam
/// </summary>
/// <param name="query"></param>
/// <returns></returns>
public List<RB_StuWords_Prep_Extend> GetStuWordsPrepPageRepository(int pageIndex,int pageSize,out long rowsCount, RB_StuWords_Prep_Extend query)
public decimal GetStuWordsPrepScoreRepository(RB_StuWords_Prep_Extend query)
{
StringBuilder builder = new StringBuilder();
builder.AppendFormat(@" SELECT A.* FROM RB_StuWords_Prep AS A WHERE 1=1 ");
builder.AppendFormat(@" SELECT SUM(A.Score) AS Score FROM RB_StuWords_Prep AS A WHERE 1=1 ");
if (query != null)
{
if (query.Group_Id > 0)
......@@ -72,7 +72,13 @@ namespace Edu.Repository.Exam
builder.AppendFormat(@" AND A.{0}={1} ", nameof(RB_StuWords_Prep_Extend.Stu_Account_Id), query.Stu_Account_Id);
}
}
return GetPage<RB_StuWords_Prep_Extend>(pageIndex, pageSize, out rowsCount, builder.ToString()).ToList();
decimal totalScore = 0;
object obj = base.ExecuteScalar(builder.ToString());
if (obj != null)
{
decimal.TryParse(obj.ToString(), out totalScore);
}
return totalScore;
}
}
}
......@@ -20,7 +20,7 @@ namespace Edu.Repository.Exam
public List<RB_StuWords_Review_Extend> GetStuWordsReviewListRepository(RB_StuWords_Review_Extend query)
{
StringBuilder builder = new StringBuilder();
builder.AppendFormat(@" SELECT A.* FROM RB_StuWords_Prep AS A WHERE 1=1 ");
builder.AppendFormat(@" SELECT A.* FROM RB_StuWords_Review AS A WHERE 1=1 ");
if (query != null)
{
if (query.Group_Id > 0)
......
......@@ -580,22 +580,24 @@ where sog.Account_Id={query.StuId} and c.ClassStatus in(1,2) and c.`Status`=0 an
StringBuilder builder = new StringBuilder();
builder.AppendFormat(@"
SELECT A.ClassPlanId,A.ClassId,A.ClassDate,A.ClassRoomId,A.ClassName,A.CourseName,A.CourseId,A.Teacher_Id,A.TeacherName,A.UserIcon,A.RoomName
,SUM(A.minNum) AS ClassMinutes,MIN(A.StartTime) AS StartTime,MAX(A.EndTime) AS EndTime,A.CompleteProgress,a.TotalPlanNum,
,SUM(A.minNum) AS ClassMinutes,MIN(A.StartTime) AS StartTime,MAX(A.EndTime) AS EndTime,A.CompleteProgress,a.TotalPlanNum,A.FinishNum,
(SELECT COUNT(*) from rb_class_plan where `Status`=0 and DATE_FORMAT(ClassDate,'%Y-%m-%d') <=DATE_FORMAT(a.ClassDate,'%Y-%m-%d') and ClassId=a.ClassId) as Ranks
FROM
(
SELECT A.ClassPlanId, A.ClassId,A.ClassDate,A.ClassRoomId,B.ClassName,C.CourseName,c.CourseId,B.Teacher_Id,IFNULL(D.TeacherName,'') AS TeacherName,IFNULL(D.TeacherHead,'') AS UserIcon,E.RoomName
,TIMESTAMPDIFF(MINUTE, CONCAT('2020-12-16',' ',F.StartTime), CONCAT('2020-12-16',' ',F.EndTime)) AS minNum,F.StartTime,F.EndTime,B.CompleteProgress,plan.TotalPlanNum
SELECT A.ClassPlanId, A.ClassId,A.ClassDate,A.ClassRoomId,B.ClassName,C.CourseName,c.CourseId,B.Teacher_Id,IFNULL(D.TeacherName,'') AS TeacherName
,IFNULL(D.TeacherHead,'') AS UserIcon,E.RoomName,TIMESTAMPDIFF(MINUTE, CONCAT('2020-12-16',' ',F.StartTime), CONCAT('2020-12-16',' ',F.EndTime)) AS minNum
,F.StartTime,F.EndTime,B.CompleteProgress,plan.TotalPlanNum,finishPlan.TotalPlanNum AS FinishNum
FROM rb_class_plan AS A INNER JOIN rb_class AS B ON A.ClassId=B.ClassId
LEFT JOIN rb_course AS C ON B.CouseId=C.CourseId
LEFT JOIN rb_teacher AS D ON A.TeacherId=D.TId
LEFT JOIN rb_class_room AS E ON A.ClassRoomId=E.RoomId
LEFT JOIN rb_class_time F on A.ClassPlanId = F.ClassPlanId
LEFT JOIN ((SELECT ClassId,COUNT(*) as TotalPlanNum from rb_class_plan where `Status`=0 GROUP BY ClassId)) as plan on plan.ClassId=a.ClassId
LEFT JOIN rb_class_time F on A.ClassPlanId = F.ClassPlanId
LEFT JOIN (SELECT ClassId,COUNT(*) as TotalPlanNum from rb_class_plan where `Status`=0 AND ClassDate<='{1}' GROUP BY ClassId) as finishPlan on finishPlan.ClassId=a.ClassId
LEFT JOIN (SELECT ClassId,COUNT(*) as TotalPlanNum from rb_class_plan where `Status`=0 GROUP BY ClassId) as plan on plan.ClassId=a.ClassId
WHERE 1=1 AND A.`Status`=0 AND B.`Status`=0 {0}
) AS A
GROUP BY A.ClassPlanId,A.ClassId ,A.ClassDate,A.ClassRoomId,A.CompleteProgress
", where.ToString());
", where.ToString(),Common.ConvertHelper.FormatDate(DateTime.Now));
return Get<RB_Class_Plan_ViewModel>(builder.ToString()).ToList();
}
......@@ -1187,7 +1189,7 @@ WHERE a.`Status`=0 ");
builder.AppendFormat(" AND A.{0}={1} ", nameof(RB_Class_Plan_ViewModel.ClassId), classId);
}
builder.AppendFormat(@$" And a.ClassDate <='{DateTime.Now.ToString("yyyy-MM-dd")} 23:59:59'");
builder.AppendFormat(@$" And a.ClassDate <='{Common.ConvertHelper.FormatDate(DateTime.Now)} 23:59:59'");
builder.AppendFormat(@" ORDER BY ClassDate DESC limit " + day);
return Get<RB_Class_Plan_ViewModel>(builder.ToString()).ToList();
}
......@@ -1203,7 +1205,7 @@ WHERE a.`Status`=0 ");
string sql = $@"SELECT a.*,(select count(0) from rb_class_plan p where p.`Status`=0 and p.Group_Id ={groupId} and p.ClassId ={classId} and p.ClassDate < a.ClassDate) as LessonPlanNum
FROM rb_class_plan as a
WHERE a.`Status`=0 and a.Group_Id ={groupId} and a.ClassId ={classId}
and a.ClassDate <='{DateTime.Now.ToString("yyyy-MM-dd")} 23:59:59'
and a.ClassDate <='{Common.ConvertHelper.FormatDate(DateTime.Now)} 23:59:59'
order by a.ClassDate desc limit 1";
return Get<RB_Class_Plan_ViewModel>(sql).FirstOrDefault();
}
......@@ -1219,7 +1221,7 @@ order by a.ClassDate desc limit 1";
string sql = $@"SELECT a.*,(select count(0) from rb_class_plan p where p.`Status`=0 and p.Group_Id ={groupId} and p.ClassId ={classId} and p.ClassDate < a.ClassDate) as LessonPlanNum
FROM rb_class_plan as a
WHERE a.`Status`=0 and a.Group_Id ={groupId} and a.ClassId ={classId}
and a.ClassDate <='{DateTime.Now.ToString("yyyy-MM-dd")} 23:59:59'
and a.ClassDate <='{Common.ConvertHelper.FormatDate(DateTime.Now)} 23:59:59'
order by a.ClassDate desc";
return Get<RB_Class_Plan_ViewModel>(sql).ToList();
}
......
......@@ -150,16 +150,19 @@ FROM
(
SELECT A.Id,A.Account,A.WorkUserId,A.`Password`,A.AccountType,A.AccountId,A.CreateBy,A.CreateTime,A.UpdateBy,A.UpdateTime,A.Group_Id,B.School_Id,A.`Status`,B.LeaveStatus
,A.AnnualLeaveDay, A.DirectSupervisor,A.OpenId,A.ActivationStatus,IFNULL(B.MName,'') AS AccountName,B.MHead AS UserIcon,B.Dept_Id,B.Post_Id,IFNULL(B.Email,'') AS Email,B.IsTenCccUser
,B.UserRole
FROM rb_account AS A INNER JOIN rb_manager AS B ON A.AccountId=B.MId AND A.AccountType=1
WHERE 1=1 {0}
UNION ALL
SELECT A.Id,A.Account,A.WorkUserId,A.`Password`,A.AccountType,A.AccountId,A.CreateBy,A.CreateTime,A.UpdateBy,A.UpdateTime,A.Group_Id,B.School_Id,A.`Status`,B.LeaveStatus
,A.AnnualLeaveDay, A.DirectSupervisor,A.OpenId,A.ActivationStatus,IFNULL(B.TeacherName,'') AS AccountName,B.TeacherIcon AS UserIcon,B.Dept_Id,B.Post_Id,IFNULL(B.Email,'') AS Email,B.IsTenCccUser
,B.UserRole
FROM rb_account AS A INNER JOIN rb_teacher AS B ON A.AccountId=B.TId AND A.AccountType=2
WHERE 1=1 {0}
UNION ALL
SELECT A.Id,A.Account,A.WorkUserId,A.`Password`,A.AccountType,A.AccountId,A.CreateBy,A.CreateTime,A.UpdateBy,A.UpdateTime,A.Group_Id,B.School_Id,A.`Status`,B.LeaveStatus
,A.AnnualLeaveDay, A.DirectSupervisor,A.OpenId,A.ActivationStatus,IFNULL(B.AssistName,'') AS AccountName,B.AssistIcon AS UserIcon,B.Dept_Id,B.Post_Id,IFNULL(B.Email,'') AS Email,0 AS IsTenCccUser
,0 AS UserRole
FROM rb_account AS A INNER JOIN rb_assist AS B ON A.AccountId=B.AId AND A.AccountType=3
WHERE 1=1 {0}
) AS A LEFT JOIN rb_group AS g ON A.Group_Id=g.GId
......@@ -355,10 +358,10 @@ FROM
{
where.AppendFormat(" AND B.{0}={1} ", nameof(Employee_ViewModel.Group_Id), query.Group_Id);
}
if (query.School_Id > -1)
{
where.AppendFormat(" AND B.{0}={1} ", nameof(Employee_ViewModel.School_Id), query.School_Id);
}
//if (query.School_Id > -1)
//{
// where.AppendFormat(" AND B.{0}={1} ", nameof(Employee_ViewModel.School_Id), query.School_Id);
//}
if (!string.IsNullOrWhiteSpace(query.Account))
{
where.AppendFormat(" AND A.{0}='{1}' ", nameof(Employee_ViewModel.Account), query.Account.Trim());
......
......@@ -28,11 +28,6 @@ namespace Edu.Repository.User
/// </summary>
private readonly RB_Student_LogRepository student_LogRepository = new RB_Student_LogRepository();
/// <summary>
/// 学员协同人员仓储层对象
/// </summary>
private readonly RB_Student_AssistRepository student_AssistRepository = new RB_Student_AssistRepository();
/// <summary>
/// 客户阶段仓储层对象
/// </summary>
......@@ -302,6 +297,18 @@ WHERE 1=1
builder.AppendFormat(" AND t.{0}={1} ", nameof(RB_Student_ViewModel.CreateBy), query.CreateBy);
}
}
if (query.ExistCourseConsultant > 0)
{
if (query.ExistCourseConsultant == 1)
{
builder.AppendFormat(" AND Exists (SELECT StuId FROM rb_student_assist WHERE AssistType=2 AND `Status`=0 AND t.StuId=StuId) ");
}
if (query.ExistCourseConsultant == 2)
{
builder.AppendFormat(" AND NOT Exists (SELECT StuId FROM rb_student_assist WHERE AssistType=2 AND `Status`=0 AND t.StuId=StuId) ");
}
}
}
builder.AppendFormat(" ORDER BY t.{0} DESC ", nameof(RB_Student_ViewModel.StuId));
return GetPage<RB_Student_ViewModel>(pageIndex, pageSize, out rowsCount, builder.ToString(), parameters).ToList();
......@@ -364,10 +371,11 @@ WHERE o.OrderState=1 and og.`Status`=0 and sog.`Status`=0 and og.GuestState <>2
string logContent = "";
string logTitle = "";
int createBy = 0;
if (model.CreateType == Common.Enum.User.StuCreateTypeEnum.CustomerInput || model.CreateType == Common.Enum.User.StuCreateTypeEnum.EmployeeInput)
if (model.CreateType == Common.Enum.User.StuCreateTypeEnum.EmployeeInput)
{
model.StuSourceId = 0;
}
model.StuTel = Common.Plugin.StringHelper.ReplaceMobile(model.StuRealMobile);
if (model.StuId > 0)
{
......
......@@ -25,34 +25,34 @@ namespace Edu.ThirdCore.TenCloud
/// <returns></returns>
public async Task<(bool result, string message)> SetUserToCCCUser(Employee_ViewModel employee)
{
CreateStaffRequest req = new CreateStaffRequest();
req.SdkAppId = SDKAPPID;
SeatUserInfo seatUserInfo1 = new SeatUserInfo();
seatUserInfo1.Name = employee.EmployeeName;
seatUserInfo1.Mail = employee.Email;
seatUserInfo1.Phone = employee.EmployeeTel;
seatUserInfo1.Nick = employee.EmployeeName.ToCharArray()[0] + "老师";
seatUserInfo1.UserId = employee.Id.ToString();
seatUserInfo1.StaffNumber = employee.Id.ToString();
CreateStaffRequest req = new CreateStaffRequest
{
SdkAppId = SDKAPPID
};
SeatUserInfo seatUserInfo1 = new SeatUserInfo
{
Name = employee.EmployeeName,
Mail = employee.Email,
Phone = employee.EmployeeTel,
Nick = employee.EmployeeName.ToCharArray()[0] + "老师",
UserId = employee.Id.ToString(),
StaffNumber = employee.Id.ToString()
};
req.Staffs = new SeatUserInfo[] { seatUserInfo1 };
var credential = TenCloudCredential._instance;
CreateStaffResponse resp = credential.CreateStaffSync(req);
//JObject result = JObject.Parse(AbstractModel.ToJsonString(resp));
if (resp.ErrorStaffList!=null && resp.ErrorStaffList.Length>0)
if (resp.ErrorStaffList != null && resp.ErrorStaffList.Length > 0)
{
return (false, resp.ErrorStaffList[0].Message);
}
else
else
{
var groupId = QueryDescribeSkillGroup();
if (groupId == null)
{
return (false, "电话客服添加成功,但是关联技能组失败");
}
else
else
{
SetTenUserStaffSkillGroupList(employee.Email, groupId);
}
......@@ -63,10 +63,12 @@ namespace Edu.ThirdCore.TenCloud
public void SetTenUserStaffSkillGroupList(string mail, long?[] list)
{
var credential = TenCloudCredential._instance;
BindStaffSkillGroupListRequest req = new BindStaffSkillGroupListRequest();
req.SdkAppId = SDKAPPID;
req.StaffEmail = mail;
req.SkillGroupList = list;
BindStaffSkillGroupListRequest req = new BindStaffSkillGroupListRequest
{
SdkAppId = SDKAPPID,
StaffEmail = mail,
SkillGroupList = list
};
BindStaffSkillGroupListResponse resp = credential.BindStaffSkillGroupListSync(req);
}
......@@ -74,19 +76,21 @@ namespace Edu.ThirdCore.TenCloud
/// 获取技能组数组
/// </summary>
/// <returns></returns>
public long?[] QueryDescribeSkillGroup()
public long?[] QueryDescribeSkillGroup()
{
var credential = TenCloudCredential._instance;
DescribeSkillGroupInfoListRequest req = new DescribeSkillGroupInfoListRequest();
req.SdkAppId = SDKAPPID;
req.PageSize = 1;
req.PageNumber = 100;
DescribeSkillGroupInfoListRequest req = new DescribeSkillGroupInfoListRequest
{
SdkAppId = SDKAPPID,
PageSize = 1,
PageNumber = 100
};
DescribeSkillGroupInfoListResponse resp = credential.DescribeSkillGroupInfoListSync(req);
if (resp.SkillGroupList != null && resp.SkillGroupList.Length > 0)
{
return resp.SkillGroupList.Select(x => x.SkillGroupId).ToArray();
}
else
else
{
return null;
}
......@@ -100,11 +104,12 @@ namespace Edu.ThirdCore.TenCloud
public async Task<(bool result, string message)> DelUserToCCCUser(Employee_ViewModel employee)
{
var credential = TenCloudCredential._instance;
DeleteStaffRequest req = new DeleteStaffRequest();
req.SdkAppId = SDKAPPID;
req.StaffList = new string[] { employee.Email };
DeleteStaffRequest req = new DeleteStaffRequest
{
SdkAppId = SDKAPPID,
StaffList = new string[] { employee.Email }
};
DeleteStaffResponse resp = credential.DeleteStaffSync(req);
return (resp.OnlineStaffList == null, "");
}
......@@ -116,14 +121,15 @@ namespace Edu.ThirdCore.TenCloud
{
var credential = TenCloudCredential._instance;
var tenCccTokenItem = new TenCccTokenItem();
CreateSDKLoginTokenRequest req = new CreateSDKLoginTokenRequest();
req.SdkAppId = SDKAPPID;
req.SeatUserId = mail;
CreateSDKLoginTokenRequest req = new CreateSDKLoginTokenRequest
{
SdkAppId = SDKAPPID,
SeatUserId = mail
};
CreateSDKLoginTokenResponse resp = credential.CreateSDKLoginTokenSync(req);
tenCccTokenItem.SdkURL = resp.SdkURL;
tenCccTokenItem.Token = resp.Token;
return tenCccTokenItem;
}
}
}
......@@ -14,6 +14,7 @@ using Edu.Model.ViewModel.LearningGarden;
using Edu.Model.ViewModel.User;
using Edu.Module.Course;
using Edu.Module.EduTask;
using Edu.Module.Exam;
using Edu.Module.Public;
using Edu.Module.User;
using Edu.WebApi.Filter;
......@@ -58,10 +59,11 @@ namespace Edu.WebApi.Controllers.Applet
/// 学习园地处理类对象
/// </summary>
private readonly LearningGardenModule learningGardenModule = AOP.AOPHelper.CreateAOPObject<LearningGardenModule>();
/// <summary>
/// 课程单词
/// 课程单词学习、测试处理类对象
/// </summary>
private readonly CourseWordsModule courseWordsModule = new CourseWordsModule();
private readonly CourseExamModule courseExamModule = new CourseExamModule();
#region 小程序首页
......@@ -413,13 +415,15 @@ namespace Edu.WebApi.Controllers.Applet
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult GetMyStudyCourseInfo() {
public ApiResult GetMyStudyCourseInfo()
{
var appletUserInfo = base.AppletUserInfo;
JObject parms = JObject.Parse(base.RequestParm.Msg.ToString());
int ClassId = parms.GetInt("ClassId", 0);//班级ID
int CourseId = parms.GetInt("CourseId", 0);//课程ID
int GuestId = parms.GetInt("GuestId", 0);//订单GuestId
if (ClassId <= 0) {
if (ClassId <= 0)
{
return ApiResult.ParamIsNull("请传递班级ID");
}
//获取课程回顾
......@@ -467,14 +471,17 @@ namespace Edu.WebApi.Controllers.Applet
var Words = new object();
if (ClassId > 0 && CourseId > 0)
{
Words = classModule.GetIndexWords(ClassId, CourseId, appletUserInfo.Group_Id);
Words = classModule.GetIndexWords(ClassId, CourseId, appletUserInfo.Group_Id,appletUserInfo.Id);
}
else
{
Words = new
{
NextWord = 0,
ReviewWord = 0
NextCourseNo=0,
ReviewWord = 0,
ReviewCourseNo=0,
CourseId = CourseId
};
}
......@@ -507,7 +514,8 @@ namespace Edu.WebApi.Controllers.Applet
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult GetMyStudyCourseChapterList() {
public ApiResult GetMyStudyCourseChapterList()
{
var appletUserInfo = base.AppletUserInfo;
JObject parms = JObject.Parse(base.RequestParm.Msg.ToString());
int ClassId = parms.GetInt("ClassId", 0);//班级ID
......@@ -516,7 +524,8 @@ namespace Edu.WebApi.Controllers.Applet
{
return ApiResult.ParamIsNull("请传递班级ID");
}
if (CourseId <= 0) {
if (CourseId <= 0)
{
return ApiResult.ParamIsNull("请传递课程ID");
}
......@@ -528,13 +537,24 @@ namespace Edu.WebApi.Controllers.Applet
var chapterTreeList = courseModule.GetChapterTreeListModule_V2(new Model.ViewModel.Course.RB_Course_Chapter_ViewModel() { Group_Id = appletUserInfo.Group_Id, CourseId = CourseId });
var ctList = chapterTreeList.Where(x => Convert.ToInt32(x.ChapterNo) <= MaxChapterNo).ToList();
//章节单词得分
var prepWordsList = courseExamModule.GetStuWordsPrepListModule(new RB_StuWords_Prep_Extend()
{
CourseId = CourseId,
Group_Id = appletUserInfo.Group_Id,
Stu_Account_Id = appletUserInfo.Id
});
//组装数据
var RList = new List<object>();
foreach (var item in ctList)
{
//判断是否已经学习
var planModel = planList.Where(x => item.ChapterNo == x.LessonPlanNum.ToString()).FirstOrDefault();
var tempPrepWords = prepWordsList?.Where(qitem => qitem.ChapterId.ToString() == item.ChapterNo)?.FirstOrDefault();
decimal StudyProgress = 0;
if (tempPrepWords != null && tempPrepWords.TotalNum > 0)
{
StudyProgress = Math.Round(Convert.ToDecimal(tempPrepWords.StudyNum) / Convert.ToDecimal(tempPrepWords.TotalNum) * 100, 2); ;
}
int Num = 1;
RList.Add(new
{
......@@ -548,6 +568,8 @@ namespace Edu.WebApi.Controllers.Applet
x.VideoUrl
}),
ChapterTree = item,
Score=tempPrepWords?.Score??0,
StudyProgress,
NextChapterNo = chapterTreeList.Where(x => Convert.ToInt32(x.ChapterNo) > Convert.ToInt32(item.ChapterNo)).OrderBy(x => Convert.ToInt32(x.ChapterNo)).FirstOrDefault()?.ChapterNo ?? ""
});
}
......
......@@ -5,6 +5,7 @@ using Edu.Module.Exam;
using Edu.WebApi.Filter;
using Microsoft.AspNetCore.Cors;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
......@@ -29,8 +30,8 @@ namespace Edu.WebApi.Controllers.Applet
{
var CourseId = base.ParmJObj.GetInt("CourseId");
var ChapterId = base.ParmJObj.GetInt("ChapterId");
var PrevChapterId = base.ParmJObj.GetInt("PrevChapterId");
var list = courseExamModule.GetStudyCourseWords(CourseId, ChapterId, PrevChapterId);
var ReviewChapterId = base.ParmJObj.GetInt("ReviewChapterId");
var list = courseExamModule.GetStudyCourseWords(CourseId, ChapterId, ReviewChapterId,base.AppletUserInfo.Id);
return ApiResult.Success(data: list);
}
......@@ -49,7 +50,11 @@ namespace Edu.WebApi.Controllers.Applet
CourseId = base.ParmJObj.GetInt("CourseId"),
Stu_Account_Id = base.ParmJObj.GetInt("Stu_Account_Id"),
ChapterId=base.ParmJObj.GetInt("ChapterId"),
PrepNum=base.ParmJObj.GetInt("PrepNum"),
ReviewNum=base.ParmJObj.GetInt("ReviewNum"),
StudyNum=base.ParmJObj.GetInt("StudyNum"),
ReviewCourseChapterId=base.ParmJObj.GetInt("ReviewCourseChapterId"),
StudyType=base.ParmJObj.GetInt("StudyType"),
};
model.CreateBy = base.AppletUserInfo.Id;
model.CreateTime = DateTime.Now;
......@@ -82,7 +87,7 @@ namespace Edu.WebApi.Controllers.Applet
model.Group_Id = base.AppletUserInfo.Group_Id;
model.Status = Common.Enum.DateStateEnum.Normal;
bool flag = courseExamModule.SetStuWordsReviewModule(model);
return flag ? ApiResult.Success() : ApiResult.Failed();
return flag ? ApiResult.Success(data:model) : ApiResult.Failed();
}
/// <summary>
......@@ -98,5 +103,63 @@ namespace Edu.WebApi.Controllers.Applet
var obj = courseExamModule.CreateCourseExamModule(CourseId, ChapterId, NextChapterId);
return ApiResult.Success(data: obj);
}
/// <summary>
/// 提交单词测试
/// </summary>
/// <returns></returns>
[HttpPost]
public ApiResult SubmitWordsExam()
{
var model = new RB_StuWords_Exam_Extend()
{
Id = base.ParmJObj.GetInt("Id"),
ClassId = base.ParmJObj.GetInt("ClassId"),
CourseId=base.ParmJObj.GetInt("CourseId"),
ChapterId=base.ParmJObj.GetInt("ChapterId"),
ExamStartTime = base.ParmJObj.GetDateTime("ExamStartTime"),
};
model.Stu_Account_Id = base.AppletUserInfo.Id;
model.CreateBy = base.AppletUserInfo.Id;
model.CreateTime = DateTime.Now;
model.School_Id = base.AppletUserInfo.School_Id;
model.Group_Id = base.AppletUserInfo.Group_Id;
model.Status = Common.Enum.DateStateEnum.Normal;
model.Score = 0;
model.ExamEndTime = DateTime.Now;
model.ExamDetailList = new List<RB_StuWords_ExamDetail_Extend>();
string details = base.ParmJObj.GetStringValue("Details");
if (!string.IsNullOrEmpty(details))
{
JArray jArray = JArray.Parse(details);
if (jArray != null && jArray.Count > 0)
{
foreach (var obj in jArray)
{
JObject jobj = JObject.Parse(obj.ToString());
model.ExamDetailList.Add(new RB_StuWords_ExamDetail_Extend()
{
DetailId = 0,
ExamId = 0,
WordId = jobj.GetInt("WordId"),
Title = jobj.GetStringValue("Title"),
QuestionContent = jobj.GetStringValue("QuestionContent"),
QuestionTypeId = jobj.GetInt("QuestionTypeId"),
QuestionTypeKey=jobj.GetStringValue("QuestionTypeKey"),
IsRight = jobj.GetInt("IsTrue"),
Answer=jobj.GetStringValue("Answer"),
});
}
}
}
var flag = courseExamModule.SubmitStuWordsExamModule(model);
return flag ? ApiResult.Success(data: new
{
model.Id,
model.Score,
model.ExamMinutes
}) : ApiResult.Failed();
}
}
}
......@@ -461,10 +461,11 @@ namespace Edu.WebApi.Controllers.Course
{
ClassId = parms.GetInt("ClassId", 0),
OrderId = parms.GetInt("OrderId"),
SourceId=parms.GetInt("SourceId"),
Group_Id = base.UserInfo.Group_Id,
OrderState = OrderStateEnum.Normal
};
if (query.ClassId <= 0)
if (query.ClassId <= 0&&query.SourceId<=0)
{
return ApiResult.ParamIsNull();
}
......@@ -1250,7 +1251,7 @@ namespace Edu.WebApi.Controllers.Course
dmodel.CreateTime = DateTime.Now;
dmodel.UpdateBy = userInfo.Id;
dmodel.UpdateTime = DateTime.Now;
bool flag = orderModule.SetOrderGuestInfo(dmodel, out string message);
bool flag = orderModule.SetOrderGuestInfo_V2(dmodel, out string message);
return flag ? ApiResult.Success() : ApiResult.Failed(message);
}
......
......@@ -51,7 +51,6 @@ namespace Edu.WebApi.Controllers.User
/// </summary>
private readonly TeacherModule teacherModule = new TeacherModule();
private readonly EmployeeBonusModule employeeBonusModule = new EmployeeBonusModule();
private readonly StudentModule studentModule = new StudentModule();
......@@ -227,6 +226,7 @@ namespace Edu.WebApi.Controllers.User
PostName = model.PostName,
Email = model.Email,
IsTenCccUser = model.IsTenCccUser,
IsCourseConsultant = (model != null && model.UserRole == UserRoleEnum.CourseConsultant) ? 1 : 0,
ActionMenuList = actionList?.Select(qitem => new { qitem.FunctionCode, qitem.FunctionName, qitem.MenuName, qitem.MenuUrl }),
UploadConfig = new
{
......@@ -240,7 +240,7 @@ namespace Edu.WebApi.Controllers.User
},
StudyAbroadObj = publicModule.GetStudyAbroadListModule()
};
if (model.IsTenCccUser == 1)
if (model.IsTenCccUser == 1)
{
var tObj = new TenCloudCCCHelper().GetTenCccUserToken(model.Email).Result;
obj.TenCccToken = new TenCccTokenItem()
......
......@@ -678,6 +678,7 @@ namespace Edu.WebApi.Controllers.User
QQ = base.ParmJObj.GetStringValue("QQ"),
WeChatNo = base.ParmJObj.GetStringValue("WeChatNo"),
StuType = base.ParmJObj.GetInt("StuType"),
ExistCourseConsultant=base.ParmJObj.GetInt("ExistCourseConsultant"),
};
if (query.IsQueryMyStu == 1)
{
......
......@@ -13,6 +13,7 @@ using Edu.Common.API;
using Edu.Cache.User;
using Edu.WebApi.Helper;
using System.Reflection;
using System.Collections.Generic;
namespace Edu.WebApi.Filter
{
......@@ -58,9 +59,15 @@ namespace Edu.WebApi.Filter
string cachedKey = SecurityHelper.MD5(string.Format("cmd={0}&token={1}", actionUrl, token));
try
{
//不验证重复提交的方法名称
List<string> notValidateList = new List<string>()
{
"course/setchapter",
"appletwords/setstuwordsprep",
};
if (UserReidsCache.Exists(cachedKey))//判断表单是否重复提交
{
if (actionUrl != "course/setchapter")
if (!notValidateList.Contains(actionUrl))
{
actionContext.Result = new Microsoft.AspNetCore.Mvc.JsonResult(new ApiResult
{
......
......@@ -70,7 +70,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Edu.Module.QYWeChat", "Edu.
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Edu.Module.Exam", "Edu.Module.Exam\Edu.Module.Exam.csproj", "{81C24D63-1109-4476-99AB-590EF54972E5}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Edu.Module.Customer", "Edu.Module.Customer\Edu.Module.Customer.csproj", "{11365608-C76C-4CF7-9DBE-78A61A934448}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Edu.Module.Customer", "Edu.Module.Customer\Edu.Module.Customer.csproj", "{11365608-C76C-4CF7-9DBE-78A61A934448}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
......
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