劲创营---任务项目
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.

svc_order.go 11 KiB

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