25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

388 lines
13 KiB

  1. <?php
  2. namespace backend\modules\api\models;
  3. use backend\modules\zzcs\models\BaseAreaView;
  4. use Yii;
  5. use yii\db\ActiveRecord;
  6. use yii\db\Expression;
  7. /**
  8. * This is the model class for table "base_resource".
  9. *
  10. * @property integer $ID
  11. * @property integer $RES_ID
  12. * @property string $RES_NAME
  13. * @property integer $PARENT_ID
  14. * @property integer $CANCEL_FLAG
  15. * @property integer $IF_DISABLED
  16. * @property integer $RES_TYPE_ID
  17. * @property integer $CREATE_USER_ID
  18. * @property string $CREATE_TIME
  19. * @property integer $UPDATE_USER_ID
  20. * @property string $UPDATE_TIME
  21. * @property integer $AREA_ID
  22. * @property string $TOP_ORG_ID
  23. * @property integer $ZONE_MARK
  24. */
  25. class BaseResource extends ActiveRecord
  26. {
  27. /**
  28. * @inheritdoc
  29. */
  30. public static function tableName()
  31. {
  32. return 'base_resource';
  33. }
  34. /**
  35. * @inheritdoc
  36. */
  37. public function rules()
  38. {
  39. return [
  40. [['RES_ID', 'PARENT_ID', 'CANCEL_FLAG', 'IF_DISABLED', 'RES_TYPE_ID', 'CREATE_USER_ID', 'UPDATE_USER_ID', 'AREA_ID', 'ZONE_MARK'], 'integer'],
  41. [['RES_NAME'], 'string', 'max' => 200],
  42. [['CREATE_TIME', 'UPDATE_TIME'], 'string', 'max' => 20],
  43. [['TOP_ORG_ID'], 'string', 'max' => 100],
  44. ];
  45. }
  46. /**
  47. * @inheritdoc
  48. */
  49. public function attributeLabels()
  50. {
  51. return [
  52. 'ID' => 'ID',
  53. 'RES_ID' => '资源ID',
  54. 'RES_NAME' => '资源名称',
  55. 'PARENT_ID' => '父级资源ID,若无父级资源,则为0',
  56. 'CANCEL_FLAG' => '记录有效性标记,CANCEL_FLAG=0记录有效;CANCEL_FLAG=1,记录已删除',
  57. 'IF_DISABLED' => '组织机构当前是否已作废,0未作废,1已作废',
  58. 'RES_TYPE_ID' => '资源类别,DICT_TYPE.ID',
  59. 'CREATE_USER_ID' => '代下单用户ID,BASE_USER.ID,用户A代替用户B下单,则MAIN_CREATE_USER_ID=A,CREATE_USER_ID=B',
  60. 'CREATE_TIME' => '订单创建时间,订单创建日期距2016-01-01的天数,算法用',
  61. 'UPDATE_USER_ID' => '记录最后更新用户ID',
  62. 'UPDATE_TIME' => '记录最后更新时间',
  63. 'AREA_ID' => '站点应用POI',
  64. 'TOP_ORG_ID' => 'Top Org ID',
  65. 'ZONE_MARK' => '站点或区域标志,0:站点,1:区域',
  66. ];
  67. }
  68. /**
  69. * Function Description:通过车资源类型id获取车次资源详情
  70. * Function Name: getBusResInfoArray
  71. * @param $bus_type_res_id
  72. *
  73. * @return array|bool|null|ActiveRecord
  74. *
  75. * @author 张帅
  76. */
  77. public function getBusResInfoArray($bus_type_res_id)
  78. {
  79. $result = self::find()
  80. ->select([
  81. 'res_name',//车型名称
  82. 'seat_type' => 'parent_id',//车座类型
  83. ])
  84. ->where([
  85. 'and',
  86. ['=', 'res_id', $bus_type_res_id],
  87. ['=', 'cancel_flag', 0],
  88. ['=', 'if_disabled', 0],
  89. ])
  90. ->asArray()->one();
  91. #region 判断车型是否存在
  92. if(count($result) == 0){
  93. return false;
  94. }else{
  95. $result['total_count'] = str_replace('座','',$result['res_name']);
  96. }
  97. #endregion
  98. return $result;
  99. }
  100. /**
  101. * Function Description:获取车辆基本信息
  102. * Function Name: getCarBaseInfo
  103. *
  104. * @return array|ActiveRecord[]
  105. *
  106. * @author 李健
  107. */
  108. public function getCarBaseInfo()
  109. {
  110. $select = [
  111. 'res_id as id',
  112. 'res_name as cartype',
  113. ];
  114. $where = ['and'];
  115. $where[] = ['=','res_type_id',69];
  116. $where[] = ['=','cancel_flag',0];
  117. $res = self::find()->select($select)->from(self::tableName())->where($where)->asArray()->all();
  118. return $res;
  119. }
  120. /**
  121. * Function Description:检查站点是否存在
  122. * Function Name: checkArea
  123. * @param $res_id
  124. *
  125. * @return array|ActiveRecord[]
  126. *
  127. * @author 李健
  128. */
  129. public function checkArea($res_id)
  130. {
  131. $select = [
  132. 'area_id'=>new Expression('ifnull(area_id,0)')
  133. ];
  134. $where = ['and',['=','res_id',$res_id]];
  135. $res = self::find()
  136. ->select($select)
  137. ->from(self::tableName())
  138. ->where($where)
  139. ->asArray()
  140. ->all();
  141. return $res;
  142. }
  143. /**
  144. * Function Description:获取站点信息
  145. * Function Name: getStationInfo
  146. * @param $res_id
  147. *
  148. * @return array|ActiveRecord[]
  149. *
  150. * @author 李健
  151. */
  152. public function getStationInfo($res_id)
  153. {
  154. $select = [
  155. 'a.res_id',
  156. 'a.res_name',
  157. 'parent_area_id_list'=>new Expression("ifnull(concat(b.parent_area_id_list,'{',b.area_id,'}'),'')"),
  158. 'parent_area_name_list'=>new Expression("ifnull(concat(b.parent_area_name_list,'{',b.area_name,'}'),'')"),
  159. 'checkport_res_id'=>new Expression("ifnull((
  160. SELECT
  161. group_concat(res_id)
  162. FROM
  163. base_resource
  164. WHERE
  165. res_type_id = 79
  166. AND cancel_flag = 0
  167. AND parent_id = a.res_id
  168. ),0)"),
  169. 'checkport_res_name'=>new Expression("ifnull(
  170. (
  171. SELECT
  172. group_concat(res_name)
  173. FROM
  174. base_resource
  175. WHERE
  176. res_type_id = 79
  177. AND cancel_flag = 0
  178. AND parent_id = a.res_id
  179. ),'')")
  180. ];
  181. $where = ['and',['=','a.cancel_flag',0],['=','a.res_id',$res_id]];
  182. $res = self::find()
  183. ->select($select)
  184. ->from(self::tableName().' a')
  185. ->leftJoin(BaseAreaView::tableName().' b','a.area_id = b.area_id')
  186. ->where($where)
  187. ->asArray()
  188. ->all();
  189. return $res;
  190. }
  191. /**
  192. * Function Description:获取酒店指定类型的子类名称
  193. * Function Name: getHotelType
  194. * @param $res_type_id
  195. *
  196. * @return array|ActiveRecord[]
  197. *
  198. * @author 李健
  199. */
  200. public function getHotelType($res_type_id)
  201. {
  202. $select = [
  203. 'res_name'
  204. ];
  205. $where = [
  206. 'and',
  207. ['=','cancel_flag',0],
  208. ['in','res_type_id',$res_type_id]
  209. ];
  210. $res = self::find()->select($select)->from(self::tableName())->where($where)->asArray()->all();
  211. return $res;
  212. }
  213. /**
  214. * Function Description:获取出发城市名字
  215. * Function Name: getFromCities
  216. * @return array
  217. * @author 田玲菲
  218. */
  219. public function getFromCities(){
  220. // $sql = 'select DISTINCT br.res_name from run_station as rs INNER JOIN base_resource as br on br.res_id = rs.station_res_id where rs.PROD_ID in (select DISTINCT rm.prod_id from run_main as rm where rm.RUN_DATE <= date_add(NOW(), interval 1 MONTH) AND rm.RUN_DATE > DATE_FORMAT(NOW(),\'%Y-%m-%d\')) AND (rs.station_inout_type < 110)';
  221. $sql = 'SELECT DISTINCT bat.area_name FROM run_station AS rs INNER JOIN base_resource AS br ON br.res_id = rs.station_res_id left JOIN base_area as ba on br.AREA_ID = ba.ID LEFT JOIN base_area as bat on bat.ID = ba.PARENT_ID WHERE rs.PROD_ID IN (SELECT DISTINCT rm.prod_id FROM run_main AS rm WHERE rm.RUN_DATE <= date_add(NOW(), INTERVAL 1 MONTH) AND rm.RUN_DATE > DATE_FORMAT(NOW(), \'%Y-%m-%d\')) AND (rs.station_inout_type < 110)';
  222. $res = Yii::$app->db->createCommand($sql)->queryAll();
  223. return $res;
  224. }
  225. public function getFromCity(){
  226. $sql = "SELECT
  227. c.AREA_NAME
  228. FROM
  229. run_main a
  230. INNER JOIN run_prod b ON a.RUN_ID = b.RUN_ID
  231. INNER JOIN base_area c ON b.START_STATION_AREA_ID = c.ID
  232. INNER JOIN opera_line e on a.PROD_ID = e.LINE_ID
  233. WHERE
  234. a.RUN_DATE <= date_add(NOW(), INTERVAL 1 MONTH)
  235. AND a.RUN_DATE > DATE_FORMAT(NOW(), '%Y-%m-%d')
  236. AND a.RUN_STATUS = 138
  237. AND b.CANCEL_FLAG = 0
  238. and e.LINE_TYPE = 255
  239. GROUP BY
  240. c.AREA_NAME
  241. HAVING c.AREA_NAME not in ('上海迪士尼','上海迪士尼乐园')
  242. ";
  243. $res = Yii::$app->db->createCommand($sql)->queryAll();
  244. return $res;
  245. }
  246. /**
  247. * Function Description:根据res_name获取res_id
  248. * Function Name: getResId
  249. * @param $res_name
  250. * @return array|null|ActiveRecord
  251. * @author 田玲菲
  252. */
  253. public function getResId($res_name){
  254. $select = [
  255. 'res_id'
  256. ];
  257. $where = [
  258. 'and',
  259. ['=','cancel_flag',0],
  260. ['in','res_name',$res_name]
  261. ];
  262. $res = self::find()->select($select)->from(self::tableName())->where($where)->asArray()->one();
  263. return $res;
  264. }
  265. /**
  266. * Function Description:获取一个月内出发的prod_id
  267. * Function Name: getProdIds
  268. * @return array
  269. * @author 田玲菲
  270. */
  271. public function getProdIds(){
  272. $sql = 'select DISTINCT rm.prod_id from run_main as rm where rm.RUN_DATE <= date_add(NOW(), interval 1 MONTH) AND rm.RUN_DATE > DATE_FORMAT(NOW(),\'%Y-%m-%d\')';
  273. $res = Yii::$app->db->createCommand($sql)->queryAll();
  274. $data = [];
  275. if(count($res)>0){
  276. foreach($res as $v){
  277. $data['prod_id'][] = $v['prod_id'];
  278. }
  279. }
  280. return $data;
  281. }
  282. /**
  283. * Function Description:根据res_id和prod_id_arr获取到达的城市
  284. * Function Name: getTocities
  285. * @param $res_id
  286. * @param $prod_arr
  287. * @return array|ActiveRecord[]
  288. * @author 田玲菲
  289. */
  290. public function getTocities($res_id,$prod_arr){
  291. $select = [
  292. 'c.res_name as toCity',
  293. 'c.create_time as preSaleStart',
  294. ];
  295. $where = [
  296. 'and',
  297. ['=','c.cancel_flag',0],
  298. ['=','b.station_res_id',$res_id],
  299. ['>','a.STATION_INOUT_TYPE',108],
  300. ['in','a.PROD_ID',$prod_arr],
  301. ['>','a.CREATE_TIME',date("Y-m",strtotime("-3 month"))],
  302. ];
  303. $res = self::find()->select($select)->from(RunStation::tableName() .' as a')
  304. ->leftJoin(RunStation::tableName() . ' as b','a.PROD_ID = b.PROD_ID AND a.STATION_ORDER_ID > b.STATION_ORDER_ID')->leftJoin(self::tableName() .' as c','c.RES_ID = a.STATION_RES_ID')
  305. ->where($where)->distinct()
  306. ->createCommand()
  307. ->asArray()->all();
  308. return $res;
  309. }
  310. //根据城市名字获取下属res_id
  311. public function getResIdByName($name){
  312. $select = [
  313. 'br.res_id',
  314. ];
  315. $where = [
  316. 'and',
  317. ['=','bat.AREA_NAME',$name],
  318. ['=','br.CANCEL_FLAG',0],
  319. ['=','br.RES_TYPE_ID',24],
  320. ];
  321. $res = self::find()->select($select)->from(self::tableName() .' as br')->innerJoin(BaseArea::tableName().' as ba','br.AREA_ID = ba.id')->innerJoin(BaseArea::tableName().' as bat','ba.PARENT_ID = bat.id')->where($where)->asArray()->all();
  322. return $res;
  323. }
  324. //获取近期出发的res_id
  325. public function getRecentResIds(){
  326. $sql = 'SELECT DISTINCT DISTINCT br.res_id FROM run_station AS rs INNER JOIN base_resource AS br ON br.res_id = rs.station_res_id WHERE rs.PROD_ID IN ( SELECT DISTINCT rm.prod_id FROM run_main AS rm WHERE rm.RUN_DATE <= date_add(NOW(), INTERVAL 1 MONTH) AND rm.RUN_DATE > DATE_FORMAT(NOW(), \'%Y-%m-%d\') ) AND (rs.station_inout_type < 110);';
  327. $res = Yii::$app->db->createCommand($sql)->queryAll();
  328. $data = [];
  329. if(count($res)>0){
  330. foreach($res as $v){
  331. $data['res_id'][] = $v['res_id'];
  332. }
  333. }
  334. return $data;
  335. }
  336. //获取近期线路所有上下车点的城市名
  337. public function getInOutCity($cityId){
  338. $sql = "SELECT
  339. d.AREA_NAME toCity,MAX(a.RUN_DATE) preSaleEnd,MIN(a.RUN_DATE) preSaleStart
  340. from run_main a
  341. INNER JOIN run_prod b on a.RUN_ID = b.RUN_ID
  342. INNER JOIN base_area c on b.START_STATION_AREA_ID = c.ID
  343. INNER JOIN base_area d on b.END_STATION_AREA_ID = d.ID
  344. INNER JOIN opera_line e on a.PROD_ID = e.LINE_ID
  345. WHERE (c.parent_id = {$cityId} or c.id={$cityId})
  346. and a.RUN_DATE <= date_add(NOW(), INTERVAL 1 MONTH)
  347. AND a.RUN_DATE > DATE_FORMAT(NOW(), '%Y-%m-%d')
  348. and a.RUN_STATUS = 138
  349. and b.CANCEL_FLAG = 0
  350. and e.LINE_TYPE = 255
  351. GROUP BY d.AREA_NAME
  352. HAVING toCity not in ('上海迪士尼','上海迪士尼乐园')
  353. ";
  354. $res = Yii::$app->db->createCommand($sql)->queryAll();
  355. return $res;
  356. }
  357. }