RechargeClass.php 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535
  1. <?php
  2. namespace bizHd\recharge\classes;
  3. use biz\shop\classes\ShopClass;
  4. use bizGhs\shop\classes\ShopMoneyClass;
  5. use bizHd\balance\classes\BalanceChangeClass;
  6. use bizHd\balance\classes\BalanceGiveChangeClass;
  7. use bizHd\balance\classes\BalancePayChangeClass;
  8. use bizHd\custom\classes\CustomClass;
  9. use bizHd\custom\classes\HdClass;
  10. use bizHd\hb\classes\HbClass;
  11. use bizHd\hb\classes\HbManageClass;
  12. use bizHd\order\classes\OrderClass;
  13. use bizHd\order\classes\SettleClass;
  14. use bizHd\shop\classes\ShopExtClass;
  15. use bizHd\shop\classes\MainClass;
  16. use bizHd\user\classes\UserGrowthClass;
  17. use bizHd\user\classes\UserIntegralClass;
  18. use common\components\dict;
  19. use common\components\lakala\Lakala;
  20. use common\components\noticeUtil;
  21. use common\components\util;
  22. use Yii;
  23. use bizHd\base\classes\BaseClass;
  24. class RechargeClass extends BaseClass
  25. {
  26. public static $baseFile = '\bizHd\recharge\models\Recharge';
  27. public static function addRecharge($data)
  28. {
  29. //创建充值单时,要把过去的充值单和结账单取消掉
  30. $customId = $data['customId'] ?? 0;
  31. if (empty($customId)) {
  32. util::fail('没有客户信息');
  33. }
  34. $shopId = $data['shopId'] ?? 0;
  35. $hasList = self::getAllByCondition(['customId' => $customId, 'status' => 0], null, '*', null, true);
  36. if (!empty($hasList)) {
  37. $shop = \bizHd\merchant\classes\ShopClass::getById($shopId, true);
  38. if (empty($shop)) {
  39. util::fail('没有找到门店');
  40. }
  41. foreach ($hasList as $k => $recharge) {
  42. $payRequest = $recharge->payRequest ?? 0;
  43. if ($payRequest == 1 || $payRequest == 2) {
  44. $closeOrderSn = $recharge->orderSn;
  45. $merchantPrivateKeyPath = Yii::getAlias("@vendor/lakala") . '/production/api_private_key.pem';
  46. $lklCertificatePath = Yii::getAlias("@vendor/lakala") . '/production/lkl-apigw-v1.cer';
  47. $params = [
  48. 'appid' => 'OP00002119',
  49. 'serial_no' => '018b08cfddbd',
  50. 'merchant_no' => $shop->lklSjNo,
  51. 'term_no' => $shop->lklScanTermNo,
  52. 'merchantPrivateKeyPath' => $merchantPrivateKeyPath,
  53. 'lklCertificatePath' => $lklCertificatePath,
  54. ];
  55. $laResource = new Lakala($params);
  56. $closeParams = ['orderSn' => $closeOrderSn];
  57. if ($payRequest == 1) {
  58. //聚合支付
  59. $response = $laResource->close($closeParams);
  60. if (!isset($response['code']) || $response['code'] != 'BBS00000') {
  61. $msg = $response['msg'] ?? '';
  62. noticeUtil::push('充值换单,聚合支付,没有成功,单号:' . $closeOrderSn . ',关单没有成功,编号966558,' . $msg, '15280215347');
  63. //util::fail('老订单取消失败,请联系管理员');
  64. }
  65. } else {
  66. //收银台支付
  67. $response = $laResource->cashClose($closeParams);
  68. if (!isset($response['code']) || $response['code'] != '000000') {
  69. $msg = $response['msg'] ?? '';
  70. noticeUtil::push('充值换单,收银台的单号:' . $closeOrderSn . ',关单没有成功,编号66996,' . $msg, '15280215347');
  71. //util::fail('旧订单取消失败,请联系管理员');
  72. }
  73. }
  74. }
  75. $recharge->status = 2;
  76. $recharge->save();
  77. $settleId = $recharge->settleId ?? 0;
  78. $settle = SettleClass::getById($settleId, true);
  79. if (!empty($settle)) {
  80. $settle->status = 3;
  81. $settle->save();
  82. }
  83. }
  84. }
  85. return self::add($data, true);
  86. }
  87. //第三支付后流程 ssh 2021.4.27
  88. public static function thirdPay($payWay, $orderSn, $totalFee, $attach)
  89. {
  90. $recharge = RechargeClass::getByCondition(['orderSn' => $orderSn], true);
  91. if (empty($recharge)) {
  92. noticeUtil::push('充值付款成功,收到回调,但没有找到充值记录,orderSn:' . $orderSn, '15280215347');
  93. return false;
  94. }
  95. if ($totalFee != $recharge->amount) {
  96. noticeUtil::push("充值付款成功,收到回调,但金额不一致 {$totalFee} {$recharge->amount},orderSn:" . $orderSn, '15280215347');
  97. return false;
  98. }
  99. if ($recharge->payStatus == 1) {
  100. noticeUtil::push("充值付款成功,收到回调,但订单是已经支付过了,orderSn:" . $orderSn, '15280215347');
  101. return false;
  102. }
  103. $id = $recharge->id;
  104. $recharge = RechargeClass::getLockById($id);
  105. $params = [
  106. 'onlinePay' => 2,
  107. 'side' => 1,
  108. ];
  109. self::complete($recharge, $payWay, $params);
  110. return $recharge;
  111. }
  112. //处理充值流程 ssh 20250321
  113. public static function complete($recharge, $payWay, $params)
  114. {
  115. $onlinePay = $params['onlinePay'];
  116. //0 花店端操作,1 客户端操作
  117. $side = $params['side'] ?? 0;
  118. $recharge->onlinePay = $onlinePay;
  119. $recharge->payWay = $payWay;
  120. $recharge->payStatus = 1;
  121. $recharge->status = 1;
  122. $recharge->save();
  123. $shopId = $recharge->shopId;
  124. $mainId = $recharge->mainId;
  125. $hdId = $recharge->hdId;
  126. $hdInfo = HdClass::getById($hdId, true);
  127. $hdName = $hdInfo->name ?? "";
  128. $amount = $recharge->amount;
  129. $staffId = $recharge->staffId;
  130. $payWay = $recharge->payWay;
  131. $staffName = $recharge->staffName;
  132. $customId = $recharge->customId;
  133. $customName = $recharge->customName;
  134. $capitalType = dict::getDict('capitalType', 'xhRecharge', 'id');
  135. $relateId = $recharge->id;
  136. $shOrderId = $recharge->shOrderId ?? 0;
  137. $shOrderSn = $recharge->shOrderSn ?? '';
  138. $custom = CustomClass::getLockById($customId);
  139. if (empty($custom)) {
  140. $msg = '充值回调失败,没有找到客户';
  141. util::fail($msg);
  142. }
  143. $hd = HdClass::getLockById($hdId);
  144. if (empty($hd)) {
  145. $msg = '充值回调失败,没有找到花店';
  146. util::fail($msg);
  147. }
  148. $shop = ShopClass::getById($shopId, true);
  149. $rechargeWeal = $shop->rechargeWeal ?? 0; //充值赠送: 0未设置 2充值送红包--红包非余额支付可用,3充值送红包--红包非余额支付不可用
  150. $balanceGive = 0;
  151. //如果客户有欠款、结账充值、售后充值、售后付款充值,不参与优惠
  152. if ($custom->balance >= 0 && $recharge->settleId == 0 && $recharge->shOrderId == 0 && $recharge->refundOrderId == 0) {
  153. if ($rechargeWeal == 1) {
  154. $weal = RechargeSqClass::getAllByCondition(['shopId' => $shopId], 'recharge ASC', '*');
  155. if (!empty($weal)) {
  156. //优惠方式2:充多少送多少
  157. foreach ($weal as $k => $v) {
  158. $thisRecharge = $v['recharge'] ?? 0;
  159. $thisGive = $v['give'] ?? 0;
  160. if ($amount >= $thisRecharge) {
  161. $recharge->giveAmount = $thisGive;
  162. $recharge->save();
  163. //增加赠送的金额
  164. $balanceGive = $thisGive;
  165. }
  166. }
  167. }
  168. } elseif ($rechargeWeal == 2 || $rechargeWeal == 3) {
  169. //充值送红包
  170. // 1.根据充值金额,查询符合条件的红包规则
  171. $maxHbRule = RechargeShbClass::getByCondition(['shopId' => $shopId, 'amount<=' => $amount], false, 'allHbAmount DESC');
  172. if (!empty($maxHbRule)) {
  173. $currentTime = time();
  174. $rulesJson = $maxHbRule['rules'] ?? '';
  175. $rulesArr = json_decode($rulesJson, true);
  176. if (is_array($rulesArr) && !empty($rulesArr)) {
  177. foreach ($rulesArr as $rule) {
  178. $hbAmount = $rule['hbAmount'];
  179. $hbNum = $rule['hbNum'];
  180. $miniCost = $rule['miniCost'];
  181. $duration = $rule['duration'];
  182. $effectiveType = $rule['effectiveType'] ?? 2;
  183. $effectiveDate = $rule['effectiveDate'] ?? '';
  184. $effectiveDays = $rule['effectiveDays'] ?? 0;
  185. if ($effectiveType == 1 && !empty($effectiveDate) && $effectiveDate != '0000-00-00') {
  186. $beginTime = strtotime($effectiveDate);
  187. if (!$beginTime) {
  188. $beginTime = $currentTime;
  189. }
  190. } else {
  191. $beginTime = $currentTime + 86400 * $effectiveDays;
  192. }
  193. //给用户生成红包
  194. $data = [
  195. 'mainId' => $mainId,
  196. 'shopId' => $shopId,
  197. 'userId' => $recharge->userId,
  198. 'customId' => $customId,
  199. 'amount' => $hbAmount,
  200. 'minConsume' => $miniCost,
  201. 'beginTime' => $beginTime,
  202. 'endTime' => $duration == 0 ? 4102416000 : ($beginTime + 86400 * $duration),
  203. 'willTime' => $duration == 0 ? 4102416000 : ($beginTime + 86400 * $duration),
  204. 'duration' => $duration,
  205. 'getType' => 2, //取得方式 0新人领取 1门店发放 2充值赠送
  206. 'remark' => '充值赠送红包',
  207. ];
  208. $manageData = [
  209. 'getType' => 2,
  210. 'getTargetId' => 0,
  211. 'createStaffId' => 0,
  212. 'createStaffName' => '',
  213. 'remark' => $data['remark'] ?? '',
  214. ];
  215. for ($i = 0; $i < $hbNum; $i++) {
  216. $hb = HbClass::add($data);
  217. $manageData['hbId'] = $hb['id'];
  218. HbManageClass::add($manageData);
  219. }
  220. }
  221. }
  222. }
  223. } else {
  224. //其他
  225. }
  226. }
  227. //是否开启充值满多少成为 VIP
  228. $shopExt = ShopExtClass::getByCondition(['shopId' => $shopId], false, 'reachVip');
  229. if (!empty($shopExt) && $shopExt['reachVip'] > 0.00 && bccomp($amount, $shopExt['reachVip'], 2) >= 0) {
  230. $custom->vip = 1;
  231. }
  232. $balancePay = $amount;
  233. if ($onlinePay == 2) {
  234. $event = $payWay == 0 ? '线上微信 充值' : '线上支付宝 充值';
  235. } else {
  236. $payWayName = dict::getDict('payWayName');
  237. $channel = $payWayName[$payWay] ?? '微信';
  238. $event = "线下{$channel} 充值";
  239. }
  240. $event .= floatval($balancePay);
  241. //赠送的余额
  242. if ($balanceGive > 0) {
  243. $event .= "(送" . floatval($balanceGive) . ")";
  244. $custom->balanceGive = bcadd($custom->balanceGive, $balanceGive, 2);
  245. $hd->balanceGive = bcadd($hd->balanceGive, $balanceGive, 2);
  246. }
  247. //充值的余额
  248. $beforeBalancePay = $custom->balancePay;
  249. $custom->balancePay = bcadd($custom->balancePay, $balancePay, 2);
  250. $hd->balancePay = bcadd($hd->balancePay, $balancePay, 2);
  251. //总余额
  252. $totalBalance = bcadd($balancePay, $balanceGive, 2);
  253. $custom->balance = bcadd($custom->balance, $totalBalance, 2);
  254. $hd->balance = bcadd($hd->balance, $totalBalance, 2);
  255. $changeAmount = bccomp($beforeBalancePay, 0, 2) === -1 ? $custom->balancePay : $balancePay; // 根据余额欠款,计算变化金额,用于计算积分与成长值
  256. $addIntegralAndGrowth = bccomp($changeAmount, 0, 2) === 1; // 如果变化金额大于0,则计算积分与成长值
  257. if ($addIntegralAndGrowth) {
  258. //积分与成长值
  259. $custom->integral = bcadd($custom->integral, $changeAmount, 2);
  260. $custom->growth = bcadd($custom->growth, $changeAmount, 2);
  261. // 由于没有更新 buyAmount,所以得额外添加更新等级
  262. $memberData = CustomClass::getCustomExpenseLevel($custom->growth, $mainId); // 设置等级多处需要同步修改的,请搜索:getCustomExpenseLevel
  263. CustomClass::updateById($customId, [
  264. 'member' => (int) ($memberData['level'] ?? 0),
  265. 'memberName' => (string) ($memberData['name'] ?? ''),
  266. ]);
  267. }
  268. $custom->save();
  269. $hd->save();
  270. if ($hd->balance != $custom->balance) {
  271. $msg = '充值金额不一致。编号:' . floatval($hd->balance) . ' / ' . floatval($custom->balance);
  272. Yii::info($msg);
  273. util::fail($msg);
  274. }
  275. if ($hd->balancePay != $custom->balancePay) {
  276. $msg = '充值金额有异常。编号:' . floatval($hd->balancePay) . ' / ' . floatval($custom->balancePay);
  277. Yii::info($msg);
  278. util::fail($msg);
  279. }
  280. if ($hd->balanceGive != $custom->balanceGive) {
  281. $msg = '充值金额异常。编号:' . floatval($hd->balanceGive) . ' / ' . floatval($custom->balanceGive);
  282. Yii::info($msg);
  283. util::fail($msg);
  284. }
  285. $addBalance = bcadd($hd->balanceGive, $hd->balancePay, 2);
  286. if (floatval($hd->balance) != floatval($addBalance)) {
  287. util::fail('充值金额有问题哦,编号:' . $customId);
  288. }
  289. $settleId = $recharge->settleId;
  290. $settleAmount = 0;
  291. $settleNo = '';
  292. $realClearAmount = 0;
  293. if (!empty($settleId)) {
  294. //如果有结账单,按结账单销账
  295. $set = SettleClass::getById($settleId, true);
  296. $res = SettleClass::clearSettle($set, $recharge);
  297. $realClearAmount = $res['totalClearAmount'] ?? 0;
  298. $settleAmount = $set->actPrice ?? 0;
  299. $settleNo = $set->orderSn ?? '';
  300. } else {
  301. //没有结账单,按顺序去销订单欠款
  302. $orderList = OrderClass::getAllByCondition(['customId' => $customId, 'debt' => 1], 'id asc', '*', null, true);
  303. if (!empty($orderList)) {
  304. $lastRemainDebtAmount = 0;
  305. $needClearIdMap = [];
  306. $hasOver = false;
  307. foreach ($orderList as $order) {
  308. $orderId = $order->id ?? 0;
  309. $orderSn = $order->orderSn ?? '';
  310. //销订单全部的欠款!!!
  311. $remainDebtPrice = $order->remainDebtPrice ?? 0;
  312. $currentTotalDebtAmount = bcadd($lastRemainDebtAmount, $remainDebtPrice, 2);
  313. if ($currentTotalDebtAmount > $totalBalance) {
  314. if (!$hasOver) {
  315. $lastClearOrderAmount = bcsub($totalBalance, $lastRemainDebtAmount, 2);
  316. if ($lastClearOrderAmount > 0) {
  317. //销订单部分的欠款!!!
  318. $lastClearOrderId = $orderId;
  319. $needClearIdMap[] = ['orderId' => $lastClearOrderId, 'clearAmount' => $lastClearOrderAmount, 'orderSn' => $orderSn];
  320. }
  321. }
  322. $hasOver = true;
  323. continue;
  324. }
  325. $lastRemainDebtAmount = bcadd($lastRemainDebtAmount, $remainDebtPrice, 2);
  326. $needClearIdMap[] = ['orderId' => $orderId, 'clearAmount' => $remainDebtPrice, 'orderSn' => $orderSn];
  327. }
  328. if (!empty($needClearIdMap)) {
  329. //创建结账单,并且销结账单
  330. $staffId = $recharge->staffId ?? 0;
  331. $staffName = $recharge->staffName ?? '';
  332. $settleParams = ['staffId' => $staffId, 'staffName' => $staffName];
  333. $set = SettleClass::addSettle($needClearIdMap, $shop, $custom, $hd, $settleParams);
  334. $settleId = $set->id;
  335. $settleNo = $set->orderSn ?? '';
  336. $settleAmount = $set->actPrice ?? 0;
  337. $res = SettleClass::clearSettle($set);
  338. $realClearAmount = $res['totalClearAmount'] ?? 0;
  339. }
  340. }
  341. }
  342. if ($settleId > 0) {
  343. if (floatval($totalBalance) != floatval($realClearAmount) && $hd->balance < 0) {
  344. $rechargeId = $recharge->id;
  345. noticeUtil::push("注意,充值单,结账金额不一致:getBalance:{$totalBalance} totalAmount:{$realClearAmount},recharge:{$rechargeId}", '15280215347');
  346. util::fail('充值和结账金额异常哈');
  347. }
  348. if (floatval($totalBalance) != floatval($settleAmount) && $hd->balance < 0) {
  349. $rechargeId = $recharge->id;
  350. noticeUtil::push("注意,充值单,结账单不一致:getBalance:{$totalBalance} settleAmount:{$settleAmount},settleId:{$settleId} recharge:{$rechargeId}", '15280215347');
  351. util::fail('充值和结账金额异常呢');
  352. }
  353. if (floatval($realClearAmount) != floatval($settleAmount)) {
  354. $rechargeId = $recharge->id;
  355. noticeUtil::push("注意,结账金额有问题,编号 settleId:{$settleId} recharge:{$rechargeId}", '15280215347');
  356. util::fail('充值结账金额异常呢');
  357. }
  358. }
  359. $remark = $recharge->remark;
  360. $change = [
  361. 'customId' => $customId,
  362. 'customName' => $customName,
  363. 'relateId' => $relateId,
  364. 'onlinePay' => $onlinePay,
  365. 'capitalType' => $capitalType,
  366. 'giveAmount' => $balanceGive,
  367. 'amount' => $totalBalance,
  368. 'balance' => $hd->balance,
  369. 'io' => 1,
  370. 'side' => $side,
  371. 'payWay' => $payWay,
  372. 'event' => $event,
  373. 'staffId' => $staffId,
  374. 'staffName' => $staffName,
  375. 'shopId' => $shopId,
  376. 'mainId' => $mainId,
  377. 'settleId' => $settleId,
  378. 'settleNo' => $settleNo,
  379. 'settleAmount' => $settleAmount,
  380. 'remark' => $remark,
  381. 'shOrderId' => $shOrderId,
  382. 'shOrderSn' => $shOrderSn,
  383. 'hdId' => $hdId,
  384. 'hdName' => $hdName,
  385. ];
  386. $returnChange = BalanceChangeClass::add($change, true);
  387. $payChange = [
  388. 'customId' => $customId,
  389. 'customName' => $customName,
  390. 'relateId' => $relateId,
  391. 'onlinePay' => $onlinePay,
  392. 'capitalType' => $capitalType,
  393. 'amount' => $balancePay,
  394. 'balance' => $hd->balancePay,
  395. 'io' => 1,
  396. 'side' => $side,
  397. 'payWay' => $payWay,
  398. 'event' => $event,
  399. 'staffId' => $staffId,
  400. 'staffName' => $staffName,
  401. 'shopId' => $shopId,
  402. 'mainId' => $mainId,
  403. 'settleId' => $settleId,
  404. 'settleNo' => $settleNo,
  405. 'settleAmount' => $settleAmount,
  406. 'remark' => $remark,
  407. 'shOrderId' => $shOrderId,
  408. 'shOrderSn' => $shOrderSn,
  409. 'hdId' => $hdId,
  410. 'hdName' => $hdName,
  411. ];
  412. BalancePayChangeClass::add($payChange, true);
  413. if ($balanceGive > 0) {
  414. $givChange = [
  415. 'customId' => $customId,
  416. 'customName' => $customName,
  417. 'relateId' => $relateId,
  418. 'onlinePay' => $onlinePay,
  419. 'capitalType' => $capitalType,
  420. 'amount' => $balanceGive,
  421. 'balance' => $hd->balanceGive,
  422. 'io' => 1,
  423. 'side' => $side,
  424. 'payWay' => $payWay,
  425. 'event' => $event,
  426. 'staffId' => $staffId,
  427. 'staffName' => $staffName,
  428. 'shopId' => $shopId,
  429. 'mainId' => $mainId,
  430. 'remark' => $remark,
  431. 'hdId' => $hdId,
  432. 'hdName' => $hdName,
  433. ];
  434. BalanceGiveChangeClass::add($givChange, true);
  435. }
  436. if ($recharge->onlinePay == 2) {
  437. //如果线上充值,门店余额增加
  438. $shop = ShopClass::getLockById($shopId);
  439. $main = MainClass::getLockById($mainId);
  440. ShopClass::skRechargeAddBalance($main, $shop, $recharge);
  441. } else {
  442. if ($recharge->payWay == 4) {
  443. //现在现金充值要增加现金
  444. $main = MainClass::getLockById($mainId);
  445. $cashData = [];
  446. $cashData['mainId'] = $mainId;
  447. $cashData['sjId'] = 0;
  448. $cashData['amount'] = $amount;
  449. $cashData['staffId'] = $staffId;
  450. $cashData['staffName'] = $staffName;
  451. $cashData['customName'] = $customName;
  452. $cashData['ptStyle'] = dict::getDict('ptStyle', 'hd');
  453. ShopMoneyClass::skRecharge($cashData, $main);
  454. }
  455. }
  456. if ($addIntegralAndGrowth) {
  457. $createTime = date('Y-m-d H:i:s');
  458. //成长值变动记录
  459. $growthData = [
  460. 'shopId' => $shopId,
  461. 'userId' => $custom->userId,
  462. 'userName' => $custom->name,
  463. 'event' => $event,
  464. 'relateId' => $relateId,
  465. 'relateType' => 0,
  466. 'num' => $changeAmount,
  467. 'growth' => $custom->growth,
  468. 'staffId' => $staffId, //操作人(员工id)
  469. 'staffName' => $staffName, //员工名称
  470. 'createTime' => $createTime,
  471. ];
  472. UserGrowthClass::add($growthData);
  473. //积分变动记录
  474. $integralData = [
  475. 'shopId' => $shopId,
  476. 'userId' => $custom->userId,
  477. 'userName' => $custom->name,
  478. 'event' => $event,
  479. 'relateId' => $relateId,
  480. 'relateType' => 0,
  481. 'num' => $changeAmount,
  482. 'integral' => $custom->integral,
  483. 'staffId' => $staffId, //操作人(员工id)
  484. 'staffName' => $staffName, //员工名称
  485. 'createTime' => $createTime,
  486. ];
  487. UserIntegralClass::add($integralData);
  488. }
  489. return $returnChange;
  490. }
  491. /**
  492. * 售后付款单是否已经充值过了 ssh 20250801
  493. */
  494. public static function checkShOrderRecharge($order)
  495. {
  496. $orderId = $order->id;
  497. $has = self::getByCondition(['shOrderId' => $orderId, 'payStatus' => 1]);
  498. if (!empty($has)) {
  499. util::fail('已经充值过了,无需再次操作');
  500. }
  501. }
  502. }