diff --git a/docs/databases/table_create.sql b/docs/databases/table_create.sql
new file mode 100644
index 0000000..60660d1
--- /dev/null
+++ b/docs/databases/table_create.sql
@@ -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='便利店基础信息情况表';
\ No newline at end of file
diff --git a/docs/xuqiu/datatemplate.xlsx b/docs/xuqiu/datatemplate.xlsx
new file mode 100644
index 0000000..176c7cb
Binary files /dev/null and b/docs/xuqiu/datatemplate.xlsx differ
diff --git a/docs/xuqiu/便利店门店基础信息表(4)(1).xlsx b/docs/xuqiu/便利店门店基础信息表(4)(1).xlsx
new file mode 100644
index 0000000..f9a671e
Binary files /dev/null and b/docs/xuqiu/便利店门店基础信息表(4)(1).xlsx differ
diff --git a/docs/xuqiu/便利店门店基础信息表(data).xlsx b/docs/xuqiu/便利店门店基础信息表(data).xlsx
new file mode 100644
index 0000000..cb42957
Binary files /dev/null and b/docs/xuqiu/便利店门店基础信息表(data).xlsx differ
diff --git a/docs/xuqiu/功能.txt b/docs/xuqiu/功能.txt
index 66343d3..93e6033 100644
--- a/docs/xuqiu/功能.txt
+++ b/docs/xuqiu/功能.txt
@@ -1,3 +1,15 @@
1。实现门店信息数据的导入功能,将Excel中数据导入系统数据库(目前门店信息包括:名称 地址 经纬度 店铺面积 是否尽调)
2。从系统数据查询、过滤数据,提供给页面地图
3。地图展示和标注,根据不同状态展示不同颜色,鼠标移动到标注上显示门店名称,点击标注展示门店详细信息。
+
+
+http://jianguan.yyundong.com/map365
+
+
+本周一侯晓龙说的按董行要求做一个在地图上展示36524门店分布的页面,
+可以进行查询过滤,
+是否尽调按不同样式展示 ,
+点击门店可展示门店信息。
+数据是可以通过Excel文件导入。
+
+目前以上要求已经实现,访问http://jianguan.yyundong.com/map365
\ No newline at end of file
diff --git a/docs/xuqiu/导入数据模板.xlsx b/docs/xuqiu/导入数据模板.xlsx
new file mode 100644
index 0000000..fd0e4dc
Binary files /dev/null and b/docs/xuqiu/导入数据模板.xlsx differ
diff --git a/pom.xml b/pom.xml
index 8262692..ed460f6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -38,6 +38,17 @@
junit-platform-launcher
test
+
+ org.projectlombok
+ lombok
+ 1.18.24
+ true
+
+
+ com.alibaba
+ easyexcel
+ 3.2.1
+
diff --git a/src/main/java/com/yxt/supervise/gd36524/biz/store/StoreInfo.java b/src/main/java/com/yxt/supervise/gd36524/biz/store/StoreInfo.java
index aa503a7..19bf186 100644
--- a/src/main/java/com/yxt/supervise/gd36524/biz/store/StoreInfo.java
+++ b/src/main/java/com/yxt/supervise/gd36524/biz/store/StoreInfo.java
@@ -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 getLnglat() {
+ return CollUtil.newArrayList(lng, lat);
+ }
}
diff --git a/src/main/java/com/yxt/supervise/gd36524/biz/store/StoreInfoMapper.java b/src/main/java/com/yxt/supervise/gd36524/biz/store/StoreInfoMapper.java
new file mode 100644
index 0000000..d752b72
--- /dev/null
+++ b/src/main/java/com/yxt/supervise/gd36524/biz/store/StoreInfoMapper.java
@@ -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 {
+
+ @Delete("delete from store_info where 1=1")
+ void clearData();
+}
diff --git a/src/main/java/com/yxt/supervise/gd36524/biz/store/StoreInfoRest.java b/src/main/java/com/yxt/supervise/gd36524/biz/store/StoreInfoRest.java
new file mode 100644
index 0000000..c1af52f
--- /dev/null
+++ b/src/main/java/com/yxt/supervise/gd36524/biz/store/StoreInfoRest.java
@@ -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(@RequestBody StoreQuery query) {
+ ResultBean rb = ResultBean.fireFail();
+ List vo = storeInfoService.listQuery(query);
+ return rb.success().setData(vo);
+ }
+
+ @PostMapping("/uploadData")
+ public ResultBean uploadData(@RequestParam("file") MultipartFile file) {
+ ResultBean rb = ResultBean.fireFail();
+ UploadVo vo = storeInfoService.uploadAndResetData(file);
+ return rb.success().setData(vo);
+ }
+}
diff --git a/src/main/java/com/yxt/supervise/gd36524/biz/store/StoreInfoService.java b/src/main/java/com/yxt/supervise/gd36524/biz/store/StoreInfoService.java
new file mode 100644
index 0000000..2ee6891
--- /dev/null
+++ b/src/main/java/com/yxt/supervise/gd36524/biz/store/StoreInfoService.java
@@ -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 {
+
+ 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 createReadListener(UploadVo vo) {
+
+ return new ReadListener() {
+
+ private int all = 0, x = 0, y = 0, z = 0;
+ private List 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 listQuery(StoreQuery query) {
+ QueryWrapper 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 storeInfos = baseMapper.selectList(qw);
+ return storeInfos;
+ }
+}
diff --git a/src/main/java/com/yxt/supervise/gd36524/biz/store/StoreQuery.java b/src/main/java/com/yxt/supervise/gd36524/biz/store/StoreQuery.java
new file mode 100644
index 0000000..e404419
--- /dev/null
+++ b/src/main/java/com/yxt/supervise/gd36524/biz/store/StoreQuery.java
@@ -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;//面积终
+}
diff --git a/src/main/java/com/yxt/supervise/gd36524/biz/store/UploadVo.java b/src/main/java/com/yxt/supervise/gd36524/biz/store/UploadVo.java
new file mode 100644
index 0000000..10ad689
--- /dev/null
+++ b/src/main/java/com/yxt/supervise/gd36524/biz/store/UploadVo.java
@@ -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;
+}
diff --git a/src/main/resources/application-pro.yml b/src/main/resources/application-pro.yml
index 8da73a9..c6cb2ae 100644
--- a/src/main/resources/application-pro.yml
+++ b/src/main/resources/application-pro.yml
@@ -1,9 +1,9 @@
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
- url: jdbc:mysql://127.0.0.1:3306/yxt_supervise_gd36524?serverTimezone=GMT%2B8&autoReconnect=true&useUnicode=true&characterEncoding=UTF-8
+ url: jdbc:mysql://127.0.0.1:3306/yxt_supervise_gd36524?serverTimezone=GMT%2B8&autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&nullCatalogMeansCurrent=true
username: root
- password: root
+ password: 1LAiGz$t1*Iw
cloud:
nacos:
discovery:
@@ -20,9 +20,10 @@ spring:
password: 123456
port: 6379
timeout: 0 # 连接超时时间(毫秒)
+
image:
upload:
- path: D:\supervise\upload\
+ path: D:/webapps/supervise/static/upload/
url:
- prefix: http://127.0.0.1/api/upload/
+ prefix: http://122.14.222.186:7003/upload/
diff --git a/src/main/resources/application-test.yml b/src/main/resources/application-test.yml
index 1656166..c6cb2ae 100644
--- a/src/main/resources/application-test.yml
+++ b/src/main/resources/application-test.yml
@@ -21,7 +21,6 @@ spring:
port: 6379
timeout: 0 # 连接超时时间(毫秒)
-
image:
upload:
path: D:/webapps/supervise/static/upload/
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index eeba737..1bb525c 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -2,9 +2,9 @@ spring:
application:
name: supervise-gd36524
profiles:
- active: devv
+# active: devv
# active: test
-# active: pro
+ active: pro
messages:
# 国际化资源文件路径
basename: i18n/messages
@@ -19,7 +19,7 @@ spring:
enabled: true
server:
- port: 7103
+ port: 7104
max-http-header-size: 102400
undertow:
max-http-post-size: -1