MchSettings.php 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. <?php
  2. namespace addons\Mch\common\models;
  3. use common\enums\StatusEnum;
  4. use common\models\base\BaseActiveRecord;
  5. use Yii;
  6. /**
  7. * This is the model class for table "{{%addons_mch_settings}}".
  8. *
  9. * @property int $id
  10. * @property int $mall_id
  11. * @property int $mch_id
  12. * @property int $individual_fee_setting 独立手续费设置
  13. * @property int $store_service_fee 是否收取服务费,1:收取;0:不收取
  14. * @property float $store_service_ratio 门店服务费比例
  15. * @property int $store_settle_type 服务费计算方式,1:门店商品售价(分佣平台承担);2:订单实际支付金额(分佣平台承担);3:商品成本+运费(不包含服务费)(分佣平台承担);4:订单实际支付减去(分销商提成、经销商提成、区域代理、股东分红)
  16. * @property int $store_settle_scene 服务费计算触发场景,1:订单支付;2:订单完成
  17. * @property string|null $store_commission_authority 分销/营销权限,存 json,key 区别各个不同应用
  18. * @property float $cachier_service_ratio 收银台服务费比例
  19. * @property int $cashier_member_status 是否启用会员价,1:启用;0:不启用
  20. * @property string|null $cashier_member_settings 会员各个等级比例设置,存 json
  21. * @property int $cashier_distribution_is_enable 是否开启分销设置,1:是;0:否
  22. * @property string|null $cashier_distribution_settings 分销各个等级佣金比例设置,存 json
  23. * @property int $cashier_agent_is_enable 是否开启经销设置,1:是;0:否
  24. * @property string|null $cashier_agent_settings 经销各个等级佣金比例设置,存 json
  25. * @property int $status 状态,-1:已删除;0:禁用;1:正常
  26. * @property int $created_at
  27. * @property int $updated_at
  28. * @property int $is_balance_cash_service_fee 商户提现手续费独立设置,1:开启;0:关闭
  29. * @property float $balance_cash_service_fee 商户提现手续费
  30. */
  31. class MchSettings extends BaseActiveRecord
  32. {
  33. /**
  34. * {@inheritdoc}
  35. */
  36. public static function tableName()
  37. {
  38. return '{{%addons_mch_settings}}';
  39. }
  40. /**
  41. * {@inheritdoc}
  42. */
  43. public function rules()
  44. {
  45. return [
  46. [['mall_id', 'mch_id'], 'required'],
  47. [['mall_id', 'mch_id', 'individual_fee_setting', 'store_service_fee', 'store_settle_type', 'store_settle_scene', 'cashier_member_status', 'cashier_distribution_is_enable', 'cashier_agent_is_enable', 'status', 'created_at', 'updated_at', 'is_balance_cash_service_fee'], 'integer'],
  48. [['store_service_ratio', 'cachier_service_ratio', 'balance_cash_service_fee'], 'number'],
  49. [['store_commission_authority', 'cashier_member_settings', 'cashier_distribution_settings', 'cashier_agent_settings'], 'string'],
  50. ];
  51. }
  52. /**
  53. * {@inheritdoc}
  54. */
  55. public function attributeLabels()
  56. {
  57. return [
  58. 'id' => 'ID',
  59. 'mall_id' => 'Mall ID',
  60. 'mch_id' => 'Mch ID',
  61. 'store_service_fee' => '是否收取服务费,1:收取;0:不收取',
  62. 'store_service_ratio' => '门店服务费比例',
  63. 'store_settle_type' => '服务费计算方式,1:门店商品售价(分佣平台承担);2:订单实际支付金额(分佣平台承担);3:商品成本+运费(不包含服务费)(分佣平台承担);4:订单实际支付减去(分销商提成、经销商提成、区域代理、股东分红)',
  64. 'store_settle_scene' => '服务费计算触发场景,1:订单支付;2:订单完成',
  65. 'store_commission_authority' => '分销/营销权限,存 json,key 区别各个不同应用',
  66. 'cachier_service_ratio' => '收银台服务费比例',
  67. 'cashier_member_status' => '是否启用会员价,1:启用;0:不启用',
  68. 'cashier_member_settings' => '会员各个等级比例设置,存 json',
  69. 'cashier_distribution_is_enable' => '是否开启分销设置,1:是;0:否',
  70. 'cashier_distribution_settings' => '分销各个等级佣金比例设置,存 json',
  71. 'cashier_agent_is_enable' => '是否开启经销设置,1:是;0:否',
  72. 'cashier_agent_settings' => '经销各个等级佣金比例设置,存 json',
  73. 'status' => '状态,-1:已删除;0:禁用;1:正常',
  74. 'created_at' => 'Created At',
  75. 'updated_at' => 'Updated At',
  76. 'balance_cash_service_fee' => '商户提现手续费%',
  77. 'is_balance_cash_service_fee' => '商户提现手续费独立设置,1:开启;0:关闭',
  78. ];
  79. }
  80. public static function setData(int $mall_id, array $data)
  81. {
  82. $query = self::find()->where(['mall_id' => $mall_id, 'status' => StatusEnum::ENABLED]);
  83. if (!empty($data['id'])) {
  84. $model = $query->andWhere(['id' => $data['id']])->one();
  85. if (empty($model)) {
  86. self::$static_error = '数据异常';
  87. return false;
  88. }
  89. } elseif (!empty($data['mch_id'])) {
  90. $model = $query->andWhere(['mch_id' => $data['mch_id']])->one();
  91. if (empty($model)) {
  92. $model = new self();
  93. $model->loadDefaultValues();
  94. $model->mall_id = $mall_id;
  95. $model->status = StatusEnum::ENABLED;
  96. }
  97. unset($data['id']);
  98. } else {
  99. self::$static_error = '参数异常';
  100. return false;
  101. }
  102. $json_keys = ['store_commission_authority', 'cashier_member_settings', 'cashier_distribution_settings', 'cashier_agent_settings'];
  103. foreach ($data as $key => $val) {
  104. if (in_array($key, $json_keys) && is_array($val)) {
  105. $val = json_encode($val);
  106. }
  107. $model->$key = $val;
  108. }
  109. $res = $model->save();
  110. if (!$res) {
  111. self::$static_error = $model->getErrorMessage();
  112. return false;
  113. }
  114. return $model;
  115. }
  116. public static function saveStoreSetting(int $mall_id, array $data)
  117. {
  118. $transaction = \Yii::$app->db->beginTransaction();
  119. $store_info = [
  120. 'shop_status' => $data['shop_status'],
  121. 'business_time_start' => $data['business_time_start'],
  122. 'business_time_end' => $data['business_time_end'],
  123. 'store_background' => $data['store_background']??'',
  124. 'id' => $data['mch_id'],
  125. 'mall_id' => $mall_id,
  126. ];
  127. $store_res = Mch::setData($store_info);
  128. if (false === $store_res) {
  129. $transaction->rollBack();
  130. self::$static_error = Mch::getStaticError();
  131. return false;
  132. }
  133. $store_commission_authority = [
  134. 'distribution' => 0,
  135. 'area' => 0,
  136. 'agent' => 0,
  137. 'boss' => 0,
  138. ];
  139. $cashier_info = [
  140. 'individual_fee_setting' => $data['individual_fee_setting'],
  141. 'store_service_fee' => $data['store_service_fee'],
  142. 'store_service_ratio' => $data['store_service_ratio'],
  143. 'store_settle_type' => $data['store_settle_type'],
  144. 'store_settle_scene' => $data['store_settle_scene'],
  145. 'is_balance_cash_service_fee' => $data['is_balance_cash_service_fee']??0,
  146. 'balance_cash_service_fee' => $data['balance_cash_service_fee']??0,
  147. 'store_commission_authority' => array_merge($store_commission_authority, $data['store_commission_authority'] ?? []),
  148. 'mch_id' => $data['mch_id'],
  149. ];
  150. $setting_res = self::setData($mall_id, $cashier_info);
  151. if (false === $setting_res) {
  152. $transaction->rollBack();
  153. return false;
  154. }
  155. if (!empty($data['password'])) {
  156. $admin_model = MchAdmin::findOne(['mall_id' => $mall_id, 'status' => StatusEnum::ENABLED, 'username' => $store_res->shop_mobile]);
  157. if (empty($admin_model)) {
  158. $transaction->rollBack();
  159. self::$static_error = '多商户管理员账号不存在';
  160. return false;
  161. }
  162. $admin_model->password = \Yii::$app->security->generatePasswordHash($data['password']);
  163. $admin_model->updated_at = time();
  164. $admin_res = $admin_model->save();
  165. if (empty($admin_model)) {
  166. $transaction->rollBack();
  167. self::$static_error = $admin_model->getErrorMessage();
  168. return false;
  169. }
  170. }
  171. $transaction->commit();
  172. return true;
  173. }
  174. }