From bb6b09e52c957b4a927174c0d53be9aa9db0adc0 Mon Sep 17 00:00:00 2001 From: huangjiajun <582604932@qq.com> Date: Wed, 10 Sep 2025 10:39:33 +0800 Subject: [PATCH] 1 --- app/operator/hdl/hdl_index.go | 10 ++ app/operator/hdl/hdl_login.go | 23 ++++ app/operator/hdl/hdl_project.go | 13 ++ app/operator/hdl/hdl_task.go | 19 +++ app/operator/md/md_login.go | 24 ++++ app/operator/md/md_project.go | 10 ++ app/operator/md/md_task.go | 8 ++ app/operator/svc/svc_index.go | 84 ++++++++++++ app/operator/svc/svc_login.go | 235 ++++++++++++++++++++++++++++++++ app/operator/svc/svc_project.go | 123 +++++++++++++++++ app/operator/svc/svc_task.go | 151 ++++++++++++++++++++ app/router/router.go | 21 ++- app/store/hdl/hdl_index.go | 3 + app/store/md/md_project.go | 4 + app/store/md/md_task.go | 1 + app/store/svc/svc_index.go | 14 +- app/store/svc/svc_project.go | 24 +++- app/store/svc/svc_task.go | 1 - go.mod | 6 +- 19 files changed, 759 insertions(+), 15 deletions(-) create mode 100644 app/operator/hdl/hdl_index.go create mode 100644 app/operator/hdl/hdl_login.go create mode 100644 app/operator/hdl/hdl_project.go create mode 100644 app/operator/hdl/hdl_task.go create mode 100644 app/operator/md/md_login.go create mode 100644 app/operator/md/md_project.go create mode 100644 app/operator/md/md_task.go create mode 100644 app/operator/svc/svc_index.go create mode 100644 app/operator/svc/svc_login.go create mode 100644 app/operator/svc/svc_project.go create mode 100644 app/operator/svc/svc_task.go diff --git a/app/operator/hdl/hdl_index.go b/app/operator/hdl/hdl_index.go new file mode 100644 index 0000000..e15b245 --- /dev/null +++ b/app/operator/hdl/hdl_index.go @@ -0,0 +1,10 @@ +package hdl + +import ( + "applet/app/operator/svc" + "github.com/gin-gonic/gin" +) + +func Index(c *gin.Context) { + svc.Index(c) +} diff --git a/app/operator/hdl/hdl_login.go b/app/operator/hdl/hdl_login.go new file mode 100644 index 0000000..8ebe1a5 --- /dev/null +++ b/app/operator/hdl/hdl_login.go @@ -0,0 +1,23 @@ +package hdl + +import ( + "applet/app/comm/e" + "applet/app/operator/md" + "applet/app/operator/svc" + "github.com/gin-gonic/gin" +) + +func Login(c *gin.Context) { + svc.Login(c) +} +func FastLogin(c *gin.Context) { + var args md.RegisterReq + if err := c.ShouldBindJSON(&args); err != nil { + e.OutErr(c, e.ERR_INVALID_ARGS) + return + } + svc.Register(c, args) +} +func Sms(c *gin.Context) { + svc.Sms(c) +} diff --git a/app/operator/hdl/hdl_project.go b/app/operator/hdl/hdl_project.go new file mode 100644 index 0000000..467ab3e --- /dev/null +++ b/app/operator/hdl/hdl_project.go @@ -0,0 +1,13 @@ +package hdl + +import ( + "applet/app/operator/svc" + "github.com/gin-gonic/gin" +) + +func ProjectList(c *gin.Context) { + svc.ProjectList(c) +} +func ProjectSelect(c *gin.Context) { + svc.ProjectSelect(c) +} diff --git a/app/operator/hdl/hdl_task.go b/app/operator/hdl/hdl_task.go new file mode 100644 index 0000000..e27e511 --- /dev/null +++ b/app/operator/hdl/hdl_task.go @@ -0,0 +1,19 @@ +package hdl + +import ( + "applet/app/operator/svc" + "github.com/gin-gonic/gin" +) + +func TaskList(c *gin.Context) { + svc.TaskList(c) +} +func TaskUp(c *gin.Context) { + svc.TaskUp(c) +} +func TaskDown(c *gin.Context) { + svc.TaskDown(c) +} +func TaskDetail(c *gin.Context) { + svc.TaskDetail(c) +} diff --git a/app/operator/md/md_login.go b/app/operator/md/md_login.go new file mode 100644 index 0000000..021e845 --- /dev/null +++ b/app/operator/md/md_login.go @@ -0,0 +1,24 @@ +package md + +type LoginReq struct { + Phone string `json:"phone"` + Password string `json:"password"` +} +type SmsReq struct { + Phone string `json:"phone"` + Type string `json:"type"` +} +type Register struct { + Mobile string `json:"mobile"` + Captcha string `json:"captcha"` + Type string `json:"type"` + Zone string `json:"zone"` + PicCode string `json:"pic_code"` + PicCodeId string `json:"pic_code_id"` +} +type RegisterReq struct { + Phone string `json:"phone"` + Password string `json:"password"` + Captcha string `json:"captcha"` + Type string `json:"type"` +} diff --git a/app/operator/md/md_project.go b/app/operator/md/md_project.go new file mode 100644 index 0000000..d7b304c --- /dev/null +++ b/app/operator/md/md_project.go @@ -0,0 +1,10 @@ +package md + +type ProjectListReq struct { + P string `json:"p"` + Size string `json:"size"` + Cid string `json:"cid"` +} +type ProjectListSelectReq struct { + Ids []string `json:"ids"` +} diff --git a/app/operator/md/md_task.go b/app/operator/md/md_task.go new file mode 100644 index 0000000..8ad69d1 --- /dev/null +++ b/app/operator/md/md_task.go @@ -0,0 +1,8 @@ +package md + +type TaskListReq struct { + P string `json:"p"` + Size string `json:"size"` + Cid string `json:"cid"` + SettleType string `json:"settle_type"` +} diff --git a/app/operator/svc/svc_index.go b/app/operator/svc/svc_index.go new file mode 100644 index 0000000..e6d3028 --- /dev/null +++ b/app/operator/svc/svc_index.go @@ -0,0 +1,84 @@ +package svc + +import ( + "applet/app/comm/db" + "applet/app/comm/e" + "applet/app/comm/svc" + "applet/app/comm/utils" + "code.fnuoos.com/go_rely_warehouse/zyos_model.git/src/implement" + "code.fnuoos.com/go_rely_warehouse/zyos_model.git/src/models" + "fmt" + "github.com/gin-gonic/gin" +) + +func Index(c *gin.Context) { + user := svc.GetUser(c) + sum, _ := svc.MasterDb(c).Where("form_uid=?", user.Info.Uid).Sum(&models.CampTaskUserPromotionOrder{}, "payment") + count, _ := svc.MasterDb(c).Where("form_uid=?", user.Info.Uid).Count(&models.CampTaskUserPromotionOrder{}) + allTaskCount, _ := svc.MasterDb(c).Where("uid=?", user.Info.Uid).Count(&models.CampTaskOperatorTask{}) + sql := `SELECT SUM(ctupor.amount) as amount,SUM(IF(ctupor.uid=%d,ctupor.amount,0)) as own_amount,ctupor.level FROM camp_task_user_promotion_order_relate ctupor +LEFT JOIN camp_task_user_promotion_order ctupo on ctupo.oid=ctupor.oid +WHERE ctupo.form_uid=%d GROUP BY ctupor.level` + sql = fmt.Sprintf(sql, user.Info.Uid, user.Info.Uid) + nativeString, _ := db.QueryNativeString(svc.MasterDb(c), sql) + var firstAmount float64 = 0 + var secondAmount float64 = 0 + var ownAmount float64 = 0 + for _, v := range nativeString { + if v["level"] == "0" { + firstAmount += utils.StrToFloat64(v["amount"]) + } + if v["level"] == "1" { + secondAmount += utils.StrToFloat64(v["amount"]) + } + ownAmount += utils.StrToFloat64(v["own_amount"]) + } + totalList := []map[string]string{ + {"name": "佣金总金额", "value": utils.Float64ToStr(sum), "unit": "¥"}, + {"name": "推广总订单数", "value": utils.Int64ToStr(count), "unit": ""}, + {"name": "用户所得", "value": utils.Float64ToStr(firstAmount), "unit": "¥"}, + {"name": "团长所得", "value": utils.Float64ToStr(secondAmount), "unit": "¥"}, + {"name": "我的分成", "value": utils.Float64ToStr(ownAmount), "unit": "¥"}, + } + myTask := make([]map[string]string, 0) + NewCampTaskOperatorTaskDb := implement.NewCampTaskOperatorTaskDb(svc.MasterDb(c)) + myTaskList, _, _ := NewCampTaskOperatorTaskDb.FindCampTaskOperatorTaskGroup(user.Info.Uid, 1, 5, "") + if myTaskList != nil { + for _, v := range myTaskList { + tmp := map[string]string{ + "id": utils.IntToStr(v.CampTaskOperatorTask.TaskId), + "name": v.Name, + "icon": svc.ImageFormat(c, v.Logo), + } + myTask = append(myTask, tmp) + } + } + hotTask := make([]map[string]string, 0) + NewCampTaskListDb := implement.NewCampTaskListDb(svc.MasterDb(c)) + hotTaskList, _ := NewCampTaskListDb.FindCampTaskList("", "", "1", 1, 5, "success_num desc,id desc") + if hotTaskList != nil { + for _, v := range *hotTaskList { + tmp := map[string]string{ + "id": utils.IntToStr(v.Id), + "is_check": "0", + "name": v.Name, + "price": v.Price, + "num": utils.IntToStr(v.Num), + "icon": svc.ImageFormat(c, v.Logo), + "timer": v.StartTime.Format("2006-01-02") + "至" + v.EndTime.Format("2006-01-02"), + } + counts, _ := svc.MasterDb(c).Where("uid=? and task_id=?", user.Info.Uid, v.Id).Count(&models.CampTaskOperatorTask{}) + if counts > 0 { + tmp["is_check"] = "1" + } + hotTask = append(hotTask, tmp) + } + } + res := map[string]interface{}{ + "total_list": totalList, + "my_task_count": utils.Int64ToStr(allTaskCount), + "hot_task": hotTask, + } + e.OutSuc(c, res, nil) + return +} diff --git a/app/operator/svc/svc_login.go b/app/operator/svc/svc_login.go new file mode 100644 index 0000000..78d5d37 --- /dev/null +++ b/app/operator/svc/svc_login.go @@ -0,0 +1,235 @@ +package svc + +import ( + "applet/app/comm/db" + "applet/app/comm/e" + "applet/app/comm/svc" + "applet/app/comm/utils" + "applet/app/comm/utils/cache" + "applet/app/lib/mob" + sms2 "applet/app/lib/sms" + "applet/app/operator/md" + "code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git/sms" + "code.fnuoos.com/go_rely_warehouse/zyos_model.git/src/implement" + "encoding/json" + "fmt" + "github.com/gin-gonic/gin" + "github.com/syyongx/php2go" +) + +func Login(c *gin.Context) { + var args md.LoginReq + if err := c.ShouldBindJSON(&args); err != nil { + e.OutErr(c, e.ERR_INVALID_ARGS) + return + } + user, _ := db.UserFindByMobile(svc.MasterDb(c), args.Phone) + if user == nil { + e.OutErr(c, 400, e.NewErr(400, "用户未注册")) + return + } + if user.Password != utils.Md5(args.Password) { + e.OutErr(c, 400, e.NewErr(400, "密码错误")) + return + } + if user.Level != 2 && user.Level != 3 { + e.OutErr(c, 400, e.NewErr(400, "您没有访问权限,请联系平台")) + return + } + // 生成jwt + appName := svc.SysCfgGet(c, "app_name") + token, err := utils.GenToken(user.Uid, user.Username, user.Phone, appName, "", "") + if err != nil { + e.OutErr(c, 400, e.NewErr(400, "用户不存在")) + return + } + key := fmt.Sprintf("%s:token:%s", c.GetString("mid"), user.Username) + cache.SetEx(key, token, 39528000) // 半年 + res := map[string]string{ + "token": token, + } + e.OutSuc(c, res, nil) + return +} +func Register(c *gin.Context, args md.RegisterReq) { + user, _ := db.UserFindByMobile(svc.MasterDb(c), args.Phone) + if user == nil { + e.OutErr(c, 400, e.NewErr(400, "用户未注册")) + return + } + if user.Level != 2 && user.Level != 3 { + + e.OutErr(c, 400, e.NewErr(400, "您没有访问权限,请联系平台")) + return + } + mob1, errr := mob.GetMobSDK(c.GetString("mid")) + if errr != nil { + e.OutErr(c, e.ERR_MOB_CONFIG, errr) + return + } + send := map[string]interface{}{ + "phone": args.Phone, + "zone": "86", + "code": args.Captcha, + } + var ok bool + // h5(wap) 登录 + var err error + if svc.SysCfgGet(c, "sms_send_type") == "2" { + code := svc.SysCfgGet(c, "sms_send_code") + if code != args.Captcha { + e.OutErr(c, 400, e.NewErr(400, "验证码错误,请重试")) + return + } + ok = true + cache.Del("sms:" + c.GetString("mid") + ":" + args.Phone) + } else if c.GetString("sms_type") == "2" || svc.SysCfgGet(c, "sms_send_type") == "1" { + code, _ := cache.GetString("sms:" + c.GetString("mid") + ":" + args.Phone) + if code != args.Captcha { + e.OutErr(c, 400, e.NewErr(400, "验证码错误,请重试")) + return + } + cache.Del("sms:" + c.GetString("mid") + ":" + args.Phone) + ok = true + } else { + ok, err = mob1.MobSMS(c, send) + if err != nil { + e.OutErr(c, 400, err.Error()) + return + } + } + if ok == false { + // 验证码无效或者过期,验证码错误 + e.OutErr(c, e.ERR_SMS_AUTH, nil) + return + } + + appName := svc.SysCfgGet(c, "app_name") + token, err := utils.GenToken(user.Uid, user.Username, user.Phone, appName, "", "") + if err != nil { + e.OutErr(c, 400, e.NewErr(400, "用户不存在")) + return + } + up, err := db.UserProfileFindByID(db.DBs[c.GetString("mid")], user.Uid) + if err != nil || up == nil { + e.OutErr(c, e.ERR_DB_ORM, err) + return + } + up.ArkidToken = token + _, err = svc.MasterDb(c).Where("uid=?", up.Uid).Cols("arkid_token").Update(up) + if err != nil { + e.OutErr(c, 400, e.NewErr(400, "登陆失败")) + return + } + key1 := fmt.Sprintf("%s:token:%s", c.GetString("mid"), user.Username) + cache.SetEx(key1, token, 39528000) // 半年 + res := map[string]string{ + "token": token, + } + e.OutSuc(c, res, nil) + return +} +func Sms(c *gin.Context) { + var args md.SmsReq + if err := c.ShouldBindJSON(&args); err != nil { + e.OutErr(c, e.ERR_INVALID_ARGS) + return + } + mobile, _ := db.UserFindByMobile(svc.MasterDb(c), args.Phone) + if mobile == nil { + e.OutErr(c, 400, e.NewErr(400, "用户未注册")) + return + } + if mobile.Level != 2 && mobile.Level != 3 { + e.OutErr(c, 400, e.NewErr(400, "您没有访问权限,请联系平台")) + return + } + if c.GetString("sms_type") != "2" { + count := sms.SmsNumGetSmsNum(db.Db, "putong", c.GetString("mid")) + if count-3 < 0 { + e.OutErr(c, e.ERR_MOB_SMS_NO_AVA, nil) + return + } + } + appName := svc.SysCfgGet(c, "sms_push_sign") + captcha := utils.CreateCaptcha() + content := fmt.Sprintf("【%s】验证码:%s", appName, captcha) + marshal, _ := json.Marshal(c.Request.Header) + waykeys := "app_" + c.ClientIP() + "_" + utils.IntToStr(utils.GetApiVersion(c)) + "_" + c.Request.RequestURI + "_" + string(marshal) + postData := map[string]interface{}{ + "content": content, + "mobile": args.Phone, + "templateCode": "normal", + "way": php2go.Base64Encode(waykeys), + } + err := sms2.GetSmsConfig(c, "86", postData, "") + if err != nil { + e.OutErr(c, 400, e.NewErr(400000, err.Error())) + return + } + tip := "验证码已发送,5分钟内有效" + e.OutSuc(c, tip, nil) + return +} +func ChangePwd(c *gin.Context) { + var args md.RegisterReq + if err := c.ShouldBindJSON(&args); err != nil { + e.OutErr(c, e.ERR_INVALID_ARGS) + return + } + mob1, errr := mob.GetMobSDK(c.GetString("mid")) + if errr != nil { + e.OutErr(c, e.ERR_MOB_CONFIG, errr) + return + } + send := map[string]interface{}{ + "phone": args.Phone, + "zone": "86", + "code": args.Captcha, + } + var ok bool + // h5(wap) 登录 + var err error + if svc.SysCfgGet(c, "sms_send_type") == "2" { + code := svc.SysCfgGet(c, "sms_send_code") + if code != args.Captcha { + e.OutErr(c, 400, e.NewErr(400, "验证码错误,请重试")) + return + } + ok = true + cache.Del("sms:" + c.GetString("mid") + ":" + args.Phone) + } else if c.GetString("sms_type") == "2" || svc.SysCfgGet(c, "sms_send_type") == "1" { + code, _ := cache.GetString("sms:" + c.GetString("mid") + ":" + args.Phone) + if code != args.Captcha { + e.OutErr(c, 400, e.NewErr(400, "验证码错误,请重试")) + return + } + cache.Del("sms:" + c.GetString("mid") + ":" + args.Phone) + ok = true + } else { + ok, err = mob1.MobSMS(c, send) + if err != nil { + e.OutErr(c, 400, err.Error()) + return + } + } + if ok == false { + // 验证码无效或者过期,验证码错误 + e.OutErr(c, e.ERR_SMS_AUTH, nil) + return + } + NewCampTaskStoreUserDb := implement.NewCampTaskStoreUserDb(svc.MasterDb(c)) + user, _ := NewCampTaskStoreUserDb.GetCampTaskStoreUserByPhone(args.Phone) + if user == nil { + e.OutErr(c, 400, e.NewErr(400, "用户不存在")) + return + } + user.Password = utils.Md5(args.Password) + update, _ := svc.MasterDb(c).Where("id=?", user.Id).Cols("password").Update(user) + if update == 0 { + e.OutErr(c, 400, e.NewErr(400, "修改失败")) + return + } + e.OutSuc(c, "success", nil) + return +} diff --git a/app/operator/svc/svc_project.go b/app/operator/svc/svc_project.go new file mode 100644 index 0000000..5726813 --- /dev/null +++ b/app/operator/svc/svc_project.go @@ -0,0 +1,123 @@ +package svc + +import ( + "applet/app/comm/e" + "applet/app/comm/svc" + "applet/app/comm/utils" + "applet/app/operator/md" + "code.fnuoos.com/go_rely_warehouse/zyos_model.git/src/models" + "github.com/gin-gonic/gin" + "time" +) + +func ProjectSelect(c *gin.Context) { + var args md.ProjectListSelectReq + if err := c.ShouldBindJSON(&args); err != nil { + e.OutErr(c, e.ERR_INVALID_ARGS) + return + } + user := svc.GetUser(c) + + var project = make([]models.CampTaskProject, 0) + svc.MasterDb(c).Where("is_must=1 and state=1").Find(&project) + for _, v := range project { + if utils.InArr(utils.IntToStr(v.Id), args.Ids) == false { + e.OutErr(c, 400, e.NewErr(400, "《"+v.Name+"》未选择")) + return + } + } + isCanSelect := "0" + sess := svc.MasterDb(c).NewSession() + defer sess.Close() + sess.Begin() + var data models.CampTaskProjectOperatorLike + sess.Where("uid=?", user.Info.Uid).Desc("id").Get(&data) + if data.State == 3 || data.Id == 0 || data.CreateTime.Unix()+365 < time.Now().Unix() { + isCanSelect = "1" + } + if isCanSelect != "1" { + sess.Rollback() + e.OutErr(c, 400, e.NewErr(400, "您不能选择")) + return + } + no := data.No + 1 + if data.State == 3 { + no = data.No + update, _ := sess.Where("no=? and uid=?", no, user.Info.Uid).Delete(&models.CampTaskProjectOperatorLike{}) + if update == 0 { + sess.Rollback() + e.OutErr(c, 400, e.NewErr(400, "提交失败")) + return + } + } + for _, v := range args.Ids { + var tmp = models.CampTaskProjectOperatorLike{ + Uid: user.Info.Uid, + ProjectId: utils.StrToInt(v), + CreateTime: time.Now(), + No: no, + } + insert, _ := sess.Insert(&tmp) + if insert == 0 { + sess.Rollback() + e.OutErr(c, 400, e.NewErr(400, "提交失败")) + return + } + } + sess.Commit() + e.OutSuc(c, "success", nil) + return +} +func ProjectList(c *gin.Context) { + var args md.ProjectListReq + if err := c.ShouldBindJSON(&args); err != nil { + e.OutErr(c, e.ERR_INVALID_ARGS) + return + } + user := svc.GetUser(c) + isCanSelect := "0" + var data models.CampTaskProjectOperatorLike + svc.MasterDb(c).Where("uid=?", user.Info.Uid).Desc("id").Get(&data) + if data.State == 3 || data.Id == 0 || data.CreateTime.Unix()+365 < time.Now().Unix() { + isCanSelect = "1" + } + + hotTask := make([]map[string]string, 0) + var hotTaskList []models.CampTaskProject + sess := svc.MasterDb(c).Where("state=?", 1) + if args.Cid != "" { + sess.And("cid=?", args.Cid) + } + total, _ := sess.Limit(utils.StrToInt(args.P), (utils.StrToInt(args.P)-1)*utils.StrToInt(args.Size)).OrderBy("is_must desc,id desc").FindAndCount(&hotTaskList) + for _, v := range hotTaskList { + tmp := map[string]string{ + "id": utils.IntToStr(v.Id), + "is_check": "0", + "is_must": utils.IntToStr(v.IsMust), + "name": v.Name, + "money": v.Money, + "icon": svc.ImageFormat(c, v.Logo), + } + counts, _ := svc.MasterDb(c).Where("uid=? and task_id=?", user.Info.Uid, v.Id).Count(&models.CampTaskOperatorTask{}) + if counts > 0 { + tmp["is_check"] = "1" + } + hotTask = append(hotTask, tmp) + } + taskCate := make([]map[string]string, 0) + taskCateList := make([]models.CampTaskProjectCate, 0) + svc.MasterDb(c).Where("is_show=?", 1).OrderBy("sort desc,id desc").Find(&taskCateList) + for _, v := range taskCateList { + tmp := map[string]string{ + "name": v.Name, "value": utils.IntToStr(v.Id), + } + taskCate = append(taskCate, tmp) + } + res := map[string]interface{}{ + "cate_list": taskCate, + "is_can_select": isCanSelect, + "total": total, "list": hotTask, + } + e.OutSuc(c, res, nil) + return +} diff --git a/app/operator/svc/svc_task.go b/app/operator/svc/svc_task.go new file mode 100644 index 0000000..900c4a6 --- /dev/null +++ b/app/operator/svc/svc_task.go @@ -0,0 +1,151 @@ +package svc + +import ( + "applet/app/comm/e" + "applet/app/comm/svc" + "applet/app/comm/utils" + "applet/app/operator/md" + md2 "applet/app/store/md" + "code.fnuoos.com/go_rely_warehouse/zyos_model.git/src/implement" + "code.fnuoos.com/go_rely_warehouse/zyos_model.git/src/models" + "encoding/json" + "github.com/gin-gonic/gin" + "time" +) + +func TaskUp(c *gin.Context) { + var args map[string]string + if err := c.ShouldBindJSON(&args); err != nil { + e.OutErr(c, e.ERR_INVALID_ARGS) + return + } + user := svc.GetUser(c) + update, _ := svc.MasterDb(c).Where("task_id=? and uid=?", args["id"], user.Info.Uid).Count(&models.CampTaskOperatorTask{}) + if update > 0 { + e.OutErr(c, 400, e.NewErr(400, "该任务已上架")) + return + } + var data = models.CampTaskOperatorTask{ + TaskId: utils.StrToInt(args["id"]), + Uid: user.Info.Uid, + CreateTime: time.Now(), + } + insert, _ := svc.MasterDb(c).Insert(&data) + if insert == 0 { + e.OutErr(c, 400, e.NewErr(400, "上架失败")) + return + } + e.OutSuc(c, "success", nil) + return +} +func TaskDown(c *gin.Context) { + var args map[string]string + if err := c.ShouldBindJSON(&args); err != nil { + e.OutErr(c, e.ERR_INVALID_ARGS) + return + } + user := svc.GetUser(c) + update, _ := svc.MasterDb(c).Where("task_id=? and uid=?", args["id"], user.Info.Uid).Delete(&models.CampTaskOperatorTask{}) + if update == 0 { + e.OutErr(c, 400, e.NewErr(400, "下架失败")) + return + } + e.OutSuc(c, "success", nil) + return +} +func TaskList(c *gin.Context) { + var args md.TaskListReq + if err := c.ShouldBindJSON(&args); err != nil { + e.OutErr(c, e.ERR_INVALID_ARGS) + return + } + user := svc.GetUser(c) + hotTask := make([]map[string]string, 0) + var hotTaskList []models.CampTaskList + sess := svc.MasterDb(c).Where("up_down_state=?", 1) + if args.Cid != "" { + sess.And("first_cid=?", args.Cid) + } + if args.SettleType != "" { + sess.And("settle_type=?", args.SettleType) + } + total, _ := sess.Limit(utils.StrToInt(args.P), (utils.StrToInt(args.P)-1)*utils.StrToInt(args.Size)).OrderBy("success_num desc,id desc").FindAndCount(&hotTaskList) + for _, v := range hotTaskList { + tmp := map[string]string{ + "id": utils.IntToStr(v.Id), + "is_check": "0", + "name": v.Name, + "price": v.Price, + "num": utils.IntToStr(v.Num), + "icon": svc.ImageFormat(c, v.Logo), + "timer": v.StartTime.Format("2006-01-02") + "至" + v.EndTime.Format("2006-01-02"), + } + counts, _ := svc.MasterDb(c).Where("uid=? and task_id=?", user.Info.Uid, v.Id).Count(&models.CampTaskOperatorTask{}) + if counts > 0 { + tmp["is_check"] = "1" + } + hotTask = append(hotTask, tmp) + } + taskCate := make([]map[string]string, 0) + taskCateList := make([]models.CampTaskCate, 0) + svc.MasterDb(c).Where(" is_show=?", 1).OrderBy("sort desc,id desc").Find(&taskCateList) + for _, v := range taskCateList { + if v.Pid > 0 { + continue + } + tmp := map[string]string{ + "name": v.Name, "value": utils.IntToStr(v.Id), + } + taskCate = append(taskCate, tmp) + } + res := map[string]interface{}{ + "cate_list": taskCate, + "settle_type": []map[string]string{ + {"name": "T+1", "value": "0"}, + {"name": "T+7", "value": "1"}, + {"name": "月结", "value": "2"}, + }, + "total": total, "list": hotTask, + } + e.OutSuc(c, res, nil) + return +} +func TaskDetail(c *gin.Context) { + var args map[string]string + if err := c.ShouldBindJSON(&args); err != nil { + e.OutErr(c, e.ERR_INVALID_ARGS) + return + } + user := svc.GetUser(c) + taskDb := implement.NewCampTaskListDb(svc.MasterDb(c)) + task, _ := taskDb.GetCampTaskById(args["id"]) + res := md2.TaskAllDetail{} + res.Label = make([]string, 0) + res.DetailInfo = make([]string, 0) + if task != nil { + taskDetailDb := implement.NewCampTaskDetailDb(svc.MasterDb(c)) + taskDetail, _ := taskDetailDb.GetCampTaskDetailById(args["id"]) + res = md2.TaskAllDetail{ + Id: utils.IntToStr(task.Id), + Name: task.Name, + Icon: svc.ImageFormat(c, task.Logo), + Price: task.Price, + Num: utils.IntToStr(task.Num), + Timer: task.StartTime.Format("2006-01-02") + "至" + task.EndTime.Format("2006-01-02"), + } + if taskDetail != nil { + DetailInfo := make([]string, 0) + json.Unmarshal([]byte(taskDetail.DetailInfo), &DetailInfo) + res.DetailInfo = DetailInfo + } + label := make([]string, 0) + json.Unmarshal([]byte(task.Label), &label) + res.Label = label + counts, _ := svc.MasterDb(c).Where("uid=? and task_id=?", user.Info.Uid, task.Id).Count(&models.CampTaskOperatorTask{}) + if counts > 0 { + res.IsCheck = "1" + } + } + e.OutSuc(c, res, nil) + return +} diff --git a/app/router/router.go b/app/router/router.go index 428e131..d21d4fe 100644 --- a/app/router/router.go +++ b/app/router/router.go @@ -4,6 +4,7 @@ import ( "applet/app/cfg" "applet/app/comm/svc" "applet/app/mw" + operatorHdl "applet/app/operator/hdl" storeHdl "applet/app/store/hdl" _ "applet/docs" "fmt" @@ -67,6 +68,7 @@ func routeStore(r *gin.RouterGroup) { r.POST("/fastLogin", storeHdl.FastLogin) //快捷登陆 r.POST("/changePwd", storeHdl.ChangePwd) //修改密码 r.Use(mw.StoreAuthJWT) // 以下接口需要JWT验证 + r.GET("/userInfo", storeHdl.UserInfo) //首页数据 r.GET("/index", storeHdl.Index) //首页数据 r.GET("/storeIndex", storeHdl.StoreIndex) //商家中心 r.GET("/taskBase", storeHdl.TaskBase) //任务基础 @@ -117,9 +119,18 @@ func routeCustom(r *gin.RouterGroup) { } func routeOperator(r *gin.RouterGroup) { - r.Use(mw.DB) // 以下接口需要用到数据库 - r.Use(mw.Checker) // 以下接口需要检查Header: platform - - r.Use(mw.AuthJWT) // 以下接口需要JWT验证 - + r.Use(mw.DB) // 以下接口需要用到数据库 + r.Use(mw.Checker) // 以下接口需要检查Header: platform + r.POST("/login", operatorHdl.Login) //账号密码登陆 + r.POST("/sms", operatorHdl.Sms) //发验证码 + r.POST("/fastLogin", operatorHdl.FastLogin) //快捷登陆 + r.Use(mw.AuthJWT) // 以下接口需要JWT验证 + r.GET("/index", operatorHdl.Index) + r.POST("/taskDetail", operatorHdl.TaskDetail) //任务详情 + r.POST("/taskCenter", operatorHdl.TaskList) + r.POST("/taskCenter/up", operatorHdl.TaskUp) + r.POST("/taskCenter/down", operatorHdl.TaskDown) + r.POST("/projectCenter", operatorHdl.ProjectList) + //r.POST("/projectDetail", operatorHdl.ProjectDetail) + r.POST("/projectSelect", operatorHdl.ProjectSelect) } diff --git a/app/store/hdl/hdl_index.go b/app/store/hdl/hdl_index.go index 18c1d19..9ce69c2 100644 --- a/app/store/hdl/hdl_index.go +++ b/app/store/hdl/hdl_index.go @@ -11,3 +11,6 @@ func Index(c *gin.Context) { func StoreIndex(c *gin.Context) { svc.StoreIndex(c) } +func UserInfo(c *gin.Context) { + svc.UserInfo(c) +} diff --git a/app/store/md/md_project.go b/app/store/md/md_project.go index c0db098..889e0df 100644 --- a/app/store/md/md_project.go +++ b/app/store/md/md_project.go @@ -15,4 +15,8 @@ type ProjectSaveReq struct { VideoInfo string `json:"video_info" ` Img []string `json:"img" ` DetailInfo []string `json:"detail_info"` + Label []string `json:"label"` + AdvWord string `json:"adv_word"` + AdminName string `json:"admin_name"` + AdminPhone string `json:"admin_phone"` } diff --git a/app/store/md/md_task.go b/app/store/md/md_task.go index 3282598..f5dd2dd 100644 --- a/app/store/md/md_task.go +++ b/app/store/md/md_task.go @@ -29,6 +29,7 @@ type TaskDetail struct { Announcement string `json:"announcement"` } type TaskAllDetail struct { + IsCheck string `json:"is_check"` Id string `json:"id" xorm:"not null pk autoincr INT(11)"` Name string `json:"name" xorm:"comment('名称') VARCHAR(255)"` Icon string `json:"icon" xorm:"comment('logo') VARCHAR(255)"` diff --git a/app/store/svc/svc_index.go b/app/store/svc/svc_index.go index e0fd8e6..1c26b4f 100644 --- a/app/store/svc/svc_index.go +++ b/app/store/svc/svc_index.go @@ -9,6 +9,14 @@ import ( "github.com/gin-gonic/gin" ) +func UserInfo(c *gin.Context) { + store := svc.GetCampStore(c) + res := map[string]string{ + "phone": store.Phone, + } + e.OutSuc(c, res, nil) + return +} func Index(c *gin.Context) { storeId := svc.GetCampStoreId(c) allTaskCount, _ := svc.MasterDb(c).Where("store_id=? and is_delete=0", storeId).Count(&models.CampTaskList{}) @@ -21,7 +29,7 @@ func Index(c *gin.Context) { } myTask := make([]map[string]string, 0) NewCampTaskListDb := implement.NewCampTaskListDb(svc.MasterDb(c)) - myTaskList, _ := NewCampTaskListDb.FindCampTaskList(utils.IntToStr(storeId), "", 1, 5, "apply_time desc") + myTaskList, _ := NewCampTaskListDb.FindCampTaskList(utils.IntToStr(storeId), "", "", 1, 5, "apply_time desc") if myTaskList != nil { for _, v := range *myTaskList { tmp := map[string]string{ @@ -33,7 +41,7 @@ func Index(c *gin.Context) { } } hotTask := make([]map[string]string, 0) - hotTaskList, _ := NewCampTaskListDb.FindCampTaskList(utils.IntToStr(storeId), "", 1, 5, "success_num desc") + hotTaskList, _ := NewCampTaskListDb.FindCampTaskList(utils.IntToStr(storeId), "", "1", 1, 5, "success_num desc,id desc") if hotTaskList != nil { for _, v := range *hotTaskList { tmp := map[string]string{ @@ -69,7 +77,7 @@ func StoreIndex(c *gin.Context) { } myTask := make([]map[string]string, 0) NewCampTaskListDb := implement.NewCampTaskListDb(svc.MasterDb(c)) - myTaskList, _ := NewCampTaskListDb.FindCampTaskList(utils.IntToStr(storeId), "", 1, 5, "apply_time desc") + myTaskList, _ := NewCampTaskListDb.FindCampTaskList(utils.IntToStr(storeId), "", "", 1, 5, "apply_time desc") if myTaskList != nil { for _, v := range *myTaskList { tmp := map[string]string{ diff --git a/app/store/svc/svc_project.go b/app/store/svc/svc_project.go index daca4f2..d23451c 100644 --- a/app/store/svc/svc_project.go +++ b/app/store/svc/svc_project.go @@ -51,20 +51,30 @@ func AllProjectList(c *gin.Context) { json.Unmarshal([]byte(v.EnterpriseInfo), &enterpriseInfo) img := make([]string, 0) json.Unmarshal([]byte(v.Img), &img) + firstImg := "" + if len(img) > 0 { + firstImg = img[0] + } detailInfo := make([]string, 0) json.Unmarshal([]byte(v.DetailInfo), &detailInfo) + label := make([]string, 0) + json.Unmarshal([]byte(v.Label), &label) tmp := map[string]interface{}{ + "year": v.CreateTime.Format("2006") + "年", + "id": utils.IntToStr(v.Id), "name": v.Name, "cid": utils.IntToStr(v.Cid), "money": v.Money, - "logo": v.Logo, + "img": firstImg, "video_info": v.VideoInfo, - "img": img, + "img_list": img, "detail_info": detailInfo, "create_time": v.CreateTime.Format("2006-01-02 15:04:05"), "enterprise_info": enterpriseInfo, "cate_name": "", + "adv_word": v.AdvWord, + "label": label, } for _, v1 := range cate { if v1.Id == v.Cid { @@ -108,7 +118,11 @@ func ProjectList(c *gin.Context) { json.Unmarshal([]byte(v.Img), &img) detailInfo := make([]string, 0) json.Unmarshal([]byte(v.DetailInfo), &detailInfo) + label := make([]string, 0) + json.Unmarshal([]byte(v.Label), &label) tmp := map[string]interface{}{ + "admin_name": v.AdminName, + "admin_phone": v.AdminPhone, "id": utils.IntToStr(v.Id), "name": v.Name, "cid": utils.IntToStr(v.Cid), @@ -120,6 +134,8 @@ func ProjectList(c *gin.Context) { "create_time": v.CreateTime.Format("2006-01-02 15:04:05"), "enterprise_info": enterpriseInfo, "cate_name": "", + "adv_word": v.AdvWord, + "label": label, } for _, v1 := range cate { if v1.Id == v.Cid { @@ -165,6 +181,10 @@ func ProjectSave(c *gin.Context) { data.VideoInfo = args.VideoInfo data.Img = utils.SerializeStr(args.Img) data.DetailInfo = utils.SerializeStr(args.DetailInfo) + data.Label = utils.SerializeStr(args.Label) + data.AdvWord = args.AdvWord + data.AdminName = args.AdminName + data.AdminPhone = args.AdminPhone svc.MasterDb(c).Where("id=?", data.Id).Update(&data) e.OutSuc(c, "success", nil) return diff --git a/app/store/svc/svc_task.go b/app/store/svc/svc_task.go index 2abfc1f..c1b68b1 100644 --- a/app/store/svc/svc_task.go +++ b/app/store/svc/svc_task.go @@ -564,7 +564,6 @@ func TaskChangeNum(c *gin.Context) { return } if task.SettleType == 0 { - sql := `select SUM(price*num) as amount from camp_task_list where is_delete=0 and store_id=? and state in(0,1) and settle_type=0 and audit_type in(2,3)` nativeString, _ := db.QueryNativeStringWithSession(sess, sql, storeId) var amount float64 = 0 diff --git a/go.mod b/go.mod index 54f858a..157fd32 100644 --- a/go.mod +++ b/go.mod @@ -45,12 +45,10 @@ require ( xorm.io/xorm v1.3.10 ) -require ( - code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git v1.1.21-0.20250801053019-55ac588e769e - code.fnuoos.com/go_rely_warehouse/zyos_model.git v0.0.4-0.20250908064256-8b6a3c2bc3f3 -) +require code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git v1.1.21-0.20250801053019-55ac588e769e require ( + code.fnuoos.com/go_rely_warehouse/zyos_model.git v0.0.4-0.20250910023150-2ede529c0221 // indirect github.com/KyleBanks/depth v1.2.1 // indirect github.com/PuerkitoBio/goquery v1.6.1 // indirect github.com/PuerkitoBio/purell v1.1.1 // indirect