merchant.card.go 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443
  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. err = json.Unmarshal([]byte(merchantCard.Picture), &swiperList)
  225. if err != nil {
  226. fmt.Println("picture")
  227. app.Error(c, 500, err, err.Error())
  228. return
  229. }
  230. outData.SwiperList = swiperList
  231. rightButton.ImageURL = "/images/资源 24.png"
  232. outData.RightButton = append(outData.RightButton, rightButton)
  233. rightButton.ImageURL = "/images/资源 25.png"
  234. outData.RightButton = append(outData.RightButton, rightButton)
  235. rightButton.ImageURL = "/images/资源 26.png"
  236. outData.RightButton = append(outData.RightButton, rightButton)
  237. rightButton.ImageURL = "/images/资源 28.png"
  238. outData.RightButton = append(outData.RightButton, rightButton)
  239. var dataList models.DataList
  240. err = json.Unmarshal([]byte(merchantCard.CardProjectData), &project)
  241. if err != nil {
  242. fmt.Println("picture2")
  243. app.Error(c, 500, err, err.Error())
  244. return
  245. }
  246. //merchantCard.CardProjectData = ""
  247. for i := 0; i < len(project); i++ {
  248. var cardProject shanghu.MerchantCardProject
  249. cardProject.ID = project[i]
  250. projectInfo, err := cardProject.GetMerchantCardProject()
  251. if err != nil {
  252. app.Error(c, 500, err, err.Error())
  253. return
  254. }
  255. dataList.Name = projectInfo.ProjectName
  256. dataList.Count = 1
  257. dataList.Price = projectInfo.ProjectUnitPrice
  258. outData.DataList = append(outData.DataList, dataList)
  259. }
  260. var buy models.BuyKnowList
  261. buy.Icon = "/images/资源 46.png"
  262. buy.Title = "有效期"
  263. buy.Text = "至" + tools.TimeToStr(merchantCard.MerchantCardTime)
  264. outData.BuyKnowList = append(outData.BuyKnowList, buy)
  265. buy.Icon = "/images/资源 48.png"
  266. buy.Title = "限购数量"
  267. buy.Text = "每位用户限购1张"
  268. outData.BuyKnowList = append(outData.BuyKnowList, buy)
  269. buy.Icon = "/images/资源 49.png"
  270. buy.Title = "使用规则"
  271. buy.Text = merchantCard.UseRule
  272. outData.BuyKnowList = append(outData.BuyKnowList, buy)
  273. var shopData models.ShopData
  274. var merchant shanghu.Merchant
  275. merchant.OpenId = merchantCard.MerchantOpenID
  276. merchantInfo, err := merchant.GetMerchant()
  277. if err != nil {
  278. app.Error(c, 500, err, err.Error())
  279. return
  280. }
  281. shopData.Name = merchantInfo.MerchantName
  282. shopData.Address = merchantInfo.Address
  283. outData.ShopData = shopData
  284. outData.FenxiangShow = false
  285. outData.MerchantAmount, err = decimal.NewFromString(merchantCard.CardPrice)
  286. if err != nil {
  287. app.Error(c, 500, err, err.Error())
  288. return
  289. }
  290. outData.MerchantOriginalAmount = outData.MerchantAmount.Add(decimal.NewFromInt(50))
  291. //err = json.Unmarshal([]byte(merchantCard.CardProjectData), &project)
  292. //if err != nil {
  293. // app.Error(c, 500, err, err.Error())
  294. // return
  295. //}
  296. //
  297. //merchantCard.CardProjectData = ""
  298. //for i := 0; i < len(project); i++ {
  299. // var cardProject shanghu.MerchantCardProject
  300. // cardProject.ID = project[i]
  301. // projectInfo, err := cardProject.GetMerchantCardProject()
  302. // if err != nil {
  303. // app.Error(c, 500, err, err.Error())
  304. // return
  305. // }
  306. // merchantCard.CardProjectData = merchantCard.CardProjectData + projectInfo.ProjectName + "x1 "
  307. //}
  308. app.OK(c, outData, app.Success)
  309. }
  310. func MerchantCardList(c *gin.Context) {
  311. var inData models.MerchantCardListRequest
  312. var sqlData shanghu.MerchantCard
  313. err := c.ShouldBindJSON(&inData)
  314. if err != nil {
  315. app.Error(c, 400, err, err.Error())
  316. return
  317. }
  318. var pageSize = 10
  319. var pageIndex = 1
  320. if inData.PageSize != 0 {
  321. pageSize = inData.PageSize
  322. }
  323. if inData.PageIndex != 0 {
  324. pageIndex = inData.PageIndex
  325. }
  326. fmt.Println(inData.OpenId)
  327. sqlData.MerchantOpenID = inData.OpenId
  328. merchantCard, count, err := sqlData.GetOpenIdList(pageSize, pageIndex, inData.TypeList)
  329. if err != nil {
  330. app.Error(c, 500, err, err.Error())
  331. return
  332. }
  333. app.PageOK(c, merchantCard, count, pageIndex, pageSize, app.Success)
  334. }
  335. // c端获取卡信息
  336. func MerchantClientCardList(c *gin.Context) {
  337. var inData models.MerchantCardListRequest
  338. var sqlData shanghu.MerchantCard
  339. var outData []models.MerchantCardListReply
  340. err := c.ShouldBindJSON(&inData)
  341. if err != nil {
  342. app.Error(c, 400, err, err.Error())
  343. return
  344. }
  345. var pageSize = 10
  346. var pageIndex = 1
  347. if inData.PageSize != 0 {
  348. pageSize = inData.PageSize
  349. }
  350. if inData.PageIndex != 0 {
  351. pageIndex = inData.PageIndex
  352. }
  353. merchantCard, count, err := sqlData.ClientGetOpenIdList(pageSize, pageIndex, inData.TypeList)
  354. if err != nil {
  355. app.Error(c, 500, err, err.Error())
  356. return
  357. }
  358. for i := 0; i < len(merchantCard); i++ {
  359. var reply models.MerchantCardListReply
  360. reply.RebateRate = merchantCard[i].RebateRate
  361. reply.ID = merchantCard[i].ID
  362. reply.QuotaNum = merchantCard[i].QuotaNum
  363. reply.MerchantCardName = merchantCard[i].MerchantCardName
  364. reply.CardPrice = merchantCard[i].CardPrice
  365. priceDec, err := decimal.NewFromString(merchantCard[i].CardPrice)
  366. if err != nil {
  367. app.Error(c, 500, err, err.Error())
  368. return
  369. }
  370. reply.RebateAmount = priceDec.Mul(decimal.NewFromInt(merchantCard[i].RebateRate).Div(decimal.NewFromInt(100))).String()
  371. outData = append(outData, reply)
  372. }
  373. app.PageOK(c, outData, count, pageIndex, pageSize, app.Success)
  374. }
  375. func UpdateMerchantCard(c *gin.Context) {
  376. var inData models.UpdateMerchantCardRequest
  377. var sqlData shanghu.MerchantCard
  378. err := c.ShouldBindJSON(&inData)
  379. if err != nil {
  380. app.Error(c, 400, err, err.Error())
  381. return
  382. }
  383. sqlData.ID = inData.ID
  384. sqlData.QuotaNum = inData.QuotaNum
  385. sqlData.UseRule = inData.UseRule
  386. sqlData.Picture = inData.Picture
  387. sqlData.Inventory = inData.Inventory
  388. sqlData.ActivityStartTime = inData.ActivityStartTime
  389. sqlData.ActivityEndTime = inData.ActivityEndTime
  390. err = sqlData.UpdateMerchantCard()
  391. if err != nil {
  392. app.Error(c, 400, err, err.Error())
  393. return
  394. }
  395. app.OK(c, nil, app.Success)
  396. }