merchant.card.go 11 KB

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