merchant.card.go 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900
  1. package shanghu
  2. import (
  3. "context"
  4. "duoduo/apis/common"
  5. "duoduo/apis/pdd"
  6. "duoduo/apis/shanghu/models"
  7. "duoduo/conf"
  8. "duoduo/models/shanghu"
  9. "duoduo/tools"
  10. "duoduo/tools/app"
  11. "encoding/base64"
  12. "encoding/json"
  13. "errors"
  14. "fmt"
  15. "github.com/gin-gonic/gin"
  16. "github.com/qiniu/go-sdk/v7/auth/qbox"
  17. "github.com/qiniu/go-sdk/v7/storage"
  18. "github.com/shopspring/decimal"
  19. "strconv"
  20. "time"
  21. )
  22. func CreateMerchantCard(c *gin.Context) {
  23. var inData models.CreateMerchantCardRequest
  24. var sqlData shanghu.MerchantCard
  25. err := c.ShouldBindJSON(&inData)
  26. if err != nil {
  27. app.Error(c, 400, err, err.Error())
  28. return
  29. }
  30. sqlData.CreatedAt = time.Now()
  31. sqlData.UpdatedAt = time.Now()
  32. jsStr, err := json.Marshal(inData.CardProjectData)
  33. if err != nil {
  34. app.Error(c, 400, err, "包含项目不能为空")
  35. return
  36. }
  37. sqlData.CardProjectData = string(jsStr)
  38. sqlData.CardPrice = inData.CardPrice
  39. sqlData.CardTotalPrice = inData.CardTotalPrice
  40. sqlData.ActivityEndTime, err = tools.TimeToInt64(inData.ActivityEndTime, "2006-01-02")
  41. if err != nil {
  42. app.Error(c, 400, err, err.Error())
  43. return
  44. }
  45. sqlData.ActivityStartTime, err = tools.TimeToInt64(inData.ActivityStartTime, "2006-01-02")
  46. if err != nil {
  47. app.Error(c, 400, err, err.Error())
  48. return
  49. }
  50. sqlData.Inventory, err = strconv.ParseInt(inData.Inventory, 10, 64)
  51. if err != nil {
  52. app.Error(c, 400, err, err.Error())
  53. return
  54. }
  55. sqlData.MerchantCardTime, err = tools.TimeToInt64(inData.MerchantCardTime, "2006-01-02")
  56. if err != nil {
  57. app.Error(c, 400, err, err.Error())
  58. return
  59. }
  60. sqlData.MerchantOpenID = inData.MerchantOpenID
  61. sqlData.Picture = inData.Picture
  62. sqlData.QuotaNum, err = strconv.ParseInt(inData.QuotaNum, 10, 64)
  63. if err != nil {
  64. app.Error(c, 400, err, err.Error())
  65. return
  66. }
  67. sqlData.RebateRate, err = strconv.ParseInt(inData.RebateRate, 10, 64)
  68. if err != nil {
  69. app.Error(c, 400, err, err.Error())
  70. return
  71. }
  72. sqlData.UseRule = inData.UseRule
  73. sqlData.MerchantCardName = inData.MerchantCardName
  74. sqlData.CancelNumber, err = strconv.Atoi(inData.CancelNumber)
  75. if err != nil {
  76. app.Error(c, 400, err, err.Error())
  77. return
  78. }
  79. sqlData.BackgroundImage = inData.BackgroundImage
  80. _, err = sqlData.Create()
  81. if err != nil {
  82. app.Error(c, 500, err, err.Error())
  83. return
  84. }
  85. app.OK(c, nil, app.Success)
  86. }
  87. func GetMerchantCard(c *gin.Context) {
  88. var inData models.GetMerchantCardRequest
  89. var outData models.GetMerchantCardReply
  90. var sqlData shanghu.MerchantCard
  91. var project []int64
  92. err := c.ShouldBindJSON(&inData)
  93. if err != nil {
  94. app.Error(c, 400, err, err.Error())
  95. return
  96. }
  97. sqlData.ID = inData.MerchantId
  98. merchantCard, err := sqlData.GetMerchantCard()
  99. if err != nil {
  100. app.Error(c, 500, err, err.Error())
  101. return
  102. }
  103. err = json.Unmarshal([]byte(merchantCard.CardProjectData), &project)
  104. if err != nil {
  105. app.Error(c, 500, err, err.Error())
  106. return
  107. }
  108. merchantCard.CardProjectData = ""
  109. for i := 0; i < len(project); i++ {
  110. var cardProject shanghu.MerchantCardProject
  111. cardProject.ID = project[i]
  112. projectInfo, err := cardProject.GetMerchantCardProject()
  113. if err != nil {
  114. app.Error(c, 500, err, err.Error())
  115. return
  116. }
  117. merchantCard.CardProjectData = merchantCard.CardProjectData + projectInfo.ProjectName + "x1 "
  118. }
  119. outData.CardProjectData = merchantCard.CardProjectData
  120. outData.MerchantCardName = merchantCard.MerchantCardName
  121. outData.MerchantCardTime = time.Unix(merchantCard.MerchantCardTime, 0).Format("2006-01-02")
  122. outData.ActivityEndTime = time.Unix(merchantCard.ActivityEndTime, 0).Format("2006-01-02")
  123. outData.ActivityStartTime = time.Unix(merchantCard.ActivityStartTime, 0).Format("2006-01-02")
  124. outData.Picture = merchantCard.Picture
  125. outData.UseRule = merchantCard.UseRule
  126. outData.QuotaNum = merchantCard.QuotaNum
  127. outData.Inventory = merchantCard.Inventory
  128. outData.RebateRate = merchantCard.RebateRate
  129. outData.CardPrice = merchantCard.CardPrice
  130. outData.X = merchantCard.X
  131. outData.Y = merchantCard.Y
  132. outData.W = merchantCard.W
  133. outData.H = merchantCard.H
  134. outData.BackgroundImage = merchantCard.BackgroundImage
  135. outData.CardTotalPrice = merchantCard.CardTotalPrice
  136. app.OK(c, outData, app.Success)
  137. }
  138. func GetMerchantCancelInfo(c *gin.Context) {
  139. var inData models.GetMerchantCancelInfoRequest
  140. var outData models.GetMerchantCardInfoReply
  141. var qrMessage models.QRData
  142. var merchantCardData shanghu.MerchantCard
  143. var clientPay shanghu.ClientPayTrans
  144. var project []int64
  145. var cancelNum shanghu.CancelLog
  146. err := c.ShouldBindJSON(&inData)
  147. if err != nil {
  148. app.Error(c, 400, err, err.Error())
  149. return
  150. }
  151. err = json.Unmarshal([]byte(inData.QRMessage), &qrMessage)
  152. if err != nil {
  153. app.Error(c, 400, err, err.Error())
  154. return
  155. }
  156. clientPay.MerchantCardID = qrMessage.MerchantId
  157. clientPay.ClientOpenID = qrMessage.ClientOpenId
  158. clientInfo, err := clientPay.GetPayTransByOpenid()
  159. if err != nil {
  160. app.Error(c, 400, err, err.Error())
  161. return
  162. }
  163. outData.PayTime = clientInfo.PayTime.Format(time.DateTime)
  164. merchantCardData.ID = qrMessage.MerchantId
  165. merchantInfo, err := merchantCardData.GetMerchantCard()
  166. if err != nil {
  167. app.Error(c, 500, err, err.Error())
  168. return
  169. }
  170. cancelNum.ClientOpenID = qrMessage.ClientOpenId
  171. cancelNum.MerchantID = qrMessage.MerchantId
  172. outData.MerchantCardName = merchantInfo.MerchantCardName
  173. outData.MerchantCardTime = tools.TimeToStr(merchantInfo.MerchantCardTime)
  174. outData.TotalCancelNumber = merchantInfo.CancelNumber
  175. outData.CancelNumber = merchantInfo.CancelNumber - cancelNum.GetNumber()
  176. err = json.Unmarshal([]byte(merchantInfo.CardProjectData), &project)
  177. if err != nil {
  178. app.Error(c, 500, err, err.Error())
  179. return
  180. }
  181. for i := 0; i < len(project); i++ {
  182. var cardProject shanghu.MerchantCardProject
  183. var cardProjectInfo models.CardProjectInfo
  184. cardProject.ID = project[i]
  185. projectInfo, err := cardProject.GetMerchantCardProject()
  186. if err != nil {
  187. app.Error(c, 500, err, err.Error())
  188. return
  189. }
  190. cardProjectInfo.ProjectUnit = projectInfo.ProjectUnit
  191. cardProjectInfo.ProjectName = projectInfo.ProjectName
  192. cardProjectInfo.ProjectUnitPrice = projectInfo.ProjectUnitPrice
  193. outData.CardProjectData = append(outData.CardProjectData, cardProjectInfo)
  194. }
  195. app.OK(c, outData, app.Success)
  196. }
  197. // 核销详情
  198. func GetChargeMerchantCancelInfo(c *gin.Context) {
  199. var inData models.GetMerchantCancelInfoRequest
  200. var outData models.GetChargeMerchantCancelInfoReply
  201. var qrMessage models.RechargeVerificationCodeReply
  202. var clientAccount shanghu.MerchantRechargeClientAccount
  203. var clientTicket shanghu.MerchantClientTicket
  204. var merchant shanghu.Merchant
  205. err := c.ShouldBindJSON(&inData)
  206. if err != nil {
  207. app.Error(c, 400, err, err.Error())
  208. return
  209. }
  210. err = json.Unmarshal([]byte(inData.QRMessage), &qrMessage)
  211. if err != nil {
  212. app.Error(c, 400, err, err.Error())
  213. return
  214. }
  215. key := tools.MD5(qrMessage.MerchantOpenId + "zhangkun429@")
  216. key = "CHARGE" + key
  217. if key != qrMessage.Key {
  218. app.Error(c, 400, errors.New("报文错误"), "报文错误")
  219. return
  220. }
  221. clientAccount.MerchantOpenID = qrMessage.MerchantOpenId
  222. clientAccount.ClientOpenID = qrMessage.ClientOpenId
  223. clientInfo, err := clientAccount.MerchantRechargeClientAccount()
  224. if err != nil {
  225. app.Error(c, 400, err, err.Error())
  226. return
  227. }
  228. clientTicket.ClientOpenID = qrMessage.ClientOpenId
  229. clientTicket.MerchantOpenID = qrMessage.MerchantOpenId
  230. //获取券
  231. clientTicketInfo, err := clientTicket.GetMerchantRechargeTicket()
  232. if err != nil {
  233. app.Error(c, 500, err, err.Error())
  234. return
  235. }
  236. merchant.OpenId = qrMessage.MerchantOpenId
  237. merchantInfo, err := merchant.GetMerchant()
  238. if err != nil {
  239. app.Error(c, 500, err, err.Error())
  240. return
  241. }
  242. outData.MerchantName = merchantInfo.MerchantName
  243. outData.Amount = clientInfo.Amount.String()
  244. outData.AccountId = clientInfo.ID
  245. for _, v := range clientTicketInfo {
  246. var chargeProject models.ChargeMerchantCancelInfo
  247. var project shanghu.MerchantRechargeProject
  248. project.ID = v.RechargeProjectID
  249. projectInfo, err := project.GetMerchantRechargeProjectById()
  250. if err != nil {
  251. app.Error(c, 500, err, err.Error())
  252. return
  253. }
  254. chargeProject.ProjectQuantity = projectInfo.ProjectQuantity
  255. chargeProject.TicketId = v.ID
  256. chargeProject.RechargeProjectQuantity = v.RechargeProjectQuantity
  257. chargeProject.RechargeProjectName = v.RechargeProjectName
  258. outData.ChargeMerchantCancelInfo = append(outData.ChargeMerchantCancelInfo, chargeProject)
  259. }
  260. app.OK(c, outData, app.Success)
  261. }
  262. func GetMerchantCanvasCard(c *gin.Context) {
  263. var inData models.GetMerchantCardRequest
  264. var outData models.GetMerchantCanvasCardReply
  265. var sqlData shanghu.MerchantCard
  266. var project []int64
  267. var qr models.QRRequest
  268. var getQR models.GetQRRequest
  269. confIni, err := conf.ConnIni()
  270. if err != nil {
  271. app.Error(c, 400, err, err.Error())
  272. return
  273. }
  274. err = c.ShouldBindJSON(&inData)
  275. if err != nil {
  276. app.Error(c, 400, err, err.Error())
  277. return
  278. }
  279. sqlData.ID = inData.MerchantId
  280. merchantCard, err := sqlData.GetMerchantCard()
  281. if err != nil {
  282. app.Error(c, 500, err, err.Error())
  283. return
  284. }
  285. if merchantCard.ActivityEndTime <= time.Now().Unix() {
  286. app.Error(c, 500, errors.New("活动已结束"), "活动已结束")
  287. return
  288. }
  289. outData.Static.Background = "/images/背景.jpg"
  290. var swiperList []models.SwiperList
  291. var rightButton models.RightButton
  292. var swiper models.SwiperList
  293. swiper.ID = 0
  294. swiper.URL = merchantCard.Picture
  295. swiperList = append(swiperList, swiper)
  296. //err = json.Unmarshal([]byte(merchantCard.Picture), &swiperList)
  297. //if err != nil {
  298. // fmt.Println("picture")
  299. // app.Error(c, 500, err, err.Error())
  300. // return
  301. //}
  302. outData.Inventory = merchantCard.Inventory
  303. outData.SwiperList = swiperList
  304. rightButton.ImageURL = "/images/资源 24.png"
  305. outData.RightButton = append(outData.RightButton, rightButton)
  306. rightButton.ImageURL = "/images/资源 25.png"
  307. outData.RightButton = append(outData.RightButton, rightButton)
  308. rightButton.ImageURL = "/images/资源 26.png"
  309. outData.RightButton = append(outData.RightButton, rightButton)
  310. rightButton.ImageURL = "/images/资源 28.png"
  311. outData.RightButton = append(outData.RightButton, rightButton)
  312. var dataList models.DataList
  313. err = json.Unmarshal([]byte(merchantCard.CardProjectData), &project)
  314. if err != nil {
  315. fmt.Println("picture2")
  316. app.Error(c, 500, err, err.Error())
  317. return
  318. }
  319. //merchantCard.CardProjectData = ""
  320. for i := 0; i < len(project); i++ {
  321. var cardProject shanghu.MerchantCardProject
  322. cardProject.ID = project[i]
  323. projectInfo, err := cardProject.GetMerchantCardProject()
  324. if err != nil {
  325. app.Error(c, 500, err, err.Error())
  326. return
  327. }
  328. dataList.Name = projectInfo.ProjectName
  329. dataList.Count = 1
  330. dataList.Price = projectInfo.ProjectUnitPrice
  331. dataList.Unit = projectInfo.ProjectUnit
  332. outData.DataList = append(outData.DataList, dataList)
  333. }
  334. var buy models.BuyKnowList
  335. //buy.Icon = "/images/资源 46.png"
  336. //buy.Title = "有效期"
  337. //buy.Text = "至" + tools.TimeToStr(merchantCard.MerchantCardTime)
  338. //outData.BuyKnowList = append(outData.BuyKnowList, buy)
  339. buy.Icon = "/images/资源 48.png"
  340. buy.Title = "限购数量"
  341. buy.Text = "每位用户限购1张"
  342. outData.BuyKnowList = append(outData.BuyKnowList, buy)
  343. buy.Icon = "/images/资源 49.png"
  344. buy.Title = "使用规则"
  345. buy.Text = merchantCard.UseRule
  346. outData.BuyKnowList = append(outData.BuyKnowList, buy)
  347. var shopData models.ShopData
  348. var merchant shanghu.Merchant
  349. merchant.OpenId = merchantCard.MerchantOpenID
  350. merchantInfo, err := merchant.GetMerchant()
  351. if err != nil {
  352. app.Error(c, 500, err, err.Error())
  353. return
  354. }
  355. shopData.Name = merchantInfo.MerchantName
  356. shopData.Address = merchantInfo.Address
  357. outData.ShopData = shopData
  358. outData.FenxiangShow = false
  359. outData.MerchantAmount, err = decimal.NewFromString(merchantCard.CardPrice)
  360. if err != nil {
  361. app.Error(c, 500, err, err.Error())
  362. return
  363. }
  364. outData.MerchantOriginalAmount, err = decimal.NewFromString(merchantCard.CardTotalPrice)
  365. if err != nil {
  366. app.Error(c, 500, err, err.Error())
  367. return
  368. }
  369. //outData.MerchantOriginalAmount = outData.MerchantAmount.Add(decimal.NewFromInt(50))
  370. var outQRData models.ClientCardQRReply
  371. val, err := pdd.DuoDuoGet("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wx8595c589dd736486&secret=668f87d2bc24199688e53ee8a88434b8")
  372. if err != nil {
  373. app.Error(c, 500, err, err.Error())
  374. return
  375. }
  376. err = tools.JsonUnmarshal(val, &outQRData)
  377. if err != nil {
  378. app.Error(c, 500, err, err.Error())
  379. return
  380. }
  381. if outQRData.AccessToken == "" {
  382. app.Error(c, 500, err, "token error")
  383. return
  384. }
  385. url := "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + outQRData.AccessToken
  386. //1.原始码 不需要购买直接分享 ==原生码直接分享
  387. //2.code 本人openid 需要购买才能分享
  388. //3.空的 官方邀请码
  389. //返回邀请码
  390. var qrCode string
  391. if inData.Code == "yuanshima" && inData.Openid == "" { //商家平台 可以分享 code 等于自己的与yuanshima的都给平台
  392. outData.IsShare = true
  393. outData.InvitationCode = "yuanshima"
  394. qrCode = "yuanshima"
  395. } else if inData.Code == "yuanshima" && inData.Openid != "" { // 原始码 c端用户调用
  396. var userInfo shanghu.MerchantClientUser
  397. outData.IsShare = true
  398. userInfo.ClientOpenID = inData.Openid
  399. userInfoReply, _ := userInfo.GetUserInfo()
  400. qrCode = userInfoReply.Code
  401. outData.InvitationCode = inData.Code
  402. } else if inData.Code != "yuanshima" && inData.Openid != "" && inData.Code != "" { //查询购买记录,没有购买过不让分享
  403. var payTrans shanghu.ClientPayTrans
  404. var userInfo shanghu.MerchantClientUser
  405. payTrans.MerchantCardID = inData.MerchantId
  406. payTrans.ClientOpenID = inData.Openid
  407. payInfo, _ := payTrans.GetPayTransByOpenid()
  408. if payInfo.ID <= 0 {
  409. outData.IsShare = false
  410. } else {
  411. outData.IsShare = true
  412. }
  413. outData.InvitationCode = inData.Code
  414. userInfo.ClientOpenID = inData.Openid
  415. userInfoReply, _ := userInfo.GetUserInfo()
  416. qrCode = userInfoReply.Code
  417. } else {
  418. app.Error(c, 500, errors.New("code 错误"), "code 错误")
  419. return
  420. }
  421. //点击购买的时候把code给进去把 原始码购买属于平台
  422. qr.CheckPath = true
  423. qr.Page = "pages/home/home"
  424. qr.EnvVersion = "release"
  425. qr.Scene = "id-" + strconv.FormatInt(inData.MerchantId, 10) + "-c-" + qrCode
  426. fmt.Println(qr.Scene)
  427. data, err := json.Marshal(&qr)
  428. if err != nil {
  429. app.Error(c, 500, err, err.Error())
  430. return
  431. }
  432. reply, err := common.Post(data, url)
  433. if err != nil {
  434. app.Error(c, 500, err, err.Error())
  435. return
  436. }
  437. if getQR.Errcode != 0 {
  438. app.Error(c, 500, err, getQR.Errmsg)
  439. return
  440. }
  441. encoded := base64.StdEncoding.EncodeToString(reply)
  442. outData.Base64Img = encoded
  443. //上传二维码文件
  444. timeUnixNano := time.Now().UnixNano() //单位纳秒
  445. fileName := fmt.Sprintf("%d.jpg", timeUnixNano)
  446. //七牛云上传图片
  447. bucket := "imgxx"
  448. key := "shanghuka/" + "erweima/" + time.Now().Format(time.DateOnly) + "/" + fileName
  449. putPolicy := storage.PutPolicy{
  450. Scope: bucket,
  451. }
  452. mac := qbox.NewMac(confIni.MustValue("ly-qn", "access_key"), confIni.MustValue("ly-qn", "secret_key"))
  453. upToken := putPolicy.UploadToken(mac)
  454. cfg := storage.Config{}
  455. // 空间对应的机房
  456. cfg.Zone = &storage.ZoneHuanan
  457. // 是否使用https域名
  458. cfg.UseHTTPS = false
  459. // 上传是否使用CDN上传加速
  460. cfg.UseCdnDomains = false
  461. // 构建表单上传的对象
  462. baseUploader := storage.NewBase64Uploader(&cfg)
  463. ret := storage.PutRet{}
  464. //data, err := base64.RawStdEncoding.DecodeString(inData.Pictures[i])
  465. //if err != nil {
  466. // app.Error(c, 500, err, "上传图片失败")
  467. // return
  468. //}
  469. err = baseUploader.Put(context.Background(), &ret, upToken, key, []byte(encoded), nil)
  470. if err != nil {
  471. app.Error(c, 500, err, "上传图片失败")
  472. return
  473. }
  474. outData.QRUrl = "http://lingyang.shisanmiao.com/" + key
  475. //err = json.Unmarshal([]byte(merchantCard.CardProjectData), &project)
  476. //if err != nil {
  477. // app.Error(c, 500, err, err.Error())
  478. // return
  479. //}
  480. //
  481. //merchantCard.CardProjectData = ""
  482. //for i := 0; i < len(project); i++ {
  483. // var cardProject shanghu.MerchantCardProject
  484. // cardProject.ID = project[i]
  485. // projectInfo, err := cardProject.GetMerchantCardProject()
  486. // if err != nil {
  487. // app.Error(c, 500, err, err.Error())
  488. // return
  489. // }
  490. // merchantCard.CardProjectData = merchantCard.CardProjectData + projectInfo.ProjectName + "x1 "
  491. //}
  492. app.OK(c, outData, app.Success)
  493. }
  494. func MerchantCardList(c *gin.Context) {
  495. var inData models.MerchantCardListRequest
  496. var sqlData shanghu.MerchantCard
  497. var outData []models.MerchantCardListReply
  498. err := c.ShouldBindJSON(&inData)
  499. if err != nil {
  500. app.Error(c, 400, err, err.Error())
  501. return
  502. }
  503. var pageSize = 10
  504. var pageIndex = 1
  505. if inData.PageSize != 0 {
  506. pageSize = inData.PageSize
  507. }
  508. if inData.PageIndex != 0 {
  509. pageIndex = inData.PageIndex
  510. }
  511. sqlData.MerchantOpenID = inData.OpenId
  512. merchantCard, count, err := sqlData.GetOpenIdList(pageSize, pageIndex, inData.TypeList)
  513. if err != nil {
  514. app.Error(c, 500, err, err.Error())
  515. return
  516. }
  517. for _, v := range merchantCard {
  518. var merchant models.MerchantCardListReply
  519. var payNumber shanghu.ClientPayTrans
  520. merchant.ID = v.ID
  521. merchant.MerchantCardName = v.MerchantCardName
  522. merchant.ActivityEnd = tools.TimeToStr(v.ActivityEndTime)
  523. merchant.ActivityStart = tools.TimeToStr(v.ActivityStartTime)
  524. merchant.CardPrice = v.CardPrice
  525. payNumber.MerchantCardID = v.ID
  526. merchant.SaleCardNumber = payNumber.GetNumByCardID()
  527. outData = append(outData, merchant)
  528. }
  529. app.PageOK(c, outData, count, pageIndex, pageSize, app.Success)
  530. return
  531. //app.PageOK(c, merchantCard, count, pageIndex, pageSize, app.Success)
  532. }
  533. // c端获取卡信息
  534. func MerchantClientCardList(c *gin.Context) {
  535. var inData models.MerchantCardListRequest
  536. var sqlData shanghu.MerchantCard
  537. var outData []models.MerchantCardListReply
  538. err := c.ShouldBindJSON(&inData)
  539. if err != nil {
  540. app.Error(c, 400, err, err.Error())
  541. return
  542. }
  543. var pageSize = 10
  544. var pageIndex = 1
  545. if inData.PageSize != 0 {
  546. pageSize = inData.PageSize
  547. }
  548. if inData.PageIndex != 0 {
  549. pageIndex = inData.PageIndex
  550. }
  551. merchantCard, count, err := sqlData.ClientGetOpenIdList(pageSize, pageIndex, inData.TypeList)
  552. if err != nil {
  553. app.Error(c, 500, err, err.Error())
  554. return
  555. }
  556. for i := 0; i < len(merchantCard); i++ {
  557. var reply models.MerchantCardListReply
  558. reply.RebateRate = merchantCard[i].RebateRate
  559. reply.ID = merchantCard[i].ID
  560. reply.QuotaNum = merchantCard[i].QuotaNum
  561. reply.MerchantCardName = merchantCard[i].MerchantCardName
  562. reply.CardPrice = merchantCard[i].CardPrice
  563. priceDec, err := decimal.NewFromString(merchantCard[i].CardPrice)
  564. if err != nil {
  565. app.Error(c, 500, err, err.Error())
  566. return
  567. }
  568. reply.RebateAmount = priceDec.Mul(decimal.NewFromInt(merchantCard[i].RebateRate).Div(decimal.NewFromInt(100))).String()
  569. outData = append(outData, reply)
  570. }
  571. app.PageOK(c, outData, count, pageIndex, pageSize, app.Success)
  572. }
  573. func UpdateMerchantCard(c *gin.Context) {
  574. var inData models.UpdateMerchantCardRequest
  575. var sqlData shanghu.MerchantCard
  576. err := c.ShouldBindJSON(&inData)
  577. if err != nil {
  578. app.Error(c, 400, err, err.Error())
  579. return
  580. }
  581. sqlData.ID = inData.ID
  582. sqlData.QuotaNum = inData.QuotaNum
  583. sqlData.UseRule = inData.UseRule
  584. sqlData.Picture = inData.Picture
  585. sqlData.Inventory = inData.Inventory
  586. sqlData.ActivityStartTime = inData.ActivityStartTime
  587. sqlData.ActivityEndTime = inData.ActivityEndTime
  588. err = sqlData.UpdateMerchantCard()
  589. if err != nil {
  590. app.Error(c, 400, err, err.Error())
  591. return
  592. }
  593. app.OK(c, nil, app.Success)
  594. }
  595. func UpdateMerchantCardWXYZ(c *gin.Context) {
  596. var inData models.UpdateMerchantCardWHXYRequest
  597. var sqlData shanghu.MerchantCard
  598. var whxy []models.WHXYStr
  599. err := c.ShouldBindJSON(&inData)
  600. if err != nil {
  601. app.Error(c, 400, err, err.Error())
  602. return
  603. }
  604. //"json: cannot unmarshal number -0.33279827286174424 into Go struct field WHXYStr.rotate of type int"
  605. err = json.Unmarshal([]byte(inData.Whxy), &whxy)
  606. if err != nil {
  607. app.Error(c, 400, err, err.Error())
  608. return
  609. }
  610. for i := 0; i < len(whxy); i++ {
  611. if !whxy[i].Y.IsZero() {
  612. sqlData.W = whxy[i].W.String()
  613. sqlData.X = whxy[i].X.String()
  614. sqlData.Y = whxy[i].Y.String()
  615. sqlData.H = whxy[i].H.String()
  616. }
  617. }
  618. sqlData.ID = inData.MerchantCardId
  619. err = sqlData.UpdateMerchantWHXY()
  620. if err != nil {
  621. app.Error(c, 400, err, err.Error())
  622. return
  623. }
  624. app.OK(c, nil, app.Success)
  625. }
  626. // 核销次数
  627. func CancelNumber(c *gin.Context) {
  628. var inData models.CancelCardRequest
  629. var sqlData shanghu.MerchantCard
  630. var log shanghu.CancelLog
  631. var qrMessage models.QRData
  632. var clientPay shanghu.ClientPayTrans
  633. err := c.ShouldBindJSON(&inData)
  634. if err != nil {
  635. app.Error(c, 400, err, err.Error())
  636. return
  637. }
  638. err = json.Unmarshal([]byte(inData.QRMessage), &qrMessage)
  639. if err != nil {
  640. app.Error(c, 400, err, err.Error())
  641. return
  642. }
  643. clientPay.MerchantCardID = qrMessage.MerchantId
  644. clientPay.ClientOpenID = qrMessage.ClientOpenId
  645. clientInfo, err := clientPay.GetPayTransByOpenid()
  646. if err != nil {
  647. app.Error(c, 400, err, err.Error())
  648. return
  649. }
  650. if clientInfo.ID == 0 {
  651. app.Error(c, 200, errors.New("用户未购买此卡"), "用户未购买此卡")
  652. return
  653. }
  654. sqlData.ID = qrMessage.MerchantId
  655. merchantInfo, err := sqlData.GetMerchantCard()
  656. if err != nil {
  657. app.Error(c, 500, err, err.Error())
  658. return
  659. }
  660. log.MerchantID = qrMessage.MerchantId
  661. log.ClientOpenID = qrMessage.ClientOpenId
  662. if log.GetNumber() >= merchantInfo.CancelNumber {
  663. app.Error(c, 200, errors.New("卡已使用完,请重新购买"), "卡已使用完,请重新购买")
  664. return
  665. }
  666. if merchantInfo.MerchantOpenID != inData.MerchantOpenId {
  667. app.Error(c, 200, errors.New("核销商家与发卡商家不一致"), "核销商家与发卡商家不一致")
  668. return
  669. }
  670. log.MerchantID = qrMessage.MerchantId
  671. log.ClientOpenID = qrMessage.ClientOpenId
  672. log.MerchantOpenID = inData.MerchantOpenId
  673. log.CreatedAt = time.Now()
  674. log.UpdatedAt = time.Now()
  675. _, err = log.Create()
  676. if err != nil {
  677. app.Error(c, 500, err, err.Error())
  678. return
  679. }
  680. app.OK(c, nil, "核销成功")
  681. }
  682. // 核销 v2
  683. func CancelNumberV2(c *gin.Context) {
  684. var inData models.CancelCardV2Request
  685. var sqlData shanghu.MerchantCard
  686. var log shanghu.CancelLog
  687. var cancelLog []shanghu.CancelLog
  688. var qrMessage models.QRData
  689. var clientPay shanghu.ClientPayTrans
  690. err := c.ShouldBindJSON(&inData)
  691. if err != nil {
  692. app.Error(c, 400, err, err.Error())
  693. return
  694. }
  695. if inData.Number <= 0 {
  696. app.Error(c, 400, errors.New("核销次数不能为0"), "核销次数不能为0")
  697. return
  698. }
  699. err = json.Unmarshal([]byte(inData.QRMessage), &qrMessage)
  700. if err != nil {
  701. app.Error(c, 400, err, err.Error())
  702. return
  703. }
  704. clientPay.MerchantCardID = qrMessage.MerchantId
  705. clientPay.ClientOpenID = qrMessage.ClientOpenId
  706. clientInfo, err := clientPay.GetPayTransByOpenid()
  707. if err != nil {
  708. app.Error(c, 400, err, err.Error())
  709. return
  710. }
  711. if clientInfo.ID == 0 {
  712. app.Error(c, 500, errors.New("用户未购买此卡"), "用户未购买此卡")
  713. return
  714. }
  715. sqlData.ID = qrMessage.MerchantId
  716. merchantInfo, err := sqlData.GetMerchantCard()
  717. if err != nil {
  718. app.Error(c, 500, err, err.Error())
  719. return
  720. }
  721. log.MerchantID = qrMessage.MerchantId
  722. log.ClientOpenID = qrMessage.ClientOpenId
  723. if log.GetNumber()+inData.Number > merchantInfo.CancelNumber {
  724. app.Error(c, 500, errors.New("剩余核销次数不够,请重新购买"), "剩余核销次数不够,请重新购买")
  725. return
  726. }
  727. //if merchantInfo.MerchantOpenID != inData.MerchantOpenId {
  728. // app.Error(c, 500, errors.New("核销商家与发卡商家不一致"), "核销商家与发卡商家不一致")
  729. // return
  730. //}
  731. for i := 0; i < inData.Number; i++ {
  732. log.MerchantID = qrMessage.MerchantId
  733. log.ClientOpenID = qrMessage.ClientOpenId
  734. log.MerchantOpenID = inData.MerchantOpenId
  735. log.CreatedAt = time.Now()
  736. log.UpdatedAt = time.Now()
  737. cancelLog = append(cancelLog, log)
  738. }
  739. err = log.CreateBatches(cancelLog)
  740. if err != nil {
  741. app.Error(c, 500, err, err.Error())
  742. return
  743. }
  744. app.OK(c, nil, "核销成功")
  745. }
  746. // 充值核销
  747. func RechargeCancel(c *gin.Context) {
  748. var inData models.RechargeCancelRequest
  749. ticker := shanghu.MerchantClientTicket{}
  750. err := c.ShouldBindJSON(&inData)
  751. if err != nil {
  752. app.Error(c, 400, err, err.Error())
  753. return
  754. }
  755. err = ticker.CancelAccountTicket(inData)
  756. if err != nil {
  757. app.Error(c, 400, err, err.Error())
  758. return
  759. }
  760. app.OK(c, nil, "核销成功")
  761. }