DistributionController.php 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. <?php
  2. /**
  3. * 用途:分销相关 Console 命令
  4. * 谁用:运维/开发按订单 ID 触发分销计佣
  5. */
  6. namespace console\controllers;
  7. use bizHd\distribution\classes\DistributionCommissionClass;
  8. use bizHd\distribution\classes\DistributionSettleClass;
  9. use common\components\stringUtil;
  10. use yii\console\Controller;
  11. class DistributionController extends Controller
  12. {
  13. /**
  14. * 按订单 ID 计算并落库分销提成
  15. * 无记录则新建;已有待结算/失效记录则自动重算;已结算不可重算
  16. * 用法:php yii distribution/calc-order 12345
  17. * @param int $orderId xhOrder.id
  18. * @return int
  19. */
  20. public function actionCalcOrder($orderId = 0)
  21. {
  22. $orderId = (int)$orderId;
  23. if ($orderId <= 0) {
  24. echo json_encode(['ok' => 0, 'msg' => '请传入 orderId,例如:php yii distribution/calc-order 12345'], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT) . PHP_EOL;
  25. return 1;
  26. }
  27. try {
  28. $result = DistributionCommissionClass::calcAndPersist($orderId);
  29. echo json_encode($result, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT) . PHP_EOL;
  30. return 0;
  31. } catch (\Throwable $e) {
  32. echo json_encode(['ok' => 0, 'msg' => $e->getMessage()], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT) . PHP_EOL;
  33. return 1;
  34. }
  35. }
  36. /**
  37. * 仅预览计佣结果(与 calc-order 同一套规则,不写库)
  38. */
  39. public function actionPreviewOrder($orderId = 0)
  40. {
  41. $orderId = (int)$orderId;
  42. if ($orderId <= 0) {
  43. echo json_encode(['ok' => 0, 'msg' => '请传入 orderId'], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT) . PHP_EOL;
  44. return 1;
  45. }
  46. try {
  47. $result = DistributionCommissionClass::calculatePreview($orderId);
  48. echo json_encode($result, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT) . PHP_EOL;
  49. return 0;
  50. } catch (\Throwable $e) {
  51. echo json_encode(['ok' => 0, 'msg' => $e->getMessage()], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT) . PHP_EOL;
  52. return 1;
  53. }
  54. }
  55. /**
  56. * 到期分销结佣(finishTime + settleDays)
  57. * 用法:php yii distribution/settle-due 200
  58. * @param int $limit 单次处理条数
  59. * @param int $shopId 0 全部门店
  60. * @return int
  61. */
  62. public function actionSettleDue($limit = 200, $shopId = 0)
  63. {
  64. $result = DistributionSettleClass::runDueSettle((int)$limit, (int)$shopId);
  65. echo json_encode(array_merge(['ok' => 1], $result), JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT) . PHP_EOL;
  66. return !empty($result['failed']) ? 1 : 0;
  67. }
  68. }