merchant.card.go 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449
  1. package shanghu
  2. import (
  3. "duoduo/apis/shanghu/models"
  4. "duoduo/models/shanghu"
  5. "duoduo/tools"
  6. "duoduo/tools/app"
  7. "encoding/json"
  8. "fmt"
  9. "github.com/gin-gonic/gin"
  10. "github.com/shopspring/decimal"
  11. "strconv"
  12. "time"
  13. )
  14. func CreateMerchantCard(c *gin.Context) {
  15. var inData models.CreateMerchantCardRequest
  16. var sqlData shanghu.MerchantCard
  17. err := c.ShouldBindJSON(&inData)
  18. if err != nil {
  19. app.Error(c, 400, err, err.Error())
  20. return
  21. }
  22. sqlData.CreatedAt = time.Now()
  23. sqlData.UpdatedAt = time.Now()
  24. jsStr, err := json.Marshal(inData.CardProjectData)
  25. if err != nil {
  26. app.Error(c, 400, err, "包含项目不能为空")
  27. return
  28. }
  29. //"json: cannot unmarshal string into Go struct field CreateMerchantCardRequest.inventory of type int64"
  30. //"json: cannot unmarshal bool into Go struct field CreateMerchantCardRequest.merchant_card_time of type string"
  31. //"json: cannot unmarshal string into Go struct field CreateMerchantCardRequest.inventory of type int64"
  32. sqlData.CardProjectData = string(jsStr)
  33. sqlData.CardPrice = inData.CardPrice
  34. sqlData.ActivityEndTime, err = tools.TimeToInt64(inData.ActivityEndTime, "2006-01-02")
  35. if err != nil {
  36. app.Error(c, 400, err, err.Error())
  37. return
  38. }
  39. sqlData.ActivityStartTime, err = tools.TimeToInt64(inData.ActivityStartTime, "2006-01-02")
  40. if err != nil {
  41. app.Error(c, 400, err, err.Error())
  42. return
  43. }
  44. sqlData.Inventory, err = strconv.ParseInt(inData.Inventory, 10, 64)
  45. if err != nil {
  46. app.Error(c, 400, err, err.Error())
  47. return
  48. }
  49. sqlData.MerchantCardTime, err = tools.TimeToInt64(inData.MerchantCardTime, "2006-01-02")
  50. if err != nil {
  51. app.Error(c, 400, err, err.Error())
  52. return
  53. }
  54. sqlData.MerchantOpenID = inData.MerchantOpenID
  55. sqlData.Picture = inData.Picture
  56. sqlData.QuotaNum, err = strconv.ParseInt(inData.QuotaNum, 10, 64)
  57. if err != nil {
  58. app.Error(c, 400, err, err.Error())
  59. return
  60. }
  61. sqlData.RebateRate, err = strconv.ParseInt(inData.RebateRate, 10, 64)
  62. if err != nil {
  63. app.Error(c, 400, err, err.Error())
  64. return
  65. }
  66. sqlData.UseRule = inData.UseRule
  67. sqlData.MerchantCardName = inData.MerchantCardName
  68. _, err = sqlData.Create()
  69. if err != nil {
  70. app.Error(c, 500, err, err.Error())
  71. return
  72. }
  73. app.OK(c, nil, app.Success)
  74. }
  75. func GetMerchantCard(c *gin.Context) {
  76. var inData models.GetMerchantCardRequest
  77. var outData models.GetMerchantCardReply
  78. var sqlData shanghu.MerchantCard
  79. var project []int64
  80. err := c.ShouldBindJSON(&inData)
  81. if err != nil {
  82. app.Error(c, 400, err, err.Error())
  83. return
  84. }
  85. sqlData.ID = inData.MerchantId
  86. merchantCard, err := sqlData.GetMerchantCard()
  87. if err != nil {
  88. app.Error(c, 500, err, err.Error())
  89. return
  90. }
  91. err = json.Unmarshal([]byte(merchantCard.CardProjectData), &project)
  92. if err != nil {
  93. app.Error(c, 500, err, err.Error())
  94. return
  95. }
  96. merchantCard.CardProjectData = ""
  97. for i := 0; i < len(project); i++ {
  98. var cardProject shanghu.MerchantCardProject
  99. cardProject.ID = project[i]
  100. projectInfo, err := cardProject.GetMerchantCardProject()
  101. if err != nil {
  102. app.Error(c, 500, err, err.Error())
  103. return
  104. }
  105. merchantCard.CardProjectData = merchantCard.CardProjectData + projectInfo.ProjectName + "x1 "
  106. }
  107. outData.CardProjectData = merchantCard.CardProjectData
  108. outData.MerchantCardName = merchantCard.MerchantCardName
  109. outData.MerchantCardTime = time.Unix(merchantCard.MerchantCardTime, 0).Format("2006-01-02")
  110. outData.ActivityEndTime = time.Unix(merchantCard.ActivityEndTime, 0).Format("2006-01-02")
  111. outData.ActivityStartTime = time.Unix(merchantCard.ActivityStartTime, 0).Format("2006-01-02")
  112. outData.Picture = merchantCard.Picture
  113. outData.UseRule = merchantCard.UseRule
  114. outData.QuotaNum = merchantCard.QuotaNum
  115. outData.Inventory = merchantCard.Inventory
  116. outData.RebateRate = merchantCard.RebateRate
  117. outData.CardPrice = merchantCard.CardPrice
  118. app.OK(c, outData, app.Success)
  119. }
  120. func GetMerchantCanvasCard(c *gin.Context) {
  121. var inData models.GetMerchantCardRequest
  122. var outData models.GetMerchantCanvasCardReply
  123. var sqlData shanghu.MerchantCard
  124. var project []int64
  125. err := c.ShouldBindJSON(&inData)
  126. if err != nil {
  127. app.Error(c, 400, err, err.Error())
  128. return
  129. }
  130. sqlData.ID = inData.MerchantId
  131. merchantCard, err := sqlData.GetMerchantCard()
  132. if err != nil {
  133. app.Error(c, 500, err, err.Error())
  134. return
  135. }
  136. // result: {
  137. // // 背景
  138. // static: {
  139. // background: "../../images/背景.jpg"
  140. // },
  141. // // 轮播图
  142. // swiperList: [{
  143. // id: 0,
  144. // url: 'http://lingyang.shisanmiao.com/shanghuka/%E8%B5%84%E6%BA%90%2045.png'
  145. // }, {
  146. // id: 1,
  147. // url: 'http://lingyang.shisanmiao.com/shanghuka/%E8%B5%84%E6%BA%90%2045.png',
  148. // }],
  149. // // 按钮数据
  150. // rightButton: [{
  151. // imageUrl: '../../images/资源 24.png',
  152. // },
  153. // {
  154. // imageUrl: '../../images/资源 25.png',
  155. // },
  156. // {
  157. // imageUrl: '../../images/资源 26.png',
  158. // },
  159. // {
  160. // imageUrl: '../../images/资源 28.png',
  161. // },
  162. // ],
  163. // // 套餐内容
  164. // dataList: [{
  165. // name: '小份黄焖鸡小份黄焖鸡小份',
  166. // count: 3,
  167. // price: '60'
  168. // },
  169. // {
  170. // name: '中份黄焖鸡小份黄焖鸡',
  171. // count: 3,
  172. // price: '70'
  173. // },
  174. // {
  175. // name: '大份黄焖鸡小份黄焖鸡',
  176. // count: 3,
  177. // price: '80'
  178. // },
  179. //
  180. //
  181. // ],
  182. //
  183. // // 购买须知
  184. // buyKnowList: [{
  185. // icon: '../../images/资源 46.png',
  186. // title: '有效期',
  187. // text: '至2021-0520 23:00'
  188. // },
  189. // {
  190. // icon: '../../images/资源 47.png',
  191. // title: '使用时间',
  192. // text: '周一至周日10:00-23:00可用'
  193. // },
  194. // {
  195. // icon: '../../images/资源 48.png',
  196. // title: '限购数量',
  197. // text: '每位用户限购1张'
  198. // },
  199. // {
  200. // icon: '../../images/资源 49.png',
  201. // title: '使用规则',
  202. // text: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
  203. // },
  204. // ],
  205. //
  206. // // 使用门店
  207. // shopData: {
  208. // imageUrl: '',
  209. // name: '黄焖鸡米饭(高新万达店)',
  210. // starRating: 4,
  211. // address: '地点:济南市高新区工业南路340号1层',
  212. // distance: '1.9km'
  213. // },
  214. //
  215. // // 二维码变量
  216. // base64Img: "",
  217. //
  218. // // 图片弹框
  219. // fenxiangShow: false,
  220. // }
  221. outData.Static.Background = "/images/背景.jpg"
  222. var swiperList []models.SwiperList
  223. var rightButton models.RightButton
  224. var swiper models.SwiperList
  225. swiper.ID = 0
  226. swiper.URL = merchantCard.Picture
  227. swiperList = append(swiperList, swiper)
  228. //err = json.Unmarshal([]byte(merchantCard.Picture), &swiperList)
  229. //if err != nil {
  230. // fmt.Println("picture")
  231. // app.Error(c, 500, err, err.Error())
  232. // return
  233. //}
  234. outData.SwiperList = swiperList
  235. rightButton.ImageURL = "/images/资源 24.png"
  236. outData.RightButton = append(outData.RightButton, rightButton)
  237. rightButton.ImageURL = "/images/资源 25.png"
  238. outData.RightButton = append(outData.RightButton, rightButton)
  239. rightButton.ImageURL = "/images/资源 26.png"
  240. outData.RightButton = append(outData.RightButton, rightButton)
  241. rightButton.ImageURL = "/images/资源 28.png"
  242. outData.RightButton = append(outData.RightButton, rightButton)
  243. var dataList models.DataList
  244. err = json.Unmarshal([]byte(merchantCard.CardProjectData), &project)
  245. if err != nil {
  246. fmt.Println("picture2")
  247. app.Error(c, 500, err, err.Error())
  248. return
  249. }
  250. //merchantCard.CardProjectData = ""
  251. for i := 0; i < len(project); i++ {
  252. var cardProject shanghu.MerchantCardProject
  253. cardProject.ID = project[i]
  254. projectInfo, err := cardProject.GetMerchantCardProject()
  255. if err != nil {
  256. app.Error(c, 500, err, err.Error())
  257. return
  258. }
  259. dataList.Name = projectInfo.ProjectName
  260. dataList.Count = 1
  261. dataList.Price = projectInfo.ProjectUnitPrice
  262. outData.DataList = append(outData.DataList, dataList)
  263. }
  264. var buy models.BuyKnowList
  265. buy.Icon = "/images/资源 46.png"
  266. buy.Title = "有效期"
  267. buy.Text = "至" + tools.TimeToStr(merchantCard.MerchantCardTime)
  268. outData.BuyKnowList = append(outData.BuyKnowList, buy)
  269. buy.Icon = "/images/资源 48.png"
  270. buy.Title = "限购数量"
  271. buy.Text = "每位用户限购1张"
  272. outData.BuyKnowList = append(outData.BuyKnowList, buy)
  273. buy.Icon = "/images/资源 49.png"
  274. buy.Title = "使用规则"
  275. buy.Text = merchantCard.UseRule
  276. outData.BuyKnowList = append(outData.BuyKnowList, buy)
  277. var shopData models.ShopData
  278. var merchant shanghu.Merchant
  279. merchant.OpenId = merchantCard.MerchantOpenID
  280. merchantInfo, err := merchant.GetMerchant()
  281. if err != nil {
  282. app.Error(c, 500, err, err.Error())
  283. return
  284. }
  285. shopData.Name = merchantInfo.MerchantName
  286. shopData.Address = merchantInfo.Address
  287. outData.ShopData = shopData
  288. outData.FenxiangShow = false
  289. outData.MerchantAmount, err = decimal.NewFromString(merchantCard.CardPrice)
  290. if err != nil {
  291. app.Error(c, 500, err, err.Error())
  292. return
  293. }
  294. outData.MerchantOriginalAmount = outData.MerchantAmount.Add(decimal.NewFromInt(50))
  295. //err = json.Unmarshal([]byte(merchantCard.CardProjectData), &project)
  296. //if err != nil {
  297. // app.Error(c, 500, err, err.Error())
  298. // return
  299. //}
  300. //
  301. //merchantCard.CardProjectData = ""
  302. //for i := 0; i < len(project); i++ {
  303. // var cardProject shanghu.MerchantCardProject
  304. // cardProject.ID = project[i]
  305. // projectInfo, err := cardProject.GetMerchantCardProject()
  306. // if err != nil {
  307. // app.Error(c, 500, err, err.Error())
  308. // return
  309. // }
  310. // merchantCard.CardProjectData = merchantCard.CardProjectData + projectInfo.ProjectName + "x1 "
  311. //}
  312. app.OK(c, outData, app.Success)
  313. }
  314. func MerchantCardList(c *gin.Context) {
  315. var inData models.MerchantCardListRequest
  316. var sqlData shanghu.MerchantCard
  317. err := c.ShouldBindJSON(&inData)
  318. if err != nil {
  319. app.Error(c, 400, err, err.Error())
  320. return
  321. }
  322. var pageSize = 10
  323. var pageIndex = 1
  324. if inData.PageSize != 0 {
  325. pageSize = inData.PageSize
  326. }
  327. if inData.PageIndex != 0 {
  328. pageIndex = inData.PageIndex
  329. }
  330. fmt.Println(inData.OpenId)
  331. sqlData.MerchantOpenID = inData.OpenId
  332. merchantCard, count, err := sqlData.GetOpenIdList(pageSize, pageIndex, inData.TypeList)
  333. if err != nil {
  334. app.Error(c, 500, err, err.Error())
  335. return
  336. }
  337. app.PageOK(c, merchantCard, count, pageIndex, pageSize, app.Success)
  338. }
  339. // c端获取卡信息
  340. func MerchantClientCardList(c *gin.Context) {
  341. var inData models.MerchantCardListRequest
  342. var sqlData shanghu.MerchantCard
  343. var outData []models.MerchantCardListReply
  344. err := c.ShouldBindJSON(&inData)
  345. if err != nil {
  346. app.Error(c, 400, err, err.Error())
  347. return
  348. }
  349. var pageSize = 10
  350. var pageIndex = 1
  351. if inData.PageSize != 0 {
  352. pageSize = inData.PageSize
  353. }
  354. if inData.PageIndex != 0 {
  355. pageIndex = inData.PageIndex
  356. }
  357. merchantCard, count, err := sqlData.ClientGetOpenIdList(pageSize, pageIndex, inData.TypeList)
  358. if err != nil {
  359. app.Error(c, 500, err, err.Error())
  360. return
  361. }
  362. for i := 0; i < len(merchantCard); i++ {
  363. var reply models.MerchantCardListReply
  364. reply.RebateRate = merchantCard[i].RebateRate
  365. reply.ID = merchantCard[i].ID
  366. reply.QuotaNum = merchantCard[i].QuotaNum
  367. reply.MerchantCardName = merchantCard[i].MerchantCardName
  368. reply.CardPrice = merchantCard[i].CardPrice
  369. priceDec, err := decimal.NewFromString(merchantCard[i].CardPrice)
  370. if err != nil {
  371. app.Error(c, 500, err, err.Error())
  372. return
  373. }
  374. reply.RebateAmount = priceDec.Mul(decimal.NewFromInt(merchantCard[i].RebateRate).Div(decimal.NewFromInt(100))).String()
  375. outData = append(outData, reply)
  376. }
  377. app.PageOK(c, outData, count, pageIndex, pageSize, app.Success)
  378. }
  379. func UpdateMerchantCard(c *gin.Context) {
  380. var inData models.UpdateMerchantCardRequest
  381. var sqlData shanghu.MerchantCard
  382. err := c.ShouldBindJSON(&inData)
  383. if err != nil {
  384. app.Error(c, 400, err, err.Error())
  385. return
  386. }
  387. sqlData.ID = inData.ID
  388. sqlData.QuotaNum = inData.QuotaNum
  389. sqlData.UseRule = inData.UseRule
  390. sqlData.Picture = inData.Picture
  391. sqlData.Inventory = inData.Inventory
  392. sqlData.ActivityStartTime = inData.ActivityStartTime
  393. sqlData.ActivityEndTime = inData.ActivityEndTime
  394. err = sqlData.UpdateMerchantCard()
  395. if err != nil {
  396. app.Error(c, 400, err, err.Error())
  397. return
  398. }
  399. app.OK(c, nil, app.Success)
  400. }