uploads.go 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770
  1. package talent_service
  2. import (
  3. "context"
  4. "github.com/gogf/gf/database/gdb"
  5. "github.com/gogf/gf/frame/g"
  6. "github.com/gogf/gf/net/ghttp"
  7. "github.com/gogf/gf/os/gtime"
  8. "youngmini_server/app/dao"
  9. "youngmini_server/app/model"
  10. "youngmini_server/app/model/talent_model"
  11. "youngmini_server/app/utils"
  12. )
  13. type orderStage int
  14. const (
  15. orderStageWaitForSelect orderStage = iota + 1
  16. orderStageSendSamples
  17. orderStageDraft
  18. orderStageArticle
  19. orderStageLinkExamine
  20. orderStageDataExamine
  21. orderStageSamplesReturn
  22. orderStageComplete
  23. )
  24. func OnGetExpressInfo(r *ghttp.Request) *TalentHttpResult {
  25. tid, err := utils.SessionTalentInfo.GetTalentIdFromSession(r)
  26. if err != nil {
  27. return &TalentHttpResult{Code: -1, Msg: "Get talent info failed"}
  28. }
  29. oid := r.GetQueryInt("order_id", 0)
  30. if oid == 0 {
  31. return &TalentHttpResult{Code: -2, Msg: "请输入订单id"}
  32. }
  33. rec, err := g.DB().Model(dao.OrderInfo.Table).Fields(dao.OrderInfo.Columns.TalentId).One(dao.OrderInfo.Columns.OrderId, oid)
  34. if err != nil || rec == nil {
  35. return &TalentHttpResult{Code: -3, Msg: "没有此订单"}
  36. }
  37. if rec[dao.OrderInfo.Columns.TalentId].Int() != tid {
  38. return &TalentHttpResult{Code: -4, Msg: "达人未接此任务"}
  39. }
  40. rec, err = g.DB().Model(dao.OrderDeliveryInfo.Table).Fields(
  41. dao.OrderDeliveryInfo.Columns.OrderAddressee, // 收货人
  42. dao.OrderDeliveryInfo.Columns.OrderPhone, // 联系电话
  43. dao.OrderDeliveryInfo.Columns.OrderAddress, // 详细地址
  44. dao.OrderDeliveryInfo.Columns.RegionCode, // 区域码
  45. dao.OrderDeliveryInfo.Columns.DeliveryTime, // 发货时间
  46. dao.OrderDeliveryInfo.Columns.LogisticsCompany, // 快递公司
  47. dao.OrderDeliveryInfo.Columns.TrackingNum, // 订单号
  48. dao.OrderDeliveryInfo.Columns.DeliveryStatus).One(dao.OrderDeliveryInfo.Columns.OrderId, oid)
  49. if err != nil {
  50. return &TalentHttpResult{Code: -5, Msg: "获取运单信息失败"}
  51. }
  52. return &TalentHttpResult{Code: 0, Msg: "success", Data: rec}
  53. }
  54. // OnConfirmReceiveExpress 达人确认收到样品
  55. func OnConfirmReceiveExpress(r *ghttp.Request) *TalentHttpResult {
  56. tid, err := utils.SessionTalentInfo.GetTalentIdFromSession(r)
  57. if err != nil {
  58. return &TalentHttpResult{Code: -1, Msg: "Get talent info failed"}
  59. }
  60. var receiveSamplesData talent_model.ConfirmReceiveSampleData
  61. if err = r.ParseForm(&receiveSamplesData); err != nil {
  62. return &TalentHttpResult{Code: -2, Msg: "upload data error"}
  63. }
  64. // 查询订单及订单的执行阶段信息
  65. var orderInfo *model.OrderInfo
  66. err = g.DB().Model(dao.OrderInfo.Table).
  67. Where("order_id = ?", receiveSamplesData.OrderId).Scan(&orderInfo)
  68. if err != nil {
  69. return &TalentHttpResult{Code: -3, Msg: "order or procedure info not found"}
  70. }
  71. // 判定达人是否拥有此订单
  72. if orderInfo.TalentId != tid {
  73. return &TalentHttpResult{Code: -4, Msg: "talent have no this order"}
  74. }
  75. // 判断订单是否已完结
  76. if orderInfo.CompleteStatus > int(utils.OrderCompleteTypeNoComp) {
  77. return &TalentHttpResult{Code: -5, Msg: "order has complete"}
  78. }
  79. // 获取达人昵称
  80. var talentNickname string
  81. rec, err := g.DB().Model(dao.TalentInfo.Table).One("id", tid)
  82. if err != nil || rec == nil {
  83. talentNickname = ""
  84. } else {
  85. talentNickname = rec[dao.TalentInfo.Columns.TalentWxNickname].String()
  86. }
  87. var procedureInfo *model.WorkflowNodeContainer
  88. err = g.DB().Model(dao.WorkflowNodeContainer.Table).
  89. Where("order_id = ? and sort_id = ?", orderInfo.OrderId, orderInfo.OrderStatus).Scan(&procedureInfo)
  90. if err != nil {
  91. return &TalentHttpResult{Code: -6, Msg: "order procedure info not found"}
  92. }
  93. // 如果订单当前执行步骤不处于等待上传初稿状态则不处理
  94. if procedureInfo.ProcedureStage != int(orderStageSendSamples) ||
  95. procedureInfo.StepInStage != 2 {
  96. return &TalentHttpResult{Code: -7, Msg: "order procedure is not wait for upload draft"}
  97. }
  98. // 记录初稿信息,并将订单执行步骤记录为初稿上传后的步骤
  99. err = g.DB().Transaction(context.TODO(), func(ctx context.Context, tx *gdb.TX) error {
  100. _, err1 := tx.Ctx(ctx).Model(dao.OrderDeliveryInfo.Table).Update(g.Map{
  101. "confirm_time": gtime.Now(),
  102. "delivery_status": 3,
  103. }, "order_id", receiveSamplesData.OrderId)
  104. if err1 != nil {
  105. return err
  106. }
  107. return utils.OrderProcedureManager.OnOperateOrder(receiveSamplesData.OrderId, true, tid, talentNickname)
  108. })
  109. if err != nil {
  110. return &TalentHttpResult{Code: -8, Msg: "update data failed"}
  111. }
  112. return &TalentHttpResult{Code: 0, Msg: "success"}
  113. }
  114. func OnGetDraftInfo(r *ghttp.Request) *TalentHttpResult {
  115. tid, err := utils.SessionTalentInfo.GetTalentIdFromSession(r)
  116. if err != nil {
  117. return &TalentHttpResult{Code: -1, Msg: "Get talent info failed"}
  118. }
  119. oid := r.GetQueryInt("order_id", 0)
  120. if oid == 0 {
  121. return &TalentHttpResult{Code: -2, Msg: "请输入订单id"}
  122. }
  123. rec, err := g.DB().Model(dao.OrderInfo.Table).Fields(dao.OrderInfo.Columns.TalentId).One(dao.OrderInfo.Columns.OrderId, oid)
  124. if err != nil || rec == nil {
  125. return &TalentHttpResult{Code: -3, Msg: "没有此订单"}
  126. }
  127. if rec[dao.OrderInfo.Columns.TalentId].Int() != tid {
  128. return &TalentHttpResult{Code: -4, Msg: "达人未接此任务"}
  129. }
  130. rec, err = g.DB().Model(dao.OrderDraftReview.Table).Fields(
  131. dao.OrderDraftReview.Columns.OnlineLink,
  132. dao.OrderDraftReview.Columns.AuditStatus,
  133. dao.OrderDraftReview.Columns.AuditOpinion,
  134. dao.OrderDraftReview.Columns.ConfirmTime).One(dao.OrderDraftReview.Columns.OrderId, oid)
  135. if err != nil {
  136. return &TalentHttpResult{Code: -2, Msg: "获取初稿信息失败"}
  137. }
  138. return &TalentHttpResult{Code: 0, Msg: "success", Data: rec}
  139. }
  140. // OnUploadDraft 上传初稿
  141. func OnUploadDraft(r *ghttp.Request) *TalentHttpResult {
  142. tid, err := utils.SessionTalentInfo.GetTalentIdFromSession(r)
  143. if err != nil {
  144. return &TalentHttpResult{Code: -1, Msg: "Get talent info failed"}
  145. }
  146. var draftData talent_model.UploadDraftData
  147. if err = r.ParseForm(&draftData); err != nil {
  148. return &TalentHttpResult{Code: -2, Msg: "upload data error"}
  149. }
  150. // 获取达人昵称
  151. var talentNickname string
  152. rec, err := g.DB().Model(dao.TalentInfo.Table).One("id", tid)
  153. if err != nil || rec == nil {
  154. talentNickname = ""
  155. } else {
  156. talentNickname = rec[dao.TalentInfo.Columns.TalentWxNickname].String()
  157. }
  158. // 查询订单及订单的执行阶段信息
  159. var orderInfo *model.OrderInfo
  160. err = g.DB().Model(dao.OrderInfo.Table).
  161. Where("order_id = ?", draftData.OrderId).Scan(&orderInfo)
  162. if err != nil {
  163. return &TalentHttpResult{Code: -3, Msg: "order or procedure info not found"}
  164. }
  165. // 判定达人是否拥有此订单
  166. if orderInfo.TalentId != tid {
  167. return &TalentHttpResult{Code: -4, Msg: "talent have no this order"}
  168. }
  169. // 判断订单是否已完结
  170. if orderInfo.CompleteStatus > int(utils.OrderCompleteTypeNoComp) {
  171. return &TalentHttpResult{Code: -5, Msg: "order has complete"}
  172. }
  173. var procedureInfo *model.WorkflowNodeContainer
  174. err = g.DB().Model(dao.WorkflowNodeContainer.Table).
  175. Where("order_id = ? and sort_id = ?", orderInfo.OrderId, orderInfo.OrderStatus).Scan(&procedureInfo)
  176. if err != nil {
  177. return &TalentHttpResult{Code: -6, Msg: "order procedure info not found"}
  178. }
  179. // 如果订单当前执行步骤不处于等待上传初稿状态则不处理
  180. if procedureInfo.ProcedureStage != int(orderStageDraft) ||
  181. procedureInfo.StepInStage != 1 {
  182. return &TalentHttpResult{Code: -7, Msg: "order procedure is not wait for upload draft"}
  183. }
  184. // 记录初稿信息,并将订单执行步骤记录为初稿上传后的步骤
  185. err = g.DB().Transaction(context.TODO(), func(ctx context.Context, tx *gdb.TX) error {
  186. _, err1 := tx.Ctx(ctx).Model(dao.OrderDraftReview.Table).Save(model.OrderDraftReview{
  187. OrderId: draftData.OrderId,
  188. OnlineLink: draftData.OnlineLink,
  189. AuditStatus: 1,
  190. AuditOpinion: "",
  191. CreatedAt: gtime.Now(),
  192. ConfirmTime: nil,
  193. })
  194. if err1 != nil {
  195. return err
  196. }
  197. return utils.OrderProcedureManager.OnOperateOrder(draftData.OrderId, true, tid, talentNickname)
  198. })
  199. if err != nil {
  200. return &TalentHttpResult{Code: -8, Msg: "update data failed"}
  201. }
  202. return &TalentHttpResult{Code: 0, Msg: "success"}
  203. }
  204. func OnGetArticleInfo(r *ghttp.Request) *TalentHttpResult {
  205. tid, err := utils.SessionTalentInfo.GetTalentIdFromSession(r)
  206. if err != nil {
  207. return &TalentHttpResult{Code: -1, Msg: "Get talent info failed"}
  208. }
  209. oid := r.GetQueryInt("order_id", 0)
  210. if oid == 0 {
  211. return &TalentHttpResult{Code: -2, Msg: "请输入订单id"}
  212. }
  213. rec, err := g.DB().Model(dao.OrderInfo.Table).Fields(dao.OrderInfo.Columns.TalentId).One(dao.OrderInfo.Columns.OrderId, oid)
  214. if err != nil || rec == nil {
  215. return &TalentHttpResult{Code: -3, Msg: "没有此订单"}
  216. }
  217. if rec[dao.OrderInfo.Columns.TalentId].Int() != tid {
  218. return &TalentHttpResult{Code: -4, Msg: "达人未接此任务"}
  219. }
  220. rec, err = g.DB().Model(dao.OrderArticleReview.Table).Fields(
  221. dao.OrderArticleReview.Columns.ArticleLink,
  222. dao.OrderArticleReview.Columns.AuditStatus,
  223. dao.OrderArticleReview.Columns.AuditOpinion,
  224. dao.OrderArticleReview.Columns.ConfirmTime).One(dao.OrderArticleReview.Columns.OrderId, oid)
  225. if err != nil {
  226. return &TalentHttpResult{Code: -2, Msg: "获取作品信息失败"}
  227. }
  228. return &TalentHttpResult{Code: 0, Msg: "success", Data: rec}
  229. }
  230. // OnUploadArticle 上传作品
  231. func OnUploadArticle(r *ghttp.Request) *TalentHttpResult {
  232. tid, err := utils.SessionTalentInfo.GetTalentIdFromSession(r)
  233. if err != nil {
  234. return &TalentHttpResult{Code: -1, Msg: "Get talent info failed"}
  235. }
  236. var articleData talent_model.UploadArticleData
  237. if err = r.ParseForm(&articleData); err != nil {
  238. return &TalentHttpResult{Code: -2, Msg: "upload data error"}
  239. }
  240. // 查询订单及订单的执行阶段信息
  241. var orderInfo *model.OrderInfo
  242. err = g.DB().Model(dao.OrderInfo.Table).
  243. Where("order_id = ?", articleData.OrderId).Scan(&orderInfo)
  244. if err != nil {
  245. return &TalentHttpResult{Code: -3, Msg: "order or procedure info not found"}
  246. }
  247. // 判定达人是否拥有此订单
  248. if orderInfo.TalentId != tid {
  249. return &TalentHttpResult{Code: -4, Msg: "talent have no this order"}
  250. }
  251. // 判断订单是否已完结
  252. if orderInfo.CompleteStatus > int(utils.OrderCompleteTypeNoComp) {
  253. return &TalentHttpResult{Code: -5, Msg: "order has complete"}
  254. }
  255. var procedureInfo *model.WorkflowNodeContainer
  256. err = g.DB().Model(dao.WorkflowNodeContainer.Table).
  257. Where("order_id = ? and sort_id = ?", orderInfo.OrderId, orderInfo.OrderStatus).Scan(&procedureInfo)
  258. if err != nil {
  259. return &TalentHttpResult{Code: -6, Msg: "order procedure info not found"}
  260. }
  261. // 如果订单当前执行步骤不处于等待上传作品状态则不处理
  262. if procedureInfo.ProcedureStage != int(orderStageArticle) ||
  263. procedureInfo.StepInStage != 1 {
  264. return &TalentHttpResult{Code: -7, Msg: "order procedure is not wait for upload draft"}
  265. }
  266. // 获取达人昵称
  267. var talentNickname string
  268. rec, err := g.DB().Model(dao.TalentInfo.Table).One("id", tid)
  269. if err != nil || rec == nil {
  270. talentNickname = ""
  271. } else {
  272. talentNickname = rec[dao.TalentInfo.Columns.TalentWxNickname].String()
  273. }
  274. // 记录作品信息,并将订单执行步骤记录为作品上传后的步骤
  275. err = g.DB().Transaction(context.TODO(), func(ctx context.Context, tx *gdb.TX) error {
  276. // 将作品信息记录再order_audit_review表中
  277. _, err1 := tx.Ctx(ctx).Model(dao.OrderArticleReview.Table).Save(model.OrderArticleReview{
  278. OrderId: articleData.OrderId,
  279. ArticleLink: articleData.ArticleUrls,
  280. AuditStatus: 1,
  281. AuditOpinion: "",
  282. CreatedAt: gtime.Now(),
  283. ConfirmTime: nil,
  284. })
  285. if err1 != nil {
  286. return err
  287. }
  288. return utils.OrderProcedureManager.OnOperateOrder(int(articleData.OrderId), true, tid, talentNickname)
  289. })
  290. if err != nil {
  291. return &TalentHttpResult{Code: -8, Msg: "update data failed"}
  292. }
  293. return &TalentHttpResult{Code: 0, Msg: "success"}
  294. }
  295. // OnGetPublishLinkInfo 获取发布链接信息
  296. func OnGetPublishLinkInfo(r *ghttp.Request) *TalentHttpResult {
  297. tid, err := utils.SessionTalentInfo.GetTalentIdFromSession(r)
  298. if err != nil {
  299. return &TalentHttpResult{Code: -1, Msg: "Get talent info failed"}
  300. }
  301. oid := r.GetQueryInt("order_id", 0)
  302. if oid == 0 {
  303. return &TalentHttpResult{Code: -2, Msg: "请输入订单id"}
  304. }
  305. rec, err := g.DB().Model(dao.OrderInfo.Table).Fields(dao.OrderInfo.Columns.TalentId).One(dao.OrderInfo.Columns.OrderId, oid)
  306. if err != nil || rec == nil {
  307. return &TalentHttpResult{Code: -3, Msg: "没有此订单"}
  308. }
  309. if rec[dao.OrderInfo.Columns.TalentId].Int() != tid {
  310. return &TalentHttpResult{Code: -4, Msg: "达人未接此任务"}
  311. }
  312. rec, err = g.DB().Model(dao.OrderLinkQuality.Table).Fields(
  313. dao.OrderLinkQuality.Columns.PostLink,
  314. dao.OrderLinkQuality.Columns.PhotoLink,
  315. dao.OrderLinkQuality.Columns.AuditStatus,
  316. dao.OrderLinkQuality.Columns.AuditOpinion,
  317. dao.OrderLinkQuality.Columns.ConfirmTime).One(dao.OrderLinkQuality.Columns.OrderId, oid)
  318. if err != nil {
  319. return &TalentHttpResult{Code: -2, Msg: "获取质检链接信息失败"}
  320. }
  321. return &TalentHttpResult{Code: 0, Msg: "success", Data: rec}
  322. }
  323. // OnUploadLink 上传发布链接
  324. func OnUploadLink(r *ghttp.Request) *TalentHttpResult {
  325. tid, err := utils.SessionTalentInfo.GetTalentIdFromSession(r)
  326. if err != nil {
  327. return &TalentHttpResult{Code: -1, Msg: "Get talent info failed"}
  328. }
  329. var linkData talent_model.UploadLinkData
  330. if err = r.ParseForm(&linkData); err != nil {
  331. return &TalentHttpResult{Code: -2, Msg: "upload data error"}
  332. }
  333. // 查询订单及订单的执行阶段信息
  334. var orderInfo *model.OrderInfo
  335. err = g.DB().Model(dao.OrderInfo.Table).
  336. Where("order_id = ?", linkData.OrderId).Scan(&orderInfo)
  337. if err != nil {
  338. return &TalentHttpResult{Code: -3, Msg: "order or procedure info not found"}
  339. }
  340. // 判定达人是否拥有此订单
  341. if orderInfo.TalentId != tid {
  342. return &TalentHttpResult{Code: -4, Msg: "talent have no this order"}
  343. }
  344. // 判断订单是否已完结
  345. if orderInfo.CompleteStatus > int(utils.OrderCompleteTypeNoComp) {
  346. return &TalentHttpResult{Code: -5, Msg: "order has complete"}
  347. }
  348. var procedureInfo *model.WorkflowNodeContainer
  349. err = g.DB().Model(dao.WorkflowNodeContainer.Table).
  350. Where("order_id = ? and sort_id = ?", orderInfo.OrderId, orderInfo.OrderStatus).Scan(&procedureInfo)
  351. if err != nil {
  352. return &TalentHttpResult{Code: -6, Msg: "order procedure info not found"}
  353. }
  354. // 如果订单当前执行步骤不处于等待上传发布链接状态则不处理
  355. if procedureInfo.ProcedureStage != int(orderStageLinkExamine) ||
  356. procedureInfo.StepInStage != 1 {
  357. return &TalentHttpResult{Code: -7, Msg: "order procedure is not wait for upload draft"}
  358. }
  359. // 获取达人昵称
  360. var talentNickname string
  361. rec, err := g.DB().Model(dao.TalentInfo.Table).One("id", tid)
  362. if err != nil || rec == nil {
  363. talentNickname = ""
  364. } else {
  365. talentNickname = rec[dao.TalentInfo.Columns.TalentWxNickname].String()
  366. }
  367. // 记录发布链接信息,并将订单执行步骤记录为发布链接上传后的步骤
  368. err = g.DB().Transaction(context.TODO(), func(ctx context.Context, tx *gdb.TX) error {
  369. // 将作品信息记录再order_audit_review表中
  370. _, err1 := tx.Ctx(ctx).Model(dao.OrderLinkQuality.Table).Save(model.OrderLinkQuality{
  371. PostLink: linkData.LinkUrl,
  372. PhotoLink: linkData.PhotoLink,
  373. AuditStatus: 1,
  374. AuditOpinion: "",
  375. CreatedAt: gtime.Now(),
  376. ConfirmTime: nil,
  377. OrderId: linkData.OrderId,
  378. })
  379. if err1 != nil {
  380. return err
  381. }
  382. return utils.OrderProcedureManager.OnOperateOrder(int(linkData.OrderId), true, tid, talentNickname)
  383. })
  384. if err != nil {
  385. return &TalentHttpResult{Code: -8, Msg: "update data failed"}
  386. }
  387. return &TalentHttpResult{Code: 0, Msg: "success"}
  388. }
  389. // OnGetDataLinkInfo 获取数据质检信息
  390. func OnGetDataLinkInfo(r *ghttp.Request) *TalentHttpResult {
  391. tid, err := utils.SessionTalentInfo.GetTalentIdFromSession(r)
  392. if err != nil {
  393. return &TalentHttpResult{Code: -1, Msg: "Get talent info failed"}
  394. }
  395. oid := r.GetQueryInt("order_id", 0)
  396. if oid == 0 {
  397. return &TalentHttpResult{Code: -2, Msg: "请输入订单id"}
  398. }
  399. rec, err := g.DB().Model(dao.OrderInfo.Table).Fields(dao.OrderInfo.Columns.TalentId).One(dao.OrderInfo.Columns.OrderId, oid)
  400. if err != nil || rec == nil {
  401. return &TalentHttpResult{Code: -3, Msg: "没有此订单"}
  402. }
  403. if rec[dao.OrderInfo.Columns.TalentId].Int() != tid {
  404. return &TalentHttpResult{Code: -4, Msg: "达人未接此任务"}
  405. }
  406. combineData := talent_model.OrderDataAuditCombineData{}
  407. rec, err = g.DB().Model(dao.OrderLinkQuality.Table).
  408. Fields(dao.OrderLinkQuality.Columns.PostLink, dao.OrderLinkQuality.Columns.PhotoLink).
  409. One(dao.OrderLinkQuality.Columns.OrderId, oid)
  410. if err != nil || rec == nil {
  411. return &TalentHttpResult{Code: -5, Msg: "查询发布链接信息失败"}
  412. }
  413. combineData.OrderLinkInfoData = &talent_model.OrderLinkInfoData{
  414. PostLink: rec[dao.OrderLinkQuality.Columns.PostLink].String(),
  415. PhotoLink: rec[dao.OrderLinkQuality.Columns.PhotoLink].String(),
  416. }
  417. rec, err = g.DB().Model(dao.OrderDataReview.Table).Fields(
  418. dao.OrderDataReview.Columns.AuditStatus,
  419. dao.OrderDataReview.Columns.AuditOpinion,
  420. dao.OrderDataReview.Columns.LikeNumber,
  421. dao.OrderDataReview.Columns.LittleEye,
  422. dao.OrderDataReview.Columns.CommitNum,
  423. dao.OrderDataReview.Columns.CollectNum,
  424. dao.OrderDataReview.Columns.DataLink,
  425. dao.OrderDataReview.Columns.ConfirmTime).One(dao.OrderDataReview.Columns.OrderId, oid)
  426. if err != nil {
  427. return &TalentHttpResult{Code: -2, Msg: "获取数据链接信息失败"}
  428. }
  429. if rec != nil {
  430. combineData.OrderDataAuditData = &talent_model.OrderDataAuditData{
  431. LikeNumber: rec[dao.OrderDataReview.Columns.LikeNumber].Int(),
  432. LittleEye: rec[dao.OrderDataReview.Columns.LittleEye].Int(),
  433. CommitNum: rec[dao.OrderDataReview.Columns.CommitNum].Int(),
  434. CollectNum: rec[dao.OrderDataReview.Columns.CollectNum].Int(),
  435. DataLink: rec[dao.OrderDataReview.Columns.DataLink].String(),
  436. AuditStatus: rec[dao.OrderDataReview.Columns.AuditStatus].Int(),
  437. AuditOpinion: rec[dao.OrderDataReview.Columns.AuditOpinion].String(),
  438. ConfirmTime: rec[dao.OrderDataReview.Columns.ConfirmTime].GTime(),
  439. }
  440. }
  441. return &TalentHttpResult{Code: 0, Msg: "success", Data: combineData}
  442. }
  443. // OnUploadData 上传质检数据
  444. func OnUploadData(r *ghttp.Request) *TalentHttpResult {
  445. tid, err := utils.SessionTalentInfo.GetTalentIdFromSession(r)
  446. if err != nil {
  447. return &TalentHttpResult{Code: -1, Msg: "Get talent info failed"}
  448. }
  449. var dataData talent_model.UploadDataData
  450. if err = r.ParseForm(&dataData); err != nil {
  451. return &TalentHttpResult{Code: -2, Msg: "upload data error"}
  452. }
  453. // 查询订单及订单的执行阶段信息
  454. var orderInfo *model.OrderInfo
  455. err = g.DB().Model(dao.OrderInfo.Table).
  456. Where("order_id = ?", dataData.OrderId).Scan(&orderInfo)
  457. if err != nil {
  458. return &TalentHttpResult{Code: -3, Msg: "order or procedure info not found"}
  459. }
  460. // 判定达人是否拥有此订单
  461. if orderInfo.TalentId != tid {
  462. return &TalentHttpResult{Code: -4, Msg: "talent have no this order"}
  463. }
  464. // 判断订单是否已完结
  465. if orderInfo.CompleteStatus > int(utils.OrderCompleteTypeNoComp) {
  466. return &TalentHttpResult{Code: -5, Msg: "order has complete"}
  467. }
  468. var procedureInfo *model.WorkflowNodeContainer
  469. err = g.DB().Model(dao.WorkflowNodeContainer.Table).
  470. Where("order_id = ? and sort_id = ?", orderInfo.OrderId, orderInfo.OrderStatus).Scan(&procedureInfo)
  471. if err != nil {
  472. return &TalentHttpResult{Code: -6, Msg: "order procedure info not found"}
  473. }
  474. // 如果订单当前执行步骤不处于等待上传数据状态则不处理
  475. if procedureInfo.ProcedureStage != int(orderStageDataExamine) ||
  476. procedureInfo.StepInStage != 1 {
  477. return &TalentHttpResult{Code: -7, Msg: "order procedure is not wait for upload draft"}
  478. }
  479. // 获取达人昵称
  480. var talentNickname string
  481. rec, err := g.DB().Model(dao.TalentInfo.Table).One("id", tid)
  482. if err != nil || rec == nil {
  483. talentNickname = ""
  484. } else {
  485. talentNickname = rec[dao.TalentInfo.Columns.TalentWxNickname].String()
  486. }
  487. // 记录数据信息,并将订单执行步骤记录为数据上传后的步骤
  488. err = g.DB().Transaction(context.TODO(), func(ctx context.Context, tx *gdb.TX) error {
  489. // 将作品信息记录再order_audit_review表中
  490. _, err1 := tx.Ctx(ctx).Model(dao.OrderDataReview.Table).Save(model.OrderDataReview{
  491. OrderId: dataData.OrderId,
  492. LikeNumber: dataData.LikeNumber,
  493. LittleEye: dataData.LittleEye,
  494. CommitNum: dataData.CommitNum,
  495. CollectNum: dataData.CollectNum,
  496. DataLink: dataData.DataLink,
  497. AuditStatus: 1,
  498. AuditOpinion: "",
  499. CreatedAt: gtime.Now(),
  500. ConfirmTime: nil,
  501. })
  502. if err1 != nil {
  503. return err
  504. }
  505. return utils.OrderProcedureManager.OnOperateOrder(int(dataData.OrderId), true, tid, talentNickname)
  506. })
  507. if err != nil {
  508. return &TalentHttpResult{Code: -8, Msg: "update data failed"}
  509. }
  510. return &TalentHttpResult{Code: 0, Msg: "success"}
  511. }
  512. // OnPostSampleReturnPostInfo 上传返还样品快递信息
  513. func OnPostSampleReturnPostInfo(r *ghttp.Request) *TalentHttpResult {
  514. tid, err := utils.SessionTalentInfo.GetTalentIdFromSession(r)
  515. if err != nil {
  516. return &TalentHttpResult{Code: -1, Msg: "Get talent info failed"}
  517. }
  518. var expressInfo *talent_model.SamplesReturnPostInfo
  519. err = r.ParseForm(&expressInfo)
  520. if err != nil {
  521. return &TalentHttpResult{Code: -2, Msg: "请正确填写快递信息"}
  522. }
  523. // 查询订单及订单的执行阶段信息
  524. var orderInfo *model.OrderInfo
  525. err = g.DB().Model(dao.OrderInfo.Table).
  526. Where("order_id = ?", expressInfo.OrderId).Scan(&orderInfo)
  527. if err != nil {
  528. return &TalentHttpResult{Code: -3, Msg: "order or procedure info not found"}
  529. }
  530. // 判定达人是否拥有此订单
  531. if orderInfo.TalentId != tid {
  532. return &TalentHttpResult{Code: -4, Msg: "talent have no this order"}
  533. }
  534. // 判断订单是否已完结
  535. if orderInfo.CompleteStatus > int(utils.OrderCompleteTypeNoComp) {
  536. return &TalentHttpResult{Code: -5, Msg: "order has complete"}
  537. }
  538. var procedureInfo *model.WorkflowNodeContainer
  539. err = g.DB().Model(dao.WorkflowNodeContainer.Table).
  540. Where("order_id = ? and sort_id = ?", orderInfo.OrderId, orderInfo.OrderStatus).Scan(&procedureInfo)
  541. if err != nil {
  542. return &TalentHttpResult{Code: -5, Msg: "order procedure info not found"}
  543. }
  544. // 如果订单当前执行步骤不处于拍单寄回状态则不处理
  545. if procedureInfo.ProcedureStage != int(orderStageSamplesReturn) ||
  546. procedureInfo.StepInStage != 1 {
  547. return &TalentHttpResult{Code: -6, Msg: "order procedure is not wait for upload draft"}
  548. }
  549. //// 记录作品信息,并将订单执行步骤记录为初稿上传后的步骤
  550. //err = g.DB().Transaction(context.TODO(), func(ctx context.Context, tx *gdb.TX) error {
  551. // // 将作品信息记录再order_audit_review表中
  552. // _, err1 := tx.Ctx(ctx).Model(dao.OrderAuditReview.Table).Insert(model.OrderDataReview{
  553. // OrderId: dataData.OrderId,
  554. // PostLink: dataData.PostLink,
  555. // PhotoLink: dataData.PhotoLink,
  556. // LikeNumber: dataData.LikeNumber,
  557. // LittleEye: dataData.LittleEye,
  558. // CommitNum: dataData.CommitNum,
  559. // CollectNum: dataData.CollectNum,
  560. // DataLink: dataData.DataLink,
  561. // AuditStatus: 1,
  562. // AuditOpinion: "",
  563. // CreatedAt: gtime.Now(),
  564. // ConfirmTime: nil,
  565. // })
  566. // if err1 != nil {
  567. // return err
  568. // }
  569. //
  570. // return utils.OrderProcedureManager.OnOperateOrder(int(dataData.OrderId), true, tid, talentNickname, ctx, tx)
  571. //})
  572. return &TalentHttpResult{Code: 0, Msg: "success"}
  573. }
  574. // OnGetOrderCompleteData 获取任务完成数据
  575. func OnGetOrderCompleteData(r *ghttp.Request) *TalentHttpResult {
  576. tid, err := utils.SessionTalentInfo.GetTalentIdFromSession(r)
  577. if err != nil {
  578. return &TalentHttpResult{Code: -1, Msg: "Get talent info failed"}
  579. }
  580. oid := r.GetQueryInt("order_id", 0)
  581. if oid == 0 {
  582. return &TalentHttpResult{Code: -2, Msg: "请输入订单id"}
  583. }
  584. rec, err := g.DB().Model(dao.OrderInfo.Table).Fields(dao.OrderInfo.Columns.TalentId).One(dao.OrderInfo.Columns.OrderId, oid)
  585. if err != nil || rec == nil {
  586. return &TalentHttpResult{Code: -3, Msg: "没有此订单"}
  587. }
  588. if rec[dao.OrderInfo.Columns.TalentId].Int() != tid {
  589. return &TalentHttpResult{Code: -4, Msg: "达人未接此任务"}
  590. }
  591. incomeRec, err := g.DB().Model(dao.BobocoinIncomeRecord.Table).One(dao.BobocoinIncomeRecord.Columns.OrderId, oid)
  592. if err != nil || incomeRec == nil {
  593. return &TalentHttpResult{Code: -5, Msg: "query income value failed"}
  594. }
  595. deductRecs, err := g.DB().Model(dao.BobocoinDeductRecord.Table).All(dao.BobocoinDeductRecord.Columns.OrderId, oid)
  596. if err != nil {
  597. return &TalentHttpResult{Code: -6, Msg: "query deduct records failed"}
  598. }
  599. incomeValue := incomeRec[dao.BobocoinIncomeRecord.Columns.BobocoinValue].Int()
  600. var deductValue int
  601. if deductRecs != nil {
  602. for _, v := range deductRecs {
  603. deductValue += v[dao.BobocoinDeductRecord.Columns.BobocoinValue].Int()
  604. }
  605. }
  606. incomeDetail := talent_model.OrderIncomeDetailInfo{
  607. OrderIncome: incomeValue,
  608. DeductList: deductRecs,
  609. RealIncome: incomeValue - deductValue,
  610. OrderCompleteDate: incomeRec[dao.BobocoinIncomeRecord.Columns.CompleteDate].GTime(),
  611. }
  612. return &TalentHttpResult{Code: 0, Msg: "success", Data: incomeDetail}
  613. }
  614. // CancelOrder 达人取消订单
  615. func CancelOrder(r *ghttp.Request) *TalentHttpResult {
  616. tid, err := utils.SessionTalentInfo.GetTalentIdFromSession(r)
  617. if err != nil {
  618. return &TalentHttpResult{Code: -1, Msg: "Get talent info failed"}
  619. }
  620. oid := r.GetRequestInt("order_id", 0)
  621. if oid == 0 {
  622. return &TalentHttpResult{Code: -2, Msg: "请输入订单id"}
  623. }
  624. var orderInfo *model.OrderInfo
  625. err = g.DB().Model(dao.OrderInfo.Table).Where(dao.OrderInfo.Columns.OrderId, oid).Scan(&orderInfo)
  626. if err != nil {
  627. return &TalentHttpResult{Code: -3, Msg: "没有此订单"}
  628. }
  629. if orderInfo.TalentId != tid {
  630. return &TalentHttpResult{Code: -4, Msg: "达人未接此任务"}
  631. }
  632. // 判断订单是否已完结
  633. if orderInfo.CompleteStatus > int(utils.OrderCompleteTypeNoComp) {
  634. return &TalentHttpResult{Code: -5, Msg: "order has complete"}
  635. }
  636. _, err = g.DB().Model(dao.OrderInfo.Table).Update(g.Map{
  637. dao.OrderInfo.Columns.CompleteStatus: utils.OrderCompleteTypeCancel,
  638. dao.OrderInfo.Columns.CompleteDate: gtime.Now(),
  639. }, dao.OrderInfo.Columns.OrderId, oid)
  640. if err != nil {
  641. return &TalentHttpResult{Code: -5, Msg: "cancel order failed"}
  642. }
  643. return &TalentHttpResult{Code: 0, Msg: "success"}
  644. }