merchant.card.go 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447
  1. package shanghu
  2. import (
  3. "duoduo/apis/common"
  4. "duoduo/apis/pdd"
  5. "duoduo/apis/shanghu/models"
  6. "duoduo/models/shanghu"
  7. "duoduo/tools"
  8. "duoduo/tools/app"
  9. "encoding/base64"
  10. "encoding/json"
  11. "fmt"
  12. "github.com/gin-gonic/gin"
  13. "github.com/shopspring/decimal"
  14. "strconv"
  15. "time"
  16. )
  17. func CreateMerchantCard(c *gin.Context) {
  18. var inData models.CreateMerchantCardRequest
  19. var sqlData shanghu.MerchantCard
  20. err := c.ShouldBindJSON(&inData)
  21. if err != nil {
  22. app.Error(c, 400, err, err.Error())
  23. return
  24. }
  25. sqlData.CreatedAt = time.Now()
  26. sqlData.UpdatedAt = time.Now()
  27. jsStr, err := json.Marshal(inData.CardProjectData)
  28. if err != nil {
  29. app.Error(c, 400, err, "包含项目不能为空")
  30. return
  31. }
  32. //"json: cannot unmarshal string into Go struct field CreateMerchantCardRequest.inventory of type int64"
  33. //"json: cannot unmarshal bool into Go struct field CreateMerchantCardRequest.merchant_card_time of type string"
  34. //"json: cannot unmarshal string into Go struct field CreateMerchantCardRequest.inventory of type int64"
  35. sqlData.CardProjectData = string(jsStr)
  36. sqlData.CardPrice = inData.CardPrice
  37. sqlData.ActivityEndTime, err = tools.TimeToInt64(inData.ActivityEndTime, "2006-01-02")
  38. if err != nil {
  39. app.Error(c, 400, err, err.Error())
  40. return
  41. }
  42. sqlData.ActivityStartTime, err = tools.TimeToInt64(inData.ActivityStartTime, "2006-01-02")
  43. if err != nil {
  44. app.Error(c, 400, err, err.Error())
  45. return
  46. }
  47. sqlData.Inventory, err = strconv.ParseInt(inData.Inventory, 10, 64)
  48. if err != nil {
  49. app.Error(c, 400, err, err.Error())
  50. return
  51. }
  52. sqlData.MerchantCardTime, err = tools.TimeToInt64(inData.MerchantCardTime, "2006-01-02")
  53. if err != nil {
  54. app.Error(c, 400, err, err.Error())
  55. return
  56. }
  57. sqlData.MerchantOpenID = inData.MerchantOpenID
  58. sqlData.Picture = inData.Picture
  59. sqlData.QuotaNum, err = strconv.ParseInt(inData.QuotaNum, 10, 64)
  60. if err != nil {
  61. app.Error(c, 400, err, err.Error())
  62. return
  63. }
  64. sqlData.RebateRate, err = strconv.ParseInt(inData.RebateRate, 10, 64)
  65. if err != nil {
  66. app.Error(c, 400, err, err.Error())
  67. return
  68. }
  69. sqlData.UseRule = inData.UseRule
  70. sqlData.MerchantCardName = inData.MerchantCardName
  71. _, err = sqlData.Create()
  72. if err != nil {
  73. app.Error(c, 500, err, err.Error())
  74. return
  75. }
  76. app.OK(c, nil, app.Success)
  77. }
  78. func GetMerchantCard(c *gin.Context) {
  79. var inData models.GetMerchantCardRequest
  80. var outData models.GetMerchantCardReply
  81. var sqlData shanghu.MerchantCard
  82. var project []int64
  83. err := c.ShouldBindJSON(&inData)
  84. if err != nil {
  85. app.Error(c, 400, err, err.Error())
  86. return
  87. }
  88. sqlData.ID = inData.MerchantId
  89. merchantCard, err := sqlData.GetMerchantCard()
  90. if err != nil {
  91. app.Error(c, 500, err, err.Error())
  92. return
  93. }
  94. err = json.Unmarshal([]byte(merchantCard.CardProjectData), &project)
  95. if err != nil {
  96. app.Error(c, 500, err, err.Error())
  97. return
  98. }
  99. merchantCard.CardProjectData = ""
  100. for i := 0; i < len(project); i++ {
  101. var cardProject shanghu.MerchantCardProject
  102. cardProject.ID = project[i]
  103. projectInfo, err := cardProject.GetMerchantCardProject()
  104. if err != nil {
  105. app.Error(c, 500, err, err.Error())
  106. return
  107. }
  108. merchantCard.CardProjectData = merchantCard.CardProjectData + projectInfo.ProjectName + "x1 "
  109. }
  110. outData.CardProjectData = merchantCard.CardProjectData
  111. outData.MerchantCardName = merchantCard.MerchantCardName
  112. outData.MerchantCardTime = time.Unix(merchantCard.MerchantCardTime, 0).Format("2006-01-02")
  113. outData.ActivityEndTime = time.Unix(merchantCard.ActivityEndTime, 0).Format("2006-01-02")
  114. outData.ActivityStartTime = time.Unix(merchantCard.ActivityStartTime, 0).Format("2006-01-02")
  115. outData.Picture = merchantCard.Picture
  116. outData.UseRule = merchantCard.UseRule
  117. outData.QuotaNum = merchantCard.QuotaNum
  118. outData.Inventory = merchantCard.Inventory
  119. outData.RebateRate = merchantCard.RebateRate
  120. outData.CardPrice = merchantCard.CardPrice
  121. app.OK(c, outData, app.Success)
  122. }
  123. func GetMerchantCanvasCard(c *gin.Context) {
  124. var inData models.GetMerchantCardRequest
  125. var outData models.GetMerchantCanvasCardReply
  126. var sqlData shanghu.MerchantCard
  127. var project []int64
  128. var qr models.QRRequest
  129. var getQR models.GetQRRequest
  130. err := c.ShouldBindJSON(&inData)
  131. if err != nil {
  132. app.Error(c, 400, err, err.Error())
  133. return
  134. }
  135. sqlData.ID = inData.MerchantId
  136. merchantCard, err := sqlData.GetMerchantCard()
  137. if err != nil {
  138. app.Error(c, 500, err, err.Error())
  139. return
  140. }
  141. outData.Static.Background = "/images/背景.jpg"
  142. var swiperList []models.SwiperList
  143. var rightButton models.RightButton
  144. var swiper models.SwiperList
  145. swiper.ID = 0
  146. swiper.URL = merchantCard.Picture
  147. swiperList = append(swiperList, swiper)
  148. //err = json.Unmarshal([]byte(merchantCard.Picture), &swiperList)
  149. //if err != nil {
  150. // fmt.Println("picture")
  151. // app.Error(c, 500, err, err.Error())
  152. // return
  153. //}
  154. outData.Inventory = merchantCard.Inventory
  155. outData.SwiperList = swiperList
  156. rightButton.ImageURL = "/images/资源 24.png"
  157. outData.RightButton = append(outData.RightButton, rightButton)
  158. rightButton.ImageURL = "/images/资源 25.png"
  159. outData.RightButton = append(outData.RightButton, rightButton)
  160. rightButton.ImageURL = "/images/资源 26.png"
  161. outData.RightButton = append(outData.RightButton, rightButton)
  162. rightButton.ImageURL = "/images/资源 28.png"
  163. outData.RightButton = append(outData.RightButton, rightButton)
  164. var dataList models.DataList
  165. err = json.Unmarshal([]byte(merchantCard.CardProjectData), &project)
  166. if err != nil {
  167. fmt.Println("picture2")
  168. app.Error(c, 500, err, err.Error())
  169. return
  170. }
  171. //merchantCard.CardProjectData = ""
  172. for i := 0; i < len(project); i++ {
  173. var cardProject shanghu.MerchantCardProject
  174. cardProject.ID = project[i]
  175. projectInfo, err := cardProject.GetMerchantCardProject()
  176. if err != nil {
  177. app.Error(c, 500, err, err.Error())
  178. return
  179. }
  180. dataList.Name = projectInfo.ProjectName
  181. dataList.Count = 1
  182. dataList.Price = projectInfo.ProjectUnitPrice
  183. outData.DataList = append(outData.DataList, dataList)
  184. }
  185. var buy models.BuyKnowList
  186. buy.Icon = "/images/资源 46.png"
  187. buy.Title = "有效期"
  188. buy.Text = "至" + tools.TimeToStr(merchantCard.MerchantCardTime)
  189. outData.BuyKnowList = append(outData.BuyKnowList, buy)
  190. buy.Icon = "/images/资源 48.png"
  191. buy.Title = "限购数量"
  192. buy.Text = "每位用户限购1张"
  193. outData.BuyKnowList = append(outData.BuyKnowList, buy)
  194. buy.Icon = "/images/资源 49.png"
  195. buy.Title = "使用规则"
  196. buy.Text = merchantCard.UseRule
  197. outData.BuyKnowList = append(outData.BuyKnowList, buy)
  198. var shopData models.ShopData
  199. var merchant shanghu.Merchant
  200. merchant.OpenId = merchantCard.MerchantOpenID
  201. merchantInfo, err := merchant.GetMerchant()
  202. if err != nil {
  203. app.Error(c, 500, err, err.Error())
  204. return
  205. }
  206. shopData.Name = merchantInfo.MerchantName
  207. shopData.Address = merchantInfo.Address
  208. outData.ShopData = shopData
  209. outData.FenxiangShow = false
  210. outData.MerchantAmount, err = decimal.NewFromString(merchantCard.CardPrice)
  211. if err != nil {
  212. app.Error(c, 500, err, err.Error())
  213. return
  214. }
  215. outData.MerchantOriginalAmount = outData.MerchantAmount.Add(decimal.NewFromInt(50))
  216. var outQRData models.ClientCardQRReply
  217. val, err := pdd.DuoDuoGet("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wx25357518f710b8ce&secret=83c7dca801a6c93fbfac3c91f57a4eb2")
  218. if err != nil {
  219. app.Error(c, 500, err, err.Error())
  220. return
  221. }
  222. err = tools.JsonUnmarshal(val, &outQRData)
  223. if err != nil {
  224. app.Error(c, 500, err, err.Error())
  225. return
  226. }
  227. if outQRData.AccessToken == "" {
  228. app.Error(c, 500, err, "token error")
  229. return
  230. }
  231. url := "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + outQRData.AccessToken
  232. //1.原始码 不需要购买直接分享 ==原生码直接分享
  233. //2.code 本人openid 需要购买才能分享
  234. //3.空的 官方邀请码
  235. //返回邀请码
  236. if inData.Code == "yuanshima" { //可以分享 code 等于自己的与yuanshima的都给平台
  237. outData.IsShare = true
  238. outData.InvitationCode = "yuanshima"
  239. } else { //查询购买记录,没有购买过不让分享
  240. var payTrans shanghu.ClientPayTrans
  241. var userInfo shanghu.MerchantClientUser
  242. payTrans.MerchantCardID = inData.MerchantId
  243. payTrans.ClientOpenID = inData.Code
  244. payInfo, _ := payTrans.GetPayTransByOpenid()
  245. if payInfo.ID <= 0 {
  246. outData.IsShare = false
  247. } else {
  248. outData.IsShare = true
  249. }
  250. userInfo.ClientOpenID = inData.Code
  251. userInfoReply, _ := userInfo.GetUserInfo()
  252. outData.InvitationCode = userInfoReply.Code
  253. }
  254. //点击购买的时候把code给进去把 原始码购买属于平台
  255. qr.CheckPath = true
  256. qr.Page = "pages/home/home"
  257. qr.EnvVersion = "release"
  258. qr.Scene = "id-" + strconv.FormatInt(inData.MerchantId, 10) + "-c-" + outData.InvitationCode
  259. fmt.Println(qr.Scene)
  260. data, err := json.Marshal(&qr)
  261. if err != nil {
  262. app.Error(c, 500, err, err.Error())
  263. return
  264. }
  265. reply, err := common.Post(data, url)
  266. if err != nil {
  267. app.Error(c, 500, err, err.Error())
  268. return
  269. }
  270. if getQR.Errcode != 0 {
  271. app.Error(c, 500, err, getQR.Errmsg)
  272. return
  273. }
  274. encoded := base64.StdEncoding.EncodeToString(reply)
  275. outData.Base64Img = encoded
  276. //err = json.Unmarshal([]byte(merchantCard.CardProjectData), &project)
  277. //if err != nil {
  278. // app.Error(c, 500, err, err.Error())
  279. // return
  280. //}
  281. //
  282. //merchantCard.CardProjectData = ""
  283. //for i := 0; i < len(project); i++ {
  284. // var cardProject shanghu.MerchantCardProject
  285. // cardProject.ID = project[i]
  286. // projectInfo, err := cardProject.GetMerchantCardProject()
  287. // if err != nil {
  288. // app.Error(c, 500, err, err.Error())
  289. // return
  290. // }
  291. // merchantCard.CardProjectData = merchantCard.CardProjectData + projectInfo.ProjectName + "x1 "
  292. //}
  293. app.OK(c, outData, app.Success)
  294. }
  295. func MerchantCardList(c *gin.Context) {
  296. var inData models.MerchantCardListRequest
  297. var sqlData shanghu.MerchantCard
  298. err := c.ShouldBindJSON(&inData)
  299. if err != nil {
  300. app.Error(c, 400, err, err.Error())
  301. return
  302. }
  303. var pageSize = 10
  304. var pageIndex = 1
  305. if inData.PageSize != 0 {
  306. pageSize = inData.PageSize
  307. }
  308. if inData.PageIndex != 0 {
  309. pageIndex = inData.PageIndex
  310. }
  311. fmt.Println(inData.OpenId)
  312. sqlData.MerchantOpenID = inData.OpenId
  313. merchantCard, count, err := sqlData.GetOpenIdList(pageSize, pageIndex, inData.TypeList)
  314. if err != nil {
  315. app.Error(c, 500, err, err.Error())
  316. return
  317. }
  318. app.PageOK(c, merchantCard, count, pageIndex, pageSize, app.Success)
  319. }
  320. // c端获取卡信息
  321. func MerchantClientCardList(c *gin.Context) {
  322. var inData models.MerchantCardListRequest
  323. var sqlData shanghu.MerchantCard
  324. var outData []models.MerchantCardListReply
  325. err := c.ShouldBindJSON(&inData)
  326. if err != nil {
  327. app.Error(c, 400, err, err.Error())
  328. return
  329. }
  330. var pageSize = 10
  331. var pageIndex = 1
  332. if inData.PageSize != 0 {
  333. pageSize = inData.PageSize
  334. }
  335. if inData.PageIndex != 0 {
  336. pageIndex = inData.PageIndex
  337. }
  338. merchantCard, count, err := sqlData.ClientGetOpenIdList(pageSize, pageIndex, inData.TypeList)
  339. if err != nil {
  340. app.Error(c, 500, err, err.Error())
  341. return
  342. }
  343. for i := 0; i < len(merchantCard); i++ {
  344. var reply models.MerchantCardListReply
  345. reply.RebateRate = merchantCard[i].RebateRate
  346. reply.ID = merchantCard[i].ID
  347. reply.QuotaNum = merchantCard[i].QuotaNum
  348. reply.MerchantCardName = merchantCard[i].MerchantCardName
  349. reply.CardPrice = merchantCard[i].CardPrice
  350. priceDec, err := decimal.NewFromString(merchantCard[i].CardPrice)
  351. if err != nil {
  352. app.Error(c, 500, err, err.Error())
  353. return
  354. }
  355. reply.RebateAmount = priceDec.Mul(decimal.NewFromInt(merchantCard[i].RebateRate).Div(decimal.NewFromInt(100))).String()
  356. outData = append(outData, reply)
  357. }
  358. app.PageOK(c, outData, count, pageIndex, pageSize, app.Success)
  359. }
  360. func UpdateMerchantCard(c *gin.Context) {
  361. var inData models.UpdateMerchantCardRequest
  362. var sqlData shanghu.MerchantCard
  363. err := c.ShouldBindJSON(&inData)
  364. if err != nil {
  365. app.Error(c, 400, err, err.Error())
  366. return
  367. }
  368. sqlData.ID = inData.ID
  369. sqlData.QuotaNum = inData.QuotaNum
  370. sqlData.UseRule = inData.UseRule
  371. sqlData.Picture = inData.Picture
  372. sqlData.Inventory = inData.Inventory
  373. sqlData.ActivityStartTime = inData.ActivityStartTime
  374. sqlData.ActivityEndTime = inData.ActivityEndTime
  375. err = sqlData.UpdateMerchantCard()
  376. if err != nil {
  377. app.Error(c, 400, err, err.Error())
  378. return
  379. }
  380. app.OK(c, nil, app.Success)
  381. }