ajaxReturn($res); } if (empty(self::$uid)) { $res['status'] = -1; $res['msg'] = '用户未登录'; $this->ajaxReturn($res); } } /** * 获取所有收货地址 */ public function getAddress_v1() { $AddressModel = new RetailAddressModel(); $map = array( $AddressModel::UID => self::$uid, $AddressModel::STATE => 0, ); $addressList = $AddressModel->getSelect($map, '*', 'status desc'); if ($addressList) { $res['status'] = 1; $res['msg'] = '获取成功'; $res['list'] = $addressList; } else { $res['status'] = 0; $res['msg'] = '你还未设置收货地址'; } $this->ajaxReturn($res); } /** * 添加收货地址 */ public function addAddress_v1() { $name = trim(I('post.name')); $phone = trim(I('post.phone')); $address = trim(I('post.address')); $house_number = trim(I('post.house_number')); $province = I('post.province'); $city = I('post.city'); $area = I('post.area'); $status = I('post.status'); if (empty($name) || empty($phone) || empty($address)) { $result['status'] = 0; $result['msg'] = '缺少参数'; $this->ajaxReturn($result); } if (!verifyMobilePhone($phone)) { $res['status'] = 0; $res['msg'] = '手机号格式有误'; $this->ajaxReturn($res); } if (!verifyName($name)) { $res['status'] = 0; $res['msg'] = '姓名格式有误'; $this->ajaxReturn($res); } $AddressModel = D('RetailAddress'); $item = array( $AddressModel::NAME => $name, $AddressModel::PHONE => $phone, $AddressModel::ADDRESS => $address, $AddressModel::PROVINCE => $province, $AddressModel::CITY => $city, $AddressModel::AREA => $area, $AddressModel::UID => self::$uid, $AddressModel::STATE => 0, ); if (!empty($house_number)) { $item[$AddressModel::HOUSE_NUMBER] = $house_number; } $oldAddress = $AddressModel->getFind($item); if (!empty($oldAddress)) { $result['status'] = 0; $result['msg'] = '存在相同地址'; $this->ajaxReturn($result); } $item[$AddressModel::STATE] = 0; $item[$AddressModel::STATUS] = 0; $item[$AddressModel::ADD_TIME] = time(); if (isset($status)) { $item['status'] = $status; } $res = $AddressModel->addOrder($item); if ($res) { if (isset($status) && $status == 1) { //设为默认地址后把其他地址改为非默认 $AddressModel->updateOrder(['id' => ['neq', $res], 'uid' => self::$uid, 'state' => 0, 'status' => 1], ['status' => 0]); } $result['status'] = 1; $result['msg'] = '添加成功'; } else { $result['status'] = 0; $result['msg'] = '添加失败'; } $this->ajaxReturn($result); } /** * 获取单个地址 */ public function getAddressInfo_v1() { $id = I('post.id'); if (empty($id)) { $result['status'] = 0; $result['msg'] = '缺少参数'; $this->ajaxReturn($result); } $AddressModel = D('RetailAddress'); $map = array( $AddressModel::UID => self::$uid, $AddressModel::STATE => 0, $AddressModel::ID => $id, ); $addressList = $AddressModel->getFind($map); if ($addressList) { $res['status'] = 1; $res['msg'] = '查询成功'; $res['address'] = $addressList; } else { $res['status'] = 0; $res['msg'] = '未找到该地址'; } $this->ajaxReturn($res); } /** * 编辑地址 */ public function editAddress_v1() { $id = I('post.id'); $name = I('post.name'); $phone = I('post.phone'); $address = I('post.address'); $house_number = trim(I('post.house_number')); $province = I('post.province'); $city = I('post.city'); $area = I('post.area'); $status = I('post.status'); if (empty($id) || empty($name) || empty($phone) || empty($address)) { $result['status'] = 0; $result['msg'] = '缺少参数'; $this->ajaxReturn($result); } if (!verifyName($name)) { $result['status'] = 0; $result['msg'] = '姓名格式有误'; $this->ajaxReturn($result); } if (!verifyMobilePhone($phone)) { $result['status'] = 0; $result['msg'] = '手机号格式有误'; $this->ajaxReturn($result); } $AddressModel = D('RetailAddress'); $map = array( $AddressModel::UID => self::$uid, $AddressModel::STATE => 0, $AddressModel::ID => $id, ); $save = array( $AddressModel::NAME => $name, $AddressModel::PHONE => $phone, $AddressModel::ADDRESS => $address, $AddressModel::HOUSE_NUMBER => $house_number, $AddressModel::PROVINCE => $province, $AddressModel::CITY => $city, $AddressModel::AREA => $area, ); if (isset($status)) { $save['status'] = $status; } $update = $AddressModel->updateOrder($map, $save); if ($update) { if (isset($status) && $status == 1) { //设为默认地址后把其他地址改为非默认 $AddressModel->updateOrder(['id' => ['neq', $id], 'uid' => self::$uid, 'state' => 0, 'status' => 1], ['status' => 0]); } $result['status'] = 1; $result['msg'] = '编辑成功'; } else { $result['status'] = 0; $result['msg'] = '暂无修改'; } $this->ajaxReturn($result); } /** * 设置默认地址 */ public function setDefault_v1() { $id = I('post.id'); if (empty($id)) { $result['status'] = 0; $result['msg'] = '缺少参数'; $this->ajaxReturn($result); } $AddressModel = D('RetailAddress'); $map = array( $AddressModel::UID => self::$uid, $AddressModel::STATE => 0, $AddressModel::STATUS => 1 ); $AddressModel->updateOrder($map, array($AddressModel::STATUS => 0)); unset($map[$AddressModel::STATUS]); $map[$AddressModel::ID] = $id; $update = $AddressModel->updateOrder($map, array($AddressModel::STATUS => 1)); if ($update) { $res['status'] = 1; $res['msg'] = '设置成功'; } else { $res['status'] = 0; $res['msg'] = '设置失败'; } $this->ajaxReturn($res); } /** * 删除收货地址 */ public function delAddress_v1() { $id = I('post.id'); if (empty($id)) { $result['status'] = 0; $result['msg'] = '缺少参数'; $this->ajaxReturn($result); } $AddressModel = D('RetailAddress'); $map = array( $AddressModel::UID => self::$uid, $AddressModel::STATE => 0, $AddressModel::ID => $id, ); $update = $AddressModel->updateOrder($map, array($AddressModel::STATE => 1)); if ($update) { $res['status'] = 1; $res['msg'] = '删除成功'; } else { $res['status'] = 0; $res['msg'] = '删除失败'; } $this->ajaxReturn($res); } /** * 获取配送费 */ public function range_v1() { $id = I('post.address_id'); if (empty($id)) { $result['status'] = 0; $result['msg'] = '缺少参数'; $this->ajaxReturn($result); } $result = $this->getLngLatAndFee($id); $this->ajaxReturn($result); } /** * 获取配送费 */ public function range_v2() { $verifyItem = array( 'order_genre' => array('in' => array(1, 2, 3, 4), 'require_link' => array( array('require_data' => 1, 'link_key' => array('shopping_ids')), array('require_data' => 2, 'link_key' => array('group_id')), array('require_data' => 3, 'link_key' => array('spike_id')), array('require_data' => 4, 'link_key' => array('advance_id')), )), 'sku_id' => array('type' => 'number', 'min' => 0, 'require' => false), 'address_id' => array('type' => 'number', 'min' => 1), 'pickup_type' => array('in' => array(1, 2, 3)), 'group_id' => array('type' => 'number', 'min' => 1, 'require' => false, 'require_link' => array( array('require_data' => true, 'link_key' => array('num')), )), 'spike_id' => array('type' => 'number', 'min' => 1, 'require' => false, 'require_link' => array( array('require_data' => true, 'link_key' => array('num')), )), 'advance_id' => array('type' => 'number', 'min' => 1, 'require' => false, 'require_link' => array( array('require_data' => true, 'link_key' => array('num')), )), ); $post = I('post.'); $verify = verifyRequestParam($post, $verifyItem);//验证参数是否正确 if ($verify['error'] == 1) { $result['status'] = 0; $result['msg'] = $verify['key'] . $verify['message']; $this->ajaxReturn($result); } $address_id = $post['address_id']; $shopping_ids = $post['shopping_ids']; $pickup_type = $post['pickup_type']; $order_genre = $post['order_genre']; $num = $post['num']; if ($pickup_type == 2) { //同城配送 $result = $this->getLngLatAndFee($address_id); } else { //快递发货 $GoodsSkuModel = new RetailSkuGoodsModel(); $weight_value = 0; if (!empty($post['sku_id'])) { $weight_value = $GoodsSkuModel->getFindField(array('id' => $post['sku_id']), 'weight_value'); } switch ($order_genre) { case '1': //普通 $ShoppingModel = new RetailShoppingModel(); $fields = array( 's.id', 's.num', 's.goods_id', 's.sku_id', 'g.goods_name', 'g.weight_value', 'g.delivery_template_id', 'g.delivery_type', ); $shopping_ids = json_decode($shopping_ids, true); $goods = $ShoppingModel->getShoppingGoods(self::$uid, self::$store_id, $fields, $shopping_ids, '1,2'); foreach ($goods as $key => &$value) { if (!empty($value['sku_id'])) { $value['weight_value'] = $GoodsSkuModel->getFindField(array('id' => $value['sku_id']), 'weight_value'); } if (!empty($value['delivery_type'])) { $t = explode(',', $value['delivery_type']); if (!in_array('3', $t)) { $this->ajaxReturn(array( 'status' => 0, 'msg' => '商品' . $value['goods_name'] . '配送方式发生变化,请退出重试', )); } } else { $this->ajaxReturn(array( 'status' => 0, 'msg' => '商品' . $value['goods_name'] . '配送方式发生变化,请退出重试', )); } } break; case '2': //拼团 $delivery_template_id = D('RetailGroup')->getFindField(array('id' => $post['group_id']), 'delivery_template_id'); if (!$delivery_template_id) { $this->ajaxReturn(array( 'status' => 0, 'msg' => '商品配送方式发生变化,请退出重试', )); } $goods = array( array( 'num' => $num, 'delivery_template_id' => $delivery_template_id, 'weight_value' => $weight_value, ) ); break; case '3': //秒杀 $spike = D('RetailSpike')->getFind(array('id' => $post['spike_id']), 'delivery_template_id,skuid'); if (!$spike['delivery_template_id']) { $this->ajaxReturn(array( 'status' => 0, 'msg' => '商品配送方式发生变化,请退出重试', )); } if (!empty($spike['skuid']) && !$weight_value) { $weight_value = $GoodsSkuModel->getFindField(array('id' => $spike['skuid']), 'weight_value'); } $goods = array( array( 'num' => $num, 'delivery_template_id' => $spike['delivery_template_id'], 'weight_value' => $weight_value, ) ); break; case '4': //预售 $delivery_template_id = D('AdvanceGoods')->getFindField(array('id' => $post['advance_id']), 'delivery_template_id'); if (!$delivery_template_id) { $this->ajaxReturn(array( 'status' => 0, 'msg' => '商品配送方式发生变化,请退出重试', )); } $goods = array( array( 'num' => $num, 'delivery_template_id' => $delivery_template_id, 'weight_value' => $weight_value, ) ); break; } $AddressModel = D('RetailAddress'); $addressInfo = $AddressModel->getUserAddress($address_id); $province = $addressInfo['province']; $city = $addressInfo['city']; $area = $addressInfo['area']; $CostCalculation = new CostCalculationController(); $cost_fee = $CostCalculation->getFreight(json_encode($goods), self::$store_id, $province, $city, $area); if ($cost_fee['status'] == 1) { $result = array( 'status' => 1, 'msg' => '配送费获取成功', 'fee' => $cost_fee['delivery_fee'], ); } else { $result = $cost_fee; } } $this->ajaxReturn($result); } /** * 逆地理编码 - 根据经纬度获取地址信息 */ public function reverseGeocode() { $lat = I('post.lat', '', 'trim'); $lng = I('post.lng', '', 'trim'); $type = I('post.type', 1, 'intval'); // 坐标类型 1=GCJ02(高德/腾讯) 2=BD09(百度) // 参数验证 if (empty($lat) || empty($lng)) { $this->ajaxReturn(array( 'status' => 0, 'msg' => '经纬度参数不能为空' )); } // 验证经纬度格式 if (!is_numeric($lat) || !is_numeric($lng)) { $this->ajaxReturn(array( 'status' => 0, 'msg' => '经纬度格式不正确' )); } // 验证经纬度范围 if ($lat < -90 || $lat > 90 || $lng < -180 || $lng > 180) { $this->ajaxReturn(array( 'status' => 0, 'msg' => '经纬度超出有效范围' )); } // 调用逆地理编码函数 $result = getReverseGeocode($lat, $lng, $type); if ($result && $result['status'] == 1) { $this->ajaxReturn(array( 'status' => 1, 'msg' => '获取地址成功', 'data' => array( 'address' => $result['address'], 'province' => $result['province'], 'city' => $result['city'], 'district' => $result['district'], 'street' => $result['street'], 'street_number' => $result['street_number'] ) )); } else { $this->ajaxReturn(array( 'status' => 0, 'msg' => isset($result['msg']) ? $result['msg'] : '逆地理编码失败' )); } } }