merchant.card.go 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926
  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. // 核销详情
  218. func GetChargeMerchantCancelInfo(c *gin.Context) {
  219. var inData models.GetMerchantCancelInfoRequest
  220. var outData models.GetChargeMerchantCancelInfoReply
  221. var qrMessage models.RechargeVerificationCodeReply
  222. var clientAccount shanghu.MerchantRechargeClientAccount
  223. var clientTicket shanghu.MerchantClientTicket
  224. var merchant shanghu.Merchant
  225. err := c.ShouldBindJSON(&inData)
  226. if err != nil {
  227. app.Error(c, 400, err, err.Error())
  228. return
  229. }
  230. err = json.Unmarshal([]byte(inData.QRMessage), &qrMessage)
  231. if err != nil {
  232. app.Error(c, 400, err, err.Error())
  233. return
  234. }
  235. key := tools.MD5(qrMessage.MerchantOpenId + "zhangkun429@")
  236. key = "CHARGE" + key
  237. if key != qrMessage.Key {
  238. app.Error(c, 400, errors.New("报文错误"), "报文错误")
  239. return
  240. }
  241. clientAccount.MerchantOpenID = qrMessage.MerchantOpenId
  242. clientAccount.ClientOpenID = qrMessage.ClientOpenId
  243. clientInfo, err := clientAccount.MerchantRechargeClientAccount()
  244. if err != nil {
  245. app.Error(c, 400, err, err.Error())
  246. return
  247. }
  248. clientTicket.ClientOpenID = qrMessage.ClientOpenId
  249. clientTicket.MerchantOpenID = qrMessage.MerchantOpenId
  250. //获取券
  251. clientTicketInfo, err := clientTicket.GetMerchantRechargeTicket()
  252. if err != nil {
  253. app.Error(c, 500, err, err.Error())
  254. return
  255. }
  256. merchant.OpenId = qrMessage.MerchantOpenId
  257. merchantInfo, err := merchant.GetMerchant()
  258. if err != nil {
  259. app.Error(c, 500, err, err.Error())
  260. return
  261. }
  262. outData.MerchantName = merchantInfo.MerchantName
  263. outData.Amount = clientInfo.Amount.String()
  264. outData.AccountId = clientInfo.ID
  265. for _, v := range clientTicketInfo {
  266. var chargeProject models.ChargeMerchantCancelInfo
  267. var project shanghu.MerchantRechargeProject
  268. project.ID = v.RechargeProjectID
  269. projectInfo, err := project.GetMerchantRechargeProjectById()
  270. if err != nil {
  271. app.Error(c, 500, err, err.Error())
  272. return
  273. }
  274. chargeProject.ProjectQuantity = projectInfo.ProjectQuantity
  275. chargeProject.TicketId = v.ID
  276. chargeProject.RechargeProjectQuantity = v.RechargeProjectQuantity
  277. chargeProject.RechargeProjectName = v.RechargeProjectName
  278. outData.ChargeMerchantCancelInfo = append(outData.ChargeMerchantCancelInfo, chargeProject)
  279. }
  280. app.OK(c, outData, app.Success)
  281. }
  282. func GetMerchantCanvasCard(c *gin.Context) {
  283. var inData models.GetMerchantCardRequest
  284. var outData models.GetMerchantCanvasCardReply
  285. var sqlData shanghu.MerchantCard
  286. var project []int64
  287. var qr models.QRRequest
  288. var getQR models.GetQRRequest
  289. confIni, err := conf.ConnIni()
  290. if err != nil {
  291. app.Error(c, 400, err, err.Error())
  292. return
  293. }
  294. err = c.ShouldBindJSON(&inData)
  295. if err != nil {
  296. app.Error(c, 400, err, err.Error())
  297. return
  298. }
  299. sqlData.ID = inData.MerchantId
  300. merchantCard, err := sqlData.GetMerchantCard()
  301. if err != nil {
  302. app.Error(c, 500, err, err.Error())
  303. return
  304. }
  305. if merchantCard.ActivityEndTime <= time.Now().Unix() {
  306. app.Error(c, 500, errors.New("活动已结束"), "活动已结束")
  307. return
  308. }
  309. outData.Static.Background = "/images/背景.jpg"
  310. var swiperList []models.SwiperList
  311. var rightButton models.RightButton
  312. var swiper models.SwiperList
  313. swiper.ID = 0
  314. swiper.URL = merchantCard.Picture
  315. swiperList = append(swiperList, swiper)
  316. //err = json.Unmarshal([]byte(merchantCard.Picture), &swiperList)
  317. //if err != nil {
  318. // fmt.Println("picture")
  319. // app.Error(c, 500, err, err.Error())
  320. // return
  321. //}
  322. outData.Inventory = merchantCard.Inventory
  323. outData.SwiperList = swiperList
  324. rightButton.ImageURL = "/images/资源 24.png"
  325. outData.RightButton = append(outData.RightButton, rightButton)
  326. rightButton.ImageURL = "/images/资源 25.png"
  327. outData.RightButton = append(outData.RightButton, rightButton)
  328. rightButton.ImageURL = "/images/资源 26.png"
  329. outData.RightButton = append(outData.RightButton, rightButton)
  330. rightButton.ImageURL = "/images/资源 28.png"
  331. outData.RightButton = append(outData.RightButton, rightButton)
  332. var dataList models.DataList
  333. err = json.Unmarshal([]byte(merchantCard.CardProjectData), &project)
  334. if err != nil {
  335. fmt.Println("picture2")
  336. app.Error(c, 500, err, err.Error())
  337. return
  338. }
  339. //merchantCard.CardProjectData = ""
  340. for i := 0; i < len(project); i++ {
  341. var cardProject shanghu.MerchantCardProject
  342. cardProject.ID = project[i]
  343. projectInfo, err := cardProject.GetMerchantCardProject()
  344. if err != nil {
  345. app.Error(c, 500, err, err.Error())
  346. return
  347. }
  348. dataList.Name = projectInfo.ProjectName
  349. dataList.Count = 1
  350. dataList.Price = projectInfo.ProjectUnitPrice
  351. dataList.Unit = projectInfo.ProjectUnit
  352. outData.DataList = append(outData.DataList, dataList)
  353. }
  354. var buy models.BuyKnowList
  355. //buy.Icon = "/images/资源 46.png"
  356. //buy.Title = "有效期"
  357. //buy.Text = "至" + tools.TimeToStr(merchantCard.MerchantCardTime)
  358. //outData.BuyKnowList = append(outData.BuyKnowList, buy)
  359. buy.Icon = "/images/资源 48.png"
  360. buy.Title = "限购数量"
  361. buy.Text = "每位用户限购1张"
  362. outData.BuyKnowList = append(outData.BuyKnowList, buy)
  363. buy.Icon = "/images/资源 49.png"
  364. buy.Title = "使用规则"
  365. buy.Text = merchantCard.UseRule
  366. outData.BuyKnowList = append(outData.BuyKnowList, buy)
  367. var shopData models.ShopData
  368. var merchant shanghu.Merchant
  369. merchant.OpenId = merchantCard.MerchantOpenID
  370. merchantInfo, err := merchant.GetMerchant()
  371. if err != nil {
  372. app.Error(c, 500, err, err.Error())
  373. return
  374. }
  375. shopData.Name = merchantInfo.MerchantName
  376. shopData.Address = merchantInfo.Address
  377. outData.ShopData = shopData
  378. outData.FenxiangShow = false
  379. outData.MerchantAmount, err = decimal.NewFromString(merchantCard.CardPrice)
  380. if err != nil {
  381. app.Error(c, 500, err, err.Error())
  382. return
  383. }
  384. outData.MerchantOriginalAmount, err = decimal.NewFromString(merchantCard.CardTotalPrice)
  385. if err != nil {
  386. app.Error(c, 500, err, err.Error())
  387. return
  388. }
  389. //outData.MerchantOriginalAmount = outData.MerchantAmount.Add(decimal.NewFromInt(50))
  390. var outQRData models.ClientCardQRReply
  391. val, err := pdd.DuoDuoGet("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wx8595c589dd736486&secret=668f87d2bc24199688e53ee8a88434b8")
  392. if err != nil {
  393. app.Error(c, 500, err, err.Error())
  394. return
  395. }
  396. err = tools.JsonUnmarshal(val, &outQRData)
  397. if err != nil {
  398. app.Error(c, 500, err, err.Error())
  399. return
  400. }
  401. if outQRData.AccessToken == "" {
  402. app.Error(c, 500, err, "token error")
  403. return
  404. }
  405. url := "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + outQRData.AccessToken
  406. //1.原始码 不需要购买直接分享 ==原生码直接分享
  407. //2.code 本人openid 需要购买才能分享
  408. //3.空的 官方邀请码
  409. //返回邀请码
  410. var qrCode string
  411. if inData.Code == "yuanshima" && inData.Openid == "" { //商家平台 可以分享 code 等于自己的与yuanshima的都给平台
  412. outData.IsShare = true
  413. outData.InvitationCode = "yuanshima"
  414. qrCode = "yuanshima"
  415. } else if inData.Code == "yuanshima" && inData.Openid != "" { // 原始码 c端用户调用
  416. var userInfo shanghu.MerchantClientUser
  417. outData.IsShare = true
  418. userInfo.ClientOpenID = inData.Openid
  419. userInfoReply, _ := userInfo.GetUserInfo()
  420. qrCode = userInfoReply.Code
  421. outData.InvitationCode = inData.Code
  422. } else if inData.Code != "yuanshima" && inData.Openid != "" && inData.Code != "" { //查询购买记录,没有购买过不让分享
  423. var payTrans shanghu.ClientPayTrans
  424. var userInfo shanghu.MerchantClientUser
  425. payTrans.MerchantCardID = inData.MerchantId
  426. payTrans.ClientOpenID = inData.Openid
  427. payInfo, _ := payTrans.GetPayTransByOpenid()
  428. if payInfo.ID <= 0 {
  429. outData.IsShare = false
  430. } else {
  431. outData.IsShare = true
  432. }
  433. outData.InvitationCode = inData.Code
  434. userInfo.ClientOpenID = inData.Openid
  435. userInfoReply, _ := userInfo.GetUserInfo()
  436. qrCode = userInfoReply.Code
  437. } else {
  438. app.Error(c, 500, errors.New("code 错误"), "code 错误")
  439. return
  440. }
  441. //点击购买的时候把code给进去把 原始码购买属于平台
  442. qr.CheckPath = true
  443. qr.Page = "pages/home/home"
  444. qr.EnvVersion = "release"
  445. qr.Scene = "id-" + strconv.FormatInt(inData.MerchantId, 10) + "-c-" + qrCode
  446. fmt.Println(qr.Scene)
  447. data, err := json.Marshal(&qr)
  448. if err != nil {
  449. app.Error(c, 500, err, err.Error())
  450. return
  451. }
  452. reply, err := common.Post(data, url)
  453. if err != nil {
  454. app.Error(c, 500, err, err.Error())
  455. return
  456. }
  457. if getQR.Errcode != 0 {
  458. app.Error(c, 500, err, getQR.Errmsg)
  459. return
  460. }
  461. encoded := base64.StdEncoding.EncodeToString(reply)
  462. outData.Base64Img = encoded
  463. //上传二维码文件
  464. timeUnixNano := time.Now().UnixNano() //单位纳秒
  465. fileName := fmt.Sprintf("%d.jpg", timeUnixNano)
  466. //七牛云上传图片
  467. bucket := "imgxx"
  468. key := "shanghuka/" + "erweima/" + time.Now().Format(time.DateOnly) + "/" + fileName
  469. putPolicy := storage.PutPolicy{
  470. Scope: bucket,
  471. }
  472. mac := qbox.NewMac(confIni.MustValue("ly-qn", "access_key"), confIni.MustValue("ly-qn", "secret_key"))
  473. upToken := putPolicy.UploadToken(mac)
  474. cfg := storage.Config{}
  475. // 空间对应的机房
  476. cfg.Zone = &storage.ZoneHuanan
  477. // 是否使用https域名
  478. cfg.UseHTTPS = false
  479. // 上传是否使用CDN上传加速
  480. cfg.UseCdnDomains = false
  481. // 构建表单上传的对象
  482. baseUploader := storage.NewBase64Uploader(&cfg)
  483. ret := storage.PutRet{}
  484. //data, err := base64.RawStdEncoding.DecodeString(inData.Pictures[i])
  485. //if err != nil {
  486. // app.Error(c, 500, err, "上传图片失败")
  487. // return
  488. //}
  489. err = baseUploader.Put(context.Background(), &ret, upToken, key, []byte(encoded), nil)
  490. if err != nil {
  491. app.Error(c, 500, err, "上传图片失败")
  492. return
  493. }
  494. outData.QRUrl = "http://lingyang.shisanmiao.com/" + key
  495. //err = json.Unmarshal([]byte(merchantCard.CardProjectData), &project)
  496. //if err != nil {
  497. // app.Error(c, 500, err, err.Error())
  498. // return
  499. //}
  500. //
  501. //merchantCard.CardProjectData = ""
  502. //for i := 0; i < len(project); i++ {
  503. // var cardProject shanghu.MerchantCardProject
  504. // cardProject.ID = project[i]
  505. // projectInfo, err := cardProject.GetMerchantCardProject()
  506. // if err != nil {
  507. // app.Error(c, 500, err, err.Error())
  508. // return
  509. // }
  510. // merchantCard.CardProjectData = merchantCard.CardProjectData + projectInfo.ProjectName + "x1 "
  511. //}
  512. app.OK(c, outData, app.Success)
  513. }
  514. func MerchantCardList(c *gin.Context) {
  515. var inData models.MerchantCardListRequest
  516. var sqlData shanghu.MerchantCard
  517. var outData []models.MerchantCardListReply
  518. err := c.ShouldBindJSON(&inData)
  519. if err != nil {
  520. app.Error(c, 400, err, err.Error())
  521. return
  522. }
  523. var pageSize = 10
  524. var pageIndex = 1
  525. if inData.PageSize != 0 {
  526. pageSize = inData.PageSize
  527. }
  528. if inData.PageIndex != 0 {
  529. pageIndex = inData.PageIndex
  530. }
  531. sqlData.MerchantOpenID = inData.OpenId
  532. merchantCard, count, err := sqlData.GetOpenIdList(pageSize, pageIndex, inData.TypeList)
  533. if err != nil {
  534. app.Error(c, 500, err, err.Error())
  535. return
  536. }
  537. for _, v := range merchantCard {
  538. var merchant models.MerchantCardListReply
  539. var payNumber shanghu.ClientPayTrans
  540. merchant.ID = v.ID
  541. merchant.MerchantCardName = v.MerchantCardName
  542. merchant.ActivityEnd = tools.TimeToStr(v.ActivityEndTime)
  543. merchant.ActivityStart = tools.TimeToStr(v.ActivityStartTime)
  544. merchant.CardPrice = v.CardPrice
  545. payNumber.MerchantCardID = v.ID
  546. merchant.SaleCardNumber = payNumber.GetNumByCardID()
  547. outData = append(outData, merchant)
  548. }
  549. app.PageOK(c, outData, count, pageIndex, pageSize, app.Success)
  550. return
  551. //app.PageOK(c, merchantCard, count, pageIndex, pageSize, app.Success)
  552. }
  553. // c端获取卡信息
  554. func MerchantClientCardList(c *gin.Context) {
  555. var inData models.MerchantCardListRequest
  556. var sqlData shanghu.MerchantCard
  557. var outData []models.MerchantCardListReply
  558. err := c.ShouldBindJSON(&inData)
  559. if err != nil {
  560. app.Error(c, 400, err, err.Error())
  561. return
  562. }
  563. var pageSize = 10
  564. var pageIndex = 1
  565. if inData.PageSize != 0 {
  566. pageSize = inData.PageSize
  567. }
  568. if inData.PageIndex != 0 {
  569. pageIndex = inData.PageIndex
  570. }
  571. merchantCard, count, err := sqlData.ClientGetOpenIdList(pageSize, pageIndex, inData.TypeList)
  572. if err != nil {
  573. app.Error(c, 500, err, err.Error())
  574. return
  575. }
  576. for i := 0; i < len(merchantCard); i++ {
  577. var reply models.MerchantCardListReply
  578. reply.RebateRate = merchantCard[i].RebateRate
  579. reply.ID = merchantCard[i].ID
  580. reply.QuotaNum = merchantCard[i].QuotaNum
  581. reply.MerchantCardName = merchantCard[i].MerchantCardName
  582. reply.CardPrice = merchantCard[i].CardPrice
  583. priceDec, err := decimal.NewFromString(merchantCard[i].CardPrice)
  584. if err != nil {
  585. app.Error(c, 500, err, err.Error())
  586. return
  587. }
  588. reply.RebateAmount = priceDec.Mul(decimal.NewFromInt(merchantCard[i].RebateRate).Div(decimal.NewFromInt(100))).String()
  589. outData = append(outData, reply)
  590. }
  591. app.PageOK(c, outData, count, pageIndex, pageSize, app.Success)
  592. }
  593. func UpdateMerchantCard(c *gin.Context) {
  594. var inData models.UpdateMerchantCardRequest
  595. var sqlData shanghu.MerchantCard
  596. err := c.ShouldBindJSON(&inData)
  597. if err != nil {
  598. app.Error(c, 400, err, err.Error())
  599. return
  600. }
  601. sqlData.ID = inData.ID
  602. sqlData.QuotaNum = inData.QuotaNum
  603. sqlData.UseRule = inData.UseRule
  604. sqlData.Picture = inData.Picture
  605. sqlData.Inventory = inData.Inventory
  606. sqlData.ActivityStartTime = inData.ActivityStartTime
  607. sqlData.ActivityEndTime = inData.ActivityEndTime
  608. err = sqlData.UpdateMerchantCard()
  609. if err != nil {
  610. app.Error(c, 400, err, err.Error())
  611. return
  612. }
  613. app.OK(c, nil, app.Success)
  614. }
  615. func UpdateMerchantCardWXYZ(c *gin.Context) {
  616. var inData models.UpdateMerchantCardWHXYRequest
  617. var sqlData shanghu.MerchantCard
  618. var whxy []models.WHXYStr
  619. err := c.ShouldBindJSON(&inData)
  620. if err != nil {
  621. app.Error(c, 400, err, err.Error())
  622. return
  623. }
  624. //"json: cannot unmarshal number -0.33279827286174424 into Go struct field WHXYStr.rotate of type int"
  625. err = json.Unmarshal([]byte(inData.Whxy), &whxy)
  626. if err != nil {
  627. app.Error(c, 400, err, err.Error())
  628. return
  629. }
  630. for i := 0; i < len(whxy); i++ {
  631. if !whxy[i].Y.IsZero() {
  632. sqlData.W = whxy[i].W.String()
  633. sqlData.X = whxy[i].X.String()
  634. sqlData.Y = whxy[i].Y.String()
  635. sqlData.H = whxy[i].H.String()
  636. }
  637. }
  638. sqlData.ID = inData.MerchantCardId
  639. err = sqlData.UpdateMerchantWHXY()
  640. if err != nil {
  641. app.Error(c, 400, err, err.Error())
  642. return
  643. }
  644. app.OK(c, nil, app.Success)
  645. }
  646. // 核销次数
  647. func CancelNumber(c *gin.Context) {
  648. var inData models.CancelCardRequest
  649. var sqlData shanghu.MerchantCard
  650. var log shanghu.CancelLog
  651. var qrMessage models.QRData
  652. var clientPay shanghu.ClientPayTrans
  653. err := c.ShouldBindJSON(&inData)
  654. if err != nil {
  655. app.Error(c, 400, err, err.Error())
  656. return
  657. }
  658. err = json.Unmarshal([]byte(inData.QRMessage), &qrMessage)
  659. if err != nil {
  660. app.Error(c, 400, err, err.Error())
  661. return
  662. }
  663. clientPay.MerchantCardID = qrMessage.MerchantId
  664. clientPay.ClientOpenID = qrMessage.ClientOpenId
  665. clientInfo, err := clientPay.GetPayTransByOpenid()
  666. if err != nil {
  667. app.Error(c, 400, err, err.Error())
  668. return
  669. }
  670. if clientInfo.ID == 0 {
  671. app.Error(c, 200, errors.New("用户未购买此卡"), "用户未购买此卡")
  672. return
  673. }
  674. sqlData.ID = qrMessage.MerchantId
  675. merchantInfo, err := sqlData.GetMerchantCard()
  676. if err != nil {
  677. app.Error(c, 500, err, err.Error())
  678. return
  679. }
  680. log.MerchantID = qrMessage.MerchantId
  681. log.ClientOpenID = qrMessage.ClientOpenId
  682. if log.GetNumber() >= merchantInfo.CancelNumber {
  683. app.Error(c, 200, errors.New("卡已使用完,请重新购买"), "卡已使用完,请重新购买")
  684. return
  685. }
  686. if merchantInfo.MerchantOpenID != inData.MerchantOpenId {
  687. app.Error(c, 200, errors.New("核销商家与发卡商家不一致"), "核销商家与发卡商家不一致")
  688. return
  689. }
  690. log.MerchantID = qrMessage.MerchantId
  691. log.ClientOpenID = qrMessage.ClientOpenId
  692. log.MerchantOpenID = inData.MerchantOpenId
  693. log.CreatedAt = time.Now()
  694. log.UpdatedAt = time.Now()
  695. _, err = log.Create()
  696. if err != nil {
  697. app.Error(c, 500, err, err.Error())
  698. return
  699. }
  700. app.OK(c, nil, "核销成功")
  701. }
  702. // 核销 v2
  703. func CancelNumberV2(c *gin.Context) {
  704. var inData models.CancelCardV2Request
  705. var sqlData shanghu.MerchantCard
  706. var log shanghu.CancelLog
  707. var cancelLog []shanghu.CancelLog
  708. var qrMessage models.QRData
  709. var clientPay shanghu.ClientPayTrans
  710. err := c.ShouldBindJSON(&inData)
  711. if err != nil {
  712. app.Error(c, 400, err, err.Error())
  713. return
  714. }
  715. if inData.Number <= 0 {
  716. app.Error(c, 400, errors.New("核销次数不能为0"), "核销次数不能为0")
  717. return
  718. }
  719. err = json.Unmarshal([]byte(inData.QRMessage), &qrMessage)
  720. if err != nil {
  721. app.Error(c, 400, err, err.Error())
  722. return
  723. }
  724. clientPay.MerchantCardID = qrMessage.MerchantId
  725. clientPay.ClientOpenID = qrMessage.ClientOpenId
  726. clientInfo, err := clientPay.GetPayTransByOpenid()
  727. if err != nil {
  728. app.Error(c, 400, err, err.Error())
  729. return
  730. }
  731. if clientInfo.ID == 0 {
  732. app.Error(c, 500, errors.New("用户未购买此卡"), "用户未购买此卡")
  733. return
  734. }
  735. sqlData.ID = qrMessage.MerchantId
  736. merchantInfo, err := sqlData.GetMerchantCard()
  737. if err != nil {
  738. app.Error(c, 500, err, err.Error())
  739. return
  740. }
  741. log.MerchantID = qrMessage.MerchantId
  742. log.ClientOpenID = qrMessage.ClientOpenId
  743. if log.GetNumber()+inData.Number > merchantInfo.CancelNumber {
  744. app.Error(c, 500, errors.New("剩余核销次数不够,请重新购买"), "剩余核销次数不够,请重新购买")
  745. return
  746. }
  747. //if merchantInfo.MerchantOpenID != inData.MerchantOpenId {
  748. // app.Error(c, 500, errors.New("核销商家与发卡商家不一致"), "核销商家与发卡商家不一致")
  749. // return
  750. //}
  751. //单次核销
  752. if merchantInfo.CancelType == shanghu.CancelTypeOne {
  753. }
  754. for i := 0; i < inData.Number; i++ {
  755. log.MerchantID = qrMessage.MerchantId
  756. log.ClientOpenID = qrMessage.ClientOpenId
  757. log.MerchantOpenID = inData.MerchantOpenId
  758. log.CreatedAt = time.Now()
  759. log.UpdatedAt = time.Now()
  760. cancelLog = append(cancelLog, log)
  761. }
  762. err = log.CreateBatches(cancelLog)
  763. if err != nil {
  764. app.Error(c, 500, err, err.Error())
  765. return
  766. }
  767. app.OK(c, nil, "核销成功")
  768. }
  769. // 充值核销
  770. func RechargeCancel(c *gin.Context) {
  771. var inData models.RechargeCancelRequest
  772. ticker := shanghu.MerchantClientTicket{}
  773. err := c.ShouldBindJSON(&inData)
  774. if err != nil {
  775. app.Error(c, 400, err, err.Error())
  776. return
  777. }
  778. err = ticker.CancelAccountTicket(inData)
  779. if err != nil {
  780. app.Error(c, 400, err, err.Error())
  781. return
  782. }
  783. app.OK(c, nil, "核销成功")
  784. }