huangjiajun 2 週之前
父節點
當前提交
bca800055b
共有 21 個檔案被更改,包括 1321 行新增36 行删除
  1. +2
    -2
      app/comm/md/app_redis_key.go
  2. +3
    -2
      app/comm/md/md_mq.go
  3. +14
    -0
      app/comm/svc/svc_redis_mutex_lock.go
  4. +39
    -0
      app/custom/hdl/hdl_my_task.go
  5. +58
    -0
      app/custom/hdl/hdl_order.go
  6. +54
    -0
      app/custom/hdl/hdl_project.go
  7. +25
    -0
      app/custom/hdl/hdl_task_list.go
  8. +8
    -0
      app/custom/md/md_task.go
  9. +208
    -0
      app/custom/svc/svc_my_task.go
  10. +360
    -0
      app/custom/svc/svc_order.go
  11. +154
    -0
      app/custom/svc/svc_project.go
  12. +304
    -0
      app/custom/svc/svc_task_list.go
  13. +1
    -1
      app/operator/svc/svc_project.go
  14. +4
    -16
      app/operator/svc/svc_task.go
  15. +28
    -5
      app/router/router.go
  16. +7
    -3
      app/store/md/md_project.go
  17. +1
    -0
      app/store/md/md_task.go
  18. +2
    -1
      app/store/svc/svc_project.go
  19. +41
    -1
      app/store/svc/svc_task.go
  20. +3
    -2
      app/store/svc/svc_task_order.go
  21. +5
    -3
      go.mod

+ 2
- 2
app/comm/md/app_redis_key.go 查看文件

@@ -12,6 +12,6 @@ const (

AppCommLimiterLock = "%s:app_comm_limiter_lock:%s" // 限流器锁
DealAppCommLimiterRequestIdPrefix = "%s:app_comm_limiter_request_id:%s"
CfgCacheTime = 60 * 60 * 4
CampTaskLock = "%s:camp_task_lock:%s" //
CfgCacheTime = 60 * 60 * 4
)

+ 3
- 2
app/comm/md/md_mq.go 查看文件

@@ -1,8 +1,9 @@
package md

const (
ZhiosCampTask = "zhios.camp.task.exchange"
ZhiosCampTaskRoutKey = "camp_task_order_settle"
ZhiosCampTask = "zhios.camp.task.exchange"
ZhiosCampTaskRoutKey = "camp_task_order_settle"
ZhiosCampTaskOrderCommissionRoutKey = "camp_task_order_commission"
)

type ZhiosCampOrderSettle struct {


+ 14
- 0
app/comm/svc/svc_redis_mutex_lock.go 查看文件

@@ -83,7 +83,21 @@ func HandleBalanceDistributedLock(masterId, uid, requestIdPrefix string) (cb fun

return cb, nil
}
func HandleCampTaskLockDistributedLock(masterId, id, requestIdPrefix string) (cb func(), err error) {
// 获取余额更新锁
balanceLockKey := fmt.Sprintf(md.CampTaskLock, masterId, id)
requestId := GetDistributedLockRequestId(requestIdPrefix)
balanceLockOk := TryGetDistributedLock(balanceLockKey, requestId, true)
if !balanceLockOk {
return nil, errors.New("系统繁忙,请稍后再试")
}

cb = func() {
_, _ = ReleaseDistributedLock(balanceLockKey, requestId)
}

return cb, nil
}
func HandleLimiterDistributedLock(masterId, ip, requestIdPrefix string) (cb func(), err error) {
balanceLockKey := fmt.Sprintf(md.AppCommLimiterLock, masterId, ip)
requestId := GetDistributedLockRequestId(requestIdPrefix)


+ 39
- 0
app/custom/hdl/hdl_my_task.go 查看文件

@@ -0,0 +1,39 @@
package hdl

import (
"applet/app/comm/e"
"applet/app/comm/svc"
"applet/app/comm/utils"
svc2 "applet/app/custom/svc"
"code.fnuoos.com/go_rely_warehouse/zyos_model.git/src/models"
"github.com/gin-gonic/gin"
)

func TaskMyCate(c *gin.Context) {
var cate = make([]models.CampTaskCate, 0)
svc.MasterDb(c).Where("is_show=1 and pid=0").Find(&cate)
list := make([]map[string]string, 0)
for _, v := range cate {
tmp := map[string]string{
"name": v.Name, "value": utils.IntToStr(v.Id),
}
list = append(list, tmp)
}
e.OutSuc(c, list, nil)
return
}
func TaskMyList(c *gin.Context) {
svc2.TaskMyList(c)
}
func TaskMyTotal(c *gin.Context) {
svc2.TaskMyTotal(c)
}
func TaskIncome(c *gin.Context) {
svc2.TaskIncome(c)
}
func TaskIncomeTaskList(c *gin.Context) {
svc2.TaskIncomeTaskList(c)
}
func TaskIncomeList(c *gin.Context) {
svc2.TaskIncomeList(c)
}

+ 58
- 0
app/custom/hdl/hdl_order.go 查看文件

@@ -0,0 +1,58 @@
package hdl

import (
"applet/app/comm/e"
"applet/app/comm/svc"
"applet/app/comm/utils"
svc2 "applet/app/custom/svc"
"code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/db/model"
"github.com/gin-gonic/gin"
)

func City(c *gin.Context) {
var data = make([]model.RegionalAgentRegion, 0)
svc.MasterDb(c).Where("province_id=? or (province_id>? and city_id=?)", 0, 0, 0).Find(&data)
list := make([]map[string]interface{}, 0)
for _, v := range data {
tmpList := make([]map[string]string, 0)
tmp := map[string]interface{}{
"name": v.Name, "value": utils.Int64ToStr(v.Id), "list": tmpList,
}
list = append(list, tmp)
}
for k, v := range list {
tmpList := make([]map[string]string, 0)
for _, v1 := range data {
if v1.ProvinceId == v["value"] {
tmp := map[string]string{
"name": v1.Name, "value": utils.Int64ToStr(v1.Id),
}
tmpList = append(tmpList, tmp)
}
}
list[k]["list"] = tmpList
}
e.OutSuc(c, list, nil)
return
}
func TaskQrcodeApply(c *gin.Context) {
svc2.TaskQrcodeApply(c)
}
func TaskQrcodeList(c *gin.Context) {
svc2.TaskQrcodeList(c)
}
func TaskQrcodeDetail(c *gin.Context) {
svc2.TaskQrcodeDetail(c)
}
func TaskQrcodeSubmit(c *gin.Context) {
svc2.TaskQrcodeSubmit(c)
}
func TaskQrcodeContinueSubmit(c *gin.Context) {
svc2.TaskQrcodeContinueSubmit(c)
}
func TaskQrcodeOrderCate(c *gin.Context) {
svc2.TaskQrcodeOrderCate(c)
}
func TaskQrcodeOrder(c *gin.Context) {
svc2.TaskQrcodeOrder(c)
}

+ 54
- 0
app/custom/hdl/hdl_project.go 查看文件

@@ -0,0 +1,54 @@
package hdl

import (
"applet/app/comm/e"
svc2 "applet/app/comm/svc"
"applet/app/comm/utils"
"applet/app/custom/svc"
"code.fnuoos.com/go_rely_warehouse/zyos_model.git/src/models"
"github.com/gin-gonic/gin"
)

func ProjectBase(c *gin.Context) {
var cate = []map[string]string{
{"name": "全部", "value": ""},
}
var cateMap = make([]models.CampTaskProjectCate, 0)
svc2.MasterDb(c).Where("is_show=1").OrderBy("sort desc,id desc").Find(&cateMap)
for _, v := range cateMap {
tmp := map[string]string{
"name": v.Name, "value": utils.IntToStr(v.Id),
}
cate = append(cate, tmp)
}
res := map[string]interface{}{
"cate": cate,
"price": []map[string]string{
{"name": "全部", "value": ""},
{"name": "免费合作", "value": "0_0"},
{"name": "¥0-450万", "value": "0_450"},
{"name": "¥450-600万", "value": "450_600"},
{"name": "¥600-1000万", "value": "600_1000"},
{"name": "¥1000万以上", "value": "1000_99999999"},
},
"sort": []map[string]string{
{"name": "默认排序", "value": ""},
{"name": "合作金额从低到高", "value": "money_asc"},
{"name": "合作金额从高到低", "value": "money_desc"},
},
}
e.OutSuc(c, res, nil)
return
}
func ProjectList(c *gin.Context) {
svc.ProjectList(c)
}
func ProjectDetail(c *gin.Context) {
svc.ProjectDetail(c)
}
func ProjectLikeList(c *gin.Context) {
svc.ProjectLikeList(c)
}
func ProjectLike(c *gin.Context) {
svc.ProjectLike(c)
}

+ 25
- 0
app/custom/hdl/hdl_task_list.go 查看文件

@@ -0,0 +1,25 @@
package hdl

import (
"applet/app/custom/svc"
"github.com/gin-gonic/gin"
)

func IndexTaskList(c *gin.Context) {
svc.IndexTaskList(c)
}
func TaskBase(c *gin.Context) {
svc.TaskBase(c)
}
func SearchTaskList(c *gin.Context) {
svc.SearchTaskList(c)
}
func TaskDetail(c *gin.Context) {
svc.TaskDetail(c)
}
func TaskDetailNotice(c *gin.Context) {
svc.TaskDetailNotice(c)
}
func TaskDetailNoticeCate(c *gin.Context) {
svc.TaskDetailNoticeCate(c)
}

+ 8
- 0
app/custom/md/md_task.go 查看文件

@@ -0,0 +1,8 @@
package md

import "code.fnuoos.com/go_rely_warehouse/zyos_model.git/src/models"

type CampTaskListGroup struct {
models.CampTaskOperatorTask `xorm:"extends"`
models.CampTaskList `xorm:"extends"`
}

+ 208
- 0
app/custom/svc/svc_my_task.go 查看文件

@@ -0,0 +1,208 @@
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_go_order_relate_rule.git/lib/comm_plan"
md2 "code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/md"
svc2 "code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/svc"
"fmt"
"github.com/gin-gonic/gin"
"time"
)

func TaskIncomeList(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)
sql := `SELECT SUM(ctupor.amount) as amount,ctl.name FROM camp_task_user_promotion_order_relate ctupor
LEFT JOIN camp_task_user_promotion_order ctupo on ctupo.oid=ctupor.oid
LEFT JOIN camp_task_list ctl on ctl.id=ctupo.task_id
WHERE ctupor.uid=%d and ctupo.settle_time like '2025-09%' GROUP BY ctupo.task_id ORDER BY ctupo.settle_time desc,ctupo.id desc %s`
sql = fmt.Sprintf(sql, user.Info.Uid, "limit "+utils.IntToStr((utils.StrToInt(args["p"])-1)*10)+",10")
nativeString, _ := db.QueryNativeString(svc.MasterDb(c), sql)
list := make([]map[string]string, 0)
for _, v := range nativeString {
tmp := map[string]string{
"name": v["name"], "amount": v["amount"],
}
list = append(list, tmp)
}
res := map[string]interface{}{
"list": list,
}
e.OutSuc(c, res, nil)
}
func TaskIncomeTaskList(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)
sql := `
SELECT ctls.*,ct.id as op_id FROM camp_task_operator_task ct
LEFT JOIN camp_task_list ctls on ctls.id=ct.task_id
where ctls.first_cid in(
SELECT ctl.first_cid FROM camp_task_user_promotion_qrcode ctupo
LEFT JOIN camp_task_list ctl on ctl.id=ctupo.task_id
WHERE ctupo.uid=%d GROUP BY ctupo.task_id ) and ctls.up_down_state=1 and ctls.num>0 order by ctls.extend_num desc,ctls.id desc limit 5`
sql = fmt.Sprintf(sql, user.Info.Uid)
nativeString, _ := db.QueryNativeString(svc.MasterDb(c), sql)
list := make([]map[string]string, 0)
for _, v := range nativeString {
basePrice, _, _, _, _ := CommPrice(c, v["price"])
tmp := map[string]string{
"id": v["op_id"],
"name": v["name"],
"extend_num": v["extend_num"],
"icon": svc.ImageFormat(c, v["logo"]),
"price": basePrice,
}
list = append(list, tmp)
}
re := map[string]interface{}{
"list": list,
}
e.OutSuc(c, re, nil)
return
}
func TaskIncome(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)
today := utils.GetTimeRange("today")
sql := `SELECT SUM(ctupor.amount) as amount,SUM(IF(and ctupo.settle_time >= '%s',ctupor.amount,0) as today_amount FROM camp_task_user_promotion_order_relate ctupor
LEFT JOIN camp_task_user_promotion_order ctupo on ctupo.oid=ctupor.oid
WHERE ctupor.uid=%d `
sql = fmt.Sprintf(sql, time.Unix(today["start"], 0).Format("2006-01-02 15:04:05"), user.Info.Uid)
nativeString, _ := db.QueryNativeString(svc.MasterDb(c), sql)
allPayment := "0"
todayPayment := "0"
for _, v := range nativeString {
allPayment = v["amount"]
todayPayment = v["today_amount"]
}
res := map[string]interface{}{
"total_list": []map[string]string{
{"name": "累计总收益(元)", "value": allPayment},
{"name": "今日收益(元)", "value": todayPayment},
},
}
e.OutSuc(c, res, nil)
return
}
func TaskMyTotal(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)

sql := `SELECT COUNT(*) as count,SUM(ctupor.amount) as amount FROM camp_task_user_promotion_order_relate ctupor
LEFT JOIN camp_task_user_promotion_order ctupo on ctupo.oid=ctupor.oid
WHERE ctupor.uid=%d and ctupo.task_id=%s and ctupo.settle_time like '%s'`
sql = fmt.Sprintf(sql, user.Info.Uid, args["task_id"], args["date"]+"%")
nativeString, _ := db.QueryNativeString(svc.MasterDb(c), sql)
orderCount := "0"
settlePayment := "0"
for _, v := range nativeString {
orderCount = v["count"]
settlePayment = v["amount"]
}
sql1 := `SELECT COUNT(*) as count,SUM(ctupor.amount) as amount FROM camp_task_user_promotion_order_relate ctupor
LEFT JOIN camp_task_user_promotion_order ctupo on ctupo.oid=ctupor.oid
WHERE ctupor.uid=%d and ctupo.task_id=%s and ctupo.settle_time is null`
sql1 = fmt.Sprintf(sql1, user.Info.Uid, args["task_id"])
nativeString1, _ := db.QueryNativeString(svc.MasterDb(c), sql)
waitPayment := "0"
for _, v := range nativeString1 {
waitPayment = v["amount"]
}
res := map[string]interface{}{
"order_count": orderCount,
"total_list": []map[string]string{
{"name": "已结算(元)", "value": settlePayment},
{"name": "总待结算(元)", "value": waitPayment},
},
}
e.OutSuc(c, res, nil)
return
}
func TaskMyList(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)
where := "ctupo.uid=" + utils.IntToStr(user.Info.Uid)
if args["cid"] != "" {
where += " and ctl.first_cid=" + args["cid"]
}

sql := `SELECT ctl.* FROM camp_task_user_promotion_qrcode ctupo
LEFT JOIN camp_task_list ctl on ctl.id=ctupo.task_id
WHERE %s GROUP BY ctupo.task_id ORDER BY ctl.id desc %s`
sql = fmt.Sprintf(sql, where, "limit "+utils.IntToStr((utils.StrToInt(args["p"])-1)*10)+",10")
nativeString, _ := db.QueryNativeString(svc.MasterDb(c), sql)

list := make([]map[string]interface{}, 0)
settleType := []string{"T+1结算", "T+7结算", "T+30结算"}
for _, v := range nativeString {
//basePrice, firstPrice, secondPrice, thirdPrice, fourPrice := CommPrice(c, v["price"])
basePrice, _, _, _, _ := CommPrice(c, v["price"])
tmp := map[string]interface{}{
"id": v["id"],
"name": v["name"],
"price": basePrice,
"label": []string{settleType[utils.StrToInt(v["settle_type"])]},
"icon": svc.ImageFormat(c, v["logo"]),
}
list = append(list, tmp)
}
res := map[string]interface{}{
"list": list,
}
e.OutSuc(c, res, nil)
return
}
func CommPrice(c *gin.Context, price string) (string, string, string, string, string) {
firstPrice := "0"
secondPrice := "0"
thirdPrice := "0"
fourPrice := "0"
basePrice := ""
plan, commission1, virtualCoinMoneyRate := svc2.GetAllPlan(svc.MasterDb(c), c.GetString("mid"))
rmd := &md2.CommissionParam{}
cfg, _ := svc2.GetPlanCfg(svc.MasterDb(c), "camp_task", c.GetString("mid"), plan, commission1, virtualCoinMoneyRate, rmd)
user, _ := svc.GetDefaultUser(c, c.GetHeader("Authorization"))
if cfg != nil {
fee, _, _, _ := svc2.CommFee(utils.StrToFloat64(price), cfg, "commission", rmd)
tmpPrice, _, _, _ := comm_plan.CalReturnAmountAndRatio(0, 0, 0, "own", fee, 0, cfg)
firstPrice = utils.Float64ToStr(tmpPrice)
tmpPrice1, _, _, _ := comm_plan.CalReturnAmountAndRatio(1, 0, 0, "own", fee, 0, cfg)
secondPrice = utils.Float64ToStr(tmpPrice1)
tmpPrice2, _, _, _ := comm_plan.CalReturnAmountAndRatio(2, 0, 0, "own", fee, 0, cfg)
thirdPrice = utils.Float64ToStr(tmpPrice2)
tmpPrice3, _, _, _ := comm_plan.CalReturnAmountAndRatio(3, 0, 0, "own", fee, 0, cfg)
fourPrice = utils.Float64ToStr(tmpPrice3)
}
if user != nil {
tmpPrice := []string{firstPrice, secondPrice, thirdPrice, fourPrice}
s := tmpPrice[user.Info.Level]
if s != "" {
basePrice = s
}
}
return basePrice, firstPrice, secondPrice, thirdPrice, fourPrice
}

+ 360
- 0
app/custom/svc/svc_order.go 查看文件

@@ -0,0 +1,360 @@
package svc

import (
"applet/app/comm/db"
"applet/app/comm/e"
md2 "applet/app/comm/md"
"applet/app/comm/svc"
"applet/app/comm/utils"
"applet/app/comm/utils/qrcode"
"code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git/rabbit"
"code.fnuoos.com/go_rely_warehouse/zyos_model.git/src/models"
"fmt"
"github.com/gin-gonic/gin"
"strings"
"time"
)

func TaskQrcodeOrderCate(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.GetDefaultUser(c, c.GetHeader("Authorization"))
uid := 0
if args["qrcode_id"] != "" {
var data models.CampTaskUserPromotionQrcode
svc.MasterDb(c).Where("id=?", args["id"]).Get(&data)
uid = data.Uid
} else if user != nil {
uid = user.Info.Uid
}
where := "uid=" + utils.IntToStr(uid)
if args["qrcode_id"] != "" {
where += " and qrcode_id=" + args["qrcode_id"]
}
if args["task_id"] != "" {
where += " and task_id=" + args["task_id"]
}
sql := `select count(*) as count,state,task_id from camp_task_user_promotion_order where %s group by state`
sql = fmt.Sprintf(sql, where)
nativeString, _ := db.QueryNativeString(svc.MasterDb(c), sql)
list := []map[string]string{
{"name": "审核中", "value": "0"},
{"name": "审核通过", "value": "1"},
{"name": "审核驳回", "value": "2"},
}
id := "0"
for k, v := range list {
for _, v1 := range nativeString {
id = v1["task_id"]
if v["value"] == v1["state"] {
list[k]["name"] += "(" + v1["count"] + ")"
}
}
}
var task models.CampTaskList
svc.MasterDb(c).Where("id=?", id).Get(&task)
re := map[string]interface{}{
"list": list,
"task_name": task.Name,
}
e.OutSuc(c, re, nil)
return
}
func TaskQrcodeOrder(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.GetDefaultUser(c, c.GetHeader("Authorization"))
uid := 0
if args["qrcode_id"] != "" {
var data models.CampTaskUserPromotionQrcode
svc.MasterDb(c).Where("id=?", args["id"]).Get(&data)
uid = data.Uid
} else if user != nil {
uid = user.Info.Uid
}
where := "uid=" + utils.IntToStr(uid)
if args["qrcode_id"] != "" {
where += " and qrcode_id=" + args["qrcode_id"]
}
if args["task_id"] != "" {
where += " and task_id=" + args["task_id"]
}
if args["state"] != "" {
where += " and state=" + args["state"]
}
sql := `select * from camp_task_user_promotion_order where %s order by id desc %s`
sql = fmt.Sprintf(sql, where, "limit "+utils.IntToStr((utils.StrToInt(args["p"])-1)*10)+",10")
nativeString, _ := db.QueryNativeString(svc.MasterDb(c), sql)
list := make([]map[string]interface{}, 0)
for _, v := range nativeString {
var task models.CampTaskList
svc.MasterDb(c).Where("id=?", v["task_id"]).Get(&task)
dataList := []map[string]string{
{"name": "提交时间:" + v["create_time"]},
{"name": "姓名:" + v["name"]},
{"name": "手机号:" + v["phone"]},
{"name": "作业地区:" + v["province"] + v["city"]},
}
if v["state"] == "2" {
dataList = append(dataList, map[string]string{"name": "驳回原因:" + v["store_reason"]})
}
img := strings.Split(v["img"], ",")
tmp := map[string]interface{}{
"task_name": task.Name,
"data_list": dataList,
"img": img,
"state": v["state"],
"oid": v["oid"],
"id": v["id"],
}
list = append(list, tmp)
}
res := map[string]interface{}{
"list": list,
}
e.OutSuc(c, res, nil)
return
}
func TaskQrcodeSubmit(c *gin.Context) {
var args map[string]string
if err := c.ShouldBindJSON(&args); err != nil {
e.OutErr(c, e.ERR_INVALID_ARGS)
return
}
var data models.CampTaskUserPromotionQrcode
svc.MasterDb(c).Where("id=?", args["id"]).Get(&data)
if data.Id == 0 {
e.OutErr(c, 400, e.NewErr(400, "二维码已失效"))
return
}
user, _ := db.UserFindByID(svc.MasterDb(c), data.Uid)
if user == nil {
e.OutErr(c, 400, e.NewErr(400, "二维码已失效"))
return
}
topUid := 0
if user != nil {
sql := `select ur.parent_uid from user_relate ur
left join user u on u.uid=ur.parent_uid
where ur.uid=%d and u.level in(2,3) order by ur.level limit 1
`
sql = fmt.Sprintf(sql, user.Uid)
nativeString, _ := db.QueryNativeString(svc.MasterDb(c), sql)
for _, v := range nativeString {
topUid = utils.StrToInt(v["parent_uid"])
}
}

if topUid != data.FormUid {
e.OutErr(c, 400, e.NewErr(400, "二维码已失效"))
return
}
cb, err := svc.HandleCampTaskLockDistributedLock(c.GetString("mid"), utils.IntToStr(data.TaskId), "camp_task")
if err != nil {
e.OutErr(c, e.ERR, e.NewErr(400000, "操作过快,请稍后再试"))
return
}
// 处理完毕释放锁
if cb != nil {
defer cb()
}
sess := svc.MasterDb(c).NewSession()
defer sess.Close()
sess.Begin()
var campTask models.CampTaskList
sess.Where("id=?", data.TaskId).Get(&campTask)
if campTask.UpDownState == 0 {
sess.Rollback()
e.OutErr(c, 400, e.NewErr(400, "任务已下架"))
return
}
if campTask.Num-1 < 0 {
sess.Rollback()
e.OutErr(c, 400, e.NewErr(400, "任务数量不足"))
return
}
campTask.Num--
update, err := sess.Where("id-?", campTask.Id).Cols("num").Update(&campTask)
if update == 0 || err != nil {
sess.Rollback()
e.OutErr(c, 400, e.NewErr(400, "任务提交失败"))
return
}
var changeLog = models.CampTaskDeductList{
TaskId: campTask.Id,
Type: 1,
Num: 1,
AfterNum: campTask.Num,
CreateTime: time.Now(),
StoreId: campTask.StoreId,
Title: "交单扣除",
OrdType: "task_success",
}
update, err = sess.Insert(&changeLog)
if update == 0 || err != nil {
sess.Rollback()
e.OutErr(c, 400, e.NewErr(400, "任务提交失败"))
return
}
var order = models.CampTaskUserPromotionOrder{
Uid: user.Uid,
TaskId: campTask.Id,
CreateTime: time.Now(),
FormUid: data.FormUid,
Name: data.Name,
Phone: data.Phone,
Province: data.Province,
City: data.City,
Code: data.Code,
Remark: data.Remark,
QrcodeId: data.Id,
Oid: utils.StrToInt64(utils.OrderUUID(user.Uid)),
Payment: campTask.Price,
StoreId: campTask.StoreId,
UserLv: user.Level,
Img: args["img"],
SettleType: campTask.SettleType,
}
update, err = sess.Insert(&order)
if update == 0 || err != nil {
sess.Rollback()
e.OutErr(c, 400, e.NewErr(400, "任务提交失败"))
return
}
sess.Commit()
ch, _ := rabbit.Cfg.Pool.GetChannel()
arg := md2.ZhiosCampOrderSettle{Id: utils.IntToStr(order.Id), Mid: c.GetString("mid")}
err = ch.PublishV2(md2.ZhiosCampTask, utils.SerializeStr(arg), md2.ZhiosCampTaskOrderCommissionRoutKey)
if err != nil {
err = ch.PublishV2(md2.ZhiosCampTask, utils.SerializeStr(arg), md2.ZhiosCampTaskOrderCommissionRoutKey)
}
e.OutSuc(c, "success", nil)
return
}
func TaskQrcodeContinueSubmit(c *gin.Context) {
var args map[string]string
if err := c.ShouldBindJSON(&args); err != nil {
e.OutErr(c, e.ERR_INVALID_ARGS)
return
}
var data models.CampTaskUserPromotionOrder
svc.MasterDb(c).Where("id=?", args["id"]).Get(&data)
if data.Id == 0 {
e.OutErr(c, 400, e.NewErr(400, "订单不存在"))
return
}
if data.State != 2 {
e.OutErr(c, 400, e.NewErr(400, "订单已审核或审核中,不可操作"))
return
}
data.Img = args["img"]
data.State = 0
svc.MasterDb(c).Where("id=?", data.Id).Cols("img,state").Update(&data)
e.OutSuc(c, "success", nil)
return
}
func TaskQrcodeDetail(c *gin.Context) {
var args map[string]string
if err := c.ShouldBindJSON(&args); err != nil {
e.OutErr(c, e.ERR_INVALID_ARGS)
return
}
var data models.CampTaskUserPromotionQrcode
svc.MasterDb(c).Where("id=?", args["id"]).Get(&data)
var task models.CampTaskList
svc.MasterDb(c).Where("id=?", data.TaskId).Get(&task)
res := map[string]string{
"name": data.Name, "task_name": task.Name,
"phone": data.Phone,
"id": utils.IntToStr(data.Id),
"address": data.Province + data.City,
}
e.OutSuc(c, res, nil)
return
}
func TaskQrcodeList(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)
var data []models.CampTaskUserPromotionQrcode
size := utils.StrToInt(args["size"])
p := utils.StrToInt(args["p"])
sess := svc.MasterDb(c).Where("uid=?", user.Info.Uid)
if args["id"] != "" {
sess.And("task_id=?", args["id"])
}
sess.Limit(size, (p-1)*size).OrderBy("id desc").Find(&data)
list := make([]map[string]string, 0)
h5Domain := svc.GetWebSiteDomainInfo(c, "wap")
for _, v := range data {
var task models.CampTaskList
svc.MasterDb(c).Where("id=?", v.TaskId).Get(&task)
//TODO 要前端的链接
QrCode := qrcode.GetPNGBase64(h5Domain + "/#/zy-landing-page/pages/push-hand-login/push-hand-login?id=" + utils.IntToStr(v.Id))
QrCode = strings.ReplaceAll(QrCode, "\u0000", "")
tmp := map[string]string{
"name": v.Name,
"create_time": v.CreateTime.Format("2006-01-02 15:04:05"),
"phone": v.Phone,
"address": v.Province + v.City,
"remark": v.Remark,
"id": utils.IntToStr(v.Id),
"qrcode": QrCode,
"code": utils.IntToStr(v.Id),
"task_name": task.Name,
}
list = append(list, tmp)
}
res := map[string]interface{}{
"list": list,
}
e.OutSuc(c, res, nil)
return
}
func TaskQrcodeApply(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)
var CampTaskOperatorTask models.CampTaskOperatorTask
svc.MasterDb(c).Where("id=?", args["id"]).Get(&CampTaskOperatorTask)
if CampTaskOperatorTask.Id == 0 {
e.OutErr(c, 400, e.NewErr(400, "任务不存在"))
return
}
count, _ := svc.MasterDb(c).Where("uid=? and task_id=? and phone=?", user.Info.Uid, CampTaskOperatorTask.TaskId, args["phone"]).Count(&models.CampTaskUserPromotionQrcode{})
if count > 0 {
e.OutErr(c, 400, e.NewErr(400, "当前号码重复,请重新输入"))
return
}
var data = models.CampTaskUserPromotionQrcode{
Uid: user.Info.Uid,
TaskId: CampTaskOperatorTask.TaskId,
FormUid: CampTaskOperatorTask.Uid,
CreateTime: time.Now(),
Name: args["name"],
Phone: args["phone"],
Province: args["province"],
City: args["city"],
Remark: args["remark"],
State: 1,
}
insert, _ := svc.MasterDb(c).Insert(&data)
if insert == 0 {
e.OutErr(c, 400, e.NewErr(400, "申请失败"))
return
}
e.OutSuc(c, "success", nil)
return
}

+ 154
- 0
app/custom/svc/svc_project.go 查看文件

@@ -0,0 +1,154 @@
package svc

import (
"applet/app/comm/e"
"applet/app/comm/svc"
"applet/app/comm/utils"
"applet/app/store/md"
"code.fnuoos.com/go_rely_warehouse/zyos_model.git/src/models"
"encoding/json"
"github.com/gin-gonic/gin"
"strings"
"time"
)

func ProjectList(c *gin.Context) {
var args md.ProjectReq
if err := c.ShouldBindJSON(&args); err != nil {
e.OutErr(c, e.ERR_INVALID_ARGS)
return
}
res := ProjectComm(c, args)
e.OutSuc(c, res, nil)
return
}
func ProjectDetail(c *gin.Context) {
var args md.ProjectReq
if err := c.ShouldBindJSON(&args); err != nil {
e.OutErr(c, e.ERR_INVALID_ARGS)
return
}
args.P = "1"
list := ProjectComm(c, args)
res := map[string]interface{}{}
if len(list) > 0 {
res = list[0]
}
e.OutSuc(c, res, nil)
return
}
func ProjectLikeList(c *gin.Context) {
var args md.ProjectReq
if err := c.ShouldBindJSON(&args); err != nil {
e.OutErr(c, e.ERR_INVALID_ARGS)
return
}
var project models.CampTaskProject
svc.MasterDb(c).Where("id=?", project.Id).Get(&project)
args.Id = ""
args.Cid = utils.IntToStr(project.Cid)
list := ProjectComm(c, args)
res := map[string]interface{}{}
if len(list) > 0 {
res = list[0]
}
e.OutSuc(c, res, nil)
return
}
func ProjectLike(c *gin.Context) {
var args md.ProjectReq
if err := c.ShouldBindJSON(&args); err != nil {
e.OutErr(c, e.ERR_INVALID_ARGS)
return
}
user := svc.GetUser(c)
count, _ := svc.MasterDb(c).Where("uid=? and project_id=?", user.Info.Uid, args.Id).Count(&models.CampTaskProjectUserLike{})
if count > 0 {
e.OutErr(c, 400, e.NewErr(400, "意向已提交,负责人将与您对接"))
return
}
var data = models.CampTaskProjectUserLike{
Uid: user.Info.Uid,
ProjectId: utils.StrToInt(args.Id),
CreateTime: time.Now(),
}
svc.MasterDb(c).Insert(&data)
e.OutSuc(c, "success", nil)
return

}
func ProjectComm(c *gin.Context, args md.ProjectReq) []map[string]interface{} {
args.Size = "10"
list := make([]map[string]interface{}, 0)
var data = make([]models.CampTaskProject, 0)
sess := svc.MasterDb(c).Where("state=?", 1)
if args.Cid != "" {
sess.And("cid=?", args.Cid)
}
if args.Id != "" {
sess.And("id=?", args.Id)
}
if args.Price != "" {
ex := strings.Split(args.Price, "_")
sess.And("money>=?", ex[0])
sess.And("money<?", ex[1])
}
sort := "id desc"
if args.Sort != "" {
sort = strings.ReplaceAll(args.Sort, "_", " ")
}
sess.Limit(utils.StrToInt(args.Size), (utils.StrToInt(args.P)-1)*utils.StrToInt(args.Size)).OrderBy(sort).Find(&data)
cate := make([]models.CampTaskProjectCate, 0)
svc.MasterDb(c).Where("1=1").Find(&cate)
user, _ := svc.GetDefaultUser(c, c.GetHeader("Authorization"))

for _, v := range data {
enterpriseInfo := make(map[string]string)
json.Unmarshal([]byte(v.EnterpriseInfo), &enterpriseInfo)
enterpriseInfo1 := map[string]string{
"name": enterpriseInfo["name"],
"user_name": enterpriseInfo["user_name"],
"address": enterpriseInfo["address"],
}
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,
"money": utils.Comm(v.Money),
"img": firstImg,
"video_info": v.VideoInfo,
"img_list": img,
"detail_info": detailInfo,
"create_time": v.CreateTime.Format("2006-01-02 15:04:05"),
"enterprise_info": enterpriseInfo1,
"cate_name": "",
"adv_word": v.AdvWord,
"label": label,
"is_like": "0",
}
if user != nil {
count, _ := svc.MasterDb(c).Where("uid=? and project_id=?", user.Info.Uid, v.Id).Count(&models.CampTaskProjectUserLike{})
if count > 0 {
tmp["is_like"] = "1"
}
}
for _, v1 := range cate {
if v1.Id == v.Cid {
tmp["cate_name"] = v1.Name
}
}
list = append(list, tmp)
}

return list
}

+ 304
- 0
app/custom/svc/svc_task_list.go 查看文件

@@ -0,0 +1,304 @@
package svc

import (
"applet/app/comm/db"
"applet/app/comm/e"
"applet/app/comm/svc"
"applet/app/comm/utils"
"applet/app/custom/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"
"fmt"
"github.com/gin-gonic/gin"
)

func TaskBase(c *gin.Context) {
taskCate := make([]map[string]string, 0)
taskCateList := make([]models.CampTaskCate, 0)
svc.MasterDb(c).Where("is_show_store=? and is_show=?", 1, 1).OrderBy("sort desc,id desc").Find(&taskCateList)
taskAllCate := make([]map[string]interface{}, 0)
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)
listTmp := make([]map[string]string, 0)
allTmp := map[string]interface{}{
"name": v.Name, "value": utils.IntToStr(v.Id), "list": listTmp,
}
taskAllCate = append(taskAllCate, allTmp)
}
for k, v := range taskAllCate {
listTmp := make([]map[string]string, 0)
for _, v1 := range taskCateList {
if v["value"] != utils.IntToStr(v1.Pid) {
continue
}
allTmp := map[string]string{
"name": v1.Name, "value": utils.IntToStr(v1.Id),
}
listTmp = append(listTmp, allTmp)
}
taskAllCate[k]["list"] = listTmp
}
res := map[string]interface{}{
"all_cate_list": taskAllCate,
}
e.OutSuc(c, res, nil)
return
}

func IndexTaskList(c *gin.Context) {
var args map[string]string
if err := c.ShouldBindJSON(&args); err != nil {
e.OutErr(c, e.ERR_INVALID_ARGS)
return
}
hotTask := make([]map[string]interface{}, 0)
args["sort"] = "camp_task_list.success_num desc,camp_task_list.id desc"
args["p"] = "1"
args["size"] = "5"
hotTaskList := CommTask(c, args)
if hotTaskList != nil {
for _, v := range *hotTaskList {
basePrice, _, secondPrice, thirdPrice, _ := CommPrice(c, v.Price)
label := make([]string, 0)
json.Unmarshal([]byte(v.Label), &label)
tmp := map[string]interface{}{
"id": utils.IntToStr(v.CampTaskOperatorTask.Id),
"name": v.Name,
"label": label,
"base_price": basePrice,
"remark": v.Remark,
"first_price": "团长佣金: ¥" + secondPrice,
"second_price": "运营商佣金: ¥" + thirdPrice,
"icon": svc.ImageFormat(c, v.Logo),
}
hotTask = append(hotTask, tmp)
}
}
res := map[string]interface{}{
"list": hotTask,
}
e.OutSuc(c, res, nil)
return
}
func SearchTaskList(c *gin.Context) {
var args map[string]string
if err := c.ShouldBindJSON(&args); err != nil {
e.OutErr(c, e.ERR_INVALID_ARGS)
return
}
hotTask := make([]map[string]interface{}, 0)
args["sort"] = "camp_task_list.success_num desc,camp_task_list.id desc"
args["size"] = "5"
hotTaskList := CommTask(c, args)
if hotTaskList != nil {
for _, v := range *hotTaskList {
basePrice, _, secondPrice, thirdPrice, _ := CommPrice(c, v.Price)
label := make([]string, 0)
json.Unmarshal([]byte(v.Label), &label)
tmp := map[string]interface{}{
"id": utils.IntToStr(v.CampTaskOperatorTask.Id),
"name": v.Name,
"label": label,
"base_price": basePrice,
"remark": v.Remark,
"first_price": "团长佣金: ¥" + secondPrice,
"second_price": "运营商佣金: ¥" + thirdPrice,
"icon": svc.ImageFormat(c, v.Logo),
}
hotTask = append(hotTask, tmp)
}
}
res := map[string]interface{}{
"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
}
var CampTaskOperatorTask models.CampTaskOperatorTask
svc.MasterDb(c).Where("id=?", args["id"]).Get(&CampTaskOperatorTask)
var hotTaskList models.CampTaskList
svc.MasterDb(c).Where("id=?", CampTaskOperatorTask.TaskId).Get(&hotTaskList)
label := make([]string, 0)
DetailInfo := make([]string, 0)
reward := make([]map[string]string, 0)
priceList := make([]map[string]string, 0)
count, _ := svc.MasterDb(c).Where("task_id=?", CampTaskOperatorTask.TaskId).Count(&models.CampTaskNotice{})
noticeNum := utils.Int64ToStr(count)
tmp := map[string]interface{}{
"id": utils.IntToStr(CampTaskOperatorTask.Id),
"name": hotTaskList.Name,
"price": hotTaskList.Price,
"num": utils.IntToStr(hotTaskList.Num),
"icon": svc.ImageFormat(c, hotTaskList.Logo),
"timer": hotTaskList.StartTime.Format("2006-01-02") + "至" + hotTaskList.EndTime.Format("2006-01-02"),
"detail_info": DetailInfo,
"label": label,
"is_can_buy": "1",
"buy_tip_str": "",
"reward_list": reward,
"price_list": priceList,
"video_course": "",
"level_name": "",
"notice": "",
"instructions": "",
"notice_num": noticeNum,
}

taskDetailDb := implement.NewCampTaskDetailDb(svc.MasterDb(c))
taskDetail, _ := taskDetailDb.GetCampTaskDetailById(utils.IntToStr(hotTaskList.Id))
if taskDetail != nil {
json.Unmarshal([]byte(taskDetail.DetailInfo), &DetailInfo)
tmp["detail_info"] = DetailInfo
tmp["detail_info"] = taskDetail.VideoCourse
tmp["notice"] = taskDetail.Notice
tmp["instructions"] = taskDetail.Instructions
}
json.Unmarshal([]byte(hotTaskList.Label), &label)
tmp["label"] = label
user, _ := svc.GetDefaultUser(c, c.GetHeader("Authorization"))
_, firstPrice, secondPrice, thirdPrice, _ := CommPrice(c, hotTaskList.Price)

settleType := []string{"T+1", "T+7", "T+30"}
priceList = []map[string]string{
{"name": "运营商价", "price": thirdPrice, "subsidy": "-", "settle": settleType[hotTaskList.SettleType] + "结算"},
{"name": "团长价", "price": secondPrice, "subsidy": "-", "settle": settleType[hotTaskList.SettleType] + "结算"},
{"name": "会员价", "price": firstPrice, "subsidy": "-", "settle": settleType[hotTaskList.SettleType] + "结算"},
}
tmp["price_list"] = priceList
extendCount := "0"
rewardValue := "0"
if user != nil {
count1, _ := svc.MasterDb(c).Where("uid=? and task_id=?", user.Info.Uid, hotTaskList.Id).Count(&models.CampTaskUserPromotionQrcode{})
extendCount = utils.Int64ToStr(count1)
sql := `select SUN(ctupor.amount) as amount
FROM camp_task_user_promotion_order_relate ctupor
LEFT JOIN camp_task_user_promotion_order ctupo on ctupo.oid=ctupor.oid
WHERE ctupor.uid=%d and ctupo.settle_state=1 `
sql = fmt.Sprintf(sql, user.Info.Uid)
nativeString, _ := db.QueryNativeString(svc.MasterDb(c), sql)
for _, v := range nativeString {
rewardValue = v["amount"]
}
var cate models.CampTaskCate
svc.MasterDb(c).Where("id=?", hotTaskList.FirstCid).Get(&cate)
level := user.Info.Level
if level == 2 || level == 3 {
level = 2
}
if cate.Id > 0 {
if cate.Lv == 2 || cate.Lv == 3 {
cate.Lv = 2
}
if level < cate.Lv {
tmp["is_can_buy"] = "0"
tmp["buy_tip_str"] = "该任务为运营商专属任务"
}
}
}
reward = []map[string]string{
{"name": "累计收入(元)", "value": rewardValue, "type": "income"},
{"name": "我的推广码(个)", "value": extendCount, "type": "qrcode"},
}
if user != nil {
lvName := []string{"会员", "团长", "运营商"}
tmp["level_name"] = lvName[user.Info.Level]
count, _ := svc.MasterDb(c).Where("uid=? and task_id=?", user.Info.Uid, hotTaskList.Id).Count(&models.CampTaskUserPromotionOrder{})
if count > 0 {
reward = append(reward, map[string]string{"name": "历史凭证(个)", "value": utils.Int64ToStr(count), "type": "history"})
}
}
tmp["reward_list"] = reward
e.OutSuc(c, tmp, nil)
return
}
func TaskDetailNotice(c *gin.Context) {
var args map[string]string
if err := c.ShouldBindJSON(&args); err != nil {
e.OutErr(c, e.ERR_INVALID_ARGS)
return
}
var CampTaskOperatorTask models.CampTaskOperatorTask
svc.MasterDb(c).Where("id=?", args["id"]).Get(&CampTaskOperatorTask)
var data = make([]models.CampTaskNotice, 0)
sess := svc.MasterDb(c).Where("1=1")
sess.And("task_id=?", CampTaskOperatorTask.TaskId)
if args["type"] != "" {
sess.And("type=?", args["type"])
}
size := utils.StrToInt(args["size"])
p := utils.StrToInt(args["p"])
sess.Limit(size, (p-1)*size).OrderBy("id desc").Find(&data)
list := make([]map[string]string, 0)
for _, v := range data {
tmp := map[string]string{
"title": v.Title,
"content": v.Content,
"create_time": v.CreateTime.Format("2006-01-02 15:04:05"),
}
list = append(list, tmp)
}
res := map[string]interface{}{
"list": list,
}
e.OutSuc(c, res, nil)
return

}
func TaskDetailNoticeCate(c *gin.Context) {
cateType := []map[string]string{
{"name": "任务公告", "value": "announcement", "is_list": "0"},
{"name": "数据与结算", "value": "data_settle", "is_list": "1"},
{"name": "变更通知", "value": "change_notice", "is_list": "1"},
}
e.OutSuc(c, cateType, nil)
return
}
func CommTask(c *gin.Context, arg map[string]string) *[]md.CampTaskListGroup {
user, _ := svc.GetDefaultUser(c, c.GetHeader("Authorization"))
topUid := 0
if user != nil {
sql := `select ur.parent_uid from user_relate ur
left join user u on u.uid=ur.parent_uid
where ur.uid=%d and u.level in(2,3) order by ur.level limit 1
`
sql = fmt.Sprintf(sql, user.Info.Uid)
nativeString, _ := db.QueryNativeString(svc.MasterDb(c), sql)
for _, v := range nativeString {
topUid = utils.StrToInt(v["parent_uid"])
}
}
var m = make([]md.CampTaskListGroup, 0)
sess := svc.MasterDb(c).Table("camp_task_operator_task").Where("camp_task_operator_task.uid=?", topUid)
sess.Join("LEFT", "camp_task_list", "camp_task_operator_task.task_id = camp_task_list.id")
sess.And("camp_task_list.up_down_state=? and camp_task_list.num>0", "1")
if arg["cid"] != "" {
sess.And("camp_task_list.first_cid=?", arg["cid"])
}
if arg["second_cid"] != "" {
sess.And("camp_task_list.second_cid=?", arg["second_cid"])
}
if arg["name"] != "" {
sess.And("camp_task_list.name like ?", "%"+arg["name"]+"%")
}
size := utils.StrToInt(arg["size"])
p := utils.StrToInt(arg["p"])
sort := arg["sort"]
err := sess.Limit(size, (p-1)*size).OrderBy(sort).Find(&m)
if err != nil {
return nil
}
return &m
}

+ 1
- 1
app/operator/svc/svc_project.go 查看文件

@@ -113,7 +113,7 @@ func ProjectList(c *gin.Context) {
"id": utils.IntToStr(v.Id),
"name": v.Name,
"cid": utils.IntToStr(v.Cid),
"money": v.Money,
"money": utils.Comm(v.Money),
"img": firstImg,
"video_info": v.VideoInfo,
"img_list": img,


+ 4
- 16
app/operator/svc/svc_task.go 查看文件

@@ -5,10 +5,8 @@ import (
"applet/app/comm/e"
"applet/app/comm/svc"
"applet/app/comm/utils"
svc3 "applet/app/custom/svc"
"applet/app/operator/md"
"code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/lib/comm_plan"
md2 "code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/md"
svc2 "code.fnuoos.com/go_rely_warehouse/zyos_go_order_relate_rule.git/svc"
"code.fnuoos.com/go_rely_warehouse/zyos_model.git/src/implement"
"code.fnuoos.com/go_rely_warehouse/zyos_model.git/src/models"
"encoding/json"
@@ -118,7 +116,7 @@ func TaskList(c *gin.Context) {
"settle_type": []map[string]string{
{"name": "T+1", "value": "0"},
{"name": "T+7", "value": "1"},
{"name": "月结", "value": "2"},
{"name": "T+30", "value": "2"},
},
"total": total, "list": hotTask,
}
@@ -154,6 +152,7 @@ func TaskDetail(c *gin.Context) {
tmp["detail_info"] = DetailInfo
}
json.Unmarshal([]byte(hotTaskList.Label), &label)
tmp["label"] = label
counts, _ := svc.MasterDb(c).Where("uid=? and task_id=?", user.Info.Uid, hotTaskList.Id).Count(&models.CampTaskOperatorTask{})
if counts > 0 {
tmp["is_check"] = "1"
@@ -184,19 +183,8 @@ LEFT JOIN camp_task_list ctl on ctot.task_id=ctl.id
WHERE ctot.uid=%d order by ctot.id desc %s`
sql = fmt.Sprintf(sql, user.Info.Uid, "limit "+utils.IntToStr((utils.StrToInt(args.P)-1)*utils.StrToInt(args.Size))+","+args.Size)
nativeString, _ := db.QueryNativeString(svc.MasterDb(c), sql)
plan, commission1, virtualCoinMoneyRate := svc2.GetAllPlan(svc.MasterDb(c), c.GetString("mid"))
rmd := &md2.CommissionParam{}
cfg, _ := svc2.GetPlanCfg(svc.MasterDb(c), "camp_task", c.GetString("mid"), plan, commission1, virtualCoinMoneyRate, rmd)
for _, v := range nativeString {
firstPrice := "0"
secondPrice := "0"
if cfg != nil {
fee, _, _, _ := svc2.CommFee(utils.StrToFloat64(v["price"]), cfg, "commission", rmd)
tmpPrice, _, _, _ := comm_plan.CalReturnAmountAndRatio(0, 0, 0, "own", fee, 0, cfg)
firstPrice = utils.Float64ToStr(tmpPrice)
tmpPrice1, _, _, _ := comm_plan.CalReturnAmountAndRatio(1, 0, 0, "own", fee, 0, cfg)
secondPrice = utils.Float64ToStr(tmpPrice1)
}
_, firstPrice, secondPrice, _, _ := svc3.CommPrice(c, v["price"])
orderCount := "0"
commission := "0"
sql1 := `select COUNT(*) as count,SUM(ctupor.amount) as amount


+ 28
- 5
app/router/router.go 查看文件

@@ -3,6 +3,7 @@ package router
import (
"applet/app/cfg"
"applet/app/comm/svc"
customHdl "applet/app/custom/hdl"
"applet/app/mw"
operatorHdl "applet/app/operator/hdl"
storeHdl "applet/app/store/hdl"
@@ -60,10 +61,8 @@ func routeStore(r *gin.RouterGroup) {
r.Any("/alipay/pay/callback", storeHdl.AlipayCallBack)
r.POST("/img/callback", storeHdl.FileImgCallback)

r.Use(mw.DB) // 以下接口需要用到数据库
r.Use(mw.Checker) // 以下接口需要检查Header: platform
r.PUT("/img/upload", storeHdl.ImgReqUpload)

r.Use(mw.DB) // 以下接口需要用到数据库
r.Use(mw.Checker) // 以下接口需要检查Header: platform
r.POST("/login", storeHdl.Login) //账号密码登陆
r.POST("/sms", storeHdl.Sms) //发验证码
r.POST("/register", storeHdl.Register) //注册
@@ -116,8 +115,32 @@ func routeStore(r *gin.RouterGroup) {
func routeCustom(r *gin.RouterGroup) {
r.Use(mw.DB) // 以下接口需要用到数据库
r.Use(mw.Checker) // 以下接口需要检查Header: platform

r.POST("indexTaskList", customHdl.IndexTaskList)
r.POST("searchTaskList", customHdl.SearchTaskList)
r.GET("taskBase", customHdl.TaskBase)
r.POST("taskDetail", customHdl.TaskDetail)
r.GET("taskDetailNoticeCate", customHdl.TaskDetailNoticeCate)
r.POST("taskDetailNotice", customHdl.TaskDetailNotice)
r.GET("projectBase", customHdl.ProjectBase)
r.POST("/projectList", customHdl.ProjectList)
r.POST("/projectDetail", customHdl.ProjectDetail)
r.POST("/projectLikeList", customHdl.ProjectLikeList)
r.GET("/city", customHdl.City)
r.POST("/taskQrcodeSubmit", customHdl.TaskQrcodeSubmit)
r.POST("/taskQrcodeContinueSubmit", customHdl.TaskQrcodeContinueSubmit)
r.POST("/taskQrcodeDetail", customHdl.TaskQrcodeDetail)
r.POST("/taskQrcodeOrder", customHdl.TaskQrcodeOrder)
r.POST("/taskQrcodeOrderCate", customHdl.TaskQrcodeOrderCate)
r.GET("/taskMyCate", customHdl.TaskMyCate)
r.Use(mw.AuthJWT) // 以下接口需要JWT验证
r.POST("/projectLike", customHdl.ProjectLike)
r.POST("/taskQrcodeApply", customHdl.TaskQrcodeApply)
r.POST("/taskQrcodeList", customHdl.TaskQrcodeList)
r.POST("/taskMyList", customHdl.TaskMyList)
r.POST("/taskMyTotal", customHdl.TaskMyTotal)
r.POST("/taskIncome", customHdl.TaskIncome)
r.POST("/taskIncomeList", customHdl.TaskIncomeList)
r.POST("/taskIncomeTaskList", customHdl.TaskIncomeTaskList)

}
func routeOperator(r *gin.RouterGroup) {


+ 7
- 3
app/store/md/md_project.go 查看文件

@@ -1,9 +1,13 @@
package md

type ProjectReq struct {
P string `json:"p"`
Size string `json:"size"`
Cid string `json:"cid"`
P string `json:"p"`
Size string `json:"size"`
Cid string `json:"cid"`
Keyword string `json:"keyword"`
Price string `json:"price"`
Sort string `json:"sort"`
Id string `json:"id"`
}
type ProjectSaveReq struct {
Id string `json:"id"`


+ 1
- 0
app/store/md/md_task.go 查看文件

@@ -27,6 +27,7 @@ type TaskDetail struct {
VideoCourse string `json:"video_course" xorm:"comment('视频教程') VARCHAR(255)"`
Instructions string `json:"instructions" xorm:"comment('特殊说明') VARCHAR(255)"`
Announcement string `json:"announcement"`
Remark string `json:"remark"`
}
type TaskAllDetail struct {
IsCheck string `json:"is_check"`


+ 2
- 1
app/store/svc/svc_project.go 查看文件

@@ -69,7 +69,7 @@ func AllProjectList(c *gin.Context) {
"id": utils.IntToStr(v.Id),
"name": v.Name,
"cid": utils.IntToStr(v.Cid),
"money": v.Money,
"money": utils.Comm(v.Money),
"img": firstImg,
"video_info": v.VideoInfo,
"img_list": img,
@@ -131,6 +131,7 @@ func ProjectList(c *gin.Context) {
"name": v.Name,
"cid": utils.IntToStr(v.Cid),
"money": v.Money,
"money_str": utils.Comm(v.Money),
"logo": v.Logo,
"video_info": v.VideoInfo,
"img": img,


+ 41
- 1
app/store/svc/svc_task.go 查看文件

@@ -68,6 +68,7 @@ func TaskList(c *gin.Context) {
tmp := map[string]string{
"id": utils.IntToStr(v.Id),
"name": v.Name,
"remark": v.Remark,
"num": utils.IntToStr(v.Num),
"success_num": utils.Int64ToStr(orderCount),
"apply_time": v.ApplyTime.Format("2006-01-02 15:04:05"),
@@ -158,7 +159,7 @@ func TaskBase(c *gin.Context) {
"settle_type": []map[string]string{
{"name": "T+1", "value": "0"},
{"name": "T+7", "value": "1"},
{"name": "月结", "value": "2"},
{"name": "T+30", "value": "2"},
},
"audit_type": []map[string]string{
{"name": "待审核", "value": "0"},
@@ -185,6 +186,7 @@ func TaskDetail(c *gin.Context) {
taskDetailDb := implement.NewCampTaskDetailDb(svc.MasterDb(c))
taskDetail, _ := taskDetailDb.GetCampTaskDetailById(args["id"])
res = md.TaskDetail{
Remark: task.Remark,
Id: utils.IntToStr(task.Id),
Name: task.Name,
Logo: svc.ImageFormat(c, task.Logo),
@@ -306,6 +308,16 @@ func TaskSave(c *gin.Context) {
return
}
}
cb, err := svc.HandleCampTaskLockDistributedLock(c.GetString("mid"), utils.IntToStr(task.Id), "camp_task")
if err != nil {
sess.Rollback()
e.OutErr(c, e.ERR, e.NewErr(400000, "操作过快,请稍后再试"))
return
}
// 处理完毕释放锁
if cb != nil {
defer cb()
}
task.State = 0
task.UpDownState = 0 //要先下架
task.AuditType = 2
@@ -318,6 +330,7 @@ func TaskSave(c *gin.Context) {

task.UpdateTime = time.Now()
task.Price = args.Price
task.Remark = args.Remark
task.Name = args.Name
task.Logo = args.Logo
task.FirstCid = utils.StrToInt(args.FirstCid)
@@ -391,6 +404,15 @@ func TaskUp(c *gin.Context) {
e.OutErr(c, e.ERR, e.NewErr(400000, "操作过快,请稍后再试"))
return
}
cb, err := svc.HandleCampTaskLockDistributedLock(c.GetString("mid"), args["id"], "camp_task")
if err != nil {
e.OutErr(c, e.ERR, e.NewErr(400000, "操作过快,请稍后再试"))
return
}
// 处理完毕释放锁
if cb != nil {
defer cb()
}
sess := svc.MasterDb(c).NewSession()
defer sess.Close()
sess.Begin()
@@ -469,6 +491,15 @@ func TaskDown(c *gin.Context) {
e.OutErr(c, e.ERR, e.NewErr(400000, "操作过快,请稍后再试"))
return
}
cb, err := svc.HandleCampTaskLockDistributedLock(c.GetString("mid"), args["id"], "camp_task")
if err != nil {
e.OutErr(c, e.ERR, e.NewErr(400000, "操作过快,请稍后再试"))
return
}
// 处理完毕释放锁
if cb != nil {
defer cb()
}
task.State = 0
task.AuditType = 1
task.ApplyTime = time.Now()
@@ -535,6 +566,15 @@ func TaskChangeNum(c *gin.Context) {
e.OutErr(c, e.ERR, e.NewErr(400000, "操作过快,请稍后再试"))
return
}
cb, err := svc.HandleCampTaskLockDistributedLock(c.GetString("mid"), args["id"], "camp_task")
if err != nil {
e.OutErr(c, e.ERR, e.NewErr(400000, "操作过快,请稍后再试"))
return
}
// 处理完毕释放锁
if cb != nil {
defer cb()
}
sess := svc.MasterDb(c).NewSession()
defer sess.Close()
sess.Begin()


+ 3
- 2
app/store/svc/svc_task_order.go 查看文件

@@ -48,7 +48,7 @@ func TaskWaitAuditOrder(c *gin.Context) {
sess.Join("LEFT", "user_level", "user_level.id = camp_task_user_promotion_order.user_lv")
count, _ := sess.Limit(utils.StrToInt(args.Size), (utils.StrToInt(args.P)-1)*utils.StrToInt(args.Size)).OrderBy("camp_task_user_promotion_order.id desc").FindAndCount(&data)
stateType := []string{"审核中", "审核通过", "审核拒绝"}
settleType := []string{"T+1", "T+7", "月结"}
settleType := []string{"T+1", "T+7", "T+30"}
settleStateType := []string{"未结算", "结算成功", "结算失败"}
for _, v := range data {
var detail = make([]string, 0)
@@ -150,7 +150,8 @@ func TaskWaitSettleOrder(c *gin.Context) {
sess.Join("LEFT", "user_level", "user_level.id = camp_task_user_promotion_order.user_lv")
count, _ := sess.Limit(utils.StrToInt(args.Size), (utils.StrToInt(args.P)-1)*utils.StrToInt(args.Size)).OrderBy("camp_task_user_promotion_order.id desc").FindAndCount(&data)
stateType := []string{"审核中", "审核通过", "审核拒绝"}
settleType := []string{"T+1", "T+7", "月结"}
settleType := []string{"T+1", "T+7", "T+30"}

settleStateType := []string{"未结算", "结算成功", "结算失败"}
for _, v := range data {
var detail = make([]string, 0)


+ 5
- 3
go.mod 查看文件

@@ -2,7 +2,7 @@ module applet

go 1.19

//replace code.fnuoos.com/go_rely_warehouse/zyos_model.git => E:/company/go_rely_warehouse/zyos_model/
replace code.fnuoos.com/go_rely_warehouse/zyos_model.git => E:/company/go_rely_warehouse/zyos_model/

require (
code.fnuoos.com/go_rely_warehouse/zyos_go_day_luck_draw.git v1.2.1
@@ -45,10 +45,12 @@ 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
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.20250912074810-4b419010bd06
)

require (
code.fnuoos.com/go_rely_warehouse/zyos_model.git v0.0.4-0.20250911040453-a1190e8eb8ed // 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


Loading…
取消
儲存