order.go 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571
  1. package cygx
  2. import (
  3. "encoding/json"
  4. "github.com/rdlucklib/rdluck_tools/paging"
  5. "hongze/hz_crm_api/controllers"
  6. "hongze/hz_crm_api/models"
  7. "hongze/hz_crm_api/models/cygx"
  8. cygxService "hongze/hz_crm_api/services/cygx"
  9. "hongze/hz_crm_api/utils"
  10. "strconv"
  11. "time"
  12. )
  13. // 产品内测
  14. type OrderController struct {
  15. controllers.BaseAuthController
  16. }
  17. // @Title 列表
  18. // @Description 列表接口
  19. // @Param PageSize query int true "每页数据条数"
  20. // @Param CurrentIndex query int true "当前页页码,从1开始"
  21. // @Param StartDate query string false "开始时间 ,列如2021-03-06 "
  22. // @Param EndDate query string false "结束时间,列如2021-03-06 "
  23. // @Param AdminId query string false "销售ID "
  24. // @Param ShareId query string false "推荐人ID "
  25. // @Param PaymentType query string false "支付渠道 取值范围:1微信小程序,2微信扫码支付,3微信H5支付。 "
  26. // @Param OrderType query int false "订单类型 1:畅读卡订单,2:单场付费订单"
  27. // @Param OrderStatus query int false "订单状态,0:已取消、1:待支付、2:已支付、3:退款成功、4:退款处理中、5:退款异常、6:退款关闭"
  28. // @Param PaymentProject query string false "付款项目"
  29. // @Param OrderCode query string false "订单编号"
  30. // @Param KeyWord query string false "搜索关键词"
  31. // @Success Ret=200 {object} cygx.GetCygxTacticsTimeLineResp
  32. // @router /order/list [get]
  33. func (this *OrderController) OrderList() {
  34. br := new(models.BaseResponse).Init()
  35. defer func() {
  36. this.Data["json"] = br
  37. this.ServeJSON()
  38. }()
  39. sysUser := this.SysUser
  40. if sysUser == nil {
  41. br.Msg = "请登录"
  42. br.ErrMsg = "请登录,SysUser Is Empty"
  43. br.Ret = 408
  44. return
  45. }
  46. resp := new(cygx.UserOrderListResp)
  47. pageSize, _ := this.GetInt("PageSize")
  48. currentIndex, _ := this.GetInt("CurrentIndex")
  49. orderType, _ := this.GetInt("OrderType", 1)
  50. orderStatus, _ := this.GetInt("OrderStatus", -1)
  51. startDate := this.GetString("StartDate")
  52. endDate := this.GetString("EndDate")
  53. adminId := this.GetString("AdminId")
  54. shareId := this.GetString("ShareId")
  55. paymentType, _ := this.GetInt("PaymentType")
  56. orderCode := this.GetString("OrderCode")
  57. keyWord := this.GetString("KeyWord")
  58. paymentProject := this.GetString("PaymentProject")
  59. var startSize int
  60. if pageSize <= 0 {
  61. pageSize = utils.PageSize20
  62. }
  63. if currentIndex <= 0 {
  64. currentIndex = 1
  65. }
  66. startSize = utils.StartIndex(currentIndex, pageSize)
  67. var condition string
  68. var pars []interface{}
  69. if orderType > 0 { //订单类型 1:畅读卡订单,2:单场付费订单
  70. condition += ` AND order_type = ? `
  71. pars = append(pars, orderType)
  72. }
  73. if startDate != "" && endDate != "" { //时间范围
  74. condition += ` AND create_time BETWEEN ? AND ? `
  75. pars = append(pars, startDate+" 00:00:01", endDate+" 23:59:59")
  76. }
  77. if adminId != "" { //所属销售筛选
  78. condition += ` AND seller_id IN (` + adminId + `) `
  79. }
  80. if shareId != "" { //推荐人ID
  81. condition += ` AND share_id IN (` + shareId + `) `
  82. }
  83. if paymentType > 0 { // 支付渠道
  84. var tradeType string
  85. switch paymentType {
  86. case 1:
  87. tradeType = "JSAPI"
  88. case 2:
  89. tradeType = "NATIVE"
  90. case 3:
  91. tradeType = "MWEB"
  92. }
  93. condition += ` AND trade_type = ? `
  94. pars = append(pars, tradeType)
  95. }
  96. if orderStatus > -1 { //订单状态
  97. condition += ` AND order_status = ? `
  98. pars = append(pars, orderStatus)
  99. }
  100. if orderCode != "" { //订单编号
  101. orderCode = "%" + orderCode + "%"
  102. condition += ` AND order_code LIKE ? `
  103. pars = append(pars, orderCode)
  104. }
  105. if paymentProject != "" { //付款项目
  106. condition += ` AND goods_name = ? `
  107. pars = append(pars, paymentProject)
  108. }
  109. if keyWord != "" { //用户姓名,手机号
  110. keyWord = "%" + keyWord + "%"
  111. condition += ` AND (mobile LIKE ? OR real_name LIKE ? ) `
  112. pars = append(pars, keyWord, keyWord)
  113. }
  114. total, err := cygx.GetCygxOrderCount(condition, pars)
  115. if err != nil {
  116. br.Msg = "获取失败"
  117. br.ErrMsg = "获取失败,Err:" + err.Error()
  118. return
  119. }
  120. condition += " ORDER BY order_id DESC "
  121. list, err := cygx.GetCygxOrderList(condition, pars, startSize, pageSize)
  122. if err != nil {
  123. br.Msg = "获取失败"
  124. br.ErrMsg = "获取失败,Err:" + err.Error()
  125. return
  126. }
  127. var mobiles []string
  128. for _, v := range list {
  129. mobiles = append(mobiles, v.Mobile)
  130. }
  131. inviteNameMap := cygxService.GetCygxUserBusinessCardMap(mobiles) // 根据手机号获取邀请人
  132. for _, v := range list {
  133. item := new(cygx.OrderListResp)
  134. item.OrderCode = v.OrderCode
  135. item.OrderMoney = v.OrderMoney
  136. item.SourceId = v.SourceId
  137. item.Source = v.Source
  138. item.SourceTitle = v.SourceTitle
  139. switch v.Source {
  140. case utils.CYGX_OBJ_ARTICLE: //文章详情
  141. item.HttpUrl = utils.CYGX_MFYX_URL + "/material/info/" + strconv.Itoa(v.SourceId)
  142. case utils.CYGX_OBJ_ACTIVITY: //活动详情
  143. item.HttpUrl = utils.CYGX_MFYX_URL + "/activity/detail/" + strconv.Itoa(v.SourceId)
  144. case utils.CYGX_OBJ_YANXUANSPECIAL: //专栏详情
  145. item.HttpUrl = utils.CYGX_MFYX_URL + "/column/detail/" + strconv.Itoa(v.SourceId)
  146. }
  147. item.OrderStatus = v.OrderStatus
  148. switch item.OrderStatus {
  149. case 0:
  150. item.OrderStatusText = "已取消"
  151. case 1:
  152. item.OrderStatusText = "待支付"
  153. case 2:
  154. item.OrderStatusText = "已支付"
  155. case 3:
  156. item.OrderStatusText = "退款成功"
  157. case 4:
  158. item.OrderStatusText = "退款处理中"
  159. case 5:
  160. item.OrderStatusText = "退款异常"
  161. case 6:
  162. item.OrderStatusText = "退款关闭"
  163. }
  164. //TradeType string `comment:"交易类型,枚举值:JSAPI:公众号支付 、 NATIVE:扫码支付 、 App:App支付 、 MICROPAY:付款码支付 、 MWEB:H5支付 、 FACEPAY:刷脸支付"`
  165. switch v.TradeType {
  166. case "JSAPI":
  167. item.PaymentTypeText = "小程序"
  168. case "NATIVE":
  169. item.PaymentTypeText = "PC"
  170. case "MWEB":
  171. item.PaymentTypeText = "H5"
  172. }
  173. item.UserId = v.UserId
  174. item.RealName = v.RealName
  175. item.Mobile = v.Mobile
  176. item.Email = v.Email
  177. item.CompanyId = v.CompanyId
  178. item.CompanyName = v.CompanyName
  179. item.SellerName = v.SellerName
  180. if v.ShareName != "" {
  181. item.InviteName = v.ShareName
  182. } else {
  183. item.InviteName = inviteNameMap[v.Mobile]
  184. }
  185. item.PaymentProject = v.GoodsName
  186. if v.OrderStatus != 0 && v.OrderStatus != 1 {
  187. item.PayTime = v.PayTime.Format(utils.FormatDateTime)
  188. }
  189. if orderType == 1 && v.OrderStatus != 0 && v.OrderStatus != 1 {
  190. if v.GoodsId == 1 {
  191. item.StartDate = v.StartDate.Format(utils.FormatDateTime)
  192. item.EndDate = v.EndDate.Format(utils.FormatDateTime)
  193. } else {
  194. item.StartDate = v.StartDate.Format(utils.FormatDate)
  195. item.EndDate = v.EndDate.Format(utils.FormatDate)
  196. }
  197. }
  198. item.CreateTime = v.CreateTime.Format(utils.FormatDateTime)
  199. resp.List = append(resp.List, item)
  200. }
  201. if len(resp.List) == 0 {
  202. resp.List = make([]*cygx.OrderListResp, 0)
  203. }
  204. page := paging.GetPaging(currentIndex, pageSize, total)
  205. resp.Paging = page
  206. br.Ret = 200
  207. br.Success = true
  208. br.Msg = "获取成功"
  209. br.Data = resp
  210. }
  211. // @Title 退款
  212. // @Description 退款接口
  213. // @Param request body cygx.UserRemarAddReq true "type json string"
  214. // @Success 200 操作成功
  215. // @router /order/refund [post]
  216. func (this *UserController) OrderRefund() {
  217. br := new(models.BaseResponse).Init()
  218. defer func() {
  219. this.Data["json"] = br
  220. this.ServeJSON()
  221. }()
  222. sysUser := this.SysUser
  223. if sysUser == nil {
  224. br.Msg = "请登录"
  225. br.ErrMsg = "请登录,SysUser Is Empty"
  226. br.Ret = 408
  227. return
  228. }
  229. var req cygx.CygxOrderRefundReq
  230. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  231. if err != nil {
  232. br.Msg = "参数解析异常!"
  233. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  234. return
  235. }
  236. orderCode := req.OrderCode
  237. remark := req.Remark
  238. if remark == "" {
  239. br.Msg = "请填写退款原因"
  240. return
  241. }
  242. orderDetail, err := cygx.GetCygxOrderDetailByOrderCode(orderCode)
  243. if err != nil {
  244. br.Msg = "获取失败"
  245. br.ErrMsg = "获取失败, Err:" + err.Error()
  246. return
  247. }
  248. if orderDetail.OrderStatus != 2 {
  249. br.Msg = "订单状态异常!"
  250. br.ErrMsg = "订单状态异常,orderCode:" + orderCode
  251. return
  252. }
  253. //订单状态,0:已取消、1:待支付、2:已支付、3:退款成功、4:退款处理中、5:退款异常、6:退款关闭
  254. statusCode, err := cygxService.RefundsApiService(orderDetail)
  255. var orderStatus int
  256. if statusCode == 200 && err == nil {
  257. orderStatus = 4
  258. } else {
  259. orderStatus = 5
  260. }
  261. item := new(cygx.CygxOrderRefund)
  262. item.OrderCode = orderCode
  263. item.RefundMoney = orderDetail.OrderMoney
  264. item.RefundWay = 1
  265. item.Remark = remark
  266. item.CreateTime = time.Now()
  267. item.RefundTime = time.Now()
  268. item.AdminId = sysUser.AdminId
  269. item.AdminName = sysUser.RealName
  270. err = cygx.AddCygxOrderRefund(item, orderStatus)
  271. if err != nil {
  272. br.Msg = "新增失败."
  273. br.ErrMsg = "新增失败,Err:" + err.Error()
  274. return
  275. }
  276. br.Ret = 200
  277. br.Success = true
  278. br.Msg = "已提交退款,请到退款记录页面查看"
  279. }
  280. // @Title 退款记录列表
  281. // @Description 退款记录列表接口
  282. // @Param PageSize query int true "每页数据条数"
  283. // @Param CurrentIndex query int true "当前页页码,从1开始"
  284. // @Param StartDate query string false "开始时间 ,列如2021-03-06 "
  285. // @Param EndDate query string false "结束时间,列如2021-03-06 "
  286. // @Param AdminId query string false "销售ID "
  287. // @Param ShareId query string false "推荐人ID "
  288. // @Param PaymentType query string false "支付渠道 取值范围:1微信小程序,2微信扫码支付,3微信H5支付。 "
  289. // @Param OrderType query int false "订单类型 1:畅读卡订单,2:单场付费订单"
  290. // @Param OrderStatus query int false "订单状态,0:已取消、1:待支付、2:已支付、3:退款成功、4:退款处理中、5:退款异常、6:退款关闭"
  291. // @Param PaymentProject query string false "付款项目"
  292. // @Param OrderCode query string false "订单编号"
  293. // @Param KeyWord query string false "搜索关键词"
  294. // @Success Ret=200 {object} cygx.GetCygxTacticsTimeLineResp
  295. // @router /order/refund/list [get]
  296. func (this *OrderController) OrderRefundList() {
  297. br := new(models.BaseResponse).Init()
  298. defer func() {
  299. this.Data["json"] = br
  300. this.ServeJSON()
  301. }()
  302. sysUser := this.SysUser
  303. if sysUser == nil {
  304. br.Msg = "请登录"
  305. br.ErrMsg = "请登录,SysUser Is Empty"
  306. br.Ret = 408
  307. return
  308. }
  309. resp := new(cygx.UserOrderListResp)
  310. pageSize, _ := this.GetInt("PageSize")
  311. currentIndex, _ := this.GetInt("CurrentIndex")
  312. orderType, _ := this.GetInt("OrderType", 1)
  313. orderStatus, _ := this.GetInt("OrderStatus", -1)
  314. startDate := this.GetString("StartDate")
  315. endDate := this.GetString("EndDate")
  316. adminId := this.GetString("AdminId")
  317. shareId := this.GetString("ShareId")
  318. paymentType, _ := this.GetInt("PaymentType")
  319. orderCode := this.GetString("OrderCode")
  320. keyWord := this.GetString("KeyWord")
  321. paymentProject := this.GetString("PaymentProject")
  322. var startSize int
  323. if pageSize <= 0 {
  324. pageSize = utils.PageSize20
  325. }
  326. if currentIndex <= 0 {
  327. currentIndex = 1
  328. }
  329. startSize = utils.StartIndex(currentIndex, pageSize)
  330. var condition string
  331. var pars []interface{}
  332. condition += ` AND order_status IN (3,4,5,6) `
  333. if orderType > 0 { //订单类型 1:畅读卡订单,2:单场付费订单
  334. condition += ` AND order_type = ? `
  335. pars = append(pars, orderType)
  336. }
  337. if startDate != "" && endDate != "" { //时间范围
  338. condition += ` AND create_time BETWEEN ? AND ? `
  339. pars = append(pars, startDate+" 00:00:01", endDate+" 23:59:59")
  340. }
  341. if adminId != "" { //所属销售筛选
  342. condition += ` AND seller_id IN (` + adminId + `) `
  343. }
  344. if shareId != "" { //推荐人ID
  345. condition += ` AND share_id IN (` + shareId + `) `
  346. }
  347. if paymentType > 0 { // 支付渠道
  348. var tradeType string
  349. switch paymentType {
  350. case 1:
  351. tradeType = "JSAPI"
  352. case 2:
  353. tradeType = "NATIVE"
  354. case 3:
  355. tradeType = "MWEB"
  356. }
  357. condition += ` AND trade_type = ? `
  358. pars = append(pars, tradeType)
  359. }
  360. if orderStatus > -1 { //订单状态
  361. condition += ` AND order_status = ? `
  362. pars = append(pars, orderStatus)
  363. }
  364. if orderCode != "" { //订单编号
  365. orderCode = "%" + orderCode + "%"
  366. condition += ` AND order_code LIKE ? `
  367. pars = append(pars, orderCode)
  368. }
  369. if paymentProject != "" { //付款项目
  370. condition += ` AND goods_name = ? `
  371. pars = append(pars, paymentProject)
  372. }
  373. if keyWord != "" { //用户姓名,手机号
  374. keyWord = "%" + keyWord + "%"
  375. condition += ` AND (mobile LIKE ? OR real_name LIKE ? ) `
  376. pars = append(pars, keyWord, keyWord)
  377. }
  378. total, err := cygx.GetCygxOrderCount(condition, pars)
  379. if err != nil {
  380. br.Msg = "获取失败"
  381. br.ErrMsg = "获取失败,Err:" + err.Error()
  382. return
  383. }
  384. condition += " ORDER BY order_id DESC "
  385. list, err := cygx.GetCygxOrderList(condition, pars, startSize, pageSize)
  386. if err != nil {
  387. br.Msg = "获取失败"
  388. br.ErrMsg = "获取失败,Err:" + err.Error()
  389. return
  390. }
  391. var mobiles []string
  392. for _, v := range list {
  393. mobiles = append(mobiles, v.Mobile)
  394. }
  395. inviteNameMap := cygxService.GetCygxUserBusinessCardMap(mobiles) // 根据手机号获取邀请人
  396. for _, v := range list {
  397. item := new(cygx.OrderListResp)
  398. item.OrderCode = v.OrderCode
  399. item.OrderMoney = v.OrderMoney
  400. item.SourceId = v.SourceId
  401. item.Source = v.Source
  402. item.SourceTitle = v.SourceTitle
  403. switch v.Source {
  404. case utils.CYGX_OBJ_ARTICLE: //文章详情
  405. item.HttpUrl = utils.CYGX_MFYX_URL + "/material/info/" + strconv.Itoa(v.SourceId)
  406. case utils.CYGX_OBJ_ACTIVITY: //活动详情
  407. item.HttpUrl = utils.CYGX_MFYX_URL + "/activity/detail/" + strconv.Itoa(v.SourceId)
  408. case utils.CYGX_OBJ_YANXUANSPECIAL: //专栏详情
  409. item.HttpUrl = utils.CYGX_MFYX_URL + "/column/detail/" + strconv.Itoa(v.SourceId)
  410. }
  411. //OrderStatus int `comment:"订单状态,0:已取消、1:待支付、2:已支付、3:退款成功、4:退款处理中、5:退款异常、6:退款关闭"`
  412. item.OrderStatus = v.OrderStatus
  413. switch item.OrderStatus {
  414. case 3:
  415. item.OrderStatusText = "退款成功"
  416. case 4:
  417. item.OrderStatusText = "退款处理中"
  418. case 5:
  419. item.OrderStatusText = "退款异常"
  420. case 6:
  421. item.OrderStatusText = "退款关闭"
  422. }
  423. //TradeType string `comment:"交易类型,枚举值:JSAPI:公众号支付 、 NATIVE:扫码支付 、 App:App支付 、 MICROPAY:付款码支付 、 MWEB:H5支付 、 FACEPAY:刷脸支付"`
  424. switch v.TradeType {
  425. case "JSAPI":
  426. item.PaymentTypeText = "小程序"
  427. case "NATIVE":
  428. item.PaymentTypeText = "PC"
  429. case "MWEB":
  430. item.PaymentTypeText = "H5"
  431. }
  432. item.UserId = v.UserId
  433. item.RealName = v.RealName
  434. item.Mobile = v.Mobile
  435. item.Email = v.Email
  436. item.CompanyId = v.CompanyId
  437. item.CompanyName = v.CompanyName
  438. item.SellerName = v.SellerName
  439. if v.ShareName != "" {
  440. item.InviteName = v.ShareName
  441. } else {
  442. item.InviteName = inviteNameMap[v.Mobile]
  443. }
  444. item.PaymentProject = v.GoodsName
  445. item.RefundTime = v.RefundTime.Format(utils.FormatDateTime)
  446. item.RefundRemark = v.RefundRemark
  447. //if v.OrderStatus == 2 {
  448. item.PayTime = v.PayTime.Format(utils.FormatDateTime)
  449. //}
  450. if orderType == 1 {
  451. if v.GoodsId == 1 {
  452. item.StartDate = v.StartDate.Format(utils.FormatDateTime)
  453. item.EndDate = v.EndDate.Format(utils.FormatDateTime)
  454. } else {
  455. item.StartDate = v.StartDate.Format(utils.FormatDate)
  456. item.EndDate = v.EndDate.Format(utils.FormatDate)
  457. }
  458. }
  459. item.CreateTime = v.CreateTime.Format(utils.FormatDateTime)
  460. resp.List = append(resp.List, item)
  461. }
  462. if len(resp.List) == 0 {
  463. resp.List = make([]*cygx.OrderListResp, 0)
  464. }
  465. page := paging.GetPaging(currentIndex, pageSize, total)
  466. resp.Paging = page
  467. br.Ret = 200
  468. br.Success = true
  469. br.Msg = "获取成功"
  470. br.Data = resp
  471. }
  472. // @Title 退款撤销
  473. // @Description 退款撤销接口
  474. // @Param request body cygx.UserRemarAddReq true "type json string"
  475. // @Success 200 操作成功
  476. // @router /order/refund_revoke [post]
  477. func (this *UserController) OrderRefundRevoke() {
  478. br := new(models.BaseResponse).Init()
  479. defer func() {
  480. this.Data["json"] = br
  481. this.ServeJSON()
  482. }()
  483. sysUser := this.SysUser
  484. if sysUser == nil {
  485. br.Msg = "请登录"
  486. br.ErrMsg = "请登录,SysUser Is Empty"
  487. br.Ret = 408
  488. return
  489. }
  490. var req cygx.CygxOrderRefundReq
  491. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  492. if err != nil {
  493. br.Msg = "参数解析异常!"
  494. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  495. return
  496. }
  497. orderCode := req.OrderCode
  498. orderDetail, err := cygx.GetCygxOrderDetailByOrderCode(orderCode)
  499. if err != nil {
  500. br.Msg = "获取失败"
  501. br.ErrMsg = "获取失败, Err:" + err.Error()
  502. return
  503. }
  504. if orderDetail.OrderStatus != 4 {
  505. br.Msg = "订单状态异常!"
  506. br.ErrMsg = "订单状态异常,orderCode:" + orderCode
  507. return
  508. }
  509. item := new(cygx.CygxOrderAction)
  510. item.Action = "关闭退款"
  511. item.OrderStatus = 6
  512. item.OrderStatusText = "关闭退款"
  513. item.OrderCode = orderDetail.OrderCode
  514. item.UserId = orderDetail.UserId
  515. item.RealName = orderDetail.RealName
  516. item.Mobile = orderDetail.Mobile
  517. item.Email = orderDetail.Email
  518. item.CompanyId = orderDetail.CompanyId
  519. item.CompanyName = orderDetail.CompanyName
  520. item.SellerName = orderDetail.SellerName
  521. item.CreateTime = time.Now()
  522. item.ModifyTime = time.Now()
  523. item.AdminId = sysUser.AdminId
  524. item.AdminName = sysUser.RealName
  525. err = cygx.AddCygxOrderRefundRevoke(item)
  526. if err != nil {
  527. br.Msg = "新增失败."
  528. br.ErrMsg = "新增失败,Err:" + err.Error()
  529. return
  530. }
  531. br.Ret = 200
  532. br.Success = true
  533. br.Msg = "操作成功"
  534. }