BossLogic.php 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. <?php
  2. namespace addons\Mch\common\logic;
  3. use addons\Mch\common\listeners\order\ComputeCommissionListener;
  4. use addons\Mch\common\models\MchGoodsModel;
  5. use common\enums\AddonsEnum;
  6. use common\enums\StatusEnum;
  7. use Yii;
  8. class BossLogic
  9. {
  10. public static $pre = 'mch:order_id:';
  11. /**
  12. * 设置全局设置
  13. *
  14. * @param array $levelArr
  15. * @param array $bossSetting
  16. *
  17. * @return void
  18. */
  19. public static function setCommonSetting(array &$levelArr, array $bossSetting)
  20. {
  21. if (empty($bossSetting)) {
  22. return;
  23. }
  24. $types = ['commission', 'digital'];
  25. foreach ($types as $type) {
  26. $bossSettingLevelMap = array_column($bossSetting[$type]['detail'] ?? [], null, 'level');
  27. $prizeField = 'prize';
  28. $isExtraField = 'is_extra';
  29. $extraPrizeField = 'extra_prize';
  30. if ($type === 'digital') {
  31. $prizeField = 'digital_prize';
  32. $extraPrizeField = 'extra_digital_prize';
  33. }
  34. foreach ($levelArr as $level => &$item) {
  35. if (isset($bossSetting[$type]['is_alone']) && !$bossSetting[$type]['is_alone']) {
  36. continue;
  37. }
  38. if (isset($bossSetting[$type]['is_enable']) && !$bossSetting[$type]['is_enable']) {
  39. continue;
  40. }
  41. $item[$prizeField] = $bossSettingLevelMap[$level]['prize'] ?? 0;
  42. $extra_prize = $bossSettingLevelMap[$level]['extra_prize'] ?? 0;
  43. $isExtra = $bossSetting[$type]['is_extra'] ?? 0;
  44. $item[$extraPrizeField] = !$isExtra ? 0 : $extra_prize;
  45. if ($type === 'commission') {
  46. $item[$isExtraField] = $isExtra;
  47. }
  48. }
  49. }
  50. }
  51. /**
  52. * 设置全局设置
  53. *
  54. * @param array $levelArr
  55. *
  56. * @return void
  57. */
  58. public static function resetCommonSetting(array &$levelArr)
  59. {
  60. $types = ['commission', 'digital'];
  61. foreach ($types as $type) {
  62. $prizeField = 'prize';
  63. $isExtraField = 'is_extra';
  64. $extraPrizeField = 'extra_prize';
  65. if ($type === 'digital') {
  66. $prizeField = 'digital_prize';
  67. $extraPrizeField = 'extra_digital_prize';
  68. }
  69. foreach ($levelArr as &$item) {
  70. $item[$prizeField] = 0;
  71. $item[$extraPrizeField] = 0;
  72. if ($type === 'commission') {
  73. $item[$isExtraField] = 0;
  74. }
  75. }
  76. }
  77. }
  78. /**
  79. * @param int $mallId
  80. * @param int $goodsId
  81. * @param int $mchId
  82. * @param string $type
  83. *
  84. * @return array
  85. */
  86. public static function getBossAloneSetting(int $mallId, int $goodsId, int $mchId, string $type = 'commission'): array
  87. {
  88. $goods_setting = json_decode(MchGoodsModel::find()
  89. ->where(['mall_id' => $mallId, 'goods_id' => $goodsId, 'mch_id' => $mchId, 'status' => StatusEnum::ENABLED])
  90. ->select('content')
  91. ->scalar(), true);
  92. $goods_setting = json_decode($goods_setting[AddonsEnum::ADDONS_NAME_BOSS] ?? '', true) ?: [];
  93. $goods_setting = $goods_setting[$type] ?? [];
  94. if ($goods_setting) {
  95. !isset($goods_setting['is_extra_scale_ratio']) && $goods_setting['is_extra_scale_ratio'] = 0;
  96. }
  97. return $goods_setting;
  98. }
  99. /**
  100. * 多商户计数器
  101. *
  102. * @return void
  103. */
  104. public static function decMchTaskCounter(int $mall_id, int $order_id, array $commission_arr = [])
  105. {
  106. Yii::$app->services->taskCounter->set(self::$pre . $order_id)->callBack($mall_id, $order_id, $commission_arr, ComputeCommissionListener::class);
  107. }
  108. }