course.go 22KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737
  1. package course
  2. import (
  3. "errors"
  4. "spaceofcheng/services/models"
  5. "spaceofcheng/services/models/model"
  6. "spaceofcheng/services/utils"
  7. "strconv"
  8. "strings"
  9. "time"
  10. "github.com/astaxie/beego"
  11. "github.com/yl10/kit/guid"
  12. "github.com/go-xorm/xorm"
  13. )
  14. // CourseDAO 当前数据库操作对象
  15. type CourseDAO struct {
  16. ctx *utils.Context
  17. db *xorm.Session
  18. }
  19. // NewCourseDAO New Inst
  20. func NewCourseDAO(ctx *utils.Context) *CourseDAO {
  21. return &CourseDAO{
  22. ctx: ctx,
  23. db: ctx.DB,
  24. }
  25. }
  26. const (
  27. STATUS_UNPUBLISH = 0
  28. IS_SELECT = 1
  29. )
  30. // CourseInfo 课程
  31. type CourseInfo struct {
  32. model.TaCourse `xorm:"extends"`
  33. CourseType string
  34. }
  35. // GetCourseList 获取课程列表
  36. func (m *CourseDAO) GetCourseList(caseids, name, typeid, status string, page, pageSize int) ([]CourseInfo, error) {
  37. var courses []CourseInfo
  38. sql := `select a.*,b.location_name from ta_course a left join td_cms_image_location b on a.location_id = b.location_id where a.case_id in ('` +
  39. strings.Replace(caseids, ",", "','", -1) + `')`
  40. if name != "" {
  41. sql += ` and a.course_name like '%` + name + `%'`
  42. }
  43. if typeid != "" {
  44. sql += ` and a.location_id='` + typeid + `'`
  45. }
  46. if status != "" {
  47. if status != "1" {
  48. status = "0"
  49. }
  50. sql += ` and a.status=` + status
  51. } else {
  52. sql += ` and a.status>` + strconv.Itoa(models.STATUS_DEL)
  53. }
  54. sql += ` order by create_date desc limit ` + strconv.Itoa((page-1)*pageSize) + `, ` + strconv.Itoa(pageSize)
  55. err := m.db.Sql(sql).Find(&courses)
  56. return courses, err
  57. }
  58. // GetCourseCount 获取课程总数
  59. func (m *CourseDAO) GetCourseCount(caseids, name, typeid, status string) (int, error) {
  60. var course []model.TaCourse
  61. dao := m.db.Where("case_id in ('" + strings.Replace(caseids, ",", "','", -1) + "')")
  62. if name != "" {
  63. dao.And("course_name like '%" + name + "%'")
  64. }
  65. if typeid != "" {
  66. dao.And("location_id=?", typeid)
  67. }
  68. if status != "" {
  69. if status != "1" {
  70. status = "0"
  71. }
  72. dao.And("status=?", status)
  73. } else {
  74. dao.And("status>" + strconv.Itoa(models.STATUS_DEL))
  75. }
  76. err := dao.Find(&course)
  77. if err != nil {
  78. return 0, err
  79. }
  80. if len(course) > 0 {
  81. return len(course), nil
  82. }
  83. return 0, nil
  84. }
  85. // GetCourseByID 根据ID获取课程
  86. func (m *CourseDAO) GetCourseByID(courseid string) (*model.TaCourse, error) {
  87. var course []model.TaCourse
  88. err := m.db.Where("course_id=?", courseid).Find(&course)
  89. if err != nil {
  90. return nil, err
  91. }
  92. if len(course) > 0 {
  93. return &course[0], nil
  94. }
  95. return nil, nil
  96. }
  97. // CheckCourseInCardOrCoupon 判断课程是否存在于卡券种
  98. func (m *CourseDAO) CheckCourseInCardOrCoupon(courseid string) (bool, error) {
  99. sql := `select a.* from ta_coupon_card_target a inner join ta_coupon_card b on a.card_id=b.card_id where b.status>? and a.target_id=?`
  100. var cardtarget []model.TaCouponCardTarget
  101. err := m.db.Sql(sql, models.STATUS_DEL, courseid).Find(&cardtarget)
  102. if err != nil {
  103. return false, err
  104. }
  105. if len(cardtarget) > 0 {
  106. return false, nil
  107. }
  108. sql = `select a.* from ta_coupon_target a inner join ta_coupon b on a.coupon_id=b.coupon_id where b.status>? and a.target_id=?`
  109. var coupontarget []model.TaCouponCardTarget
  110. err = m.db.Sql(sql, models.STATUS_DEL, courseid).Find(&coupontarget)
  111. if err != nil {
  112. return false, err
  113. }
  114. if len(coupontarget) > 0 {
  115. return false, nil
  116. }
  117. return true, nil
  118. }
  119. // AddCourse 新增课程信息
  120. func (m *CourseDAO) AddCourse(course model.TaCourse) (*model.TaCourse, error) {
  121. course.CourseId = utils.GetGUID()
  122. course.CreateDate = time.Now()
  123. course.Status = STATUS_UNPUBLISH
  124. course.ScheduleNum = 0
  125. course.SignupNum = 0
  126. user := m.ctx.Get("user").(model.SysUser)
  127. course.CreateUser = user.UserId
  128. _, err := m.db.Insert(course)
  129. return &course, err
  130. }
  131. // UpdateCourse 修改课程信息
  132. func (m *CourseDAO) UpdateCourse(course model.TaCourse) error {
  133. var cols = []string{
  134. "course_name",
  135. "price",
  136. "case_id",
  137. "location_id",
  138. "course_num",
  139. "max_num",
  140. "min_num",
  141. "begin_date",
  142. "end_date",
  143. "course_img",
  144. "course_desc",
  145. "remark",
  146. "is_select",
  147. }
  148. _, err := m.db.Cols(cols...).Where("course_id=?", course.CourseId).Update(course)
  149. return err
  150. }
  151. // DelCourse 删除课程信息
  152. func (m *CourseDAO) DelCourse(courseid string) error {
  153. var info = model.TaCourse{
  154. CourseId: courseid,
  155. Status: models.STATUS_DEL,
  156. }
  157. var cols = []string{
  158. "status",
  159. }
  160. _, err := m.db.Cols(cols...).Where("course_id=?", courseid).Update(info)
  161. return err
  162. }
  163. // CoursePublic 课程发布
  164. func (m *CourseDAO) CoursePublic(courseid string) error {
  165. var info = model.TaCourse{
  166. CourseId: courseid,
  167. Status: models.STATUS_NORMAL,
  168. }
  169. var cols = []string{
  170. "status",
  171. }
  172. _, err := m.db.Cols(cols...).Where("course_id=?", courseid).Update(info)
  173. return err
  174. }
  175. // CourseUnPublic 取消课程发布
  176. func (m *CourseDAO) CourseUnPublic(courseid string) error {
  177. var info = model.TaCourse{
  178. CourseId: courseid,
  179. Status: STATUS_UNPUBLISH,
  180. }
  181. var cols = []string{
  182. "status",
  183. }
  184. _, err := m.db.Cols(cols...).Where("course_id=?", courseid).Update(info)
  185. return err
  186. }
  187. // GetCourseImgs 获取课程图片
  188. func (m *CourseDAO) GetCourseImgs(courseid string) ([]model.TaCourseImg, error) {
  189. var imgs []model.TaCourseImg
  190. err := m.db.Where("course_id=?", courseid).Find(&imgs)
  191. return imgs, err
  192. }
  193. // AddCourseImg 新增课程图片
  194. func (m *CourseDAO) AddCourseImg(courseimg model.TaCourseImg) (*model.TaCourseImg, error) {
  195. courseimg.ImgId = utils.GetGUID()
  196. _, err := m.db.Insert(courseimg)
  197. return &courseimg, err
  198. }
  199. // UpdateCourseImg 修改课程图片
  200. func (m *CourseDAO) UpdateCourseImg(courseimg model.TaCourseImg) error {
  201. var cols = []string{
  202. "sort",
  203. }
  204. _, err := m.db.Cols(cols...).Where("img_id=?", courseimg.ImgId).Update(courseimg)
  205. return err
  206. }
  207. // DelCourseImg 删除课程图片
  208. func (m *CourseDAO) DelCourseImg(imgid string) error {
  209. sql := `delete from ta_course_img where img_id='` + imgid + `'`
  210. _, err := m.db.Exec(sql)
  211. return err
  212. }
  213. // TagDetail 标签
  214. type TagDetail struct {
  215. model.TaCourseTag `xorm:"extends"`
  216. TagName string
  217. }
  218. // CourseDetail 课程详情
  219. type CourseDetail struct {
  220. model.TaCourse `xorm:"extends"`
  221. CourseTags []TagDetail
  222. CourseImgs []model.TaCourseImg
  223. CourseDetail []model.TaCourseDetail
  224. CaseInfo *model.SysCase
  225. }
  226. // GetCourseInfo 获取课程详情
  227. func (m *CourseDAO) GetCourseInfo(courseid string) (*CourseDetail, error) {
  228. course := new(CourseDetail)
  229. sql := `select * from ta_course where course_id='` + courseid + `'`
  230. has, err := m.db.Sql(sql).Get(course)
  231. if err != nil {
  232. return nil, err
  233. }
  234. if !has {
  235. return nil, nil
  236. }
  237. details, err := m.GetCourseDetail(courseid)
  238. if err != nil {
  239. return nil, err
  240. }
  241. course.CourseDetail = details
  242. return course, nil
  243. }
  244. // GetCourseDetail 获取课程明细
  245. func (m *CourseDAO) GetCourseDetail(courseid string) ([]model.TaCourseDetail, error) {
  246. var details []model.TaCourseDetail
  247. err := m.db.Where("course_id=?", courseid).And("status>" + strconv.Itoa(models.STATUS_DEL)).Find(&details)
  248. return details, err
  249. }
  250. // DetailInfo 排课记录
  251. type DetailInfo struct {
  252. model.TaCourseDetail `xorm:"extends"`
  253. CourseStatus int
  254. CourseName string
  255. CaseName string
  256. CaseAddress string
  257. }
  258. // GetDetails 获取所有的排课记录
  259. func (m *CourseDAO) GetDetails(caseid, date, courseid string) ([]DetailInfo, error) {
  260. var details []DetailInfo
  261. sql := `select a.*,b.course_name,b.status as course_status,c.case_name,c.case_address from ta_course_detail a
  262. inner join ta_course b on a.course_id=b.course_id
  263. inner join sys_case c on a.case_id=c.case_id where a.status>` + strconv.Itoa(models.STATUS_DEL) + `
  264. and b.status>` + strconv.Itoa(models.STATUS_DEL) + ` and DATE_FORMAT(a.begin_date,'%Y-%m') = '` + date + `'`
  265. if courseid != "" {
  266. sql = sql + ` and a.course_id = '` + courseid + `'`
  267. } else {
  268. sql = sql + ` and a.case_id='` + caseid + `'`
  269. }
  270. err := m.db.Sql(sql).Find(&details)
  271. return details, err
  272. }
  273. // GetCourseSchedule 获取需要排课的记录
  274. func (m *CourseDAO) GetCourseSchedule(name, caseids, courseid, date string, page, pageSize int) ([]model.TaCourse, error) {
  275. var courses []model.TaCourse
  276. beego.Error(date)
  277. dao := m.db.Where("status=?", STATUS_UNPUBLISH).And("schedule_num<course_num").And("'" + date + "' BETWEEN begin_date and end_date")
  278. if name != "" {
  279. dao.And("course_name like '%" + name + "%'")
  280. }
  281. beego.Error(courseid)
  282. if courseid != "" {
  283. dao.And("course_id=?", courseid)
  284. } else {
  285. if caseids != "" {
  286. dao.And("case_id in ('" + strings.Replace(caseids, ",", "','", -1) + "')")
  287. }
  288. }
  289. err := dao.Desc("create_date").Limit(pageSize, (page-1)*pageSize).Find(&courses)
  290. return courses, err
  291. }
  292. // GetCourseScheduleCount 获取排课记录数
  293. func (m *CourseDAO) GetCourseScheduleCount(name, caseids, courseid, date string) (int, error) {
  294. var courses []model.TaCourse
  295. dao := m.db.Where("status=?", STATUS_UNPUBLISH).And("schedule_num<course_num").And("'" + date + "' BETWEEN begin_date and end_date")
  296. if name != "" {
  297. dao.And("course_name like '%" + name + "%'")
  298. }
  299. if courseid != "" {
  300. dao.And("course_id=?", courseid)
  301. } else {
  302. if caseids != "" {
  303. dao.And("case_id in ('" + strings.Replace(caseids, ",", "','", -1) + "')")
  304. }
  305. }
  306. err := dao.Find(&courses)
  307. return len(courses), err
  308. }
  309. // GetDetailByID 获取排课明细
  310. func (m *CourseDAO) GetDetailByID(detailid string) (*model.TaCourseDetail, error) {
  311. var details []model.TaCourseDetail
  312. err := m.db.Where("detail_id=?", detailid).And("status>" + strconv.Itoa(models.STATUS_DEL)).Find(&details)
  313. if err != nil {
  314. return nil, err
  315. }
  316. if len(details) > 0 {
  317. return &details[0], nil
  318. }
  319. return nil, nil
  320. }
  321. // AddCourseDetail 新增明细
  322. func (m *CourseDAO) AddCourseDetail(detail model.TaCourseDetail) (*model.TaCourseDetail, error) {
  323. detail.CreateDate = time.Now()
  324. detail.Status = models.STATUS_NORMAL
  325. detail.DetailId = utils.GetGUID()
  326. _, err := m.db.Insert(detail)
  327. return &detail, err
  328. }
  329. // UpdateCourseDetail 修改明细
  330. func (m *CourseDAO) UpdateCourseDetail(detail model.TaCourseDetail) error {
  331. var cols = []string{
  332. "detail_name",
  333. "detail_desc",
  334. // "begin_date",
  335. // "end_date",
  336. }
  337. _, err := m.db.Cols(cols...).Where("detail_id=?", detail.DetailId).Update(detail)
  338. return err
  339. }
  340. // DelCourseDetail 刪除明细
  341. func (m *CourseDAO) DelCourseDetail(detailid string) error {
  342. var info = model.TaCourseDetail{
  343. DetailId: detailid,
  344. Status: models.STATUS_DEL,
  345. }
  346. var cols = []string{
  347. "status",
  348. }
  349. _, err := m.db.Cols(cols...).Where("detail_id=?", detailid).Update(info)
  350. return err
  351. }
  352. // DelCourseTag 删除课程对应标签
  353. func (m *CourseDAO) DelCourseTag(courseid string) error {
  354. sql := `delete from ta_course_tag where course_id='` + courseid + `'`
  355. _, err := m.db.Exec(sql)
  356. return err
  357. }
  358. // SaveCourseTag 保存课程对应标签
  359. func (m *CourseDAO) SaveCourseTag(coursetags []model.TaCourseTag) error {
  360. _, err := m.db.Insert(coursetags)
  361. return err
  362. }
  363. // GetCourseTag 获取课程对应标签
  364. func (m *CourseDAO) GetCourseTag(courseid string) ([]TagDetail, error) {
  365. var coursetags []TagDetail
  366. sql := `select a.*,b.tag_name from ta_course_tag a inner join td_course_tag b on a.tag_id=b.tag_id where a.course_id='` + courseid + `'`
  367. err := m.db.Sql(sql).Find(&coursetags)
  368. return coursetags, err
  369. }
  370. // CourseTagSave 保存课程对应标签
  371. func (m *CourseDAO) CourseTagSave(courseid, tagids string) error {
  372. sql := `insert into ta_course_tag(course_id,tag_id) select '` + courseid + `',tag_id from td_course_tag where tag_id in ('` + strings.Replace(tagids, ",", "','", -1) + `') and status>` + strconv.Itoa(models.STATUS_DEL)
  373. _, err := m.db.Exec(sql)
  374. return err
  375. }
  376. // GetCourseDetailCount 获取已排课数量
  377. func (m *CourseDAO) GetCourseDetailCount(courseid string) (int, error) {
  378. var details []model.TaCourseDetail
  379. err := m.db.Where("course_id=?", courseid).And("status>" + strconv.Itoa(models.STATUS_DEL)).Find(&details)
  380. if err != nil {
  381. return 0, err
  382. }
  383. return len(details), nil
  384. }
  385. // UpdateCourseScheduleNum 更新课程已排课数量
  386. func (m *CourseDAO) UpdateCourseScheduleNum(courseid string, num int) error {
  387. var info = model.TaCourse{
  388. CourseId: courseid,
  389. ScheduleNum: num,
  390. }
  391. var cols = []string{
  392. "schedule_num",
  393. }
  394. _, err := m.db.Cols(cols...).Where("course_id=?", courseid).Update(info)
  395. return err
  396. }
  397. // DeleteScheduleByCourse 删除排课记录
  398. func (m *CourseDAO) DeleteScheduleByCourse(courseid string) error {
  399. sql := `update ta_course_detail set status=` + strconv.Itoa(models.STATUS_DEL) + ` where course_id='` + courseid + `'`
  400. _, err := m.db.Exec(sql)
  401. return err
  402. }
  403. // GetSelectCourseList 获取精选课程
  404. func (m *CourseDAO) GetSelectCourseList(orgid string) ([]CourseDetail, error) {
  405. var courses []CourseDetail
  406. sql := `select * from ta_course where is_select=` + strconv.Itoa(IS_SELECT) + ` and status=` + strconv.Itoa(models.STATUS_NORMAL) + ` and org_id='` + orgid + `'
  407. and course_id NOT in (
  408. select course_id from ta_course_detail where begin_date<=NOW() and status>` + strconv.Itoa(models.STATUS_DEL) + `
  409. )`
  410. err := m.db.Sql(sql).Find(&courses)
  411. return courses, err
  412. }
  413. // GetCourseByLocation 根据位置获取课程信息
  414. func (m *CourseDAO) GetCourseByLocation(orgid, locationid string) ([]CourseDetail, error) {
  415. var courses []CourseDetail
  416. sql := `select * from ta_course where status=` + strconv.Itoa(models.STATUS_NORMAL) + ` and org_id='` + orgid + `' and location_id ='` + locationid + `'
  417. and course_id NOT in (
  418. select course_id from ta_course_detail where begin_date<=NOW() and status>` + strconv.Itoa(models.STATUS_DEL) + `
  419. )`
  420. err := m.db.Sql(sql).Find(&courses)
  421. return courses, err
  422. }
  423. // GetCourseOfCustomer 获取客户课程
  424. func (m *CourseDAO) GetCourseOfCustomer(custID, courseID string) (*model.TaCustomerCourse, error) {
  425. course := new(model.TaCustomerCourse)
  426. if _, err := m.db.Where("course_id=?", courseID).And("customer_id=?", custID).Get(course); err != nil {
  427. return nil, err
  428. }
  429. return course, nil
  430. }
  431. // SaveCourseOfCustomer 保存我的课程
  432. func (m *CourseDAO) SaveCourseOfCustomer(course *model.TaCustomerCourse, details []model.TaCustomerCourseDetail) (string, error) {
  433. if course == nil || details == nil || len(details) == 0 {
  434. return "", errors.New("没有有效的我的课程信息")
  435. }
  436. course.CustomerCourseId = guid.NewGUIDString()
  437. course.Status = models.STATUS_NORMAL
  438. for i, d := range details {
  439. d.CustomerDetailId = guid.NewGUIDString()
  440. d.CustomerCourseId = course.CustomerCourseId
  441. d.Status = models.STATUS_NORMAL
  442. d.CustomerId = course.CustomerId
  443. d.OrgId = course.OrgId
  444. d.CourseName = course.CourseName
  445. details[i] = d
  446. }
  447. if _, err := m.db.Insert(&details); err != nil {
  448. return "", err
  449. }
  450. if _, err := m.db.Insert(course); err != nil {
  451. return "", err
  452. }
  453. // 课程参与人数+1
  454. sql := `update ta_course set signup_num=signup_num+1 where course_id='` + course.CourseId + `'`
  455. if _, err := m.db.Exec(sql); err != nil {
  456. return "", err
  457. }
  458. return course.CustomerCourseId, nil
  459. }
  460. // SaveCustomerCourseQrcode 保存客户课程二维码
  461. func (m *CourseDAO) SaveCustomerCourseQrcode(qrcode *model.TaCustomerCourseQrcode) error {
  462. _, err := m.db.Insert(qrcode)
  463. return err
  464. }
  465. // CustomerCourse 客户课程信息
  466. type CustomerCourse struct {
  467. model.TaCustomerCourse `xorm:"extends"`
  468. CourseImg string
  469. QrCodeString string
  470. OrdersNo string
  471. CaseName string
  472. CaseAddress string
  473. BeginDate time.Time
  474. EndDate time.Time
  475. Remark string
  476. Details []model.TaCustomerCourseDetail
  477. }
  478. // GetCustomerCourse 获取我的课程信息
  479. func (m *CourseDAO) GetCustomerCourse(custID string, page, pageSize int) ([]CustomerCourse, error) {
  480. var courses []CustomerCourse
  481. sql := `select a.*,a.customer_course_id as qr_code_string,b.orders_no,c.course_img,d.case_address,
  482. d.case_name,c.begin_date,c.end_date,c.remark from ta_customer_course a
  483. inner join ta_course c on a.course_id=c.course_id
  484. INNER JOIN sys_case d on a.case_id = d.case_id
  485. left join ta_course_orders b on a.source_id=b.orders_id
  486. where a.status>` + strconv.Itoa(models.STATUS_DEL) + ` and a.customer_id='` + custID + `'`
  487. sql += ` order by a.create_date desc limit ` + strconv.Itoa((page-1)*pageSize) + `, ` + strconv.Itoa(pageSize)
  488. err := m.db.Sql(sql).Find(&courses)
  489. if err != nil {
  490. return nil, err
  491. }
  492. for inx, course := range courses {
  493. details, err := m.GetCustomerCourseDetail(course.CustomerCourseId)
  494. if err != nil {
  495. return nil, err
  496. }
  497. courses[inx].Details = details
  498. }
  499. return courses, nil
  500. }
  501. // GetCustomerCourseCount 获取我的课程总数
  502. func (m *CourseDAO) GetCustomerCourseCount(custID string) (int, error) {
  503. var courses []model.TaCustomerCourse
  504. err := m.db.Where("status>"+strconv.Itoa(models.STATUS_DEL)).And("customer_id=?", custID).Find(&courses)
  505. if err != nil {
  506. return 0, err
  507. }
  508. return len(courses), nil
  509. }
  510. // GetCustomerCourseDetail 获取我的课程明细
  511. func (m *CourseDAO) GetCustomerCourseDetail(customerCourseID string) ([]model.TaCustomerCourseDetail, error) {
  512. var details []model.TaCustomerCourseDetail
  513. err := m.db.Where("customer_course_id=?", customerCourseID).And(`status>` + strconv.Itoa(models.STATUS_DEL)).Find(&details)
  514. return details, err
  515. }
  516. // GetCustomerCourseByID 获取我的课程信息明细
  517. func (m *CourseDAO) GetCustomerCourseByID(id string) (*CustomerCourse, error) {
  518. var courses []CustomerCourse
  519. sql := `SELECT
  520. a.*,
  521. e.customer_qrcode AS qr_code_string,
  522. b.orders_no,
  523. c.course_img,
  524. d.case_address,
  525. d.case_name,
  526. c.begin_date,
  527. c.end_date,
  528. c.remark
  529. FROM
  530. ta_customer_course a
  531. INNER JOIN ta_course c ON a.course_id = c.course_id
  532. INNER JOIN sys_case d ON a.case_id = d.case_id
  533. INNER JOIN ta_customer_course_qrcode e ON a.customer_course_id = e.customer_course_id
  534. LEFT JOIN ta_course_orders b ON a.source_id = b.orders_id
  535. where a.status>` + strconv.Itoa(models.STATUS_DEL) + ` and a.customer_course_id='` + id + `'`
  536. err := m.db.Sql(sql).Find(&courses)
  537. if err != nil {
  538. return nil, err
  539. }
  540. if len(courses) > 0 {
  541. details, err := m.GetCustomerCourseDetail(courses[0].CustomerCourseId)
  542. if err != nil {
  543. return nil, err
  544. }
  545. courses[0].Details = details
  546. return &courses[0], nil
  547. }
  548. return nil, nil
  549. }
  550. // GetCourseBySendType 根据发送类型获取案场信息
  551. func (m *CourseDAO) GetCourseBySendType(typeval, caseids string) ([]model.TaCourse, error) {
  552. var courses []model.TaCourse
  553. err := m.db.Where("status=?", models.STATUS_NORMAL).And("case_id in ('" + strings.Replace(caseids, ",", "','", -1) + "')").Find(&courses)
  554. return courses, err
  555. }
  556. // CourseWithCase 课程with案场
  557. type CourseWithCase struct {
  558. model.TaCourse `xorm:"extends"`
  559. CaseName string
  560. CaseAddress string
  561. CourseTags []TagDetail
  562. }
  563. // GetSelectCourseWithCaseList 获取精选课程
  564. func (m *CourseDAO) GetSelectCourseWithCaseList(orgid string) ([]CourseWithCase, error) {
  565. var courses []CourseWithCase
  566. sql := `select a.*,b.case_name,b.case_address from ta_course a inner join sys_case b on a.case_id=b.case_id where a.is_select=` + strconv.Itoa(IS_SELECT) + `
  567. and a.status=` + strconv.Itoa(models.STATUS_NORMAL) + ` and a.org_id='` + orgid + `'
  568. and a.course_id NOT in (
  569. select course_id from ta_course_detail where begin_date<=NOW() and status>` + strconv.Itoa(models.STATUS_DEL) + `
  570. )`
  571. err := m.db.Sql(sql).Find(&courses)
  572. return courses, err
  573. }
  574. // GetCourseWithCaseByLocation 根据位置获取课程信息
  575. func (m *CourseDAO) GetCourseWithCaseByLocation(orgid, locationid string) ([]CourseWithCase, error) {
  576. var courses []CourseWithCase
  577. sql := `select a.*,b.case_name,b.case_address from ta_course a inner join sys_case b on a.case_id=b.case_id where a.status=` + strconv.Itoa(models.STATUS_NORMAL) + `
  578. and a.org_id='` + orgid + `' and a.location_id ='` + locationid + `'
  579. and a.course_id NOT in (
  580. select course_id from ta_course_detail where begin_date<=NOW() and status>` + strconv.Itoa(models.STATUS_DEL) + `
  581. )`
  582. err := m.db.Sql(sql).Find(&courses)
  583. return courses, err
  584. }
  585. // CourseWithType 可用课程
  586. type CourseWithType struct {
  587. model.TaCourse `xorm:"extends"`
  588. LocationName string
  589. }
  590. // GetCourseCanUse 获取可用课程列表
  591. func (m *CourseDAO) GetCourseCanUse(caseids string, page, pageSize int) ([]CourseWithType, error) {
  592. var courses []CourseWithType
  593. sql := `select a.*,b.location_name from ta_course a inner join td_cms_image_location b on a.location_id=b.location_id where a.status=? and
  594. a.case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `') and a.course_id not in (
  595. select course_id from ta_course_detail where begin_date<=NOW() and status>` + strconv.Itoa(models.STATUS_DEL) + `
  596. ) order by a.create_date desc limit ` + strconv.Itoa((page-1)*pageSize) + `, ` + strconv.Itoa(pageSize)
  597. err := m.db.Sql(sql, models.STATUS_NORMAL).Find(&courses)
  598. // err := m.db.Where("status=?", models.STATUS_NORMAL).And("case_id in ('"+strings.Replace(caseids, ",", "','", -1)+"')").And("begin_date>NOW()").Desc("create_date").Limit(pageSize, (page-1)*pageSize).Find(&courses)
  599. return courses, err
  600. }
  601. // GetCourseCanUseCount 获取可用课程列表
  602. func (m *CourseDAO) GetCourseCanUseCount(caseids string) (int, error) {
  603. var courses []model.TaCourse
  604. sql := `select * from ta_course where status=? and case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `') and course_id not in (
  605. select course_id from ta_course_detail where begin_date<=NOW() and status>` + strconv.Itoa(models.STATUS_DEL) + `
  606. )`
  607. err := m.db.Sql(sql, models.STATUS_NORMAL).Find(&courses)
  608. // err := m.db.Where("status=?", models.STATUS_NORMAL).And("case_id in ('" + strings.Replace(caseids, ",", "','", -1) + "')").And("begin_date>NOW()").Find(&courses)
  609. return len(courses), err
  610. }
  611. // 微信首页列表课程
  612. type CourseFront struct {
  613. model.TaCourse `xorm:"extends"`
  614. CaseName string
  615. CaseAddress string
  616. CourseTags []TagDetail
  617. }
  618. // GetCourseForWechatFront 获取微信首页课程列表
  619. func (m *CourseDAO) GetCourseForWechatFront(orgId string, page, pageSize int) ([]CourseFront, error) {
  620. var course []CourseFront
  621. sql := `SELECT
  622. a.*,
  623. b.case_name,
  624. b.case_address
  625. FROM
  626. ta_course a
  627. INNER JOIN sys_case b ON a.case_id = b.case_id
  628. WHERE
  629. a.org_id = '` + orgId + `'
  630. AND a.STATUS = ` + strconv.Itoa(models.STATUS_NORMAL) + `
  631. ORDER BY
  632. a.begin_date ASC
  633. LIMIT ` + strconv.Itoa((page-1)*pageSize) + `, ` + strconv.Itoa(pageSize)
  634. err := m.db.Sql(sql).Find(&course)
  635. return course, err
  636. }
  637. // GetCourseForWechatFrontCount 获取微信首页课程数量
  638. func (m *CourseDAO) GetCourseForWechatFrontCount(orgId string) (int, error) {
  639. var course []CourseFront
  640. sql := `SELECT
  641. a.*,
  642. b.case_name,
  643. b.case_address
  644. FROM
  645. ta_course a
  646. INNER JOIN sys_case b ON a.case_id = b.case_id
  647. WHERE
  648. a.org_id = '` + orgId + `'
  649. AND a.STATUS = ` + strconv.Itoa(models.STATUS_NORMAL)
  650. err := m.db.Sql(sql).Find(&course)
  651. return len(course), err
  652. }