| package com.xzx.gc.system.controller;  | 
|   | 
| import cn.hutool.core.bean.BeanUtil;  | 
| import cn.hutool.core.collection.CollUtil;  | 
| import cn.hutool.core.convert.Convert;  | 
| import cn.hutool.core.date.DateUtil;  | 
| import cn.hutool.core.lang.Dict;  | 
| import cn.hutool.core.util.NumberUtil;  | 
| import cn.hutool.core.util.StrUtil;  | 
| import com.github.pagehelper.PageHelper;  | 
| import com.github.pagehelper.PageInfo;  | 
| import com.xzx.gc.common.Result;  | 
| import com.xzx.gc.common.annotations.PassToken;  | 
| import com.xzx.gc.common.constant.Constants;  | 
| import com.xzx.gc.common.constant.OrderEnum;  | 
| import com.xzx.gc.common.dto.CommonDto;  | 
| import com.xzx.gc.common.dto.SimplePage;  | 
| import com.xzx.gc.common.request.BaseController;  | 
| import com.xzx.gc.common.utils.BusinessUtil;  | 
| import com.xzx.gc.common.utils.LocationUtils;  | 
| import com.xzx.gc.common.utils.StringUtils;  | 
| import com.xzx.gc.entity.ConfigInfo;  | 
| import com.xzx.gc.entity.OrderInfo;  | 
| import com.xzx.gc.entity.OtherUserInfo;  | 
| import com.xzx.gc.entity.StoreInfo;  | 
| import com.xzx.gc.model.JsonResult;  | 
| import com.xzx.gc.model.user.AddressVo;  | 
| import com.xzx.gc.system.dto.StoreInfoUpDto;  | 
| import com.xzx.gc.system.mapper.*;  | 
| import com.xzx.gc.system.service.AddressService;  | 
| import com.xzx.gc.system.service.OtherUserService;  | 
| import com.xzx.gc.system.service.StoreService;  | 
| import io.swagger.annotations.Api;  | 
| import io.swagger.annotations.ApiOperation;  | 
| import org.springframework.beans.factory.annotation.Autowired;  | 
| import org.springframework.validation.annotation.Validated;  | 
| import org.springframework.web.bind.annotation.*;  | 
| import tk.mybatis.mapper.entity.Example;  | 
|   | 
| import javax.servlet.http.HttpServletRequest;  | 
| import java.math.RoundingMode;  | 
| import java.util.ArrayList;  | 
| import java.util.Arrays;  | 
| import java.util.List;  | 
| import java.util.Map;  | 
|   | 
| /**  | 
|  * @author :zz  | 
|  */  | 
| @RestController  | 
| @Api(tags = {"门店管理"})  | 
| @Validated  | 
| public class StoreInfoController extends BaseController {  | 
|   | 
|     @Autowired  | 
|     private StoreInfoMapper storeInfoMapper;  | 
|   | 
|     @Autowired  | 
|     private ConfigMapper configMapper;  | 
|   | 
|     @Autowired  | 
|     private OtherUserMapper otherUserMapper;  | 
|   | 
|     @Autowired  | 
|     private OrderMapper orderMapper;  | 
|   | 
|   | 
|     @Autowired  | 
|     private StoreService storeService;  | 
|   | 
|     @Autowired  | 
|     private AddressService addressService;  | 
|   | 
|     @Autowired  | 
|     private OtherUserService otherUserService;  | 
|   | 
|   | 
|     @PostMapping("/storeInfo/select")  | 
|     @ApiOperation(value = "分页查询门店", notes = "extra代表模糊查询字段")  | 
|     public Result<PageInfo<StoreInfo>> find(HttpServletRequest request, @RequestBody SimplePage simplePage) {  | 
|         ConfigInfo configInfo = new ConfigInfo();  | 
|         configInfo.setConfigTypeCode("STORE_STATUS");  | 
|         ConfigInfo configInfo1 = configMapper.selectOne(configInfo);  | 
|         String configValue = configInfo1.getConfigValue();  | 
|         PageHelper.startPage(simplePage.getPageNo(), simplePage.getPageSize());  | 
|   | 
|   | 
|         Example example = new Example(StoreInfo.class);  | 
|         Example.Criteria criteria = example.createCriteria();  | 
|         criteria.andNotEqualTo("id",Constants.DEFAULT_ID);  | 
|         if (Constants.CLOSE.equals(configValue)) {  | 
|             criteria.andEqualTo("userId", getUserId(request));  | 
|         }  | 
|         criteria.andEqualTo("delFlag", 0);  | 
| //        criteria.andEqualTo("flag", 0);  | 
|   | 
|         String extra = simplePage.getExtra();  | 
|         if (StrUtil.isNotBlank(extra)) {  | 
|             extra="%"+extra+"%";  | 
|             example.and().orLike("mobilePhone", extra).orLike("userName", extra).orLike("addressArea", extra).orLike("detailAddress", extra);  | 
|         }  | 
|         example.setOrderByClause("create_time desc,flag asc");  | 
|         List<StoreInfo> storeInfos = storeInfoMapper.selectByExample(example);  | 
|         for (StoreInfo storeInfo : storeInfos) {  | 
|             String provinceId = storeInfo.getProvinceId();  | 
|             String cityId = storeInfo.getCityId();  | 
|             String townshipId = storeInfo.getTownshipId();  | 
|             if(StrUtil.isNotBlank(provinceId)&&StrUtil.isNotBlank(cityId)&&StrUtil.isNotBlank(townshipId)){  | 
|                 AddressVo byId = addressService.findByLevelId(provinceId, cityId, townshipId);  | 
|                 if(byId!=null){  | 
|                     storeInfo.setProvinceName(byId.getProvinceName());  | 
|                     storeInfo.setTownshipName(byId.getTownshipName());  | 
|                     storeInfo.setCityName(byId.getCityName());  | 
|                 }  | 
|             }  | 
|         }  | 
|         PageInfo<StoreInfo> pageInfo = new PageInfo<>(storeInfos);  | 
|         return Result.success(pageInfo);  | 
|     }  | 
|   | 
|     @PostMapping("/storeInfo/selectUser")  | 
|     @ApiOperation(value = "查询门店回收员", notes = "目前只能查出自己,可兼容以后的固定门店")  | 
|     public Result<List<OtherUserInfo>> selectUser(HttpServletRequest request) {  | 
|         List<OtherUserInfo> list = new ArrayList<>();  | 
|         ConfigInfo configInfo = new ConfigInfo();  | 
|         configInfo.setConfigTypeCode("STORE_STATUS");  | 
|         ConfigInfo configInfo1 = configMapper.selectOne(configInfo);  | 
|         String configValue = configInfo1.getConfigValue();  | 
|         if (Constants.CLOSE.equals(configValue)) {  | 
|             OtherUserInfo otherUserInfo = otherUserMapper.selectByPrimaryKey(getUserId(request));  | 
|             list.add(otherUserInfo);  | 
|         } else if (Constants.OPEN.equals(configValue)) {  | 
|             list=otherUserService.find();  | 
|         }  | 
|         return Result.success(list);  | 
|     }  | 
|   | 
|   | 
|     @PostMapping("/storeInfo/add")  | 
|     @ApiOperation(value = "添加门店")  | 
|     public Result add(HttpServletRequest request, @Validated @RequestBody StoreInfo storeInfo) {  | 
|         AddressVo byName = addressService.findByName(storeInfo.getProvinceName(), storeInfo.getCityName(), storeInfo.getTownshipName());  | 
|         if(byName!=null){  | 
|             storeInfo.setProvinceId(byName.getProvinceId());  | 
|             storeInfo.setCityId(byName.getCityId());  | 
|             storeInfo.setTownshipId(byName.getTownshipId());  | 
|         }  | 
|         //真实门店关闭的状态下只能新增一个门店  | 
|         StoreInfo storeInfo1 = new StoreInfo();  | 
|         storeInfo1.setUserId(storeInfo.getUserId());  | 
|         storeInfo1.setDelFlag(Constants.DEL_NOT_FLAG + "");  | 
|         int i = storeInfoMapper.selectCount(storeInfo1);  | 
|         if (i > 0) {  | 
|             return Result.error(-1, "一个用户只能对应一个门店");  | 
|         }  | 
|         storeInfo.setCreateTime(DateUtil.now());  | 
|         storeInfoMapper.insertSelective(storeInfo);  | 
|         return Result.success("");  | 
|     }  | 
|   | 
|   | 
|     @PostMapping("/storeInfo/delete")  | 
|     @ApiOperation(value = "删除门店", notes = "id:传列表返回的门店ID")  | 
|     public Result delete(HttpServletRequest request, @Validated @RequestBody CommonDto commonDto) {  | 
|         String id = commonDto.getId();  | 
|         if (isOrder(id)) {  | 
|             return Result.error(-1, "用户已经下单,您不能进行删除操作");  | 
|         }  | 
|         StoreInfo storeInfo = new StoreInfo();  | 
|         storeInfo.setId(Long.parseLong(id));  | 
|         storeInfo.setDelFlag(Constants.DEL_FLAG + "");  | 
|         storeInfoMapper.updateByPrimaryKeySelective(storeInfo);  | 
|         return Result.success("");  | 
|     }  | 
|   | 
|     @PostMapping("/storeInfo/update")  | 
|     @ApiOperation(value = "修改门店")  | 
|     public Result update(HttpServletRequest request, @Validated @RequestBody StoreInfoUpDto storeInfoUpDto) {  | 
|         if (isOrder(storeInfoUpDto.getId().toString())) {  | 
|             return Result.error(-1, "用户已经下单,您不能进行修改操作");  | 
|         }  | 
|   | 
|         StoreInfo storeInfo = new StoreInfo();  | 
|         BeanUtil.copyProperties(storeInfoUpDto, storeInfo);  | 
|   | 
|         AddressVo byName = addressService.findByName(storeInfo.getProvinceName(), storeInfo.getCityName(), storeInfo.getTownshipName());  | 
|         if(byName!=null){  | 
|             storeInfo.setProvinceId(byName.getProvinceId());  | 
|             storeInfo.setCityId(byName.getCityId());  | 
|             storeInfo.setTownshipId(byName.getTownshipId());  | 
|         }  | 
|   | 
|         storeInfoMapper.updateByPrimaryKeySelective(storeInfo);  | 
|         return Result.success("");  | 
|     }  | 
|   | 
|     @PostMapping("/storeInfo/selectNearby")  | 
|     @ApiOperation(value = "查看附近门店", notes = "参数:extra传经纬度以逗号分隔,返回data为空则是无门店")  | 
|     @PassToken  | 
|     public Result<StoreInfo> selectNearby(HttpServletRequest request, @RequestBody CommonDto commonDto) {  | 
|         String longitude = commonDto.getExtra().split(",")[0];  | 
|         String latitude = commonDto.getExtra().split(",")[1];  | 
|   | 
|         if (StrUtil.isNotBlank(latitude) && StrUtil.isNotBlank(longitude)) {  | 
|             List<StoreInfo> storeInfos=storeService.select(true);  | 
|             double temp = Double.MAX_VALUE;  | 
|             Dict dict = Dict.create();  | 
|             if (CollUtil.isNotEmpty(storeInfos)) {  | 
|                 for (StoreInfo storeInfo : storeInfos) {  | 
|                     if (StringUtils.isNotBlank(storeInfo.getLatitude()) && StringUtils.isNotBlank(storeInfo.getLongitude())) {  | 
|                         double distance = LocationUtils.getDistance(Convert.toDouble(storeInfo.getLatitude()), Convert.toDouble(storeInfo.getLongitude()), Convert.toDouble(latitude), Convert.toDouble(longitude));  | 
|                         if (distance < temp) {  | 
|                             temp = distance;  | 
|                             dict.set(Convert.toStr(temp), storeInfo);  | 
|                         }  | 
|                     }  | 
|                 }  | 
|   | 
|                 if (NumberUtil.compare(temp, Double.MAX_VALUE) != 0) {  | 
|                     StoreInfo storeInfo = (StoreInfo) dict.get(Convert.toStr(temp));  | 
|                     double v = temp / 1000;  | 
|                     String s = NumberUtil.roundStr(Convert.toStr(v), 3, RoundingMode.DOWN);  | 
|                     storeInfo.setDistance(s);  | 
|   | 
|                     //价格升高的百分比  | 
|                     ConfigInfo configInfo = new ConfigInfo();  | 
|                     configInfo.setConfigTypeCode("STORE_PRICE");  | 
|                     ConfigInfo configInfo1 = configMapper.selectOne(configInfo);  | 
|                     String configValue = configInfo1.getConfigValue();  | 
|                     storeInfo.setScale(configValue);  | 
|                     return Result.success(storeInfo);  | 
|                 }  | 
|             }  | 
|         }  | 
|   | 
|         return Result.success(null);  | 
|     }  | 
|   | 
|   | 
|   | 
|     @PostMapping("/admin/front/storeInfo/queryStoreList.json")  | 
|     @ApiOperation(value="订单管理-查询所有门店", notes="test: 仅0有正确返回")  | 
|     public JsonResult<List<Map<String,Object>>> queryStoreList(){  | 
|         List<Map<String,Object>> list = storeInfoMapper.queryStoreList();  | 
|         return JsonResult.success(list);  | 
|     }  | 
|   | 
|   | 
|     /**  | 
|      * 用户是否已下单  | 
|      *  | 
|      * @param id 门店id  | 
|      * @return  | 
|      */  | 
|     private boolean isOrder(String id) {  | 
|         //判断是否已经有用户下单在此门店 否则不允许删除  | 
|         Example example = new Example(OrderInfo.class);  | 
|         Example.Criteria criteria = example.createCriteria();  | 
|         criteria.andIn("orderStatus", Arrays.asList(OrderEnum.待接单.getValue(), OrderEnum.服务中.getValue(), OrderEnum.待确认.getValue()));  | 
|         criteria.andEqualTo("storeId", id);  | 
|         int i = orderMapper.selectCountByExample(example);  | 
|         if (i > 0) return true;  | 
|         return false;  | 
|     }  | 
|   | 
| }  |