Sfoglia il codice sorgente

增加财务报表相关接口

zou.yingbin 4 anni fa
parent
commit
d189291eb2
7 ha cambiato i file con 4321 aggiunte e 3661 eliminazioni
  1. 103 0
      controllers/ermcp/qryReport.go
  2. 1726 1422
      docs/docs.go
  3. 1726 1422
      docs/swagger.json
  4. 473 816
      docs/swagger.yaml
  5. 259 0
      models/ermcpReport.go
  6. 4 1
      routers/router.go
  7. 30 0
      utils/sqlUtils.go

+ 103 - 0
controllers/ermcp/qryReport.go

@@ -0,0 +1,103 @@
+/**
+* @Author: zou.yingbin
+* @Create  : 2021/2/4 11:27
+* @Modify  : 2021/2/4 11:27
+ */
+
+package ermcp
+
+import (
+	"github.com/gin-gonic/gin"
+	"mtp2_if/global/app"
+	"mtp2_if/models"
+)
+
+// 财务日报表请求
+type QryReportDayReq struct {
+	UserId    int64  `form:"userid" binding:"required"`    //用户ID
+	TradeDate string `form:"tradedate" binding:"required"` // 交易日
+}
+
+type QryReportFinanceDayRsp models.ErmcpReportDayFR
+
+// @Summary 查询财务日报表(菜单:报表查询/财务报表/日报表)
+// @Produce json
+// @Security ApiKeyAuth
+// @Param userid query int true "用户ID"
+// @Param tradedate query string true "交易日(格式:yyyyMMdd)"
+// @Success 200 {array} QryReportFinanceDayRsp
+// @Failure 500 {object} app.Response
+// @Router /Ermcp/QryReportDayFinance [get]
+// @Tags 企业风险管理(app)
+func QryReportDayFinance(c *gin.Context) {
+	a := app.GinUtils{Gin: app.Gin{C: c}}
+	req := QryReportDayReq{}
+	a.DoBindReq(&req)
+	m := models.ErmcpReportDayFR{AREAUSERID: req.UserId, RECKONDATE: req.TradeDate}
+	a.DoGetDataEx(&m)
+}
+
+// 财务日报表款项明细
+type QryReportFinanceKxRsp models.ErmcpReportOPLog
+
+// @Summary 查询财务日报表款项(菜单:报表查询/财务报表/日报表/款项)
+// @Produce json
+// @Security ApiKeyAuth
+// @Param userid query int true "用户ID"
+// @Param tradedate query string true "交易日(格式:yyyyMMdd)"
+// @Success 200 {array} QryReportFinanceKxRsp
+// @Failure 500 {object} app.Response
+// @Router /Ermcp/QryReportDayFinanceKx [get]
+// @Tags 企业风险管理(app)
+func QryReportDayFinanceKx(c *gin.Context) {
+	a := app.GinUtils{Gin: app.Gin{C: c}}
+	req := QryReportDayReq{}
+	a.DoBindReq(&req)
+	m := models.ErmcpReportDayFRKx{USERID: req.UserId, TRADEDATE: req.TradeDate}
+	a.DoGetDataEx(&m)
+}
+
+// 财务日报表发票明细
+type QryReportFinanceFpRsp models.ErmcpReportOPLog
+
+// @Summary 查询财务日报表发票(菜单:报表查询/财务报表/日报表/发票)
+// @Produce json
+// @Security ApiKeyAuth
+// @Param userid query int true "用户ID"
+// @Param tradedate query string true "交易日(格式:yyyyMMdd)"
+// @Success 200 {array} QryReportFinanceKxRsp
+// @Failure 500 {object} app.Response
+// @Router /Ermcp/QryReportDayFinanceFp [get]
+// @Tags 企业风险管理(app)
+func QryReportDayFinanceFp(c *gin.Context) {
+	a := app.GinUtils{Gin: app.Gin{C: c}}
+	req := QryReportDayReq{}
+	a.DoBindReq(&req)
+	m := models.ErmcpReportOPLog{USERID: req.UserId, TRADEDATE: req.TradeDate, LogTypeFilter: "11, 12"}
+	a.DoGetDataEx(&m)
+}
+
+// 财务月报表请求
+type QryReportMonthReq struct {
+	UserId    int64  `form:"userid" binding:"required"`    //用户ID
+	CycleTime string `form:"cycletime" binding:"required"` // 周期时间:月(格式:yyyyMM)
+}
+
+type QryReportFinanceMonRsp models.ErmcpReportMonthFR
+
+// @Summary 查询财务月报表(菜单:报表查询/财务报表/月报表)
+// @Produce json
+// @Security ApiKeyAuth
+// @Param userid query int true "用户ID"
+// @Param cycletime query string true "交易日(格式:yyyyMMdd)"
+// @Success 200 {array} QryReportFinanceMonRsp
+// @Failure 500 {object} app.Response
+// @Router /Ermcp/QryReportMonthFinance [get]
+// @Tags 企业风险管理(app)
+func QryReportMonthFinance(c *gin.Context) {
+	a := app.GinUtils{Gin: app.Gin{C: c}}
+	req := QryReportMonthReq{}
+	a.DoBindReq(&req)
+	m := models.ErmcpReportMonthFR{AREAUSERID: req.UserId, CYCLETIME: req.CycleTime}
+	a.DoGetDataEx(&m)
+}

File diff suppressed because it is too large
+ 1726 - 1422
docs/docs.go


File diff suppressed because it is too large
+ 1726 - 1422
docs/swagger.json


File diff suppressed because it is too large
+ 473 - 816
docs/swagger.yaml


+ 259 - 0
models/ermcpReport.go

@@ -0,0 +1,259 @@
+/**
+* @Author: zou.yingbin
+* @Create  : 2021/2/4 11:27
+* @Modify  : 2021/2/4 11:27
+ */
+
+package models
+
+import (
+	"fmt"
+	"mtp2_if/db"
+	"mtp2_if/mtpcache"
+	"mtp2_if/utils"
+)
+
+// 财务日报表
+type ErmcpReportDayFR struct {
+	RECKONDATE           string  `json:"reckondate"  xorm:"'RECKONDATE'"`                     // 日照时期(yyyyMMdd)
+	AREAUSERID           int64   `json:"areauserid"  xorm:"'AREAUSERID'"`                     // 所属机构
+	COLLECTMONEYCOUNT    int32   `json:"collectmoneycount"  xorm:"'COLLECTMONEYCOUNT'"`       // 今日收款笔数
+	COLLECTMONEYAMOUNT   float64 `json:"collectmoneyamount"  xorm:"'COLLECTMONEYAMOUNT'"`     // 今日收款金额
+	PAYMONEYCOUNT        int32   `json:"paymoneycount"  xorm:"'PAYMONEYCOUNT'"`               // 今日付款笔数
+	PAYMONEYAMOUNT       float64 `json:"paymoneyamount"  xorm:"'PAYMONEYAMOUNT'"`             // 今日付款金额
+	COLLECTINVOICECOUNT  int32   `json:"collectinvoicecount"  xorm:"'COLLECTINVOICECOUNT'"`   // 今日开票笔数
+	COLLECTINVOICEAMOUNT float64 `json:"collectinvoiceamount"  xorm:"'COLLECTINVOICEAMOUNT'"` // 今日开票金额
+	PAYINVOICECOUNT      int32   `json:"payinvoicecount"  xorm:"'PAYINVOICECOUNT'"`           // 今日收票笔数
+	PAYINVOICEAMOUNT     float64 `json:"payinvoiceamount"  xorm:"'PAYINVOICEAMOUNT'"`         // 今日收票金额
+	UPDATETIME           string  `json:"updatetime"  xorm:"'UPDATETIME'"`                     // 更新时间
+	BeginDate            string  `json:"-"`                                                   // 开始日期
+	EndDate              string  `json:"-"`                                                   // 结束日期
+}
+
+// 数据处理
+func (r *ErmcpReportDayFR) Calc() {
+
+}
+
+func (r *ErmcpReportDayFR) buildSql() string {
+	var sqlId utils.SQLVal = "SELECT t.RECKONDATE," +
+		"       t.AREAUSERID," +
+		"       t.COLLECTMONEYCOUNT," +
+		"       t.COLLECTMONEYAMOUNT," +
+		"       t.PAYMONEYCOUNT," +
+		"       t.PAYMONEYAMOUNT," +
+		"       t.COLLECTINVOICECOUNT," +
+		"       t.COLLECTINVOICEAMOUNT," +
+		"       t.PAYINVOICECOUNT," +
+		"       t.PAYINVOICEAMOUNT," +
+		"       to_char(t.UPDATETIME, 'yyyy-mm-dd hh:mi:ss') UPDATETIME" +
+		"  FROM RECKON_ERMCP_AREAFR t" +
+		" WHERE 1 = 1"
+
+	// 查询条件
+	if r.RECKONDATE != "" {
+		sqlId.And("t.RECKONDATE", r.RECKONDATE)
+	} else if r.BeginDate != "" && r.BeginDate == r.EndDate {
+		sqlId.And("t.RECKONDATE", r.BeginDate)
+	} else {
+		if r.BeginDate != "" {
+			sqlId.BiggerOrEq("t.RECKONDATE", r.BeginDate)
+		}
+		if r.EndDate != "" {
+			sqlId.LessOrEq("t.RECKONDATE", r.EndDate)
+		}
+	}
+	return sqlId.String()
+}
+
+// 获取日报表
+func (r *ErmcpReportDayFR) GetDataEx() (interface{}, error) {
+	sData := make([]ErmcpReportDayFR, 0)
+	err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
+	return sData, err
+}
+
+// 财务日报表/款项
+type ErmcpReportDayFRKx struct {
+	USERID    int64  `json:"userid"  xorm:"'USERID'"`       // 机构ID
+	TRADEDATE string `json:"tradedate"  xorm:"'TRADEDATE'"` // 交易日(yyyyMMdd)
+}
+
+// 获取日报表款项记录
+func (r *ErmcpReportDayFRKx) GetDataEx() (interface{}, error) {
+	m := ErmcpReportOPLog{USERID: r.USERID, LogTypeFilter: "8,9,10", TRADEDATE: r.TRADEDATE}
+	return m.GetDataEx()
+}
+
+// 报表合同操作记录通用查询
+type ErmcpReportOPLog struct {
+	LOGID          string  `json:"logid"  xorm:"'lOGID'"`                   // 流水ID(604+Unix秒时间戳(10位)+xxxxxx)
+	BIZTYPE        int32  `json:"biztype"  xorm:"'BIZTYPE'"`               // 业务类型 - 1:套保计划 2:现货合同
+	OPERATELOGTYPE int32  `json:"operatelogtype"  xorm:"'OPERATELOGTYPE'"` // 操作流水类型 -
+	RELATEDID      string  `json:"relatedid"  xorm:"'RELATEDID'"`           // 现货合同ID\套保计划
+	LOGVALUE       string `json:"logvalue"  xorm:"'LOGVALUE'"`             // 数值
+	LOGDATETIME    string `json:"logdatetime"  xorm:"'LOGDATETIME'"`       // 流水日期(时间)
+	TRADEDATE      string `json:"tradedate"  xorm:"'TRADEDATE'"`           // 交易日(yyyyMMdd)
+	APPLYID        int64  `json:"applyid"  xorm:"'APPLYID'"`               // 操作人
+	CONTRACTTYPE   int32  `json:"contracttype"  xorm:"'CONTRACTTYPE'"`     // 现货合同类型 - 1:采购 -1:销售
+	USERID         int64  `json:"userid"  xorm:"'USERID'"`                 // 机构ID
+	WRSTANDARDID   int64  `json:"wrstandardid"  xorm:"'WRSTANDARDID'"`     // 现货商品ID
+	RELATEDNO      string `json:"relatedno"  xorm:"'RELATEDNO'"`           // 合同编号
+	WRSTANDARDNAME string `json:"wrstandardname"  xorm:"'WRSTANDARDNAME'"` // 现货商品名称
+	WRSTANDARDCODE string `json:"wrstandardcode"  xorm:"'WRSTANDARDCODE'"` // 现货商品代码
+	UNITID         int32  `json:"-"  xorm:"'UNITID'"`                      // 现货商品单位id
+	ENUMDICNAME    string `json:"enumdicName"`                             // 单位名称
+	OPTYPENAME     string `json:"optypename"`                              // 流水类型名称
+	LOGTYPENAME    string `json:"logtypename"`                             // 合同类型(名称)
+	APPLYNAME      string `json:"applyname"`                               // 操作人名称
+
+	LogTypeFilter string `json:"-"` // 查询日志类型, 逗号隔开(如 1,2,4)
+}
+
+// 处理数据
+func (r *ErmcpReportOPLog) Calc() {
+	r.ENUMDICNAME = mtpcache.GetEnumDicitemName(r.UNITID)
+	r.APPLYNAME = mtpcache.GetUserNameByUserId(r.APPLYID)
+	sDes := []string{"点价价格", "点价数量", "结算量", "其它费用", "追加保证金", "溢短金额", "调整金额", "付款金额", "收款金额", "退款金额",
+		"收票金额", "开票金额", "提交审核(合同)", "审核通过(合同)", "审核拒绝(合同)", "合同撤回", "提交审核(计划)",
+		"审核通过(计划)", "审核拒绝(计划)", "计划撤回", "正常完结(合同)", "异常终止(合同)", "退还保证金"}
+	if r.OPERATELOGTYPE >= 1 && r.OPERATELOGTYPE <= 23 {
+		r.OPTYPENAME = sDes[r.OPERATELOGTYPE-1]
+	}
+
+	if r.CONTRACTTYPE == 1 {
+		r.LOGTYPENAME = "采购"
+	} else if r.CONTRACTTYPE == -1 {
+		r.LOGTYPENAME = "销售"
+	}
+
+	if r.BIZTYPE == 1 {
+		r.LOGTYPENAME += "计划"
+	} else if r.BIZTYPE == 2 {
+		r.LOGTYPENAME += "合同"
+	}
+}
+
+func (r *ErmcpReportOPLog) buildSql() string {
+	var sqlId utils.SQLVal = "with tmp as" +
+		" (select to_char(t.hedgeplanid) relatedid," +
+		"         t.hedgeplanno relatedno," +
+		"         1 as logType," +
+		"         t.contracttype" +
+		"    from ermcp_hedgeplan t" +
+		"   where t.areauserid = %v" +
+		"  union all" +
+		"  select to_char(t.spotcontractid)," +
+		"         t.contractno," +
+		"         2 as logType," +
+		"         t.contracttype" +
+		"    from ermcp_spotcontract t" +
+		"   where t.userid = %v)" +
+		" SELECT to_char(t.LOGID) LOGID," +
+		"       t.BIZTYPE," +
+		"       t.OPERATELOGTYPE," +
+		"       to_char(t.RELATEDID) RELATEDID," +
+		"       t.LOGVALUE," +
+		"       to_char(t.LOGDATETIME, 'yyyy-mm-dd hh24:mi:ss') LOGDATETIME," +
+		"       t.TRADEDATE," +
+		"       t.APPLYID," +
+		"       t.CONTRACTTYPE," +
+		"       t.USERID," +
+		"       t.WRSTANDARDID," +
+		"       tmp.relatedno," +
+		"       w.wrstandardname," +
+		"       w.wrstandardcode," +
+		"       w.unitid" +
+		"  FROM ERMCP_CONTRACTOPERATELOG t" +
+		" inner join tmp" +
+		"    on t.RELATEDID = tmp.RELATEDID" +
+		"   and t.userid = %v" +
+		"   left join wrstandard w on t.wrstandardid=w.wrstandardid" +
+		" WHERE 1 = 1"
+	sqlId = utils.SQLVal(fmt.Sprintf(sqlId.String(), r.USERID, r.USERID, r.USERID))
+	// 筛选条件
+	sqlId.And("t.TRADEDATE", r.TRADEDATE)
+	if r.LogTypeFilter != "" {
+		sqlId.Join(fmt.Sprintf(" and t.OPERATELOGTYPE in(%v)", r.LogTypeFilter))
+	}
+	return sqlId.String()
+}
+
+// 获取日志记录
+func (r *ErmcpReportOPLog) GetDataEx() (interface{}, error) {
+	sData := make([]ErmcpReportOPLog, 0)
+	err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
+	for i := range sData {
+		sData[i].Calc()
+	}
+	return sData, err
+}
+
+// 财务月报表
+type ErmcpReportMonthFR struct {
+	CYCLETYPE            int32              `json:"cycletype"  xorm:"'cycletype'"`                       // 周期类型 - 1:月 2:季 3:年 4:周 5:全报表【原值】
+	CYCLETIME            string             `json:"cycletime"  xorm:"'cycletime'"`                       // 周期时间 月(YYYYMM)  季(YYYYQ) 年(YYYY) 周(YYYYIW) 全(0)【原值】
+	AREAUSERID           int64              `json:"areauserid"  xorm:"'areauserid'"`                     // 所属机构【原值】
+	COLLECTMONEYCOUNT    int32              `json:"collectmoneycount"  xorm:"'collectmoneycount'"`       // 今日收款笔数 【汇总】
+	COLLECTMONEYAMOUNT   float64            `json:"collectmoneyamount"  xorm:"'collectmoneyamount'"`     // 今日收款金额【汇总】
+	PAYMONEYCOUNT        int32              `json:"paymoneycount"  xorm:"'paymoneycount'"`               // 今日付款笔数【汇总】
+	PAYMONEYAMOUNT       float64            `json:"paymoneyamount"  xorm:"'paymoneyamount'"`             // 今日付款金额【汇总】
+	COLLECTINVOICECOUNT  int32              `json:"collectinvoicecount"  xorm:"'collectinvoicecount'"`   // 今日开票笔数【汇总】
+	COLLECTINVOICEAMOUNT float64            `json:"collectinvoiceamount"  xorm:"'collectinvoiceamount'"` // 今日开票金额【汇总】
+	PAYINVOICECOUNT      int32              `json:"payinvoicecount"  xorm:"'payinvoicecount'"`           // 今日收票笔数【汇总】
+	PAYINVOICEAMOUNT     float64            `json:"payinvoiceamount"  xorm:"'payinvoiceamount'"`         // 今日收票金额【汇总】
+	UPDATETIME           string             `json:"updatetime"  xorm:"'updatetime'"`                     // 更新时间
+	DayFR                []ErmcpReportDayFR `json:"dayFr"`                                               // 日报表明细
+}
+
+// 数据处理
+func (r *ErmcpReportMonthFR) Calc() {
+
+}
+
+func (r *ErmcpReportMonthFR) buildSql() string {
+	var sqlId utils.SQLVal = "SELECT t.CYCLETYPE," +
+		"       t.CYCLETIME," +
+		"       t.AREAUSERID," +
+		"       t.COLLECTMONEYCOUNT," +
+		"       t.COLLECTMONEYAMOUNT," +
+		"       t.PAYMONEYCOUNT," +
+		"       t.PAYMONEYAMOUNT," +
+		"       t.COLLECTINVOICECOUNT," +
+		"       t.COLLECTINVOICEAMOUNT," +
+		"       t.PAYINVOICECOUNT," +
+		"       t.PAYINVOICEAMOUNT," +
+		"       to_char(t.UPDATETIME, 'yyyy-mm-dd hh:mi:ss') UPDATETIME" +
+		"  FROM REPORT_ERMCP_AREAFR t" +
+		" WHERE 1 = 1"
+	sqlId.And("t.CYCLETYPE", 1)
+	sqlId.And("t.CYCLETIME", r.CYCLETIME)
+	return sqlId.String()
+}
+
+// 获取月报表
+func (r *ErmcpReportMonthFR) GetDataEx() (interface{}, error) {
+	sData := make([]ErmcpReportMonthFR, 0)
+	// 月报表
+	err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
+
+	// 日报表明细
+	if len(r.CYCLETIME) != 6 {
+		// 月报表的日期应是6位,如 202101
+		return nil, nil
+	}
+	t1 := r.CYCLETIME + "01"
+	t2 := r.CYCLETIME + "31"
+
+	for i := range sData {
+		sData[i].Calc()
+		dayM := ErmcpReportDayFR{AREAUSERID: r.AREAUSERID, BeginDate: t1, EndDate: t2}
+		if dObj, err := dayM.GetDataEx(); err == nil {
+			if d, ok := dObj.([]ErmcpReportDayFR); ok {
+				sData[i].DayFR = d
+			}
+		}
+	}
+
+	return sData, err
+}

+ 4 - 1
routers/router.go

@@ -338,7 +338,10 @@ func InitRouter() *gin.Engine {
 		ermcpR.GET("/QueryAvaildGoodsGroup", ermcp.QueryAvaildGoodsGroup)
 		ermcpR.GET("/QueryRealtimeExposurePosition", ermcp.QueryRealtimeExposurePosition)
 		ermcpR.GET("/QueryExposureHedgePosition", ermcp.QueryExposureHedgePosition)
-		ermcpR.GET("/QueryExposureHedgePositionDetail", ermcp.QueryExposureHedgePositionDetail)
+		ermcpR.GET("/QryReportDayFinance", ermcp.QryReportDayFinance)
+		ermcpR.GET("/QryReportDayFinanceKx", ermcp.QryReportDayFinanceKx)
+		ermcpR.GET("/QryReportDayFinanceFp", ermcp.QryReportDayFinanceFp)
+		ermcpR.GET("/QryReportMonthFinance", ermcp.QryReportMonthFinance)
 	}
 
 	return r

+ 30 - 0
utils/sqlUtils.go

@@ -12,7 +12,37 @@ import "fmt"
 
 type SQLVal string
 
+// 返回自身字符串
+func (r *SQLVal) String() string {
+	return string(*r)
+}
+
 // 增加and 条件
 func (r *SQLVal) And(fieldName string, val interface{}) {
 	*r = *r + SQLVal(fmt.Sprintf(" and %v = %v", fieldName, val))
+}
+
+// 大于
+func (r *SQLVal) Bigger(fieldName string, val interface{}) {
+	*r = *r + SQLVal(fmt.Sprintf(" and %v > %v", fieldName, val))
+}
+
+// 大于等于
+func (r *SQLVal) BiggerOrEq(fieldName string, val interface{}) {
+	*r = *r + SQLVal(fmt.Sprintf(" and %v >= %v", fieldName, val))
+}
+
+// 小于等于
+func (r *SQLVal) Less(fieldName string, val interface{}) {
+	*r = *r + SQLVal(fmt.Sprintf(" and %v < %v", fieldName, val))
+}
+
+// 小于等于
+func (r *SQLVal) LessOrEq(fieldName string, val interface{}) {
+	*r = *r + SQLVal(fmt.Sprintf(" and %v <= %v", fieldName, val))
+}
+
+// 自由增加条件
+func (r *SQLVal) Join(condition string) {
+	*r = *r + SQLVal(condition)
 }

Some files were not shown because too many files changed in this diff