委托订单

 

 //TODO这个函数写的比较拥挤,我现在也没有什么办法,把事务当作参数传递时出错,目前还没有什么好的解决办法。?????
 func EntrusteSuccess(main_coin_id, trade_coin_id string) []string {
 	var save []string

 	buyPrice, orderBuySn, _ := TakeBuyPriceList(main_coin_id, trade_coin_id)
 	sellPrice, orderSellSn, _ := TakeSellPriceList(main_coin_id, trade_coin_id)
 	fmt.Println(orderBuySn)
 	fmt.Println(orderSellSn)
 	// 使用循环一直处理买卖问题??

 	var i int = 0
 	var j int = 0

 	//开启事务
 	//tx, _ := model.Db.Begin()
 	//defer tx.Rollback()
 	//在这开启事务后果导致不进入else分支
 	//《三角形》 有异常怎么设置回滚
 	for i < len(orderBuySn) && j < len(orderSellSn) {

 		//查询买方的信息(交易数量) 和 卖方的信息(交易数量)//什么时候提出无用元素
 		entrustBuy, _ := GetEntrusteOrdersInfoByOrderSn(orderBuySn[i])
 		entrustSell, _ := GetEntrusteOrdersInfoByOrderSn(orderSellSn[j])

 		//假如以买家为基准,买方中最高的>卖方中最低的交易成功
 		if buyPrice[i] >= sellPrice[j] {

 			//比较买方和卖方交易剩余数量
 			//买家交易完成
 			if (entrustBuy.Quantity - entrustBuy.Done_quantity) <= (entrustSell.Quantity - entrustSell.Done_quantity) {
 				//交易成功, 更新数据库
 				tx, _ := model.Db.Begin()
 				defer clearTransaction(tx)
 				rs, err := tx.Prepare(`UPDATE ww_entrusted_orders SET done_quantity = ? WHERE order_sn = ?`)
 				model.CheckErr(err)

 				rows, err := rs.Exec(entrustBuy.Quantity, entrustBuy.Order_sn)
 				if err != nil {
 					log.Fatalln(err)
 				}
 				rowAffected, err := rows.RowsAffected()
 				if err != nil {
 					log.Fatalln(err)
 				}
 				fmt.Println(rowAffected)

 				rs.Close()

 				//买的数据写入record表
 				re := WriteRecordByBuyOrSell(entrustBuy)

 				rows1, err := tx.Exec(`INSERT INTO ww_entrusted_record(order_sn, member_id,
 					goods_id, main_coin_id, trade_coin_id, entrusted_type, price_type, price,
 					quantity, done_trade_fee, create_time)VALUES(?,?,?,?,?,?,?,?,?,?,?)`, re.Order_sn, re.Member_id, re.Goods_id, re.Main_coin_id, re.Trade_coin_id, re.Entrusted_type, re.Price_type, re.Price, re.Quantity, re.Done_trade_fee, re.Create_time)
 				if err != nil {
 					log.Fatalln(err)
 				}
 				rowAffected, err = rows1.RowsAffected()
 				if err != nil {
 					log.Fatalln(err)
 				}
 				fmt.Println(rowAffected)

 				rs, err = tx.Prepare(`UPDATE ww_entrusted_orders SET done_quantity = done_quantity + ? WHERE order_sn = ?`)
 				model.CheckErr(err)

 				_, err = rs.Exec(entrustBuy.Quantity-entrustBuy.Done_quantity, entrustSell.Order_sn)
 				if err != nil {
 					log.Fatalln(err)
 				}
 				rowAffected, err = rows.RowsAffected()
 				if err != nil {
 					log.Fatalln(err)
 				}
 				fmt.Println(rowAffected)

 				rs.Close()

 				//卖的数据写入record表
 				//WriteRecordByBuyOrSell(&entrustSell)
 				re1 := WriteRecordByBuyOrSell(entrustSell)

 				rows, err = tx.Exec(`INSERT INTO ww_entrusted_record(order_sn, member_id,
 					goods_id, main_coin_id, trade_coin_id, entrusted_type, price_type, price,
 					quantity, done_trade_fee, create_time)VALUES(?,?,?,?,?,?,?,?,?,?,?)`, re1.Order_sn, re1.Member_id, re1.Goods_id, re1.Main_coin_id, re1.Trade_coin_id, re1.Entrusted_type, re1.Price_type, re1.Price, re1.Quantity, re1.Done_trade_fee, re1.Create_time)
 				if err != nil {
 					log.Fatalln(err)
 				}
 				rowAffected, err = rows.RowsAffected()
 				if err != nil {
					log.Fatalln(err)
 				}
 				fmt.Println(rowAffected)

				save = append(save, entrustBuy.Order_sn)

 				i++

 				//提交事务
 				if err = tx.Commit(); err != nil {
 					log.Fatalln(err)
 				}
 			} else { //卖家交易完成

 				tx, _ := model.Db.Begin()
 				defer clearTransaction(tx)
 				//交易成功, 更新数据库
 				rs, err := tx.Prepare(`UPDATE ww_entrusted_orders SET done_quantity = done_quantity + ? WHERE order_sn = ?`)
 				model.CheckErr(err)

 				rows, err := rs.Exec(entrustSell.Quantity-entrustSell.Done_quantity, entrustBuy.Order_sn)
 				if err != nil {
 					log.Fatalln(err)
 				}
 				rowAffected, err := rows.RowsAffected()
 				if err != nil {
 					log.Fatalln(err)
 				}
 				fmt.Println(rowAffected)

 				rs.Close()

 				re := WriteRecordByBuyOrSell(entrustBuy)

 				rows, err = tx.Exec(`INSERT INTO ww_entrusted_record(order_sn, member_id,
 					goods_id, main_coin_id, trade_coin_id, entrusted_type, price_type, price,
 					quantity, done_trade_fee, create_time)VALUES(?,?,?,?,?,?,?,?,?,?,?)`, re.Order_sn, re.Member_id, re.Goods_id, re.Main_coin_id, re.Trade_coin_id, re.Entrusted_type, re.Price_type, re.Price, re.Quantity, re.Done_trade_fee, re.Create_time)
 				if err != nil {
 					log.Fatalln(err)
 				}
 				rowAffected, err = rows.RowsAffected()
 				if err != nil {
 					log.Fatalln(err)
 				}
 				fmt.Println(rowAffected)

 				rs, err = tx.Prepare(`UPDATE ww_entrusted_orders SET done_quantity = ? WHERE order_sn = ?`)
 				model.CheckErr(err)

 				rows, err = rs.Exec(entrustSell.Quantity, entrustSell.Order_sn)
 				if err != nil {
 					log.Fatalln(err)
 				}
 				rowAffected, err = rows.RowsAffected()
 				if err != nil {
 					log.Fatalln(err)
 				}
 				fmt.Println(rowAffected)
 				rs.Close()

 				//卖的数据写入record表
 				//都是指针惹的祸
 				//WriteRecordByBuyOrSell(&entrustSell)
 				re1 := WriteRecordByBuyOrSell(entrustSell)
 				rows, err = tx.Exec(`INSERT INTO ww_entrusted_record(order_sn, member_id,
 					goods_id, main_coin_id, trade_coin_id, entrusted_type, price_type, price,
 					quantity, done_trade_fee, create_time)VALUES(?,?,?,?,?,?,?,?,?,?,?)`, re1.Order_sn, re1.Member_id, re1.Goods_id, re1.Main_coin_id, re1.Trade_coin_id, re1.Entrusted_type, re1.Price_type, re1.Price, re1.Quantity, re.Done_trade_fee, re1.Create_time)
 				if err != nil {
 					log.Fatalln(err)
 				}
 				rowAffected, err = rows.RowsAffected()
 				if err != nil {
 					log.Fatalln(err)
 				}
 				fmt.Println(rowAffected)

 				save = append(save, entrustSell.Order_sn)

 				j++

 				//提交事务
 				if err = tx.Commit(); err != nil {
 					log.Fatalln(err)
 				}
 			}
 		} else {
 			j++
 		}
 	}

 	return save
 }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值