zjxpcyc 6 years ago
parent
commit
94866409d2

+ 1
- 1
conf/db.conf View File

6
 
6
 
7
 ; 数据库地址,可以使用IP
7
 ; 数据库地址,可以使用IP
8
 # db_addr      = 192.168.0.122
8
 # db_addr      = 192.168.0.122
9
-db_addr      = rm-uf6z3z6jq11x653d77o.mysql.rds.aliyuncs.com
9
+db_addr      = localhost
10
 
10
 
11
 ; 端口
11
 ; 端口
12
 db_port      = 3306
12
 db_port      = 3306

+ 1306
- 0
log/common.log
File diff suppressed because it is too large
View File


+ 2
- 0
models/card/card.go View File

161
 	}
161
 	}
162
 
162
 
163
 	card.Status = models.STATUS_NORMAL
163
 	card.Status = models.STATUS_NORMAL
164
+	card.ReceiveDate = time.Now().Local()
164
 
165
 
165
 	if _, err := m.db.Insert(card); err != nil {
166
 	if _, err := m.db.Insert(card); err != nil {
166
 		return err
167
 		return err
177
 		}
178
 		}
178
 
179
 
179
 		cards[i].Status = models.STATUS_USED
180
 		cards[i].Status = models.STATUS_USED
181
+		cards[i].ReceiveDate = time.Now()
180
 	}
182
 	}
181
 
183
 
182
 	if _, err := m.db.Insert(cards); err != nil {
184
 	if _, err := m.db.Insert(cards); err != nil {

+ 2
- 0
models/coupon/coupon.go View File

209
 	}
209
 	}
210
 
210
 
211
 	cp.Status = models.STATUS_NORMAL
211
 	cp.Status = models.STATUS_NORMAL
212
+	cp.ReceiveDate = time.Now().Local()
212
 
213
 
213
 	if _, err := m.db.Insert(cp); err != nil {
214
 	if _, err := m.db.Insert(cp); err != nil {
214
 		return err
215
 		return err
225
 		}
226
 		}
226
 
227
 
227
 		cps[i].Status = models.STATUS_NORMAL
228
 		cps[i].Status = models.STATUS_NORMAL
229
+		cps[i].ReceiveDate = time.Now().Local()
228
 	}
230
 	}
229
 
231
 
230
 	if _, err := m.db.Insert(cps); err != nil {
232
 	if _, err := m.db.Insert(cps); err != nil {

+ 17
- 10
models/course/course.go View File

460
 	var courses []CourseDetail
460
 	var courses []CourseDetail
461
 	sql := `select * from ta_course where is_select=` + strconv.Itoa(IS_SELECT) + ` and status=` + strconv.Itoa(models.STATUS_NORMAL) + ` and org_id='` + orgid + `'
461
 	sql := `select * from ta_course where is_select=` + strconv.Itoa(IS_SELECT) + ` and status=` + strconv.Itoa(models.STATUS_NORMAL) + ` and org_id='` + orgid + `'
462
 	and course_id NOT in (
462
 	and course_id NOT in (
463
-		select course_id from ta_course_detail where begin_date<=NOW()
463
+		select course_id from ta_course_detail where begin_date<=NOW() and status>` + strconv.Itoa(models.STATUS_DEL) + ` 
464
 	)`
464
 	)`
465
 	err := m.db.Sql(sql).Find(&courses)
465
 	err := m.db.Sql(sql).Find(&courses)
466
 	return courses, err
466
 	return courses, err
471
 	var courses []CourseDetail
471
 	var courses []CourseDetail
472
 	sql := `select * from ta_course where status=` + strconv.Itoa(models.STATUS_NORMAL) + ` and org_id='` + orgid + `' and location_id ='` + locationid + `' 
472
 	sql := `select * from ta_course where status=` + strconv.Itoa(models.STATUS_NORMAL) + ` and org_id='` + orgid + `' and location_id ='` + locationid + `' 
473
 	and course_id NOT in (
473
 	and course_id NOT in (
474
-		select course_id from ta_course_detail where begin_date<=NOW()
474
+		select course_id from ta_course_detail where begin_date<=NOW() and status>` + strconv.Itoa(models.STATUS_DEL) + ` 
475
 	)`
475
 	)`
476
 	err := m.db.Sql(sql).Find(&courses)
476
 	err := m.db.Sql(sql).Find(&courses)
477
 	return courses, err
477
 	return courses, err
635
 	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) + ` 
635
 	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) + ` 
636
 	and a.status=` + strconv.Itoa(models.STATUS_NORMAL) + ` and a.org_id='` + orgid + `'
636
 	and a.status=` + strconv.Itoa(models.STATUS_NORMAL) + ` and a.org_id='` + orgid + `'
637
 	and a.course_id NOT in (
637
 	and a.course_id NOT in (
638
-		select course_id from ta_course_detail where begin_date<=NOW()
638
+		select course_id from ta_course_detail where begin_date<=NOW() and status>` + strconv.Itoa(models.STATUS_DEL) + ` 
639
 	)`
639
 	)`
640
 	err := m.db.Sql(sql).Find(&courses)
640
 	err := m.db.Sql(sql).Find(&courses)
641
 	return courses, err
641
 	return courses, err
647
 	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) + ` 
647
 	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) + ` 
648
 	and a.org_id='` + orgid + `' and a.location_id ='` + locationid + `' 
648
 	and a.org_id='` + orgid + `' and a.location_id ='` + locationid + `' 
649
 	and a.course_id NOT in (
649
 	and a.course_id NOT in (
650
-		select course_id from ta_course_detail where begin_date<=NOW()
650
+		select course_id from ta_course_detail where begin_date<=NOW() and status>` + strconv.Itoa(models.STATUS_DEL) + ` 
651
 	)`
651
 	)`
652
 	err := m.db.Sql(sql).Find(&courses)
652
 	err := m.db.Sql(sql).Find(&courses)
653
 	return courses, err
653
 	return courses, err
654
 }
654
 }
655
 
655
 
656
+// CourseWithType 可用课程
657
+type CourseWithType struct {
658
+	model.TaCourse `xorm:"extends"`
659
+	LocationName   string
660
+}
661
+
656
 // GetCourseCanUse 获取可用课程列表
662
 // GetCourseCanUse 获取可用课程列表
657
-func (m *CourseDAO) GetCourseCanUse(caseids string, page, pageSize int) ([]model.TaCourse, error) {
658
-	var courses []model.TaCourse
659
-	sql := `select * from ta_course where status=? and case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `') and course_id not in (
660
-		select course_id from ta_course_detail where begin_date<=NOW()
661
-	) order by create_date desc limit ` + strconv.Itoa((page-1)*pageSize) + `, ` + strconv.Itoa(pageSize)
663
+func (m *CourseDAO) GetCourseCanUse(caseids string, page, pageSize int) ([]CourseWithType, error) {
664
+	var courses []CourseWithType
665
+	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 
666
+	a.case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `') and a.course_id not in (
667
+		select course_id from ta_course_detail where begin_date<=NOW() and status>` + strconv.Itoa(models.STATUS_DEL) + ` 
668
+	) order by a.create_date desc limit ` + strconv.Itoa((page-1)*pageSize) + `, ` + strconv.Itoa(pageSize)
662
 	err := m.db.Sql(sql, models.STATUS_NORMAL).Find(&courses)
669
 	err := m.db.Sql(sql, models.STATUS_NORMAL).Find(&courses)
663
 	// 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)
670
 	// 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)
664
 	return courses, err
671
 	return courses, err
668
 func (m *CourseDAO) GetCourseCanUseCount(caseids string) (int, error) {
675
 func (m *CourseDAO) GetCourseCanUseCount(caseids string) (int, error) {
669
 	var courses []model.TaCourse
676
 	var courses []model.TaCourse
670
 	sql := `select * from ta_course where status=? and case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `') and course_id not in (
677
 	sql := `select * from ta_course where status=? and case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `') and course_id not in (
671
-		select course_id from ta_course_detail where begin_date<=NOW()
678
+		select course_id from ta_course_detail where begin_date<=NOW() and status>` + strconv.Itoa(models.STATUS_DEL) + ` 
672
 	)`
679
 	)`
673
 	err := m.db.Sql(sql, models.STATUS_NORMAL).Find(&courses)
680
 	err := m.db.Sql(sql, models.STATUS_NORMAL).Find(&courses)
674
 	// err := m.db.Where("status=?", models.STATUS_NORMAL).And("case_id in ('" + strings.Replace(caseids, ",", "','", -1) + "')").And("begin_date>NOW()").Find(&courses)
681
 	// err := m.db.Where("status=?", models.STATUS_NORMAL).And("case_id in ('" + strings.Replace(caseids, ",", "','", -1) + "')").And("begin_date>NOW()").Find(&courses)

+ 5
- 1
models/course/order.go View File

62
 	if _, err := m.db.Insert(coupon); err != nil {
62
 	if _, err := m.db.Insert(coupon); err != nil {
63
 		return err
63
 		return err
64
 	}
64
 	}
65
-	return nil
65
+
66
+	// 更新优惠券已使用信息
67
+	sql := `update ta_coupon set used_count=used_count+1 where coupon_id='` + coupon.CouponId + `'`
68
+	_, err := m.db.Exec(sql)
69
+	return err
66
 }
70
 }

+ 6
- 1
models/goods/orders.go View File

85
 		return err
85
 		return err
86
 	}
86
 	}
87
 
87
 
88
+	// 更新优惠券已使用信息
89
+	sql := `update ta_coupon set used_count=used_count+1 where coupon_id='` + coupon.CouponId + `'`
90
+	_, err := m.db.Exec(sql)
91
+	return err
92
+
88
 	// var couponAmount float64 = 0
93
 	// var couponAmount float64 = 0
89
 
94
 
90
 	// // 补充优惠券表字段
95
 	// // 补充优惠券表字段
117
 	// 	return err
122
 	// 	return err
118
 	// }
123
 	// }
119
 
124
 
120
-	return nil
125
+	// return nil
121
 }
126
 }
122
 
127
 
123
 func (m *GoodsDAO) getCaseByID(caseID string) (*model.SysCase, error) {
128
 func (m *GoodsDAO) getCaseByID(caseID string) (*model.SysCase, error) {

+ 9
- 9
models/message/cmscase.go View File

23
 )
23
 )
24
 
24
 
25
 // GetCmsCaseList 获取项目专题列表
25
 // GetCmsCaseList 获取项目专题列表
26
-func (m *MessageDAO) GetCmsCaseList(name, caseids string, page int, pageSize int) ([]CmsCaseInfo, error) {
26
+func (m *MessageDAO) GetCmsCaseList(name, caseids, userid string, page int, pageSize int) ([]CmsCaseInfo, error) {
27
 	var cases []CmsCaseInfo
27
 	var cases []CmsCaseInfo
28
-	sql := `select a.*,b.case_name from ta_cms_case a inner join sys_case b on a.case_id = b.case_id 
29
-	where a.case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `') and a.name like '%` + name + `%' and a.status > ` + strconv.Itoa(models.STATUS_DEL) + `
30
-	and b.status > ` + strconv.Itoa(models.STATUS_DEL) + `
28
+	sql := `select a.*, (case when a.case_id='all' then '所有案场' else b.case_name end) case_name from ta_cms_case a LEFT join sys_case b on a.case_id = b.case_id 
29
+	where (a.case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `') OR (a.create_user='` + userid + `' and a.case_id='all')) and a.name like '%` + name + `%' and a.status > ` + strconv.Itoa(models.STATUS_DEL) + `
30
+	and (b.status > ` + strconv.Itoa(models.STATUS_DEL) + ` or a.case_id='all')
31
 	order by create_date desc limit ` + strconv.Itoa((page-1)*pageSize) + `, ` + strconv.Itoa(pageSize)
31
 	order by create_date desc limit ` + strconv.Itoa((page-1)*pageSize) + `, ` + strconv.Itoa(pageSize)
32
 	err := m.db.Sql(sql).Find(&cases)
32
 	err := m.db.Sql(sql).Find(&cases)
33
 	return cases, err
33
 	return cases, err
43
 }
43
 }
44
 
44
 
45
 // GetCmsCaseListCount 获取项目专题Count
45
 // GetCmsCaseListCount 获取项目专题Count
46
-func (m *MessageDAO) GetCmsCaseListCount(name, caseids string) (int, error) {
46
+func (m *MessageDAO) GetCmsCaseListCount(name, caseids, userid string) (int, error) {
47
 	var cases []CmsCaseInfo
47
 	var cases []CmsCaseInfo
48
-	sql := `select a.*,b.case_name from ta_cms_case a inner join sys_case b on a.case_id = b.case_id 
49
-	where a.case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `') and a.name like '%` + name + `%' 
50
-	and a.status > ` + strconv.Itoa(models.STATUS_DEL) + ` and b.status > ` + strconv.Itoa(models.STATUS_DEL)
48
+	sql := `select a.*, (case when a.case_id='all' then '所有案场' else b.case_name end) case_name from ta_cms_case a LEFT join sys_case b on a.case_id = b.case_id 
49
+	where(a.case_id in ('` + strings.Replace(caseids, ",", "','", -1) + `') OR (a.create_user='` + userid + `' and a.case_id='all')) and a.name like '%` + name + `%' 
50
+	and a.status > ` + strconv.Itoa(models.STATUS_DEL) + ` and (b.status > ` + strconv.Itoa(models.STATUS_DEL) + ` or a.case_id='all')`
51
 
51
 
52
 	err := m.db.Sql(sql).Find(&cases)
52
 	err := m.db.Sql(sql).Find(&cases)
53
 	if err != nil {
53
 	if err != nil {
67
 // GetCmsCaseByID 获取项目专题详情
67
 // GetCmsCaseByID 获取项目专题详情
68
 func (m *MessageDAO) GetCmsCaseByID(cmscaseid string) (*CmsCase, error) {
68
 func (m *MessageDAO) GetCmsCaseByID(cmscaseid string) (*CmsCase, error) {
69
 	var cases []CmsCase
69
 	var cases []CmsCase
70
-	sql := `select a.*,b.case_address from ta_cms_case a inner join sys_case b on a.case_id=b.case_id where a.cms_case_id='` + cmscaseid + `' and b.status>` + strconv.Itoa(models.STATUS_DEL) + ` and a.status>` + strconv.Itoa(models.STATUS_DEL)
70
+	sql := `select a.*,b.case_address from ta_cms_case a left join sys_case b on a.case_id=b.case_id where a.cms_case_id='` + cmscaseid + `' and (b.status>` + strconv.Itoa(models.STATUS_DEL) + ` or a.case_id='all') and a.status>` + strconv.Itoa(models.STATUS_DEL)
71
 	err := m.db.Sql(sql).Find(&cases)
71
 	err := m.db.Sql(sql).Find(&cases)
72
 	if err != nil {
72
 	if err != nil {
73
 		beego.Error(err)
73
 		beego.Error(err)

+ 1
- 1
models/models.go View File

20
 	dns := getMySQLDNS()
20
 	dns := getMySQLDNS()
21
 
21
 
22
 	engine, err := xorm.NewEngine(dbType, dns)
22
 	engine, err := xorm.NewEngine(dbType, dns)
23
-	engine.ShowSQL()
23
+	// engine.ShowSQL()
24
 
24
 
25
 	if err != nil {
25
 	if err != nil {
26
 		panic(err)
26
 		panic(err)

+ 0
- 1
models/statistics/dashboard.go View File

343
 	}
343
 	}
344
 
344
 
345
 	sql += ` group by t.dt, s.type_name`
345
 	sql += ` group by t.dt, s.type_name`
346
-
347
 	var res []StaCommGroupData
346
 	var res []StaCommGroupData
348
 	if err := m.db.SQL(sql).Find(&res); err != nil {
347
 	if err := m.db.SQL(sql).Find(&res); err != nil {
349
 		return nil, err
348
 		return nil, err

+ 4
- 3
models/system/user.go View File

342
 // GetUserCustomer 获取我的推荐客户
342
 // GetUserCustomer 获取我的推荐客户
343
 func (m *UserDAO) GetUserCustomer(userid, isrecommend, key string, page int, pageSize int) ([]model.TaCustomer, error) {
343
 func (m *UserDAO) GetUserCustomer(userid, isrecommend, key string, page int, pageSize int) ([]model.TaCustomer, error) {
344
 	var customers []model.TaCustomer
344
 	var customers []model.TaCustomer
345
-	sql := `select * from ta_customer where recommend_id='` + userid + `'`
346
-	if isrecommend == "" {
347
-		sql += ` and customer_id in (
345
+	sql := `select * from ta_customer where (recommend_id='` + userid + `'`
346
+	if isrecommend == "" || isrecommend == "false" {
347
+		sql += ` or customer_id in (
348
 			select customer_id from ta_customer_coupon where sales_id='` + userid + `'
348
 			select customer_id from ta_customer_coupon where sales_id='` + userid + `'
349
 			union 
349
 			union 
350
 			select customer_id from ta_customer_card where sales_id='` + userid + `'
350
 			select customer_id from ta_customer_card where sales_id='` + userid + `'
351
 		)`
351
 		)`
352
 	}
352
 	}
353
+	sql += ")"
353
 	if key != "" {
354
 	if key != "" {
354
 		sql += ` and (customer_name like '%` + key + `%' or phone like '%` + key + `%' or name like '%` + key + `%')`
355
 		sql += ` and (customer_name like '%` + key + `%' or phone like '%` + key + `%' or name like '%` + key + `%')`
355
 	}
356
 	}

+ 10
- 2
service/card/card.go View File

97
 
97
 
98
 	// 保存主信息
98
 	// 保存主信息
99
 	cardMain := cd.TaCouponCard
99
 	cardMain := cd.TaCouponCard
100
+	org := s.ctx.Get("org").(model.SysOrg)
101
+	cardMain.OrgId = org.OrgId
100
 	if err := s.dao.AddCard(&cardMain); err != nil {
102
 	if err := s.dao.AddCard(&cardMain); err != nil {
101
 		utils.LogError("保存卡失败: " + err.Error())
103
 		utils.LogError("保存卡失败: " + err.Error())
102
 		return errors.New("保存卡失败")
104
 		return errors.New("保存卡失败")
146
 
148
 
147
 	// 更新主信息
149
 	// 更新主信息
148
 	cardMain := cd.TaCouponCard
150
 	cardMain := cd.TaCouponCard
149
-	if err := s.dao.UpdateCard(&cardMain, []string{"Card_name"}); err != nil {
151
+	if err := s.dao.UpdateCard(&cardMain, []string{"card_name"}); err != nil {
150
 		utils.LogError("更新卡失败: " + err.Error())
152
 		utils.LogError("更新卡失败: " + err.Error())
151
 		return errors.New("更新卡失败")
153
 		return errors.New("更新卡失败")
152
 	}
154
 	}
160
 	// 更新分享
162
 	// 更新分享
161
 	share := cd.Share
163
 	share := cd.Share
162
 	share.CardId = cd.CardId
164
 	share.CardId = cd.CardId
163
-	cols := []string{"Card_share_info", "use_rule", "use_instruction"}
165
+	cols := []string{"card_share_info", "use_rule", "use_instruction"}
164
 	if err := s.dao.UpdateCardShare(share, cols); err != nil {
166
 	if err := s.dao.UpdateCardShare(share, cols); err != nil {
165
 		utils.LogError("更新卡分享失败: " + err.Error())
167
 		utils.LogError("更新卡分享失败: " + err.Error())
166
 		return errors.New("更新卡分享失败")
168
 		return errors.New("更新卡分享失败")
315
 	var cardinfo = model.TaCouponCard{
317
 	var cardinfo = model.TaCouponCard{
316
 		CardId:    card.CardId,
318
 		CardId:    card.CardId,
317
 		SentCount: card.SentCount + 1,
319
 		SentCount: card.SentCount + 1,
320
+		UsedCount: card.UsedCount + 1,
318
 	}
321
 	}
319
 	cols := []string{
322
 	cols := []string{
320
 		"sent_count",
323
 		"sent_count",
324
+		"used_count",
321
 	}
325
 	}
322
 	if err := s.dao.UpdateCard(&cardinfo, cols); err != nil {
326
 	if err := s.dao.UpdateCard(&cardinfo, cols); err != nil {
323
 		utils.LogError("回填体验卡信息失败:", err)
327
 		utils.LogError("回填体验卡信息失败:", err)
515
 	}
519
 	}
516
 	// 回填体验卡信息
520
 	// 回填体验卡信息
517
 	card.SentCount = card.SentCount + 1
521
 	card.SentCount = card.SentCount + 1
522
+	card.UsedCount = card.UsedCount + 1
518
 	cols := []string{
523
 	cols := []string{
519
 		"sent_count",
524
 		"sent_count",
525
+		"used_count",
520
 	}
526
 	}
521
 	err = s.dao.UpdateCard(card, cols)
527
 	err = s.dao.UpdateCard(card, cols)
522
 	if err != nil {
528
 	if err != nil {
642
 	}
648
 	}
643
 	// 回填体验卡信息
649
 	// 回填体验卡信息
644
 	card.SentCount = card.SentCount + 1
650
 	card.SentCount = card.SentCount + 1
651
+	card.UsedCount = card.UsedCount + 1
645
 	cols := []string{
652
 	cols := []string{
646
 		"sent_count",
653
 		"sent_count",
654
+		"used_count",
647
 	}
655
 	}
648
 	err = s.dao.UpdateCard(card, cols)
656
 	err = s.dao.UpdateCard(card, cols)
649
 	if err != nil {
657
 	if err != nil {

+ 2
- 0
service/coupon/coupon.go View File

92
 
92
 
93
 	// 保存主信息
93
 	// 保存主信息
94
 	cpMain := cp.TaCoupon
94
 	cpMain := cp.TaCoupon
95
+	org := s.ctx.Get("org").(model.SysOrg)
96
+	cpMain.OrgId = org.OrgId
95
 	if err := s.dao.SaveCoupon(&cpMain); err != nil {
97
 	if err := s.dao.SaveCoupon(&cpMain); err != nil {
96
 		utils.LogError("保存优惠券失败: " + err.Error())
98
 		utils.LogError("保存优惠券失败: " + err.Error())
97
 		return errors.New("保存优惠券失败")
99
 		return errors.New("保存优惠券失败")

+ 3
- 2
service/message/cmscase.go View File

19
 	if page == 0 {
19
 	if page == 0 {
20
 		page = 1
20
 		page = 1
21
 	}
21
 	}
22
-	infos, err := s.dao.GetCmsCaseList(name, caseids, page, pageSize)
22
+	user := s.ctx.Get("user").(model.SysUser)
23
+	infos, err := s.dao.GetCmsCaseList(name, caseids, user.UserId, page, pageSize)
23
 	if err != nil {
24
 	if err != nil {
24
 		utils.LogError("获取项目列表失败: " + err.Error())
25
 		utils.LogError("获取项目列表失败: " + err.Error())
25
 		return nil, errors.New("获取项目列表失败")
26
 		return nil, errors.New("获取项目列表失败")
26
 	}
27
 	}
27
-	total, err := s.dao.GetCmsCaseListCount(name, caseids)
28
+	total, err := s.dao.GetCmsCaseListCount(name, caseids, user.UserId)
28
 	if err != nil {
29
 	if err != nil {
29
 		utils.LogError("获取项目列表失败: " + err.Error())
30
 		utils.LogError("获取项目列表失败: " + err.Error())
30
 		return nil, errors.New("获取项目列表失败")
31
 		return nil, errors.New("获取项目列表失败")