123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- package http
- import (
- "encoding/xml"
- "io/ioutil"
- "net/http"
- "time"
- "go-common/app/interface/main/app-wall/model/mobile"
- "go-common/library/ecode"
- log "go-common/library/log"
- bm "go-common/library/net/http/blademaster"
- "go-common/library/net/metadata"
- )
- const (
- mobileOrders = 0
- mobileFlow = 1
- )
- var (
- emptyByte = []byte{}
- )
- // ordersSync
- func ordersMobileSync(c *bm.Context) {
- mobile, mtype, err := requestXMLToMap(c.Request)
- if err != nil {
- log.Error("requestXMLToMap error (%v)", err)
- mobileMessage(c, err, mtype)
- return
- }
- b, _ := xml.Marshal(&mobile)
- ip := metadata.String(c, metadata.RemoteIP)
- switch mtype {
- case mobileOrders:
- log.Info("mobile user orders xml response(%s)", b)
- if mobile.Threshold == "" {
- mobile.Threshold = "100"
- }
- if err := mobileSvc.InOrdersSync(c, ip, mobile, time.Now()); err != nil {
- log.Error("mobileSvc.InOrdersSync error (%v)", err)
- mobileMessage(c, err, mtype)
- return
- }
- case mobileFlow:
- log.Info("mobile user flow xml response(%s)", b)
- if err := mobileSvc.FlowSync(c, mobile, ip); err != nil {
- log.Error("mobileSvc.FlowSync error (%v)", err)
- mobileMessage(c, err, mtype)
- return
- }
- }
- mobileMessage(c, ecode.OK, mtype)
- }
- // mobileActivation
- func mobileActivation(c *bm.Context) {
- res := map[string]interface{}{}
- params := c.Request.Form
- usermob := params.Get("usermob")
- msg, err := mobileSvc.Activation(c, usermob, time.Now())
- if err != nil {
- if msg != "" {
- returnDataJSON(c, res, err)
- res["message"] = msg
- }
- returnDataJSON(c, res, err)
- return
- }
- res["message"] = ""
- returnDataJSON(c, res, nil)
- }
- // mobileState
- func mobileState(c *bm.Context) {
- params := c.Request.Form
- usermob := params.Get("usermob")
- data := mobileSvc.MobileState(c, usermob, time.Now())
- res := map[string]interface{}{
- "data": data,
- }
- returnDataJSON(c, res, nil)
- }
- // userFlowState
- func userMobileState(c *bm.Context) {
- params := c.Request.Form
- usermob := params.Get("usermob")
- data := mobileSvc.UserMobileState(c, usermob, time.Now())
- res := map[string]interface{}{
- "data": data,
- }
- returnDataJSON(c, res, nil)
- }
- // RequestXmlToMap
- func requestXMLToMap(request *http.Request) (data *mobile.MobileXML, mobileType int, err error) {
- body, err := ioutil.ReadAll(request.Body)
- if err != nil {
- log.Error("mobile_ioutil.ReadAll error (%v)", err)
- return
- }
- defer request.Body.Close()
- if len(body) == 0 {
- err = ecode.RequestErr
- return
- }
- var res interface{} = &mobile.OrderXML{}
- mobileType = mobileOrders
- log.Info("mobile orders xml body(%s)", body)
- if err = xml.Unmarshal(body, &res); err != nil {
- res = &mobile.FlowXML{}
- mobileType = mobileFlow
- if err = xml.Unmarshal(body, &res); err != nil {
- log.Error("xml.Unmarshal OrderXML(%v) error (%v)", res, err)
- err = ecode.RequestErr
- return
- }
- }
- if res == nil {
- err = ecode.NothingFound
- log.Error("xml.Unmarshal OrderXML is null")
- return
- }
- switch v := res.(type) {
- case *mobile.OrderXML:
- data = v.MobileXML
- case *mobile.FlowXML:
- data = v.MobileXML
- }
- return
- }
- func mobileMessage(c *bm.Context, err error, mobileType int) {
- // response header
- c.Writer.Header().Set("Content-Type", "text/xml; charset=UTF-8")
- c.Writer.Header().Set("Cache-Control", "no-cache")
- c.Writer.Header().Set("Connection", "keep-alive")
- var msg interface{}
- switch mobileType {
- case mobileOrders:
- msg = &mobile.OrderMsgXML{
- Msg: &mobile.Msg{
- Xmlns: "http://www.monternet.com/dsmp/schemas/",
- MsgType: "SyncFlowPkgOrderResp",
- Version: "1.0.0",
- HRet: err.Error(),
- },
- }
- case mobileFlow:
- msg = &mobile.FlowMsgXML{
- Msg: &mobile.Msg{
- Xmlns: "http://www.monternet.com/dsmp/schemas/",
- MsgType: "SyncFlowPkgLeftQuotaResp",
- Version: "1.0.0",
- HRet: err.Error(),
- },
- }
- }
- output, err := xml.MarshalIndent(msg, " ", " ")
- if err != nil {
- log.Error("xml.MarshalIndent (%v)", err)
- err = ecode.RequestErr
- output = emptyByte
- }
- c.Writer.Write([]byte(xml.Header))
- c.Writer.Write(output)
- }
|