merchant.card.go 22 KB

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