ContractServer.php 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. <?php
  2. namespace App\Servers;
  3. use App\Jobs\BusinessFileJob;
  4. use App\Jobs\MsgFileJob;
  5. use App\Models\BlockItems;
  6. use App\Models\Contract;
  7. use App\Models\ContractDistribution;
  8. use App\Models\ContractLog;
  9. use App\Models\ErrorRecord;
  10. use App\Models\Invest;
  11. use App\Models\Member;
  12. use App\Models\MemberBoth;
  13. use App\Servers\Icon\TronRPC;
  14. /**
  15. * Redis数据缓存类
  16. */
  17. class ContractServer
  18. {
  19. static private $server = '';
  20. private $distributionArr=[
  21. 1=>'直推奖',
  22. 2=>'均富池',
  23. 3=>'见点奖',
  24. 4=>'dao池',
  25. 5=>'技术奖',
  26. 6=>'托底池',
  27. 7=>'推荐奖',
  28. ];
  29. private function __construct()
  30. {
  31. }
  32. /**
  33. * 创建对象
  34. * @return ContractServer
  35. */
  36. static function creatServer()
  37. {
  38. if (empty(self::$server)) {
  39. self::$server = new ContractServer();
  40. }
  41. return self::$server;
  42. }
  43. /**
  44. * 报单信息检测
  45. * @param BlockItems $blockItem
  46. */
  47. function broadcastDetection(BlockItems $blockItem){
  48. //检测报单信息
  49. $contract=Contract::where('hash',$blockItem->{'hash'})->first();
  50. if($contract){
  51. if($contract->{'status'}!=1){
  52. ErrorRecord::create([
  53. 'm_id' => 0,
  54. 'msg' => '合约状态从异常',
  55. 'data' => json_encode($contract)
  56. ]);
  57. $this->addContractLog($contract,'合约状态异常,程序终止清分,记录扫快信息',$blockItem);
  58. }else{
  59. $ret = TronRPC::CreationTron()->getTransaction($contract->{'hash'});
  60. if (!empty($ret['ret'][0]['contractRet']) && $ret['ret'][0]['contractRet'] == 'SUCCESS') {
  61. //检测交易信息
  62. if($contract->{'type'}==1){
  63. //初始合约
  64. //生成双轨关系
  65. $member=Member::where('id',$contract->{'m_id'})->select(['id','recom_id'])->first();
  66. JobServer::creatServer()->creatBothJob($member->{'id'},$member->{'recom_id'});
  67. //报单拆分
  68. $this->oneSettle($contract);
  69. }else{
  70. //复投合约
  71. $this->twoSettle($contract);
  72. }
  73. } else {
  74. ErrorRecord::create([
  75. 'm_id' => $contract->{'m_id'},
  76. 'msg' => '交易失败',
  77. 'data' => json_encode($contract)
  78. ]);
  79. }
  80. }
  81. }else{
  82. ErrorRecord::create([
  83. 'm_id' => 0,
  84. 'msg' => '合约信息不存在,扫快信息:',
  85. 'data' => json_encode($blockItem)
  86. ]);
  87. }
  88. }
  89. /**
  90. * 首单清分
  91. * @param Contract $contract
  92. */
  93. function oneSettle(Contract $contract){
  94. if($contract->{'direct_proportion'}>0){
  95. //直推金额分化
  96. $directId=Member::where('id',$contract->{'m_id'})->value('recom_id');
  97. if($directId){
  98. $this->addDistribution($contract,$directId,1,$contract->{'direct_proportion'},0);
  99. }else{
  100. $this->addContractLog($contract,'直推人信息异常,跳出首单直推奖');
  101. }
  102. }
  103. if($contract->{'grant_proportion'}>0){
  104. //均富池清分
  105. $distribution= $this->addDistribution($contract,0,2,$contract->{'grant_proportion'},1);
  106. if($distribution){
  107. GrantPondServer::creatServer()->grandPond($distribution);
  108. }
  109. }
  110. if($contract->{'point_proportion'}>0){
  111. //见点清分
  112. $distribution= $this->addDistribution($contract,0,3,$contract->{'point_proportion'},1);
  113. if($distribution){
  114. }
  115. }
  116. if($contract->{'dao_proportion'}>0){
  117. //dao池
  118. $distribution= $this->addDistribution($contract,0,4,$contract->{'dao_proportion'},1);
  119. if($distribution){
  120. }
  121. }
  122. if($contract->{'technology_proportion'}>0){
  123. //技术奖
  124. $distribution= $this->addDistribution($contract,0,5,$contract->{'technology_proportion'},0);
  125. if($distribution){
  126. }
  127. }
  128. if($contract->{'reveal_proportion'}>0){
  129. //托底池
  130. $distribution= $this->addDistribution($contract,0,6,$contract->{'reveal_proportion'},1);
  131. if($distribution){
  132. }
  133. }
  134. }
  135. /**
  136. * 复投清分
  137. * @param Contract $contract
  138. */
  139. function twoSettle(Contract $contract){
  140. if($contract->{'dao_proportion'}>0){
  141. //dao池
  142. $distribution= $this->addDistribution($contract,0,4,$contract->{'dao_proportion'},1);
  143. if($distribution){
  144. }
  145. }
  146. if($contract->{'reveal_proportion'}>0){
  147. //托底池
  148. $distribution= $this->addDistribution($contract,0,6,$contract->{'reveal_proportion'},1);
  149. if($distribution){
  150. }
  151. }
  152. if($contract->{'parent_proportion'}>0){
  153. //dao池
  154. $parentProportion=$contract->{'parent_proportion'};
  155. $myBothData=MemberBoth::where('m_id',$contract->{'m_id'})->first();
  156. $distribution= $this->addDistribution($contract,0,7,$contract->{'parent_proportion'},1);
  157. if($distribution){
  158. }
  159. }
  160. }
  161. /**
  162. * 添加清分信息
  163. * @param Contract $contract
  164. * @param $toMid
  165. * @param $type
  166. * @param $money
  167. * @param int $isTransition
  168. * @return ContractDistribution|\Illuminate\Database\Eloquent\Model
  169. */
  170. function addDistribution(Contract $contract,$toMid,$type,$money,$isTransition=1){
  171. $lkMoney=CommonServer::creatServer()->getConfigValue('lk_money');
  172. $lkNum=$lkMoney*$money;
  173. return ContractDistribution::create([
  174. 'contract_id'=>$contract->{'id'},
  175. 'm_id'=>$contract->{'m_id'},
  176. 'broadcast_id'=>0,
  177. 'is_transition'=>$isTransition,
  178. 'usdt_num'=>$money,
  179. 'lk_num'=>$lkNum,
  180. 'lk_money'=>$lkMoney,
  181. 'type'=>$type,
  182. 'to_m_id'=>$toMid,
  183. ]);
  184. }
  185. /**
  186. * 合约日志记录
  187. * @param Contract $contract
  188. * @param $msg
  189. * @param array $data
  190. */
  191. function addContractLog(Contract $contract,$msg,$data=[]){
  192. ContractLog::create([
  193. 'contract_id'=> $contract->{'id'},
  194. 'm_id'=> $contract->{'m_id'},
  195. 'msg'=> $msg,
  196. 'contract_data'=> json_encode($contract),
  197. 'data'=> json_encode($data),
  198. ]);
  199. }
  200. }