新增首页接口
This commit is contained in:
@ -30,6 +30,6 @@ public class Application {
|
||||
ConfigurableApplicationContext context = SpringApplication.run(Application.class, args);
|
||||
Environment environment = context.getBean(Environment.class);
|
||||
System.out.println("启动成功,后端服务API地址:http://" + ComputerInfo.getIpAddr() + ":"
|
||||
+ environment.getProperty("server.port") + "/doc.html");
|
||||
+ environment.getProperty("server.port") + "/swagger-ui.html");
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,37 @@
|
||||
package com.sczx.store.controller;
|
||||
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.sczx.store.dto.CompanyStoreDTO;
|
||||
import com.sczx.store.dto.req.StoreDistanceReq;
|
||||
import com.sczx.store.service.StoreService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 门店 前端控制器
|
||||
* </p>
|
||||
*
|
||||
* @author zhangli
|
||||
* @since 2025-07-08 21:16:36
|
||||
*/
|
||||
@Api(value = "门店用户端接口", tags = "用户端接口")
|
||||
@RestController
|
||||
@RequestMapping("/client")
|
||||
public class StoreClientController {
|
||||
|
||||
@Autowired
|
||||
private StoreService storeService;
|
||||
|
||||
@ApiOperation(value = "根据经纬度查询门店信息")
|
||||
@PostMapping("/listStoresByBBoxWithDistance")
|
||||
ResponseEntity<IPage<CompanyStoreDTO>> listStoresByBBoxWithDistance(@RequestParam("pageNo") Integer pageNo, @RequestParam("size") Integer size, @RequestBody StoreDistanceReq storeDistanceReq){
|
||||
return ResponseEntity.ok(storeService.listStoresByBBoxWithDistance(storeDistanceReq, pageNo, size));
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,21 @@
|
||||
package com.sczx.store.controller;
|
||||
|
||||
|
||||
import io.swagger.annotations.Api;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 门店 前端控制器
|
||||
* </p>
|
||||
*
|
||||
* @author zhangli
|
||||
* @since 2025-07-08 21:16:36
|
||||
*/
|
||||
@Api(value = "门店管理端接口", produces = "管理端接口")
|
||||
@RestController
|
||||
@RequestMapping("/client")
|
||||
public class StoreManageController {
|
||||
|
||||
}
|
||||
58
src/main/java/com/sczx/store/dto/CompanyStoreDTO.java
Normal file
58
src/main/java/com/sczx/store/dto/CompanyStoreDTO.java
Normal file
@ -0,0 +1,58 @@
|
||||
package com.sczx.store.dto;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
@ApiModel(value = "CompanyStoreDTO对象", description = "门店信息")
|
||||
public class CompanyStoreDTO {
|
||||
|
||||
@ApiModelProperty("主键id")
|
||||
private Integer id;
|
||||
|
||||
@ApiModelProperty("门店名称")
|
||||
private String name;
|
||||
|
||||
@ApiModelProperty("联系人")
|
||||
private String contactPerson;
|
||||
|
||||
@ApiModelProperty("手机号码")
|
||||
private String phone;
|
||||
|
||||
@ApiModelProperty("联系人2")
|
||||
private String contactPerson2;
|
||||
|
||||
@ApiModelProperty("手机号码2")
|
||||
private String phone2;
|
||||
|
||||
|
||||
@ApiModelProperty("详细地址")
|
||||
private String detailedAddress;
|
||||
|
||||
@ApiModelProperty("门店logo")
|
||||
private String image;
|
||||
|
||||
@ApiModelProperty("纬度")
|
||||
private Double latitude;
|
||||
|
||||
@ApiModelProperty("经度")
|
||||
private Double longitude;
|
||||
|
||||
@ApiModelProperty("标签 1.可租车 2.可换电 3.二手车,多个用,号隔开,例如1,2,3")
|
||||
private String label;
|
||||
|
||||
@ApiModelProperty("运营公司id")
|
||||
private Integer operatingCompanyId;
|
||||
|
||||
@ApiModelProperty("运营性质 1.直营 0.合作")
|
||||
private Boolean operatingNature;
|
||||
|
||||
@ApiModelProperty("简介")
|
||||
private String introduction;
|
||||
|
||||
|
||||
@ApiModelProperty("门店编号")
|
||||
private String storeNumber;
|
||||
|
||||
}
|
||||
23
src/main/java/com/sczx/store/dto/req/StoreDistanceReq.java
Normal file
23
src/main/java/com/sczx/store/dto/req/StoreDistanceReq.java
Normal file
@ -0,0 +1,23 @@
|
||||
package com.sczx.store.dto.req;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
@ApiModel(value = "StoreDistanceReq对象", description = "地图上查询门店信息请求")
|
||||
@Data
|
||||
public class StoreDistanceReq {
|
||||
|
||||
@ApiModelProperty(value = "最大纬度")
|
||||
private Double minLat;
|
||||
@ApiModelProperty(value = "最小纬度")
|
||||
private Double maxLat;
|
||||
@ApiModelProperty(value = "最大经度")
|
||||
private Double minLng;
|
||||
@ApiModelProperty(value = "最小经度")
|
||||
private Double maxLng;
|
||||
@ApiModelProperty(value = "当前位置纬度")
|
||||
private Double currentLat;
|
||||
@ApiModelProperty(value = "当前位置经度")
|
||||
private Double currentLng;
|
||||
}
|
||||
@ -0,0 +1,47 @@
|
||||
package com.sczx.store.exception;
|
||||
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import org.springframework.http.ResponseEntity;
|
||||
|
||||
import org.springframework.web.bind.annotation.ControllerAdvice;
|
||||
import org.springframework.web.bind.annotation.ExceptionHandler;
|
||||
import org.springframework.web.bind.annotation.ResponseBody;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 应用模块名称<p>
|
||||
* <p>
|
||||
* 代码描述<p>
|
||||
* <p>
|
||||
* Copyright: Copyright (C) 2021 CD Finance Management Co., Ltd. All rights reserved. <p>
|
||||
* <p>
|
||||
* Company: 中和农信项目管理有限公司<p>
|
||||
*
|
||||
* @author zhonghui
|
||||
* @since 2021/9/13 2:46 PM
|
||||
*/
|
||||
@Slf4j
|
||||
@ControllerAdvice
|
||||
public class GlobalExceptionHandler {
|
||||
|
||||
|
||||
/**
|
||||
* 处理自定义的业务异常
|
||||
*
|
||||
* @param req
|
||||
* @param e
|
||||
* @return
|
||||
*/
|
||||
@ExceptionHandler(value = Exception.class)
|
||||
@ResponseBody
|
||||
public ResponseEntity bizExceptionHandler(HttpServletRequest req, Exception e) {
|
||||
log.error("服务器异常!原因是:{}",e.getMessage(), e);
|
||||
return ResponseEntity.noContent().build();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
23
src/main/java/com/sczx/store/mapper/CompanyStoreMapper.java
Normal file
23
src/main/java/com/sczx/store/mapper/CompanyStoreMapper.java
Normal file
@ -0,0 +1,23 @@
|
||||
package com.sczx.store.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.sczx.store.dto.CompanyStoreDTO;
|
||||
import com.sczx.store.dto.req.StoreDistanceReq;
|
||||
import com.sczx.store.po.CompanyStorePO;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 门店 Mapper 接口
|
||||
* </p>
|
||||
*
|
||||
* @author zhangli
|
||||
* @since 2025-07-08 21:16:36
|
||||
*/
|
||||
public interface CompanyStoreMapper extends BaseMapper<CompanyStorePO> {
|
||||
IPage<CompanyStoreDTO> listStoresByBBoxWithDistance(Page<CompanyStoreDTO> page, @Param("storeDistanceReq") StoreDistanceReq storeDistanceReq);
|
||||
}
|
||||
177
src/main/java/com/sczx/store/po/CompanyStorePO.java
Normal file
177
src/main/java/com/sczx/store/po/CompanyStorePO.java
Normal file
@ -0,0 +1,177 @@
|
||||
package com.sczx.store.po;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 门店
|
||||
* </p>
|
||||
*
|
||||
* @author zhangli
|
||||
* @since 2025-07-08 21:16:36
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
@TableName("zc_company_store")
|
||||
@ApiModel(value = "CompanyStorePO对象", description = "门店")
|
||||
public class CompanyStorePO implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@TableId(value = "id", type = IdType.AUTO)
|
||||
private Integer id;
|
||||
|
||||
@ApiModelProperty("门店名称")
|
||||
private String name;
|
||||
|
||||
@ApiModelProperty("联系人")
|
||||
private String contactPerson;
|
||||
|
||||
@ApiModelProperty("手机号码")
|
||||
private String phone;
|
||||
|
||||
@ApiModelProperty("联系人2")
|
||||
private String contactPerson2;
|
||||
|
||||
@ApiModelProperty("手机号码2")
|
||||
private String phone2;
|
||||
|
||||
@ApiModelProperty("省份")
|
||||
private String provinceId;
|
||||
|
||||
@ApiModelProperty("省份")
|
||||
private String provinceName;
|
||||
|
||||
@ApiModelProperty("城市")
|
||||
private String cityId;
|
||||
|
||||
@ApiModelProperty("城市")
|
||||
private String cityName;
|
||||
|
||||
@ApiModelProperty("区县")
|
||||
private String areaId;
|
||||
|
||||
@ApiModelProperty("城市")
|
||||
private String areaName;
|
||||
|
||||
@ApiModelProperty("省市区")
|
||||
private String address;
|
||||
|
||||
@ApiModelProperty("详细地址")
|
||||
private String detailedAddress;
|
||||
|
||||
@ApiModelProperty("门店logo")
|
||||
private String image;
|
||||
|
||||
@ApiModelProperty("纬度")
|
||||
private Double latitude;
|
||||
|
||||
@ApiModelProperty("经度")
|
||||
private Double longitude;
|
||||
|
||||
@ApiModelProperty("合同签订日期")
|
||||
private String contractDate;
|
||||
|
||||
@ApiModelProperty("每日营业开关时间")
|
||||
private String dayTime;
|
||||
|
||||
@ApiModelProperty("每日营业开始时间")
|
||||
private String startTime;
|
||||
|
||||
@ApiModelProperty("每日营业结束时间")
|
||||
private String endTime;
|
||||
|
||||
@ApiModelProperty("是否显示")
|
||||
private Boolean isShow;
|
||||
|
||||
@ApiModelProperty("是否删除")
|
||||
private Boolean isDel;
|
||||
|
||||
@ApiModelProperty("租车订单分成比例")
|
||||
private BigDecimal zucheRatio;
|
||||
|
||||
@ApiModelProperty("租电订单分成比例")
|
||||
private BigDecimal zudianRatio;
|
||||
|
||||
@ApiModelProperty("以租代售分成比例")
|
||||
private BigDecimal daishouRatio;
|
||||
|
||||
@ApiModelProperty("标签 1.可租车 2.可换电 3.二手车,多个用,号隔开,例如1,2,3")
|
||||
private String label;
|
||||
|
||||
@ApiModelProperty("运营公司id")
|
||||
private Integer operatingCompanyId;
|
||||
|
||||
@ApiModelProperty("运营性质 1.直营 0.合作")
|
||||
private Boolean operatingNature;
|
||||
|
||||
@ApiModelProperty("简介")
|
||||
private String introduction;
|
||||
|
||||
@ApiModelProperty("对公账号")
|
||||
private String bankAccount;
|
||||
|
||||
@ApiModelProperty("门店编号")
|
||||
private String storeNumber;
|
||||
|
||||
@ApiModelProperty("营业执照")
|
||||
private String businessLicenseImg;
|
||||
|
||||
@ApiModelProperty("审核状态 0.未审核 1.审核通过 2.审核未通过")
|
||||
private Boolean auditStatus;
|
||||
|
||||
@ApiModelProperty("审核时间")
|
||||
private LocalDateTime auditTime;
|
||||
|
||||
@ApiModelProperty("审核人id")
|
||||
private Integer auditorId;
|
||||
|
||||
@ApiModelProperty("所属用户id")
|
||||
private Integer userId;
|
||||
|
||||
@ApiModelProperty("是否允许回收退租天数 0.不允许 1.允许")
|
||||
private Boolean isReturnAllowed;
|
||||
|
||||
@ApiModelProperty("企业套餐保证金")
|
||||
private BigDecimal mealDepositPrice;
|
||||
|
||||
@ApiModelProperty("企业充值订单数限制")
|
||||
private Integer orderNumLimit;
|
||||
|
||||
@ApiModelProperty("创建人")
|
||||
private String createBy;
|
||||
|
||||
@ApiModelProperty("添加时间")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
@ApiModelProperty("修改人")
|
||||
private String updateBy;
|
||||
|
||||
@ApiModelProperty("更新时间")
|
||||
private LocalDateTime updateTime;
|
||||
|
||||
private String delFlag;
|
||||
|
||||
private String status;
|
||||
|
||||
private String extend1;
|
||||
|
||||
private String extend2;
|
||||
|
||||
private String extend3;
|
||||
|
||||
private String extend4;
|
||||
|
||||
private String extend5;
|
||||
|
||||
|
||||
}
|
||||
@ -0,0 +1,22 @@
|
||||
package com.sczx.store.repository;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.sczx.store.dto.CompanyStoreDTO;
|
||||
import com.sczx.store.dto.req.StoreDistanceReq;
|
||||
import com.sczx.store.po.CompanyStorePO;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 门店 服务类
|
||||
* </p>
|
||||
*
|
||||
* @author zhangli
|
||||
* @since 2025-07-08 21:16:36
|
||||
*/
|
||||
public interface CompanyStoreRepo extends IService<CompanyStorePO> {
|
||||
|
||||
IPage<CompanyStoreDTO> listStoresByBBoxWithDistance(StoreDistanceReq storeDistanceReq,Integer pageNo, Integer size);
|
||||
}
|
||||
@ -0,0 +1,33 @@
|
||||
package com.sczx.store.repository.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.sczx.store.dto.CompanyStoreDTO;
|
||||
import com.sczx.store.dto.req.StoreDistanceReq;
|
||||
import com.sczx.store.po.CompanyStorePO;
|
||||
import com.sczx.store.mapper.CompanyStoreMapper;
|
||||
import com.sczx.store.repository.CompanyStoreRepo;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 门店 服务实现类
|
||||
* </p>
|
||||
*
|
||||
* @author zhangli
|
||||
* @since 2025-07-08 21:16:36
|
||||
*/
|
||||
@Service
|
||||
public class CompanyStoreRepoImpl extends ServiceImpl<CompanyStoreMapper, CompanyStorePO> implements CompanyStoreRepo {
|
||||
|
||||
@Override
|
||||
public IPage<CompanyStoreDTO> listStoresByBBoxWithDistance(StoreDistanceReq storeDistanceReq, Integer pageNo, Integer size) {
|
||||
Page<CompanyStoreDTO> page = new Page<>(pageNo, size);
|
||||
return this.getBaseMapper().listStoresByBBoxWithDistance(page, storeDistanceReq);
|
||||
}
|
||||
}
|
||||
16
src/main/java/com/sczx/store/service/StoreService.java
Normal file
16
src/main/java/com/sczx/store/service/StoreService.java
Normal file
@ -0,0 +1,16 @@
|
||||
package com.sczx.store.service;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.sczx.store.dto.CompanyStoreDTO;
|
||||
import com.sczx.store.dto.req.StoreDistanceReq;
|
||||
|
||||
|
||||
public interface StoreService {
|
||||
/**
|
||||
* 根据经纬度获取门店信息
|
||||
*
|
||||
* @param storeDistanceReq
|
||||
* @return
|
||||
*/
|
||||
IPage<CompanyStoreDTO> listStoresByBBoxWithDistance(StoreDistanceReq storeDistanceReq, Integer pageNo, Integer size);
|
||||
}
|
||||
@ -0,0 +1,23 @@
|
||||
package com.sczx.store.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.sczx.store.dto.CompanyStoreDTO;
|
||||
import com.sczx.store.dto.req.StoreDistanceReq;
|
||||
import com.sczx.store.repository.CompanyStoreRepo;
|
||||
import com.sczx.store.service.StoreService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
public class StoreServiceImpl implements StoreService {
|
||||
|
||||
@Autowired
|
||||
private CompanyStoreRepo companyStoreRepo;
|
||||
@Override
|
||||
public IPage<CompanyStoreDTO> listStoresByBBoxWithDistance(StoreDistanceReq storeDistanceReq, Integer pageNo, Integer size) {
|
||||
return companyStoreRepo.listStoresByBBoxWithDistance(storeDistanceReq,pageNo,size);
|
||||
}
|
||||
}
|
||||
56
src/main/resources/mapper/CompanyStoreMapper.xml
Normal file
56
src/main/resources/mapper/CompanyStoreMapper.xml
Normal file
@ -0,0 +1,56 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.sczx.store.mapper.CompanyStoreMapper">
|
||||
|
||||
<select id="listStoresByBBoxWithDistance" resultType="com.sczx.store.dto.CompanyStoreDTO">
|
||||
SELECT
|
||||
t.id,
|
||||
t.name,
|
||||
t.contact_person,
|
||||
t.phone,
|
||||
t.contact_person2,
|
||||
t.phone2,
|
||||
t.province_id,
|
||||
t.province_name,
|
||||
t.city_id,
|
||||
t.city_name,
|
||||
t.area_id,
|
||||
t.area_name,
|
||||
t.address,
|
||||
t.detailed_address,
|
||||
t.image,
|
||||
t.latitude,
|
||||
t.longitude,
|
||||
(6371 * 1000 * 2 * ATAN2(
|
||||
SQRT(
|
||||
SIN(RADIANS(t.latitude - #{storeDistanceReq.currentLat}) / 2) *
|
||||
SIN(RADIANS(t.latitude - #{storeDistanceReq.currentLat}) / 2) +
|
||||
COS(RADIANS(#{storeDistanceReq.currentLat})) *
|
||||
COS(RADIANS(t.latitude)) *
|
||||
SIN(RADIANS(t.longitude - #{storeDistanceReq.currentLng}) / 2) *
|
||||
SIN(RADIANS(t.longitude - #{storeDistanceReq.currentLng}) / 2)
|
||||
),
|
||||
SQRT(
|
||||
1 - (
|
||||
SIN(RADIANS(t.latitude - #{storeDistanceReq.currentLat}) / 2) *
|
||||
SIN(RADIANS(t.latitude - #{storeDistanceReq.currentLat}) / 2) +
|
||||
COS(RADIANS(#{storeDistanceReq.currentLat})) *
|
||||
COS(RADIANS(t.latitude)) *
|
||||
SIN(RADIANS(t.longitude - #{storeDistanceReq.currentLng}) / 2) *
|
||||
SIN(RADIANS(t.longitude - #{storeDistanceReq.currentLng}) / 2)
|
||||
)
|
||||
)
|
||||
)) AS distance
|
||||
FROM
|
||||
zc_company_store t
|
||||
<where>
|
||||
t.is_del = 0
|
||||
and t.is_show = 1
|
||||
and t.latitude between #{storeDistanceReq.minLat} and #{storeDistanceReq.maxLat}
|
||||
and t.longitude between #{storeDistanceReq.minLng} and #{storeDistanceReq.maxLng}
|
||||
</where>
|
||||
order by distance asc
|
||||
|
||||
|
||||
</select>
|
||||
</mapper>
|
||||
@ -25,8 +25,8 @@ public class CodeGenerator {
|
||||
.dateType(DateType.TIME_PACK).commentDate("yyyy-MM-dd HH:mm:ss")
|
||||
.fileOverride())
|
||||
// 包配置
|
||||
.packageConfig(builder -> builder.parent(parentPackage).entity("po.base").service("repository.base").serviceImpl("repository.impl.base").xml("")
|
||||
.mapper("mapper.base").pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/src/main/resources/mapper/base")))
|
||||
.packageConfig(builder -> builder.parent(parentPackage).entity("po").service("repository").serviceImpl("repository.impl").xml("")
|
||||
.mapper("mapper").pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/src/main/resources/mapper")))
|
||||
|
||||
// 策略配置
|
||||
.strategyConfig((scanner, builder) -> builder.addInclude(scanner.apply("请输入表名:"))
|
||||
|
||||
Reference in New Issue
Block a user