liupopo 2 years ago
parent
commit
a6ec969b86
  1. 22
      docs/databases/table_create.sql
  2. BIN
      docs/xuqiu/datatemplate.xlsx
  3. BIN
      docs/xuqiu/便利店门店基础信息表(4)(1).xlsx
  4. BIN
      docs/xuqiu/便利店门店基础信息表(data).xlsx
  5. 12
      docs/xuqiu/功能.txt
  6. BIN
      docs/xuqiu/导入数据模板.xlsx
  7. 11
      pom.xml
  8. 48
      src/main/java/com/yxt/supervise/gd36524/biz/store/StoreInfo.java
  9. 12
      src/main/java/com/yxt/supervise/gd36524/biz/store/StoreInfoMapper.java
  10. 30
      src/main/java/com/yxt/supervise/gd36524/biz/store/StoreInfoRest.java
  11. 105
      src/main/java/com/yxt/supervise/gd36524/biz/store/StoreInfoService.java
  12. 13
      src/main/java/com/yxt/supervise/gd36524/biz/store/StoreQuery.java
  13. 16
      src/main/java/com/yxt/supervise/gd36524/biz/store/UploadVo.java
  14. 9
      src/main/resources/application-pro.yml
  15. 1
      src/main/resources/application-test.yml
  16. 6
      src/main/resources/application.yml

22
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='便利店基础信息情况表';

BIN
docs/xuqiu/datatemplate.xlsx

Binary file not shown.

BIN
docs/xuqiu/便利店门店基础信息表(4)(1).xlsx

Binary file not shown.

BIN
docs/xuqiu/便利店门店基础信息表(data).xlsx

Binary file not shown.

12
docs/xuqiu/功能.txt

@ -1,3 +1,15 @@
1。实现门店信息数据的导入功能,将Excel中数据导入系统数据库(目前门店信息包括:名称 地址 经纬度 店铺面积 是否尽调)
2。从系统数据查询、过滤数据,提供给页面地图
3。地图展示和标注,根据不同状态展示不同颜色,鼠标移动到标注上显示门店名称,点击标注展示门店详细信息。
http://jianguan.yyundong.com/map365
本周一侯晓龙说的按董行要求做一个在地图上展示36524门店分布的页面,
可以进行查询过滤,
是否尽调按不同样式展示 ,
点击门店可展示门店信息。
数据是可以通过Excel文件导入。
目前以上要求已经实现,访问http://jianguan.yyundong.com/map365

BIN
docs/xuqiu/导入数据模板.xlsx

Binary file not shown.

11
pom.xml

@ -38,6 +38,17 @@
<artifactId>junit-platform-launcher</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.2.1</version>
</dependency>
</dependencies>

48
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<String> getLnglat() {
return CollUtil.newArrayList(lng, lat);
}
}

12
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<StoreInfo> {
@Delete("delete from store_info where 1=1")
void clearData();
}

30
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<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);
}
}

105
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<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;
}
}

13
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;//面积终
}

16
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;
}

9
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/

1
src/main/resources/application-test.yml

@ -21,7 +21,6 @@ spring:
port: 6379
timeout: 0 # 连接超时时间(毫秒)
image:
upload:
path: D:/webapps/supervise/static/upload/

6
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

Loading…
Cancel
Save