462 lines
16 KiB
PHP
462 lines
16 KiB
PHP
<?php
|
|
/**
|
|
* Created by PhpStorm.
|
|
* Author:
|
|
* Date: 2017/3/2
|
|
* Time: 下午8:40
|
|
*/
|
|
|
|
namespace app\frontend\modules\member\controllers;
|
|
|
|
use app\common\components\ApiController;
|
|
use app\common\exceptions\ShopException;
|
|
use app\common\models\member\Address;
|
|
use app\common\models\Street;
|
|
use app\frontend\modules\member\services\MemberService;
|
|
use app\frontend\repositories\MemberAddressRepository;
|
|
|
|
class MemberAddressController extends ApiController
|
|
{
|
|
protected $publicAction = ['address', 'street'];
|
|
private $memberAddressRepository;
|
|
|
|
public function preAction()
|
|
{
|
|
parent::preAction();
|
|
$this->memberAddressRepository = app(MemberAddressRepository::class);
|
|
}
|
|
|
|
/*
|
|
* 会员收货地址列表
|
|
*
|
|
* */
|
|
|
|
public function index()
|
|
{
|
|
|
|
|
|
$memberId = \YunShop::app()->getMemberId();
|
|
// dd(get_class($this->memberAddressRepository->makeModel()));
|
|
// exit;
|
|
$addressList = $this->memberAddressRepository->getAddressList($memberId);
|
|
// dd($addressList);
|
|
//获取省市ID
|
|
if ($addressList) {
|
|
app('db')->cacheSelect = true;
|
|
$address = Address::getAllAddress();
|
|
app('db')->cacheSelect = false;
|
|
$addressList = $this->addressServiceForIndex($addressList, $address);
|
|
}
|
|
$msg = "获取列表成功";
|
|
return $this->successJson($msg, $addressList);
|
|
}
|
|
|
|
|
|
public function page()
|
|
{
|
|
|
|
|
|
$memberId = \YunShop::app()->getMemberId();
|
|
// dd(get_class($this->memberAddressRepository->makeModel()));
|
|
// exit;
|
|
$addressList = $this->memberAddressRepository->getAddressList($memberId);
|
|
// dd($addressList);
|
|
//获取省市ID
|
|
if ($addressList) {
|
|
app('db')->cacheSelect = true;
|
|
$address = Address::getAllAddress();
|
|
app('db')->cacheSelect = false;
|
|
$addressList = $this->addressServiceForIndex($addressList, $address);
|
|
}
|
|
$msg = "获取列表成功";
|
|
return $this->successJson($msg, $addressList);
|
|
}
|
|
|
|
|
|
//获取下单页要编辑的地址信息 &route=member.member-address.get-one-address
|
|
public function getOneAddress()
|
|
{
|
|
$id = \YunShop::request()->address_id;
|
|
|
|
if (empty($id)) {
|
|
return $this->errorJson('参数为空');
|
|
}
|
|
|
|
$address = $this->memberAddressRepository->getAddressById($id);
|
|
|
|
if (empty($address)) {
|
|
return $this->errorJson('地址不存在');
|
|
}
|
|
|
|
$address = $this->getAddressId($address);
|
|
|
|
|
|
return $this->successJson('信息', $address);
|
|
|
|
}
|
|
|
|
//通过地址名换取id
|
|
protected function getAddressId($member_address)
|
|
{
|
|
if (\Setting::get('shop.trade.is_street')) {
|
|
$member_address->province_id = Address::where('areaname', $member_address->province)->value('id');
|
|
$member_address->city_id = Address::where('areaname', $member_address->city)->where('parentid', $member_address->province_id)->value('id');
|
|
$member_address->district_id = Address::where('areaname', $member_address->district)->where('parentid', $member_address->city_id)->value('id');
|
|
$member_address->street_id = Street::where('areaname', $member_address->street)->where('parentid', $member_address->district_id)->value('id');
|
|
|
|
} else {
|
|
$member_address->province_id = Address::where('areaname', $member_address->province)->value('id');
|
|
$member_address->city_id = Address::where('areaname', $member_address->city)->where('parentid', $member_address->province_id)->value('id');
|
|
$member_address->district_id = Address::where('areaname', $member_address->district)->where('parentid', $member_address->city_id)->value('id');
|
|
}
|
|
|
|
return $member_address;
|
|
}
|
|
|
|
|
|
public function street(){
|
|
app('db')->cacheSelect = true;
|
|
|
|
$districtId = \YunShop::request()->get('district_id');
|
|
|
|
$default_street[] = [
|
|
'id' => 0,
|
|
'areaname' => "其他",
|
|
'parentid' => -1,
|
|
'level' => 4
|
|
];
|
|
if (\Setting::get('shop.trade.is_street')) {
|
|
// 开启街道设置
|
|
$street = Street::getStreetByParentId($districtId);
|
|
|
|
$street = !empty($street->toArray()) ? $street : $default_street;
|
|
} else {
|
|
$street = [];
|
|
}
|
|
if ($street) {
|
|
return $this->successJson('获取街道数据成功!', $street);
|
|
}
|
|
return $this->successJson('获取数据失败!', $street);
|
|
|
|
}
|
|
|
|
/*
|
|
* 地址JSON数据接口
|
|
*
|
|
* */
|
|
public function address()
|
|
{
|
|
app('db')->cacheSelect = true;
|
|
$address = Address::getAllAddress();
|
|
if (!$address) {
|
|
return $this->errorJson('数据获取失败,请联系管理员!');
|
|
}
|
|
$msg = '数据获取成功';
|
|
return $this->successJson($msg, $this->addressService($address));
|
|
}
|
|
|
|
/*
|
|
* 修改默认收货地址
|
|
*
|
|
* */
|
|
public function setDefault()
|
|
{
|
|
$memberId = \YunShop::app()->getMemberId();
|
|
$addressModel = $this->memberAddressRepository->getAddressById(\YunShop::request()->address_id);
|
|
|
|
if ($addressModel) {
|
|
if ($addressModel->isdefault) {
|
|
return $this->errorJson('默认地址不支持取消,请编辑或修改其他默认地址');
|
|
}
|
|
$addressModel->isdefault = 1;
|
|
$this->memberAddressRepository->cancelDefaultAddress($memberId);
|
|
if ($addressModel->save()) {
|
|
return $this->successJson('修改默认地址成功');
|
|
} else {
|
|
return $this->errorJson('修改失败,请刷新重试!');
|
|
}
|
|
}
|
|
return $this->errorJson('未找到数据或已删除,请重试!');
|
|
}
|
|
|
|
public function isRegion()
|
|
{
|
|
$is_region = \Setting::get('shop.trade.is_region');
|
|
$region_hide = \Setting::get('shop.trade.region_hide');
|
|
|
|
$is_region = $is_region?0:1;
|
|
$region_hide = $region_hide? 1 :0;
|
|
|
|
return $this->successJson('是否不填写区域', ['is_region' => $is_region,'region_hide' => $region_hide]);
|
|
}
|
|
|
|
protected function needRegion()
|
|
{
|
|
$is_region = \Setting::get('shop.trade.is_region');
|
|
|
|
return !$is_region;
|
|
}
|
|
|
|
/*
|
|
* 添加会员收获地址
|
|
*
|
|
* */
|
|
public function store()
|
|
{
|
|
$requestAddress = \YunShop::request();
|
|
if (!\YunShop::request()->username) {
|
|
return $this->errorJson('收件人不能为空');
|
|
}
|
|
try {
|
|
MemberService::mobileValidate([
|
|
'mobile' => request()->mobile,
|
|
'state' => request()->country_code,
|
|
]);
|
|
} catch (ShopException $exception) {
|
|
return $this->errorJson($exception->getMessage());
|
|
}
|
|
if ($this->needRegion()) {
|
|
if (!\YunShop::request()->province) {
|
|
return $this->errorJson('请选择省份');
|
|
}
|
|
if (!\YunShop::request()->city) {
|
|
return $this->errorJson('请选择城市');
|
|
}
|
|
if (!\YunShop::request()->district) {
|
|
return $this->errorJson('请选择区域');
|
|
}
|
|
}
|
|
if (!\YunShop::request()->address) {
|
|
return $this->errorJson('请输入详细地址');
|
|
}
|
|
if ($requestAddress) {
|
|
$data = array(
|
|
'username' => \YunShop::request()->username,
|
|
'mobile' => \YunShop::request()->mobile,
|
|
'zipcode' => '',
|
|
'isdefault' => \YunShop::request()->isdefault ?: 0,
|
|
'province' => \YunShop::request()->province ?: '',
|
|
'city' => \YunShop::request()->city ?: '',
|
|
'district' => \YunShop::request()->district ?: '',
|
|
'address' => \YunShop::request()->address ?: '',
|
|
'latitude' => \YunShop::request()->latitude ?: '',
|
|
'longitude' => \YunShop::request()->longitude ?: '',
|
|
'country_code' => \YunShop::request()->country_code ?: '',
|
|
'position_address' => \YunShop::request()->position_address ?: '',
|
|
);
|
|
if (\Setting::get('shop.trade.is_street')) {
|
|
if (\Setting::get('shop.trade.is_must_street') && !\YunShop::request()->street) {
|
|
return $this->errorJson('请选择乡镇/街道地址');
|
|
}
|
|
$data['street'] = \YunShop::request()->street ?: '';
|
|
}
|
|
$addressModel = $this->memberAddressRepository->fill($data);
|
|
$memberId = \YunShop::app()->getMemberId();
|
|
if ($addressModel->isdefault) {
|
|
//修改默认收货地址
|
|
$this->memberAddressRepository->cancelDefaultAddress($memberId);
|
|
}
|
|
$addressModel->uid = $memberId;
|
|
$addressModel->uniacid = \YunShop::app()->uniacid;
|
|
$validator = $addressModel->validator($addressModel->getAttributes());
|
|
if ($validator->fails()) {
|
|
return $this->errorJson($this->returnMsg($validator->messages()->toArray()));
|
|
}
|
|
if ($addressModel->save()) {
|
|
return $this->successJson('新增地址成功', $addressModel->toArray());
|
|
} else {
|
|
return $this->errorJson("数据写入出错,请重试!");
|
|
}
|
|
}
|
|
return $this->errorJson("未获取到数据,请重试!");
|
|
}
|
|
|
|
//处理返回表单验证信息
|
|
public function returnMsg($msgArr)
|
|
{
|
|
foreach ($msgArr as $item){
|
|
foreach($item as $em){
|
|
if($em){
|
|
return $em;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/*
|
|
* 修改会员收获地址
|
|
*
|
|
* */
|
|
public function update()
|
|
{
|
|
$addressModel = $this->memberAddressRepository->getAddressAndUserById(\YunShop::request()->address_id, \YunShop::app()->getMemberId());
|
|
if (!$addressModel) {
|
|
return $this->errorJson("未找到数据或已删除");
|
|
}
|
|
if (!\YunShop::request()->username) {
|
|
return $this->errorJson('收件人不能为空');
|
|
}
|
|
try {
|
|
MemberService::mobileValidate([
|
|
'mobile' => request()->mobile,
|
|
'state' => request()->country_code,
|
|
]);
|
|
} catch (ShopException $exception) {
|
|
return $this->errorJson($exception->getMessage());
|
|
}
|
|
if ($this->needRegion()) {
|
|
if (!\YunShop::request()->province) {
|
|
return $this->errorJson('请选择省份');
|
|
}
|
|
if (!\YunShop::request()->city) {
|
|
return $this->errorJson('请选择城市');
|
|
}
|
|
if (!\YunShop::request()->district) {
|
|
return $this->errorJson('请选择区域');
|
|
}
|
|
}
|
|
if (!\YunShop::request()->address) {
|
|
return $this->errorJson('请输入详细地址');
|
|
}
|
|
$requestAddress = array(
|
|
'username' => \YunShop::request()->username,
|
|
'mobile' => \YunShop::request()->mobile,
|
|
'zipcode' => '',
|
|
'province' => \YunShop::request()->province ?: '',
|
|
'city' => \YunShop::request()->city ?: '',
|
|
'district' => \YunShop::request()->district ?: '',
|
|
'address' => \YunShop::request()->address ?: '',
|
|
'latitude' => \YunShop::request()->latitude ?: '',
|
|
'longitude' => \YunShop::request()->longitude ?: '',
|
|
'country_code' => \YunShop::request()->country_code ?: '',
|
|
'position_address' => \YunShop::request()->position_address ?: '',
|
|
);
|
|
if (\Setting::get('shop.trade.is_street')) {
|
|
if (\Setting::get('shop.trade.is_must_street') && !\YunShop::request()->street) {
|
|
return $this->errorJson('请选择乡镇/街道地址');
|
|
}
|
|
$requestAddress['street'] = \YunShop::request()->street ?: '';
|
|
}
|
|
$addressModel->fill($requestAddress);
|
|
$validator = $addressModel->validator($addressModel->getAttributes());
|
|
if ($validator->fails()) {
|
|
return $this->errorJson($this->returnMsg($validator->messages()->toArray()));
|
|
}
|
|
if (empty($addressModel->isdefault) && \YunShop::request()->isdefault) {
|
|
$addressModel->isdefault = 1;
|
|
//todo member_id 未附值
|
|
$this->memberAddressRepository->cancelDefaultAddress(\YunShop::app()->getMemberId());
|
|
}
|
|
if ($addressModel->save()) {
|
|
return $this->successJson('修改收货地址成功', $addressModel->toArray());
|
|
} else {
|
|
return $this->errorJson("写入数据出错,请重试!");
|
|
}
|
|
}
|
|
|
|
/*
|
|
* 移除会员收货地址
|
|
*
|
|
* */
|
|
public function destroy()
|
|
{
|
|
$addressId = \YunShop::request()->address_id;
|
|
$addressModel = $this->memberAddressRepository->getAddressById($addressId);
|
|
if (!$addressModel || $addressModel->uid != \YunShop::app()->getMemberId()) {
|
|
return $this->errorJson("未找到数据或已删除");
|
|
}
|
|
//todo 需要考虑删除默认地址选择其他地址改为默认
|
|
$result = $this->memberAddressRepository->destroyAddress($addressId);
|
|
if ($result) {
|
|
return $this->successJson();
|
|
} else {
|
|
return $this->errorJson("数据写入出错,删除失败!");
|
|
}
|
|
}
|
|
|
|
/*
|
|
* 服务列表数据 index() 增加省市区ID值
|
|
* */
|
|
private function addressServiceForIndex($addressList = [], $address)
|
|
{
|
|
$i = 0;
|
|
foreach ($addressList as $list) {
|
|
foreach ($address as $key) {
|
|
if ($list['province'] == $key['areaname'] && $key['level'] == 1) {
|
|
$addressList[$i]['province_id'] = $key['id'];
|
|
}
|
|
if ($list['city'] == $key['areaname'] && $addressList[$i]['province_id'] == $key['parentid']) {
|
|
$addressList[$i]['city_id'] = $key['id'];
|
|
}
|
|
if ($list['district'] == $key['areaname'] && $addressList[$i]['city_id'] == $key['parentid']) {
|
|
$addressList[$i]['district_id'] = $key['id'];
|
|
}
|
|
}
|
|
$i++;
|
|
}
|
|
return $addressList;
|
|
}
|
|
|
|
/*
|
|
* 服务地址接口数据重构
|
|
* */
|
|
private function addressService($address)
|
|
{
|
|
$province = [];
|
|
$city = [];
|
|
$district = [];
|
|
foreach ($address as $key) {
|
|
if ($key['parentid'] == 0 && $key['level'] == 1) {
|
|
$province[] = $key;
|
|
} elseif ($key['parentid'] != 0 && $key['level'] == 2) {
|
|
$city[] = $key;
|
|
} else {
|
|
$district[] = $key;
|
|
}
|
|
}
|
|
return array(
|
|
'province' => $province,
|
|
'city' => $city,
|
|
'district' => $district,
|
|
);
|
|
}
|
|
|
|
public function getStreet()
|
|
{
|
|
//member.member-address.get-street
|
|
$districtId = \YunShop::request()->get('district_id');
|
|
if (\Setting::get('shop.trade.is_street')) {
|
|
// 开启街道设置
|
|
$street = Street::getStreetByParentId($districtId);
|
|
} else {
|
|
$street = [];
|
|
}
|
|
|
|
if ($street) {
|
|
return $this->successJson('获取街道数据成功!', $street);
|
|
}
|
|
return $this->successJson('获取数据失败!', $street);
|
|
|
|
}
|
|
|
|
/**
|
|
* 修改地理位置(经纬度)接口 ps同城配送使用
|
|
* request address_id 地址ID
|
|
* request latitude 纬度
|
|
* request longitude 经度
|
|
* @return \Illuminate\Http\JsonResponse
|
|
*/
|
|
public function updateLocation()
|
|
{
|
|
$addressModel = $this->memberAddressRepository->getAddressAndUserById(\YunShop::request()->address_id, \YunShop::app()->getMemberId());
|
|
$addressModel->latitude = \YunShop::request()->latitude ?: '';
|
|
$addressModel->longitude = \YunShop::request()->longitude ?: '';
|
|
if ($addressModel->save()) {
|
|
return $this->successJson('修改地理位置成功', $addressModel->toArray());
|
|
} else {
|
|
return $this->errorJson("写入数据出错,请重试!");
|
|
}
|
|
}
|
|
|
|
}
|