
16 changed files with 276 additions and 9 deletions
@ -0,0 +1,22 @@ |
|||
DROP TABLE IF EXISTS `store_info`; |
|||
CREATE TABLE `store_info` ( |
|||
`id` BIGINT(32) NOT NULL AUTO_INCREMENT COMMENT 'ID,唯一编号', |
|||
`sid` VARCHAR(64) NOT NULL COMMENT 'sid', |
|||
`createTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间', |
|||
`remarks` VARCHAR(255) NULL DEFAULT NULL COMMENT '备注信息', |
|||
|
|||
`serNumber` int(11) DEFAULT 1 COMMENT '序号', |
|||
`code` VARCHAR(100) NULL DEFAULT NULL COMMENT '门店编号', |
|||
`county` VARCHAR(100) NULL DEFAULT NULL COMMENT '行政区划', |
|||
`name` VARCHAR(100) NULL DEFAULT NULL COMMENT '店铺名称', |
|||
`businessLicenseName` VARCHAR(100) NULL DEFAULT NULL COMMENT '营业执照名称', |
|||
`businessLicensePerson` VARCHAR(100) NULL DEFAULT NULL COMMENT '营业执照负责人', |
|||
`storeManager` VARCHAR(100) NULL DEFAULT NULL COMMENT '店长', |
|||
`address` VARCHAR(100) NULL DEFAULT NULL COMMENT '地址', |
|||
`area` double(12,2) NULL DEFAULT NULL COMMENT '营业面积', |
|||
`lng` VARCHAR(100) NULL DEFAULT NULL COMMENT '经度', |
|||
`lat` VARCHAR(100) NULL DEFAULT NULL COMMENT '纬度', |
|||
`dueDiligence` VARCHAR(100) NULL DEFAULT NULL COMMENT '是否尽调', |
|||
|
|||
PRIMARY KEY (`id`) USING BTREE |
|||
) ENGINE=InnoDB COMMENT='便利店基础信息情况表'; |
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,3 +1,15 @@ |
|||
1。实现门店信息数据的导入功能,将Excel中数据导入系统数据库(目前门店信息包括:名称 地址 经纬度 店铺面积 是否尽调) |
|||
2。从系统数据查询、过滤数据,提供给页面地图 |
|||
3。地图展示和标注,根据不同状态展示不同颜色,鼠标移动到标注上显示门店名称,点击标注展示门店详细信息。 |
|||
|
|||
|
|||
http://jianguan.yyundong.com/map365 |
|||
|
|||
|
|||
本周一侯晓龙说的按董行要求做一个在地图上展示36524门店分布的页面, |
|||
可以进行查询过滤, |
|||
是否尽调按不同样式展示 , |
|||
点击门店可展示门店信息。 |
|||
数据是可以通过Excel文件导入。 |
|||
|
|||
目前以上要求已经实现,访问http://jianguan.yyundong.com/map365 |
Binary file not shown.
@ -1,9 +1,55 @@ |
|||
package com.yxt.supervise.gd36524.biz.store; |
|||
|
|||
import cn.hutool.core.collection.CollUtil; |
|||
import cn.hutool.core.util.IdUtil; |
|||
import com.alibaba.excel.annotation.ExcelProperty; |
|||
import com.baomidou.mybatisplus.annotation.TableName; |
|||
import com.fasterxml.jackson.annotation.JsonFormat; |
|||
import com.yxt.common.core.domain.EntityWithId; |
|||
import lombok.Data; |
|||
|
|||
import java.util.Date; |
|||
import java.util.List; |
|||
|
|||
@Data |
|||
@TableName("store_info") |
|||
public class StoreInfo extends EntityWithId { |
|||
|
|||
|
|||
|
|||
private String sid = IdUtil.fastSimpleUUID(); // sid
|
|||
@JsonFormat( |
|||
pattern = "yyyy-MM-dd HH:mm:ss", |
|||
timezone = "GMT+8" |
|||
) |
|||
private Date createTime = new Date(); // 记录创建时间
|
|||
private String remarks; // 备注说明
|
|||
|
|||
@ExcelProperty(index = 0) |
|||
private int serNumber = 1; // 序号
|
|||
@ExcelProperty(index = 1) |
|||
private String code; // 门店编号',
|
|||
@ExcelProperty(index = 2) |
|||
private String county; // 行政区划',
|
|||
@ExcelProperty(index = 3) |
|||
private String name; // 店铺名称',
|
|||
@ExcelProperty(index = 4) |
|||
private String businessLicenseName; // 营业执照名称',
|
|||
@ExcelProperty(index = 5) |
|||
private String businessLicensePerson; // 营业执照负责人',
|
|||
@ExcelProperty(index = 6) |
|||
private String storeManager; // 店长',
|
|||
@ExcelProperty(index = 7) |
|||
private String address; // 地址',
|
|||
@ExcelProperty(index = 8) |
|||
private double area; // 店铺面积',
|
|||
@ExcelProperty(index = 9) |
|||
private String lng; // 经度',
|
|||
@ExcelProperty(index = 10) |
|||
private String lat; // 纬度',
|
|||
@ExcelProperty(index = 11) |
|||
private String dueDiligence; // 是否尽调',
|
|||
|
|||
public List<String> getLnglat() { |
|||
return CollUtil.newArrayList(lng, lat); |
|||
} |
|||
} |
|||
|
@ -0,0 +1,12 @@ |
|||
package com.yxt.supervise.gd36524.biz.store; |
|||
|
|||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
|||
import org.apache.ibatis.annotations.Delete; |
|||
import org.apache.ibatis.annotations.Mapper; |
|||
|
|||
@Mapper |
|||
public interface StoreInfoMapper extends BaseMapper<StoreInfo> { |
|||
|
|||
@Delete("delete from store_info where 1=1") |
|||
void clearData(); |
|||
} |
@ -0,0 +1,30 @@ |
|||
package com.yxt.supervise.gd36524.biz.store; |
|||
|
|||
import com.yxt.common.core.result.ResultBean; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.web.bind.annotation.*; |
|||
import org.springframework.web.multipart.MultipartFile; |
|||
|
|||
import java.util.List; |
|||
|
|||
@RestController("com.yxt.supervise.gd36524.biz.store.StoreInfoRest") |
|||
@RequestMapping("/store") |
|||
public class StoreInfoRest { |
|||
|
|||
@Autowired |
|||
private StoreInfoService storeInfoService; |
|||
|
|||
@PostMapping("/list") |
|||
public ResultBean<List<StoreInfo>> list(@RequestBody StoreQuery query) { |
|||
ResultBean rb = ResultBean.fireFail(); |
|||
List<StoreInfo> vo = storeInfoService.listQuery(query); |
|||
return rb.success().setData(vo); |
|||
} |
|||
|
|||
@PostMapping("/uploadData") |
|||
public ResultBean<UploadVo> uploadData(@RequestParam("file") MultipartFile file) { |
|||
ResultBean rb = ResultBean.fireFail(); |
|||
UploadVo vo = storeInfoService.uploadAndResetData(file); |
|||
return rb.success().setData(vo); |
|||
} |
|||
} |
@ -0,0 +1,105 @@ |
|||
package com.yxt.supervise.gd36524.biz.store; |
|||
|
|||
import cn.hutool.core.date.DateUtil; |
|||
import com.alibaba.excel.EasyExcel; |
|||
import com.alibaba.excel.context.AnalysisContext; |
|||
import com.alibaba.excel.read.builder.ExcelReaderBuilder; |
|||
import com.alibaba.excel.read.listener.ReadListener; |
|||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
|||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
|||
import org.apache.commons.lang3.StringUtils; |
|||
import org.slf4j.Logger; |
|||
import org.slf4j.LoggerFactory; |
|||
import org.springframework.stereotype.Service; |
|||
import org.springframework.web.multipart.MultipartFile; |
|||
|
|||
import java.io.IOException; |
|||
import java.util.ArrayList; |
|||
import java.util.Date; |
|||
import java.util.List; |
|||
|
|||
@Service |
|||
public class StoreInfoService extends ServiceImpl<StoreInfoMapper, StoreInfo> { |
|||
|
|||
private static final Logger L = LoggerFactory.getLogger(StoreInfoService.class); |
|||
|
|||
public UploadVo uploadAndResetData(MultipartFile file) { |
|||
|
|||
UploadVo vo = new UploadVo(); |
|||
vo.setStarTime(DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss")); |
|||
vo.setFileName(file.getOriginalFilename()); |
|||
|
|||
long millis = System.currentTimeMillis(); |
|||
try { |
|||
ExcelReaderBuilder read = EasyExcel.read(file.getInputStream(), StoreInfo.class, createReadListener(vo)); |
|||
read.sheet().headRowNumber(2).doRead(); |
|||
} catch (IOException e) { |
|||
e.printStackTrace(); |
|||
L.error("导入门店信息数据出错:{}", e.getMessage()); |
|||
vo.setErrInfo("导入门店信息数据出错:" + e.getMessage()); |
|||
} |
|||
|
|||
long l = System.currentTimeMillis() - millis; |
|||
vo.setUseTime("" + (l / 1000) + " 秒"); |
|||
return vo; |
|||
} |
|||
|
|||
private ReadListener<StoreInfo> createReadListener(UploadVo vo) { |
|||
|
|||
return new ReadListener<StoreInfo>() { |
|||
|
|||
private int all = 0, x = 0, y = 0, z = 0; |
|||
private List<StoreInfo> toInsertList = new ArrayList<>(); |
|||
|
|||
@Override |
|||
public void invoke(StoreInfo obj, AnalysisContext analysisContext) { |
|||
all++; |
|||
toInsertList.add(obj); |
|||
if ("是".equals(obj.getDueDiligence())) { |
|||
x++; |
|||
} else if ("否".equals(obj.getDueDiligence())) { |
|||
y++; |
|||
} else { |
|||
z++; |
|||
} |
|||
} |
|||
|
|||
@Override |
|||
public void doAfterAllAnalysed(AnalysisContext analysisContext) { |
|||
|
|||
if (toInsertList != null && !toInsertList.isEmpty()) { |
|||
StoreInfoService.this.clearData(); |
|||
StoreInfoService.this.saveBatch(toInsertList); |
|||
} |
|||
|
|||
vo.setNumberAll("" + all); |
|||
vo.setNumberTure("" + x); |
|||
vo.setNumberFalse("" + y); |
|||
vo.setNumberOther("" + z); |
|||
} |
|||
}; |
|||
} |
|||
|
|||
public void clearData() { |
|||
baseMapper.clearData(); |
|||
} |
|||
|
|||
public List<StoreInfo> listQuery(StoreQuery query) { |
|||
QueryWrapper<StoreInfo> qw = new QueryWrapper<>(); |
|||
if (StringUtils.isNotBlank(query.getName())) { |
|||
qw.like("name", query.getName()); |
|||
} |
|||
if (StringUtils.isNotBlank(query.getJindiao()) && !"全部".equals(query.getJindiao())) { |
|||
qw.eq("dueDiligence", query.getJindiao()); |
|||
} |
|||
if (StringUtils.isNoneBlank(query.getAreaStar())) { |
|||
qw.ge("area", query.getAreaStar()); |
|||
} |
|||
if (StringUtils.isNoneBlank(query.getAreaEnd())) { |
|||
qw.le("area", query.getAreaEnd()); |
|||
} |
|||
qw.orderByAsc("serNumber"); |
|||
List<StoreInfo> storeInfos = baseMapper.selectList(qw); |
|||
return storeInfos; |
|||
} |
|||
} |
@ -0,0 +1,13 @@ |
|||
package com.yxt.supervise.gd36524.biz.store; |
|||
|
|||
import com.yxt.common.core.query.Query; |
|||
import lombok.Data; |
|||
|
|||
@Data |
|||
public class StoreQuery implements Query { |
|||
|
|||
private String name;//门店名称
|
|||
private String jindiao;//是否尽调
|
|||
private String areaStar;//面积始
|
|||
private String areaEnd;//面积终
|
|||
} |
@ -0,0 +1,16 @@ |
|||
package com.yxt.supervise.gd36524.biz.store; |
|||
|
|||
import lombok.Data; |
|||
|
|||
@Data |
|||
public class UploadVo { |
|||
|
|||
private String fileName; |
|||
private String starTime; |
|||
private String useTime; |
|||
private String numberAll; |
|||
private String numberTure; |
|||
private String numberFalse; |
|||
private String numberOther; |
|||
private String errInfo; |
|||
} |
Loading…
Reference in new issue