| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078 |
- /**
- * @Author: zou.yingbin
- * @Create : 2021/4/16 18:22
- * @Modify : 2021/4/16 18:22
- */
- package models
- import (
- "fmt"
- "mtp2_if/db"
- "mtp2_if/mtpcache"
- "mtp2_if/utils"
- "strings"
- )
- // Ermcp3ReportOPLog 报表合同操作记录通用查询
- type Ermcp3ReportOPLog 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
- RELATEDNO string `json:"relatedno" xorm:"'RELATEDNO'"` // 合同编号
- 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'"` // 品牌名称
- DELIVERYGOODSID int32 `json:"deliverygoodsid" xorm:"'DELIVERYGOODSID'"` // 现货品种id
- DELIVERYGOODSCODE string `json:"deliverygoodscode" xorm:"'DELIVERYGOODSCODE'"` // 现货品种代码
- DELIVERYGOODSNAME string `json:"deliverygoodsname" xorm:"'DELIVERYGOODSNAME'"` // 现货品种名称
- WRSTANDARDID int32 `json:"wrstandardid" xorm:"'wrstandardid'"` // 品类id
- WRSTANDARDCODE string `json:"wrstandardcode" xorm:"'wrstandardcode'"` // 品类代码
- WRSTANDARDNAME string `json:"wrstandardname" xorm:"'wrstandardname'"` // 品类名称
- SPOTGOODSBRANDID int32 `json:"spotgoodsbrandid" xorm:"'SPOTGOODSBRANDID'"` // 品牌id
- LogTypeFilter string `json:"-"` // 查询日志类型, 逗号隔开(如 1,2,4)
- }
- // Calc 处理数据
- func (r *Ermcp3ReportOPLog) 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:退还保证金
- //24:采购入库 25:销售出库 26:生产入库 27:生产出库
- // 数据库注释与返回值映身关系: 结算量->确定量, 收款->收款金额, 退款->退款金额, 付款->付款金额, 收票->收票金额, 开票->开票金额
- sDes := []string{"点价价格", "点价数量", "确定量", "其它费用", "追加保证金", "溢短金额", "调整金额", "付款", "收款", "退款",
- "收票", "开票", "提交审核(合同)", "审核通过(合同)", "审核拒绝(合同)", "合同撤回", "提交审核(计划)",
- "审核通过(计划)", "审核拒绝(计划)", "计划撤回", "正常完结(合同)", "异常终止(合同)", "退还保证金",
- "采购入库", "销售出库", "生产入库", "生产出库"}
- if r.OPERATELOGTYPE >= 1 && r.OPERATELOGTYPE <= 27 {
- 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 *Ermcp3ReportOPLog) 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," +
- " g.deliverygoodsid," +
- " g.deliverygoodscode," +
- " g.deliverygoodsname," +
- " g.goodsunitid unitid," +
- " gb.dgfactoryitemvalue brandname," +
- " s.accountid," +
- " w.wrstandardcode," +
- " w.wrstandardname" +
- " FROM ERMCP_CONTRACTOPERATELOG t" +
- " inner join ermcp_spotcontract s" +
- " on t.RELATEDID = s.spotcontractid" +
- " left join deliverygoods g" +
- " on t.deliverygoodsid = g.deliverygoodsid" +
- " left join wrstandard w on t.wrstandardid=w.wrstandardid" +
- " left join dgfactoryitem gb" +
- " on s.spotgoodsbrandid = gb.dgfactoryitemid" +
- " WHERE t.biztype = 2"
- // 筛选条件
- sqlId.And("t.userid", r.USERID)
- sqlId.And("t.TRADEDATE", r.TRADEDATE)
- sqlId.AndEx("t.deliverygoodsid", r.DELIVERYGOODSID, r.DELIVERYGOODSID > 0)
- sqlId.AndEx("t.wrstandardid", r.WRSTANDARDID, r.WRSTANDARDID > 0)
- sqlId.AndEx("s.spotgoodsbrandid", r.SPOTGOODSBRANDID, r.SPOTGOODSBRANDID > 0)
- if r.LogTypeFilter != "" {
- sqlId.Join(fmt.Sprintf(" and t.OPERATELOGTYPE in(%v)", r.LogTypeFilter))
- }
- return sqlId.String()
- }
- // GetDataEx 获取日志记录
- func (r *Ermcp3ReportOPLog) GetDataEx() (interface{}, error) {
- sData := make([]Ermcp3ReportOPLog, 0)
- err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
- for i := range sData {
- sData[i].Calc()
- }
- return sData, err
- }
- // Ermcp3ReckonAreaSpotSub 现货日报表(作废)
- type Ermcp3ReckonAreaSpotSub struct {
- RECKONDATE string `json:"reckondate" xorm:"'RECKONDATE'" form:"reckondate" binding:"required"` // 日照时期(yyyyMMdd)
- AREAUSERID int64 `json:"areauserid" xorm:"'AREAUSERID'" form:"userid" binding:"required"` // 账户所属机构
- ACCOUNTID int64 `json:"accountid" xorm:"'ACCOUNTID'" form:"accountid"` // 期货账户ID
- WRFACTORTYPEID int64 `json:"wrfactortypeid" xorm:"'WRFACTORTYPEID'"` // 仓单要素类型ID(212+Unix秒时间戳(10位)+xxxxxx)
- DELIVERYGOODSID int64 `json:"deliverygoodsid" xorm:"'DELIVERYGOODSID'" form:"deliverygoodsid"` // 现货品种ID
- WRSTANDARDID int64 `json:"wrstandardid" xorm:"'WRSTANDARDID'" form:"wrstandardid"` // 现货品类ID
- SPOTGOODSBRANDID int32 `json:"spotgoodsbrandid" xorm:"'SPOTGOODSBRANDID'" form:"spotgoodsbrandid"` // 现货品牌ID
- ORIBUYPRICEDQTY float64 `json:"oribuypricedqty" xorm:"'ORIBUYPRICEDQTY'"` // 期初采购合同已定价数量
- ORISELLPRICEDQTY float64 `json:"orisellpricedqty" xorm:"'ORISELLPRICEDQTY'"` // 期初销售合同已定价数量
- BUYPRICEDQTY float64 `json:"buypricedqty" xorm:"'BUYPRICEDQTY'"` // 采购合同已定价数量
- SELLPRICEDQTY float64 `json:"sellpricedqty" xorm:"'SELLPRICEDQTY'"` // 销售合同已定价数量
- TOTALSPOTQTY float64 `json:"totalspotqty" xorm:"'TOTALSPOTQTY'"` // 现货头寸总量 = 采购合同已定价数量 - 销售合同已定价数量
- UPDATETIME string `json:"updatetime" xorm:"'UPDATETIME'"` // 更新时间
- TODAYBUYRECKONQTY float64 `json:"todaybuyreckonqty" xorm:"'TODAYBUYRECKONQTY'"` // 今日采购合同已确定数量
- TODAYSELLRECKONQTY float64 `json:"todaysellreckonqty" xorm:"'TODAYSELLRECKONQTY'"` // 今日销售合同已确定数量
- ORIBUYPRICEDAMOUNT float64 `json:"oribuypricedamount" xorm:"'ORIBUYPRICEDAMOUNT'"` // 期初采购合同已定价金额
- ORISELLPRICEDAMOUNT float64 `json:"orisellpricedamount" xorm:"'ORISELLPRICEDAMOUNT'"` // 期初销售合同已定价金额
- BUYPRICEDAMOUNT float64 `json:"buypricedamount" xorm:"'BUYPRICEDAMOUNT'"` // 采购合同已定价金额
- SELLPRICEDAMOUNT float64 `json:"sellpricedamount" xorm:"'SELLPRICEDAMOUNT'"` // 销售合同已定价金额
- ORIBUYRECKONQTY float64 `json:"oribuyreckonqty" xorm:"'ORIBUYRECKONQTY'"` // 期初采购合同交收量
- ORISELLRECKONQTY float64 `json:"orisellreckonqty" xorm:"'ORISELLRECKONQTY'"` // 期初销售合同交收量
- ORIBUYCONTRACTINQTY float64 `json:"oribuycontractinqty" xorm:"'ORIBUYCONTRACTINQTY'"` // 期初采购合同入库量
- ORISELLCONTRACTOUTQTY float64 `json:"orisellcontractoutqty" xorm:"'ORISELLCONTRACTOUTQTY'"` // 期初销售合同出库量
- ORIPRODUCEINQTY float64 `json:"oriproduceinqty" xorm:"'ORIPRODUCEINQTY'"` // 期初生产入库量
- ORIPRODUCEOUTQTY float64 `json:"oriproduceoutqty" xorm:"'ORIPRODUCEOUTQTY'"` // 期初生产出库量
- BUYRECKONQTY float64 `json:"buyreckonqty" xorm:"'BUYRECKONQTY'"` // 采购合同交收量
- SELLRECKONQTY float64 `json:"sellreckonqty" xorm:"'SELLRECKONQTY'"` // 销售合同交收量
- BUYCONTRACTINQTY float64 `json:"buycontractinqty" xorm:"'BUYCONTRACTINQTY'"` // 采购合同入库量
- SELLCONTRACTOUTQTY float64 `json:"sellcontractoutqty" xorm:"'SELLCONTRACTOUTQTY'"` // 销售合同出库量
- PRODUCEINQTY float64 `json:"produceinqty" xorm:"'PRODUCEINQTY'"` // 生产入库量
- PRODUCEOUTQTY float64 `json:"produceoutqty" xorm:"'PRODUCEOUTQTY'"` // 生产出库量
- ENUMDICNAME string `json:"enumdicname" xorm:"'ENUMDICNAME'"` // 现货商品单位名称
- WRSTANDARDNAME string `json:"wrstandardname" xorm:"'wrstandardname'"` // 品类名称
- WRSTANDARDCODE string `json:"wrstandardcode" xorm:"'wrstandardcode'"` // 品类代码
- DELIVERYGOODSCODE string `json:"deliverygoodscode" xorm:"'deliverygoodscode'"` // 现货商品代码
- DELIVERYGOODSNAME string `json:"deliverygoodsname" xorm:"'deliverygoodsname'"` // 现货商品名称
- GOODSUNITID int32 `json:"goodsunitid" xorm:"'goodsunitid'"` // 现货商品单位id
- BRANDNAME string `json:"brandname" xorm:"'brandname'"` // 品牌名称
- ACCOUNTNAME string `json:"accountname" xorm:"'accountname'"` // 所属机构名称
- BIZTYPE int32 `json:"biztype" xorm:"'BIZTYPE'"` // 业务类型 1-套保 2-套利
- CURRENCYID int32 `json:"currencyid" xorm:"'CURRENCYID'"` // 币种id
- CURRENCYNAME string `json:"currencyname"` // 币种名称
- TOTALBUYPRICEDQTY float64 `json:"totalbuypricedqty"` // 采购定价量 = 期末 - 期初
- TOTALSELLPRICEDQTY float64 `json:"totalsellpricedqty"` // 销售定价量 = 期末 - 期初
- BeginDate string `json:"-"` // 开始日期
- EndDate string `json:"-"` // 结束日期
- }
- func (r *Ermcp3ReckonAreaSpotSub) calc() {
- r.TOTALBUYPRICEDQTY = r.BUYPRICEDQTY - r.ORIBUYPRICEDQTY
- r.TOTALSELLPRICEDQTY = r.SELLPRICEDQTY - r.ORISELLPRICEDQTY
- r.CURRENCYNAME = mtpcache.GetCurrencyName(r.CURRENCYID)
- }
- func (r *Ermcp3ReckonAreaSpotSub) buildSql() string {
- var sqlId utils.SQLVal = "SELECT t.ORIBUYRECKONQTY," +
- " t.ORISELLRECKONQTY," +
- " t.ORIBUYCONTRACTINQTY," +
- " t.ORISELLCONTRACTOUTQTY," +
- " t.ORIPRODUCEINQTY," +
- " t.ORIPRODUCEOUTQTY," +
- " t.BUYRECKONQTY," +
- " t.SELLRECKONQTY," +
- " t.BUYCONTRACTINQTY," +
- " t.SELLCONTRACTOUTQTY," +
- " t.PRODUCEINQTY," +
- " t.PRODUCEOUTQTY," +
- " t.Reckondate," +
- " t.AREAUSERID," +
- " t.ACCOUNTID," +
- " t.WRFACTORTYPEID," +
- " t.DELIVERYGOODSID," +
- " t.WRSTANDARDID," +
- " t.SPOTGOODSBRANDID," +
- " t.ORIBUYPRICEDQTY," +
- " t.ORISELLPRICEDQTY," +
- " t.BUYPRICEDQTY," +
- " t.SELLPRICEDQTY," +
- " t.TOTALSPOTQTY," +
- " to_char(t.UPDATETIME, 'yyyy-mm-dd hh24:mi:ss') UPDATETIME," +
- " t.TODAYBUYRECKONQTY," +
- " t.TODAYSELLRECKONQTY," +
- " t.ORIBUYPRICEDAMOUNT," +
- " t.ORISELLPRICEDAMOUNT," +
- " t.BUYPRICEDAMOUNT," +
- " t.SELLPRICEDAMOUNT," +
- " t.currencyid," +
- " t.biztype," +
- " w.wrstandardname," +
- " w.wrstandardcode," +
- " g.deliverygoodscode," +
- " g.deliverygoodsname," +
- " g.goodsunitid," +
- " d.dgfactoryitemvalue brandname," +
- " u.accountname," +
- " e.enumdicname" +
- " FROM RECKON_ERMCP_AREASPOTSUB t" +
- " LEFT JOIN WRSTANDARD w" +
- " on t.wrstandardid = w.wrstandardid" +
- " LEFT JOIN DELIVERYGOODS g" +
- " on t.deliverygoodsid = g.deliverygoodsid" +
- " LEFT JOIN DGFACTORYITEM d" +
- " on t.spotgoodsbrandid = d.dgfactoryitemid" +
- " LEFT JOIN USERACCOUNT u" +
- " on t.areauserid = u.userid" +
- " LEFT JOIN ENUMDICITEM e" +
- " on g.goodsunitid = e.enumitemname" +
- " and e.enumdiccode = 'goodsunit'" +
- " and e.enumitemstatus = 1" +
- " WHERE 1 = 1"
- sqlId.And("t.AREAUSERID", r.AREAUSERID)
- sqlId.AndEx("t.ACCOUNTID", r.ACCOUNTID, r.ACCOUNTID > 0)
- sqlId.AndEx("t.deliverygoodsid", r.DELIVERYGOODSID, r.DELIVERYGOODSID > 0)
- sqlId.AndEx("t.WRSTANDARDID", r.WRSTANDARDID, r.WRSTANDARDID > 0)
- sqlId.AndEx("t.SPOTGOODSBRANDID", r.SPOTGOODSBRANDID, r.SPOTGOODSBRANDID > 0)
- 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 *Ermcp3ReckonAreaSpotSub) GetDataEx() (interface{}, error) {
- sData := make([]Ermcp3ReckonAreaSpotSub, 0)
- err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
- for i := range sData {
- sData[i].calc()
- }
- return sData, err
- }
- // Ermcp3ReportAreaSpotSub 现货分类月报表(作废)
- type Ermcp3ReportAreaSpotSub struct {
- ORIBUYRECKONQTY float64 `json:"oribuyreckonqty" xorm:"'ORIBUYRECKONQTY'"` // 期初采购合同交收量【期初】
- ORISELLRECKONQTY float64 `json:"orisellreckonqty" xorm:"'ORISELLRECKONQTY'"` // 期初销售合同交收量【期初】
- ORIBUYCONTRACTINQTY float64 `json:"oribuycontractinqty" xorm:"'ORIBUYCONTRACTINQTY'"` // 期初采购合同入库量【期初】
- ORISELLCONTRACTOUTQTY float64 `json:"orisellcontractoutqty" xorm:"'ORISELLCONTRACTOUTQTY'"` // 期初销售合同出库量【期初】
- ORIPRODUCEINQTY float64 `json:"oriproduceinqty" xorm:"'ORIPRODUCEINQTY'"` // 期初生产入库量【期初】
- ORIPRODUCEOUTQTY float64 `json:"oriproduceoutqty" xorm:"'ORIPRODUCEOUTQTY'"` // 期初生产出库量【期初】
- BUYRECKONQTY float64 `json:"buyreckonqty" xorm:"'BUYRECKONQTY'"` // 采购合同交收量【期末】
- SELLRECKONQTY float64 `json:"sellreckonqty" xorm:"'SELLRECKONQTY'"` // 销售合同交收量【期末】
- BUYCONTRACTINQTY float64 `json:"buycontractinqty" xorm:"'BUYCONTRACTINQTY'"` // 采购合同入库量【期末】
- SELLCONTRACTOUTQTY float64 `json:"sellcontractoutqty" xorm:"'SELLCONTRACTOUTQTY'"` // 销售合同出库量【期末】
- PRODUCEINQTY float64 `json:"produceinqty" xorm:"'PRODUCEINQTY'"` // 生产入库量【期末】
- PRODUCEOUTQTY float64 `json:"produceoutqty" xorm:"'PRODUCEOUTQTY'"` // 生产出库量【期末】
- CYCLETIME string `json:"cycletime" xorm:"'CYCLETIME'" form:"cycletime"` // 周期时间 月(YYYYMM) 季(YYYYQ) 年(YYYY) 周(YYYYIW) 全(0)【原值】
- CYCLETYPE int32 `json:"cycletype" xorm:"'CYCLETYPE'" form:"cycletype"` // 周期类型 - 1:月 2:季 3:年 4:周 5:全报表【原值】
- AREAUSERID int64 `json:"areauserid" xorm:"'AREAUSERID'" form:"userid" binding:"required"` // 账户所属机构
- ACCOUNTID int64 `json:"accountid" xorm:"'ACCOUNTID'" form:"accountid"` // 期货账户ID
- WRFACTORTYPEID int64 `json:"wrfactortypeid" xorm:"'WRFACTORTYPEID'"` // 仓单要素类型ID(212+Unix秒时间戳(10位)+xxxxxx)
- DELIVERYGOODSID int64 `json:"deliverygoodsid" xorm:"'DELIVERYGOODSID'" form:"deliverygoodsid"` // 现货品种ID
- WRSTANDARDID int64 `json:"wrstandardid" xorm:"'WRSTANDARDID'" form:"wrstandardid"` // 品类ID
- SPOTGOODSBRANDID int32 `json:"spotgoodsbrandid" xorm:"'SPOTGOODSBRANDID'" form:"spotgoodsbrandid"` // 现货品牌ID
- ORIBUYPRICEDQTY float64 `json:"oribuypricedqty" xorm:"'ORIBUYPRICEDQTY'"` // 期初采购合同已定价数量【期初】
- ORISELLPRICEDQTY float64 `json:"orisellpricedqty" xorm:"'ORISELLPRICEDQTY'"` // 期初销售合同已定价数量【期初】
- BUYPRICEDQTY float64 `json:"buypricedqty" xorm:"'BUYPRICEDQTY'"` // 采购合同已定价数量【期末】
- SELLPRICEDQTY float64 `json:"sellpricedqty" xorm:"'SELLPRICEDQTY'"` // 销售合同已定价数量【期末】
- TOTALSPOTQTY float64 `json:"totalspotqty" xorm:"'TOTALSPOTQTY'"` // 现货头寸总量 = 采购合同已定价数量 - 销售合同已定价数量【期末】
- UPDATETIME string `json:"updatetime" xorm:"'UPDATETIME'"` // 更新时间
- TODAYBUYRECKONQTY float64 `json:"todaybuyreckonqty" xorm:"'TODAYBUYRECKONQTY'"` // 今日采购合同已确定数量【汇总】
- TODAYSELLRECKONQTY float64 `json:"todaysellreckonqty" xorm:"'TODAYSELLRECKONQTY'"` // 今日销售合同已确定数量【汇总】
- ORIBUYPRICEDAMOUNT float64 `json:"oribuypricedamount" xorm:"'ORIBUYPRICEDAMOUNT'"` // 期初采购合同已定价金额【期初】
- ORISELLPRICEDAMOUNT float64 `json:"orisellpricedamount" xorm:"'ORISELLPRICEDAMOUNT'"` // 期初销售合同已定价金额【期初】
- BUYPRICEDAMOUNT float64 `json:"buypricedamount" xorm:"'BUYPRICEDAMOUNT'"` // 采购合同已定价金额【期末】
- SELLPRICEDAMOUNT float64 `json:"sellpricedamount" xorm:"'SELLPRICEDAMOUNT'"` // 销售合同已定价金额【期末】
- ENUMDICNAME string `json:"enumdicname" xorm:"'ENUMDICNAME'"` // 现货商品单位名称
- WRSTANDARDNAME string `json:"wrstandardname" xorm:"'wrstandardname'"` // 品类名称
- WRSTANDARDCODE string `json:"wrstandardcode" xorm:"'wrstandardcode'"` // 品类代码
- DELIVERYGOODSCODE string `json:"deliverygoodscode" xorm:"'deliverygoodscode'"` // 现货商品代码
- DELIVERYGOODSNAME string `json:"deliverygoodsname" xorm:"'deliverygoodsname'"` // 现货商品名称
- GOODSUNITID int32 `json:"goodsunitid" xorm:"'goodsunitid'"` // 现货商品单位id
- BRANDNAME string `json:"brandname" xorm:"'brandname'"` // 品牌名称
- ACCOUNTNAME string `json:"accountname" xorm:"'accountname'"` // 所属机构名称
- BIZTYPE int32 `json:"biztype" xorm:"'BIZTYPE'"` // 业务类型 1-套保 2-套利
- CURRENCYID int32 `json:"currencyid" xorm:"'CURRENCYID'"` // 币种id
- CURRENCYNAME string `json:"currencyname"` // 币种名称
- TOTALBUYPRICEDQTY float64 `json:"totalbuypricedqty"` // 采购定价量 = 期末 - 期初
- TOTALSELLPRICEDQTY float64 `json:"totalsellpricedqty"` // 销售定价量 = 期末 - 期初
- }
- func (r *Ermcp3ReportAreaSpotSub) calc() {
- r.CURRENCYNAME = mtpcache.GetCurrencyName(r.CURRENCYID)
- r.TOTALBUYPRICEDQTY = r.BUYPRICEDQTY - r.ORIBUYPRICEDQTY
- r.TOTALSELLPRICEDQTY = r.SELLPRICEDQTY - r.ORISELLPRICEDQTY
- }
- func (r *Ermcp3ReportAreaSpotSub) buildSql() string {
- var sqlId utils.SQLVal = "SELECT t.ORIBUYRECKONQTY," +
- " t.ORISELLRECKONQTY," +
- " t.ORIBUYCONTRACTINQTY," +
- " t.ORISELLCONTRACTOUTQTY," +
- " t.ORIPRODUCEINQTY," +
- " t.ORIPRODUCEOUTQTY," +
- " t.BUYRECKONQTY," +
- " t.SELLRECKONQTY," +
- " t.BUYCONTRACTINQTY," +
- " t.SELLCONTRACTOUTQTY," +
- " t.PRODUCEINQTY," +
- " t.PRODUCEOUTQTY," +
- " t.CYCLETIME," +
- " t.CYCLETYPE," +
- " t.AREAUSERID," +
- " t.ACCOUNTID," +
- " t.WRFACTORTYPEID," +
- " t.DELIVERYGOODSID," +
- " t.WRSTANDARDID," +
- " t.SPOTGOODSBRANDID," +
- " t.ORIBUYPRICEDQTY," +
- " t.ORISELLPRICEDQTY," +
- " t.BUYPRICEDQTY," +
- " t.SELLPRICEDQTY," +
- " t.TOTALSPOTQTY," +
- " to_char(t.UPDATETIME, 'yyyy-mm-dd hh24:mi:ss') UPDATETIME," +
- " t.TODAYBUYRECKONQTY," +
- " t.TODAYSELLRECKONQTY," +
- " t.ORIBUYPRICEDAMOUNT," +
- " t.ORISELLPRICEDAMOUNT," +
- " t.BUYPRICEDAMOUNT," +
- " t.SELLPRICEDAMOUNT," +
- " t.currencyid," +
- " t.biztype," +
- " w.wrstandardname," +
- " w.wrstandardcode," +
- " g.deliverygoodscode," +
- " g.deliverygoodsname," +
- " g.goodsunitid," +
- " d.dgfactoryitemvalue brandname," +
- " u.accountname," +
- " e.enumdicname" +
- " FROM REPORT_ERMCP_AREASPOTSUB t" +
- " LEFT JOIN WRSTANDARD w on t.wrstandardid=w.wrstandardid" +
- " LEFT JOIN DELIVERYGOODS g on t.deliverygoodsid=g.deliverygoodsid" +
- " LEFT JOIN DGFACTORYITEM d on t.spotgoodsbrandid=d.dgfactoryitemid" +
- " LEFT JOIN USERACCOUNT u on t.areauserid=u.userid" +
- " LEFT JOIN ENUMDICITEM e on g.goodsunitid=e.enumitemname and e.enumdiccode='goodsunit' and e.enumitemstatus=1" +
- " WHERE 1 = 1"
- sqlId.And("t.AREAUSERID", r.AREAUSERID)
- sqlId.And("t.cycletype", r.CYCLETYPE)
- sqlId.And("t.cycletime", r.CYCLETIME)
- sqlId.AndEx("t.ACCOUNTID", r.ACCOUNTID, r.ACCOUNTID > 0)
- sqlId.AndEx("t.deliverygoodsid", r.DELIVERYGOODSID, r.DELIVERYGOODSID > 0)
- sqlId.AndEx("t.WRSTANDARDID", r.WRSTANDARDID, r.WRSTANDARDID > 0)
- sqlId.AndEx("t.SPOTGOODSBRANDID", r.SPOTGOODSBRANDID, r.SPOTGOODSBRANDID > 0)
- return sqlId.String()
- }
- // GetDataEx 获取现货分类报表
- func (r *Ermcp3ReportAreaSpotSub) GetDataEx() (interface{}, error) {
- sData := make([]Ermcp3ReportAreaSpotSub, 0)
- err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
- for i := range sData {
- sData[i].calc()
- }
- return sData, err
- }
- // Ermcp3ExpourseReport 敞口报表
- type Ermcp3ExpourseReport struct {
- RECKONDATE string `json:"reckondate" xorm:"'RECKONDATE'"` // 日照时期(yyyyMMdd)
- CYCLETIME string `json:"cycletime" xorm:"'CYCLETIME'"` // 周期时间 月(YYYYMM) 季(YYYYQ) 年(YYYY) 周(YYYYIW) 全(0)【原值】
- CYCLETYPE int32 `json:"cycletype" xorm:"'CYCLETYPE'"` // 周期类型 - 1:月 2:季 3:年 4:周 5:全报表【原值】
- ORITOTALSPOTQTY float64 `json:"oritotalspotqty" xorm:"'ORITOTALSPOTQTY'"` // 期初现货头寸总量
- ORITOTALFUTUREQTY float64 `json:"oritotalfutureqty" xorm:"'ORITOTALFUTUREQTY'"` // 期初期货头寸总量
- ORITOTALEXPOSURE float64 `json:"oritotalexposure" xorm:"'ORITOTALEXPOSURE'"` // 期初实时总敞口
- ORINEEDHEDGEEXPOSOURE float64 `json:"orineedhedgeexposoure" xorm:"'ORINEEDHEDGEEXPOSOURE'"` // 期初应套保敞口
- ORIHEDGEQTY float64 `json:"orihedgeqty" xorm:"'ORIHEDGEQTY'"` // 期初套保量
- ORIARBITRAGEQTY float64 `json:"oriarbitrageqty" xorm:"'ORIARBITRAGEQTY'"` // 期初套利量
- ORINEEDHEDGEQTY float64 `json:"orineedhedgeqty" xorm:"'ORINEEDHEDGEQTY'"` // 期初应套保量
- ORINEEDARBITRAGEQTY float64 `json:"orineedarbitrageqty" xorm:"'ORINEEDARBITRAGEQTY'"` // 期初应套利量
- ORITOTALNEEDHEDGEQTY float64 `json:"oritotalneedhedgeqty" xorm:"'ORITOTALNEEDHEDGEQTY'"` // 期初应套保总量
- MIDDLEGOODSID int64 `json:"middlegoodsid" xorm:"'MIDDLEGOODSID'"` // 套保品种ID
- AREAUSERID int64 `json:"areauserid" xorm:"'AREAUSERID'"` // 所属机构\交易用户ID
- ACCOUNTID int64 `json:"accountid" xorm:"'ACCOUNTID'"` // 期货账户ID (作废, 默认为0)
- ORIBUYPLANQTY float64 `json:"oribuyplanqty" xorm:"'ORIBUYPLANQTY'"` // 期初采购计划数量
- ORIBUYPRICEDQTY float64 `json:"oribuypricedqty" xorm:"'ORIBUYPRICEDQTY'"` // 期初采购合同已定价数量
- ORISELLPLANQTY float64 `json:"orisellplanqty" xorm:"'ORISELLPLANQTY'"` // 期初销售计划数量
- ORISELLPRICEDQTY float64 `json:"orisellpricedqty" xorm:"'ORISELLPRICEDQTY'"` // 期初销售合同已定价数量
- ORIBUYFUTUREQTY float64 `json:"oribuyfutureqty" xorm:"'ORIBUYFUTUREQTY'"` // 期初买入期货数量
- ORISELLFUTUREQTY float64 `json:"orisellfutureqty" xorm:"'ORISELLFUTUREQTY'"` // 期初卖出期货数量
- BUYPLANQTY float64 `json:"buyplanqty" xorm:"'BUYPLANQTY'"` // 采购计划数量
- BUYPRICEDQTY float64 `json:"buypricedqty" xorm:"'BUYPRICEDQTY'"` // 采购合同已定价数量
- SELLPLANQTY float64 `json:"sellplanqty" xorm:"'SELLPLANQTY'"` // 销售计划数量
- SELLPRICEDQTY float64 `json:"sellpricedqty" xorm:"'SELLPRICEDQTY'"` // 销售合同已定价数量
- BUYFUTUREQTY float64 `json:"buyfutureqty" xorm:"'BUYFUTUREQTY'"` // 买入期货数量
- SELLFUTUREQTY float64 `json:"sellfutureqty" xorm:"'SELLFUTUREQTY'"` // 卖出期货数量
- TOTALSPOTQTY float64 `json:"totalspotqty" xorm:"'TOTALSPOTQTY'"` // 现货头寸总量
- TOTALFUTUREQTY float64 `json:"totalfutureqty" xorm:"'TOTALFUTUREQTY'"` // 期货头寸总量(期货总量)
- TOTALEXPOSURE float64 `json:"totalexposure" xorm:"'TOTALEXPOSURE'"` // 实时总敞口(总敞口)
- TOTALHEDGERATIO float64 `json:"totalhedgeratio" xorm:"'TOTALHEDGERATIO'"` // 敞口比例
- TOTALNEEDHEDGEQTY float64 `json:"totalneedhedgeqty" xorm:"'TOTALNEEDHEDGEQTY'"` // 应套保总量(现货应套保总量)
- NEEDHEDGEEXPOSOURE float64 `json:"needhedgeexposoure" xorm:"'NEEDHEDGEEXPOSOURE'"` // 应套保敞口(套保敞口)
- NEEDHEDGERATIO float64 `json:"needhedgeratio" xorm:"'NEEDHEDGERATIO'"` // 应套保敞口比例
- UPDATETIME string `json:"updatetime" xorm:"'UPDATETIME'"` // 更新时间
- HEDGEQTY float64 `json:"hedgeqty" xorm:"'HEDGEQTY'"` // 套保量
- ARBITRAGEQTY float64 `json:"arbitrageqty" xorm:"'ARBITRAGEQTY'"` // 套利量
- NEEDHEDGEQTY float64 `json:"needhedgeqty" xorm:"'NEEDHEDGEQTY'"` // 应套保量
- NEEDARBITRAGEQTY float64 `json:"needarbitrageqty" xorm:"'NEEDARBITRAGEQTY'"` // 应套利量
- MIDDLEGOODSNAME string `json:"middlegoodsname" xorm:"'MIDDLEGOODSNAME'"` // 套保商品名称
- MIDDLEGOODSCODE string `json:"middlgoodscode" xorm:"'MIDDLEGOODSCODE'"` // 套保商品代码
- UNITID int32 `json:"unitid" xorm:"'UNITID'"` // 单位id
- MGNEEDHEDGERATIO float64 `json:"mgneedhedgeratio" xorm:"'MGNEEDHEDGERATIO'"` // 套保比例(套保品的)
- NEEDARBITRAGERATIO float64 `json:"needarbitrageratio" xorm:"'NEEDARBITRAGERATIO'"` // 套利比例(套保品的)
- ENUMDICNAME string `json:"enumdicname"` // 单位名称
- ACCOUNTNAME string `json:"accountname"` // 机构名称
- DiffSpotQty float64 `json:"diffspotqty"` // 变动量(现货)
- DiffMgQtyA float64 `json:"diffmgqtya"` // 套保变动量
- DiffMgQtyB float64 `json:"diffmgqtyb"` // 套利变动量
- DiffFutuQty float64 `json:"difffutuqty"` // 变动量(期货)
- DiffQty float64 `json:"diffqty"` // 变动量(总敞口)
- DiffHedgeQty float64 `json:"diffhedgeqty"` // 变动量(现货应套保总量)
- DiffExposure float64 `json:"diffexposure"` // 变动量(套保敞口)
- QueryType int32 `json:"-"` // 查询类型 1-报表
- BeginDate string `json:"begindate"` // 开始交易日
- EndDate string `json:"enddate"` // 结束交易日
- }
- func (r *Ermcp3ExpourseReport) calc() {
- r.ENUMDICNAME = mtpcache.GetEnumDicitemName(r.UNITID)
- r.ACCOUNTNAME = mtpcache.GetUserNameByUserId(r.AREAUSERID)
- // 变动量(现货) = 现货头寸总量 - 期初现货头寸总量
- r.DiffSpotQty = r.TOTALSPOTQTY - r.ORITOTALSPOTQTY
- // 套保变动量 = 套保量 - 期初套保量
- r.DiffMgQtyA = r.HEDGEQTY - r.ORIHEDGEQTY
- // 套利变动量 = 套利量 - 期初套利量
- r.DiffMgQtyB = r.ARBITRAGEQTY - r.ORIARBITRAGEQTY
- // 变动量(期货) = (买入 - 买入期初) - (卖出 - 卖出期初)
- r.DiffFutuQty = (r.BUYFUTUREQTY - r.ORIBUYFUTUREQTY) - (r.SELLFUTUREQTY - r.ORISELLFUTUREQTY)
- // 变动量(敞口) = 实时敞口 - 期初实时敞口
- r.DiffQty = r.TOTALEXPOSURE - r.ORITOTALEXPOSURE
- // 变动量(现货应套保总量)
- r.DiffHedgeQty = r.TOTALNEEDHEDGEQTY - r.ORITOTALNEEDHEDGEQTY
- // 变动量(套保敞口)
- r.DiffExposure = r.NEEDHEDGEEXPOSOURE - r.ORINEEDHEDGEEXPOSOURE
- }
- func (r *Ermcp3ExpourseReport) buildSql() string {
- if r.CYCLETYPE == 0 {
- return r.buildSqlDay()
- }
- return r.buildSqlCycle()
- }
- func (r *Ermcp3ExpourseReport) buildSqlDay() string {
- var sqlId utils.SQLVal = "SELECT t.ORITOTALSPOTQTY," +
- " t.ORITOTALFUTUREQTY," +
- " t.ORITOTALEXPOSURE," +
- " t.ORINEEDHEDGEEXPOSOURE," +
- " t.ORIHEDGEQTY," +
- " t.ORIARBITRAGEQTY," +
- " t.ORINEEDHEDGEQTY," +
- " t.ORINEEDARBITRAGEQTY," +
- " t.ORITOTALNEEDHEDGEQTY," +
- " t.RECKONDATE," +
- " t.MIDDLEGOODSID," +
- " t.AREAUSERID," +
- " t.ACCOUNTID," +
- " t.ORIBUYPLANQTY," +
- " t.ORIBUYPRICEDQTY," +
- " t.ORISELLPLANQTY," +
- " t.ORISELLPRICEDQTY," +
- " t.ORIBUYFUTUREQTY," +
- " t.ORISELLFUTUREQTY," +
- " t.BUYPLANQTY," +
- " t.BUYPRICEDQTY," +
- " t.SELLPLANQTY," +
- " t.SELLPRICEDQTY," +
- " t.BUYFUTUREQTY," +
- " t.SELLFUTUREQTY," +
- " t.TOTALSPOTQTY," +
- " t.TOTALFUTUREQTY," +
- " t.TOTALEXPOSURE," +
- " t.TOTALHEDGERATIO," +
- " t.TOTALNEEDHEDGEQTY," +
- " t.NEEDHEDGEEXPOSOURE," +
- " t.NEEDHEDGERATIO," +
- " to_char(t.UPDATETIME, 'yyyy-mm-dd hh24:mi:ss') UPDATETIME," +
- " t.HEDGEQTY," +
- " t.ARBITRAGEQTY," +
- " t.NEEDHEDGEQTY," +
- " t.NEEDARBITRAGEQTY," +
- " g.middlegoodsname," +
- " g.middlegoodscode," +
- " g.goodsunitid unitid," +
- " g.needhedgeratio MGNEEDHEDGERATIO," +
- " g.needarbitrageratio" +
- " FROM RECKON_ERMCP_AREAEXPOSURE t" +
- " LEFT JOIN ERMS_MIDDLEGOODS g" +
- " on t.middlegoodsid = g.middlegoodsid" +
- " WHERE 1 = 1"
- sqlId.AndEx("t.AREAUSERID", r.AREAUSERID, r.AREAUSERID > 0)
- if r.QueryType == 1 {
- sqlId.And("t.RECKONDATE", r.RECKONDATE)
- } else if r.QueryType == 2 {
- sqlId.Join(fmt.Sprintf(" and t.RECKONDATE >= '%v' and t.RECKONDATE <= '%v' ", r.BeginDate, r.EndDate))
- }
- return sqlId.String()
- }
- func (r *Ermcp3ExpourseReport) buildSqlCycle() string {
- var sqlId utils.SQLVal = "SELECT t.cycletime," +
- " t.cycletype," +
- " t.ORITOTALSPOTQTY," +
- " t.ORITOTALFUTUREQTY," +
- " t.ORITOTALEXPOSURE," +
- " t.ORINEEDHEDGEEXPOSOURE," +
- " t.ORIHEDGEQTY," +
- " t.ORIARBITRAGEQTY," +
- " t.ORINEEDHEDGEQTY," +
- " t.ORINEEDARBITRAGEQTY," +
- " t.ORITOTALNEEDHEDGEQTY," +
- " t.MIDDLEGOODSID," +
- " t.AREAUSERID," +
- " t.ACCOUNTID," +
- " t.ORIBUYPLANQTY," +
- " t.ORIBUYPRICEDQTY," +
- " t.ORISELLPLANQTY," +
- " t.ORISELLPRICEDQTY," +
- " t.ORIBUYFUTUREQTY," +
- " t.ORISELLFUTUREQTY," +
- " t.BUYPLANQTY," +
- " t.BUYPRICEDQTY," +
- " t.SELLPLANQTY," +
- " t.SELLPRICEDQTY," +
- " t.BUYFUTUREQTY," +
- " t.SELLFUTUREQTY," +
- " t.TOTALSPOTQTY," +
- " t.TOTALFUTUREQTY," +
- " t.TOTALEXPOSURE," +
- " t.TOTALHEDGERATIO," +
- " t.TOTALNEEDHEDGEQTY," +
- " t.NEEDHEDGEEXPOSOURE," +
- " t.NEEDHEDGERATIO," +
- " to_char(t.UPDATETIME, 'yyyy-mm-dd hh24:mi:ss') UPDATETIME," +
- " t.HEDGEQTY," +
- " t.ARBITRAGEQTY," +
- " t.NEEDHEDGEQTY," +
- " t.NEEDARBITRAGEQTY," +
- " g.middlegoodsname," +
- " g.middlegoodscode," +
- " g.goodsunitid unitid," +
- " g.needhedgeratio MGNEEDHEDGERATIO," +
- " g.needarbitrageratio" +
- " FROM REPORT_ERMCP_AREAEXPOSURE t" +
- " LEFT JOIN ERMS_MIDDLEGOODS g" +
- " on t.middlegoodsid = g.middlegoodsid" +
- " WHERE 1 = 1"
- sqlId.And("t.AREAUSERID", r.AREAUSERID)
- sqlId.And("t.CYCLETYPE", r.CYCLETYPE)
- sqlId.And("t.CYCLETIME", r.CYCLETIME)
- return sqlId.String()
- }
- // GetDataEx 获取敞报表
- func (r *Ermcp3ExpourseReport) GetDataEx() (interface{}, error) {
- sData := make([]Ermcp3ExpourseReport, 0)
- err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
- for i := range sData {
- sData[i].calc()
- sData[i].BeginDate = r.BeginDate
- sData[i].EndDate = r.EndDate
- }
- return sData, err
- }
- // Ermcp3ExposureContractDetail 敞口合同明细
- type Ermcp3ExposureContractDetail struct {
- MIDDLEGOODSID int32 `json:"middlegoodsid" xorm:"'MIDDLEGOODSID'"` // 套保品种id
- DELIVERYGOODSID int32 `json:"deliverygoodsid" xorm:"'DELIVERYGOODSID'"` // 现货商品id
- CONVERTRATIO float64 `json:"convertratio" xorm:"'CONVERTRATIO'"` // 折算系数(套保品种)
- USERID int64 `json:"userid" xorm:"'USERID'"` // 机构id
- SPOTCONTRACTID string `json:"spotcontractid" xorm:"'SPOTCONTRACTID'"` // 合同id
- CONTRACTNO string `json:"contractno" xorm:"'CONTRACTNO'"` // 合同编号
- CONTRACTTYPE int32 `json:"contracttype" xorm:"'CONTRACTTYPE'"` // 现货合同类型 - 1:采购 -1:销售
- BIZTYPE int32 `json:"biztype" xorm:"'BIZTYPE'"` // 业务类型 1-套保 2-套利
- BUYUSERID int64 `json:"buyuserid" xorm:"'BUYUSERID'"` // 采购方id
- SELLUSERID int64 `json:"selluserid" xorm:"'SELLUSERID'"` // 销售方id
- QTY float64 `json:"qty" xorm:"'QTY'"` // 合同量
- PRICEDQTY float64 `json:"pricedqty" xorm:"'PRICEDQTY'"` // 已定价量
- WRSTANDARDID int32 `json:"wrstandardid" xorm:"'WRSTANDARDID'"` // 品类id
- WRSTANDARDNAME string `json:"wrstandardname" xorm:"'WRSTANDARDNAME'"` // 品类名称
- WRSTANDARDCODE string `json:"wrstandardcode" xorm:"'WRSTANDARDCODE'"` // 品类代码
- UNITID int32 `json:"unitid" xorm:"'UNITID'"` // 品类单位id
- MIDDLEGOODSNAME string `json:"middlegoodsname" xorm:"'MIDDLEGOODSNAME'"` // 套保品种名称
- MIDDLEGOODSCODE string `json:"middlegoodscode" xorm:"'MIDDLEGOODSCODE'"` // 套保品种代码
- GOODSUNITID int32 `json:"-" xorm:"'GOODSUNITID'"` // 套保品种单位id
- TRADEDATE string `json:"tradedate" xorm:"'tradedate'"` // 交易日
- NEEDHEDGERATIO float64 `json:"needhedgeratio" xorm:"'NEEDHEDGERATIO'"` // 应套保比例
- NEEDARBITRAGERATIO float64 `json:"needarbitrageratio" xorm:"'NEEDARBITRAGERATIO'"` // 应套利比例
- BRANDNAME string `json:"brandname" xorm:"'BRANDNAME'"` // 品牌名称
- DELIVERYGOODSCODE string `json:"deliverygoodscode" xorm:"'DELIVERYGOODSCODE'"` // 现货商品代码
- DELIVERYGOODSNAME string `json:"deliverygoodsname" xorm:"'DELIVERYGOODSNAME'"` // 现货商品名称
- CONVERTFACTOR float64 `json:"convertfactor" xorm:"'CONVERTFACTOR'"` // 标仓系数
- TODAYPRICEDQTY float64 `json:"todaypricedqty" xorm:"'TODAYPRICEDQTY'"` // 今定价量
- EnumdicName string `json:"enumdicname"` // 单位名称
- MGUNITNAME string `json:"mgunitname"` // 套保品种单位名称
- BUYUSERNAME string `json:"buyusername"` // 采购方名称
- SELLUSERNAME string `json:"sellusername"` // 销售方名称
- USERNAME string `json:"username"` // 交易用户
- CurQty float64 `json:"curqty"` // 今定价量
- DiffQty float64 `json:"diffqty"` // 套保品种今变动量
- DiffHedgeQty float64 `json:"diffhedgeqty"` // 套保变动量
- DiffNeedHedgeQty float64 `json:"diffneedhedgeqty"` // 应套保变动量
- BeginDate string `json:"-"` // 开始交易日
- EndDate string `json:"-"` // 结束交易日
- }
- func (r *Ermcp3ExposureContractDetail) calc() {
- r.CurQty = r.PRICEDQTY
- r.DiffQty = r.QTY * r.CONVERTRATIO
- r.DiffHedgeQty = r.TODAYPRICEDQTY * r.CONVERTRATIO * r.CONVERTFACTOR
- if r.BIZTYPE == 1 {
- r.DiffNeedHedgeQty = r.TODAYPRICEDQTY * r.CONVERTRATIO * r.CONVERTFACTOR * r.NEEDHEDGERATIO
- } else {
- r.DiffNeedHedgeQty = r.TODAYPRICEDQTY * r.CONVERTRATIO * r.CONVERTFACTOR * r.NEEDARBITRAGERATIO
- }
- r.EnumdicName = mtpcache.GetEnumDicitemName(r.UNITID)
- r.MGUNITNAME = mtpcache.GetEnumDicitemName(r.GOODSUNITID)
- r.BUYUSERNAME = mtpcache.GetUserNameByUserId(r.BUYUSERID)
- r.SELLUSERNAME = mtpcache.GetUserNameByUserId(r.SELLUSERID)
- r.USERNAME = mtpcache.GetUserNameByUserId(r.USERID)
- }
- func (r *Ermcp3ExposureContractDetail) buildSql() string {
- var sqlId utils.SQLVal = `
- select t.middlegoodsid,
- t.deliverygoodsid,
- t.convertratio,
- s.userid,
- to_char(s.spotcontractid) spotcontractid,
- s.contractno,
- s.contracttype,
- s.biztype,
- s.buyuserid,
- s.selluserid,
- s.qty,
- s.pricedqty,
- s.wrstandardid,
- s.reckondate tradedate,
- s.todaypricedqty,
- w.wrstandardname,
- w.wrstandardcode,
- w.unitid,
- w.convertfactor,
- mg.middlegoodsname,
- mg.middlegoodscode,
- mg.goodsunitid,
- mg.needhedgeratio,
- mg.needarbitrageratio,
- dg.dgfactoryitemid brandid,
- dg.dgfactoryitemvalue brandName,
- g.deliverygoodscode,
- g.deliverygoodsname
- from erms2_wrsconvertdetail t
- inner join reckon_ermcp_spotcontract s
- on t.wrstandardid = s.wrstandardid
- left join erms_middlegoods mg
- on t.middlegoodsid = mg.middlegoodsid
- left join wrstandard w
- on s.wrstandardid = w.wrstandardid
- left join dgfactoryitem dg
- on s.spotgoodsbrandid = dg.dgfactoryitemid
- left join deliverygoods g
- on s.deliverygoodsid = g.deliverygoodsid
- where 1 = 1
- and s.contractstatus in (2, 3)
- `
- sqlId.AndEx("s.reckondate", r.TRADEDATE, len(r.TRADEDATE) > 0)
- if len(r.BeginDate) > 0 && len(r.EndDate) > 0 {
- sqlId.Join(fmt.Sprintf(" and s.reckondate >= '%v' and s.reckondate <= '%v'", r.BeginDate, r.EndDate))
- }
- sqlId.And("t.middlegoodsid", r.MIDDLEGOODSID)
- sqlId.Join(fmt.Sprintf(" and %v in(s.userid, s.tradeuserid)", r.USERID))
- return sqlId.String()
- }
- // GetDataEx 获取敞口合同明细
- func (r *Ermcp3ExposureContractDetail) GetDataEx() (interface{}, error) {
- sData := make([]Ermcp3ExposureContractDetail, 0)
- err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
- for i := range sData {
- sData[i].USERID = r.USERID
- sData[i].calc()
- }
- return sData, err
- }
- // Ermcp3ExposureHedgeplanDetail 敞口套保计划明细
- type Ermcp3ExposureHedgeplanDetail struct {
- MIDDLEGOODSID int32 `json:"middlegoodsid" xorm:"'MIDDLEGOODSID'"` // 套保品种id
- DELIVERYGOODSID int32 `json:"deliverygoodsid" xorm:"'DELIVERYGOODSID'"` // 现货商品id
- CONVERTRATIO float64 `json:"convertratio" xorm:"'CONVERTRATIO'"` // 折算系数(套保品种)
- USERID int64 `json:"userid" xorm:"'USERID'"` // 机构id
- HEDGEPLANID string `json:"hedgeplanid" xorm:"'HEDGEPLANID'"` // 套保计划id
- HEDGEPLANNO string `json:"hedgeplanno" xorm:"'HEDGEPLANNO'"` // 套保计划名称
- BIZTYPE int32 `json:"biztype" xorm:"'BIZTYPE'"` // 业务类型(期现用途,业务类型就是期现用途) 1-套保 2-套利
- QTY float64 `json:"qty" xorm:"'QTY'"` // 合同量
- PRICEDQTY float64 `json:"pricedqty" xorm:"'PRICEDQTY'"` // 已定价量
- WRSTANDARDID int32 `json:"wrstandardid" xorm:"'WRSTANDARDID'"` // 品类id
- WRSTANDARDNAME string `json:"wrstandardname" xorm:"'WRSTANDARDNAME'"` // 品类名称
- WRSTANDARDCODE string `json:"wrstandardcode" xorm:"'WRSTANDARDCODE'"` // 品类代码
- UNITID int32 `json:"unitid" xorm:"'UNITID'"` // 品类单位id
- MIDDLEGOODSNAME string `json:"middlegoodsname" xorm:"'MIDDLEGOODSNAME'"` // 套保品种名称
- MIDDLEGOODSCODE string `json:"middlegoodscode" xorm:"'MIDDLEGOODSCODE'"` // 套保品种代码
- GOODSUNITID int32 `json:"-" xorm:"'GOODSUNITID'"` // 套保品种单位id
- TRADEDATE string `json:"tradedate" xorm:"'tradedate'"` // 交易日(登记日)
- NEEDHEDGERATIO float64 `json:"needhedgeratio" xorm:"'NEEDHEDGERATIO'"` // 应套保比例
- NEEDARBITRAGERATIO float64 `json:"needarbitrageratio" xorm:"'NEEDARBITRAGERATIO'"` // 应套利比例
- CONTRACTTYPE int32 `json:"contracttype" xorm:"'CONTRACTTYPE'"` // 计划类型 - 1:采购 -1:销售
- HEDGEPLANSTATUS int32 `json:"hedgeplanstatus" xorm:"'HEDGEPLANSTATUS'"` // 套保计划状态 - 0:未提交 1:待审核 2:执行中 3:正常完结 4:审核拒绝 5:异常完结 6:已撤回
- DELIVERYGOODSCODE string `json:"deliverygoodscode" xorm:"'DELIVERYGOODSCODE'"` // 现货商品代码
- DELIVERYGOODSNAME string `json:"deliverygoodsname" xorm:"'DELIVERYGOODSNAME'"` // 现货商吕名称
- DGUNITID int32 `json:"dgunitid" xorm:"'DGUNITID'"` // 现货商品单位id
- EnumdicName string `json:"enumdicname"` // 单位名称(品类)
- MGUNITIDNAME string `json:"mgunitidname"` // 单位名称(套保商品)
- DGUNITIDNAME string `json:"dgunitidname"` // 单位名称(现货商品)
- CurQty float64 `json:"-"` // 今定价量
- DiffQty float64 `json:"diffqty"` // 套保品种今变动量
- ChangQty float64 `json:"changqty"` // 应套保总量变化量
- BeginDate string `json:"-"`
- EndDate string `json:"-"`
- }
- func (r *Ermcp3ExposureHedgeplanDetail) calc() {
- r.EnumdicName = mtpcache.GetEnumDicitemName(r.UNITID)
- r.MGUNITIDNAME = mtpcache.GetEnumDicitemName(r.GOODSUNITID)
- r.DGUNITIDNAME = mtpcache.GetEnumDicitemName(r.DGUNITID)
- r.CurQty = r.QTY
- r.DiffQty = r.QTY * r.CONVERTRATIO
- r.ChangQty = r.QTY * r.NEEDHEDGERATIO * r.CONVERTRATIO
- }
- func (r *Ermcp3ExposureHedgeplanDetail) buildSql() string {
- var sqlId utils.SQLVal = `
- select t.middlegoodsid,
- t.deliverygoodsid,
- t.convertratio,
- s.areauserid userid,
- to_char(s.hedgeplanid) hedgeplanid,
- s.hedgeplanno,
- s.contracttype,
- s.biztype,
- s.planqty qty,
- s.wrstandardid,
- s.audittradedate tradedate,
- s.hedgeplanstatus,
- w.wrstandardname,
- w.wrstandardcode,
- w.unitid,
- g.deliverygoodscode,
- g.deliverygoodsname,
- g.goodsunitid,
- mg.middlegoodsname,
- mg.middlegoodscode,
- mg.goodsunitid,
- mg.needhedgeratio,
- mg.needarbitrageratio
- from erms2_wrsconvertdetail t
- inner join ermcp_hedgeplan s
- on t.wrstandardid = s.wrstandardid
- left join erms_middlegoods mg
- on t.middlegoodsid = mg.middlegoodsid
- left join wrstandard w
- on s.wrstandardid = w.wrstandardid
- left join deliverygoods g
- on s.deliverygoodsid = g.deliverygoodsid
- where 1 = 1
- and s.hedgeplanstatus in (2, 3)
- `
- sqlId.AndEx("s.audittradedate", r.TRADEDATE, len(r.TRADEDATE) > 0)
- if len(r.BeginDate) > 0 && len(r.EndDate) > 0 {
- sqlId.Join(fmt.Sprintf(" and s.audittradedate >= '%v' and s.audittradedate <= '%v'", r.BeginDate, r.EndDate))
- }
- sqlId.And("t.middlegoodsid", r.MIDDLEGOODSID)
- sqlId.Join(fmt.Sprintf(" and %v in(s.areauserid, s.tradeuserid)", r.USERID))
- return sqlId.String()
- }
- // GetDataEx 获取敞口套保计划明细
- func (r *Ermcp3ExposureHedgeplanDetail) GetDataEx() (interface{}, error) {
- sData := make([]Ermcp3ExposureHedgeplanDetail, 0)
- err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
- for i := range sData {
- sData[i].calc()
- }
- return sData, err
- }
- // Ermcp3AreaSpotPLReport 现货报表(日/月/周/季/年)
- type Ermcp3AreaSpotPLReport struct {
- RECKONDATE string `json:"reckondate" xorm:"RECKONDATE"` // 日照时期(yyyyMMdd)
- CYCLETIME string `json:"cycletime" xorm:"'CYCLETIME'"` // 周期时间 月(YYYYMM) 季(YYYYQ) 年(YYYY) 周(YYYYIW) 全(0)【原值】
- CYCLETYPE int32 `json:"cycletype" xorm:"'CYCLETYPE'"` // 周期类型 - 1:月 2:季 3:年 4:周 5:全报表【原值】
- AREAUSERID int64 `json:"areauserid" xorm:"AREAUSERID"` // 所属机构\交易用户ID
- ACCOUNTID int64 `json:"accountid" xorm:"ACCOUNTID"` // 期货账户ID (作废, 默认为0)
- WRFACTORTYPEID int64 `json:"wrfactortypeid" xorm:"WRFACTORTYPEID"` // 仓单要素类型ID(212+Unix秒时间戳(10位)+xxxxxx)
- CURRENCYID int32 `json:"currencyid" xorm:"CURRENCYID"` // 结算币种ID【原值】
- BIZTYPE int32 `json:"biztype" xorm:"BIZTYPE"` // 业务类型 - 1:套保 2:套利
- DELIVERYGOODSID int64 `json:"deliverygoodsid" xorm:"DELIVERYGOODSID"` // 现货品种ID
- WRSTANDARDID int64 `json:"wrstandardid" xorm:"WRSTANDARDID"` // 现货品类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 SFLOAT64 `json:"oriaverageprice" xorm:"ORIAVERAGEPRICE"` // 期初均价
- ORIAMOUNT float64 `json:"oriamount" xorm:"ORIAMOUNT"` // 期初额
- TODAYBUYQTY float64 `json:"todaybuyqty" xorm:"TODAYBUYQTY"` // 今日采购量(今采购量)
- TODAYBUYAMOUNT float64 `json:"todaybuyamount" xorm:"TODAYBUYAMOUNT"` // 今日采购额(今采购额)
- TODAYBUYAVERAGEPRICE SFLOAT64 `json:"todaybuyaverageprice" xorm:"TODAYBUYAVERAGEPRICE"` // 今日采购均价
- TODAYSELLQTY float64 `json:"todaysellqty" xorm:"TODAYSELLQTY"` // 今日销售量(今销售量)
- TODAYSELLAMOUNT float64 `json:"todaysellamount" xorm:"TODAYSELLAMOUNT"` // 今日销售额(今销售额)
- TODAYSELLAVERAGEPRICE SFLOAT64 `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 SFLOAT64 `json:"curaverageprice" xorm:"CURAVERAGEPRICE"` // 期末均价
- CURAMOUNT float64 `json:"curamount" xorm:"CURAMOUNT"` // 期末额
- CURSPOTPRICE SFLOAT64 `json:"curspotprice" xorm:"CURSPOTPRICE"` // 参考市价(最新价)
- CURMARKETVALUE SFLOAT64 `json:"curmarketvalue" xorm:"CURMARKETVALUE"` // 参考市值(期末市值)
- ACTUALPL float64 `json:"actualpl" xorm:"ACTUALPL"` // 现货损益
- FLOATPL SFLOAT64 `json:"floatpl" xorm:"FLOATPL"` // 浮动损益
- UPDATETIME string `json:"updatetime" xorm:"UPDATETIME"` // 更新时间
- TODAYINQTY float64 `json:"todayinqty" xorm:"TODAYINQTY"` // 今日入库量(今入库量)
- TODAYOUTQTY float64 `json:"todayoutqty" xorm:"TODAYOUTQTY"` // 今日出库量(今出库量)
- DELIVERYGOODSCODE string `json:"deliverygoodscode" xorm:"'DELIVERYGOODSCODE'"` // 现货商品代码
- DELIVERYGOODSNAME string `json:"deliverygoodsname" xorm:"'DELIVERYGOODSNAME'"` // 现货商品名称
- GOODSUNITID int32 `json:"goodsunitid" xorm:"'GOODSUNITID'"` // 现货商品单位id
- 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'"` // 品牌名称
- EnumdicName string `json:"enumdicname"` // 现货商品单位名称
- UNITIDNAME string `json:"unitidname"` // 品类单位名称
- ACCOUNTNAME string `json:"accountname"` // 机构名称
- CURRENCYNAME string `json:"currencyname"` // 币种名称
- QueryType int32 `json:"-"` // 查询类型 1-报表 2-报表明细
- BeginDate string `json:"begindate"` // 开始交易日
- EndDate string `json:"enddate"` // 结束交易日
- }
- func (r *Ermcp3AreaSpotPLReport) calc() {
- r.EnumdicName = mtpcache.GetEnumDicitemName(r.GOODSUNITID)
- r.UNITIDNAME = mtpcache.GetEnumDicitemName(r.UNITID)
- r.ACCOUNTNAME = mtpcache.GetUserNameByUserId(r.AREAUSERID)
- r.CURRENCYNAME = mtpcache.GetCurrencyName(r.CURRENCYID)
- fCalcAvePrice := func(avePrice *SFLOAT64, amount, qty float64) {
- if qty > 1e-10 {
- avePrice.Set(amount / qty)
- avePrice.Round(3)
- } else if qty < -1e-10 {
- avePrice.Set(amount / qty)
- avePrice.Round(3)
- } else {
- *avePrice = 0
- }
- }
- // 期初均价
- fCalcAvePrice(&r.ORIAVERAGEPRICE, r.ORIAMOUNT, r.ORIQTY)
- // 期末均价
- fCalcAvePrice(&r.CURAVERAGEPRICE, r.CURAMOUNT, r.CURQTY)
- // 今采购均价
- fCalcAvePrice(&r.TODAYBUYAVERAGEPRICE, r.TODAYBUYAMOUNT, r.TODAYBUYQTY)
- // 今销售均价
- fCalcAvePrice(&r.TODAYSELLAVERAGEPRICE, r.TODAYSELLAMOUNT, r.TODAYSELLQTY)
- }
- func (r *Ermcp3AreaSpotPLReport) buildSql() string {
- // 日报表
- if r.QueryType == 1 && r.CYCLETYPE == 0 {
- return r.buildSqlDay()
- }
- // 日报表明细
- if r.QueryType == 2 && r.CYCLETYPE == 0 {
- return r.buildSqlDayDetail()
- }
- return r.buildSqlCycle()
- }
- // buildSqlDay 现货日报表查询语句
- func (r *Ermcp3AreaSpotPLReport) buildSqlDay() string {
- var sqlId utils.SQLVal = "select a.*," +
- " g.deliverygoodscode," +
- " g.deliverygoodsname," +
- " g.goodsunitid" +
- " from (SELECT t.RECKONDATE," +
- " t.AREAUSERID," +
- " t.CURRENCYID," +
- " t.DELIVERYGOODSID," +
- " sum(t.ORIBUYQTY) ORIBUYQTY," +
- " sum(t.ORIBUYAMOUNT) ORIBUYAMOUNT," +
- " sum(t.ORISELLQTY) ORISELLQTY," +
- " sum(t.ORISELLAMOUNT) ORISELLAMOUNT," +
- " sum(t.ORIQTY) ORIQTY," +
- " sum(t.ORIAMOUNT) ORIAMOUNT," +
- " sum(t.TODAYBUYQTY) TODAYBUYQTY," +
- " sum(t.TODAYBUYAMOUNT) TODAYBUYAMOUNT," +
- " sum(t.TODAYSELLQTY) TODAYSELLQTY," +
- " sum(t.TODAYSELLAMOUNT) TODAYSELLAMOUNT," +
- " sum(t.CURBUYQTY) CURBUYQTY," +
- " sum(t.CURBUYAMOUNT) CURBUYAMOUNT," +
- " sum(t.CURSELLQTY) CURSELLQTY," +
- " sum(t.CURSELLAMOUNT) CURSELLAMOUNT," +
- " sum(t.CURQTY) CURQTY," +
- " sum(t.CURAMOUNT) CURAMOUNT," +
- " max(t.CURSPOTPRICE) CURSPOTPRICE," +
- " sum(t.CURMARKETVALUE) CURMARKETVALUE," +
- " sum(t.ACTUALPL) ACTUALPL," +
- " sum(t.FLOATPL) FLOATPL," +
- " sum(t.TODAYINQTY) TODAYINQTY," +
- " sum(t.TODAYOUTQTY) TODAYOUTQTY" +
- " FROM RECKON_ERMCP_AREASPOTPL t" +
- " WHERE 1=1 %v" +
- " GROUP BY t.RECKONDATE," +
- " t.AREAUSERID," +
- " t.CURRENCYID," +
- " t.DELIVERYGOODSID) a" +
- " LEFT JOIN DELIVERYGOODS g" +
- " on a.deliverygoodsid = g.deliverygoodsid"
- var sqlParam utils.SQLVal
- sqlParam.And("t.AREAUSERID", r.AREAUSERID)
- if r.QueryType == 1 {
- sqlParam.And("t.RECKONDATE", r.RECKONDATE)
- } else if r.QueryType == 2 {
- sqlParam.Join(fmt.Sprintf(" and t.RECKONDATE >= '%v' and t.RECKONDATE <= '%v' ", r.BeginDate, r.EndDate))
- }
- sqlId.FormatParam(sqlParam.String())
- return sqlId.String()
- }
- func (r *Ermcp3AreaSpotPLReport) buildSqlDayDetail() string {
- var sqlId utils.SQLVal = "select a.*," +
- " g.deliverygoodscode," +
- " g.deliverygoodsname," +
- " g.goodsunitid," +
- " w.wrstandardcode," +
- " w.wrstandardname," +
- " w.unitid," +
- " dg.dgfactoryitemvalue brandName" +
- " from (SELECT t.RECKONDATE," +
- " t.AREAUSERID," +
- " t.CURRENCYID," +
- " t.DELIVERYGOODSID," +
- " t.WRSTANDARDID," +
- " t.SPOTGOODSBRANDID," +
- " sum(t.ORIBUYQTY) ORIBUYQTY," +
- " sum(t.ORIBUYAMOUNT) ORIBUYAMOUNT," +
- " sum(t.ORISELLQTY) ORISELLQTY," +
- " sum(t.ORISELLAMOUNT) ORISELLAMOUNT," +
- " sum(t.ORIQTY) ORIQTY," +
- " sum(t.ORIAMOUNT) ORIAMOUNT," +
- " sum(t.TODAYBUYQTY) TODAYBUYQTY," +
- " sum(t.TODAYBUYAMOUNT) TODAYBUYAMOUNT," +
- " sum(t.TODAYSELLQTY) TODAYSELLQTY," +
- " sum(t.TODAYSELLAMOUNT) TODAYSELLAMOUNT," +
- " sum(t.CURBUYQTY) CURBUYQTY," +
- " sum(t.CURBUYAMOUNT) CURBUYAMOUNT," +
- " sum(t.CURSELLQTY) CURSELLQTY," +
- " sum(t.CURSELLAMOUNT) CURSELLAMOUNT," +
- " sum(t.CURQTY) CURQTY," +
- " sum(t.CURAMOUNT) CURAMOUNT," +
- " max(t.CURSPOTPRICE) CURSPOTPRICE," +
- " sum(t.CURMARKETVALUE) CURMARKETVALUE," +
- " sum(t.ACTUALPL) ACTUALPL," +
- " sum(t.FLOATPL) FLOATPL," +
- " sum(t.TODAYINQTY) TODAYINQTY," +
- " sum(t.TODAYOUTQTY) TODAYOUTQTY" +
- " FROM RECKON_ERMCP_AREASPOTPL t" +
- " WHERE 1 = 1 %v" +
- " GROUP BY t.RECKONDATE," +
- " t.AREAUSERID," +
- " t.CURRENCYID," +
- " t.DELIVERYGOODSID," +
- " t.WRSTANDARDID," +
- " t.SPOTGOODSBRANDID) a" +
- " LEFT JOIN DELIVERYGOODS g" +
- " on a.deliverygoodsid = g.deliverygoodsid" +
- " LEFT JOIN WRSTANDARD w" +
- " on a.wrstandardid = w.wrstandardid" +
- " LEFT JOIN DGFACTORYITEM dg" +
- " on a.spotgoodsbrandid = dg.dgfactoryitemid"
- var sqlParam utils.SQLVal
- sqlParam.And("t.AREAUSERID", r.AREAUSERID)
- sqlParam.AndEx("t.RECKONDATE", r.RECKONDATE, len(r.RECKONDATE) > 0)
- if len(r.BeginDate) > 0 && len(r.EndDate) > 0 {
- sqlParam.Join(fmt.Sprintf(" and t.RECKONDATE >= '%v' and t.RECKONDATE <= '%v' ", r.BeginDate, r.EndDate))
- }
- sqlParam.And("t.CURRENCYID", r.CURRENCYID)
- sqlParam.And("t.DELIVERYGOODSID", r.DELIVERYGOODSID)
- sqlId.FormatParam(sqlParam.String())
- return sqlId.String()
- }
- // buildSqlCycle 周期报表查询语句
- func (r *Ermcp3AreaSpotPLReport) buildSqlCycle() string {
- var sqlId utils.SQLVal = "select a.*," +
- " g.deliverygoodscode," +
- " g.deliverygoodsname," +
- " g.goodsunitid" +
- " from (SELECT t.cycletype," +
- " t.cycletime," +
- " t.AREAUSERID," +
- " t.CURRENCYID," +
- " t.DELIVERYGOODSID," +
- " sum(t.ORIBUYQTY) ORIBUYQTY," +
- " sum(t.ORIBUYAMOUNT) ORIBUYAMOUNT," +
- " sum(t.ORISELLQTY) ORISELLQTY," +
- " sum(t.ORISELLAMOUNT) ORISELLAMOUNT," +
- " sum(t.ORIQTY) ORIQTY," +
- " sum(t.ORIAMOUNT) ORIAMOUNT," +
- " sum(t.TODAYBUYQTY) TODAYBUYQTY," +
- " sum(t.TODAYBUYAMOUNT) TODAYBUYAMOUNT," +
- " sum(t.TODAYSELLQTY) TODAYSELLQTY," +
- " sum(t.TODAYSELLAMOUNT) TODAYSELLAMOUNT," +
- " sum(t.CURBUYQTY) CURBUYQTY," +
- " sum(t.CURBUYAMOUNT) CURBUYAMOUNT," +
- " sum(t.CURSELLQTY) CURSELLQTY," +
- " sum(t.CURSELLAMOUNT) CURSELLAMOUNT," +
- " sum(t.CURQTY) CURQTY," +
- " sum(t.CURAMOUNT) CURAMOUNT," +
- " max(t.CURSPOTPRICE) CURSPOTPRICE," +
- " sum(t.CURMARKETVALUE) CURMARKETVALUE," +
- " sum(t.ACTUALPL) ACTUALPL," +
- " sum(t.FLOATPL) FLOATPL," +
- " sum(t.TODAYINQTY) TODAYINQTY," +
- " sum(t.TODAYOUTQTY) TODAYOUTQTY" +
- " FROM REPORT_ERMCP_AREASPOTPL t" +
- " WHERE 1=1 %v" +
- " GROUP BY t.AREAUSERID," +
- " t.cycletype," +
- " t.cycletime," +
- " t.CURRENCYID," +
- " t.DELIVERYGOODSID) a" +
- " LEFT JOIN DELIVERYGOODS g" +
- " on a.deliverygoodsid = g.deliverygoodsid"
- var sqlParam utils.SQLVal
- sqlParam.And("t.AREAUSERID", r.AREAUSERID)
- sqlParam.And("t.Cycletype", r.CYCLETYPE)
- sqlParam.And("t.CYCLETIME", r.CYCLETIME)
- sqlId.FormatParam(sqlParam.String())
- return sqlId.String()
- }
- // GetDataEx 获取现货报表(日/月/周/季/年)
- func (r *Ermcp3AreaSpotPLReport) GetDataEx() (interface{}, error) {
- sData := make([]Ermcp3AreaSpotPLReport, 0)
- err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
- for i := range sData {
- sData[i].calc()
- sData[i].BeginDate = r.BeginDate
- sData[i].EndDate = r.EndDate
- }
- return sData, err
- }
- // Ermcp3FinanceReport 财务报表
- type Ermcp3FinanceReport struct {
- RECKONDATE string `json:"reckondate" xorm:"RECKONDATE"` // 日照时期(yyyyMMdd)
- CYCLETIME string `json:"cycletime" xorm:"CYCLETIME"` // 周期时间 月(YYYYMM) 季(YYYYQ) 年(YYYY) 周(YYYYIW) 全(0)【原值】
- CYCLETYPE int32 `json:"cycletype" xorm:"CYCLETYPE"` // 周期类型 - 1:月 2:季 3:年 4:周 5:全报表【原值】
- SELLPREINVOICEDAMOUNT float64 `json:"sellpreinvoicedamount" xorm:"SELLPREINVOICEDAMOUNT"` // 销售预开票额(预开票额)
- SELLUNINVOICEDAMOUNT float64 `json:"selluninvoicedamount" xorm:"SELLUNINVOICEDAMOUNT"` // 销售应开票额(应开票额)
- TODAYRECEIVESUM float64 `json:"todayreceivesum" xorm:"TODAYRECEIVESUM"` // 今收款合计
- TODAYPAYSUM float64 `json:"todaypaysum" xorm:"TODAYPAYSUM"` // 今付款合计
- UPDATETIME string `json:"updatetime" xorm:"UPDATETIME"` // 更新时间
- AREAUSERID int64 `json:"areauserid" xorm:"AREAUSERID"` // 所属机构\交易用户ID
- CURRENCYID int32 `json:"currencyid" xorm:"CURRENCYID"` // 结算币种ID
- BIZTYPE int32 `json:"biztype" xorm:"BIZTYPE"` // 业务类型 - 1:套保 2:套利
- BUYTODAYSETTLEAMOUNT float64 `json:"buytodaysettleamount" xorm:"BUYTODAYSETTLEAMOUNT"` // 采购今付款额(今付货款额)
- SELLTODAYSETTLEAMOUNT float64 `json:"selltodaysettleamount" xorm:"SELLTODAYSETTLEAMOUNT"` // 销售今收款额(今收货款额)
- BUYTODAYREFUNDAMOUNT float64 `json:"buytodayrefundamount" xorm:"BUYTODAYREFUNDAMOUNT"` // 采购今收退款额(今收退款额)
- SELLTODAYREFUNDAMOUNT float64 `json:"selltodayrefundamount" xorm:"SELLTODAYREFUNDAMOUNT"` // 销售今付退款额(今付退款额)
- SELLTODAYINVOICEAMOUNT float64 `json:"selltodayinvoiceamount" xorm:"SELLTODAYINVOICEAMOUNT"` // 销售今开票额(今开票额)
- BUYTODAYINVOICEAMOUNT float64 `json:"buytodayinvoiceamount" xorm:"BUYTODAYINVOICEAMOUNT"` // 采购今收票额(今收票额)
- BUYPREPAIDAMOUNT float64 `json:"buyprepaidamount" xorm:"BUYPREPAIDAMOUNT"` // 采购预付款额(预付货款额)
- BUYUNPAIDAMOUNT float64 `json:"buyunpaidamount" xorm:"BUYUNPAIDAMOUNT"` // 采购应付款额(应付货款额)
- BUYPREINVOICEDAMOUNT float64 `json:"buypreinvoicedamount" xorm:"BUYPREINVOICEDAMOUNT"` // 采购预收票额(预收票额)
- BUYUNINVOICEDAMOUNT float64 `json:"buyuninvoicedamount" xorm:"BUYUNINVOICEDAMOUNT"` // 采购应收票额(应收票额)
- SELLPREPAIDAMOUNT float64 `json:"sellprepaidamount" xorm:"SELLPREPAIDAMOUNT"` // 销售预收款额(预收货款额)
- SELLUNPAIDAMOUNT float64 `json:"sellunpaidamount" xorm:"SELLUNPAIDAMOUNT"` // 销售应收款额(应收货款额)
- WRFACTORTYPEID int64 `json:"wrfactortypeid" xorm:"WRFACTORTYPEID"` // 仓单要素类型ID(212+Unix秒时间戳(10位)+xxxxxx)
- DELIVERYGOODSID int64 `json:"deliverygoodsid" xorm:"DELIVERYGOODSID"` // 现货品种ID
- WRSTANDARDID int64 `json:"wrstandardid" xorm:"WRSTANDARDID"` // 现货商品ID
- SPOTGOODSBRANDID int32 `json:"spotgoodsbrandid" xorm:"SPOTGOODSBRANDID"` // 现货品牌ID
- DELIVERYGOODSCODE string `json:"deliverygoodscode" xorm:"'DELIVERYGOODSCODE'"` // 现货品种代码
- DELIVERYGOODSNAME string `json:"deliverygoodsname" xorm:"'DELIVERYGOODSNAME'"` // 现货品种名称
- WRSTANDARDCODE string `json:"wrstandardcode" xorm:"'WRSTANDARDCODE'"` // 品类代码
- WRSTANDARDNAME string `json:"wrstandardname" xorm:"'WRSTANDARDNAME'"` // 品类名称
- BRANDNAME string `json:"brandname" xorm:"'BRANDNAME'"` // 品牌名称
- ACCOUNTNAME string `json:"accountname"` // 机构名称
- CURRENCYNAME string `json:"currencyname"` // 币种名称
- QueryType int32 `json:"-"` // 查询类型 1-报表 2-报表明细
- BeginDate string `json:"begindate"` // 开始交易日
- EndDate string `json:"enddate"` // 结束交易日
- SumFields string `json:"-"` // 维度字段
- }
- func (r *Ermcp3FinanceReport) calc() {
- r.CURRENCYNAME = mtpcache.GetCurrencyName(r.CURRENCYID)
- r.ACCOUNTNAME = mtpcache.GetUserNameByUserId(r.AREAUSERID)
- f := func(v *float64) {
- if *v < 0 {
- *v = 0
- }
- }
- f(&r.BUYPREPAIDAMOUNT)
- f(&r.SELLPREINVOICEDAMOUNT)
- f(&r.BUYUNINVOICEDAMOUNT)
- f(&r.SELLPREPAIDAMOUNT)
- f(&r.BUYPREINVOICEDAMOUNT)
- }
- // getSumField 获取汇总维度字段
- func (r *Ermcp3FinanceReport) getSumField() (fields []string) {
- fields = append(fields, "areauserid")
- fields = append(fields, "currencyid")
- if r.CYCLETYPE == 0 {
- // 日报表
- fields = append(fields, "reckondate")
- } else {
- // 周期报表
- fields = append(fields, "cycletype")
- fields = append(fields, "cycletime")
- }
- baseField := map[string]string{
- "1": "deliverygoodsid",
- "2": "wrstandardid",
- "3": "spotgoodsbrandid",
- }
- param := []string{}
- if len(r.SumFields) > 0 {
- param = strings.Split(r.SumFields, ",")
- }
- for k, v := range baseField {
- for _, p := range param {
- if k == p {
- fields = append(fields, v)
- }
- }
- }
- return
- }
- func (r *Ermcp3FinanceReport) getExFieldInfo() (strFiled string, strleftJoin string) {
- if len(r.SumFields) > 0 {
- param := strings.Split(r.SumFields, ",")
- fHas := func(v string) bool {
- for i := range param {
- if param[i] == v {
- return true
- }
- }
- return false
- }
- if fHas("1") {
- if len(strFiled) > 0 {
- strFiled += ","
- }
- strFiled += "g.deliverygoodscode, g.deliverygoodsname, g.goodsunitid"
- strleftJoin += " LEFT JOIN deliverygoods g on a.deliverygoodsid = g.deliverygoodsid"
- }
- if fHas("2") {
- if len(strFiled) > 0 {
- strFiled += ","
- }
- strFiled += "w.wrstandardname, w.wrstandardcode, w.unitid"
- strleftJoin += " LEFT JOIN WRSTANDARD w on a.wrstandardid = w.wrstandardid"
- }
- if fHas("3") {
- if len(strFiled) > 0 {
- strFiled += ","
- }
- strFiled += "gb.dgfactoryitemvalue brandname"
- strleftJoin += " LEFT JOIN dgfactoryitem gb on a.spotgoodsbrandid = gb.dgfactoryitemid"
- }
- }
- return
- }
- func (r *Ermcp3FinanceReport) buildSql() string {
- fields := r.getSumField()
- if r.CYCLETYPE == 0 {
- // 查日照报
- return r.buildSqlReckon(fields)
- } else {
- // 查报表表
- return r.buildSqlReport(fields)
- }
- }
- func (r *Ermcp3FinanceReport) buildSqlReckon(fields []string) string {
- var sqlId, sqlParam utils.SQLVal
- var strFileds string
- for _, v := range fields {
- if len(strFileds) > 0 {
- strFileds += ","
- }
- strFileds += "t." + v
- }
- sqlParam.And("t.AREAUSERID", r.AREAUSERID)
- sqlParam.AndEx("t.RECKONDATE", r.RECKONDATE, len(r.RECKONDATE) > 0)
- if len(r.BeginDate) > 0 && len(r.EndDate) > 0 {
- sqlParam.Join(fmt.Sprintf(" and t.RECKONDATE >= '%v' and t.RECKONDATE <= '%v' ", r.BeginDate, r.EndDate))
- }
- sqlParam.AndEx("t.CURRENCYID", r.CURRENCYID, r.CURRENCYID > 0)
- exFileds, strleftJoin := r.getExFieldInfo()
- if len(exFileds) > 0 {
- // 有左联查额外信息(RECKON_ERMCP_AFINANCESUB明细表, 注意是不同的表)
- sqlId = "select a.*, %v" +
- " from (SELECT %v," +
- " sum(t.BUYTODAYSETTLEAMOUNT) BUYTODAYSETTLEAMOUNT," +
- " sum(t.BUYTODAYREFUNDAMOUNT) BUYTODAYREFUNDAMOUNT," +
- " sum(t.BUYPREPAIDAMOUNT) BUYPREPAIDAMOUNT," +
- " sum(t.BUYUNPAIDAMOUNT) BUYUNPAIDAMOUNT," +
- " sum(t.BUYTODAYINVOICEAMOUNT) BUYTODAYINVOICEAMOUNT," +
- " sum(t.BUYPREINVOICEDAMOUNT) BUYPREINVOICEDAMOUNT," +
- " sum(t.BUYUNINVOICEDAMOUNT) BUYUNINVOICEDAMOUNT," +
- " sum(t.SELLTODAYSETTLEAMOUNT) SELLTODAYSETTLEAMOUNT," +
- " sum(t.SELLTODAYREFUNDAMOUNT) SELLTODAYREFUNDAMOUNT," +
- " sum(t.SELLPREPAIDAMOUNT) SELLPREPAIDAMOUNT," +
- " sum(t.SELLUNPAIDAMOUNT) SELLUNPAIDAMOUNT," +
- " sum(t.SELLTODAYINVOICEAMOUNT) SELLTODAYINVOICEAMOUNT," +
- " sum(t.SELLPREINVOICEDAMOUNT) SELLPREINVOICEDAMOUNT," +
- " sum(t.SELLUNINVOICEDAMOUNT) SELLUNINVOICEDAMOUNT," +
- " sum(t.TODAYRECEIVESUM) TODAYRECEIVESUM," +
- " sum(t.TODAYPAYSUM) TODAYPAYSUM" +
- " FROM RECKON_ERMCP_AFINANCESUB t" +
- " WHERE 1 = 1 %v" +
- " GROUP BY %v) a %v"
- sqlId.FormatParam(exFileds, strFileds, sqlParam.String(), strFileds, strleftJoin)
- } else {
- sqlId = "SELECT %v," +
- " sum(t.BUYTODAYSETTLEAMOUNT) BUYTODAYSETTLEAMOUNT," +
- " sum(t.BUYTODAYREFUNDAMOUNT) BUYTODAYREFUNDAMOUNT," +
- " sum(t.BUYPREPAIDAMOUNT) BUYPREPAIDAMOUNT," +
- " sum(t.BUYUNPAIDAMOUNT) BUYUNPAIDAMOUNT," +
- " sum(t.BUYTODAYINVOICEAMOUNT) BUYTODAYINVOICEAMOUNT," +
- " sum(t.BUYPREINVOICEDAMOUNT) BUYPREINVOICEDAMOUNT," +
- " sum(t.BUYUNINVOICEDAMOUNT) BUYUNINVOICEDAMOUNT," +
- " sum(t.SELLTODAYSETTLEAMOUNT) SELLTODAYSETTLEAMOUNT," +
- " sum(t.SELLTODAYREFUNDAMOUNT) SELLTODAYREFUNDAMOUNT," +
- " sum(t.SELLPREPAIDAMOUNT) SELLPREPAIDAMOUNT," +
- " sum(t.SELLUNPAIDAMOUNT) SELLUNPAIDAMOUNT," +
- " sum(t.SELLTODAYINVOICEAMOUNT) SELLTODAYINVOICEAMOUNT," +
- " sum(t.SELLPREINVOICEDAMOUNT) SELLPREINVOICEDAMOUNT," +
- " sum(t.SELLUNINVOICEDAMOUNT) SELLUNINVOICEDAMOUNT," +
- " sum(t.TODAYRECEIVESUM) TODAYRECEIVESUM," +
- " sum(t.TODAYPAYSUM) TODAYPAYSUM" +
- " FROM RECKON_ERMCP_AREAFINANCE t" +
- " WHERE 1 = 1 %v" +
- " GROUP BY %v"
- sqlId.FormatParam(strFileds, sqlParam.String(), strFileds)
- }
- return sqlId.String()
- }
- func (r *Ermcp3FinanceReport) buildSqlReport(fields []string) string {
- var sqlId, sqlParam utils.SQLVal
- var strFileds string
- for _, v := range fields {
- if len(strFileds) > 0 {
- strFileds += ","
- }
- strFileds += "t." + v
- }
- sqlParam.And("t.AREAUSERID", r.AREAUSERID)
- sqlParam.And("t.CYCLETYPE", r.CYCLETYPE)
- sqlParam.And("t.CYCLETIME", r.CYCLETIME)
- sqlParam.AndEx("t.CURRENCYID", r.CURRENCYID, r.CURRENCYID > 0)
- exFileds, strleftJoin := r.getExFieldInfo()
- if len(exFileds) > 0 {
- // 有左联查额外信息(REPORT_ERMCP_AFINANCESUB注意表名不同)
- sqlId = "select a.*, %v" +
- " from (SELECT %v," +
- " sum(t.BUYTODAYSETTLEAMOUNT) BUYTODAYSETTLEAMOUNT," +
- " sum(t.BUYTODAYREFUNDAMOUNT) BUYTODAYREFUNDAMOUNT," +
- " sum(t.BUYPREPAIDAMOUNT) BUYPREPAIDAMOUNT," +
- " sum(t.BUYUNPAIDAMOUNT) BUYUNPAIDAMOUNT," +
- " sum(t.BUYTODAYINVOICEAMOUNT) BUYTODAYINVOICEAMOUNT," +
- " sum(t.BUYPREINVOICEDAMOUNT) BUYPREINVOICEDAMOUNT," +
- " sum(t.BUYUNINVOICEDAMOUNT) BUYUNINVOICEDAMOUNT," +
- " sum(t.SELLTODAYSETTLEAMOUNT) SELLTODAYSETTLEAMOUNT," +
- " sum(t.SELLTODAYREFUNDAMOUNT) SELLTODAYREFUNDAMOUNT," +
- " sum(t.SELLPREPAIDAMOUNT) SELLPREPAIDAMOUNT," +
- " sum(t.SELLUNPAIDAMOUNT) SELLUNPAIDAMOUNT," +
- " sum(t.SELLTODAYINVOICEAMOUNT) SELLTODAYINVOICEAMOUNT," +
- " sum(t.SELLPREINVOICEDAMOUNT) SELLPREINVOICEDAMOUNT," +
- " sum(t.SELLUNINVOICEDAMOUNT) SELLUNINVOICEDAMOUNT," +
- " sum(t.TODAYRECEIVESUM) TODAYRECEIVESUM," +
- " sum(t.TODAYPAYSUM) TODAYPAYSUM" +
- " FROM REPORT_ERMCP_AFINANCESUB t" +
- " WHERE 1 = 1 %v" +
- " GROUP BY %v) a %v"
- sqlId.FormatParam(exFileds, strFileds, sqlParam.String(), strFileds, strleftJoin)
- } else {
- sqlId = "SELECT %v," +
- " sum(t.BUYTODAYSETTLEAMOUNT) BUYTODAYSETTLEAMOUNT," +
- " sum(t.BUYTODAYREFUNDAMOUNT) BUYTODAYREFUNDAMOUNT," +
- " sum(t.BUYPREPAIDAMOUNT) BUYPREPAIDAMOUNT," +
- " sum(t.BUYUNPAIDAMOUNT) BUYUNPAIDAMOUNT," +
- " sum(t.BUYTODAYINVOICEAMOUNT) BUYTODAYINVOICEAMOUNT," +
- " sum(t.BUYPREINVOICEDAMOUNT) BUYPREINVOICEDAMOUNT," +
- " sum(t.BUYUNINVOICEDAMOUNT) BUYUNINVOICEDAMOUNT," +
- " sum(t.SELLTODAYSETTLEAMOUNT) SELLTODAYSETTLEAMOUNT," +
- " sum(t.SELLTODAYREFUNDAMOUNT) SELLTODAYREFUNDAMOUNT," +
- " sum(t.SELLPREPAIDAMOUNT) SELLPREPAIDAMOUNT," +
- " sum(t.SELLUNPAIDAMOUNT) SELLUNPAIDAMOUNT," +
- " sum(t.SELLTODAYINVOICEAMOUNT) SELLTODAYINVOICEAMOUNT," +
- " sum(t.SELLPREINVOICEDAMOUNT) SELLPREINVOICEDAMOUNT," +
- " sum(t.SELLUNINVOICEDAMOUNT) SELLUNINVOICEDAMOUNT," +
- " sum(t.TODAYRECEIVESUM) TODAYRECEIVESUM," +
- " sum(t.TODAYPAYSUM) TODAYPAYSUM" +
- " FROM REPORT_ERMCP_AREAFINANCE t" +
- " WHERE 1 = 1 %v" +
- " GROUP BY %v"
- sqlId.FormatParam(strFileds, sqlParam.String(), strFileds)
- }
- return sqlId.String()
- }
- // GetDataEx 获取财务报表
- func (r *Ermcp3FinanceReport) GetDataEx() (interface{}, error) {
- sData := make([]Ermcp3FinanceReport, 0)
- err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
- for i := range sData {
- sData[i].calc()
- sData[i].BeginDate = r.BeginDate
- sData[i].EndDate = r.EndDate
- }
- return sData, err
- }
- // Ermcp3AreaStockReportEx 库存报表
- type Ermcp3AreaStockReportEx struct {
- RECKONDATE string `json:"reckondate" xorm:"RECKONDATE"` // 日照时期(yyyyMMdd)
- CYCLETIME string `json:"cycletime" xorm:"CYCLETIME"` // 周期时间 月(YYYYMM) 季(YYYYQ) 年(YYYY) 周(YYYYIW) 全(0)【原值】
- CYCLETYPE int32 `json:"cycletype" xorm:"CYCLETYPE"` // 周期类型 - 1:月 2:季 3:年 4:周 5:全报表【原值】
- USERID int64 `json:"userid" xorm:"'USERID'"` // 机构ID
- WRSTANDARDID int32 `json:"wrstandardid" xorm:"'WRSTANDARDID'"` // 品类ID
- SPOTGOODSBRANDID int32 `json:"spotgoodsbrandid" xorm:"'SPOTGOODSBRANDID'"` // 现货品牌ID
- WAREHOUSEINFOID string `json:"warehouseinfoid" xorm:"'WAREHOUSEINFOID'"` // 仓库ID
- ORISTOCK float64 `json:"oristock" xorm:"'ORISTOCK'"` // 期初库存量
- CURSTOCK float64 `json:"curstock" xorm:"'CURSTOCK'"` // 期末库存量
- TODAYBUYINQTY float64 `json:"todaybuyinqty" xorm:"'TODAYBUYINQTY'"` // 今采购入库量
- TODAYPRODUCEINQTY float64 `json:"todayproduceinqty" xorm:"'TODAYPRODUCEINQTY'"` // 今内部入库量
- TODAYSELLOUTQTY float64 `json:"todayselloutqty" xorm:"'TODAYSELLOUTQTY'"` // 今销售出库量
- TODAYPRODUCEOUTQTY float64 `json:"todayproduceoutqty" xorm:"'TODAYPRODUCEOUTQTY'"` // 今内部出库量
- UPDATETIME string `json:"updatetime" xorm:"'UPDATETIME'"` // 更新时间
- WRSTANDARDNAME string `json:"wrstandardname" xorm:"'WRSTANDARDNAME'"` // 品类名称
- WRSTANDARDCODE string `json:"wrstandardcode" xorm:"'WRSTANDARDCODE'"` // 品类代码
- UNITID int32 `json:"unitid" xorm:"'UNITID'"` // 品类单位id
- BRANDNAME string `json:"brandname" xorm:"'BRANDNAME'"` // 品牌名称
- WAREHOUSENAME string `json:"warehousename" xorm:"'WAREHOUSENAME'"` // 仓库名称
- WAREHOUSECODE string `json:"warehousecode" xorm:"'WAREHOUSECODE'"` // 仓库代码
- WAREHOUSETYPE int32 `json:"warehousetype" xorm:"'WAREHOUSETYPE'"` // 仓库类型 - 1 厂库 2 自有库 3 合作库
- USERNAME string `json:"username"` // 机构名称
- ENUMDICNAME string `json:"enumdicname"` // 单位名称
- DELIVERYGOODSID int32 `json:"deliverygoodsid" xorm:"'DELIVERYGOODSID'"` // 现货品种id
- DELIVERYGOODSCODE string `json:"deliverygoodscode" xorm:"'DELIVERYGOODSCODE'"` // 现货品种代码
- DELIVERYGOODSNAME string `json:"deliverygoodsname" xorm:"'DELIVERYGOODSNAME'"` // 现货品种名称
- GOODSUNITID int32 `json:"goodsunitid" xorm:"'GOODSUNITID'"` // 现货单位id
- UNBUYINQTY float64 `json:"unbuyinqty"` // 采购未入库量(数据库未找到相关字段?)
- UNSELLOUTQTY float64 `json:"unselloutqty"` // 销售未出库量(数据库未找到相关字段?)
- DiffQty float64 `json:"diffqty"` // 库存变化量 = 期末 - 期初
- BeginDate string `json:"begindate"` // 开始交易日
- EndDate string `json:"enddate"` // 结束交易日
- SumFields string `json:"-"` // 汇总维度(逗号隔开) 1-品种 2-品类 3-品牌 4-仓库
- }
- func (r *Ermcp3AreaStockReportEx) calc() {
- r.USERNAME = mtpcache.GetUserNameByUserId(r.USERID)
- r.ENUMDICNAME = mtpcache.GetEnumDicitemName(r.UNITID)
- r.DiffQty = r.CURSTOCK - r.ORISTOCK
- }
- // getSumField 获取汇总维度字段
- func (r *Ermcp3AreaStockReportEx) getSumField() (fields []string, bSum bool) {
- fields = append(fields, "userid")
- if r.CYCLETYPE == 0 {
- // 日报表
- fields = append(fields, "reckondate")
- } else {
- // 周期报表
- fields = append(fields, "cycletype")
- fields = append(fields, "cycletime")
- }
- baseField := map[string]string{
- "1": "deliverygoodsid",
- "2": "wrstandardid",
- "3": "spotgoodsbrandid",
- "4": "warehouseinfoid",
- }
- bSum = false
- param := []string{}
- if len(r.SumFields) > 0 {
- param = strings.Split(r.SumFields, ",")
- }
- if len(param) == 0 {
- // 全字段, 不需要汇总
- for _, v := range baseField {
- fields = append(fields, v)
- }
- bSum = false
- } else {
- bIncludeAll := true
- // 判断是否包含所有维度
- for k := range baseField {
- bExist := false
- for _, p := range param {
- if k == p {
- bExist = true
- break
- }
- }
- if !bExist {
- bIncludeAll = false
- break
- }
- }
- if bIncludeAll {
- // 包含了所有维度, 不需要汇总
- for _, v := range baseField {
- fields = append(fields, v)
- }
- bSum = false
- } else {
- tmp := map[string]string{}
- for _, p := range param {
- if v, ok := baseField[p]; ok {
- // 利用map特性去重, 先保存在一个临时map中
- tmp[p] = v
- bSum = true
- }
- }
- if bSum {
- for _, v := range tmp {
- fields = append(fields, v)
- }
- }
- }
- }
- return
- }
- func (r *Ermcp3AreaStockReportEx) getExFieldInfo() (strFiled string, strleftJoin string) {
- if len(r.SumFields) > 0 {
- param := strings.Split(r.SumFields, ",")
- fHas := func(v string) bool {
- for i := range param {
- if param[i] == v {
- return true
- }
- }
- return false
- }
- if fHas("1") {
- if len(strFiled) > 0 {
- strFiled += ","
- }
- strFiled += "g.deliverygoodscode, g.deliverygoodsname, g.goodsunitid"
- strleftJoin += " LEFT JOIN deliverygoods g on a.deliverygoodsid = g.deliverygoodsid"
- }
- if fHas("2") {
- if len(strFiled) > 0 {
- strFiled += ","
- }
- strFiled += "w.wrstandardname, w.wrstandardcode, w.unitid"
- strleftJoin += " LEFT JOIN WRSTANDARD w on a.wrstandardid = w.wrstandardid"
- }
- if fHas("3") {
- if len(strFiled) > 0 {
- strFiled += ","
- }
- strFiled += "gb.dgfactoryitemvalue brandname"
- strleftJoin += " LEFT JOIN dgfactoryitem gb on a.spotgoodsbrandid = gb.dgfactoryitemid"
- }
- if fHas("4") {
- if len(strFiled) > 0 {
- strFiled += ","
- }
- strFiled += "h.warehousecode, h.warehousename, h.warehousetype"
- strleftJoin += " LEFT JOIN WAREHOUSEINFO h on a.warehouseinfoid=h.autoid"
- }
- }
- return
- }
- func (r *Ermcp3AreaStockReportEx) buildSql() (sqlId string) {
- fields, bSum := r.getSumField()
- if r.CYCLETYPE == 0 {
- // 日报表
- if bSum {
- sqlId = r.buildSqlReckonSum(fields)
- } else {
- sqlId = r.buildSqlReckon()
- }
- } else {
- // 周期报表
- if bSum {
- sqlId = r.buildSqlReportSum(fields)
- } else {
- sqlId = r.buildSqlReport()
- }
- }
- return
- }
- // GetDataEx 获取库存报表
- func (r *Ermcp3AreaStockReportEx) GetDataEx() (interface{}, error) {
- sData := make([]Ermcp3AreaStockReportEx, 0)
- err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
- for i := range sData {
- sData[i].calc()
- sData[i].BeginDate = r.BeginDate
- sData[i].EndDate = r.EndDate
- }
- return sData, err
- }
- // buildSqlReckon 日照表
- func (r *Ermcp3AreaStockReportEx) buildSqlReckon() string {
- var sqlId utils.SQLVal = "SELECT t.TODAYBUYINQTY," +
- " t.TODAYPRODUCEINQTY," +
- " t.reckondate," +
- " t.TODAYSELLOUTQTY," +
- " t.TODAYPRODUCEOUTQTY," +
- " to_char(t.UPDATETIME, 'yyyy-mm-dd hh24:mi:ss') UPDATETIME," +
- " t.USERID," +
- " t.WRSTANDARDID," +
- " t.SPOTGOODSBRANDID," +
- " t.WAREHOUSEINFOID," +
- " t.deliverygoodsid," +
- " t.ORISTOCK," +
- " t.CURSTOCK," +
- " w.wrstandardname," +
- " w.wrstandardcode," +
- " w.unitid," +
- " gb.dgfactoryitemvalue brandname," +
- " h.warehousename," +
- " h.warehousecode," +
- " h.warehousetype," +
- " g.deliverygoodscode," +
- " g.deliverygoodsname," +
- " g.goodsunitid" +
- " FROM RECKON_ERMCP_AREASTOCK t" +
- " LEFT JOIN WRSTANDARD w" +
- " on t.wrstandardid = w.wrstandardid" +
- " LEFT JOIN dgfactoryitem gb" +
- " on t.spotgoodsbrandid = gb.dgfactoryitemid" +
- " LEFT JOIN deliverygoods g" +
- " on t.deliverygoodsid = g.deliverygoodsid" +
- " LEFT JOIN WAREHOUSEINFO h" +
- " on t.warehouseinfoid = h.autoid" +
- " WHERE 1 = 1"
- sqlId.And("t.USERID", r.USERID)
- sqlId.AndEx("t.RECKONDATE", r.RECKONDATE, len(r.RECKONDATE) > 0)
- if len(r.BeginDate) > 0 && len(r.EndDate) > 0 {
- sqlId.Join(fmt.Sprintf(" and t.RECKONDATE >= '%v' and t.RECKONDATE <= '%v' ", r.BeginDate, r.EndDate))
- }
- // 现货商品id
- sqlId.AndEx("t.DELIVERYGOODSID", r.DELIVERYGOODSID, r.DELIVERYGOODSID > 0)
- // 品类id
- sqlId.AndEx("t.WRSTANDARDID", r.WRSTANDARDID, r.WRSTANDARDID > 0)
- // 品牌id
- sqlId.AndEx("t.SPOTGOODSBRANDID", r.SPOTGOODSBRANDID, r.SPOTGOODSBRANDID > 0)
- // 仓库id
- sqlId.AndEx("t.WAREHOUSEINFOID", r.WAREHOUSEINFOID, len(r.WAREHOUSEINFOID) > 0)
- sqlId.Join(" order by t.reckondate")
- return sqlId.String()
- }
- // buildSqlReckonSum 日照表(汇总维度)
- func (r *Ermcp3AreaStockReportEx) buildSqlReckonSum(fields []string) string {
- var sqlId utils.SQLVal = "SELECT a.*, %v" +
- " from (SELECT %v," +
- " sum(t.ORISTOCK) ORISTOCK," +
- " sum(t.CURSTOCK) CURSTOCK," +
- " sum(t.TODAYBUYINQTY) TODAYBUYINQTY," +
- " sum(t.TODAYPRODUCEINQTY) TODAYPRODUCEINQTY," +
- " sum(t.TODAYSELLOUTQTY) TODAYSELLOUTQTY," +
- " sum(t.TODAYPRODUCEOUTQTY) TODAYPRODUCEOUTQTY" +
- " FROM RECKON_ERMCP_AREASTOCK t" +
- " WHERE 1 = 1 %v" +
- " GROUP BY %v) a %v"
- var sqlParam utils.SQLVal
- sqlParam.And("t.USERID", r.USERID)
- sqlParam.AndEx("t.RECKONDATE", r.RECKONDATE, len(r.RECKONDATE) > 0)
- if len(r.BeginDate) > 0 && len(r.EndDate) > 0 {
- sqlParam.Join(fmt.Sprintf(" and t.RECKONDATE >= '%v' and t.RECKONDATE <= '%v' ", r.BeginDate, r.EndDate))
- }
- // 现货商品id
- sqlParam.AndEx("t.DELIVERYGOODSID", r.DELIVERYGOODSID, r.DELIVERYGOODSID > 0)
- // 品类id
- sqlParam.AndEx("t.WRSTANDARDID", r.WRSTANDARDID, r.WRSTANDARDID > 0)
- // 品牌id
- sqlParam.AndEx("t.SPOTGOODSBRANDID", r.SPOTGOODSBRANDID, r.SPOTGOODSBRANDID > 0)
- // 仓库id
- sqlParam.AndEx("t.WAREHOUSEINFOID", r.WAREHOUSEINFOID, len(r.WAREHOUSEINFOID) > 0)
- var strFileds string
- for _, v := range fields {
- if len(strFileds) > 0 {
- strFileds += ","
- }
- strFileds += "t." + v
- }
- exFields, exLeftJoinTable := r.getExFieldInfo()
- sqlId.FormatParam(exFields, strFileds, sqlParam.String(), strFileds, exLeftJoinTable)
- sqlId.Join(" order by a.reckondate")
- return sqlId.String()
- }
- // buildSqlReport 报表表
- func (r *Ermcp3AreaStockReportEx) buildSqlReport() string {
- var sqlId utils.SQLVal = "SELECT t.TODAYBUYINQTY," +
- " t.TODAYPRODUCEINQTY," +
- " t.cycletype," +
- " t.cycletime," +
- " t.USERID," +
- " t.WRSTANDARDID," +
- " t.SPOTGOODSBRANDID," +
- " t.WAREHOUSEINFOID," +
- " t.deliverygoodsid," +
- " t.TODAYSELLOUTQTY," +
- " t.TODAYPRODUCEOUTQTY," +
- " to_char(t.UPDATETIME, 'yyyy-mm-dd hh24:mi:ss') UPDATETIME," +
- " t.ORISTOCK," +
- " t.CURSTOCK," +
- " w.wrstandardname," +
- " w.wrstandardcode," +
- " w.unitid," +
- " gb.dgfactoryitemvalue brandname," +
- " h.warehousename," +
- " h.warehousecode," +
- " h.warehousetype," +
- " g.deliverygoodscode," +
- " g.deliverygoodsname," +
- " g.goodsunitid" +
- " FROM REPORT_ERMCP_AREASTOCK t" +
- " LEFT JOIN WRSTANDARD w" +
- " on t.wrstandardid = w.wrstandardid" +
- " LEFT JOIN dgfactoryitem gb" +
- " on t.spotgoodsbrandid = gb.dgfactoryitemid" +
- " LEFT JOIN deliverygoods g" +
- " on t.deliverygoodsid = g.deliverygoodsid" +
- " LEFT JOIN WAREHOUSEINFO h" +
- " on t.warehouseinfoid = h.autoid" +
- " WHERE 1 = 1"
- sqlId.And("t.USERID", r.USERID)
- sqlId.And("t.cycletype", r.CYCLETYPE)
- sqlId.And("t.cycletime", r.CYCLETIME)
- // 现货商品id
- sqlId.AndEx("t.DELIVERYGOODSID", r.DELIVERYGOODSID, r.DELIVERYGOODSID > 0)
- // 品类id
- sqlId.AndEx("t.WRSTANDARDID", r.WRSTANDARDID, r.WRSTANDARDID > 0)
- // 品牌id
- sqlId.AndEx("t.SPOTGOODSBRANDID", r.SPOTGOODSBRANDID, r.SPOTGOODSBRANDID > 0)
- // 仓库id
- sqlId.AndEx("t.WAREHOUSEINFOID", r.WAREHOUSEINFOID, len(r.WAREHOUSEINFOID) > 0)
- return sqlId.String()
- }
- // buildSqlReport 报表表(汇总维度)
- func (r *Ermcp3AreaStockReportEx) buildSqlReportSum(fields []string) string {
- var sqlId utils.SQLVal = "SELECT a.*, %v" +
- " from (SELECT %v," +
- " sum(t.ORISTOCK) ORISTOCK," +
- " sum(t.CURSTOCK) CURSTOCK," +
- " sum(t.TODAYBUYINQTY) TODAYBUYINQTY," +
- " sum(t.TODAYPRODUCEINQTY) TODAYPRODUCEINQTY," +
- " sum(t.TODAYSELLOUTQTY) TODAYSELLOUTQTY," +
- " sum(t.TODAYPRODUCEOUTQTY) TODAYPRODUCEOUTQTY" +
- " FROM REPORT_ERMCP_AREASTOCK t" +
- " WHERE 1 = 1 %v" +
- " GROUP BY %v) a %v"
- var sqlParam utils.SQLVal
- sqlParam.And("t.USERID", r.USERID)
- sqlParam.And("t.cycletype", r.CYCLETYPE)
- sqlParam.And("t.cycletime", r.CYCLETIME)
- // 现货商品id
- sqlParam.AndEx("t.DELIVERYGOODSID", r.DELIVERYGOODSID, r.DELIVERYGOODSID > 0)
- // 品类id
- sqlParam.AndEx("t.WRSTANDARDID", r.WRSTANDARDID, r.WRSTANDARDID > 0)
- // 品牌id
- sqlParam.AndEx("t.SPOTGOODSBRANDID", r.SPOTGOODSBRANDID, r.SPOTGOODSBRANDID > 0)
- // 仓库id
- sqlParam.AndEx("t.WAREHOUSEINFOID", r.WAREHOUSEINFOID, len(r.WAREHOUSEINFOID) > 0)
- var strFileds string
- for _, v := range fields {
- if len(strFileds) > 0 {
- strFileds += ","
- }
- strFileds += "t." + v
- }
- exFields, exLeftJoinTable := r.getExFieldInfo()
- sqlId.FormatParam(exFields, strFileds, sqlParam.String(), strFileds, exLeftJoinTable)
- return sqlId.String()
- }
- // Ermcp3ArealSumPL 损益汇总表
- type Ermcp3ArealSumPL struct {
- RECKONDATE string `json:"reckondate" xorm:"RECKONDATE"` // 日照时期(yyyyMMdd)
- CYCLETIME string `json:"cycletime" xorm:"'CYCLETIME'"` // 周期时间 月(YYYYMM) 季(YYYYQ) 年(YYYY) 周(YYYYIW) 全(0)【原值】
- CYCLETYPE int32 `json:"cycletype" xorm:"'CYCLETYPE'"` // 周期类型 - 1:月 2:季 3:年 4:周 5:全报表【原值】
- AREAUSERID int64 `json:"areauserid" xorm:"AREAUSERID"` // 所属机构\交易用户ID
- MIDDLEGOODSID int64 `json:"middlegoodsid" xorm:"MIDDLEGOODSID"` // 套保品种ID(SEQ_ERMS_MIDDLEGOODS)
- CURRENCYID int32 `json:"currencyid" xorm:"CURRENCYID"` // 结算币种ID
- SPOTACTUALPL float64 `json:"spotactualpl" xorm:"SPOTACTUALPL"` // 现货损益
- SPOTFLOATPL float64 `json:"spotfloatpl" xorm:"SPOTFLOATPL"` // 现货浮动损益
- FUTUREACTUALPL float64 `json:"futureactualpl" xorm:"FUTUREACTUALPL"` // 期货损益
- FUTUREFLOATPL float64 `json:"futurefloatpl" xorm:"FUTUREFLOATPL"` // 期货浮动损益
- SUMACTUALPL float64 `json:"sumactualpl" xorm:"SUMACTUALPL"` // 实际损益 = (ActualPL + FutureActualPL)
- SUMPL float64 `json:"sumpl" xorm:"'SUMPL'"` // 总敞口损益 | 汇总损益
- UPDATETIME string `json:"updatetime" xorm:"UPDATETIME"` // 更新时间
- MIDDLEGOODSNAME string `json:"middlegoodsname" xorm:"'MIDDLEGOODSNAME'"` // 套保品种名称
- MIDDLEGOODSCODE string `json:"middlegoodscode" xorm:"'MIDDLEGOODSCODE'"` // 套保品种代码
- GOODSUNITID int32 `json:"goodsunitid" xorm:"'GOODSUNITID'"` // 套保品种单位id
- TOTALSPOTQTY float64 `json:"totalspotqty" xorm:"'TOTALSPOTQTY'"` // 现货头寸总量
- TOTALFUTUREQTY float64 `json:"totalfutureqty" xorm:"'TOTALFUTUREQTY'"` // 期货头寸总量
- TOTALNEEDHEDGEQTY float64 `json:"totalneedhedgeqty" xorm:"'TOTALNEEDHEDGEQTY'"` // 应套保总量
- FUTURESPOTRATIO float64 `json:"futurespotratio" xorm:"'FUTURESPOTRATIO'"` // 期现比例 = 期货头寸总量 / 现货头寸总量
- HEDGEEXPOSUREPL float64 `json:"hedgeexposurepl" xorm:"'HEDGEEXPOSUREPL'"` // 套保敞口损益
- ACCOUNTNAME string `json:"accountname"` // 机构名称
- ENUMDICNAME string `json:"enumdicname"` // 单位名称(套保品种)
- CURRENCYNAME string `json:"currencyname"` // 币种名称
- QueryType int32 `json:"-"` // 查询类型 1-报表 2-报表明细
- BeginDate string `json:"begindate"` // 开始交易日
- EndDate string `json:"enddate"` // 结束交易日
- }
- func (r *Ermcp3ArealSumPL) calc() {
- r.CURRENCYNAME = mtpcache.GetCurrencyName(r.CURRENCYID)
- r.ENUMDICNAME = mtpcache.GetEnumDicitemName(r.GOODSUNITID)
- r.ACCOUNTNAME = mtpcache.GetUserNameByUserId(r.AREAUSERID)
- }
- func (r *Ermcp3ArealSumPL) buildSql() string {
- // 日报表
- if r.QueryType == 1 && r.CYCLETYPE == 0 {
- return r.buildSqlDay()
- }
- // 日报表明细
- if r.QueryType == 2 && r.CYCLETYPE == 0 {
- return r.buildSqlDayDetail()
- }
- return r.buildSqlCycle()
- }
- // buildSqlDay 损益汇总日报表(需要汇总维度)
- func (r *Ermcp3ArealSumPL) buildSqlDay() string {
- var sqlId utils.SQLVal = `
- SELECT t.RECKONDATE,
- t.AREAUSERID,
- t.MIDDLEGOODSID,
- t.CURRENCYID,
- t.SPOTACTUALPL,
- t.SPOTFLOATPL,
- t.FUTUREACTUALPL,
- t.FUTUREFLOATPL,
- t.SUMACTUALPL,
- t.SUMPL,
- to_char(t.UPDATETIME, 'yyyy-mm-dd hh24:mi:ss') UPDATETIME,
- g.middlegoodsname,
- g.middlegoodscode,
- g.goodsunitid,
- t.totalspotqty,
- t.totalfutureqty,
- t.totalneedhedgeqty,
- t.futurespotratio,
- t.hedgeexposurepl
- FROM RECKON_ERMCP_AREASUMPL t
- LEFT JOIN ERMS_MIDDLEGOODS g
- on t.middlegoodsid = g.middlegoodsid
- WHERE 1 = 1
- `
- sqlId.And("t.AREAUSERID", r.AREAUSERID)
- if r.QueryType == 1 {
- sqlId.And("t.RECKONDATE", r.RECKONDATE)
- } else if r.QueryType == 2 {
- sqlId.Join(fmt.Sprintf(" and t.RECKONDATE >= '%v' and t.RECKONDATE <= '%v' ", r.BeginDate, r.EndDate))
- }
- return sqlId.String()
- }
- func (r *Ermcp3ArealSumPL) buildSqlDayDetail() string {
- var sqlId utils.SQLVal = `
- SELECT t.RECKONDATE,
- t.AREAUSERID,
- t.MIDDLEGOODSID,
- t.CURRENCYID,
- t.SPOTACTUALPL,
- t.SPOTFLOATPL,
- t.FUTUREACTUALPL,
- t.FUTUREFLOATPL,
- t.SUMACTUALPL,
- t.SUMPL,
- to_char(t.UPDATETIME, 'yyyy-mm-dd hh24:mi:ss') UPDATETIME,
- g.middlegoodsname,
- g.middlegoodscode,
- g.goodsunitid,
- t.totalspotqty,
- t.totalfutureqty,
- t.totalneedhedgeqty,
- t.futurespotratio,
- t.hedgeexposurepl
- FROM RECKON_ERMCP_AREASUMPL t
- LEFT JOIN ERMS_MIDDLEGOODS g
- on t.middlegoodsid = g.middlegoodsid
- WHERE 1 = 1
- `
- sqlId.And("t.AREAUSERID", r.AREAUSERID)
- sqlId.AndEx("t.RECKONDATE", r.RECKONDATE, len(r.RECKONDATE) > 0)
- if len(r.BeginDate) > 0 && len(r.EndDate) > 0 {
- sqlId.Join(fmt.Sprintf(" and t.RECKONDATE >= '%v' and t.RECKONDATE <= '%v' ", r.BeginDate, r.EndDate))
- }
- sqlId.And("t.CURRENCYID", r.CURRENCYID)
- return sqlId.String()
- }
- func (r *Ermcp3ArealSumPL) buildSqlCycle() string {
- var sqlId utils.SQLVal = `
- SELECT t.CYCLETYPE,
- t.CYCLETIME,
- t.AREAUSERID,
- t.MIDDLEGOODSID,
- t.CURRENCYID,
- t.SPOTACTUALPL,
- t.SPOTFLOATPL,
- t.FUTUREACTUALPL,
- t.FUTUREFLOATPL,
- t.SUMACTUALPL,
- t.SUMPL,
- to_char(t.UPDATETIME, 'yyyy-mm-dd hh24:mi:ss') UPDATETIME,
- g.middlegoodsname,
- g.middlegoodscode,
- g.goodsunitid,
- t.totalspotqty,
- t.totalfutureqty,
- t.totalneedhedgeqty,
- t.futurespotratio,
- t.hedgeexposurepl
- FROM REPORT_ERMCP_AREASUMPL t
- LEFT JOIN ERMS_MIDDLEGOODS g
- on t.middlegoodsid = g.middlegoodsid
- WHERE 1 = 1
- `
- sqlId.And("t.AREAUSERID", r.AREAUSERID)
- sqlId.And("t.cycletype", r.CYCLETYPE)
- sqlId.And("t.cycletime", r.CYCLETIME)
- return sqlId.String()
- }
- // GetDataEx 获取损益汇总表
- func (r *Ermcp3ArealSumPL) GetDataEx() (interface{}, error) {
- sData := make([]Ermcp3ArealSumPL, 0)
- err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
- for i := range sData {
- sData[i].calc()
- sData[i].BeginDate = r.BeginDate
- sData[i].EndDate = r.EndDate
- }
- return sData, err
- }
- // Ermcp3TaFutuReDataReport 期货报表
- type Ermcp3TaFutuReDataReport struct {
- RECKONDATE string `json:"reckondate" xorm:"RECKONDATE"` // 日照时期(yyyyMMdd)
- CYCLETIME string `json:"cycletime" xorm:"CYCLETIME"` // 周期时间 月(YYYYMM) 季(YYYYQ) 年(YYYY) 周(YYYYIW) 全(0)【原值】
- CYCLETYPE int32 `json:"cycletype" xorm:"CYCLETYPE"` // 周期类型 - 1:月 2:季 3:年 4:周 5:全报表【原值】
- ACCOUNTID int64 `json:"accountid" xorm:"ACCOUNTID"` // 交易账户
- GOODSID int32 `json:"goodsid" xorm:"GOODSID"` // 交易合约
- BUYORSELL int32 `json:"buyorsell" xorm:"BUYORSELL"` // 持仓方向
- CURRENCYID int32 `json:"currencyid" xorm:"CURRENCYID"` // 结算币种ID
- USERID int64 `json:"userid" xorm:"USERID"` // 账户所属用户ID
- RELATEDUSERID int64 `json:"relateduserid" xorm:"RELATEDUSERID"` // 账户关联用户ID
- GOODSGROUPID int32 `json:"goodsgroupid" xorm:"GOODSGROUPID"` // 交易品种
- ORIHOLDQTY SFLOAT64 `json:"oriholdqty" xorm:"ORIHOLDQTY"` // 期初持仓量
- ORIOPENAMOUNT float64 `json:"oriopenamount" xorm:"ORIOPENAMOUNT"` // 期初开仓额
- ORIHOLDAMOUNT float64 `json:"oriholdamount" xorm:"ORIHOLDAMOUNT"` // 期初持仓额
- TODAYOPENQTY SFLOAT64 `json:"todayopenqty" xorm:"TODAYOPENQTY"` // 今开仓量
- TODAYOPENAMOUNT float64 `json:"todayopenamount" xorm:"TODAYOPENAMOUNT"` // 今开仓额
- TODAYCLOSEQTY SFLOAT64 `json:"todaycloseqty" xorm:"TODAYCLOSEQTY"` // 今平仓量
- TODAYCLOSEAMOUNT float64 `json:"todaycloseamount" xorm:"TODAYCLOSEAMOUNT"` // 今平仓额
- HOLDQTY SFLOAT64 `json:"holdqty" xorm:"HOLDQTY"` // 期末持仓量
- OPENAMOUNT float64 `json:"openamount" xorm:"OPENAMOUNT"` // 期末开仓额
- HOLDAMOUNT float64 `json:"holdamount" xorm:"HOLDAMOUNT"` // 期末持仓额
- RECKONPRICE float64 `json:"reckonprice" xorm:"RECKONPRICE"` // 结算价
- RECKONHOLDAMOUNT float64 `json:"reckonholdamount" xorm:"RECKONHOLDAMOUNT"` // 结算持仓额
- CHARGE float64 `json:"charge" xorm:"CHARGE"` // 手续费
- CLOSEPL float64 `json:"closepl" xorm:"CLOSEPL"` // 平仓损益
- RECKONPL float64 `json:"reckonpl" xorm:"RECKONPL"` // 结算损益
- LASTPRICE float64 `json:"lastprice" xorm:"LASTPRICE"` // 最新价
- LASTHOLDAMOUNT float64 `json:"lastholdamount" xorm:"LASTHOLDAMOUNT"` // 当前持仓额
- FLOATPL float64 `json:"floatpl" xorm:"FLOATPL"` // 浮动损益
- GOODSGROUPSPOTQTY float64 `json:"goodsgroupspotqty" xorm:"GOODSGROUPSPOTQTY"` // 交易品种期末量 (= 期末持仓量 * 合约乘数)
- TODAYGOODSGROUPSPOTQTY float64 `json:"todaygoodsgroupspotqty" xorm:"TODAYGOODSGROUPSPOTQTY"` // 交易品种变化量 (=(期末持仓量 - 期初持仓量)* 合约乘数)
- MIDDLEGOODSQTY float64 `json:"middlegoodsqty" xorm:"MIDDLEGOODSQTY"` // 套保品种期末量 (=交易品种期末量 * 期货品种折算系数)
- TODAYMIDDLEGOODSQTY float64 `json:"todaymiddlegoodsqty" xorm:"TODAYMIDDLEGOODSQTY"` // 套保品种变化量 (= 交易品种变化量*期货品种折算系数)
- RECKONPL2 float64 `json:"reckonpl2" xorm:"RECKONPL2"` // 结算逐笔盈亏
- OUTERGROUPCODE string `json:"outergroupcode" xorm:"'OUTERGROUPCODE'"` // 交易品种代码
- GOODSGROUPNAME string `json:"goodsgroupname" xorm:"'GOODSGROUPNAME'"` // 交易品种名称
- GOODSCODE string `json:"goodscode" xorm:"'GOODSCODE'"` // 交易合约代码
- GOODSNAME string `json:"goodsname" xorm:"'GOODSNAME'"` // 交易合约名称
- GOODUNITID int32 `json:"goodunitid" xorm:"'GOODUNITID'"` // 交易合约单位id
- AGREEUNIT float64 `json:"agreeunit" xorm:"'AGREEUNIT'"` // 商品合约单位
- QTYDECIMALPLACE int `json:"qtydecimalplace" xorm:"'QTYDECIMALPLACE'"` // 成交量小数位
- ACCOUNTNAME string `json:"accountname" xorm:"'ACCOUNTNAME'"` // 交易账号名称
- MIDDLEGOODSID int32 `json:"middlegoodsid" xorm:"'MIDDLEGOODSID'"` // 套保品种id
- MIDDLEGOODSNAME string `json:"middlegoodsname" xorm:"'MIDDLEGOODSNAME'"` // 套保商品名称
- MIDDLEGOODSCODE string `json:"middlgoodscode" xorm:"'MIDDLEGOODSCODE'"` // 套保商品代码
- OPENAVGPRICE SFLOAT64 `json:"openavgprice"` // 开仓均价
- CLOSEAVGPRICE SFLOAT64 `json:"closeavgprice"` // 平仓均价
- ENUMDICNAME string `json:"enumdicname"` // 单位名称
- CURRENCYNAME string `json:"currencyname"` // 币种名称
- QueryType int32 `json:"-"` // 查询类型 1-报表 2-报表明细
- BeginDate string `json:"begindate"` // 开始交易日
- EndDate string `json:"enddate"` // 结束交易日
- }
- func (r *Ermcp3TaFutuReDataReport) calc() {
- if r.TODAYOPENQTY != 0 && r.AGREEUNIT > 1e-8 {
- r.TODAYOPENQTY.Power10(r.QTYDECIMALPLACE * -1)
- r.OPENAVGPRICE = SFLOAT64(r.TODAYOPENAMOUNT / r.TODAYOPENQTY.Float64() / r.AGREEUNIT)
- r.OPENAVGPRICE.Round(3)
- }
- if r.TODAYCLOSEQTY != 0 && r.AGREEUNIT > 1e-8 {
- r.TODAYCLOSEQTY.Power10(r.QTYDECIMALPLACE * -1)
- r.CLOSEAVGPRICE = SFLOAT64(r.TODAYCLOSEAMOUNT / r.TODAYCLOSEQTY.Float64() / r.AGREEUNIT)
- r.CLOSEAVGPRICE.Round(3)
- }
- r.HOLDQTY.Power10(r.QTYDECIMALPLACE * -1)
- r.ORIHOLDQTY.Power10(r.QTYDECIMALPLACE * -1)
- r.ENUMDICNAME = mtpcache.GetEnumDicitemName(r.GOODUNITID)
- r.CURRENCYNAME = mtpcache.GetCurrencyName(r.CURRENCYID)
- }
- func (r *Ermcp3TaFutuReDataReport) userType() int32 {
- var userType int32 = 2
- areaUserId := mtpcache.GetAreaUserId(r.USERID, 0)
- if areaUserId == r.USERID {
- userType = 2
- } else {
- userType = 7
- }
- return userType
- }
- func (r *Ermcp3TaFutuReDataReport) buildSql() string {
- userType := r.userType()
- // 日报表
- if r.QueryType == 1 && r.CYCLETYPE == 0 {
- return r.buildSqlReckon(userType)
- }
- // 日报表明细
- if r.QueryType == 2 && r.CYCLETYPE == 0 {
- return r.buildSqlReckonDetail(userType)
- }
- return r.buildSqlReport(userType)
- }
- // buildSqlReckon 日照表
- func (r *Ermcp3TaFutuReDataReport) buildSqlReckon(userType int32) string {
- var sqlId utils.SQLVal = "select a.*," +
- " gp.outergroupcode," +
- " gp.goodsgroupname," +
- " g.goodscode," +
- " g.goodsname," +
- " g.goodunitid," +
- " g.agreeunit," +
- " g.qtydecimalplace," +
- " mg.middlegoodsid," +
- " mg.middlegoodscode," +
- " mg.middlegoodsname" +
- " from (SELECT t.RECKONDATE," +
- " t.GOODSID," +
- " t.BUYORSELL," +
- " t.CURRENCYID," +
- " t.%v USERID," +
- " t.GOODSGROUPID," +
- " t.middlegoodsid," +
- " sum(t.ORIHOLDQTY) ORIHOLDQTY," +
- " sum(t.ORIOPENAMOUNT) ORIOPENAMOUNT," +
- " sum(t.ORIHOLDAMOUNT) ORIHOLDAMOUNT," +
- " sum(t.TODAYOPENQTY) TODAYOPENQTY," +
- " sum(t.TODAYOPENAMOUNT) TODAYOPENAMOUNT," +
- " sum(t.TODAYCLOSEQTY) TODAYCLOSEQTY," +
- " sum(t.TODAYCLOSEAMOUNT) TODAYCLOSEAMOUNT," +
- " sum(t.HOLDQTY) HOLDQTY," +
- " sum(t.OPENAMOUNT) OPENAMOUNT," +
- " sum(t.HOLDAMOUNT) HOLDAMOUNT," +
- " sum(t.RECKONPRICE) RECKONPRICE," +
- " sum(t.RECKONHOLDAMOUNT) RECKONHOLDAMOUNT," +
- " sum(t.CHARGE) CHARGE," +
- " sum(t.CLOSEPL) CLOSEPL," +
- " sum(t.RECKONPL) RECKONPL," +
- " max(t.LASTPRICE) LASTPRICE," +
- " sum(t.LASTHOLDAMOUNT) LASTHOLDAMOUNT," +
- " sum(t.FLOATPL) FLOATPL," +
- " sum(t.GOODSGROUPSPOTQTY) GOODSGROUPSPOTQTY," +
- " sum(t.TODAYGOODSGROUPSPOTQTY) TODAYGOODSGROUPSPOTQTY," +
- " sum(t.MIDDLEGOODSQTY) MIDDLEGOODSQTY," +
- " sum(t.TODAYMIDDLEGOODSQTY) TODAYMIDDLEGOODSQTY," +
- " sum(t.Reckonpl2) RECKONPL2" +
- " FROM RECKON_ERMCP_TAFUTUREDATA t" +
- " WHERE 1 = 1 %v" +
- " GROUP BY t.RECKONDATE," +
- " t.GOODSID," +
- " t.BUYORSELL," +
- " t.CURRENCYID," +
- " t.%v," +
- " t.middlegoodsid," +
- " t.GOODSGROUPID) a" +
- " left join goodsgroup gp" +
- " on a.goodsgroupid = gp.goodsgroupid" +
- " left join goods g" +
- " on a.goodsid = g.goodsid" +
- " left join erms_middlegoods mg on a.middlegoodsid=mg.middlegoodsid"
- userId := "USERID"
- var sqlParam utils.SQLVal
- if userType == 2 {
- sqlParam.AndEx("t.userid", r.USERID, userType == 2)
- userId = "USERID"
- } else if userType == 7 {
- sqlParam.AndEx("t.relateduserid", r.USERID, userType == 7)
- userId = "RELATEDUSERID"
- }
- sqlParam.AndEx("t.reckondate", r.RECKONDATE, len(r.RECKONDATE) > 0)
- if len(r.BeginDate) > 0 && len(r.EndDate) > 0 {
- sqlParam.Join(fmt.Sprintf(" and t.RECKONDATE >= '%v' and t.RECKONDATE <= '%v' ", r.BeginDate, r.EndDate))
- }
- sqlId.FormatParam(userId, sqlParam.String(), userId)
- return sqlId.String()
- }
- // buildSqlReckon 日照表明细
- func (r *Ermcp3TaFutuReDataReport) buildSqlReckonDetail(userType int32) string {
- var sqlId utils.SQLVal = "select a.*," +
- " gp.outergroupcode," +
- " gp.goodsgroupname," +
- " g.goodscode," +
- " g.goodsname," +
- " g.goodunitid," +
- " g.agreeunit," +
- " g.qtydecimalplace," +
- " ta.accountname," +
- " mg.middlegoodsid," +
- " mg.middlegoodscode," +
- " mg.middlegoodsname" +
- " from (SELECT t.reckondate," +
- " t.GOODSID," +
- " t.BUYORSELL," +
- " t.CURRENCYID," +
- " t.%v USERID," +
- " t.accountid," +
- " t.GOODSGROUPID," +
- " t.middlegoodsid," +
- " sum(t.ORIHOLDQTY) ORIHOLDQTY," +
- " sum(t.ORIOPENAMOUNT) ORIOPENAMOUNT," +
- " sum(t.ORIHOLDAMOUNT) ORIHOLDAMOUNT," +
- " sum(t.TODAYOPENQTY) TODAYOPENQTY," +
- " sum(t.TODAYOPENAMOUNT) TODAYOPENAMOUNT," +
- " sum(t.TODAYCLOSEQTY) TODAYCLOSEQTY," +
- " sum(t.TODAYCLOSEAMOUNT) TODAYCLOSEAMOUNT," +
- " sum(t.HOLDQTY) HOLDQTY," +
- " sum(t.OPENAMOUNT) OPENAMOUNT," +
- " sum(t.HOLDAMOUNT) HOLDAMOUNT," +
- " sum(t.RECKONPRICE) RECKONPRICE," +
- " sum(t.RECKONHOLDAMOUNT) RECKONHOLDAMOUNT," +
- " sum(t.CHARGE) CHARGE," +
- " sum(t.CLOSEPL) CLOSEPL," +
- " sum(t.RECKONPL) RECKONPL," +
- " max(t.LASTPRICE) LASTPRICE," +
- " sum(t.LASTHOLDAMOUNT) LASTHOLDAMOUNT," +
- " sum(t.FLOATPL) FLOATPL," +
- " sum(t.GOODSGROUPSPOTQTY) GOODSGROUPSPOTQTY," +
- " sum(t.TODAYGOODSGROUPSPOTQTY) TODAYGOODSGROUPSPOTQTY," +
- " sum(t.MIDDLEGOODSQTY) MIDDLEGOODSQTY," +
- " sum(t.TODAYMIDDLEGOODSQTY) TODAYMIDDLEGOODSQTY," +
- " sum(t.Reckonpl2) RECKONPL2" +
- " FROM RECKON_ERMCP_TAFUTUREDATA t" +
- " WHERE 1 = 1 %v" +
- " GROUP BY t.reckondate," +
- " t.GOODSID," +
- " t.BUYORSELL," +
- " t.CURRENCYID," +
- " t.%v," +
- " t.accountid," +
- " t.middlegoodsid," +
- " t.GOODSGROUPID) a" +
- " left join goodsgroup gp" +
- " on a.goodsgroupid = gp.goodsgroupid" +
- " left join goods g" +
- " on a.goodsid = g.goodsid" +
- " left join taaccount ta on a.accountid = ta.accountid" +
- " left join erms_middlegoods mg on a.middlegoodsid=mg.middlegoodsid"
- userId := "USERID"
- var sqlParam utils.SQLVal
- if userType == 2 {
- sqlParam.AndEx("t.userid", r.USERID, userType == 2)
- userId = "USERID"
- } else if userType == 7 {
- sqlParam.AndEx("t.relateduserid", r.USERID, userType == 7)
- userId = "RELATEDUSERID"
- }
- sqlParam.And("t.CURRENCYID", r.CURRENCYID)
- sqlParam.And("t.GOODSGROUPID", r.GOODSGROUPID)
- sqlParam.And("t.GOODSID", r.GOODSID)
- sqlParam.And("t.BUYORSELL", r.BUYORSELL)
- sqlParam.AndEx("t.reckondate", r.RECKONDATE, len(r.RECKONDATE) > 0)
- if len(r.BeginDate) > 0 && len(r.EndDate) > 0 {
- sqlParam.Join(fmt.Sprintf(" and t.RECKONDATE >= '%v' and t.RECKONDATE <= '%v' ", r.BeginDate, r.EndDate))
- }
- sqlId.FormatParam(userId, sqlParam.String(), userId)
- return sqlId.String()
- }
- // buildSqlReckon 报表表
- func (r *Ermcp3TaFutuReDataReport) buildSqlReport(userType int32) string {
- var sqlId utils.SQLVal = "select a.*," +
- " gp.outergroupcode," +
- " gp.goodsgroupname," +
- " g.goodscode," +
- " g.goodsname," +
- " g.goodunitid," +
- " g.agreeunit," +
- " g.qtydecimalplace," +
- " mg.middlegoodsid," +
- " mg.middlegoodscode," +
- " mg.middlegoodsname" +
- " from (SELECT t.cycletype," +
- " t.cycletime," +
- " t.GOODSID," +
- " t.BUYORSELL," +
- " t.CURRENCYID," +
- " t.%v USERID," +
- " t.GOODSGROUPID," +
- " t.middlegoodsid," +
- " sum(t.ORIHOLDQTY) ORIHOLDQTY," +
- " sum(t.ORIOPENAMOUNT) ORIOPENAMOUNT," +
- " sum(t.ORIHOLDAMOUNT) ORIHOLDAMOUNT," +
- " sum(t.TODAYOPENQTY) TODAYOPENQTY," +
- " sum(t.TODAYOPENAMOUNT) TODAYOPENAMOUNT," +
- " sum(t.TODAYCLOSEQTY) TODAYCLOSEQTY," +
- " sum(t.TODAYCLOSEAMOUNT) TODAYCLOSEAMOUNT," +
- " sum(t.HOLDQTY) HOLDQTY," +
- " sum(t.OPENAMOUNT) OPENAMOUNT," +
- " sum(t.HOLDAMOUNT) HOLDAMOUNT," +
- " sum(t.RECKONPRICE) RECKONPRICE," +
- " sum(t.RECKONHOLDAMOUNT) RECKONHOLDAMOUNT," +
- " sum(t.CHARGE) CHARGE," +
- " sum(t.CLOSEPL) CLOSEPL," +
- " sum(t.RECKONPL) RECKONPL," +
- " max(t.LASTPRICE) LASTPRICE," +
- " sum(t.LASTHOLDAMOUNT) LASTHOLDAMOUNT," +
- " sum(t.FLOATPL) FLOATPL," +
- " sum(t.GOODSGROUPSPOTQTY) GOODSGROUPSPOTQTY," +
- " sum(t.TODAYGOODSGROUPSPOTQTY) TODAYGOODSGROUPSPOTQTY," +
- " sum(t.MIDDLEGOODSQTY) MIDDLEGOODSQTY," +
- " sum(t.TODAYMIDDLEGOODSQTY) TODAYMIDDLEGOODSQTY," +
- " sum(t.Reckonpl2) RECKONPL2" +
- " FROM REPORT_ERMCP_TAFUTUREDATA t" +
- " WHERE 1 = 1 %v" +
- " GROUP BY t.cycletype," +
- " t.cycletime," +
- " t.GOODSID," +
- " t.BUYORSELL," +
- " t.CURRENCYID," +
- " t.%v," +
- " t.middlegoodsid," +
- " t.GOODSGROUPID) a" +
- " left join goodsgroup gp" +
- " on a.goodsgroupid = gp.goodsgroupid" +
- " left join goods g" +
- " on a.goodsid = g.goodsid" +
- " left join erms_middlegoods mg on a.middlegoodsid=mg.middlegoodsid"
- userId := "USERID"
- var sqlParam utils.SQLVal
- if userType == 2 {
- sqlParam.AndEx("t.userid", r.USERID, userType == 2)
- userId = "USERID"
- } else if userType == 7 {
- sqlParam.AndEx("t.relateduserid", r.USERID, userType == 7)
- userId = "RELATEDUSERID"
- }
- sqlParam.And("t.cycletype", r.CYCLETYPE)
- sqlParam.And("t.cycletime", r.CYCLETIME)
- sqlId.FormatParam(userId, sqlParam.String(), userId)
- return sqlId.String()
- }
- // GetDataEx 获取期货报表
- func (r *Ermcp3TaFutuReDataReport) GetDataEx() (interface{}, error) {
- sData := make([]Ermcp3TaFutuReDataReport, 0)
- err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
- for i := range sData {
- sData[i].calc()
- sData[i].BeginDate = r.BeginDate
- sData[i].EndDate = r.EndDate
- }
- return sData, err
- }
- // ReckonDayPosition 持仓头寸日照
- type ReckonDayPosition struct {
- ACCOUNTID int64 `json:"accountid" xorm:"ACCOUNTID"` // 账号Id
- GOODSID int32 `json:"goodsid" xorm:"GOODSID"` // 商品Id
- RECKONDATE string `json:"reckondate" xorm:"RECKONDATE"` // 日照日期(yyyyMMdd)
- BUYPOSITIONQTY int32 `json:"buypositionqty" xorm:"BUYPOSITIONQTY"` // 买期初持仓数量
- BUYHOLDERAMOUNT float64 `json:"buyholderamount" xorm:"BUYHOLDERAMOUNT"` // 买持仓期初总金额
- BUYCURPOSITIONQTY int32 `json:"buycurpositionqty" xorm:"BUYCURPOSITIONQTY"` // 买当前持仓总数量
- BUYCURHOLDERAMOUNT float64 `json:"buycurholderamount" xorm:"BUYCURHOLDERAMOUNT"` // 买当前持仓总金额
- BUYFROZENQTY int32 `json:"buyfrozenqty" xorm:"BUYFROZENQTY"` // 买持仓冻结
- BUYOTHERFROZENQTY int32 `json:"buyotherfrozenqty" xorm:"BUYOTHERFROZENQTY"` // 买持仓其他冻结(交割冻结)
- BUYOPENREQQTY int32 `json:"buyopenreqqty" xorm:"BUYOPENREQQTY"` // 买开仓申请数量
- BUYRECKONPL float64 `json:"buyreckonpl" xorm:"BUYRECKONPL"` // 买结算盈亏
- BUYINTEREST float64 `json:"buyinterest" xorm:"BUYINTEREST"` // 买递延费(仓储费)
- BUYUSEDMARGIN float64 `json:"buyusedmargin" xorm:"BUYUSEDMARGIN"` // 占用保证金
- BUYOPENTOTALQTY int32 `json:"buyopentotalqty" xorm:"BUYOPENTOTALQTY"` // 今日买开仓总数量
- BUYCLOSETOTALQTY int32 `json:"buyclosetotalqty" xorm:"BUYCLOSETOTALQTY"` // 今日买平仓总数量
- BUYCLOSETOTALPL float64 `json:"buyclosetotalpl" xorm:"BUYCLOSETOTALPL"` // 买平仓总盈亏
- SELLPOSITIONQTY int32 `json:"sellpositionqty" xorm:"SELLPOSITIONQTY"` // 卖期初持仓数量
- SELLHOLDERAMOUNT float64 `json:"sellholderamount" xorm:"SELLHOLDERAMOUNT"` // 卖持仓期初总金额
- SELLCURPOSITIONQTY int32 `json:"sellcurpositionqty" xorm:"SELLCURPOSITIONQTY"` // 卖当前持仓数量
- SELLCURHOLDERAMOUNT float64 `json:"sellcurholderamount" xorm:"SELLCURHOLDERAMOUNT"` // 卖当前持仓总金额
- SELLFROZENQTY int32 `json:"sellfrozenqty" xorm:"SELLFROZENQTY"` // 卖持仓冻结
- SELLOTHERFROZENQTY int32 `json:"sellotherfrozenqty" xorm:"SELLOTHERFROZENQTY"` // 卖持仓其他冻结(交割冻结)
- SELLOPENREQQTY int32 `json:"sellopenreqqty" xorm:"SELLOPENREQQTY"` // 卖开仓申请数量
- SELLRECKONPL float64 `json:"sellreckonpl" xorm:"SELLRECKONPL"` // 卖结算盈亏
- SELLINTEREST float64 `json:"sellinterest" xorm:"SELLINTEREST"` // 卖递延费
- SELLUSEDMARGIN float64 `json:"sellusedmargin" xorm:"SELLUSEDMARGIN"` // 卖占用保证金-作废
- SELLOPENTOTALQTY int32 `json:"sellopentotalqty" xorm:"SELLOPENTOTALQTY"` // 卖开仓总数量
- SELLCLOSETOTALQTY int32 `json:"sellclosetotalqty" xorm:"SELLCLOSETOTALQTY"` // 卖平仓总数量
- SELLCLOSETOTALPL float64 `json:"sellclosetotalpl" xorm:"SELLCLOSETOTALPL"` // 卖平仓总盈亏
- TRADEPROPERTY int32 `json:"tradeproperty" xorm:"TRADEPROPERTY"` // 交易属性
- MARGINALGORITHM int32 `json:"marginalgorithm" xorm:"MARGINALGORITHM"` // 保证金收取方式 - 1:比率 2:固定
- MARGINVALUE float64 `json:"marginvalue" xorm:"MARGINVALUE"` // 保证金设置值(投资管理系统-多LongMarginValue)
- BUYFEEALGORITHM int32 `json:"buyfeealgorithm" xorm:"BUYFEEALGORITHM"` // 买递延费收取方式 - 1:比率 2:固定
- BUYMEMBERFEEVALUE float64 `json:"buymemberfeevalue" xorm:"BUYMEMBERFEEVALUE"` // 买会员递延费设置值
- BUYEXCHAGEFEEVALUE float64 `json:"buyexchagefeevalue" xorm:"BUYEXCHAGEFEEVALUE"` // 买交易所递延费设置值
- SELLFEEALGORITHM int32 `json:"sellfeealgorithm" xorm:"SELLFEEALGORITHM"` // 卖递延费收取方式 - 1:比率 2:固定
- SELLMEMBERFEEVALUE float64 `json:"sellmemberfeevalue" xorm:"SELLMEMBERFEEVALUE"` // 卖会员递延费设置值
- SELLEXCHAGEFEEVALUE float64 `json:"sellexchagefeevalue" xorm:"SELLEXCHAGEFEEVALUE"` // 卖交易所递延费设置值
- INTEREST2 float64 `json:"interest2" xorm:"INTEREST2"` // 过夜费
- ACCOUNTCURRENCYID int32 `json:"accountcurrencyid" xorm:"ACCOUNTCURRENCYID"` // 账户币种ID
- GOODSCURRENCYID int32 `json:"goodscurrencyid" xorm:"GOODSCURRENCYID"` // 商品币种ID
- CUREXCHANGERATE float64 `json:"curexchangerate" xorm:"CUREXCHANGERATE"` // 当前汇率
- BUYRECKONPL2 float64 `json:"buyreckonpl2" xorm:"BUYRECKONPL2"` // 买结算盈亏(逐笔) - 根据持仓单日照表字段汇率
- SELLRECKONPL2 float64 `json:"sellreckonpl2" xorm:"SELLRECKONPL2"` // 结算盈亏(逐笔) - 根据持仓单日照表字段汇率
- BUYCURTDPOSITION int32 `json:"buycurtdposition" xorm:"BUYCURTDPOSITION"` // 买期末今日头寸
- BUYFRETDPOSITION int32 `json:"buyfretdposition" xorm:"BUYFRETDPOSITION"` // 买冻结今日头寸
- SELLCURTDPOSITION int32 `json:"sellcurtdposition" xorm:"SELLCURTDPOSITION"` // 卖期末今日头寸
- SELLFRETDPOSITION int32 `json:"sellfretdposition" xorm:"SELLFRETDPOSITION"` // 卖冻结今日头寸
- INTERESTCHARGE float64 `json:"interestcharge" xorm:"INTERESTCHARGE"` // 利息(110)
- SHORTMARGINVALUE float64 `json:"shortmarginvalue" xorm:"SHORTMARGINVALUE"` // 保证金设置值(投资管理系统-空)
- BUYDEFERCHARGE float64 `json:"buydefercharge" xorm:"BUYDEFERCHARGE"` // 买递延费2(仓储费2)
- SELLDEFERCHARGE float64 `json:"selldefercharge" xorm:"SELLDEFERCHARGE"` // 卖递延费2
- RELATEDUSERID int64 `json:"relateduserid" xorm:"'RELATEDUSERID'"` // 关联用户id
- MIDDLEGOODSID int32 `json:"middlegoodsid" xorm:"'MIDDLEGOODSID'"` // 套保商品id
- MIDDLEGOODSCODE string `json:"middlegoodscode" xorm:"'MIDDLEGOODSCODE'"` // 套保商品代码
- MIDDLEGOODSNAME string `json:"middlegoodsname" xorm:"'MIDDLEGOODSNAME'"` // 套保商品名称
- NEEDHEDGERATIO float64 `json:"needhedgeratio" xorm:"'NEEDHEDGERATIO'"` // 应套保比例
- NEEDARBITRAGERATIO float64 `json:"needarbitrageratio" xorm:"'NEEDARBITRAGERATIO'"` // 应套利比例
- GOODSGROUPID int32 `json:"goodsgroupid" xorm:"'GOODSGROUPID'"` // 交易品种id
- CONVERTRATIO float64 `json:"convertratio" xorm:"'CONVERTRATIO'"` // 折算系数
- GOODSCODE string `json:"goodscode" xorm:"'GOODSCODE'"` // 交易商品代码
- GOODSNAME string `json:"goodsname" xorm:"'GOODSNAME'"` // 交易商品名称
- GOODUNITID int32 `json:"goodunitid" xorm:"'GOODUNITID'"` // 交易商品单位id
- AGREEUNIT float64 `json:"agreeunit" xorm:"'AGREEUNIT'"` // 合约乘数
- ENUMDICNAME string `json:"enumdicname"` // 单位名称(交易商品)
- ACCOUNTNAME string `json:"accountname" xorm:"'ACCOUNTNAME'"` // 交易账户
- DiffBuyQty float64 `json:"diffbuyqty"` // 交易品种今变化量(买)
- DiffMgBuyQty float64 `json:"diffmgbuyqty"` // 套保品种今变化量(买)
- DiffNeedMgBuyQty float64 `json:"diffneedmgbuyqty"` // 应套保总量变化量(买)
- DiffSellQty float64 `json:"diffsellqty"` // 交易品种今变化量(卖)
- DiffMgSellQty float64 `json:"diffmgsellqty"` // 套保品种今变化量(卖)
- DiffNeedMgSellQty float64 `json:"diffneedmgsellqty"` // 应套保总量变化量(卖)
- BeginDate string `json:"begindate"` // 开始交易日
- EndDate string `json:"enddate"` // 结束交易日
- }
- func (r *ReckonDayPosition) calc() {
- r.ENUMDICNAME = mtpcache.GetEnumDicitemName(r.GOODUNITID)
- if r.BUYPOSITIONQTY > 0 || r.BUYCURPOSITIONQTY > 0 {
- r.DiffBuyQty = float64(r.BUYCURPOSITIONQTY) * r.AGREEUNIT
- r.DiffMgBuyQty = float64(r.BUYCURPOSITIONQTY) * r.AGREEUNIT * r.CONVERTRATIO
- r.DiffNeedMgBuyQty = float64(r.BUYCURPOSITIONQTY) * r.AGREEUNIT * r.CONVERTRATIO * r.NEEDHEDGERATIO
- }
- if r.SELLPOSITIONQTY > 0 || r.SELLCURPOSITIONQTY > 0 {
- r.DiffBuyQty = float64(r.SELLCURPOSITIONQTY) * r.AGREEUNIT
- r.DiffMgBuyQty = float64(r.SELLCURPOSITIONQTY) * r.AGREEUNIT * r.CONVERTRATIO
- r.DiffNeedMgBuyQty = float64(r.SELLCURPOSITIONQTY) * r.AGREEUNIT * r.CONVERTRATIO * r.NEEDHEDGERATIO
- }
- }
- func (r *ReckonDayPosition) buildSql() string {
- var sqlId utils.SQLVal = "with tmp as" +
- " (select t.middlegoodsid," +
- " t.middlegoodscode," +
- " t.middlegoodsname," +
- " t.needhedgeratio," +
- " t.needarbitrageratio," +
- " t.goodsgroupid," +
- " c.convertratio," +
- " g.goodsid," +
- " g.goodscode," +
- " g.goodsname," +
- " g.agreeunit," +
- " g.goodunitid" +
- " from erms_middlegoods t" +
- " inner join ermcp_ggconvertconfig c" +
- " on t.goodsgroupid = c.destgoodsgroupid" +
- " inner join goods g" +
- " on g.goodsgroupid = c.srcgoodsgroupid)" +
- "SELECT t.ACCOUNTID," +
- " t.GOODSID," +
- " t.RECKONDATE," +
- " t.BUYPOSITIONQTY," +
- " t.BUYHOLDERAMOUNT," +
- " t.BUYCURPOSITIONQTY," +
- " t.BUYCURHOLDERAMOUNT," +
- " t.BUYFROZENQTY," +
- " t.BUYOTHERFROZENQTY," +
- " t.BUYOPENREQQTY," +
- " t.BUYRECKONPL," +
- " t.BUYINTEREST," +
- " t.BUYUSEDMARGIN," +
- " t.BUYOPENTOTALQTY," +
- " t.BUYCLOSETOTALQTY," +
- " t.BUYCLOSETOTALPL," +
- " t.SELLPOSITIONQTY," +
- " t.SELLHOLDERAMOUNT," +
- " t.SELLCURPOSITIONQTY," +
- " t.SELLCURHOLDERAMOUNT," +
- " t.SELLFROZENQTY," +
- " t.SELLOTHERFROZENQTY," +
- " t.SELLOPENREQQTY," +
- " t.SELLRECKONPL," +
- " t.SELLINTEREST," +
- " t.SELLUSEDMARGIN," +
- " t.SELLOPENTOTALQTY," +
- " t.SELLCLOSETOTALQTY," +
- " t.SELLCLOSETOTALPL," +
- " t.TRADEPROPERTY," +
- " t.MARGINALGORITHM," +
- " t.MARGINVALUE," +
- " t.BUYFEEALGORITHM," +
- " t.BUYMEMBERFEEVALUE," +
- " t.BUYEXCHAGEFEEVALUE," +
- " t.SELLFEEALGORITHM," +
- " t.SELLMEMBERFEEVALUE," +
- " t.SELLEXCHAGEFEEVALUE," +
- " t.INTEREST2," +
- " t.ACCOUNTCURRENCYID," +
- " t.GOODSCURRENCYID," +
- " t.CUREXCHANGERATE," +
- " t.BUYRECKONPL2," +
- " t.SELLRECKONPL2," +
- " t.BUYCURTDPOSITION," +
- " t.BUYFRETDPOSITION," +
- " t.SELLCURTDPOSITION," +
- " t.SELLFRETDPOSITION," +
- " t.INTERESTCHARGE," +
- " t.SHORTMARGINVALUE," +
- " t.BUYDEFERCHARGE," +
- " t.SELLDEFERCHARGE," +
- " ta.relateduserid," +
- " ta.accountname," +
- " tmp.*" +
- " FROM RECKON_DAYPOSITION t" +
- " INNER JOIN tmp" +
- " on t.goodsid = tmp.goodsid" +
- " INNER JOIN TAACCOUNT ta" +
- " on t.accountid = ta.accountid" +
- " WHERE 1 = 1" +
- " and (t.buypositionqty > 0 or t.buycurpositionqty > 0 or t.SELLPOSITIONQTY > 0 or t.SELLCURPOSITIONQTY > 0)"
- sqlId.And("ta.RELATEDUSERID", r.RELATEDUSERID)
- sqlId.And("tmp.MIDDLEGOODSID", r.MIDDLEGOODSID)
- sqlId.AndEx("t.RECKONDATE", r.RECKONDATE, len(r.RECKONDATE) > 0)
- if len(r.BeginDate) > 0 && len(r.EndDate) > 0 {
- sqlId.Join(fmt.Sprintf(" and t.RECKONDATE >= '%v' and t.RECKONDATE <= '%v' ", r.BeginDate, r.EndDate))
- }
- return sqlId.String()
- }
- // GetDataEx 获取持仓头寸日照
- func (r *ReckonDayPosition) GetDataEx() ([]ReckonDayPosition, error) {
- sData := make([]ReckonDayPosition, 0)
- err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
- for i := range sData {
- sData[i].calc()
- }
- return sData, err
- }
- // HISOUTTRADEPOSITION 外部头寸日照
- type HISOUTTRADEPOSITION struct {
- HISTRADEDATE string `json:"histradedate" xorm:"'HISTRADEDATE'"` // 日期
- ISVALIDDATA int32 `json:"isvaliddata" xorm:"'ISVALIDDATA'"` // 是否有效
- ACCOUNTID int64 `json:"accountid" xorm:"ACCOUNTID"` // 资金账号[外部母账户]
- HEDGEGOODSID int32 `json:"hedgegoodsid" xorm:"HEDGEGOODSID"` // 对冲合约ID
- HEDGEACCOUNTCODE string `json:"hedgeaccountcode" xorm:"HEDGEACCOUNTCODE"` // 对冲账号
- TRADEDATE string `json:"tradedate" xorm:"TRADEDATE"` // 交易日(yyyyMMdd)
- MARKETID int32 `json:"marketid" xorm:"MARKETID"` // 市场ID
- YDBUYPOSITION int32 `json:"ydbuyposition" xorm:"YDBUYPOSITION"` // 期初买头寸
- CURBUYPOSITION int32 `json:"curbuyposition" xorm:"CURBUYPOSITION"` // 期末买头寸
- CURYDBUYPOSITION int32 `json:"curydbuyposition" xorm:"CURYDBUYPOSITION"` // 期末上日买头寸
- CURTDBUYPOSITION int32 `json:"curtdbuyposition" xorm:"CURTDBUYPOSITION"` // 期末今日买头寸
- FREYDBUYPOSITION int32 `json:"freydbuyposition" xorm:"FREYDBUYPOSITION"` // 冻结上日买头寸
- FRETDBUYPOSITION int32 `json:"fretdbuyposition" xorm:"FRETDBUYPOSITION"` // 冻结今日买头寸
- YDSELLPOSITION int32 `json:"ydsellposition" xorm:"YDSELLPOSITION"` // 期初卖头寸
- CURSELLPOSITION int32 `json:"cursellposition" xorm:"CURSELLPOSITION"` // 期末卖头寸
- CURYDSELLPOSITION int32 `json:"curydsellposition" xorm:"CURYDSELLPOSITION"` // 期末上日卖头寸
- CURTDSELLPOSITION int32 `json:"curtdsellposition" xorm:"CURTDSELLPOSITION"` // 期末今日卖头寸
- FREYDSELLPOSITION int32 `json:"freydsellposition" xorm:"FREYDSELLPOSITION"` // 冻结上日卖头寸
- FRETDSELLPOSITION int32 `json:"fretdsellposition" xorm:"FRETDSELLPOSITION"` // 冻结今日卖头寸
- BUYOPENCOST float64 `json:"buyopencost" xorm:"BUYOPENCOST"` // 买开仓成本
- BUYPOSITIONCOST float64 `json:"buypositioncost" xorm:"BUYPOSITIONCOST"` // 买持仓成本
- BUYUSEMARGIN float64 `json:"buyusemargin" xorm:"BUYUSEMARGIN"` // 买占用保证金
- SELLOPENCOST float64 `json:"sellopencost" xorm:"SELLOPENCOST"` // 卖开仓成本
- SELLPOSITIONCOST float64 `json:"sellpositioncost" xorm:"SELLPOSITIONCOST"` // 卖持仓成本
- SELLUSEMARGIN float64 `json:"sellusemargin" xorm:"SELLUSEMARGIN"` // 卖占用保证金
- RELATEDUSERID int64 `json:"relateduserid" xorm:"'RELATEDUSERID'"` // 关联用户id
- MIDDLEGOODSID int32 `json:"middlegoodsid" xorm:"'MIDDLEGOODSID'"` // 套保商品id
- MIDDLEGOODSCODE string `json:"middlegoodscode" xorm:"'MIDDLEGOODSCODE'"` // 套保商品代码
- MIDDLEGOODSNAME string `json:"middlegoodsname" xorm:"'MIDDLEGOODSNAME'"` // 套保商品名称
- NEEDHEDGERATIO float64 `json:"needhedgeratio" xorm:"'NEEDHEDGERATIO'"` // 应套保比例
- NEEDARBITRAGERATIO float64 `json:"needarbitrageratio" xorm:"'NEEDARBITRAGERATIO'"` // 应套利比例
- GOODSGROUPID int32 `json:"goodsgroupid" xorm:"'GOODSGROUPID'"` // 交易品种id
- CONVERTRATIO float64 `json:"convertratio" xorm:"'CONVERTRATIO'"` // 折算系数
- GOODSCODE string `json:"goodscode" xorm:"'GOODSCODE'"` // 交易商品代码
- GOODSNAME string `json:"goodsname" xorm:"'GOODSNAME'"` // 交易商品名称
- GOODUNITID int32 `json:"goodunitid" xorm:"'GOODUNITID'"` // 交易商品单位id
- AGREEUNIT float64 `json:"agreeunit" xorm:"'AGREEUNIT'"` // 合约乘数
- ENUMDICNAME string `json:"enumdicname"` // 单位名称(交易商品)
- ACCOUNTNAME string `json:"accountname" xorm:"'ACCOUNTNAME'"` // 交易账户
- DiffBuyQty float64 `json:"diffbuyqty"` // 交易品种今变化量(买)
- DiffMgBuyQty float64 `json:"diffmgbuyqty"` // 套保品种今变化量(买)
- DiffNeedMgBuyQty float64 `json:"diffneedmgbuyqty"` // 应套保总量变化量(买)
- DiffSellQty float64 `json:"diffsellqty"` // 交易品种今变化量(卖)
- DiffMgSellQty float64 `json:"diffmgsellqty"` // 套保品种今变化量(卖)
- DiffNeedMgSellQty float64 `json:"diffneedmgsellqty"` // 应套保总量变化量(卖)
- BeginDate string `json:"begindate"` // 开始交易日
- EndDate string `json:"enddate"` // 结束交易日
- }
- func (r *HISOUTTRADEPOSITION) calc() {
- r.ENUMDICNAME = mtpcache.GetEnumDicitemName(r.GOODUNITID)
- if r.YDBUYPOSITION > 0 || r.CURBUYPOSITION > 0 {
- r.DiffBuyQty = float64(r.CURBUYPOSITION) * r.AGREEUNIT
- r.DiffMgBuyQty = float64(r.CURBUYPOSITION) * r.AGREEUNIT * r.CONVERTRATIO
- r.DiffNeedMgBuyQty = float64(r.CURBUYPOSITION) * r.AGREEUNIT * r.CONVERTRATIO * r.NEEDHEDGERATIO
- }
- if r.YDSELLPOSITION > 0 || r.CURSELLPOSITION > 0 {
- r.DiffBuyQty = float64(r.CURSELLPOSITION) * r.AGREEUNIT
- r.DiffMgBuyQty = float64(r.CURSELLPOSITION) * r.AGREEUNIT * r.CONVERTRATIO
- r.DiffNeedMgBuyQty = float64(r.CURSELLPOSITION) * r.AGREEUNIT * r.CONVERTRATIO * r.NEEDHEDGERATIO
- }
- }
- func (r *HISOUTTRADEPOSITION) buildSql() string {
- var sqlId utils.SQLVal = "with tmp as" +
- " (select t.middlegoodsid," +
- " t.middlegoodscode," +
- " t.middlegoodsname," +
- " t.needhedgeratio," +
- " t.needarbitrageratio," +
- " t.goodsgroupid," +
- " c.convertratio," +
- " g.goodsid," +
- " g.goodscode," +
- " g.goodsname," +
- " g.agreeunit," +
- " g.goodunitid" +
- " from erms_middlegoods t" +
- " inner join ermcp_ggconvertconfig c" +
- " on t.goodsgroupid = c.destgoodsgroupid" +
- " inner join goods g" +
- " on g.goodsgroupid = c.srcgoodsgroupid)" +
- "SELECT t.HISTRADEDATE," +
- " t.ISVALIDDATA," +
- " t.ACCOUNTID," +
- " t.HEDGEGOODSID," +
- " t.HEDGEACCOUNTCODE," +
- " t.TRADEDATE," +
- " t.MARKETID," +
- " t.YDBUYPOSITION," +
- " t.CURBUYPOSITION," +
- " t.CURYDBUYPOSITION," +
- " t.CURTDBUYPOSITION," +
- " t.FREYDBUYPOSITION," +
- " t.FRETDBUYPOSITION," +
- " t.YDSELLPOSITION," +
- " t.CURSELLPOSITION," +
- " t.CURYDSELLPOSITION," +
- " t.CURTDSELLPOSITION," +
- " t.FREYDSELLPOSITION," +
- " t.FRETDSELLPOSITION," +
- " t.BUYOPENCOST," +
- " t.BUYPOSITIONCOST," +
- " t.BUYUSEMARGIN," +
- " t.SELLOPENCOST," +
- " t.SELLPOSITIONCOST," +
- " t.SELLUSEMARGIN," +
- " ta.relateduserid," +
- " ta.accountname," +
- " tmp.*" +
- " FROM HIS_HEDGE_OUTTRADEPOSITION t" +
- " INNER JOIN tmp" +
- " on t.HEDGEGOODSID = tmp.goodsid" +
- " INNER JOIN TAACCOUNT ta" +
- " on t.accountid = ta.accountid" +
- " WHERE 1 = 1" +
- " and (t.YDBUYPOSITION > 0 or t.CURBUYPOSITION > 0 or t.YDSELLPOSITION > 0 or t.CURSELLPOSITION > 0)"
- sqlId.And("ta.RELATEDUSERID", r.RELATEDUSERID)
- sqlId.And("tmp.MIDDLEGOODSID", r.MIDDLEGOODSID)
- sqlId.AndEx("t.HISTRADEDATE", r.HISTRADEDATE, len(r.HISTRADEDATE) > 0)
- if len(r.BeginDate) > 0 && len(r.EndDate) > 0 {
- sqlId.Join(fmt.Sprintf(" and t.HISTRADEDATE >= '%v' and t.HISTRADEDATE <= '%v' ", r.BeginDate, r.EndDate))
- }
- return sqlId.String()
- }
- // GetDataEx 获取外部头寸日照
- func (r *HISOUTTRADEPOSITION) GetDataEx() ([]HISOUTTRADEPOSITION, error) {
- sData := make([]HISOUTTRADEPOSITION, 0)
- err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
- for i := range sData {
- sData[i].calc()
- }
- return sData, err
- }
- // Ermcp3ExposureFutuDetail 敞口报表期货明细
- type Ermcp3ExposureFutuDetail struct {
- ACCOUNTID int64 `json:"accountid"` // 交易账户id
- ACCOUNTNAME string `json:"accountname"` // 交易账户
- GOODSID int32 `json:"goodsid"` // 商品id
- GOODSCODE string `json:"goodscode"` // 商品代码
- GOODSNAME string `json:"goodsname"` // 商品名称
- BUYORSELL int32 `json:"buyorsell"` // 方向 0-买 1-卖
- ORIHOLDQTY float64 `json:"oriholdqty"` // 期初持仓量
- HOLDQTY float64 `json:"holdqty"` // 期末持仓量
- TODAYOPENQTY float64 `json:"todayopenqty"` // 今开仓量
- TODAYCLOSEQTY float64 `json:"todaycloseqty"` // 今平仓量
- DiffTradeQty float64 `json:"difftradeqty"` // 交易品种今变化量
- DiffMgQty float64 `json:"diffmgqty"` // 套保品种今变化量
- DiffNeedQty float64 `json:"diffneedqty"` // 应套保总量变化量
- MIDDLEGOODSID int32 `json:"middlegoodsid"` // 套保商品id
- MIDDLEGOODSCODE string `json:"middlegoodscode"` // 套保商品代码
- MIDDLEGOODSNAME string `json:"middlegoodsname"` // 套保商品名称
- ENUMDICNAME string `json:"enumdicname"` // 单位名称
- USERID int64 `json:"-"` // 用户id
- RECKONDATE string `json:"tradedate"` // 交易日
- BeginDate string `json:"begindate"` // 开始交易日
- EndDate string `json:"enddate"` // 结束交易日
- }
- func (r *Ermcp3ExposureFutuDetail) fromOutPositionBuy(v *HISOUTTRADEPOSITION) {
- r.ACCOUNTID = v.ACCOUNTID
- r.ACCOUNTNAME = v.ACCOUNTNAME
- r.GOODSID = v.HEDGEGOODSID
- r.GOODSCODE = v.GOODSCODE
- r.GOODSNAME = v.GOODSNAME
- r.BUYORSELL = 0
- r.ORIHOLDQTY = float64(v.YDBUYPOSITION)
- r.HOLDQTY = float64(v.CURBUYPOSITION)
- r.TODAYOPENQTY = 0
- r.TODAYCLOSEQTY = 0
- r.DiffTradeQty = v.DiffBuyQty
- r.DiffMgQty = v.DiffMgBuyQty
- r.DiffNeedQty = v.DiffNeedMgBuyQty
- r.MIDDLEGOODSID = v.MIDDLEGOODSID
- r.MIDDLEGOODSCODE = v.MIDDLEGOODSCODE
- r.MIDDLEGOODSNAME = v.MIDDLEGOODSNAME
- r.ENUMDICNAME = v.ENUMDICNAME
- r.RECKONDATE = v.HISTRADEDATE
- }
- func (r *Ermcp3ExposureFutuDetail) fromOutPositionSell(v *HISOUTTRADEPOSITION) {
- r.ACCOUNTID = v.ACCOUNTID
- r.ACCOUNTNAME = v.ACCOUNTNAME
- r.GOODSID = v.HEDGEGOODSID
- r.GOODSCODE = v.GOODSCODE
- r.GOODSNAME = v.GOODSNAME
- r.BUYORSELL = 1
- r.ORIHOLDQTY = float64(v.YDSELLPOSITION)
- r.HOLDQTY = float64(v.CURSELLPOSITION)
- r.TODAYOPENQTY = 0
- r.TODAYCLOSEQTY = 0
- r.DiffTradeQty = v.DiffSellQty
- r.DiffMgQty = v.DiffMgSellQty
- r.DiffNeedQty = v.DiffNeedMgSellQty
- r.MIDDLEGOODSID = v.MIDDLEGOODSID
- r.MIDDLEGOODSCODE = v.MIDDLEGOODSCODE
- r.MIDDLEGOODSNAME = v.MIDDLEGOODSNAME
- r.ENUMDICNAME = v.ENUMDICNAME
- r.RECKONDATE = v.HISTRADEDATE
- }
- func (r *Ermcp3ExposureFutuDetail) fromTradePositionBuy(v *ReckonDayPosition) {
- r.ACCOUNTID = v.ACCOUNTID
- r.ACCOUNTNAME = v.ACCOUNTNAME
- r.GOODSID = v.GOODSID
- r.GOODSCODE = v.GOODSCODE
- r.GOODSNAME = v.GOODSNAME
- r.BUYORSELL = 0
- r.ORIHOLDQTY = float64(v.BUYPOSITIONQTY)
- r.HOLDQTY = float64(v.BUYCURPOSITIONQTY)
- r.TODAYOPENQTY = 0
- r.TODAYCLOSEQTY = 0
- r.DiffTradeQty = v.DiffBuyQty
- r.DiffMgQty = v.DiffMgBuyQty
- r.DiffNeedQty = v.DiffNeedMgBuyQty
- r.MIDDLEGOODSID = v.MIDDLEGOODSID
- r.MIDDLEGOODSCODE = v.MIDDLEGOODSCODE
- r.MIDDLEGOODSNAME = v.MIDDLEGOODSNAME
- r.ENUMDICNAME = v.ENUMDICNAME
- r.RECKONDATE = v.RECKONDATE
- }
- func (r *Ermcp3ExposureFutuDetail) fromTradePositionSell(v *ReckonDayPosition) {
- r.ACCOUNTID = v.ACCOUNTID
- r.ACCOUNTNAME = v.ACCOUNTNAME
- r.GOODSID = v.GOODSID
- r.GOODSCODE = v.GOODSCODE
- r.GOODSNAME = v.GOODSNAME
- r.BUYORSELL = 1
- r.ORIHOLDQTY = float64(v.SELLPOSITIONQTY)
- r.HOLDQTY = float64(v.SELLCURPOSITIONQTY)
- r.TODAYOPENQTY = 0
- r.TODAYCLOSEQTY = 0
- r.DiffTradeQty = v.DiffSellQty
- r.DiffMgQty = v.DiffMgSellQty
- r.DiffNeedQty = v.DiffNeedMgSellQty
- r.MIDDLEGOODSID = v.MIDDLEGOODSID
- r.MIDDLEGOODSCODE = v.MIDDLEGOODSCODE
- r.MIDDLEGOODSNAME = v.MIDDLEGOODSNAME
- r.ENUMDICNAME = v.ENUMDICNAME
- r.RECKONDATE = v.RECKONDATE
- }
- // GetDataEx 获取敞口报表期货明细
- func (r *Ermcp3ExposureFutuDetail) GetDataEx() (interface{}, error) {
- sData := make([]Ermcp3ExposureFutuDetail, 0)
- if mtpcache.IsAreaUserId(r.USERID) {
- // 查母账户头寸
- m := HISOUTTRADEPOSITION{RELATEDUSERID: r.USERID, HISTRADEDATE: r.RECKONDATE,
- BeginDate: r.BeginDate, EndDate: r.EndDate, MIDDLEGOODSID: r.MIDDLEGOODSID}
- d, _ := m.GetDataEx()
- for _, v := range d {
- if v.YDBUYPOSITION > 0 || v.CURBUYPOSITION > 0 {
- val := Ermcp3ExposureFutuDetail{}
- val.fromOutPositionBuy(&v)
- val.BeginDate = r.BeginDate
- val.EndDate = r.EndDate
- sData = append(sData, val)
- }
- if v.YDSELLPOSITION > 0 || v.CURSELLPOSITION > 0 {
- val := Ermcp3ExposureFutuDetail{}
- val.fromOutPositionSell(&v)
- val.BeginDate = r.BeginDate
- val.EndDate = r.EndDate
- sData = append(sData, val)
- }
- }
- } else {
- // 查子账户头寸
- m := ReckonDayPosition{RELATEDUSERID: r.USERID, RECKONDATE: r.RECKONDATE,
- BeginDate: r.BeginDate, EndDate: r.EndDate, MIDDLEGOODSID: r.MIDDLEGOODSID}
- d, _ := m.GetDataEx()
- for _, v := range d {
- if v.BUYPOSITIONQTY > 0 || v.BUYCURPOSITIONQTY > 0 {
- val := Ermcp3ExposureFutuDetail{}
- val.fromTradePositionBuy(&v)
- val.BeginDate = r.BeginDate
- val.EndDate = r.EndDate
- sData = append(sData, val)
- }
- if v.SELLPOSITIONQTY > 0 || v.SELLCURPOSITIONQTY > 0 {
- val := Ermcp3ExposureFutuDetail{}
- val.fromTradePositionSell(&v)
- val.BeginDate = r.BeginDate
- val.EndDate = r.EndDate
- sData = append(sData, val)
- }
- }
- }
- return sData, nil
- }
- // Ermcp3ExposureParamChLog 敞口报表参数调整明细
- type Ermcp3ExposureParamChLog struct {
- LOGID string `json:"logid" xorm:"LOGID"` // 流水ID(609+Unix秒时间戳(10位)+xxxxxx)
- MIDDLEGOODSID int64 `json:"middlegoodsid" xorm:"MIDDLEGOODSID"` // 套保品种
- AREAUSERID int64 `json:"areauserid" xorm:"AREAUSERID"` // 所属机构\交易用户ID
- ACCOUNTID int64 `json:"accountid" xorm:"ACCOUNTID"` // 期货账户ID (作废, 默认为0)
- CHANGELOGTYPE int32 `json:"changelogtype" xorm:"CHANGELOGTYPE"` // 变更流水类型 - 1:套保比率变更 2:套利比率变更
- PARAMBEFOREVALUE float64 `json:"parambeforevalue" xorm:"PARAMBEFOREVALUE"` // 参数变更前(调整前参数值)
- PARAMAFTERVALUE float64 `json:"paramaftervalue" xorm:"PARAMAFTERVALUE"` // 参数变更后(调整后参数值)
- CURVALUE float64 `json:"curvalue" xorm:"CURVALUE"` // 当前套保\套利量(套保总量|套利总量)
- BEFOREVALUE float64 `json:"beforevalue" xorm:"BEFOREVALUE"` // 应套保\套利量变更前(调整前应套保总量)
- AFTERVALUE float64 `json:"aftervalue" xorm:"AFTERVALUE"` // 应套保\套利量变更后(调整后应套保总量)
- LOGDATETIME string `json:"logdatetime" xorm:"LOGDATETIME"` // 流水日期
- TRADEDATE string `json:"tradedate" xorm:"TRADEDATE"` // 交易日(yyyyMMdd)
- MIDDLEGOODSCODE string `json:"middlegoodscode" xorm:"'MIDDLEGOODSCODE'"` // 套保品种代码
- MIDDLEGOODSNAME string `json:"middlegoodsname" xorm:"'MIDDLEGOODSNAME'"` // 套保品种名称
- DiffValue float64 `json:"diffvalue"` // 应套保总量变化量
- BeginDate string `json:"begindate"` // 开始交易日
- EndDate string `json:"enddate"` // 结束交易日
- }
- func (r *Ermcp3ExposureParamChLog) calc() {
- r.DiffValue = r.AFTERVALUE - r.BEFOREVALUE
- }
- func (r *Ermcp3ExposureParamChLog) buildSql() string {
- var sqlId utils.SQLVal = "SELECT t.LOGID," +
- " t.MIDDLEGOODSID," +
- " t.AREAUSERID," +
- " t.ACCOUNTID," +
- " t.CHANGELOGTYPE," +
- " t.PARAMBEFOREVALUE," +
- " t.PARAMAFTERVALUE," +
- " t.CURVALUE," +
- " t.BEFOREVALUE," +
- " t.AFTERVALUE," +
- " to_char(t.LOGDATETIME, 'yyyy-mm-dd hh24:mi:ss') LOGDATETIME," +
- " t.TRADEDATE," +
- " g.middlegoodscode," +
- " g.middlegoodsname" +
- " FROM ERMCP_EXPOSUREPARAMCHGLOG t" +
- " LEFT JOIN ERMS_MIDDLEGOODS g on t.middlegoodsid=g.middlegoodsid" +
- " WHERE 1 = 1"
- sqlId.And("t.AREAUSERID", r.AREAUSERID)
- sqlId.AndEx("t.TRADEDATE", r.TRADEDATE, len(r.TRADEDATE) > 0)
- if len(r.BeginDate) > 0 && len(r.EndDate) > 0 {
- sqlId.Join(fmt.Sprintf(" and t.TRADEDATE >= '%v' and t.TRADEDATE <= '%v' ", r.BeginDate, r.EndDate))
- }
- return sqlId.String()
- }
- // GetDataEx 获取敞口报表参数调整明细
- func (r *Ermcp3ExposureParamChLog) GetDataEx() (interface{}, error) {
- sData := make([]Ermcp3ExposureParamChLog, 0)
- err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
- for i := range sData {
- sData[i].calc()
- sData[i].BeginDate = r.BeginDate
- sData[i].EndDate = r.EndDate
- }
- return sData, err
- }
- // Ermcp3SCMiddleGoodsReport 定价报表
- type Ermcp3SCMiddleGoodsReport struct {
- RECKONDATE string `json:"reckondate" xorm:"RECKONDATE" form:"reckondate"` // 日照时期(yyyyMMdd)
- CYCLETYPE int32 `json:"cycletype" xorm:"CYCLETYPE" form:"cycletype"` // 周期类型 - 1:月 2:季 3:年 4:周 5:全报表【原值】
- CYCLETIME string `json:"cycletime" xorm:"CYCLETIME" form:"cycletime"` // 周期时间 月(YYYYMM) 季(YYYYQ) 年(YYYY) 周(YYYYIW) 全(0)【原值】
- SPOTCONTRACTID string `json:"spotcontractid" xorm:"SPOTCONTRACTID" form:"spotcontractid"` // 现货合同ID(602+Unix秒时间戳(10位)+xxxxxx)
- MIDDLEGOODSID int64 `json:"middlegoodsid" xorm:"MIDDLEGOODSID" form:"middlegoodsid"` // 套保品种ID
- DELIVERYGOODSID int64 `json:"deliverygoodsid" xorm:"DELIVERYGOODSID" form:"deliverygoodsid"` // 现货品种ID
- WRSTANDARDID int64 `json:"wrstandardid" xorm:"WRSTANDARDID" form:"wrstandardid"` // 现货商品ID
- PRICEDQTY SFLOAT64 `json:"pricedqty" xorm:"PRICEDQTY"` // 已定价量(现货)
- MIDDLEGOODSPRICEDQTY SFLOAT64 `json:"middlegoodspricedqty" xorm:"MIDDLEGOODSPRICEDQTY"` // 已定价量(套保品种 - 税前) = PricedQty * 折算系数
- MIDDLEGOODSPRICEDQTY2 SFLOAT64 `json:"middlegoodspricedqty2" xorm:"MIDDLEGOODSPRICEDQTY2"` // 已定价量(套保品种- 税后) = MiddleGoodsPricedQty * (1/(1+增值税率))
- MIDDLEGOODSPRICEDQTY3 SFLOAT64 `json:"middlegoodspricedqty3" xorm:"MIDDLEGOODSPRICEDQTY3"` // 已定价量(套保品种应套保量) = MiddleGoodsPricedQty2 * 套保比率
- RELATEDMIDDLEGOODSQTY SFLOAT64 `json:"relatedmiddlegoodsqty" xorm:"RELATEDMIDDLEGOODSQTY"` // 已关联量(套保品种)(期货)
- UPDATETIME string `json:"updatetime" xorm:"UPDATETIME"` // 更新时间
- TODAYRELATEDMIDDLEGOODSQTY SFLOAT64 `json:"todayrelatedmiddlegoodsqty" xorm:"TODAYRELATEDMIDDLEGOODSQTY"` // 今日关联量(期货)
- TODAYRELATEDMIDDLEGOODSAMOUNT SFLOAT64 `json:"todayrelatedmiddlegoodsamount" xorm:"TODAYRELATEDMIDDLEGOODSAMOUNT"` // 今日关联额(期货)
- RELATEDMIDDLEGOODSAMOUNT SFLOAT64 `json:"relatedmiddlegoodsamount" xorm:"RELATEDMIDDLEGOODSAMOUNT"` // 已关联额(期货)
- TODAYPRICEDQTY SFLOAT64 `json:"todaypricedqty" xorm:"TODAYPRICEDQTY"` // 今日定价量(现货)
- TODAYPRICEDAMOUNT SFLOAT64 `json:"todaypricedamount" xorm:"TODAYPRICEDAMOUNT"` // 今日定价额(现货)
- PRICEDAMOUNT SFLOAT64 `json:"pricedamount" xorm:"PRICEDAMOUNT"` // 已定价额(现货)
- TODAYPRICEDAMOUNT2 SFLOAT64 `json:"todaypricedamount2" xorm:"TODAYPRICEDAMOUNT2"` // 今日定价额(现货-基价额)
- PRICEDAMOUNT2 SFLOAT64 `json:"pricedamount2" xorm:"PRICEDAMOUNT2"` // 已定价额(现货-基价额)
- USERID int64 `json:"userid" xorm:"'USERID'" form:"userid"` // 合同所属用户id
- CONTRACTNO string `json:"contractno" xorm:"'CONTRACTNO'"` // 合同编号
- CONTRACTTYPE int32 `json:"contracttype" xorm:"'CONTRACTTYPE'"` // 合同类型 1:采购 -1:销售
- MATHNAME string `json:"mathname" xorm:"'MATHNAME'"` // 交易对手方
- DELIVERYGOODSCODE string `json:"deliverygoodscode" xorm:"'DELIVERYGOODSCODE'"` // 品种代码
- DELIVERYGOODSNAME string `json:"deliverygoodsname" xorm:"'DELIVERYGOODSNAME'"` // 品种名称
- WRSTANDARDCODE string `json:"wrstandardcode" xorm:"'WRSTANDARDCODE'"` // 商品(品类) 代码
- WRSTANDARDNAME string `json:"wrstandardname" xorm:"'WRSTANDARDNAME'"` // 商品(品类) 名称
- VATRATE SFLOAT64 `json:"vatrate" xorm:"'VATRATE'"` // 增值税率
- MIDDLEGOODSCODE string `json:"middlegoodscode" xorm:"'MIDDLEGOODSCODE'"` // 套保品种代码
- MIDDLEGOODSNAME string `json:"middlegoodsname" xorm:"'MIDDLEGOODSNAME'"` // 套保品种名称
- NEEDHEDGERATIO SFLOAT64 `json:"needhedgeratio" xorm:"'NEEDHEDGERATIO'"` // 套保系数
- CONVERTRATIO SFLOAT64 `json:"convertratio" xorm:"'CONVERTRATIO'"` // 折算系数
- TODAYAVGPRICE SFLOAT64 `json:"todayavgprice" xorm:"'TODAYAVGPRICE'"` // 今日定价均价 = TodayPricedAmount / TodayPricedQty
- TODAYAVGPRICE2 SFLOAT64 `json:"todayavgprice2" xorm:"'TODAYAVGPRICE2'"` // 今日点价登记均价(基价) = TodayPricedAmount2 / TodayPricedQty
- HEDGEPLANQTY SFLOAT64 `json:"hedgeplanqty" xorm:"'HEDGEPLANQTY'"` // 套保计划量 = TodayPricedQty * 折算系数 * (1/(1+增值税率)) * 套保比例
- TODAYAVGFUTUPRICE SFLOAT64 `json:"todayavgfutuprice" xorm:"'TODAYAVGFUTUPRICE'"` // 今日期货成交均价 = TodayRelatedMiddleGoodsAmount /TodayRelatedMiddleGoodsQty
- DIFFPRICE SFLOAT64 `json:"diffprice" xorm:"'DIFFPRICE'"` // 现期价格差 = 今日点价登记均价(基价) - 今日期货成交均价
- DIFFQTY SFLOAT64 `json:"diffqty" xorm:"'DIFFQTY'"` // 期现数量差 = 套保计划量 - 今日期货关联成交量
- QueryType int32 `json:"-"` // 查询类型 1-报表 2-报表明细
- BeginDate string `json:"begindate"` // 开始交易日
- EndDate string `json:"enddate"` // 结束交易日
- }
- func (r *Ermcp3SCMiddleGoodsReport) calc() {
- if r.TODAYPRICEDQTY > 0 {
- r.TODAYAVGPRICE = r.TODAYPRICEDAMOUNT / r.TODAYPRICEDQTY
- r.TODAYAVGPRICE.Round(2)
- r.TODAYAVGPRICE2 = r.TODAYPRICEDAMOUNT2 / r.TODAYPRICEDQTY
- r.TODAYAVGPRICE2.Round(2)
- }
- r.HEDGEPLANQTY = r.TODAYPRICEDQTY * r.CONVERTRATIO * (1 / (1 + r.VATRATE)) * r.NEEDHEDGERATIO
- if r.TODAYRELATEDMIDDLEGOODSQTY > 0 {
- r.TODAYAVGFUTUPRICE = r.TODAYRELATEDMIDDLEGOODSAMOUNT / r.TODAYRELATEDMIDDLEGOODSQTY
- r.TODAYAVGFUTUPRICE.Round(2)
- r.DIFFPRICE = r.TODAYAVGPRICE2 - r.TODAYAVGFUTUPRICE
- r.DIFFPRICE.Round(2)
- r.DIFFQTY = r.HEDGEPLANQTY - r.TODAYRELATEDMIDDLEGOODSQTY
- r.DIFFQTY.Round(8)
- }
- }
- func (r *Ermcp3SCMiddleGoodsReport) buildSql() string {
- if r.CYCLETYPE == 0 {
- return r.buildSqlDay()
- } else {
- return r.buildSqlCycle()
- }
- }
- func (r *Ermcp3SCMiddleGoodsReport) buildSqlDay() string {
- var sqlId utils.SQLVal = `
- select t.reckondate,
- to_char(t.spotcontractid) spotcontractid,
- t.middlegoodsid,
- t.deliverygoodsid,
- t.wrstandardid,
- t.pricedqty,
- t.middlegoodspricedqty,
- t.middlegoodspricedqty2,
- t.middlegoodspricedqty3,
- t.relatedmiddlegoodsqty,
- t.todayrelatedmiddlegoodsqty,
- t.todayrelatedmiddlegoodsamount,
- t.relatedmiddlegoodsamount,
- t.todaypricedqty,
- t.todaypricedamount,
- t.pricedamount,
- t.todaypricedamount2,
- t.pricedamount2,
- s.userid,
- s.contractno,
- s.contracttype,
- u.accountname mathname,
- g.deliverygoodscode,
- g.deliverygoodsname,
- w.wrstandardcode,
- w.wrstandardname,
- w.vatrate,
- m.middlegoodscode,
- m.middlegoodsname,
- m.needhedgeratio,
- c.convertratio
- from Reckon_ERMCP_SCMiddleGoods t
- inner join ermcp_spotcontract s
- on t.spotcontractid = s.spotcontractid
- left join useraccount u
- on u.userid = (decode(s.contracttype, 1, s.selluserid, s.buyuserid))
- left join deliverygoods g
- on t.deliverygoodsid = g.deliverygoodsid
- left join wrstandard w
- on t.wrstandardid = w.wrstandardid
- left join erms_middlegoods m
- on t.middlegoodsid = m.middlegoodsid
- left join erms2_wrsconvertdetail c
- on t.middlegoodsid = c.middlegoodsid
- and t.wrstandardid = c.wrstandardid
- where 1 = 1
- `
- sqlId.JoinFormat(" and %v in (s.userid, s.tradeuserid, s.saleuserid, s.tradeuserid)", r.USERID)
- sqlId.And("t.RECKONDATE", r.RECKONDATE)
- sqlId.AndEx("t.middlegoodsid", r.MIDDLEGOODSID, r.MIDDLEGOODSID > 0)
- sqlId.AndEx("t.deliverygoodsid", r.DELIVERYGOODSID, r.DELIVERYGOODSID > 0)
- sqlId.AndEx("t.wrstandardid", r.WRSTANDARDID, r.WRSTANDARDID > 0)
- sqlId.AndInterEx("t.spotcontractid", r.SPOTCONTRACTID, r.SPOTCONTRACTID != "")
- return sqlId.String()
- }
- func (r *Ermcp3SCMiddleGoodsReport) buildSqlCycle() string {
- var sqlId utils.SQLVal = `
- select t.cycletype,
- t.cycletime,
- to_char(t.spotcontractid) spotcontractid,
- t.middlegoodsid,
- t.deliverygoodsid,
- t.wrstandardid,
- t.pricedqty,
- t.middlegoodspricedqty,
- t.middlegoodspricedqty2,
- t.middlegoodspricedqty3,
- t.relatedmiddlegoodsqty,
- t.todayrelatedmiddlegoodsqty,
- t.todayrelatedmiddlegoodsamount,
- t.relatedmiddlegoodsamount,
- t.todaypricedqty,
- t.todaypricedamount,
- t.pricedamount,
- t.todaypricedamount2,
- t.pricedamount2,
- s.userid,
- s.contractno,
- s.contracttype,
- u.accountname mathname,
- g.deliverygoodscode,
- g.deliverygoodsname,
- w.wrstandardcode,
- w.wrstandardname,
- w.vatrate,
- m.middlegoodscode,
- m.middlegoodsname,
- m.needhedgeratio,
- c.convertratio
- from Report_ERMCP_SCMiddleGoods t
- inner join ermcp_spotcontract s
- on t.spotcontractid = s.spotcontractid
- left join useraccount u
- on u.userid = (decode(s.contracttype, 1, s.selluserid, s.buyuserid))
- left join deliverygoods g
- on t.deliverygoodsid = g.deliverygoodsid
- left join wrstandard w
- on t.wrstandardid = w.wrstandardid
- left join erms_middlegoods m
- on t.middlegoodsid = m.middlegoodsid
- left join erms2_wrsconvertdetail c
- on t.middlegoodsid = c.middlegoodsid
- and t.wrstandardid = c.wrstandardid
- where 1 = 1
- `
- sqlId.JoinFormat(" and %v in (s.userid, s.tradeuserid, s.saleuserid, s.tradeuserid)", r.USERID)
- sqlId.And("t.CYCLETYPE", r.CYCLETYPE)
- sqlId.And("t.CYCLETIME", r.CYCLETIME)
- sqlId.AndEx("t.middlegoodsid", r.MIDDLEGOODSID, r.MIDDLEGOODSID > 0)
- sqlId.AndEx("t.deliverygoodsid", r.DELIVERYGOODSID, r.DELIVERYGOODSID > 0)
- sqlId.AndEx("t.wrstandardid", r.WRSTANDARDID, r.WRSTANDARDID > 0)
- sqlId.AndInterEx("t.spotcontractid", r.SPOTCONTRACTID, r.SPOTCONTRACTID != "")
- return sqlId.String()
- }
- // GetDataEx 获取定价报表
- func (r *Ermcp3SCMiddleGoodsReport) GetDataEx() (interface{}, error) {
- sData := make([]Ermcp3SCMiddleGoodsReport, 0)
- err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
- for i := range sData {
- sData[i].calc()
- sData[i].BeginDate = r.BeginDate
- sData[i].EndDate = r.EndDate
- }
- return sData, err
- }
|