劲创营---任务项目
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

364 regels
10 KiB

  1. package svc
  2. import (
  3. "applet/app/comm/db"
  4. "applet/app/comm/e"
  5. md2 "applet/app/comm/md"
  6. "applet/app/comm/svc"
  7. "applet/app/comm/utils"
  8. "applet/app/comm/utils/qrcode"
  9. "code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git/rabbit"
  10. "code.fnuoos.com/go_rely_warehouse/zyos_model.git/src/models"
  11. "fmt"
  12. "github.com/gin-gonic/gin"
  13. "strings"
  14. "time"
  15. )
  16. func TaskQrcodeOrderCate(c *gin.Context) {
  17. var args map[string]string
  18. if err := c.ShouldBindJSON(&args); err != nil {
  19. e.OutErr(c, e.ERR_INVALID_ARGS)
  20. return
  21. }
  22. user, _ := svc.GetDefaultUser(c, c.GetHeader("Authorization"))
  23. uid := 0
  24. if args["qrcode_id"] != "" {
  25. var data models.CampTaskUserPromotionQrcode
  26. svc.MasterDb(c).Where("id=?", args["id"]).Get(&data)
  27. uid = data.Uid
  28. } else if user != nil {
  29. uid = user.Info.Uid
  30. }
  31. where := "uid=" + utils.IntToStr(uid)
  32. if args["qrcode_id"] != "" {
  33. where += " and qrcode_id=" + args["qrcode_id"]
  34. }
  35. if args["task_id"] != "" {
  36. where += " and task_id=" + args["task_id"]
  37. }
  38. sql := `select count(*) as count,state,task_id from camp_task_user_promotion_order where %s group by state`
  39. sql = fmt.Sprintf(sql, where)
  40. nativeString, _ := db.QueryNativeString(svc.MasterDb(c), sql)
  41. list := []map[string]string{
  42. {"name": "审核中", "value": "0"},
  43. {"name": "审核通过", "value": "1"},
  44. {"name": "审核驳回", "value": "2"},
  45. }
  46. id := "0"
  47. for k, v := range list {
  48. for _, v1 := range nativeString {
  49. id = v1["task_id"]
  50. if v["value"] == v1["state"] {
  51. list[k]["name"] += "(" + v1["count"] + ")"
  52. }
  53. }
  54. }
  55. var task models.CampTaskList
  56. svc.MasterDb(c).Where("id=?", id).Get(&task)
  57. re := map[string]interface{}{
  58. "list": list,
  59. "task_name": task.Name,
  60. }
  61. e.OutSuc(c, re, nil)
  62. return
  63. }
  64. func TaskQrcodeOrder(c *gin.Context) {
  65. var args map[string]string
  66. if err := c.ShouldBindJSON(&args); err != nil {
  67. e.OutErr(c, e.ERR_INVALID_ARGS)
  68. return
  69. }
  70. user, _ := svc.GetDefaultUser(c, c.GetHeader("Authorization"))
  71. uid := 0
  72. if args["qrcode_id"] != "" {
  73. var data models.CampTaskUserPromotionQrcode
  74. svc.MasterDb(c).Where("id=?", args["qrcode_id"]).Get(&data)
  75. args["task_id"] = utils.IntToStr(data.TaskId)
  76. uid = data.Uid
  77. } else if user != nil {
  78. uid = user.Info.Uid
  79. }
  80. where := "uid=" + utils.IntToStr(uid)
  81. if args["qrcode_id"] != "" {
  82. where += " and qrcode_id=" + args["qrcode_id"]
  83. }
  84. if args["task_id"] != "" {
  85. where += " and task_id=" + args["task_id"]
  86. }
  87. if args["state"] != "" {
  88. where += " and state=" + args["state"]
  89. }
  90. sql := `select * from camp_task_user_promotion_order where %s order by id desc %s`
  91. sql = fmt.Sprintf(sql, where, "limit "+utils.IntToStr((utils.StrToInt(args["p"])-1)*10)+",10")
  92. nativeString, _ := db.QueryNativeString(svc.MasterDb(c), sql)
  93. list := make([]map[string]interface{}, 0)
  94. for _, v := range nativeString {
  95. var task models.CampTaskList
  96. svc.MasterDb(c).Where("id=?", v["task_id"]).Get(&task)
  97. dataList := []map[string]string{
  98. {"name": "提交时间:" + v["create_time"]},
  99. {"name": "姓名:" + v["name"]},
  100. {"name": "手机号:" + v["phone"]},
  101. {"name": "作业地区:" + v["province"] + v["city"]},
  102. }
  103. if v["state"] == "2" {
  104. dataList = append(dataList, map[string]string{"name": "驳回原因:" + v["store_reason"]})
  105. }
  106. img := strings.Split(v["img"], ",")
  107. tmp := map[string]interface{}{
  108. "task_name": task.Name,
  109. "data_list": dataList,
  110. "img": img,
  111. "state": v["state"],
  112. "oid": v["oid"],
  113. "qr_id": v["qrcode_id"],
  114. "id": v["id"],
  115. }
  116. list = append(list, tmp)
  117. }
  118. res := map[string]interface{}{
  119. "list": list,
  120. }
  121. e.OutSuc(c, res, nil)
  122. return
  123. }
  124. func TaskQrcodeSubmit(c *gin.Context) {
  125. var args map[string]string
  126. if err := c.ShouldBindJSON(&args); err != nil {
  127. e.OutErr(c, e.ERR_INVALID_ARGS)
  128. return
  129. }
  130. var data models.CampTaskUserPromotionQrcode
  131. svc.MasterDb(c).Where("id=?", args["id"]).Get(&data)
  132. if data.Id == 0 {
  133. e.OutErr(c, 400, e.NewErr(400, "二维码已失效"))
  134. return
  135. }
  136. user, _ := db.UserFindByID(svc.MasterDb(c), data.Uid)
  137. if user == nil {
  138. e.OutErr(c, 400, e.NewErr(400, "二维码已失效"))
  139. return
  140. }
  141. topUid := TopUidBySubmit(c, data.Uid)
  142. if topUid != data.FormUid {
  143. e.OutErr(c, 400, e.NewErr(400, "二维码已失效"))
  144. return
  145. }
  146. cb, err := svc.HandleCampTaskLockDistributedLock(c.GetString("mid"), utils.IntToStr(data.TaskId), "camp_task")
  147. if err != nil {
  148. e.OutErr(c, e.ERR, e.NewErr(400000, "操作过快,请稍后再试"))
  149. return
  150. }
  151. // 处理完毕释放锁
  152. if cb != nil {
  153. defer cb()
  154. }
  155. sess := svc.MasterDb(c).NewSession()
  156. defer sess.Close()
  157. sess.Begin()
  158. var campTask models.CampTaskList
  159. sess.Where("id=?", data.TaskId).Get(&campTask)
  160. if campTask.UpDownState == 0 {
  161. sess.Rollback()
  162. e.OutErr(c, 400, e.NewErr(400, "任务已下架"))
  163. return
  164. }
  165. if campTask.Num-1 < 0 {
  166. sess.Rollback()
  167. e.OutErr(c, 400, e.NewErr(400, "任务数量不足"))
  168. return
  169. }
  170. campTask.Num--
  171. campTask.SuccessNum++
  172. update, err := sess.Where("id=?", campTask.Id).Cols("num,success_num").Update(&campTask)
  173. if update == 0 || err != nil {
  174. sess.Rollback()
  175. e.OutErr(c, 400, e.NewErr(400, "任务提交失败"))
  176. return
  177. }
  178. var changeLog = models.CampTaskDeductList{
  179. TaskId: campTask.Id,
  180. Type: 1,
  181. Num: 1,
  182. AfterNum: campTask.Num,
  183. CreateTime: time.Now(),
  184. StoreId: campTask.StoreId,
  185. Title: "交单扣除",
  186. OrdType: "task_success",
  187. }
  188. update, err = sess.Insert(&changeLog)
  189. if update == 0 || err != nil {
  190. sess.Rollback()
  191. e.OutErr(c, 400, e.NewErr(400, "任务提交失败"))
  192. return
  193. }
  194. var order = models.CampTaskUserPromotionOrder{
  195. Uid: user.Uid,
  196. TaskId: campTask.Id,
  197. CreateTime: time.Now(),
  198. FormUid: data.FormUid,
  199. Name: data.Name,
  200. Phone: data.Phone,
  201. Province: data.Province,
  202. City: data.City,
  203. Code: data.Code,
  204. Remark: data.Remark,
  205. QrcodeId: data.Id,
  206. Oid: utils.StrToInt64(utils.OrderUUID(user.Uid)),
  207. Payment: campTask.Price,
  208. StoreId: campTask.StoreId,
  209. UserLv: user.Level,
  210. Img: args["img"],
  211. SettleType: campTask.SettleType,
  212. }
  213. update, err = sess.Insert(&order)
  214. if update == 0 || err != nil {
  215. sess.Rollback()
  216. e.OutErr(c, 400, e.NewErr(400, "任务提交失败"))
  217. return
  218. }
  219. sess.Commit()
  220. ch, _ := rabbit.Cfg.Pool.GetChannel()
  221. arg := md2.ZhiosCampOrderSettle{Id: utils.IntToStr(order.Id), Mid: c.GetString("mid")}
  222. err = ch.PublishV2(md2.ZhiosCampTask, utils.SerializeStr(arg), md2.ZhiosCampTaskOrderCommissionRoutKey)
  223. if err != nil {
  224. err = ch.PublishV2(md2.ZhiosCampTask, utils.SerializeStr(arg), md2.ZhiosCampTaskOrderCommissionRoutKey)
  225. }
  226. e.OutSuc(c, "success", nil)
  227. return
  228. }
  229. func TaskQrcodeContinueSubmit(c *gin.Context) {
  230. var args map[string]string
  231. if err := c.ShouldBindJSON(&args); err != nil {
  232. e.OutErr(c, e.ERR_INVALID_ARGS)
  233. return
  234. }
  235. var data models.CampTaskUserPromotionOrder
  236. svc.MasterDb(c).Where("id=?", args["id"]).Get(&data)
  237. if data.Id == 0 {
  238. e.OutErr(c, 400, e.NewErr(400, "订单不存在"))
  239. return
  240. }
  241. if data.State != 2 {
  242. e.OutErr(c, 400, e.NewErr(400, "订单已审核或审核中,不可操作"))
  243. return
  244. }
  245. data.Img = args["img"]
  246. data.State = 0
  247. svc.MasterDb(c).Where("id=?", data.Id).Cols("img,state").Update(&data)
  248. e.OutSuc(c, "success", nil)
  249. return
  250. }
  251. func TaskQrcodeDetail(c *gin.Context) {
  252. var args map[string]string
  253. if err := c.ShouldBindJSON(&args); err != nil {
  254. e.OutErr(c, e.ERR_INVALID_ARGS)
  255. return
  256. }
  257. var data models.CampTaskUserPromotionQrcode
  258. svc.MasterDb(c).Where("id=?", args["id"]).Get(&data)
  259. var task models.CampTaskList
  260. svc.MasterDb(c).Where("id=?", data.TaskId).Get(&task)
  261. res := map[string]string{
  262. "name": data.Name, "task_name": task.Name,
  263. "phone": data.Phone,
  264. "id": utils.IntToStr(data.Id),
  265. "address": data.Province + data.City,
  266. }
  267. e.OutSuc(c, res, nil)
  268. return
  269. }
  270. func TaskQrcodeList(c *gin.Context) {
  271. var args map[string]string
  272. if err := c.ShouldBindJSON(&args); err != nil {
  273. e.OutErr(c, e.ERR_INVALID_ARGS)
  274. return
  275. }
  276. user := svc.GetUser(c)
  277. var data []models.CampTaskUserPromotionQrcode
  278. size := 10
  279. p := utils.StrToInt(args["p"])
  280. sess := svc.MasterDb(c).Where("uid=?", user.Info.Uid)
  281. if args["task_id"] != "" {
  282. sess.And("task_id=?", args["task_id"])
  283. }
  284. sess.Limit(size, (p-1)*size).OrderBy("id desc").Find(&data)
  285. list := make([]map[string]string, 0)
  286. h5Domain := svc.GetWebSiteDomainInfo(c, "wap")
  287. for _, v := range data {
  288. var task models.CampTaskList
  289. svc.MasterDb(c).Where("id=?", v.TaskId).Get(&task)
  290. QrCode := qrcode.GetPNGBase64(h5Domain + "/#/zy-base-widget-sub/pages/jcy-task-page/task-upload-page?qr_id=" + utils.IntToStr(v.Id))
  291. QrCode = strings.ReplaceAll(QrCode, "\u0000", "")
  292. tmp := map[string]string{
  293. "name": v.Name,
  294. "create_time": v.CreateTime.Format("2006-01-02 15:04:05"),
  295. "phone": v.Phone,
  296. "address": v.Province + v.City,
  297. "remark": v.Remark,
  298. "id": utils.IntToStr(v.Id),
  299. "qrcode": QrCode,
  300. "code": utils.IntToStr(v.Id),
  301. "task_name": task.Name,
  302. }
  303. list = append(list, tmp)
  304. }
  305. res := map[string]interface{}{
  306. "list": list,
  307. }
  308. e.OutSuc(c, res, nil)
  309. return
  310. }
  311. func TaskQrcodeApply(c *gin.Context) {
  312. var args map[string]string
  313. if err := c.ShouldBindJSON(&args); err != nil {
  314. e.OutErr(c, e.ERR_INVALID_ARGS)
  315. return
  316. }
  317. user := svc.GetUser(c)
  318. var CampTaskOperatorTask models.CampTaskOperatorTask
  319. svc.MasterDb(c).Where("id=?", args["id"]).Get(&CampTaskOperatorTask)
  320. if CampTaskOperatorTask.Id == 0 {
  321. e.OutErr(c, 400, e.NewErr(400, "任务不存在"))
  322. return
  323. }
  324. var CampTaskTask models.CampTaskList
  325. svc.MasterDb(c).Where("id=?", CampTaskOperatorTask.TaskId).Get(&CampTaskTask)
  326. if CampTaskTask.UpDownState != 1 {
  327. e.OutErr(c, 400, e.NewErr(400, "任务已下架"))
  328. return
  329. }
  330. if CampTaskTask.Num-1 < 0 {
  331. e.OutErr(c, 400, e.NewErr(400, "任务已领完"))
  332. return
  333. }
  334. CampTaskTask.ExtendNum++
  335. svc.MasterDb(c).Where("id=?", CampTaskTask.Id).Cols("extend_num").Update(&CampTaskTask)
  336. count, _ := svc.MasterDb(c).Where("uid=? and task_id=? and phone=?", user.Info.Uid, CampTaskOperatorTask.TaskId, args["phone"]).Count(&models.CampTaskUserPromotionQrcode{})
  337. if count > 0 {
  338. e.OutErr(c, 400, e.NewErr(400, "当前号码重复,请重新输入"))
  339. return
  340. }
  341. var data = models.CampTaskUserPromotionQrcode{
  342. Uid: user.Info.Uid,
  343. TaskId: CampTaskOperatorTask.TaskId,
  344. FormUid: CampTaskOperatorTask.Uid,
  345. CreateTime: time.Now(),
  346. Name: args["name"],
  347. Phone: args["phone"],
  348. Province: args["province"],
  349. City: args["city"],
  350. Remark: args["remark"],
  351. State: 1,
  352. }
  353. insert, _ := svc.MasterDb(c).Insert(&data)
  354. if insert == 0 {
  355. e.OutErr(c, 400, e.NewErr(400, "申请失败"))
  356. return
  357. }
  358. e.OutSuc(c, "success", nil)
  359. return
  360. }