Procházet zdrojové kódy

修改为MVC架构(未完成)

Administrator před 5 roky
rodič
revize
774ca5ad5d

+ 6 - 5
controllers/common/notice.go

@@ -3,6 +3,7 @@ package common
 import (
 	"fmt"
 	"mtp2_if/db"
+	"mtp2_if/dbmodels"
 	"mtp2_if/global/app"
 	"mtp2_if/global/e"
 	"mtp2_if/logger"
@@ -24,8 +25,8 @@ type QueryNoticeReq struct {
 
 // QueryNoticeRsp 通知公告系统消息查询返回模型
 type QueryNoticeRsp struct {
-	models.Noticemsg `xorm:"extends"`
-	Readed           bool `json:"readed" xorm:"-"` // 是否已读
+	dbmodels.Noticemsg `xorm:"extends"`
+	Readed             bool `json:"readed" xorm:"-"` // 是否已读
 }
 
 // QueryNotice 通知公告系统消息查询
@@ -159,10 +160,10 @@ func QueryNotice(c *gin.Context) {
 
 	// 查询成功返回
 	if req.PageSize > 0 {
-		logger.GetLogger().Infof("QueryNotice successed: %v", rst)
+		logger.GetLogger().Debugln("QueryNotice successed: %v", rst)
 		appG.ResponseByPage(http.StatusOK, e.SUCCESS, rst, app.PageInfo{Page: req.Page, PageSize: req.PageSize, Total: total})
 	} else {
-		logger.GetLogger().Infof("QueryNotice successed: %v", rst)
+		logger.GetLogger().Debugln("QueryNotice successed: %v", rst)
 		appG.Response(http.StatusOK, e.SUCCESS, rst)
 	}
 }
@@ -240,6 +241,6 @@ func NoticeReaded(c *gin.Context) {
 	}
 
 	// 执行成功
-	logger.GetLogger().Infof("NoticeReaded successed: %v", "ok")
+	logger.GetLogger().Debugln("NoticeReaded successed: %v", "ok")
 	appG.Response(http.StatusOK, e.SUCCESS, "")
 }

+ 25 - 297
controllers/common/table.go

@@ -1,16 +1,12 @@
 package common
 
 import (
-	"fmt"
-	"mtp2_if/db"
+	"mtp2_if/dbmodels"
 	"mtp2_if/global/app"
 	"mtp2_if/global/e"
-	"mtp2_if/global/utils"
 	"mtp2_if/logger"
 	"mtp2_if/models"
 	"net/http"
-	"strconv"
-	"strings"
 
 	"github.com/gin-gonic/gin"
 )
@@ -22,49 +18,8 @@ type QueryTraderMenuReq struct {
 
 // QueryTraderMenuRsp 交易端菜单
 type QueryTraderMenuRsp struct {
-	QuoteMenu     []QuotePrimaryMenu     `json:"QuoteMenu"`     // 报价牌分类菜单
-	OperationMenu []OperationPrimaryMenu `json:"OperationMenu"` // 功能菜单
-}
-
-// QuotePrimaryMenu 报价牌一级分类菜单
-type QuotePrimaryMenu struct {
-	Index        int                  `json:"Index"`        // 序号
-	Key          string               `json:"Key"`          // 键名
-	Name         string               `json:"Name"`         // 菜单名称
-	SubTitleType int                  `json:"SubTitleType"` // 子菜单标题模式:0-市场名称;1-外部交易所名称
-	TradeModes   string               `json:"TradeModes"`   // 包含市场交易类型
-	SubMenus     []QuoteSecondaryMenu `json:"SubMenus"`     // 子菜单
-}
-
-// QuoteSecondaryMenu 报价牌二级分类菜单
-type QuoteSecondaryMenu struct {
-	Index          int    `json:"Index"`                                  // 序号
-	MarketID       int    `json:"MarketID"`                               // 市场ID
-	TradeMode      int    `json:"TradeMode"`                              // 交易模式
-	MenuTitle      string `json:"MenuTitle" xorm:"'ExExchangeName'"`      // 菜单标题(市场名称或外部交易所名称)
-	GoodsGroupIDs  []int  `json:"GoodsGroupIDs"`                          // 商品组ID列表
-	ExExchangeID   int    `json:"ExExchangeID" xorm:"'ExExchangeID'"`     // 外部交易所ID
-	ExExchangeCode string `json:"ExExchangeCode" xorm:"'ExExchangeCode'"` // 外部交易所代码
-}
-
-// OperationPrimaryMenu 一级功能菜单
-type OperationPrimaryMenu struct {
-	Key      string                   `json:"Key"`      // 菜单KEY
-	Label    string                   `json:"Label"`    // 菜单标题
-	Children []OperationSecondaryMenu `json:"Children"` // 二级功能菜单
-}
-
-// OperationSecondaryMenu 二级功能菜单
-type OperationSecondaryMenu struct {
-	Key     string             `json:"Key"`     // 菜单KEY
-	Label   string             `json:"Label"`   // 菜单标题
-	TabList []OperationTabMenu `json:"TabList"` // 三级功能菜单
-}
-
-// OperationTabMenu 三级功能菜单
-type OperationTabMenu struct {
-	Key   string `json:"Key"`   // 菜单KEY
-	Label string `json:"Label"` // 菜单标题
+	QuoteMenu     []models.QuotePrimaryMenu     `json:"QuoteMenu"`     // 报价牌分类菜单
+	OperationMenu []models.OperationPrimaryMenu `json:"OperationMenu"` // 功能菜单
 }
 
 // QueryTraderMenu 查询交易端菜单
@@ -88,7 +43,7 @@ func QueryTraderMenu(c *gin.Context) {
 
 	var queryTraderMenuRsp QueryTraderMenuRsp
 	// 获取行情报价牌分类菜单
-	if datas, err := getQuoteMenu(req.LoginID); err == nil {
+	if datas, err := models.GetQuoteMenu(req.LoginID); err == nil {
 		queryTraderMenuRsp.QuoteMenu = datas
 	} else {
 		logger.GetLogger().Errorf("QueryTraderMenu failed: %s", err.Error())
@@ -96,7 +51,7 @@ func QueryTraderMenu(c *gin.Context) {
 		return
 	}
 	// 获取功能菜单
-	if datas, err := getOperationMenu(); err == nil {
+	if datas, err := models.GetOperationMenu(); err == nil {
 		queryTraderMenuRsp.OperationMenu = datas
 	} else {
 		logger.GetLogger().Errorf("QueryTraderMenu failed: %s", err.Error())
@@ -105,238 +60,10 @@ func QueryTraderMenu(c *gin.Context) {
 	}
 
 	// 查询成功
-	logger.GetLogger().Infof("QueryTraderMenu successed: %v", queryTraderMenuRsp)
+	logger.GetLogger().Debugln("QueryTraderMenu successed: %v", queryTraderMenuRsp)
 	appG.Response(http.StatusOK, e.SUCCESS, queryTraderMenuRsp)
 }
 
-// getQuoteMenu 获取行情报价牌分类菜单
-func getQuoteMenu(loginID int) ([]QuotePrimaryMenu, error) {
-	engine := db.GetEngine()
-	rst := make([]QuotePrimaryMenu, 0)
-
-	// 账户下有权限的市场ID列表
-	var marketIDs []int
-
-	// 获取账户类型 - 1:交易所 2:机构 3:会员子机构 4:经纪人 5:投资者 6:客户  (目前可能登录交易端的账号类型为 2 5)
-	userAccount := new(models.Useraccount)
-	has, err := engine.Join("INNER", "LOGINACCOUNT", "USERACCOUNT.UserID = LOGINACCOUNT.UserID").Where("LOGINACCOUNT.LoginID = ?", loginID).Get(userAccount)
-	if err != nil || !has {
-		return nil, err
-	}
-	if userAccount.Usertype == 5 {
-		// 如果账户类型为5(投资者),则需要通过其所属经济会员来获取市场权限(表:AreaRoleMarket, 条件:对应市场状态为正常;角色类型:经济会员)
-		if err := engine.Table("AREAROLEMARKET").
-			Cols("AREAROLEMARKET.MARKETID").
-			Join("INNER", "MARKET", "MARKET.MARKETID = AREAROLEMARKET.MARKETID").
-			Where("MARKET.MARKETSTATUS = 2 and AREAROLEMARKET.ROLETYPE = 7 and AREAROLEMARKET.AREAUSERID = ?", userAccount.Memberuserid).Find(&marketIDs); err != nil {
-			return nil, err
-		}
-	} else {
-		// 非投资者账号直接通过资金账号获取市场权限(表:TAAccountMarket)
-		var taAccounts []string // 账户下所有资金账户
-
-		// 先要获取当前登录账户对应的资金账户;如果为外部子资金账号(TaAccount.TaAccountType = 1),则使用TaAccount.FromAccountID来获取市场权限
-		type taAccount struct {
-			AccountID     int `xorm:"ACCOUNTID"`
-			TaAccountType int `xorm:"TAACCOUNTTYPE"`
-			FromAccountID int `xorm:"FROMACCOUNTID"`
-		}
-		datas := make([]taAccount, 0)
-		if err := engine.Table("LOGINTAACCOUNT").
-			Join("INNER", "TAACCOUNT", "LOGINTAACCOUNT.ACCOUNTID = TAACCOUNT.ACCOUNTID").
-			Cols("TAACCOUNT.ACCOUNTID", "TAACCOUNT.TAACCOUNTTYPE", "TAACCOUNT.FROMACCOUNTID").
-			Where("LOGINTAACCOUNT.LOGINID = ?", loginID).Find(&datas); err != nil {
-			return nil, err
-		}
-		// 如果一条记录都没有(未配置自营会员资金账户)则直接通过资金账户表获取
-		if len(datas) == 0 {
-			// 这里要注意,TaAccount表与LoginAccount表关联时,要使用TaAccount.RelatedUserID
-			if err := engine.Table("TAACCOUNT").
-				Join("INNER", "LOGINACCOUNT", "TAACCOUNT.RELATEDUSERID = LOGINACCOUNT.USERID").
-				Cols("TAACCOUNT.ACCOUNTID", "TAACCOUNT.TAACCOUNTTYPE", "TAACCOUNT.FROMACCOUNTID").
-				Where("LOGINACCOUNT.LOGINID = ?", loginID).Find(&datas); err != nil {
-				return nil, err
-			}
-		}
-		for _, v := range datas {
-			if v.TaAccountType == 1 {
-				// 外部资金账户使用TaAccount.FromAccountID来获取市场权限
-				taAccounts = append(taAccounts, strconv.Itoa(v.FromAccountID))
-			} else {
-				taAccounts = append(taAccounts, strconv.Itoa(v.AccountID))
-			}
-		}
-
-		// 获取资金账户对应的市场权限(有权限的市场ID)
-		if len(taAccounts) > 0 {
-			taAccountStr := strings.Join(taAccounts, ",")
-			if err := engine.Table("TAACCOUNTMARKET").
-				Join("INNER", "MARKET", "MARKET.MARKETID = TAACCOUNTMARKET.MARKETID").
-				Cols("TAACCOUNTMARKET.MARKETID").
-				In("TAACCOUNTMARKET.ACCOUNTID", taAccountStr).
-				And("MARKET.MARKETSTATUS = 2").Find(&marketIDs); err != nil {
-				return nil, err
-			}
-		}
-	}
-
-	// ********************* 构建行情报价牌菜单 *********************
-	// 获取一级菜单列表
-	// datas := make([]models.Tablecolumnconfig, 0)
-	// if err := engine.Where("TableKey = 'trader_master_menu' and IsShow = 1").Find(&datas); err != nil {
-	// 	return nil, err
-	// }
-	datas := make([]models.Funcmenulist, 0)
-	if err := engine.Join("INNER", "ROLEFUNCMENU", "FUNCMENULIST.RESOURCECODE = ROLEFUNCMENU.RESOURCECODE").
-		Where("FUNCMENULIST.PARENTCODE = 'trader_master_menu'").
-		Asc("SORT").
-		Find(&datas); err != nil {
-		return nil, err
-	}
-	// 构建一级菜单对象
-	for i, v := range datas {
-		quotePrimaryMenu := QuotePrimaryMenu{
-			Index:    i,
-			Key:      v.Resourcecode,
-			Name:     v.Resourcename,
-			SubMenus: make([]QuoteSecondaryMenu, 0),
-		}
-		// 跳过自选
-		if v.Resourcecode == "optional" {
-			rst = append(rst, quotePrimaryMenu)
-			continue
-		}
-		// URL:模式,0-使用市场名称,1-使用外部交易所名称;Remark:包含市场交易模式
-		quotePrimaryMenu.SubTitleType, _ = strconv.Atoi(v.URL)
-		quotePrimaryMenu.TradeModes = v.Remark
-
-		// 如果传入的LoginID获取不到有权限的市场ID列表(有可能LoginID是错误的),则不构建二级子菜单
-		if len(marketIDs) == 0 {
-			rst = append(rst, quotePrimaryMenu)
-			continue
-		}
-
-		// 构建二级子菜单对象
-		marketIDsStr := utils.JoinItoString(marketIDs, ",")
-		if quotePrimaryMenu.SubTitleType == 0 {
-			// 获取目标交易模式的市场信息
-			markets := make([]models.Market, 0)
-			if err := engine.Where(fmt.Sprintf(`TradeMode in (%s) and MarketID in (%s)`, quotePrimaryMenu.TradeModes, marketIDsStr)).Find(&markets); err != nil {
-				return nil, err
-			}
-			// 使用市场名称
-			for mi, mv := range markets {
-				quoteSecondaryMenu := QuoteSecondaryMenu{
-					Index:         mi,
-					MarketID:      int(mv.Marketid),
-					TradeMode:     int(mv.Trademode),
-					MenuTitle:     mv.Marketname,
-					GoodsGroupIDs: make([]int, 0),
-				}
-				quotePrimaryMenu.SubMenus = append(quotePrimaryMenu.SubMenus, quoteSecondaryMenu)
-			}
-		} else {
-			// 使用外部交易所名称
-			quoteSecondaryMenus := make([]QuoteSecondaryMenu, 0)
-			sql := fmt.Sprintf(`select distinct
-									e.autoid ExExchangeID,
-									e.ExExchangeName,
-									e.ExExchangeCode 
-								from ExternalExchange e
-								inner join goodsgroup g  on g.exexchangeid = e.autoid
-								inner join Market m on g.marketid = m.marketid
-								where m.trademode in (%s) and m.marketid in (%s)`, quotePrimaryMenu.TradeModes, marketIDsStr)
-			if err := engine.SQL(sql).Find(&quoteSecondaryMenus); err != nil {
-				return nil, err
-			}
-			// 获取外部交易所对应的商品组信息
-			for ei, ev := range quoteSecondaryMenus {
-				q := &quoteSecondaryMenus[ei]
-				q.Index = ei
-				// 商品组列表
-				goodsgroups := make([]models.Goodsgroup, 0)
-				if err := engine.Where("Exexchangeid = ?", ev.ExExchangeID).Find(&goodsgroups); err != nil {
-					return nil, err
-				}
-				marketID := 0
-				var goodsGroupIDs []int
-				for _, gv := range goodsgroups {
-					marketID = int(gv.Marketid)
-					goodsGroupIDs = append(goodsGroupIDs, int(gv.Goodsgroupid))
-				}
-				q.MarketID = marketID
-				q.GoodsGroupIDs = goodsGroupIDs
-			}
-			quotePrimaryMenu.SubMenus = quoteSecondaryMenus
-		}
-
-		rst = append(rst, quotePrimaryMenu)
-	}
-
-	return rst, nil
-}
-
-// getOperationMenu 获取功能菜单
-func getOperationMenu() ([]OperationPrimaryMenu, error) {
-	engine := db.GetEngine()
-	rst := make([]OperationPrimaryMenu, 0)
-
-	// 获取一级功能菜单
-	opm := make([]models.Funcmenulist, 0)
-	if err := engine.Join("INNER", "ROLEFUNCMENU", "FUNCMENULIST.RESOURCECODE = ROLEFUNCMENU.RESOURCECODE").
-		Where("FUNCMENULIST.PARENTCODE = 'trader_operation_master_menu'").
-		Asc("SORT").
-		Find(&opm); err != nil {
-		return nil, err
-	}
-	for _, pv := range opm {
-		var operationPrimaryMenu = OperationPrimaryMenu{
-			Key:      pv.Resourcecode,
-			Label:    pv.Resourcename,
-			Children: make([]OperationSecondaryMenu, 0),
-		}
-
-		// 获取二级功能菜单
-		osm := make([]models.Funcmenulist, 0)
-		if err := engine.Join("INNER", "ROLEFUNCMENU", "FUNCMENULIST.RESOURCECODE = ROLEFUNCMENU.RESOURCECODE").
-			Where("FUNCMENULIST.PARENTCODE = ?", operationPrimaryMenu.Key).
-			Asc("SORT").
-			Find(&osm); err != nil {
-			return nil, err
-		}
-		for _, sv := range osm {
-			var operationSecondaryMenu = OperationSecondaryMenu{
-				Key:     sv.Resourcecode,
-				Label:   sv.Resourcename,
-				TabList: make([]OperationTabMenu, 0),
-			}
-
-			// 获取三级功能菜单
-			otm := make([]models.Funcmenulist, 0)
-			if err := engine.Join("INNER", "ROLEFUNCMENU", "FUNCMENULIST.RESOURCECODE = ROLEFUNCMENU.RESOURCECODE").
-				Where("FUNCMENULIST.PARENTCODE = ?", operationSecondaryMenu.Key).
-				Asc("SORT").
-				Find(&otm); err != nil {
-				return nil, err
-			}
-			for _, tv := range otm {
-				var operationTabMenu = OperationTabMenu{
-					Key:   tv.Resourcecode,
-					Label: tv.Resourcename,
-				}
-
-				operationSecondaryMenu.TabList = append(operationSecondaryMenu.TabList, operationTabMenu)
-			}
-
-			operationPrimaryMenu.Children = append(operationPrimaryMenu.Children, operationSecondaryMenu)
-		}
-
-		rst = append(rst, operationPrimaryMenu)
-	}
-
-	return rst, nil
-}
-
 // QueryTableDefineReq 查询交易端列表头信息请求参数
 type QueryTableDefineReq struct {
 	TableKey string `json:"TableKey"` // 表key
@@ -344,15 +71,15 @@ type QueryTableDefineReq struct {
 
 // QueryTableDefineRsp 查询交易端列表头信息返回模型
 type QueryTableDefineRsp struct {
-	models.Tabledefine `xorm:"extends"`
-	Columns            []models.Tablecolumnconfig `json:"columns" xorm:"-"` // 列头信息数组
+	dbmodels.Tabledefine `xorm:"extends"`
+	Columns              []dbmodels.Tablecolumnconfig `json:"columns" xorm:"-"` // 列头信息数组
 }
 
 // QueryTableDefine 查询交易端列表头信息
 // @Summary 查询交易端列表头信息
 // @Produce json
 // @Param TableKey query string false "表key"
-// @Success 200 {object} models.Tablecolumnconfig
+// @Success 200 {object} QueryTableDefineRsp
 // @Failure 500 {object} app.Response
 // @Router /Common/QueryTableDefine [get]
 // @Tags 通用服务
@@ -367,32 +94,33 @@ func QueryTableDefine(c *gin.Context) {
 		return
 	}
 
-	engine := db.GetEngine()
-	tableDefines := make([]QueryTableDefineRsp, 0)
+	rst := make([]QueryTableDefineRsp, 0)
+
 	// 获取表定义
-	s := engine.Where("TABLEDEFINE.TableType = 2")
-	if len(req.TableKey) > 0 {
-		s = s.And("TABLEDEFINE.TableKey = ?", req.TableKey)
-	}
-	if err := s.Find(&tableDefines); err != nil {
+	tableDefines, err := models.GetClientTableDefines(req.TableKey)
+	if err != nil {
 		logger.GetLogger().Errorf("QueryTableDefine failed: %s", err.Error())
 		appG.Response(http.StatusBadRequest, e.ERROR_QUERY_FAIL, nil)
 		return
 	}
 	for i, v := range tableDefines {
-		tableDefine := &tableDefines[i]
+		var queryTableDefineRsp QueryTableDefineRsp
+
+		// 表数据
+		queryTableDefineRsp.Tabledefine = tableDefines[i]
 		// 获取列表数据
-		tablecolumnconfigs := make([]models.Tablecolumnconfig, 0)
-		// 这里的表名必须要大写 (Oracle的表名都是大写)
-		if err := engine.Join("INNER", "TABLEDEFINE", "TABLEDEFINE.TableKey = TABLECOLUMNCONFIG.TableKey").
-			Where("TABLEDEFINE.TableType = 2 and TABLEDEFINE.TableKey = ?", v.Tablekey).Find(&tablecolumnconfigs); err != nil {
+		tablecolumnconfigs, err := models.GetClientTableColumns(v.Tablekey)
+		if err != nil {
 			logger.GetLogger().Errorf("QueryTableDefine failed: %s", err.Error())
 			appG.Response(http.StatusBadRequest, e.ERROR_QUERY_FAIL, nil)
+			return
 		}
-		tableDefine.Columns = tablecolumnconfigs
+		queryTableDefineRsp.Columns = tablecolumnconfigs
+
+		rst = append(rst, queryTableDefineRsp)
 	}
 
 	// 查询成功
-	logger.GetLogger().Infof("QueryTableDefine successed: %v", tableDefines)
-	appG.Response(http.StatusOK, e.SUCCESS, tableDefines)
+	logger.GetLogger().Debugln("QueryTableDefine successed: %v", rst)
+	appG.Response(http.StatusOK, e.SUCCESS, rst)
 }

+ 7 - 7
controllers/cptrade/cpTrade.go

@@ -123,7 +123,7 @@ func QueryPreasleApply(c *gin.Context) {
 	}
 
 	// 查询成功
-	logger.GetLogger().Infof("QueryPreasleApply successed: %v", datas)
+	logger.GetLogger().Debugln("QueryPreasleApply successed: %v", datas)
 	appG.Response(http.StatusOK, e.SUCCESS, datas)
 }
 
@@ -216,7 +216,7 @@ func QueryUserGoodsData(c *gin.Context) {
 	}
 
 	// 查询成功
-	logger.GetLogger().Infof("QueryUserGoodsData successed: %v", datas)
+	logger.GetLogger().Debugln("QueryUserGoodsData successed: %v", datas)
 	appG.Response(http.StatusOK, e.SUCCESS, datas)
 }
 
@@ -312,7 +312,7 @@ func QueryPositionCancel(c *gin.Context) {
 	}
 
 	// 查询成功
-	logger.GetLogger().Infof("QueryPositionCancel successed: %v", datas)
+	logger.GetLogger().Debugln("QueryPositionCancel successed: %v", datas)
 	appG.Response(http.StatusOK, e.SUCCESS, datas)
 }
 
@@ -430,7 +430,7 @@ func QueryPresaleGoodsEx(c *gin.Context) {
 	}
 
 	// 查询成功
-	logger.GetLogger().Infof("QueryPresaleGoodsEx successed: %v", datas)
+	logger.GetLogger().Debugln("QueryPresaleGoodsEx successed: %v", datas)
 	appG.Response(http.StatusOK, e.SUCCESS, datas)
 }
 
@@ -524,7 +524,7 @@ func QueryCPTradeMyBidInfos(c *gin.Context) {
 	}
 
 	// 查询成功
-	logger.GetLogger().Infof("QueryCPTradeMyBidInfos successed: %v", datas)
+	logger.GetLogger().Debugln("QueryCPTradeMyBidInfos successed: %v", datas)
 	appG.Response(http.StatusOK, e.SUCCESS, datas)
 }
 
@@ -643,7 +643,7 @@ func QueryMyCPTradeGoods(c *gin.Context) {
 	}
 
 	// 查询成功
-	logger.GetLogger().Infof("QueryMyCPTradeGoods successed: %v", datas)
+	logger.GetLogger().Debugln("QueryMyCPTradeGoods successed: %v", datas)
 	appG.Response(http.StatusOK, e.SUCCESS, datas)
 }
 
@@ -769,6 +769,6 @@ func QueryCPTradeOrderDetail(c *gin.Context) {
 	}
 
 	// 查询成功
-	logger.GetLogger().Infof("QueryCPTradeOrderDetail successed: %v", datas)
+	logger.GetLogger().Debugln("QueryCPTradeOrderDetail successed: %v", datas)
 	appG.Response(http.StatusOK, e.SUCCESS, datas)
 }

+ 1 - 1
controllers/delivery/delivery.go

@@ -127,6 +127,6 @@ func QueryDeliveryRelation(c *gin.Context) {
 	}
 
 	// 查询成功
-	logger.GetLogger().Infof("QueryDeliveryRelation successed: %v", datas)
+	logger.GetLogger().Debugln("QueryDeliveryRelation successed: %v", datas)
 	appG.Response(http.StatusOK, e.SUCCESS, datas)
 }

+ 3 - 3
controllers/erms2/erms2.go

@@ -124,7 +124,7 @@ func QueryInnerTradeDetail(c *gin.Context) {
 	}
 
 	// 查询成功
-	logger.GetLogger().Infof("QueryInnerTradeDetail successed: %v", datas)
+	logger.GetLogger().Debugln("QueryInnerTradeDetail successed: %v", datas)
 	appG.Response(http.StatusOK, e.SUCCESS, datas)
 }
 
@@ -258,7 +258,7 @@ func QueryArbitrageStrategy(c *gin.Context) {
 	}
 
 	// 查询成功
-	logger.GetLogger().Infof("QueryArbitrageStrategy successed: %v", datas)
+	logger.GetLogger().Debugln("QueryArbitrageStrategy successed: %v", datas)
 	appG.Response(http.StatusOK, e.SUCCESS, datas)
 }
 
@@ -403,6 +403,6 @@ func QuerySpotContract(c *gin.Context) {
 	}
 
 	// 查询成功
-	logger.GetLogger().Infof("QuerySpotContract successed: %v", datas)
+	logger.GetLogger().Debugln("QuerySpotContract successed: %v", datas)
 	appG.Response(http.StatusOK, e.SUCCESS, datas)
 }

+ 5 - 5
controllers/order/order.go

@@ -172,7 +172,7 @@ func QueryTradePosition(c *gin.Context) {
 	}
 
 	// 查询成功
-	logger.GetLogger().Infof("QueryTradePosition successed: %v", rst)
+	logger.GetLogger().Debugln("QueryTradePosition successed: %v", rst)
 	appG.Response(http.StatusOK, e.SUCCESS, rst)
 }
 
@@ -285,7 +285,7 @@ func QueryTradeOrderDetail(c *gin.Context) {
 	}
 
 	// 查询成功
-	logger.GetLogger().Infof("QueryTradeOrderDetail successed: %v", datas)
+	logger.GetLogger().Debugln("QueryTradeOrderDetail successed: %v", datas)
 	appG.Response(http.StatusOK, e.SUCCESS, datas)
 }
 
@@ -368,7 +368,7 @@ func QueryHisTradeOrderDetail(c *gin.Context) {
 	}
 
 	// 查询成功
-	logger.GetLogger().Infof("QueryHisTradeOrderDetail successed: %v", datas)
+	logger.GetLogger().Debugln("QueryHisTradeOrderDetail successed: %v", datas)
 	appG.Response(http.StatusOK, e.SUCCESS, datas)
 }
 
@@ -456,7 +456,7 @@ func QueryTradeDetail(c *gin.Context) {
 	}
 
 	// 查询成功
-	logger.GetLogger().Infof("QueryTradeDetail successed: %v", datas)
+	logger.GetLogger().Debugln("QueryTradeDetail successed: %v", datas)
 	appG.Response(http.StatusOK, e.SUCCESS, datas)
 }
 
@@ -554,6 +554,6 @@ func QueryHisTradeDetail(c *gin.Context) {
 	}
 
 	// 查询成功
-	logger.GetLogger().Infof("QueryHisTradeDetail successed: %v", datas)
+	logger.GetLogger().Debugln("QueryHisTradeDetail successed: %v", datas)
 	appG.Response(http.StatusOK, e.SUCCESS, datas)
 }

+ 5 - 5
controllers/szdz/szdz.go

@@ -180,7 +180,7 @@ func QueryRecieptOrder(c *gin.Context) {
 	}
 
 	// 查询成功返回
-	logger.GetLogger().Infof("QueryRecieptOrder successed: %v", datas)
+	logger.GetLogger().Debugln("QueryRecieptOrder successed: %v", datas)
 	if req.PageSize > 0 {
 		// 分页
 		appG.ResponseByPage(http.StatusOK, e.SUCCESS, datas, app.PageInfo{Page: req.Page, PageSize: req.PageSize, Total: total})
@@ -241,7 +241,7 @@ func QueryGoodsPickup(c *gin.Context) {
 	}
 
 	// 查询成功返回
-	logger.GetLogger().Infof("QueryGoodsPickup successed: %v", datas)
+	logger.GetLogger().Debugln("QueryGoodsPickup successed: %v", datas)
 	appG.Response(http.StatusOK, e.SUCCESS, datas)
 }
 
@@ -316,7 +316,7 @@ func QueryConvertLog(c *gin.Context) {
 	}
 
 	// 查询成功返回
-	logger.GetLogger().Infof("QueryConvertLog successed: %v", datas)
+	logger.GetLogger().Debugln("QueryConvertLog successed: %v", datas)
 	appG.Response(http.StatusOK, e.SUCCESS, datas)
 }
 
@@ -355,7 +355,7 @@ func SearchWhite(c *gin.Context) {
 	}
 
 	// 查询成功返回
-	logger.GetLogger().Infof("SearchWhite successed: %v", datas)
+	logger.GetLogger().Debugln("SearchWhite successed: %v", datas)
 	appG.Response(http.StatusOK, e.SUCCESS, datas)
 }
 
@@ -408,6 +408,6 @@ func QueryConvertConfig(c *gin.Context) {
 	}
 
 	// 查询成功返回
-	logger.GetLogger().Infof("QueryConvertConfigReq successed: %v", datas)
+	logger.GetLogger().Debugln("QueryConvertConfigReq successed: %v", datas)
 	appG.Response(http.StatusOK, e.SUCCESS, datas)
 }

+ 4 - 4
controllers/taaccount/taaccount.go

@@ -103,11 +103,11 @@ func QueryAmountLog(c *gin.Context) {
 			rst = datas[0:0]
 		}
 
-		logger.GetLogger().Infof("QueryAmountLog successed: %v", rst)
+		logger.GetLogger().Debugln("QueryAmountLog successed: %v", rst)
 		appG.ResponseByPage(http.StatusOK, e.SUCCESS, rst, app.PageInfo{Page: req.Page, PageSize: req.PageSize, Total: len(datas)})
 	} else {
 		// 不分页
-		logger.GetLogger().Infof("QueryAmountLog successed: %v", datas)
+		logger.GetLogger().Debugln("QueryAmountLog successed: %v", datas)
 		appG.Response(http.StatusOK, e.SUCCESS, datas)
 	}
 }
@@ -213,11 +213,11 @@ func QueryHisAmountLog(c *gin.Context) {
 			rst = datas[0:0]
 		}
 
-		logger.GetLogger().Infof("QueryHisAmountLog successed: %v", rst)
+		logger.GetLogger().Debugln("QueryHisAmountLog successed: %v", rst)
 		appG.ResponseByPage(http.StatusOK, e.SUCCESS, rst, app.PageInfo{Page: req.Page, PageSize: req.PageSize, Total: len(datas)})
 	} else {
 		// 不分页
-		logger.GetLogger().Infof("QueryHisAmountLog successed: %v", datas)
+		logger.GetLogger().Debugln("QueryHisAmountLog successed: %v", datas)
 		appG.Response(http.StatusOK, e.SUCCESS, datas)
 	}
 }

+ 48 - 29
controllers/user/login.go

@@ -1,12 +1,8 @@
 package user
 
 import (
-	"encoding/hex"
-	"fmt"
-	"mtp2_if/db"
 	"mtp2_if/global/app"
 	"mtp2_if/global/e"
-	"mtp2_if/global/utils"
 	"mtp2_if/logger"
 	"mtp2_if/models"
 	"net/http"
@@ -34,36 +30,59 @@ func GetLoginID(c *gin.Context) {
 	// 获取请求参数
 	var req GetLoginIDReq
 	if err := appG.C.ShouldBindQuery(&req); err != nil {
-		logger.GetLogger().Errorf("QueryPreasleApply failed: %s", err.Error())
+		logger.GetLogger().Errorf("GetLoginID failed: %s", err.Error())
 		appG.Response(http.StatusBadRequest, e.INVALID_PARAMS, nil)
 		return
 	}
 
-	engine := db.GetEngine()
-	loginid := req.UserName // 如果找不到,则直接把登录代码返回去
-
 	// 通过登录代码查询登录账号
-	var loginaccount models.Loginaccount
-	has, _ := engine.Where("Logincode = ?", req.UserName).Get(&loginaccount)
-	if has {
-		loginid = fmt.Sprintf("%v", loginaccount.Loginid)
-	} else {
-		// 通过手机号码查询登录账号
-		// 手机号码需要AES加密
-		key, _ := hex.DecodeString(utils.AESSecretKey)
-		if mobileEncrypted, err := utils.AESEncrypt([]byte(req.UserName), key); err == nil {
-			// 加密成功后进行查询
-			// has, err := engine.Table("LOGINACCOUNT").Alias("L").Join("INNER", []string{"USERINFO", "U"}, "U.USERID = L.USERID").
-			// 	Where("U.MOBILE = ?", hex.EncodeToString(mobileEncrypted)).Get(&loginaccount)
-			has, _ := engine.Join("INNER", "USERINFO", "USERINFO.USERID = LOGINACCOUNT.USERID").
-				Where("USERINFO.MOBILE = ?", hex.EncodeToString(mobileEncrypted)).Get(&loginaccount)
-			if has {
-				loginid = fmt.Sprintf("%v", loginaccount.Loginid)
-			}
-		}
+	if loginaccount, _ := models.GetLoginAccountByLoginCode(req.UserName); loginaccount != nil {
+		appG.Response(http.StatusOK, e.SUCCESS, loginaccount.Loginid)
+		return
 	}
 
-	// 查询成功
-	logger.GetLogger().Infof("GetLoginID successed: %v", loginaccount)
-	appG.Response(http.StatusOK, e.SUCCESS, loginid)
+	// 通过手机号码查询登录账号
+	if loginaccount, _ := models.GetLoginAccountByLoginCode(req.UserName); loginaccount != nil {
+		appG.Response(http.StatusOK, e.SUCCESS, loginaccount.Loginid)
+		return
+	}
+
+	// 找不到或查询错误,都把请求代码返回去
+	appG.Response(http.StatusOK, e.SUCCESS, req.UserName)
 }
+
+// type LoginQueryReq struct {
+// 	UserID int `form:"userID" binding:"required"`
+// }
+
+// type LoginQueryRsp struct {
+// 	UserAccount dbmodels.Useraccount `json:"userAccount"` // 账户信息
+// 	TaAccounts  []dbmodels.Taaccount `json:"taAccounts"`  // 资金账户列表
+
+// }
+
+// func LoginQuery(c *gin.Context) {
+// 	appG := app.Gin{C: c}
+
+// 	// 获取请求参数
+// 	var req LoginQueryReq
+// 	if err := appG.C.ShouldBindQuery(&req); err != nil {
+// 		logger.GetLogger().Errorf("LoginQuery failed: %s", err.Error())
+// 		appG.Response(http.StatusBadRequest, e.INVALID_PARAMS, nil)
+// 		return
+// 	}
+
+// 	var (
+// 		userAccount *dbmodels.Useraccount // 用户表信息
+// 		err         error
+// 	)
+
+// 	// 通过登录代码查询登录账号
+// 	if userAccount, err = models.GetUserAccount(req.UserID); err != nil {
+// 		// 查询失败
+// 		logger.GetLogger().Errorf("LoginQuery failed: %s", err.Error())
+// 		appG.Response(http.StatusBadRequest, e.ERROR_QUERY_FAIL, nil)
+// 		return
+// 	}
+
+// }

+ 27 - 27
controllers/user/user.go

@@ -1,7 +1,7 @@
 package user
 
 import (
-	"mtp2_if/db"
+	"mtp2_if/dbmodels"
 	"mtp2_if/global/app"
 	"mtp2_if/global/e"
 	"mtp2_if/logger"
@@ -13,13 +13,13 @@ import (
 
 // QueryUserReferNumReq 获取用户邀请码请求参数
 type QueryUserReferNumReq struct {
-	UserID string `form:"userID" binding:"required"`
+	UserID int `form:"userID" binding:"required"`
 }
 
 // QueryUserReferNum 获取用户邀请码
 // @Summary 获取用户邀请码
 // @Produce json
-// @Param userID query string true "用户ID"
+// @Param userID query int true "用户ID"
 // @Success 200 {object} app.Response
 // @Failure 500 {object} app.Response
 // @Router /User/QueryUserReferNum [get]
@@ -35,12 +35,11 @@ func QueryUserReferNum(c *gin.Context) {
 		return
 	}
 
-	// 查询数据
-	engine := db.GetEngine()
-	var userAccount models.Useraccount
-
-	_, err := engine.Where("USERID = ?", req.UserID).Get(&userAccount)
-	if err != nil {
+	var (
+		userAccount *dbmodels.Useraccount
+		err         error
+	)
+	if userAccount, err = models.GetUserAccount(req.UserID); err != nil {
 		// 查询失败
 		logger.GetLogger().Errorf("QueryUserReferNum failed: %s", err.Error())
 		appG.Response(http.StatusBadRequest, e.ERROR_QUERY_FAIL, nil)
@@ -48,21 +47,21 @@ func QueryUserReferNum(c *gin.Context) {
 	}
 
 	// 查询成功
-	logger.GetLogger().Infof("QueryUserReferNum successed: %v", userAccount.Refernum)
+	logger.GetLogger().Debugln("QueryUserReferNum successed: %v", userAccount.Refernum)
 	appG.Response(http.StatusOK, e.SUCCESS, userAccount.Refernum)
 }
 
 // QueryUserInfoReq 获取用户信息请求参数
 type QueryUserInfoReq struct {
-	UserID string `form:"userID" binding:"required"`
+	UserID int `form:"userID" binding:"required"`
 }
 
 // QueryUserInfo 获取用户信息
 // @Summary 获取用户信息
 // @Produce json
 // @Security ApiKeyAuth
-// @Param userID query string true "用户ID"
-// @Success 200 {object} models.Userinfo
+// @Param userID query int true "用户ID"
+// @Success 200 {object} dbmodels.Userinfo
 // @Failure 500 {object} app.Response
 // @Router /User/QueryUserInfo [get]
 // @Tags 用户信息
@@ -78,11 +77,11 @@ func QueryUserInfo(c *gin.Context) {
 	}
 
 	// 查询数据
-	engine := db.GetEngine()
-	var data models.Userinfo
-
-	_, err := engine.Where("USERID = ?", req.UserID).Get(&data)
-	if err != nil {
+	var (
+		data *dbmodels.Userinfo
+		err  error
+	)
+	if data, err = models.GetUserInfo(req.UserID); err != nil {
 		// 查询失败
 		logger.GetLogger().Errorf("QueryUserInfo failed: %s", err.Error())
 		appG.Response(http.StatusBadRequest, e.ERROR_QUERY_FAIL, nil)
@@ -90,7 +89,7 @@ func QueryUserInfo(c *gin.Context) {
 	}
 
 	// 查询成功
-	logger.GetLogger().Infof("QueryUserInfo successed: %v", data)
+	logger.GetLogger().Debugln("QueryUserInfo successed: %v", data)
 	appG.Response(http.StatusOK, e.SUCCESS, data)
 }
 
@@ -120,22 +119,23 @@ func GetUserAuthStatus(c *gin.Context) {
 	}
 
 	isAuth := false
-	var userAccount models.Useraccount
-	engine := db.GetEngine()
-	has, err := engine.Where("USERID = ?", req.UserID).Get(&userAccount)
-	if err != nil {
-		// 获取行情报价牌分类菜单
+	var (
+		userAccount *dbmodels.Useraccount
+		err         error
+	)
+	if userAccount, err = models.GetUserAccount(req.UserID); err != nil {
+		// 查询失败
 		logger.GetLogger().Errorf("GetUserAuthStatus failed: %s", err.Error())
-		appG.Response(http.StatusBadRequest, e.ERROR_QUERY_QUOTEMENU_FAIL, nil)
+		appG.Response(http.StatusBadRequest, e.ERROR_QUERY_FAIL, nil)
 		return
 	}
-	if has {
+	if userAccount != nil {
 		if userAccount.Hasauth == 1 {
 			isAuth = true
 		}
 	}
 
 	// 查询成功
-	logger.GetLogger().Infof("GetUserAuthStatus successed: %v", isAuth)
+	logger.GetLogger().Debugln("GetUserAuthStatus successed: %v", isAuth)
 	appG.Response(http.StatusOK, e.SUCCESS, isAuth)
 }

+ 321 - 0
dbmodels/accountDBModels.go

@@ -0,0 +1,321 @@
+package dbmodels
+
+import "time"
+
+// Loginaccount 登录账户
+type Loginaccount struct {
+	Loginid         int64     `json:"loginid"  xorm:"'LOGINID'" binding:"required"` // 登陆账号
+	Userid          int64     `json:"userid"  xorm:"'USERID'"`                      // 用户ID
+	Loginfailnum    int32     `json:"loginfailnum"  xorm:"'LOGINFAILNUM'"`          // 连续登录失败次数(登录成功时清零)
+	Password        string    `json:"password"  xorm:"'PASSWORD'"`                  // 登陆密码
+	Loginusertype   int32     `json:"loginusertype"  xorm:"'LOGINUSERTYPE'"`        // 登录账号类型 - 1:投资者 2:机构交易员
+	Loginstatus     int32     `json:"loginstatus"  xorm:"'LOGINSTATUS'"`            // 登录账号状态 1:正常 2:冻结 3:无效
+	Lastlogintime   time.Time `json:"lastlogintime"  xorm:"'LASTLOGINTIME'"`        // 最新登录时间
+	Lastloginmode   int32     `json:"lastloginmode"  xorm:"'LASTLOGINMODE'"`        // 最新登录方式(客户端类型) -  0:保留为未填终端类型 1:PC管理端 2:PC交易端 3:手机客户端_安卓 4:网页客户端 5:微信客户端 6:手机客户端_苹果 7:网上开户客户端 8:无效终端编号 9:报价终端(中江)
+	Lastloginip     string    `json:"lastloginip"  xorm:"'LASTLOGINIP'"`            // 最新登录地址
+	Loginport       int32     `json:"loginport"  xorm:"'LOGINPORT'"`                // 最新登录端口
+	Lastloginremark string    `json:"lastloginremark"  xorm:"'LASTLOGINREMARK'"`    // 最新登录描述
+	Modifytime      time.Time `json:"modifytime"  xorm:"'MODIFYTIME'"`              // 修改时间
+	Modifierid      int64     `json:"modifierid"  xorm:"'MODIFIERID'"`              // 修改人
+	Pwdwrongcount   int32     `json:"pwdwrongcount"  xorm:"'PWDWRONGCOUNT'"`        // 密码错误次数
+	Unfreezetime    time.Time `json:"unfreezetime"  xorm:"'UNFREEZETIME'"`          // 账户解冻时间
+	Haslogined      int32     `json:"haslogined"  xorm:"'HASLOGINED'"`              // 是否已登录 - 0:未登录 1:已登录
+	Hasupdatedpwd   int32     `json:"hasupdatedpwd"  xorm:"'HASUPDATEDPWD'"`        // 是否已更改密码 - 0:未修改 1:已修改
+	Logincode       string    `json:"logincode"  xorm:"'LOGINCODE'"`                // 登录代码
+}
+
+// TableName is LOGINACCOUNT
+func (Loginaccount) TableName() string {
+	return "LOGINACCOUNT"
+}
+
+// Taaccount 资金账户表 - 导历史
+type Taaccount struct {
+	Accountid             int64     `json:"accountid"  xorm:"'ACCOUNTID'" binding:"required"`      // 资金账户ID
+	Userid                int64     `json:"userid"  xorm:"'USERID'" binding:"required"`            // 用户ID
+	Currencyid            int64     `json:"currencyid"  xorm:"'CURRENCYID'"`                       // 货币ID
+	Changeflag            int32     `json:"changeflag"  xorm:"'CHANGEFLAG'"`                       // 变动标志(当前账户资金有任何变动更新为1系统结算时更新0;供清算时使用) 0:无变动 1:有变动
+	Password              string    `json:"password"  xorm:"'PASSWORD'"`                           // 资金密码
+	Tradestatus           int32     `json:"tradestatus"  xorm:"'TRADESTATUS'"`                     // 交易状态 - 1:正常 2:受限 3:冻结 4:禁止建仓(人工受限) 5:禁止交易(人工冻结) 6:待激活 7:已注销
+	Signstatus            int32     `json:"signstatus"  xorm:"'SIGNSTATUS'"`                       // 签约状态 - 1:未签约 2:签约待审核 3:签约中 4:已签约 5:解约待审核 6:解约中 7:已解约 8:已解绑 9:绑卡中
+	Ismain                int32     `json:"ismain"  xorm:"'ISMAIN'"`                               // 是否母账号 0:不是母账户 1:是母账户
+	Parentaccountid       int64     `json:"parentaccountid"  xorm:"'PARENTACCOUNTID'"`             // 所属根账号
+	Relateduserid         int64     `json:"relateduserid"  xorm:"'RELATEDUSERID'"`                 // 关联用户
+	Relatedaccountstatus  int32     `json:"relatedaccountstatus"  xorm:"'RELATEDACCOUNTSTATUS'"`   // 关联用户交易权限状态 - 1:正常(可交易) 2:受限(可平仓,不可建仓) 3:冻结(不可交易)
+	Taaccounttype         int32     `json:"taaccounttype"  xorm:"'TAACCOUNTTYPE'"`                 // 账号类型 - 1:外部账号 2:内部账号 3:内部做市自营账号 4:内部做市接单账号
+	Isreckonaccount       int32     `json:"isreckonaccount"  xorm:"'ISRECKONACCOUNT'"`             // 是否机构分润账号 0:不是 1:是
+	Ismarketaccount       int32     `json:"ismarketaccount"  xorm:"'ISMARKETACCOUNT'"`             // 是否机构接单账号 0:不是 1:是
+	Balance               float64   `json:"balance"  xorm:"'BALANCE'"`                             // 期初余额
+	Orifreezemargin       float64   `json:"orifreezemargin"  xorm:"'ORIFREEZEMARGIN'"`             // 期初冻结保证金
+	Oriusedmargin         float64   `json:"oriusedmargin"  xorm:"'ORIUSEDMARGIN'"`                 // 期初占用保证金
+	Oriotherfreezemargin  float64   `json:"oriotherfreezemargin"  xorm:"'ORIOTHERFREEZEMARGIN'"`   // 期初其他冻结保证金(出金冻结资金 交割买方冻结 申购冻结 全款买入 商城买入)
+	Orifreezecharge       float64   `json:"orifreezecharge"  xorm:"'ORIFREEZECHARGE'"`             // 期初手续费冻结
+	Orimortgagecredit     float64   `json:"orimortgagecredit"  xorm:"'ORIMORTGAGECREDIT'"`         // 期初授信金额
+	Oriothercredit        float64   `json:"oriothercredit"  xorm:"'ORIOTHERCREDIT'"`               // 期初其它授信金额
+	Orioutamountfreeze    float64   `json:"orioutamountfreeze"  xorm:"'ORIOUTAMOUNTFREEZE'"`       // 期初出金冻结
+	Currentbalance        float64   `json:"currentbalance"  xorm:"'CURRENTBALANCE'"`               // 期末余额
+	Freezemargin          float64   `json:"freezemargin"  xorm:"'FREEZEMARGIN'"`                   // 冻结保证金
+	Usedmargin            float64   `json:"usedmargin"  xorm:"'USEDMARGIN'"`                       // 占用保证金
+	Otherfreezemargin     float64   `json:"otherfreezemargin"  xorm:"'OTHERFREEZEMARGIN'"`         // 其他冻结保证金(交割买方冻结 申购冻结 全款买入 商城买入)
+	Freezecharge          float64   `json:"freezecharge"  xorm:"'FREEZECHARGE'"`                   // 手续费冻结
+	Mortgagecredit        float64   `json:"mortgagecredit"  xorm:"'MORTGAGECREDIT'"`               // 授信金额
+	Othercredit           float64   `json:"othercredit"  xorm:"'OTHERCREDIT'"`                     // 其它授信金额
+	Outamountfreeze       float64   `json:"outamountfreeze"  xorm:"'OUTAMOUNTFREEZE'"`             // 出金冻结
+	Inamount              float64   `json:"inamount"  xorm:"'INAMOUNT'"`                           // 今日入金金额(包括三方入金)
+	Outamount             float64   `json:"outamount"  xorm:"'OUTAMOUNT'"`                         // 今日出金金额(包括三方出金)
+	Paycharge             float64   `json:"paycharge"  xorm:"'PAYCHARGE'"`                         // 今日手续费支出
+	Closepl               float64   `json:"closepl"  xorm:"'CLOSEPL'"`                             // 今日平仓盈亏
+	Creditincrease        float64   `json:"creditincrease"  xorm:"'CREDITINCREASE'"`               // 今日授信增加
+	Creditdecrease        float64   `json:"creditdecrease"  xorm:"'CREDITDECREASE'"`               // 今日授信减少
+	Othercreditincrease   float64   `json:"othercreditincrease"  xorm:"'OTHERCREDITINCREASE'"`     // 今日其它授信增加
+	Othercreditdecrease   float64   `json:"othercreditdecrease"  xorm:"'OTHERCREDITDECREASE'"`     // 今日其它授信减少
+	Transferamount        float64   `json:"transferamount"  xorm:"'TRANSFERAMOUNT'"`               // 今日划转金额(母子账号资金划转,从划入账号为正,从账号划出为负)
+	Otherpay              float64   `json:"otherpay"  xorm:"'OTHERPAY'"`                           // 其他支出(交割付款 申购付款 全款买入 商城买入 卖家退货)
+	Otherincome           float64   `json:"otherincome"  xorm:"'OTHERINCOME'"`                     // 其他收入(交割收款 申购收款 全款卖出 商城卖出 买家退货 会员手续费收入)
+	Outthreshold          float64   `json:"outthreshold"  xorm:"'OUTTHRESHOLD'"`                   // 出金阈值
+	Tradestatuschangetime time.Time `json:"tradestatuschangetime"  xorm:"'TRADESTATUSCHANGETIME'"` // 激活时间
+	Changetime            time.Time `json:"changetime"  xorm:"'CHANGETIME'"`                       // 账户状态变更时间
+	Thirdinamount         float64   `json:"thirdinamount"  xorm:"'THIRDINAMOUNT'"`                 // 今日三方入金
+	Thirdoutamount        float64   `json:"thirdoutamount"  xorm:"'THIRDOUTAMOUNT'"`               // 今日三方出金
+	Capitalbalance        float64   `json:"capitalbalance"  xorm:"'CAPITALBALANCE'"`               // 本金余额[外部子账户实际出入金余额]
+	Fromaccountid         int64     `json:"fromaccountid"  xorm:"'FROMACCOUNTID'"`                 // 所属上级账户
+	Sublevelpath          string    `json:"sublevelpath"  xorm:"'SUBLEVELPATH'"`                   // 账号层级路径(逗号分隔,首尾加逗号)
+	Serivcegroup          int64     `json:"serivcegroup"  xorm:"'SERIVCEGROUP'"`                   // 服务分组
+	Accountname           string    `json:"accountname"  xorm:"'ACCOUNTNAME'"`                     // 账户名称
+	Accountflag           int32     `json:"accountflag"  xorm:"'ACCOUNTFLAG'"`                     // 账户标识 - 0\1 (默认为0, 当上级账户与本账户的关联用户均为自己时更新为1)
+}
+
+// TableName is TAACCOUNT
+func (Taaccount) TableName() string {
+	return "TAACCOUNT"
+}
+
+// Logintaaccount 登录账户资金权限表 - 自营会员
+type Logintaaccount struct {
+	Loginid    int64     `json:"loginid"  xorm:"'LOGINID'" binding:"required"`     // 登录账号ID
+	Accountid  int64     `json:"accountid"  xorm:"'ACCOUNTID'" binding:"required"` // 资金账号ID
+	Modifytime time.Time `json:"modifytime"  xorm:"'MODIFYTIME'"`                  // 修改时间
+	Modifierid int64     `json:"modifierid"  xorm:"'MODIFIERID'"`                  // 修改人
+}
+
+// TableName is LOGINTAACCOUNT
+func (Logintaaccount) TableName() string {
+	return "LOGINTAACCOUNT"
+}
+
+// Arearolemarket 机构角色市场权限表
+type Arearolemarket struct {
+	Areauserid       int64     `json:"areauserid"  xorm:"'AREAUSERID'" binding:"required"` // 机构用户ID
+	Roletype         int32     `json:"roletype"  xorm:"'ROLETYPE'" binding:"required"`     // 角色类型 -  6:自营会员 7:经纪会员
+	Marketid         int32     `json:"marketid"  xorm:"'MARKETID'" binding:"required"`     // 市场ID
+	Modifytime       time.Time `json:"modifytime"  xorm:"'MODIFYTIME'"`                    // 修改时间
+	Modifierid       int64     `json:"modifierid"  xorm:"'MODIFIERID'"`                    // 修改人ID
+	Spotrighttype    int32     `json:"spotrighttype"  xorm:"'SPOTRIGHTTYPE'"`              // 现货权限类型 - 0:无 1:可挂可摘 2:可挂 3:可摘 [现货类](卖大厅)
+	Buyspotrighttype int32     `json:"buyspotrighttype"  xorm:"'BUYSPOTRIGHTTYPE'"`        // 现货权限类型 - 0:无 1:可挂可摘 2:可挂 3:可摘 [现货类](买大厅)
+}
+
+// TableName is AREAROLEMARKET
+func (Arearolemarket) TableName() string {
+	return "AREAROLEMARKET"
+}
+
+// Taaccountmarket 资金账号市场权限表
+type Taaccountmarket struct {
+	Accountid        int64     `json:"accountid"  xorm:"'ACCOUNTID'" binding:"required"` // 资金账号ID
+	Marketid         int32     `json:"marketid"  xorm:"'MARKETID'" binding:"required"`   // 市场ID
+	Modifytime       time.Time `json:"modifytime"  xorm:"'MODIFYTIME'"`                  // 修改时间
+	Modifierid       int64     `json:"modifierid"  xorm:"'MODIFIERID'"`                  // 修改人
+	Spotrighttype    int32     `json:"spotrighttype"  xorm:"'SPOTRIGHTTYPE'"`            // 现货权限类型 - 0:无1:可挂可摘 2:可挂 3:可摘 [现货类](卖大厅)
+	Buyspotrighttype int32     `json:"buyspotrighttype"  xorm:"'BUYSPOTRIGHTTYPE'"`      // 现货权限类型 - 0:无1:可挂可摘 2:可挂 3:可摘 [现货类](买大厅)
+}
+
+// TableName is TAACCOUNTMARKET
+func (Taaccountmarket) TableName() string {
+	return "TAACCOUNTMARKET"
+}
+
+// Useraccount 用户表
+type Useraccount struct {
+	Userid           int64     `json:"userid"  xorm:"'USERID'" binding:"required"`  // 用户ID
+	Usertype         int32     `json:"usertype"  xorm:"'USERTYPE'"`                 // 账户类型 -  1:交易所 2:机构 3:会员子机构 4:经纪人 5:投资者 6:客户
+	Accountname      string    `json:"accountname"  xorm:"'ACCOUNTNAME'"`           // 账户名称(机构名称)
+	Parentuserid     int64     `json:"parentuserid"  xorm:"'PARENTUSERID'"`         // 所属机构ID
+	Broker           int64     `json:"broker"  xorm:"'BROKER'"`                     // 所属经纪人ID
+	Subarealevelpath string    `json:"subarealevelpath"  xorm:"'SUBAREALEVELPATH'"` // 子机构层级路径(逗号分隔,首尾加逗号)
+	Refereeuserid    int64     `json:"refereeuserid"  xorm:"'REFEREEUSERID'"`       // 推荐人ID
+	Memberuserid     int64     `json:"memberuserid"  xorm:"'MEMBERUSERID'"`         // 所属会员ID
+	Accountstatus    int32     `json:"accountstatus"  xorm:"'ACCOUNTSTATUS'"`       // 账户状态 -  1:待激活 2:待审核 3:待复审 4:正常 5:审核拒绝 6:注销
+	Reckonaccountid  int64     `json:"reckonaccountid"  xorm:"'RECKONACCOUNTID'"`   // 默认结算资金账号ID(机构分润使用) 作废
+	Modifystatus     int32     `json:"modifystatus"  xorm:"'MODIFYSTATUS'"`         // 变更状态 1 未变更 2 变更中 3 变更待审核 4 变更待复核(投资者)
+	Createtime       time.Time `json:"createtime"  xorm:"'CREATETIME'"`             // 创建时间
+	Creatorid        int64     `json:"creatorid"  xorm:"'CREATORID'"`               // 创建人
+	Audittime        time.Time `json:"audittime"  xorm:"'AUDITTIME'"`               // 审核时间
+	Audituserid      int64     `json:"audituserid"  xorm:"'AUDITUSERID'"`           // 审核人
+	Auditremark      string    `json:"auditremark"  xorm:"'AUDITREMARK'"`           // 审核备注
+	Canceltime       time.Time `json:"canceltime"  xorm:"'CANCELTIME'"`             // 销户时间
+	Canceluserid     int64     `json:"canceluserid"  xorm:"'CANCELUSERID'"`         // 销户人
+	Modifytime       time.Time `json:"modifytime"  xorm:"'MODIFYTIME'"`             // 修改时间
+	Modifierid       int64     `json:"modifierid"  xorm:"'MODIFIERID'"`             // 修改人
+	Modifyremark     string    `json:"modifyremark"  xorm:"'MODIFYREMARK'"`         // 变更备注
+	Maxinvestornum   int64     `json:"maxinvestornum"  xorm:"'MAXINVESTORNUM'"`     // 最大用户数(经纪会员下投资者个数)
+	Hasauth          int32     `json:"hasauth"  xorm:"'HASAUTH'"`                   // 是否已实名认证 - 0:未认证 1:已认证 2:已提交(待审核) 3:已拒绝
+	Refercount       int32     `json:"refercount"  xorm:"'REFERCOUNT'"`             // 推荐总人数
+	Refernum         string    `json:"refernum"  xorm:"'REFERNUM'"`                 // 推荐码
+}
+
+// TableName is USERACCOUNT
+func (Useraccount) TableName() string {
+	return "USERACCOUNT"
+}
+
+// Userinfo 用户信息表
+type Userinfo struct {
+	Userid                 int64     `json:"userid"  xorm:"'USERID'" binding:"required"`              // 用户ID
+	Userinfotype           int32     `json:"userinfotype"  xorm:"'USERINFOTYPE'"`                     // 用户信息类型 - 1:个人  2:企业
+	Customername           string    `json:"customername"  xorm:"'CUSTOMERNAME'"`                     // 客户名称(企业名称)
+	Userstatus             int32     `json:"userstatus"  xorm:"'USERSTATUS'"`                         // 用户状态 - 1:正常 2:注销
+	Usertype               int32     `json:"usertype"  xorm:"'USERTYPE'"`                             // 账户类型 -  1:交易所 2:机构 3:会员子机构 4:经纪人 5:投资者 6:客户
+	Openmode               int32     `json:"openmode"  xorm:"'OPENMODE'"`                             // 开户方式 -  1:管理端开户 2:网上开户注册(会员官网) 3:微信开户 4:网页交易端注册 5:安卓手机端注册 6:苹果手机端注册 7:PC交易端注册 8:微信快速开户 9:支付宝快速开户 10:手机号快速开户
+	Cardtypeid             int32     `json:"cardtypeid"  xorm:"'CARDTYPEID'"`                         // 证件类型ID
+	Cardnum                string    `json:"cardnum"  xorm:"'CARDNUM'"`                               // 证件号码(加密存储)
+	Halfbodyphotourl       string    `json:"halfbodyphotourl"  xorm:"'HALFBODYPHOTOURL'"`             // 半身照地址
+	Cardfrontphotourl      string    `json:"cardfrontphotourl"  xorm:"'CARDFRONTPHOTOURL'"`           // 证件正面图片地址
+	Cardbackphotourl       string    `json:"cardbackphotourl"  xorm:"'CARDBACKPHOTOURL'"`             // 证件背面图片地址
+	Biznature              int32     `json:"biznature"  xorm:"'BIZNATURE'"`                           // 企业性质( 企业) - 1:国有控股企业 2:集体控股企业 3:私人控股企业 4:港澳台商控股企业 5:外商控股企业 6:其它
+	Bizscope               string    `json:"bizscope"  xorm:"'BIZSCOPE'"`                             // 企业经营范围(企业)
+	Legalpersonname        string    `json:"legalpersonname"  xorm:"'LEGALPERSONNAME'"`               // 法人姓名(企业)
+	Contactname            string    `json:"contactname"  xorm:"'CONTACTNAME'"`                       // 联系人
+	Sex                    int32     `json:"sex"  xorm:"'SEX'"`                                       // 用户性别  0: 女  1: 男
+	Telphone               string    `json:"telphone"  xorm:"'TELPHONE'"`                             // 联系电话(加密存储)
+	Mobile                 string    `json:"mobile"  xorm:"'MOBILE'"`                                 // 手机号码(加密存储)
+	Fax                    string    `json:"fax"  xorm:"'FAX'"`                                       // 传真(加密存储)
+	Email                  string    `json:"email"  xorm:"'EMAIL'"`                                   // 邮件(加密存储)
+	Qq                     string    `json:"qq"  xorm:"'QQ'"`                                         // QQ(加密存储
+	Wechat                 string    `json:"wechat"  xorm:"'WECHAT'"`                                 // 微信(加密存储)
+	Countryid              int32     `json:"countryid"  xorm:"'COUNTRYID'"`                           // 国家
+	Provinceid             int32     `json:"provinceid"  xorm:"'PROVINCEID'"`                         // 省
+	Cityid                 int32     `json:"cityid"  xorm:"'CITYID'"`                                 // 市
+	Districtid             int32     `json:"districtid"  xorm:"'DISTRICTID'"`                         // 地区
+	Company                string    `json:"company"  xorm:"'COMPANY'"`                               // 公司(个人)
+	Address                string    `json:"address"  xorm:"'ADDRESS'"`                               // 地址
+	Postalcode             string    `json:"postalcode"  xorm:"'POSTALCODE'"`                         // 邮政编码
+	Createtime             time.Time `json:"createtime"  xorm:"'CREATETIME'"`                         // 创建时间
+	Creatorid              int64     `json:"creatorid"  xorm:"'CREATORID'"`                           // 创建人
+	Modifiertime           time.Time `json:"modifiertime"  xorm:"'MODIFIERTIME'"`                     // 修改时间
+	Modifierid             int64     `json:"modifierid"  xorm:"'MODIFIERID'"`                         // 修改人
+	Remark                 string    `json:"remark"  xorm:"'REMARK'"`                                 // 备注
+	Wskhinfo               string    `json:"wskhinfo"  xorm:"'WSKHINFO'"`                             // 开户申请信息(JSON)
+	Signpdfurl             string    `json:"signpdfurl"  xorm:"'SIGNPDFURL'"`                         // 签约pdf文件
+	Legalcardfrontphotourl string    `json:"legalcardfrontphotourl"  xorm:"'LEGALCARDFRONTPHOTOURL'"` // 法人身份证正面照地址
+	Legalcardbackphotourl  string    `json:"legalcardbackphotourl"  xorm:"'LEGALCARDBACKPHOTOURL'"`   // 法人身份证背面照地址
+	Otherurl               string    `json:"otherurl"  xorm:"'OTHERURL'"`                             // 其它图片地址[使用分号分隔]
+	Hasencrypt             int32     `json:"hasencrypt"  xorm:"'HASENCRYPT'"`                         // 数据是否已加密 - 0:未加密 1:已加密
+	Bankname               string    `json:"bankname"  xorm:"'BANKNAME'"`                             // 银行名称
+	Bankaccount            string    `json:"bankaccount"  xorm:"'BANKACCOUNT'"`                       // 银行帐号 (加密存储)
+	Bankcardfrontphotourl  string    `json:"bankcardfrontphotourl"  xorm:"'BANKCARDFRONTPHOTOURL'"`   // 银行卡正面照地址
+	Needinvoice            int32     `json:"needinvoice"  xorm:"'NEEDINVOICE'"`                       // 是否需要发票 - 0:不需要 1:需要
+	Bankid                 string    `json:"bankid"  xorm:"'BANKID'"`                                 // 银行编码
+	Attachment1            string    `json:"attachment1"  xorm:"'ATTACHMENT1'"`                       // 附件1
+	Attachment2            string    `json:"attachment2"  xorm:"'ATTACHMENT2'"`                       // 附件2
+	Bankaccountname        string    `json:"bankaccountname"  xorm:"'BANKACCOUNTNAME'"`               // 收款人名称
+	Headurl                string    `json:"headurl"  xorm:"'HEADURL'"`                               // 头像地址
+	Nickname               string    `json:"nickname"  xorm:"'NICKNAME'"`                             // 昵称:默认为名称脱敏(张**) 或 手机号脱敏(139****9999)
+	Mobile2                string    `json:"mobile2"  xorm:"'MOBILE2'"`                               // 手机号码[明文-尚志]
+}
+
+// TableName is USERINFO
+func (Userinfo) TableName() string {
+	return "USERINFO"
+}
+
+// Quoter 报价商表
+type Quoter struct {
+	Quoterid       int64     `json:"quoterid"  xorm:"'QUOTERID'" binding:"required"`     // 报价商ID(自增ID)
+	Quotername     string    `json:"quotername"  xorm:"'QUOTERNAME'" binding:"required"` // 报价商名称
+	Areauserid     int64     `json:"areauserid"  xorm:"'AREAUSERID'" binding:"required"` // 所属机构ID
+	Tradeproperty  int32     `json:"tradeproperty"  xorm:"'TRADEPROPERTY'"`              // 交易属性
+	Defaultmakerid int64     `json:"defaultmakerid"  xorm:"'DEFAULTMAKERID'"`            // 默认做市商ID(UserID)
+	Quoterstatus   int32     `json:"quoterstatus"  xorm:"'QUOTERSTATUS'"`                // 报价商状态 - 1:正常 2:注销
+	Modifierid     int64     `json:"modifierid"  xorm:"'MODIFIERID'"`                    // 修改人
+	Modifytime     time.Time `json:"modifytime"  xorm:"'MODIFYTIME'"`                    // 修改时间
+	Matchmode      int32     `json:"matchmode"  xorm:"'MATCHMODE'"`                      // 对手模式: 1-经纪会员自接 2:按对手关系[收益权用]
+}
+
+// TableName is QUOTER
+func (Quoter) TableName() string {
+	return "QUOTER"
+}
+
+// Arearole 机构角色表
+type Arearole struct {
+	Userid         int64     `json:"userid"  xorm:"'USERID'" binding:"required"`     // 机构用户ID其他做市关系,都设置为 1
+	Roletype       int32     `json:"roletype"  xorm:"'ROLETYPE'" binding:"required"` // 角色类型 -  1:交易所 2:运营机构 3:营销中心 4:仓库机构 5:三方服务机构 6:自营会员 7:经纪会员 8:做市会员 9:产业会员 10:金融机构 11:商城店铺 12:子机构 13:报价商 14:积分服务商 15:供货商 16:圈内会员 17:物流机构 18:报价配置机构 19:场外期权做市商 20:组织机构 21:顶级机构
+	Tradeaccountid int64     `json:"tradeaccountid"  xorm:"'TRADEACCOUNTID'"`        // 默认交易资金账号ID(做市会员被动接单使用、商城店铺默认资金账 号、圈内会员默认资金账号)  - 作废, 使用UserReckonAccount
+	Createtime     time.Time `json:"createtime"  xorm:"'CREATETIME'"`                // 创建时间
+	Creatorid      int64     `json:"creatorid"  xorm:"'CREATORID'"`                  // 创建人ID
+	Modifytime     time.Time `json:"modifytime"  xorm:"'MODIFYTIME'"`                // 修改时间
+	Modifierid     int64     `json:"modifierid"  xorm:"'MODIFIERID'"`                // 修改人ID
+	Shoppassword   string    `json:"shoppassword"  xorm:"'SHOPPASSWORD'"`            // 商城店铺登陆密码(商城店铺角色使用)
+	Isreturnscore  int32     `json:"isreturnscore"  xorm:"'ISRETURNSCORE'"`          // 是否返还积分 [经纪会员-辽东湾] - 0:不返还 1:返还
+	Transurl       string    `json:"transurl"  xorm:"'TRANSURL'"`                    // 物流地址(物流机构)
+	Outuserid      string    `json:"outuserid"  xorm:"'OUTUSERID'"`                  // 外部账户[场外期权做市商]
+	Parentuserid   int64     `json:"parentuserid"  xorm:"'PARENTUSERID'"`            // 上级组织机构(组织机构)
+	Rootuserid     int64     `json:"rootuserid"  xorm:"'ROOTUSERID'"`                // 顶级组织机构用户ID(组织机构)
+	Sublevelpath   string    `json:"sublevelpath"  xorm:"'SUBLEVELPATH'"`            // 组织机构层级路径(逗号分隔,首尾加逗号)
+	Orgtype        int32     `json:"orgtype"  xorm:"'ORGTYPE'"`                      // 组织机构类型 1:机构 2:交易员
+}
+
+// TableName is AREAROLE
+func (Arearole) TableName() string {
+	return "AREAROLE"
+}
+
+// Taaccountlog 资金账户记账流水表 - 导历史
+type Taaccountlog struct {
+	Autoid           int64     `json:"autoid"  xorm:"'AUTOID'" binding:"required"`                     // 流水ID(220+Unix秒时间戳(10位)+xxxxxx)
+	Accountid        int64     `json:"accountid"  xorm:"'ACCOUNTID'" binding:"required"`               // 资金账户ID
+	Relationorderid  string    `json:"relationorderid"  xorm:"'RELATIONORDERID'"`                      // 关联单号
+	Marketid         int32     `json:"marketid"  xorm:"'MARKETID'"`                                    // 市场ID
+	Goodsid          int32     `json:"goodsid"  xorm:"'GOODSID'"`                                      // 商品ID
+	Currencyid       int64     `json:"currencyid"  xorm:"'CURRENCYID'"`                                // 币种ID
+	Amount           float64   `json:"amount"  xorm:"'AMOUNT'" binding:"required"`                     // 资金金额
+	Amountadjusttype int32     `json:"amountadjusttype"  xorm:"'AMOUNTADJUSTTYPE'" binding:"required"` // 资金调整类型(默认值为0) -  0:系统 1:单边账调整  2:人工调整
+	Balance          float64   `json:"balance"  xorm:"'BALANCE'" binding:"required"`                   // 期初余额
+	Currentbalance   float64   `json:"currentbalance"  xorm:"'CURRENTBALANCE'" binding:"required"`     // 期末余额(变动后金额)
+	Createtime       time.Time `json:"createtime"  xorm:"'CREATETIME'" binding:"required"`             // 发生时间
+	Operatetype      int32     `json:"operatetype"  xorm:"'OPERATETYPE'" binding:"required"`           // 资金操作类型 (AccountFundCmdOp)- 101:入金 102:入金手续费 103:出金 104:出金冻结 105:出金解冻 106:出金手续费 107:出金手续费冻结 108:出金手续费解冻 201:交易冻结 202:交易解冻 203:交易占用 204:交易解占用 205:交易手续费冻结 206:交易手续费解冻 207:交易手续费 208:交易货款 209:交易盈亏 301:交割冻结 302:交割解冻 303:交割手续费 304:交割手续费冻结 305:交割手续费解冻 306:交割货款 307:交割税款 401:结算盈亏 402:结算递延费 403:分润收入 404:延期分润 501:授信增加 502:授信减少 503:转积分 504:转入 505:转出 506:转出冻结 507:转出解冻  601:履约金额冻结 602:履约最大冻结 603:履约金额解冻 604:履约扣款 605:履约收款 606:履约违约手续费 607:履约违约收入 608:履约最大扣款 701:供应链金融冻结 702:供应链金融解冻 703:供应链金融最大冻结 704:供应链金融利息 705:供应链金融货款 706:供应链金融押金 707:供应链金融最大扣款 801:仓单贸易冻结 802:仓单贸易解冻 803:仓单贸易首付款 804:仓单贸易最大扣款 901:商城扣款冻结 902:商城扣款解冻 903:商城扣款 904:商城收款 1001:期权冻结 1002:期权解冻 1003:期权权力金 1004:期权手续费冻结 1005:期权手续费解冻 1006:期权手续费 1007:期权盈亏 1101:营销扣款 1102:营销收款
+	Moneyticket      int64     `json:"moneyticket"  xorm:"'MONEYTICKET'"`                              // 资金流水号:银行端流水号
+	Remark           string    `json:"remark"  xorm:"'REMARK'"`                                        // 备注
+	Businesscode     int32     `json:"businesscode"  xorm:"'BUSINESSCODE'"`                            // 业务编号
+}
+
+// TableName is TAACCOUNTLOG
+func (Taaccountlog) TableName() string {
+	return "TAACCOUNTLOG"
+}
+
+// Histaaccountlog 历史资金账户记账流水表
+type Histaaccountlog struct {
+	Autoid           int64     `json:"autoid"  xorm:"'AUTOID'" binding:"required"`                     // 流水ID(220+Unix秒时间戳(10位)+xxxxxx)
+	Accountid        int64     `json:"accountid"  xorm:"'ACCOUNTID'" binding:"required"`               // 资金账户ID
+	Relationorderid  string    `json:"relationorderid"  xorm:"'RELATIONORDERID'"`                      // 关联单号
+	Marketid         int32     `json:"marketid"  xorm:"'MARKETID'"`                                    // 市场ID
+	Goodsid          int32     `json:"goodsid"  xorm:"'GOODSID'"`                                      // 商品ID
+	Currencyid       int64     `json:"currencyid"  xorm:"'CURRENCYID'"`                                // 币种ID
+	Amount           float64   `json:"amount"  xorm:"'AMOUNT'" binding:"required"`                     // 资金金额
+	Amountadjusttype int32     `json:"amountadjusttype"  xorm:"'AMOUNTADJUSTTYPE'" binding:"required"` // 资金调整类型(默认值为0) -  0:系统 1:单边账调整  2:人工调整
+	Balance          float64   `json:"balance"  xorm:"'BALANCE'" binding:"required"`                   // 期初余额
+	Currentbalance   float64   `json:"currentbalance"  xorm:"'CURRENTBALANCE'" binding:"required"`     // 期末余额(变动后金额)
+	Createtime       time.Time `json:"createtime"  xorm:"'CREATETIME'" binding:"required"`             // 发生时间
+	Operatetype      int32     `json:"operatetype"  xorm:"'OPERATETYPE'" binding:"required"`           // 资金操作类型 (AccountFundCmdOp)- 101:入金 102:入金手续费 103:出金 104:出金冻结 105:出金解冻 106:出金手续费 107:出金手续费冻结 108:出金手续费解冻 201:交易冻结 202:交易解冻 203:交易占用 204:交易解占用 205:交易手续费冻结 206:交易手续费解冻 207:交易手续费 208:交易货款 209:交易盈亏 301:交割冻结 302:交割解冻 303:交割手续费 304:交割手续费冻结 305:交割手续费解冻 306:交割货款 307:交割税款 401:结算盈亏 402:结算递延费 403:分润收入 404:延期分润 501:授信增加 502:授信减少 503:转积分 504:转入 505:转出 506:转出冻结 507:转出解冻  601:履约金额冻结 602:履约最大冻结 603:履约金额解冻 604:履约扣款 605:履约收款 606:履约违约手续费 607:履约违约收入 608:履约最大扣款 701:供应链金融冻结 702:供应链金融解冻 703:供应链金融最大冻结 704:供应链金融利息 705:供应链金融货款 706:供应链金融押金 707:供应链金融最大扣款 801:仓单贸易冻结 802:仓单贸易解冻 803:仓单贸易首付款 804:仓单贸易最大扣款 901:商城扣款冻结 902:商城扣款解冻 903:商城扣款 904:商城收款 1001:期权冻结 1002:期权解冻 1003:期权权力金 1004:期权手续费冻结 1005:期权手续费解冻 1006:期权手续费 1007:期权盈亏 1101:营销扣款 1102:营销收款
+	Moneyticket      int64     `json:"moneyticket"  xorm:"'MONEYTICKET'"`                              // 资金流水号:银行端流水号
+	Remark           string    `json:"remark"  xorm:"'REMARK'"`                                        // 备注
+	Businesscode     int32     `json:"businesscode"  xorm:"'BUSINESSCODE'"`                            // 业务编号
+	Histradedate     string    `json:"histradedate"  xorm:"'HISTRADEDATE'" binding:"required"`         // 历史交易日
+	Isvaliddata      int32     `json:"isvaliddata"  xorm:"'ISVALIDDATA'"`                              // 是否有效 - 0:无效 1:有效
+}
+
+// TableName is HIS_TAACCOUNTLOG
+func (Histaaccountlog) TableName() string {
+	return "HIS_TAACCOUNTLOG"
+}

+ 139 - 0
dbmodels/commonDBModels.go

@@ -0,0 +1,139 @@
+package dbmodels
+
+import "time"
+
+// Funcmenulist 功能菜单表
+type Funcmenulist struct {
+	Resourcecode  string `json:"resourcecode"  xorm:"'RESOURCECODE'" binding:"required"` // 资源代码 - M001 一级菜单编码   0001 二级菜单编码   0001 三级菜单M00100000000  系统管理M00100010000  参数管理M00100010001  参数管理--修改M00100010002  参数管理--删除M00100020000  区域管理
+	Resourcename  string `json:"resourcename"  xorm:"'RESOURCENAME'"`                    // 资源名
+	Resourcelevel uint32 `json:"resourcelevel"  xorm:"'RESOURCELEVEL'"`                  // 级别1-一级 2-二级 3-三级4-四级
+	Menutype      uint32 `json:"menutype"  xorm:"'MENUTYPE'"`                            // 1- 管理端   2-  交易端 3 - 已失效
+	Parentcode    string `json:"parentcode"  xorm:"'PARENTCODE'"`                        // 上级资源代码
+	URL           string `json:"url"  xorm:"'URL'"`                                      // URL
+	Sort          uint32 `json:"sort"  xorm:"'SORT'"`                                    // 排序 - 一级时,是所有一级菜单的排序顺序;二级时是所属同一个一级菜单下的排序、三级时是同一个二级菜单下的排序
+	Iconame       string `json:"iconame"  xorm:"'ICONAME'"`                              // 菜单图标
+	Remark        string `json:"remark"  xorm:"'REMARK'"`                                // Remark
+}
+
+// TableName is FUNCMENULIST
+func (Funcmenulist) TableName() string {
+	return "FUNCMENULIST"
+}
+
+// Rolefuncmenu 角色菜单表
+type Rolefuncmenu struct {
+	Roleid       uint32 `json:"roleid"  xorm:"'ROLEID'" binding:"required"`             // 角色权限ID
+	Resourcecode string `json:"resourcecode"  xorm:"'RESOURCECODE'" binding:"required"` // 菜单代码
+}
+
+// TableName is ROLEFUNCMENU
+func (Rolefuncmenu) TableName() string {
+	return "ROLEFUNCMENU"
+}
+
+// Tabledefine 列表定义表
+type Tabledefine struct {
+	Tablekey  string `json:"tablekey"  xorm:"'TABLEKEY'" binding:"required"` // 列表Key
+	Tabletype uint32 `json:"tabletype"  xorm:"'TABLETYPE'"`                  // 列表类型 - 1:管理端 2:终端
+	Tablename string `json:"tablename"  xorm:"'TABLENAME'"`                  // 列表名称
+	Tabelmenu string `json:"tabelmenu"  xorm:"'TABELMENU'"`                  // 列表菜单
+	Remark    string `json:"remark"  xorm:"'REMARK'"`                        // Remark
+}
+
+// TableName is TABLEDEFINE
+func (Tabledefine) TableName() string {
+	return "TABLEDEFINE"
+}
+
+// Tablecolumnconfig 列表表头配置表
+type Tablecolumnconfig struct {
+	Autoid          uint64 `json:"autoid"  xorm:"'AUTOID'" binding:"required"` // AutoID
+	Tablekey        string `json:"tablekey"  xorm:"'TABLEKEY'"`                // 列表Key
+	Columnfield     string `json:"columnfield"  xorm:"'COLUMNFIELD'"`          // 列字段
+	Columntitle     string `json:"columntitle"  xorm:"'COLUMNTITLE'"`          // 列Title
+	Columnwidth     string `json:"columnwidth"  xorm:"'COLUMNWIDTH'"`          // 列宽
+	Orderindex      uint32 `json:"orderindex"  xorm:"'ORDERINDEX'"`            // 顺序
+	Isshow          uint32 `json:"isshow"  xorm:"'ISSHOW'"`                    // 是否显示 - 0:不显示 1:显示
+	Aligntype       uint32 `json:"aligntype"  xorm:"'ALIGNTYPE'"`              // 对齐方式 - 1:居中对齐 2:左对齐 3:右对齐
+	Formattertype   string `json:"formattertype"  xorm:"'FORMATTERTYPE'"`      // 格式化类型
+	Formatterstring string `json:"formatterstring"  xorm:"'FORMATTERSTRING'"`  // 格式化字符
+	Remark          string `json:"remark"  xorm:"'REMARK'"`                    // 备注
+	Needsummary     uint32 `json:"needsummary"  xorm:"'NEEDSUMMARY'"`          // 是否需要汇总 - 0:不需要 1:需要
+	Summarytype     uint32 `json:"summarytype"  xorm:"'SUMMARYTYPE'"`          // 汇总类型 - 1:加总 2:最后一个
+	Groupname       string `json:"groupname"  xorm:"'GROUPNAME'"`              // 表头分组名称
+}
+
+// TableName is TABLECOLUMNCONFIG
+func (Tablecolumnconfig) TableName() string {
+	return "TABLECOLUMNCONFIG"
+}
+
+// Enumdicitem 枚举项字典表
+type Enumdicitem struct {
+	Autoid          uint64 `json:"autoid"  xorm:"'AUTOID'" binding:"required"`             // 自增ID
+	Enumdicid       uint32 `json:"enumdicid"  xorm:"'ENUMDICID'" binding:"required"`       // 所属枚举ID
+	Enumdiccode     string `json:"enumdiccode"  xorm:"'ENUMDICCODE'" binding:"required"`   // 所属枚举代码
+	Enumdicname     string `json:"enumdicname"  xorm:"'ENUMDICNAME'"`                      // 枚举项名称
+	Enumitemname    uint64 `json:"enumitemname"  xorm:"'ENUMITEMNAME'" binding:"required"` // 枚举项值
+	Enumitemstatus  uint32 `json:"enumitemstatus"  xorm:"'ENUMITEMSTATUS'"`                // 枚举项状态 - 1.启用 2.不启用
+	Bankmappedvalue string `json:"bankmappedvalue"  xorm:"'BANKMAPPEDVALUE'"`              // 银行服务对应值
+	Remark          string `json:"remark"  xorm:"'REMARK'"`                                // 备注
+	Enumitemvalue   string `json:"enumitemvalue"  xorm:"'ENUMITEMVALUE'"`                  // 通用值 - [币种通用简写]
+	Param1          string `json:"param1"  xorm:"'PARAM1'"`                                // 参数1[币种:币种小数位]
+	Param2          string `json:"param2"  xorm:"'PARAM2'"`                                // 参数1[币种:币种显示单位]
+}
+
+// TableName is ENUMDICITEM
+func (Enumdicitem) TableName() string {
+	return "ENUMDICITEM"
+}
+
+// Noticemsg 公告消息表
+type Noticemsg struct {
+	Autoid        int32     `json:"autoid"  xorm:"'AUTOID'" binding:"required"` // 自增ID
+	Msgtype       int32     `json:"msgtype"  xorm:"'MSGTYPE'"`                  // 消息类型 - 1:公告通知 2:系统消息
+	Title         string    `json:"title"  xorm:"'TITLE'"`                      // 标题
+	Content       string    `json:"content"  xorm:"'CONTENT'"`                  // 内容
+	Scheduletime  time.Time `json:"scheduletime"  xorm:"'SCHEDULETIME'"`        // 计划发送时间
+	Publisher     string    `json:"publisher"  xorm:"'PUBLISHER'"`              // 消息发布者
+	Sendtype      int32     `json:"sendtype"  xorm:"'SENDTYPE'"`                // 推送方式 - 1:全体广播 2:按会员广播 3:个人推送 4:按会员广播(仅会员)
+	Userid        int64     `json:"userid"  xorm:"'USERID'"`                    // 会员/投资者ID推送方式 为 个人时,填写投资者ID
+	Istop         int32     `json:"istop"  xorm:"'ISTOP'"`                      // 是否置顶 - 0:不置顶 1:置顶
+	Sentstatus    int32     `json:"sentstatus"  xorm:"'SENTSTATUS'"`            // 推送状态 - 0:未推送 1:已推送 2:审核拒绝
+	Endtime       time.Time `json:"endtime"  xorm:"'ENDTIME'"`                  // 结束时间
+	Creatorid     int64     `json:"creatorid"  xorm:"'CREATORID'"`              // 建仓人
+	Createtime    time.Time `json:"createtime"  xorm:"'CREATETIME'"`            // 创建时间
+	Auditoruserid int64     `json:"auditoruserid"  xorm:"'AUDITORUSERID'"`      // 审核人
+	Audittime     time.Time `json:"audittime"  xorm:"'AUDITTIME'"`              // 审核日期
+	Auditremark   string    `json:"auditremark"  xorm:"'AUDITREMARK'"`          // 审核备注
+}
+
+// TableName is NOTICEMSG
+func (Noticemsg) TableName() string {
+	return "NOTICEMSG"
+}
+
+// Memberrecv 会员消息接受表
+type Memberrecv struct {
+	Msgid    int32 `json:"msgid"  xorm:"'MSGID'" binding:"required"`       // 消息ID
+	Memberid int64 `json:"memberid"  xorm:"'MEMBERID'" binding:"required"` // 会员用户ID
+}
+
+// TableName is MEMBERRECV
+func (Memberrecv) TableName() string {
+	return "MEMBERRECV"
+}
+
+// Msgreceiver 管理端消息接收者
+type Msgreceiver struct {
+	Autoid       int32     `json:"autoid"  xorm:"'AUTOID'" binding:"required"`             // 消息ID
+	Managerid    int64     `json:"managerid"  xorm:"'MANAGERID'" binding:"required"`       // 用户ID
+	Readstatus   int32     `json:"readstatus"  xorm:"'READSTATUS'" binding:"required"`     // 消息状态 - 1:未阅读 2:已阅读 3:已删除
+	Receivertype int32     `json:"receivertype"  xorm:"'RECEIVERTYPE'" binding:"required"` // 接收用户类型 - 1:管理端用户 2:终端用户
+	Updatetime   time.Time `json:"updatetime"  xorm:"'UPDATETIME'"`                        // 更新时间
+}
+
+// TableName is MSGRECEIVER
+func (Msgreceiver) TableName() string {
+	return "MSGRECEIVER"
+}

+ 48 - 303
models/accountModels.go

@@ -1,321 +1,66 @@
 package models
 
-import "time"
+import (
+	"encoding/hex"
+	"mtp2_if/db"
+	"mtp2_if/dbmodels"
+	"mtp2_if/global/utils"
+)
 
-// Loginaccount 登录账户
-type Loginaccount struct {
-	Loginid         int64     `json:"loginid"  xorm:"'LOGINID'" binding:"required"` // 登陆账号
-	Userid          int64     `json:"userid"  xorm:"'USERID'"`                      // 用户ID
-	Loginfailnum    int32     `json:"loginfailnum"  xorm:"'LOGINFAILNUM'"`          // 连续登录失败次数(登录成功时清零)
-	Password        string    `json:"password"  xorm:"'PASSWORD'"`                  // 登陆密码
-	Loginusertype   int32     `json:"loginusertype"  xorm:"'LOGINUSERTYPE'"`        // 登录账号类型 - 1:投资者 2:机构交易员
-	Loginstatus     int32     `json:"loginstatus"  xorm:"'LOGINSTATUS'"`            // 登录账号状态 1:正常 2:冻结 3:无效
-	Lastlogintime   time.Time `json:"lastlogintime"  xorm:"'LASTLOGINTIME'"`        // 最新登录时间
-	Lastloginmode   int32     `json:"lastloginmode"  xorm:"'LASTLOGINMODE'"`        // 最新登录方式(客户端类型) -  0:保留为未填终端类型 1:PC管理端 2:PC交易端 3:手机客户端_安卓 4:网页客户端 5:微信客户端 6:手机客户端_苹果 7:网上开户客户端 8:无效终端编号 9:报价终端(中江)
-	Lastloginip     string    `json:"lastloginip"  xorm:"'LASTLOGINIP'"`            // 最新登录地址
-	Loginport       int32     `json:"loginport"  xorm:"'LOGINPORT'"`                // 最新登录端口
-	Lastloginremark string    `json:"lastloginremark"  xorm:"'LASTLOGINREMARK'"`    // 最新登录描述
-	Modifytime      time.Time `json:"modifytime"  xorm:"'MODIFYTIME'"`              // 修改时间
-	Modifierid      int64     `json:"modifierid"  xorm:"'MODIFIERID'"`              // 修改人
-	Pwdwrongcount   int32     `json:"pwdwrongcount"  xorm:"'PWDWRONGCOUNT'"`        // 密码错误次数
-	Unfreezetime    time.Time `json:"unfreezetime"  xorm:"'UNFREEZETIME'"`          // 账户解冻时间
-	Haslogined      int32     `json:"haslogined"  xorm:"'HASLOGINED'"`              // 是否已登录 - 0:未登录 1:已登录
-	Hasupdatedpwd   int32     `json:"hasupdatedpwd"  xorm:"'HASUPDATEDPWD'"`        // 是否已更改密码 - 0:未修改 1:已修改
-	Logincode       string    `json:"logincode"  xorm:"'LOGINCODE'"`                // 登录代码
-}
-
-// TableName is LOGINACCOUNT
-func (Loginaccount) TableName() string {
-	return "LOGINACCOUNT"
-}
-
-// Taaccount 资金账户表 - 导历史
-type Taaccount struct {
-	Accountid             int64     `json:"accountid"  xorm:"'ACCOUNTID'" binding:"required"`      // 资金账户ID
-	Userid                int64     `json:"userid"  xorm:"'USERID'" binding:"required"`            // 用户ID
-	Currencyid            int64     `json:"currencyid"  xorm:"'CURRENCYID'"`                       // 货币ID
-	Changeflag            int32     `json:"changeflag"  xorm:"'CHANGEFLAG'"`                       // 变动标志(当前账户资金有任何变动更新为1系统结算时更新0;供清算时使用) 0:无变动 1:有变动
-	Password              string    `json:"password"  xorm:"'PASSWORD'"`                           // 资金密码
-	Tradestatus           int32     `json:"tradestatus"  xorm:"'TRADESTATUS'"`                     // 交易状态 - 1:正常 2:受限 3:冻结 4:禁止建仓(人工受限) 5:禁止交易(人工冻结) 6:待激活 7:已注销
-	Signstatus            int32     `json:"signstatus"  xorm:"'SIGNSTATUS'"`                       // 签约状态 - 1:未签约 2:签约待审核 3:签约中 4:已签约 5:解约待审核 6:解约中 7:已解约 8:已解绑 9:绑卡中
-	Ismain                int32     `json:"ismain"  xorm:"'ISMAIN'"`                               // 是否母账号 0:不是母账户 1:是母账户
-	Parentaccountid       int64     `json:"parentaccountid"  xorm:"'PARENTACCOUNTID'"`             // 所属根账号
-	Relateduserid         int64     `json:"relateduserid"  xorm:"'RELATEDUSERID'"`                 // 关联用户
-	Relatedaccountstatus  int32     `json:"relatedaccountstatus"  xorm:"'RELATEDACCOUNTSTATUS'"`   // 关联用户交易权限状态 - 1:正常(可交易) 2:受限(可平仓,不可建仓) 3:冻结(不可交易)
-	Taaccounttype         int32     `json:"taaccounttype"  xorm:"'TAACCOUNTTYPE'"`                 // 账号类型 - 1:外部账号 2:内部账号 3:内部做市自营账号 4:内部做市接单账号
-	Isreckonaccount       int32     `json:"isreckonaccount"  xorm:"'ISRECKONACCOUNT'"`             // 是否机构分润账号 0:不是 1:是
-	Ismarketaccount       int32     `json:"ismarketaccount"  xorm:"'ISMARKETACCOUNT'"`             // 是否机构接单账号 0:不是 1:是
-	Balance               float64   `json:"balance"  xorm:"'BALANCE'"`                             // 期初余额
-	Orifreezemargin       float64   `json:"orifreezemargin"  xorm:"'ORIFREEZEMARGIN'"`             // 期初冻结保证金
-	Oriusedmargin         float64   `json:"oriusedmargin"  xorm:"'ORIUSEDMARGIN'"`                 // 期初占用保证金
-	Oriotherfreezemargin  float64   `json:"oriotherfreezemargin"  xorm:"'ORIOTHERFREEZEMARGIN'"`   // 期初其他冻结保证金(出金冻结资金 交割买方冻结 申购冻结 全款买入 商城买入)
-	Orifreezecharge       float64   `json:"orifreezecharge"  xorm:"'ORIFREEZECHARGE'"`             // 期初手续费冻结
-	Orimortgagecredit     float64   `json:"orimortgagecredit"  xorm:"'ORIMORTGAGECREDIT'"`         // 期初授信金额
-	Oriothercredit        float64   `json:"oriothercredit"  xorm:"'ORIOTHERCREDIT'"`               // 期初其它授信金额
-	Orioutamountfreeze    float64   `json:"orioutamountfreeze"  xorm:"'ORIOUTAMOUNTFREEZE'"`       // 期初出金冻结
-	Currentbalance        float64   `json:"currentbalance"  xorm:"'CURRENTBALANCE'"`               // 期末余额
-	Freezemargin          float64   `json:"freezemargin"  xorm:"'FREEZEMARGIN'"`                   // 冻结保证金
-	Usedmargin            float64   `json:"usedmargin"  xorm:"'USEDMARGIN'"`                       // 占用保证金
-	Otherfreezemargin     float64   `json:"otherfreezemargin"  xorm:"'OTHERFREEZEMARGIN'"`         // 其他冻结保证金(交割买方冻结 申购冻结 全款买入 商城买入)
-	Freezecharge          float64   `json:"freezecharge"  xorm:"'FREEZECHARGE'"`                   // 手续费冻结
-	Mortgagecredit        float64   `json:"mortgagecredit"  xorm:"'MORTGAGECREDIT'"`               // 授信金额
-	Othercredit           float64   `json:"othercredit"  xorm:"'OTHERCREDIT'"`                     // 其它授信金额
-	Outamountfreeze       float64   `json:"outamountfreeze"  xorm:"'OUTAMOUNTFREEZE'"`             // 出金冻结
-	Inamount              float64   `json:"inamount"  xorm:"'INAMOUNT'"`                           // 今日入金金额(包括三方入金)
-	Outamount             float64   `json:"outamount"  xorm:"'OUTAMOUNT'"`                         // 今日出金金额(包括三方出金)
-	Paycharge             float64   `json:"paycharge"  xorm:"'PAYCHARGE'"`                         // 今日手续费支出
-	Closepl               float64   `json:"closepl"  xorm:"'CLOSEPL'"`                             // 今日平仓盈亏
-	Creditincrease        float64   `json:"creditincrease"  xorm:"'CREDITINCREASE'"`               // 今日授信增加
-	Creditdecrease        float64   `json:"creditdecrease"  xorm:"'CREDITDECREASE'"`               // 今日授信减少
-	Othercreditincrease   float64   `json:"othercreditincrease"  xorm:"'OTHERCREDITINCREASE'"`     // 今日其它授信增加
-	Othercreditdecrease   float64   `json:"othercreditdecrease"  xorm:"'OTHERCREDITDECREASE'"`     // 今日其它授信减少
-	Transferamount        float64   `json:"transferamount"  xorm:"'TRANSFERAMOUNT'"`               // 今日划转金额(母子账号资金划转,从划入账号为正,从账号划出为负)
-	Otherpay              float64   `json:"otherpay"  xorm:"'OTHERPAY'"`                           // 其他支出(交割付款 申购付款 全款买入 商城买入 卖家退货)
-	Otherincome           float64   `json:"otherincome"  xorm:"'OTHERINCOME'"`                     // 其他收入(交割收款 申购收款 全款卖出 商城卖出 买家退货 会员手续费收入)
-	Outthreshold          float64   `json:"outthreshold"  xorm:"'OUTTHRESHOLD'"`                   // 出金阈值
-	Tradestatuschangetime time.Time `json:"tradestatuschangetime"  xorm:"'TRADESTATUSCHANGETIME'"` // 激活时间
-	Changetime            time.Time `json:"changetime"  xorm:"'CHANGETIME'"`                       // 账户状态变更时间
-	Thirdinamount         float64   `json:"thirdinamount"  xorm:"'THIRDINAMOUNT'"`                 // 今日三方入金
-	Thirdoutamount        float64   `json:"thirdoutamount"  xorm:"'THIRDOUTAMOUNT'"`               // 今日三方出金
-	Capitalbalance        float64   `json:"capitalbalance"  xorm:"'CAPITALBALANCE'"`               // 本金余额[外部子账户实际出入金余额]
-	Fromaccountid         int64     `json:"fromaccountid"  xorm:"'FROMACCOUNTID'"`                 // 所属上级账户
-	Sublevelpath          string    `json:"sublevelpath"  xorm:"'SUBLEVELPATH'"`                   // 账号层级路径(逗号分隔,首尾加逗号)
-	Serivcegroup          int64     `json:"serivcegroup"  xorm:"'SERIVCEGROUP'"`                   // 服务分组
-	Accountname           string    `json:"accountname"  xorm:"'ACCOUNTNAME'"`                     // 账户名称
-	Accountflag           int32     `json:"accountflag"  xorm:"'ACCOUNTFLAG'"`                     // 账户标识 - 0\1 (默认为0, 当上级账户与本账户的关联用户均为自己时更新为1)
-}
-
-// TableName is TAACCOUNT
-func (Taaccount) TableName() string {
-	return "TAACCOUNT"
-}
-
-// Logintaaccount 登录账户资金权限表 - 自营会员
-type Logintaaccount struct {
-	Loginid    int64     `json:"loginid"  xorm:"'LOGINID'" binding:"required"`     // 登录账号ID
-	Accountid  int64     `json:"accountid"  xorm:"'ACCOUNTID'" binding:"required"` // 资金账号ID
-	Modifytime time.Time `json:"modifytime"  xorm:"'MODIFYTIME'"`                  // 修改时间
-	Modifierid int64     `json:"modifierid"  xorm:"'MODIFIERID'"`                  // 修改人
-}
-
-// TableName is LOGINTAACCOUNT
-func (Logintaaccount) TableName() string {
-	return "LOGINTAACCOUNT"
-}
-
-// Arearolemarket 机构角色市场权限表
-type Arearolemarket struct {
-	Areauserid       int64     `json:"areauserid"  xorm:"'AREAUSERID'" binding:"required"` // 机构用户ID
-	Roletype         int32     `json:"roletype"  xorm:"'ROLETYPE'" binding:"required"`     // 角色类型 -  6:自营会员 7:经纪会员
-	Marketid         int32     `json:"marketid"  xorm:"'MARKETID'" binding:"required"`     // 市场ID
-	Modifytime       time.Time `json:"modifytime"  xorm:"'MODIFYTIME'"`                    // 修改时间
-	Modifierid       int64     `json:"modifierid"  xorm:"'MODIFIERID'"`                    // 修改人ID
-	Spotrighttype    int32     `json:"spotrighttype"  xorm:"'SPOTRIGHTTYPE'"`              // 现货权限类型 - 0:无 1:可挂可摘 2:可挂 3:可摘 [现货类](卖大厅)
-	Buyspotrighttype int32     `json:"buyspotrighttype"  xorm:"'BUYSPOTRIGHTTYPE'"`        // 现货权限类型 - 0:无 1:可挂可摘 2:可挂 3:可摘 [现货类](买大厅)
-}
-
-// TableName is AREAROLEMARKET
-func (Arearolemarket) TableName() string {
-	return "AREAROLEMARKET"
-}
-
-// Taaccountmarket 资金账号市场权限表
-type Taaccountmarket struct {
-	Accountid        int64     `json:"accountid"  xorm:"'ACCOUNTID'" binding:"required"` // 资金账号ID
-	Marketid         int32     `json:"marketid"  xorm:"'MARKETID'" binding:"required"`   // 市场ID
-	Modifytime       time.Time `json:"modifytime"  xorm:"'MODIFYTIME'"`                  // 修改时间
-	Modifierid       int64     `json:"modifierid"  xorm:"'MODIFIERID'"`                  // 修改人
-	Spotrighttype    int32     `json:"spotrighttype"  xorm:"'SPOTRIGHTTYPE'"`            // 现货权限类型 - 0:无1:可挂可摘 2:可挂 3:可摘 [现货类](卖大厅)
-	Buyspotrighttype int32     `json:"buyspotrighttype"  xorm:"'BUYSPOTRIGHTTYPE'"`      // 现货权限类型 - 0:无1:可挂可摘 2:可挂 3:可摘 [现货类](买大厅)
-}
-
-// TableName is TAACCOUNTMARKET
-func (Taaccountmarket) TableName() string {
-	return "TAACCOUNTMARKET"
-}
-
-// Useraccount 用户表
-type Useraccount struct {
-	Userid           int64     `json:"userid"  xorm:"'USERID'" binding:"required"`  // 用户ID
-	Usertype         int32     `json:"usertype"  xorm:"'USERTYPE'"`                 // 账户类型 -  1:交易所 2:机构 3:会员子机构 4:经纪人 5:投资者 6:客户
-	Accountname      string    `json:"accountname"  xorm:"'ACCOUNTNAME'"`           // 账户名称(机构名称)
-	Parentuserid     int64     `json:"parentuserid"  xorm:"'PARENTUSERID'"`         // 所属机构ID
-	Broker           int64     `json:"broker"  xorm:"'BROKER'"`                     // 所属经纪人ID
-	Subarealevelpath string    `json:"subarealevelpath"  xorm:"'SUBAREALEVELPATH'"` // 子机构层级路径(逗号分隔,首尾加逗号)
-	Refereeuserid    int64     `json:"refereeuserid"  xorm:"'REFEREEUSERID'"`       // 推荐人ID
-	Memberuserid     int64     `json:"memberuserid"  xorm:"'MEMBERUSERID'"`         // 所属会员ID
-	Accountstatus    int32     `json:"accountstatus"  xorm:"'ACCOUNTSTATUS'"`       // 账户状态 -  1:待激活 2:待审核 3:待复审 4:正常 5:审核拒绝 6:注销
-	Reckonaccountid  int64     `json:"reckonaccountid"  xorm:"'RECKONACCOUNTID'"`   // 默认结算资金账号ID(机构分润使用) 作废
-	Modifystatus     int32     `json:"modifystatus"  xorm:"'MODIFYSTATUS'"`         // 变更状态 1 未变更 2 变更中 3 变更待审核 4 变更待复核(投资者)
-	Createtime       time.Time `json:"createtime"  xorm:"'CREATETIME'"`             // 创建时间
-	Creatorid        int64     `json:"creatorid"  xorm:"'CREATORID'"`               // 创建人
-	Audittime        time.Time `json:"audittime"  xorm:"'AUDITTIME'"`               // 审核时间
-	Audituserid      int64     `json:"audituserid"  xorm:"'AUDITUSERID'"`           // 审核人
-	Auditremark      string    `json:"auditremark"  xorm:"'AUDITREMARK'"`           // 审核备注
-	Canceltime       time.Time `json:"canceltime"  xorm:"'CANCELTIME'"`             // 销户时间
-	Canceluserid     int64     `json:"canceluserid"  xorm:"'CANCELUSERID'"`         // 销户人
-	Modifytime       time.Time `json:"modifytime"  xorm:"'MODIFYTIME'"`             // 修改时间
-	Modifierid       int64     `json:"modifierid"  xorm:"'MODIFIERID'"`             // 修改人
-	Modifyremark     string    `json:"modifyremark"  xorm:"'MODIFYREMARK'"`         // 变更备注
-	Maxinvestornum   int64     `json:"maxinvestornum"  xorm:"'MAXINVESTORNUM'"`     // 最大用户数(经纪会员下投资者个数)
-	Hasauth          int32     `json:"hasauth"  xorm:"'HASAUTH'"`                   // 是否已实名认证 - 0:未认证 1:已认证 2:已提交(待审核) 3:已拒绝
-	Refercount       int32     `json:"refercount"  xorm:"'REFERCOUNT'"`             // 推荐总人数
-	Refernum         string    `json:"refernum"  xorm:"'REFERNUM'"`                 // 推荐码
-}
+// GetLoginAccountByLoginCode 通过登录代码查询登录账号信息
+func GetLoginAccountByLoginCode(loginCode string) (*dbmodels.Loginaccount, error) {
+	engine := db.GetEngine()
 
-// TableName is USERACCOUNT
-func (Useraccount) TableName() string {
-	return "USERACCOUNT"
-}
+	var loginaccount *dbmodels.Loginaccount
+	if _, err := engine.Where("Logincode = ?", loginCode).Get(loginaccount); err != nil {
+		return nil, err
+	}
 
-// Userinfo 用户信息表
-type Userinfo struct {
-	Userid                 int64     `json:"userid"  xorm:"'USERID'" binding:"required"`              // 用户ID
-	Userinfotype           int32     `json:"userinfotype"  xorm:"'USERINFOTYPE'"`                     // 用户信息类型 - 1:个人  2:企业
-	Customername           string    `json:"customername"  xorm:"'CUSTOMERNAME'"`                     // 客户名称(企业名称)
-	Userstatus             int32     `json:"userstatus"  xorm:"'USERSTATUS'"`                         // 用户状态 - 1:正常 2:注销
-	Usertype               int32     `json:"usertype"  xorm:"'USERTYPE'"`                             // 账户类型 -  1:交易所 2:机构 3:会员子机构 4:经纪人 5:投资者 6:客户
-	Openmode               int32     `json:"openmode"  xorm:"'OPENMODE'"`                             // 开户方式 -  1:管理端开户 2:网上开户注册(会员官网) 3:微信开户 4:网页交易端注册 5:安卓手机端注册 6:苹果手机端注册 7:PC交易端注册 8:微信快速开户 9:支付宝快速开户 10:手机号快速开户
-	Cardtypeid             int32     `json:"cardtypeid"  xorm:"'CARDTYPEID'"`                         // 证件类型ID
-	Cardnum                string    `json:"cardnum"  xorm:"'CARDNUM'"`                               // 证件号码(加密存储)
-	Halfbodyphotourl       string    `json:"halfbodyphotourl"  xorm:"'HALFBODYPHOTOURL'"`             // 半身照地址
-	Cardfrontphotourl      string    `json:"cardfrontphotourl"  xorm:"'CARDFRONTPHOTOURL'"`           // 证件正面图片地址
-	Cardbackphotourl       string    `json:"cardbackphotourl"  xorm:"'CARDBACKPHOTOURL'"`             // 证件背面图片地址
-	Biznature              int32     `json:"biznature"  xorm:"'BIZNATURE'"`                           // 企业性质( 企业) - 1:国有控股企业 2:集体控股企业 3:私人控股企业 4:港澳台商控股企业 5:外商控股企业 6:其它
-	Bizscope               string    `json:"bizscope"  xorm:"'BIZSCOPE'"`                             // 企业经营范围(企业)
-	Legalpersonname        string    `json:"legalpersonname"  xorm:"'LEGALPERSONNAME'"`               // 法人姓名(企业)
-	Contactname            string    `json:"contactname"  xorm:"'CONTACTNAME'"`                       // 联系人
-	Sex                    int32     `json:"sex"  xorm:"'SEX'"`                                       // 用户性别  0: 女  1: 男
-	Telphone               string    `json:"telphone"  xorm:"'TELPHONE'"`                             // 联系电话(加密存储)
-	Mobile                 string    `json:"mobile"  xorm:"'MOBILE'"`                                 // 手机号码(加密存储)
-	Fax                    string    `json:"fax"  xorm:"'FAX'"`                                       // 传真(加密存储)
-	Email                  string    `json:"email"  xorm:"'EMAIL'"`                                   // 邮件(加密存储)
-	Qq                     string    `json:"qq"  xorm:"'QQ'"`                                         // QQ(加密存储
-	Wechat                 string    `json:"wechat"  xorm:"'WECHAT'"`                                 // 微信(加密存储)
-	Countryid              int32     `json:"countryid"  xorm:"'COUNTRYID'"`                           // 国家
-	Provinceid             int32     `json:"provinceid"  xorm:"'PROVINCEID'"`                         // 省
-	Cityid                 int32     `json:"cityid"  xorm:"'CITYID'"`                                 // 市
-	Districtid             int32     `json:"districtid"  xorm:"'DISTRICTID'"`                         // 地区
-	Company                string    `json:"company"  xorm:"'COMPANY'"`                               // 公司(个人)
-	Address                string    `json:"address"  xorm:"'ADDRESS'"`                               // 地址
-	Postalcode             string    `json:"postalcode"  xorm:"'POSTALCODE'"`                         // 邮政编码
-	Createtime             time.Time `json:"createtime"  xorm:"'CREATETIME'"`                         // 创建时间
-	Creatorid              int64     `json:"creatorid"  xorm:"'CREATORID'"`                           // 创建人
-	Modifiertime           time.Time `json:"modifiertime"  xorm:"'MODIFIERTIME'"`                     // 修改时间
-	Modifierid             int64     `json:"modifierid"  xorm:"'MODIFIERID'"`                         // 修改人
-	Remark                 string    `json:"remark"  xorm:"'REMARK'"`                                 // 备注
-	Wskhinfo               string    `json:"wskhinfo"  xorm:"'WSKHINFO'"`                             // 开户申请信息(JSON)
-	Signpdfurl             string    `json:"signpdfurl"  xorm:"'SIGNPDFURL'"`                         // 签约pdf文件
-	Legalcardfrontphotourl string    `json:"legalcardfrontphotourl"  xorm:"'LEGALCARDFRONTPHOTOURL'"` // 法人身份证正面照地址
-	Legalcardbackphotourl  string    `json:"legalcardbackphotourl"  xorm:"'LEGALCARDBACKPHOTOURL'"`   // 法人身份证背面照地址
-	Otherurl               string    `json:"otherurl"  xorm:"'OTHERURL'"`                             // 其它图片地址[使用分号分隔]
-	Hasencrypt             int32     `json:"hasencrypt"  xorm:"'HASENCRYPT'"`                         // 数据是否已加密 - 0:未加密 1:已加密
-	Bankname               string    `json:"bankname"  xorm:"'BANKNAME'"`                             // 银行名称
-	Bankaccount            string    `json:"bankaccount"  xorm:"'BANKACCOUNT'"`                       // 银行帐号 (加密存储)
-	Bankcardfrontphotourl  string    `json:"bankcardfrontphotourl"  xorm:"'BANKCARDFRONTPHOTOURL'"`   // 银行卡正面照地址
-	Needinvoice            int32     `json:"needinvoice"  xorm:"'NEEDINVOICE'"`                       // 是否需要发票 - 0:不需要 1:需要
-	Bankid                 string    `json:"bankid"  xorm:"'BANKID'"`                                 // 银行编码
-	Attachment1            string    `json:"attachment1"  xorm:"'ATTACHMENT1'"`                       // 附件1
-	Attachment2            string    `json:"attachment2"  xorm:"'ATTACHMENT2'"`                       // 附件2
-	Bankaccountname        string    `json:"bankaccountname"  xorm:"'BANKACCOUNTNAME'"`               // 收款人名称
-	Headurl                string    `json:"headurl"  xorm:"'HEADURL'"`                               // 头像地址
-	Nickname               string    `json:"nickname"  xorm:"'NICKNAME'"`                             // 昵称:默认为名称脱敏(张**) 或 手机号脱敏(139****9999)
-	Mobile2                string    `json:"mobile2"  xorm:"'MOBILE2'"`                               // 手机号码[明文-尚志]
+	return loginaccount, nil
 }
 
-// TableName is USERINFO
-func (Userinfo) TableName() string {
-	return "USERINFO"
-}
+// GetLoginAccountByMobile 通过手机号码查询登录账号信息
+func GetLoginAccountByMobile(mobile string) (*dbmodels.Loginaccount, error) {
+	engine := db.GetEngine()
 
-// Quoter 报价商表
-type Quoter struct {
-	Quoterid       int64     `json:"quoterid"  xorm:"'QUOTERID'" binding:"required"`     // 报价商ID(自增ID)
-	Quotername     string    `json:"quotername"  xorm:"'QUOTERNAME'" binding:"required"` // 报价商名称
-	Areauserid     int64     `json:"areauserid"  xorm:"'AREAUSERID'" binding:"required"` // 所属机构ID
-	Tradeproperty  int32     `json:"tradeproperty"  xorm:"'TRADEPROPERTY'"`              // 交易属性
-	Defaultmakerid int64     `json:"defaultmakerid"  xorm:"'DEFAULTMAKERID'"`            // 默认做市商ID(UserID)
-	Quoterstatus   int32     `json:"quoterstatus"  xorm:"'QUOTERSTATUS'"`                // 报价商状态 - 1:正常 2:注销
-	Modifierid     int64     `json:"modifierid"  xorm:"'MODIFIERID'"`                    // 修改人
-	Modifytime     time.Time `json:"modifytime"  xorm:"'MODIFYTIME'"`                    // 修改时间
-	Matchmode      int32     `json:"matchmode"  xorm:"'MATCHMODE'"`                      // 对手模式: 1-经纪会员自接 2:按对手关系[收益权用]
-}
+	var loginaccount *dbmodels.Loginaccount
+	// 手机号码需要AES加密
+	key, _ := hex.DecodeString(utils.AESSecretKey)
+	if mobileEncrypted, err := utils.AESEncrypt([]byte(mobile), key); err == nil {
+		// 加密成功后进行查询
+		if _, err := engine.Join("INNER", "USERINFO", "USERINFO.USERID = LOGINACCOUNT.USERID").
+			Where("USERINFO.MOBILE = ?", hex.EncodeToString(mobileEncrypted)).Get(loginaccount); err != nil {
+			return nil, err
+		}
+	}
 
-// TableName is QUOTER
-func (Quoter) TableName() string {
-	return "QUOTER"
+	return loginaccount, nil
 }
 
-// Arearole 机构角色表
-type Arearole struct {
-	Userid         int64     `json:"userid"  xorm:"'USERID'" binding:"required"`     // 机构用户ID其他做市关系,都设置为 1
-	Roletype       int32     `json:"roletype"  xorm:"'ROLETYPE'" binding:"required"` // 角色类型 -  1:交易所 2:运营机构 3:营销中心 4:仓库机构 5:三方服务机构 6:自营会员 7:经纪会员 8:做市会员 9:产业会员 10:金融机构 11:商城店铺 12:子机构 13:报价商 14:积分服务商 15:供货商 16:圈内会员 17:物流机构 18:报价配置机构 19:场外期权做市商 20:组织机构 21:顶级机构
-	Tradeaccountid int64     `json:"tradeaccountid"  xorm:"'TRADEACCOUNTID'"`        // 默认交易资金账号ID(做市会员被动接单使用、商城店铺默认资金账 号、圈内会员默认资金账号)  - 作废, 使用UserReckonAccount
-	Createtime     time.Time `json:"createtime"  xorm:"'CREATETIME'"`                // 创建时间
-	Creatorid      int64     `json:"creatorid"  xorm:"'CREATORID'"`                  // 创建人ID
-	Modifytime     time.Time `json:"modifytime"  xorm:"'MODIFYTIME'"`                // 修改时间
-	Modifierid     int64     `json:"modifierid"  xorm:"'MODIFIERID'"`                // 修改人ID
-	Shoppassword   string    `json:"shoppassword"  xorm:"'SHOPPASSWORD'"`            // 商城店铺登陆密码(商城店铺角色使用)
-	Isreturnscore  int32     `json:"isreturnscore"  xorm:"'ISRETURNSCORE'"`          // 是否返还积分 [经纪会员-辽东湾] - 0:不返还 1:返还
-	Transurl       string    `json:"transurl"  xorm:"'TRANSURL'"`                    // 物流地址(物流机构)
-	Outuserid      string    `json:"outuserid"  xorm:"'OUTUSERID'"`                  // 外部账户[场外期权做市商]
-	Parentuserid   int64     `json:"parentuserid"  xorm:"'PARENTUSERID'"`            // 上级组织机构(组织机构)
-	Rootuserid     int64     `json:"rootuserid"  xorm:"'ROOTUSERID'"`                // 顶级组织机构用户ID(组织机构)
-	Sublevelpath   string    `json:"sublevelpath"  xorm:"'SUBLEVELPATH'"`            // 组织机构层级路径(逗号分隔,首尾加逗号)
-	Orgtype        int32     `json:"orgtype"  xorm:"'ORGTYPE'"`                      // 组织机构类型 1:机构 2:交易员
-}
+// GetUserAccount 获取用户账户信息
+func GetUserAccount(userID int) (*dbmodels.Useraccount, error) {
+	engine := db.GetEngine()
+	var userAccount *dbmodels.Useraccount
 
-// TableName is AREAROLE
-func (Arearole) TableName() string {
-	return "AREAROLE"
-}
+	_, err := engine.Where("USERID = ?", userID).Get(userAccount)
+	if err != nil {
+		// 查询失败
+		return nil, err
+	}
 
-// Taaccountlog 资金账户记账流水表 - 导历史
-type Taaccountlog struct {
-	Autoid           int64     `json:"autoid"  xorm:"'AUTOID'" binding:"required"`                     // 流水ID(220+Unix秒时间戳(10位)+xxxxxx)
-	Accountid        int64     `json:"accountid"  xorm:"'ACCOUNTID'" binding:"required"`               // 资金账户ID
-	Relationorderid  string    `json:"relationorderid"  xorm:"'RELATIONORDERID'"`                      // 关联单号
-	Marketid         int32     `json:"marketid"  xorm:"'MARKETID'"`                                    // 市场ID
-	Goodsid          int32     `json:"goodsid"  xorm:"'GOODSID'"`                                      // 商品ID
-	Currencyid       int64     `json:"currencyid"  xorm:"'CURRENCYID'"`                                // 币种ID
-	Amount           float64   `json:"amount"  xorm:"'AMOUNT'" binding:"required"`                     // 资金金额
-	Amountadjusttype int32     `json:"amountadjusttype"  xorm:"'AMOUNTADJUSTTYPE'" binding:"required"` // 资金调整类型(默认值为0) -  0:系统 1:单边账调整  2:人工调整
-	Balance          float64   `json:"balance"  xorm:"'BALANCE'" binding:"required"`                   // 期初余额
-	Currentbalance   float64   `json:"currentbalance"  xorm:"'CURRENTBALANCE'" binding:"required"`     // 期末余额(变动后金额)
-	Createtime       time.Time `json:"createtime"  xorm:"'CREATETIME'" binding:"required"`             // 发生时间
-	Operatetype      int32     `json:"operatetype"  xorm:"'OPERATETYPE'" binding:"required"`           // 资金操作类型 (AccountFundCmdOp)- 101:入金 102:入金手续费 103:出金 104:出金冻结 105:出金解冻 106:出金手续费 107:出金手续费冻结 108:出金手续费解冻 201:交易冻结 202:交易解冻 203:交易占用 204:交易解占用 205:交易手续费冻结 206:交易手续费解冻 207:交易手续费 208:交易货款 209:交易盈亏 301:交割冻结 302:交割解冻 303:交割手续费 304:交割手续费冻结 305:交割手续费解冻 306:交割货款 307:交割税款 401:结算盈亏 402:结算递延费 403:分润收入 404:延期分润 501:授信增加 502:授信减少 503:转积分 504:转入 505:转出 506:转出冻结 507:转出解冻  601:履约金额冻结 602:履约最大冻结 603:履约金额解冻 604:履约扣款 605:履约收款 606:履约违约手续费 607:履约违约收入 608:履约最大扣款 701:供应链金融冻结 702:供应链金融解冻 703:供应链金融最大冻结 704:供应链金融利息 705:供应链金融货款 706:供应链金融押金 707:供应链金融最大扣款 801:仓单贸易冻结 802:仓单贸易解冻 803:仓单贸易首付款 804:仓单贸易最大扣款 901:商城扣款冻结 902:商城扣款解冻 903:商城扣款 904:商城收款 1001:期权冻结 1002:期权解冻 1003:期权权力金 1004:期权手续费冻结 1005:期权手续费解冻 1006:期权手续费 1007:期权盈亏 1101:营销扣款 1102:营销收款
-	Moneyticket      int64     `json:"moneyticket"  xorm:"'MONEYTICKET'"`                              // 资金流水号:银行端流水号
-	Remark           string    `json:"remark"  xorm:"'REMARK'"`                                        // 备注
-	Businesscode     int32     `json:"businesscode"  xorm:"'BUSINESSCODE'"`                            // 业务编号
+	return userAccount, nil
 }
 
-// TableName is TAACCOUNTLOG
-func (Taaccountlog) TableName() string {
-	return "TAACCOUNTLOG"
-}
+// GetUserInfo 获取用户信息
+func GetUserInfo(userID int) (*dbmodels.Userinfo, error) {
+	engine := db.GetEngine()
+	var userInfo *dbmodels.Userinfo
 
-// Histaaccountlog 历史资金账户记账流水表
-type Histaaccountlog struct {
-	Autoid           int64     `json:"autoid"  xorm:"'AUTOID'" binding:"required"`                     // 流水ID(220+Unix秒时间戳(10位)+xxxxxx)
-	Accountid        int64     `json:"accountid"  xorm:"'ACCOUNTID'" binding:"required"`               // 资金账户ID
-	Relationorderid  string    `json:"relationorderid"  xorm:"'RELATIONORDERID'"`                      // 关联单号
-	Marketid         int32     `json:"marketid"  xorm:"'MARKETID'"`                                    // 市场ID
-	Goodsid          int32     `json:"goodsid"  xorm:"'GOODSID'"`                                      // 商品ID
-	Currencyid       int64     `json:"currencyid"  xorm:"'CURRENCYID'"`                                // 币种ID
-	Amount           float64   `json:"amount"  xorm:"'AMOUNT'" binding:"required"`                     // 资金金额
-	Amountadjusttype int32     `json:"amountadjusttype"  xorm:"'AMOUNTADJUSTTYPE'" binding:"required"` // 资金调整类型(默认值为0) -  0:系统 1:单边账调整  2:人工调整
-	Balance          float64   `json:"balance"  xorm:"'BALANCE'" binding:"required"`                   // 期初余额
-	Currentbalance   float64   `json:"currentbalance"  xorm:"'CURRENTBALANCE'" binding:"required"`     // 期末余额(变动后金额)
-	Createtime       time.Time `json:"createtime"  xorm:"'CREATETIME'" binding:"required"`             // 发生时间
-	Operatetype      int32     `json:"operatetype"  xorm:"'OPERATETYPE'" binding:"required"`           // 资金操作类型 (AccountFundCmdOp)- 101:入金 102:入金手续费 103:出金 104:出金冻结 105:出金解冻 106:出金手续费 107:出金手续费冻结 108:出金手续费解冻 201:交易冻结 202:交易解冻 203:交易占用 204:交易解占用 205:交易手续费冻结 206:交易手续费解冻 207:交易手续费 208:交易货款 209:交易盈亏 301:交割冻结 302:交割解冻 303:交割手续费 304:交割手续费冻结 305:交割手续费解冻 306:交割货款 307:交割税款 401:结算盈亏 402:结算递延费 403:分润收入 404:延期分润 501:授信增加 502:授信减少 503:转积分 504:转入 505:转出 506:转出冻结 507:转出解冻  601:履约金额冻结 602:履约最大冻结 603:履约金额解冻 604:履约扣款 605:履约收款 606:履约违约手续费 607:履约违约收入 608:履约最大扣款 701:供应链金融冻结 702:供应链金融解冻 703:供应链金融最大冻结 704:供应链金融利息 705:供应链金融货款 706:供应链金融押金 707:供应链金融最大扣款 801:仓单贸易冻结 802:仓单贸易解冻 803:仓单贸易首付款 804:仓单贸易最大扣款 901:商城扣款冻结 902:商城扣款解冻 903:商城扣款 904:商城收款 1001:期权冻结 1002:期权解冻 1003:期权权力金 1004:期权手续费冻结 1005:期权手续费解冻 1006:期权手续费 1007:期权盈亏 1101:营销扣款 1102:营销收款
-	Moneyticket      int64     `json:"moneyticket"  xorm:"'MONEYTICKET'"`                              // 资金流水号:银行端流水号
-	Remark           string    `json:"remark"  xorm:"'REMARK'"`                                        // 备注
-	Businesscode     int32     `json:"businesscode"  xorm:"'BUSINESSCODE'"`                            // 业务编号
-	Histradedate     string    `json:"histradedate"  xorm:"'HISTRADEDATE'" binding:"required"`         // 历史交易日
-	Isvaliddata      int32     `json:"isvaliddata"  xorm:"'ISVALIDDATA'"`                              // 是否有效 - 0:无效 1:有效
-}
+	_, err := engine.Where("USERID = ?", userID).Get(userInfo)
+	if err != nil {
+		// 查询失败
+		return nil, err
+	}
 
-// TableName is HIS_TAACCOUNTLOG
-func (Histaaccountlog) TableName() string {
-	return "HIS_TAACCOUNTLOG"
+	return userInfo, nil
 }

+ 351 - 112
models/commonModels.go

@@ -1,139 +1,378 @@
 package models
 
-import "time"
-
-// Funcmenulist 功能菜单表
-type Funcmenulist struct {
-	Resourcecode  string `json:"resourcecode"  xorm:"'RESOURCECODE'" binding:"required"` // 资源代码 - M001 一级菜单编码   0001 二级菜单编码   0001 三级菜单M00100000000  系统管理M00100010000  参数管理M00100010001  参数管理--修改M00100010002  参数管理--删除M00100020000  区域管理
-	Resourcename  string `json:"resourcename"  xorm:"'RESOURCENAME'"`                    // 资源名
-	Resourcelevel uint32 `json:"resourcelevel"  xorm:"'RESOURCELEVEL'"`                  // 级别1-一级 2-二级 3-三级4-四级
-	Menutype      uint32 `json:"menutype"  xorm:"'MENUTYPE'"`                            // 1- 管理端   2-  交易端 3 - 已失效
-	Parentcode    string `json:"parentcode"  xorm:"'PARENTCODE'"`                        // 上级资源代码
-	URL           string `json:"url"  xorm:"'URL'"`                                      // URL
-	Sort          uint32 `json:"sort"  xorm:"'SORT'"`                                    // 排序 - 一级时,是所有一级菜单的排序顺序;二级时是所属同一个一级菜单下的排序、三级时是同一个二级菜单下的排序
-	Iconame       string `json:"iconame"  xorm:"'ICONAME'"`                              // 菜单图标
-	Remark        string `json:"remark"  xorm:"'REMARK'"`                                // Remark
-}
+import (
+	"errors"
+	"fmt"
+	"mtp2_if/db"
+	"mtp2_if/dbmodels"
+	"mtp2_if/global/utils"
+	"strconv"
+	"strings"
+)
 
-// TableName is FUNCMENULIST
-func (Funcmenulist) TableName() string {
-	return "FUNCMENULIST"
+// QuotePrimaryMenu 报价牌一级分类菜单
+type QuotePrimaryMenu struct {
+	Index        int                  `json:"Index"`        // 序号
+	Key          string               `json:"Key"`          // 键名
+	Name         string               `json:"Name"`         // 菜单名称
+	SubTitleType int                  `json:"SubTitleType"` // 子菜单标题模式:0-市场名称;1-外部交易所名称
+	TradeModes   string               `json:"TradeModes"`   // 包含市场交易类型
+	SubMenus     []QuoteSecondaryMenu `json:"SubMenus"`     // 子菜单
 }
 
-// Rolefuncmenu 角色菜单表
-type Rolefuncmenu struct {
-	Roleid       uint32 `json:"roleid"  xorm:"'ROLEID'" binding:"required"`             // 角色权限ID
-	Resourcecode string `json:"resourcecode"  xorm:"'RESOURCECODE'" binding:"required"` // 菜单代码
+// QuoteSecondaryMenu 报价牌二级分类菜单
+type QuoteSecondaryMenu struct {
+	Index          int    `json:"Index"`                                  // 序号
+	MarketID       int    `json:"MarketID"`                               // 市场ID
+	TradeMode      int    `json:"TradeMode"`                              // 交易模式
+	MenuTitle      string `json:"MenuTitle" xorm:"'ExExchangeName'"`      // 菜单标题(市场名称或外部交易所名称)
+	GoodsGroupIDs  []int  `json:"GoodsGroupIDs"`                          // 商品组ID列表
+	ExExchangeID   int    `json:"ExExchangeID" xorm:"'ExExchangeID'"`     // 外部交易所ID
+	ExExchangeCode string `json:"ExExchangeCode" xorm:"'ExExchangeCode'"` // 外部交易所代码
 }
 
-// TableName is ROLEFUNCMENU
-func (Rolefuncmenu) TableName() string {
-	return "ROLEFUNCMENU"
+// OperationPrimaryMenu 一级功能菜单
+type OperationPrimaryMenu struct {
+	Key      string                   `json:"Key"`      // 菜单KEY
+	Label    string                   `json:"Label"`    // 菜单标题
+	Children []OperationSecondaryMenu `json:"Children"` // 二级功能菜单
 }
 
-// Tabledefine 列表定义表
-type Tabledefine struct {
-	Tablekey  string `json:"tablekey"  xorm:"'TABLEKEY'" binding:"required"` // 列表Key
-	Tabletype uint32 `json:"tabletype"  xorm:"'TABLETYPE'"`                  // 列表类型 - 1:管理端 2:终端
-	Tablename string `json:"tablename"  xorm:"'TABLENAME'"`                  // 列表名称
-	Tabelmenu string `json:"tabelmenu"  xorm:"'TABELMENU'"`                  // 列表菜单
-	Remark    string `json:"remark"  xorm:"'REMARK'"`                        // Remark
+// OperationSecondaryMenu 二级功能菜单
+type OperationSecondaryMenu struct {
+	Key     string             `json:"Key"`     // 菜单KEY
+	Label   string             `json:"Label"`   // 菜单标题
+	TabList []OperationTabMenu `json:"TabList"` // 三级功能菜单
 }
 
-// TableName is TABLEDEFINE
-func (Tabledefine) TableName() string {
-	return "TABLEDEFINE"
+// OperationTabMenu 三级功能菜单
+type OperationTabMenu struct {
+	Key   string `json:"Key"`   // 菜单KEY
+	Label string `json:"Label"` // 菜单标题
 }
 
-// Tablecolumnconfig 列表表头配置表
-type Tablecolumnconfig struct {
-	Autoid          uint64 `json:"autoid"  xorm:"'AUTOID'" binding:"required"` // AutoID
-	Tablekey        string `json:"tablekey"  xorm:"'TABLEKEY'"`                // 列表Key
-	Columnfield     string `json:"columnfield"  xorm:"'COLUMNFIELD'"`          // 列字段
-	Columntitle     string `json:"columntitle"  xorm:"'COLUMNTITLE'"`          // 列Title
-	Columnwidth     string `json:"columnwidth"  xorm:"'COLUMNWIDTH'"`          // 列宽
-	Orderindex      uint32 `json:"orderindex"  xorm:"'ORDERINDEX'"`            // 顺序
-	Isshow          uint32 `json:"isshow"  xorm:"'ISSHOW'"`                    // 是否显示 - 0:不显示 1:显示
-	Aligntype       uint32 `json:"aligntype"  xorm:"'ALIGNTYPE'"`              // 对齐方式 - 1:居中对齐 2:左对齐 3:右对齐
-	Formattertype   string `json:"formattertype"  xorm:"'FORMATTERTYPE'"`      // 格式化类型
-	Formatterstring string `json:"formatterstring"  xorm:"'FORMATTERSTRING'"`  // 格式化字符
-	Remark          string `json:"remark"  xorm:"'REMARK'"`                    // 备注
-	Needsummary     uint32 `json:"needsummary"  xorm:"'NEEDSUMMARY'"`          // 是否需要汇总 - 0:不需要 1:需要
-	Summarytype     uint32 `json:"summarytype"  xorm:"'SUMMARYTYPE'"`          // 汇总类型 - 1:加总 2:最后一个
-	Groupname       string `json:"groupname"  xorm:"'GROUPNAME'"`              // 表头分组名称
-}
+// GetQuoteMenu 获取行情报价牌分类菜单
+func GetQuoteMenu(loginID int) ([]QuotePrimaryMenu, error) {
+	engine := db.GetEngine()
+	rst := make([]QuotePrimaryMenu, 0)
 
-// TableName is TABLECOLUMNCONFIG
-func (Tablecolumnconfig) TableName() string {
-	return "TABLECOLUMNCONFIG"
-}
+	// 账户下有权限的市场ID列表
+	var marketIDs []int
 
-// Enumdicitem 枚举项字典表
-type Enumdicitem struct {
-	Autoid          uint64 `json:"autoid"  xorm:"'AUTOID'" binding:"required"`             // 自增ID
-	Enumdicid       uint32 `json:"enumdicid"  xorm:"'ENUMDICID'" binding:"required"`       // 所属枚举ID
-	Enumdiccode     string `json:"enumdiccode"  xorm:"'ENUMDICCODE'" binding:"required"`   // 所属枚举代码
-	Enumdicname     string `json:"enumdicname"  xorm:"'ENUMDICNAME'"`                      // 枚举项名称
-	Enumitemname    uint64 `json:"enumitemname"  xorm:"'ENUMITEMNAME'" binding:"required"` // 枚举项值
-	Enumitemstatus  uint32 `json:"enumitemstatus"  xorm:"'ENUMITEMSTATUS'"`                // 枚举项状态 - 1.启用 2.不启用
-	Bankmappedvalue string `json:"bankmappedvalue"  xorm:"'BANKMAPPEDVALUE'"`              // 银行服务对应值
-	Remark          string `json:"remark"  xorm:"'REMARK'"`                                // 备注
-	Enumitemvalue   string `json:"enumitemvalue"  xorm:"'ENUMITEMVALUE'"`                  // 通用值 - [币种通用简写]
-	Param1          string `json:"param1"  xorm:"'PARAM1'"`                                // 参数1[币种:币种小数位]
-	Param2          string `json:"param2"  xorm:"'PARAM2'"`                                // 参数1[币种:币种显示单位]
-}
+	// 获取账户类型 - 1:交易所 2:机构 3:会员子机构 4:经纪人 5:投资者 6:客户  (目前可能登录交易端的账号类型为 2 5)
+	userAccount := new(dbmodels.Useraccount)
+	has, err := engine.Join("INNER", "LOGINACCOUNT", "USERACCOUNT.UserID = LOGINACCOUNT.UserID").Where("LOGINACCOUNT.LoginID = ?", loginID).Get(userAccount)
+	if err != nil || !has {
+		return nil, err
+	}
+	if userAccount.Usertype == 5 {
+		// 如果账户类型为5(投资者),则需要通过其所属经济会员来获取市场权限(表:AreaRoleMarket, 条件:对应市场状态为正常;角色类型:经济会员)
+		if err := engine.Table("AREAROLEMARKET").
+			Cols("AREAROLEMARKET.MARKETID").
+			Join("INNER", "MARKET", "MARKET.MARKETID = AREAROLEMARKET.MARKETID").
+			Where("MARKET.MARKETSTATUS = 2 and AREAROLEMARKET.ROLETYPE = 7 and AREAROLEMARKET.AREAUSERID = ?", userAccount.Memberuserid).Find(&marketIDs); err != nil {
+			return nil, err
+		}
+	} else {
+		// 非投资者账号直接通过资金账号获取市场权限(表:TAAccountMarket)
+		var taAccounts []string // 账户下所有资金账户
 
-// TableName is ENUMDICITEM
-func (Enumdicitem) TableName() string {
-	return "ENUMDICITEM"
-}
+		// 先要获取当前登录账户对应的资金账户;如果为外部子资金账号(TaAccount.TaAccountType = 1),则使用TaAccount.FromAccountID来获取市场权限
+		type taAccount struct {
+			AccountID     int `xorm:"ACCOUNTID"`
+			TaAccountType int `xorm:"TAACCOUNTTYPE"`
+			FromAccountID int `xorm:"FROMACCOUNTID"`
+		}
+		datas := make([]taAccount, 0)
+		if err := engine.Table("LOGINTAACCOUNT").
+			Join("INNER", "TAACCOUNT", "LOGINTAACCOUNT.ACCOUNTID = TAACCOUNT.ACCOUNTID").
+			Cols("TAACCOUNT.ACCOUNTID", "TAACCOUNT.TAACCOUNTTYPE", "TAACCOUNT.FROMACCOUNTID").
+			Where("LOGINTAACCOUNT.LOGINID = ?", loginID).Find(&datas); err != nil {
+			return nil, err
+		}
+		// 如果一条记录都没有(未配置自营会员资金账户)则直接通过资金账户表获取
+		if len(datas) == 0 {
+			// 这里要注意,TaAccount表与LoginAccount表关联时,要使用TaAccount.RelatedUserID
+			if err := engine.Table("TAACCOUNT").
+				Join("INNER", "LOGINACCOUNT", "TAACCOUNT.RELATEDUSERID = LOGINACCOUNT.USERID").
+				Cols("TAACCOUNT.ACCOUNTID", "TAACCOUNT.TAACCOUNTTYPE", "TAACCOUNT.FROMACCOUNTID").
+				Where("LOGINACCOUNT.LOGINID = ?", loginID).Find(&datas); err != nil {
+				return nil, err
+			}
+		}
+		for _, v := range datas {
+			if v.TaAccountType == 1 {
+				// 外部资金账户使用TaAccount.FromAccountID来获取市场权限
+				taAccounts = append(taAccounts, strconv.Itoa(v.FromAccountID))
+			} else {
+				taAccounts = append(taAccounts, strconv.Itoa(v.AccountID))
+			}
+		}
 
-// Noticemsg 公告消息表
-type Noticemsg struct {
-	Autoid        int32     `json:"autoid"  xorm:"'AUTOID'" binding:"required"` // 自增ID
-	Msgtype       int32     `json:"msgtype"  xorm:"'MSGTYPE'"`                  // 消息类型 - 1:公告通知 2:系统消息
-	Title         string    `json:"title"  xorm:"'TITLE'"`                      // 标题
-	Content       string    `json:"content"  xorm:"'CONTENT'"`                  // 内容
-	Scheduletime  time.Time `json:"scheduletime"  xorm:"'SCHEDULETIME'"`        // 计划发送时间
-	Publisher     string    `json:"publisher"  xorm:"'PUBLISHER'"`              // 消息发布者
-	Sendtype      int32     `json:"sendtype"  xorm:"'SENDTYPE'"`                // 推送方式 - 1:全体广播 2:按会员广播 3:个人推送 4:按会员广播(仅会员)
-	Userid        int64     `json:"userid"  xorm:"'USERID'"`                    // 会员/投资者ID推送方式 为 个人时,填写投资者ID
-	Istop         int32     `json:"istop"  xorm:"'ISTOP'"`                      // 是否置顶 - 0:不置顶 1:置顶
-	Sentstatus    int32     `json:"sentstatus"  xorm:"'SENTSTATUS'"`            // 推送状态 - 0:未推送 1:已推送 2:审核拒绝
-	Endtime       time.Time `json:"endtime"  xorm:"'ENDTIME'"`                  // 结束时间
-	Creatorid     int64     `json:"creatorid"  xorm:"'CREATORID'"`              // 建仓人
-	Createtime    time.Time `json:"createtime"  xorm:"'CREATETIME'"`            // 创建时间
-	Auditoruserid int64     `json:"auditoruserid"  xorm:"'AUDITORUSERID'"`      // 审核人
-	Audittime     time.Time `json:"audittime"  xorm:"'AUDITTIME'"`              // 审核日期
-	Auditremark   string    `json:"auditremark"  xorm:"'AUDITREMARK'"`          // 审核备注
-}
+		// 获取资金账户对应的市场权限(有权限的市场ID)
+		if len(taAccounts) > 0 {
+			taAccountStr := strings.Join(taAccounts, ",")
+			if err := engine.Table("TAACCOUNTMARKET").
+				Join("INNER", "MARKET", "MARKET.MARKETID = TAACCOUNTMARKET.MARKETID").
+				Cols("TAACCOUNTMARKET.MARKETID").
+				In("TAACCOUNTMARKET.ACCOUNTID", taAccountStr).
+				And("MARKET.MARKETSTATUS = 2").Find(&marketIDs); err != nil {
+				return nil, err
+			}
+		}
+	}
+
+	// ********************* 构建行情报价牌菜单 *********************
+	datas := make([]dbmodels.Funcmenulist, 0)
+	if err := engine.Join("INNER", "ROLEFUNCMENU", "FUNCMENULIST.RESOURCECODE = ROLEFUNCMENU.RESOURCECODE").
+		Where("FUNCMENULIST.PARENTCODE = 'trader_master_menu'").
+		Asc("SORT").
+		Find(&datas); err != nil {
+		return nil, err
+	}
+	// 构建一级菜单对象
+	for i, v := range datas {
+		quotePrimaryMenu := QuotePrimaryMenu{
+			Index:    i,
+			Key:      v.Resourcecode,
+			Name:     v.Resourcename,
+			SubMenus: make([]QuoteSecondaryMenu, 0),
+		}
+		// 跳过自选
+		if v.Resourcecode == "optional" {
+			rst = append(rst, quotePrimaryMenu)
+			continue
+		}
+		// URL:模式,0-使用市场名称,1-使用外部交易所名称;Remark:包含市场交易模式
+		quotePrimaryMenu.SubTitleType, _ = strconv.Atoi(v.URL)
+		quotePrimaryMenu.TradeModes = v.Remark
 
-// TableName is NOTICEMSG
-func (Noticemsg) TableName() string {
-	return "NOTICEMSG"
+		// 如果传入的LoginID获取不到有权限的市场ID列表(有可能LoginID是错误的),则不构建二级子菜单
+		if len(marketIDs) == 0 {
+			rst = append(rst, quotePrimaryMenu)
+			continue
+		}
+
+		// 构建二级子菜单对象
+		marketIDsStr := utils.JoinItoString(marketIDs, ",")
+		if quotePrimaryMenu.SubTitleType == 0 {
+			// 获取目标交易模式的市场信息
+			markets := make([]Market, 0)
+			if err := engine.Where(fmt.Sprintf(`TradeMode in (%s) and MarketID in (%s)`, quotePrimaryMenu.TradeModes, marketIDsStr)).Find(&markets); err != nil {
+				return nil, err
+			}
+			// 使用市场名称
+			for mi, mv := range markets {
+				quoteSecondaryMenu := QuoteSecondaryMenu{
+					Index:         mi,
+					MarketID:      int(mv.Marketid),
+					TradeMode:     int(mv.Trademode),
+					MenuTitle:     mv.Marketname,
+					GoodsGroupIDs: make([]int, 0),
+				}
+				quotePrimaryMenu.SubMenus = append(quotePrimaryMenu.SubMenus, quoteSecondaryMenu)
+			}
+		} else {
+			// 使用外部交易所名称
+			quoteSecondaryMenus := make([]QuoteSecondaryMenu, 0)
+			sql := fmt.Sprintf(`select distinct
+									e.autoid ExExchangeID,
+									e.ExExchangeName,
+									e.ExExchangeCode 
+								from ExternalExchange e
+								inner join goodsgroup g  on g.exexchangeid = e.autoid
+								inner join Market m on g.marketid = m.marketid
+								where m.trademode in (%s) and m.marketid in (%s)`, quotePrimaryMenu.TradeModes, marketIDsStr)
+			if err := engine.SQL(sql).Find(&quoteSecondaryMenus); err != nil {
+				return nil, err
+			}
+			// 获取外部交易所对应的商品组信息
+			for ei, ev := range quoteSecondaryMenus {
+				q := &quoteSecondaryMenus[ei]
+				q.Index = ei
+				// 商品组列表
+				goodsgroups := make([]Goodsgroup, 0)
+				if err := engine.Where("Exexchangeid = ?", ev.ExExchangeID).Find(&goodsgroups); err != nil {
+					return nil, err
+				}
+				marketID := 0
+				var goodsGroupIDs []int
+				for _, gv := range goodsgroups {
+					marketID = int(gv.Marketid)
+					goodsGroupIDs = append(goodsGroupIDs, int(gv.Goodsgroupid))
+				}
+				q.MarketID = marketID
+				q.GoodsGroupIDs = goodsGroupIDs
+			}
+			quotePrimaryMenu.SubMenus = quoteSecondaryMenus
+		}
+
+		rst = append(rst, quotePrimaryMenu)
+	}
+
+	return rst, nil
 }
 
-// Memberrecv 会员消息接受表
-type Memberrecv struct {
-	Msgid    int32 `json:"msgid"  xorm:"'MSGID'" binding:"required"`       // 消息ID
-	Memberid int64 `json:"memberid"  xorm:"'MEMBERID'" binding:"required"` // 会员用户ID
+// GetOperationMenu 获取功能菜单
+func GetOperationMenu() ([]OperationPrimaryMenu, error) {
+	engine := db.GetEngine()
+	rst := make([]OperationPrimaryMenu, 0)
+
+	// 获取一级功能菜单
+	opm := make([]dbmodels.Funcmenulist, 0)
+	if err := engine.Join("INNER", "ROLEFUNCMENU", "FUNCMENULIST.RESOURCECODE = ROLEFUNCMENU.RESOURCECODE").
+		Where("FUNCMENULIST.PARENTCODE = 'trader_operation_master_menu'").
+		Asc("SORT").
+		Find(&opm); err != nil {
+		return nil, err
+	}
+	for _, pv := range opm {
+		var operationPrimaryMenu = OperationPrimaryMenu{
+			Key:      pv.Resourcecode,
+			Label:    pv.Resourcename,
+			Children: make([]OperationSecondaryMenu, 0),
+		}
+
+		// 获取二级功能菜单
+		osm := make([]dbmodels.Funcmenulist, 0)
+		if err := engine.Join("INNER", "ROLEFUNCMENU", "FUNCMENULIST.RESOURCECODE = ROLEFUNCMENU.RESOURCECODE").
+			Where("FUNCMENULIST.PARENTCODE = ?", operationPrimaryMenu.Key).
+			Asc("SORT").
+			Find(&osm); err != nil {
+			return nil, err
+		}
+		for _, sv := range osm {
+			var operationSecondaryMenu = OperationSecondaryMenu{
+				Key:     sv.Resourcecode,
+				Label:   sv.Resourcename,
+				TabList: make([]OperationTabMenu, 0),
+			}
+
+			// 获取三级功能菜单
+			otm := make([]dbmodels.Funcmenulist, 0)
+			if err := engine.Join("INNER", "ROLEFUNCMENU", "FUNCMENULIST.RESOURCECODE = ROLEFUNCMENU.RESOURCECODE").
+				Where("FUNCMENULIST.PARENTCODE = ?", operationSecondaryMenu.Key).
+				Asc("SORT").
+				Find(&otm); err != nil {
+				return nil, err
+			}
+			for _, tv := range otm {
+				var operationTabMenu = OperationTabMenu{
+					Key:   tv.Resourcecode,
+					Label: tv.Resourcename,
+				}
+
+				operationSecondaryMenu.TabList = append(operationSecondaryMenu.TabList, operationTabMenu)
+			}
+
+			operationPrimaryMenu.Children = append(operationPrimaryMenu.Children, operationSecondaryMenu)
+		}
+
+		rst = append(rst, operationPrimaryMenu)
+	}
+
+	return rst, nil
 }
 
-// TableName is MEMBERRECV
-func (Memberrecv) TableName() string {
-	return "MEMBERRECV"
+// GetClientTableDefines 获取终端列表定义信息
+// tableKey 列表Key
+func GetClientTableDefines(tableKey string) ([]dbmodels.Tabledefine, error) {
+	engine := db.GetEngine()
+
+	tableDefiles := make([]dbmodels.Tabledefine, 0)
+	s := engine.Where("TABLEDEFINE.TableType = 2") // TableType = 2 表示终端专用表定义
+	if len(tableKey) > 0 {
+		s = s.And("TABLEDEFINE.TableKey = ?", tableKey)
+	}
+	if err := s.Find(&tableDefiles); err != nil {
+		return nil, err
+	}
+
+	return tableDefiles, nil
 }
 
-// Msgreceiver 管理端消息接收者
-type Msgreceiver struct {
-	Autoid       int32     `json:"autoid"  xorm:"'AUTOID'" binding:"required"`             // 消息ID
-	Managerid    int64     `json:"managerid"  xorm:"'MANAGERID'" binding:"required"`       // 用户ID
-	Readstatus   int32     `json:"readstatus"  xorm:"'READSTATUS'" binding:"required"`     // 消息状态 - 1:未阅读 2:已阅读 3:已删除
-	Receivertype int32     `json:"receivertype"  xorm:"'RECEIVERTYPE'" binding:"required"` // 接收用户类型 - 1:管理端用户 2:终端用户
-	Updatetime   time.Time `json:"updatetime"  xorm:"'UPDATETIME'"`                        // 更新时间
+// GetClientTableColumns 获取客户端指定表的列头信息
+// tableKey 列表Key
+func GetClientTableColumns(tableKey string) ([]dbmodels.Tablecolumnconfig, error) {
+	engine := db.GetEngine()
+
+	// 获取列表数据
+	tablecolumnconfigs := make([]dbmodels.Tablecolumnconfig, 0)
+	// 这里的表名必须要大写 (Oracle的表名都是大写)
+	if err := engine.Join("INNER", "TABLEDEFINE", "TABLEDEFINE.TableKey = TABLECOLUMNCONFIG.TableKey").
+		Where("TABLEDEFINE.TableType = 2 and TABLEDEFINE.TableKey = ?", tableKey).Find(&tablecolumnconfigs); err != nil {
+		return nil, err
+	}
+
+	return tablecolumnconfigs, nil
 }
 
-// TableName is MSGRECEIVER
-func (Msgreceiver) TableName() string {
-	return "MSGRECEIVER"
+// GetNotices 获取指定账户的通知信息(终端)
+// @param loginID int 登录账号
+// @param
+func GetNotices(loginID, msgType int, onlyUnRead bool) ([]dbmodels.Noticemsg, error) {
+	engine := db.GetEngine()
+
+	rst := make([]dbmodels.Noticemsg, 0)
+
+	// 获取登录账号所属会员信息
+	var userAccount dbmodels.Useraccount
+	if has, _ := engine.Join("LEFT", "LOGINACCOUNT", "LOGINACCOUNT.USERID = USERACCOUNT.USERID").
+		Where("LOGINACCOUNT.LOGINID = ?", loginID).Get(&userAccount); !has {
+		return nil, errors.New("获取登录账号所属会员ID失败")
+	}
+
+	// 获取登录账号已读公告ID, 这里要使用的是个人的UserID来查询
+	var msgReceivers []int
+	engine.Table("MSGRECEIVER").Select("AUTOID").Where("RECEIVERTYPE = 2 and MANAGERID = ?", userAccount.Userid).Find(&msgReceivers)
+
+	// 查询SENDTYPE = 1的数据
+	datas1 := make([]dbmodels.Noticemsg, 0)
+	s := engine.Where("SENDTYPE = 1 and SYSDATE > SCHEDULETIME and SYSDATE < ENDTIME and SENTSTATUS=1").
+		And("PUBLISHER = ? or PUBLISHER in (select USERACCOUNT.USERID from USERACCOUNT where USERACCOUNT.USERTYPE = 1)", userAccount.Memberuserid)
+	if msgType > 0 {
+		s = s.And("MSGTYPE = ?", msgType)
+	}
+	if onlyUnRead && len(msgReceivers) > 0 {
+		s = s.NotIn("AUTOID", msgReceivers)
+	}
+	if err := s.Find(&datas1); err != nil {
+		// 查询失败
+		return nil, err
+	}
+	rst = append(rst, datas1...)
+
+	// 查询SENDTYPE = 2的数据
+	datas2 := make([]dbmodels.Noticemsg, 0)
+	s = engine.Where(fmt.Sprintf(`AUTOID in (select MEMBERRECV.MSGID from MEMBERRECV where MEMBERRECV.MEMBERID = %d)`, userAccount.Memberuserid)).
+		And("SENDTYPE = 2 and SYSDATE > SCHEDULETIME and SYSDATE < ENDTIME and SENTSTATUS=1")
+	if msgType > 0 {
+		s = s.And("MSGTYPE = ?", msgType)
+	}
+	if onlyUnRead && len(msgReceivers) > 0 {
+		s = s.NotIn("AUTOID", msgReceivers)
+	}
+	if err := s.Find(&datas2); err != nil {
+		// 查询失败
+		return nil, err
+	}
+	rst = append(rst, datas2...)
+
+	// 查询SENDTYPE = 3的数据
+	datas3 := make([]dbmodels.Noticemsg, 0)
+	s = engine.Where(fmt.Sprintf(`USERID = (SELECT USERID FROM LOGINACCOUNT WHERE LOGINID = %d)`, req.LoginID)).
+		And("SENDTYPE = 3 and SYSDATE > SCHEDULETIME and SYSDATE < ENDTIME and SENTSTATUS=1")
+	if msgType > 0 {
+		s = s.And("MSGTYPE = ?", msgType)
+	}
+	if onlyUnRead && len(msgReceivers) > 0 {
+		s = s.NotIn("AUTOID", msgReceivers)
+	}
+	if err := s.Find(&datas3); err != nil {
+		// 查询失败
+		return nil, err
+	}
+	rst = append(rst, datas3...)
+
+	return rst, nil
 }

+ 1 - 1
routers/router.go

@@ -167,7 +167,7 @@ func ginLoggerMiddleware() gin.HandlerFunc {
 		clientip := c.ClientIP()
 		method := c.Request.Method
 		statuscode := c.Writer.Status()
-		logger.GetLogger().Infof("|%3d|%13v|%15s|%s %s",
+		logger.GetLogger().Debugln("|%3d|%13v|%15s|%s %s",
 			statuscode,
 			latency,
 			clientip,