merchant.card.go 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414
  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.SwiperList = swiperList
  155. rightButton.ImageURL = "/images/资源 24.png"
  156. outData.RightButton = append(outData.RightButton, rightButton)
  157. rightButton.ImageURL = "/images/资源 25.png"
  158. outData.RightButton = append(outData.RightButton, rightButton)
  159. rightButton.ImageURL = "/images/资源 26.png"
  160. outData.RightButton = append(outData.RightButton, rightButton)
  161. rightButton.ImageURL = "/images/资源 28.png"
  162. outData.RightButton = append(outData.RightButton, rightButton)
  163. var dataList models.DataList
  164. err = json.Unmarshal([]byte(merchantCard.CardProjectData), &project)
  165. if err != nil {
  166. fmt.Println("picture2")
  167. app.Error(c, 500, err, err.Error())
  168. return
  169. }
  170. //merchantCard.CardProjectData = ""
  171. for i := 0; i < len(project); i++ {
  172. var cardProject shanghu.MerchantCardProject
  173. cardProject.ID = project[i]
  174. projectInfo, err := cardProject.GetMerchantCardProject()
  175. if err != nil {
  176. app.Error(c, 500, err, err.Error())
  177. return
  178. }
  179. dataList.Name = projectInfo.ProjectName
  180. dataList.Count = 1
  181. dataList.Price = projectInfo.ProjectUnitPrice
  182. outData.DataList = append(outData.DataList, dataList)
  183. }
  184. var buy models.BuyKnowList
  185. buy.Icon = "/images/资源 46.png"
  186. buy.Title = "有效期"
  187. buy.Text = "至" + tools.TimeToStr(merchantCard.MerchantCardTime)
  188. outData.BuyKnowList = append(outData.BuyKnowList, buy)
  189. buy.Icon = "/images/资源 48.png"
  190. buy.Title = "限购数量"
  191. buy.Text = "每位用户限购1张"
  192. outData.BuyKnowList = append(outData.BuyKnowList, buy)
  193. buy.Icon = "/images/资源 49.png"
  194. buy.Title = "使用规则"
  195. buy.Text = merchantCard.UseRule
  196. outData.BuyKnowList = append(outData.BuyKnowList, buy)
  197. var shopData models.ShopData
  198. var merchant shanghu.Merchant
  199. merchant.OpenId = merchantCard.MerchantOpenID
  200. merchantInfo, err := merchant.GetMerchant()
  201. if err != nil {
  202. app.Error(c, 500, err, err.Error())
  203. return
  204. }
  205. shopData.Name = merchantInfo.MerchantName
  206. shopData.Address = merchantInfo.Address
  207. outData.ShopData = shopData
  208. outData.FenxiangShow = false
  209. outData.MerchantAmount, err = decimal.NewFromString(merchantCard.CardPrice)
  210. if err != nil {
  211. app.Error(c, 500, err, err.Error())
  212. return
  213. }
  214. outData.MerchantOriginalAmount = outData.MerchantAmount.Add(decimal.NewFromInt(50))
  215. var outQRData models.ClientCardQRReply
  216. val, err := pdd.DuoDuoGet("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wx25357518f710b8ce&secret=83c7dca801a6c93fbfac3c91f57a4eb2")
  217. if err != nil {
  218. app.Error(c, 500, err, err.Error())
  219. return
  220. }
  221. err = tools.JsonUnmarshal(val, &outQRData)
  222. if err != nil {
  223. app.Error(c, 500, err, err.Error())
  224. return
  225. }
  226. if outQRData.AccessToken == "" {
  227. app.Error(c, 500, err, "token error")
  228. return
  229. }
  230. url := "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + outQRData.AccessToken
  231. qr.CheckPath = true
  232. qr.Page = "pages/home/home"
  233. qr.EnvVersion = "release"
  234. qr.Scene = strconv.FormatInt(inData.MerchantId, 10)
  235. data, err := json.Marshal(&qr)
  236. if err != nil {
  237. app.Error(c, 500, err, err.Error())
  238. return
  239. }
  240. reply, err := common.Post(data, url)
  241. if err != nil {
  242. app.Error(c, 500, err, err.Error())
  243. return
  244. }
  245. if getQR.Errcode != 0 {
  246. app.Error(c, 500, err, getQR.Errmsg)
  247. return
  248. }
  249. encoded := base64.StdEncoding.EncodeToString(reply)
  250. outData.Base64Img = encoded
  251. //err = json.Unmarshal([]byte(merchantCard.CardProjectData), &project)
  252. //if err != nil {
  253. // app.Error(c, 500, err, err.Error())
  254. // return
  255. //}
  256. //
  257. //merchantCard.CardProjectData = ""
  258. //for i := 0; i < len(project); i++ {
  259. // var cardProject shanghu.MerchantCardProject
  260. // cardProject.ID = project[i]
  261. // projectInfo, err := cardProject.GetMerchantCardProject()
  262. // if err != nil {
  263. // app.Error(c, 500, err, err.Error())
  264. // return
  265. // }
  266. // merchantCard.CardProjectData = merchantCard.CardProjectData + projectInfo.ProjectName + "x1 "
  267. //}
  268. app.OK(c, outData, app.Success)
  269. }
  270. func MerchantCardList(c *gin.Context) {
  271. var inData models.MerchantCardListRequest
  272. var sqlData shanghu.MerchantCard
  273. err := c.ShouldBindJSON(&inData)
  274. if err != nil {
  275. app.Error(c, 400, err, err.Error())
  276. return
  277. }
  278. var pageSize = 10
  279. var pageIndex = 1
  280. if inData.PageSize != 0 {
  281. pageSize = inData.PageSize
  282. }
  283. if inData.PageIndex != 0 {
  284. pageIndex = inData.PageIndex
  285. }
  286. fmt.Println(inData.OpenId)
  287. sqlData.MerchantOpenID = inData.OpenId
  288. merchantCard, count, err := sqlData.GetOpenIdList(pageSize, pageIndex, inData.TypeList)
  289. if err != nil {
  290. app.Error(c, 500, err, err.Error())
  291. return
  292. }
  293. app.PageOK(c, merchantCard, count, pageIndex, pageSize, app.Success)
  294. }
  295. // c端获取卡信息
  296. func MerchantClientCardList(c *gin.Context) {
  297. var inData models.MerchantCardListRequest
  298. var sqlData shanghu.MerchantCard
  299. var outData []models.MerchantCardListReply
  300. err := c.ShouldBindJSON(&inData)
  301. if err != nil {
  302. app.Error(c, 400, err, err.Error())
  303. return
  304. }
  305. var pageSize = 10
  306. var pageIndex = 1
  307. if inData.PageSize != 0 {
  308. pageSize = inData.PageSize
  309. }
  310. if inData.PageIndex != 0 {
  311. pageIndex = inData.PageIndex
  312. }
  313. merchantCard, count, err := sqlData.ClientGetOpenIdList(pageSize, pageIndex, inData.TypeList)
  314. if err != nil {
  315. app.Error(c, 500, err, err.Error())
  316. return
  317. }
  318. for i := 0; i < len(merchantCard); i++ {
  319. var reply models.MerchantCardListReply
  320. reply.RebateRate = merchantCard[i].RebateRate
  321. reply.ID = merchantCard[i].ID
  322. reply.QuotaNum = merchantCard[i].QuotaNum
  323. reply.MerchantCardName = merchantCard[i].MerchantCardName
  324. reply.CardPrice = merchantCard[i].CardPrice
  325. priceDec, err := decimal.NewFromString(merchantCard[i].CardPrice)
  326. if err != nil {
  327. app.Error(c, 500, err, err.Error())
  328. return
  329. }
  330. reply.RebateAmount = priceDec.Mul(decimal.NewFromInt(merchantCard[i].RebateRate).Div(decimal.NewFromInt(100))).String()
  331. outData = append(outData, reply)
  332. }
  333. app.PageOK(c, outData, count, pageIndex, pageSize, app.Success)
  334. }
  335. func UpdateMerchantCard(c *gin.Context) {
  336. var inData models.UpdateMerchantCardRequest
  337. var sqlData shanghu.MerchantCard
  338. err := c.ShouldBindJSON(&inData)
  339. if err != nil {
  340. app.Error(c, 400, err, err.Error())
  341. return
  342. }
  343. sqlData.ID = inData.ID
  344. sqlData.QuotaNum = inData.QuotaNum
  345. sqlData.UseRule = inData.UseRule
  346. sqlData.Picture = inData.Picture
  347. sqlData.Inventory = inData.Inventory
  348. sqlData.ActivityStartTime = inData.ActivityStartTime
  349. sqlData.ActivityEndTime = inData.ActivityEndTime
  350. err = sqlData.UpdateMerchantCard()
  351. if err != nil {
  352. app.Error(c, 400, err, err.Error())
  353. return
  354. }
  355. app.OK(c, nil, app.Success)
  356. }