505 行
18 KiB
PHP
可执行文件
505 行
18 KiB
PHP
可执行文件
<?php
|
|
|
|
namespace SmallProgramApi\Controller;
|
|
|
|
use Api\Controller\CostCalculationController;
|
|
use Common\Model\RetailAddressModel;
|
|
use Common\Model\RetailShoppingModel;
|
|
use Common\Model\RetailSkuGoodsModel;
|
|
use Think\Controller;
|
|
|
|
//[1.8.50]
|
|
|
|
class AddressController extends BaseController
|
|
{
|
|
public function _initialize()
|
|
{
|
|
parent::_initialize();
|
|
if (empty(self::$store_id)) {
|
|
$res['status'] = 0;
|
|
$res['msg'] = '缺少门店参数';
|
|
$this->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'] : '逆地理编码失败'
|
|
));
|
|
}
|
|
}
|
|
} |