发布广告
# OTC发布广告功能
## 功能简介
 该接口用于用户在otc中的发布交易广告功能。
## 代码流程
1. 获取最新市场价格
1. 获取市场价格接口
1.  接口:app/otc/user/releaseadvertisement/getPriceNow
2.  代码结构:hry/app/otc/ReleaseAdvertisementMobileController
3.  实现内容:
1. 判断币种信息是否为空
2. 判断汇率是否为空(为空设置为1)
3. 调用getPriceNew方法,返回信息
2. 获取市场价方法
1.  代码结构:hry/otc/remote/RemoteAdvertisementServiceImpl/getPriceNew
2.  实现内容:
1. 查询redis的"当前币种_USDT:currentExchangPrice"获取当前币种和USDT的汇率。<br>`String coinprice = redisService.get(coinCode + "_USDT:currentExchangPrice");`
2. 查询Redis里面的"hry:coinPrice"hash表里面的"USDT"得到USDT的法币价格。<br>`String usdtPrice = redisService.hget("hry:coinPrice","USDT");`
3. 根据coinprice和usdtPrice 以及传入的法币汇率可以算出当前币种的法币价格。
2. 发布广告信息
1. 发布广告接口
1.  接口:otc/user/releaseadvertisement/addreleaseadvertisement
2.  代码结构:hry/app/otc/ReleaseAdvertisementMobileController
3.  实现内容:
1. 查询redis的"otc:canNotBuy:"来判断用户是否被禁用。<br>`String ss = redisService.get("otc:canNotBuy:"+user.getCustomerId());`
2. 判断各种密码等信息是否正确。
3. 如果是卖单调用"getCoinAccountRedis"方法,判断热钱包币的数量是否足够。
4. 计算交易币种的当前市场价和处理溢价以后的市场价。
5. 根据固定费率或者百分比费率绑定相应的单价。(百分比费率为实时变动的市场价)
6. 调用getPersonalAsset方法拿到用户的支付方式,判断买卖方的支付方式是否符合。
7. 调用addReleaseAdvertisement方法将订单存入数据库,并且返回信息。
2. 获取用户钱包信息方法
1.  代码结构:hry/otc/remote/RemoteAdvertisementServiceImpl/getCoinAccountRedis
2.  实现内容:
1. 从"RedisDB:hry:front:redis:model:UserRedis"的redis里面查询到用户所有币种钱包的id。
2. 通过上述步骤中拿到的钱包id来查询"hry:trade:redis:model:ExDigitalmoneyAccountRedis"里面的钱包详细信息。
3. 返回钱包信息。
3. 获取用户支付方式方法
1.  代码结构:hry/otc/remote/RemoteAdvertisementServiceImpl/getPersonalAsset
2.  实现内容:
1. 通过数据库查询到用户支付方式。
2. 返回支付方式。
4. 添加广告方法
1.  代码结构:hry/otc/remote/RemoteAdvertisementServiceImpl/addReleaseAdvertisement
2.  实现内容:
1. 判断是否为卖,为卖则检查币的数量是否足够。
2. 从redis中查出"otc:coinCodeList"里面所有币种的币种信息。并筛选出此条广告的币种信息。
3. 判断是否为固定价格,如果是固定价格,判断其最低限额和最高限额。
4. 查询广告表是否已经有同币种同方向的广告。如果存在则不能再发。
5. 查询订单表,是否有正在处于交易中的同币种,同方向的广告订单。如果存在则不可以再发。
6. 推送消息队列来更新冷钱包和热钱包数量。<br>`otcService.publish(exDigitalmoneyAccount.getId(), coinNumMax, 2, 1, "", 60);
otcService.publish(exDigitalmoneyAccount.getId(), coinNumMax.multiply(new BigDecimal(-1)), 1, 1, "", 60);`
7. 判断用户的支付方式,绑定相应的广告数据到广告对象。
8. 调用"releaseAdvertisementService"的"save"方法。
9. 返回信息。