wrTrade2.go 244 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353
  1. /**
  2. * @Author: zou.yingbin
  3. * @Create : 2021/7/20 18:31
  4. * @Modify : 2021/7/20 18:31
  5. */
  6. package models
  7. import (
  8. "errors"
  9. "fmt"
  10. "mtp2_if/db"
  11. "mtp2_if/mtpcache"
  12. "mtp2_if/utils"
  13. "sort"
  14. "strconv"
  15. "strings"
  16. "time"
  17. )
  18. // WrOrderQuote 买卖大厅行情
  19. type WrOrderQuote struct {
  20. WRFACTORTYPEID string `json:"wrfactortypeid" xorm:"'WRFACTORTYPEID'" form:"wrfactortypeid"` // 仓单要素id
  21. BUYPRICE float64 `json:"buyprice" xorm:"'BUYPRICE'"` // 买价
  22. BUYQTY float64 `json:"buyqty" xorm:"'BUYQTY'"` // 买量
  23. SELLPRICE float64 `json:"sellprice" xorm:"'SELLPRICE'"` // 卖价
  24. SELLQTY float64 `json:"sellqty" xorm:"'SELLQTY'"` // 卖量
  25. WRFACTORTYPENAME string `json:"wrfactortypename" xorm:"'WRFACTORTYPENAME'"` // 仓单要素类型名称(选择项要素的名称合并显示,逗号分隔)
  26. DELIVERYGOODSID int32 `json:"deliverygoodsid" xorm:"'DELIVERYGOODSID'"` // 品种id
  27. WRSTANDARDID int32 `json:"wrstandardid" xorm:"'WRSTANDARDID'" form:"wrstandardid"` // 商品id
  28. WAREHOUSEID int32 `json:"warehouseid" xorm:"'WAREHOUSEID'" form:"warehouseid"` // 仓库id
  29. DELIVERYGOODSNAME string `json:"deliverygoodsname" xorm:"'DELIVERYGOODSNAME'"` // 品种名称
  30. DELIVERYGOODSCODE string `json:"deliverygoodscode" xorm:"'DELIVERYGOODSCODE'"` // 品种代码
  31. WAREHOUSENAME string `json:"warehousename" xorm:"'WAREHOUSENAME'"` // 仓库名称
  32. WAREHOUSECODE string `json:"warehousecode" xorm:"'WAREHOUSECODE'"` // 仓库代码
  33. WRSTANDARDNAME string `json:"wrstandardname" xorm:"'WRSTANDARDNAME'" form:"wrstandardname"` // 商品名称
  34. WRSTANDARDCODE string `json:"wrstandardcode" xorm:"'WRSTANDARDCODE'"` // 商品代码
  35. WRGOODSNAME string `json:"wrgoodsname" xorm:"'WRGOODSNAME'"` // 商品(商品名称+仓库要素名称 拼接)
  36. THUMURLS string `json:"thumurls" xorm:"THUMURLS"` // 缩略图片(1:1)(逗号分隔)
  37. PICTUREURLS string `json:"pictureurls" xorm:"PICTUREURLS"` // 详情图片(逗号分隔)
  38. BANNERPICURL string `json:"bannerpicurl" xorm:"BANNERPICURL"` // Banner图
  39. BUYPRICEMOVE float64 `json:"buypricemove" xorm:"'BUYPRICEMOVE'"` // 买升贴水(基差)
  40. SELLPRICEMOVE float64 `json:"sellpricemove" xorm:"'SELLPRICEMOVE'"` // 卖升贴水(基差)
  41. GOODSID int32 `json:"goodsid" xorm:"'GOODSID'"` // 商品id(浮动价列表才有)
  42. GOODSCODE string `json:"goodscode" xorm:"'GOODSCODE'"` // 商品合约(浮动价列表才有)
  43. DELIVERYMONTH string `json:"deliverymonth" xorm:"'DELIVERYMONTH'" form:"deliverymonth"` // 交收月
  44. ENUMDICNAME string `json:"enumdicname" xorm:"'enumdicname'"` // 单位名称
  45. MINIVALUE int32 `json:"minivalue" xorm:"'MINIVALUE'"` // 现货商品最小变动值
  46. PageEx `xorm:"extends"` // 页码信息
  47. SPOTGOODSPRICE float64 `json:"spotgoodsprice" xorm:"'SPOTGOODSPRICE'"` // 参考价(THJ)
  48. HasWr int32 `json:"-" form:"haswr"` // 是否有仓单 0-没有 1-有
  49. WrPriceType int32 `json:"-" form:"wrpricetype"` // 价格方式 - 1:固定价 2-浮动价 - [挂牌]
  50. MarketId int32 `json:"-" form:"marketid"` // 市场id
  51. BRANDNAME string `json:"-" form:"brandname"` // 品牌名称
  52. DGITEMNAME string `json:"-" form:"dgitemname"` // 筛选项
  53. BrandId int `json:"-" form:"brandid"` // 品牌id
  54. YearsId int `json:"-" form:"yearsid"` // 年份id
  55. }
  56. func (r *WrOrderQuote) calc() {
  57. r.WRGOODSNAME = strings.ReplaceAll(r.WRGOODSNAME, ",", "-")
  58. }
  59. func (r *WrOrderQuote) ftItemName() ([]string, bool) {
  60. if len(r.DGITEMNAME) < 2 {
  61. return nil, false
  62. }
  63. sItem := strings.Split(r.DGITEMNAME, ",")
  64. if len(sItem) > 0 {
  65. return sItem, true
  66. }
  67. return nil, false
  68. }
  69. // buildSqlFixedPrice 一口价
  70. func (r *WrOrderQuote) buildSqlFixedPrice() string {
  71. var sqlId utils.SQLVal = "with buyQuote as" +
  72. " (" +
  73. " select to_char(a.wrfactortypeid) wrfactortypeid, a.fixedprice buyPrice, sum(a.orderqty) buyQty, a.deliverymonth" +
  74. " from (select t.wrfactortypeid," +
  75. " t.marketid," +
  76. " t.buyorsell," +
  77. " t.orderqty - t.tradeqty as orderqty," +
  78. " t.fixedprice," +
  79. " nvl(t.deliverymonth,'0') deliverymonth," +
  80. " rank() over(partition by t.wrfactortypeid, nvl(t.deliverymonth,'0') order by t.fixedprice desc) cnt" +
  81. " from wrtrade_orderdetail t" +
  82. " where t.wrtradetype = 1 and t.isspecified=0 and t.buyorsell = 0 and t.wrtradeorderstatus in(3,7) %v" +
  83. " ) a" +
  84. " where a.cnt = 1" +
  85. " group by a.wrfactortypeid, a.fixedprice, a.deliverymonth)," +
  86. "sellQuote as" +
  87. " (" +
  88. " select to_char(a.wrfactortypeid) wrfactortypeid, a.fixedprice sellPrice, sum(a.orderqty) sellQty, a.deliverymonth" +
  89. " from (select t.wrfactortypeid," +
  90. " t.marketid," +
  91. " t.buyorsell," +
  92. " t.orderqty - t.tradeqty as orderqty," +
  93. " t.fixedprice," +
  94. " nvl(t.deliverymonth,'0') deliverymonth," +
  95. " rank() over(partition by t.wrfactortypeid, nvl(t.deliverymonth,'0') order by t.fixedprice asc) cnt" +
  96. " from wrtrade_orderdetail t" +
  97. " where t.wrtradetype = 1 and t.isspecified=0 and t.buyorsell = 1 and t.wrtradeorderstatus in(3,7) %v " +
  98. " ) a" +
  99. " where a.cnt = 1" +
  100. " group by a.wrfactortypeid, a.fixedprice, a.deliverymonth)," +
  101. "wrQuote as (" +
  102. " select nvl(k1.wrfactortypeid, k2.wrfactortypeid) wrfactortypeid," +
  103. " nvl(k1.deliverymonth, k2.deliverymonth) deliverymonth," +
  104. " k1.buyPrice," +
  105. " k1.buyQty," +
  106. " k2.sellPrice," +
  107. " k2.sellQty" +
  108. " from buyQuote k1" +
  109. " full join sellQuote k2" +
  110. " on k1.wrfactortypeid = k2.wrfactortypeid and k1.deliverymonth = k2.deliverymonth" +
  111. ")" +
  112. "select k.*," +
  113. " w.wrfactortypename," +
  114. " w.deliverygoodsid," +
  115. " w.wrstandardid," +
  116. " w.warehouseid," +
  117. " dg.deliverygoodsname," +
  118. " dg.deliverygoodscode," +
  119. " h.warehousename," +
  120. " h.warehousecode," +
  121. " wg.wrstandardname," +
  122. " wg.wrstandardcode," +
  123. " wg.minivalue," +
  124. " wg.wrstandardname || w.wrfactortypename2 as wrgoodsname," +
  125. " wg.bannerpicurl," +
  126. " wg.pictureurls," +
  127. " wg.thumurls," +
  128. " e.enumdicname," +
  129. " sgp.spotgoodsprice" +
  130. " from wrQuote k" +
  131. " left join WRFactorType w" +
  132. " on k.wrfactortypeid = w.wrfactortypeid" +
  133. " left join deliverygoods dg" +
  134. " on w.deliverygoodsid = dg.deliverygoodsid" +
  135. " left join wrstandard wg" +
  136. " on w.wrstandardid = wg.wrstandardid" +
  137. " left join warehouseinfo h" +
  138. " on w.warehouseid = h.autoid" +
  139. " left join enumdicitem e" +
  140. " on e.enumitemname = wg.unitid" +
  141. " and e.enumdiccode = 'goodsunit'" +
  142. " left join ermcp_spotgoodsprice sgp" +
  143. " on sgp.deliverygoodsid = w.deliverygoodsid" +
  144. " and sgp.wrstandardid = w.wrstandardid" +
  145. " and sgp.spotgoodsbrandid = 0" +
  146. " and sgp.CURRENCYID = 1" +
  147. " where 1=1 %v " +
  148. "order by deliverygoodsname"
  149. var param, param2 utils.SQLVal
  150. param.AndEx("t.haswr", r.HasWr, r.HasWr >= 0)
  151. param.And("t.wrpricetype", r.WrPriceType)
  152. param.AndEx("t.marketid", r.MarketId, r.MarketId > 0)
  153. param.AndEx("t.wrfactortypeid", r.WRFACTORTYPEID, len(r.WRFACTORTYPEID) > 0)
  154. param.AndEx("t.deliverymonth", r.DELIVERYMONTH, len(r.DELIVERYMONTH) > 1)
  155. if d, ok := r.ftItemName(); ok {
  156. param2.AndLikes2("w.wrfactortypename", "w.wrfactortypename2", d...)
  157. }
  158. //指定品类id
  159. if r.WRSTANDARDID > 0 {
  160. param2.AndEx("w.wrstandardid", r.WRSTANDARDID, r.WRSTANDARDID > 0)
  161. } else {
  162. //品牌过滤
  163. if r.BrandId > 0 {
  164. param2.JoinFormat(" and w.WRSTANDARDID in(select WRSTANDARDID from WRStandardFactoryItem t "+
  165. "where dgfactoryitemtypeid = 100 and t.dgfactoryitemid=%d)", r.BrandId)
  166. }
  167. //年份过滤
  168. if r.YearsId > 0 {
  169. param2.JoinFormat(" and w.WRSTANDARDID in(select WRSTANDARDID from WRStandardFactoryItem t "+
  170. "where dgfactoryitemtypeid = 101 and t.dgfactoryitemid=%d)", r.YearsId)
  171. }
  172. }
  173. param2.AndEx("w.warehouseid", r.WAREHOUSEID, r.WAREHOUSEID > 0)
  174. param2.AndEx("w.deliverygoodsid", r.DELIVERYGOODSID, r.DELIVERYGOODSID > 0)
  175. sqlId.FormatParam(param.String(), param.String(), param2.String())
  176. sqlId.Page(r.Page, r.PageSize)
  177. return sqlId.String()
  178. }
  179. // buildSqlPriceMove 浮动价
  180. func (r *WrOrderQuote) buildSqlPriceMove() string {
  181. var sqlId utils.SQLVal = "with buyQuote as" +
  182. " (select to_char(a.wrfactortypeid) wrfactortypeid," +
  183. " a.pricemove buypricemove," +
  184. " sum(a.orderqty) buyQty," +
  185. " a.goodsid," +
  186. " a.goodscode," +
  187. " a.deliverymonth" +
  188. " from (select t.wrfactortypeid," +
  189. " t.marketid," +
  190. " t.buyorsell," +
  191. " t.orderqty - t.tradeqty as orderqty," +
  192. " t.pricemove," +
  193. " t.wrtradeorderid," +
  194. " nvl(t.deliverymonth,'0') deliverymonth," +
  195. " c.goodsid," +
  196. " c.goodscode," +
  197. " rank() over(partition by t.wrfactortypeid, nvl(t.deliverymonth,'0'), c.goodsid order by t.pricemove desc) cnt" +
  198. " from wrtrade_orderdetail t" +
  199. " left join WRTrade_GoodsConfig c" +
  200. " on t.wrtradeorderid = c.wrtradeorderid" +
  201. " where t.wrtradetype = 1 and t.isspecified=0 and t.wrtradeorderstatus in(3, 7)" +
  202. " and t.buyorsell = 0 %v) a" +
  203. " where a.cnt = 1" +
  204. " group by a.wrfactortypeid, a.pricemove, a.goodsid, a.goodscode, a.deliverymonth)," +
  205. "sellQuote as" +
  206. " (select to_char(a.wrfactortypeid) wrfactortypeid," +
  207. " a.pricemove sellpricemove," +
  208. " a.goodsid," +
  209. " a.goodscode," +
  210. " a.deliverymonth," +
  211. " sum(a.orderqty) sellQty" +
  212. " from (select t.wrfactortypeid," +
  213. " t.marketid," +
  214. " t.buyorsell," +
  215. " t.orderqty - t.tradeqty as orderqty," +
  216. " t.pricemove," +
  217. " nvl(t.deliverymonth,'0') deliverymonth," +
  218. " c.goodsid," +
  219. " c.goodscode," +
  220. " rank() over(partition by t.wrfactortypeid, nvl(t.deliverymonth,'0'), c.goodsid order by t.pricemove asc) cnt" +
  221. " from wrtrade_orderdetail t" +
  222. " left join WRTrade_GoodsConfig c" +
  223. " on t.wrtradeorderid = c.wrtradeorderid" +
  224. " where t.wrtradetype = 1 and t.isspecified=0 and t.wrtradeorderstatus in(3, 7)" +
  225. " and t.buyorsell = 1 %v) a" +
  226. " where a.cnt = 1" +
  227. " group by a.wrfactortypeid, a.pricemove, a.goodsid, a.goodscode, a.deliverymonth)," +
  228. "wrQuote as" +
  229. " (select nvl(k1.wrfactortypeid, k2.wrfactortypeid) wrfactortypeid," +
  230. " nvl(k1.goodsid, k2.goodsid) goodsid," +
  231. " nvl(k1.goodscode, k2.goodscode) goodscode," +
  232. " nvl(k1.deliverymonth, k2.deliverymonth) deliverymonth," +
  233. " k1.buypricemove," +
  234. " k1.buyQty," +
  235. " k2.sellpricemove," +
  236. " k2.sellQty" +
  237. " from buyQuote k1" +
  238. " full join sellQuote k2" +
  239. " on k1.wrfactortypeid = k2.wrfactortypeid and nvl(k1.deliverymonth,0) = nvl(k2.deliverymonth,0))" +
  240. "select k.*," +
  241. " w.wrfactortypename," +
  242. " w.deliverygoodsid," +
  243. " w.wrstandardid," +
  244. " w.warehouseid," +
  245. " dg.deliverygoodsname," +
  246. " dg.deliverygoodscode," +
  247. " h.warehousename," +
  248. " h.warehousecode," +
  249. " wg.wrstandardname," +
  250. " wg.wrstandardcode," +
  251. " wg.minivalue," +
  252. " wg.wrstandardname || w.wrfactortypename2 as wrgoodsname," +
  253. " wg.bannerpicurl," +
  254. " wg.pictureurls," +
  255. " wg.thumurls," +
  256. " e.enumdicname" +
  257. " from wrQuote k" +
  258. " left join WRFactorType w" +
  259. " on k.wrfactortypeid = w.wrfactortypeid" +
  260. " left join deliverygoods dg" +
  261. " on w.deliverygoodsid = dg.deliverygoodsid" +
  262. " left join wrstandard wg" +
  263. " on w.wrstandardid = wg.wrstandardid" +
  264. " left join warehouseinfo h" +
  265. " on w.warehouseid = h.autoid" +
  266. " left join enumdicitem e" +
  267. " on e.enumitemname = wg.unitid" +
  268. " and e.enumdiccode = 'goodsunit'" +
  269. " where 1 = 1 %v" +
  270. " order by deliverygoodsname"
  271. var param, param2 utils.SQLVal
  272. param.AndEx("t.haswr", r.HasWr, r.HasWr >= 0)
  273. param.And("t.wrpricetype", r.WrPriceType)
  274. param.AndEx("t.marketid", r.MarketId, r.MarketId > 0)
  275. param.AndEx("t.wrfactortypeid", r.WRFACTORTYPEID, len(r.WRFACTORTYPEID) > 0)
  276. param.AndEx("t.deliverymonth", r.DELIVERYMONTH, len(r.DELIVERYMONTH) > 1)
  277. if d, ok := r.ftItemName(); ok {
  278. param2.AndLikes("w.wrfactortypename", d...)
  279. }
  280. //指定品类id
  281. if r.WRSTANDARDID > 0 {
  282. param2.AndEx("w.wrstandardid", r.WRSTANDARDID, r.WRSTANDARDID > 0)
  283. } else {
  284. //品牌过滤
  285. if r.BrandId > 0 {
  286. param2.JoinFormat(" and w.WRSTANDARDID in(select WRSTANDARDID from WRStandardFactoryItem t "+
  287. "where dgfactoryitemtypeid = 100 and t.dgfactoryitemid=%d)", r.BrandId)
  288. }
  289. //年份过滤
  290. if r.YearsId > 0 {
  291. param2.JoinFormat(" and w.WRSTANDARDID in(select WRSTANDARDID from WRStandardFactoryItem t "+
  292. "where dgfactoryitemtypeid = 101 and t.dgfactoryitemid=%d)", r.YearsId)
  293. }
  294. }
  295. param2.AndEx("w.warehouseid", r.WAREHOUSEID, r.WAREHOUSEID > 0)
  296. param2.AndEx("w.deliverygoodsid", r.DELIVERYGOODSID, r.DELIVERYGOODSID > 0)
  297. sqlId.FormatParam(param.String(), param.String(), param2.String())
  298. sqlId.Page(r.Page, r.PageSize)
  299. return sqlId.String()
  300. }
  301. func (r *WrOrderQuote) buildSql() string {
  302. if r.WrPriceType == 1 {
  303. return r.buildSqlFixedPrice()
  304. } else {
  305. return r.buildSqlPriceMove()
  306. }
  307. }
  308. // GetDataByPage 获取买卖大厅行情
  309. func (r *WrOrderQuote) GetDataByPage() (interface{}, error, int, int, int) {
  310. sData := make([]WrOrderQuote, 0)
  311. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  312. total := 0
  313. for i := range sData {
  314. sData[i].calc()
  315. total = sData[i].Total
  316. }
  317. return sData, err, r.Page, r.PageSize, total
  318. }
  319. // WrOrderQuoteDetail 行情大厅明细(买卖大厅)
  320. type WrOrderQuoteDetail struct {
  321. WRTRADEORDERID string `json:"wrtradeorderid" xorm:"WRTRADEORDERID"` // 仓单贸易委托单ID(320+Unix秒时间戳(10位)+xxxxxx)
  322. BUYORSELL int32 `json:"buyorsell" xorm:"BUYORSELL" form:"buyorsell"` // 买卖 - 0:买 1:卖
  323. USERID int64 `json:"userid" xorm:"USERID" form:"userid"` // 购买方(销售方)用户ID
  324. QTY float64 `json:"orderqty" xorm:"qty"` // 买(卖)量(=委托量-成交量)
  325. PRICE float64 `json:"fixedprice" xorm:"price"` // 买(卖)价
  326. PRICEMOVE float64 `json:"pricemove" xorm:"PRICEMOVE"` // 买(卖)升贴水- 基差
  327. USERNAME string `json:"username" xorm:"'USERNAME'"` // 购买方(销售方)
  328. ENUMDICNAME string `json:"enumdicname" xorm:"'enumdicname'"` // 单位名称
  329. MINIVALUE int32 `json:"minivalue" xorm:"'MINIVALUE'"` // 现货商品最小变动值
  330. DELIVERYMONTH string `json:"deliverymonth" xorm:"'DELIVERYMONTH'" form:"deliverymonth"` // 交收月
  331. ORDERTIME string `json:"ordertime" xorm:"'ORDERTIME'"` // 委托时间
  332. DELISTMINQTY SFLOAT64 `json:"delistminqty" xorm:"'DELISTMINQTY'"` // 起摘数量
  333. MarketId int32 `json:"marketid" xorm:"'MARKETID'" form:"marketid"` // 市场id
  334. PERFORMANCETEMPLATEID int64 `json:"performancetemplateid" xorm:"'PERFORMANCETEMPLATEID'"` // 履约模板id
  335. PageEx `xorm:"extends"`
  336. WRFACTORTYPEID int64 `json:"-" form:"wrfactortypeid"` // 仓单要素id
  337. HasWr int32 `json:"-" form:"haswr"` // 是否有仓单 0-没有 1-有
  338. WrPriceType int32 `json:"-" form:"wrpricetype"` // 价格方式 - 1:固定价 2-浮动价 - [挂牌]
  339. GOODSID int32 `json:"-" form:"goodsid"` // 商品id
  340. }
  341. func (r *WrOrderQuoteDetail) calc() {
  342. r.USERNAME = EncryptByStar2(r.USERNAME)
  343. }
  344. func (r *WrOrderQuoteDetail) buildSql() string {
  345. var sqlId utils.SQLVal = "select to_char(t.wrtradeorderid) wrtradeorderid," +
  346. " to_char(t.wrfactortypeid) wrfactortypeid," +
  347. " t.userid," +
  348. " t.orderqty - t.tradeqty as qty," +
  349. " t.fixedprice as price," +
  350. " t.pricemove," +
  351. " t.wrpricetype," +
  352. " t.buyorsell," +
  353. " t.deliverymonth," +
  354. " t.delistminqty," +
  355. " t.marketid," +
  356. " to_char(t.ordertime, 'yyyy-mm-dd hh24:mi:ss') ordertime," +
  357. " u.accountname as username," +
  358. " c.goodsid," +
  359. " c.goodscode," +
  360. " wd.minivalue," +
  361. " t.performancetemplateid," +
  362. " e.enumdicname" +
  363. " from WRTRADE_ORDERDETAIL t" +
  364. " left join WRTRADE_GOODSCONFIG c" +
  365. " on t.wrtradeorderid = c.wrtradeorderid" +
  366. " left join Useraccount u" +
  367. " on t.userid = u.userid" +
  368. " left join wrfactortype w on t.wrfactortypeid=w.wrfactortypeid" +
  369. " left join wrstandard wd on w.wrstandardid=wd.wrstandardid" +
  370. " left join enumdicitem e on wd.unitid=e.enumitemname and e.enumdiccode='goodsunit'" +
  371. " where 1 = 1" +
  372. " and t.wrtradetype = 1" +
  373. " and t.isspecified = 0" +
  374. " and t.wrtradeorderstatus in (3, 7)"
  375. sqlId.And("t.haswr", r.HasWr)
  376. sqlId.And("t.wrpricetype", r.WrPriceType)
  377. sqlId.And("t.wrfactortypeid", r.WRFACTORTYPEID)
  378. sqlId.AndEx("c.goodsid", r.GOODSID, r.GOODSID > 0)
  379. sqlId.And("t.buyorsell", r.BUYORSELL)
  380. sqlId.AndEx("t.marketid", r.MarketId, r.MarketId > 0)
  381. sqlId.AndEx("t.deliverymonth", r.DELIVERYMONTH, len(r.DELIVERYMONTH) > 0)
  382. if r.BUYORSELL == 0 {
  383. if r.WrPriceType == 1 {
  384. sqlId.Join(" order by t.fixedprice desc, t.ordertime")
  385. } else {
  386. sqlId.Join(" order by t.pricemove desc, t.ordertime")
  387. }
  388. } else {
  389. if r.WrPriceType == 1 {
  390. sqlId.Join(" order by t.fixedprice asc, t.ordertime")
  391. } else {
  392. sqlId.Join(" order by t.pricemove asc, t.ordertime")
  393. }
  394. }
  395. sqlId.Page(r.Page, r.PageSize)
  396. return sqlId.String()
  397. }
  398. // GetDataByPage 获取行情大厅明细(买卖大厅)
  399. func (r *WrOrderQuoteDetail) GetDataByPage() (interface{}, error, int, int, int) {
  400. sData := make([]WrOrderQuoteDetail, 0)
  401. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  402. total := 0
  403. for i := range sData {
  404. sData[i].calc()
  405. total = sData[i].Total
  406. }
  407. return sData, err, r.Page, r.PageSize, total
  408. }
  409. // Wr2FactorType 仓单要素类型
  410. type Wr2FactorType struct {
  411. WRFACTORTYPEID string `json:"wrfactortypeid" xorm:"WRFACTORTYPEID" form:"wrfactortypeid"` // 仓单要素类型ID(212+Unix秒时间戳(10位)+xxxxxx)
  412. WRFACTORTYPENAME string `json:"wrfactortypename" xorm:"WRFACTORTYPENAME" form:"wrfactortypename"` // 仓单要素类型名称(选择项要素的名称合并显示,逗号分隔)
  413. DELIVERYGOODSID int32 `json:"deliverygoodsid" xorm:"DELIVERYGOODSID" form:"deliverygoodsid"` // 品种ID
  414. WAREHOUSEID int64 `json:"warehouseid" xorm:"WAREHOUSEID" form:"warehouseid"` // 仓库ID
  415. WRSTANDARDID int64 `json:"wrstandardid" xorm:"WRSTANDARDID" form:"wrstandardid"` // 现货商品ID
  416. WRSTANDARDCODE string `json:"wrstandardcode" xorm:"WRSTANDARDCODE" form:"wrstandardcode"` // 现货商品代码
  417. OPTIONCOMPARE string `json:"optioncompare" xorm:"OPTIONCOMPARE" form:"optioncompare"` // 选择项比较串【{选择项ID}+{冒号}+选择项值 } ,逗号分隔,头尾加逗号】-- 所有选择项拼接,用于比较
  418. WRSTANDARDNAME string `json:"wrstandardname" xorm:"'WRSTANDARDNAME'"` // 商品名称
  419. DELIVERYGOODSCODE string `json:"deliverygoodscode" xorm:"'DELIVERYGOODSCODE'"` // 品种代码
  420. DELIVERYGOODSNAME string `json:"deliverygoodsname" xorm:"'DELIVERYGOODSNAME'"` // 品种名称
  421. ENUMDICNAME string `json:"enumdicname" xorm:"'enumdicname'"` // 单位名称
  422. WAREHOUSENAME string `json:"warehousename" xorm:"'WAREHOUSENAME'"` // 仓库名称
  423. MINIVALUE int32 `json:"minivalue" xorm:"'MINIVALUE'"` // 现货商品最小变动值
  424. WRTYPENAME string `json:"wrtypename" xorm:"'WRTYPENAME'"` // 商品
  425. }
  426. // Calc 计算
  427. func (r *Wr2FactorType) Calc() {
  428. if r.WRTYPENAME == "" {
  429. if len(r.WRFACTORTYPENAME) > 0 {
  430. r.WRTYPENAME = r.WRSTANDARDNAME + r.WRFACTORTYPENAME
  431. } else {
  432. r.WRTYPENAME = r.WRSTANDARDNAME
  433. }
  434. }
  435. r.WRTYPENAME = strings.ReplaceAll(r.WRTYPENAME, ",", "-")
  436. }
  437. // WrPosition 仓单贸易持仓汇总
  438. type WrPosition struct {
  439. WRPOSITIONID string `json:"wrpositionid" xorm:"WRPOSITIONID" form:"wrpositionid"` // 仓单头寸ID(201+Unix秒时间戳(10位)+xxxxxx)
  440. WRUSERID int64 `json:"wruserid" xorm:"WRUSERID" form:"userid"` // 持有人ID
  441. TOTALQTY float64 `json:"totalqty" xorm:"TOTALQTY" form:"totalqty"` // 总数量(库存数量)
  442. INCREASEQTY float64 `json:"-" xorm:"INCREASEQTY" form:"increaseqty"` // 今日增加数量
  443. DECREASEQTY float64 `json:"-" xorm:"DECREASEQTY" form:"decreaseqty"` // 今日减少数量
  444. FREEZEQTY float64 `json:"freezeqty" xorm:"FREEZEQTY" form:"freezeqty"` // 总冻结数量
  445. RELATEDQTY float64 `json:"-" xorm:"RELATEDQTY" form:"relatedqty"` // 关联数量
  446. MODIFYTIME string `json:"modifytime" xorm:"MODIFYTIME" form:"modifytime"` // 修改时间(过户时间)
  447. MODIFIERID int64 `json:"-" xorm:"MODIFIERID" form:"modifierid"` // 修改人
  448. TRADEWRQTY float64 `json:"-" xorm:"TRADEWRQTY" form:"tradewrqty"` // 订单仓单头寸总数量
  449. ACCOUNTID int64 `json:"accountid" xorm:"ACCOUNTID" form:"accountid"` // 帐户ID
  450. CREDITTOTALQTY float64 `json:"credittotalqty" xorm:"CREDITTOTALQTY" form:"credittotalqty"` // 授信总数量(预售仓单:预售总量)
  451. CREDITCURQTY float64 `json:"creditcurqty" xorm:"CREDITCURQTY" form:"creditcurqty"` // 授信当前数量(预售仓单:预售当前量)
  452. CREDITFREEZEQTY float64 `json:"creditfreezeqty" xorm:"CREDITFREEZEQTY" form:"creditfreezeqty"` // 授信冻结数量(预售仓单: 当前数量)
  453. CREDITTRADEQTY float64 `json:"credittradeqty" xorm:"CREDITTRADEQTY" form:"credittradeqty"` // 授信成交数量(预售仓单:成交总量)
  454. Wr2FactorType `xorm:"extends"`
  455. ENALBEQTY float64 `json:"enalbeqty" xorm:"'ENALBEQTY'"` // 可用数量
  456. CREDITENABLEQTY float64 `json:"creditenableqty" xorm:"'CREDITENABLEQTY'"` // 授信可用数量(预售仓单: 可用数量)
  457. PLEDGEQTY float64 `json:"pledgeqty" xorm:"'-'"` // 质押数量
  458. BUYEXCUTEQTY float64 `json:"buyexcuteqty"` // 采购履约中数量
  459. SELLEXCUTEQTY float64 `json:"sellexcuteqty"` // 销售履约中数量
  460. WRPOSITIONNO string `json:"wrpositionno"` // 仓单编号
  461. QueryType int32 `json:"querytype" form:"querytype"` // 查询类型 1-现货汇总 2-库存汇总(订单汇总)
  462. HASWR int32 `json:"haswr" form:"haswr"` // 是否有仓单-卖方 - 0:无仓单 1:有仓单
  463. DGITEMNAME string `json:"-" form:"dgitemname"` // 筛选项
  464. }
  465. func (r *WrPosition) calc() {
  466. r.ENALBEQTY = r.TOTALQTY - r.FREEZEQTY
  467. r.CREDITENABLEQTY = r.CREDITCURQTY - r.CREDITFREEZEQTY
  468. r.WRPOSITIONNO = fmt.Sprintf("%v", r.WRFACTORTYPEID)
  469. r.Wr2FactorType.Calc()
  470. }
  471. // 添加履约中数量
  472. func (r *WrPosition) addPerformancePlanQty(sum WrPerformanPlanSum) {
  473. if r.DELIVERYGOODSID == sum.DELIVERYGOODSID &&
  474. r.WRSTANDARDID == sum.WRSTANDARDID &&
  475. r.WRTYPENAME == sum.WRTYPENAME {
  476. if r.QueryType == 1 || (r.QueryType == 2 && r.WAREHOUSEID == sum.WAREHOUSEID) {
  477. if sum.BUYORSELL == 0 {
  478. r.BUYEXCUTEQTY = sum.QTY
  479. } else {
  480. r.SELLEXCUTEQTY = sum.QTY
  481. }
  482. }
  483. }
  484. }
  485. func (r *WrPosition) buildSql() string {
  486. if r.QueryType == 1 {
  487. // 现货汇总 品种 + 品类 + 其它要素, 根据品种汇总
  488. return r.buildSql1()
  489. } else if r.QueryType == 2 {
  490. // 库存汇总 品种 + 仓库 + 品类 + 其它要素, 即全维度
  491. return r.buildSql2()
  492. } else {
  493. // 现货明细 仓单编号 + 品种 + 仓库 + 仓单要素 即全维度 跟库存汇总一样
  494. return r.buildSql3()
  495. }
  496. }
  497. func (r *WrPosition) buildSql1() string {
  498. var sqlId utils.SQLVal = "with tmp as" +
  499. " (select t.*," +
  500. " w.wrstandardid," +
  501. " w.warehouseid," +
  502. " wd.wrstandardname," +
  503. " wd.wrstandardname || w.wrfactortypename2 as wrtypename" +
  504. " from WRPOSITION t" +
  505. " left join WRFACTORTYPE w" +
  506. " on t.wrfactortypeid = w.wrfactortypeid" +
  507. " left join wrstandard wd" +
  508. " on w.wrstandardid = wd.wrstandardid" +
  509. " where 1=1 %v)," +
  510. "hld as" +
  511. " (select k.deliverygoodsid," +
  512. " k.wrtypename," +
  513. " k.wrstandardid," +
  514. " sum(k.TOTALQTY) TOTALQTY," +
  515. " sum(k.INCREASEQTY) INCREASEQTY," +
  516. " sum(k.DECREASEQTY) DECREASEQTY," +
  517. " sum(k.FREEZEQTY) FREEZEQTY," +
  518. " sum(k.RELATEDQTY) RELATEDQTY," +
  519. " sum(k.TRADEWRQTY) TRADEWRQTY," +
  520. " sum(k.CREDITTOTALQTY) CREDITTOTALQTY," +
  521. " sum(k.CREDITCURQTY) CREDITCURQTY," +
  522. " sum(k.CREDITFREEZEQTY) CREDITFREEZEQTY," +
  523. " sum(k.CREDITTRADEQTY) CREDITTRADEQTY" +
  524. " from tmp k" +
  525. " where 1 = 1" +
  526. " group by k.deliverygoodsid, k.wrstandardname, k.wrtypename, k.wrstandardid)" +
  527. "select h.*, g.deliverygoodsname, g.deliverygoodscode, e.enumdicname, wd.minivalue" +
  528. " from hld h" +
  529. " left join deliverygoods g" +
  530. " on h.deliverygoodsid = g.deliverygoodsid" +
  531. " left join wrstandard wd" +
  532. " on h.wrstandardid = wd.wrstandardid" +
  533. " left join enumdicitem e" +
  534. " on e.enumitemname = wd.unitid" +
  535. " and e.enumdiccode = 'goodsunit'"
  536. var param utils.SQLVal
  537. param.And("t.wruserid", r.WRUSERID)
  538. param.AndEx("w.wrstandardid", r.WRSTANDARDID, r.WRSTANDARDID > 0)
  539. param.AndEx("w.warehouseid", r.WAREHOUSEID, r.WAREHOUSEID > 0)
  540. param.AndEx("w.deliverygoodsid", r.DELIVERYGOODSID, r.DELIVERYGOODSID > 0)
  541. if d, ok := FtItemName(r.DGITEMNAME); ok {
  542. param.AndLikes("w.wrfactortypename", d...)
  543. }
  544. if r.HASWR == 0 {
  545. param.Join(" and t.CREDITTOTALQTY > 0")
  546. } else {
  547. param.Join(" and t.TOTALQTY > 0")
  548. }
  549. sqlId.FormatParam(param.String())
  550. return sqlId.String()
  551. }
  552. func (r *WrPosition) buildSql2() string {
  553. return r.buildSql3()
  554. }
  555. func (r *WrPosition) buildSql3() string {
  556. var sqlId utils.SQLVal = "SELECT to_char(t.WRPOSITIONID) WRPOSITIONID," +
  557. " t.WRUSERID," +
  558. " t.TOTALQTY," +
  559. " t.INCREASEQTY," +
  560. " t.DECREASEQTY," +
  561. " t.FREEZEQTY," +
  562. " t.RELATEDQTY," +
  563. " to_char(t.MODIFYTIME, 'yyyy-mm-dd hh24:mi:ss') MODIFYTIME," +
  564. " t.MODIFIERID," +
  565. " t.TRADEWRQTY," +
  566. " t.ACCOUNTID," +
  567. " t.CREDITTOTALQTY," +
  568. " t.CREDITCURQTY," +
  569. " t.CREDITFREEZEQTY," +
  570. " t.CREDITTRADEQTY," +
  571. " to_char(w.WRFACTORTYPEID) WRFACTORTYPEID," +
  572. " w.WRFACTORTYPENAME2 WRFACTORTYPENAME," +
  573. " w.DELIVERYGOODSID," +
  574. " w.WAREHOUSEID," +
  575. " w.WRSTANDARDID," +
  576. " w.WRSTANDARDCODE," +
  577. " w.OPTIONCOMPARE," +
  578. " dg.deliverygoodscode," +
  579. " dg.deliverygoodsname," +
  580. " wd.wrstandardcode," +
  581. " wd.wrstandardname," +
  582. " wd.minivalue," +
  583. " h.warehousecode," +
  584. " h.warehousename," +
  585. " e.enumdicname" +
  586. " FROM WRPOSITION t" +
  587. " LEFT JOIN WRFACTORTYPE w" +
  588. " on t.wrfactortypeid = w.wrfactortypeid" +
  589. " LEFT JOIN DELIVERYGOODS dg" +
  590. " on t.deliverygoodsid = dg.deliverygoodsid" +
  591. " LEFT JOIN WRSTANDARD wd" +
  592. " on w.wrstandardid = wd.wrstandardid" +
  593. " left join warehouseinfo h on w.warehouseid=h.autoid" +
  594. " left join enumdicitem e" +
  595. " on e.enumitemname = wd.unitid" +
  596. " and e.enumdiccode = 'goodsunit'" +
  597. " WHERE 1 = 1"
  598. sqlId.And("t.WRUSERID", r.WRUSERID)
  599. if r.HASWR == 0 {
  600. sqlId.Join(" and t.CREDITTOTALQTY > 0")
  601. } else {
  602. sqlId.Join(" and t.TOTALQTY > 0")
  603. }
  604. sqlId.AndEx("w.wrstandardid", r.WRSTANDARDID, r.WRSTANDARDID > 0)
  605. sqlId.AndEx("w.warehouseid", r.WAREHOUSEID, r.WAREHOUSEID > 0)
  606. sqlId.AndEx("w.deliverygoodsid", r.DELIVERYGOODSID, r.DELIVERYGOODSID > 0)
  607. if d, ok := FtItemName(r.DGITEMNAME); ok {
  608. sqlId.AndLikes("w.wrfactortypename", d...)
  609. }
  610. return sqlId.String()
  611. }
  612. // GetDataEx 获取仓单贸易持仓汇总
  613. func (r *WrPosition) GetDataEx() (interface{}, error) {
  614. sData := make([]WrPosition, 0)
  615. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  616. for i := range sData {
  617. sData[i].calc()
  618. sData[i].QueryType = r.QueryType
  619. sData[i].HASWR = r.HASWR
  620. }
  621. // 查履约中的数量
  622. if len(sData) > 0 {
  623. if r.QueryType == 1 || r.QueryType == 2 {
  624. m := WrPerformanPlanSum{QueryType: r.QueryType, USERID: r.WRUSERID}
  625. if d, err := m.GetData(); err == nil {
  626. for i := range sData {
  627. for _, sum := range d {
  628. sData[i].addPerformancePlanQty(sum)
  629. }
  630. }
  631. }
  632. }
  633. }
  634. return sData, err
  635. }
  636. // WrOrderDetail 仓单贸易委托单
  637. type WrOrderDetail struct {
  638. HASWR int32 `json:"haswr" xorm:"HASWR" form:"haswr"` // 是否有仓单-卖方 - 0:无仓单 1:有仓单
  639. WRTRADEORDERID string `json:"wrtradeorderid" xorm:"WRTRADEORDERID"` // 仓单贸易委托单ID(320+Unix秒时间戳(10位)+xxxxxx)
  640. TRADEDATE string `json:"tradedate" xorm:"TRADEDATE" form:"tradedate"` // 交易日(yyyyMMdd)
  641. WRTRADETYPE int32 `json:"wrtradetype" xorm:"WRTRADETYPE" form:"wrtradetype"` // 仓单贸易类型 - 1:挂牌 2:摘牌 3:提货卖(文化中国) 4:提货买(文化中国)
  642. BUYORSELL int32 `json:"buyorsell" xorm:"BUYORSELL" form:"buyorsell"` // 买卖 - 0:买 1:卖(挂牌类型 买为采购 卖为销售)
  643. MARKETID int64 `json:"marketid" xorm:"MARKETID" form:"marketid"` // 市场ID
  644. USERID int64 `json:"userid" xorm:"USERID" form:"userid"` // 用户ID
  645. WRFACTORTYPEID string `json:"wrfactortypeid" xorm:"WRFACTORTYPEID"` // 仓单要素类型ID/商品ID(77)
  646. ORDERQTY float64 `json:"orderqty" xorm:"ORDERQTY" form:"orderqty"` // 委托数量
  647. TRADEQTY float64 `json:"tradeqty" xorm:"TRADEQTY" form:"tradeqty"` // 成交数量
  648. CANCELQTY float64 `json:"cancelqty" xorm:"CANCELQTY" form:"cancelqty"` // 撤销数量
  649. WRPRICETYPE int32 `json:"wrpricetype" xorm:"WRPRICETYPE" form:"wrpricetype"` // 价格方式 - 1:固定价 2-浮动价 - [挂牌]
  650. FIXEDPRICE float64 `json:"fixedprice" xorm:"FIXEDPRICE" form:"fixedprice"` // 固定价格 - [挂牌]
  651. PRICEMOVE float64 `json:"pricemove" xorm:"PRICEMOVE" form:"pricemove"` // 升贴水(浮动价时填写) - [挂牌]
  652. TRADEPRICE float64 `json:"tradeprice" xorm:"TRADEPRICE" form:"tradeprice"` // 成交价格 - [摘牌] (浮动价 ((商品1价格*商品1价格系数+升贴水)* 商品1重量系数 + 商品2价格*商品2价格系数+商品2升贴水)* 商品2重量系数 ...)* 委托单价格系数 + 委托单升贴水)
  653. ORDERTIME string `json:"ordertime" xorm:"ORDERTIME" form:"ordertime"` // 委托时间(挂牌时间)
  654. WRTRADEORDERSTATUS int32 `json:"wrtradeorderstatus" xorm:"WRTRADEORDERSTATUS"` // 委托状态 - 1:委托请求 2:待冻结 3:委托成功 4:委托失败 5:配对成功 6:已撤 7:部成 8:已成 9:部成部撤 10:成交失败 11:委托拒绝 12:经过摘牌(先摘后挂专用) 13:冻结成功(通道交易专用) 14:通道已撤 15:通道部成部撤 16:成交失败违约(荷兰式竞拍专用) 17:冻结PD成功 18:冻结PD失败 19:冻结能量成功 20:冻结能量失败 21:预约已报价 22:过期未付 23:优惠券处理中 24:仓单生成失败 25:首付扣款失败 26:履约失败 27:撤单解冻贷款失败
  655. GOODSID int32 `json:"goodsid" xorm:"'GOODSID'"` // 期货商品id
  656. GOODSCODE string `json:"goodscode" xorm:"'GOODSCODE'"` // 期货合约
  657. GOODSNAME string `json:"goodsname" xorm:"'GOODSNAME'"` // 商品名称
  658. FUTUPRICEMOVE float64 `json:"futupricemove" xorm:"'FUTUPRICEMOVE'"` // 期货升贴水
  659. DELIVERYMONTH string `json:"deliverymonth" xorm:"'DELIVERYMONTH'"` // 交收月
  660. MARGINVALUE SFLOAT64 `json:"marginvalue" xorm:"'MARGINVALUE'"` // 保证金设置值(履约保证金)
  661. FREEZEMARGIN SFLOAT64 `json:"freezemargin" xorm:"'FREEZEMARGIN'"` // 冻结保证金(保证金)
  662. FREEZECHARGE SFLOAT64 `json:"freezecharge" xorm:"'FREEZECHARGE'"` // 冻结手续费
  663. DELISTMINQTY int64 `json:"delistminqty" xorm:"'DELISTMINQTY'"` // 起摘数量
  664. CANBARGAIN int32 `json:"canbargain" xorm:"'CANBARGAIN'"` // 是否可议价 - 0:不可 1:可
  665. CANPART int32 `json:"canpart" xorm:"'CANPART'"` // 是否允许部份摘牌 - 0:不允许(要求整单) 1:允许(可以不整单)
  666. ALLFRIENDSFLAG int32 `json:"allfriendsflag" xorm:"'ALLFRIENDSFLAG'"` // 是否全好友可见 - 0:否 1:是
  667. ISSPECIFIED int32 `json:"isspecified" xorm:"'ISSPECIFIED'"` // 是否指定对手 - 0:不指定 1:指定 - [挂牌]
  668. ACCOUNTID int64 `json:"accountid" xorm:"'ACCOUNTID'"` // 交易账号(资金账号)
  669. MATCHUSERID int64 `json:"-" xorm:"'MATCHUSERID'"` // 对手方id- 作废 可能存在多个对方id
  670. MATCHUSERNAME string `json:"matchusername" xorm:"'MATCHUSERNAME'"` // 对手方名称(当ISSPECIFIED=1时,有值,指定朋友的名称)
  671. VALIDTYPE int32 `json:"validtype" xorm:"'VALIDTYPE'"` // 有效类型 - 1当日有效 2本周有效 3指定日期有效 4一直有效
  672. VALIDTIME string `json:"validtime" xorm:"'VALIDTIME'"` // 挂牌有效期
  673. TANAME string `json:"taname" xorm:"'TANAME'"` // 交易用户名称(资金账号名称)
  674. PERFORMANCETEMPLATEID int64 `json:"performancetemplateid" xorm:"'PERFORMANCETEMPLATEID'"` // 履约模板id
  675. LADINGBILLID string `json:"ladingbillid" xorm:"LADINGBILLID" form:"ladingbillid"` // 提单ID(208+Unix秒时间戳(10位)+xxxxxx)
  676. SUBNUM int32 `json:"-" xorm:"SUBNUM" form:"subnum"` // 提单子单号
  677. BANNERPICURL string `json:"bannerpicurl" xorm:"BANNERPICURL"` // Banner图
  678. THUMURLS string `json:"thumurls" xorm:"thumurls"` // 缩略图
  679. UNITID int32 `json:"unitid" xorm:"UNITID"` // 现货商品单位ID
  680. Wr2FactorType `xorm:"extends"`
  681. PageEx `xorm:"extends"`
  682. FUTUSHOW string `json:"futushow"` // 期货合约/升贴水
  683. AMOUNT SFLOAT64 `json:"amount"` // 挂牌金额 = 委托数量 * 固定价或升贴水
  684. BEGINDATE string `json:"begindate" form:"begindate"` // 开始交易日(yyyymmdd)
  685. ENDDATE string `json:"enddate" form:"enddate"` // 结束交易日(yyyymmdd)
  686. BCancel int32 `json:"-" form:"bcancel"` // 是否仅查可撤单据 1:可撤 注:此参数仅对当前记录有效, 且不含47模式市场
  687. }
  688. func (r *WrOrderDetail) calc() {
  689. if r.GOODSCODE == "" {
  690. r.FUTUSHOW = "-"
  691. } else {
  692. r.FUTUSHOW = fmt.Sprintf("%v/%.2f", r.GOODSNAME, r.PRICEMOVE)
  693. }
  694. r.Wr2FactorType.Calc()
  695. if r.WRPRICETYPE == 1 {
  696. r.AMOUNT.Set(r.ORDERQTY * r.FIXEDPRICE)
  697. } else {
  698. r.AMOUNT.Set(r.ORDERQTY * r.PRICEMOVE)
  699. }
  700. // 对手名字脱敏
  701. if len(r.MATCHUSERNAME) > 0 {
  702. var newStr string
  703. str := strings.Split(r.MATCHUSERNAME, ",")
  704. for i := range str {
  705. sItem := strings.Split(str[i], " ")
  706. if len(sItem) == 2 {
  707. sItem[1] = EncryptByStar(sItem[1])
  708. if len(newStr) > 0 {
  709. newStr += "、 "
  710. }
  711. newStr += sItem[0] + " " + sItem[1]
  712. }
  713. }
  714. r.MATCHUSERNAME = newStr
  715. }
  716. if r.SUBNUM > 0 {
  717. r.LADINGBILLID += fmt.Sprintf("-%v", r.SUBNUM)
  718. }
  719. }
  720. func (r *WrOrderDetail) buildSql() string {
  721. var sqlId utils.SQLVal = `
  722. with tmp as
  723. (select to_char(t.wrfactortypeid) wrfactortypeid,
  724. t.wrfactortypename2 wrfactortypename,
  725. t.wrstandardid,
  726. t.deliverygoodsid,
  727. g.deliverygoodscode,
  728. g.deliverygoodsname,
  729. w.wrstandardcode,
  730. w.wrstandardname,
  731. w.bannerpicurl,
  732. w.thumurls,
  733. h.warehousecode,
  734. h.warehousename,
  735. e.enumdicname,
  736. w.wrstandardname || t.wrfactortypename2 as wrtypename,
  737. w.unitid
  738. from wrfactortype t
  739. left join deliverygoods g
  740. on t.deliverygoodsid = g.deliverygoodsid
  741. left join wrstandard w
  742. on t.wrstandardid = w.wrstandardid
  743. left join warehouseinfo h
  744. on t.warehouseid = h.autoid
  745. left join enumdicitem e
  746. on w.unitid = e.enumitemname
  747. and e.enumdiccode = 'goodsunit'),
  748. mr as (
  749. select q.wrtradeorderid, wm_concat(u.userid||' '||u.accountname) matchusername from wrtrade_matchdetail q
  750. left join useraccount u on q.matchuserid=u.userid
  751. group by q.wrtradeorderid
  752. )
  753. select t.HASWR,
  754. t.validtype,
  755. to_char(t.validtime,'yyyy-mm-dd hh24:mi:ss') validtime,
  756. to_char(t.WRTRADEORDERID) WRTRADEORDERID,
  757. t.TRADEDATE,
  758. t.DELIVERYMONTH,
  759. t.WRTRADETYPE,
  760. t.BUYORSELL,
  761. t.MARKETID,
  762. t.USERID,
  763. t.ORDERQTY,
  764. t.TRADEQTY,
  765. t.CANCELQTY,
  766. t.WRPRICETYPE,
  767. t.FIXEDPRICE,
  768. t.PRICEMOVE,
  769. t.TRADEPRICE,
  770. to_char(t.ORDERTIME, 'yyyy-mm-dd hh24:mi:ss') ORDERTIME,
  771. t.WRTRADEORDERSTATUS,
  772. t.marginvalue,
  773. t.freezemargin,
  774. t.freezecharge,
  775. t.delistminqty,
  776. t.canbargain,
  777. t.canpart,
  778. t.allfriendsflag,
  779. t.isspecified,
  780. t.accountid,
  781. t.performancetemplateid,
  782. c.GOODSID,
  783. c.GOODSCODE,
  784. c.pricemove FUTUPRICEMOVE,
  785. g.goodsname,
  786. mr.matchusername,
  787. ta.accountname taname,
  788. to_char(b.ladingbillid) ladingbillid,
  789. b.subnum,
  790. k.*
  791. from wrtrade_orderdetail t
  792. left join wrtrade_goodsconfig c
  793. on t.wrtradeorderid = c.wrtradeorderid
  794. left join wrtrade_orderdetaillb b on t.wrtradeorderid=b.wrtradeorderid
  795. left join goods g
  796. on c.goodsid = g.goodsid
  797. left join tmp k
  798. on t.wrfactortypeid = k.wrfactortypeid
  799. left join mr
  800. on t.wrtradeorderid = mr.wrtradeorderid
  801. left join taaccount ta
  802. on t.accountid = ta.accountid
  803. where t.WRTRADEORDERSTATUS not in(2)
  804. `
  805. sqlId.And("t.USERID", r.USERID)
  806. sqlId.And("t.haswr", r.HASWR)
  807. sqlId.AndEx("t.marketid", r.MARKETID, r.MARKETID > 0)
  808. sqlId.AndEx("t.wrtradetype", r.WRTRADETYPE, r.WRTRADETYPE > 0)
  809. if r.BCancel == 1 {
  810. // 只查委托状态=3 委托成功的单, 且不含47模式的
  811. sqlId.Join(" and t.WRTRADEORDERSTATUS=3 and t.marketid not in(select marketid from market where trademode = 47)")
  812. }
  813. sqlId.Join(" order by t.ORDERTIME desc")
  814. sqlId.Page(r.Page, r.PageSize)
  815. return sqlId.String()
  816. }
  817. func (r *WrOrderDetail) buildSqlHis() string {
  818. var sqlId utils.SQLVal = `
  819. with tmp as
  820. (select to_char(t.wrfactortypeid) wrfactortypeid,
  821. t.wrfactortypename2 wrfactortypename,
  822. t.wrstandardid,
  823. t.deliverygoodsid,
  824. g.deliverygoodscode,
  825. g.deliverygoodsname,
  826. w.wrstandardcode,
  827. w.wrstandardname,
  828. h.warehousecode,
  829. h.warehousename,
  830. e.enumdicname,
  831. w.wrstandardname || t.wrfactortypename2 as wrtypename
  832. from wrfactortype t
  833. left join deliverygoods g
  834. on t.deliverygoodsid = g.deliverygoodsid
  835. left join wrstandard w
  836. on t.wrstandardid = w.wrstandardid
  837. left join warehouseinfo h
  838. on t.warehouseid = h.autoid
  839. left join enumdicitem e
  840. on w.unitid = e.enumitemname
  841. and e.enumdiccode = 'goodsunit'),
  842. mr as (
  843. select q.wrtradeorderid, wm_concat(u.userid||' '||u.accountname) matchusername from wrtrade_matchdetail q
  844. left join useraccount u on q.matchuserid=u.userid
  845. group by q.wrtradeorderid
  846. )
  847. select t.HASWR,
  848. to_char(t.validtime,'yyyy-mm-dd hh24:mi:ss') validtime,
  849. to_char(t.WRTRADEORDERID) WRTRADEORDERID,
  850. t.TRADEDATE,
  851. t.DELIVERYMONTH,
  852. t.WRTRADETYPE,
  853. t.BUYORSELL,
  854. t.MARKETID,
  855. t.USERID,
  856. t.ORDERQTY,
  857. t.TRADEQTY,
  858. t.CANCELQTY,
  859. t.WRPRICETYPE,
  860. t.FIXEDPRICE,
  861. t.PRICEMOVE,
  862. t.TRADEPRICE,
  863. to_char(t.ORDERTIME, 'yyyy-mm-dd hh24:mi:ss') ORDERTIME,
  864. t.WRTRADEORDERSTATUS,
  865. t.marginvalue,
  866. t.freezemargin,
  867. t.delistminqty,
  868. t.canbargain,
  869. t.canpart,
  870. t.allfriendsflag,
  871. t.isspecified,
  872. t.accountid,
  873. t.performancetemplateid,
  874. c.GOODSID,
  875. c.GOODSCODE,
  876. c.pricemove FUTUPRICEMOVE,
  877. g.goodsname,
  878. mr.matchusername,
  879. ta.accountname taname,
  880. to_char(b.ladingbillid) ladingbillid,
  881. b.subnum,
  882. k.*
  883. from his_wrtrade_orderdetail t
  884. left join wrtrade_goodsconfig c
  885. on t.wrtradeorderid = c.wrtradeorderid
  886. left join wrtrade_orderdetaillb b on t.wrtradeorderid=b.wrtradeorderid
  887. left join goods g
  888. on c.goodsid = g.goodsid
  889. left join tmp k
  890. on t.wrfactortypeid = k.wrfactortypeid
  891. left join mr
  892. on t.wrtradeorderid = mr.wrtradeorderid
  893. left join taaccount ta
  894. on t.accountid = ta.accountid
  895. where t.WRTRADETYPE = 1 and t.WRTRADEORDERSTATUS not in(2) and t.isvaliddata=1
  896. `
  897. sqlId.And("t.USERID", r.USERID)
  898. sqlId.And("t.haswr", r.HASWR)
  899. sqlId.AndEx("t.marketid", r.MARKETID, r.MARKETID > 0)
  900. sqlId.AndEx("t.wrtradetype", r.WRTRADETYPE, r.WRTRADETYPE > 0)
  901. // 格式 yyyymmdd
  902. if len(r.BEGINDATE) > 0 {
  903. sqlId.JoinFormat(" and t.TRADEDATE >= '%v'", r.BEGINDATE)
  904. }
  905. if len(r.ENDDATE) > 0 {
  906. sqlId.JoinFormat(" and t.TRADEDATE <= '%v'", r.ENDDATE)
  907. }
  908. sqlId.Join(" order by t.ORDERTIME desc")
  909. sqlId.Page(r.Page, r.PageSize)
  910. return sqlId.String()
  911. }
  912. // GetDataByPage 获取仓单贸易委托单
  913. func (r *WrOrderDetail) GetDataByPage() (interface{}, error, int, int, int) {
  914. var sqlId string
  915. // 如果指定了开始日期或结束日期, 刚查历史
  916. if r.BEGINDATE != "" || r.ENDDATE != "" {
  917. sqlId = r.buildSqlHis()
  918. } else {
  919. sqlId = r.buildSql()
  920. }
  921. sData := make([]WrOrderDetail, 0)
  922. err := db.GetEngine().SQL(sqlId).Find(&sData)
  923. total := 0
  924. for i := range sData {
  925. sData[i].calc()
  926. total = sData[i].Total
  927. }
  928. return sData, err, r.Page, r.PageSize, total
  929. }
  930. // WrTradeDetail 仓单贸易成交明细
  931. type WrTradeDetail struct {
  932. HASWR int32 `json:"haswr" xorm:"HASWR" form:"haswr"` // 是否有仓单-卖方 - 0:无仓单 1:有仓单
  933. WRTRADEDETAILID string `json:"wrtradedetailid" xorm:"WRTRADEDETAILID"` // 仓单贸易成交单ID(321+Unix秒时间戳(10位)+xxxxxx)
  934. TRADEDATE string `json:"tradedate" xorm:"TRADEDATE" form:"tradedate"` // 交易日(yyyyMMdd)
  935. WRTRADETYPE int32 `json:"wrtradetype" xorm:"WRTRADETYPE" form:"wrtradetype"` // 仓单贸易类型 - 1:挂牌 2:摘牌 3:提货卖(文化中国) 4:提货买(文化中国)
  936. BUYORSELL int32 `json:"buyorsell" xorm:"BUYORSELL" form:"buyorsell"` // 买卖 - 0:买 1:卖(挂牌类型 买为采购 卖为销售)
  937. MARKETID int64 `json:"marketid" xorm:"MARKETID" form:"marketid"` // 市场ID
  938. USERID int64 `json:"userid" xorm:"USERID" form:"userid"` // 用户ID
  939. WRFACTORTYPEID int64 `json:"wrfactortypeid" xorm:"WRFACTORTYPEID"` // 仓单要素类型ID/商品ID(77)
  940. TRADEQTY float64 `json:"tradeqty" xorm:"TRADEQTY" form:"tradeqty"` // 成交数量
  941. TRADEPRICE float64 `json:"tradeprice" xorm:"TRADEPRICE" form:"tradeprice"` // 成交价格
  942. CHARGEVALUE float64 `json:"chargevalue" xorm:"'CHARGEVALUE'"` // 手续费
  943. TRADETIME string `json:"tradetime" xorm:"TRADETIME" form:"tradetime"` // 成交时间
  944. DELIVERYMONTH string `json:"deliverymonth" xorm:"'DELIVERYMONTH'"` // 交收月
  945. ACCOUNTID int64 `json:"accountid" xorm:"ACCOUNTID"` // 资金账号
  946. MATCHACCOUNTID int64 `json:"matchaccountid" xorm:"MATCHACCOUNTID"` // 对手账号
  947. MATCHUSERNAME string `json:"matchusername" xorm:"'MATCHUSERNAME'"` // 对手方
  948. BANNERPICURL string `json:"bannerpicurl" xorm:"BANNERPICURL"` // Banner图
  949. THUMURLS string `json:"thumurls" xorm:"thumurls"` // 缩略图
  950. Wr2FactorType `xorm:"extends"`
  951. PageEx `xorm:"extends"`
  952. BEGINDATE string `json:"begindate" form:"begindate"` // 开始交易日(yyyymmdd)
  953. ENDDATE string `json:"enddate" form:"enddate"` // 结束交易日(yyyymmdd)
  954. UNITID int32 `json:"unitid" xorm:"UNITID"` // 现货商品单位ID
  955. CONTRACTADDR string `json:"contractaddr" form:"CONTRACTADDR" xorm:"contractaddr"` // 合同地址
  956. }
  957. func (r *WrTradeDetail) calc() {
  958. r.Wr2FactorType.Calc()
  959. r.MATCHUSERNAME = EncryptByStar(r.MATCHUSERNAME)
  960. }
  961. func (r *WrTradeDetail) buildSql() string {
  962. var sqlId utils.SQLVal = "with tmp as" +
  963. " (select to_char(t.wrfactortypeid) wrfactortypeid," +
  964. " t.wrfactortypename," +
  965. " t.wrstandardid," +
  966. " t.deliverygoodsid," +
  967. " g.deliverygoodscode," +
  968. " g.deliverygoodsname," +
  969. " w.wrstandardcode," +
  970. " w.wrstandardname," +
  971. " w.bannerpicurl," +
  972. " w.thumurls," +
  973. " h.warehousecode," +
  974. " h.warehousename," +
  975. " e.enumdicname," +
  976. " w.wrstandardname || t.wrfactortypename2 as wrtypename," +
  977. " w.unitid" +
  978. " from wrfactortype t" +
  979. " left join deliverygoods g" +
  980. " on t.deliverygoodsid = g.deliverygoodsid" +
  981. " left join wrstandard w" +
  982. " on t.wrstandardid = w.wrstandardid" +
  983. " left join warehouseinfo h" +
  984. " on t.warehouseid = h.autoid" +
  985. " left join enumdicitem e on w.unitid = e.enumitemname and e.enumdiccode='goodsunit')" +
  986. "select t.HASWR," +
  987. " to_char(t.WRTRADEDETAILID) WRTRADEDETAILID," +
  988. " t.TRADEDATE," +
  989. " t.DELIVERYMONTH," +
  990. " t.WRTRADETYPE," +
  991. " t.BUYORSELL," +
  992. " t.MARKETID," +
  993. " t.TRADEQTY," +
  994. " t.TRADEPRICE," +
  995. " t.CHARGEVALUE," +
  996. " to_char(t.TRADETIME,'yyyy-mm-dd hh24:mi:ss') TRADETIME," +
  997. " u2.accountname matchusername," +
  998. " ta1.userid," +
  999. " case t.buyorsell when 0 then tq.contractaddrbuy else tq.contractaddrsell end contractaddr," +
  1000. " k.*" +
  1001. " from wrtrade_tradedetail t" +
  1002. " left join tmp k" +
  1003. " on t.wrfactortypeid = k.wrfactortypeid" +
  1004. " left join WRTrade_TradeQuote tq on t.wrtradedetailid = tq.wrtradedetailid" +
  1005. " left join taaccount ta1 on t.accountid=ta1.accountid" +
  1006. " left join taaccount ta2 on t.matchaccountid=ta2.accountid" +
  1007. " left join useraccount u2 on ta2.userid=u2.userid" +
  1008. " where 1=1"
  1009. sqlId.And("ta1.userid", r.USERID)
  1010. sqlId.And("t.haswr", r.HASWR)
  1011. sqlId.AndEx("t.marketid", r.MARKETID, r.MARKETID > 0)
  1012. sqlId.Join(" order by t.tradetime desc")
  1013. sqlId.Page(r.Page, r.PageSize)
  1014. return sqlId.String()
  1015. }
  1016. func (r *WrTradeDetail) buildSqlHis() string {
  1017. var sqlId utils.SQLVal = "with tmp as" +
  1018. " (select to_char(t.wrfactortypeid) wrfactortypeid," +
  1019. " t.wrfactortypename," +
  1020. " t.wrstandardid," +
  1021. " t.deliverygoodsid," +
  1022. " g.deliverygoodscode," +
  1023. " g.deliverygoodsname," +
  1024. " w.wrstandardcode," +
  1025. " w.wrstandardname," +
  1026. " h.warehousecode," +
  1027. " h.warehousename," +
  1028. " e.enumdicname," +
  1029. " w.wrstandardname || t.wrfactortypename2 as wrtypename," +
  1030. " w.unitid" +
  1031. " from wrfactortype t" +
  1032. " left join deliverygoods g" +
  1033. " on t.deliverygoodsid = g.deliverygoodsid" +
  1034. " left join wrstandard w" +
  1035. " on t.wrstandardid = w.wrstandardid" +
  1036. " left join warehouseinfo h" +
  1037. " on t.warehouseid = h.autoid" +
  1038. " left join enumdicitem e on w.unitid = e.enumitemname and e.enumdiccode='goodsunit')" +
  1039. "select t.HASWR," +
  1040. " to_char(t.WRTRADEDETAILID) WRTRADEDETAILID," +
  1041. " t.TRADEDATE," +
  1042. " t.DELIVERYMONTH," +
  1043. " t.WRTRADETYPE," +
  1044. " t.BUYORSELL," +
  1045. " t.MARKETID," +
  1046. " t.TRADEQTY," +
  1047. " t.TRADEPRICE," +
  1048. " t.CHARGEVALUE," +
  1049. " to_char(t.TRADETIME,'yyyy-mm-dd hh24:mi:ss') TRADETIME," +
  1050. " u2.accountname matchusername," +
  1051. " ta1.userid," +
  1052. " case t.buyorsell when 0 then tq.contractaddrbuy else tq.contractaddrsell end contractaddr," +
  1053. " k.*" +
  1054. " from his_wrtrade_tradedetail t" +
  1055. " left join WRTrade_TradeQuote tq on t.wrtradedetailid = tq.wrtradedetailid" +
  1056. " left join tmp k" +
  1057. " on t.wrfactortypeid = k.wrfactortypeid" +
  1058. " left join taaccount ta1 on t.accountid=ta1.accountid" +
  1059. " left join taaccount ta2 on t.matchaccountid=ta2.accountid" +
  1060. " left join useraccount u2 on ta2.userid=u2.userid" +
  1061. " where 1=1 and t.isvaliddata=1"
  1062. sqlId.And("ta1.userid", r.USERID)
  1063. sqlId.And("t.haswr", r.HASWR)
  1064. sqlId.AndEx("t.marketid", r.MARKETID, r.MARKETID > 0)
  1065. // 格式 yyyymmdd
  1066. if len(r.BEGINDATE) > 0 {
  1067. sqlId.JoinFormat(" and t.TRADEDATE >= '%v'", r.BEGINDATE)
  1068. }
  1069. if len(r.ENDDATE) > 0 {
  1070. sqlId.JoinFormat(" and t.TRADEDATE <= '%v'", r.ENDDATE)
  1071. }
  1072. sqlId.Join(" order by t.tradetime desc")
  1073. sqlId.Page(r.Page, r.PageSize)
  1074. return sqlId.String()
  1075. }
  1076. // GetDataByPage 获取仓单贸易成交明细
  1077. func (r *WrTradeDetail) GetDataByPage() (interface{}, error, int, int, int) {
  1078. var sqlId string
  1079. // 如果指定了开始日期或结束日期, 刚查历史
  1080. if r.BEGINDATE != "" || r.ENDDATE != "" {
  1081. sqlId = r.buildSqlHis()
  1082. } else {
  1083. sqlId = r.buildSql()
  1084. }
  1085. sData := make([]WrTradeDetail, 0)
  1086. err := db.GetEngine().SQL(sqlId).Find(&sData)
  1087. total := 0
  1088. for i := range sData {
  1089. sData[i].calc()
  1090. total = sData[i].Total
  1091. }
  1092. return sData, err, r.Page, r.PageSize, total
  1093. }
  1094. // WrSpecialMatchOrder 指定对手委托
  1095. type WrSpecialMatchOrder struct {
  1096. HASWR int32 `json:"haswr" xorm:"HASWR" form:"haswr"` // 是否有仓单-卖方 - 0:无仓单 1:有仓单
  1097. WRTRADEORDERID string `json:"wrtradeorderid" xorm:"WRTRADEORDERID"` // 仓单贸易委托单ID(320+Unix秒时间戳(10位)+xxxxxx)
  1098. TRADEDATE string `json:"tradedate" xorm:"TRADEDATE" form:"tradedate"` // 交易日(yyyyMMdd)
  1099. WRTRADETYPE int32 `json:"wrtradetype" xorm:"WRTRADETYPE" form:"wrtradetype"` // 仓单贸易类型 - 1:挂牌 2:摘牌 3:提货卖(文化中国) 4:提货买(文化中国)
  1100. BUYORSELL int32 `json:"buyorsell" xorm:"BUYORSELL" form:"buyorsell"` // 买卖 - 0:买 1:卖(挂牌类型 买为采购 卖为销售)
  1101. MARKETID int64 `json:"marketid" xorm:"MARKETID" form:"marketid"` // 市场ID
  1102. USERID int64 `json:"userid" xorm:"USERID" form:"userid"` // 用户ID
  1103. WRFACTORTYPEID int64 `json:"wrfactortypeid" xorm:"WRFACTORTYPEID"` // 仓单要素类型ID/商品ID(77)
  1104. ORDERQTY float64 `json:"orderqty" xorm:"ORDERQTY" form:"orderqty"` // 委托数量
  1105. TRADEQTY float64 `json:"tradeqty" xorm:"TRADEQTY" form:"tradeqty"` // 成交数量
  1106. CANCELQTY float64 `json:"cancelqty" xorm:"CANCELQTY" form:"cancelqty"` // 撤销数量
  1107. WRPRICETYPE int32 `json:"wrpricetype" xorm:"WRPRICETYPE" form:"wrpricetype"` // 价格方式 - 1:固定价 2-浮动价 - [挂牌]
  1108. FIXEDPRICE float64 `json:"fixedprice" xorm:"FIXEDPRICE" form:"fixedprice"` // 固定价格(价格)
  1109. PRICEMOVE float64 `json:"pricemove" xorm:"PRICEMOVE" form:"pricemove"` // 升贴水(浮动价时填写) - [挂牌]
  1110. TRADEPRICE float64 `json:"tradeprice" xorm:"TRADEPRICE" form:"tradeprice"` // 成交价格
  1111. ORDERTIME string `json:"ordertime" xorm:"ORDERTIME" form:"ordertime"` // 委托时间
  1112. WRTRADEORDERSTATUS int32 `json:"wrtradeorderstatus" xorm:"WRTRADEORDERSTATUS"` // 委托状态 - 1:委托请求 2:待冻结 3:委托成功 4:委托失败 5:配对成功 6:已撤 7:已成 8:成交失败 9:委托拒绝 10:挂牌部分成交 11:仓单生成失败 12:首付扣款失败 13:履约失败 14:撤单解冻贷款失败 15:部成部撤
  1113. USERNAME string `json:"username" xorm:"'USERNAME'"` // 发起方
  1114. MATCHUSERNAME string `json:"matchusername" xorm:"'MATCHUSERNAME'"` // 指定方
  1115. MATCHUSERID int64 `json:"matchuserid" xorm:"'MATCHUSERID'"` // 指定方资金账号(字段名为userid,实际存的是accountid by:邓工)
  1116. ISSPECIFIED int32 `json:"isspecified" xorm:"'ISSPECIFIED'" form:"isspecified"` // 是否指定对手 - 0:不指定 1:指定好友(贸易圈) 2:指定对手 - [挂牌]
  1117. Wr2FactorType `xorm:"extends"`
  1118. PageEx `xorm:"extends"`
  1119. AMOUNT float64 `json:"amount"` // 金额 = 数量 * 价格
  1120. }
  1121. func (r *WrSpecialMatchOrder) calc() {
  1122. r.AMOUNT = r.FIXEDPRICE * r.ORDERQTY
  1123. r.Wr2FactorType.Calc()
  1124. }
  1125. func (r *WrSpecialMatchOrder) buildSql() string {
  1126. var sqlId utils.SQLVal = "with tmp as" +
  1127. " (select t.wrfactortypeid," +
  1128. " t.wrfactortypename2 wrfactortypename," +
  1129. " t.wrstandardid," +
  1130. " t.deliverygoodsid," +
  1131. " g.deliverygoodscode," +
  1132. " g.deliverygoodsname," +
  1133. " w.wrstandardcode," +
  1134. " w.wrstandardname," +
  1135. " h.warehousecode," +
  1136. " h.warehousename," +
  1137. " e.enumdicname," +
  1138. " w.wrstandardname || t.wrfactortypename2 as wrtypename" +
  1139. " from wrfactortype t" +
  1140. " left join deliverygoods g" +
  1141. " on t.deliverygoodsid = g.deliverygoodsid" +
  1142. " left join wrstandard w" +
  1143. " on t.wrstandardid = w.wrstandardid" +
  1144. " left join warehouseinfo h" +
  1145. " on t.warehouseid = h.autoid" +
  1146. " left join enumdicitem e" +
  1147. " on w.unitid = e.enumitemname" +
  1148. " and e.enumdiccode = 'goodsunit')" +
  1149. "select t.HASWR," +
  1150. " to_char(t.WRTRADEORDERID) WRTRADEORDERID," +
  1151. " t.WRTRADETYPE," +
  1152. " t.ISSPECIFIED," +
  1153. " t.BUYORSELL," +
  1154. " t.MARKETID," +
  1155. " t.USERID," +
  1156. " t.ORDERQTY," +
  1157. " t.TRADEQTY," +
  1158. " t.CANCELQTY," +
  1159. " t.WRPRICETYPE," +
  1160. " t.FIXEDPRICE," +
  1161. " t.PRICEMOVE," +
  1162. " t.TRADEPRICE," +
  1163. " to_char(t.ORDERTIME, 'yyyy-mm-dd hh24:mi:ss') ORDERTIME," +
  1164. " t.WRTRADEORDERSTATUS," +
  1165. " m.matchuserid," +
  1166. " u1.accountname username," +
  1167. " u2.accountname matchusername," +
  1168. " k.*" +
  1169. " from wrtrade_orderdetail t" +
  1170. " left join WRTrade_MatchDetail m on t.wrtradeorderid=m.wrtradeorderid" +
  1171. " left join useraccount u1 on t.userid=u1.userid" +
  1172. " left join taaccount ta2 on m.matchuserid=ta2.accountid" +
  1173. " left join useraccount u2 on ta2.userid=u2.userid" +
  1174. " left join tmp k" +
  1175. " on t.wrfactortypeid = k.wrfactortypeid" +
  1176. " where t.WRTRADETYPE = 1" +
  1177. " and t.isspecified in (1,2)" +
  1178. " and t.WRTRADEORDERSTATUS = 3"
  1179. if r.ISSPECIFIED > 0 {
  1180. sqlId.And("t.isspecified", r.ISSPECIFIED)
  1181. } else {
  1182. sqlId.Join(" and t.isspecified in (1,2)")
  1183. }
  1184. sqlId.And("t.USERID", r.USERID)
  1185. sqlId.And("t.haswr", r.HASWR)
  1186. sqlId.AndEx("t.marketid", r.MARKETID, r.MARKETID > 0)
  1187. sqlId.Join(" order by t.ORDERTIME desc")
  1188. sqlId.Page(r.Page, r.PageSize)
  1189. return sqlId.String()
  1190. }
  1191. // GetDataByPage 获取指定对手委托
  1192. func (r *WrSpecialMatchOrder) GetDataByPage() (interface{}, error, int, int, int) {
  1193. sData := make([]WrSpecialMatchOrder, 0)
  1194. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  1195. total := 0
  1196. for i := range sData {
  1197. sData[i].calc()
  1198. total = sData[i].Total
  1199. }
  1200. return sData, err, r.Page, r.PageSize, total
  1201. }
  1202. // WrFactorTypeInfo 仓单要素选择项
  1203. type WrFactorTypeInfo struct {
  1204. WRFACTORTYPEID string `json:"wrfactortypeid" xorm:"'WRFACTORTYPEID'" form:"wrfactortypeid"` // 仓单要素ID
  1205. DGFACTORYITEMTYPEID int64 `json:"dgfactoryitemtypeid" xorm:"'DGFACTORYITEMTYPEID'"` // 要素选择项ID (1-仓库 2-品牌)
  1206. ITEMTYPENAME string `json:"itemtypename" xorm:"'ITEMTYPENAME'"` // 要素项名称
  1207. DGFACTORYITEMVALUE string `json:"dgfactoryitemvalue" xorm:"'DGFACTORYITEMVALUE'"` // 要素项值
  1208. OPTIONCOMPARE string `json:"optioncompare" xorm:"'OPTIONCOMPARE'"` // 选择比较串
  1209. WAREHOUSEID int64 `json:"warehouseid" xorm:"'WAREHOUSEID'"` // 仓库id
  1210. DELIVERYGOODSNAME string `json:"deliverygoodsname" xorm:"'DELIVERYGOODSNAME'"` // 品种名称
  1211. DELIVERYGOODSCODE string `json:"deliverygoodscode" xorm:"'DELIVERYGOODSCODE'"` // 品种代码
  1212. WRSTANDARDCODE string `json:"wrstandardcode" xorm:"'WRSTANDARDCODE'"` // 品类代码
  1213. WRSTANDARDNAME string `json:"wrstandardname" xorm:"'WRSTANDARDNAME'"` // 品类名称
  1214. WRSTANDARDID int64 `json:"wrstandardid" xorm:"'WRSTANDARDID'"` // 品类id
  1215. DGFACTORYITEMID int64 `json:"dgfactoryitemid" xorm:"'DGFACTORYITEMID'"` // 选择项id
  1216. WRFACTORTYPENAME string `json:"wrfactortypename" xorm:"'WRFACTORTYPENAME'"` // 要素名称
  1217. WRFACTORTYPENAME2 string `json:"wrfactortypename2" xorm:"'WRFACTORTYPENAME2'"` // 要素名称(不含仓库)
  1218. }
  1219. func (r *WrFactorTypeInfo) calc() {
  1220. }
  1221. func (r *WrFactorTypeInfo) buildSql() string {
  1222. var sqlId utils.SQLVal = "select to_char(t.wrfactortypeid) wrfactortypeid," +
  1223. " b.dgfactoryitemtypeid," +
  1224. " b.itemtypename," +
  1225. " c.dgfactoryitemvalue," +
  1226. " t.optioncompare," +
  1227. " t.warehouseid," +
  1228. " t.wrstandardid," +
  1229. " g.deliverygoodsname," +
  1230. " g.deliverygoodscode," +
  1231. " w.wrstandardcode," +
  1232. " w.wrstandardname," +
  1233. " c.dgfactoryitemid," +
  1234. " t.wrfactortypename," +
  1235. " t.wrfactortypename2" +
  1236. " from wrfactortype t" +
  1237. " inner join wrfactortypeitem a" +
  1238. " on t.wrfactortypeid = a.wrfactortypeid" +
  1239. " inner join dgfactoryitemtype b" +
  1240. " on t.deliverygoodsid = b.deliverygoodsid" +
  1241. " and a.dgfactoryitemtypeid = b.dgfactoryitemtypeid" +
  1242. " left join dgfactoryitem c" +
  1243. " on a.dgfactoryitemid = c.dgfactoryitemid" +
  1244. " and b.deliverygoodsid = c.deliverygoodsid" +
  1245. " left join deliverygoods g on t.deliverygoodsid=g.deliverygoodsid" +
  1246. " left join wrstandard w on t.wrstandardid=w.wrstandardid" +
  1247. " where 1 = 1"
  1248. sqlId.And("t.wrfactortypeid", r.WRFACTORTYPEID)
  1249. return sqlId.String()
  1250. }
  1251. // GetData 获取仓单要素选择项
  1252. func (r *WrFactorTypeInfo) GetData() ([]WrFactorTypeInfo, error) {
  1253. sData := make([]WrFactorTypeInfo, 0)
  1254. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  1255. for i := range sData {
  1256. sData[i].calc()
  1257. }
  1258. return sData, err
  1259. }
  1260. // GetDataEx 获取仓单要素选择项
  1261. func (r *WrFactorTypeInfo) GetDataEx() (interface{}, error) {
  1262. return r.GetData()
  1263. }
  1264. // GetItemList 获取要素项列表
  1265. func (r WrFactorTypeInfo) GetItemList() ([]WrTypeItem, error) {
  1266. d, err := r.GetData()
  1267. return r.buildItemList(d), err
  1268. }
  1269. func (r *WrFactorTypeInfo) buildItemList(lst []WrFactorTypeInfo) []WrTypeItem {
  1270. lstItem := make([]WrTypeItem, 0)
  1271. if len(lst) > 0 {
  1272. a := lst[0]
  1273. lstItem = append(lstItem, WrTypeItem{NAME: "品种", VALUE: a.DELIVERYGOODSNAME})
  1274. lstItem = append(lstItem, WrTypeItem{NAME: "商品", VALUE: a.WRSTANDARDNAME})
  1275. for _, b := range lst {
  1276. lstItem = append(lstItem, WrTypeItem{NAME: b.ITEMTYPENAME, VALUE: b.DGFACTORYITEMVALUE})
  1277. }
  1278. }
  1279. return lstItem
  1280. }
  1281. // WrFactorTypeInfoEx 类型id
  1282. type WrFactorTypeInfoEx struct {
  1283. WRFACTORTYPEID string `json:"wrfactortypeid" xorm:"'WRFACTORTYPEID'" form:"wrfactortypeid"`
  1284. }
  1285. // GetDataEx 获取仓单要素选择项
  1286. func (r *WrFactorTypeInfoEx) GetDataEx() (interface{}, error) {
  1287. m := WrFactorTypeInfo{WRFACTORTYPEID: r.WRFACTORTYPEID}
  1288. return m.GetItemList()
  1289. }
  1290. // WrGoodsPerformanceStep 商品履约步骤
  1291. type WrGoodsPerformanceStep struct {
  1292. AUTOID int64 `json:"autoid" xorm:"AUTOID" form:"autoid"` // AutoID
  1293. TEMPLATEID int64 `json:"templateid" xorm:"TEMPLATEID" form:"templateid"` // 履约计划模板ID
  1294. STEPINDEX int32 `json:"stepindex" xorm:"STEPINDEX" form:"stepindex"` // 步骤序号
  1295. STEPDAYS int32 `json:"stepdays" xorm:"STEPDAYS" form:"stepdays"` // 距离上一步天数
  1296. STEPTYPEID int32 `json:"steptypeid" xorm:"STEPTYPEID" form:"steptypeid"` // 履约步骤类型ID - 1:买方支付 2:卖方收款 3:买方自提 4:卖方发货 5:买方确认货 6:卖方发票 7:买方确认票 8:仓单转移 9:释放卖方冻结 10:货款溢短 11:生成合同[中江] 12:运费 90:确认支付 91. 确认放行 92买方支付(直接扣款) 用于-1模板“
  1297. STEPVALUE SFLOAT64 `json:"stepvalue" xorm:"STEPVALUE" form:"stepvalue"` // 步骤值
  1298. ISAUTO int32 `json:"isauto" xorm:"ISAUTO" form:"isauto"` // 是否自动 - 0:不自动 1:自动
  1299. REMARK string `json:"remark" xorm:"REMARK" form:"remark"` // 备注
  1300. STEPTYPENAME string `json:"steptypename" xorm:"'STEPTYPENAME'"` // 步骤名称
  1301. STEPINFO string `json:"stepinfo"` // 步骤信息(步骤名称+步骤值)
  1302. STEPDAYSINFO string `json:"stepdate"` // 天数信息(T+N)
  1303. WRSTANDARDID int64 `json:"-" form:"wrstandardid"` // 商品id
  1304. MARKETID int64 `json:"-" form:"marketid"` // 市场id
  1305. HASWR int32 `json:"-" form:"haswr"` // 是否有仓单-卖方 - 0:无仓单 1:有仓单
  1306. }
  1307. func (r *WrGoodsPerformanceStep) calc() {
  1308. switch r.STEPTYPEID {
  1309. case 1, 2, 98:
  1310. v := r.STEPVALUE * 100
  1311. v.Round(8) // fix bug: 0.56 * 100 之后变为 0.560000000001, 把后面多余的1去掉
  1312. r.STEPINFO = fmt.Sprintf("%v %v%%", r.STEPTYPENAME, v.string())
  1313. case 92:
  1314. r.STEPINFO = r.STEPTYPENAME
  1315. default:
  1316. if r.STEPVALUE == 0 {
  1317. r.STEPINFO = r.STEPTYPENAME
  1318. } else {
  1319. r.STEPINFO = fmt.Sprintf("%v %v", r.STEPTYPENAME, r.STEPVALUE)
  1320. }
  1321. }
  1322. r.STEPDAYSINFO = fmt.Sprintf("T+%v", r.STEPDAYS)
  1323. }
  1324. func (r *WrGoodsPerformanceStep) buildSqlByWrstandard() string {
  1325. var sqlId utils.SQLVal = "with tmp as" +
  1326. " (select decode(%v, 1, t.performancetempid, t.performancetempid2) tempid" +
  1327. " from marketspotgoodsconfig t" +
  1328. " where rownum <= 1 %v)" +
  1329. "select t.*, s.steptypename" +
  1330. " from PerformanceStepTemplate t" +
  1331. " inner join PerformanceStepType s" +
  1332. " on t.steptypeid = s.steptypeid" +
  1333. " inner join tmp" +
  1334. " on t.templateid = tmp.tempid" +
  1335. " order by t.stepindex"
  1336. var param utils.SQLVal
  1337. param.And("t.wrstandardid", r.WRSTANDARDID)
  1338. param.AndEx("t.marketid", r.MARKETID, r.MARKETID > 0)
  1339. sqlId.FormatParam(r.HASWR, param.String())
  1340. return sqlId.String()
  1341. }
  1342. func (r WrGoodsPerformanceStep) buildSqlByTmpId() string {
  1343. var sqlId utils.SQLVal = "select t.*, s.steptypename" +
  1344. " from PerformanceStepTemplate t" +
  1345. " inner join PerformanceStepType s" +
  1346. " on t.steptypeid = s.steptypeid" +
  1347. " where t.templateid=%v" +
  1348. " order by t.stepindex"
  1349. sqlId.FormatParam(r.TEMPLATEID)
  1350. return sqlId.String()
  1351. }
  1352. func (r WrGoodsPerformanceStep) buildSqlAll() string {
  1353. var sqlId utils.SQLVal = "select t.*, s.steptypename" +
  1354. " from PerformanceStepTemplate t" +
  1355. " inner join PerformanceStepType s" +
  1356. " on t.steptypeid = s.steptypeid" +
  1357. " where 1=1" +
  1358. " order by t.templateid, t.stepindex"
  1359. return sqlId.String()
  1360. }
  1361. func (r *WrGoodsPerformanceStep) buildSql() string {
  1362. if r.TEMPLATEID != 0 {
  1363. return r.buildSqlByTmpId()
  1364. } else if r.WRSTANDARDID > 0 {
  1365. return r.buildSqlByWrstandard()
  1366. } else {
  1367. return r.buildSqlAll()
  1368. }
  1369. }
  1370. // GetData 获取商品履约步骤
  1371. func (r *WrGoodsPerformanceStep) GetData() ([]WrGoodsPerformanceStep, error) {
  1372. sData := make([]WrGoodsPerformanceStep, 0)
  1373. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  1374. for i := range sData {
  1375. sData[i].calc()
  1376. sData[i].MARKETID = r.MARKETID
  1377. sData[i].WRSTANDARDID = r.WRSTANDARDID
  1378. }
  1379. return sData, err
  1380. }
  1381. // WrTypeItem 要素项
  1382. type WrTypeItem struct {
  1383. NAME string `json:"name"` // 名称
  1384. VALUE string `json:"value"` // 值
  1385. }
  1386. // WrGoodsInfo 仓单商品信息(仓单要素列展开+履约计划步骤)
  1387. type WrGoodsInfo struct {
  1388. WRFACTORTYPEID string `json:"-" form:"wrfactortypeid"` // 仓单要素ID
  1389. MARKETID int64 `json:"marketid" form:"marketid"` // 市场id
  1390. HASWR int32 `json:"haswr" form:"haswr"` // 0:仓单预售 1:仓单贸易
  1391. LstItem []WrTypeItem `json:"lstitem"` // 商品信息项
  1392. LstStep []WrGoodsPerformanceStep `json:"lststep"` // 履约规则
  1393. TMPLATEID int64 `json:"-" form:"tmplateid"` // 履约模板id
  1394. }
  1395. // GetDataEx 获取仓单商品信息(仓单要素列展开+履约计划步骤)
  1396. func (r *WrGoodsInfo) GetDataEx() (interface{}, error) {
  1397. sData := make([]WrGoodsInfo, 0)
  1398. mWrType := WrFactorTypeInfo{WRFACTORTYPEID: r.WRFACTORTYPEID}
  1399. // 获取要素项
  1400. if sType, err := mWrType.GetData(); err == nil {
  1401. v := WrGoodsInfo{LstItem: make([]WrTypeItem, 0), LstStep: make([]WrGoodsPerformanceStep, 0)}
  1402. if len(sType) > 0 {
  1403. v.LstItem = mWrType.buildItemList(sType)
  1404. a := sType[0]
  1405. // 获取履约规则
  1406. mStep := WrGoodsPerformanceStep{}
  1407. // 如果指定了履约模板id(-1是特殊的模板id:立即执行)
  1408. if r.TMPLATEID > 0 || r.TMPLATEID == -1 {
  1409. mStep.TEMPLATEID = r.TMPLATEID
  1410. } else {
  1411. mStep.MARKETID, mStep.WRSTANDARDID, mStep.HASWR = r.MARKETID, a.WRSTANDARDID, r.HASWR
  1412. }
  1413. if sStep, err := mStep.GetData(); err == nil && len(sStep) > 0 {
  1414. v.LstStep = append(v.LstStep, sStep...)
  1415. }
  1416. }
  1417. v.MARKETID = r.MARKETID
  1418. v.HASWR = r.HASWR
  1419. v.WRFACTORTYPEID = r.WRFACTORTYPEID
  1420. sData = append(sData, v)
  1421. }
  1422. return sData, nil
  1423. }
  1424. // WrPerformancePlan 履约信息(履约计划)
  1425. type WrPerformancePlan struct {
  1426. PERFORMANCEPLANID string `json:"performanceplanid" xorm:"PERFORMANCEPLANID" form:"performanceplanid"` // 履约计划ID(130+yyMMddHHmmss+xxxx)
  1427. PERFORMANCETYPE int32 `json:"performancetype" xorm:"PERFORMANCETYPE" form:"performancetype"` // 履约类型 - 0:通用 1:交割 2:仓单贸易 3:预售集采 4:竞拍-降价式 (无仓单) 5:挂牌期权 6:竞拍-降价式 7:竞拍-竞价式 8:竞拍-大宗式 9:荷兰式 10:法币C2C 11:报价系统 12:挂牌系统
  1428. RELATEDORDERID string `json:"relatedorderid" xorm:"RELATEDORDERID" form:"relatedorderid"` // 关联单号(履约类型的关联单号)
  1429. AMOUNT float64 `json:"amount" xorm:"AMOUNT" form:"amount"` // 履约金额(总金额)
  1430. PAYMENTTYPE int32 `json:"paymenttype" xorm:"PAYMENTTYPE" form:"paymenttype"` // 付款方式 - 1:冻结 2:扣款
  1431. PERFORMANCESTATUS int32 `json:"performancestatus" xorm:"PERFORMANCESTATUS" form:"performancestatus"` // 履约状态 - 1:初始化 2:正常 3:处理错误 4:违约待处理 5:违约处理中 6:完成 7.违约已完成 8:释放冻结失败 9:超时待处理 10:超时关闭
  1432. CURSTEPID string `json:"curstepid" xorm:"CURSTEPID" form:"curstepid"` // 当前步骤ID
  1433. BUYACCOUNTID int64 `json:"buyaccountid" xorm:"BUYACCOUNTID" form:"buyaccountid"` // 买方账号
  1434. WRTRANSFERUSERID int64 `json:"wrtransferuserid" xorm:"WRTRANSFERUSERID" form:"wrtransferuserid"` // 仓单受让用户
  1435. BUYPAIDAMOUNT float64 `json:"buypaidamount" xorm:"BUYPAIDAMOUNT" form:"buypaidamount"` // 买方已冻/已扣金额 (已付金额)
  1436. SELLACCOUNTID int64 `json:"sellaccountid" xorm:"SELLACCOUNTID" form:"sellaccountid"` // 卖方账号
  1437. SELLRECEIVEDAMOUNT float64 `json:"sellreceivedamount" xorm:"SELLRECEIVEDAMOUNT"` // 卖方已收金额
  1438. CREATETIME string `json:"createtime" xorm:"CREATETIME" form:"createtime"` // 创建时间
  1439. CREATORID int64 `json:"creatorid" xorm:"CREATORID" form:"creatorid"` // 创建人
  1440. REMARK string `json:"remark" xorm:"REMARK" form:"remark"` // 备注
  1441. BUYERFREEZEAMOUNT float64 `json:"buyerfreezeamount" xorm:"BUYERFREEZEAMOUNT"` // 履约冻结(买履约)
  1442. BUYERFREEZEAMOUNTREMAIN float64 `json:"buyerfreezeamountremain" xorm:"BUYERFREEZEAMOUNTREMAIN"` // 履约冻结剩余(买履约)
  1443. SELLERFREEZEAMOUNT float64 `json:"sellerfreezeamount" xorm:"SELLERFREEZEAMOUNT"` // 履约冻结(卖履约)
  1444. SELLERFREEZEAMOUNTREMAIN float64 `json:"sellerfreezeamountremain" xorm:"SELLERFREEZEAMOUNTREMAIN"` // 履约冻结剩余(卖履约)
  1445. OVERSHORTAMOUNT float64 `json:"overshortamount" xorm:"OVERSHORTAMOUNT" form:"overshortamount"` // 溢短金额
  1446. HASOVERSHORT int32 `json:"hasovershort" xorm:"HASOVERSHORT" form:"hasovershort"` // 是否确认溢短 - 0:没有 1:买方确认 2:卖方确认
  1447. SHIPREMARK string `json:"shipremark" xorm:"SHIPREMARK" form:"shipremark"` // 发货备注[物流单号]
  1448. MIDDLEUSERID int64 `json:"middleuserid" xorm:"MIDDLEUSERID" form:"middleuserid"` // 中间商用户ID
  1449. MIDDLEACCOUNTID int64 `json:"middleaccountid" xorm:"MIDDLEACCOUNTID" form:"middleaccountid"` // 中间商资金账号ID
  1450. HASWR int32 `json:"haswr" xorm:"HASWR" form:"haswr"` // 类型 0-仓单预售 1-仓单贸易
  1451. OVERSHORTQTY float64 `json:"overshortqty" xorm:"OVERSHORTQTY" form:"overshortqty"` // 溢短数量
  1452. MARKETID int32 `json:"marketid" xorm:"MARKETID" form:"marketid"` // 市场ID
  1453. EXPRESSFEECONFIRMED int32 `json:"expressfeeconfirmed" xorm:"EXPRESSFEECONFIRMED"` // 是否确认运费 - 0:无 1:买方确认 2:卖方确认
  1454. EXPRESSFEE float64 `json:"expressfee" xorm:"EXPRESSFEE" form:"expressfee"` // 运费
  1455. CONTRACTID int64 `json:"contractid" xorm:"CONTRACTID" form:"contractid"` // 合同ID
  1456. CURSTEPDEADLINE string `json:"curstepdeadline" xorm:"CURSTEPDEADLINE" form:"curstepdeadline"` // 当前步骤到期时间
  1457. STARTTIME string `json:"starttime" xorm:"'STARTTIME'"` // 当前步骤开始时间
  1458. QTY float64 `json:"qty" xorm:"QTY" form:"qty"` // 履约数量
  1459. STEPTYPEID int32 `json:"steptypeid" xorm:"STEPTYPEID" form:"steptypeid"` // 履约步骤类型ID - 1:买方支付 2:卖方收款 3:买方自提 4:卖方发货 5:买方确认货 6:卖方发票 7:买方确认票 8:仓单转移 9:释放卖方冻结 10:货款溢短 11:生成合同[中江] 12:运费 90:确认支付 91. 确认放行 92买方支付(直接扣款) 用于-1模板“
  1460. ACTIVATEMONTH string `json:"activatemonth" xorm:"'ACTIVATEMONTH'"` // 履约激活月 [无仓单的交易收月](yyyy-MM)
  1461. Wr2FactorType `xorm:"extends"`
  1462. EXECUTESIDE string `json:"executeside" xorm:"'EXECUTESIDE'"` // 步骤执行方 - 1:买方 2:卖方
  1463. BUYERINFO string `json:"buyerinfo" xorm:"BUYERINFO"` // 买方联系信息 - 存JSON字符串, 根据枚举‘BuyerContactInfo',显示\隐藏字段,若数据不为JSON,则直接显示{ "ContactInfo": "xxxxxxxx", "ReceiveInfo": "xxxxxxxxx", "ReceiptInfo": "xxxxxxxxxxxx"}
  1464. SELLERINFO string `json:"sellerinfo" xorm:"SELLERINFO"` // 卖方联系信息 - 存JSON字符串, 根据枚举‘SellerContactInfo',显示\隐藏字段,若数据不为JSON,则直接显示{ "ContactInfo": "xxxxxxxx"}
  1465. CURSTEPNAME string `json:"curstepname" xorm:"'CURSTEPNAME'"` // 当前步骤名称
  1466. BUYUSERNAME string `json:"buyusername" xorm:"'BUYUSERNAME'"` // 买方名字
  1467. SELLUSERNAME string `json:"sellusername" xorm:"'SELLUSERNAME'"` // 卖方名字
  1468. TYPENAME string `json:"typename" xorm:"'TYPENAME'"` // 履约类型 名称
  1469. USERID int64 `json:"userid" form:"userid" binding:"required"` // 用户id
  1470. BUYORSELL int32 `json:"buyorsell" form:"buyorsell" xorm:"BUYORSELL"` // 买卖方向 0-买 1-卖
  1471. STATUS string `json:"-" form:"status"` // 状态筛选
  1472. UNPAIDAMOUNT SFLOAT64 `json:"unpaidamount" xorm:"'UNPAIDAMOUNT'"` // 剩余款(待支付金额)
  1473. BEGINDATE string `json:"begindate" form:"begindate"` // 开始交易日(yyyymmdd)
  1474. ENDDATE string `json:"enddate" form:"enddate"` // 结束交易日(yyyymmdd)
  1475. }
  1476. func (r *WrPerformancePlan) calc() {
  1477. r.Wr2FactorType.Calc()
  1478. r.UNPAIDAMOUNT = SFLOAT64(r.AMOUNT - r.BUYPAIDAMOUNT)
  1479. r.SELLUSERNAME = EncryptByStar(r.SELLUSERNAME)
  1480. r.BUYUSERNAME = EncryptByStar(r.BUYUSERNAME)
  1481. }
  1482. func (r *WrPerformancePlan) buildSql() string {
  1483. var sqlId utils.SQLVal = `
  1484. with tmp as
  1485. (select
  1486. %v BUYORSELL,
  1487. to_char(t.wrfactortypeid) wrfactortypeid,
  1488. t.wrfactortypename,
  1489. t.wrstandardid,
  1490. t.deliverygoodsid,
  1491. g.deliverygoodscode,
  1492. g.deliverygoodsname,
  1493. w.wrstandardcode,
  1494. w.wrstandardname,
  1495. h.warehousecode,
  1496. h.warehousename,
  1497. e.enumdicname,
  1498. w.wrstandardname || t.wrfactortypename2 as wrtypename
  1499. from wrfactortype t
  1500. left join deliverygoods g
  1501. on t.deliverygoodsid = g.deliverygoodsid
  1502. left join wrstandard w
  1503. on t.wrstandardid = w.wrstandardid
  1504. left join warehouseinfo h
  1505. on t.warehouseid = h.autoid
  1506. left join enumdicitem e
  1507. on w.unitid = e.enumitemname
  1508. and e.enumdiccode = 'goodsunit')
  1509. select to_char(t.PERFORMANCEPLANID) PERFORMANCEPLANID,
  1510. t.PERFORMANCETYPE,
  1511. to_char(t.RELATEDORDERID) RELATEDORDERID,
  1512. t.AMOUNT,
  1513. t.PAYMENTTYPE,
  1514. t.PERFORMANCESTATUS,
  1515. to_char(t.CURSTEPID) CURSTEPID,
  1516. t.BUYACCOUNTID,
  1517. t.WRTRANSFERUSERID,
  1518. t.BUYPAIDAMOUNT,
  1519. t.SELLACCOUNTID,
  1520. t.SELLRECEIVEDAMOUNT,
  1521. t.BUYTODAYAMOUNT,
  1522. t.SELLTODAYAMOUNT,
  1523. to_char(t.CREATETIME, 'yyyy-mm-dd hh24:mi:ss') CREATETIME,
  1524. t.CREATORID,
  1525. t.REMARK,
  1526. t.BUYERFREEZEAMOUNT,
  1527. t.BUYERFREEZEAMOUNTREMAIN,
  1528. t.SELLERFREEZEAMOUNT,
  1529. t.SELLERFREEZEAMOUNTREMAIN,
  1530. t.OVERSHORTAMOUNT,
  1531. t.HASOVERSHORT,
  1532. t.SHIPREMARK,
  1533. t.MIDDLEUSERID,
  1534. t.MIDDLEACCOUNTID,
  1535. t.HASWR,
  1536. t.BUYERINFO,
  1537. t.SELLERINFO,
  1538. t.OVERSHORTQTY,
  1539. t.MARKETID,
  1540. t.EXPRESSFEECONFIRMED,
  1541. t.EXPRESSFEE,
  1542. t.CONTRACTID,
  1543. to_char(t.CURSTEPDEADLINE, 'yyyy-mm-dd hh24:mi:ss') CURSTEPDEADLINE,
  1544. t.QTY,
  1545. t.activatemonth,
  1546. u1.accountname buyusername,
  1547. u2.accountname sellusername,
  1548. s.steptypename CURSTEPNAME,
  1549. s.steptypeid,
  1550. to_char(k.starttime, 'yyyy-mm-dd hh24:mi:ss') starttime,
  1551. k.EXECUTESIDE,
  1552. tmp.*,
  1553. case when m.trademode=17 and t.haswr=1 then '仓单贸易'
  1554. when m.trademode=17 and t.haswr=0 then '仓单预售' else
  1555. m.marketname end as typename
  1556. from performanceplan t
  1557. left join taaccount a1
  1558. on t.buyaccountid = a1.accountid
  1559. left join useraccount u1
  1560. on a1.userid = u1.userid
  1561. left join taaccount a2
  1562. on t.sellaccountid = a2.accountid
  1563. left join useraccount u2
  1564. on a2.userid = u2.userid
  1565. left join performancestep k
  1566. on t.curstepid = k.performancestepid
  1567. left join performancesteptype s
  1568. on k.steptypeid = s.steptypeid
  1569. left join performanceplanwr f
  1570. on t.performanceplanid = f.performanceplanid
  1571. left join tmp
  1572. on f.wrfactortypeid = tmp.wrfactortypeid
  1573. left join market m on t.marketid=m.marketid
  1574. where 1 = 1
  1575. `
  1576. sqlId.FormatParam(r.BUYORSELL)
  1577. if r.BUYORSELL == 0 {
  1578. sqlId.And("u1.userid", r.USERID)
  1579. } else {
  1580. sqlId.And("u2.userid", r.USERID)
  1581. }
  1582. sqlId.JoinEx(r.STATUS != "", fmt.Sprintf(" and t.PERFORMANCESTATUS in(%v)", r.STATUS))
  1583. sqlId.Join(" order by t.CREATETIME desc")
  1584. return sqlId.String()
  1585. }
  1586. func (r *WrPerformancePlan) buildSqlHis() string {
  1587. var sqlId utils.SQLVal = `
  1588. with tmp as
  1589. (select
  1590. %v BUYORSELL,
  1591. to_char(t.wrfactortypeid) wrfactortypeid,
  1592. t.wrfactortypename,
  1593. t.wrstandardid,
  1594. t.deliverygoodsid,
  1595. g.deliverygoodscode,
  1596. g.deliverygoodsname,
  1597. w.wrstandardcode,
  1598. w.wrstandardname,
  1599. h.warehousecode,
  1600. h.warehousename,
  1601. e.enumdicname,
  1602. w.wrstandardname || t.wrfactortypename2 as wrtypename
  1603. from wrfactortype t
  1604. left join deliverygoods g
  1605. on t.deliverygoodsid = g.deliverygoodsid
  1606. left join wrstandard w
  1607. on t.wrstandardid = w.wrstandardid
  1608. left join warehouseinfo h
  1609. on t.warehouseid = h.autoid
  1610. left join enumdicitem e
  1611. on w.unitid = e.enumitemname
  1612. and e.enumdiccode = 'goodsunit')
  1613. select to_char(t.PERFORMANCEPLANID) PERFORMANCEPLANID,
  1614. t.PERFORMANCETYPE,
  1615. to_char(t.RELATEDORDERID) RELATEDORDERID,
  1616. t.AMOUNT,
  1617. t.PAYMENTTYPE,
  1618. t.PERFORMANCESTATUS,
  1619. to_char(t.CURSTEPID) CURSTEPID,
  1620. t.BUYACCOUNTID,
  1621. t.WRTRANSFERUSERID,
  1622. t.BUYPAIDAMOUNT,
  1623. t.SELLACCOUNTID,
  1624. t.SELLRECEIVEDAMOUNT,
  1625. t.BUYTODAYAMOUNT,
  1626. t.SELLTODAYAMOUNT,
  1627. to_char(t.CREATETIME, 'yyyy-mm-dd hh24:mi:ss') CREATETIME,
  1628. t.CREATORID,
  1629. t.REMARK,
  1630. t.BUYERFREEZEAMOUNT,
  1631. t.BUYERFREEZEAMOUNTREMAIN,
  1632. t.SELLERFREEZEAMOUNT,
  1633. t.SELLERFREEZEAMOUNTREMAIN,
  1634. t.OVERSHORTAMOUNT,
  1635. t.HASOVERSHORT,
  1636. t.SHIPREMARK,
  1637. t.MIDDLEUSERID,
  1638. t.MIDDLEACCOUNTID,
  1639. t.HASWR,
  1640. t.BUYERINFO,
  1641. t.SELLERINFO,
  1642. t.OVERSHORTQTY,
  1643. t.MARKETID,
  1644. t.EXPRESSFEECONFIRMED,
  1645. t.EXPRESSFEE,
  1646. t.CONTRACTID,
  1647. to_char(t.CURSTEPDEADLINE, 'yyyy-mm-dd hh24:mi:ss') CURSTEPDEADLINE,
  1648. t.QTY,
  1649. t.activatemonth,
  1650. u1.accountname buyusername,
  1651. u2.accountname sellusername,
  1652. s.steptypename CURSTEPNAME,
  1653. s.steptypeid,
  1654. to_char(k.starttime, 'yyyy-mm-dd hh24:mi:ss') starttime,
  1655. k.EXECUTESIDE,
  1656. tmp.*,
  1657. case when m.trademode=17 and t.haswr=1 then '仓单贸易'
  1658. when m.trademode=17 and t.haswr=0 then '仓单预售' else
  1659. m.marketname end as typename
  1660. from his_performanceplan t
  1661. left join taaccount a1
  1662. on t.buyaccountid = a1.accountid
  1663. left join useraccount u1
  1664. on a1.userid = u1.userid
  1665. left join taaccount a2
  1666. on t.sellaccountid = a2.accountid
  1667. left join useraccount u2
  1668. on a2.userid = u2.userid
  1669. left join (select * from his_performancestep where isvaliddata=1) k
  1670. on t.curstepid = k.performancestepid
  1671. left join performancesteptype s
  1672. on k.steptypeid = s.steptypeid
  1673. left join performanceplanwr f
  1674. on t.performanceplanid = f.performanceplanid
  1675. left join tmp
  1676. on f.wrfactortypeid = tmp.wrfactortypeid
  1677. left join market m on t.marketid=m.marketid
  1678. where 1 = 1 and t.isvaliddata=1
  1679. `
  1680. sqlId.FormatParam(r.BUYORSELL)
  1681. if r.BUYORSELL == 0 {
  1682. sqlId.And("u1.userid", r.USERID)
  1683. } else {
  1684. sqlId.And("u2.userid", r.USERID)
  1685. }
  1686. sqlId.JoinEx(r.STATUS != "", fmt.Sprintf(" and t.PERFORMANCESTATUS in(%v)", r.STATUS))
  1687. // 格式 yyyymmdd
  1688. if len(r.BEGINDATE) > 0 {
  1689. sqlId.JoinFormat(" and t.HISTRADEDATE >= '%v'", r.BEGINDATE)
  1690. }
  1691. if len(r.ENDDATE) > 0 {
  1692. sqlId.JoinFormat(" and t.HISTRADEDATE <= '%v'", r.ENDDATE)
  1693. }
  1694. sqlId.Join(" order by t.CREATETIME desc")
  1695. return sqlId.String()
  1696. }
  1697. // GetDataEx 获取履约信息(履约计划)
  1698. func (r *WrPerformancePlan) GetDataEx() (interface{}, error) {
  1699. var sqlId string
  1700. // 如果指定了开始日期或结束日期, 刚查历史
  1701. if r.BEGINDATE != "" || r.ENDDATE != "" {
  1702. sqlId = r.buildSqlHis()
  1703. } else {
  1704. sqlId = r.buildSql()
  1705. }
  1706. sData := make([]WrPerformancePlan, 0)
  1707. err := db.GetEngine().SQL(sqlId).Find(&sData)
  1708. for i := range sData {
  1709. sData[i].calc()
  1710. sData[i].BEGINDATE = r.BEGINDATE
  1711. sData[i].ENDDATE = r.ENDDATE
  1712. }
  1713. return sData, err
  1714. }
  1715. // WrHoldLB 仓单持有记录
  1716. type WrHoldLB struct {
  1717. LADINGBILLID string `json:"ladingbillid" xorm:"LADINGBILLID" form:"ladingbillid"` // 提单ID(208+Unix秒时间戳(10位)+xxxxxx)
  1718. SUBNUM int32 `json:"subnum" xorm:"SUBNUM" form:"subnum"` // 提单子单号
  1719. WRFACTORTYPEID string `json:"wrfactortypeid" xorm:"WRFACTORTYPEID" form:"wrfactortypeid"` // 仓单要素类型ID
  1720. DELIVERYGOODSID int32 `json:"deliverygoodsid" xorm:"DELIVERYGOODSID" form:"deliverygoodsid"` // 品种ID
  1721. QTY float64 `json:"qty" xorm:"QTY" form:"qty"` // 数量
  1722. FREEZERQTY float64 `json:"freezerqty" xorm:"FREEZERQTY" form:"freezerqty"` // 冻结数量
  1723. USERID int64 `json:"userid" xorm:"USERID" form:"userid"` // 持有人ID
  1724. ACCOUNTID int64 `json:"accountid" xorm:"ACCOUNTID" form:"accountid"` // 持有人帐户ID
  1725. CREATETIME string `json:"createtime" xorm:"CREATETIME" form:"createtime"` // 创建时间(过户时间)
  1726. TRADEDATE string `json:"tradedate" xorm:"TRADEDATE" form:"tradedate"` // 交易日(yyyyMMdd)
  1727. WRID string `json:"wrid" xorm:"WRID" form:"wrid"` // 仓单变更ID
  1728. PARENTSUBNUM int32 `json:"parentsubnum" xorm:"PARENTSUBNUM" form:"parentsubnum"` // 拆分父子单号
  1729. PLEDGEQTY float64 `json:"pledgeqty" xorm:"'-'"` // 质押数量
  1730. BANNERPICURL string `json:"bannerpicurl" xorm:"BANNERPICURL"` // Banner图
  1731. THUMURLS string `json:"thumurls" xorm:"thumurls"` // 缩略图
  1732. Wr2FactorType `xorm:"extends"`
  1733. WRHOLDENO string `json:"wrholdeno"` // 仓单编号
  1734. ENABLEQTY float64 `json:"enableqty"` // 可用数量
  1735. SPOTGOODSPRICE float64 `json:"spotgoodsprice" xorm:"'SPOTGOODSPRICE'"` // 参考价(THJ)
  1736. DGITEMNAME string `json:"-" form:"dgitemname"`
  1737. }
  1738. func (r *WrHoldLB) calc() {
  1739. r.WRHOLDENO = fmt.Sprintf("%v_%v", r.LADINGBILLID, r.SUBNUM)
  1740. r.ENABLEQTY = r.QTY - r.FREEZERQTY
  1741. r.Wr2FactorType.Calc()
  1742. }
  1743. func (r *WrHoldLB) buildSql() string {
  1744. var sqlId utils.SQLVal = "with tmp as" +
  1745. " (select t.wrfactortypeid," +
  1746. " t.wrfactortypename," +
  1747. " t.wrstandardid," +
  1748. " t.deliverygoodsid," +
  1749. " t.warehouseid," +
  1750. " g.deliverygoodscode," +
  1751. " g.deliverygoodsname," +
  1752. " w.wrstandardcode," +
  1753. " w.wrstandardname," +
  1754. " w.bannerpicurl," +
  1755. " w.thumurls," +
  1756. " w.minivalue," +
  1757. " h.warehousecode," +
  1758. " h.warehousename," +
  1759. " e.enumdicname," +
  1760. " w.wrstandardname || t.wrfactortypename2 as wrtypename" +
  1761. " from wrfactortype t" +
  1762. " left join deliverygoods g" +
  1763. " on t.deliverygoodsid = g.deliverygoodsid" +
  1764. " left join wrstandard w" +
  1765. " on t.wrstandardid = w.wrstandardid" +
  1766. " left join warehouseinfo h" +
  1767. " on t.warehouseid = h.autoid" +
  1768. " left join enumdicitem e" +
  1769. " on w.unitid = e.enumitemname" +
  1770. " and e.enumdiccode = 'goodsunit'" +
  1771. ")" +
  1772. "SELECT to_char(t.LADINGBILLID) LADINGBILLID," +
  1773. " t.SUBNUM," +
  1774. " to_char(t.WRFACTORTYPEID) WRFACTORTYPEID," +
  1775. " t.DELIVERYGOODSID," +
  1776. " t.QTY," +
  1777. " t.FREEZERQTY," +
  1778. " t.USERID," +
  1779. " t.ACCOUNTID," +
  1780. " to_char(t.CREATETIME, 'yyyy-mm-dd hh24:mi:ss') CREATETIME," +
  1781. " t.TRADEDATE," +
  1782. " to_char(t.WRID) WRID," +
  1783. " t.PARENTSUBNUM," +
  1784. " sgp.SPOTGOODSPRICE," +
  1785. " tmp.*" +
  1786. " FROM WRHOLDLB t" +
  1787. " LEFT JOIN tmp on t.wrfactortypeid= tmp.wrfactortypeid" +
  1788. " LEFT JOIN ERMCP_SpotGoodsPrice sgp ON sgp.deliverygoodsid = tmp.deliverygoodsid" +
  1789. " AND sgp.wrstandardid = tmp.wrstandardid AND sgp.spotgoodsbrandid =0 and sgp.currencyid = 1" +
  1790. " WHERE 1 = 1"
  1791. sqlId.And("t.ACCOUNTID", r.ACCOUNTID)
  1792. sqlId.AndEx("tmp.DELIVERYGOODSID", r.DELIVERYGOODSID, r.DELIVERYGOODSID > 0)
  1793. sqlId.AndEx("tmp.WRSTANDARDID", r.WRSTANDARDID, r.WRSTANDARDID > 0)
  1794. sqlId.AndEx("tmp.WAREHOUSEID", r.WAREHOUSEID, r.WAREHOUSEID > 0)
  1795. sqlId.AndInterEx("t.wrfactortypeid", r.WRFACTORTYPEID, r.WRFACTORTYPEID != "")
  1796. if d, ok := FtItemName(r.DGITEMNAME); ok {
  1797. sqlId.AndLikes("tmp.wrfactortypename", d...)
  1798. }
  1799. return sqlId.String()
  1800. }
  1801. // GetDataEx 获取仓单持有记录
  1802. func (r *WrHoldLB) GetDataEx() (interface{}, error) {
  1803. sData := make([]WrHoldLB, 0)
  1804. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  1805. for i := range sData {
  1806. sData[i].calc()
  1807. }
  1808. return sData, err
  1809. }
  1810. // WrFilterItem 筛选框列表项
  1811. type WrFilterItem struct {
  1812. ITEMTYPE int32 `json:"itemtype" xorm:"'ITEMTYPE'"` // 类型 1-品种 2-品类(商品) 3-仓库
  1813. ITEMNAME string `json:"itemname" xorm:"'ITEMNAME'"` // 名称
  1814. ITEMCODE string `json:"itemcode" xorm:"'ITEMCODE'"` // 代码
  1815. ITEMID int64 `json:"itemid" xorm:"'ITEMID'"` // 项id
  1816. IType string `json:"-" form:"itype"` // 类型 逗号隔开, 如 1,2
  1817. }
  1818. func (r *WrFilterItem) calc() {
  1819. }
  1820. func (r *WrFilterItem) buildSql() string {
  1821. if r.IType == "" {
  1822. r.IType = "1, 2, 3"
  1823. }
  1824. r.IType = strings.ReplaceAll(r.IType, " ", "")
  1825. sType := strings.Split(r.IType, ",")
  1826. sqls := make([]string, 0)
  1827. for _, v := range sType {
  1828. switch v {
  1829. case "1":
  1830. sqls = append(sqls, "select 1 itemtype, t.deliverygoodsid itemid, t.deliverygoodscode itemcode, to_char(t.deliverygoodsname) itemname from deliverygoods t")
  1831. case "2":
  1832. sqls = append(sqls, "select 2 itemtype, t.wrstandardid itemid, to_char(t.wrstandardcode) itemcode, to_char(t.wrstandardname) itemname from wrstandard t")
  1833. case "3":
  1834. sqls = append(sqls, "select 3 itemtype, t.autoid itemid, t.warehousecode itemcode, to_char(t.warehousename) itemname from warehouseinfo t")
  1835. default:
  1836. }
  1837. }
  1838. var sqlId string
  1839. for _, v := range sqls {
  1840. if len(sqlId) > 0 {
  1841. sqlId += " union all " + v
  1842. } else {
  1843. sqlId = v
  1844. }
  1845. }
  1846. sqlId += " order by itemtype, itemid"
  1847. return sqlId
  1848. }
  1849. // GetDataEx 获取筛选框列表项
  1850. func (r *WrFilterItem) GetDataEx() (interface{}, error) {
  1851. sData := make([]WrFilterItem, 0)
  1852. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  1853. for i := range sData {
  1854. sData[i].calc()
  1855. }
  1856. return sData, err
  1857. }
  1858. // WrPerformanPlanSum 履约中数量
  1859. type WrPerformanPlanSum struct {
  1860. USERID int64 `json:"userid" xorm:"'USERID'"` // 用户id
  1861. BUYORSELL int32 `json:"buyorsell" xorm:"'BUYORSELL'"` // 买卖方向
  1862. QTY float64 `json:"qty" xorm:"'QTY'"` // 履约中的数量
  1863. DELIVERYGOODSID int32 `json:"deliverygoodsid" xorm:"'DELIVERYGOODSID'"` // 品种id
  1864. WRSTANDARDID int64 `json:"wrstandardid" xorm:"'WRSTANDARDID'"` // 品类id
  1865. WAREHOUSEID int64 `json:"warehouseid" xorm:"'WAREHOUSEID'"` // 仓库id
  1866. WRTYPENAME string `json:"wrtypename" xorm:"'WRTYPENAME'"` // 商品
  1867. QueryType int32 `json:"querytype" form:"querytype"` // 查询类型 1-现货汇总 2-库存汇总
  1868. }
  1869. func (r *WrPerformanPlanSum) calc() {
  1870. if len(r.WRTYPENAME) > 0 {
  1871. r.WRTYPENAME = strings.ReplaceAll(r.WRTYPENAME, ",", "-")
  1872. }
  1873. }
  1874. // buildSql_XHHZ 现货汇总 履约中的数量
  1875. func (r *WrPerformanPlanSum) buildSql_XHHZ() string {
  1876. var sqlId utils.SQLVal = `
  1877. with tmp as
  1878. (select t.buyaccountid,
  1879. t.sellaccountid,
  1880. t.qty,
  1881. w.wrfactortypeid,
  1882. w.deliverygoodsid,
  1883. w.wrstandardid,
  1884. w.warehouseid,
  1885. wd.wrstandardname || w.wrfactortypename2 wrtypename,
  1886. u1.userid buyuserid,
  1887. u2.userid selluserid
  1888. from performanceplan t
  1889. left join performanceplanwr p
  1890. on t.performanceplanid = p.performanceplanid
  1891. left join warehousereciept f
  1892. on p.wrid = f.wrid
  1893. left join wrfactortype w
  1894. on f.wrfactortypeid = w.wrfactortypeid
  1895. left join wrstandard wd
  1896. on w.wrstandardid = wd.wrstandardid
  1897. left join taaccount ta1
  1898. on t.buyaccountid = ta1.accountid
  1899. left join useraccount u1
  1900. on ta1.userid = u1.userid
  1901. left join taaccount ta2
  1902. on t.sellaccountid = ta2.accountid
  1903. left join useraccount u2
  1904. on ta2.userid = u2.userid
  1905. where t.performancestatus in (2)
  1906. and %v in (u1.userid, u2.userid))
  1907. select k.buyuserid userid,
  1908. 0 as buyorsell,
  1909. k.deliverygoodsid,
  1910. k.wrstandardid,
  1911. k.wrtypename,
  1912. sum(k.qty) qty
  1913. from tmp k
  1914. group by k.buyuserid, k.deliverygoodsid, k.wrstandardid, k.wrtypename
  1915. union all
  1916. select k.selluserid userid,
  1917. 1 as buyorsell,
  1918. k.deliverygoodsid,
  1919. k.wrstandardid,
  1920. k.wrtypename,
  1921. sum(k.qty) qty
  1922. from tmp k
  1923. group by k.selluserid, k.deliverygoodsid, k.wrstandardid, k.wrtypename
  1924. `
  1925. sqlId.FormatParam(r.USERID)
  1926. return sqlId.String()
  1927. }
  1928. // buildSql_KCHZ 库存汇总 履约中的数量
  1929. func (r *WrPerformanPlanSum) buildSql_KCHZ() string {
  1930. // 跟buildSql_XHHZ()相比, group by 多了warehouseid字段
  1931. var sqlId utils.SQLVal = `
  1932. with tmp as
  1933. (select t.buyaccountid,
  1934. t.sellaccountid,
  1935. t.qty,
  1936. w.wrfactortypeid,
  1937. w.deliverygoodsid,
  1938. w.wrstandardid,
  1939. w.warehouseid,
  1940. wd.wrstandardname || w.wrfactortypename2 wrtypename,
  1941. u1.userid buyuserid,
  1942. u2.userid selluserid
  1943. from performanceplan t
  1944. left join performanceplanwr p
  1945. on t.performanceplanid = p.performanceplanid
  1946. left join warehousereciept f
  1947. on p.wrid = f.wrid
  1948. left join wrfactortype w
  1949. on f.wrfactortypeid = w.wrfactortypeid
  1950. left join wrstandard wd
  1951. on w.wrstandardid = wd.wrstandardid
  1952. left join taaccount ta1
  1953. on t.buyaccountid = ta1.accountid
  1954. left join useraccount u1
  1955. on ta1.userid = u1.userid
  1956. left join taaccount ta2
  1957. on t.sellaccountid = ta2.accountid
  1958. left join useraccount u2
  1959. on ta2.userid = u2.userid
  1960. where t.performancestatus in (2)
  1961. and %v in (u1.userid, u2.userid))
  1962. select k.buyuserid userid,
  1963. 0 as buyorsell,
  1964. k.deliverygoodsid,
  1965. k.wrstandardid,
  1966. k.warehouseid,
  1967. k.wrtypename,
  1968. sum(k.qty) qty
  1969. from tmp k
  1970. group by k.buyuserid,
  1971. k.deliverygoodsid,
  1972. k.wrstandardid,
  1973. k.warehouseid,
  1974. k.wrtypename
  1975. union all
  1976. select k.selluserid userid,
  1977. 1 as buyorsell,
  1978. k.deliverygoodsid,
  1979. k.wrstandardid,
  1980. k.warehouseid,
  1981. k.wrtypename,
  1982. sum(k.qty) qty
  1983. from tmp k
  1984. group by k.selluserid,
  1985. k.deliverygoodsid,
  1986. k.wrstandardid,
  1987. k.warehouseid,
  1988. k.wrtypename
  1989. `
  1990. sqlId.FormatParam(r.USERID)
  1991. return sqlId.String()
  1992. }
  1993. func (r *WrPerformanPlanSum) buildSql() string {
  1994. if r.QueryType == 1 {
  1995. return r.buildSql_XHHZ()
  1996. } else {
  1997. return r.buildSql_KCHZ()
  1998. }
  1999. }
  2000. // GetData 获取履约中数量
  2001. func (r *WrPerformanPlanSum) GetData() ([]WrPerformanPlanSum, error) {
  2002. sData := make([]WrPerformanPlanSum, 0)
  2003. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  2004. for i := range sData {
  2005. sData[i].calc()
  2006. }
  2007. return sData, err
  2008. }
  2009. // WrFAProductDetail 融资产品列表
  2010. type WrFAProductDetail struct {
  2011. PRODUCTDETAILID int64 `json:"productdetailid" xorm:"PRODUCTDETAILID" form:"productdetailid"` // 产品组合ID(SEQ_FINANCEAREAPRODUCTDETAIL)
  2012. PRODUCTID int64 `json:"productid" xorm:"PRODUCTID"` // 金融产品ID
  2013. AREAUSERID int64 `json:"areauserid" xorm:"AREAUSERID"` // 金融机构ID
  2014. FINANCINGDAYS int32 `json:"financingdays" xorm:"FINANCINGDAYS"` // 天数(天)
  2015. MARGINRATIO float64 `json:"marginratio" xorm:"MARGINRATIO"` // 保证金比率质押率 - [仓单质押]
  2016. INTERESTRATEMODE int32 `json:"interestratemode" xorm:"INTERESTRATEMODE"` // 利率方式 - 1:年利率 2:日利率 3:日固定值
  2017. INTERESTRATE float64 `json:"interestrate" xorm:"INTERESTRATE"` // 利率
  2018. INTERESTMINLEN int32 `json:"interestminlen" xorm:"INTERESTMINLEN"` // 最小起息天数
  2019. INTERESTSETTLEMODE int32 `json:"interestsettlemode" xorm:"INTERESTSETTLEMODE"` // 结息方式 - 1:按日结息 3:按月结息
  2020. INTERESTSETTLEVALUE int32 `json:"interestsettlevalue" xorm:"INTERESTSETTLEVALUE"` // 结息方式值
  2021. UPDATETIME string `json:"updatetime" xorm:"UPDATETIME"` // 更新时间
  2022. ISAUTOLOAN int32 `json:"isautoloan" xorm:"'ISAUTOLOAN'"` // 是否自动放款 0-手动 1-自动 (当为自动放款时,显示"放款快")
  2023. PRODUCTNAME string `json:"productname" xorm:"'PRODUCTNAME'"` // 产品名称
  2024. USERNAME string `json:"username" xorm:"'USERNAME'"` // 融出方
  2025. ACCOUNTID int64 `json:"accountid" xorm:"'ACCOUNTID'"` // 资金账号
  2026. LOANTAG string `json:"loantag"` // 放款标识: "放款快" 或者为空
  2027. WRSTANDARDID int64 `json:"-"` // 品类(商品)id
  2028. BRANDID int64 `json:"-"` // 品牌id
  2029. WAREHOUSEID int64 `json:"-"` // 仓库id
  2030. WRFACTORTYPEID string `json:"-" form:"wrfactortypeid"` // 仓单要素ID
  2031. }
  2032. func (r *WrFAProductDetail) calc() {
  2033. r.LOANTAG = IFValue(r.ISAUTOLOAN == 1, "放款快", "").(string)
  2034. r.USERNAME = EncryptByStar(r.USERNAME)
  2035. }
  2036. func (r *WrFAProductDetail) buildSqlByWrFactorTypeId() string {
  2037. var sqlId utils.SQLVal = "with tmp as" +
  2038. " (select distinct f.productid, f.isautoloan" +
  2039. " from FinanceAreaProductLimit f" +
  2040. " where 1 = 1" +
  2041. " and f.wrstandardid = %v" +
  2042. " and (f.spotgoodsbrandid like '%%,%v,%%' or f.spotgoodsbrandid like '%%,0,%%')" +
  2043. " and (f.warehouseinfoid like '%%,%v,%%' or f.warehouseinfoid like '%%,0,%%'))" +
  2044. "select t.PRODUCTDETAILID," +
  2045. " t.PRODUCTID," +
  2046. " t.AREAUSERID," +
  2047. " t.FINANCINGDAYS," +
  2048. " t.MARGINRATIO," +
  2049. " t.INTERESTRATEMODE," +
  2050. " t.INTERESTRATE," +
  2051. " t.INTERESTMINLEN," +
  2052. " t.INTERESTSETTLEMODE," +
  2053. " t.INTERESTSETTLEVALUE," +
  2054. " to_char(t.UPDATETIME, 'yyyy-mm-dd hh24:mi:ss') UPDATETIME," +
  2055. " p.productname," +
  2056. " p.accountid," +
  2057. " u.accountname username," +
  2058. " k.isautoloan" +
  2059. " from FinanceAreaProductDetail t" +
  2060. " left join FinanceAreaProduct p" +
  2061. " on t.productid = p.productid" +
  2062. " left join useraccount u" +
  2063. " on t.areauserid = u.userid" +
  2064. " inner join tmp k" +
  2065. " on t.productid = k.productid"
  2066. sqlId.FormatParam(r.WRSTANDARDID, r.BRANDID, r.WAREHOUSEID)
  2067. return sqlId.String()
  2068. }
  2069. func (r *WrFAProductDetail) buildSqlByProductDetailId() string {
  2070. var sqlId utils.SQLVal = "select t.PRODUCTDETAILID," +
  2071. " t.PRODUCTID," +
  2072. " t.AREAUSERID," +
  2073. " t.FINANCINGDAYS," +
  2074. " t.MARGINRATIO," +
  2075. " t.INTERESTRATEMODE," +
  2076. " t.INTERESTRATE," +
  2077. " t.INTERESTMINLEN," +
  2078. " t.INTERESTSETTLEMODE," +
  2079. " t.INTERESTSETTLEVALUE," +
  2080. " to_char(t.UPDATETIME, 'yyyy-mm-dd hh24:mi:ss') UPDATETIME," +
  2081. " p.productname," +
  2082. " p.accountid," +
  2083. " u.accountname username" +
  2084. " from FinanceAreaProductDetail t" +
  2085. " left join FinanceAreaProduct p" +
  2086. " on t.productid = p.productid" +
  2087. " left join useraccount u" +
  2088. " on t.areauserid = u.userid" +
  2089. " where 1=1"
  2090. sqlId.And("t.PRODUCTDETAILID", r.PRODUCTDETAILID)
  2091. return sqlId.String()
  2092. }
  2093. func (r *WrFAProductDetail) buildSql() string {
  2094. if r.PRODUCTDETAILID > 0 {
  2095. return r.buildSqlByProductDetailId()
  2096. } else {
  2097. return r.buildSqlByWrFactorTypeId()
  2098. }
  2099. }
  2100. // GetDataEx 获取融资产品列表
  2101. func (r *WrFAProductDetail) GetDataEx() (interface{}, error) {
  2102. sData := make([]WrFAProductDetail, 0)
  2103. m := WrFactorTypeInfo{WRFACTORTYPEID: r.WRFACTORTYPEID}
  2104. if d, err := m.GetData(); err == nil {
  2105. var brandid int64 = 0
  2106. for _, v := range d {
  2107. if v.DGFACTORYITEMTYPEID == 2 {
  2108. brandid = v.DGFACTORYITEMID
  2109. }
  2110. }
  2111. if brandid > 0 && len(d) > 0 {
  2112. r.BRANDID = brandid
  2113. r.WRSTANDARDID = d[0].WRSTANDARDID
  2114. r.WAREHOUSEID = d[0].WAREHOUSEID
  2115. _ = db.GetEngine().SQL(r.buildSql()).Find(&sData)
  2116. for i := range sData {
  2117. sData[i].calc()
  2118. sData[i].WRSTANDARDID = r.WRSTANDARDID
  2119. sData[i].BRANDID = r.BRANDID
  2120. sData[i].WAREHOUSEID = r.WAREHOUSEID
  2121. sData[i].WRFACTORTYPEID = r.WRFACTORTYPEID
  2122. }
  2123. }
  2124. }
  2125. return sData, nil
  2126. }
  2127. // WrMarketTradeConfig 市场交易参数配置
  2128. type WrMarketTradeConfig struct {
  2129. MARKETID int32 `json:"marketid" xorm:"MARKETID" form:"marketid"` // 市场ID-仓单贸易、竞拍、预售
  2130. BUYMARGINALGORITHM int32 `json:"buymarginalgorithm" xorm:"BUYMARGINALGORITHM" form:"buymarginalgorithm"` // 买方保证金方式 - 1:比率 2:固定
  2131. BUYMARGINVALUE float64 `json:"buymarginvalue" xorm:"BUYMARGINVALUE" form:"buymarginvalue"` // 买方保证金设置值
  2132. SELLMARGINALGORITHM int32 `json:"sellmarginalgorithm" xorm:"SELLMARGINALGORITHM" form:"sellmarginalgorithm"` // 卖方保证金方式 - 1:比率 2:固定
  2133. SELLMARGINVALUE float64 `json:"sellmarginvalue" xorm:"SELLMARGINVALUE" form:"sellmarginvalue"` // 卖方保证金设置值
  2134. SELLMARGINVALUE2 float64 `json:"sellmarginvalue2" xorm:"SELLMARGINVALUE2" form:"sellmarginvalue2"` // 卖方保证金设置值(无仓单)
  2135. BUYCHARGEALGORITHM int32 `json:"buychargealgorithm" xorm:"BUYCHARGEALGORITHM" form:"buychargealgorithm"` // 买方手续费收取方式 1:比率 2:固定
  2136. BUYCHARGEALGORITHMVALUE float64 `json:"buychargealgorithmvalue" xorm:"BUYCHARGEALGORITHMVALUE" form:"buychargealgorithmvalue"` // 买方手续费设置值(交易所部分)
  2137. BUYCHARGEALGORITHMVALUE2 float64 `json:"buychargealgorithmvalue2" xorm:"BUYCHARGEALGORITHMVALUE2" form:"buychargealgorithmvalue2"` // 买方手续费设置值(会员部分)
  2138. SELLCHARGEALGORITHM int32 `json:"sellchargealgorithm" xorm:"SELLCHARGEALGORITHM" form:"sellchargealgorithm"` // 卖方手续费收取方式 1:比率 2:固定
  2139. SELLCHARGEALGORITHMVALUE float64 `json:"sellchargealgorithmvalue" xorm:"SELLCHARGEALGORITHMVALUE" form:"sellchargealgorithmvalue"` // 卖方手续费设置值(交易所部分)
  2140. SELLCHARGEALGORITHMVALUE2 float64 `json:"sellchargealgorithmvalue2" xorm:"SELLCHARGEALGORITHMVALUE2" form:"sellchargealgorithmvalue2"` // 卖方手续费设置值(会员部分)
  2141. FAILEDCHARGEALGORITHM int32 `json:"failedchargealgorithm" xorm:"FAILEDCHARGEALGORITHM" form:"failedchargealgorithm"` // 流拍手续费收取方式 1:比率 2:固定
  2142. FAILEDCHARGEVALUE float64 `json:"failedchargevalue" xorm:"FAILEDCHARGEVALUE" form:"failedchargevalue"` // 流拍手续费设置值
  2143. FAILEDCHARGEVALUE2 float64 `json:"failedchargevalue2" xorm:"FAILEDCHARGEVALUE2" form:"failedchargevalue2"` // 流拍卖方手续费设置值
  2144. BUYFIRSTMARGINALGORITHM int32 `json:"buyfirstmarginalgorithm" xorm:"BUYFIRSTMARGINALGORITHM" form:"buyfirstmarginalgorithm"` // 买方出价保证金方式 - 1:比率 2:固定 - [竞拍]
  2145. BUYFIRSTMARGINVALUE float64 `json:"buyfirstmarginvalue" xorm:"BUYFIRSTMARGINVALUE" form:"buyfirstmarginvalue"` // 买方出价保证金设置值 - [竞拍]
  2146. PERFORMANCEWAY int32 `json:"performanceway" xorm:"PERFORMANCEWAY" form:"performanceway"` // 交货模式 - 1:履约计划 2:分步履约 3:分步提货[文昌]
  2147. PERFORMANCETEMPID int64 `json:"performancetempid" xorm:"PERFORMANCETEMPID" form:"performancetempid"` // 履约计划模板ID(有仓单) - 根据交货模式:1:履约 - 履约计划模板2:分步履约 - 履约计划模板3:分步提货 - 履约方式: 立即执行(-1)
  2148. PERFORMANCETEMPID2 int64 `json:"performancetempid2" xorm:"PERFORMANCETEMPID2" form:"performancetempid2"` // 履约计划模板ID(无仓单) - 根据交货模式:1:履约 - 履约计划模板2:分步履约 - 履约计划模板3:分步提货 - 履约方式: 立即执行
  2149. BUYRELEASERATIO float64 `json:"buyreleaseratio" xorm:"BUYRELEASERATIO" form:"buyreleaseratio"` // 买方释放比率[2:分步履约]
  2150. SELLRELEASERATIO float64 `json:"sellreleaseratio" xorm:"SELLRELEASERATIO" form:"sellreleaseratio"` // 卖方释放比率[2:分步履约]
  2151. EXECUTEMODE int32 `json:"executemode" xorm:"EXECUTEMODE" form:"executemode"` // 执行方式[2:分步履约] - 1:顺序执行 2:交叉执行
  2152. EXECUTESIDE int32 `json:"executeside" xorm:"EXECUTESIDE" form:"executeside"` // 执行方[2:分步履约] - 1:买方 2:卖方
  2153. MINQTY float64 `json:"minqty" xorm:"MINQTY" form:"minqty"` // 最小执行量[2:分步履约]
  2154. HOLDDAYS int32 `json:"holddays" xorm:"HOLDDAYS" form:"holddays"` // 合同期限[2:分步履约]
  2155. MODIFIERID int64 `json:"modifierid" xorm:"MODIFIERID" form:"modifierid"` // 修改人
  2156. UPDATETIME string `json:"updatetime" xorm:"UPDATETIME" form:"updatetime"` // 更新时间
  2157. BUYCHARGEALGORITHM2 int32 `json:"buychargealgorithm2" xorm:"BUYCHARGEALGORITHM2" form:"buychargealgorithm2"` // 回购买方手续费收取方式 1:比率 2:固定 --77:现货商城
  2158. BUYCHARGEALGORITHMVALUE3 float64 `json:"buychargealgorithmvalue3" xorm:"BUYCHARGEALGORITHMVALUE3" form:"buychargealgorithmvalue3"` // 回购买方手续费设置值(交易所部分) --77:现货商城
  2159. BUYCHARGEALGORITHMVALUE4 float64 `json:"buychargealgorithmvalue4" xorm:"BUYCHARGEALGORITHMVALUE4" form:"buychargealgorithmvalue4"` // 回购买方手续费设置值(会员部分) --77:现货商城
  2160. SELLCHARGEALGORITHM2 int32 `json:"sellchargealgorithm2" xorm:"SELLCHARGEALGORITHM2" form:"sellchargealgorithm2"` // 回购卖方手续费收取方式 1:比率 2:固定 --77:现货商城
  2161. SELLCHARGEALGORITHMVALUE3 float64 `json:"sellchargealgorithmvalue3" xorm:"SELLCHARGEALGORITHMVALUE3" form:"sellchargealgorithmvalue3"` // 回购卖方手续费设置值(交易所部分) --77:现货商城
  2162. SELLCHARGEALGORITHMVALUE4 float64 `json:"sellchargealgorithmvalue4" xorm:"SELLCHARGEALGORITHMVALUE4" form:"sellchargealgorithmvalue4"` // 回购卖方手续费设置值(会员部分) --77:现货商城
  2163. BASISUPRATIO float64 `json:"basisupratio" xorm:"'BASISUPRATIO'"` // 浮动价基差上限比例(仓单贸易)
  2164. BASISDOWNRATIO float64 `json:"basisdownratio" xorm:"'BASISDOWNRATIO'"` // 浮动价基差下限比例(仓单贸易)
  2165. PERFORMANCETEMPIDS string `json:"performancetempids" xorm:"PERFORMANCETEMPIDS"` // 履约计划模板IDs(有仓单)- 根据交货模式, 多个逗号分隔:1:履约 - 履约计划模板2:分步履约 - 履约计划模板3:分步提货 - 履约方式: 立即执行(-1)
  2166. PERFORMANCETEMPID2S string `json:"performancetempid2s" xorm:"PERFORMANCETEMPID2S"` // 履约计划模板IDs(无仓单) - 根据交货模式, 多个逗号分隔:1:履约 - 履约计划模板2:分步履约 - 履约计划模板3:分步提货 - 履约方式: 立即执行
  2167. NOWRQUOTAFLAG int `json:"nowrquotaflag" xorm:"'NOWRQUOTAFLAG'"` // 是否校验无仓单额度(仓单贸易) - 0:否 1:是
  2168. LISTINGMODE int `json:"listingmode" xorm:"'LISTINGMODE'"` // 挂牌方式 - 1:一口价 2:浮动价 3:贸易圈 4:协议指定
  2169. }
  2170. func (r *WrMarketTradeConfig) calc() {
  2171. r.PERFORMANCETEMPIDS = strings.Trim(r.PERFORMANCETEMPIDS, ",")
  2172. r.PERFORMANCETEMPID2S = strings.Trim(r.PERFORMANCETEMPID2S, ",")
  2173. }
  2174. func (r *WrMarketTradeConfig) buildSql() string {
  2175. var sqlId utils.SQLVal = "select * from markettradeconfig t where 1=1"
  2176. sqlId.AndEx("t.MARKETID", r.MARKETID, r.MARKETID > 0)
  2177. return sqlId.String()
  2178. }
  2179. // GetDataEx 获取市场交易参数配置
  2180. func (r *WrMarketTradeConfig) GetDataEx() (interface{}, error) {
  2181. sData := make([]WrMarketTradeConfig, 0)
  2182. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  2183. for i := range sData {
  2184. sData[i].calc()
  2185. }
  2186. return sData, err
  2187. }
  2188. // WrFtWrstandard 品类筛选列表
  2189. type WrFtWrstandard struct {
  2190. WRSTANDARDID int64 `json:"wrstandardid"` // 现货商品ID
  2191. WRSTANDARDCODE string `json:"wrstandardcode"` // 现货商品代码
  2192. WRSTANDARDNAME string `json:"wrstandardname"` // 商品名称
  2193. MINIVALUE int32 `json:"minivalue"` // 最小变动值
  2194. EnumdicName string `json:"enumdicname"` // 单位名称
  2195. }
  2196. // WrFtDeliveryGoods 品种筛选列表
  2197. type WrFtDeliveryGoods struct {
  2198. DELIVERYGOODSID int32 `json:"deliverygoodsid"` // 品种ID
  2199. DELIVERYGOODSCODE string `json:"deliverygoodscode"` // 品种代码
  2200. DELIVERYGOODSNAME string `json:"deliverygoodsname"` // 品种名称
  2201. WDLST []WrFtWrstandard `json:"wdlst"` // 商品列表
  2202. }
  2203. // GetDataEx 获取品种商品筛选列表
  2204. func (r *WrFtDeliveryGoods) GetDataEx() (interface{}, error) {
  2205. sData := make([]WrFtDeliveryGoods, 0)
  2206. mg := ErmcpDeliveryGoods{}
  2207. sMgData, err := mg.GetData()
  2208. if err == nil {
  2209. mWd := Ermcp3Wrstandard{}
  2210. if d, er := mWd.GetDataEx(); er == nil {
  2211. if sMd, ok := d.([]Ermcp3Wrstandard); ok {
  2212. for _, v := range sMgData {
  2213. item := WrFtDeliveryGoods{
  2214. DELIVERYGOODSID: v.DELIVERYGOODSID,
  2215. DELIVERYGOODSCODE: v.DELIVERYGOODSCODE,
  2216. DELIVERYGOODSNAME: v.DELIVERYGOODSNAME,
  2217. WDLST: make([]WrFtWrstandard, 0),
  2218. }
  2219. for _, a := range sMd {
  2220. if a.DELIVERYGOODSID == item.DELIVERYGOODSID && a.CANTRADE == 1 {
  2221. val := WrFtWrstandard{
  2222. WRSTANDARDID: a.WRSTANDARDID,
  2223. WRSTANDARDNAME: a.WRSTANDARDNAME,
  2224. WRSTANDARDCODE: a.WRSTANDARDCODE,
  2225. MINIVALUE: a.MINIVALUE,
  2226. EnumdicName: a.EnumdicName,
  2227. }
  2228. item.WDLST = append(item.WDLST, val)
  2229. }
  2230. }
  2231. // 有品类的品种才要, 终端不显示无品类的品种
  2232. if len(item.WDLST) > 0 {
  2233. sData = append(sData, item)
  2234. }
  2235. }
  2236. }
  2237. }
  2238. }
  2239. return sData, err
  2240. }
  2241. // WrStandardFactoryItem 现货商品要素定义项
  2242. type WrStandardFactoryItem struct {
  2243. WRSTANDARDID int64 `json:"-" xorm:"'WRSTANDARDID'" form:"wrstandardid"` // 品类
  2244. DGFACTORYITEMTYPEID int64 `json:"-" xorm:"'DGFACTORYITEMTYPEID'"` // 要素项类型id(1-999:预留为特殊类型 1:仓库 2:品牌)
  2245. ITEMTYPENAME string `json:"-" xorm:"'ITEMTYPENAME'"` // 要素项类型名称
  2246. DGFACTORYITEMID int64 `json:"dgfactoryitemid" xorm:"'DGFACTORYITEMID'"` // 选择项id
  2247. DGFACTORYITEMVALUE string `json:"dgfactoryitemvalue" xorm:"'DGFACTORYITEMVALUE'"` // 要素项值
  2248. WAREHOUSEID int64 `json:"warehouseid" xorm:"'WAREHOUSEID'"` // 仓库id
  2249. WMCATFLAG int `json:"-"` // 合同相同项(如有多个仓库, 逗号隔开, 仓库1, 仓库2, 仓库3 ) 1-合并
  2250. }
  2251. func (r *WrStandardFactoryItem) calc() {
  2252. }
  2253. func (r *WrStandardFactoryItem) buildSql() string {
  2254. var sqlId utils.SQLVal = "select t.wrstandardid," +
  2255. " dp.dgfactoryitemtypeid," +
  2256. " dp.itemtypename," +
  2257. " di.dgfactoryitemid," +
  2258. " di.warehouseid," +
  2259. " di.dgfactoryitemvalue" +
  2260. " from wrstandardfactoryitem t" +
  2261. " inner join wrstandard w" +
  2262. " on t.wrstandardid = w.wrstandardid" +
  2263. " inner join dgfactoryitemtype dp" +
  2264. " on t.dgfactoryitemtypeid = dp.dgfactoryitemtypeid" +
  2265. " and dp.deliverygoodsid = w.deliverygoodsid" +
  2266. " inner join dgfactoryitem di" +
  2267. " on t.dgfactoryitemid = di.dgfactoryitemid" +
  2268. " and di.deliverygoodsid = w.deliverygoodsid" +
  2269. " where dp.isvalid = 1" +
  2270. " and di.isvalid = 1"
  2271. sqlId.And("t.WRSTANDARDID", r.WRSTANDARDID)
  2272. sqlId.Join(" order by t.dgfactoryitemtypeid, di.orderindex")
  2273. // 合并同类项名称
  2274. if r.WMCATFLAG == 1 {
  2275. sqlId = `
  2276. select t.wrstandardid,
  2277. dp.dgfactoryitemtypeid,
  2278. dp.itemtypename,
  2279. wm_concat(di.dgfactoryitemvalue) dgfactoryitemvalue
  2280. from wrstandardfactoryitem t
  2281. inner join wrstandard w
  2282. on t.wrstandardid = w.wrstandardid
  2283. inner join dgfactoryitemtype dp
  2284. on t.dgfactoryitemtypeid = dp.dgfactoryitemtypeid
  2285. and dp.deliverygoodsid = w.deliverygoodsid
  2286. inner join dgfactoryitem di
  2287. on t.dgfactoryitemid = di.dgfactoryitemid
  2288. and di.deliverygoodsid = w.deliverygoodsid
  2289. where dp.isvalid = 1
  2290. and di.isvalid = 1
  2291. and t.wrstandardid = %v
  2292. group by t.wrstandardid, dp.dgfactoryitemtypeid, dp.itemtypename
  2293. `
  2294. sqlId.FormatParam(r.WRSTANDARDID)
  2295. }
  2296. return sqlId.String()
  2297. }
  2298. // GetDataEx 获取现货商品要素定义项
  2299. func (r *WrStandardFactoryItem) GetDataEx() (interface{}, error) {
  2300. sData := make([]WrStandardFactoryItem, 0)
  2301. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  2302. for i := range sData {
  2303. sData[i].calc()
  2304. }
  2305. return sData, err
  2306. }
  2307. // WrStandardFactoryItemEx 现货商品要素定义项列表
  2308. type WrStandardFactoryItemEx struct {
  2309. WRSTANDARDID int64 `json:"wrstandardid" form:"wrstandardid"` // 品类
  2310. DGFACTORYITEMTYPEID int64 `json:"dgfactoryitemtypeid"` // 要素项类型id(1-999:预留为特殊类型 1:仓库 2:品牌)
  2311. ITEMTYPENAME string `json:"itemtypename"` // 要素项类型名称
  2312. ItemLst []WrStandardFactoryItem `json:"itemlst"` // 要素项列表
  2313. }
  2314. // GetDataEx 获取现货商品要素定义项列表
  2315. func (r *WrStandardFactoryItemEx) GetDataEx() (interface{}, error) {
  2316. sData := make([]WrStandardFactoryItemEx, 0)
  2317. m := WrStandardFactoryItem{WRSTANDARDID: r.WRSTANDARDID}
  2318. if d, err := m.GetDataEx(); err == nil {
  2319. if lst, ok := d.([]WrStandardFactoryItem); ok {
  2320. mapLst := map[int64]WrStandardFactoryItemEx{}
  2321. for _, v := range lst {
  2322. if a, ok := mapLst[v.DGFACTORYITEMTYPEID]; ok {
  2323. a.ItemLst = append(a.ItemLst, v)
  2324. mapLst[v.DGFACTORYITEMTYPEID] = a
  2325. } else {
  2326. val := WrStandardFactoryItemEx{
  2327. WRSTANDARDID: v.WRSTANDARDID,
  2328. DGFACTORYITEMTYPEID: v.DGFACTORYITEMTYPEID,
  2329. ITEMTYPENAME: v.ITEMTYPENAME,
  2330. ItemLst: make([]WrStandardFactoryItem, 0),
  2331. }
  2332. val.ItemLst = append(val.ItemLst, v)
  2333. mapLst[v.DGFACTORYITEMTYPEID] = val
  2334. }
  2335. }
  2336. for _, ex := range mapLst {
  2337. sData = append(sData, ex)
  2338. }
  2339. sort.Slice(sData, func(i, j int) bool {
  2340. return sData[i].DGFACTORYITEMTYPEID < sData[j].DGFACTORYITEMTYPEID
  2341. })
  2342. }
  2343. }
  2344. return sData, nil
  2345. }
  2346. // WrPerformancePlanStep 履约计划详情
  2347. type WrPerformancePlanStep struct {
  2348. PERFORMANCESTEPID string `json:"performancestepid" xorm:"PERFORMANCESTEPID" form:"curstepid"` // 履约步骤ID(131+Unix秒时间戳(10位)+xxxxxx)
  2349. PLANID string `json:"planid" xorm:"PLANID" form:"planid"` // 所属履约计划ID
  2350. STEPINDEX int32 `json:"stepindex" xorm:"STEPINDEX" form:"stepindex"` // 步骤序号
  2351. STEPDAYS int32 `json:"stepdays" xorm:"STEPDAYS" form:"stepdays"` // 距离上一步天数(分钟)
  2352. STEPTYPEID int32 `json:"steptypeid" xorm:"STEPTYPEID" form:"steptypeid"` // 履约步骤类型ID - 1:买方支付 2:卖方收款 3:买方自提 4:卖方发货 5:买方确认货 6:卖方发票 7:买方确认票 8:仓单转移 9:释放卖方冻结 10:货款溢短 11:生成合同[中江] 12:运费 90:确认支付 91. 确认放行 92买方支付(直接扣款) 用于-1模板“
  2353. STEPVALUE float64 `json:"stepvalue" xorm:"STEPVALUE" form:"stepvalue"` // 步骤值
  2354. STEPAMOUNT float64 `json:"stepamount" xorm:"STEPAMOUNT" form:"stepamount"` // 步骤金额
  2355. REALAMOUNT float64 `json:"realamount" xorm:"REALAMOUNT" form:"realamount"` // 实际完成金额
  2356. REMAINDAYS int32 `json:"remaindays" xorm:"REMAINDAYS" form:"remaindays"` // 剩余天数
  2357. DELAYDAYS int32 `json:"delaydays" xorm:"DELAYDAYS" form:"delaydays"` // 延期申请天数
  2358. ISAUTO int32 `json:"isauto" xorm:"ISAUTO" form:"isauto"` // 是否自动 - 0:不自动 1:自动
  2359. ISLASTRECEIVESTEP int32 `json:"islastreceivestep" xorm:"ISLASTRECEIVESTEP"` // 是否最后收款步骤 - 0:不是 1:是 (暂时不用,由服务自己判断是否为最后一步付款或收款)
  2360. STEPSTATUS int32 `json:"stepstatus" xorm:"STEPSTATUS" form:"stepstatus"` // 步骤状态 - 1:待开始 2:进行中 3:已完成 4:延期(进行中) 5:失败 6:自动完成 7:超时关闭
  2361. HANDLESTATUS int32 `json:"handlestatus" xorm:"HANDLESTATUS" form:"handlestatus"` // 处理状态 - 1:开始 2:结束 3:冻结请求 4:冻结返回成功 5:冻结返回失败 6:扣款请求 7:扣款返回成功 8:扣款返回失败 9:仓单转移请求 10:仓单转移返回成功 11:仓单转移返回失败 12:加钱请求 13:加钱返回成功 14:加钱返回失败 15:解冻仓单头寸请求 16:解冻仓单头寸返回成功 17:解冻仓单头寸返回失败 18:解冻库位请求 19:解冻库位返回成功 20:解冻库位返回失败
  2362. STEPLANCHTYPE int32 `json:"steplanchtype" xorm:"STEPLANCHTYPE" form:"steplanchtype"` // 步骤启动类型 - 1:系统自动 2:手动
  2363. EXECUTESIDE int32 `json:"executeside" xorm:"EXECUTESIDE" form:"executeside"` // 步骤执行方 - 1:买方 2:卖方
  2364. STARTTIME string `json:"starttime" xorm:"STARTTIME" form:"starttime"` // 开始日期
  2365. ENDTIME string `json:"endtime" xorm:"ENDTIME" form:"endtime"` // 结束日期
  2366. REMARK string `json:"remark" xorm:"REMARK" form:"remark"` // 错误备注
  2367. STEPREMARK string `json:"stepremark" xorm:"STEPREMARK" form:"stepremark"` // 步骤备注
  2368. STEPTYPENAME string `json:"steptypename" xorm:"'STEPTYPENAME'"` // 步骤名称
  2369. RELATEDORDERID string `json:"relatedorderid" xorm:"'RELATEDORDERID'"` // 关联单号
  2370. OVERDAYS int32 `json:"overdays" xorm:"'OVERDAYS'"` // 超期天数 = 当前时间(数据库时间) - 结束日期
  2371. Wr2FactorType `xorm:"extends"`
  2372. }
  2373. func (r *WrPerformancePlanStep) calc() {
  2374. r.Wr2FactorType.Calc()
  2375. }
  2376. func (r *WrPerformancePlanStep) buildSql() string {
  2377. var sqlId utils.SQLVal = "with tmp as" +
  2378. " (select to_char(t.wrfactortypeid) wrfactortypeid," +
  2379. " t.wrfactortypename2 wrfactortypename," +
  2380. " t.wrstandardid," +
  2381. " t.deliverygoodsid," +
  2382. " g.deliverygoodscode," +
  2383. " g.deliverygoodsname," +
  2384. " w.wrstandardcode," +
  2385. " w.wrstandardname," +
  2386. " h.warehousecode," +
  2387. " h.warehousename," +
  2388. " e.enumdicname," +
  2389. " w.wrstandardname || t.wrfactortypename2 as wrtypename" +
  2390. " from wrfactortype t" +
  2391. " left join deliverygoods g" +
  2392. " on t.deliverygoodsid = g.deliverygoodsid" +
  2393. " left join wrstandard w" +
  2394. " on t.wrstandardid = w.wrstandardid" +
  2395. " left join warehouseinfo h" +
  2396. " on t.warehouseid = h.autoid" +
  2397. " left join enumdicitem e" +
  2398. " on w.unitid = e.enumitemname" +
  2399. " and e.enumdiccode = 'goodsunit')" +
  2400. "SELECT to_char(t.PERFORMANCESTEPID) PERFORMANCESTEPID," +
  2401. " to_char(t.PLANID) PLANID," +
  2402. " t.STEPINDEX," +
  2403. " t.STEPDAYS," +
  2404. " t.STEPTYPEID," +
  2405. " t.STEPVALUE," +
  2406. " t.STEPAMOUNT," +
  2407. " t.REALAMOUNT," +
  2408. " t.REMAINDAYS," +
  2409. " t.DELAYDAYS," +
  2410. " t.ISAUTO," +
  2411. " t.ISLASTRECEIVESTEP," +
  2412. " t.STEPSTATUS," +
  2413. " t.HANDLESTATUS," +
  2414. " t.STEPLANCHTYPE," +
  2415. " t.EXECUTESIDE," +
  2416. " to_char(t.STARTTIME, 'yyyy-mm-dd hh24:mi:ss') STARTTIME," +
  2417. " to_char(t.ENDTIME, 'yyyy-mm-dd hh24:mi:ss') ENDTIME," +
  2418. " nvl(trunc(sysdate) - trunc(t.endtime), 0) overdays," +
  2419. " t.REMARK," +
  2420. " t.STEPREMARK," +
  2421. " s.steptypename," +
  2422. " to_char(p.relatedorderid) relatedorderid," +
  2423. " k.*" +
  2424. " FROM PERFORMANCESTEP t" +
  2425. " LEFT JOIN PERFORMANCESTEPTYPE s on t.steptypeid=s.steptypeid" +
  2426. " LEFT JOIN PERFORMANCEPLAN p on t.planid=p.performanceplanid" +
  2427. " LEFT JOIN PERFORMANCEPLANWR pr on p.performanceplanid=pr.performanceplanid" +
  2428. " LEFT JOIN tmp k on pr.wrfactortypeid=k.wrfactortypeid" +
  2429. " WHERE 1 = 1"
  2430. sqlId.And("t.PLANID", r.PLANID)
  2431. sqlId.AndEx("t.PERFORMANCESTEPID", r.PERFORMANCESTEPID, r.PERFORMANCESTEPID != "")
  2432. sqlId.Join(" order by t.stepindex")
  2433. return sqlId.String()
  2434. }
  2435. // GetDataEx 获取履约计划详情
  2436. func (r *WrPerformancePlanStep) GetDataEx() (interface{}, error) {
  2437. sData := make([]WrPerformancePlanStep, 0)
  2438. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  2439. for i := range sData {
  2440. sData[i].calc()
  2441. }
  2442. return sData, err
  2443. }
  2444. // WrFinanceBuyApply 融资购买申请表
  2445. type WrFinanceBuyApply struct {
  2446. FINANCEAPPLYID string `json:"financeapplyid" xorm:"FINANCEAPPLYID" form:"financeapplyid"` // 融资申请单ID(320+Unix秒时间戳(10位)+xxxxxx)
  2447. TRADEDATE string `json:"tradedate" xorm:"TRADEDATE" form:"tradedate"` // 交易日(yyyyMMdd)
  2448. BUYORSELL int32 `json:"buyorsell" xorm:"BUYORSELL" form:"buyorsell"` // 买卖 - 0:买 1:卖
  2449. MARKETID int64 `json:"marketid" xorm:"MARKETID" form:"marketid"` // 市场ID
  2450. BUYUSERID int64 `json:"buyuserid" xorm:"BUYUSERID" form:"userid"` // 买方用户ID
  2451. BUYACCOUNTID int64 `json:"buyaccountid" xorm:"BUYACCOUNTID" form:"buyaccountid"` // 买方资金账号
  2452. SELLWRTRADEORDERID string `json:"sellwrtradeorderid" xorm:"SELLWRTRADEORDERID" form:"sellwrtradeorderid"` // 卖方委托单ID
  2453. WRFACTORTYPEID string `json:"wrfactortypeid" xorm:"WRFACTORTYPEID" form:"wrfactortypeid"` // 仓单要素类型ID
  2454. ORDERQTY float64 `json:"orderqty" xorm:"ORDERQTY" form:"orderqty"` // 委托数量(商品数量)
  2455. SELLUSERID int64 `json:"selluserid" xorm:"SELLUSERID" form:"selluserid"` // 卖方用户ID
  2456. SELLACCOUNTID int64 `json:"sellaccountid" xorm:"SELLACCOUNTID" form:"sellaccountid"` // 卖方资金账号
  2457. FINANCEACCOUNTID int64 `json:"financeaccountid" xorm:"FINANCEACCOUNTID" form:"financeaccountid"` // 融资方资金帐户ID
  2458. FINANCEAREAUSERID string `json:"financeareauserid" xorm:"FINANCEAREAUSERID" form:"financeareauserid"` // 融资方用户ID
  2459. ISAUTOLOAN int32 `json:"isautoloan" xorm:"ISAUTOLOAN" form:"isautoloan"` // 是否自动放款 - 0:手动 1:自动
  2460. REMARK string `json:"remark" xorm:"REMARK" form:"remark"` // 备注
  2461. APPLYSTATUS int32 `json:"applystatus" xorm:"APPLYSTATUS" form:"applystatus"` // 申请状态 - 1:待审核 2.审核中 3:审核通过 4:审核拒绝 5:审核失败 6:已撤销 7:自动审核 8:融资失败
  2462. APPLYUSERID int64 `json:"applyuserid" xorm:"APPLYUSERID" form:"applyuserid"` // 申请人
  2463. APPLYDATE string `json:"applydate" xorm:"APPLYDATE" form:"applydate"` // 申请时间
  2464. AUDITUSERID int64 `json:"audituserid" xorm:"AUDITUSERID" form:"audituserid"` // 审核人
  2465. AUDITDATE string `json:"auditdate" xorm:"AUDITDATE" form:"auditdate"` // 审核时间
  2466. AUDITREMARK string `json:"auditremark" xorm:"AUDITREMARK" form:"auditremark"` // 审核备注
  2467. HANDLESTATUS int32 `json:"handlestatus" xorm:"HANDLESTATUS" form:"handlestatus"` // 处理状态
  2468. HANDLEREMARK string `json:"handleremark" xorm:"HANDLEREMARK" form:"handleremark"` // 处理备注
  2469. BUYWRTRADEORDERID string `json:"buywrtradeorderid" xorm:"BUYWRTRADEORDERID" form:"buywrtradeorderid"` // 融资方买委托单ID
  2470. SCFCONTRACTID string `json:"scfcontractid" xorm:"SCFCONTRACTID" form:"scfcontractid"` // 仓单回购合同ID
  2471. FREEZEBUYMARGIN float64 `json:"freezebuymargin" xorm:"FREEZEBUYMARGIN" form:"freezebuymargin"` // 冻结融资保证金(买方)
  2472. WRPRICETYPE int32 `json:"wrpricetype" xorm:"WRPRICETYPE" form:"wrpricetype"` // 价格方式 - 1:固定价 2-浮动价 - [挂牌单]
  2473. TRADEPRICE float64 `json:"tradeprice" xorm:"TRADEPRICE" form:"tradeprice"` // 成交价格
  2474. TRADEAMOUNT float64 `json:"tradeamount" xorm:"TRADEAMOUNT" form:"tradeamount"` // 成交金额(借款金额)
  2475. DELIVERYMONTH string `json:"deliverymonth" xorm:"DELIVERYMONTH" form:"deliverymonth"` // 交收月(yyyy-MM) [无仓单HasWR =0]
  2476. BUYUSERNAME string `json:"buyusername" xorm:"'BUYUSERNAME'"` // 买方名称
  2477. FINANCENAME string `json:"financename" xorm:"'FINANCENAME'"` // 融出方名称
  2478. FINANCETYPE int32 `json:"financetype" xorm:"'FINANCETYPE'"` // 融资类型 1-融资回购
  2479. PRODUCTDETAILID int64 `json:"productdetailid" xorm:"PRODUCTDETAILID" form:"productdetailid"` // 产品组合ID
  2480. PRODUCTID int64 `json:"productid" xorm:"PRODUCTID"` // 金融产品ID
  2481. PRODUCTNAME string `json:"productname" xorm:"'PRODUCTNAME'"` // 产品名称
  2482. FINANCINGDAYS int32 `json:"financingdays" xorm:"FINANCINGDAYS"` // 天数(天)
  2483. MARGINRATIO float64 `json:"marginratio" xorm:"MARGINRATIO"` // 保证金比率质押率 - [仓单质押]
  2484. INTERESTRATEMODE int32 `json:"interestratemode" xorm:"INTERESTRATEMODE"` // 利率方式 - 1:年利率 2:日利率 3:日固定值
  2485. INTERESTRATE float64 `json:"interestrate" xorm:"INTERESTRATE"` // 利率
  2486. INTERESTMINLEN int32 `json:"interestminlen" xorm:"INTERESTMINLEN"` // 最小起息天数
  2487. INTERESTSETTLEMODE int32 `json:"interestsettlemode" xorm:"INTERESTSETTLEMODE"` // 结息方式 - 1:按日结息 3:按月结息
  2488. INTERESTSETTLEVALUE int32 `json:"interestsettlevalue" xorm:"INTERESTSETTLEVALUE"` // 结息方式值
  2489. Wr2FactorType `xorm:"extends"`
  2490. }
  2491. func (r *WrFinanceBuyApply) calc() {
  2492. r.FINANCENAME = EncryptByStar(r.FINANCENAME)
  2493. }
  2494. func (r *WrFinanceBuyApply) buildSql() string {
  2495. var sqlId utils.SQLVal = "with tmp as" +
  2496. " (select to_char(t.wrfactortypeid) wrfactortypeid," +
  2497. " t.wrfactortypename2 wrfactortypename," +
  2498. " t.wrstandardid," +
  2499. " t.deliverygoodsid," +
  2500. " g.deliverygoodscode," +
  2501. " g.deliverygoodsname," +
  2502. " w.wrstandardcode," +
  2503. " w.wrstandardname," +
  2504. " h.warehousecode," +
  2505. " h.warehousename," +
  2506. " e.enumdicname," +
  2507. " w.wrstandardname || t.wrfactortypename2 as wrtypename" +
  2508. " from wrfactortype t" +
  2509. " left join deliverygoods g" +
  2510. " on t.deliverygoodsid = g.deliverygoodsid" +
  2511. " left join wrstandard w" +
  2512. " on t.wrstandardid = w.wrstandardid" +
  2513. " left join warehouseinfo h" +
  2514. " on t.warehouseid = h.autoid" +
  2515. " left join enumdicitem e" +
  2516. " on w.unitid = e.enumitemname" +
  2517. " and e.enumdiccode = 'goodsunit')" +
  2518. "SELECT to_char(t.FINANCEAPPLYID) FINANCEAPPLYID," +
  2519. " t.TRADEDATE," +
  2520. " t.BUYORSELL," +
  2521. " t.MARKETID," +
  2522. " t.BUYUSERID," +
  2523. " t.BUYACCOUNTID," +
  2524. " to_char(t.SELLWRTRADEORDERID) SELLWRTRADEORDERID," +
  2525. " t.ORDERQTY," +
  2526. " t.SELLUSERID," +
  2527. " t.SELLACCOUNTID," +
  2528. " t.PRODUCTDETAILID," +
  2529. " t.FINANCEACCOUNTID," +
  2530. " t.FINANCEAREAUSERID," +
  2531. " t.ISAUTOLOAN," +
  2532. " t.REMARK," +
  2533. " t.APPLYSTATUS," +
  2534. " t.APPLYUSERID," +
  2535. " to_char(t.APPLYDATE, 'yyyy-mm-dd hh24:mi:ss') APPLYDATE," +
  2536. " t.AUDITUSERID," +
  2537. " to_char(t.AUDITDATE, 'yyyy-mm-dd hh24:mi:ss') AUDITDATE," +
  2538. " t.AUDITREMARK," +
  2539. " t.HANDLESTATUS," +
  2540. " t.HANDLEREMARK," +
  2541. " to_char(t.BUYWRTRADEORDERID) BUYWRTRADEORDERID," +
  2542. " t.SCFCONTRACTID," +
  2543. " t.FREEZEBUYMARGIN," +
  2544. " t.WRPRICETYPE," +
  2545. " t.TRADEPRICE," +
  2546. " t.TRADEAMOUNT," +
  2547. " t.DELIVERYMONTH," +
  2548. " t.FINANCETYPE," +
  2549. " f.PRODUCTNAME," +
  2550. " t.FINANCINGDAYS," +
  2551. " t.MARGINRATIO," +
  2552. " t.INTERESTRATEMODE," +
  2553. " t.INTERESTRATE," +
  2554. " t.INTERESTMINLEN," +
  2555. " t.INTERESTSETTLEMODE," +
  2556. " t.INTERESTSETTLEVALUE," +
  2557. " u1.accountname BUYUSERNAME," +
  2558. " u2.accountname FINANCENAME," +
  2559. " tmp.*" +
  2560. " FROM WRTRADE_FINANCEBUYAPPLY t" +
  2561. " LEFT JOIN FINANCEAREAPRODUCTDETAIL p on t.productdetailid = p.productdetailid" +
  2562. " LEFT JOIN FinanceAreaProduct f on p.productid = f.productid" +
  2563. " LEFT JOIN tmp on t.wrfactortypeid=tmp.wrfactortypeid" +
  2564. " LEFT JOIN USERACCOUNT u1 on t.BUYUSERID = u1.userid" +
  2565. " LEFT JOIN USERACCOUNT u2 on t.FINANCEAREAUSERID = u2.userid" +
  2566. " WHERE 1 = 1"
  2567. sqlId.AndEx("t.BUYUSERID", r.BUYUSERID, r.BUYUSERID > 0)
  2568. sqlId.AndEx("t.FINANCEAPPLYID", r.FINANCEAPPLYID, r.FINANCEAPPLYID != "")
  2569. return sqlId.String()
  2570. }
  2571. // GetDataEx 获取融资购买申请表
  2572. func (r *WrFinanceBuyApply) GetDataEx() (interface{}, error) {
  2573. sData := make([]WrFinanceBuyApply, 0)
  2574. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  2575. for i := range sData {
  2576. sData[i].calc()
  2577. }
  2578. return sData, err
  2579. }
  2580. // WrScfContract 仓单贸易融资合同
  2581. type WrScfContract struct {
  2582. DEADLINE string `json:"deadline" xorm:"DEADLINE"` // 截止日期(yyyyMMdd) -> 借款到期时间
  2583. MARKETID int64 `json:"marketid" xorm:"MARKETID" form:"marketid"` // 市场ID - 拆成三个独立模式后,根据市场ID处理
  2584. SCFCONTRACTID string `json:"scfcontractid" xorm:"SCFCONTRACTID" form:"scfcontractid"` // SCF合同ID(310+Unix秒时间戳(10位)+xxxxxx)
  2585. SCFCONTRACTTYPE int32 `json:"scfcontracttype" xorm:"SCFCONTRACTTYPE" form:"scfcontracttype"` // 合同类型 - 1:仓单回购 2:仓单质押 3:合作套保 4:资金贷款 5:融资单 6:融资回购
  2586. LENDERUSERID int64 `json:"lenderuserid" xorm:"LENDERUSERID" form:"lenderuserid"` // 贷款方用户ID -> 融出方用户ID
  2587. BORROWERUSERID int64 `json:"borroweruserid" xorm:"BORROWERUSERID" form:"userid"` // 借款用户ID
  2588. LENDERAMOUNT float64 `json:"lenderamount" xorm:"LENDERAMOUNT"` // 贷款金额 -> 借款金额
  2589. WRFACTORTYPEID int64 `json:"wrfactortypeid" xorm:"WRFACTORTYPEID" form:"wrfactortypeid"` // 仓单要素类型ID - [仓单回购\仓单质押]
  2590. WRQTY float64 `json:"wrqty" xorm:"WRQTY"` // 仓单数量 - [仓单回购\仓单质押] -> 数量
  2591. ISAUTOLOAN int32 `json:"isautoloan" xorm:"ISAUTOLOAN"` // 是否自动放款 - 0:手动 1:自动 - [仓单质押]
  2592. REMAINAMOUNT float64 `json:"remainamount" xorm:"REMAINAMOUNT"` // 合同剩余金额 -> 剩余金额
  2593. INITMARGIN float64 `json:"initmargin" xorm:"INITMARGIN"` // 保证金 - [仓单回购]
  2594. REMAINWRPOSITIONQTY float64 `json:"remainwrpositionqty" xorm:"REMAINWRPOSITIONQTY"` // 剩余仓单头寸数量 - [仓单回购\仓单质押] -> 剩余数量(待回购数量)
  2595. BUYBACKWRPOSITIONQTY float64 `json:"buybackwrpositionqty" xorm:"BUYBACKWRPOSITIONQTY"` // 已回购仓单头寸数量 - [仓单回购\仓单质押] -> 已回购数量
  2596. INTERESTAMOUNT float64 `json:"interestamount" xorm:"INTERESTAMOUNT"` // 计息金额=合同剩余金额 - 初始保证金 - 追缴保证金 \ 合同剩余金额
  2597. TOTALINTEREST float64 `json:"totalinterest" xorm:"TOTALINTEREST"` // 已计利息 -> 已计费用
  2598. CLOSEINTEREST float64 `json:"closeinterest" xorm:"CLOSEINTEREST"` // 已结利息 -> 已结费用
  2599. INTERESTDEBT float64 `json:"interestdebt" xorm:"INTERESTDEBT"` // 利息欠款(记录负数) -> 费用欠款
  2600. STARTINTERESTDAY string `json:"startinterestday" xorm:"STARTINTERESTDAY"` // 计息开始日(yyyyMMdd) -> 开始计费日期
  2601. LASTCLOSEINTERESTDAY string `json:"lastcloseinterestday" xorm:"LASTCLOSEINTERESTDAY"` // 最近结息日(yyyyMMdd)
  2602. SCFCONTRACTSTATUS int32 `json:"scfcontractstatus" xorm:"SCFCONTRACTSTATUS"` // 合同状态 - 1:待确认 2:已确认 3:确认拒绝 4:已支付保证金 5:已激活 6:已违约 7:到期结束 8:延期结束 9:违约结束 10:已注销 11:已关闭 99:未提交
  2603. UPDATETIME string `json:"updatetime" xorm:"UPDATETIME"` // 更新时间
  2604. REMARK string `json:"remark" xorm:"REMARK"` // 备注
  2605. PRICEMOVE float64 `json:"pricemove" xorm:"PRICEMOVE"` // 估值升贴水值
  2606. CURRISKLEVEL int32 `json:"currisklevel" xorm:"CURRISKLEVEL"` // 风险级别 - 1:正常 2:追加货款 3:支付尾款
  2607. PRODUCTDETAILID int64 `json:"productdetailid" xorm:"PRODUCTDETAILID" form:"productdetailid"` // 产品组合ID
  2608. PRODUCTID int64 `json:"productid" xorm:"PRODUCTID"` // 金融产品ID
  2609. PRODUCTNAME string `json:"productname" xorm:"'PRODUCTNAME'"` // 产品名称
  2610. FINANCINGDAYS int32 `json:"financingdays" xorm:"FINANCINGDAYS"` // 天数(天)
  2611. MARGINRATIO float64 `json:"marginratio" xorm:"MARGINRATIO"` // 保证金比率质押率 - [仓单质押]
  2612. INTERESTRATEMODE int32 `json:"interestratemode" xorm:"INTERESTRATEMODE"` // 利率方式 - 1:年利率 2:日利率 3:日固定值
  2613. INTERESTRATE float64 `json:"interestrate" xorm:"INTERESTRATE"` // 利率
  2614. INTERESTMINLEN int32 `json:"interestminlen" xorm:"INTERESTMINLEN"` // 最小起息天数
  2615. INTERESTSETTLEMODE int32 `json:"interestsettlemode" xorm:"INTERESTSETTLEMODE"` // 结息方式 - 1:按日结息 3:按月结息
  2616. INTERESTSETTLEVALUE int32 `json:"interestsettlevalue" xorm:"INTERESTSETTLEVALUE"` // 结息方式值
  2617. Wr2FactorType `xorm:"extends"`
  2618. UNPAIDINTEREST SFLOAT64 `json:"unpaidinterest"` // 未结费用
  2619. LENDERUSERNAME string `json:"lenderusername"` // 融出方
  2620. }
  2621. func (r *WrScfContract) calc() {
  2622. r.LENDERUSERNAME = mtpcache.GetUserNameByUserId(r.LENDERUSERID)
  2623. r.LENDERUSERNAME = EncryptByStar(r.LENDERUSERNAME)
  2624. r.UNPAIDINTEREST.Set(r.TOTALINTEREST - r.CLOSEINTEREST)
  2625. r.UNPAIDINTEREST.Round(2)
  2626. }
  2627. func (r *WrScfContract) buildSql() string {
  2628. var sqlId utils.SQLVal = "with tmp as" +
  2629. " (select to_char(t.wrfactortypeid) wrfactortypeid," +
  2630. " t.wrfactortypename," +
  2631. " t.wrstandardid," +
  2632. " t.deliverygoodsid," +
  2633. " g.deliverygoodscode," +
  2634. " g.deliverygoodsname," +
  2635. " w.wrstandardcode," +
  2636. " w.wrstandardname," +
  2637. " h.warehousecode," +
  2638. " h.warehousename," +
  2639. " e.enumdicname," +
  2640. " w.wrstandardname || t.wrfactortypename2 as wrtypename" +
  2641. " from wrfactortype t" +
  2642. " left join deliverygoods g" +
  2643. " on t.deliverygoodsid = g.deliverygoodsid" +
  2644. " left join wrstandard w" +
  2645. " on t.wrstandardid = w.wrstandardid" +
  2646. " left join warehouseinfo h" +
  2647. " on t.warehouseid = h.autoid" +
  2648. " left join enumdicitem e" +
  2649. " on w.unitid = e.enumitemname" +
  2650. " and e.enumdiccode = 'goodsunit')" +
  2651. "select to_char(t.scfcontractid) scfcontractid," +
  2652. " t.scfcontracttype," +
  2653. " t.marketid," +
  2654. " t.lenderuserid," +
  2655. " t.lenderamount," +
  2656. " s.remainamount," +
  2657. " s.initmargin," +
  2658. " t.wrqty," +
  2659. " s.buybackwrpositionqty," +
  2660. " s.remainwrpositionqty," +
  2661. " s.closeinterest," +
  2662. " s.totalinterest," +
  2663. " s.interestdebt," +
  2664. " s.startinterestday," +
  2665. " s.lastcloseinterestday," +
  2666. " t.deadline," +
  2667. " s.scfcontractstatus," +
  2668. " p.productdetailid," +
  2669. " p.productid," +
  2670. " f.productname," +
  2671. " p.FINANCINGDAYS," +
  2672. " p.MARGINRATIO," +
  2673. " p.INTERESTRATEMODE," +
  2674. " p.INTERESTRATE," +
  2675. " p.INTERESTMINLEN," +
  2676. " p.INTERESTSETTLEMODE," +
  2677. " p.INTERESTSETTLEVALUE," +
  2678. " tmp.*" +
  2679. " from scf_contract t" +
  2680. " left join scf_contractinfo s" +
  2681. " on t.scfcontractid = s.scfcontractid" +
  2682. " left join WRTrade_FinanceBuyApply a" +
  2683. " on t.scfcontractid = a.scfcontractid" +
  2684. " left join FINANCEAREAPRODUCTDETAIL p" +
  2685. " on a.productdetailid = p.productdetailid" +
  2686. " left join FINANCEAREAPRODUCT f" +
  2687. " on p.productid = f.productid" +
  2688. " left join tmp" +
  2689. " on t.wrfactortypeid = tmp.wrfactortypeid" +
  2690. " where 1 = 1"
  2691. sqlId.And("t.borroweruserid", r.BORROWERUSERID)
  2692. sqlId.AndEx("t.scfcontractid", r.SCFCONTRACTID, r.SCFCONTRACTID != "")
  2693. return sqlId.String()
  2694. }
  2695. // GetDataEx 获取仓单贸易融资合同
  2696. func (r *WrScfContract) GetDataEx() (interface{}, error) {
  2697. sData := make([]WrScfContract, 0)
  2698. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  2699. for i := range sData {
  2700. sData[i].calc()
  2701. }
  2702. return sData, err
  2703. }
  2704. // WrBuybackDetail 仓单回购明细
  2705. type WrBuybackDetail struct {
  2706. SCFWRBUYBACKID int64 `json:"scfwrbuybackid" xorm:"SCFWRBUYBACKID" form:"scfwrbuybackid"` // SCF仓单回购明细ID(312+Unix秒时间戳(10位)+xxxxxx)
  2707. SCFCONTRACTID string `json:"scfcontractid" xorm:"SCFCONTRACTID" form:"scfcontractid"` // SCF合同ID
  2708. BUYBACKQTY float64 `json:"buybackqty" xorm:"BUYBACKQTY"` // 回购数量
  2709. BUYBACKAMOUNT float64 `json:"buybackamount" xorm:"BUYBACKAMOUNT"` // 回购金额
  2710. BUYBACKRELEASEMARGIN float64 `json:"buybackreleasemargin" xorm:"BUYBACKRELEASEMARGIN"` // 回购释放保证金
  2711. BUYBACKTIME string `json:"buybacktime" xorm:"BUYBACKTIME"` // 回购时间
  2712. TRADEDATE string `json:"tradedate" xorm:"TRADEDATE" form:"tradedate"` // 交易日(yyyyMMdd)
  2713. RELATEDWRID int64 `json:"relatedwrid" xorm:"RELATEDWRID" form:"relatedwrid"` // 关联仓单ID
  2714. HANDLESTATUS int32 `json:"handlestatus" xorm:"HANDLESTATUS"` // 处理 - 1:待处理 2:处理成功 3:处理失败
  2715. ERRORDESC string `json:"errordesc" xorm:"ERRORDESC"` // 错误描述
  2716. }
  2717. func (r *WrBuybackDetail) calc() {
  2718. }
  2719. func (r *WrBuybackDetail) buildSql() string {
  2720. var sqlId utils.SQLVal = "SELECT t.SCFWRBUYBACKID," +
  2721. " t.SCFCONTRACTID," +
  2722. " t.BUYBACKQTY," +
  2723. " t.BUYBACKAMOUNT," +
  2724. " t.BUYBACKRELEASEMARGIN," +
  2725. " to_char(t.BUYBACKTIME, 'yyyy-mm-dd hh24:mi:ss') BUYBACKTIME," +
  2726. " t.TRADEDATE," +
  2727. " t.RELATEDWRID," +
  2728. " t.HANDLESTATUS," +
  2729. " t.ERRORDESC" +
  2730. " FROM SCF_WRBUYBACKDETAIL t" +
  2731. " WHERE 1 = 1" +
  2732. " AND t.handlestatus = 2"
  2733. sqlId.AndEx("scfcontractid", r.SCFCONTRACTID, r.SCFCONTRACTID != "")
  2734. return sqlId.String()
  2735. }
  2736. // GetDataEx 获取仓单回购明细
  2737. func (r *WrBuybackDetail) GetDataEx() (interface{}, error) {
  2738. sData := make([]WrBuybackDetail, 0)
  2739. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  2740. for i := range sData {
  2741. sData[i].calc()
  2742. }
  2743. return sData, err
  2744. }
  2745. // WrScfContractInterest 合同计息表(费用明细)
  2746. type WrScfContractInterest struct {
  2747. SCFCONTRACTINTERESTID int64 `json:"scfcontractinterestid" xorm:"SCFCONTRACTINTERESTID"` // SCF合同计息ID(313+Unix秒时间戳(10位)+xxxxxx)
  2748. SCFCONTRACTID string `json:"scfcontractid" xorm:"SCFCONTRACTID" form:"scfcontractid"` // SCF合同ID
  2749. INTERESTDAY string `json:"interestday" xorm:"INTERESTDAY"` // 计息日(yyyyMMdd)
  2750. INTEREST float64 `json:"interest" xorm:"INTEREST"` // 利息
  2751. CLOSEINTEREST float64 `json:"closeinterest" xorm:"CLOSEINTEREST"` // 已结利息
  2752. CLOSEINTERESTSTATUS int32 `json:"closeintereststatus" xorm:"CLOSEINTERESTSTATUS"` // 结息状态 - 1:未结 2:已结
  2753. UPDATETIME string `json:"updatetime" xorm:"UPDATETIME"` // 更新时间
  2754. CREATORID int64 `json:"creatorid" xorm:"CREATORID" form:"creatorid"` // 操作人ID
  2755. CLOSETIME string `json:"closetime" xorm:"CLOSETIME"` // 结息时间
  2756. CLOSETRADEDATE string `json:"closetradedate" xorm:"CLOSETRADEDATE" form:"closetradedate"` // 结息交易日
  2757. INTERESTAMOUNT float64 `json:"interestamount" xorm:"INTERESTAMOUNT"` // 计息金额
  2758. DAYRATE float64 `json:"dayrate" xorm:"DAYRATE"` // 日利率(根据利率配置计算出的日利率值,年利率则除以360,保留5位小数)
  2759. }
  2760. func (r *WrScfContractInterest) calc() {
  2761. }
  2762. func (r *WrScfContractInterest) buildSql() string {
  2763. var sqlId utils.SQLVal = "SELECT t.SCFCONTRACTINTERESTID," +
  2764. " t.SCFCONTRACTID," +
  2765. " t.INTERESTDAY," +
  2766. " t.INTEREST," +
  2767. " t.CLOSEINTEREST," +
  2768. " t.CLOSEINTERESTSTATUS," +
  2769. " to_char(t.UPDATETIME, 'yyyy-mm-dd hh24:mi:ss') UPDATETIME," +
  2770. " t.CREATORID," +
  2771. " to_char(t.CLOSETIME, 'yyyy-mm-dd hh24:mi:ss') CLOSETIME," +
  2772. " t.CLOSETRADEDATE," +
  2773. " t.INTERESTAMOUNT," +
  2774. " t.DAYRATE" +
  2775. " FROM SCF_CONTRACTINTEREST t" +
  2776. " WHERE 1 = 1"
  2777. sqlId.AndEx("scfcontractid", r.SCFCONTRACTID, r.SCFCONTRACTID != "")
  2778. return sqlId.String()
  2779. }
  2780. // GetDataEx 获取描述
  2781. func (r *WrScfContractInterest) GetDataEx() (interface{}, error) {
  2782. sData := make([]WrScfContractInterest, 0)
  2783. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  2784. for i := range sData {
  2785. sData[i].calc()
  2786. }
  2787. return sData, err
  2788. }
  2789. // WrOutInApply 出入库申请(提货)
  2790. type WrOutInApply struct {
  2791. APPLYID string `json:"applyid" xorm:"'APPLYID'"` // 申请单id
  2792. APPLYTYPE int32 `json:"applytype" xorm:"'APPLYTYPE'"` // 申请类型 - 1:预约入库 2:预约出库 3:入库注册 4:出库注销
  2793. USERID int64 `json:"userid" xorm:"'USERID'" form:"userid"` // 用户id
  2794. APPLYTIME string `json:"applytime" xorm:"'APPLYTIME'"` // 申请时间
  2795. APPLYSTATUS int32 `json:"applystatus" xorm:"'APPLYSTATUS'"` // 申请状态 - 0:预约成功 1:待初审 2:初审通过 3:初审拒绝 4:初审失败 5复审通过 6:复审拒绝 7:复审失败 8:已撤销
  2796. QTY int64 `json:"qty" xorm:"'QTY'"` // 数量
  2797. EXPRESSNUM string `json:"expressnum" xorm:"'EXPRESSNUM'"` // 物流单号
  2798. EXPRESSCOMPANY string `json:"expresscompany" xorm:"'EXPRESSCOMPANY'"` // 物流公司
  2799. BANNERPICURL string `json:"bannerpicurl" xorm:"BANNERPICURL"` // Banner图
  2800. Wr2FactorType `xorm:"extends"`
  2801. BEGINDATE string `json:"begindate" form:"begindate"` // 开始交易日(yyyymmdd)
  2802. ENDDATE string `json:"enddate" form:"enddate"` // 结束交易日(yyyymmdd)
  2803. APPOINTMENTMODEL int32 `json:"appointmentmodel" xorm:"'APPOINTMENTMODEL'"` // 预约方式 - 1:物流 2:自送 3:自提
  2804. APPOINTMENTMODELDISPLAY string `json:"appointmentmodeldisplay" xorm:"'APPOINTMENTMODELDISPLAY'"` // 预约方式(显示枚举)
  2805. CONTACTNAME string `json:"contactname" xorm:"'CONTACTNAME'"` // 联系人
  2806. CONTACTNUM string `json:"contactnum" xorm:"'CONTACTNUM'"` // 联系方式
  2807. ADDRESS string `json:"address" xorm:"ADDRESS"` // 详细地址
  2808. APPOINTMENTREMARK string `json:"appointmentremark" xorm:"'APPOINTMENTREMARK'"` // 申请备注
  2809. COUNTRYID int32 `json:"countryid" xorm:"COUNTRYID"` // 国家
  2810. PROVINCEID int32 `json:"provinceid" xorm:"PROVINCEID"` // 省
  2811. CITYID int32 `json:"cityid" xorm:"CITYID"` // 市
  2812. DISTRICTID int32 `json:"districtid" xorm:"DISTRICTID"` // 区
  2813. COUNTRYNAME string `json:"countryname"` // 国家名称
  2814. CITYNAME string `json:"cityname"` // 城市名称
  2815. PROVINCENAME string `json:"provincename"` // 省名称
  2816. DISTRICTNAME string `json:"districtname"` // 地区名称
  2817. PageEx `xorm:"extends"` // 页码信息
  2818. }
  2819. func (r *WrOutInApply) calc() {
  2820. r.Wr2FactorType.Calc()
  2821. r.COUNTRYNAME = mtpcache.GetDivisionName(r.COUNTRYID)
  2822. r.CITYNAME = mtpcache.GetDivisionName(r.CITYID)
  2823. r.PROVINCENAME = mtpcache.GetDivisionName(r.PROVINCEID)
  2824. r.DISTRICTNAME = mtpcache.GetDivisionName(r.DISTRICTID)
  2825. }
  2826. func (r *WrOutInApply) buildSql() string {
  2827. var sqlId utils.SQLVal = "with tmp as" +
  2828. " (select to_char(t.wrfactortypeid) wrfactortypeid," +
  2829. " t.wrfactortypename2 wrfactortypename," +
  2830. " t.wrstandardid," +
  2831. " t.deliverygoodsid," +
  2832. " g.deliverygoodscode," +
  2833. " g.deliverygoodsname," +
  2834. " w.wrstandardcode," +
  2835. " w.wrstandardname," +
  2836. " w.bannerpicurl," +
  2837. " w.minivalue," +
  2838. " h.warehousecode," +
  2839. " h.warehousename," +
  2840. " e.enumdicname," +
  2841. " w.wrstandardname || t.wrfactortypename2 as wrtypename" +
  2842. " from wrfactortype t" +
  2843. " left join deliverygoods g" +
  2844. " on t.deliverygoodsid = g.deliverygoodsid" +
  2845. " left join wrstandard w" +
  2846. " on t.wrstandardid = w.wrstandardid" +
  2847. " left join warehouseinfo h" +
  2848. " on t.warehouseid = h.autoid" +
  2849. " left join enumdicitem e" +
  2850. " on w.unitid = e.enumitemname" +
  2851. " and e.enumdiccode = 'goodsunit')" +
  2852. "select to_char(t.applyid) applyid," +
  2853. " t.applytype," +
  2854. " t.userid," +
  2855. " to_char(t.applytime, 'yyyy-mm-dd hh24:mi:ss') applytime," +
  2856. " decode(t.applytype, 2, t.applystatus, 4, t.applystatus2) applystatus," +
  2857. " decode(t.applytype, 2, t.inqty, 4, t.inrealqty) qty," +
  2858. " e.expressnum," +
  2859. " e.expresscompany," +
  2860. " t.appointmentmodel," +
  2861. " en1.enumdicname appointmentmodeldisplay," +
  2862. " t.contactname," +
  2863. " t.contactnum," +
  2864. " t.COUNTRYID," +
  2865. " t.PROVINCEID," +
  2866. " t.CITYID," +
  2867. " t.DISTRICTID," +
  2868. " t.address," +
  2869. " t.appointmentremark," +
  2870. " k.*" +
  2871. " from WROutInApply t" +
  2872. " left join wroutindetail d" +
  2873. " on t.applyid = d.applyid" +
  2874. " left join wroutinexpress e" +
  2875. " on t.applyid = e.applyid" +
  2876. " left join tmp k" +
  2877. " on d.wrfactortypeid = k.wrfactortypeid" +
  2878. " left join enumdicitem en1" +
  2879. " on t.appointmentmodel = en1.enumitemname and en1.enumdiccode='appointmentModel'" +
  2880. " where t.applytype in (2, 4)"
  2881. sqlId.AndEx("t.USERID", r.USERID, r.USERID > 0)
  2882. // 格式 yyyymmdd
  2883. if len(r.BEGINDATE) > 0 {
  2884. sqlId.JoinFormat(" and t.TRADEDATE >= '%v'", r.BEGINDATE)
  2885. }
  2886. if len(r.ENDDATE) > 0 {
  2887. sqlId.JoinFormat(" and t.TRADEDATE <= '%v'", r.ENDDATE)
  2888. }
  2889. sqlId.Join(" order by t.applytime desc")
  2890. sqlId.Page(r.Page, r.PageSize)
  2891. return sqlId.String()
  2892. }
  2893. // GetDataEx 获取出入库申请(提货)
  2894. func (r *WrOutInApply) GetDataEx() (interface{}, error) {
  2895. sData := make([]WrOutInApply, 0)
  2896. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  2897. for i := range sData {
  2898. sData[i].calc()
  2899. }
  2900. return sData, err
  2901. }
  2902. // GetDataEx 获取出入库申请(提货) - 分页
  2903. func (r *WrOutInApply) GetDataByPage() (interface{}, error, int, int, int) {
  2904. sData := make([]WrOutInApply, 0)
  2905. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  2906. total := 0
  2907. for i := range sData {
  2908. sData[i].calc()
  2909. total = sData[i].Total
  2910. }
  2911. return sData, err, r.Page, r.PageSize, total
  2912. }
  2913. // WrDeliveryDetail 交收
  2914. type WrDeliveryDetail struct {
  2915. DELIVERYID string `json:"deliveryid" xorm:"'DELIVERYID'"` //交割单号(121+Unix秒时间戳(10位)+xxxxxx)
  2916. DELIVERYQTY float64 `json:"deliveryqty" xorm:"DELIVERYQTY"` // 交收数量(点选数量)
  2917. XDELIVERYCLOSEQTY float64 `json:"xdeliverycloseqty" xorm:"'XDELIVERYCLOSEQTY'"` // 合约数量
  2918. PDELIVERYCLOSEQTY float64 `json:"pdeliverycloseqty" xorm:"'PDELIVERYCLOSEQTY'"` // p合约平仓数量
  2919. DELIVERYTIME string `json:"deliverytime" xorm:"DELIVERYTIME"` // 交割时间
  2920. DELIVERYAMOUNT float64 `json:"deliveryamount" xorm:"DELIVERYAMOUNT"` // 货款金额(X总货款+P总货款)
  2921. DELIVERYPRICEMOVE float64 `json:"deliverypricemove" xorm:"DELIVERYPRICEMOVE"` // 升贴水(升贴水总额)
  2922. DELIVERYTOTALAMOUNT float64 `json:"deliverytotalamount" xorm:"DELIVERYTOTALAMOUNT"` // 交收金额
  2923. P1GOODSREMAINAMOUNT float64 `json:"p1goodsremainamount" xorm:"P1GOODSREMAINAMOUNT"` // 点价货款 ps:当PPRICEMODE=2时, 界面需显示"-"
  2924. WRFACTORTYPEID string `json:"wrfactortypeid" xorm:"WRFACTORTYPEID"` // 仓单要素类型ID
  2925. DELIVERYSTATUS int32 `json:"deliverystatus" xorm:"DELIVERYSTATUS"` // 状态 - 1:待成交 2:已成交 3:成交失败 4:履约完成
  2926. BUYORSELL int32 `json:"buyorsell" xorm:"BUYORSELL"` // 方向 - 0:买 1:卖
  2927. DELIVERYORDERID string `json:"deliveryorderid" xorm:"DELIVERYORDERID"` // 申报单号
  2928. ACCOUNTID int64 `json:"accountid" xorm:"ACCOUNTID" form:"accountid"` // 账号ID
  2929. MATCHACCOUNTID int64 `json:"matchaccountid" xorm:"MATCHACCOUNTID"` // 对手账号ID
  2930. XGOODSID int32 `json:"xgoodsid" xorm:"XGOODSID" form:"xgoodsid"` // x交易合约ID
  2931. PGOODSID int32 `json:"pgoodsid" xorm:"'PGOODSID'"` // p点选合约id
  2932. PPRICEMODE int32 `json:"ppricemode" xorm:"PPRICEMODE"` // 点价价格方式 - 1:商品价 2:固定值
  2933. PDELIVERYPRICE float64 `json:"pdeliveryprice" xorm:"PDELIVERYPRICE"` // 点价价格 ps:当PPRICEMODE=2时, 界面需显示"-"
  2934. XGOODSCODE string `json:"xgoodscode" xorm:"'XGOODSCODE'"` // 商品代码
  2935. XGOODSNAME string `json:"xgoodsname" xorm:"'XGOODSNAME'"` // 商品名称
  2936. PGOODSCODE string `json:"pgoodscode" xorm:"'PGOODSCODE'"` // 商品代码
  2937. PGOODSNAME string `json:"pgoodsname" xorm:"'PGOODSNAME'"` // 商品名称
  2938. USERID int64 `json:"userid" xorm:"'USERID'" form:"userid"` // 用户id
  2939. USERNAME string `json:"username" xorm:"'USERNAME'"` // 用户名称
  2940. MATCHUSERNAME string `json:"matchusername" xorm:"'MATCHUSERNAME'"` // 对手方名称(仓单持有人)
  2941. TRADEDATE string `json:"tradedate" xorm:"'TRADEDATE'"` // 交易日(yyyymmdd)
  2942. WRTYPENAME string `json:"wrtypename" xorm:"'WRTYPENAME'"` // 商品
  2943. WAREHOUSENAME string `json:"warehousename" xorm:"'WAREHOUSENAME'"` // 仓库名称
  2944. ENUMDICNAME string `json:"enumdicname" xorm:"'ENUMDICNAME'"` // 单位名称
  2945. XDELIVERYPRICE float64 `json:"xdeliveryprice" xorm:"XDELIVERYPRICE"` // 交易合约交割价
  2946. XGOODSREMAINAMOUNT float64 `json:"xgoodsremainamount" xorm:"XGOODSREMAINAMOUNT"` // X剩余总货款
  2947. REMAINTOTALAMOUNT float64 `json:"remaintotalamount" xorm:"REMAINTOTALAMOUNT"` // 实际剩余总货款 = (X、P剩余总货款 + 升贴水总额) * (实际成交数量/交割数量)
  2948. XGOODSAMOUNT SFLOAT64 `json:"xgoodsamount"` // 合约金额 = 货款金额(DELIVERYAMOUNT) - 点价货款(P1GOODSREMAINAMOUNT)
  2949. AVERAGEPRICE SFLOAT64 `json:"averageprice"` // 交割均价 = 交割金额 / 交割数量
  2950. BEGINDATE string `json:"begindate" form:"begindate"` // 开始交易日(yyyymmdd)
  2951. ENDDATE string `json:"enddate" form:"enddate"` // 结束交易日(yyyymmdd)
  2952. }
  2953. func (r *WrDeliveryDetail) calc() {
  2954. r.MATCHUSERNAME = EncryptByStar(r.MATCHUSERNAME)
  2955. if r.WRTYPENAME != "" {
  2956. r.WRTYPENAME = strings.ReplaceAll(r.WRTYPENAME, ",", "-")
  2957. }
  2958. r.XGOODSAMOUNT.Set(r.DELIVERYAMOUNT - r.P1GOODSREMAINAMOUNT)
  2959. if r.DELIVERYQTY > 1e-8 {
  2960. r.AVERAGEPRICE.Set(r.DELIVERYTOTALAMOUNT / r.DELIVERYQTY)
  2961. r.AVERAGEPRICE.Round(3)
  2962. }
  2963. }
  2964. func (r *WrDeliveryDetail) buildSql() string {
  2965. var sqlId utils.SQLVal = `
  2966. select t.xgoodsid,
  2967. t.buyorsell,
  2968. to_char(t.deliveryid) deliveryid,
  2969. t.deliveryqty,
  2970. t.xdeliverycloseqty,
  2971. t.pdeliverycloseqty,
  2972. t.deliveryamount,
  2973. t.pdeliveryprice,
  2974. t.p1goodsremainamount,
  2975. t.deliverypricemove,
  2976. t.deliverytotalamount,
  2977. to_char(t.deliverytime, 'yyyy-mm-dd hh24:mi:ss') deliverytime,
  2978. t.deliverystatus,
  2979. t.accountid,
  2980. t.matchaccountid,
  2981. t.tradedate,
  2982. to_char(t.wrfactortypeid) wrfactortypeid,
  2983. to_char(t.deliveryorderid) deliveryorderid,
  2984. g.goodscode xgoodscode,
  2985. g.goodsname xgoodsname,
  2986. t.pgoodsid,
  2987. g2.goodscode pgoodscode,
  2988. g2.goodsname pgoodsname,
  2989. ta.accountname taaccountname,
  2990. u.userid,
  2991. u.accountname username,
  2992. u2.accountname matchusername,
  2993. wd.wrstandardname || w.wrfactortypename2 as WRTYPENAME,
  2994. h.warehousename,
  2995. e.enumdicname,
  2996. t.xdeliveryprice,
  2997. t.xgoodsremainamount,
  2998. t.remaintotalamount
  2999. from deliverydetail t
  3000. left join goods g
  3001. on t.xgoodsid = g.goodsid
  3002. left join goods g2
  3003. on t.pgoodsid = g2.goodsid
  3004. left join taaccount ta
  3005. on t.accountid = ta.accountid
  3006. left join useraccount u
  3007. on ta.userid = u.userid
  3008. left join taaccount ta2
  3009. on t.matchaccountid = ta2.accountid
  3010. left join useraccount u2
  3011. on ta2.userid = u2.userid
  3012. left join wrfactortype w
  3013. on t.wrfactortypeid = w.wrfactortypeid
  3014. left join wrstandard wd
  3015. on w.wrstandardid = wd.wrstandardid
  3016. left join warehouseinfo h on w.warehouseid=h.autoid
  3017. left join enumdicitem e on wd.unitid=e.enumitemname and e.enumdiccode='goodsunit'
  3018. where 1 = 1
  3019. `
  3020. sqlId.AndEx("u.userid", r.USERID, r.USERID > 0)
  3021. sqlId.AndEx("t.accountid", r.ACCOUNTID, r.ACCOUNTID > 0)
  3022. return sqlId.String()
  3023. }
  3024. func (r *WrDeliveryDetail) buildSqlHis() string {
  3025. var sqlId utils.SQLVal = `
  3026. select t.xgoodsid,
  3027. t.buyorsell,
  3028. to_char(t.deliveryid) deliveryid,
  3029. t.deliveryqty,
  3030. t.xdeliverycloseqty,
  3031. t.pdeliverycloseqty,
  3032. t.deliveryamount,
  3033. t.pdeliveryprice,
  3034. t.p1goodsremainamount,
  3035. t.deliverypricemove,
  3036. t.deliverytotalamount,
  3037. to_char(t.deliverytime, 'yyyy-mm-dd hh24:mi:ss') deliverytime,
  3038. t.deliverystatus,
  3039. t.accountid,
  3040. t.matchaccountid,
  3041. t.tradedate,
  3042. to_char(t.wrfactortypeid) wrfactortypeid,
  3043. to_char(t.deliveryorderid) deliveryorderid,
  3044. g.goodscode xgoodscode,
  3045. g.goodsname xgoodsname,
  3046. t.pgoodsid,
  3047. g2.goodscode pgoodscode,
  3048. g2.goodsname pgoodsname,
  3049. ta.accountname taaccountname,
  3050. u.userid,
  3051. u.accountname username,
  3052. u2.accountname matchusername,
  3053. wd.wrstandardname || w.wrfactortypename2 as WRTYPENAME,
  3054. h.warehousename,
  3055. e.enumdicname,
  3056. t.xdeliveryprice,
  3057. t.xgoodsremainamount,
  3058. t.remaintotalamount
  3059. from his_deliverydetail t
  3060. left join goods g
  3061. on t.xgoodsid = g.goodsid
  3062. left join goods g2
  3063. on t.pgoodsid = g2.goodsid
  3064. left join taaccount ta
  3065. on t.accountid = ta.accountid
  3066. left join useraccount u
  3067. on ta.userid = u.userid
  3068. left join taaccount ta2
  3069. on t.matchaccountid = ta2.accountid
  3070. left join useraccount u2
  3071. on ta2.userid = u2.userid
  3072. left join wrfactortype w
  3073. on t.wrfactortypeid = w.wrfactortypeid
  3074. left join wrstandard wd
  3075. on w.wrstandardid = wd.wrstandardid
  3076. left join warehouseinfo h on w.warehouseid=h.autoid
  3077. left join enumdicitem e on wd.unitid=e.enumitemname and e.enumdiccode='goodsunit'
  3078. where 1 = 1 and t.isvaliddata = 1
  3079. `
  3080. sqlId.AndEx("u.userid", r.USERID, r.USERID > 0)
  3081. sqlId.AndEx("t.accountid", r.ACCOUNTID, r.ACCOUNTID > 0)
  3082. // 格式 yyyymmdd
  3083. if len(r.BEGINDATE) > 0 {
  3084. sqlId.JoinFormat(" and t.TRADEDATE >= '%v'", r.BEGINDATE)
  3085. }
  3086. if len(r.ENDDATE) > 0 {
  3087. sqlId.JoinFormat(" and t.TRADEDATE <= '%v'", r.ENDDATE)
  3088. }
  3089. return sqlId.String()
  3090. }
  3091. // GetDataEx 获取交收
  3092. func (r *WrDeliveryDetail) GetDataEx() (interface{}, error) {
  3093. var sqlId string
  3094. // 如果指定了开始日期或结束日期, 刚查历史
  3095. if r.BEGINDATE != "" || r.ENDDATE != "" {
  3096. sqlId = r.buildSqlHis()
  3097. } else {
  3098. sqlId = r.buildSql()
  3099. }
  3100. sData := make([]WrDeliveryDetail, 0)
  3101. err := db.GetEngine().SQL(sqlId).Find(&sData)
  3102. for i := range sData {
  3103. sData[i].calc()
  3104. }
  3105. return sData, err
  3106. }
  3107. // WrBsGoodsInfo 合约交易买卖大厅详情
  3108. type WrBsGoodsInfo struct {
  3109. GOODSID int32 `json:"goodsid" xorm:"GOODSID" form:"goodsid"` // 交易合约ID
  3110. LstItem []WrTypeItem `json:"lstitem"` // 商品信息项
  3111. LstStep []WrGoodsPerformanceStep `json:"lststep"` // 履约规则
  3112. BUYORSELL int32 `json:"buyorsell" form:"buyorsell"` // 买卖方向 0-买 1-卖
  3113. }
  3114. // GetDataEx 获取描述
  3115. func (r *WrBsGoodsInfo) GetDataEx() (interface{}, error) {
  3116. sData := make([]WrBsGoodsInfo, 0)
  3117. // 履约关系
  3118. mRelation := DeliveryRelation{GOODSID: r.GOODSID}
  3119. if d, err := mRelation.GetDataEx(); err == nil {
  3120. if sRelation, ok := d.([]DeliveryRelation); ok {
  3121. val := WrBsGoodsInfo{GOODSID: r.GOODSID,
  3122. LstItem: make([]WrTypeItem, 0),
  3123. LstStep: make([]WrGoodsPerformanceStep, 0)}
  3124. if len(sRelation) > 0 {
  3125. vR := sRelation[0]
  3126. val.LstItem = append(val.LstItem, WrTypeItem{NAME: "品种", VALUE: vR.DELIVERYGOODSNAME})
  3127. val.LstItem = append(val.LstItem, WrTypeItem{NAME: "商品", VALUE: vR.WRSTANDARDNAME})
  3128. mItem := WrStandardFactoryItem{WRSTANDARDID: int64(vR.WRSTANDARDID), WMCATFLAG: 1}
  3129. if d2, err := mItem.GetDataEx(); err == nil {
  3130. if lst, ok := d2.([]WrStandardFactoryItem); ok {
  3131. for i := range lst {
  3132. val.LstItem = append(val.LstItem,
  3133. WrTypeItem{NAME: lst[i].ITEMTYPENAME, VALUE: lst[i].DGFACTORYITEMVALUE})
  3134. }
  3135. }
  3136. }
  3137. // 履约计划模板步骤
  3138. tmpId := IFValue(r.BUYORSELL == 0, vR.BUYTEMPLATEID, vR.SELLTEMPLATEID).(int64)
  3139. mStep := WrGoodsPerformanceStep{TEMPLATEID: tmpId}
  3140. if d3, err := mStep.GetData(); err == nil {
  3141. val.LstStep = d3
  3142. }
  3143. }
  3144. sData = append(sData, val)
  3145. }
  3146. }
  3147. return sData, nil
  3148. }
  3149. // WrTradeOrderDetail 合约交易买卖大厅
  3150. type WrTradeOrderDetail struct {
  3151. ORDERID string `json:"orderid" xorm:"'ORDERID'"` // 委托单号
  3152. GOODSID int32 `json:"goodsid" xorm:"'GOODSID'" form:"goodsid"` // 商品id
  3153. BUYORSELL int32 `json:"buyorsell" xorm:"'BUYORSELL'" form:"buyorsell"` // 买卖方向 0-买 1-卖
  3154. ORDERPRICE SFLOAT64 `json:"orderprice" xorm:"'ORDERPRICE'"` // 委托价格
  3155. ORDERQTY int64 `json:"orderqty" xorm:"'ORDERQTY'"` // 委托数量
  3156. USERID int64 `json:"userid" xorm:"'USERID'"` // 用户id
  3157. USERNAME string `json:"username" xorm:"'USERNAME'"` // 用户名称(已脱敏)
  3158. PageEx `xorm:"extends"`
  3159. }
  3160. func (r *WrTradeOrderDetail) calc() {
  3161. r.USERNAME = EncryptByStar(r.USERNAME)
  3162. }
  3163. func (r *WrTradeOrderDetail) buildSql() string {
  3164. var sqlId utils.SQLVal = `
  3165. select to_char(t.orderid) orderid,
  3166. t.buyorsell,
  3167. t.goodsid,
  3168. t.orderprice,
  3169. t.orderqty - t.tradeqty orderqty,
  3170. u.userid,
  3171. u.accountname username,
  3172. t.orderstatus
  3173. from trade_orderdetail t
  3174. left join taaccount ta
  3175. on t.accountid = ta.accountid
  3176. left join useraccount u
  3177. on ta.relateduserid = u.userid
  3178. where 1 = 1
  3179. and t.orderstatus in(3,7,12)
  3180. and (t.OPERATETYPE <> 26 and t.OPERATETYPE <> 15) `
  3181. sqlId.And("t.GOODSID", r.GOODSID)
  3182. sqlId.And("t.BUYORSELL", r.BUYORSELL)
  3183. if r.BUYORSELL == 0 {
  3184. sqlId.Join(" order by t.orderprice desc, t.orderindexid, t.orderid")
  3185. } else {
  3186. sqlId.Join(" order by t.orderprice, t.orderindexid, t.orderid")
  3187. }
  3188. sqlId.Page(r.Page, r.PageSize)
  3189. return sqlId.String()
  3190. }
  3191. // GetDataByPage 获取合约交易买卖大厅
  3192. func (r *WrTradeOrderDetail) GetDataByPage() (interface{}, error, int, int, int) {
  3193. sData := make([]WrTradeOrderDetail, 0)
  3194. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  3195. for i := range sData {
  3196. sData[i].calc()
  3197. }
  3198. if len(sData) > 0 {
  3199. r.Total = sData[0].Total
  3200. }
  3201. return sData, err, r.Page, r.PageSize, r.Total
  3202. }
  3203. // WrAverageTradePrice 成交均价(历史走势)
  3204. type WrAverageTradePrice struct {
  3205. TRADEDATE string `json:"tradedate" xorm:"'TRADEDATE'"` // 交易日yyyymm
  3206. TRADEAMOUNT SFLOAT64 `json:"-" xorm:"'TRADEAMOUNT'"` // 总成交额
  3207. TRADEQTY SFLOAT64 `json:"-" xorm:"'TRADEQTY'"` // 总成交量
  3208. AVERAGEPRICE SFLOAT64 `json:"averageprice" xorm:"'AVERAGEPRICE'"` // 成交均价
  3209. PageEx `xorm:"extends"`
  3210. WRFACTORTYPEID int64 `json:"-" form:"wrfactortypeid"` // 仓单要素id
  3211. HASWR int32 `json:"-" form:"haswr"` // 0-仓单预售 1-仓单贸易
  3212. }
  3213. func (r *WrAverageTradePrice) calc() {
  3214. }
  3215. func (r *WrAverageTradePrice) buildSql() string {
  3216. var sqlId utils.SQLVal = "select t.tradedate," +
  3217. " sum(t.tradeamount) tradeamount," +
  3218. " sum(t.tradeqty) tradeqty," +
  3219. " round(sum(t.tradeamount) / sum(t.tradeqty), 2) as averagePrice" +
  3220. " from his_wrtrade_tradedetail t" +
  3221. " where t.wrtradetype in (1, 2)" +
  3222. " and t.haswr = %v" +
  3223. " and t.wrfactortypeid = %v" +
  3224. " group by t.tradedate" +
  3225. " order by t.tradedate desc"
  3226. sqlId.FormatParam(r.HASWR, r.WRFACTORTYPEID)
  3227. sqlId.Page(r.Page, r.PageSize)
  3228. return sqlId.String()
  3229. }
  3230. // GetDataByPage 获取成交均价(历史走势)
  3231. func (r *WrAverageTradePrice) GetDataByPage() (interface{}, error, int, int, int) {
  3232. sData := make([]WrAverageTradePrice, 0)
  3233. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  3234. for i := range sData {
  3235. sData[i].calc()
  3236. }
  3237. // 进行反序, sql是日期倒序查的, 反序后变为日期从小到大
  3238. if nLen := len(sData); nLen >= 2 {
  3239. i, j := 0, nLen-1
  3240. for i < j {
  3241. sData[i], sData[j] = sData[j], sData[i]
  3242. i++
  3243. j--
  3244. }
  3245. }
  3246. if len(sData) > 0 {
  3247. r.Total = sData[0].Total
  3248. }
  3249. return sData, err, r.Page, r.PageSize, r.Total
  3250. }
  3251. // WrQuoteOrderMyq 贸易圈大厅
  3252. type WrQuoteOrderMyq struct {
  3253. WRTRADEORDERID string `json:"wrtradeorderid" xorm:"WRTRADEORDERID"` // 仓单贸易委托单ID(320+Unix秒时间戳(10位)+xxxxxx)
  3254. BUYORSELL int32 `json:"buyorsell" xorm:"BUYORSELL" form:"buyorsell"` // 买卖 - 0:买 1:卖
  3255. USERID int64 `json:"userid" xorm:"USERID" form:"userid"` // 购买方(销售方)用户ID
  3256. QTY float64 `json:"orderqty" xorm:"qty"` // 买(卖)量(=委托量-成交量)
  3257. PRICE float64 `json:"fixedprice" xorm:"price"` // 买(卖)价
  3258. PRICEMOVE float64 `json:"pricemove" xorm:"PRICEMOVE"` // 买(卖)升贴水- 基差
  3259. USERNAME string `json:"username" xorm:"'USERNAME'"` // 购买方(销售方)
  3260. ENUMDICNAME string `json:"enumdicname" xorm:"'enumdicname'"` // 单位名称
  3261. MINIVALUE int32 `json:"minivalue" xorm:"'MINIVALUE'"` // 现货商品最小变动值
  3262. DELIVERYMONTH string `json:"deliverymonth" xorm:"'DELIVERYMONTH'" form:"deliverymonth"` // 交收月
  3263. ORDERTIME string `json:"ordertime" xorm:"'ORDERTIME'"` // 委托时间
  3264. DELISTMINQTY SFLOAT64 `json:"delistminqty" xorm:"'DELISTMINQTY'"` // 起摘数量
  3265. CANBARGAIN int32 `json:"canbargain" xorm:"'CANBARGAIN'"` // 是否可议价 - 0:不可 1:可
  3266. CANPART int32 `json:"canpart" xorm:"'CANPART'"` // 是否允许部份摘牌 - 0:不允许 1:允许
  3267. MARGINFLAG int32 `json:"marginflag" xorm:"'MARGINFLAG'"` // 挂牌是否指定保证金 - 0:未指定 1:指定
  3268. MARGINVALUE float64 `json:"marginvalue" xorm:"'MARGINVALUE'"` // 保证金设置值
  3269. VALIDTYPE int32 `json:"validtype" xorm:"'VALIDTYPE'"` // 有效类型 - 1当日有效 2本周有效 3指定日期有效 4一直有效
  3270. VALIDTIME string `json:"validtime" xorm:"'VALIDTIME'"` // 有效期限
  3271. PERFORMANCETEMPLATEID int64 `json:"performancetemplateid" xorm:"'PERFORMANCETEMPLATEID'"` // 履约模板id
  3272. GOODSCODE string `json:"goodscode" xorm:"'GOODSCODE'"` // 商品合约代码
  3273. TEMPLATENAME string `json:"templatename" xorm:"'TEMPLATENAME'"` // 履约模板名称
  3274. WAREHOUSENAME string `json:"warehousename" xorm:"'WAREHOUSENAME'"` // 仓库名称
  3275. WRTYPENAME string `json:"wrtypename" xorm:"'WRTYPENAME'"` // 商品
  3276. WRSTANDARDID int64 `json:"wrstandardid" xorm:"WRSTANDARDID" form:"wrstandardid"` // 现货商品ID
  3277. DELIVERYGOODSID int32 `json:"deliverygoodsid" xorm:"DELIVERYGOODSID" form:"deliverygoodsid"` // 品种ID
  3278. WRFACTORTYPEID string `json:"wrfactortypeid" xorm:"'WRFACTORTYPEID'"` // 仓单要素id
  3279. WRSTANDARDNAME string `json:"wrstandardname" xorm:"'WRSTANDARDNAME'"` // 商品名称
  3280. WRSTANDARDCODE string `json:"wrstandardcode" xorm:"WRSTANDARDCODE" form:"wrstandardcode"` // 现货商品代码
  3281. DELIVERYGOODSCODE string `json:"deliverygoodscode" xorm:"'DELIVERYGOODSCODE'"` // 品种代码
  3282. DELIVERYGOODSNAME string `json:"deliverygoodsname" xorm:"'DELIVERYGOODSNAME'"` // 品种名称
  3283. PageEx `xorm:"extends"`
  3284. HasWr int32 `json:"-" form:"haswr"` // 是否有仓单 0-没有 1-有
  3285. WrPriceType int32 `json:"-" form:"wrpricetype"` // 价格方式 - 1:固定价 2-浮动价 - [挂牌]
  3286. MarketId int32 `json:"-" form:"marketid"` // 市场id
  3287. GOODSID int32 `json:"-" form:"goodsid"` // 商品id
  3288. DGITEMNAME string `json:"-" form:"dgitemname"` // 筛选项
  3289. }
  3290. func (r *WrQuoteOrderMyq) calc() {
  3291. r.WRTYPENAME = strings.ReplaceAll(r.WRTYPENAME, ",", "-")
  3292. r.USERNAME = EncryptByStar(r.USERNAME)
  3293. }
  3294. func (r *WrQuoteOrderMyq) buildSql() string {
  3295. var sqlId utils.SQLVal = `
  3296. select to_char(t.wrtradeorderid) wrtradeorderid,
  3297. to_char(t.wrfactortypeid) wrfactortypeid,
  3298. t.userid,
  3299. t.orderqty - t.tradeqty as qty,
  3300. t.fixedprice as price,
  3301. t.pricemove,
  3302. t.wrpricetype,
  3303. t.buyorsell,
  3304. t.deliverymonth,
  3305. t.delistminqty,
  3306. t.haswr,
  3307. t.canbargain,
  3308. t.canpart,
  3309. t.marginflag,
  3310. t.marginvalue,
  3311. t.validtype,
  3312. to_char(t.validtime, 'yyyy-mm-dd hh24:mi:ss') validtime,
  3313. t.performancetemplateid,
  3314. to_char(t.ordertime, 'yyyy-mm-dd hh24:mi:ss') ordertime,
  3315. u.accountname as username,
  3316. c.goodsid,
  3317. c.goodscode,
  3318. wd.minivalue,
  3319. wd.wrstandardname,
  3320. wd.wrstandardcode,
  3321. g.deliverygoodscode,
  3322. g.deliverygoodsname,
  3323. e.enumdicname,
  3324. wd.wrstandardname || w.wrfactortypename2 WRTYPENAME,
  3325. w.wrstandardid,
  3326. w.deliverygoodsid,
  3327. s.templatename,
  3328. h.warehousename
  3329. from WRTRADE_ORDERDETAIL t
  3330. left join WRTRADE_GOODSCONFIG c
  3331. on t.wrtradeorderid = c.wrtradeorderid
  3332. left join Useraccount u
  3333. on t.userid = u.userid
  3334. left join wrfactortype w
  3335. on t.wrfactortypeid = w.wrfactortypeid
  3336. left join wrstandard wd
  3337. on w.wrstandardid = wd.wrstandardid
  3338. left join performanceplantemplate s
  3339. on t.performancetemplateid = s.autoid
  3340. left join warehouseinfo h
  3341. on w.warehouseid = h.autoid
  3342. left join deliverygoods g on w.deliverygoodsid=g.deliverygoodsid
  3343. left join enumdicitem e
  3344. on wd.unitid = e.enumitemname
  3345. and e.enumdiccode = 'goodsunit'
  3346. where 1 = 1
  3347. and t.wrtradetype = 1
  3348. and t.isspecified=1
  3349. and t.wrtradeorderstatus in (3, 7)
  3350. and (t.userid=%v or
  3351. (t.allfriendsflag=1 and t.userid in(select userid from userfriend where frienduserid=%v))
  3352. or (t.allfriendsflag=0 and %v in(select k.matchuserid from wrtrade_matchdetail k where k.wrtradeorderid=t.wrtradeorderid))
  3353. )
  3354. `
  3355. sqlId.FormatParam(r.USERID, r.USERID, r.USERID)
  3356. sqlId.AndEx("t.haswr", r.HasWr, r.HasWr >= 0)
  3357. r.WrPriceType = 1 // 查固定价
  3358. sqlId.And("t.wrpricetype", r.WrPriceType)
  3359. sqlId.AndEx("t.wrfactortypeid", r.WRFACTORTYPEID, r.WRFACTORTYPEID != "")
  3360. sqlId.AndEx("c.goodsid", r.GOODSID, r.GOODSID > 0)
  3361. sqlId.And("t.buyorsell", r.BUYORSELL)
  3362. sqlId.AndEx("t.marketid", r.MarketId, r.MarketId > 0)
  3363. sqlId.AndEx("t.deliverymonth", r.DELIVERYMONTH, len(r.DELIVERYMONTH) > 0)
  3364. sqlId.AndEx("w.wrstandardid", r.WRSTANDARDID, r.WRSTANDARDID > 0)
  3365. sqlId.AndEx("w.deliverygoodsid", r.DELIVERYGOODSID, r.DELIVERYGOODSID > 0)
  3366. if d, ok := FtItemName(r.DGITEMNAME); ok {
  3367. sqlId.AndLikes("w.wrfactortypename", d...)
  3368. }
  3369. if r.BUYORSELL == 0 {
  3370. if r.WrPriceType == 1 {
  3371. sqlId.Join(" order by t.fixedprice desc, t.ordertime")
  3372. } else {
  3373. sqlId.Join(" order by t.pricemove desc, t.ordertime")
  3374. }
  3375. } else {
  3376. if r.WrPriceType == 1 {
  3377. sqlId.Join(" order by t.fixedprice asc, t.ordertime")
  3378. } else {
  3379. sqlId.Join(" order by t.pricemove asc, t.ordertime")
  3380. }
  3381. }
  3382. sqlId.Page(r.Page, r.PageSize)
  3383. return sqlId.String()
  3384. }
  3385. // GetDataByPage 获取贸易圈大厅
  3386. func (r *WrQuoteOrderMyq) GetDataByPage() (interface{}, error, int, int, int) {
  3387. sData := make([]WrQuoteOrderMyq, 0)
  3388. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  3389. total := 0
  3390. for i := range sData {
  3391. sData[i].calc()
  3392. total = sData[i].Total
  3393. }
  3394. return sData, err, r.Page, r.PageSize, total
  3395. }
  3396. // WrDeliveryAvalidHoldLB 合约交收可点选仓单
  3397. type WrDeliveryAvalidHoldLB struct {
  3398. ACCOUNTID int64 `json:"accountid" xorm:"'ACCOUNTID'" form:"accountid"` // 资金账号
  3399. GOODSID int32 `json:"goodsid" xorm:"'GOODSID'" form:"goodsid"` // x合约商品id
  3400. WRSTANDARDID int32 `json:"wrstandardid" xorm:"'WRSTANDARDID'"` // 品类d
  3401. UQTY float64 `json:"-" xorm:"'UQTY'"` // 用户持有数量
  3402. QTY float64 `json:"-" xorm:"'QTY'"` // 用户仓单数量
  3403. WRFACTORTYPEID string `json:"wrfactortypeid" xorm:"'WRFACTORTYPEID'"` // 仓单要素id
  3404. LADINGBILLID string `json:"ladingbillid" xorm:"'LADINGBILLID'"` // 提单id
  3405. SUBNUM int64 `json:"subnum" xorm:"'SUBNUM'"` // 提单子id
  3406. DELIVERYGOODSID int32 `json:"deliverygoodsid" xorm:"'DELIVERYGOODSID'"` // 品种id
  3407. USERID int64 `json:"userid" xorm:"'USERID'"` // 用户id
  3408. WRFACTORTYPENAME2 string `json:"-" xorm:"'WRFACTORTYPENAME2'"` // 仓单要素名称(不含仓库)
  3409. WAREHOUSEID int32 `json:"warehouseid" xorm:"'WAREHOUSEID'"` // 仓库id
  3410. AVALIDQTY float64 `json:"avalidqty" xorm:"'AVALIDQTY'"` // 数量(可点选数量)
  3411. WRSTANDARDNAME string `json:"wrstandardname" xorm:"'WRSTANDARDNAME'"` // 品类名称
  3412. WRSTANDARDCODE string `json:"wrstandardcode" xorm:"'WRSTANDARDCODE'"` // 品代码
  3413. WAREHOUSECODE string `json:"warehousecode" xorm:"'WAREHOUSECODE'"` // 仓库代码
  3414. WAREHOUSENAME string `json:"warehousename" xorm:"'WAREHOUSENAME'"` // 仓库名称
  3415. XGOODSCODE string `json:"xgoodscode" xorm:"'XGOODSCODE'"` // x合约代码
  3416. XGOODSNAME string `json:"xgoodsname" xorm:"'XGOODSNAME'"` // x合约名称
  3417. PGOODSID int32 `json:"pgoodsid" xorm:"'PGOODSID'"` // p商品id(点价合约)
  3418. PGOODSCODE string `json:"pgoodscode" xorm:"'PGOODSCODE'"` // p商品代码(点价合约)
  3419. PGOODSNAME string `json:"pgoodsname" xorm:"'PGOODSNAME'"` // p商品名称(点价合约)
  3420. USERNAME string `json:"username" xorm:"'USERNAME'"` // 仓单持有人
  3421. PRICEMOVE float64 `json:"pricemove" xorm:"'PRICEMOVE'"` // 升贴水
  3422. WRTYPENAME string `json:"wrtypename"` // 商品
  3423. UNITID int32 `json:"-" xorm:"'UNITID'"` // 品类单位id
  3424. ENUMDICNAME string `json:"enumdicname"` // 单位名称
  3425. }
  3426. func (r *WrDeliveryAvalidHoldLB) calc() {
  3427. r.USERNAME = EncryptByStar(r.USERNAME)
  3428. if r.WRTYPENAME == "" {
  3429. if len(r.WRFACTORTYPENAME2) > 0 {
  3430. r.WRTYPENAME = r.WRSTANDARDNAME + r.WRFACTORTYPENAME2
  3431. } else {
  3432. r.WRTYPENAME = r.WRSTANDARDNAME
  3433. }
  3434. }
  3435. r.WRTYPENAME = strings.ReplaceAll(r.WRTYPENAME, ",", "-")
  3436. r.ENUMDICNAME = mtpcache.GetEnumDicitemName(r.UNITID)
  3437. }
  3438. func (r *WrDeliveryAvalidHoldLB) buildSql() string {
  3439. var sqlId utils.SQLVal = `
  3440. with tmp as
  3441. (select k.wrfactortypeid, k.goodsid, sum(k.pricemove) pricemove
  3442. from (select to_char(t.wrfactortypeid) wrfactortypeid,
  3443. b.dgfactoryitemtypeid,
  3444. b.itemtypename,
  3445. c.dgfactoryitemvalue,
  3446. t.optioncompare,
  3447. t.warehouseid,
  3448. t.wrstandardid,
  3449. c.dgfactoryitemid,
  3450. t.wrfactortypename,
  3451. t.wrfactortypename2,
  3452. r.goodsid,
  3453. nvl(r.premiumvalue, 0) pricemove
  3454. from wrfactortype t
  3455. inner join wrfactortypeitem a
  3456. on t.wrfactortypeid = a.wrfactortypeid
  3457. inner join dgfactoryitemtype b
  3458. on t.deliverygoodsid = b.deliverygoodsid
  3459. and a.dgfactoryitemtypeid = b.dgfactoryitemtypeid
  3460. left join dgfactoryitem c
  3461. on a.dgfactoryitemid = c.dgfactoryitemid
  3462. and b.deliverygoodsid = c.deliverygoodsid
  3463. left join deliveryrelationdetail r
  3464. on c.dgfactoryitemid = r.dgfactoryitemid
  3465. and b.dgfactoryitemtypeid = r.dgfactoryitemtypeid
  3466. where 1 = 1) k
  3467. group by k.wrfactortypeid, k.goodsid)
  3468. select a.*,
  3469. case
  3470. when a.uqty * g1.agreeunit * r.mindeliveryqty * (r.rratio2/nvl(r.rratio1,1)) < a.qty then
  3471. a.uqty * g1.agreeunit * r.mindeliveryqty * (r.rratio2/nvl(r.rratio1,1))
  3472. else
  3473. a.qty
  3474. end as avalidqty,
  3475. wd.wrstandardname,
  3476. wd.wrstandardcode,
  3477. wd.unitid,
  3478. h.warehousecode,
  3479. h.warehousename,
  3480. g1.goodscode xgoodscode,
  3481. g1.goodsname xgoodsname,
  3482. r.pgoodsid,
  3483. g2.goodscode pgoodscode,
  3484. g2.goodsname pgoodsname,
  3485. u.accountname username,
  3486. tmp.pricemove
  3487. from (select t.accountid,
  3488. t.goodsid,
  3489. t.wrstandardid,
  3490. t.inqty - nvl(t.cancelqty,0) - nvl(t.deliveryqty,0) - nvl(p.buycurpositionqty,0) as uqty,
  3491. hl.qty - hl.freezerqty qty,
  3492. to_char(hl.wrfactortypeid) wrfactortypeid,
  3493. to_char(hl.ladingbillid) ladingbillid,
  3494. hl.subnum,
  3495. hl.deliverygoodsid,
  3496. hl.userid,
  3497. w.wrfactortypename2,
  3498. w.warehouseid
  3499. from cptrade_usergoodsdata t
  3500. inner join wrholdlb hl
  3501. on t.accountid = hl.accountid
  3502. inner join wrfactortype w
  3503. on t.wrstandardid = w.wrstandardid
  3504. and hl.wrfactortypeid = w.wrfactortypeid
  3505. left join tradeposition p on t.accountid=p.accountid and t.goodsid=p.goodsid
  3506. ) a
  3507. left join wrstandard wd
  3508. on a.wrstandardid = wd.wrstandardid
  3509. left join warehouseinfo h
  3510. on a.warehouseid = h.autoid
  3511. inner join deliveryrelation r
  3512. on a.goodsid = r.goodsid
  3513. and a.wrstandardid = r.wrstandardid
  3514. left join goods g1
  3515. on a.goodsid = g1.goodsid
  3516. left join goods g2
  3517. on r.pgoodsid = g2.goodsid
  3518. left join useraccount u
  3519. on a.userid = u.userid
  3520. left join tmp
  3521. on a.wrfactortypeid = tmp.wrfactortypeid
  3522. and a.goodsid = tmp.goodsid
  3523. where a.uqty > 0
  3524. and a.qty > 0
  3525. `
  3526. // 过滤掉自己的仓单 and a.accountid !=
  3527. sqlId.Join(fmt.Sprintf(" and a.accountid != %v", r.ACCOUNTID))
  3528. sqlId.And("a.goodsid", r.GOODSID)
  3529. return sqlId.String()
  3530. }
  3531. // GetDataEx 获取合约交收可点选仓单
  3532. func (r *WrDeliveryAvalidHoldLB) GetDataEx() (interface{}, error) {
  3533. sData := make([]WrDeliveryAvalidHoldLB, 0)
  3534. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  3535. for i := range sData {
  3536. sData[i].calc()
  3537. }
  3538. return sData, err
  3539. }
  3540. // WrUserFriend 我的朋友
  3541. type WrUserFriend struct {
  3542. USERID int64 `json:"userid" xorm:"'USERID'" form:"userid"` // 用户id
  3543. FRIENDUSERID int64 `json:"frienduserid" xorm:"'FRIENDUSERID'"` // 朋友id
  3544. FRIENDNAME string `json:"friendname" xorm:"'FRIENDNAME'"` // 朋友名称(已脱敏)
  3545. ISFRIEND int32 `json:"isfriend" xorm:"'ISFRIEND'"` // 是否好友 0-不是 1-是
  3546. NEWUSERID int64 `json:"-" form:"newuserid"` // 新朋友id
  3547. }
  3548. func (r *WrUserFriend) calc() {
  3549. r.FRIENDNAME = EncryptByStar(r.FRIENDNAME)
  3550. }
  3551. func (r *WrUserFriend) buildSql() string {
  3552. var sqlId utils.SQLVal
  3553. if r.NEWUSERID > 0 {
  3554. sqlId =
  3555. "select t.userid frienduserid, t.accountname friendname, nvl(f.userid-f.userid+1,0) isfriend" +
  3556. " from useraccount t" +
  3557. " left join userfriend f on t.userid=f.frienduserid and f.userid=%v" +
  3558. " where 1 = 1" +
  3559. " and t.userid = %v"
  3560. sqlId.FormatParam(r.USERID, r.NEWUSERID)
  3561. } else {
  3562. sqlId = "select t.userid, t.frienduserid, u.accountname friendname, 1 as isfriend" +
  3563. " from UserFriend t" +
  3564. " left join useraccount u" +
  3565. " on t.frienduserid = u.userid" +
  3566. " where 1 = 1"
  3567. sqlId.And("t.userid", r.USERID)
  3568. }
  3569. return sqlId.String()
  3570. }
  3571. // GetDataEx 获取我的朋友
  3572. func (r *WrUserFriend) GetDataEx() (interface{}, error) {
  3573. sData := make([]WrUserFriend, 0)
  3574. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  3575. for i := range sData {
  3576. sData[i].calc()
  3577. }
  3578. return sData, err
  3579. }
  3580. // WrFriendApply 好友申请
  3581. type WrFriendApply struct {
  3582. FRIENDAPPLYID string `json:"friendapplyid" xorm:"FRIENDAPPLYID" form:"friendapplyid"` // 申请ID(SEQ_FRIENDAPPLY)
  3583. USERID int64 `json:"userid" xorm:"USERID" form:"userid"` // 申请人用户ID
  3584. FRIENDUSERID string `json:"frienduserid" xorm:"FRIENDUSERID" form:"frienduserid"` // 好友用户ID
  3585. APPLYSRC int32 `json:"applysrc" xorm:"APPLYSRC"` // 申请来源 - 1:管理端 2:终端
  3586. APPLICANTID int64 `json:"applicantid" xorm:"APPLICANTID" form:"applicantid"` // 申请人
  3587. REMARK string `json:"remark" xorm:"REMARK"` // 备注
  3588. APPLYTIME string `json:"applytime" xorm:"APPLYTIME"` // 申请时间
  3589. APPLYSTATUS int32 `json:"applystatus" xorm:"APPLYSTATUS"` // 申请状态 - 1:待审核 2:审核通过 3:审核拒绝 4:处理失败 5:已撤回
  3590. AUDITORID int64 `json:"auditorid" xorm:"AUDITORID" form:"auditorid"` // 审核人
  3591. AUDITSRC int32 `json:"auditsrc" xorm:"AUDITSRC"` // 审核来源 - 1:管理端 2:终端
  3592. AUDITTIME string `json:"audittime" xorm:"AUDITTIME"` // 审核时间
  3593. AUDITREMARK string `json:"auditremark" xorm:"AUDITREMARK"` // 审核备注
  3594. FRIENDNAME string `json:"friendname" xorm:"'FRIENDNAME'"` // 好友名字(已脱敏)
  3595. APPLYNAME string `json:"applyname" xorm:"'APPLYNAME'"` // 申请人名称
  3596. AUDITNAME string `json:"auditname" xorm:"'AUDITNAME'"` // 审核人名称
  3597. }
  3598. func (r *WrFriendApply) calc() {
  3599. r.FRIENDNAME = EncryptByStar(r.FRIENDNAME)
  3600. }
  3601. func (r *WrFriendApply) buildSql() string {
  3602. var sqlId utils.SQLVal = "with tmp as" +
  3603. " (select 2 as src," +
  3604. " loginid as usid," +
  3605. " nvl(to_char(accountname), to_char(logincode)) username" +
  3606. " from loginaccount" +
  3607. " union all" +
  3608. " select 1 as src, autoid as usid, rolename" +
  3609. " from systemmanagerrole)" +
  3610. "select t.friendapplyid," +
  3611. " t.userid," +
  3612. " t.frienduserid," +
  3613. " t.applysrc," +
  3614. " t.applicantid," +
  3615. " t.remark," +
  3616. " to_char(t.applytime, 'yyyy-mm-dd hh24:mi:ss') applytime," +
  3617. " t.applystatus," +
  3618. " t.auditorid," +
  3619. " t.auditsrc," +
  3620. " to_char(t.audittime, 'yyyy-mm-dd hh24:mi:ss') audittime," +
  3621. " t.auditremark," +
  3622. " u.accountname friendname," +
  3623. " k1.username as applyname," +
  3624. " k2.username as auditname" +
  3625. " from FriendApply t" +
  3626. " left join useraccount u" +
  3627. " on t.frienduserid = u.userid" +
  3628. " left join tmp k1" +
  3629. " on t.applicantid = k1.usid" +
  3630. " and t.applysrc = k1.src" +
  3631. " left join tmp k2" +
  3632. " on t.auditorid = k2.usid" +
  3633. " and t.auditsrc = k2.src" +
  3634. " where 1=1"
  3635. sqlId.And("t.userid", r.USERID)
  3636. return sqlId.String()
  3637. }
  3638. // GetDataEx 获取好友申请
  3639. func (r *WrFriendApply) GetDataEx() (interface{}, error) {
  3640. sData := make([]WrFriendApply, 0)
  3641. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  3642. for i := range sData {
  3643. sData[i].calc()
  3644. }
  3645. return sData, err
  3646. }
  3647. // WrPerformanceTemplate 履约模板
  3648. type WrPerformanceTemplate struct {
  3649. AUTOID int64 `json:"autoid" xorm:"AUTOID" form:"autoid"` // AutoID 模板id
  3650. USERID int64 `json:"userid" xorm:"USERID" form:"userid"` // 所属用户
  3651. TEMPLATENAME string `json:"templatename" xorm:"TEMPLATENAME"` // 模板名称
  3652. PAYMENTTYPE int32 `json:"paymenttype" xorm:"PAYMENTTYPE"` // 支付方式 - 1:冻结 2:扣款
  3653. CREATETIME string `json:"createtime" xorm:"CREATETIME"` // 创建时间
  3654. CREATORID int64 `json:"creatorid" xorm:"CREATORID" form:"creatorid"` // 创建人
  3655. TEMPLATETYPE int32 `json:"templatetype" xorm:"TEMPLATETYPE"` // 模板类型 - 0:通用 1:交割 2:仓单贸易 3:预售集采 7:竞拍-竞价式 8:竞拍-大宗式 9:荷兰式--失效枚举:4:竞拍-降价式 (无仓单) 5:挂牌期权 6:竞拍-降价式
  3656. TAKEMODE int32 `json:"takemode" xorm:"TAKEMODE"` // 提货方式 - 1:无 2:买方自提 3:卖方发货
  3657. FTTMPTYPE string `json:"-" form:"tmptype"` // 模板类型筛选
  3658. INCLUDEPUB int32 `json:"-" form:"includepub"` // 是否包含公共模板
  3659. MARKETID int32 `json:"-" form:"marketid"` // 市场ID-从市场配置表中指定的模板id查
  3660. }
  3661. func (r *WrPerformanceTemplate) calc() {
  3662. }
  3663. func (r *WrPerformanceTemplate) buildSql() string {
  3664. var sqlId utils.SQLVal = "SELECT t.USERID," +
  3665. " t.AUTOID," +
  3666. " t.TEMPLATENAME," +
  3667. " t.PAYMENTTYPE," +
  3668. " to_char(t.CREATETIME, 'yyyy-mm-dd hh24:mi:ss') CREATETIME," +
  3669. " t.CREATORID," +
  3670. " t.TEMPLATETYPE," +
  3671. " t.TAKEMODE" +
  3672. " FROM PERFORMANCEPLANTEMPLATE t" +
  3673. " WHERE 1 = 1"
  3674. if r.USERID > 0 {
  3675. if r.INCLUDEPUB == 1 {
  3676. // t.userid is null 意思是查公共模板
  3677. sqlId.JoinFormat(" and (t.userid is null or t.userid = %v)", r.USERID)
  3678. } else {
  3679. sqlId.And("t.userid", r.USERID)
  3680. }
  3681. }
  3682. sqlId.AndEx("t.autoid", r.AUTOID, r.AUTOID > 0)
  3683. if r.FTTMPTYPE != "" {
  3684. sqlId.JoinFormat(" and t.TEMPLATETYPE in(%v)", r.FTTMPTYPE)
  3685. }
  3686. if r.MARKETID > 0 {
  3687. // 指定了市场, 从市场交易配置表中取履约模板id
  3688. m := WrMarketTradeConfig{MARKETID: r.MARKETID}
  3689. if d, err := m.GetDataEx(); err == nil {
  3690. if v, ok := d.([]WrMarketTradeConfig); ok {
  3691. a := v[0]
  3692. var inStr string
  3693. // 有仓单用 PERFORMANCETEMPIDS, 无仓单用PERFORMANCETEMPID2S,
  3694. // 这2个只会有一个有值, 所以只需取其中一个有值的即可
  3695. if len(a.PERFORMANCETEMPIDS) > 0 {
  3696. inStr = a.PERFORMANCETEMPIDS
  3697. } else if len(a.PERFORMANCETEMPID2S) > 0 {
  3698. inStr = a.PERFORMANCETEMPID2S
  3699. }
  3700. if len(v) > 0 {
  3701. sqlId.JoinFormat(" and t.autoid in(%v)", inStr)
  3702. }
  3703. }
  3704. }
  3705. }
  3706. sqlId.Join(" order by t.AUTOID")
  3707. return sqlId.String()
  3708. }
  3709. // GetDataEx 获取履约模板
  3710. func (r *WrPerformanceTemplate) GetDataEx() (interface{}, error) {
  3711. sData := make([]WrPerformanceTemplate, 0)
  3712. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  3713. for i := range sData {
  3714. sData[i].calc()
  3715. }
  3716. return sData, err
  3717. }
  3718. // WrPerformanceTemplateEx 履约模板(含步骤信息)
  3719. type WrPerformanceTemplateEx struct {
  3720. WrPerformanceTemplate `form:"extends"`
  3721. LstStep []WrGoodsPerformanceStep // 步骤信息列表
  3722. }
  3723. func (r *WrPerformanceTemplateEx) addStep(lst []WrGoodsPerformanceStep) {
  3724. for i := range lst {
  3725. if lst[i].TEMPLATEID == r.AUTOID {
  3726. r.LstStep = append(r.LstStep, lst[i])
  3727. }
  3728. }
  3729. }
  3730. func (r *WrPerformanceTemplateEx) GetDataEx() (interface{}, error) {
  3731. sData := make([]WrPerformanceTemplateEx, 0)
  3732. if d, err := r.WrPerformanceTemplate.GetDataEx(); err == nil {
  3733. if sTmplate, ok := d.([]WrPerformanceTemplate); ok {
  3734. if len(sTmplate) > 0 {
  3735. // 查履约步骤
  3736. ms := WrGoodsPerformanceStep{}
  3737. if d2, err := ms.GetData(); err == nil {
  3738. for i := range sTmplate {
  3739. val := WrPerformanceTemplateEx{}
  3740. val.WrPerformanceTemplate = sTmplate[i]
  3741. val.LstStep = make([]WrGoodsPerformanceStep, 0)
  3742. val.addStep(d2)
  3743. sData = append(sData, val)
  3744. }
  3745. }
  3746. }
  3747. }
  3748. }
  3749. return sData, nil
  3750. }
  3751. // WRTradeBargainApply 议价单
  3752. type WRTradeBargainApply struct {
  3753. WRBARGAINID string `json:"wrbargainid" xorm:"WRBARGAINID" form:"wrbargainid"` // 议价申请单ID(327+Unix秒时间戳(10位)+xxxxxx)
  3754. WRTRADEORDERID string `json:"wrtradeorderid" xorm:"WRTRADEORDERID" form:"wrtradeorderid"` // 关联委托单ID
  3755. TRADEDATE string `json:"tradedate" xorm:"TRADEDATE" form:"tradedate"` // 交易日(yyyyMMdd)
  3756. MARKETID int64 `json:"marketid" xorm:"MARKETID" form:"marketid"` // 市场ID
  3757. USERID int64 `json:"userid" xorm:"USERID" form:"userid"` // 摘牌人用户ID(议价人ID)
  3758. ACCOUNTID int64 `json:"accountid" xorm:"ACCOUNTID" form:"accountid"` // 摘牌资金账号
  3759. BUYORSELL int32 `json:"buyorsell" xorm:"BUYORSELL"` // 买卖(挂牌类型) - 0:买 1:卖
  3760. APPLYQTY float64 `json:"applyqty" xorm:"APPLYQTY"` // 摘牌数量(议价数量)
  3761. APPLYPRICE string `json:"applyprice" xorm:"APPLYPRICE"` // 申请价格(议价价格)
  3762. APPLYSTATUS int32 `json:"applystatus" xorm:"APPLYSTATUS"` // 申请状态(议价状态) - 1:待确认 2:已确认 3:已拒绝 4:已撤销 5:系统撤销 6:处理失败 7:确认中
  3763. HANDLESTATUS int32 `json:"handlestatus" xorm:"HANDLESTATUS"` // 处理状态
  3764. APPLYTIME string `json:"applytime" xorm:"APPLYTIME"` // 申请时间(议价时间)
  3765. APPLYREMARK string `json:"applyremark" xorm:"APPLYREMARK"` // 申请备注
  3766. CONFIRMUSERID int64 `json:"confirmuserid" xorm:"CONFIRMUSERID" form:"confirmuserid"` // 确认人
  3767. CONFIRMTIME string `json:"confirmtime" xorm:"CONFIRMTIME"` // 确认时间
  3768. CONFIRMREMARK string `json:"confirmremark" xorm:"CONFIRMREMARK"` // 确认备注
  3769. REFPRICE string `json:"refprice" xorm:"REFPRICE"` // 参考价格
  3770. RETCODE int32 `json:"retcode" xorm:"RETCODE"` // 委托返回代码
  3771. USERNAME string `json:"username" xorm:"'USERNAME'"` // 议价人名字(已脱敏)
  3772. MATCHUSERID int64 `json:"matchuserid" xorm:"'MATCHUSERID'" form:"matchuserid"` // 挂牌方用户id
  3773. MATCHACCOUNTID int64 `json:"matchaccountid" xorm:"'MATCHACCOUNTID'"` // 挂牌方资金账号
  3774. MATCHUSERNAME string `json:"matchusername" xorm:"'MATCHUSERNAME'"` // 挂牌方用户名称(已脱敏)
  3775. ORDERQTY int64 `json:"orderqty" xorm:"'ORDERQTY'"` // 挂牌数量
  3776. FIXEDPRICE SFLOAT64 `json:"fixedprice" xorm:"'FIXEDPRICE'"` // 挂牌价格
  3777. DELIVERYMONTH string `json:"deliverymonth" xorm:"'DELIVERYMONTH'"` // 交收月
  3778. MARGINVALUE SFLOAT64 `json:"marginvalue" xorm:"'MARGINVALUE'"` // 履约保证金比例
  3779. VALIDTIME string `json:"validtime" xorm:"'VALIDTIME'"` // 有效期限
  3780. TEMPLATENAME string `json:"templatename" xorm:"'TEMPLATENAME'"` // 履约方式(履约模板名称)
  3781. Wr2FactorType `xorm:"extends"`
  3782. HASWR int32 `json:"-" form:"haswr"` // 0-仓单预售 1-仓单贸易
  3783. BEGINDATE string `json:"begindate" form:"begindate"` // 开始交易日(yyyymmdd)
  3784. ENDDATE string `json:"enddate" form:"enddate"` // 结束交易日(yyyymmdd)
  3785. }
  3786. func (r *WRTradeBargainApply) calc() {
  3787. r.USERNAME = EncryptByStar(r.USERNAME)
  3788. r.MATCHUSERNAME = EncryptByStar(r.MATCHUSERNAME)
  3789. }
  3790. func (r *WRTradeBargainApply) buildSql() string {
  3791. var sqlId utils.SQLVal = `
  3792. with tmp as
  3793. (select to_char(t.wrfactortypeid) wrfactortypeid,
  3794. t.wrfactortypename2 wrfactortypename,
  3795. t.wrstandardid,
  3796. t.deliverygoodsid,
  3797. g.deliverygoodscode,
  3798. g.deliverygoodsname,
  3799. w.wrstandardcode,
  3800. w.wrstandardname,
  3801. h.warehousecode,
  3802. h.warehousename,
  3803. e.enumdicname,
  3804. w.wrstandardname || t.wrfactortypename2 as wrtypename
  3805. from wrfactortype t
  3806. left join deliverygoods g
  3807. on t.deliverygoodsid = g.deliverygoodsid
  3808. left join wrstandard w
  3809. on t.wrstandardid = w.wrstandardid
  3810. left join warehouseinfo h
  3811. on t.warehouseid = h.autoid
  3812. left join enumdicitem e
  3813. on w.unitid = e.enumitemname
  3814. and e.enumdiccode = 'goodsunit')
  3815. SELECT to_char(t.WRBARGAINID) WRBARGAINID,
  3816. to_char(t.WRTRADEORDERID) WRTRADEORDERID,
  3817. t.TRADEDATE,
  3818. t.MARKETID,
  3819. t.USERID,
  3820. t.ACCOUNTID,
  3821. t.BUYORSELL,
  3822. t.APPLYQTY,
  3823. t.APPLYPRICE,
  3824. t.APPLYSTATUS,
  3825. t.HANDLESTATUS,
  3826. to_char(t.APPLYTIME, 'yyyy-mm-dd hh24:mi:ss') APPLYTIME,
  3827. t.APPLYREMARK,
  3828. t.CONFIRMUSERID,
  3829. to_char(t.CONFIRMTIME, 'yyyy-mm-dd hh24:mi:ss') CONFIRMTIME,
  3830. t.CONFIRMREMARK,
  3831. t.REFPRICE,
  3832. t.RETCODE,
  3833. t.matchuserid,
  3834. t.matchaccountid,
  3835. u.accountname USERNAME,
  3836. u2.accountname matchusername,
  3837. o.orderqty,
  3838. o.fixedprice,
  3839. o.deliverymonth,
  3840. o.marginvalue,
  3841. to_char(o.validtime, 'yyyy-mm-dd hh24:mi:ss') validtime,
  3842. p.templatename,
  3843. tmp.*
  3844. FROM WRTRADE_BARGAINAPPLY t
  3845. LEFT JOIN USERACCOUNT u on t.userid=u.userid
  3846. LEFT JOIN USERACCOUNT u2 on t.matchuserid=u2.userid
  3847. LEFT JOIN WRTRADE_ORDERDETAIL o on t.wrtradeorderid=o.wrtradeorderid
  3848. LEFT JOIN tmp on o.wrfactortypeid=tmp.wrfactortypeid
  3849. LEFT JOIN PERFORMANCEPLANTEMPLATE p on o.performancetemplateid=p.autoid
  3850. WHERE 1 = 1
  3851. `
  3852. if r.USERID > 0 {
  3853. if r.WRTRADEORDERID != "" {
  3854. sqlId.And("t.userid", r.USERID)
  3855. sqlId.AndInterEx("t.wrtradeorderid", r.WRTRADEORDERID, true)
  3856. } else {
  3857. sqlId.And("t.userid", r.USERID)
  3858. sqlId.Join(" and t.APPLYTIME = (select max(APPLYTIME) from WRTRADE_BARGAINAPPLY where wrtradeorderid=t.wrtradeorderid)")
  3859. }
  3860. } else {
  3861. sqlId.AndEx("t.WRTRADEORDERID", r.WRTRADEORDERID, r.WRTRADEORDERID != "")
  3862. }
  3863. sqlId.AndEx("t.matchuserid", r.MATCHUSERID, r.MATCHUSERID > 0)
  3864. sqlId.And("o.haswr", r.HASWR)
  3865. return sqlId.String()
  3866. }
  3867. // buildSqlHis 查历史
  3868. func (r *WRTradeBargainApply) buildSqlHis() string {
  3869. var sqlId utils.SQLVal = `
  3870. with tmp as
  3871. (select to_char(t.wrfactortypeid) wrfactortypeid,
  3872. t.wrfactortypename2 wrfactortypename,
  3873. t.wrstandardid,
  3874. t.deliverygoodsid,
  3875. g.deliverygoodscode,
  3876. g.deliverygoodsname,
  3877. w.wrstandardcode,
  3878. w.wrstandardname,
  3879. h.warehousecode,
  3880. h.warehousename,
  3881. e.enumdicname,
  3882. w.wrstandardname || t.wrfactortypename2 as wrtypename
  3883. from wrfactortype t
  3884. left join deliverygoods g
  3885. on t.deliverygoodsid = g.deliverygoodsid
  3886. left join wrstandard w
  3887. on t.wrstandardid = w.wrstandardid
  3888. left join warehouseinfo h
  3889. on t.warehouseid = h.autoid
  3890. left join enumdicitem e
  3891. on w.unitid = e.enumitemname
  3892. and e.enumdiccode = 'goodsunit')
  3893. SELECT to_char(t.WRBARGAINID) WRBARGAINID,
  3894. to_char(t.WRTRADEORDERID) WRTRADEORDERID,
  3895. t.TRADEDATE,
  3896. t.MARKETID,
  3897. t.USERID,
  3898. t.ACCOUNTID,
  3899. t.BUYORSELL,
  3900. t.APPLYQTY,
  3901. t.APPLYPRICE,
  3902. t.APPLYSTATUS,
  3903. t.HANDLESTATUS,
  3904. to_char(t.APPLYTIME, 'yyyy-mm-dd hh24:mi:ss') APPLYTIME,
  3905. t.APPLYREMARK,
  3906. t.CONFIRMUSERID,
  3907. to_char(t.CONFIRMTIME, 'yyyy-mm-dd hh24:mi:ss') CONFIRMTIME,
  3908. t.CONFIRMREMARK,
  3909. t.REFPRICE,
  3910. t.RETCODE,
  3911. t.matchuserid,
  3912. t.matchaccountid,
  3913. u.accountname USERNAME,
  3914. u2.accountname matchusername,
  3915. o.orderqty,
  3916. o.fixedprice,
  3917. o.deliverymonth,
  3918. o.marginvalue,
  3919. to_char(o.validtime, 'yyyy-mm-dd hh24:mi:ss') validtime,
  3920. p.templatename,
  3921. tmp.*
  3922. FROM HIS_WRTRADE_BARGAINAPPLY t
  3923. LEFT JOIN USERACCOUNT u on t.userid=u.userid
  3924. LEFT JOIN USERACCOUNT u2 on t.matchuserid=u2.userid
  3925. LEFT JOIN HIS_WRTRADE_ORDERDETAIL o on t.wrtradeorderid=o.wrtradeorderid
  3926. LEFT JOIN tmp on o.wrfactortypeid=tmp.wrfactortypeid
  3927. LEFT JOIN PERFORMANCEPLANTEMPLATE p on o.performancetemplateid=p.autoid
  3928. WHERE 1 = 1 and t.isvaliddata = 1
  3929. `
  3930. sqlId.AndEx("t.userid", r.USERID, r.USERID > 0)
  3931. sqlId.AndEx("t.matchuserid", r.MATCHUSERID, r.MATCHUSERID > 0)
  3932. sqlId.AndEx("t.WRTRADEORDERID", r.WRTRADEORDERID, r.WRTRADEORDERID != "")
  3933. sqlId.And("o.haswr", r.HASWR)
  3934. // 格式 yyyymmdd
  3935. if len(r.BEGINDATE) > 0 {
  3936. sqlId.JoinFormat(" and t.TRADEDATE >= '%v'", r.BEGINDATE)
  3937. }
  3938. if len(r.ENDDATE) > 0 {
  3939. sqlId.JoinFormat(" and t.TRADEDATE <= '%v'", r.ENDDATE)
  3940. }
  3941. return sqlId.String()
  3942. }
  3943. // GetDataEx 获取议价单
  3944. func (r *WRTradeBargainApply) GetDataEx() (interface{}, error) {
  3945. var sqlId string
  3946. // 如果指定了开始日期或结束日期, 刚查历史
  3947. if r.BEGINDATE != "" || r.ENDDATE != "" {
  3948. sqlId = r.buildSqlHis()
  3949. } else {
  3950. sqlId = r.buildSql()
  3951. }
  3952. sData := make([]WRTradeBargainApply, 0)
  3953. err := db.GetEngine().SQL(sqlId).Find(&sData)
  3954. for i := range sData {
  3955. sData[i].calc()
  3956. }
  3957. return sData, err
  3958. }
  3959. // WrPerformanceStepType 履约步骤枚举
  3960. type WrPerformanceStepType struct {
  3961. STEPTYPEID int32 `json:"steptypeid" xorm:"STEPTYPEID" form:"steptypeid"` // 步骤类型ID - 1:买方支付 2:卖方收款 3:买方自提 4:卖方发货 5:买方确认货 6:卖方发票 7:买方确认票 8:仓单转移
  3962. STEPTYPENAME string `json:"steptypename" xorm:"STEPTYPENAME"` // 步骤类型名称
  3963. CANAUTO int32 `json:"canauto" xorm:"CANAUTO"` // 能否自动确认 - 0:不可自动确认 1:可自动确认 (可设置自动确认步骤: 1:买方支付 3:买方自提 5:买方确认货 7:买方确认票)
  3964. }
  3965. func (r *WrPerformanceStepType) calc() {
  3966. }
  3967. func (r *WrPerformanceStepType) buildSql() string {
  3968. // id 90以上的不可选
  3969. var sqlId utils.SQLVal = `
  3970. select t.* from PERFORMANCESTEPTYPE t where t.STEPTYPEID < 90 order by t.STEPTYPEID
  3971. `
  3972. return sqlId.String()
  3973. }
  3974. // GetDataEx 获取履约步骤枚举
  3975. func (r *WrPerformanceStepType) GetDataEx() (interface{}, error) {
  3976. sData := make([]WrPerformanceStepType, 0)
  3977. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  3978. for i := range sData {
  3979. sData[i].calc()
  3980. }
  3981. return sData, err
  3982. }
  3983. // WrUserReceiptInfo 发票信息
  3984. type WrUserReceiptInfo struct {
  3985. AUTOID int64 `json:"autoid" xorm:"AUTOID" form:"autoid"` // AutoID
  3986. USERID int64 `json:"userid" xorm:"USERID" form:"userid"` // 用户ID
  3987. RECEIPTTYPE int32 `json:"receipttype" xorm:"RECEIPTTYPE" form:"receipttype"` // 发票类型 - 1:个人 2:企业
  3988. USERNAME string `json:"username" xorm:"USERNAME"` // 户名(个人姓名或企业名称)
  3989. TAXPAYERID string `json:"taxpayerid" xorm:"TAXPAYERID" form:"taxpayerid"` // 纳税人识别号
  3990. CONTACTINFO string `json:"contactinfo" xorm:"CONTACTINFO"` // 联系方式
  3991. RECEIPTBANK string `json:"receiptbank" xorm:"RECEIPTBANK"` // 发票开户行[发票类型:企业]
  3992. RECEIPTACCOUNT string `json:"receiptaccount" xorm:"RECEIPTACCOUNT"` // 发票帐号[发票类型:企业]
  3993. ADDRESS string `json:"address" xorm:"ADDRESS"` // 地址[发票类型:企业]
  3994. IDNUM string `json:"idnum" xorm:"IDNUM"` // 身份证号码[发票类型:个人]
  3995. ISDEFAULT int32 `json:"isdefault" xorm:"'ISDEFAULT'"` // 是否默认地址 - 0:否 1:是
  3996. EMAIL string `json:"email" xorm:"EMAIL"` // 收件邮箱
  3997. }
  3998. func (r *WrUserReceiptInfo) calc() {
  3999. }
  4000. func (r *WrUserReceiptInfo) buildSql() string {
  4001. var sqlId utils.SQLVal = `
  4002. SELECT t.AUTOID,
  4003. t.USERID,
  4004. t.RECEIPTTYPE,
  4005. t.USERNAME,
  4006. t.TAXPAYERID,
  4007. t.CONTACTINFO,
  4008. t.RECEIPTBANK,
  4009. t.RECEIPTACCOUNT,
  4010. t.ADDRESS,
  4011. t.IDNUM,
  4012. t.EMAIL
  4013. FROM USERRECEIPTINFO t
  4014. WHERE 1 = 1
  4015. `
  4016. sqlId.AndEx("t.USERID", r.USERID, r.USERID > 0)
  4017. sqlId.AndEx("t.USERID", r.RECEIPTTYPE, r.RECEIPTTYPE > 0)
  4018. return sqlId.String()
  4019. }
  4020. // GetDataEx 获取发票信息
  4021. func (r *WrUserReceiptInfo) GetDataEx() (interface{}, error) {
  4022. sData := make([]WrUserReceiptInfo, 0)
  4023. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  4024. for i := range sData {
  4025. sData[i].calc()
  4026. }
  4027. return sData, err
  4028. }
  4029. // WrSiteColumnDetail 资讯
  4030. type WrSiteColumnDetail struct {
  4031. ID int64 `json:"id" xorm:"ID" form:"id"` // ID(SEQ_SITE_COLUMNDETAIL)
  4032. COLUMNID int64 `json:"-" xorm:"COLUMNID" form:"columnid"` // 所属栏目
  4033. USERID int64 `json:"-" xorm:"USERID" form:"userid"` // 用户ID(默认为0, 核心为为机构用户ID)
  4034. TITLE string `json:"title" xorm:"TITLE"` // 标题
  4035. COVERIMAGE string `json:"coverimage" xorm:"COVERIMAGE"` // 封面图片
  4036. AUTHOR string `json:"author" xorm:"AUTHOR"` // 作者
  4037. BRIEF string `json:"brief" xorm:"BRIEF"` // 简介
  4038. CONTEXT string `json:"context" xorm:"CONTEXT"` // 内容
  4039. STATUS int32 `json:"-" xorm:"STATUS"` // 状态 - 1:暂存 10:待审核 20:审核通过 30:审核拒绝
  4040. ISTOP int32 `json:"istop" xorm:"ISTOP"` // 是否置顶 - 0:不置 1:置顶
  4041. HITS int64 `json:"-" xorm:"HITS"` // 点击数
  4042. PUBLISHDATE string `json:"publishdate" xorm:"PUBLISHDATE" form:"publishdate"` // 发布日期
  4043. CREAEDATE string `json:"creaedate" xorm:"CREAEDATE" form:"creaedate"` // 创建时间
  4044. CREATORID int64 `json:"-" xorm:"CREATORID" form:"creatorid"` // 创建人
  4045. UPDATEDATE string `json:"updatedate" xorm:"UPDATEDATE" form:"updatedate"` // 修改时间
  4046. MODIFIERID int64 `json:"-" xorm:"MODIFIERID" form:"modifierid"` // 操作人
  4047. ISSHOW int32 `json:"-" xorm:"ISSHOW"` // 是否展示 - 0:不展示 1:展示
  4048. PageEx `xorm:"extends"` // 页码信息
  4049. }
  4050. func (r *WrSiteColumnDetail) calc() {
  4051. }
  4052. func (r *WrSiteColumnDetail) buildSql() string {
  4053. var sqlId utils.SQLVal = `
  4054. SELECT t.ID,
  4055. t.COLUMNID,
  4056. t.USERID,
  4057. t.TITLE,
  4058. t.COVERIMAGE,
  4059. t.AUTHOR,
  4060. t.BRIEF,
  4061. t.CONTEXT,
  4062. t.STATUS,
  4063. t.ISTOP,
  4064. t.HITS,
  4065. to_char(t.PUBLISHDATE, 'yyyy-mm-dd hh24:mi:ss') PUBLISHDATE,
  4066. to_char(t.CREAEDATE, 'yyyy-mm-dd hh24:mi:ss') CREAEDATE,
  4067. t.CREATORID,
  4068. to_char(t.UPDATEDATE, 'yyyy-mm-dd hh24:mi:ss') UPDATEDATE,
  4069. t.MODIFIERID,
  4070. t.ISSHOW
  4071. FROM SITE_COLUMNDETAIL t
  4072. WHERE 1 = 1 and t.isshow = 1 and t.status = 20 and %v
  4073. order by t.istop desc, t.updatedate desc
  4074. `
  4075. // sqlId.AndEx("t.COLUMNID", r.COLUMNID, r.COLUMNID > 0)
  4076. param := "1=1"
  4077. if r.COLUMNID > 0 {
  4078. param = fmt.Sprintf("t.COLUMNID = %v", r.COLUMNID)
  4079. }
  4080. sqlId.FormatParam(param)
  4081. sqlId.Page(r.Page, r.PageSize)
  4082. return sqlId.String()
  4083. }
  4084. // GetDataByPage 获取资讯
  4085. func (r *WrSiteColumnDetail) GetDataByPage() (interface{}, error, int, int, int) {
  4086. sData := make([]WrSiteColumnDetail, 0)
  4087. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  4088. for i := range sData {
  4089. sData[i].calc()
  4090. }
  4091. if len(sData) > 0 {
  4092. r.Total = sData[0].Total
  4093. }
  4094. return sData, err, r.Page, r.PageSize, r.Total
  4095. }
  4096. // Sitecolumnconfig 栏目配置表 - 前999预留,序列从1000开始
  4097. type Sitecolumnconfig struct {
  4098. ID int64 `json:"id" xorm:"ID"` // ID(SEQ_SITE_COLUMNCONFIG)
  4099. COLUMNTYPE int32 `json:"columntype" xorm:"COLUMNTYPE" form:"columntype"` // 栏目类型 - 1:行情资讯 10:会员服务 30:关于我们 100:核心企业栏目-百色
  4100. COLUMNNAME string `json:"columnname" xorm:"COLUMNNAME"` // 栏目名称
  4101. SORT int64 `json:"sort" xorm:"SORT"` // 排序
  4102. ISSHOW int32 `json:"isshow" xorm:"ISSHOW"` // 是否展示 - 0:不展示 1:展示
  4103. CREAEDATE time.Time `json:"creaedate" xorm:"CREAEDATE"` // 创建时间
  4104. CREATORID int64 `json:"creatorid" xorm:"CREATORID"` // 创建人
  4105. UPDATEDATE time.Time `json:"updatedate" xorm:"UPDATEDATE"` // 修改时间
  4106. MODIFIERID int64 `json:"modifierid" xorm:"MODIFIERID"` // 操作人
  4107. PageEx `xorm:"extends"` // 页码信息
  4108. }
  4109. func (r *Sitecolumnconfig) calc() {
  4110. }
  4111. func (r *Sitecolumnconfig) buildSql() string {
  4112. var sqlId utils.SQLVal = `
  4113. select
  4114. t.ID ,
  4115. t.COLUMNTYPE,
  4116. t.COLUMNNAME,
  4117. t.SORT ,
  4118. t.ISSHOW ,
  4119. t.CREAEDATE ,
  4120. t.CREATORID ,
  4121. t.UPDATEDATE,
  4122. t.MODIFIERID
  4123. from SITE_COLUMNCONFIG t
  4124. where t.ISSHOW = 1 and %v
  4125. order by t.SORT
  4126. `
  4127. param := "1=1"
  4128. if r.COLUMNTYPE > 0 {
  4129. param = fmt.Sprintf("t.COLUMNTYPE = %v", r.COLUMNTYPE)
  4130. }
  4131. sqlId.FormatParam(param)
  4132. sqlId.Page(r.Page, r.PageSize)
  4133. return sqlId.String()
  4134. }
  4135. func (r *Sitecolumnconfig) GetDataByPage() (interface{}, error, int, int, int) {
  4136. sData := make([]Sitecolumnconfig, 0)
  4137. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  4138. for i := range sData {
  4139. sData[i].calc()
  4140. }
  4141. if len(sData) > 0 {
  4142. r.Total = sData[0].Total
  4143. }
  4144. return sData, err, r.Page, r.PageSize, r.Total
  4145. }
  4146. // WrDeliveryGoodsSection 走势 (分类)
  4147. type WrDeliveryGoodsSection struct {
  4148. SECTIONID int64 `json:"sectionid" xorm:"SECTIONID" form:"sectionid"` // 版块ID (SEQ_DELIVERYGOODSSECTION) - 自增100开始, 前面ID预留给SectionType = 1的版块1 - 云融指数
  4149. SECTIONTYPE int32 `json:"sectiontype" xorm:"SECTIONTYPE"` // 版块类型 - 1:指数版块 2:普通版块
  4150. SECTIONNAME string `json:"sectionname" xorm:"SECTIONNAME"` // 版块名称
  4151. ORDERINDEX int32 `json:"orderindex" xorm:"ORDERINDEX"` // 排序
  4152. SHOWFLAG int32 `json:"-" xorm:"SHOWFLAG"` // 是否展示 - 0:不展示 1:展示
  4153. CREATORSRC int32 `json:"-" xorm:"CREATORSRC"` // 申请来源 - 1:管理端 2:终端 3:交易
  4154. CREATORID int64 `json:"-" xorm:"CREATORID" form:"creatorid"` // 创建人
  4155. CREATETIME string `json:"-" xorm:"CREATETIME"` // 创建时间
  4156. IMAGEPATH string `json:"imagepath" xorm:"IMAGEPATH"` // 图片地址
  4157. DGLst []WrDeliveryGoodsSectionConfig `json:"dglst"` // 板块商品列表
  4158. }
  4159. func (r *WrDeliveryGoodsSection) calc() {
  4160. r.DGLst = make([]WrDeliveryGoodsSectionConfig, 0)
  4161. }
  4162. func (r *WrDeliveryGoodsSection) buildSql() string {
  4163. var sqlId utils.SQLVal = `
  4164. select t.sectionid,
  4165. t.sectiontype,
  4166. t.sectionname,
  4167. t.orderindex,
  4168. t.showflag,
  4169. t.creatorsrc,
  4170. t.creatorid,
  4171. to_char(t.createtime,'yyyy-mm-dd hh24:mi:ss') createtime,
  4172. t.imagepath
  4173. from DeliveryGoodsSection t
  4174. where t.sectiontype = 2
  4175. and t.showflag = 1
  4176. order by t.orderindex
  4177. `
  4178. return sqlId.String()
  4179. }
  4180. // GetDataEx 获取板块(分类)
  4181. func (r *WrDeliveryGoodsSection) GetDataEx() (interface{}, error) {
  4182. sData := make([]WrDeliveryGoodsSection, 0)
  4183. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  4184. for i := range sData {
  4185. sData[i].calc()
  4186. }
  4187. // 获取商品
  4188. m := WrDeliveryGoodsSectionConfig{}
  4189. if d, err := m.GetDataEx(); err == nil {
  4190. lst := d.([]WrDeliveryGoodsSectionConfig)
  4191. for i := range sData {
  4192. for _, v := range lst {
  4193. if sData[i].SECTIONID == v.SECTIONID {
  4194. sData[i].DGLst = append(sData[i].DGLst, v)
  4195. }
  4196. }
  4197. }
  4198. }
  4199. return sData, err
  4200. }
  4201. // WrDeliveryGoodsSectionConfig 板块商品
  4202. type WrDeliveryGoodsSectionConfig struct {
  4203. SECTIONID int64 `json:"-" xorm:"'SECTIONID'"` // 版块ID (SEQ_DELIVERYGOODSSECTION)
  4204. DELIVERYGOODSID int64 `json:"deliverygoodsid" xorm:"'DELIVERYGOODSID'"` // 现货品种ID(SEQ_DELIVERYGOODS)
  4205. ORDERINDEX int32 `json:"orderindex" xorm:"'ORDERINDEX'"` // 排序
  4206. CREATORSRC int32 `json:"-" xorm:"'CREATORSRC'"` // 申请来源 - 1:管理端 2:终端 3:交易
  4207. CREATORID int32 `json:"-" xorm:"'CREATORID'"` // 创建人
  4208. CREATEDATE string `json:"-" xorm:"'CREATEDATE'"` // 创建时间
  4209. DELIVERYGOODSCODE string `json:"deliverygoodscode" xorm:"'DELIVERYGOODSCODE'"` // 现货商品代码
  4210. DELIVERYGOODSNAME string `json:"deliverygoodsname" xorm:"'DELIVERYGOODSNAME'"` // 现货商品名称
  4211. }
  4212. func (r *WrDeliveryGoodsSectionConfig) calc() {
  4213. }
  4214. func (r *WrDeliveryGoodsSectionConfig) buildSql() string {
  4215. var sqlId utils.SQLVal = `
  4216. select t.sectionid,
  4217. t.deliverygoodsid,
  4218. t.orderindex,
  4219. t.creatorsrc,
  4220. t.creatorid,
  4221. to_char(t.createdate, 'yyyy-mm-dd hh24:mi:ss') createdate,
  4222. g.deliverygoodscode,
  4223. g.deliverygoodsname
  4224. from DeliveryGoodsSectionConfig t
  4225. inner join deliverygoods g
  4226. on t.deliverygoodsid = g.deliverygoodsid
  4227. inner join Deliverygoodssection s
  4228. on t.sectionid = s.sectionid
  4229. where 1 = 1
  4230. and t.showflag = 1
  4231. and s.showflag = 1
  4232. and s.sectiontype = 2
  4233. order by t.sectionid, t.orderindex
  4234. `
  4235. return sqlId.String()
  4236. }
  4237. // GetDataEx 获取板块商品
  4238. func (r *WrDeliveryGoodsSectionConfig) GetDataEx() (interface{}, error) {
  4239. sData := make([]WrDeliveryGoodsSectionConfig, 0)
  4240. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  4241. for i := range sData {
  4242. sData[i].calc()
  4243. }
  4244. return sData, err
  4245. }
  4246. // WrSpotGroupTradeSum 指数
  4247. type WrSpotGroupTradeSum struct {
  4248. RECKONDATE string `json:"reckondate" xorm:"'RECKONDATE'"` // 上个交易日(前1天交易日)
  4249. LASTRECKONDATE string `json:"lastreckondate" xorm:"'LASTRECKONDATE'"` // 上上个交易日(前2天交易日)
  4250. MARKETID int64 `json:"-" xorm:"'MARKETID'" form:"marketid"` // 市场id
  4251. TRADEQTY float64 `json:"-" xorm:"'TRADEQTY'"` // 成交量
  4252. TRADEAMOUNT float64 `json:"-" xorm:"'TRADEAMOUNT'"` // 成交额
  4253. LASTAVGPRICE SFLOAT64 `json:"-" xorm:"'LASTAVGPRICE'"` // 上上个交易日价格(前2天价格)
  4254. TODAYAVGPRICE SFLOAT64 `json:"-" xorm:"'TODAYAVGPRICE'"` // 上个交易日价格(前1天价格)
  4255. DELIVERYGOODSID int64 `json:"deliverygoodsid" xorm:"'DELIVERYGOODSID'"` // 现货品种ID(SEQ_DELIVERYGOODS)
  4256. DELIVERYGOODSCODE string `json:"deliverygoodscode" xorm:"'DELIVERYGOODSCODE'"` // 现货品种代码
  4257. DELIVERYGOODSNAME string `json:"deliverygoodsname" xorm:"'DELIVERYGOODSNAME'"` // 现货品种名称
  4258. SECTIONID int64 `json:"-" xorm:"'SECTIONID'"` // 版块ID (SEQ_DELIVERYGOODSSECTION)
  4259. PRETRADEDATE string `json:"-" xorm:"'PRETRADEDATE'"` // 上个交易日(从marketid=0表中取的, 系统)
  4260. LASTAVGPRICE2 string `json:"lastavgprice"` // 上上个交易日价格(前2天价格)
  4261. TODAYAVGPRICE2 string `json:"todayavgprice"` // 上个交易日价格(前1天价格)
  4262. UPDOWN string `json:"updown"` // 涨跌
  4263. UPDOWNRATIO string `json:"updownratio"` // 涨幅(已格式化, 直接显示即可)
  4264. }
  4265. func (r *WrSpotGroupTradeSum) calc() {
  4266. if r.TODAYAVGPRICE < 1e-8 {
  4267. // 如果今日为0, 则取上日的作为今日价
  4268. r.TODAYAVGPRICE = r.LASTAVGPRICE
  4269. }
  4270. if r.LASTAVGPRICE < 1e-8 {
  4271. r.LASTAVGPRICE2 = "-"
  4272. } else {
  4273. r.LASTAVGPRICE2 = r.LASTAVGPRICE.string()
  4274. }
  4275. if r.TODAYAVGPRICE < 1e-8 {
  4276. r.TODAYAVGPRICE2 = "-"
  4277. } else {
  4278. r.TODAYAVGPRICE2 = r.TODAYAVGPRICE.string()
  4279. }
  4280. if r.TODAYAVGPRICE > 1e-8 && r.LASTAVGPRICE > 1e-8 {
  4281. r.LASTAVGPRICE2 = r.LASTAVGPRICE.string()
  4282. r.TODAYAVGPRICE2 = r.TODAYAVGPRICE.string()
  4283. // 涨跌
  4284. var diff SFLOAT64
  4285. diff = r.TODAYAVGPRICE - r.LASTAVGPRICE
  4286. r.UPDOWN = diff.Round(2).string()
  4287. // 涨幅
  4288. var k SFLOAT64
  4289. k = diff * 100 / r.TODAYAVGPRICE
  4290. k.Round(2)
  4291. if k.Float64() > 1e-8 {
  4292. r.UPDOWNRATIO = "+" + k.string() + `%`
  4293. } else {
  4294. r.UPDOWNRATIO = k.string() + `%`
  4295. }
  4296. } else {
  4297. r.UPDOWN = "-"
  4298. r.UPDOWNRATIO = "-"
  4299. }
  4300. }
  4301. func (r *WrSpotGroupTradeSum) buildSql() string {
  4302. var sqlId utils.SQLVal = `
  4303. with tmp as
  4304. (select k.reckondate,
  4305. k.marketid,
  4306. k.tradeqty,
  4307. k.tradeamount,
  4308. k.lastreckondate,
  4309. k.lastavgprice,
  4310. k.todayavgprice,
  4311. k.deliverygoodsid deliverygoodsid1
  4312. from reckon_spotgrouptradesum k
  4313. inner join marketrun m
  4314. on k.reckondate = m.pretradedate
  4315. and m.marketid = 0)
  4316. select tmp.*,
  4317. t.sectionid,
  4318. g.deliverygoodsid,
  4319. g.deliverygoodscode,
  4320. g.deliverygoodsname
  4321. from DeliveryGoodsSectionConfig t
  4322. left join tmp
  4323. on t.deliverygoodsid = tmp.deliverygoodsid1
  4324. left join deliverygoods g
  4325. on t.deliverygoodsid = g.deliverygoodsid
  4326. where t.sectionid = 1
  4327. and t.showflag = 1
  4328. order by t.orderindex
  4329. `
  4330. return sqlId.String()
  4331. }
  4332. // GetDataEx 获取指数
  4333. func (r *WrSpotGroupTradeSum) GetDataEx() (interface{}, error) {
  4334. sData := make([]WrSpotGroupTradeSum, 0)
  4335. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  4336. for i := range sData {
  4337. sData[i].calc()
  4338. }
  4339. return sData, err
  4340. }
  4341. // WrSpotGroupTradeSumEx 指数(层级)
  4342. type WrSpotGroupTradeSumEx struct {
  4343. RECKONDATE string `json:"reckondate" xorm:"'RECKONDATE'"` // 上个交易日(yyyymmdd)
  4344. PRERECKONDATE string `json:"prereckondate" xorm:"'PRERECKONDATE'"` // 上上个交易日(yyymmdd)
  4345. LST []WrSpotGroupTradeSum `json:"lst"` // 指数列表
  4346. }
  4347. func (r *WrSpotGroupTradeSumEx) calc() {
  4348. r.LST = make([]WrSpotGroupTradeSum, 0)
  4349. }
  4350. func (r *WrSpotGroupTradeSumEx) buildSql() string {
  4351. var sqlId utils.SQLVal = `
  4352. select t.pretradedate RECKONDATE,
  4353. (select max(k.lastreckondate)
  4354. from reckon_spotgrouptradesum k
  4355. where k.reckondate = t.pretradedate) PRERECKONDATE
  4356. from marketrun t
  4357. where t.marketid = 0
  4358. `
  4359. return sqlId.String()
  4360. }
  4361. // GetDataEx 获取指数(层级)
  4362. func (r *WrSpotGroupTradeSumEx) GetDataEx() (interface{}, error) {
  4363. sData := make([]WrSpotGroupTradeSumEx, 0)
  4364. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  4365. for i := range sData {
  4366. sData[i].calc()
  4367. }
  4368. if err == nil && len(sData) > 0 {
  4369. m := WrSpotGroupTradeSum{}
  4370. if d, err := m.GetDataEx(); err == nil {
  4371. sData[0].LST = d.([]WrSpotGroupTradeSum)
  4372. }
  4373. }
  4374. return sData, err
  4375. }
  4376. // WrSpotGroupTradeSumDetail 折线图价格走势
  4377. type WrSpotGroupTradeSumDetail struct {
  4378. RECKONDATE string `json:"reckondate" xorm:"'RECKONDATE'"` // 日期(yyymmdd, 如:20211031)
  4379. DELIVERYGOODSID int64 `json:"deliverygoodsid" xorm:"'DELIVERYGOODSID'" form:"deliverygoodsid"` // 现货商品id
  4380. PRICE float64 `json:"price" xorm:"'PRICE'"` // 价格
  4381. LASTNUM int32 `json:"-" form:"lastnum"` // 最新多少条
  4382. }
  4383. func (r *WrSpotGroupTradeSumDetail) calc() {
  4384. }
  4385. func (r *WrSpotGroupTradeSumDetail) buildSql() string {
  4386. var sqlId utils.SQLVal = `
  4387. select a.*
  4388. from (select t.reckondate, t.deliverygoodsid, t.todayavgprice price, rownum cnt
  4389. from reckon_spotgrouptradesum t
  4390. where 1 = 1 and t.todayavgprice > 0
  4391. and t.deliverygoodsid = %v
  4392. order by t.reckondate desc) a
  4393. where a.cnt <= %v
  4394. order by a.reckondate
  4395. `
  4396. if r.LASTNUM == 0 {
  4397. r.LASTNUM = 30 // 如果没传值, 默认查最近30条
  4398. }
  4399. sqlId.FormatParam(r.DELIVERYGOODSID, r.LASTNUM)
  4400. return sqlId.String()
  4401. }
  4402. // GetDataEx 获取折线图价格走势
  4403. func (r *WrSpotGroupTradeSumDetail) GetDataEx() (interface{}, error) {
  4404. sData := make([]WrSpotGroupTradeSumDetail, 0)
  4405. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  4406. for i := range sData {
  4407. sData[i].calc()
  4408. }
  4409. return sData, err
  4410. }
  4411. // WrPreSaleInfo 新品发布
  4412. type WrPreSaleInfo struct {
  4413. PRESALEAPPLYID int64 `json:"presaleapplyid,string" xorm:"PRESALEAPPLYID" form:"presaleapplyid"` // 预售申请ID(184+Unix秒时间戳(10位)+xxxxxx)
  4414. SELLUSERID int64 `json:"selluserid" xorm:"SELLUSERID" form:"selluserid"` // 发行方用户ID
  4415. SELLACCOUNTID int64 `json:"sellaccountid" xorm:"SELLACCOUNTID" form:"sellaccountid"` // 发行方资金账户ID
  4416. DELIVERYGOODSID int32 `json:"deliverygoodsid" xorm:"DELIVERYGOODSID" form:"deliverygoodsid"` // 现货品种ID
  4417. WAREHOUSEID int64 `json:"warehouseid" xorm:"WAREHOUSEID" form:"warehouseid"` // 仓库ID
  4418. WRSTANDARDID int64 `json:"wrstandardid" xorm:"WRSTANDARDID" form:"wrstandardid"` // 现货商品ID
  4419. WRFACTORTYPEID int64 `json:"wrfactortypeid,string" xorm:"WRFACTORTYPEID" form:"wrfactortypeid"` // 仓单要素类型ID - 根据现货商品\仓库生成
  4420. WRSTANDARDNAME string `json:"wrstandardname" xorm:"WRSTANDARDNAME"` // 现货商品名称
  4421. UNITID int32 `json:"unitid" xorm:"UNITID" form:"unitid"` // 单位ID
  4422. UNITPRICE float64 `json:"unitprice" xorm:"UNITPRICE"` // 商品单价
  4423. PRESALEQTY float64 `json:"presaleqty" xorm:"PRESALEQTY"` // 预售总量
  4424. BASEQTY float64 `json:"baseqty" xorm:"BASEQTY"` // 中签基数
  4425. MAXBUYQTY float64 `json:"maxbuyqty" xorm:"MAXBUYQTY"` // 单人最大申购量
  4426. MAXLUCKYQTY float64 `json:"maxluckyqty" xorm:"MAXLUCKYQTY"` // 单人最大中签量
  4427. STARTDATE string `json:"startdate" xorm:"STARTDATE" form:"startdate"` // 预售开始日期
  4428. ENDDATE string `json:"enddate" xorm:"ENDDATE" form:"enddate"` // 预售结束日期
  4429. TAKESTARTDATE string `json:"takestartdate" xorm:"TAKESTARTDATE" form:"takestartdate"` // 提货开始日期
  4430. THUMURLS string `json:"thumurls" xorm:"THUMURLS"` // 缩略图片(1:1)(逗号分隔)
  4431. PICTUREURLS string `json:"pictureurls" xorm:"PICTUREURLS"` // 详情图片(逗号分隔)
  4432. BANNERPICURL string `json:"bannerpicurl" xorm:"BANNERPICURL"` // Banner图
  4433. PRESALESTATUS int32 `json:"presalestatus" xorm:"PRESALESTATUS"` // 预售状态 - 1:未开始 2:进行中 3:已结束 4:已关闭
  4434. LOTTERYFLAG int32 `json:"lotteryflag" xorm:"LOTTERYFLAG" form:"lotteryflag"` // 摇号标识 - 0:未摇号 1:已摇号
  4435. LOTTERYQTY float64 `json:"lotteryqty" xorm:"LOTTERYQTY"` // 摇号总量
  4436. LUCKYQTY float64 `json:"luckyqty" xorm:"LUCKYQTY"` // 已中签量
  4437. PLACEQTY float64 `json:"placeqty" xorm:"PLACEQTY"` // 已配售量
  4438. MARKETID int32 `json:"marketid" xorm:"MARKETID" form:"marketid"` // 市场ID
  4439. SELLWRTRADEORDERID string `json:"sellwrtradeorderid" xorm:"SELLWRTRADEORDERID"` // 发行方卖委托单ID
  4440. CREATETIME string `json:"createtime" xorm:"CREATETIME"` // 创建时间
  4441. TRADEDATE string `json:"tradedate" xorm:"TRADEDATE" form:"tradedate"` // 交易日
  4442. WAREHOUSECODE string `json:"warehousecode" xorm:"'WAREHOUSECODE'"` // 仓库代码(仓库简称)
  4443. WAREHOUSENAME string `json:"warehousename" xorm:"'WAREHOUSENAME'"` // 仓库名称
  4444. USERNAME string `json:"username" xorm:"'USERNAME'"` // 发行方用户名称
  4445. ENUMDICNAME string `json:"enumdicname" xorm:"'ENUMDICNAME'"` // 单位名称
  4446. LastNum int `json:"-" form:"lastnum"` // 最近多少条记录
  4447. FilterStatus string `json:"-" form:"presalestatus"` // 预售状态(逗号隔开,如1,2,3) 1:未开始 2:进行中 3:已结束 4:已关闭
  4448. }
  4449. func (r *WrPreSaleInfo) calc() {
  4450. }
  4451. func (r *WrPreSaleInfo) buildSql() string {
  4452. var sqlId utils.SQLVal = `
  4453. SELECT to_char(t.PRESALEAPPLYID) PRESALEAPPLYID,
  4454. t.SELLUSERID,
  4455. t.SELLACCOUNTID,
  4456. t.DELIVERYGOODSID,
  4457. t.WAREHOUSEID,
  4458. t.WRSTANDARDID,
  4459. to_char(t.WRFACTORTYPEID) WRFACTORTYPEID,
  4460. t.WRSTANDARDNAME,
  4461. t.UNITID,
  4462. t.UNITPRICE,
  4463. t.PRESALEQTY,
  4464. t.BASEQTY,
  4465. t.MAXBUYQTY,
  4466. t.MAXLUCKYQTY,
  4467. to_char(t.STARTDATE, 'yyyy-mm-dd hh24:mi:ss') STARTDATE,
  4468. to_char(t.ENDDATE, 'yyyy-mm-dd hh24:mi:ss') ENDDATE,
  4469. to_char(t.TAKESTARTDATE, 'yyyy-mm-dd hh24:mi:ss') TAKESTARTDATE,
  4470. t.THUMURLS,
  4471. t.PICTUREURLS,
  4472. t.BANNERPICURL,
  4473. t.PRESALESTATUS,
  4474. t.LOTTERYFLAG,
  4475. t.LOTTERYQTY,
  4476. t.LUCKYQTY,
  4477. t.PLACEQTY,
  4478. t.MARKETID,
  4479. to_char(t.SELLWRTRADEORDERID) SELLWRTRADEORDERID,
  4480. to_char(t.CREATETIME, 'yyyy-mm-dd hh24:mi:ss') CREATETIME,
  4481. t.TRADEDATE,
  4482. h.warehousecode,
  4483. h.warehousename,
  4484. u.accountname username,
  4485. e.enumdicname
  4486. FROM WR_PRESALEINFO t
  4487. LEFT JOIN WAREHOUSEINFO h on t.warehouseid=h.autoid
  4488. LEFT JOIN USERACCOUNT u on t.selluserid=u.userid
  4489. LEFT JOIN ENUMDICITEM e on t.unitid=e.enumitemname and e.enumdiccode='goodsunit'
  4490. WHERE 1 = 1
  4491. `
  4492. sqlId.AndEx("t.MARKETID", r.MARKETID, r.MARKETID > 0)
  4493. sqlId.AndEx("t.LOTTERYFLAG", r.LOTTERYFLAG, r.LOTTERYFLAG >= 0)
  4494. sqlId.JoinEx(r.FilterStatus != "", fmt.Sprintf(" and t.PRESALESTATUS in(%s)", r.FilterStatus))
  4495. sqlId.Join(" order by t.createtime desc")
  4496. if r.LastNum > 0 {
  4497. sqlId.Page(1, r.LastNum)
  4498. }
  4499. return sqlId.String()
  4500. }
  4501. // GetDataEx 获取新品发布
  4502. func (r *WrPreSaleInfo) GetDataEx() (interface{}, error) {
  4503. sData := make([]WrPreSaleInfo, 0)
  4504. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  4505. for i := range sData {
  4506. sData[i].calc()
  4507. }
  4508. return sData, err
  4509. }
  4510. // WrReckonSpotGoodsTradeSum 价格走势
  4511. type WrReckonSpotGoodsTradeSum struct {
  4512. RECKONDATE string `json:"reckondate" xorm:"'RECKONDATE'"` // 日期 格式 yyyymmdd
  4513. MARKETID int `json:"marketid" xorm:"'MARKETID'" form:"marketid"` // 市场ID
  4514. WRSTANDARDID int `json:"wrstandardid" xorm:"'WRSTANDARDID'" form:"wrstandardid"` // 现货商品ID
  4515. TRADEQTY SFLOAT64 `json:"tradeqty" xorm:"'TRADEQTY'"` // 日成交数量(当日单方向成交数量)
  4516. TRADEAMOUNT SFLOAT64 `json:"tradeamount" xorm:"'TRADEAMOUNT'"` // 日成交金额(当日单方向成交金额)
  4517. PRICE string `json:"price"` // 价格 = 日成交金额 / 日成交数量
  4518. BEGINDATE string `json:"begindate" form:"begindate"` // 开始日期(结果含开始日期) yyyymmdd
  4519. ENDDATE string `json:"enddate" form:"enddate"` // 结束日期(结果含结束日期) yyyymmdd
  4520. LastNum int `json:"-" form:"lastnum"` // 最近多少条记录
  4521. ISTODAY bool `json:"istoday" form:"istoday"` // 是否当日
  4522. }
  4523. func (r *WrReckonSpotGoodsTradeSum) calc() {
  4524. if r.TRADEQTY > 1e-10 {
  4525. d := r.TRADEAMOUNT / r.TRADEQTY
  4526. r.PRICE = d.Round(2).string()
  4527. }
  4528. }
  4529. func (r *WrReckonSpotGoodsTradeSum) buildSql() string {
  4530. var sqlId utils.SQLVal = `
  4531. select t.reckondate,
  4532. t.marketid,
  4533. t.wrstandardid,
  4534. sum(t.tradeqty) tradeqty,
  4535. sum(t.tradeamount) tradeamount
  4536. from reckon_spotgoodstradesum t
  4537. where 1 = 1 %v
  4538. group by t.reckondate, t.marketid, t.wrstandardid
  4539. order by t.reckondate desc
  4540. `
  4541. var sqlParam utils.SQLVal
  4542. sqlParam.And("t.marketid", r.MARKETID)
  4543. sqlParam.And("t.wrstandardid", r.WRSTANDARDID)
  4544. // 格式 yyyymmdd
  4545. if len(r.BEGINDATE) > 0 {
  4546. sqlParam.JoinFormat(" and t.reckondate >= '%v'", r.BEGINDATE)
  4547. }
  4548. if len(r.ENDDATE) > 0 {
  4549. sqlParam.JoinFormat(" and t.reckondate <= '%v'", r.ENDDATE)
  4550. }
  4551. sqlId.FormatParam(sqlParam.String())
  4552. sqlId.Page(1, r.LastNum)
  4553. return sqlId.String()
  4554. }
  4555. // buildSqlByToday 今日走势数据
  4556. func (r *WrReckonSpotGoodsTradeSum) buildSqlByToday(today string) string {
  4557. var sqlId utils.SQLVal = utils.SQLVal(fmt.Sprintf(`
  4558. with tmp as
  4559. (select
  4560. to_char(t.TradeTime, 'HH24:MI:SS') RECKONDATE,
  4561. to_char(t.TradeTime, 'yyyymmdd') TRADEDATE,
  4562. t.marketid,
  4563. w.wrstandardid,
  4564. t.tradeqty,
  4565. t.tradeamount
  4566. from WRTrade_TradeDetail t
  4567. left join WRFactorType w on w.WRFactorTypeID = t.WRFactorTypeID
  4568. where t.marketid = %v and w.wrstandardid = %v
  4569. order by t.WRTradeDetailID desc)
  4570. select distinct
  4571. t.RECKONDATE,
  4572. t.marketid,
  4573. t.wrstandardid,
  4574. t.tradeqty,
  4575. t.tradeamount
  4576. from tmp t where t.TRADEDATE = '%v'
  4577. `, r.MARKETID, r.WRSTANDARDID, today))
  4578. sqlId.Page(1, r.LastNum)
  4579. return sqlId.String()
  4580. }
  4581. // GetDataEx 获取价格走势
  4582. func (r *WrReckonSpotGoodsTradeSum) GetDataEx() (interface{}, error) {
  4583. sql := r.buildSql()
  4584. // 判断是否获取今日走势
  4585. if r.MARKETID > 0 && r.ISTODAY {
  4586. if marketRun, err := GetMarketRun(r.MARKETID); err == nil {
  4587. sql = r.buildSqlByToday(marketRun.Tradedate)
  4588. } else {
  4589. return nil, errors.New("数据异常")
  4590. }
  4591. }
  4592. sData := make([]WrReckonSpotGoodsTradeSum, 0)
  4593. err := db.GetEngine().SQL(sql).Find(&sData)
  4594. for i := range sData {
  4595. sData[i].calc()
  4596. sData[i].BEGINDATE = r.BEGINDATE
  4597. sData[i].ENDDATE = r.ENDDATE
  4598. sData[i].ISTODAY = r.ISTODAY
  4599. }
  4600. return sData, err
  4601. }
  4602. // WrSearchUser 搜索用户
  4603. type WrSearchUser struct {
  4604. USERNAME string `json:"username" xorm:"'USERNAME'" form:"username" binding:"required"` // 用户名称(已脱敏)
  4605. USERID int64 `json:"userid" xorm:"'USERID'"` // 用户ID
  4606. USERNAME2 string `json:"username2" xorm:"'-'"` // 用户名称(未脱敏)
  4607. USERTYPE int `json:"usertype" xorm:"'USERTYPE'"` // 账户类型 - 1:交易所 2:机构 3:会员子机构 4:经纪人 5:投资者 6:客户 7:企业成员(云平台)
  4608. }
  4609. func (r *WrSearchUser) calc() {
  4610. r.USERNAME2 = r.USERNAME
  4611. r.USERNAME = EncryptByStar(r.USERNAME)
  4612. }
  4613. func (r *WrSearchUser) buildSql() string {
  4614. var sqlId utils.SQLVal = `
  4615. select t.userid, t.usertype, t.accountname username from useraccount t
  4616. where t.usertype in(2,6) and t.accountname like '%%%v%%'
  4617. `
  4618. sqlId.FormatParam(r.USERNAME)
  4619. return sqlId.String()
  4620. }
  4621. // GetDataEx 获取搜索用户
  4622. func (r *WrSearchUser) GetDataEx() (interface{}, error) {
  4623. sData := make([]WrSearchUser, 0)
  4624. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  4625. for i := range sData {
  4626. sData[i].calc()
  4627. }
  4628. return sData, err
  4629. }
  4630. // WrDraftUserInfo 实名认证信息
  4631. type WrDraftUserInfo struct {
  4632. USERID int64 `json:"userid" xorm:"USERID" form:"userid"` // 用户ID
  4633. USERINFOTYPE int32 `json:"userinfotype" xorm:"USERINFOTYPE"` // 用户信息类型 - 1:个人 2:企业
  4634. CUSTOMERNAME string `json:"customername" xorm:"CUSTOMERNAME"` // 客户名称(企业名称)
  4635. USERSTATUS int32 `json:"userstatus" xorm:"USERSTATUS" form:"userstatus"` // 用户状态 - 1:正常 2:注销
  4636. USERTYPE int32 `json:"usertype" xorm:"USERTYPE"` // 账户类型 - 1:交易所 2:机构 3:会员子机构 4:经纪人 5:投资者
  4637. OPENMODE int32 `json:"openmode" xorm:"OPENMODE"` // 开户方式 - 1:管理端开户 2 :网上开户注册(会员官网) 3:微信开户 4:网页交易端注册 5:安卓手机端注册 6:苹果手机端注册 7:PC交易端注册
  4638. CARDTYPEID int32 `json:"cardtypeid" xorm:"CARDTYPEID" form:"cardtypeid"` // 证件类型ID
  4639. CARDNUM string `json:"cardnum" xorm:"CARDNUM"` // 证件号码(加密存储)
  4640. HALFBODYPHOTOURL string `json:"halfbodyphotourl" xorm:"HALFBODYPHOTOURL"` // 半身照地址
  4641. CARDFRONTPHOTOURL string `json:"cardfrontphotourl" xorm:"CARDFRONTPHOTOURL"` // 证件正面图片地址
  4642. CARDBACKPHOTOURL string `json:"cardbackphotourl" xorm:"CARDBACKPHOTOURL"` // 证件背面图片地址
  4643. BIZNATURE int32 `json:"biznature" xorm:"BIZNATURE"` // 企业性质( 企业) - 1:国有控股企业 2:集体控股企业 3:私人控股企业 4:港澳台商控股企业 5:外商控股企业 6:其它
  4644. BIZSCOPE string `json:"bizscope" xorm:"BIZSCOPE"` // 企业经营范围(企业)
  4645. LEGALPERSONNAME string `json:"legalpersonname" xorm:"LEGALPERSONNAME"` // 法人姓名(企业)
  4646. CONTACTNAME string `json:"contactname" xorm:"CONTACTNAME"` // 联系人
  4647. SEX int32 `json:"sex" xorm:"SEX"` // 用户性别 0: 女 1: 男
  4648. TELPHONE string `json:"telphone" xorm:"TELPHONE"` // 联系电话(加密存储)
  4649. MOBILE string `json:"mobile" xorm:"MOBILE"` // 手机号码(加密存储)
  4650. FAX string `json:"fax" xorm:"FAX"` // 传真(加密存储)
  4651. EMAIL string `json:"email" xorm:"EMAIL"` // 邮件(加密存储)
  4652. QQ string `json:"qq" xorm:"QQ"` // QQ(加密存储
  4653. WECHAT string `json:"wechat" xorm:"WECHAT"` // 微信(加密存储)
  4654. COUNTRYID int32 `json:"countryid" xorm:"COUNTRYID" form:"countryid"` // 国家
  4655. PROVINCEID int32 `json:"provinceid" xorm:"PROVINCEID" form:"provinceid"` // 省
  4656. CITYID int32 `json:"cityid" xorm:"CITYID" form:"cityid"` // 市
  4657. DISTRICTID int32 `json:"districtid" xorm:"DISTRICTID" form:"districtid"` // 地区
  4658. COMPANY string `json:"company" xorm:"COMPANY"` // 公司(个人)
  4659. ADDRESS string `json:"address" xorm:"ADDRESS"` // 地址
  4660. POSTALCODE string `json:"postalcode" xorm:"POSTALCODE"` // 邮政编码
  4661. CREATETIME string `json:"createtime" xorm:"CREATETIME2"` // 创建时间
  4662. CREATORID int64 `json:"creatorid" xorm:"CREATORID" form:"creatorid"` // 创建人
  4663. MODIFIERTIME string `json:"modifiertime" xorm:"MODIFIERTIME2"` // 修改时间
  4664. MODIFIERID int64 `json:"modifierid" xorm:"MODIFIERID" form:"modifierid"` // 修改人
  4665. REMARK string `json:"remark" xorm:"REMARK"` // 备注
  4666. WSKHINFO string `json:"wskhinfo" xorm:"WSKHINFO"` // 开户申请信息(JSON)
  4667. SIGNPDFURL string `json:"signpdfurl" xorm:"SIGNPDFURL"` // 签约pdf文件
  4668. LEGALCARDFRONTPHOTOURL string `json:"legalcardfrontphotourl" xorm:"LEGALCARDFRONTPHOTOURL"` // 法人身份证正面照地址
  4669. LEGALCARDBACKPHOTOURL string `json:"legalcardbackphotourl" xorm:"LEGALCARDBACKPHOTOURL"` // 法人身份证背面照地址
  4670. OTHERURL string `json:"otherurl" xorm:"OTHERURL"` // 其它图片地址[使用分号分隔]
  4671. HASENCRYPT int32 `json:"hasencrypt" xorm:"HASENCRYPT"` // 数据是否已加密 - 0:未加密 1:已加密
  4672. BANKNAME string `json:"bankname" xorm:"BANKNAME"` // 银行名称
  4673. BANKACCOUNT string `json:"bankaccount" xorm:"BANKACCOUNT"` // 银行帐号 (加密存储)
  4674. BANKCARDFRONTPHOTOURL string `json:"bankcardfrontphotourl" xorm:"BANKCARDFRONTPHOTOURL"` // 银行卡正面照地址
  4675. NEEDINVOICE int32 `json:"needinvoice" xorm:"NEEDINVOICE"` // 是否需要发票 - 0:不需要 1:需要
  4676. BANKID string `json:"bankid" xorm:"BANKID" form:"bankid"` // 银行编码
  4677. ATTACHMENT1 string `json:"attachment1" xorm:"ATTACHMENT1"` // 附件1
  4678. ATTACHMENT2 string `json:"attachment2" xorm:"ATTACHMENT2"` // 附件2
  4679. BANKACCOUNTNAME string `json:"bankaccountname" xorm:"BANKACCOUNTNAME"` // 收款人名称
  4680. HEADURL string `json:"headurl" xorm:"HEADURL"` // 头像地址
  4681. NICKNAME string `json:"nickname" xorm:"NICKNAME"` // 昵称:默认为名称脱敏(张**) 或 手机号脱敏(139****9999)
  4682. MOBILE2 string `json:"mobile2" xorm:"MOBILE2"` // 手机号码[明文-尚志]
  4683. BIZTYPE int32 `json:"biztype" xorm:"BIZTYPE"` // 企业类型 - 1:进口/生产 2:销售 3:零售 4:运输 5:仓储
  4684. PROXYSTATEMENTURL string `json:"proxystatementurl" xorm:"PROXYSTATEMENTURL"` // 授权委托书
  4685. CONTACTCARDFRONTPHOTOURL string `json:"contactcardfrontphotourl" xorm:"CONTACTCARDFRONTPHOTOURL"` // 联系人证件正面图片地址
  4686. CONTACTCARDBACKPHOTOURL string `json:"contactcardbackphotourl" xorm:"CONTACTCARDBACKPHOTOURL"` // 联系人证件背面图片地址
  4687. ATTACHMENT3 string `json:"attachment3" xorm:"ATTACHMENT3"` // 附件3
  4688. ATTACHMENT4 string `json:"attachment4" xorm:"ATTACHMENT4"` // 附件4
  4689. ATTACHMENT5 string `json:"attachment5" xorm:"ATTACHMENT5"` // 附件5
  4690. TAXPAYERNUM string `json:"taxpayernum" xorm:"TAXPAYERNUM"` // 纳税人识别号
  4691. BIRTHDAY string `json:"birthday" xorm:"BIRTHDAY2"` // 生日(个人:年月日)
  4692. CREDITQUOTA float64 `json:"creditquota" xorm:"CREDITQUOTA"` // 授信额度(金瑞)
  4693. }
  4694. func (r *WrDraftUserInfo) calc() {
  4695. r.CARDNUM = DecryptField(r.CARDNUM)
  4696. r.TELPHONE = DecryptField(r.TELPHONE) // 联系电话(加密存储)
  4697. r.MOBILE = DecryptField(r.MOBILE) // 手机号码(加密存储)
  4698. r.FAX = DecryptField(r.FAX) // 传真(加密存储)
  4699. r.EMAIL = DecryptField(r.EMAIL) // 邮件(加密存储)
  4700. r.QQ = DecryptField(r.QQ) // QQ(加密存储
  4701. r.WECHAT = DecryptField(r.WECHAT) // 微信(加密存储)
  4702. r.BANKACCOUNT = DecryptField(r.BANKACCOUNT) // 银行帐号 (加密存储)
  4703. }
  4704. func (r *WrDraftUserInfo) buildSql() string {
  4705. var sqlId utils.SQLVal = `
  4706. SELECT to_char(t.BIRTHDAY, 'yyyy-mm-dd hh24:mi:ss') BIRTHDAY2,
  4707. to_char(t.CREATETIME, 'yyyy-mm-dd hh24:mi:ss') CREATETIME2,
  4708. to_char(t.MODIFIERTIME, 'yyyy-mm-dd hh24:mi:ss') MODIFIERTIME2,
  4709. t.*
  4710. FROM DRAFT_USERINFO t
  4711. WHERE 1 = 1
  4712. `
  4713. sqlId.And("t.userid", r.USERID)
  4714. sqlId.AndEx("t.userstatus", r.USERSTATUS, r.USERSTATUS != 0)
  4715. return sqlId.String()
  4716. }
  4717. // GetDataEx 获取实名认证信息
  4718. func (r *WrDraftUserInfo) GetDataEx() (interface{}, error) {
  4719. sData := make([]WrDraftUserInfo, 0)
  4720. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  4721. for i := range sData {
  4722. sData[i].calc()
  4723. }
  4724. return sData, err
  4725. }
  4726. // DgFactoryItem 查询品牌和年份
  4727. type DgFactoryItem struct {
  4728. DGFACTORYITEMID int64 `json:"dgfactoryitemid" xorm:"DGFACTORYITEMID"` // 选择项ID(SEQ_DGFACTORYITEM)
  4729. DGFACTORYITEMTYPEID int64 `json:"dgfactoryitemtypeid" xorm:"DGFACTORYITEMTYPEID"` // 要素项类型
  4730. DGFACTORYITEMVALUE string `json:"dgfactoryitemvalue" xorm:"DGFACTORYITEMVALUE"` // 要素项值(类型为仓库时填写仓库名称)
  4731. ORDERINDEX int32 `json:"orderindex" xorm:"ORDERINDEX"` // 顺序
  4732. }
  4733. func (r *DgFactoryItem) buildSql() string {
  4734. var sqlId utils.SQLVal = `
  4735. select t.*
  4736. from DGFactoryItem t
  4737. where t.dgfactoryitemtypeid = %v
  4738. and t.deliverygoodsid = 0
  4739. and t.isvalid = 1
  4740. order by t.orderindex
  4741. `
  4742. sqlId.FormatParam(r.DGFACTORYITEMTYPEID)
  4743. return sqlId.String()
  4744. }
  4745. // GetDataEx 获取查询品牌和年份
  4746. func (r *DgFactoryItem) GetDataEx() ([]DgFactoryItem, error) {
  4747. sData := make([]DgFactoryItem, 0)
  4748. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  4749. return sData, err
  4750. }
  4751. // WrBrandAndYears 查询品牌和年份
  4752. type WrBrandAndYears struct {
  4753. BrandLst []DgFactoryItem `json:"brandlst"` // 品牌列表
  4754. YearsLst []DgFactoryItem `json:"yearslst"` // 年份列表
  4755. }
  4756. // GetDataEx 获取查询品牌和年份
  4757. func (r *WrBrandAndYears) GetDataEx() (interface{}, error) {
  4758. sData := make([]WrBrandAndYears, 0)
  4759. v := DgFactoryItem{DGFACTORYITEMTYPEID: 100}
  4760. brand, err := v.GetDataEx()
  4761. if err != nil {
  4762. return nil, err
  4763. }
  4764. v.DGFACTORYITEMTYPEID = 101
  4765. years, err2 := v.GetDataEx()
  4766. if err2 != nil {
  4767. return nil, err
  4768. }
  4769. d := WrBrandAndYears{
  4770. BrandLst: brand,
  4771. YearsLst: years,
  4772. }
  4773. sData = append(sData, d)
  4774. return sData, nil
  4775. }
  4776. // WrClientAdSpaceConfig 查询固定广告配置
  4777. type WrClientAdSpaceConfig struct {
  4778. ADSPACEID int32 `json:"adspaceid" xorm:"ADSPACEID"` // 广告位ID
  4779. ADSPACETYPE int32 `json:"adspacetype" xorm:"ADSPACETYPE"` // 广告位类型 - 1:固定广告位
  4780. ADSPACENAME string `json:"adspacename" xorm:"ADSPACENAME"` // 广告位名称
  4781. RECSIZE string `json:"recsize" xorm:"RECSIZE"` // 推荐尺寸
  4782. IMAGEPATH string `json:"imagepath" xorm:"IMAGEPATH"` // 图片
  4783. TITLE string `json:"title" xorm:"TITLE"` // 标题
  4784. URLTYPE int32 `json:"urltype" xorm:"URLTYPE"` // 链接类型 - 0:无 1:直接地址 2:商品ID 3:图片详情 4:App功能 5:微信小程序
  4785. URLCONTENT string `json:"urlcontent" xorm:"URLCONTENT"` // 链接(地址\商品ID\功能菜单Key\appid)
  4786. CREATEDATE string `json:"createdate" xorm:"CREATEDATE"` // 创建时间
  4787. UPDATEDATE string `json:"updatedate" xorm:"UPDATEDATE"` // 更新时间
  4788. MODIFIERID int64 `json:"modifierid" xorm:"MODIFIERID"` // 操作人
  4789. AREAUSERID int64 `json:"areauserid" xorm:"AREAUSERID"` // 所属机构ID
  4790. }
  4791. func (r *WrClientAdSpaceConfig) calc() {
  4792. }
  4793. func (r *WrClientAdSpaceConfig) buildSql() string {
  4794. var sqlId utils.SQLVal = `
  4795. SELECT t.ADSPACEID,
  4796. t.ADSPACETYPE,
  4797. t.ADSPACENAME,
  4798. t.RECSIZE,
  4799. t.IMAGEPATH,
  4800. t.TITLE,
  4801. t.URLTYPE,
  4802. t.URLCONTENT,
  4803. to_char(t.CREATEDATE, 'yyyy-mm-dd hh24:mi:ss') CREATEDATE,
  4804. to_char(t.UPDATEDATE, 'yyyy-mm-dd hh24:mi:ss') UPDATEDATE,
  4805. t.MODIFIERID,
  4806. t.AREAUSERID
  4807. FROM CLIENT_ADSPACECONFIG t
  4808. WHERE t.adspacetype=1
  4809. order by t.updatedate desc
  4810. `
  4811. return sqlId.String()
  4812. }
  4813. // GetDataEx 获取查询固定广告配置
  4814. func (r *WrClientAdSpaceConfig) GetDataEx() (interface{}, error) {
  4815. sData := make([]WrClientAdSpaceConfig, 0)
  4816. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  4817. for i := range sData {
  4818. sData[i].calc()
  4819. }
  4820. return sData, err
  4821. }
  4822. // Xhcpsellbackapply 回收鉴别申请表
  4823. type Xhcpsellbackapply struct {
  4824. SELLBACKAPPLYID string `json:"sellbackapplyid" xorm:"SELLBACKAPPLYID"` // 回收申请ID - SEQ_XHCP_SELLBACKAPPLY
  4825. PHONENUM string `json:"phonenum" xorm:"PHONENUM"` // 联系电话
  4826. GOODSSPEC int32 `json:"goodsspec" xorm:"GOODSSPEC"` // 商品规格 - 1:整件 2;整提 3:单罐 4:单盒
  4827. EXPIRYTYPE int32 `json:"expirytype" xorm:"EXPIRYTYPE"` // 寄售有效期 - 1:3天 2:7天 3:15天 4:长期
  4828. ISUNOPENED int32 `json:"isunopened" xorm:"ISUNOPENED"` // 是否原封 - 1:否 2:是
  4829. ZPFLAG int32 `json:"zpflag" xorm:"ZPFLAG"` // 皱皮类型[原封] - 1:无皱皮 2:小皱皮 3:皱皮
  4830. MPFLAG int32 `json:"mpflag" xorm:"MPFLAG"` // 磨皮类型[原封] - 1:无磨皮 2:小磨皮 3:磨皮
  4831. HOLEFLAG int32 `json:"holeflag" xorm:"HOLEFLAG"` // 是否破洞[原封] - 1:无破洞 2:破洞
  4832. OPENFLAG int32 `json:"openflag" xorm:"OPENFLAG"` // 是否非原封 - 1:无 2:皮张大、片张完整,无杂质、虫蛀、霉变、病变、烧皮。 3:片张较大、皮张基本完整,少量断片,少量病变、轻微虫蛀和烧皮。 4:皮张小、片张不完整,断片、碎片较多,有一定量杂质、病斑、虫蛀和烧皮。
  4833. APPLYREMARK string `json:"applyremark" xorm:"APPLYREMARK"` // 申请备注
  4834. APPLYSRC int32 `json:"applysrc" xorm:"APPLYSRC"` // 申请来源 - 1:管理端 2:终端
  4835. APPLYID int64 `json:"applyid" xorm:"APPLYID"` // 申请人
  4836. APPLYTIME time.Time `json:"applytime" xorm:"APPLYTIME"` // 申请时间
  4837. APPLYSTATUS int32 `json:"applystatus" xorm:"APPLYSTATUS"` // 申请状态 - 1:待确认 2:已处理
  4838. AUDITREMARK string `json:"auditremark" xorm:"AUDITREMARK"` // 审核备注
  4839. AUDITSRC int32 `json:"auditsrc" xorm:"AUDITSRC"` // 审核来源 - 1:管理端 2:终端
  4840. AUDITID int64 `json:"-" xorm:"AUDITID"` // 审核人
  4841. AUDITTIME time.Time `json:"-" xorm:"AUDITTIME"` // 审核时间
  4842. USERID int64 `json:"userid" xorm:"USERID" form:"userid" binding:"required"` // 所属用户ID
  4843. }
  4844. // TableName is XHCP_SELLBACKAPPLY
  4845. func (r *Xhcpsellbackapply) TableName() string {
  4846. return "XHCP_SELLBACKAPPLY"
  4847. }
  4848. func (r *Xhcpsellbackapply) calc() {
  4849. }
  4850. func (r *Xhcpsellbackapply) buildSql() string {
  4851. var sqlId utils.SQLVal = `
  4852. SELECT
  4853. to_char(t.SELLBACKAPPLYID) SELLBACKAPPLYID,
  4854. t.PHONENUM,
  4855. t.GOODSSPEC,
  4856. t.EXPIRYTYPE,
  4857. t.ISUNOPENED,
  4858. t.ZPFLAG,
  4859. t.MPFLAG,
  4860. t.HOLEFLAG,
  4861. t.OPENFLAG,
  4862. t.APPLYREMARK,
  4863. t.APPLYID,
  4864. to_char(t.APPLYTIME, 'yyyy-mm-dd hh24:mi:ss') APPLYTIME,
  4865. t.APPLYSTATUS,
  4866. t.APPLYSTATUS,
  4867. t.AUDITREMARK,
  4868. t.AUDITSRC,
  4869. t.AUDITID,
  4870. t.USERID
  4871. FROM XHCP_SELLBACKAPPLY t
  4872. WHERE 1 = 1
  4873. `
  4874. sqlId.And("t.userid", r.USERID)
  4875. return sqlId.String()
  4876. }
  4877. func (r *Xhcpsellbackapply) GetDataEx() (interface{}, error) {
  4878. sData := make([]Xhcpsellbackapply, 0)
  4879. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  4880. for i := range sData {
  4881. sData[i].calc()
  4882. }
  4883. return sData, err
  4884. }
  4885. // XhcpSellBackApplyEx 回收鉴别申请表
  4886. type XhcpSellBackApplyEx struct {
  4887. SELLBACKAPPLYID int64 `json:"-" xorm:"SELLBACKAPPLYID"` // 回收申请ID - SEQ_XHCP_SELLBACKAPPLY
  4888. PHONENUM string `json:"phonenum" xorm:"PHONENUM"` // 联系电话
  4889. GOODSSPEC int32 `json:"goodsspec" xorm:"GOODSSPEC"` // 商品规格 - 1:整件 2;整提 3:单罐 4:单盒
  4890. EXPIRYTYPE int32 `json:"expirytype" xorm:"EXPIRYTYPE"` // 寄售有效期 - 1:3天 2:7天 3:15天 4:长期
  4891. ISUNOPENED int32 `json:"isunopened" xorm:"ISUNOPENED"` // 是否原封 - 1:否 2:是
  4892. ZPFLAG int32 `json:"zpflag" xorm:"ZPFLAG"` // 皱皮类型[原封] - 1:无皱皮 2:小皱皮 3:皱皮
  4893. MPFLAG int32 `json:"mpflag" xorm:"MPFLAG"` // 磨皮类型[原封] - 1:无磨皮 2:小磨皮 3:磨皮
  4894. HOLEFLAG int32 `json:"holeflag" xorm:"HOLEFLAG"` // 是否破洞[原封] - 1:无破洞 2:破洞
  4895. OPENFLAG int32 `json:"openflag" xorm:"OPENFLAG"` // 是否非原封 - 1:无 2:皮张大、片张完整,无杂质、虫蛀、霉变、病变、烧皮。 3:片张较大、皮张基本完整,少量断片,少量病变、轻微虫蛀和烧皮。 4:皮张小、片张不完整,断片、碎片较多,有一定量杂质、病斑、虫蛀和烧皮。
  4896. APPLYREMARK string `json:"applyremark" xorm:"APPLYREMARK"` // 申请备注
  4897. APPLYSRC int32 `json:"-" xorm:"APPLYSRC"` // 申请来源 - 1:管理端 2:终端
  4898. APPLYID int64 `json:"-" xorm:"APPLYID"` // 申请人
  4899. // APPLYTIME time.Time `json:"-" xorm:"APPLYTIME default(sysdate)"` // 申请时间
  4900. APPLYSTATUS int32 `json:"-" xorm:"APPLYSTATUS"` // 申请状态 - 1:待确认 2:已处理
  4901. AUDITREMARK string `json:"-" xorm:"AUDITREMARK"` // 审核备注
  4902. AUDITSRC int32 `json:"-" xorm:"AUDITSRC"` // 审核来源 - 1:管理端 2:终端
  4903. USERID int64 `json:"userid" xorm:"USERID" form:"userid" binding:"required"` // 所属用户ID
  4904. }
  4905. // TableName is XHCP_SELLBACKAPPLY
  4906. func (r *XhcpSellBackApplyEx) TableName() string {
  4907. return "XHCP_SELLBACKAPPLY"
  4908. }
  4909. func (r *XhcpSellBackApplyEx) Insert() error {
  4910. engine := db.GetEngine()
  4911. session := engine.NewSession()
  4912. defer session.Close()
  4913. // add Begin() before any action
  4914. if err := session.Begin(); err != nil {
  4915. return err
  4916. }
  4917. // 自增ID
  4918. seqMap, err := session.QueryString("SELECT SEQ_XHCP_SELLBACKAPPLY.nextval SEQID FROM dual")
  4919. if err != nil {
  4920. return err
  4921. }
  4922. if len(seqMap) <= 0 {
  4923. return errors.New("获取自增ID错误")
  4924. }
  4925. seqID, _ := strconv.Atoi(seqMap[0]["SEQID"])
  4926. r.SELLBACKAPPLYID = int64(seqID)
  4927. r.APPLYSRC = 2
  4928. r.APPLYSTATUS = 1
  4929. // 关于oracle的问题还是要处理的
  4930. // r.APPLYTIME = time.Now()
  4931. // 插入数据
  4932. if _, err = session.Insert(r); err != nil {
  4933. return err
  4934. }
  4935. // add Commit() after all actions
  4936. return session.Commit()
  4937. }
  4938. // Wrtradetradequote 仓单贸易成交行情表
  4939. type Wrtradetradequote1 struct {
  4940. WRTRADEDETAILID string `json:"wrtradedetailid" xorm:"WRTRADEDETAILID"` // 仓单贸易成交单ID(321+Unix秒时间戳(10位)+xxxxxx)
  4941. TRADEDATE string `json:"tradedate" xorm:"TRADEDATE"` // 交易日(yyyyMMdd)
  4942. MARKETID int32 `json:"marketid" xorm:"MARKETID" form:"marketid"` // 市场ID
  4943. WRFACTORTYPEID int64 `json:"wrfactortypeid" xorm:"WRFACTORTYPEID"` // 仓单要素类型ID
  4944. DELIVERYGOODSID int32 `json:"deliverygoodsid" xorm:"DELIVERYGOODSID"` // 现货品种ID
  4945. WRSTANDARDID int32 `json:"wrstandardid" xorm:"WRSTANDARDID" form:"wrstandardid"` // 现货商品ID
  4946. BUYUSERID int64 `json:"buyuserid" xorm:"BUYUSERID"` // 买方用户ID
  4947. BUYACCOUNTID int64 `json:"buyaccountid" xorm:"BUYACCOUNTID"` // 买方账号ID
  4948. SELLUSERID int64 `json:"selluserid" xorm:"SELLUSERID"` // 卖方用户ID
  4949. SELLACCOUNTID int64 `json:"sellaccountid" xorm:"SELLACCOUNTID"` // 卖方账号ID
  4950. TRADETIME time.Time `json:"tradetime" xorm:"TRADETIME"` // 成交时间
  4951. TRADEPRICE float64 `json:"tradeprice" xorm:"TRADEPRICE"` // 成交价格
  4952. TRADEQTY int64 `json:"tradeqty" xorm:"TRADEQTY"` // 成交数量
  4953. TRADEAMOUNT float64 `json:"tradeamount" xorm:"TRADEAMOUNT"` // 成交金额
  4954. BEGINDATE string `json:"begindate" form:"begindate"` // 开始日期(结果含开始日期) yyyymmdd
  4955. ENDDATE string `json:"enddate" form:"enddate"` // 结束日期(结果含结束日期) yyyymmdd
  4956. }
  4957. // TableName is WRTRADE_TRADEQUOTE
  4958. func (r *Wrtradetradequote1) TableName() string {
  4959. return "WRTRADE_TRADEQUOTE"
  4960. }
  4961. func (r *Wrtradetradequote1) calc() {
  4962. }
  4963. func (r *Wrtradetradequote1) buildSql() string {
  4964. var sqlId utils.SQLVal = `
  4965. SELECT
  4966. to_char(t.WRTRADEDETAILID) WRTRADEDETAILID,
  4967. t.TRADEDATE,
  4968. t.MARKETID,
  4969. t.WRFACTORTYPEID,
  4970. t.DELIVERYGOODSID,
  4971. t.WRSTANDARDID,
  4972. t.BUYUSERID,
  4973. t.BUYACCOUNTID,
  4974. t.SELLUSERID,
  4975. t.SELLACCOUNTID,
  4976. t.TRADETIME,
  4977. t.TRADEPRICE,
  4978. t.TRADEQTY,
  4979. t.TRADEAMOUNT
  4980. FROM WRTRADE_TRADEQUOTE t
  4981. WHERE
  4982. t.WRSTANDARDID = %v
  4983. AND
  4984. t.TRADETIME BETWEEN TO_DATE('%v' || ' 000000', 'yyyymmdd hh24:mi:ss') and TO_DATE('%v' || ' 235959', 'yyyymmdd hh24:mi:ss')
  4985. `
  4986. sqlId.FormatParam(r.WRSTANDARDID, r.BEGINDATE, r.ENDDATE)
  4987. sqlId.AndEx("t.MARKETID", r.MARKETID, r.MARKETID > 0)
  4988. return sqlId.String()
  4989. }
  4990. func (r *Wrtradetradequote1) GetDataEx() (interface{}, error) {
  4991. sData := make([]Wrtradetradequote1, 0)
  4992. err := db.GetEngine().SQL(r.buildSql()).Find(&sData)
  4993. for i := range sData {
  4994. sData[i].calc()
  4995. }
  4996. return sData, err
  4997. }