@@ -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 | |||
) |
@@ -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 { | |||
@@ -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) | |||
@@ -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) | |||
} |
@@ -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) | |||
} |
@@ -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) | |||
} |
@@ -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) | |||
} |
@@ -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"` | |||
} |
@@ -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 | |||
} |
@@ -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 | |||
} |
@@ -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 | |||
} |
@@ -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 | |||
} |
@@ -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, | |||
@@ -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 | |||
@@ -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) { | |||
@@ -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"` | |||
@@ -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"` | |||
@@ -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, | |||
@@ -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() | |||
@@ -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) | |||
@@ -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 | |||