SettingService.php 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  1. <?php
  2. namespace addons\OperationCenter\common\services;
  3. use addons\OperationCenter\common\enums\OperationCenterEnum;
  4. use addons\OperationCenter\common\models\SettingLog;
  5. use addons\StarChain\common\models\Setting;
  6. use Yii;
  7. use yii\helpers\Json;
  8. /**
  9. * SettingService
  10. * @package addons\OperationCenter\common\services
  11. */
  12. class SettingService extends BaseService
  13. {
  14. const BASIC = 'basic';
  15. /**
  16. * @var array
  17. */
  18. protected $setting;
  19. /**
  20. * @var array
  21. */
  22. protected $json_fields = ['applying_for', 'commission_levels'];
  23. /**
  24. * 设置配置
  25. *
  26. * @param array $setting 设置
  27. * @return boolean
  28. */
  29. public function setSetting(array $setting)
  30. {
  31. try {
  32. // 获取设置
  33. $before_setting = $this->getSetting();
  34. Yii::$app->services->setting->addons->set(
  35. $this->mall_id, OperationCenterEnum::ADDONS_NAME_OPERATION_CENTER, [static::BASIC => $setting]
  36. );
  37. // 添加日志
  38. SettingLog::addSettingLog($this->mall_id, $before_setting, $setting);
  39. $this->setCacheSetting($setting);
  40. } catch (\Exception $e) {
  41. return $this->error($e->getMessage());
  42. }
  43. return true;
  44. }
  45. /**
  46. * 获取配置信息
  47. *
  48. * @param string $key
  49. * @return array
  50. */
  51. public function getSetting()
  52. {
  53. if (empty($this->setting)) {
  54. $this->setting = $this->getCacheSetting();
  55. $this->jsonFormat();
  56. }
  57. return $this->setting;
  58. }
  59. /**
  60. * @return array
  61. */
  62. public function getDbSetting()
  63. {
  64. return Yii::$app->services->setting->addons->get(
  65. $this->mall_id, OperationCenterEnum::ADDONS_NAME_OPERATION_CENTER, static::BASIC
  66. );
  67. }
  68. /**
  69. * @return string
  70. */
  71. private function getCacheField()
  72. {
  73. return OperationCenterEnum::OPERATION_CENTER . $this->mall_id . 'ceche';
  74. }
  75. /**
  76. * @return array
  77. */
  78. private function getCacheSetting()
  79. {
  80. $redis = Yii::$app->redis;
  81. $setting = $redis->get($this->getCacheField());
  82. if (empty($setting)) {
  83. $setting = $this->getDbSetting();
  84. $this->setCacheSetting($setting);
  85. } else {
  86. $setting = Json::decode($setting);
  87. }
  88. return $setting;
  89. }
  90. /**
  91. * @param array $setting
  92. * @return void
  93. */
  94. private function setCacheSetting(array $setting)
  95. {
  96. $redis = Yii::$app->redis;
  97. $redis->setex($this->getCacheField(), 60, Json::encode($setting));
  98. }
  99. /**
  100. * json格式化
  101. *
  102. * @return void
  103. */
  104. private function jsonFormat()
  105. {
  106. foreach ($this->json_fields as $field) {
  107. if (!empty($this->setting[$field])) {
  108. $this->setting[$field] = !empty($this->setting[$field]) && is_string($this->setting[$field])
  109. ? Json::decode($this->setting[$field])
  110. : ($this->setting[$field] ?? []);
  111. }
  112. }
  113. }
  114. /**
  115. * @return string
  116. */
  117. public function getSwtich()
  118. {
  119. return $this->getSetting()['switch'] ?? 0;
  120. }
  121. /**
  122. * @return array
  123. */
  124. public function getApplyingFor()
  125. {
  126. return $this->getSetting()['applying_for'] ?? [];
  127. }
  128. /**
  129. * 获取申请配置
  130. *
  131. * @return array
  132. */
  133. public function getApplyConfig()
  134. {
  135. return [
  136. 'switch' => $this->getSwtich(),
  137. 'applying_for' => $this->getApplyingFor(),
  138. ];
  139. }
  140. /**
  141. * @return boolean
  142. */
  143. public function isOpen()
  144. {
  145. return (boolean)$this->getSwtich();
  146. }
  147. /**
  148. * 获取佣金计算方式
  149. *
  150. * @return int
  151. */
  152. public function getComputingMethod()
  153. {
  154. return $this->getSetting()['computing_method'];
  155. }
  156. /**
  157. * 结算模式
  158. *
  159. * @return int
  160. */
  161. public function getComputeType()
  162. {
  163. return $this->getSetting()['compute_type'];
  164. }
  165. /**
  166. * @return int
  167. */
  168. public function getLastSettingId()
  169. {
  170. return SettingLog::getLastSettingId($this->mall_id) ?? 0;
  171. }
  172. /**
  173. * 是否结算
  174. *
  175. * @param integer $is_finish
  176. * @return boolean
  177. */
  178. public function isSettlement(int $is_finish = 0)
  179. {
  180. $compute_type = $this->getComputeType();
  181. // 订单完成后 && 订单完成
  182. if ($compute_type == 1 && $is_finish == 1) return true;
  183. // 订单支付后 && 订单支付
  184. if ($compute_type == 2 && $is_finish == 0) return true;
  185. return false;
  186. }
  187. /**
  188. * @return array
  189. */
  190. public function getCommissionLevels()
  191. {
  192. return $this->getSetting()['commission_levels'];
  193. }
  194. /**
  195. * 是否拥有该佣金
  196. *
  197. * @param integer $level
  198. * @return boolean
  199. */
  200. public function hasCommission(int $level)
  201. {
  202. return in_array(
  203. $level,
  204. $this->getCommissionLevels()
  205. );
  206. }
  207. /**
  208. * @return int
  209. */
  210. public function getOrderLimit()
  211. {
  212. return $this->getSetting()['order_limit'] ?? 0;
  213. }
  214. }