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.

323 lines
8.1 KiB

<?php
namespace app\base\controller\user\api;
use app\base\model\district\District;
use app\base\model\user\UserAddress;
use app\BaseController;
use think\facade\Db;
class Address extends BaseController
{
/**
* 获取默认地址
* @date 2021-03-01
*/
public function getDefaultAddress()
{
$param = input('post.');
$adress_logic = new \app\base\logic\user\Address();
$result = $adress_logic ->getDefaultAddress();
if ($result['code']) {
return json($result);
}
return json($result);
}
/**
* 我的地址列表
* @date 2021-03-01
*/
public function getAddressList()
{
$address_model = new UserAddress();
// 获取我的地址列表
$list = $address_model->getAllData([
['uid', '=', UID],
['user_id', '=', USER_ID],
], '*', 'is_default desc');
return sendSuccessMessage([
'list' => $list
]);
}
/**
* 是否有地址
* @date 2021-03-01
*/
public function hasAddress()
{
$address_model = new UserAddress();
// 获取我的地址列表
$number = $address_model->getNumber([
['uid', '=', UID],
['user_id', '=', USER_ID],
]);
return sendSuccessMessage([
'is_frist' => empty($number) ? 1 : 0
]);
}
/**
* 设置默认地址
* @date 2021-03-01
*/
public function setDefault()
{
$param = input('post.');
$address_model = new UserAddress();
//加载地址
$address = $address_model->getOneData([
['id', '=', $param['address_id']]
]);
if (empty($address)) {
return sendErrorMessage(4001, '地址不存在');
}
if ($address['user_id'] != USER_ID) {
return sendErrorMessage(4002, '非本人操作');
}
Db::startTrans();
//设置为默认地址
$data = [
'is_default' => 1
];
$res = $address_model->dataUpdate($data, [
['id', '=', $param['address_id']]
]);
if (!$res) {
Db::rollback();
return sendErrorMessage(4003, '设置失败');
}
//其他地址取消默认地址
$count = $address_model->getNumber([
['user_id', '=', USER_ID],
['id', '<>', $param['address_id']],
['is_default', '=', 1],
]);
if (!empty($count)) {
$data = [
'is_default' => 0
];
$res = $address_model->dataUpdate($data, [
['user_id', '=', USER_ID],
['is_default', '=', 1],
['id', '<>', $param['address_id']]
]);
if (!$res) {
Db::rollback();
return sendErrorMessage(4004, '设置失败');
}
}
Db::commit();
return sendSuccessMessage([], '设置成功');
}
/**
* 取消默认地址
* @date 2021-03-01
*/
public function cancelDefault()
{
$param = input('post.');
$address_model = new UserAddress();
//加载地址
$address = $address_model->getOneData([
['id', '=', $param['address_id']]
]);
if (empty($address)) {
return sendErrorMessage(4001, '地址不存在');
}
if ($address['user_id'] != USER_ID) {
return sendErrorMessage(4002, '非本人操作');
}
//取消默认地址
$data = [
'is_default' => 0
];
$res = $address_model->dataUpdate($data, [
['id', '=', $param['address_id']]
]);
if (!$res) {
return sendErrorMessage(4003, '设置失败');
}
return sendSuccessMessage([], '取消默认地址成功');
}
/**
* 删除我的地址
* @date 2021-03-01
*/
public function delAddress()
{
$param = input('post.');
$address_model = new UserAddress();
$res = $address_model->dataDel([
['id', '=', $param['address_id']]
]);
if (!$res) {
return sendErrorMessage(4001, '删除失败');
}
return sendSuccessMessage([], '删除成功');
}
/**
* 我的地址
* @date 2021-03-01
*/
public function getAddressData()
{
$param = input('post.');
$address_model = new UserAddress();
$data = $address_model->getOneData(['id' => $param['address_id']]);
return sendSuccessMessage(['data' => $data]);
}
/**
* 添加修改地址
* @date 2021-03-01
*/
public function addressUpdate()
{
$param = input('post.');
$validate = [
'linkman' => 'require',
'mobile_phone' => 'require|mobile',
'address' => 'require',
];
$this->validate($param, $validate, [
'linkman.require' => '请填写联系人',
'mobile_phone.require' => '请填写联系方式',
'mobile_phone.mobile' => '请输入正确的手机号',
'address.require' => '请填写详细地址',
]);
$address_model = new UserAddress();
$district_model = new District();
$data = [
'uid' => UID,
'user_agent' => USER_AGENT,
'user_id' => USER_ID,
'linkman' => $param['linkman'],
'mobile_phone' => $param['mobile_phone'],
'province_id' => $param['province_id'],
'city_id' => $param['city_id'],
'area_id' => $param['area_id'],
'province' => $district_model->getDistrictName($param['province_id']),
'city' => $district_model->getDistrictName($param['city_id']),
'area' => $district_model->getDistrictName($param['area_id']),
'address' => $param['address'],
'lat' => $param['lat'],
'lng' => $param['lng'],
'is_default' => $param['is_default']
];
if (!empty($param['id'])) {
$data['id'] = $param['id'];
}
Db::startTrans();
if ($data['is_default'] == 1) {
//获取默认地址数量
$count = $address_model->getNumber([
['user_id', '=', USER_ID],
['is_default', '=', 1],
]);
if (!empty($count)) {
$data_update = [
'is_default' => 0,
'update_time' => time()
];
$res = $address_model->where([
['user_id', '=', USER_ID]
])->update($data_update);
if (!$res) {
Db::rollback();
return sendErrorMessage(4001, '更新地址失败');
}
}
}
$res = $address_model->dataUpdate($data);
if (!$res) {
Db::rollback();
return sendErrorMessage(4002, '更新地址失败');
}
Db::commit();
return sendSuccessMessage();
}
/**
* 获取地址
* @throws \app\exception\SendInfo
*/
public function loadAddress()
{
$lat = input('post.lat/f', '');
$lng = input('post.lng/f', '');
if (!$lat || !$lng) {
sendSuccessMessage([
'address' => '未知位置'
]);
}
$jcapi_logic = new \app\api\logic\JcApi();
$address_info = $jcapi_logic->coordinateToAddressByTencentMap($lat, $lng);
$address = $address_info['result']['formatted_addresses']['recommend'] ?? '未获取到';
sendSuccessMessage([
'address' => $address,
]);
}
/**
* 根据经纬度获取城市
* @throws \app\exception\SendInfo
*/
public function getLocationCity()
{
$lat = input('lat', 0);
$lng = input('lng', 0);
$result = invoke(JcApi::class)->coordinateToAddressByTencentMap($lat, $lng);
sendSuccessMessage($result['result']['address_component']['city']);
}
}