| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367 |
- var tmpPaodekuai2 = '''{{#source#-跑得快
- 房号: #orderNo# 局数: #dump#
- 结束时间: #orderTime#
- #person_1#: #amount_1#
- #person_2#: #amount_2#}}''';
- var orderPaodekuai2 = '''四川游戏家园-跑得快
- 房号: 108700 局数: 10局
- 结束时间: 2020-04-19 15:05:31
- 阿帝888: -100
- 婚礼婚礼: 100''';
- var orderPaodekuai2_1 = '''四川游戏家园-跑得快
- 房号: 379170 局数: 10局
- 结束时间: 2020-11-18 17:39:05
- 狂文颓废: -100
- 张三: 100''';
- var orderPaodekuai2_2 = '''四川游戏家园-跑得快
- 房号: 416189 局数: 10局
- 结束时间: 2020-11-20 21:02:55
- 时光流逝话藏: -80
- 沉沦、: 80''';
- var order2 = '''ㄣ熊猫四川麻将ㄣ 2020-10-17 22:01
- 二人一房 局8/8 回老家了看看
- 玩家小刀(ゅ≈房主≈ゅ)ID:3211739【78】
- 玩家人之初 ???? ?ID:400932310【-78】''';
- var tmp2 = '''{{ㄣ#source#ㄣ #orderTime#
- #dump#
- 玩家#person_1#ID:#id_1#【#amount_1#】
- 玩家#person_2#ID:#id_2#【#amount_2#】}}''';
- var orderDuangouqia2 = '''四川游戏家园-二人断勾卡
- 房号: 599792 局数: 8局
- 结束时间: 2020-11-18 18:56
- 微笑_MF: +15
- 芬芳_Fw: -15''';
- var tmpDuangouqia2 = '''{{#source#-二人断勾卡
- 房号: #orderNo# 局数: #dump#
- 结束时间: #orderTime#
- #person_1#: #amount_1#
- #person_2#: #amount_2#}}''';
- var orderDoushisi2 = '''四川游戏家园-斗十四
- 房号: 801673 局数: 8局
- 结束时间: 2020-11-18 17:54
- 红霞_3m: +1880
- 乐永林13880806281邑雪农业: -1880''';
- var tmpDoushisi2 = '''{{#source#-斗十四
- 房号: #orderNo# 局数: #dump#
- 结束时间: #orderTime#
- #person_1#: #amount_1#
- #person_2#: #amount_2#>0.1}}''';
- var orderDuangouqiaXuezhanMajiang3 = '''四川游戏家园-断勾卡血战麻将
- 房号: 421617 局数: 8局
- 结束时间: 2020-11-18 19:19
- 无可不可: +80
- 模棱两可: +20
- 小鱼儿_RT: -100''';
- var tmpDuangouqiaXuezhanMajiang3 = '''{{#source#-断勾卡血战麻将
- 房号: #orderNo# 局数: #dump#
- 结束时间: #orderTime#
- #person_1#: #amount_1#
- #person_2#: #amount_2#
- #person_3#: #amount_3#}}''';
- var orderPaodekuai3 = '''四川游戏家园-跑得快
- 房号: 910618 局数: 10局
- 结束时间: 2020-11-18 19:21:33
- 小鱼儿_RT: -10
- 模棱两可: 16
- 无可不可: -6''';
- var tmpPaodekuai3 = '''{{#source#-跑得快
- 房号: #orderNo# 局数: #dump#
- 结束时间: #orderTime#
- #person_1#: #amount_1#
- #person_2#: #amount_2#
- #person_3#: #amount_3#}}''';
- var orderDoushisi3 = '''四川游戏家园-斗十四
- 房号: 666541 局数: 8局
- 结束时间: 2020-11-18 19:23
- 张三: +22400
- 无可不可: -11200
- 模棱两可: -11200''';
- var tmpDoushisi3 = '''{{#source#-斗十四
- 房号: #orderNo# 局数: #dump#
- 结束时间: #orderTime#
- #person_1#: #amount_1#
- #person_2#: #amount_2#
- #person_3#: #amount_3#>0.01}}''';
- var tmpDuangouqia2_2 = '''{{#source#-二人断勾卡
- 房号:#orderNo#
- 底分:#dump1#
- 类型:#dump2#
- 结束时间:#orderTime#
- 玩家1:#person_1#(#id_1#) #amount_1#
- 玩家2:#person_2#(#id_2#) #amount_2#}}''';
- var orderDuangouqia2_2 = '''四川游戏家园-二人断勾卡
- 房号:812784
- 底分:13
- 类型:8局
- 结束时间:2020-11-24 10:27
- 玩家1:Ly_eu(20852233) +338
- 玩家2:无可不可(22199143) -338''';
- void main() {
- var info = parseString2(tmpDuangouqia2_2, orderDuangouqia2_2);
- print(info);
- var orders = parse2(info);
- print(orders);
- }
- class OrderStakeHolder2 {
- String name;
- int id;
- var amount;
- OrderStakeHolder2(String name, int id, int amount) {
- this.name = name;
- this.amount = amount;
- this.id = id;
- }
- @override
- String toString() {
- return '{\"name\": \"$name\", \"id\":$id,\"amount\": $amount}';
- }
- }
- class OrderInfo2 {
- String source; //订单来源
- String no; // 原订单号
- String time; //原下单时间
- OrderStakeHolder2 payer; //付款人
- OrderStakeHolder2 seller; //赢家
- double factor;
- @override
- String toString() {
- return '{\"source\": \"$source\", \"no\": \"$no\", \"time\": \"$time\", \"payer\": $payer, \"seller\": $seller, \"factor\": $factor}';
- }
- }
- Map<String, String> parseString2(String tmpl, String msg) {
- var counter = 0;
- tmpl = tmpl.replaceAll('\n', '\n ');
- msg = msg.replaceAll('\n', '\n ');
- while (tmpl.indexOf(' ', 0) > 0) {
- tmpl = tmpl.replaceAll(' ', ' ');
- }
- while (msg.indexOf(' ', 0) > 0) {
- msg = msg.replaceAll(' ', ' ');
- }
- var res = Map<String, String>();
- var keyStart = false;
- var searchingKey = false;
- String key;
- String val;
- var i = 0;
- var j = 0;
- while (i < tmpl.length) {
- counter++;
- if (counter > 2000) {
- return null;
- }
- if (tmpl[i] == '{') {
- i++;
- continue;
- } else if (!searchingKey && tmpl[i] == '}') {
- res[key] = val;
- return res;
- }
- if (!searchingKey && tmpl[i] == '>') {
- res[key] = val;
- val = tmpl.substring(i + 1, tmpl.length - 2);
- res['factor'] = val;
- i = tmpl.length - 2;
- return res;
- }
- if (tmpl[i] == '#') {
- i++;
- if (!keyStart) {
- keyStart = true;
- searchingKey = true;
- key = '';
- val = '';
- continue;
- } else {
- keyStart = false;
- continue;
- }
- }
- if (keyStart) {
- key = key + tmpl[i];
- i++;
- continue;
- }
- if (searchingKey) {
- for (; j < msg.length; j++) {
- counter++;
- if (counter > 2000) {
- return null;
- }
- if (msg[j] != tmpl[i]) {
- val = val + msg[j];
- } else {
- searchingKey = false;
- res[key] = val;
- i++;
- j++;
- break;
- }
- if (searchingKey) {
- searchingKey = false;
- }
- }
- } else {
- if (msg[j] == tmpl[i]) {
- j++;
- i++;
- } else {
- return null;
- }
- }
- }
- return null;
- }
- List<OrderInfo2> parse2(Map<String, String> info) {
- String orderSource;
- String orderTime;
- String orderNo;
- double factor;
- var balance = 0;
- if (info['source'] != null) {
- orderSource = info['source'];
- }
- if (info['orderNo'] != null) {
- orderNo = info['orderNo'];
- }
- if (info['factor'] != null) {
- factor = double.parse(info['factor']);
- } else {
- factor = 1;
- }
- if (info['orderTime'] == null) {
- var t = DateTime.now();
- orderTime =
- "${t.year.toString()}-${t.month.toString().padLeft(2, '0')}-${t.day.toString().padLeft(2, '0')} ${t.hour.toString().padLeft(2, '0')}:${t.minute.toString().padLeft(2, '0')}:${t.second.toString().padLeft(2, '0')}";
- } else {
- if (info['orderTime'].length <= 16) {
- orderTime = info['orderTime'] + ':00';
- } else {
- orderTime = info['orderTime'];
- }
- }
- var sellers = List<OrderStakeHolder2>();
- var payers = List<OrderStakeHolder2>();
- var ks = info.keys.toList();
- for (var p in ks) {
- var i = p.indexOf('person');
- if (i >= 0) {
- var name = info[p];
- var pno = p.substring(i + 'person_'.length);
- var val = int.parse(info['amount_' + pno]);
- var id;
- id = 0;
- if (info['id_' + pno] != null) {
- id = int.parse(info['id_' + pno]);
- }
- if (!(val is int)) {
- return null;
- }
- balance += val;
- if (val > 0) {
- sellers.add(OrderStakeHolder2(name, id, val));
- } else if (val == 0) {
- continue;
- } else {
- payers.add(OrderStakeHolder2(name, id, -val));
- }
- } else {
- continue;
- }
- }
- if (balance != 0) {
- return null;
- }
- sellers.sort((left, right) => left.amount.compareTo(right.amount));
- payers.sort((left, right) => right.amount.compareTo(left.amount));
- var orders = List<OrderInfo2>();
- for (var p in payers) {
- var left = p.amount;
- var settled = List<OrderStakeHolder2>();
- var i = 0;
- while (left > 0) {
- var seller = sellers[i];
- if (seller.amount <= left) {
- var o = OrderInfo2();
- o.source = orderSource;
- o.time = orderTime;
- o.no = orderNo;
- o.payer = OrderStakeHolder2(p.name, p.id, seller.amount);
- o.seller = OrderStakeHolder2(seller.name, seller.id, seller.amount);
- o.factor = factor;
- orders.add(o);
- left = left - seller.amount;
- settled.add(seller);
- } else {
- var o = OrderInfo2();
- o.source = orderSource;
- o.time = orderTime;
- o.no = orderNo;
- o.payer = OrderStakeHolder2(p.name, p.id, left);
- o.seller = OrderStakeHolder2(seller.name, seller.id, left);
- o.factor = factor;
- orders.add(o);
- seller.amount -= left;
- left = 0;
- }
- i++;
- }
- for (var s in settled) {
- sellers.remove(s);
- }
- }
- return orders;
- }
- String computeOrderHash(Map<String, String> order) {
- order.remove("dump");
- order.remove('orderTime');
- var sortedKeys = order.keys.toList()..sort();
- List values = new List();
- sortedKeys.forEach((key) {
- values.add(order[key]);
- });
- print('${values.toString()}');
- return '${values.toString().hashCode}';
- }
|