diff --git a/java/pom.xml b/java/pom.xml
index b08d583..ca3d33b 100644
--- a/java/pom.xml
+++ b/java/pom.xml
@@ -9,7 +9,7 @@
vip.xumy.admin
xumy_admin
- 0.0.1
+ 1.2.0
admin
xumy-admin
jar
diff --git a/java/src/main/java/vip/xumy/admin/AdminApplocation.java b/java/src/main/java/vip/xumy/admin/AdminApplocation.java
index 33c4f85..8444c7b 100644
--- a/java/src/main/java/vip/xumy/admin/AdminApplocation.java
+++ b/java/src/main/java/vip/xumy/admin/AdminApplocation.java
@@ -1,28 +1,18 @@
package vip.xumy.admin;
-import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
-import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
-import org.springframework.boot.builder.SpringApplicationBuilder;
-import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
-import org.springframework.context.annotation.ComponentScan;
+import vip.xumy.admin.sys.conf.SysInitializer;
+import vip.xumy.admin.um.conf.UMInitializer;
-@EnableAutoConfiguration(exclude = DataSourceAutoConfiguration.class)
-@ComponentScan(value = "vip.xumy", useDefaultFilters = true)
-@MapperScan("vip.xumy.admin.**.mapper")
-public class AdminApplocation extends SpringBootServletInitializer {
+
+public class AdminApplocation {
public static void main(String[] args) {
- SpringApplication.run(AdminApplocation.class);
+ Class>[] arr = new Class>[] {UMInitializer.class, SysInitializer.class};
+ SpringApplication.run(arr,args);
}
- @Override
- protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
- return builder.sources(AdminApplocation.class);
- }
-
}
diff --git a/java/src/main/java/vip/xumy/admin/bmap/BMapInitializer.java b/java/src/main/java/vip/xumy/admin/bmap/BMapInitializer.java
new file mode 100644
index 0000000..b977007
--- /dev/null
+++ b/java/src/main/java/vip/xumy/admin/bmap/BMapInitializer.java
@@ -0,0 +1,20 @@
+package vip.xumy.admin.bmap;
+
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+import org.springframework.boot.builder.SpringApplicationBuilder;
+import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
+import org.springframework.context.annotation.ComponentScan;
+
+@EnableAutoConfiguration(exclude = DataSourceAutoConfiguration.class)
+@ComponentScan(value = "vip.xumy.admin.bmap", useDefaultFilters = true)
+@MapperScan("vip.xumy.admin.bmap.mapper")
+public class BMapInitializer extends SpringBootServletInitializer {
+
+ @Override
+ protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
+ return builder.sources(BMapInitializer.class);
+ }
+
+}
diff --git a/java/src/main/java/vip/xumy/admin/bmap/controller/BMapController.java b/java/src/main/java/vip/xumy/admin/bmap/controller/BMapController.java
new file mode 100644
index 0000000..dae543c
--- /dev/null
+++ b/java/src/main/java/vip/xumy/admin/bmap/controller/BMapController.java
@@ -0,0 +1,75 @@
+package vip.xumy.admin.bmap.controller;
+
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.github.pagehelper.Page;
+import com.github.pagehelper.PageHelper;
+
+import vip.xumy.admin.bmap.pojo.CityLocate;
+import vip.xumy.admin.bmap.pojo.DownWorker;
+import vip.xumy.admin.bmap.pojo.WorkContext;
+import vip.xumy.admin.bmap.service.CityLocateService;
+import vip.xumy.admin.bmap.service.LoadWorkService;
+import vip.xumy.admin.bmap.util.DownloadWorker;
+import vip.xumy.core.pojo.com.AjaxResponse;
+import vip.xumy.core.pojo.com.PageResponse;
+
+/**
+ * @author:mengyxu
+ * @date:2021年10月25日
+ */
+
+@RestController
+@RequestMapping("bmap")
+public class BMapController {
+ @Autowired
+ private CityLocateService cityLocateService;
+ @Autowired
+ private LoadWorkService loadWorkService;
+ @Autowired
+ private DownloadWorker worker;
+
+ @GetMapping("city/list")
+ public PageResponse list(CityLocate example){
+ Page pages = PageHelper.startPage(example.getPage(), example.getSize());
+ List list = cityLocateService.list(example);
+ PageResponse rsp = new PageResponse<>();
+ rsp.setRows(list);
+ rsp.setTotal(pages.getTotal());
+ return rsp;
+ }
+
+ @PostMapping("work/add")
+ public AjaxResponse add(@RequestBody WorkContext context) throws Exception {
+ loadWorkService.add(context);
+ return new AjaxResponse(true, "添加下载任务成功");
+ }
+
+ @GetMapping("work/history")
+ public PageResponse workHistory(int page, int size){
+ Page pages = PageHelper.startPage(page, size);
+ List list = loadWorkService.history();
+ PageResponse rsp = new PageResponse<>();
+ rsp.setRows(list);
+ rsp.setTotal(pages.getTotal());
+ return rsp;
+ }
+
+ @GetMapping("work/wait")
+ public List waitWork(){
+ return loadWorkService.waitList();
+ }
+
+ @GetMapping("working")
+ public WorkContext working(){
+ return worker.getContext();
+ }
+
+}
diff --git a/java/src/main/java/vip/xumy/admin/bmap/controller/ImageController.java b/java/src/main/java/vip/xumy/admin/bmap/controller/ImageController.java
new file mode 100644
index 0000000..41443f7
--- /dev/null
+++ b/java/src/main/java/vip/xumy/admin/bmap/controller/ImageController.java
@@ -0,0 +1,45 @@
+package vip.xumy.admin.bmap.controller;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.MediaType;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import lombok.extern.log4j.Log4j2;
+
+/**
+ * @author:mengyxu
+ * @date:2020年4月16日
+ */
+
+@Log4j2
+@Controller
+@RequestMapping("image")
+public class ImageController {
+ @Value("${image.bmap.maptile}")
+ private String filePath;
+
+ @RequestMapping(value = "tile/{b}/{d}/{a}", produces = MediaType.IMAGE_PNG_VALUE)
+ @ResponseBody
+ public byte[] getImage(@PathVariable("b") String b, @PathVariable("d") String d, @PathVariable("a") String a)
+ throws IOException {
+ String path = filePath + "/" + b + "/" + d + "/" + a;
+ File file = new File(path);
+ if (!file.exists()) {
+ log.warn("找不到目标文件:" + path);
+ file = new File(filePath, "0.png");
+ }
+ try (FileInputStream input = new FileInputStream(file);) {
+ byte[] bytes = new byte[input.available()];
+ input.read(bytes);
+ return bytes;
+ }
+ }
+
+}
diff --git a/java/src/main/java/vip/xumy/admin/bmap/mapper/ICityLocateMapper.java b/java/src/main/java/vip/xumy/admin/bmap/mapper/ICityLocateMapper.java
new file mode 100644
index 0000000..70c17f2
--- /dev/null
+++ b/java/src/main/java/vip/xumy/admin/bmap/mapper/ICityLocateMapper.java
@@ -0,0 +1,38 @@
+package vip.xumy.admin.bmap.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Insert;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Select;
+import org.apache.ibatis.annotations.Update;
+
+import vip.xumy.admin.bmap.pojo.CityLocate;
+
+/**
+ * @author:mengyxu
+ * @date:2021年10月25日
+ */
+
+@Mapper
+public interface ICityLocateMapper {
+ static final String BASE_COLUMN = "id, name, level, parent, max_lng, min_lng, max_lat, min_lat, count, space";
+
+ @Insert({ "" })
+ void saveBatch(List cityInfos);
+
+ @Select({ "" })
+ List list(CityLocate example);
+
+ @Update({ "UPDATE bmap_city_location SET max_lng = #{maxLng}, min_lng = #{minLng}, max_lat = #{maxLat}, ",
+ "min_lat = #{minLat}, count = #{count}, space = #{space} WHERE id = #{id}" })
+ void update(CityLocate cityInfo);
+
+}
diff --git a/java/src/main/java/vip/xumy/admin/bmap/mapper/ILoadWorkMapper.java b/java/src/main/java/vip/xumy/admin/bmap/mapper/ILoadWorkMapper.java
new file mode 100644
index 0000000..1e315d8
--- /dev/null
+++ b/java/src/main/java/vip/xumy/admin/bmap/mapper/ILoadWorkMapper.java
@@ -0,0 +1,46 @@
+package vip.xumy.admin.bmap.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Insert;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Options;
+import org.apache.ibatis.annotations.Select;
+import org.apache.ibatis.annotations.Update;
+
+import vip.xumy.admin.bmap.pojo.DownWorker;
+import vip.xumy.admin.bmap.pojo.WorkContext;
+
+/**
+ * @author:mengyxu
+ * @date:2021年10月26日
+ */
+
+@Mapper
+public interface ILoadWorkMapper {
+ static final String INSERT_COLUMN = "city, city_name, add_time, status, min_zom, max_zom, total";
+
+ @Select({ "" })
+ List list(DownWorker example);
+
+ @Insert({ "" })
+ @Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
+ void saveBatch(List context);
+
+ @Insert({ "" })
+ @Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
+ void save(WorkContext context);
+
+ @Update({ "UPDATE bmap_load_work SET start_time = #{startTime}, end_time = #{endTime}, status = #{status}, ",
+ "`exist` = #{exist}, success = #{success}, fail = #{fail}, result = #{result} WHERE id = #{id}" })
+ void update(DownWorker context);
+
+}
diff --git a/java/src/main/java/vip/xumy/admin/bmap/pojo/CityLocate.java b/java/src/main/java/vip/xumy/admin/bmap/pojo/CityLocate.java
new file mode 100644
index 0000000..b464b67
--- /dev/null
+++ b/java/src/main/java/vip/xumy/admin/bmap/pojo/CityLocate.java
@@ -0,0 +1,29 @@
+package vip.xumy.admin.bmap.pojo;
+
+import lombok.Getter;
+import lombok.Setter;
+import vip.xumy.core.pojo.base.BasePageParam;
+
+/**
+ * @author:mengyxu
+ * @date:2021年10月25日
+ */
+
+@Setter
+@Getter
+public class CityLocate extends BasePageParam {
+
+ private Integer id;
+ private String name;
+ private Integer level;
+ private Integer parent;
+ private String maxLng;
+ private String minLng;
+ private String maxLat;
+ private String minLat;
+ private Integer count;
+ private Long space;
+
+ private String partName;
+
+}
diff --git a/java/src/main/java/vip/xumy/admin/bmap/pojo/DownWorker.java b/java/src/main/java/vip/xumy/admin/bmap/pojo/DownWorker.java
new file mode 100644
index 0000000..e865f3b
--- /dev/null
+++ b/java/src/main/java/vip/xumy/admin/bmap/pojo/DownWorker.java
@@ -0,0 +1,31 @@
+package vip.xumy.admin.bmap.pojo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author:mengyxu
+ * @date:2021年10月26日
+ */
+
+@Setter
+@Getter
+public class DownWorker {
+
+ private Integer id;
+ private Integer city;
+ private String cityName;
+ private String addTime;
+ private String startTime;
+ private String endTime;
+ private int status;
+ private Integer result;
+
+ protected int total = 0;
+ protected int success = 0;
+ protected int fail = 0;
+ protected int exist = 0;
+ protected int minZom = 1;
+ protected int maxZom = 19;
+
+}
diff --git a/java/src/main/java/vip/xumy/admin/bmap/pojo/Point.java b/java/src/main/java/vip/xumy/admin/bmap/pojo/Point.java
new file mode 100644
index 0000000..ef31dc8
--- /dev/null
+++ b/java/src/main/java/vip/xumy/admin/bmap/pojo/Point.java
@@ -0,0 +1,40 @@
+package vip.xumy.admin.bmap.pojo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author:mengyxu
+ * @date:2020年4月28日
+ */
+
+@Setter
+@Getter
+public class Point {
+
+ private int x;
+ private int y;
+ private int z;
+ private double lan;
+ private double lat;
+
+ public Point(String lan, String lat) {
+ super();
+ this.lan = Double.parseDouble(lan);
+ this.lat = Double.parseDouble(lat);
+ }
+
+ public Point(double lan, double lat) {
+ super();
+ this.lan = lan;
+ this.lat = lat;
+ }
+
+ public Point(int x, int y, int z) {
+ super();
+ this.x = x;
+ this.y = y;
+ this.z = z;
+ }
+
+}
diff --git a/java/src/main/java/vip/xumy/admin/bmap/pojo/WorkContext.java b/java/src/main/java/vip/xumy/admin/bmap/pojo/WorkContext.java
new file mode 100644
index 0000000..1168137
--- /dev/null
+++ b/java/src/main/java/vip/xumy/admin/bmap/pojo/WorkContext.java
@@ -0,0 +1,105 @@
+package vip.xumy.admin.bmap.pojo;
+
+import java.text.MessageFormat;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+import java.util.concurrent.Future;
+
+import lombok.Getter;
+import lombok.Setter;
+import vip.xumy.admin.bmap.util.BMapTool;
+
+/**
+ * @author:mengyxu
+ * @date:2021年10月26日
+ */
+
+@Setter
+@Getter
+public class WorkContext extends DownWorker {
+
+ private long start;
+
+ private Set> futures = new HashSet<>();
+ private Future> submit;
+ private Point leftBottom;
+ private Point rightTop;
+
+ public void setCityInfo(CityLocate city) {
+ super.setCity(city.getId());
+ super.setCityName(city.getName());
+ this.leftBottom = new Point(city.getMinLng(), city.getMinLat());
+ this.rightTop = new Point(city.getMaxLng(), city.getMaxLat());
+ this.callTotal();
+ }
+
+ private void callTotal() {
+ for (int z = minZom; z <= maxZom; z++) {
+ leftBottom.setZ(z);
+ rightTop.setZ(z);
+ BMapTool.callXY(leftBottom);
+ BMapTool.callXY(rightTop);
+ total += ((rightTop.getX() - leftBottom.getX() + 1) * (rightTop.getY() - leftBottom.getY() + 1));
+ }
+ }
+
+ public void addFuture(Future> future) {
+ futures.add(future);
+ }
+
+ public void success() {
+ super.success++;
+ }
+
+ public void fail() {
+ super.fail++;
+ }
+
+ public void exist() {
+ super.exist++;
+ }
+
+ public String status() {
+ return MessageFormat.format("瓦片总数:{0},下载成功:{1},已存在:{2},下载失败:{3}", total, success, exist, fail);
+ }
+
+ public int getSize() {
+ Iterator> iter = futures.iterator();
+ while (iter.hasNext()) {
+ Future> future = (Future>) iter.next();
+ if (future.isDone() || future.isCancelled()) {
+ iter.remove();
+ }
+ }
+ return futures.size();
+ }
+
+ public boolean started() {
+ return submit != null;
+ }
+
+ public boolean isDone() {
+ if (submit == null) {
+ return false;
+ }
+ return submit != null && submit.isDone() && getSize() == 0;
+ }
+
+ public long getUsed() {
+ return System.currentTimeMillis() - start;
+
+ }
+
+ public long getUse() {
+ int i = success + fail;
+ if (i == 0) {
+ return 0;
+ }
+ int l = total - i - exist;
+ double x = l * 1.0 / i;
+ long used = System.currentTimeMillis() - start;
+ return (long) (used * x);
+ }
+
+}
diff --git a/java/src/main/java/vip/xumy/admin/bmap/service/CityLocateService.java b/java/src/main/java/vip/xumy/admin/bmap/service/CityLocateService.java
new file mode 100644
index 0000000..a40df69
--- /dev/null
+++ b/java/src/main/java/vip/xumy/admin/bmap/service/CityLocateService.java
@@ -0,0 +1,45 @@
+package vip.xumy.admin.bmap.service;
+
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import vip.xumy.admin.bmap.mapper.ICityLocateMapper;
+import vip.xumy.admin.bmap.pojo.CityLocate;
+
+/**
+ * @author:mengyxu
+ * @date:2021年10月25日
+ */
+
+@Service
+public class CityLocateService {
+ @Autowired
+ private ICityLocateMapper cityLocateMapper;
+
+ public List list(CityLocate example) {
+ return cityLocateMapper.list(example);
+ }
+
+ public CityLocate get(Integer id) {
+ CityLocate example = new CityLocate();
+ example.setId(id);
+ List list = cityLocateMapper.list(example);
+ if (list == null || list.isEmpty()) {
+ return null;
+ }
+ return list.get(0);
+ }
+
+ public CityLocate get(String name) {
+ CityLocate example = new CityLocate();
+ example.setName(name);
+ List list = cityLocateMapper.list(example);
+ if (list == null || list.isEmpty()) {
+ return null;
+ }
+ return list.get(0);
+ }
+
+}
diff --git a/java/src/main/java/vip/xumy/admin/bmap/service/LoadWorkService.java b/java/src/main/java/vip/xumy/admin/bmap/service/LoadWorkService.java
new file mode 100644
index 0000000..f677a24
--- /dev/null
+++ b/java/src/main/java/vip/xumy/admin/bmap/service/LoadWorkService.java
@@ -0,0 +1,71 @@
+package vip.xumy.admin.bmap.service;
+
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import vip.xumy.admin.bmap.mapper.ILoadWorkMapper;
+import vip.xumy.admin.bmap.pojo.CityLocate;
+import vip.xumy.admin.bmap.pojo.DownWorker;
+import vip.xumy.admin.bmap.pojo.WorkContext;
+import vip.xumy.admin.bmap.util.DownloadWorker;
+import vip.xumy.core.exception.CoreException;
+
+/**
+ * @author:mengyxu
+ * @date:2021年10月26日
+ */
+
+@Service
+public class LoadWorkService {
+ @Autowired
+ private ILoadWorkMapper loadWorkMapper;
+ @Autowired
+ private CityLocateService cityLocateService;
+ @Autowired
+ private DownloadWorker worker;
+
+ public List history() {
+ DownWorker example = new WorkContext();
+ example.setStatus(2);
+ return loadWorkMapper.list(example);
+ }
+
+ public List waitList() {
+ DownWorker example = new WorkContext();
+ example.setStatus(0);
+ return loadWorkMapper.list(example);
+ }
+
+ public DownWorker working() {
+ DownWorker example = new WorkContext();
+ example.setStatus(1);
+ List list = loadWorkMapper.list(example);
+ if (list == null || list.isEmpty()) {
+ return null;
+ }
+ return list.get(0);
+ }
+
+ @Transactional
+ public void add(WorkContext context) throws Exception {
+ Integer cityId = context.getCity();
+ if (cityId == null) {
+ throw new CoreException("请选择城市");
+ }
+ CityLocate city = cityLocateService.get(cityId);
+ if (city == null) {
+ throw new CoreException("未录入该城市对应经纬度,添加失败");
+ }
+ context.setCityInfo(city);
+ loadWorkMapper.save(context);
+ worker.addTask(context);
+ }
+
+ public void update(DownWorker context) {
+ loadWorkMapper.update(context);
+ }
+
+}
diff --git a/java/src/main/java/vip/xumy/admin/bmap/util/BMapTool.java b/java/src/main/java/vip/xumy/admin/bmap/util/BMapTool.java
new file mode 100644
index 0000000..fbb9925
--- /dev/null
+++ b/java/src/main/java/vip/xumy/admin/bmap/util/BMapTool.java
@@ -0,0 +1,40 @@
+package vip.xumy.admin.bmap.util;
+
+import vip.xumy.admin.bmap.pojo.Point;
+
+/** Ownership belongs to the company
+ * author:mengyxu
+ * date:2020年4月28日
+ */
+
+public class BMapTool {
+ private static final double[][] BV = new double[][]{
+ new double[]{-0.0015702102444, 111320.7020616939, 1704480524535203L, -10338987376042340L, 26112667856603880L, -35149669176653700L, 26595700718403920L, -10725012454188240L, 1800819912950474L, 82.5},
+ new double[]{8.277824516172526E-4, 111320.7020463578, 6.477955746671607E8, -4.082003173641316E9, 1.077490566351142E10, -1.517187553151559E10, 1.205306533862167E10, -5.124939663577472E9, 9.133119359512032E8, 67.5},
+ new double[]{0.00337398766765, 111320.7020202162, 4481351.045890365, -2.339375119931662E7, 7.968221547186455E7, -1.159649932797253E8, 9.723671115602145E7, -4.366194633752821E7, 8477230.501135234, 52.5},
+ new double[]{0.00220636496208, 111320.7020209128, 51751.86112841131, 3796837.749470245, 992013.7397791013, -1221952.21711287, 1340652.697009075, -620943.6990984312, 144416.9293806241, 37.5},
+ new double[]{-3.441963504368392E-4, 111320.7020576856, 278.2353980772752, 2485758.690035394, 6070.750963243378, 54821.18345352118, 9540.606633304236, -2710.55326746645, 1405.483844121726, 22.5},
+ new double[]{-3.218135878613132E-4, 111320.7020701615, 0.00369383431289, 823725.6402795718, 0.46104986909093, 2351.343141331292, 1.58060784298199, 8.77738589078284, 0.37238884252424, 7.45}
+ };
+
+ public static void callXY(Point p) {
+ double lan = fix(p.getLan(), -180, 180);
+ double lat = fix(p.getLat(), -89.999999, 89.999999);
+ int idx = 5 - (int) Math.abs(lat/15);
+ double[] b = BV[idx];
+ Double c = b[0] + b[1] * Math.abs(lan);
+ double d = Math.abs(lat) / b[9];
+ double e = b[2] + b[3] * d + b[4] * d * d + b[5] * d * d * d + b[6] * d * d * d * d + b[7] * d * d * d * d * d + b[8] * d * d * d * d * d * d;
+ c *= (lan < 0 ? -1 : 1);
+ e *= (lan < 0 ? -1 : 1);
+ double x = Math.floor(c * Math.pow(2, p.getZ() - 18));
+ double y = Math.floor(e * Math.pow(2, p.getZ() - 18));
+ p.setX((int)Math.floor(x / 256));
+ p.setY((int)Math.floor(y / 256));
+ }
+
+ private static double fix(double a, double b, double c) {
+ return Math.min(Math.max(a, b), c);
+ }
+
+}
diff --git a/java/src/main/java/vip/xumy/admin/bmap/util/DownloadWorker.java b/java/src/main/java/vip/xumy/admin/bmap/util/DownloadWorker.java
new file mode 100644
index 0000000..37de0d7
--- /dev/null
+++ b/java/src/main/java/vip/xumy/admin/bmap/util/DownloadWorker.java
@@ -0,0 +1,241 @@
+package vip.xumy.admin.bmap.util;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.InputStream;
+import java.net.ConnectException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.text.MessageFormat;
+import java.util.Date;
+import java.util.List;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
+
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import lombok.Getter;
+import lombok.extern.log4j.Log4j2;
+import vip.xumy.admin.bmap.pojo.DownWorker;
+import vip.xumy.admin.bmap.pojo.Point;
+import vip.xumy.admin.bmap.pojo.WorkContext;
+import vip.xumy.admin.bmap.service.LoadWorkService;
+import vip.xumy.core.utils.DateUtil;
+
+/**
+ * @author:mengyxu
+ * @date:2020年4月10日
+ */
+
+@Log4j2
+@Component
+@EnableScheduling
+public class DownloadWorker {
+ private static final LinkedBlockingQueue queue = new LinkedBlockingQueue<>(1000);
+ private static final ExecutorService executor = Executors.newFixedThreadPool(100);
+ private static final LinkedBlockingQueue works = new LinkedBlockingQueue<>(500);
+ private static final String urlFromat = "http://{0}.bdimg.com/tile/?qt=vtile&x={1}&y={2}&z={3}&styles=pl";
+ private static final String[] MAP_HOSTS = { "maponline0", "maponline1", "maponline2", "maponline3" };
+
+ @Value("${image.bmap.maptile}")
+ private String path;
+ @Value("${bmap.download.size}")
+ private int size;
+
+ @Autowired
+ public void setWorkService(LoadWorkService workService) {
+ this.workService = workService;
+ this.init();
+ }
+
+ private LoadWorkService workService;
+
+ @Getter
+ private WorkContext context;
+ private Lock lockS = new ReentrantLock();
+ private Lock lockF = new ReentrantLock();
+ private Lock lockE = new ReentrantLock();
+
+ public void init() {
+ DownWorker working = workService.working();
+ if (working != null) {
+ working.setStatus(2);
+ working.setResult(2);
+ workService.update(working);
+ }
+ List waitList = workService.waitList();
+ if (waitList == null || waitList.isEmpty()) {
+ return;
+ }
+ for (int i = waitList.size(); i > 0; i--) {
+ DownWorker worker = waitList.get(i - 1);
+ WorkContext context = new WorkContext();
+ BeanUtils.copyProperties(worker, context);
+ try {
+ works.put(context);
+ } catch (InterruptedException e) {
+ context.setStatus(2);
+ context.setResult(3);
+ workService.update(context);
+ }
+ }
+ }
+
+ public void addTask(WorkContext context) throws InterruptedException {
+ works.put(context);
+ }
+
+ @Scheduled(cron = "${bmap.download.work.cron}")
+ public void createWorker() throws InterruptedException {
+ if (context == null) {
+ if (!works.isEmpty()) {
+ context = works.take();
+ ;
+ } else {
+ return;
+ }
+ } else if (context.isDone()) {
+ context.setEndTime(DateUtil.format(new Date(), DateUtil.FORMAT19_LINE_YYYYMMDDHHMMSS));
+ context.setStatus(2);
+ context.setResult(1);
+ workService.update(context);
+ if (!works.isEmpty()) {
+ context = works.take();
+ ;
+ } else {
+ context = null;
+ return;
+ }
+ }
+ addCaller();
+ addWorker(size - context.getSize());
+ log.debug(context.status());
+ }
+
+ private void addCaller() {
+ if (context.started()) {
+ return;
+ }
+ Future> submit = executor.submit(() -> {
+ context.setStartTime(DateUtil.format(new Date(), DateUtil.FORMAT19_LINE_YYYYMMDDHHMMSS));
+ context.setStart(System.currentTimeMillis());
+ context.setStatus(1);
+ workService.update(context);
+ log.info(context.getCityName() + "-submit线程开始");
+ Point leftBottom = context.getLeftBottom();
+ Point rightTop = context.getRightTop();
+ long start = System.currentTimeMillis();
+ for (int z = context.getMinZom(); z <= context.getMaxZom(); z++) {
+ leftBottom.setZ(z);
+ rightTop.setZ(z);
+ BMapTool.callXY(leftBottom);
+ BMapTool.callXY(rightTop);
+ log.debug(MessageFormat.format("Z:{0},X:{1}-{2},Y:{3}-{4}", z, leftBottom.getX(), rightTop.getX(),
+ leftBottom.getY(), rightTop.getY()));
+ for (int x = leftBottom.getX(); x <= rightTop.getX(); x++) {
+ for (int y = leftBottom.getY(); y <= rightTop.getY(); y++) {
+ Point p = new Point(x, y, z);
+ try {
+ queue.put(p);
+ } catch (InterruptedException e) {
+ fail(p);
+ }
+ }
+ }
+ }
+ long time = (System.currentTimeMillis() - start) / 1000;
+ log.info(context.getCityName() + "-submit线程结束,耗时" + time + "秒,速度约"
+ + (context.getTotal() - context.getExist() - 1000) / time + "个/秒");
+ });
+ context.setSubmit(submit);
+ }
+
+ private void addWorker(int size) {
+ for (int i = 0; i < size; i++) {
+ Future> future = executor.submit(() -> {
+ while (!queue.isEmpty()) {
+ try {
+ Point point = queue.take();
+ if (!downLoad(point)) {
+ fail(point);
+ }
+ } catch (InterruptedException e) {
+ log.error("download failed", e);
+ }
+ }
+ System.out.println(Thread.currentThread().getName() + "下载线程结束");
+ });
+ context.addFuture(future);
+ }
+ }
+
+ private boolean downLoad(Point point) {
+ int z = point.getZ();
+ int x = point.getX();
+ int y = point.getY();
+ File file = new File(path + "/" + z + "/" + x + "/" + y + ".png");
+
+ if (file.exists()) {
+ exist();
+ return true;
+ }
+ new File(file.getParent()).mkdirs();
+ int idx = Math.abs(x + y) % MAP_HOSTS.length;
+ String urlStr = MessageFormat.format(urlFromat, MAP_HOSTS[idx], x + "", y + "", z);
+ URL url;
+ try {
+ url = new URL(urlStr);
+ } catch (MalformedURLException e) {
+ log.error("download failed:" + e.getMessage());
+ return false;
+ }
+ try (InputStream is = url.openConnection().getInputStream();
+ FileOutputStream os = new FileOutputStream(file);) {
+ byte[] buf = new byte[1024 * 20];
+ int bytesRead;
+ while ((bytesRead = is.read(buf)) > 0) {
+ os.write(buf, 0, bytesRead);
+ }
+ os.flush();
+ success();
+ return true;
+ } catch (ConnectException | FileNotFoundException e) {
+ log.error(e.getMessage());
+ file.delete();
+ return false;
+ } catch (Exception e) {
+ log.error("download failed", e);
+ file.delete();
+ return false;
+ }
+ }
+
+ private void success() {
+ lockS.lock();
+ context.success();
+ lockS.unlock();
+ }
+
+ private void fail(Point p) {
+ lockF.lock();
+ context.fail();
+ lockF.unlock();
+ }
+
+ private void exist() {
+ lockE.lock();
+ context.exist();
+ lockE.unlock();
+ }
+
+}
diff --git a/java/src/main/java/vip/xumy/admin/sys/conf/SysInitializer.java b/java/src/main/java/vip/xumy/admin/sys/conf/SysInitializer.java
new file mode 100644
index 0000000..146a108
--- /dev/null
+++ b/java/src/main/java/vip/xumy/admin/sys/conf/SysInitializer.java
@@ -0,0 +1,20 @@
+package vip.xumy.admin.sys.conf;
+
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+import org.springframework.boot.builder.SpringApplicationBuilder;
+import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
+import org.springframework.context.annotation.ComponentScan;
+
+@EnableAutoConfiguration(exclude = DataSourceAutoConfiguration.class)
+@ComponentScan(value = "vip.xumy.admin.sys,vip.xumy.core", useDefaultFilters = true)
+@MapperScan("vip.xumy.admin.sys.mapper")
+public class SysInitializer extends SpringBootServletInitializer {
+
+ @Override
+ protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
+ return builder.sources(SysInitializer.class);
+ }
+
+}
diff --git a/java/src/main/java/vip/xumy/admin/sys/controller/ConfigController.java b/java/src/main/java/vip/xumy/admin/sys/controller/ConfigController.java
new file mode 100644
index 0000000..3c6f241
--- /dev/null
+++ b/java/src/main/java/vip/xumy/admin/sys/controller/ConfigController.java
@@ -0,0 +1,49 @@
+package vip.xumy.admin.sys.controller;
+
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.github.pagehelper.Page;
+import com.github.pagehelper.PageHelper;
+
+import vip.xumy.admin.sys.pojo.SysConfig;
+import vip.xumy.admin.sys.service.ConfigService;
+import vip.xumy.core.pojo.com.AjaxResponse;
+import vip.xumy.core.pojo.com.PageResponse;
+
+/**
+ * Do not use for any commercial purposes without permission
+ *
+ * @author: mengyxu
+ * @date: 2022年1月4日
+ */
+
+@RestController
+@RequestMapping("sys/config")
+public class ConfigController {
+ @Autowired
+ private ConfigService configService;
+
+ @GetMapping
+ public PageResponse list(SysConfig example) {
+ Page pages = PageHelper.startPage(example.getPage(), example.getSize());
+ List list = configService.queryByExample(example);
+ PageResponse rsp = new PageResponse<>();
+ rsp.setRows(list);
+ rsp.setTotal(pages.getTotal());
+ return rsp;
+ }
+
+ @PutMapping
+ public AjaxResponse update(@RequestBody SysConfig sysConfig) {
+ configService.update(sysConfig);
+ return new AjaxResponse(true, "修改成功");
+ }
+
+}
diff --git a/java/src/main/java/vip/xumy/admin/sys/controller/DictionaryController.java b/java/src/main/java/vip/xumy/admin/sys/controller/DictionaryController.java
index 92f12ed..840c9a3 100644
--- a/java/src/main/java/vip/xumy/admin/sys/controller/DictionaryController.java
+++ b/java/src/main/java/vip/xumy/admin/sys/controller/DictionaryController.java
@@ -12,20 +12,21 @@ import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import vip.xumy.admin.sys.pojo.Dictionary;
-import vip.xumy.admin.sys.service.IDictionaryService;
+import vip.xumy.admin.sys.service.DictionaryService;
import vip.xumy.core.exception.CoreException;
import vip.xumy.core.pojo.com.AjaxResponse;
import vip.xumy.core.pojo.com.PageResponse;
/**
- * Ownership belongs to the company author:mengyxu date:2019年12月6日
+ * @author:mengyxu
+ * @date:2019年12月6日
*/
@RestController
-@RequestMapping("admin/dict")
+@RequestMapping("dict")
public class DictionaryController {
@Autowired
- private IDictionaryService distService;
+ private DictionaryService distService;
@RequestMapping(value = "list", method = RequestMethod.GET)
public PageResponse queryDistList(Dictionary example) {
diff --git a/java/src/main/java/vip/xumy/admin/sys/controller/LogController.java b/java/src/main/java/vip/xumy/admin/sys/controller/LogController.java
index 715afcf..4b569f1 100644
--- a/java/src/main/java/vip/xumy/admin/sys/controller/LogController.java
+++ b/java/src/main/java/vip/xumy/admin/sys/controller/LogController.java
@@ -11,22 +11,22 @@ import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import vip.xumy.admin.sys.pojo.ActionLog;
-import vip.xumy.admin.sys.service.ILogService;
+import vip.xumy.admin.sys.service.LogService;
import vip.xumy.core.pojo.com.PageResponse;
-/** Ownership belongs to the company
- * author:mengyxu
- * date:2019年12月5日
+/**
+ * @author:mengyxu
+ * @date:2019年12月5日
*/
@RestController
@RequestMapping("admin")
public class LogController {
@Autowired
- private ILogService LogService;
-
+ private LogService LogService;
+
@RequestMapping(value = "log/action", method = RequestMethod.GET)
- public PageResponse queryActionLogList(ActionLog example){
+ public PageResponse queryActionLogList(ActionLog example) {
Page pages = PageHelper.startPage(example.getPage(), example.getSize());
List list = LogService.queryActionLog(example);
PageResponse rsp = new PageResponse<>();
diff --git a/java/src/main/java/vip/xumy/admin/sys/controller/MemoryController.java b/java/src/main/java/vip/xumy/admin/sys/controller/MemoryController.java
index fb4f53c..1f0d011 100644
--- a/java/src/main/java/vip/xumy/admin/sys/controller/MemoryController.java
+++ b/java/src/main/java/vip/xumy/admin/sys/controller/MemoryController.java
@@ -19,45 +19,45 @@ import vip.xumy.core.pojo.BufferResult;
import vip.xumy.core.pojo.com.AjaxResponse;
import vip.xumy.core.pojo.com.Cache;
-/** Ownership belongs to the company
- * author:mengyxu
- * date:2019年12月13日
+/**
+ * @author:mengyxu
+ * @date:2019年12月13日
*/
@Log4j2
@RestController
-@RequestMapping("admin/memory")
+@RequestMapping("memory")
public class MemoryController {
-
+
@RequestMapping("buffer/list")
- public List getBufferList(HttpServletRequest request){
+ public List getBufferList(HttpServletRequest request) {
log.info("查询缓存列表,当前登陆用户:" + LoginUtil.getUserId(request));
List list = new ArrayList<>();
Map buffer = GlobalBuffer.getBuffer();
- for(String key : buffer.keySet()) {
+ for (String key : buffer.keySet()) {
list.add(new BufferResult(key, buffer.get(key)));
}
return list;
}
-
+
@RequestMapping("buffer/clean")
- public AjaxResponse cleanBuffer(HttpServletRequest request){
+ public AjaxResponse cleanBuffer(HttpServletRequest request) {
log.info("清空失效缓存,当前登陆用户:" + LoginUtil.getUserId(request));
GlobalBuffer.cleanCache();
return new AjaxResponse(true, "清空失效缓存成功");
}
-
+
@RequestMapping(value = "buffer/delete", method = RequestMethod.POST)
- public AjaxResponse deleteBuffer(@RequestBody BufferResult buffer, HttpServletRequest request){
+ public AjaxResponse deleteBuffer(@RequestBody BufferResult buffer, HttpServletRequest request) {
String key = buffer.getKey();
- log.info("删除缓存:"+key+",当前登陆用户:" + LoginUtil.getUserId(request));
+ log.info("删除缓存:" + key + ",当前登陆用户:" + LoginUtil.getUserId(request));
GlobalBuffer.removeCache(key);
return new AjaxResponse(true, "删除缓存成功");
}
-
+
@RequestMapping(value = "buffer/delay", method = RequestMethod.POST)
- public AjaxResponse delayBuffer(@RequestBody BufferResult buffer, HttpServletRequest request) throws CoreException{
- log.info("修改缓存失效时间:"+buffer.getKey()+",当前登陆用户:" + LoginUtil.getUserId(request));
+ public AjaxResponse delayBuffer(@RequestBody BufferResult buffer, HttpServletRequest request) throws CoreException {
+ log.info("修改缓存失效时间:" + buffer.getKey() + ",当前登陆用户:" + LoginUtil.getUserId(request));
GlobalBuffer.setLoseTime(buffer.getKey(), buffer.getLoseTime());
return new AjaxResponse(true, "修改缓存失效时间成功");
}
diff --git a/java/src/main/java/vip/xumy/admin/sys/controller/SysPublicContoller.java b/java/src/main/java/vip/xumy/admin/sys/controller/SysPublicContoller.java
new file mode 100644
index 0000000..faca5bb
--- /dev/null
+++ b/java/src/main/java/vip/xumy/admin/sys/controller/SysPublicContoller.java
@@ -0,0 +1,39 @@
+package vip.xumy.admin.sys.controller;
+
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+import vip.xumy.admin.sys.pojo.Dictionary;
+import vip.xumy.admin.sys.service.DictionaryService;
+
+/**
+ * @author:mengyxu
+ * @date:2019年10月21日
+ */
+@RestController
+@RequestMapping("public")
+public class SysPublicContoller {
+ @Value("${version.num:3.0.0}")
+ private String versionNum;
+
+ @Autowired
+ private DictionaryService dictService;
+
+ @RequestMapping(value = "get/dict", method = RequestMethod.POST)
+ public Map> getDictionarys(@RequestBody String[] codes) {
+ return dictService.getDicts(codes);
+ }
+
+ @RequestMapping(value = "version")
+ public String getVersionNum() {
+ return versionNum;
+ }
+
+}
diff --git a/java/src/main/java/vip/xumy/admin/sys/controller/UserItemController.java b/java/src/main/java/vip/xumy/admin/sys/controller/UserItemController.java
index 5fad88f..ce94bb5 100644
--- a/java/src/main/java/vip/xumy/admin/sys/controller/UserItemController.java
+++ b/java/src/main/java/vip/xumy/admin/sys/controller/UserItemController.java
@@ -10,39 +10,39 @@ import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import vip.xumy.admin.sys.pojo.UserItem;
-import vip.xumy.admin.sys.service.IUserItemService;
+import vip.xumy.admin.sys.service.UserItemService;
import vip.xumy.admin.utils.LoginUtil;
import vip.xumy.core.pojo.com.AjaxResponse;
import vip.xumy.core.utils.StringUtil;
-/** Ownership belongs to the company
- * author:mengyxu
- * date:2020年3月18日
+/**
+ * @author:mengyxu
+ * @date:2020年3月18日
*/
@RestController
@RequestMapping("public/item")
public class UserItemController {
@Autowired
- private IUserItemService itemService;
-
+ private UserItemService itemService;
+
@RequestMapping(value = "list", method = RequestMethod.GET)
- public List queryList(UserItem example, HttpServletRequest request){
+ public List queryList(UserItem example, HttpServletRequest request) {
String userId = LoginUtil.getUserId(request);
- if(StringUtil.isEmpty(userId)) {
+ if (StringUtil.isEmpty(userId)) {
return null;
}
example.setUserId(userId);
Integer page = example.getPage();
Integer size = example.getSize();
- if(page != null && size != null) {
+ if (page != null && size != null) {
example.setLimitStart((page - 1) * size);
}
return itemService.queryByExample(example);
}
-
+
@RequestMapping(value = "read", method = RequestMethod.POST)
- public AjaxResponse queryList(Integer id, HttpServletRequest request){
+ public AjaxResponse queryList(Integer id, HttpServletRequest request) {
itemService.read(id);
return new AjaxResponse(true, null);
}
diff --git a/java/src/main/java/vip/xumy/admin/sys/mapper/IActionLogMapper.java b/java/src/main/java/vip/xumy/admin/sys/mapper/IActionLogMapper.java
index d97eeaa..55eeff1 100644
--- a/java/src/main/java/vip/xumy/admin/sys/mapper/IActionLogMapper.java
+++ b/java/src/main/java/vip/xumy/admin/sys/mapper/IActionLogMapper.java
@@ -2,19 +2,39 @@ package vip.xumy.admin.sys.mapper;
import java.util.List;
+import org.apache.ibatis.annotations.Insert;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Select;
+
import vip.xumy.admin.sys.pojo.ActionLog;
-/** Ownership belongs to the company
- * author:mengyxu
- * date:2020年2月13日
+/**
+ * @author:mengyxu
+ * @date:2020年2月13日
*/
+@Mapper
public interface IActionLogMapper {
-
+
+ static final String BASE_COLUMN = "id, type, module, user_id, login_ip, time, context";
+
+ @Select({ "" })
List queryByExample(ActionLog example);
-
+
+ @Insert({ "INSERT INTO BusinessLog ( ", BASE_COLUMN, " ) VALUES ",
+ "(#{id}, {type}, #{module}, #{userId}, #{loginIp}, #{time}, #{context})" })
void insert(ActionLog log);
-
+
+ @Insert({ "" })
void insertBatch(List logs);
}
diff --git a/java/src/main/java/vip/xumy/admin/sys/mapper/IConfigMapper.java b/java/src/main/java/vip/xumy/admin/sys/mapper/IConfigMapper.java
index c43700c..35514a2 100644
--- a/java/src/main/java/vip/xumy/admin/sys/mapper/IConfigMapper.java
+++ b/java/src/main/java/vip/xumy/admin/sys/mapper/IConfigMapper.java
@@ -2,15 +2,32 @@ package vip.xumy.admin.sys.mapper;
import java.util.List;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Select;
+import org.apache.ibatis.annotations.Update;
+
import vip.xumy.admin.sys.pojo.SysConfig;
+/**
+ * @author:mengyxu
+ * @date:2019年12月6日
+ */
+
+@Mapper
public interface IConfigMapper {
-
+
+ @Select({ "SELECT cfg_value FROM sys_config WHERE cfg_key = #{cfgKey} AND cfg_status != 'I'" })
public String queryValueByKey(String cfgKey);
-
+
+ @Select({ "" })
public List queryByExample(SysConfig example);
-
+
+ @Update({ "UPDATE sys_config SET cfg_name = #{cfgName}, cfg_value = #{cfgValue}, cfg_desc = #{cfgDesc}, ",
+ "cfg_status = #{cfgStatus}, update_time = NOW(), update_user = #{updateUser} WHERE cfg_key = #{cfgKey}" })
public void update(SysConfig sysConfig);
-
}
diff --git a/java/src/main/java/vip/xumy/admin/sys/mapper/IDictTypeMapper.java b/java/src/main/java/vip/xumy/admin/sys/mapper/IDictTypeMapper.java
new file mode 100644
index 0000000..1ebefd5
--- /dev/null
+++ b/java/src/main/java/vip/xumy/admin/sys/mapper/IDictTypeMapper.java
@@ -0,0 +1,46 @@
+package vip.xumy.admin.sys.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Delete;
+import org.apache.ibatis.annotations.Insert;
+import org.apache.ibatis.annotations.Many;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Result;
+import org.apache.ibatis.annotations.Results;
+import org.apache.ibatis.annotations.Select;
+import org.apache.ibatis.annotations.Update;
+
+import vip.xumy.admin.sys.pojo.Dictionary;
+
+/**
+ * @author:mengyxu
+ * @date:2019年12月6日
+ */
+
+@Mapper
+public interface IDictTypeMapper {
+
+ @Results(id = "typeRM", value = { @Result(property = "code", column = "type_code"),
+ @Result(property = "name", column = "type_name"), @Result(property = "desc", column = "type_desc"),
+ @Result(property = "status", column = "type_status"),
+ @Result(property = "children", column = "{parent=type_code}", javaType = List.class, many = @Many(select = "com.sprt.admin.sys.mapper.IDictionaryMapper.queryDict")) })
+ @Select({ "" })
+ List queryType(Dictionary example);
+
+ @Insert({
+ "INSERT INTO dict_type (type_code, type_name, type_desc, type_status) VALUES (#{code}, #{name}, #{desc}, #{status})" })
+ void insertType(Dictionary type);
+
+ @Update({
+ "UPDATE dict_type SET type_name = #{name}, type_desc = #{desc}, type_status = #{status} WHERE type_code = #{code}" })
+ void updateType(Dictionary type);
+
+ @Delete({ "DELETE FROM dict_type WHERE type_code = #{code}" })
+ void deleteType(String code);
+
+}
diff --git a/java/src/main/java/vip/xumy/admin/sys/mapper/IDictionaryMapper.java b/java/src/main/java/vip/xumy/admin/sys/mapper/IDictionaryMapper.java
index 0aae91b..4584fa3 100644
--- a/java/src/main/java/vip/xumy/admin/sys/mapper/IDictionaryMapper.java
+++ b/java/src/main/java/vip/xumy/admin/sys/mapper/IDictionaryMapper.java
@@ -2,28 +2,45 @@ package vip.xumy.admin.sys.mapper;
import java.util.List;
+import org.apache.ibatis.annotations.Delete;
+import org.apache.ibatis.annotations.Insert;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Result;
+import org.apache.ibatis.annotations.Results;
+import org.apache.ibatis.annotations.Select;
+import org.apache.ibatis.annotations.Update;
+
import vip.xumy.admin.sys.pojo.Dictionary;
-import vip.xumy.core.pojo.com.Entry;
-/** Ownership belongs to the company
- * author:mengyxu
- * date:2019年12月6日
+/**
+ * @author:mengyxu
+ * @date:2019年12月6日
*/
+@Mapper
public interface IDictionaryMapper {
-
- List queryType(Dictionary example);
+
+ @Results(id = "dictRM", value = { @Result(property = "id", column = "dict_id"),
+ @Result(property = "code", column = "dict_code"), @Result(property = "name", column = "dict_name"),
+ @Result(property = "desc", column = "dict_desc"), @Result(property = "parent", column = "dict_parent"),
+ @Result(property = "status", column = "dict_status") })
+ @Select({ "" })
List queryDict(Dictionary example);
- void insertType(Dictionary type);
+
+ @Insert({ "INSERT INTO dictionary VALUES(#{id}, #{code}, #{name}, #{desc}, #{parent}, #{status})" })
void insertDict(Dictionary dist);
- void updateType(Dictionary type);
+
+ @Update({ "UPDATE dictionary SET dict_code = #{code}, dict_name = #{name}, dict_desc = #{desc},",
+ "dict_parent = #{parent}, dict_status = #{status} WHERE dict_id = #{id}" })
void updateDict(Dictionary dist);
- void deleteType(String code);
+
+ @Delete({ "DELETE FROM dictionary WHERE dict_parent = #{parent}" })
void deleteDicts(String parent);
+
+ @Delete({ "DELETE FROM dictionary WHERE dict_id = #{id}" })
void deleteDict(Integer id);
-
- List> queryProvince();
- List> queryCity(String parent);
- List> queryCounty(String parent);
}
diff --git a/java/src/main/java/vip/xumy/admin/sys/mapper/IUserItemMapper.java b/java/src/main/java/vip/xumy/admin/sys/mapper/IUserItemMapper.java
index 4e195f9..ad4bdcc 100644
--- a/java/src/main/java/vip/xumy/admin/sys/mapper/IUserItemMapper.java
+++ b/java/src/main/java/vip/xumy/admin/sys/mapper/IUserItemMapper.java
@@ -2,21 +2,43 @@ package vip.xumy.admin.sys.mapper;
import java.util.List;
+import org.apache.ibatis.annotations.Insert;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Select;
+import org.apache.ibatis.annotations.Update;
+
import vip.xumy.admin.sys.pojo.UserItem;
-/** Ownership belongs to the company
- * author:mengyxu
- * date:2020年3月17日
+/**
+ * @author:mengyxu
+ * @date:2020年3月17日
*/
+@Mapper
public interface IUserItemMapper {
-
+
+ static final String BASE_COLUMN = "id,user_id,item_name,item_desc,item_type,item_flag,add_user,add_time,status";
+
+ @Select({ "" })
List queryByExample(UserItem example);
-
+
+ @Insert({ "INSERT INTO sys_user_item (", BASE_COLUMN, ") VALUES ",
+ "(#{id}, {userId}, #{itemName}, #{itemDesc}, #{itemType}, #{itemFlag}, #{addUser}, #{addTime}, '0')" })
void insert(UserItem item);
-
+
+ @Insert({ "" })
void insertBatch(List items);
-
+
+ @Update({ "UPDATE sys_user_item SET status = #{status} WHERE id = #{id}" })
void update(UserItem item);
}
diff --git a/java/src/main/java/vip/xumy/admin/sys/pojo/ActionLog.java b/java/src/main/java/vip/xumy/admin/sys/pojo/ActionLog.java
index 628e22e..c53890a 100644
--- a/java/src/main/java/vip/xumy/admin/sys/pojo/ActionLog.java
+++ b/java/src/main/java/vip/xumy/admin/sys/pojo/ActionLog.java
@@ -4,15 +4,15 @@ import lombok.Getter;
import lombok.Setter;
import vip.xumy.core.pojo.base.BasePeriod;
-/** Ownership belongs to the company
- * author:mengyxu
- * date:2020年2月13日
+/**
+ * @author:mengyxu
+ * @date:2020年2月13日
*/
@Setter
@Getter
public class ActionLog extends BasePeriod {
-
+
private Integer id;
private String type;
private String module;
diff --git a/java/src/main/java/vip/xumy/admin/sys/pojo/Dictionary.java b/java/src/main/java/vip/xumy/admin/sys/pojo/Dictionary.java
index bb58289..59f695c 100644
--- a/java/src/main/java/vip/xumy/admin/sys/pojo/Dictionary.java
+++ b/java/src/main/java/vip/xumy/admin/sys/pojo/Dictionary.java
@@ -6,15 +6,15 @@ import lombok.Getter;
import lombok.Setter;
import vip.xumy.core.pojo.base.BasePageParam;
-/** Ownership belongs to the company
- * author:mengyxu
- * date:2019年12月6日
+/**
+ * @author:mengyxu
+ * @date:2019年12月6日
*/
@Setter
@Getter
public class Dictionary extends BasePageParam {
-
+
private String key;
private Integer id;
private String code;
@@ -22,7 +22,7 @@ public class Dictionary extends BasePageParam {
private String desc;
private String parent;
private String status;
-
+
private List children;
-
+
}
diff --git a/java/src/main/java/vip/xumy/admin/sys/pojo/UserItem.java b/java/src/main/java/vip/xumy/admin/sys/pojo/UserItem.java
index 9d3c412..b599bb0 100644
--- a/java/src/main/java/vip/xumy/admin/sys/pojo/UserItem.java
+++ b/java/src/main/java/vip/xumy/admin/sys/pojo/UserItem.java
@@ -9,15 +9,15 @@ import lombok.Setter;
import vip.xumy.core.pojo.base.BasePageParam;
import vip.xumy.core.utils.DateUtil;
-/** Ownership belongs to the company
- * author:mengyxu
- * date:2020年3月17日
+/**
+ * @author:mengyxu
+ * @date:2020年3月17日
*/
@Setter
@Getter
-public class UserItem extends BasePageParam{
-
+public class UserItem extends BasePageParam {
+
private Integer id;
private String userId;
private String itemName;
diff --git a/java/src/main/java/vip/xumy/admin/sys/service/impl/ConfigService.java b/java/src/main/java/vip/xumy/admin/sys/service/ConfigService.java
similarity index 86%
rename from java/src/main/java/vip/xumy/admin/sys/service/impl/ConfigService.java
rename to java/src/main/java/vip/xumy/admin/sys/service/ConfigService.java
index 82a68c7..579a91e 100644
--- a/java/src/main/java/vip/xumy/admin/sys/service/impl/ConfigService.java
+++ b/java/src/main/java/vip/xumy/admin/sys/service/ConfigService.java
@@ -1,4 +1,4 @@
-package vip.xumy.admin.sys.service.impl;
+package vip.xumy.admin.sys.service;
import java.util.List;
@@ -7,15 +7,13 @@ import org.springframework.stereotype.Service;
import vip.xumy.admin.sys.mapper.IConfigMapper;
import vip.xumy.admin.sys.pojo.SysConfig;
-import vip.xumy.admin.sys.service.IConfigService;
import vip.xumy.core.utils.StringUtil;
@Service
-public class ConfigService implements IConfigService {
+public class ConfigService {
@Autowired
private IConfigMapper cfgMapper;
- @Override
public String queryValueByKey(String cfgKey) {
return cfgMapper.queryValueByKey(cfgKey);
}
@@ -26,7 +24,6 @@ public class ConfigService implements IConfigService {
* @param defValue
* @return
*/
- @Override
public long getLongConfig(String key, long defValue) {
String value = queryValueByKey(key);
@@ -43,7 +40,6 @@ public class ConfigService implements IConfigService {
* @param defValue
* @return
*/
- @Override
public Integer getIntConfig(String key, Integer defValue) {
String value = queryValueByKey(key);
@@ -54,7 +50,6 @@ public class ConfigService implements IConfigService {
}
}
- @Override
public String getStringConfig(String key, String defValue) {
String value = queryValueByKey(key);
@@ -66,17 +61,14 @@ public class ConfigService implements IConfigService {
}
- @Override
- public List queryPageByExample(SysConfig example) {
+ public List queryByExample(SysConfig example) {
return cfgMapper.queryByExample(example);
}
- @Override
public void update(SysConfig sysConfig) {
cfgMapper.update(sysConfig);
}
- @Override
public void updateCfg(String key, String value, String userId) {
SysConfig cfg = get(key);
if(cfg != null) {
diff --git a/java/src/main/java/vip/xumy/admin/sys/service/impl/DictionaryService.java b/java/src/main/java/vip/xumy/admin/sys/service/DictionaryService.java
similarity index 54%
rename from java/src/main/java/vip/xumy/admin/sys/service/impl/DictionaryService.java
rename to java/src/main/java/vip/xumy/admin/sys/service/DictionaryService.java
index 32914bd..d40b9b7 100644
--- a/java/src/main/java/vip/xumy/admin/sys/service/impl/DictionaryService.java
+++ b/java/src/main/java/vip/xumy/admin/sys/service/DictionaryService.java
@@ -1,4 +1,4 @@
-package vip.xumy.admin.sys.service.impl;
+package vip.xumy.admin.sys.service;
import java.util.HashMap;
import java.util.List;
@@ -8,62 +8,58 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+import vip.xumy.admin.sys.mapper.IDictTypeMapper;
import vip.xumy.admin.sys.mapper.IDictionaryMapper;
import vip.xumy.admin.sys.pojo.Dictionary;
-import vip.xumy.admin.sys.service.IDictionaryService;
import vip.xumy.core.exception.CoreException;
-import vip.xumy.core.pojo.com.Entry;
import vip.xumy.core.utils.StringUtil;
-/** Ownership belongs to the company
- * author:mengyxu
- * date:2019年12月6日
+/**
+ * @author:mengyxu
+ * @date:2019年12月6日
*/
@Service
-public class DictionaryService implements IDictionaryService {
+public class DictionaryService {
@Autowired
private IDictionaryMapper dictMapper;
+ @Autowired
+ private IDictTypeMapper dictTypeMapper;
- @Override
public List queryType(Dictionary example) {
- return dictMapper.queryType(example);
+ return dictTypeMapper.queryType(example);
}
-
- @Override
+
public void save(Dictionary dict) {
- if(StringUtil.isEmpty(dict.getParent())) {
- dictMapper.insertType(dict);
- }else {
+ if (StringUtil.isEmpty(dict.getParent())) {
+ dictTypeMapper.insertType(dict);
+ } else {
dictMapper.insertDict(dict);
}
}
- @Override
public void update(Dictionary dict) {
- if(StringUtil.isEmpty(dict.getParent())) {
- dictMapper.updateType(dict);
- }else {
+ if (StringUtil.isEmpty(dict.getParent())) {
+ dictTypeMapper.updateType(dict);
+ } else {
dictMapper.updateDict(dict);
}
}
-
- @Override
+
@Transactional
- public void delete(Dictionary dict) throws CoreException {
+ public void delete(Dictionary dict) throws CoreException{
Integer id = dict.getId();
String code = dict.getCode();
- if(id != null) {
+ if (id != null) {
dictMapper.deleteDict(id);
- }else {
- dictMapper.deleteType(code);
+ } else {
+ dictTypeMapper.deleteType(code);
dictMapper.deleteDicts(code);
}
}
- @Override
public Map> getDicts(String[] codes) {
- if(codes == null || codes.length == 0) {
+ if (codes == null || codes.length == 0) {
return null;
}
Map> map = new HashMap<>();
@@ -73,7 +69,6 @@ public class DictionaryService implements IDictionaryService {
return map;
}
- @Override
public List getDict(String code) {
Dictionary example = new Dictionary();
example.setStatus("A");
@@ -81,19 +76,4 @@ public class DictionaryService implements IDictionaryService {
return dictMapper.queryDict(example);
}
- @Override
- public List> queryProvince() {
- return dictMapper.queryProvince();
- }
-
- @Override
- public List> queryCity(String parent) {
- return dictMapper.queryCity(parent);
- }
-
- @Override
- public List> queryCounty(String parent) {
- return dictMapper.queryCounty(parent);
- }
-
}
diff --git a/java/src/main/java/vip/xumy/admin/sys/service/IConfigService.java b/java/src/main/java/vip/xumy/admin/sys/service/IConfigService.java
deleted file mode 100644
index fc7ad5d..0000000
--- a/java/src/main/java/vip/xumy/admin/sys/service/IConfigService.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package vip.xumy.admin.sys.service;
-
-import java.util.List;
-
-import vip.xumy.admin.sys.pojo.SysConfig;
-
-public interface IConfigService {
-
- public String queryValueByKey(String cfgKey);
-
- /**
- * Query the configuration by the key.
- * Return the default value as provided if no item found.
- * @param cfgKey
- * @param defaultVal
- * @return
- */
- String getStringConfig(String cfgKey, String defaultVal);
-
- long getLongConfig(String key, long defValue);
-
- Integer getIntConfig(String key, Integer defValue);
-
- public List queryPageByExample(SysConfig example);
-
- public void update(SysConfig sysConfig);
-
- public void updateCfg(String key, String value, String userId);
-
-
-}
diff --git a/java/src/main/java/vip/xumy/admin/sys/service/IDictionaryService.java b/java/src/main/java/vip/xumy/admin/sys/service/IDictionaryService.java
deleted file mode 100644
index 997c764..0000000
--- a/java/src/main/java/vip/xumy/admin/sys/service/IDictionaryService.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package vip.xumy.admin.sys.service;
-
-import java.util.List;
-import java.util.Map;
-
-import vip.xumy.admin.sys.pojo.Dictionary;
-import vip.xumy.core.exception.CoreException;
-import vip.xumy.core.pojo.com.Entry;
-
-/** Ownership belongs to the company
- * author:mengyxu
- * date:2019年12月6日
- */
-
-public interface IDictionaryService {
-
- List queryType(Dictionary example);
-
- void save(Dictionary dist);
-
- void update(Dictionary dist);
-
- void delete(Dictionary dict) throws CoreException;
-
- Map> getDicts(String[] codes);
-
- List getDict(String code);
-
- List> queryProvince();
-
- List> queryCity(String parent);
-
- List> queryCounty(String parent);
-
-}
diff --git a/java/src/main/java/vip/xumy/admin/sys/service/ILogService.java b/java/src/main/java/vip/xumy/admin/sys/service/ILogService.java
deleted file mode 100644
index aac76fb..0000000
--- a/java/src/main/java/vip/xumy/admin/sys/service/ILogService.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package vip.xumy.admin.sys.service;
-
-import java.util.List;
-import java.util.Map;
-
-import vip.xumy.admin.sys.pojo.ActionLog;
-
-/** Ownership belongs to the company
- * author:mengyxu
- * date:2019年12月5日
- */
-
-public interface ILogService {
-
- List queryActionLog(ActionLog example);
-
- void insertActionLog(ActionLog log);
-
- void insertActionLogs(List logs);
-
- Map getTypeMap();
-
-}
diff --git a/java/src/main/java/vip/xumy/admin/sys/service/IUserItemService.java b/java/src/main/java/vip/xumy/admin/sys/service/IUserItemService.java
deleted file mode 100644
index a069967..0000000
--- a/java/src/main/java/vip/xumy/admin/sys/service/IUserItemService.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package vip.xumy.admin.sys.service;
-
-import java.util.List;
-
-import vip.xumy.admin.sys.pojo.UserItem;
-
-/** Ownership belongs to the company
- * author:mengyxu
- * date:2020年3月17日
- */
-
-public interface IUserItemService {
-
- List queryByExample(UserItem example);
-
- void save(UserItem item);
-
- void save(List items);
-
- void read(Integer id);
-
- void dealWith(Integer id);
-
-}
diff --git a/java/src/main/java/vip/xumy/admin/sys/service/impl/LogService.java b/java/src/main/java/vip/xumy/admin/sys/service/LogService.java
similarity index 82%
rename from java/src/main/java/vip/xumy/admin/sys/service/impl/LogService.java
rename to java/src/main/java/vip/xumy/admin/sys/service/LogService.java
index 3f83211..46c46c4 100644
--- a/java/src/main/java/vip/xumy/admin/sys/service/impl/LogService.java
+++ b/java/src/main/java/vip/xumy/admin/sys/service/LogService.java
@@ -1,4 +1,4 @@
-package vip.xumy.admin.sys.service.impl;
+package vip.xumy.admin.sys.service;
import java.util.HashMap;
import java.util.List;
@@ -10,8 +10,6 @@ import org.springframework.stereotype.Service;
import vip.xumy.admin.sys.mapper.IActionLogMapper;
import vip.xumy.admin.sys.pojo.ActionLog;
import vip.xumy.admin.sys.pojo.Dictionary;
-import vip.xumy.admin.sys.service.IDictionaryService;
-import vip.xumy.admin.sys.service.ILogService;
import vip.xumy.core.golbal.GlobalBuffer;
import vip.xumy.core.pojo.com.Cache;
@@ -21,29 +19,25 @@ import vip.xumy.core.pojo.com.Cache;
*/
@Service
-public class LogService implements ILogService {
+public class LogService {
private static final String MAP_BUFFER_KEY = "log_type_mapping";
@Autowired
private IActionLogMapper actionLogMapper;
@Autowired
- private IDictionaryService dictService;
+ private DictionaryService dictService;
- @Override
public List queryActionLog(ActionLog example) {
return actionLogMapper.queryByExample(example);
}
- @Override
public void insertActionLog(ActionLog log) {
actionLogMapper.insert(log);
}
- @Override
public void insertActionLogs(List logs) {
actionLogMapper.insertBatch(logs);
}
- @Override
public Map getTypeMap() {
Cache cache = GlobalBuffer.getCache(MAP_BUFFER_KEY);
if(Cache.isEmpty(cache)) {
diff --git a/java/src/main/java/vip/xumy/admin/sys/service/impl/UserItemService.java b/java/src/main/java/vip/xumy/admin/sys/service/UserItemService.java
similarity index 74%
rename from java/src/main/java/vip/xumy/admin/sys/service/impl/UserItemService.java
rename to java/src/main/java/vip/xumy/admin/sys/service/UserItemService.java
index c64bf9b..4fcadc4 100644
--- a/java/src/main/java/vip/xumy/admin/sys/service/impl/UserItemService.java
+++ b/java/src/main/java/vip/xumy/admin/sys/service/UserItemService.java
@@ -1,4 +1,4 @@
-package vip.xumy.admin.sys.service.impl;
+package vip.xumy.admin.sys.service;
import java.util.List;
@@ -7,42 +7,41 @@ import org.springframework.stereotype.Service;
import vip.xumy.admin.sys.mapper.IUserItemMapper;
import vip.xumy.admin.sys.pojo.UserItem;
-import vip.xumy.admin.sys.service.IUserItemService;
-/** Ownership belongs to the company
- * author:mengyxu
- * date:2020年3月17日
+/**
+ * @author:mengyxu
+ * @date:2020年3月17日
*/
@Service
-public class UserItemService implements IUserItemService {
+public class UserItemService {
@Autowired
private IUserItemMapper itemMapper;
- @Override
+
public List queryByExample(UserItem example) {
return itemMapper.queryByExample(example);
}
- @Override
+
public void save(UserItem item) {
itemMapper.insert(item);
}
- @Override
+
public void save(List items) {
itemMapper.insertBatch(items);
}
- @Override
+
public void read(Integer id) {
UserItem item = new UserItem();
item.setId(id);
item.setStatus(1);
itemMapper.update(item);
}
+
- @Override
public void dealWith(Integer id) {
UserItem item = new UserItem();
item.setId(id);
diff --git a/java/src/main/java/vip/xumy/admin/conf/PermissionInteceptor.java b/java/src/main/java/vip/xumy/admin/um/conf/PermissionInteceptor.java
similarity index 85%
rename from java/src/main/java/vip/xumy/admin/conf/PermissionInteceptor.java
rename to java/src/main/java/vip/xumy/admin/um/conf/PermissionInteceptor.java
index 3b3be56..38f9f04 100644
--- a/java/src/main/java/vip/xumy/admin/conf/PermissionInteceptor.java
+++ b/java/src/main/java/vip/xumy/admin/um/conf/PermissionInteceptor.java
@@ -1,4 +1,4 @@
-package vip.xumy.admin.conf;
+package vip.xumy.admin.um.conf;
import java.util.List;
@@ -20,7 +20,8 @@ import vip.xumy.core.utils.StringUtil;
/**
* 权限验证拦截器
- * @author v_mengyxu
+ *
+ * @author mengyxu
*
*/
@Log4j2
@@ -28,46 +29,47 @@ import vip.xumy.core.utils.StringUtil;
public class PermissionInteceptor implements HandlerInterceptor {
@Autowired
private IPermissionValidationService validationService;
-
+
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception {
log.debug("Permission interceptor : preHandle ...");
response.setContentType("application/json;charset:UTF-8");
- //获取此次请求需要的权限
+ // 获取此次请求需要的权限
String path = request.getServletPath();
try {
verifyPath(path);
-
- //return if start with /public
- if(isPublicResource(path)){
+
+ // return if start with /public
+ if (isPublicResource(path)) {
return true;
}
-
+
List resourceCodes = getResourceCodes(path);
String userId = getLogonUser(request);
-
- //判断用户是否拥有该权限
+
+ // 判断用户是否拥有该权限
getPermissionCode(userId, resourceCodes);
- } catch (CoreException e){
+ } catch (CoreException e) {
log.warn(e.getMessage());
response.getWriter().write(JSON.toJSONString(new AjaxResponse(false, e.getMessage())));
return false;
}
-
+
return true;
}
/**
* Lookup the login user from request/session.
+ *
* @param request
* @return
* @throws CrsPermissionException if no "loginid" found.
*/
private String getLogonUser(HttpServletRequest request) throws CoreException {
- //获取用户id
+ // 获取用户id
String userName = LoginUtil.getUserNameAndRefresh(request);
- if(userName == null){
+ if (userName == null) {
throw new CoreException("session timeout");
}
return userName;
@@ -75,11 +77,12 @@ public class PermissionInteceptor implements HandlerInterceptor {
/**
* Verify if it is null or empty.
+ *
* @param path
* @throws CrsMvcException if path is null or empty.
*/
private void verifyPath(String path) throws CoreException {
- if(StringUtil.isEmpty(path)){
+ if (StringUtil.isEmpty(path)) {
throw new CoreException("It is an empty request path");
}
}
@@ -93,17 +96,18 @@ public class PermissionInteceptor implements HandlerInterceptor {
*/
private List getResourceCodes(String path) throws CoreException {
String resourcePath = path.substring(1);
-
+
List resCodes = validationService.queryCodeByContent(resourcePath);
- if(resCodes == null || resCodes.isEmpty()){
+ if (resCodes == null || resCodes.isEmpty()) {
throw new CoreException("no permission for " + resourcePath);
}
-
+
return resCodes;
}
/**
* Verify if it an public resource.
+ *
* @param path
* @return
*/
@@ -113,19 +117,20 @@ public class PermissionInteceptor implements HandlerInterceptor {
/**
* Get the match resource code by user.
+ *
* @param userId
* @param resCodes
* @return
* @throws CrsPermissionException if no resource code found.
*/
- private String getPermissionCode(String userId, List resCodes) throws CoreException{
+ private String getPermissionCode(String userId, List resCodes) throws CoreException {
for (String resCode : resCodes) {
- if (validationService.havePermission(userId, resCode)){
+ if (validationService.havePermission(userId, resCode)) {
return resCode;
}
}
-
- //No permission match.
+
+ // No permission match.
throw new CoreException("no permission");
}
}
diff --git a/java/src/main/java/vip/xumy/admin/um/conf/UMInitializer.java b/java/src/main/java/vip/xumy/admin/um/conf/UMInitializer.java
new file mode 100644
index 0000000..4f5904a
--- /dev/null
+++ b/java/src/main/java/vip/xumy/admin/um/conf/UMInitializer.java
@@ -0,0 +1,25 @@
+package vip.xumy.admin.um.conf;
+
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+import org.springframework.boot.builder.SpringApplicationBuilder;
+import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
+import org.springframework.context.annotation.ComponentScan;
+
+
+@EnableAutoConfiguration(exclude = DataSourceAutoConfiguration.class)
+@ComponentScan(value = "com.sprt.admin.um", useDefaultFilters = true)
+@MapperScan("com.sprt.admin.um.mapper")
+public class UMInitializer extends SpringBootServletInitializer {
+
+ @Override
+ protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
+ return builder.sources(UMInitializer.class);
+ }
+
+}
+
+
+
+
diff --git a/java/src/main/java/vip/xumy/admin/conf/BaseSprtWebMvcConfigurer.java b/java/src/main/java/vip/xumy/admin/um/conf/UMWebMvcConfigurer.java
similarity index 95%
rename from java/src/main/java/vip/xumy/admin/conf/BaseSprtWebMvcConfigurer.java
rename to java/src/main/java/vip/xumy/admin/um/conf/UMWebMvcConfigurer.java
index fef38c8..f7e1d62 100644
--- a/java/src/main/java/vip/xumy/admin/conf/BaseSprtWebMvcConfigurer.java
+++ b/java/src/main/java/vip/xumy/admin/um/conf/UMWebMvcConfigurer.java
@@ -1,4 +1,4 @@
-package vip.xumy.admin.conf;
+package vip.xumy.admin.um.conf;
import java.util.ArrayList;
import java.util.Iterator;
@@ -18,26 +18,27 @@ import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.support.config.FastJsonConfig;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
-import vip.xumy.admin.sys.service.ILogService;
+import vip.xumy.admin.sys.service.LogService;
import vip.xumy.admin.utils.BaseLogUtil;
import vip.xumy.admin.utils.LoginUtil;
@Configuration
-public class BaseSprtWebMvcConfigurer implements WebMvcConfigurer {
+public class UMWebMvcConfigurer implements WebMvcConfigurer {
@Autowired
private PermissionInteceptor permissionInteceptor;
-
+
@Autowired
- public void setLogService(ILogService logService) {
+ public void setLogService(LogService logService) {
BaseLogUtil.logService = logService;
}
+
@Autowired
public void setEnvironment(Environment env) {
String timeout = env.getProperty("timeout.login.token", "30");
LoginUtil.timeout = Integer.parseInt(timeout);
LoginUtil.domain = env.getProperty("login.token.domain");
}
-
+
/**
* 跨域支持
*
diff --git a/java/src/main/java/vip/xumy/admin/PageController.java b/java/src/main/java/vip/xumy/admin/um/controller/PageController.java
similarity index 97%
rename from java/src/main/java/vip/xumy/admin/PageController.java
rename to java/src/main/java/vip/xumy/admin/um/controller/PageController.java
index 40f8b72..57b8909 100644
--- a/java/src/main/java/vip/xumy/admin/PageController.java
+++ b/java/src/main/java/vip/xumy/admin/um/controller/PageController.java
@@ -1,4 +1,4 @@
-package vip.xumy.admin;
+package vip.xumy.admin.um.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
diff --git a/java/src/main/java/vip/xumy/admin/PublicContoller.java b/java/src/main/java/vip/xumy/admin/um/controller/PublicContoller.java
similarity index 71%
rename from java/src/main/java/vip/xumy/admin/PublicContoller.java
rename to java/src/main/java/vip/xumy/admin/um/controller/PublicContoller.java
index 3c38563..57424d0 100644
--- a/java/src/main/java/vip/xumy/admin/PublicContoller.java
+++ b/java/src/main/java/vip/xumy/admin/um/controller/PublicContoller.java
@@ -1,18 +1,14 @@
-package vip.xumy.admin;
+package vip.xumy.admin.um.controller;
import java.util.List;
-import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
-import vip.xumy.admin.sys.pojo.Dictionary;
-import vip.xumy.admin.sys.service.IDictionaryService;
import vip.xumy.admin.um.pojo.Permission;
import vip.xumy.admin.um.service.IPermissionService;
import vip.xumy.admin.um.service.IRolePermissionService;
@@ -20,41 +16,34 @@ import vip.xumy.admin.utils.LoginUtil;
import vip.xumy.core.exception.CoreException;
import vip.xumy.core.pojo.com.Entry;
-/** Ownership belongs to the company
- * author:mengyxu
- * date:2019年10月21日
+/**
+ * @author:mengyxu
+ * @date:2019年10月21日
*/
@RestController
@RequestMapping("public")
public class PublicContoller {
-
+
@Autowired
private IRolePermissionService roleService;
@Autowired
private IPermissionService perService;
- @Autowired
- private IDictionaryService dictService;
-
+
@RequestMapping(value = "role/map", method = RequestMethod.GET)
public List> queryRoleMaps() {
return roleService.queryRoleMaps();
}
-
+
@RequestMapping(value = "per/list", method = RequestMethod.GET)
- public List queryPermissionTree(HttpServletRequest request) throws CoreException{
+ public List queryPermissionTree(HttpServletRequest request) throws CoreException {
return perService.queryPermissionTree(false);
}
-
+
@RequestMapping(value = "my/action/per")
public List queryMyActionPermissions(HttpServletRequest request) throws CoreException {
String userName = LoginUtil.getUserId(request);
String parentContent = LoginUtil.getParentContent(request);
return perService.myPermissions(userName, parentContent);
}
-
- @RequestMapping(value = "get/dict", method = RequestMethod.POST)
- public Map> getDictionarys(@RequestBody String[] codes) {
- return dictService.getDicts(codes);
- }
-
+
}
diff --git a/java/src/main/java/vip/xumy/admin/utils/BaseLogUtil.java b/java/src/main/java/vip/xumy/admin/utils/BaseLogUtil.java
index c5299d2..34dd808 100644
--- a/java/src/main/java/vip/xumy/admin/utils/BaseLogUtil.java
+++ b/java/src/main/java/vip/xumy/admin/utils/BaseLogUtil.java
@@ -6,12 +6,12 @@ import javax.servlet.http.HttpServletRequest;
import lombok.extern.log4j.Log4j2;
import vip.xumy.admin.sys.pojo.ActionLog;
-import vip.xumy.admin.sys.service.ILogService;
+import vip.xumy.admin.sys.service.LogService;
import vip.xumy.core.utils.StringUtil;
@Log4j2
public class BaseLogUtil {
- public static ILogService logService;
+ public static LogService logService;
protected BaseLogUtil() {
// Add a protected constructor to hide the implicit public one.
diff --git a/java/src/main/java/vip/xumy/admin/verify/conf/BaseConfigurer.java b/java/src/main/java/vip/xumy/admin/verify/conf/BaseConfigurer.java
new file mode 100644
index 0000000..0160208
--- /dev/null
+++ b/java/src/main/java/vip/xumy/admin/verify/conf/BaseConfigurer.java
@@ -0,0 +1,104 @@
+package vip.xumy.admin.verify.conf;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.http.MediaType;
+import org.springframework.http.converter.HttpMessageConverter;
+import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
+import org.springframework.web.servlet.config.annotation.CorsRegistry;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+import com.alibaba.fastjson.serializer.SerializerFeature;
+import com.alibaba.fastjson.support.config.FastJsonConfig;
+import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
+
+@Configuration
+public class BaseConfigurer implements WebMvcConfigurer {
+ @Autowired
+ private LoginInteceptor loginInteceptor;
+
+ /**
+ * 跨域支持
+ *
+ * @param registry
+ */
+ @Override
+ public void addCorsMappings(CorsRegistry registry) {
+ registry.addMapping("/**").allowedOrigins("*").allowedHeaders("*").allowCredentials(true).allowedMethods("*")
+ .maxAge(3600 * 24);
+ }
+
+ /**
+ * 登录拦截器
+ *
+ * @param registry
+ */
+ @Override
+ public void addInterceptors(InterceptorRegistry registry) {
+ List patterns = new ArrayList<>();
+ patterns.add("/");
+ patterns.add("/um/**");
+ patterns.add("/public/**");
+ patterns.add("/css/**");
+ patterns.add("/fonts/**");
+ patterns.add("/js/**");
+ patterns.add("/image/**");
+ patterns.add("/*.html");
+ patterns.add("/*.ico");
+ registry.addInterceptor(loginInteceptor).addPathPatterns("/**").excludePathPatterns(patterns);
+ WebMvcConfigurer.super.addInterceptors(registry);
+ }
+
+ /**
+ * 默认JSON解析器从Jackson改为FastJson
+ *
+ * @param registry
+ */
+ @Override
+ public void configureMessageConverters(List> converters) {
+ Iterator> iterator = converters.iterator();
+ while (iterator.hasNext()) {
+ HttpMessageConverter> converter = iterator.next();
+ if (converter instanceof MappingJackson2HttpMessageConverter) {
+ iterator.remove();
+ }
+ }
+
+ // 升级最新版本需加======解决报错:Content-Type' cannot contain wildcard type '*
+
+ FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
+ List supportedMediaTypes = new ArrayList<>();
+ supportedMediaTypes.add(MediaType.APPLICATION_JSON);
+ supportedMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
+ supportedMediaTypes.add(MediaType.APPLICATION_ATOM_XML);
+ supportedMediaTypes.add(MediaType.APPLICATION_FORM_URLENCODED);
+ supportedMediaTypes.add(MediaType.APPLICATION_OCTET_STREAM);
+ supportedMediaTypes.add(MediaType.APPLICATION_PDF);
+ supportedMediaTypes.add(MediaType.APPLICATION_RSS_XML);
+ supportedMediaTypes.add(MediaType.APPLICATION_XHTML_XML);
+ supportedMediaTypes.add(MediaType.APPLICATION_XML);
+ supportedMediaTypes.add(MediaType.IMAGE_GIF);
+ supportedMediaTypes.add(MediaType.IMAGE_JPEG);
+ supportedMediaTypes.add(MediaType.IMAGE_PNG);
+ supportedMediaTypes.add(MediaType.TEXT_EVENT_STREAM);
+ supportedMediaTypes.add(MediaType.TEXT_HTML);
+ supportedMediaTypes.add(MediaType.TEXT_MARKDOWN);
+ supportedMediaTypes.add(MediaType.TEXT_PLAIN);
+ supportedMediaTypes.add(MediaType.TEXT_XML);
+ fastConverter.setSupportedMediaTypes(supportedMediaTypes);
+
+ // 2、添加fastjson的配置信息,比如 是否要格式化返回json数据
+ FastJsonConfig fastJsonConfig = new FastJsonConfig();
+ fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);
+ // 3、在convert中添加配置信息.
+ fastConverter.setFastJsonConfig(fastJsonConfig);
+ // 4、将convert添加到converters当中.
+ converters.add(fastConverter);
+ }
+
+}
diff --git a/java/src/main/java/vip/xumy/admin/verify/conf/LoginInteceptor.java b/java/src/main/java/vip/xumy/admin/verify/conf/LoginInteceptor.java
new file mode 100644
index 0000000..473ca0f
--- /dev/null
+++ b/java/src/main/java/vip/xumy/admin/verify/conf/LoginInteceptor.java
@@ -0,0 +1,37 @@
+package vip.xumy.admin.verify.conf;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.springframework.stereotype.Component;
+import org.springframework.web.servlet.HandlerInterceptor;
+
+import com.alibaba.fastjson.JSON;
+
+import lombok.extern.log4j.Log4j2;
+import vip.xumy.admin.verify.controller.PublicController;
+import vip.xumy.core.pojo.com.AjaxResponse;
+
+/**
+ * 权限验证拦截器
+ * @author v_mengyxu
+ *
+ */
+@Log4j2
+@Component
+public class LoginInteceptor implements HandlerInterceptor {
+
+ @Override
+ public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception {
+ //判断是否登录
+ Object user = request.getSession().getAttribute(PublicController.KEY);
+ if(user == null) {
+ log.debug("Login interceptor : preHandle ...");
+ response.setContentType("application/json;charset:UTF-8");
+ response.getWriter().write(JSON.toJSONString(new AjaxResponse(false, "session timeout")));
+ return false;
+ }
+ return true;
+ }
+
+}
diff --git a/java/src/main/java/vip/xumy/admin/verify/conf/VerifyInitializer.java b/java/src/main/java/vip/xumy/admin/verify/conf/VerifyInitializer.java
new file mode 100644
index 0000000..7cceef4
--- /dev/null
+++ b/java/src/main/java/vip/xumy/admin/verify/conf/VerifyInitializer.java
@@ -0,0 +1,25 @@
+package vip.xumy.admin.verify.conf;
+
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+import org.springframework.boot.builder.SpringApplicationBuilder;
+import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
+import org.springframework.context.annotation.ComponentScan;
+
+
+@EnableAutoConfiguration(exclude = DataSourceAutoConfiguration.class)
+@ComponentScan(value = "vip.xumy.admin.verify", useDefaultFilters = true)
+@MapperScan("vip.xumy.admin.verify.mapper")
+public class VerifyInitializer extends SpringBootServletInitializer {
+
+ @Override
+ protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
+ return builder.sources(VerifyInitializer.class);
+ }
+
+}
+
+
+
+
diff --git a/java/src/main/java/vip/xumy/admin/verify/controller/PublicController.java b/java/src/main/java/vip/xumy/admin/verify/controller/PublicController.java
new file mode 100644
index 0000000..8c31bf0
--- /dev/null
+++ b/java/src/main/java/vip/xumy/admin/verify/controller/PublicController.java
@@ -0,0 +1,52 @@
+package vip.xumy.admin.verify.controller;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+import vip.xumy.admin.verify.pojo.User;
+import vip.xumy.admin.verify.service.UserService;
+import vip.xumy.core.pojo.com.AjaxResponse;
+
+/**
+ * @author:mengyxu
+ * @date:2020年10月28日
+ */
+
+@RestController
+@RequestMapping("public")
+public class PublicController {
+ public final static String KEY = "user";
+ @Autowired
+ private UserService userService;
+
+ @RequestMapping(value = "login", method = RequestMethod.POST)
+ public AjaxResponse login(@RequestBody User param, HttpServletRequest request) {
+ User user = userService.login(param);
+ if (user == null) {
+ return new AjaxResponse(false, "登录失败,用户名或密码错误");
+ }
+ request.getSession().setAttribute(KEY, user);
+ return new AjaxResponse(true, "登录成功");
+ }
+
+ @RequestMapping(value = "logout", method = RequestMethod.GET)
+ public AjaxResponse logout(HttpServletRequest request) {
+ request.getSession().removeAttribute(KEY);
+ return new AjaxResponse(true, "登出成功");
+ }
+
+ @RequestMapping(value = "info", method = RequestMethod.GET)
+ public User login(HttpServletRequest request) {
+ Object user = request.getSession().getAttribute(KEY);
+ if (user == null) {
+ return null;
+ }
+ return (User) user;
+ }
+
+}
diff --git a/java/src/main/java/vip/xumy/admin/verify/mapper/IUserMapper.java b/java/src/main/java/vip/xumy/admin/verify/mapper/IUserMapper.java
new file mode 100644
index 0000000..cc14cec
--- /dev/null
+++ b/java/src/main/java/vip/xumy/admin/verify/mapper/IUserMapper.java
@@ -0,0 +1,24 @@
+package vip.xumy.admin.verify.mapper;
+
+import org.apache.ibatis.annotations.Result;
+import org.apache.ibatis.annotations.Results;
+import org.apache.ibatis.annotations.Select;
+import org.apache.ibatis.annotations.Update;
+
+import vip.xumy.admin.verify.pojo.User;
+
+/**
+ * @author:mengyxu
+ * @date:2020年10月28日
+ */
+
+public interface IUserMapper {
+
+ @Select({ "SELECT * FROM user WHERE user_id = #{userId} AND password = #{password}" })
+ @Results({ @Result(property = "userId", column = "user_id") })
+ User login(User param);
+
+ @Update({ "UPDATE user SET password = #{newPwd} WHERE user_id = #{userId} AND password = #{password}" })
+ int updatePassword(User param);
+
+}
diff --git a/java/src/main/java/vip/xumy/admin/verify/pojo/User.java b/java/src/main/java/vip/xumy/admin/verify/pojo/User.java
new file mode 100644
index 0000000..a9aeb58
--- /dev/null
+++ b/java/src/main/java/vip/xumy/admin/verify/pojo/User.java
@@ -0,0 +1,24 @@
+package vip.xumy.admin.verify.pojo;
+
+import com.alibaba.fastjson.annotation.JSONField;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author:mengyxu
+ * @date:2020年10月28日
+ */
+
+@Setter
+@Getter
+public class User {
+
+ private String userId;
+ private String name;
+ @JSONField(serialize = false)
+ private String password;
+ private String desc;
+ private String permission;
+
+}
diff --git a/java/src/main/java/vip/xumy/admin/verify/service/UserService.java b/java/src/main/java/vip/xumy/admin/verify/service/UserService.java
new file mode 100644
index 0000000..55cb809
--- /dev/null
+++ b/java/src/main/java/vip/xumy/admin/verify/service/UserService.java
@@ -0,0 +1,23 @@
+package vip.xumy.admin.verify.service;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import vip.xumy.admin.verify.mapper.IUserMapper;
+import vip.xumy.admin.verify.pojo.User;
+
+/**
+ * @author:mengyxu
+ * @date:2020年10月31日
+ */
+
+@Service
+public class UserService {
+ @Autowired
+ private IUserMapper userMapper;
+
+ public User login(User param) {
+ return userMapper.login(param);
+ }
+
+}
diff --git a/java/src/main/resources/application.properties b/java/src/main/resources/application.properties
index 5f7b862..4283f65 100644
--- a/java/src/main/resources/application.properties
+++ b/java/src/main/resources/application.properties
@@ -21,7 +21,9 @@ spring.datasource.testOnReturn=false
spring.datasource.poolPreparedStatements=false
mybatis.mapper-locations= classpath*:mapper/**/*.xml
-mybatis.configuration.log-impl= org.apache.ibatis.logging.stdout.StdOutImpl
+#mybatis.configuration.log-impl= org.apache.ibatis.logging.stdout.StdOutImpl
+#开启mybatis驼峰映射
+mybatis.configuration.map-underscore-to-camel-case=true
pagehelper.helperDialect=mysql
pagehelper.reasonable=true
diff --git a/java/src/main/resources/mapper/sys/IActionLogMapper.xml b/java/src/main/resources/mapper/sys/IActionLogMapper.xml
deleted file mode 100644
index 0c3d0c9..0000000
--- a/java/src/main/resources/mapper/sys/IActionLogMapper.xml
+++ /dev/null
@@ -1,77 +0,0 @@
-
-
-
-
-
- id,type,module,user_id,login_ip,time,context
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- INSERT INTO sys_action_log
- ()
- VALUES (
- #{id},
- #{type},
- #{module},
- #{userId},
- #{loginIp},
- #{time},
- #{context}
- )
-
-
- INSERT INTO BusinessLog
- ()
- VALUES
-
- (
- #{log.id},
- #{log.type},
- #{log.module},
- #{log.userId},
- #{log.loginIp},
- #{log.time},
- #{log.context}
- )
-
-
-
-
\ No newline at end of file
diff --git a/java/src/main/resources/mapper/sys/IConfigMapper.xml b/java/src/main/resources/mapper/sys/IConfigMapper.xml
deleted file mode 100644
index 0142ec4..0000000
--- a/java/src/main/resources/mapper/sys/IConfigMapper.xml
+++ /dev/null
@@ -1,66 +0,0 @@
-
-
-
-
-
- cfg_key,
- cfg_name,
- cfg_value,
- cfg_type,
- cfg_desc,
- cfg_status,
- update_time,
- update_user
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- UPDATE
- sys_config
- SET
- cfg_name = #{cfgName},
- cfg_value = #{cfgValue},
- cfg_desc = #{cfgDesc},
- cfg_status = #{cfgStatus},
- update_time = NOW(),
- update_user = #{updateUser}
- WHERE
- cfg_key = #{cfgKey}
-
-
-
diff --git a/java/src/main/resources/mapper/sys/IDictionaryMapper.xml b/java/src/main/resources/mapper/sys/IDictionaryMapper.xml
deleted file mode 100644
index 5b1da52..0000000
--- a/java/src/main/resources/mapper/sys/IDictionaryMapper.xml
+++ /dev/null
@@ -1,153 +0,0 @@
-
-
-
-
-
- type_code,
- type_name,
- type_desc,
- type_status
-
-
-
- dict_id,
- dict_code,
- dict_name,
- dict_desc,
- dict_parent,
- dict_status
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- INSERT INTO sys_dictionary
- ()
- VALUES
- (
- #{id},
- #{code},
- #{name},
- #{desc},
- #{parent},
- #{status}
- )
-
-
-
- INSERT INTO sys_dict_type
- ()
- VALUES
- (
- #{code},
- #{name},
- #{desc},
- #{status}
- )
-
-
-
- UPDATE sys_dictionary SET
- dict_code = #{code},
- dict_name = #{name},
- dict_desc = #{desc},
- dict_parent = #{parent},
- dict_status = #{status}
- WHERE
- dict_id = #{id}
-
-
-
- UPDATE sys_dict_type SET
- type_name = #{name},
- type_desc = #{desc},
- type_status = #{status}
- WHERE
- type_code = #{code}
-
-
-
- DELETE FROM sys_dict_type WHERE type_code = #{code}
-
-
-
- DELETE FROM sys_dictionary WHERE dict_id = #{id}
-
-
-
- DELETE FROM sys_dictionary WHERE dict_parent = #{parent}
-
-
-
-
-
-
-
-
-
diff --git a/java/src/main/resources/mapper/sys/IUserItemMapper.xml b/java/src/main/resources/mapper/sys/IUserItemMapper.xml
deleted file mode 100644
index bee381d..0000000
--- a/java/src/main/resources/mapper/sys/IUserItemMapper.xml
+++ /dev/null
@@ -1,95 +0,0 @@
-
-
-
-
-
- id,user_id,item_name,item_desc,item_type,item_flag,add_user,add_time,status
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- INSERT INTO sys_user_item
- ()
- VALUES (
- #{id},
- #{userId},
- #{itemName},
- #{itemDesc},
- #{itemType},
- #{itemFlag},
- #{addUser},
- #{addTime},
- '0'
- )
-
-
-
- INSERT INTO sys_user_item
- ()
- VALUES
-
- (
- #{item.id},
- #{item.userId},
- #{item.itemName},
- #{item.itemDesc},
- #{item.itemType},
- #{item.itemFlag},
- #{item.addUser},
- #{item.addTime},
- '0'
- )
-
-
-
-
- UPDATE sys_user_item
- SET
- status = #{status}
- WHERE
- id = #{id}
-
-
-
\ No newline at end of file