From d2290dd745de05f1ff3684f7d69a2815ce78e885 Mon Sep 17 00:00:00 2001 From: brew <76052198@qq.com> Date: Thu, 14 Apr 2016 14:16:42 +0800 Subject: [PATCH] gen new code --- gamectrl/src/main/proto/gamectrl.proto | 1 - gamectrl/src/main/resources/initflows.json | 6 +- .../gamectrl/scala/flow/FlowStepChecker.scala | 8 +- .../gamectrl/scala/np/P010_WinCalulate.scala | 12 + gateway/src/main/proto/cgw.proto | 12 +- .../cgw/scala/action/BetsService.scala | 31 +- .../cgw/scala/service/MysqlDaos.scala | 6 + webui/.idea/workspace.xml | 899 +++--------------- webui/app/scripts/libs/gl_CQSSC.cjsx | 3 + webui/app/scripts/libs/gl_CQSSC.js | 4 + webui/app/scripts/libs/md5.min.js | 2 + webui/app/scripts/ui/SelectConfirm.cjsx | 2 + webui/app/scripts/ui/SelectConfirm.js | 3 + webui/app/scripts/ui/SelectList.cjsx | 78 +- webui/app/scripts/ui/SelectList.js | 98 +- webui/app/scripts/ui/gm_CQSSC_Wagers.cjsx | 48 +- webui/app/scripts/ui/gm_CQSSC_Wagers.js | 82 +- webui/package.json | 1 + 18 files changed, 415 insertions(+), 881 deletions(-) create mode 100644 webui/app/scripts/libs/md5.min.js diff --git a/gamectrl/src/main/proto/gamectrl.proto b/gamectrl/src/main/proto/gamectrl.proto index 5e223e11..c3823dee 100644 --- a/gamectrl/src/main/proto/gamectrl.proto +++ b/gamectrl/src/main/proto/gamectrl.proto @@ -37,7 +37,6 @@ message PBIssueFlowGen string node_type = 10;//节点类型 string auto_gonext = 11; //是否为自动节点 string status = 12; //当前状态 - } string ltype = 1 ;//游戏类型 repeated PBIFlowStep steps = 2; //状态的节点 diff --git a/gamectrl/src/main/resources/initflows.json b/gamectrl/src/main/resources/initflows.json index 73bb1660..6967028b 100644 --- a/gamectrl/src/main/resources/initflows.json +++ b/gamectrl/src/main/resources/initflows.json @@ -34,7 +34,8 @@ "timesec_offset":0, "gs_desc":"游戏暂停销售*,一般是因为手动触发", "gs_order": "004", - "next_orders":"003" + "next_orders":"003", + "auto_gonext":"0" }, { "gs_ecode":"SALE_DONE", @@ -56,7 +57,8 @@ "gs_chcode":"获取开奖号码", "gs_desc":"获取官方开奖号码", "gs_order": "007", - "next_orders":"008,009,010,011" + "next_orders":"008,009,010,011", + "auto_gonext":"0" }, { "gs_ecode":"WIN_OFFICIAL_BOARD_GET", diff --git a/gamectrl/src/main/scala/starstart/cgw/gamectrl/scala/flow/FlowStepChecker.scala b/gamectrl/src/main/scala/starstart/cgw/gamectrl/scala/flow/FlowStepChecker.scala index ea86e72d..081c23c5 100644 --- a/gamectrl/src/main/scala/starstart/cgw/gamectrl/scala/flow/FlowStepChecker.scala +++ b/gamectrl/src/main/scala/starstart/cgw/gamectrl/scala/flow/FlowStepChecker.scala @@ -103,12 +103,11 @@ object FlowStepCheckerService extends OLog with PBUtils with LService[PBIssueFlo } }) nodeNeedProc.map { NodeProcessor.process(_) }; - + if (nodeNeedProc.size > 0) { Thread.sleep(2000); - log.debug("wait:for next:"+nodeNeedProc.size +",rizesiz="+ nodeNeedProc.filter { _.getStepStatus.equals("1")}.size) + log.debug("wait:for next:" + nodeNeedProc.size + ",rizesiz=" + nodeNeedProc.filter { _.getStepStatus.equals("1") }.size) } - } catch { case e: Throwable => log.debug("running ChechError:", e); @@ -132,7 +131,7 @@ object FlowStepCheckerService extends OLog with PBUtils with LService[PBIssueFlo val nextsteps = if (steprecs.size() == 0) { StepsGenerator.newStepForIssue(issue); } else { - steprecs.filter { step => "5".equals(step.getStepStatus) }.map { step => + steprecs.filter { step => "5".equals(step.getStepStatus) && "1".equals(step.getAutoGonext) }.map { step => StepsGenerator.nextStepForIssue(issue, step.asInstanceOf[TLTIssueSteps]) }.flatten } @@ -142,6 +141,7 @@ object FlowStepCheckerService extends OLog with PBUtils with LService[PBIssueFlo //将节点插入数据库 if (nextsteps.size > 0) { nextsteps.foreach { step => + try { val existexample = new TLTIssueStepsExample() existexample.createCriteria().andIssueStepIdEqualTo(step.getIssueStepId) diff --git a/gamectrl/src/main/scala/starstart/cgw/gamectrl/scala/np/P010_WinCalulate.scala b/gamectrl/src/main/scala/starstart/cgw/gamectrl/scala/np/P010_WinCalulate.scala index de95a8b6..e89d7db6 100644 --- a/gamectrl/src/main/scala/starstart/cgw/gamectrl/scala/np/P010_WinCalulate.scala +++ b/gamectrl/src/main/scala/starstart/cgw/gamectrl/scala/np/P010_WinCalulate.scala @@ -8,11 +8,23 @@ import starstart.cgw.gamectrl.scala.flow.NodeProcessor import onight.tfg.ordbgens.tlt.entity.TLTIssueSteps import com.github.nscala_time.time.Imports._ import java.util.Date +import onight.tfg.ordbgens.tlt.entity.TLTCoreBetExample +import com.github.nscala_time.time.Imports._ +import scala.collection.JavaConversions._ object P010_WinCalculate extends OProcessor with OLog { def proc(issue: TLTIssue, issueStep: TLTIssueSteps, operator: String): Int = { log.info("PS::" + issueStep.getGsChcode + ":" + issue.getIssueId + ",status=" + issue.getIssueStatus) + //算奖 + + val example = new TLTCoreBetExample + example.createCriteria().andIssueNoEqualTo(issue.getIssueNo).andLtypeEqualTo(issue.getLtype) + + Mysqls.corebetDAO.selectByExample(example).map { bet => + log.debug("bet==" + bet+",") + } + return 1; } diff --git a/gateway/src/main/proto/cgw.proto b/gateway/src/main/proto/cgw.proto index 7b0f1fb4..198c46fd 100644 --- a/gateway/src/main/proto/cgw.proto +++ b/gateway/src/main/proto/cgw.proto @@ -23,13 +23,13 @@ message PWBet //投注一注 { string ltype = 1;//游戏类型 string play_type = 2;//玩法类型 - string bet_content = 3;//投注内容 + string bet_org_content = 3;//投注内容 uint32 bet_counts = 4;//注数 double bet_amounts = 5;//投注金额 int32 bet_money_unit = 6;//投注单元,以元为单位的 uint32 bet_multi = 7;//投注倍数 - double bonner_money_mode = 8;//奖金模式 - double bonner_rate_mode = 9;//奖金模式 + double bonus_money_mode = 8;//奖金模式 + double bonus_rate_mode = 9;//奖金模式 string vldcode = 20;//校验码 string lname = 31;//玩法名称 @@ -58,14 +58,16 @@ message PWAutoChase //追号内容 message PWTicker //投注一单,包括多注 { - //#wname,balls,count,money,moneyUnit,multi,bonnerMode + //#wname,balls,count,money,moneyUnit,multi,bonusMode repeated PWBet bets = 1;//注码内容 + string ltype = 2;//游戏类型 bool is_auto = 20;//是否追号 repeated PWAutoChase chases = 21 ;//追号内容 string issue_no = 31 ;//投注期号(不追号的时候填写) bool win_stop = 32 ;//中奖后停止追号 + string submit_datetime = 33;//投注时间 string user_id = 34;//投注用户 string channel = 35;//投注渠道 @@ -75,7 +77,9 @@ message PWTicker //投注一单,包括多注 double tick_amounts = 39;//投注总金额 uint32 tick_bet_counts = 40;//总注数 + string region=41;//区域 + string vldcode = 42;//票号的验证码,作为数据库的主键 double cost_fund0=50;//从用户子账户0扣除的金额 double cost_fund1=51;//从用户子账户1扣除的金额 double cost_fund2=52;//从用户子账户2扣除的金额 diff --git a/gateway/src/main/scala/starstart/cgw/scala/action/BetsService.scala b/gateway/src/main/scala/starstart/cgw/scala/action/BetsService.scala index 1f43c6be..a142e574 100644 --- a/gateway/src/main/scala/starstart/cgw/scala/action/BetsService.scala +++ b/gateway/src/main/scala/starstart/cgw/scala/action/BetsService.scala @@ -24,7 +24,8 @@ import java.util.Date import starstart.cgw.pbgens.Cgw.PWTicker import starstart.cgw.pbgens.Cgw.PWRetTicker import onight.tfw.ojpa.api.TransactionExecutor -import onight.tfg.ordbgens.tlt.entity.TLTCoreTick +import onight.tfg.ordbgens.tlt.entity.TLTCoreTicket +import onight.tfw.ojpa.api.exception.JPADuplicateIDException @NActorProvider object CGWBetActor extends SessionModules[PWTicker] { @@ -42,24 +43,40 @@ object CGWBetService extends OLog with PBUtils with LService[PWTicker] { log.debug("getBug from IP:{},betscount={}", pack.getExtStrProp(PackHeader.PEER_IP), pbo.getBetsCount) ret.setRetcode("9999").setRetmsg("UNKNOW ERROR"); + val tick = pbBeanUtil.copyFromPB(pbo, new TLTCoreTicket) + tick.setTickNo(MD5.getMD5("cwd_" + pbo.getVldcode)); + tick.setBetIp(pack.getExtStrProp(PackHeader.PEER_IP)); + tick.setTickStatus("1") + if (pbo.getIsAuto) { + tick.setIsAuto("1") + } else { + tick.setIsAuto("0") + } + tick.setBetDatetime(new Date()) + log.info("bets:count="+pbo.getBetsCount+",tickno="+tick.getTickNo+":issue="+tick.getIssueNo+":ltype="+tick.getLtype) val bets = pbo.getBetsList().map { bet => val dbbet = pbBeanUtil.copyFromPB(bet, new TLTCoreBet) pbBeanUtil.copyFromPB(pbo, dbbet) - + dbbet.setTickNo(tick.getTickNo) dbbet.setBetDatetime(new Date()); + dbbet.setBetOrgCounts(bet.getBetCounts) dbbet.setTickNo(UUIDGenerator.generate()); val serialnum = MD5.getMD5(("starstart-ming:" + dbbet.getTickNo)); dbbet.setBetIp(pack.getExtStrProp(PackHeader.PEER_IP)); dbbet.setSerialNum(serialnum) + dbbet.setBetNo("cwd_" + bet.getVldcode) + dbbet.setBetStatus("1") + dbbet.setIsAuto("0") + dbbet.setBetDatetime(new Date()); dbbet } - val tick = pbBeanUtil.copyFromPB(pbo, new TLTCoreTick) + try { MysqlDaos.corebetDAO.doInTransaction(new TransactionExecutor { - def doInTransaction: Object = { MysqlDaos.corebetDAO.batchInsert(bets); + MysqlDaos.coreticketDAO.insert(tick) return "" } }) @@ -69,11 +86,15 @@ object CGWBetService extends OLog with PBUtils with LService[PWTicker] { retbet.setBetStatus("0000").setSerialNum(dbbet.getSerialNum).setVldcode(MD5.getMD5(DESCoder.desEncrypt(dbbet.getSerialNum, "zzzz-starstartsFFFF"))) ret.addBetrets(retbet); } + ret.setTickNo(tick.getTickNo); ret.setRetcode("0000").setRetmsg("ok"); } catch { + case e: JPADuplicateIDException => + log.warn("投注异常重复") + ret.setRetcode("0003").setRetmsg("重复提交相同的投注单") case e: Exception => log.error("投注异常", e) - ret.setRetcode("0001").setRetmsg(e.getMessage) + ret.setRetcode("0009").setRetmsg(e.getMessage) } handler.onFinished(PacketHelper.toPBReturn(pack, ret.build())); } diff --git a/gateway/src/main/scala/starstart/cgw/scala/service/MysqlDaos.scala b/gateway/src/main/scala/starstart/cgw/scala/service/MysqlDaos.scala index da15656d..5702967a 100644 --- a/gateway/src/main/scala/starstart/cgw/scala/service/MysqlDaos.scala +++ b/gateway/src/main/scala/starstart/cgw/scala/service/MysqlDaos.scala @@ -7,6 +7,7 @@ import onight.tfw.ojpa.api.annotations.StoreDAO import onight.tfw.ojpa.api.OJpaDAO import scala.beans.BeanProperty import onight.tfg.ordbgens.tlt.entity.TLTCoreBet +import onight.tfg.ordbgens.tlt.entity.TLTCoreTicket @NActorProvider object MysqlDaos extends SessionModules[Message] { @@ -14,5 +15,10 @@ object MysqlDaos extends SessionModules[Message] { @StoreDAO(domain = classOf[TLTCoreBet],target = "cmysql") @BeanProperty var corebetDAO: OJpaDAO[TLTCoreBet] = null + + + @StoreDAO(domain = classOf[TLTCoreTicket],target = "cmysql") + @BeanProperty + var coreticketDAO: OJpaDAO[TLTCoreTicket] = null } \ No newline at end of file diff --git a/webui/.idea/workspace.xml b/webui/.idea/workspace.xml index 22a9e6ec..517a0953 100644 --- a/webui/.idea/workspace.xml +++ b/webui/.idea/workspace.xml @@ -2,661 +2,20 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - + + + + - - - @@ -678,61 +37,41 @@ - - - - - - - - - - - - - - - - - - - - - - + + - - + + - + - - + + - + - - + + - - + + @@ -741,38 +80,38 @@ - - + + - - + + - + - - + + - + - - + + - - + + @@ -829,7 +168,6 @@ @@ -1241,15 +580,16 @@ - - + + + - - + + - + @@ -1257,7 +597,6 @@ - @@ -1277,13 +616,6 @@ - - - - - - - @@ -1355,13 +687,6 @@ - - - - - - - @@ -1439,13 +764,6 @@ - - - - - - - @@ -1467,13 +785,6 @@ - - - - - - - @@ -1481,45 +792,47 @@ - + - + - + - - + + - + - - + + - + - + + - + - - + + + - + - + @@ -1532,88 +845,106 @@ - + - + + - + - - + + + - - + + - + - + - + - - + + + + + + + + + + - + - + - - + + - + - - + + - + + + + + + + + + - + - + - - + + - + - - + + @@ -1626,18 +957,34 @@ - + + + + + + + + + - + + + + + + + + + - - + + diff --git a/webui/app/scripts/libs/gl_CQSSC.cjsx b/webui/app/scripts/libs/gl_CQSSC.cjsx index f02e2bbc..e23c962a 100644 --- a/webui/app/scripts/libs/gl_CQSSC.cjsx +++ b/webui/app/scripts/libs/gl_CQSSC.cjsx @@ -156,6 +156,9 @@ GL_CQSSC = { gl_cqssc_info[key] = v; return v; + loadCurrentIssue:() -> + curdat = 1 + init:(a,b) -> console.log("a=="+a+",b=="+b) diff --git a/webui/app/scripts/libs/gl_CQSSC.js b/webui/app/scripts/libs/gl_CQSSC.js index 5b8636e5..734725b1 100644 --- a/webui/app/scripts/libs/gl_CQSSC.js +++ b/webui/app/scripts/libs/gl_CQSSC.js @@ -140,6 +140,10 @@ GL_CQSSC = { gl_cqssc_info[key] = v; return v; }, + loadCurrentIssue: function() { + var curdat; + return curdat = 1; + }, init: function(a, b) { return console.log("a==" + a + ",b==" + b); }, diff --git a/webui/app/scripts/libs/md5.min.js b/webui/app/scripts/libs/md5.min.js new file mode 100644 index 00000000..4bd9de1e --- /dev/null +++ b/webui/app/scripts/libs/md5.min.js @@ -0,0 +1,2 @@ +!function(n){"use strict";function t(n,t){var r=(65535&n)+(65535&t),e=(n>>16)+(t>>16)+(r>>16);return e<<16|65535&r}function r(n,t){return n<>>32-t}function e(n,e,o,u,c,f){return t(r(t(t(e,n),t(u,f)),c),o)}function o(n,t,r,o,u,c,f){return e(t&r|~t&o,n,t,u,c,f)}function u(n,t,r,o,u,c,f){return e(t&o|r&~o,n,t,u,c,f)}function c(n,t,r,o,u,c,f){return e(t^r^o,n,t,u,c,f)}function f(n,t,r,o,u,c,f){return e(r^(t|~o),n,t,u,c,f)}function i(n,r){n[r>>5]|=128<>>9<<4)+14]=r;var e,i,a,h,d,l=1732584193,g=-271733879,v=-1732584194,m=271733878;for(e=0;e>5]>>>t%32&255);return r}function h(n){var t,r=[];for(r[(n.length>>2)-1]=void 0,t=0;t>5]|=(255&n.charCodeAt(t/8))<16&&(o=i(o,8*n.length)),r=0;16>r;r+=1)u[r]=909522486^o[r],c[r]=1549556828^o[r];return e=i(u.concat(h(t)),512+8*t.length),a(i(c.concat(e),640))}function g(n){var t,r,e="0123456789abcdef",o="";for(r=0;r>>4&15)+e.charAt(15&t);return o}function v(n){return unescape(encodeURIComponent(n))}function m(n){return d(v(n))}function p(n){return g(m(n))}function s(n,t){return l(v(n),v(t))}function C(n,t){return g(s(n,t))}function A(n,t,r){return t?r?s(t,n):C(t,n):r?m(n):p(n)}"function"==typeof define&&define.amd?define(function(){return A}):"object"==typeof module&&module.exports?module.exports=A:n.md5=A}(this); +//# sourceMappingURL=md5.min.js.map \ No newline at end of file diff --git a/webui/app/scripts/ui/SelectConfirm.cjsx b/webui/app/scripts/ui/SelectConfirm.cjsx index 93df7ddf..b6b49ef6 100644 --- a/webui/app/scripts/ui/SelectConfirm.cjsx +++ b/webui/app/scripts/ui/SelectConfirm.cjsx @@ -51,6 +51,8 @@ SelectConfirm = React.createClass( getBonnerMoney:() -> return parseInt(@state.boners["rangeMoney"][0]+(@state.boners["rangeMoney"][1]-@state.boners["rangeMoney"][0])*@state.bonerValue) + getBonnerRatio:() -> + return (@state.boners["rangeRatio"][0]+(@state.boners["rangeRatio"][1]-@state.boners["rangeRatio"][0])*@state.bonerValue).toFixed(4); render:() -> styles = { diff --git a/webui/app/scripts/ui/SelectConfirm.js b/webui/app/scripts/ui/SelectConfirm.js index 8081366c..a37bc37d 100644 --- a/webui/app/scripts/ui/SelectConfirm.js +++ b/webui/app/scripts/ui/SelectConfirm.js @@ -61,6 +61,9 @@ SelectConfirm = React.createClass({ getBonnerMoney: function() { return parseInt(this.state.boners["rangeMoney"][0] + (this.state.boners["rangeMoney"][1] - this.state.boners["rangeMoney"][0]) * this.state.bonerValue); }, + getBonnerRatio: function() { + return (this.state.boners["rangeRatio"][0] + (this.state.boners["rangeRatio"][1] - this.state.boners["rangeRatio"][0]) * this.state.bonerValue).toFixed(4); + }, render: function() { var bonerMoney, bonerRatio, money_total, styles; styles = { diff --git a/webui/app/scripts/ui/SelectList.cjsx b/webui/app/scripts/ui/SelectList.cjsx index 513dab4d..ca447a20 100644 --- a/webui/app/scripts/ui/SelectList.cjsx +++ b/webui/app/scripts/ui/SelectList.cjsx @@ -7,6 +7,9 @@ List = require('material-ui/lib/lists/list'); ListItem = require('material-ui/lib/lists/list-item'); SelectItem = require('./SelectItem.js'); _ = require('underscore'); +dateFormat = require('dateformat'); +UserInfo = require( '../libs/UserInfo.js'); +md5 = require( '../libs/md5.min.js'); RaisedButton = require('material-ui/lib/raised-button'); @@ -16,39 +19,100 @@ SelectList = React.createClass( totalMoney: 1 moneyType: 1 multi:1 + lastUpdateTime:new Date() selidx:1 items: [] getTotalWagerCountAndMoney:() -> - count = 0 - money = 0 - moneyOneMulti = 0 + count = 0.0 + money = 0.0 + moneyOneMulti = 0.0 for key,v of @state.items #wname,balls,count,money,moneyUnit,multi,bonnerMode count+=v[2] money+=parseFloat(v[3]) moneyOneMulti+= parseFloat(v[3])/parseFloat(v[5]) return [count,money,moneyOneMulti] + getWagerPBPacket:() -> + countAndMoney = @getTotalWagerCountAndMoney() + + usermoney = UserInfo.getUserMoneys(); + console.log("usermoney="+usermoney) + costfund2 = 0.0 + costfund1 = 0.0 + costfund0 = 0.0 + dfstr = dateFormat(@state.lastUpdateTime,"isoDateTime") + + if usermoney.funds[2].cur_bal > countAndMoney[1] + costfund2 = countAndMoney[1] + else + costfund2 = usermoney.funds[2].cur_bal + costfund1 = countAndMoney[1] - costfund2 + if usermoney.funds[1].cur_bal < costfund1 + costfund1 = usermoney.funds[1].cur_bal + costfund0 = countAndMoney[1] - costfund2 - costfund1 + if usermoney.funds[0].cur_bal < costfund0 + return -1 + + + bets = ( { #[wname,balls,count,money,moneyUnit,multi,bonnerMode] + ltype:"CQSSC",# = 1;//游戏类型,string + play_type:v[0],# ;//玩法类型,string + bet_org_content:v[1],# = 3;//投注内容,string + bet_counts:v[2]#= 4;//注数,uint32 + bet_amounts:v[3]# = 5;//投注金额,double + bet_money_unit:v[4]# = 6;//投注单元,以元为单位的,int32 + bet_multi:v[5]# = 7;//投注倍数,uint32 + bonus_money_mode:v[6]# = 8;//奖金模式,double + bonus_rate_mode:v[7]# = 9;//奖金模式,double + vldcode:md5(key+":"+dfstr+"_"+UserInfo.getActNO)# = 20;//校验码,string + lname:v[0]# 31;//玩法名称,string + merchantuserid:UserInfo.getActNO,# = 38;//商户对应的用户编号 + merchantid:'001'# = 35; //商户号,string + } for key,v of @state.items) + tick = { + bets:bets + ltype:"CQSSC" + issue_no:"20160413-013", + submit_datetime: dateFormat(new Date(), "yyyy-mm-dd HH:MM:ss"), + user_id:UserInfo.getActNO, + channel:"pcweb",#= 35;//投注渠道 + merchantid:"001",# = 36;//所属商户 + merchantuserid:UserInfo.getActNO,# = 38;//商户对应的用户编号 + tick_amounts:countAndMoney[1]# = 39;//投注总金额 + tick_bet_counts:countAndMoney[0]# = 40;//总注数 + region:'CN'#=41;//区域 + cost_fund0:costfund0,#从用户子账户0扣除的金额 + cost_fund1:costfund1,#//从用户子账户1扣除的金额 + cost_fund2:costfund2,#//从用户子账户2扣除的金额 + is_auto:false, + vldcode: md5(UserInfo.getActNO+"_"+dfstr+"_"+countAndMoney[1]+"_"+countAndMoney[0]) + } + console.log("tick=="+tick) + return tick; + resetData:() -> @setState items:[] totalMoney: 0 selidx: 0 + lastUpdateTime:new Date() handleChangeItem:(idx) -> # console.log("handleChangeItem:"+idx) @setState selidx:idx - addItem:(wname,balls,count,money,moneyUnit,multi,bonnerMode) -> + addItem:(wname,balls,count,money,moneyUnit,multi,bonnerMode,ratioMode) -> key = wname+"@"+balls+"@"+moneyUnit if @state.items[key] return false else - @state.items[key] = [wname,balls,count,money,moneyUnit,multi,bonnerMode] + @state.items[key] = [wname,balls,count,money,moneyUnit,multi,bonnerMode,ratioMode] @setState update:true + lastUpdateTime:new Date() return true deleteItem:(key) -> @@ -57,6 +121,7 @@ SelectList = React.createClass( delete @state.items[key] @setState update:true + lastUpdateTime:new Date() @props.onDeleteItem() @@ -69,7 +134,7 @@ SelectList = React.createClass( #console.log("render:selectList") itemprops={ changeSel:@handleChangeItem,deleteItem:@deleteItem,selidx:@state.selidx } itemCOMs = ( - for key,v of @state.items #wname,balls,count,money,moneyUnit,multi,bonnerMode + for key,v of @state.items #wname,balls,count,money,moneyUnit,multi,bonnerMode,ratioMode citemrop = _.extend(itemprops,{vs:v,keyy:key}) @@ -84,6 +149,7 @@ SelectList = React.createClass( moneyUnit: v[4] multi: v[5] bonnerMode: v[6] + ratioMode: v[7] return key diff --git a/webui/app/scripts/ui/SelectList.js b/webui/app/scripts/ui/SelectList.js index 62f3d5d0..2c51cddd 100644 --- a/webui/app/scripts/ui/SelectList.js +++ b/webui/app/scripts/ui/SelectList.js @@ -1,4 +1,4 @@ -var List, ListItem, RaisedButton, React, SelectItem, SelectList, _, injectTapEventPlugin; +var List, ListItem, RaisedButton, React, SelectItem, SelectList, UserInfo, _, dateFormat, injectTapEventPlugin, md5; React = require("react"); @@ -12,6 +12,12 @@ SelectItem = require('./SelectItem.js'); _ = require('underscore'); +dateFormat = require('dateformat'); + +UserInfo = require('../libs/UserInfo.js'); + +md5 = require('../libs/md5.min.js'); + RaisedButton = require('material-ui/lib/raised-button'); SelectList = React.createClass({ @@ -20,15 +26,16 @@ SelectList = React.createClass({ totalMoney: 1, moneyType: 1, multi: 1, + lastUpdateTime: new Date(), selidx: 1, items: [] }; }, getTotalWagerCountAndMoney: function() { var count, key, money, moneyOneMulti, ref1, v; - count = 0; - money = 0; - moneyOneMulti = 0; + count = 0.0; + money = 0.0; + moneyOneMulti = 0.0; ref1 = this.state.items; for (key in ref1) { v = ref1[key]; @@ -38,11 +45,79 @@ SelectList = React.createClass({ } return [count, money, moneyOneMulti]; }, + getWagerPBPacket: function() { + var bets, costfund0, costfund1, costfund2, countAndMoney, dfstr, key, tick, usermoney, v; + countAndMoney = this.getTotalWagerCountAndMoney(); + usermoney = UserInfo.getUserMoneys(); + console.log("usermoney=" + usermoney); + costfund2 = 0.0; + costfund1 = 0.0; + costfund0 = 0.0; + dfstr = dateFormat(this.state.lastUpdateTime, "isoDateTime"); + if (usermoney.funds[2].cur_bal > countAndMoney[1]) { + costfund2 = countAndMoney[1]; + } else { + costfund2 = usermoney.funds[2].cur_bal; + costfund1 = countAndMoney[1] - costfund2; + if (usermoney.funds[1].cur_bal < costfund1) { + costfund1 = usermoney.funds[1].cur_bal; + costfund0 = countAndMoney[1] - costfund2 - costfund1; + if (usermoney.funds[0].cur_bal < costfund0) { + return -1; + } + } + } + bets = (function() { + var ref1, results; + ref1 = this.state.items; + results = []; + for (key in ref1) { + v = ref1[key]; + results.push({ + ltype: "CQSSC", + play_type: v[0], + bet_org_content: v[1], + bet_counts: v[2], + bet_amounts: v[3], + bet_money_unit: v[4], + bet_multi: v[5], + bonus_money_mode: v[6], + bonus_rate_mode: v[7], + vldcode: md5(key + ":" + dfstr + "_" + UserInfo.getActNO), + lname: v[0], + merchantuserid: UserInfo.getActNO, + merchantid: '001' + }); + } + return results; + }).call(this); + tick = { + bets: bets, + ltype: "CQSSC", + issue_no: "20160413-013", + submit_datetime: dateFormat(new Date(), "yyyy-mm-dd HH:MM:ss"), + user_id: UserInfo.getActNO, + channel: "pcweb", + merchantid: "001", + merchantuserid: UserInfo.getActNO, + tick_amounts: countAndMoney[1], + tick_bet_counts: countAndMoney[0], + region: 'CN', + cost_fund0: costfund0, + cost_fund1: costfund1, + cost_fund2: costfund2, + is_auto: false, + vldcode: md5(UserInfo.getActNO + "_" + dfstr + "_" + countAndMoney[1] + "_" + countAndMoney[0]) + }; + console.log("tick==" + tick); + return tick; + }, resetData: function() { return this.setState({ items: [], totalMoney: 0, - selidx: 0 + selidx: 0, + lastUpdateTime: new Date() }); }, handleChangeItem: function(idx) { @@ -50,15 +125,16 @@ SelectList = React.createClass({ selidx: idx }); }, - addItem: function(wname, balls, count, money, moneyUnit, multi, bonnerMode) { + addItem: function(wname, balls, count, money, moneyUnit, multi, bonnerMode, ratioMode) { var key; key = wname + "@" + balls + "@" + moneyUnit; if (this.state.items[key]) { return false; } else { - this.state.items[key] = [wname, balls, count, money, moneyUnit, multi, bonnerMode]; + this.state.items[key] = [wname, balls, count, money, moneyUnit, multi, bonnerMode, ratioMode]; this.setState({ - update: true + update: true, + lastUpdateTime: new Date() }); return true; } @@ -68,7 +144,8 @@ SelectList = React.createClass({ if (this.state.items[key]) { delete this.state.items[key]; this.setState({ - update: true + update: true, + lastUpdateTime: new Date() }); return this.props.onDeleteItem(); } @@ -106,7 +183,8 @@ SelectList = React.createClass({ money: v[3], moneyUnit: v[4], multi: v[5], - bonnerMode: v[6] + bonnerMode: v[6], + ratioMode: v[7] }); } return key; diff --git a/webui/app/scripts/ui/gm_CQSSC_Wagers.cjsx b/webui/app/scripts/ui/gm_CQSSC_Wagers.cjsx index bcd57089..b6826840 100644 --- a/webui/app/scripts/ui/gm_CQSSC_Wagers.cjsx +++ b/webui/app/scripts/ui/gm_CQSSC_Wagers.cjsx @@ -19,7 +19,7 @@ TotalWagers = require("./TotalWagers.js") CQSSC_WagerSelector = require("./gm_CQSSC_WagerSelector.js") Spinner = require('react-spinkit'); - +dateFormat = require('dateformat'); CQSSC_Wagers = React.createClass( @@ -61,9 +61,17 @@ CQSSC_Wagers = React.createClass( newstate = {totalWagerCount: 0,totalWagerMoney: 0,WagerMoneyOnce:0} totalWagers.setState(newstate,cb) + handleWagerCB:(err,res) -> console.log("handleWagerCB:"+JSON.stringify(res.body)) - @resetWager() + if res.body && res.body.body + if res.body.body.retcode == '0000' + @handleDiagOpen("投注成功"); + @resetWager() + else + @handleDiagOpen("投注异常错误:"+res.body.body.retmsg); + else + @handleDiagOpen("投注网络异常"); handleSubmitWagers:() -> totalWagers = @refs["totalWagers"] @@ -88,8 +96,7 @@ CQSSC_Wagers = React.createClass( confirmitems = @getConfirmItems() #wname,balls,count,money,moneyUnit,multi,bonnerMode - - itemcom = ((
{"["+v[0]+"]" +v[1]+ " ; ¥"+v[3]+"元" }
) for key,v of confirmitems) + itemcom = ((
{"["+v[0]+"]" +v[1]+ " ; ¥"+v[3]+"元" }
) for key,v of confirmitems) items = (
@@ -98,36 +105,21 @@ CQSSC_Wagers = React.createClass(
总金额 : {totalwagermoney}
) - submititems = ( { - issue_no:"100" - } for key,v of confirmitems) + submititems = @refs["selectList"].getWagerPBPacket() console.log("submititems="+JSON.stringify(submititems)) CB = (data) -> console.log("okok!totalWagerMoney="+data.self.wanfa+",items="+JSON.stringify(data.items)) - - data.self.handleDiagOpen(( ),"",{padding:"10px 10px 10px 20px"}) - - - request.post('/pbface/cgw/pbmer.do?fh=VMERCGW000000J00') - .send({ - packets: [ - { - gcmd: "CGCBET", - jsbody: { - act_no: UserInfo.getActNO, - fund_no: "*", - }, - } - ] - }) + request.post('/pbface/cgw/pbbet.do?fh=VBETCGW000000J00') + .set("Content-Type",'application/json') + .send(JSON.stringify(submititems)) .end(data.self.handleWagerCB); + msg =
+ console.log("openwaiting=="+msg) + data.self.handleDiagOpen(msg,"投注确认中",{padding:"10px 10px 10px 10px",width:"100%",height:"64px",zz:"true",size:"38px"},null,null,null,true) - #@handleDiagOpen(items,title,{padding:"10px 10px 10px 20px"},CB,{items:submititems,self:@}) - msg =
- console.log("openmsg=="+msg) - @handleDiagOpen(msg,"投注确认中",{padding:"10px 10px 10px 10px",width:"100%",height:"64px",zz:"true",size:"38px"},null,null,null,true) + @handleDiagOpen(items,title,{padding:"10px 10px 10px 20px"},CB,{items:submititems,self:@}) handleSelectConfirm: () -> wname = GL_CQSSC.getWanfaName(@refs["wagerselector"].state.wanfa,@refs["wagerselector"].state.wanfaLine2,@refs["wagerselector"].state.wanfaLine3) @@ -139,7 +131,7 @@ CQSSC_Wagers = React.createClass( selectList = @refs["selectList"] money = scCOM.getMoneyTotal() bonnerMoney = scCOM.getBonnerMoney() - v = selectList.addItem(wname,scState.wagerballs,scState.wagercount,money,scState.moneyType,scState.multi,bonnerMoney) + v = selectList.addItem(wname,scState.wagerballs,scState.wagercount,money,scState.moneyType,scState.multi,bonnerMoney,scCOM.getBonnerRatio()) if v GL_CQSSC.clearWager() GL_CQSSC.cleanSelectBalls() diff --git a/webui/app/scripts/ui/gm_CQSSC_Wagers.js b/webui/app/scripts/ui/gm_CQSSC_Wagers.js index 1e4036ca..4aec8c7d 100644 --- a/webui/app/scripts/ui/gm_CQSSC_Wagers.js +++ b/webui/app/scripts/ui/gm_CQSSC_Wagers.js @@ -1,4 +1,4 @@ -var CQSSC_WagerSelector, CQSSC_Wagers, Divider, FlatButton, GL_CQSSC, History, PromiseState, RaisedButton, React, Router, SelectConfirm, SelectList, Spinner, TotalWagers, UserInfo, connect, injectTapEventPlugin, ref, ref1, request; +var CQSSC_WagerSelector, CQSSC_Wagers, Divider, FlatButton, GL_CQSSC, History, PromiseState, RaisedButton, React, Router, SelectConfirm, SelectList, Spinner, TotalWagers, UserInfo, connect, dateFormat, injectTapEventPlugin, ref, ref1, request; React = require("react"); @@ -30,6 +30,8 @@ CQSSC_WagerSelector = require("./gm_CQSSC_WagerSelector.js"); Spinner = require('react-spinkit'); +dateFormat = require('dateformat'); + CQSSC_Wagers = React.createClass({ getInitialState: function() { return { @@ -86,10 +88,19 @@ CQSSC_Wagers = React.createClass({ }, handleWagerCB: function(err, res) { console.log("handleWagerCB:" + JSON.stringify(res.body)); - return this.resetWager(); + if (res.body && res.body.body) { + if (res.body.body.retcode === '0000') { + this.handleDiagOpen("投注成功"); + return this.resetWager(); + } else { + return this.handleDiagOpen("投注异常错误:" + res.body.body.retmsg); + } + } else { + return this.handleDiagOpen("投注网络异常"); + } }, handleSubmitWagers: function() { - var CB, chaseCount, confirmitems, currentPeroid, itemcom, items, key, msg, submititems, title, totalWagers, totalwagermoney, v; + var CB, chaseCount, confirmitems, currentPeroid, itemcom, items, key, submititems, title, totalWagers, totalwagermoney, v; totalWagers = this.refs["totalWagers"]; if (totalWagers.state.totalWagerCount <= 0) { this.handleDiagOpen("请选择你要投注的内容!"); @@ -131,51 +142,32 @@ CQSSC_Wagers = React.createClass({ }, itemcom), React.createElement(Divider, null), React.createElement("div", { "className": "msgwagertotal" }, "总金额 : ", React.createElement("b", null, totalwagermoney), " 元")); - submititems = (function() { - var results; - results = []; - for (key in confirmitems) { - v = confirmitems[key]; - results.push({ - issue_no: "100" - }); - } - return results; - })(); + submititems = this.refs["selectList"].getWagerPBPacket(); console.log("submititems=" + JSON.stringify(submititems)); CB = function(data) { + var msg; console.log("okok!totalWagerMoney=" + data.self.wanfa + ",items=" + JSON.stringify(data.items)); - data.self.handleDiagOpen(React.createElement(Loading, { - "type": 'spinning-bubbles', - "color": '#e3e3e3' - }), "", { - padding: "10px 10px 10px 20px" - }); - return request.post('/pbface/cgw/pbmer.do?fh=VMERCGW000000J00').send({ - packets: [ - { - gcmd: "CGCBET", - jsbody: { - act_no: UserInfo.getActNO, - fund_no: "*" - } - } - ] - }).end(data.self.handleWagerCB); + request.post('/pbface/cgw/pbbet.do?fh=VBETCGW000000J00').set("Content-Type", 'application/json').send(JSON.stringify(submititems)).end(data.self.handleWagerCB); + msg = React.createElement("center", null, React.createElement(Spinner, { + "spinnerName": 'circle', + "noFadeIn": true, + "overrideSpinnerClassName": "cspinner" + })); + console.log("openwaiting==" + msg); + return data.self.handleDiagOpen(msg, "投注确认中", { + padding: "10px 10px 10px 10px", + width: "100%", + height: "64px", + zz: "true", + size: "38px" + }, null, null, null, true); }; - msg = React.createElement("center", null, React.createElement(Spinner, { - "spinnerName": 'circle', - "noFadeIn": true, - "overrideSpinnerClassName": "cspinner" - })); - console.log("openmsg==" + msg); - return this.handleDiagOpen(msg, "投注确认中", { - padding: "10px 10px 10px 10px", - width: "100%", - height: "64px", - zz: "true", - size: "38px" - }, null, null, null, true); + return this.handleDiagOpen(items, title, { + padding: "10px 10px 10px 20px" + }, CB, { + items: submititems, + self: this + }); }, handleSelectConfirm: function() { var bonnerMoney, cb, countAnMoney, money, newstate, scCOM, scState, selectList, totalWagers, v, wname; @@ -188,7 +180,7 @@ CQSSC_Wagers = React.createClass({ selectList = this.refs["selectList"]; money = scCOM.getMoneyTotal(); bonnerMoney = scCOM.getBonnerMoney(); - v = selectList.addItem(wname, scState.wagerballs, scState.wagercount, money, scState.moneyType, scState.multi, bonnerMoney); + v = selectList.addItem(wname, scState.wagerballs, scState.wagercount, money, scState.moneyType, scState.multi, bonnerMoney, scCOM.getBonnerRatio()); if (v) { GL_CQSSC.clearWager(); GL_CQSSC.cleanSelectBalls(); diff --git a/webui/package.json b/webui/package.json index 58a08cae..b83baee6 100644 --- a/webui/package.json +++ b/webui/package.json @@ -16,6 +16,7 @@ "coffee-script": "latest", "coffeeify": "latest", "cssify": "^1.0.2", + "dateformat": "^1.0.12", "del": "~0.1.3", "gulp": ">=3.8.8", "gulp-autoprefixer": "~1.0.1",