merchant.card.go 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427
  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 需要购买才能分享
  234. //3.空的
  235. if inData.Code == "原始码" { //可以分享
  236. outData.IsShare = true
  237. } else { //查询购买记录,没有购买过不让分享
  238. outData.IsShare = false
  239. }
  240. //点击购买的时候把code给进去把 原始码购买属于平台
  241. qr.CheckPath = true
  242. qr.Page = "pages/canvas/canvas"
  243. qr.EnvVersion = "release"
  244. qr.Scene = "id=" + strconv.FormatInt(inData.MerchantId, 10) + "&code=" + inData.Code
  245. data, err := json.Marshal(&qr)
  246. if err != nil {
  247. app.Error(c, 500, err, err.Error())
  248. return
  249. }
  250. reply, err := common.Post(data, url)
  251. if err != nil {
  252. app.Error(c, 500, err, err.Error())
  253. return
  254. }
  255. if getQR.Errcode != 0 {
  256. app.Error(c, 500, err, getQR.Errmsg)
  257. return
  258. }
  259. encoded := base64.StdEncoding.EncodeToString(reply)
  260. outData.Base64Img = encoded
  261. //err = json.Unmarshal([]byte(merchantCard.CardProjectData), &project)
  262. //if err != nil {
  263. // app.Error(c, 500, err, err.Error())
  264. // return
  265. //}
  266. //
  267. //merchantCard.CardProjectData = ""
  268. //for i := 0; i < len(project); i++ {
  269. // var cardProject shanghu.MerchantCardProject
  270. // cardProject.ID = project[i]
  271. // projectInfo, err := cardProject.GetMerchantCardProject()
  272. // if err != nil {
  273. // app.Error(c, 500, err, err.Error())
  274. // return
  275. // }
  276. // merchantCard.CardProjectData = merchantCard.CardProjectData + projectInfo.ProjectName + "x1 "
  277. //}
  278. app.OK(c, outData, app.Success)
  279. }
  280. func MerchantCardList(c *gin.Context) {
  281. var inData models.MerchantCardListRequest
  282. var sqlData shanghu.MerchantCard
  283. err := c.ShouldBindJSON(&inData)
  284. if err != nil {
  285. app.Error(c, 400, err, err.Error())
  286. return
  287. }
  288. var pageSize = 10
  289. var pageIndex = 1
  290. if inData.PageSize != 0 {
  291. pageSize = inData.PageSize
  292. }
  293. if inData.PageIndex != 0 {
  294. pageIndex = inData.PageIndex
  295. }
  296. fmt.Println(inData.OpenId)
  297. sqlData.MerchantOpenID = inData.OpenId
  298. merchantCard, count, err := sqlData.GetOpenIdList(pageSize, pageIndex, inData.TypeList)
  299. if err != nil {
  300. app.Error(c, 500, err, err.Error())
  301. return
  302. }
  303. app.PageOK(c, merchantCard, count, pageIndex, pageSize, app.Success)
  304. }
  305. // c端获取卡信息
  306. func MerchantClientCardList(c *gin.Context) {
  307. var inData models.MerchantCardListRequest
  308. var sqlData shanghu.MerchantCard
  309. var outData []models.MerchantCardListReply
  310. err := c.ShouldBindJSON(&inData)
  311. if err != nil {
  312. app.Error(c, 400, err, err.Error())
  313. return
  314. }
  315. var pageSize = 10
  316. var pageIndex = 1
  317. if inData.PageSize != 0 {
  318. pageSize = inData.PageSize
  319. }
  320. if inData.PageIndex != 0 {
  321. pageIndex = inData.PageIndex
  322. }
  323. merchantCard, count, err := sqlData.ClientGetOpenIdList(pageSize, pageIndex, inData.TypeList)
  324. if err != nil {
  325. app.Error(c, 500, err, err.Error())
  326. return
  327. }
  328. for i := 0; i < len(merchantCard); i++ {
  329. var reply models.MerchantCardListReply
  330. reply.RebateRate = merchantCard[i].RebateRate
  331. reply.ID = merchantCard[i].ID
  332. reply.QuotaNum = merchantCard[i].QuotaNum
  333. reply.MerchantCardName = merchantCard[i].MerchantCardName
  334. reply.CardPrice = merchantCard[i].CardPrice
  335. priceDec, err := decimal.NewFromString(merchantCard[i].CardPrice)
  336. if err != nil {
  337. app.Error(c, 500, err, err.Error())
  338. return
  339. }
  340. reply.RebateAmount = priceDec.Mul(decimal.NewFromInt(merchantCard[i].RebateRate).Div(decimal.NewFromInt(100))).String()
  341. outData = append(outData, reply)
  342. }
  343. app.PageOK(c, outData, count, pageIndex, pageSize, app.Success)
  344. }
  345. func UpdateMerchantCard(c *gin.Context) {
  346. var inData models.UpdateMerchantCardRequest
  347. var sqlData shanghu.MerchantCard
  348. err := c.ShouldBindJSON(&inData)
  349. if err != nil {
  350. app.Error(c, 400, err, err.Error())
  351. return
  352. }
  353. sqlData.ID = inData.ID
  354. sqlData.QuotaNum = inData.QuotaNum
  355. sqlData.UseRule = inData.UseRule
  356. sqlData.Picture = inData.Picture
  357. sqlData.Inventory = inData.Inventory
  358. sqlData.ActivityStartTime = inData.ActivityStartTime
  359. sqlData.ActivityEndTime = inData.ActivityEndTime
  360. err = sqlData.UpdateMerchantCard()
  361. if err != nil {
  362. app.Error(c, 400, err, err.Error())
  363. return
  364. }
  365. app.OK(c, nil, app.Success)
  366. }