/** * @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" ) // ErmcpReportDayFR 财务日报表 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:"-"` // 结束日期 } // Calc 数据处理 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" // 查询条件 sqlId.And("t.AREAUSERID", r.AREAUSERID) 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() } // GetDataEx 获取日报表 func (r *ErmcpReportDayFR) GetDataEx() (interface{}, error) { sData := make([]ErmcpReportDayFR, 0) err := db.GetEngine().SQL(r.buildSql()).Find(&sData) return sData, err } // ErmcpReportDayFRKx 财务日报表/款项 type ErmcpReportDayFRKx struct { USERID int64 `json:"userid" xorm:"'USERID'"` // 机构ID TRADEDATE string `json:"tradedate" xorm:"'TRADEDATE'"` // 交易日(yyyyMMdd) } // GetDataEx 获取日报表款项记录 func (r *ErmcpReportDayFRKx) GetDataEx() (interface{}, error) { m := ErmcpReportOPLog{USERID: r.USERID, LogTypeFilter: "8,9,10", TRADEDATE: r.TRADEDATE} return m.GetDataEx() } // ErmcpReportOPLog 报表合同操作记录通用查询 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"` // 操作人名称 BRANDNAME string `json:"brandname" xorm:"'brandname'"` // 品牌名称 MODELNAME string `json:"modelname" xorm:"'modelname'"` // 型号名称 LogTypeFilter string `json:"-"` // 查询日志类型, 逗号隔开(如 1,2,4) } // Calc 处理数据 func (r *ErmcpReportOPLog) Calc() { r.ENUMDICNAME = mtpcache.GetEnumDicitemName(r.UNITID) r.APPLYNAME = mtpcache.GetUserNameByUserId(r.APPLYID) if r.APPLYNAME == "" { // APPLYID 可能存的是loginId r.APPLYNAME = mtpcache.GetLoginCodeByLoginId(r.APPLYID) } //1:点价价格 2:点价数量 3:结算量 4:其它费用 5:追加保证金 6溢短金额 7:调整金额 8:付款金额 9:收款金额 10:退款金额 //11:收票金额 12:开票金额 13:提交审核(合同) 14:审核通过(合同) 15:审核拒绝(合同) 16:合同撤回 17:提交审核(计划) //18:审核通过(计划) 19:审核拒绝(计划) 20:计划撤回 21:正常完结(合同) 22:异常终止(合同) 23:退还保证金 // 数据库注释与返回值映身关系: 结算量->确定量, 收款->收款金额, 退款->退款金额, 付款->付款金额, 收票->收票金额, 开票->开票金额 sDes := []string{"点价价格", "点价数量", "确定量", "其它费用", "追加保证金", "溢短金额", "调整金额", "付款", "收款", "退款", "收票", "开票", "提交审核(合同)", "审核通过(合同)", "审核拒绝(合同)", "合同撤回", "提交审核(计划)", "审核通过(计划)", "审核拒绝(计划)", "计划撤回", "正常完结(合同)", "异常终止(合同)", "退还保证金"} if r.OPERATELOGTYPE >= 1 && r.OPERATELOGTYPE <= 23 { r.OPTYPENAME = sDes[r.OPERATELOGTYPE-1] } // 收款款项:采购合同的退款、销售合同的收款应用正数显示,付款款项:采购合同的付款、销售合同的退款应用负数显示 if r.CONTRACTTYPE == 1 { r.LOGTYPENAME = "采购" // 采购合同/退款 正数 if r.OPERATELOGTYPE == 10 && len(r.LOGVALUE) > 0 { if r.LOGVALUE[0] == '-' { r.LOGVALUE = r.LOGVALUE[1:] } } // 采购合同/付款 负数 if r.OPERATELOGTYPE == 8 && len(r.LOGVALUE) > 0 { if r.LOGVALUE[0] != '-' { r.LOGVALUE = "-" + r.LOGVALUE } } } else if r.CONTRACTTYPE == -1 { r.LOGTYPENAME = "销售" // 销售合同/收款 正数 if r.OPERATELOGTYPE == 9 && len(r.LOGVALUE) > 0 { if r.LOGVALUE[0] == '-' { r.LOGVALUE = r.LOGVALUE[1:] } } // 销售合同/退款 负数 if r.OPERATELOGTYPE == 10 && len(r.LOGVALUE) > 0 { if r.LOGVALUE[0] != '-' { r.LOGVALUE = "-" + r.LOGVALUE } } } // 去除多余的0,最后4个0 if r.LOGVALUE[len(r.LOGVALUE)-4:] == "0000" { r.LOGVALUE = r.LOGVALUE[:len(r.LOGVALUE)-4] } if r.BIZTYPE == 1 { r.LOGTYPENAME += "计划" } else if r.BIZTYPE == 2 { r.LOGTYPENAME += "合同" } } func (r *ErmcpReportOPLog) buildSql() string { var sqlId utils.SQLVal = "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," + " s.contractno relatedno," + " s.spotgoodsbrandid," + " s.spotgoodsmodelid," + " w.wrstandardname," + " w.wrstandardcode," + " w.unitid," + " gb.brandname," + " gm.modelname" + " FROM ERMCP_CONTRACTOPERATELOG t" + " inner join ermcp_spotcontract s" + " on t.RELATEDID = s.spotcontractid" + " and t.userid = %v" + " left join wrstandard w" + " on t.wrstandardid = w.wrstandardid" + " left join spotgoodsbrand gb" + " on s.spotgoodsbrandid = gb.brandid" + " left join spotgoodsmodel gm" + " on s.spotgoodsmodelid = gm.modelid" + " WHERE t.biztype = 2" sqlId = utils.SQLVal(fmt.Sprintf(sqlId.String(), r.USERID)) // 筛选条件 sqlId.And("t.TRADEDATE", r.TRADEDATE) if r.WRSTANDARDID > 0 { sqlId.And("t.WRSTANDARDID", r.WRSTANDARDID) } if r.LogTypeFilter != "" { sqlId.Join(fmt.Sprintf(" and t.OPERATELOGTYPE in(%v)", r.LogTypeFilter)) } return sqlId.String() } // GetDataEx 获取日志记录 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 } // ErmcpReportMonthFR 财务月报表 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"` // 日报表明细 } // Calc 数据处理 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.AREAUSERID", r.AREAUSERID) sqlId.And("t.CYCLETYPE", 1) sqlId.And("t.CYCLETIME", r.CYCLETIME) return sqlId.String() } // GetDataEx 获取月报表 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 } // ErmcpReportDaySpot 现货日报表 type ErmcpReportDaySpot struct { BUYPRICEDQTY float64 `json:"-" xorm:"'BUYPRICEDQTY'"` // 期末采购定价量 SELLPRICEDQTY float64 `json:"-" xorm:"'SELLPRICEDQTY'"` // 期末销售定价量 ORIBUYPRICEDQTY float64 `json:"-" xorm:"'ORIBUYPRICEDQTY'"` // 期初采购定价量 ORISELLPRICEDQTY float64 `json:"-" xorm:"'ORISELLPRICEDQTY'"` // 期初销售定价量 TODAYBUYRECKONQTY float64 `json:"todaybuyreckonqty" xorm:"'TODAYBUYRECKONQTY'"` // 采购确定量 TODAYSELLRECKONQTY float64 `json:"todaysellreckonqty" xorm:"'TODAYSELLRECKONQTY'"` // 销售确定量 RECKONDATE string `json:"reckondate" xorm:"'RECKONDATE'"` // 日照时期(yyyyMMdd) WRSTANDARDID int64 `json:"wrstandardid" xorm:"'WRSTANDARDID'"` // 现货商品ID AREAUSERID int64 `json:"areauserid" xorm:"'AREAUSERID'"` // 所属机构T WRSTANDARDNAME string `json:"wrstandardname" xorm:"'WRSTANDARDNAME'"` // 现货商品名称 WRSTANDARDCODE string `json:"wrstandardcode" xorm:"'WRSTANDARDCODE'"` // 现货商品代码 UNITID int32 `json:"-" xorm:"'UNITID'"` // 现货商品单位id BUYINQTY float64 `json:"buyinqty" xorm:"'BUYINQTY'"` // 采购入库量 SELLOUTQTY float64 `json:"selloutqty" xorm:"'SELLOUTQTY'"` // 销售出库量 ENUMDICNAME string `json:"enumdicname"` // 现货商品单位名称 TOTALBUYPRICEDQTY float64 `json:"totalbuypricedqty"` // 采购定价量 = 期末 - 期初 TOTALSELLPRICEDQTY float64 `json:"totalsellpricedqty"` // 销售定价量 = 期末 - 期初 BeginDate string `json:"-"` // 开始日期 EndDate string `json:"-"` // 结束日期 } // Calc 数据处理 func (r *ErmcpReportDaySpot) Calc() { r.TOTALBUYPRICEDQTY = r.BUYPRICEDQTY - r.ORIBUYPRICEDQTY r.TOTALSELLPRICEDQTY = r.SELLPRICEDQTY - r.ORISELLPRICEDQTY r.ENUMDICNAME = mtpcache.GetEnumDicitemName(r.UNITID) } func (r *ErmcpReportDaySpot) buildSql() string { var sqlId utils.SQLVal = "with tmp as" + " (select t.userid," + " t.wrstandardid," + " t.reckondate," + " sum(t.todaybuyinqty) todaybuyinqty," + " sum(t.todayselloutqty) todayselloutqty" + " from Reckon_ERMCP_AreaStock t" + " group by t.userid, t.wrstandardid,t.reckondate)" + "select t.reckondate," + " t.BUYPRICEDQTY," + " t.SELLPRICEDQTY," + " t.Oribuypricedqty," + " t.Orisellpricedqty," + " t.TODAYBUYRECKONQTY," + " t.TODAYSELLRECKONQTY," + " t.RECKONDATE," + " t.WRSTANDARDID," + " t.AREAUSERID," + " w.wrstandardname," + " w.wrstandardcode," + " w.unitid," + " s.todaybuyinqty buyinqty," + " s.todayselloutqty selloutqty" + " from RECKON_ERMCP_AREASPOT t" + " left join tmp s" + " on t.reckondate = s.reckondate" + " and t.areauserid = s.userid" + " and t.wrstandardid = s.wrstandardid" + " left join wrstandard w" + " on t.wrstandardid = w.wrstandardid" + " where 1 = 1" sqlId.And("t.AREAUSERID", r.AREAUSERID) if r.WRSTANDARDID > 0 { sqlId.And("t.WRSTANDARDID", r.WRSTANDARDID) } 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) } } sqlId.Join(" order by t.RECKONDATE") return sqlId.String() } // GetDataEx 获取现货日报表 func (r *ErmcpReportDaySpot) GetDataEx() (interface{}, error) { sData := make([]ErmcpReportDaySpot, 0) err := db.GetEngine().SQL(r.buildSql()).Find(&sData) for i := range sData { sData[i].Calc() } return sData, err } // ErmcpReportMonSpot 现货月报表 type ErmcpReportMonSpot struct { CYCLETYPE int32 `json:"cycletype" xorm:"'cycletype'"` // 周期类型 - 1:月 2:季 3:年 4:周 5:全报表【原值】 CYCLETIME string `json:"cycletime" xorm:"'cycletime'"` // 周期时间 月(YYYYMM) 季(YYYYQ) 年(YYYY) 周(YYYYIW) 全(0)【原值】 BUYPRICEDQTY float64 `json:"-" xorm:"'BUYPRICEDQTY'"` // 期末采购定价量 SELLPRICEDQTY float64 `json:"-" xorm:"'SELLPRICEDQTY'"` // 期末销售定价量 ORIBUYPRICEDQTY float64 `json:"-" xorm:"'ORIBUYPRICEDQTY'"` // 期初采购定价量 ORISELLPRICEDQTY float64 `json:"-" xorm:"'ORISELLPRICEDQTY'"` // 期初销售定价量 TODAYBUYRECKONQTY float64 `json:"todaybuyreckonqty" xorm:"'TODAYBUYRECKONQTY'"` // 采购确定量 TODAYSELLRECKONQTY float64 `json:"todaysellreckonqty" xorm:"'TODAYSELLRECKONQTY'"` // 销售确定量 WRSTANDARDID int64 `json:"wrstandardid" xorm:"'WRSTANDARDID'"` // 现货商品ID AREAUSERID int64 `json:"areauserid" xorm:"'AREAUSERID'"` // 所属机构T WRSTANDARDNAME string `json:"wrstandardname" xorm:"'WRSTANDARDNAME'"` // 现货商品名称 WRSTANDARDCODE string `json:"wrstandardcode" xorm:"'WRSTANDARDCODE'"` // 现货商品代码 UNITID int32 `json:"-" xorm:"'UNITID'"` // 现货商品单位id BUYINQTY float64 `json:"buyinqty" xorm:"'BUYINQTY'"` // 采购入库量 SELLOUTQTY float64 `json:"selloutqty" xorm:"'SELLOUTQTY'"` // 销售出库量 ENUMDICNAME string `json:"enumdicname"` // 现货商品单位名称 TOTALBUYPRICEDQTY float64 `json:"totalbuypricedqty"` // 采购定价量 = 期末 - 期初 TOTALSELLPRICEDQTY float64 `json:"totalsellpricedqty"` // 销售定价量 = 期末 - 期初 } // Calc 数据处理 func (r *ErmcpReportMonSpot) Calc() { r.TOTALBUYPRICEDQTY = r.BUYPRICEDQTY - r.ORIBUYPRICEDQTY r.TOTALSELLPRICEDQTY = r.SELLPRICEDQTY - r.ORISELLPRICEDQTY r.ENUMDICNAME = mtpcache.GetEnumDicitemName(r.UNITID) } func (r *ErmcpReportMonSpot) buildSql() string { var sqlId utils.SQLVal = "with tmp as" + " (select t.userid," + " t.wrstandardid," + " t.cycletime," + " t.cycletype," + " sum(t.todaybuyinqty) todaybuyinqty," + " sum(t.todayselloutqty) todayselloutqty" + " from Report_ERMCP_AreaStock t" + " group by t.userid, t.wrstandardid, t.cycletime, t.cycletype)" + "select t.BUYPRICEDQTY," + " t.SELLPRICEDQTY," + " t.Oribuypricedqty," + " t.Orisellpricedqty," + " t.TODAYBUYRECKONQTY," + " t.TODAYSELLRECKONQTY," + " t.cycletype," + " t.cycletime," + " t.WRSTANDARDID," + " t.AREAUSERID," + " w.wrstandardname," + " w.wrstandardcode," + " w.unitid," + " s.todaybuyinqty buyinqty," + " s.todayselloutqty selloutqty" + " from Report_ERMCP_AreaSpot t" + " left join tmp s" + " on t.cycletime = s.cycletime" + " and t.cycletype = s.cycletype" + " and t.areauserid = s.userid" + " and t.wrstandardid = s.wrstandardid" + " left join wrstandard w" + " on t.wrstandardid = w.wrstandardid" + " where t.cycletype = 1" sqlId.And("t.AREAUSERID", r.AREAUSERID) sqlId.And("t.cycletime", r.CYCLETIME) return sqlId.String() } // GetDataEx 获取现货月报表 func (r *ErmcpReportMonSpot) GetDataEx() (interface{}, error) { sData := make([]ErmcpReportMonSpot, 0) err := db.GetEngine().SQL(r.buildSql()).Find(&sData) for i := range sData { sData[i].Calc() } return sData, err } // ErmcpReportAreaSpotPL 现货损益日/月表 type ErmcpReportAreaSpotPL struct { AREAUSERID int64 `json:"areauserid" xorm:"'AREAUSERID'"` // 所属机构 WRSTANDARDID int64 `json:"wrstandardid" xorm:"'WRSTANDARDID'"` // 现货商品ID SPOTGOODSMODELID int32 `json:"spotgoodsmodelid" xorm:"'SPOTGOODSMODELID'"` // 现货品类ID SPOTGOODSBRANDID int32 `json:"spotgoodsbrandid" xorm:"'SPOTGOODSBRANDID'"` // 现货品牌ID ORIBUYQTY float64 `json:"oribuyqty" xorm:"'ORIBUYQTY'"` // 期初采购总量 ORIBUYAMOUNT float64 `json:"oribuyamount" xorm:"'ORIBUYAMOUNT'"` // 期初采购总额 ORISELLQTY float64 `json:"orisellqty" xorm:"'ORISELLQTY'"` // 期初销售总量 ORISELLAMOUNT float64 `json:"orisellamount" xorm:"'ORISELLAMOUNT'"` // 期初销售总额 ORIQTY float64 `json:"oriqty" xorm:"'ORIQTY'"` // 期初量 ORIAVERAGEPRICE float64 `json:"oriaverageprice" xorm:"'ORIAVERAGEPRICE'"` // 期初均价 ORIAMOUNT float64 `json:"oriamount" xorm:"'ORIAMOUNT'"` // 期初额 TODAYBUYQTY float64 `json:"todaybuyqty" xorm:"'TODAYBUYQTY'"` // 今日采购量(采购增量) TODAYBUYAMOUNT float64 `json:"todaybuyamount" xorm:"'TODAYBUYAMOUNT'"` // 今日采购额 TODAYBUYAVERAGEPRICE float64 `json:"todaybuyaverageprice" xorm:"'TODAYBUYAVERAGEPRICE'"` // 今日采购均价(采购均价) TODAYSELLQTY float64 `json:"todaysellqty" xorm:"'TODAYSELLQTY'"` // 今日销售量(销售增量) TODAYSELLAMOUNT float64 `json:"todaysellamount" xorm:"'TODAYSELLAMOUNT'"` // 今日销售额 TODAYSELLAVERAGEPRICE float64 `json:"todaysellaverageprice" xorm:"'TODAYSELLAVERAGEPRICE'"` // 今日销售均价(销售均价) CURBUYQTY float64 `json:"curbuyqty" xorm:"'CURBUYQTY'"` // 期末采购总量 CURBUYAMOUNT float64 `json:"curbuyamount" xorm:"'CURBUYAMOUNT'"` // 期末采购总额(采购额) CURSELLQTY float64 `json:"cursellqty" xorm:"'CURSELLQTY'"` // 期末销售总量 CURSELLAMOUNT float64 `json:"cursellamount" xorm:"'CURSELLAMOUNT'"` // 期末销售总额(销售额) CURQTY float64 `json:"curqty" xorm:"'CURQTY'"` // 期末量 CURAVERAGEPRICE float64 `json:"curaverageprice" xorm:"'CURAVERAGEPRICE'"` // 期末均价 CURAMOUNT float64 `json:"curamount" xorm:"'CURAMOUNT'"` // 期末额 CURSPOTPRICE float64 `json:"curspotprice" xorm:"'CURSPOTPRICE'"` // 参考市价 CURMARKETVALUE float64 `json:"curmarketvalue" xorm:"'CURMARKETVALUE'"` // 参考市值 ACTUALPL float64 `json:"actualpl" xorm:"'ACTUALPL'"` // 实际损益 FLOATPL float64 `json:"floatpl" xorm:"'FLOATPL'"` // 浮动损益 UPDATETIME string `json:"updatetime" xorm:"'UPDATETIME'"` // 更新时间 WRSTANDARDCODE string `json:"wrstandardcode" xorm:"'WRSTANDARDCODE'"` // 现货商品代码 WRSTANDARDNAME string `json:"wrstandardname" xorm:"'WRSTANDARDNAME'"` // 现货商品名称 UNITID int32 `json:"unitid" xorm:"'UNITID'"` // 现货商品单位id BRANDNAME string `json:"brandname" xorm:"'BRANDNAME'"` // 品牌名称 MODELNAME string `json:"modelname" xorm:"'MODELNAME'"` // 品类名称 GBUNITID int32 `json:"gbunitid" xorm:"'GBUNITID'"` // 品类单位id ENUMDICNAME string `json:"enumdicname"` // 现货商品单位名称 GBENUMDICNAME string `json:"gbenumdicname"` // 品类单位名称 ReportType int32 `json:"-"` // 报表类型 1-日报表 2-月报表 ReportDate string `json:"-"` // 格式 日报表(YYYYMMDD) 月报表(YYYYMM) } func (r *ErmcpReportAreaSpotPL) calc() { r.ENUMDICNAME = mtpcache.GetEnumDicitemName(r.UNITID) r.GBENUMDICNAME = mtpcache.GetEnumDicitemName(r.GBUNITID) } func (r *ErmcpReportAreaSpotPL) buildSql() string { var sqlId utils.SQLVal = "SELECT t.AREAUSERID," + " t.WRSTANDARDID," + " t.SPOTGOODSMODELID," + " t.SPOTGOODSBRANDID," + " t.ORIBUYQTY," + " t.ORIBUYAMOUNT," + " t.ORISELLQTY," + " t.ORISELLAMOUNT," + " t.ORIQTY," + " t.ORIAVERAGEPRICE," + " t.ORIAMOUNT," + " t.TODAYBUYQTY," + " t.TODAYBUYAMOUNT," + " t.TODAYBUYAVERAGEPRICE," + " t.TODAYSELLQTY," + " t.TODAYSELLAMOUNT," + " t.TODAYSELLAVERAGEPRICE," + " t.CURBUYQTY," + " t.CURBUYAMOUNT," + " t.CURSELLQTY," + " t.CURSELLAMOUNT," + " t.CURQTY," + " t.CURAVERAGEPRICE," + " t.CURAMOUNT," + " t.CURSPOTPRICE," + " t.CURMARKETVALUE," + " t.ACTUALPL," + " t.FLOATPL," + " to_char(t.UPDATETIME, 'yyyy-mm-dd hh24:mi:ss') UPDATETIME," + " w.wrstandardcode," + " w.wrstandardname," + " w.unitid," + " gb.brandname," + " gm.modelname," + " gm.unitid gbunitid" + " FROM %v t" + " left join wrstandard w" + " on t.wrstandardid = w.wrstandardid" + " left join spotgoodsbrand gb" + " on t.spotgoodsbrandid = gb.brandid" + " left join spotgoodsmodel gm" + " on t.spotgoodsmodelid = gm.modelid" + " WHERE 1 = 1" sqlId.And("t.AREAUSERID", r.AREAUSERID) if r.ReportType == 1 { // 日报表 sqlId.FormatParam("RECKON_ERMCP_AREASPOTPL") sqlId.And("t.reckondate", r.ReportDate) } else { // 月报表 sqlId.FormatParam("REPORT_ERMCP_AREASPOTPL") sqlId.And("t.cycletype", 1) sqlId.And("t.cycletime", r.ReportDate) } if r.WRSTANDARDID > 0 { sqlId.And("t.wrstandardid", r.WRSTANDARDID) } if r.SPOTGOODSBRANDID > 0 { sqlId.And("t.spotgoodsbrandid", r.SPOTGOODSBRANDID) } if r.SPOTGOODSMODELID > 0 { sqlId.And("t.spotgoodsmodelid", r.SPOTGOODSMODELID) } return sqlId.String() } // GetDataEx 获取现货损益日(月)报表 func (r *ErmcpReportAreaSpotPL) GetDataEx() (interface{}, error) { sData := make([]ErmcpReportAreaSpotPL, 0) err := db.GetEngine().SQL(r.buildSql()).Find(&sData) for i := range sData { sData[i].calc() } return sData, err }