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.
 
 
 
 

349 line
16 KiB

  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: Steven
  5. * Date: 2016/10/15
  6. * Time: 15:43
  7. * 销售规则
  8. */
  9. class saleRule extends base
  10. {
  11. /**
  12. * 根据票种信息获取销售规则列表
  13. * @param $param
  14. * @return mixed
  15. */
  16. public function getRuleList($param)
  17. {
  18. $user_id = $this->user_id;
  19. $ticket_list = isset($param['ticket_id']) ? $param['ticket_id'] : false;
  20. $line_type = isset($param['line_type']) ? $param['line_type'] : false; //线路类型:255:直通、256:穿梭 316:组合
  21. $current_page = isset($param['current_page']) ? $param['current_page'] : false;
  22. $page_size = isset($param['page_size']) ? $param['page_size'] : false;
  23. if (false === $ticket_list || false === $current_page || false === $page_size || false === $line_type) {
  24. $result['code'] = '2';
  25. $result['info'] = "缺少必要参数";
  26. return $result;
  27. }
  28. $ticket_id = explode(',', $ticket_list);
  29. $ticket_info = $this->getTicketById($ticket_id[0]); //获取票种基本信息
  30. if (!$ticket_info) {
  31. $result['code'] = '1';
  32. $result['info'] = '获取票种基本信息失败';
  33. return $result;
  34. }
  35. $sql = "CALL SP_GET_TICKET_SALE_RULE($user_id,$ticket_id[0],$current_page,$page_size,$line_type)";
  36. zzcsUtils::writeLog($sql);
  37. $res = $this->procQuery($sql);
  38. if ($res['code'] != 0) {
  39. $json["code"] = (string)$res['code'];
  40. $json["info"] = $res['info'];
  41. return $json;
  42. }
  43. $result['code'] = '0';
  44. $result['info'] = '销售规则获取成功';
  45. $result['page'] = array(
  46. 'currpage' => $res['data'][0][0]["currpage"],
  47. 'total_page' => $res['data'][0][0]["total_page"],
  48. 'total_count' => $res['data'][0][0]["total"],
  49. 'page_size' => $res['data'][0][0]["page_size"]
  50. );
  51. $result['ticket_info'] = $ticket_info;
  52. $result['station'] = $res['data'][1];
  53. return $result;
  54. }
  55. /**
  56. * 获取销售规则基本信息
  57. * @param $param
  58. * @return mixed
  59. */
  60. public function getRuleBaseInfo($param)
  61. {
  62. $user_id = $this->user_id;
  63. $ticket_id = isset($param['ticket_id']) ? $param['ticket_id'] : false;
  64. $supplier_id = isset($param['supplier_id']) ? $param['supplier_id'] : false;
  65. if (!$ticket_id || !$supplier_id) {
  66. $result['code'] = 2;
  67. $result['info'] = "缺少必要参数";
  68. return $result;
  69. }
  70. $ticket_id_list = explode(',', $ticket_id);
  71. $supplier_id_list = explode(',', $supplier_id);
  72. $sql = "CALL SP_GET_SALE_RULE_BY_SUPPLIER_ID($user_id,$ticket_id_list[0],$supplier_id_list[0])";
  73. zzcsUtils::writeLog($sql);
  74. $res = $this->procQuery($sql);
  75. if ($res['code'] != 0) {
  76. $json["code"] = (string)$res['code'];
  77. $json["info"] = $res['info'];
  78. return $json;
  79. }
  80. $saleType = Dictionary::saleType(); //销售方式
  81. $define_type = Dictionary::define_type(); //佣金定义类型
  82. $back_commision_type = Dictionary::back_commision_type(); //返佣类型
  83. $back_commision_method = Dictionary::back_commision_method(); //返佣方式
  84. $result['code'] = '0';
  85. $result['info'] = '获取销售规则获取成功';
  86. $result['base_info'] = $res['data'][0][0];
  87. $result['base_info']['authority_status'] = "1";
  88. $result['saleType'] = $saleType;
  89. $result['define_type'] = $define_type;
  90. $result['back_commision_type'] = $back_commision_type;
  91. $result['back_commision_method'] = $back_commision_method;
  92. return $result;
  93. }
  94. /*
  95. * 修改销售规则的授权状态
  96. * @param $param
  97. * @return mixed
  98. */
  99. public function updateAuthorize($param)
  100. {
  101. $user_id = $this->user_id;
  102. $ticket_list = isset($param['ticket_list']) ? $param['ticket_list'] : false;
  103. $authority_status = isset($param['authority_status']) ? $param['authority_status'] : false;
  104. $supplier_id = isset($param['supplier_id']) ? $param['supplier_id'] : false;
  105. $line_id = isset($param['line_id']) ? $param['line_id'] : false;
  106. if (!$ticket_list || $authority_status === false || !$supplier_id) {
  107. $result['code'] = 2;
  108. $result['info'] = "缺少必要参数";
  109. return $result;
  110. }
  111. $tick_list = explode(",", $ticket_list);
  112. foreach ($tick_list as $value) {
  113. $sql = "select count(*) as num from opera_tickets_distrib where TICKET_ID=$value AND SUPPLIER_ID=$supplier_id";
  114. $res_exist = $this->query($sql);
  115. if ($res_exist[0]['num'] > 0) {//更新
  116. $sql_auth_update = "update opera_tickets_distrib SET AUTHORITY_STATUS=$authority_status,UPDATE_USER_ID=$user_id,UPDATE_TIME=now() WHERE TICKET_ID=$value AND SUPPLIER_ID=$supplier_id;";
  117. $res_update = $this->exec($sql_auth_update);
  118. } else { //新增
  119. $sql_proc = "CALL SP_GET_SALE_RULE_BY_SUPPLIER_ID($user_id,$ticket_list,$supplier_id)";
  120. zzcsUtils::writeLog($sql_proc);
  121. $res = $this->procQuery($sql_proc);
  122. if ($res['code'] != 0) {
  123. $json["code"] = (string)$res['code'];
  124. $json["info"] = $res['info'];
  125. return $json;
  126. }
  127. $res_ticket = $res['data'][0][0];
  128. $sale_type = $res_ticket['sale_type']; //销售方式
  129. $commision_flag = $res_ticket['commision_flag']; //是否有佣金规则
  130. $commision_type = $res_ticket['commision_type']; //佣金类别
  131. $back_commision_type = $res_ticket['back_commision_type']; //返佣类别
  132. $back_commision_method = $res_ticket['back_commision_method']; //返佣方式,按销售或按结算
  133. $back_percent = empty($res_ticket['back_percent']) ? 0 : $res_ticket['back_percent']; //返佣比例
  134. $back_value = empty($res_ticket['back_value']) ? 0 : $res_ticket['back_value']; //返佣金额
  135. $prod_price = empty($res_ticket['prod_price']) ? 0 : $res_ticket['prod_price']; //分销价
  136. $sql_auth_insert = "INSERT INTO opera_tickets_distrib
  137. (CREATE_USER_ID,CREATE_TIME,UPDATE_USER_ID,UPDATE_TIME,CANCEL_FLAG,LINE_ID,TICKET_ID,SUPPLIER_ID,SALE_TYPE,COMMISION_FLAG,COMMISION_TYPE,BACK_COMMISION_TYPE,BACK_COMMISION_METHOD,BACK_PERCENT,BACK_VALUE,PROD_PRICE,AUTHORITY_STATUS)
  138. VALUES(
  139. $user_id,NOW(),$user_id,NOW(),0,$line_id,$ticket_list,$supplier_id,$sale_type,$commision_flag,$commision_type,$back_commision_type,$back_commision_method,$back_percent,$back_value,$prod_price,$authority_status)";
  140. zzcsUtils::writeLog($sql);
  141. $res_update = $this->exec($sql_auth_insert);
  142. }
  143. }
  144. if ($res_update) {
  145. $code = 0;
  146. $msg = '票种授权状态修改成功';
  147. } else {
  148. $code = 1;
  149. $msg = '票种授权状态修改失败';
  150. }
  151. $result['code'] = $code;
  152. $result['info'] = $msg;
  153. return $result;
  154. }
  155. /**
  156. * 根据票种修改规则信息
  157. * @param $param
  158. * @return mixed
  159. */
  160. public function updateRule($param)
  161. {
  162. $sql_str = "";
  163. $ticket_list = isset($param['ticket_list']) ? $param['ticket_list'] : false; //票种ID列表
  164. $supplier_id = isset($param['supplier_list']) ? $param['supplier_list'] : false; //渠道商ID列表
  165. if (!$ticket_list || !$supplier_id) {
  166. $result['code'] = 2;
  167. $result['info'] = "缺少必要参数";
  168. return $result;
  169. }
  170. $tick_list = explode(',', $ticket_list);
  171. $supp_list = explode(',', $supplier_id);
  172. foreach ($supp_list as $v) {
  173. foreach ($tick_list as $value) {
  174. $sql = "select count(*) as num from opera_tickets_distrib where TICKET_ID=$value AND SUPPLIER_ID=$v and cancel_flag = 0";
  175. $res = $this->query($sql);
  176. if ($res[0]['num'] == 0) //数据库表无记录,新增
  177. {
  178. $sql_add = $this->assembleAddSql($value, $v, $param);
  179. $sql_str .= $sql_add;
  180. } else //有记录,更新
  181. {
  182. $sql_update = $this->assembleUpdateSql($value, $v, $param);
  183. $sql_str .= $sql_update;
  184. }
  185. }
  186. }
  187. //执行SQL
  188. zzcsUtils::writeLog($sql_str);
  189. $res = $this->exec($sql_str);
  190. if ($res) {
  191. $code = 0;
  192. $msg = '票种销售规则修改成功';
  193. } else {
  194. $code = 1;
  195. $msg = '票种销售规则修改失败';
  196. }
  197. $result['code'] = (string)$code;
  198. $result['info'] = $msg;
  199. return $result;
  200. }
  201. /**
  202. * 修改销售规则时拼接新增记录的sql
  203. * @param $ticket
  204. * @param $param
  205. * @return string
  206. */
  207. private function assembleAddSql($ticket, $supplier_id, $param)
  208. {
  209. $user_id = $this->user_id;
  210. $sale_type = isset($param['sale_type']) ? $param['sale_type'] : false; //销售方式
  211. $prod_price = isset($param['prod_price']) ? $param['prod_price'] : false; //分销价
  212. $is_rule = isset($param['is_rule']) ? $param['is_rule'] : false;//是否有佣金规则 1:有,0:无
  213. $authority_status = isset($param['authority_status']) ? $param['authority_status'] : false; //授权开关 0:关 1:开
  214. $line_id = isset($param['line_id']) ? $param['line_id'] : false;
  215. if (!$ticket || $sale_type === false || $prod_price === false || $is_rule === false || $authority_status === false || !$line_id) {
  216. $result['code'] = 2;
  217. $result['info'] = "缺少必要参数";
  218. return $result;
  219. }
  220. $sql_fore = "CREATE_USER_ID,CREATE_TIME,UPDATE_USER_ID,UPDATE_TIME,LINE_ID,TICKET_ID,SUPPLIER_ID,SALE_TYPE,PROD_PRICE,COMMISION_FLAG,AUTHORITY_STATUS"; //sql键
  221. $sql_tail = "$user_id,NOW(),$user_id,NOW(),$line_id,$ticket,$supplier_id,$sale_type,$prod_price,$is_rule,$authority_status";//sql值
  222. if ($is_rule == 1) {//有佣金规则
  223. $define_type = isset($param['define_type']) ? $param['define_type'] : false; //佣金规则类型
  224. if (!$define_type) {
  225. $result['code'] = 2;
  226. $result['info'] = "缺少必要参数";
  227. return $result;
  228. }
  229. $sql_fore .= ",COMMISION_TYPE";
  230. $sql_tail .= ",$define_type";
  231. if ($define_type == 304) // 304:产品定义
  232. {
  233. $commision_type = isset($param['commision_type']) ? $param['commision_type'] : false; //返佣类别
  234. $commision_methed = isset($param['commision_methed']) ? $param['commision_methed'] : false; //返佣方式
  235. if (!$commision_type || !$commision_methed) {
  236. $result['code'] = 2;
  237. $result['info'] = "缺少必要参数";
  238. return $result;
  239. }
  240. $sql_fore .= ",BACK_COMMISION_TYPE,BACK_COMMISION_METHOD";
  241. $sql_tail .= ",$commision_type,$commision_methed";
  242. if ($commision_methed == 308 || $commision_methed == 309) //按照销售金额
  243. {
  244. $back_value = isset($param['back_value']) ? $param['back_value'] : 0; //返佣比例
  245. $sql_fore .= ",BACK_PERCENT";
  246. $sql_tail .= ",$back_value";
  247. } elseif ($commision_methed == 335) //按照销售单位
  248. {
  249. $back_value = isset($param['back_value']) ? $param['back_value'] : 0; //值
  250. $sql_fore .= ",BACK_VALUE";
  251. $sql_tail .= ",$back_value";
  252. }
  253. }
  254. // elseif ($define_type == 303) { //303 渠道定义
  255. // $sql_fore .= ",CANCEL_FLAG";
  256. // $sql_tail .= ",1";
  257. // }
  258. }
  259. $sql_str = "INSERT INTO opera_tickets_distrib($sql_fore) VALUES($sql_tail);";
  260. return $sql_str;
  261. }
  262. /**
  263. * 修改销售规则时拼接更新记录的sql
  264. * @param $ticket
  265. * @param $param
  266. * @return string
  267. */
  268. private function assembleUpdateSql($ticket, $supplier_id, $param)
  269. {
  270. $user_id = $this->user_id;
  271. $sale_type = isset($param['sale_type']) ? $param['sale_type'] : false; //销售方式
  272. $prod_price = isset($param['prod_price']) ? $param['prod_price'] : false; //分销价
  273. $is_rule = isset($param['is_rule']) ? $param['is_rule'] : false;//是否有佣金规则 1:有,0:无
  274. $authority_status = isset($param['authority_status']) ? $param['authority_status'] : false; //授权开关 0:关 1:开
  275. if (!$ticket || $sale_type === false || $prod_price === false || $is_rule === false || $authority_status === false) {
  276. $result['code'] = 2;
  277. $result['info'] = "缺少必要参数";
  278. return $result;
  279. }
  280. $sql_base = "UPDATE_USER_ID=$user_id,UPDATE_TIME=now(),SUPPLIER_ID=$supplier_id,SALE_TYPE=$sale_type,PROD_PRICE=$prod_price,COMMISION_FLAG=$is_rule,AUTHORITY_STATUS=$authority_status";
  281. if ($is_rule == 1) {//有佣金规则
  282. $define_type = isset($param['define_type']) ? $param['define_type'] : false; //佣金规则类型
  283. if (!$define_type) {
  284. $result['code'] = 2;
  285. $result['info'] = "缺少必要参数";
  286. return $result;
  287. }
  288. $sql_base .= ",COMMISION_TYPE=$define_type";
  289. if ($define_type == 304) // 303:渠道定义 304:产品定义
  290. {
  291. $commision_type = isset($param['commision_type']) ? $param['commision_type'] : false; //返佣类别
  292. $commision_methed = isset($param['commision_methed']) ? $param['commision_methed'] : false; //返佣方式
  293. if (!$commision_type || !$commision_methed) {
  294. $result['code'] = 2;
  295. $result['info'] = "缺少必要参数";
  296. return $result;
  297. }
  298. $sql_base .= ",BACK_COMMISION_TYPE=$commision_type,BACK_COMMISION_METHOD=$commision_methed";
  299. if ($commision_methed == 308 || $commision_methed == 309) { //按照销售金额
  300. $back_value = isset($param['back_value']) ? $param['back_value'] : 0; //返佣比例
  301. $sql_base .= ",BACK_PERCENT=$back_value";
  302. } elseif ($commision_methed == 335) { //按照销售单位
  303. $back_value = isset($param['back_value']) ? $param['back_value'] : 0; //值
  304. $sql_base .= ",BACK_VALUE=$back_value";
  305. }
  306. }
  307. // elseif ($define_type == 303) { //303 渠道定义
  308. // $sql_base .= ",CANCEL_FLAG=1";
  309. // }
  310. }
  311. $sql_str = "update opera_tickets_distrib SET $sql_base WHERE TICKET_ID=$ticket AND SUPPLIER_ID=$supplier_id;";
  312. return $sql_str;
  313. }
  314. /**
  315. * 根据票种ID获取票种基本信息
  316. * @param $ticketId
  317. * @return bool
  318. */
  319. private function getTicketById($ticketId)
  320. {
  321. $sql = "SELECT ticket_id,line_id,
  322. (select type_name from dict_type where id = seat_type) as seat_type_name,
  323. (select type_name from dict_type where id = human_type) as human_type_name,
  324. prod_price,
  325. cus_price
  326. FROM opera_tickets
  327. WHERE cancel_flag = 0 AND TICKET_ID=$ticketId";
  328. $res = $this->query($sql);
  329. if ($res) {
  330. return $res[0];
  331. } else {
  332. return false;
  333. }
  334. }
  335. }