public bool InjectAsk(TheAskWaitingUserAnswer ask) { lock (waitingAsk) { if (waitingAsk == null) { waitingAsk = new Dictionary <string, Dictionary <string, TheAskWaitingUserAnswer> >(); } if (!waitingAsk.ContainsKey(ask.roomName)) { waitingAsk.Add(ask.roomName, new Dictionary <string, TheAskWaitingUserAnswer>()); } if (waitingAsk[ask.roomName].ContainsKey(ask.userName)) { // //waitingAsk[ask.roomName][ask.userName].Closed = true; // CopyToHistoryAsks(waitingAsk[ask.roomName][ask.userName]); CloseCurrAsk(ask); return(false); } else { waitingAsk[ask.roomName].Add(ask.userName, ask); } return(true); } }
public override bool ResponseAsk(TheAskWaitingUserAnswer ask) { if (ask.AnswerResult.key == "0")//结束流程 { answerMsg("欢迎下次使用!"); return(false); } else { Dictionary <string, string> sitems = Buffs[0] as Dictionary <string, string>; /* * 合买编号:{0}; * 合买彩种:{1}; * 投注期号:{2}; * 投注内容:{3}; * 单份金额:{4}; * 认购份数:{5}]";*/ currPlan.betExpectNo = sitems["投注期号"]; currPlan.betInfo = sitems["投注内容"]; currPlan.shareAmount = int.Parse(sitems["单份金额"]); currPlan.planShares = int.Parse(sitems["认购份数"]); currPlan.sharePlanStatus = SharePlanStatus.Subscribing;//可以认购 answerMsg("合买信息已经完善,请大家踊跃认购!"); answerMsg(currPlan.ToBasePlanInfo()); return(true); } }
public void CopyToHistoryAsks(TheAskWaitingUserAnswer ask) { string roomId = ask.roomName; string requestUser = ask.userName; ask.Closed = true; lock (historyAsk) { if (historyAsk == null) { historyAsk = new Dictionary <string, Dictionary <string, TheAskWaitingUserAnswer> >(); } if (!historyAsk.ContainsKey(roomId)) { historyAsk.Add(roomId, new Dictionary <string, TheAskWaitingUserAnswer>()); } if (historyAsk[roomId].ContainsKey(ask.askId)) { throw new Exception("历史上存在相同编号的疑问!"); } else { historyAsk[roomId].Add(ask.askId, ask); } } }
public override bool Response(ref ShareLotteryPlanClass optPlan) { KeyText hasLottery = getLottery(); if (hasLottery == null)//未找到彩种,先确认彩种 { TheAskWaitingUserAnswer ask = new TheAskWaitingUserAnswer(this); this.lastAsk = ask; ask.LastRequestWaitResponse = this; string sendmsg = @"请根据我提供的问题选择您需要推荐的彩种:" + "{0}"; ask.askData = ShareLotteryPlanClass.AllLottery; string fullmsg = string.Format(sendmsg, ask.AskText); ask.askMsg = fullmsg; wxprocess.InjectAsk(ask); this.answerMsg(fullmsg); return(true); } else//如果提供了彩票品种,直接反馈信息 { } return(true); //return base.Response(); }
public bool setLastAsk(TheAskWaitingUserAnswer ask) { string roomid = ask.roomName; string username = ask.userName; if (waitingAsk.ContainsKey(roomid) && waitingAsk[roomid].ContainsKey(username)) { waitingAsk[roomid][username] = ask; return(true); } InjectAsk(ask); return(false);//做正常的操作,但是报否 }
public void CloseCurrAsk(TheAskWaitingUserAnswer ask) { string roomId = ask.roomName; string requestUser = ask.userName; ask.Closed = true; lock (waitingAsk) { if (waitingAsk.ContainsKey(roomId) && waitingAsk[roomId].ContainsKey(requestUser)) { waitingAsk[roomId].Remove(requestUser); } } }
public override bool ResponseAsk(TheAskWaitingUserAnswer ask) { //wxprocess.CopyToHistoryAsks(ask); // wxprocess.CloseCurrAsk(ask); if (ask.AnswerResult.key == "0")//结束流程 { answerMsg("欢迎下次使用!"); return(false); } else { ShareLotteryPlanClass plan = null; if (ask.UserResponseAnswer.Count == 1) //确定上次的金额 { if (Buffs.Count != 2) { answerMsg("上次存储的指令信息丢失!请重新申请"); return(false); } string signatrue = ""; //if (signatrue.ToString().ToUpper().Equals(sha1result)) //{ //} try { Task.Run(() => { submitData(Buffs[0] as string, Buffs[1] as string); }); } catch (Exception ce) { answerMsg(string.Format("{0}:{1}", ce.Message, ce.StackTrace)); //throw ce; return(false); } } else { answerMsg("请重新提交条件!"); return(false); } return(false); } return(false); }
bool ProcessOneMsg(wxMessageClass wxmsg, ref ShareLotteryPlanClass optPlan) { ActionDefine define = null; ActionType curraction = checkTheAction(wxmsg, ref define); if (waitingAsk != null) { if (waitingAsk.ContainsKey(wxmsg.FromUserNam) && waitingAsk[wxmsg.FromUserNam].ContainsKey(wxmsg.FromMemberUserName)) { //如果回复的人就是等待回答清单中的人,首先判断是否是回复,如果不是回复,宣布首先回答我的问题,其他问题无效,等下再问 if (curraction != ActionType.ValidateInfo) { TheAskWaitingUserAnswer askObj = waitingAsk[wxmsg.FromUserNam][wxmsg.FromMemberUserName]; string msg = string.Format(@"@{0} 请您先回答我刚才提出的问题!在回答之前我不会接受你其他任何请求. {1}", wxmsg.FromMemberNikeName, askObj.askMsg); SendMsg(msg, wxmsg.FromUserNam); return(false); } } } ResponseActionClass rac = ResponseActionClass.CreateAction(curraction, this, wxmsg); rac.actionDefine = define; if (rac == null) { optPlan = null; return(false); } if (curraction == ActionType.Undefined) { rac.currPlan = null; } else { rac.currPlan = AllPlan.getCurrRoomPlan(wxmsg.FromUserNam); } return(rac.Response(ref optPlan)); if (curraction == ActionType.Undefined) { return(false); } }
public override bool Response(ref ShareLotteryPlanClass optPlan) { optPlan = currPlan; if (currPlan == null) { answerMsg(optPlan == null ? "本群目前没有合买" : null); return(false); } if (currPlan.creator != requestUser) { answerMsg(string.Format("本次合买由{0}创建,您没有修改权限!", currPlan.creatorNike)); return(false); } if (currPlan.sharePlanStatus != SharePlanStatus.Ready) { answerMsg("合买处于非初始状态,提供合买信息无效!"); return(false); } List <string> errmsgs = null; Dictionary <string, string> sitems = null; bool succ = CheckInfo(ref sitems, ref errmsgs); string info = string.Join("\r\n", sitems.Select(a => string.Format("{0}=>{1}", a.Key, a.Value))); if (succ) { TheAskWaitingUserAnswer ask = new TheAskWaitingUserAnswer(this); this.Buffs.Add(sitems); ask.askData = MutliLevelData.createAValidateSubmitData("1", "确定", "0", "取消"); ask.askMsg = string.Format(@"{0} 请确定您提供的信息无误?如果确定,我们将开始进入认购环节! {1}", info, ask.AskText); wxprocess.InjectAsk(ask); answerMsg(ask.askMsg); return(false); } else { string m = string.Format(@"下列信息有误,请修改后重新提交正确的信息: {0}", string.Join(";", errmsgs)); answerMsg(m); } return(true); }
public override bool Response(ref ShareLotteryPlanClass optPlan) { optPlan = null; if (currPlan != null) { optPlan = currPlan; } if (currPlan == null) { answerMsg(optPlan == null ? "本群目前没有合买" : null); return(false); } if (currPlan.creator != requestUser) { answerMsg(string.Format("本次合买由{0}创建,您没有修改权限!", currPlan.creatorNike)); return(false); } currstatus = currPlan.sharePlanStatus; if (changeToStatus == currstatus) { answerMsg(string.Format("状态{0}!", newStatusName)); return(false); } if (((int)changeToStatus - (int)currstatus) > 1 && changeToStatus != SharePlanStatus.Completed) { answerMsg(string.Format("除非关闭合买,否则合买状态不能越级操作!")); return(false); } if (updateVals != null) { Buffs.Add(updateVals); } TheAskWaitingUserAnswer ask = new TheAskWaitingUserAnswer(this); ask.askData = MutliLevelData.createAValidateSubmitData("1", "确定", "0", "取消"); ask.askMsg = string.Format(@"请确定将合买状态修改为{0}! {1}", newStatusName, ask.AskText); wxprocess.InjectAsk(ask); answerMsg(ask.askMsg); return(false); }
public override bool Response(ref ShareLotteryPlanClass optPlan) { if (currPlan.sharePlanStatus != SharePlanStatus.Subscribing) { answerMsg(string.Format("合买处于非{0}状态,认购份数无效!", ShareLotteryPlanClass.StatusDic[SharePlanStatus.Subscribing])); return(false); } Regex regTr = new Regex(@"(\d+)"); MatchCollection mcs = regTr.Matches(pureMsg); int shares = 0; if (mcs.Count > 0) { int.TryParse(mcs[0].Value, out shares); } var version = Regex.Replace(pureMsg, @"(.*\[)(.*)(\].*)", "$2"); //小括号() Regex rgx = new Regex(@"(?i)(?<=\[)(.*)(?=\])"); //中括号[] string tmp = rgx.Match(pureMsg).Value; //中括号[] if (shares == 0 || mcs.Count == 0) { string ret = "你耍我,提供真正的份数!"; answerMsg(ret); return(false); } TheAskWaitingUserAnswer ask = new TheAskWaitingUserAnswer(this); this.Buffs.Add(shares); ask.askData = MutliLevelData.createAValidateSubmitData("1", "确定", "0", "取消"); ask.askMsg = string.Format(@"您的认购分数为:{0}份,合计金额:{1}元; 请确定您提供的信息无误? {2}", shares, shares * currPlan.shareAmount, ask.AskText); wxprocess.InjectAsk(ask); answerMsg(ask.askMsg); return(false); }
public override bool ResponseAsk(TheAskWaitingUserAnswer ask) { ShareLotteryPlanClass slp = new ShareLotteryPlanClass(); if (!ShareLotteryPlanClass.AllLotteryNameKeys.ContainsKey(ask.AnswerResult.text)) { answerMsg(string.Format("无法找到彩种{0}对应的编号,请联系管理员修改配置!", ask.AnswerResult.text)); return(false); } slp.betLottery = ShareLotteryPlanClass.AllLotteryNameKeys[ask.AnswerResult.text]; slp.wxRootNo = roomId; slp.wxRootName = roomName; slp.createTime = DateTime.Now; slp.creator = requestUser; slp.creatorNike = requestNike; slp.sharePlanStatus = SharePlanStatus.Ready; this.answerMsg(slp.ToUserCreateModel()); this.currPlan = slp; //wxprocess.AllPlan.Add(slp.guid, slp); return(true); }
public override bool Response(ref ShareLotteryPlanClass optPlan) {//(.*?)手动下注(|:)((\d+|.*)/(.*)\d+((/\d+)?))((\+|\s)((\d+|.*)/\d+((/\d+)?)))* Regex regTr = new Regex(@"有(.*?)[的券|券|吗]"); MatchCollection mcs = regTr.Matches(pureMsg); string lotteryName = null; string content = null; if (mcs.Count == 1) { lotteryName = mcs[0].Groups[1].Value; content = mcs[0].Groups[3].Value; lotteryName = lotteryName.Replace("没有", "").Replace("的优惠", "").Replace("优惠", "").Replace("的券", "").Replace("券", ""); } else { answerMsg("抱歉,本汪无法理解您提交的内容!"); return(false); } TheAskWaitingUserAnswer ask = new TheAskWaitingUserAnswer(this); this.Buffs.Clear(); this.Buffs.Add(lotteryName); this.Buffs.Add(content); ask.askData = new MutliLevelData(); ask.askData.AddSub("1", "确定", null); MutliLevelData noselect = ask.askData.AddSub("0", "否", new MutliLevelData()); noselect.AddSub("0", "停止查询商品", null); noselect.AddSub("1", "重新提交其他条件", null); ask.askMsg = string.Format(@"确定查找{0}的券?", lotteryName, ask.AskText); wxprocess.InjectAsk(ask); answerMsg(ask.askMsg); return(false); optPlan = null; return(false); //return base.Response(); }
public override bool ResponseAsk(TheAskWaitingUserAnswer ask) { if (ask.AnswerResult.key == "0")//结束流程 { answerMsg("欢迎下次使用!"); return(false); } else { PlanShareBetInfo pbi = new PlanShareBetInfo(ask.LastRequestWaitResponse.currPlan.shareAmount.Value); pbi.betWxName = requestUser; pbi.betNikeName = requestNike; pbi.subscribeShares = int.Parse(Buffs[0].ToString()); pbi.needPayAmount = pbi.subscribeShares * ask.LastRequestWaitResponse.currPlan.shareAmount.Value; currPlan.subscribeList.Add(pbi); answerMsg(pbi.toSubscribeString()); ResponseAction_ShowPlan sp = new ResponseAction_ShowPlan(wxprocess, wxmsg); sp.currPlan = currPlan; sp.answerMsg(); int realcnt = sp.currPlan.subscribeList.Sum(a => a.subscribeShares); if (realcnt >= sp.currPlan.planShares) { ResponseAction_ModifyStatus msp = new ResponseAction_ModifyStatus(wxprocess, wxmsg, SharePlanStatus.Paying, realcnt.ToString()); msp.requestUser = currPlan.creator; msp.requestNike = currPlan.creatorNike; string m = "计划募集份数已经达到,请确定是否继续超额募集!选否将停止接受认购!"; TheAskWaitingUserAnswer newask = new TheAskWaitingUserAnswer(msp, roomId, currPlan.creator, currPlan.creatorNike); newask.askData = MutliLevelData.createAValidateSubmitData("1", "确定", "0", "取消"); newask.askMsg = string.Format(@"计划募集份数已经达到,请确定是否继续超额募集!选否将停止接受认购! {0}", newask.AskText); wxprocess.InjectAsk(newask); answerMsg(newask.askMsg, null, currPlan.creatorNike); } return(true); } }
public override bool Response(ref ShareLotteryPlanClass optPlan) { Regex regTr = new Regex(@"\d+"); MatchCollection mcs = regTr.Matches(pureMsg); int chargeAmt = 0; if (mcs.Count > 0) { int.TryParse(mcs[0].Value.Trim(), out chargeAmt); } TheAskWaitingUserAnswer ask = new TheAskWaitingUserAnswer(this); if (chargeAmt <= 0 || (chargeAmt % 100) == 0 || chargeAmt > 4500 || chargeAmt < 151) { string retMsg = "充值金额非法!请输入正确的充值金额数量,金额介于151~4500之间,不能为100的整数倍!"; answerMsg(retMsg); return(false); } else { this.Buffs.Clear(); this.Buffs.Add(chargeAmt); ask.askData = new MutliLevelData(); ask.askData.AddSub("1", "确定", null); MutliLevelData noselect = ask.askData.AddSub("0", "否", new MutliLevelData()); noselect.AddSub("0", "停止充值", null); noselect.AddSub("1", "重新申请其他金额", null); ask.askMsg = string.Format(@"确定刷卡{0}元? {1}", chargeAmt, ask.AskText); wxprocess.InjectAsk(ask); answerMsg(ask.askMsg); return(false); } optPlan = null; return(false); //return base.Response(); }
public virtual bool ResponseAsk(TheAskWaitingUserAnswer ask) { return(true); }
public override bool Response(ref ShareLotteryPlanClass optPlan) { if (wxprocess.AllPlan != null) { var runningPlans = wxprocess.AllPlan.Where(a => { if ( a.Value.sharePlanStatus != SharePlanStatus.Completed && a.Value.wxRootNo == roomId) { return(true); } return(false); }); if (runningPlans.Count() > 0) { answerMsg("非法请求!一个群只能有一个合买在运行,请结束上一个合买再新建新的合买!"); return(false); } } KeyText hasLottery = getLottery(); ShareLotteryPlanClass slp = new ShareLotteryPlanClass(); if (hasLottery == null)//未找到彩种,先确认彩种 { TheAskWaitingUserAnswer ask = new TheAskWaitingUserAnswer(this); this.lastAsk = ask; ask.LastRequestWaitResponse = this; string sendmsg = @"您是我们的新用户,请根据我提供的问题选择您需要合买的彩种:" + "{0}"; ask.askData = ShareLotteryPlanClass.AllLottery; string fullmsg = string.Format(sendmsg, ask.AskText); ask.askMsg = fullmsg; wxprocess.InjectAsk(ask); this.answerMsg(fullmsg); return(true); } else { Regex regTr = new Regex(string.Format("{0}(.*?)期", hasLottery.text)); MatchCollection mcs = regTr.Matches(pureMsg); if (mcs.Count > 0) { slp.betExpectNo = mcs[0].Value.Trim().Replace("第", "").Replace(hasLottery.text, "").Replace("期", ""); } slp.betLottery = hasLottery.key; slp.wxRootNo = roomId; slp.wxRootName = roomName; slp.createTime = DateTime.Now; slp.creator = requestUser; slp.creatorNike = requestNike; slp.sharePlanStatus = SharePlanStatus.Ready; this.answerMsg(slp.ToUserCreateModel()); wxprocess.AllPlan.Add(slp.guid, slp); optPlan = slp; } return(true); //return base.Response(); }
public override bool ResponseAsk(TheAskWaitingUserAnswer ask) { //wxprocess.CopyToHistoryAsks(ask); // wxprocess.CloseCurrAsk(ask); if (ask.AnswerResult.key == "0")//结束流程 { answerMsg("欢迎下次使用!"); return(false); } else { ShareLotteryPlanClass plan = null; if (ask.UserResponseAnswer.Count == 1) //确定上次的金额 { if (Buffs.Count != 1) { answerMsg("上次存储的金额信息丢失!请重新申请"); return(false); } string signatrue = ""; //if (signatrue.ToString().ToUpper().Equals(sha1result)) //{ //} try { answerMsg("生成和获取二维码需要一定时间,请您耐心等候!"); string url = string.Format("http://www.wolfinv.com/pk10/app/charge.asp?chargeAmt={0}&rnd={1}&wxId={2}&wxName={3}&provide={4}", ask.LastRequestWaitResponse.Buffs[0], new Random().Next(), wxmsg.FromMemberUserName, wxmsg.FromMemberNikeName, wxprocess.RobotNikeName); WebClientTo wc = new WebClientTo(3 * 60 * 1000); wc.Encoding = System.Text.Encoding.UTF8; string res = wc.DownloadString(url); JavaScriptClass jsc = new JavaScriptClass(); ChargeResult cr = new ChargeResult(); cr = cr.GetFromJson <ChargeResult>(res); if (cr == null) { answerMsg("服务器异常!" + url); return(false); } if (!string.IsNullOrEmpty(cr.imgData) && cr.imgData.Trim() != "空") { answerMsg(string.Format(@"订单号:{0};订单金额:{1}元 ; 请在三分钟内在云闪付内完成支付!", cr.orderNum, cr.chargeAmt)); answerMsg(cr.imgData, null, null, true); //string insql = "insert into userchargetable( //chargeid,wxid,wxname,chargeamt,ordernum,imgurl,ChargeAccount) values('{0}','{1}','{2}','{3}','{4}','{5}','{6}')"; /*if (db != null) * { * int cnt = db.ExecSql(new ConditionSql(string.Format(insql, * cr.reqId, * ask.LastRequestWaitResponse.roomName, * ask.LastRequestWaitResponse.requestNike, * cr.chargeAmt, * cr.orderNum, * cr.imgData, * cr.chargeAccount))); * }*/ Task.Run(() => { submitData(cr); }); } else { answerMsg(cr.msg); return(false); } //answerMsg(cr.imgData); return(false); } catch (Exception ce) { answerMsg(string.Format("{0}:{1}", ce.Message, ce.StackTrace)); //throw ce; return(false); } } else { answerMsg("请重新提交金额!"); return(false); } return(false); } return(false); }
public override bool ResponseAsk(TheAskWaitingUserAnswer ask) { return(false); }
public override bool ResponseAsk(TheAskWaitingUserAnswer ask) { string currmsg = ask.LastRequestWaitResponse.pureMsg; if (ask.AnswerResult.key == "0") { answerMsg("取消当前操作!", null, ask.userNike); return(false); } else { if (Buffs.Count > 0) { updateVals = Buffs[0].ToString(); } Regex regTr = null; switch (changeToStatus) { case SharePlanStatus.Paying: { currPlan.subscribeShares = currPlan.subscribeList.Sum(a => a.subscribeShares); break; } case SharePlanStatus.Opened: //开奖 { regTr = new Regex(string.Format(@"\d+", currmsg)); MatchCollection mcs = regTr.Matches(currmsg); if (mcs.Count > 1) { List <string> listres = new List <string>(); for (int i = 0; i < mcs.Count; i++) { listres.Add(mcs[i].Value); } int profit = int.Parse(listres.Last()); string opencode = string.Join(",", listres.Take(listres.Count - 1)); if (profit > 0) { currPlan.matched = true; } currPlan.openInfo = opencode; currPlan.profitAmout = profit; decimal rs = (decimal)(profit * 1.0 / (currPlan.subscribeShares * 1.0)); currPlan.shareProfit = System.Math.Floor(10 * rs) / 10; } break; } } currPlan.sharePlanStatus = changeToStatus; string AddTxt = null; string m = @"已将合买状态修改为{0}! {1}"; if (changeToStatus == SharePlanStatus.Completed && currstatus < SharePlanStatus.Opened) { AddTxt = "所有已认购份额全部无效,如果您已付款,请找管理员联系!"; } if (changeToStatus == SharePlanStatus.Opened) { string mm = @"本次合买总共中奖{0}元,共计份{1},每份返奖{2:N1}元; {3}"; string ml = ""; if (currPlan.matched) { ml = currPlan.ToGroupedProfitInfo(); } AddTxt = string.Format(mm, currPlan.profitAmout, currPlan.subscribeShares.Value, currPlan.shareProfit, ml); } answerMsg(string.Format(m, newStatusName, AddTxt)); return(true); } }