文件
mashangyoujiu/Application/SmallProgramApi/Controller/AddressController.class.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'] : '逆地理编码失败'
));
}
}
}