| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431 |
- <?php
- /**
- * Created by PhpStorm.
- * Author: 芸众商城 www.yunzshop.com
- * 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);
- }
- //获取下单页要编辑的地址信息 &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 ?: '',
- );
- if (\Setting::get('shop.trade.is_street')) {
- $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 ?: '',
- );
- if (\Setting::get('shop.trade.is_street')) {
- $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("写入数据出错,请重试!");
- }
- }
- }
|