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.

CheckSubmitData.php 11 KiB

3 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286
  1. <?php
  2. /**
  3. *
  4. * ============================================================================
  5. * * 版权所有 蜘蛛出行 * *
  6. * 网站地址: http://www.zhizhuchuxing.com
  7. * ----------------------------------------------------------------------------
  8. * 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和
  9. * 使用;不允许对程序代码以任何形式任何目的的再发布。
  10. * ============================================================================
  11. * Author By: 张帅
  12. * PhpStorm CheckSubmitData.php
  13. * Create By 2017/4/14 18:16 $
  14. */
  15. namespace backend\modules\api\logic;
  16. use backend\modules\api\models\BaseSupplier;
  17. use common\models\CheckData;
  18. use yii\db\Query;
  19. class CheckSubmitData extends Query
  20. {
  21. /**
  22. * Function Description:检验巴士数据
  23. * Function Name: checkBusProductData
  24. * @param string $bus_product 巴士产品
  25. *
  26. * @return array|bool|mixed
  27. *
  28. * @author 张帅
  29. */
  30. public function checkBusProductData($bus_product)
  31. {
  32. $check_data = new CheckData();
  33. if ($bus_product == '' || $bus_product == 'null') {
  34. return [];
  35. } else {
  36. #region 将json数据转为数组
  37. if (is_null(json_decode($bus_product, true))) {
  38. return false;
  39. }
  40. $bus_product_arr = json_decode($bus_product, true);
  41. #endregion
  42. foreach ($bus_product_arr as $key => $vel) {
  43. /**
  44. * 检验数据
  45. * 班次id 必有且不为空
  46. * 票种id 必有且不为空
  47. * 人数 必有且不为空,0 且必须为整数
  48. * 价格 不必有 有则比为数字
  49. * 车号 不必有 有则比为数字
  50. */
  51. if (!$check_data->checkArrayData($vel, [[['run_id', 'ticket_id'], 1], [['prod_num'], 4], [['prod_price', 'bus_no'], 3]])) {
  52. return false;
  53. }
  54. #region 检验价格和车号是否存在
  55. $bus_product_arr[$key]['prod_price'] = !isset($vel['prod_price']) ? 0 : $vel['prod_price'];//单价
  56. $bus_product_arr[$key]['bus_no'] = !isset($vel['bus_no']) ? 0 : $vel['bus_no'];//车号
  57. #endregion
  58. }
  59. return $bus_product_arr;
  60. }
  61. }
  62. /**
  63. * Function Description:检验酒店数据
  64. * Function Name: checkHotelProductData
  65. * @param string $hotel_product 酒店产品
  66. *
  67. * @return array|bool|mixed
  68. *
  69. * @author 张帅
  70. */
  71. public function checkHotelProductData($hotel_product)
  72. {
  73. $check_data = new CheckData();
  74. if ($hotel_product == '' || $hotel_product == 'null') {
  75. return [];
  76. } else {
  77. #region 将json数据转为数组
  78. if (is_null(json_decode($hotel_product, true))) {
  79. return false;
  80. }
  81. $hotel_product_arr = json_decode($hotel_product, true);
  82. #endregion
  83. foreach ($hotel_product_arr as $key => $vel) {
  84. /**
  85. * 检验数据
  86. * 酒店id 必有且不为空
  87. * 基础房型id 必有且不为空
  88. * 房型好 必有且不为空
  89. * 房间数据 必有且数量大于0
  90. */
  91. if (!$check_data->checkArrayData($vel, [[['hotel_id', 'base_room_type', 'room_type'], 1], [['run_room'], 5]])) {
  92. return false;
  93. }
  94. $run_date_arr = [];
  95. foreach ($vel['run_room'] as $room_key => $room_vel) {
  96. /**
  97. * 检验数据
  98. * 入住日期 必有且是****-**-** 5
  99. * 人数 必有且不为空,0 且必须为整数
  100. * 价格 不必有 有则比为数字
  101. */
  102. if (!$check_data->checkArrayData($room_vel, [[['run_date'], 6], [['prod_num'], 4], [['prod_price', 'back_value'], 3]])) {
  103. return false;
  104. }
  105. #region 检验价格是否存在
  106. $hotel_product_arr[$key]['run_room'][$room_key]['prod_price'] = !isset($room_vel['prod_price']) ? 0 : $room_vel['prod_price'];//单价
  107. $hotel_product_arr[$key]['run_room'][$room_key]['back_value'] = !isset($room_vel['back_value']) ? 0 : $room_vel['back_value'];//佣金
  108. $hotel_product_arr[$key]['run_room'][$room_key]['run_time'] = !isset($room_vel['run_time']) ? '19:00' : $room_vel['run_time'];//单价
  109. #endregion
  110. $run_date_arr[] = $room_vel['run_date'];
  111. }
  112. #region 获取入住酒店的起止时间
  113. sort($run_date_arr);
  114. $hotel_product_arr[$key]['start_date'] = $run_date_arr[0];
  115. rsort($run_date_arr);
  116. $hotel_product_arr[$key]['end_date'] = $run_date_arr[0];
  117. #endregion
  118. }
  119. return $hotel_product_arr;
  120. }
  121. }
  122. /**
  123. * Function Description:检验门票数据
  124. * Function Name: checkTicketProductData
  125. * @param string $ticket_product 门票产品
  126. *
  127. * @return array|bool|mixed
  128. *
  129. * @author 张帅
  130. */
  131. public function checkTicketProductData($ticket_product)
  132. {
  133. $check_data = new CheckData();
  134. if ($ticket_product == '' || $ticket_product == 'null') {
  135. return [];
  136. } else {
  137. #region 将json数据转为数组
  138. if (is_null(json_decode($ticket_product, true))) {
  139. return false;
  140. }
  141. $ticket_product_arr = json_decode($ticket_product, true);
  142. #endregion
  143. foreach ($ticket_product_arr as $key => $vel) {
  144. /**
  145. * 检验数据
  146. * 门票id 必有且不为空
  147. * 游玩日期 必有且是****-**-** 5
  148. * 子票种 必有且数量大于0
  149. */
  150. if (!$check_data->checkArrayData($vel, [[['ticket_id'], 1], [['run_date'], 6], [['son_ticket'], 5]])) {
  151. return false;
  152. }
  153. foreach ($vel['son_ticket'] as $son_key => $son_vel) {
  154. /**
  155. * 检验数据
  156. * 子票种id 必有且不为空
  157. * 人数 必有且不为空,0 且必须为整数
  158. * 价格 不必有 有则比为数字
  159. */
  160. if (!$check_data->checkArrayData($son_vel, [[['son_ticket_id'], 1], [['prod_num'], 4], [['prod_price'], 3]])) {
  161. return false;
  162. }
  163. #region 检验价格是否存在
  164. $ticket_product_arr[$key]['son_ticket'][$son_key]['prod_price'] = !isset($son_vel['prod_price']) ? 0 : $son_vel['prod_price'];//单价
  165. #endregion
  166. }
  167. }
  168. return $ticket_product_arr;
  169. }
  170. }
  171. /**
  172. * Function Description:检验乘客数据
  173. * Function Name: checkCustomerInfoData
  174. * @param string $customer_info 乘客数据
  175. *
  176. * @return bool
  177. *
  178. * @author 张帅
  179. */
  180. public function checkCustomerInfoData($customer_info)
  181. {
  182. $check_data = new CheckData();
  183. #region 将json数据转为数组
  184. if (is_null(json_decode($customer_info, true)) || $customer_info == '') {
  185. return false;
  186. }
  187. $customer_info_arr = json_decode($customer_info, true);
  188. #endregion
  189. /**
  190. * 检验数据
  191. * 顾客名称 必有且不为空
  192. * 顾客电话 必有且不为空
  193. * 顾客证件类型 必有且不为空
  194. * 顾客证件号 必有且不为空
  195. */
  196. if (!$check_data->checkArrayData($customer_info_arr, [[['customer_name'/*, 'customer_mobile'*/, 'customer_id_type'], 1]])) {
  197. return false;
  198. }
  199. #region 检验备注
  200. $customer_info_arr['customer_memo'] = !isset($customer_info_arr['customer_memo']) ? '' : $customer_info_arr['customer_memo'];//单价
  201. #endregion
  202. return $customer_info_arr;
  203. }
  204. /**
  205. * Function Description:检验订单基础信息
  206. * Function Name: checkOrderInfoData
  207. * @param array $order_info 订单基本信息
  208. * @param float $group_order_price 组合产品总价
  209. * @return bool|mixed
  210. *
  211. * @author 张帅
  212. */
  213. public function checkOrderInfoData($order_info,$group_order_price)
  214. {
  215. $check_data = new CheckData();
  216. #region 将json数据转为数组
  217. if (is_null(json_decode($order_info, true)) || $order_info == '') {
  218. return false;
  219. }
  220. $order_info_arr = json_decode($order_info, true);
  221. #endregion
  222. /**
  223. * 检验数据
  224. * 用户id 必有且不为空
  225. * 渠道id 必有且不为空
  226. */
  227. if (!$check_data->checkArrayData($order_info_arr, [[['user_id', 'outside_sale_org_id'], 1]])) {
  228. return false;
  229. }
  230. //对组合产品价格做检测,最多二位小数
  231. if (!$check_data->checkArrayData(array('group_order_price'=>$group_order_price), [[['group_order_price'], 7]])) {
  232. return false;
  233. }
  234. #region 获取渠道名称和业务员
  235. $channel_info = BaseSupplier::find()->select('sales_man,supplier_name')->where(['id' => $order_info_arr['outside_sale_org_id']])->asArray()->one();
  236. if ($order_info_arr['sales_man'] == '') {
  237. $order_info_arr['sales_man'] = empty($channel_info['sales_man']) ? '' : $channel_info['sales_man'];//业务员
  238. }
  239. $order_info_arr['org_name'] = empty($channel_info['supplier_name']) ? '' : $channel_info['supplier_name'];//渠道名称
  240. #endregion
  241. #region 判断必要数据是否存在
  242. $order_info_arr['member_id'] = !isset($order_info_arr['member_id']) ? 0 : $order_info_arr['member_id'];//会员号
  243. $order_info_arr['outside_sale_order_no'] = !isset($order_info_arr['outside_sale_order_no']) ? '' : $order_info_arr['outside_sale_order_no'];//渠道订单号
  244. $order_info_arr['order_book_status'] = !isset($order_info_arr['order_book_status']) ? 0 : $order_info_arr['order_book_status'];//是否预定
  245. $order_info_arr['pay_type'] = !isset($order_info_arr['pay_type']) ? 275 : $order_info_arr['pay_type'];//付款类型
  246. $order_info_arr['order_pay_status'] = !isset($order_info_arr['order_pay_status']) ? 0 : $order_info_arr['order_pay_status'];//是否支付
  247. $order_info_arr['sales_man'] = !isset($order_info_arr['sales_man']) ? '' : $order_info_arr['sales_man'];//业务员
  248. $order_info_arr['order_status'] = $order_info_arr['order_pay_status'] == 0 ? 145 : 146;//订单状态
  249. #endregion
  250. return $order_info_arr;
  251. }
  252. }