store_transport.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377
  1. <?php
  2. /**
  3. * 物流工具
  4. *
  5. *
  6. *
  7. ***/
  8. defined('InShopNC') or exit('Access Invalid!');
  9. class store_transportControl extends BaseSellerControl {
  10. public function __construct(){
  11. parent::__construct();
  12. if ($_GET['type'] != '' && $_GET['type'] != 'select') $_GET['type'] = 'select';
  13. if ($_POST['type'] != '' && $_POST['type'] != 'select') $_POST['type'] = 'select';
  14. }
  15. public function indexOp(){
  16. $this->listOp();
  17. }
  18. /**
  19. * 运费模板列表
  20. *
  21. */
  22. public function listOp(){
  23. //读取语言包
  24. Language::read('transport');
  25. $model_transport = Model('transport');
  26. $list = $model_transport->getTransportList(array('store_id'=>$_SESSION['store_id']),4);
  27. if (!empty($list) && is_array($list)){
  28. $transport = array();
  29. foreach ($list as $v) {
  30. if (!array_key_exists($v['id'],$transport)){
  31. $transport[$v['id']] = $v['title'];
  32. }
  33. }
  34. $extend = $model_transport->getExtendList(array('transport_id'=>array('in',array_keys($transport))));
  35. // 整理
  36. if (!empty($extend)) {
  37. $tmp_extend = array();
  38. foreach ($extend as $val) {
  39. $tmp_extend[$val['transport_id']]['data'][] = $val;
  40. if ($val['is_default'] == 1) {
  41. $tmp_extend[$val['transport_id']]['price'] = $val['sprice'];
  42. }
  43. }
  44. $extend = $tmp_extend;
  45. }
  46. }
  47. /**
  48. * 页面输出
  49. */
  50. Tpl::output('list',$list);
  51. Tpl::output('extend',$extend);
  52. Tpl::output('show_page',$model_transport->showpage());
  53. self::profile_menu('transport','transport');
  54. Tpl::showpage('store_transport.list');
  55. }
  56. /**
  57. * 新增运费模板
  58. *
  59. */
  60. public function addOp(){
  61. //读取语言包
  62. Language::read('transport');
  63. $areas = Model('area')->getAreas();
  64. if (strtoupper(CHARSET) == 'GBK') {
  65. $areas = Language::getGBK($areas);
  66. }
  67. Tpl::output('areas', $areas);
  68. self::profile_menu('transport','transport');
  69. Tpl::showpage('store_transport.add');
  70. }
  71. public function editOp(){
  72. //读取语言包
  73. Language::read('transport');
  74. $id = intval($_GET['id']);
  75. $model_transport = Model('transport');
  76. $transport = $model_transport->getTransportInfo(array('id'=>$id));
  77. $extend = $model_transport->getExtendInfo(array('transport_id'=>$id));
  78. Tpl::output('transport',$transport);
  79. Tpl::output('extend',$extend);
  80. $areas = Model('area')->getAreas();
  81. if (strtoupper(CHARSET) == 'GBK') {
  82. $areas = Language::getGBK($areas);
  83. }
  84. Tpl::output('areas', $areas);
  85. self::profile_menu('transport','transport');
  86. Tpl::showpage('store_transport.add');
  87. }
  88. public function deleteOp(){
  89. //读取语言包
  90. Language::read('transport');
  91. $id = intval($_GET['id']);
  92. $model_transport = Model('transport');
  93. $transport = $model_transport->getTransportInfo(array('id'=>$id));
  94. if ($transport['store_id'] != $_SESSION['store_id']){
  95. showMessage(Language::get('transport_op_fail'),$_SERVER['HTTP_REFERER'],'html','error');
  96. }
  97. //查看是否正在被使用
  98. if ($model_transport->isUsing($id)){
  99. showMessage(Language::get('transport_op_using'),$_SERVER['HTTP_REFERER'],'html','error');
  100. }
  101. if($model_transport->delTansport(array('id'=>$id))){
  102. header('location: '.$_SERVER['HTTP_REFERER']);exit;
  103. }else{
  104. showMessage(Language::get('transport_op_fail'),$_SERVER['HTTP_REFERER'],'html','error');
  105. }
  106. }
  107. public function cloneOp(){
  108. //读取语言包
  109. Language::read('transport');
  110. $id = intval($_GET['id']);
  111. $model_transport = Model('transport');
  112. $transport = $model_transport->getTransportInfo(array('id'=>$id));
  113. unset($transport['id']);
  114. $transport['title'] .= Language::get('transport_clone_name');
  115. $transport['update_time'] = time();
  116. try {
  117. $trans = new trans_wapper($model_transport,__METHOD__);
  118. $insert = $model_transport->addTransport($transport);
  119. if ($insert) {
  120. $extend = $model_transport->getExtendList(array('transport_id'=>$id));
  121. foreach ($extend as $k=>$v) {
  122. foreach ($v as $key=>$value) {
  123. $extend[$k]['transport_id'] = $insert;
  124. }
  125. unset($extend[$k]['id']);
  126. }
  127. $insert = $model_transport->addExtend($extend);
  128. }
  129. if (!$insert) throw new Exception(Language::get('transport_op_fail'));
  130. $trans->commit();
  131. header('location: '.$_SERVER['HTTP_REFERER']);exit;
  132. }catch (Exception $e){
  133. $trans->rollback();
  134. showMessage($e->getMessage(),$_SERVER['HTTP_REFERER'],'html','error');
  135. }
  136. }
  137. /**
  138. * 保存运费模板
  139. *
  140. */
  141. public function saveOp(){
  142. if (!chksubmit()) return false;
  143. //读取语言包
  144. Language::read('transport');
  145. $trans_info = array();
  146. $trans_info['title'] = $_POST['title'];
  147. $trans_info['send_tpl_id'] = 1;
  148. $trans_info['store_id'] = $_SESSION['store_id'];
  149. $trans_info['update_time'] = TIMESTAMP;
  150. $model_transport = Model('transport');
  151. if (is_numeric($_POST['transport_id'])){
  152. //编辑时,删除所有附加表信息
  153. $trans_info['id'] = intval($_POST['transport_id']);
  154. $transport_id = intval($_POST['transport_id']);
  155. $model_transport->transUpdate($trans_info);
  156. $model_transport->delExtend($transport_id);
  157. }else{
  158. //新增
  159. $transport_id = $model_transport->addTransport($trans_info);
  160. }
  161. //保存默认运费
  162. if (is_array($_POST['default']['kd'])){
  163. $a = $_POST['default']['kd'];
  164. $trans_list[0]['area_id'] = '';
  165. $trans_list[0]['area_name'] = Language::get('transport_country');
  166. $trans_list[0]['snum'] = $a['start'];
  167. $trans_list[0]['sprice'] = $a['postage'];
  168. $trans_list[0]['xnum'] = $a['plus'];
  169. $trans_list[0]['xprice'] = $a['postageplus'];
  170. $trans_list[0]['is_default'] = 1;
  171. $trans_list[0]['transport_id'] = $transport_id;
  172. $trans_list[0]['transport_title'] = $_POST['title'];
  173. $trans_list[0]['top_area_id'] = '';
  174. }
  175. //保存自定义地区的运费设置
  176. $areas = $_POST['areas']['kd'];
  177. $special = $_POST['special']['kd'];
  178. if (is_array($areas) && is_array($special)){
  179. //$key需要加1,因为快递默认运费占了第一个下标
  180. foreach ($special as $key=>$value) {
  181. if (empty($areas[$key])) continue;
  182. $areas[$key] = explode('|||',$areas[$key]);
  183. $trans_list[$key+1]['area_id'] = ','.$areas[$key][0].',';
  184. $trans_list[$key+1]['area_name'] = $areas[$key][1];
  185. $trans_list[$key+1]['snum'] = $value['start'];
  186. $trans_list[$key+1]['sprice'] = $value['postage'];
  187. $trans_list[$key+1]['xnum'] = $value['plus'];
  188. $trans_list[$key+1]['xprice'] = $value['postageplus'];
  189. $trans_list[$key+1]['is_default'] = 2;
  190. $trans_list[$key+1]['transport_id'] = $transport_id;
  191. $trans_list[$key+1]['transport_title'] = $_POST['title'];
  192. //计算省份ID
  193. $province = array();
  194. $tmp = explode(',',$areas[$key][0]);
  195. if (!empty($tmp) && is_array($tmp)){
  196. $city = Model('area')->getCityProvince();
  197. foreach ($tmp as $t) {
  198. $pid = $city[$t];
  199. if (!in_array($pid,$province) && !empty($pid))$province[] = $pid;
  200. }
  201. }
  202. if (count($province)>0){
  203. $trans_list[$key+1]['top_area_id'] = ','.implode(',',$province).',';
  204. }else{
  205. $trans_list[$key+1]['top_area_id'] = '';
  206. }
  207. $i++;
  208. }
  209. }
  210. $result = $model_transport->addExtend($trans_list);
  211. if ($result){
  212. header('location: index.php?act=store_transport&type='.$_POST['type']);exit;
  213. }else{
  214. showMessage(Language::get('transport_op_fail'),$_SERVER['HTTP_REFERER'],'html','error');
  215. }
  216. }
  217. /**
  218. * 货到付款地区设置
  219. *
  220. */
  221. public function offpay_areaOp()
  222. {
  223. /*if (!checkPlatformStore()) {
  224. showMessage('本功能仅限平台自营店使用', '', 'html', 'error');
  225. }*/
  226. $model_parea = Model('offpay_area');
  227. $store_id = $_SESSION['store_id'];
  228. if (chksubmit()) {
  229. if (!preg_match('/^[\d,]+$/',$_POST['county'])) {
  230. $_POST['county'] = '';
  231. }
  232. //内置自营店ID
  233. $area_info = $model_parea->getAreaInfo(array('store_id'=>$store_id));
  234. $data = array();
  235. $county = trim($_POST['county'],',');
  236. $data['area_id'] = serialize(explode(',',$county));
  237. if (!$area_info) {
  238. $data['store_id'] = $store_id;
  239. $result = $model_parea->addArea($data);
  240. } else {
  241. $result = $model_parea->updateArea(array('store_id'=>$store_id),$data);
  242. }
  243. if ($result) {
  244. showMessage('保存成功');
  245. } else {
  246. showMessage('保存失败','','html','error');
  247. }
  248. }
  249. //取出支持货到付款的县ID及上级市ID
  250. $parea_info = $model_parea->getAreaInfo(array('store_id'=>$store_id));
  251. if (!empty($parea_info['area_id'])) {
  252. $parea_ids = @unserialize($parea_info['area_id']);
  253. }
  254. if (empty($parea_ids)) {
  255. $parea_ids = array();
  256. }
  257. Tpl::output('areaIds', $parea_ids);
  258. $model_area = Model('area');
  259. $areas = $model_area->getAreas();
  260. Tpl::output('areas', $areas);
  261. //取出支持货到付款县ID的上级市ID
  262. $city_checked_child_array = array();
  263. foreach ($parea_ids as $i)
  264. if (isset($areas['parent'][$i]))
  265. $city_checked_child_array[$areas['parent'][$i]][] = $i;
  266. Tpl::output('city_checked_child_array', $city_checked_child_array);
  267. //市级下面的县是不是全部支持货到付款,如果全部支持,默认选中
  268. //如果其中部分县支持货到付款,默认不选中但显示一个支付到付县的数量
  269. //格式 city_id => 下面支持到付的县ID数量
  270. $city_count_array = array();
  271. //格式 city_id => 是否选中true/false
  272. $city_checked_array = array();
  273. foreach ($city_checked_child_array as $city_id => $c) {
  274. $city_count_array[$city_id] = count($areas['children'][$city_id]);
  275. $c = count($c);
  276. if ($c > 0 && $c == $city_count_array[$city_id]) {
  277. $city_checked_array[$city_id] = true;
  278. }
  279. }
  280. Tpl::output('city_count_array', $city_count_array);
  281. Tpl::output('city_checked_array', $city_checked_array);
  282. //计算哪些省需要默认选中(即该省下面的所有县都支持到付,即所有市都是选中状态)
  283. $province_checked_array = array();
  284. foreach ($areas['children'][0] as $province_id) {
  285. $b = true;
  286. foreach ($areas['children'][$province_id] as $city_id) {
  287. if (empty($city_checked_array[$city_id])) {
  288. $b = false;
  289. break;
  290. }
  291. }
  292. if ($b)
  293. $province_checked_array[$province_id] = true;
  294. }
  295. Tpl::output('province_checked_array', $province_checked_array);
  296. $area_array_json = json_encode($model_area->getAreaArrayForJson());
  297. Tpl::output('area_array_json', $area_array_json);
  298. Language::read('transport');
  299. self::profile_menu('transport', 'offpay_area');
  300. Tpl::showpage('store_transport.offpay_area');
  301. }
  302. /**
  303. * 用户中心右边,小导航
  304. *
  305. * @param string $menu_type 导航类型
  306. * @param string $menu_key 当前导航的menu_key
  307. * @return
  308. */
  309. private function profile_menu($menu_type,$menu_key='') {
  310. Language::read('member_layout');
  311. $menu_array = array();
  312. switch ($menu_type) {
  313. case 'transport':
  314. case 'offpay_area':
  315. $menu_array = array(
  316. 1=>array('menu_key'=>'transport', 'menu_name'=>Language::get('nc_member_path_postage'), 'menu_url'=>'index.php?act=store_transport'),
  317. );
  318. //if (checkPlatformStore()) {
  319. $menu_array[] = array(
  320. 'menu_key' => 'offpay_area',
  321. 'menu_name' => '配送地区',
  322. 'menu_url' => 'index.php?act=store_transport&op=offpay_area'
  323. );
  324. //}
  325. break;
  326. }
  327. Tpl::output('member_menu',$menu_array);
  328. Tpl::output('menu_key',$menu_key);
  329. }
  330. }