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 }