
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中数据导入系统数据库(目前门店信息包括:名称 地址 经纬度 店铺面积 是否尽调) |
1。实现门店信息数据的导入功能,将Excel中数据导入系统数据库(目前门店信息包括:名称 地址 经纬度 店铺面积 是否尽调) |
||||
2。从系统数据查询、过滤数据,提供给页面地图 |
2。从系统数据查询、过滤数据,提供给页面地图 |
||||
3。地图展示和标注,根据不同状态展示不同颜色,鼠标移动到标注上显示门店名称,点击标注展示门店详细信息。 |
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; |
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.baomidou.mybatisplus.annotation.TableName; |
||||
|
import com.fasterxml.jackson.annotation.JsonFormat; |
||||
import com.yxt.common.core.domain.EntityWithId; |
import com.yxt.common.core.domain.EntityWithId; |
||||
|
import lombok.Data; |
||||
|
|
||||
|
import java.util.Date; |
||||
|
import java.util.List; |
||||
|
|
||||
|
@Data |
||||
@TableName("store_info") |
@TableName("store_info") |
||||
public class StoreInfo extends EntityWithId { |
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