123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646 |
- package course
-
- import (
- "errors"
- "spaceofcheng/services/models"
- "spaceofcheng/services/models/cases"
- "spaceofcheng/services/models/coupon"
- "spaceofcheng/services/models/course"
- "spaceofcheng/services/models/customer"
- "spaceofcheng/services/models/model"
- "spaceofcheng/services/models/system"
- "spaceofcheng/services/models/vipcard"
- "spaceofcheng/services/service"
- "spaceofcheng/services/utils"
- "strings"
- )
-
- // CourseServ 系统处理
- type CourseServ struct {
- ctx *utils.Context
- dao *course.CourseDAO
- casedao *cases.CaseDAO
- custDAO *customer.CustomerDAO
- userDAO *system.UserDAO
- couponDAO *coupon.CouponDAO
- vipDAO *vipcard.VipcardDAO
- }
-
- // NewCourseServ 初始化
- func NewCourseServ(ctx *utils.Context) *CourseServ {
- return &CourseServ{
- ctx: ctx,
- dao: course.NewCourseDAO(ctx),
- casedao: cases.NewCaseDAO(ctx),
- custDAO: customer.NewCustomerDAO(ctx),
- userDAO: system.NewUserDAO(ctx),
- couponDAO: coupon.NewCouponDAO(ctx),
- vipDAO: vipcard.NewVipcardDAO(ctx),
- }
- }
-
- // GetCourseList 获取课程列表
- func (s *CourseServ) GetCourseList(caseids, name, typeid, status string, page, pageSize int) (map[string]interface{}, error) {
- if pageSize == 0 {
- pageSize = service.PAGENUM
- }
- if page == 0 {
- page = 1
- }
- list, err := s.dao.GetCourseList(caseids, name, typeid, status, page, pageSize)
- if err != nil {
- utils.LogError("获取课程信息失败: " + err.Error())
- return nil, errors.New("获取课程信息失败")
- }
- total, err := s.dao.GetCourseCount(caseids, name, status, typeid)
- if err != nil {
- utils.LogError("获取课程信息失败: " + err.Error())
- return nil, errors.New("获取课程信息失败")
- }
-
- return map[string]interface{}{
- "list": list,
- "pagesize": pageSize,
- "pagenum": total,
- "page": page,
- }, nil
- }
-
- // GetCourseByID 获取课程明细
- func (s *CourseServ) GetCourseByID(courseid string) (*course.CourseDetail, error) {
- if courseid == "" {
- return nil, utils.LogError("不存在课程信息!")
- }
- info, err := s.dao.GetCourseInfo(courseid)
- if err != nil {
- utils.LogError("获取课程信息失败: " + err.Error())
- return nil, errors.New("获取课程信息失败")
- }
- if info == nil {
- return nil, utils.LogError("不存在课程信息!")
- }
- if info.Status == models.STATUS_DEL {
- return nil, utils.LogError("课程已被删除!")
- }
-
- tags, err := s.dao.GetCourseTag(courseid)
- if err != nil {
- utils.LogError("获取课程标签信息失败: " + err.Error())
- return nil, errors.New("获取课程信息失败")
- }
- info.CourseTags = tags
- details, err := s.dao.GetCourseDetail(courseid)
- if err != nil {
- utils.LogError("获取课程明细信息失败: " + err.Error())
- return nil, errors.New("获取课程信息失败")
- }
- info.CourseDetail = details
- imgs, err := s.dao.GetCourseImgs(courseid)
- if err != nil {
- utils.LogError("获取课程图片信息失败: " + err.Error())
- return nil, errors.New("获取课程信息失败")
- }
- info.CourseImgs = imgs
- caseinfo, err := s.casedao.GetCaseByID(info.CaseId)
- if err != nil {
- utils.LogError("获取课程案场信息失败: " + err.Error())
- return nil, errors.New("获取课程信息失败")
- }
- info.CaseInfo = caseinfo
- return info, nil
- }
-
- // SaveCourse 保存课程信息
- func (s *CourseServ) SaveCourse(course model.TaCourse, tagids string) (*model.TaCourse, error) {
- var newInfo *model.TaCourse
- var err error
- if course.CourseName == "" {
- return nil, utils.LogError("课程名称不允许为空!")
- }
- if course.CourseImg == "" {
- return nil, utils.LogError("课程主图不允许为空!")
- }
- if course.LocationId == "" {
- return nil, utils.LogError("课程类型不允许为空!")
- }
- if course.CaseId == "" {
- return nil, utils.LogError("课程案场不允许为空!")
- }
- if course.Price == "" || course.Price == "0" {
- return nil, utils.LogError("课程价格不允许为0!")
- }
- if course.MinNum == 0 {
- return nil, utils.LogError("最小开课人数不允许为0!")
- }
- if course.MaxNum == 0 {
- return nil, utils.LogError("上课人数不允许为0!")
- }
- if course.MaxNum < course.MinNum {
- return nil, utils.LogError("上课人数不允许小于最小开课人数!")
- }
- if course.CourseNum == 0 {
- return nil, utils.LogError("课时数不允许为0!")
- }
- if course.BeginDate.IsZero() || course.EndDate.IsZero() {
- return nil, utils.LogError("课程时间不允许为空!")
- }
- if !course.EndDate.After(course.BeginDate) && course.EndDate != course.BeginDate {
- return nil, utils.LogError("截止时间必须大于开始时间!")
- }
- // if tagids == "" {
- // return nil, utils.LogError("请选择课程标签!")
- // }
- if course.CourseId == "" {
- org := s.ctx.Get("org").(model.SysOrg)
- course.OrgId = org.OrgId
- newInfo, err = s.dao.AddCourse(course)
- if err != nil {
- utils.LogError("保存课程信息失败: " + err.Error())
- return nil, errors.New("保存课程信息失败")
- }
- } else {
- err = s.dao.UpdateCourse(course)
- if err != nil {
- utils.LogError("保存课程信息失败: " + err.Error())
- return nil, errors.New("保存课程信息失败")
- }
- newInfo = &course
- err = s.dao.DelCourseTag(course.CourseId)
- if err != nil {
- utils.LogError("保存课程信息失败: " + err.Error())
- return nil, errors.New("保存课程信息失败")
- }
- }
- if tagids != "" {
- tags := strings.Split(tagids, ",")
- var courseTags []model.TaCourseTag
- for _, tag := range tags {
- arr := strings.Split(tag, ":")
- var tagid = ""
- if len(arr) > 1 {
- tagid = arr[1]
- } else {
- var taginfo = model.TdCourseTag{
- TagName: arr[0],
- OrgId: course.OrgId,
- }
- newtag, err := s.dao.AddCourseTag(taginfo)
- if err != nil {
- utils.LogError("保存课程信息失败: " + err.Error())
- return nil, errors.New("保存课程信息失败")
- }
- tagid = newtag.TagId
- }
- var coursetag = model.TaCourseTag{
- CourseId: newInfo.CourseId,
- TagId: tagid,
- }
- courseTags = append(courseTags, coursetag)
- }
- if len(courseTags) > 0 {
- err = s.dao.SaveCourseTag(courseTags)
- if err != nil {
- utils.LogError("保存课程信息失败: " + err.Error())
- return nil, errors.New("保存课程信息失败")
- }
- }
- }
-
- return newInfo, nil
- }
-
- // DelCourse 刪除课程信息
- func (s *CourseServ) DelCourse(courseid string) error {
- if courseid == "" {
- return utils.LogError("没有对应的课程!")
- }
- courseinfo, err := s.dao.GetCourseByID(courseid)
- if err != nil {
- utils.LogError("刪除课程信息失败: " + err.Error())
- return errors.New("刪除课程信息失败")
- }
- if courseinfo.Status != course.STATUS_UNPUBLISH {
- return utils.LogError("课程状态异常!不允许删除!")
- }
- isok, err := s.dao.CheckCourseInCardOrCoupon(courseid)
- if err != nil {
- utils.LogError("判断是否绑定卡券中失败: " + err.Error())
- return errors.New("判断是否绑定卡券中失败")
- }
- if !isok {
- return errors.New("课程已绑定卡券,不允许删除!")
- }
- err = s.dao.DelCourse(courseid)
- if err != nil {
- utils.LogError("刪除课程信息失败: " + err.Error())
- return errors.New("刪除课程信息失败")
- }
- err = s.dao.DeleteScheduleByCourse(courseid)
- return err
- }
-
- // CoursePublic 课程发布
- func (s *CourseServ) CoursePublic(courseid string) error {
- if courseid == "" {
- return utils.LogError("没有对应的课程!")
- }
- info, err := s.dao.GetCourseByID(courseid)
- if err != nil {
- utils.LogError("课程发布失败: " + err.Error())
- return errors.New("课程发布失败")
- }
- if info.Status != course.STATUS_UNPUBLISH {
- return utils.LogError("当前课程状态异常!请刷新后重试!")
- }
- // 获取课程已排课数量
- num, err := s.dao.GetCourseDetailCount(courseid)
- if err != nil {
- utils.LogError("课程发布失败: " + err.Error())
- return errors.New("课程发布失败")
- }
- if info.CourseNum > num {
- return errors.New("请先进行排课,再发布课程!")
- }
- err = s.dao.CoursePublic(courseid)
- if err != nil {
- utils.LogError("课程发布失败: " + err.Error())
- return errors.New("课程发布失败")
- }
- return nil
- }
-
- // CourseUnPublic 课程取消发布
- func (s *CourseServ) CourseUnPublic(courseid string) error {
- if courseid == "" {
- return utils.LogError("没有对应的课程!")
- }
- info, err := s.dao.GetCourseByID(courseid)
- if err != nil {
- utils.LogError("课程取消发布失败: " + err.Error())
- return errors.New("课程取消发布失败")
- }
- if info.Status != models.STATUS_NORMAL {
- return utils.LogError("当前课程状态异常!请刷新后重试!")
- }
- err = s.dao.CourseUnPublic(courseid)
- if err != nil {
- utils.LogError("课程发布失败: " + err.Error())
- return errors.New("课程发布失败")
- }
- return nil
- }
-
- // GetCourseImgs 获取课程图片
- func (s *CourseServ) GetCourseImgs(courseid string) ([]model.TaCourseImg, error) {
- if courseid == "" {
- return nil, utils.LogError("没有对应的课程!")
- }
- imgs, err := s.dao.GetCourseImgs(courseid)
- if err != nil {
- utils.LogError("获取课程图片失败: " + err.Error())
- return nil, errors.New("获取课程图片失败")
- }
- return imgs, nil
- }
-
- // SaveCourseImg 保存课程图片
- func (s *CourseServ) SaveCourseImg(img model.TaCourseImg) (*model.TaCourseImg, error) {
- var newinfo *model.TaCourseImg
- var err error
- if img.ImgUrl == "" {
- return nil, utils.LogError("请先上传图片!")
- }
- if img.ImgId == "" {
- newinfo, err = s.dao.AddCourseImg(img)
- } else {
- newinfo = &img
- err = s.dao.UpdateCourseImg(img)
- }
- if err != nil {
- utils.LogError("保存课程图片失败: " + err.Error())
- return nil, errors.New("保存课程图片失败")
- }
- return newinfo, err
- }
-
- // DelCourseImg 刪除课程图片
- func (s *CourseServ) DelCourseImg(imgid string) error {
- if imgid == "" {
- return utils.LogError("没有需要删除的内容!")
- }
- err := s.dao.DelCourseImg(imgid)
- if err != nil {
- utils.LogError("删除课程图片失败: " + err.Error())
- return errors.New("删除课程图片失败")
- }
- return err
- }
-
- // GetCourseSchedule 获取课程排期
- func (s *CourseServ) GetCourseSchedule(name, caseids, courseid, date string, page, pageSize int) (map[string]interface{}, error) {
- if pageSize == 0 {
- pageSize = service.PAGENUM
- }
- if page == 0 {
- page = 1
- }
- if date == "" {
- return nil, utils.LogError("请先选择需要排课的日期!")
- }
-
- list, err := s.dao.GetCourseSchedule(name, caseids, courseid, date, page, pageSize)
- if err != nil {
- utils.LogError("获取课程排期失败: " + err.Error())
- return nil, errors.New("获取课程排期失败")
- }
- total, err := s.dao.GetCourseScheduleCount(name, caseids, courseid, date)
- if err != nil {
- utils.LogError("获取课程排期失败: " + err.Error())
- return nil, errors.New("获取课程排期失败")
- }
-
- return map[string]interface{}{
- "list": list,
- "pagesize": pageSize,
- "pagenum": total,
- "page": page,
- }, nil
- }
-
- // GetDetails 获取所有排课
- func (s *CourseServ) GetDetails(caseid, date, courseid string) ([]course.DetailInfo, error) {
- if courseid == "" && caseid == "" {
- return nil, utils.LogError("请先选择案场!")
- }
- if date == "" {
- return nil, utils.LogError("请选择需要查看的月份!")
- }
- details, err := s.dao.GetDetails(caseid, date, courseid)
- if err != nil {
- utils.LogError("获取排期信息失败: " + err.Error())
- return nil, errors.New("获取排期信息失败")
- }
- return details, nil
- }
-
- // GetDetailByID 获取单个排课信息
- func (s *CourseServ) GetDetailByID(detailid string) (*model.TaCourseDetail, error) {
- if detailid == "" {
- return nil, utils.LogError("没有对应的排课信息!")
- }
- detail, err := s.dao.GetDetailByID(detailid)
- if err != nil {
- utils.LogError("获取排期信息失败: " + err.Error())
- return nil, errors.New("获取排期信息失败")
- }
- return detail, nil
- }
-
- // SaveDetail 保存排课信息
- func (s *CourseServ) SaveDetail(detail model.TaCourseDetail) (*model.TaCourseDetail, error) {
- var newinfo *model.TaCourseDetail
- if detail.CourseId == "" {
- return nil, utils.LogError("没有对应的课程信息!")
- }
- if detail.DetailName == "" {
- return nil, utils.LogError("课程名称不能为空!")
- }
- if detail.BeginDate.IsZero() || detail.EndDate.IsZero() {
- return nil, utils.LogError("课程时间不能为空!")
- }
- if detail.BeginDate.After(detail.EndDate) {
- return nil, utils.LogError("课程截止时间必须大于开始时间!")
- }
- courseinfo, err := s.dao.GetCourseByID(detail.CourseId)
- if err != nil {
- utils.LogError("获取排期信息失败: " + err.Error())
- return nil, errors.New("保存排课信息失败")
- }
- if courseinfo.Status != course.STATUS_UNPUBLISH {
- return nil, utils.LogError("课程状态异常!不允许排课!请刷新后重试!")
- }
- if detail.DetailId == "" {
- detail.OrgId = courseinfo.OrgId
- detail.CaseId = courseinfo.CaseId
- newinfo, err = s.dao.AddCourseDetail(detail)
- if err != nil {
- utils.LogError("保存排课信息失败: " + err.Error())
- return nil, errors.New("保存排课信息失败")
- }
- num, err := s.dao.GetCourseDetailCount(courseinfo.CourseId)
- if err != nil {
- utils.LogError("保存排课信息失败: " + err.Error())
- return nil, errors.New("保存排课信息失败")
- }
- err = s.dao.UpdateCourseScheduleNum(courseinfo.CourseId, num)
- if err != nil {
- utils.LogError("保存排课信息失败: " + err.Error())
- return nil, errors.New("保存排课信息失败")
- }
- } else {
- err := s.dao.UpdateCourseDetail(detail)
- if err != nil {
- utils.LogError("保存排课信息失败: " + err.Error())
- return nil, errors.New("保存排课信息失败")
- }
- newinfo = &detail
- }
- return newinfo, nil
- }
-
- // DelCourseDetail 删除课程明细
- func (s *CourseServ) DelCourseDetail(detailid string) error {
- if detailid == "" {
- return utils.LogError("没有对应的排课信息!")
- }
- detail, err := s.dao.GetDetailByID(detailid)
- if err != nil {
- utils.LogError("删除排课信息失败: " + err.Error())
- return errors.New("删除排课信息失败")
- }
- courseinfo, err := s.dao.GetCourseByID(detail.CourseId)
- if err != nil {
- utils.LogError("删除排课信息失败: " + err.Error())
- return errors.New("删除排课信息失败")
- }
- if courseinfo.Status != course.STATUS_UNPUBLISH {
- return utils.LogError("课程状态异常!不允许删除!")
- }
- isok, err := s.dao.CheckCourseInCardOrCoupon(detail.CourseId)
- if err != nil {
- utils.LogError("判断是否绑定卡券中失败: " + err.Error())
- return errors.New("判断是否绑定卡券中失败")
- }
- if !isok {
- return errors.New("课时已绑定卡券,不允许删除!")
- }
- err = s.dao.DelCourseDetail(detailid)
- if err != nil {
- utils.LogError("删除排课信息失败: " + err.Error())
- return errors.New("删除排课信息失败")
- }
- num, err := s.dao.GetCourseDetailCount(courseinfo.CourseId)
- if err != nil {
- utils.LogError("删除排课信息失败: " + err.Error())
- return errors.New("删除排课信息失败")
- }
- err = s.dao.UpdateCourseScheduleNum(courseinfo.CourseId, num)
- if err != nil {
- utils.LogError("删除排课信息失败: " + err.Error())
- return errors.New("删除排课信息失败")
- }
- return nil
- }
-
- // GetCourseBySelect 获取精选课程
- func (s *CourseServ) GetSelectCourseList(orgid string) ([]course.CourseDetail, error) {
- if orgid == "" {
- return nil, utils.LogError("参数错误!")
- }
- list, err := s.dao.GetSelectCourseList(orgid)
- if err != nil {
- utils.LogError("获取课程信息失败: " + err.Error())
- return nil, errors.New("获取课程信息失败")
- }
- for i, v := range list {
- caseinfo, err := s.casedao.GetCaseByID(v.CaseId)
- if err != nil {
- utils.LogError("获取课程信息失败: " + err.Error())
- return nil, errors.New("获取课程信息失败")
- }
- list[i].CaseInfo = caseinfo
- }
- return list, err
- }
-
- // GetCourseByLocation 根据位置获取课程
- func (s *CourseServ) GetCourseByLocation(orgid, locationid string) ([]course.CourseDetail, error) {
- if orgid == "" || locationid == "" {
- return nil, utils.LogError("参数错误!")
- }
- list, err := s.dao.GetCourseByLocation(orgid, locationid)
- if err != nil {
- utils.LogError("获取课程信息失败: " + err.Error())
- return nil, errors.New("获取课程信息失败")
- }
- for i, v := range list {
- caseinfo, err := s.casedao.GetCaseByID(v.CaseId)
- if err != nil {
- utils.LogError("获取课程信息失败: " + err.Error())
- return nil, errors.New("获取课程信息失败")
- }
- list[i].CaseInfo = caseinfo
- }
- return list, err
- }
-
- // GetCustomerCourse 获取用户的课程信息
- func (s *CourseServ) GetCustomerCourse(page, pageSize int) (map[string]interface{}, error) {
- if pageSize == 0 {
- pageSize = service.PAGENUM
- }
- if page == 0 {
- page = 1
- }
- customer := s.ctx.Get("customer")
- cust := customer.(model.TaCustomer)
- list, err := s.dao.GetCustomerCourse(cust.CustomerId, page, pageSize)
- if err != nil {
- utils.LogError("获取课程信息失败: " + err.Error())
- return nil, errors.New("获取课程信息失败")
- }
- total, err := s.dao.GetCustomerCourseCount(cust.CustomerId)
- if err != nil {
- utils.LogError("获取课程信息失败: " + err.Error())
- return nil, errors.New("获取课程信息失败")
- }
- return map[string]interface{}{
- "list": list,
- "pagesize": pageSize,
- "pagenum": total,
- "page": page,
- }, nil
-
- }
-
- // GetCustomerCourseByID 获取我的课程明细
- func (s *CourseServ) GetCustomerCourseByID(id string) (*course.CustomerCourse, error) {
- info, err := s.dao.GetCustomerCourseByID(id)
- if err != nil {
- utils.LogError("获取课程信息失败: " + err.Error())
- return nil, errors.New("获取课程信息失败")
- }
- return info, err
- }
-
- // GetCourseBySendType 根据类型获取课程
- func (s *CourseServ) GetCourseBySendType(typeval, caseids string) ([]model.TaCourse, error) {
- courses, err := s.dao.GetCourseBySendType(typeval, caseids)
- if err != nil {
- utils.LogError("获取课程信息失败: " + err.Error())
- return nil, errors.New("获取课程信息失败")
- }
- return courses, err
- }
-
- // GetCourseCanUse 获取可用课程列表
- func (s *CourseServ) GetCourseCanUse(caseids string, page, pageSize int) (map[string]interface{}, error) {
- if pageSize == 0 {
- pageSize = service.PAGENUM
- }
- if page == 0 {
- page = 1
- }
- list, err := s.dao.GetCourseCanUse(caseids, page, pageSize)
- if err != nil {
- utils.LogError("获取课程信息失败: " + err.Error())
- return nil, errors.New("获取课程信息失败")
- }
- total, err := s.dao.GetCourseCanUseCount(caseids)
- if err != nil {
- utils.LogError("获取课程信息失败: " + err.Error())
- return nil, errors.New("获取课程信息失败")
- }
-
- return map[string]interface{}{
- "list": list,
- "pagesize": pageSize,
- "pagenum": total,
- "page": page,
- }, nil
- }
-
- // GetCourseList 获取微信首页课程列表
- func (s *CourseServ) GetCourseForWechatFront(orgId string, page, pageSize int) (map[string]interface{}, error) {
- if pageSize == 0 {
- pageSize = service.PAGENUM
- }
- if page == 0 {
- page = 1
- }
- list, err := s.dao.GetCourseForWechatFront(orgId, page, pageSize)
- if err != nil {
- utils.LogError("获取课程信息失败: " + err.Error())
- return nil, errors.New("获取课程信息失败")
- }
- for i := 0; i < len(list); i++ {
- tags, err := s.dao.GetCourseTag(list[i].CourseId)
- if err != nil {
- utils.LogError("获取课程信息失败: " + err.Error())
- return nil, errors.New("获取课程信息失败")
- }
- list[i].CourseTags = tags
- }
- total, err := s.dao.GetCourseForWechatFrontCount(orgId)
- if err != nil {
- utils.LogError("获取课程信息失败: " + err.Error())
- return nil, errors.New("获取课程信息失败")
- }
-
- return map[string]interface{}{
- "list": list,
- "pagesize": pageSize,
- "pagenum": total,
- "page": page,
- }, nil
- }
|