申述订单后台管理
# 申述后台审核
## 功能简介
 用户对于某笔正在进行的订单进行申述,管理人员介入之后进行操作。
## 代码流程
1. 订单成立
1. 申述订单成立接口
1.  接口:admin/exchange/otcapptransaction/orderCompleted.do
2.  代码结构:hry/admin/exchange/controller/OtcAppTransactionController/orderCompleted
3.  实现内容:
1. 根据订单号查询订单信息,根据订单状态是否为5或者14来判断订单是否失效。
2. 设置订单状态为14,以及支付时间,更新订单表信息。
3. 将订单存到redis"otc:queue"队列中,发布名为"otcCompletionRate"的消息,用于计算用户的订单完成率。
4. 判断如果此笔订单的广告如果是卖单,则发送消息队列来扣除对应订单数量卖家被冻结的币,加上手续费。但是如果是买单,则将手续费退还给卖家。
5. 发送消息队列来增加买家的热钱包的数量。
6. 记录手续费的流水账单到手续费台账数据库。
2. 订单取消
1. 申述订单取消接口
1.  接口:admin/exchange/otcapptransaction/cancleOrder.do
2.  代码结构:
hry/admin/exchange/controller/OtcAppTransactionController/cancleOrder
3.  实现内容:
1. 查询订单状态是否为5,判断是否重复取消。
2. 在redis中加入"cancleOrderLock:"分布式锁。
3. 查询订单的状态是否为15或者16,判断订单是否在申述状态。
4. 修改订单状态为5,已取消,更新订单表数据。添加到"otc:queue"队列,发送消息到"otcCompletionRate",用于计算用户订单完成率。
5. 拿到订单相关广告,回复广告状态为开启和未交易。判断如果是吃卖单,则设置广告的币的最大数量加上交易金额和手续费。
6. 如果订单的总价大于等于广告的单价*百分比汇率。将广告的属性返回到这笔订单发生前的属性。如果最大可交易的币大约等于最小可交易的币则重新开启广告,并且从redis拿到用户钱包信息,以及"otc:ReleaseAdvertisementAfterColse:"将要关闭的订单信息。冻结卖家钱包,删除"otc:ReleaseAdvertisementAfterColse:" redis。
7. 如果是发布的购买广告则不会有冻结币,所以返还步骤6中卖家冻结的币。
8. 释放锁,返回信息。
3. 申述驳回
1. 申述驳回接口
1.  接口:admin/exchange/otcapptransaction/examineAndreject.do
2.  代码结构:hry/admin/exchange/controller/OtcAppTransactionController/examineAndreject
3.  实现内容:
1. 根据订单号等信息查询数据库订单信息。
2. 判断如果平台回复信息是否为空,更新订单的平台回复信息。更改订单状态为前台传过来的值。
3. 修改订单数据库信息,判断状态码,返回相应提示。