Não pode escolher mais do que 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
 
 
 

229 linhas
9.0 KiB

  1. <?php
  2. namespace backend\modules\zzcs\logic;
  3. use \backend\modules\zzcs\models\BaseSupplier;
  4. use backend\modules\zzcs\models\ChannelBalanceHis;
  5. use backend\modules\zzcs\models\OperaBalanceHis;
  6. use backend\modules\zzcs\models\OperaBalanceHisSearch;
  7. use common\models\BaseUserAuth;
  8. use yii\helpers\ArrayHelper;
  9. use yii\data\ActiveDataProvider;
  10. use yii\base\Model;
  11. use Yii;
  12. /**
  13. * Created by PhpStorm.
  14. * User: 501810442
  15. * Date: 2017/8/8
  16. * Time: 16:53
  17. */
  18. class BaseSupplierBalance extends BaseSupplier
  19. {
  20. public $start_date;
  21. public $end_date;
  22. /**
  23. * @inheritdoc
  24. */
  25. public function rules()
  26. {
  27. return [
  28. [['MAIN_CORP_ID', 'CREATE_USER_ID', 'UPDATE_USER_ID', 'CANCEL_FLAG', 'AREA_ID', 'SUPPLIER_TYPE', 'MANAGE_TYPE', 'IS_DISABLED', 'SETT_TYPE', 'SETT_FREQUENCY', 'REFLECT_MAIN_CORP'], 'integer'],
  29. [['UPDATE_TIME', 'SUPPLIER_NAME', 'CREATE_TIME', 'SUPPLIER_TYPE'], 'safe'],
  30. [['CREATE_TIME', 'ID_CARD', 'ACCOUNT_NUM'], 'string', 'max' => 20],
  31. [['SUPPLIER_NAME', 'SUPPLIER_CODE', 'COMPANY_NAME', 'ACCOUNT_BANK', 'ACCOUNT_NAME'], 'string', 'max' => 100],
  32. [['SALES_MAN'], 'string', 'max' => 30],
  33. [['start_date', 'end_date'], 'safe'],
  34. ];
  35. }
  36. /**
  37. * @Author wanglg
  38. * @Desc 获取供应商渠道预付款总数据
  39. * @param $params
  40. * @return ActiveDataProvider
  41. */
  42. public function search($params)
  43. {
  44. $supplier_models = parent::getSupplierList();
  45. $supplier_ids = ArrayHelper::getColumn($supplier_models, 'org_id');
  46. $supplier_models = BaseSupplier::findAll(['ID'=>$supplier_ids]);
  47. $yufu_supplier = [];
  48. foreach ($supplier_models as $k=>$v){
  49. //只显示预付的供应商
  50. if ($v->SETT_TYPE==288){
  51. $yufu_supplier[] = $v->ID;
  52. }
  53. }
  54. $now_time = isset($params['run_date']) ? $params['run_date'] . ' 00:00:00' : date('Y-m-01 00:00:00');
  55. $end_time = isset($params['end_date']) ? $params['end_date'] . ' 23:59:59' : date('Y-m-t 23:59:59');
  56. $query = OperaBalanceHis::find()->select(['a.*', 'sum(if(b.pay_type=1,-b.change_value,b.change_value)) as sum_change_value',
  57. 'abs(sum(if(b.pay_type=1,-b.change_value,b.change_value))) as sum_change_value_abs']);
  58. $query->from('opera_balance_his a');
  59. $query->leftJoin('opera_balance_his b', "a.id=b.id and b.pay_time between '{$now_time}' and '{$end_time}'");
  60. $query->leftJoin('order_main c', 'c.ORDER_ID=a.order_id AND c.CANCEL_FLAG=0');
  61. $query->andFilterWhere(['between', 'a.pay_time', $now_time, $end_time]);
  62. $query->orderBy('sum_change_value_abs desc');
  63. $query->groupBy('a.supplier_id');
  64. $query->all();
  65. // 根据用户角色设置查询条件
  66. $where = $this -> userRoleWhere('c');
  67. // $product = $this->productTypeWhere('c');
  68. $dataProvider = new ActiveDataProvider([
  69. 'query' => $query,
  70. ]);
  71. $query->andFilterWhere(array_merge([
  72. 'a.supplier_id' => $yufu_supplier,
  73. ], $where));
  74. // $query->andFilterWhere($product);
  75. if (isset($params['supplier_id']) && $params['supplier_id'] != '')
  76. $query->andFilterWhere([
  77. 'a.supplier_id' => $params['supplier_id']
  78. ]);
  79. $sql = $query->createCommand()->getRawSql();
  80. return $dataProvider;
  81. }
  82. /**
  83. * @Author wanglg
  84. * @Desc 获取渠道商总数据
  85. * @param $params
  86. * @return ActiveDataProvider
  87. */
  88. public function searchChannel($params)
  89. {
  90. $supplier_models = parent::getChannelList();
  91. $supplier_ids = ArrayHelper::getColumn($supplier_models, 'org_id');
  92. $supplier_models = BaseSupplier::findAll(['ID'=>$supplier_ids]);
  93. $yufu_supplier = [];
  94. foreach ($supplier_models as $k=>$v){
  95. //只显示预付的供应商
  96. if ($v->SETT_TYPE==288){
  97. $yufu_supplier[] = $v->ID;
  98. }
  99. }
  100. $now_time = isset($params['run_date']) ? $params['run_date']. ' 00:00:00' : date('Y-m-01 00:00:00');
  101. $end_time = isset($params['end_date']) ? $params['end_date']. ' 23:59:59' : date('Y-m-t 23:59:59');
  102. $query = ChannelBalanceHis::find()->select(['a.*', 'sum(if(b.pay_type=1,-b.change_value,b.change_value)) as sum_change_value', 'abs(sum(if(b.pay_type=1,-b.change_value,b.change_value))) as sum_change_value_abs']);
  103. $query->from('channel_balance_his a');
  104. $query->leftJoin('channel_balance_his b', "a.id=b.id and b.pay_time between '{$now_time}' and '{$end_time}'");
  105. $query->leftJoin('order_main c', 'a.order_id=c.ORDER_ID AND c.CANCEL_FLAG=0');
  106. $query->andFilterWhere(['between', 'a.pay_time', $now_time, $end_time]);
  107. $query->orderBy('sum_change_value_abs desc');
  108. $query->groupBy('a.supplier_id');
  109. $query->all();
  110. $where = $this -> userRoleWhere('c');
  111. // $product = $this -> productTypeWhere('c');
  112. $dataProvider = new ActiveDataProvider([
  113. 'query' => $query,
  114. ]);
  115. if (!$this->validate()) {
  116. return $dataProvider;
  117. }
  118. $query->andFilterWhere(array_merge([
  119. 'a.supplier_id' => $yufu_supplier,
  120. ], $where));
  121. // $query->andFilterWhere($product);
  122. if (isset($params['supplier_id']) && $params['supplier_id'] != '')
  123. $query->andFilterWhere([
  124. 'a.supplier_id' => $params['supplier_id']
  125. ]);
  126. return $dataProvider;
  127. }
  128. /**
  129. * 获取供应商列表
  130. * @Desc
  131. * @return array
  132. */
  133. public static function getSupplierListStatic()
  134. {
  135. $model = new BaseSupplier();
  136. $suppler_list = $model->getSupplierList();
  137. return ArrayHelper::map($suppler_list, 'org_id', 'org_name');
  138. }
  139. public static function getChannelListStatic()
  140. {
  141. $model = new BaseSupplier();
  142. $suppler_list = $model-> getChannelList();
  143. return ArrayHelper::map($suppler_list, 'org_id', 'org_name');
  144. }
  145. /**
  146. * Function Description:计算本月余额变动
  147. * Function Name:
  148. *
  149. *
  150. * @author LUOCJ
  151. */
  152. public static function getMonthBalanceChange($id)
  153. {
  154. //月初和月尾日期
  155. $start_date = date('Y-m-01');
  156. $end_date = date('Y-m-t');
  157. $models = OperaBalanceHis::find()->where(['and', ['=', 'supplier_id', $id], ['between', 'pay_time', $start_date, $end_date], ['pay_status' => 2]])->all();
  158. $change = 0.00;
  159. foreach ($models as $model) {
  160. if ($model['pay_type'] == 1)
  161. $change -= $model['change_value'];
  162. else
  163. $change += $model['change_value'];
  164. }
  165. return $change;
  166. }
  167. /**
  168. * @Author wanglg
  169. * @Desc 报表统计查询权限条件
  170. * @param $alias查询条件关联别名设置
  171. */
  172. public function userRoleWhere($alias=''){
  173. $alias = empty($alias) ? '' : $alias.'.';
  174. if(Yii::$app->user->identity['USER_ROLE'] == BaseUserAuth::HOTEL_OPERATOR){ // 酒店运营人员
  175. $where = [$alias.'PRINCIPAL_ID' => Yii::$app->user->id];
  176. }elseif(Yii::$app->user->identity['USER_ROLE'] == BaseUserAuth::HOTEL_PURCHASE){ // 酒店采购人员
  177. $where = [$alias.'SALES_MAN' => Yii::$app->user->id];
  178. }elseif(Yii::$app->user->identity['USER_ROLE'] == BaseUserAuth::HOTEL_ADMIN || Yii::$app->user->identity['USER_ROLE'] == BaseUserAuth::HOTEL_CUS_ADMIN
  179. || Yii::$app->user->identity['USER_ROLE'] == BaseUserAuth::SYS_CS || Yii::$app->user->identity['USER_ROLE'] == BaseUserAuth::FINANCIAL_OFFICER
  180. || Yii::$app->user->identity['USER_ROLE'] == BaseUserAuth::SYS_ADMIN || Yii::$app->user->identity['USER_ROLE'] == BaseUserAuth::MAIN_CORP){
  181. // 酒店管理员、客服管理人员、后台管理人员和系统管理员、财务人员、运营管理人员可以查看所有数据
  182. $where = [];
  183. }else{
  184. $where = [$alias.'ID' => -1];
  185. }
  186. return $where;
  187. }
  188. /**
  189. * @Author wanglg
  190. * @Desc酒店和巴士where条件设置
  191. * @param string $alias
  192. * @return array
  193. */
  194. public function productTypeWhere($alias=''){
  195. // 酒店管理员只能查看酒店, 巴士只能看巴士
  196. $alias = empty($alias) ? '' : $alias.'.';
  197. if(Yii::$app->user->identity['USER_ROLE'] == BaseUserAuth::BUS_OPERA_CUS || Yii::$app->user->identity['USER_ROLE'] == BaseUserAuth::BUS_OPERA_ADMIN){
  198. $where = ['<>', $alias.'ORDER_PROD_TYPE', 25]; // ?待确认
  199. }elseif(Yii::$app->user->identity['USER_ROLE'] == BaseUserAuth::HOTEL_OPERATOR || Yii::$app->user->identity['USER_ROLE'] == BaseUserAuth::HOTEL_PURCHASE
  200. || Yii::$app->user->identity['USER_ROLE'] == BaseUserAuth::HOTEL_CUSTOMER || Yii::$app->user->identity['USER_ROLE'] == BaseUserAuth::HOTEL_CUS_ADMIN
  201. || Yii::$app->user->identity['USER_ROLE'] == BaseUserAuth::HOTEL_ADMIN){
  202. $where = [$alias.'ORDER_PROD_TYPE' => 25];
  203. }else{
  204. $where = [];
  205. }
  206. return $where;
  207. }
  208. }