You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

340 lines
12 KiB

  1. <?php
  2. /**
  3. * Function Description:自由行资源组合
  4. * Function Name: GrorpOrderList
  5. * ${PARAM_DOC}
  6. *
  7. * @return ${TYPE_HINT}
  8. * ${THROWS_DOC}
  9. *
  10. * @author 娄梦宁
  11. */
  12. namespace backend\modules\zzcs\logic;
  13. use backend\modules\zzcs\models\BaseMainCorporation;
  14. use backend\modules\zzcs\models\BaseUser;
  15. use backend\modules\zzcs\models\OperaHotel;
  16. use backend\modules\zzcs\models\OperaHotelRoom;
  17. use backend\modules\zzcs\models\OperaLine;
  18. use backend\modules\zzcs\models\OperaProduct;
  19. use backend\modules\zzcs\models\OperaTickets;
  20. use Faker\Provider\Base;
  21. use Yii;
  22. use backend\modules\zzcs\models\OperaTouristCommon;
  23. use backend\modules\zzcs\models\OperaTouristDetail;
  24. class TouristCombination
  25. {
  26. /**
  27. * Function Description:新增资源类型获取基础数据
  28. * Function Name: AddCombination
  29. * @param $tourist_id
  30. *
  31. * @return mixed
  32. *
  33. * @author 娄梦宁
  34. */
  35. public function AddCombination($tourist_id){
  36. $opera_tourist_common= new OperaTouristCommon();
  37. $opera_line=new SubmitGroupOrder();
  38. $opera_hotel=new OperaHotel();
  39. $opera_product=new OperaProduct();
  40. $base_user=new BaseUser();
  41. $data['tourist_arr']=$opera_tourist_common->getDayNight($tourist_id);
  42. //线路数组 *****仅考虑微信商城渠道下可售*****
  43. $data['line_arr']=$opera_line->getLineInfo(0,164);
  44. //酒店数组
  45. $data['hotel_arr']=$opera_hotel->getAllHotel();
  46. //门票数组
  47. $data['ticket_arr']=$opera_product->getTicketName();
  48. //获取用户运营主体
  49. $main_corporation=$base_user->getMainCorp();
  50. $data['tourist_id']=$tourist_id;
  51. $data['main_corporation']=$main_corporation;
  52. return $data;
  53. }
  54. /**
  55. * Function Description:通过线路id取上下车站点数组
  56. * Function Name: GetLineDetail
  57. * @param $line_id
  58. *
  59. * @return array
  60. *
  61. * @author 娄梦宁
  62. */
  63. public function GetLineDetail($line_id){
  64. $opera_line=new OperaLine();
  65. $result=$opera_line->getStationsByLineId($line_id);
  66. if(empty($result['ticket_arr'])){
  67. $json=[
  68. 'code'=>1,
  69. 'info'=>'该线路没有可选票种',
  70. ];
  71. }else{
  72. $json= [
  73. 'code'=>0,
  74. 'info'=>'获取成功',
  75. 'list'=>$result
  76. ];
  77. }
  78. return $json;
  79. }
  80. /**
  81. * Function Description:获取房型信息
  82. * Function Name: GetRoomType
  83. * @param $hotel_id
  84. *
  85. * @return array|null|\yii\db\ActiveRecord
  86. *
  87. * @author 娄梦宁
  88. */
  89. public function GetRoomType($hotel_id){
  90. $opera_hotel_room=new OperaHotelRoom();
  91. $result=$opera_hotel_room->get_room_type_by_hotel_id($hotel_id);
  92. return [
  93. 'code'=>0,
  94. 'info'=>'房型获取成功',
  95. 'list'=>$result,
  96. ];
  97. }
  98. /**
  99. * Function Description:获取子门票信息
  100. * Function Name: GetSonTickets
  101. * @param $ticket_id
  102. *
  103. * @return array
  104. *
  105. * @author 娄梦宁
  106. */
  107. public function GetSonTickets($ticket_id){
  108. $opera_hotel_room=new OperaProduct();
  109. $result=$opera_hotel_room->get_son_tickets($ticket_id);
  110. return [
  111. 'code'=>0,
  112. 'info'=>'子票种获取成功',
  113. 'list'=>$result,
  114. ];
  115. }
  116. /**
  117. * Function Description:资源组合新增提交
  118. * Function Name: SubmitAddRes
  119. * @param $bus_info
  120. * @param $hotel_info
  121. * @param $ticket_info
  122. * @param $tourist_id
  123. *
  124. * @return array
  125. *
  126. * @author 娄梦宁
  127. */
  128. public function SubmitAddRes($bus_info,$hotel_info,$ticket_info,$tourist_id,$tourist_day,$tourist_night){
  129. if($tourist_id=='' || $tourist_day==''){
  130. return [
  131. 'code'=>2,
  132. 'info'=>'参数错误'
  133. ];
  134. }
  135. $opera_tourist_detail=new OperaTouristDetail();
  136. $opera_tourist_common=new OperaTouristCommon();
  137. $bus_info=json_decode($bus_info,true);
  138. $hotel_info=json_decode($hotel_info,true);
  139. $ticket_info=json_decode($ticket_info,true);
  140. //开启大事务,小插入失败时全部回滚
  141. $transaction=Yii::$app->db->beginTransaction();
  142. //行程天数和晚数的回写
  143. $opera_tourist_common->upt_day_night($tourist_id,$tourist_day,$tourist_night);
  144. if(!empty($bus_info)){
  145. foreach($bus_info as $val){
  146. $result=$opera_tourist_detail->ist_res_detail($tourist_id,1,$val['line_id'],$val['ticket_id'],'11',$val['date_from_start'],$val['start_time'],1,$val['ticket_id'],$val['serial_id']);
  147. if(!$result){
  148. $transaction->rollBack();
  149. return [
  150. 'code'=>1,
  151. 'info'=>'数据库错误'
  152. ];
  153. }
  154. }
  155. }
  156. if(!empty($hotel_info)){
  157. foreach($hotel_info as $val){
  158. $result=$opera_tourist_detail->ist_res_detail($tourist_id,2,$val['room_type_id'],$val['room_type'],$val['crow_type'],$val['date_from_start'],$val['hotel_id'],$val['max_num'],$val['room_type'],$val['serial_id']);
  159. if(!$result){
  160. $transaction->rollBack();
  161. return [
  162. 'code'=>1,
  163. 'info'=>'数据库错误'
  164. ];
  165. }
  166. }
  167. }
  168. if(!empty($ticket_info)){
  169. foreach($ticket_info as $val){
  170. $result=$opera_tourist_detail->ist_res_detail($tourist_id,3,$val['ticket_id'],$val['adult_son_ticket'],$val['crow_type'],$val['date_from_start'],'',1,$val['child_son_ticket'],$val['serial_id']);
  171. if(!$result){
  172. $transaction->rollBack();
  173. return [
  174. 'code'=>1,
  175. 'info'=>'数据库错误'
  176. ];
  177. }
  178. }
  179. }
  180. $transaction->commit();
  181. return [
  182. 'code'=>0,
  183. 'info'=>'插入成功'
  184. ];
  185. }
  186. /**
  187. * Function Description:资源组合新增提交
  188. * Function Name: SubmitAddRes
  189. * @param $bus_info
  190. * @param $hotel_info
  191. * @param $ticket_info
  192. * @param $tourist_id
  193. *
  194. * @return array
  195. *
  196. * @author 娄梦宁
  197. */
  198. public function SubmitUptRes($bus_info,$hotel_info,$ticket_info,$tourist_id,$tourist_day,$tourist_night){
  199. if($tourist_id=='' || $tourist_day==''){
  200. return [
  201. 'code'=>2,
  202. 'info'=>'参数错误'
  203. ];
  204. }
  205. $opera_tourist_detail=new OperaTouristDetail();
  206. $opera_tourist_common=new OperaTouristCommon();
  207. $bus_info=json_decode($bus_info,true);
  208. $hotel_info=json_decode($hotel_info,true);
  209. $ticket_info=json_decode($ticket_info,true);
  210. //开启大事务,小插入失败时全部回滚
  211. $transaction=Yii::$app->db->beginTransaction();
  212. //行程天数和晚数的回写
  213. $opera_tourist_common->upt_day_night($tourist_id,$tourist_day,$tourist_night);
  214. //先把所有子资源cancel_flag=0
  215. $opera_tourist_detail->cancel_res($tourist_id);
  216. if(!empty($bus_info)){
  217. foreach($bus_info as $val){
  218. $result=$opera_tourist_detail->upt_res_detail($tourist_id,1,$val['line_id'],$val['ticket_id'],'11',$val['date_from_start'],$val['start_time'],1,$val['ticket_id'],$val['serial_id']);
  219. if(!$result){
  220. $transaction->rollBack();
  221. return [
  222. 'code'=>1,
  223. 'info'=>'数据库错误'
  224. ];
  225. }
  226. }
  227. }
  228. if(!empty($hotel_info)){
  229. foreach($hotel_info as $val){
  230. $result=$opera_tourist_detail->upt_res_detail($tourist_id,2,$val['room_type_id'],$val['room_type'],$val['crow_type'],$val['date_from_start'],$val['hotel_id'],$val['max_num'],$val['room_type'],$val['serial_id']);
  231. if(!$result){
  232. $transaction->rollBack();
  233. return [
  234. 'code'=>1,
  235. 'info'=>'数据库错误'
  236. ];
  237. }
  238. }
  239. }
  240. if(!empty($ticket_info)){
  241. foreach($ticket_info as $val){
  242. $result=$opera_tourist_detail->upt_res_detail($tourist_id,3,$val['ticket_id'],$val['adult_son_ticket'],$val['crow_type'],$val['date_from_start'],'',1,$val['child_son_ticket'],$val['serial_id']);
  243. if(!$result){
  244. $transaction->rollBack();
  245. return [
  246. 'code'=>1,
  247. 'info'=>'数据库错误'
  248. ];
  249. }
  250. }
  251. }
  252. $transaction->commit();
  253. return [
  254. 'code'=>0,
  255. 'info'=>'插入成功'
  256. ];
  257. }
  258. /**
  259. * Function Description:修改资源组合页数据获取
  260. * Function Name: UptCombination
  261. * @param $tourist_id
  262. *
  263. * @return mixed
  264. *
  265. * @author 娄梦宁
  266. */
  267. public function UptCombination($tourist_id){
  268. $opera_line_info=new OperaLine();
  269. $opera_hotel_room=new OperaHotelRoom();
  270. $opera_tickets=new OperaTickets();
  271. $opera_tourist_common= new OperaTouristCommon();
  272. $opera_line=new SubmitGroupOrder();
  273. $opera_hotel=new OperaHotel();
  274. $opera_product=new OperaProduct();
  275. $opera_tourist_detail=new OperaTouristDetail();
  276. $base_user=new BaseUser();
  277. $data['tourist_arr']=$opera_tourist_common->getDayNight($tourist_id);
  278. //线路数组 *****仅考虑微信商城渠道下可售*****
  279. $data['line_arr']=$opera_line->getLineInfo(0,164);
  280. //酒店数组
  281. $data['hotel_arr']=$opera_hotel->getAllHotel();
  282. //门票数组
  283. $data['ticket_arr']=$opera_product->getTicketName();
  284. $data['tourist_id']=$tourist_id;
  285. //获取子资源详情
  286. $list=$opera_tourist_detail->get_detail_by_tourist_id($tourist_id);
  287. //获取用户运营主体
  288. $main_corporation=$base_user->getMainCorp();
  289. //处理子资源详情数组
  290. $new_list=[
  291. 'main_corporation'=>$main_corporation,
  292. 'bus'=>[],
  293. 'hotel'=>[],
  294. 'ticket'=>[]
  295. ];
  296. foreach($list as $val){
  297. if($val['res_type']==1){
  298. //巴士数组
  299. //起始终点站名
  300. $res_bus_info=$opera_tickets->get_station_name($val['sub_res_id']);
  301. $val['start_station']=$res_bus_info['start_station'];
  302. $val['end_station']=$res_bus_info['end_station'];
  303. $val['start_station_res_id']=$res_bus_info['start_station_res_id'];
  304. $val['end_station_res_id']=$res_bus_info['end_station_res_id'];
  305. //获取票种数组
  306. $val['ticket_arr']=$opera_line_info->getStationsByLineId($val['top_res_id']);
  307. $new_list['bus'][$val['day_from_start']][]=$val;
  308. }
  309. if($val['res_type']==2){
  310. //酒店数组
  311. //子房型数组
  312. $room_type=$opera_hotel_room->get_room_type_by_hotel_id($val['extra_res_info']);
  313. $val['room_type']=$room_type;
  314. $new_list['hotel'][$val['day_from_start']][]=$val;
  315. $new_list['hotel']['crowd_type']=$val['crowd_type'];
  316. }
  317. if($val['res_type']==3){
  318. //门票数组
  319. //子门票数组
  320. $ticket_arr=$opera_product->get_son_tickets($val['top_res_id']);
  321. $val['son_ticket']=$ticket_arr;
  322. $new_list['ticket'][$val['day_from_start']][]=$val;
  323. $new_list['ticket']['crowd_type']=$val['crowd_type'];
  324. }
  325. }
  326. $data['list']=$new_list;
  327. return $data;
  328. }
  329. }