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

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