diff --git a/nl-agv/pom.xml b/nl-agv/pom.xml index e36d6f3..06b8a54 100644 --- a/nl-agv/pom.xml +++ b/nl-agv/pom.xml @@ -14,120 +14,6 @@ nl-agv - - - - org.openjdk.nashorn - nashorn-core - - - - - org.springframework.boot - spring-boot-starter-validation - - - - - org.springframework.boot - spring-boot-starter-web - - - - - org.springframework.boot - spring-boot-starter-aop - - - - - org.springframework.boot - spring-boot-configuration-processor - - - - - org.springframework.boot - spring-boot-starter-data-redis - - - - - org.projectlombok - lombok - - - - - com.alibaba - druid-spring-boot-3-starter - - - - - com.baomidou - mybatis-plus-spring-boot3-starter - - - - - com.fhs-opensource - easy-trans-spring-boot-starter - - - - - com.fhs-opensource - easy-trans-mybatis-plus-extend - - - - - org.apache.commons - commons-pool2 - - - - - cn.hutool - hutool-all - - - - - com.belerweb - pinyin4j - - - - - org.lionsoul - ip2region - - - - - com.github.xiaoymin - knife4j-openapi3-jakarta-spring-boot-starter - - - - - cn.afterturn - easypoi-spring-boot-starter - - - - - com.antherd - sm-crypto - - - - - com.alibaba - easyexcel - org.nl diff --git a/nl-agv/src/main/java/org/nl/agv/controller/AgvCarController.java b/nl-agv/src/main/java/org/nl/agv/controller/AgvCarController.java new file mode 100644 index 0000000..c061a24 --- /dev/null +++ b/nl-agv/src/main/java/org/nl/agv/controller/AgvCarController.java @@ -0,0 +1,92 @@ +/* + * Copyright [2022] [https://www.xiaonuo.vip] + * + * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点: + * + * 1.请不要删除和修改根目录下的LICENSE文件。 + * 2.请不要删除和修改Snowy源码头部的版权声明。 + * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。 + * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip + * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。 + * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip + */ +package org.nl.agv.controller; + + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.nl.agv.service.AgvCarService; +import org.nl.agv.service.entity.AgvCar; +import org.nl.agv.service.query.AgvCarQuery; +import org.nl.common.page.PageQuery; +import org.nl.common.pojo.CommonResult; +import org.nl.agv.service.dto.AgvStatus; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +@Tag(name = "AGV模块") +@RestController() +@RequestMapping("/api/agv") +@Validated +public class AgvCarController { + static { + System.out.println("初始化AGV模块------------"); + } + @Autowired + private AgvCarService agvCarService; + + @GetMapping("status") + public CommonResult status() { + List list = new ArrayList<>(); + for (int i = 0; i < 4; i++) { + AgvStatus build = AgvStatus.builder().status(2) + .carId(String.valueOf(i + 1)) + .statusInfo("运行中").type("1") + .action("请求取货") + .icon("/Users/mima0000/Desktop/car.png") + .actionInfo("申请取货") + .x(String.valueOf(new Random().nextInt(1189) + 100)) + .y(String.valueOf(new Random().nextInt(889) + 100)).power("67") + .angle("180").build(); + list.add(build); + } + return CommonResult.data(list); + } + + /** + * agv列表 + * @return + */ + @GetMapping("list") + public CommonResult list(AgvCarQuery query, PageQuery pageQuery) { + return CommonResult.data(agvCarService.page(pageQuery.build(), query.build())); + } + + /** + * agv列表 + * @return + */ + @GetMapping("save") + public CommonResult save(AgvCar car) { + agvCarService.save(car); + return CommonResult.ok(); + } + + /** + * 车俩基础信息 + * @return + */ + @GetMapping("agvCar") + public CommonResult agvCar(String carId) { + AgvCar car = agvCarService.getOne(new LambdaQueryWrapper().eq(AgvCar::getCarId, carId)); + return CommonResult.data(car); + } + +} diff --git a/nl-agv/src/main/java/org/nl/agv/service/AgvCarService.java b/nl-agv/src/main/java/org/nl/agv/service/AgvCarService.java new file mode 100644 index 0000000..dfdcd2c --- /dev/null +++ b/nl-agv/src/main/java/org/nl/agv/service/AgvCarService.java @@ -0,0 +1,11 @@ +package org.nl.agv.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.agv.service.entity.AgvCar; +import org.nl.agv.service.mapper.AgvCarMapper; +import org.nl.layout.service.dto.MapLayout; +import org.nl.layout.service.entity.AgvLayoutMap; + +public interface AgvCarService extends IService { + +} diff --git a/nl-agv/src/main/java/org/nl/server/dto/AgvStatus.java b/nl-agv/src/main/java/org/nl/agv/service/dto/AgvStatus.java similarity index 69% rename from nl-agv/src/main/java/org/nl/server/dto/AgvStatus.java rename to nl-agv/src/main/java/org/nl/agv/service/dto/AgvStatus.java index 97760bc..f704ecd 100644 --- a/nl-agv/src/main/java/org/nl/server/dto/AgvStatus.java +++ b/nl-agv/src/main/java/org/nl/agv/service/dto/AgvStatus.java @@ -1,18 +1,27 @@ -package org.nl.server.dto; +package org.nl.agv.service.dto; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor public class AgvStatus { /** * 车辆ID */ - private String agvId; + private String carId; /** * 车辆类型 */ private String type; /** - * 图标 + * 图标地址 */ - private String icon; + private String icon="/Users/mima0000/Desktop/car.png"; /** * 电量 */ @@ -28,7 +37,7 @@ public class AgvStatus { * 故障中 * 低电量 */ - private String statusType; + private String statusInfo; /** * 状态类型:1.休息 2.正常运行 3.异常 */ @@ -40,7 +49,7 @@ public class AgvStatus { /** * 动作交互信息 */ - private String actionMsg; + private String actionInfo; /** * 任务号 */ diff --git a/nl-agv/src/main/java/org/nl/agv/service/entity/AgvCar.java b/nl-agv/src/main/java/org/nl/agv/service/entity/AgvCar.java new file mode 100644 index 0000000..0e1c995 --- /dev/null +++ b/nl-agv/src/main/java/org/nl/agv/service/entity/AgvCar.java @@ -0,0 +1,35 @@ +package org.nl.agv.service.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + + +@Data +@TableName("agv_car") +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class AgvCar implements Serializable { + + @TableId(type = IdType.AUTO) + private Long id; + /** + * 车辆ID项目初始化的时创建 + */ + private String carId; + /** + * 车辆类型:ps车 NT车... + */ + private String type; + /** + * 车辆图片 + */ + private String icon; +} diff --git a/nl-agv/src/main/java/org/nl/agv/service/impl/AgvCarServiceImpl.java b/nl-agv/src/main/java/org/nl/agv/service/impl/AgvCarServiceImpl.java new file mode 100644 index 0000000..11593ed --- /dev/null +++ b/nl-agv/src/main/java/org/nl/agv/service/impl/AgvCarServiceImpl.java @@ -0,0 +1,28 @@ +package org.nl.agv.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import jakarta.annotation.Resource; +import org.nl.agv.service.AgvCarService; +import org.nl.agv.service.entity.AgvCar; +import org.nl.agv.service.mapper.AgvCarMapper; +import org.nl.common.localStorage.service.LocalStorageService; +import org.nl.common.localStorage.service.entity.LocalStorage; +import org.nl.layout.service.AgvLayoutService; +import org.nl.layout.service.dto.DeviceLayout; +import org.nl.layout.service.dto.MapLayout; +import org.nl.layout.service.entity.AgvLayoutDevice; +import org.nl.layout.service.entity.AgvLayoutMap; +import org.nl.layout.service.mapper.AgvLayoutDeviceMapper; +import org.nl.layout.service.mapper.AgvLayoutMapMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; + +import java.util.List; + + +@Service +public class AgvCarServiceImpl extends ServiceImpl implements AgvCarService { + +} diff --git a/nl-agv/src/main/java/org/nl/agv/service/mapper/AgvCarMapper.java b/nl-agv/src/main/java/org/nl/agv/service/mapper/AgvCarMapper.java new file mode 100644 index 0000000..56115bb --- /dev/null +++ b/nl-agv/src/main/java/org/nl/agv/service/mapper/AgvCarMapper.java @@ -0,0 +1,11 @@ +package org.nl.agv.service.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; +import org.nl.agv.service.entity.AgvCar; + +@Mapper +public interface AgvCarMapper extends BaseMapper { + + +} diff --git a/nl-agv/src/main/java/org/nl/agv/service/query/AgvCarQuery.java b/nl-agv/src/main/java/org/nl/agv/service/query/AgvCarQuery.java new file mode 100644 index 0000000..2014b2f --- /dev/null +++ b/nl-agv/src/main/java/org/nl/agv/service/query/AgvCarQuery.java @@ -0,0 +1,8 @@ +package org.nl.agv.service.query; + +import org.nl.agv.service.entity.AgvCar; +import org.nl.common.page.BaseQuery; +import org.nl.layout.service.entity.AgvLayoutMap; + +public class AgvCarQuery extends BaseQuery { +} diff --git a/nl-agv/src/main/java/org/nl/layout/controller/AgvLayoutController.java b/nl-agv/src/main/java/org/nl/layout/controller/AgvLayoutController.java new file mode 100644 index 0000000..325e89a --- /dev/null +++ b/nl-agv/src/main/java/org/nl/layout/controller/AgvLayoutController.java @@ -0,0 +1,124 @@ +/* + * Copyright [2022] [https://www.xiaonuo.vip] + * + * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点: + * + * 1.请不要删除和修改根目录下的LICENSE文件。 + * 2.请不要删除和修改Snowy源码头部的版权声明。 + * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。 + * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip + * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。 + * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip + */ +package org.nl.layout.controller; + + +import cn.dev33.satoken.annotation.SaIgnore; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.nl.agv.service.AgvCarService; +import org.nl.common.exception.CommonException; +import org.nl.common.page.PageQuery; +import org.nl.common.pojo.CommonResult; +import org.nl.agv.service.dto.AgvStatus; +import org.nl.layout.service.AgvLayoutService; +import org.nl.layout.service.dto.MapLayout; +import org.nl.layout.service.entity.AgvLayoutMap; +import org.nl.layout.service.query.MapLayoutQuery; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +@Tag(name = "AGV模块") +@RestController() +@RequestMapping("/api/agv/map") +@Validated +@SaIgnore +public class AgvLayoutController { + static { + System.out.println("初始化AGV模块------------"); + } + @Autowired + private AgvLayoutService agvLayoutService; + + @GetMapping("status") + public CommonResult status() { + List list = new ArrayList<>(); + for (int i = 0; i < 4; i++) { + AgvStatus build = AgvStatus.builder().status(2) + .carId(String.valueOf(i + 1)) + .statusInfo("运行中").type("1") + .action("请求取货") + .actionInfo("申请取货") + .x(String.valueOf(new Random().nextInt(1189) + 100)) + .y(String.valueOf(new Random().nextInt(889) + 100)).power("67") + .angle("180").build(); + list.add(build); + } + return CommonResult.data(list); + } + + /** + * 地图列表 + * @param query + * @param pageQuery + * @return + */ + @GetMapping("list") + public CommonResult queruList(MapLayoutQuery query, PageQuery pageQuery) { + Page page = agvLayoutService.page(pageQuery.build(), query.build()); + return CommonResult.data(page); + } + + /** + * 保存地图 + * @param mapLayout + * @return + */ + @PostMapping("save") + public CommonResult save(@RequestBody MapLayout mapLayout) { + agvLayoutService.saveLayout(mapLayout); + return CommonResult.ok(); + } + + /** + * 启用地图 + * @param id + * @return + */ + @GetMapping("enable") + public CommonResult queruList(Long id) { + agvLayoutService.update(new LambdaUpdateWrapper() + .set(AgvLayoutMap::getEnable,false)); + agvLayoutService.update(new LambdaUpdateWrapper() + .set(AgvLayoutMap::getEnable,true).eq(AgvLayoutMap::getId,id)); + return CommonResult.ok(); + } + + /** + * 初始化地图数据,没传ID + * @param id + * @return + */ + @GetMapping("initLayout") + public CommonResult initLayout(Long id) { + if (id==null){ + //如果没有传则返回最新版本 + AgvLayoutMap one = agvLayoutService.getOne(new LambdaQueryWrapper() + .orderByDesc(AgvLayoutMap::getVersion) + .eq(AgvLayoutMap::getEnable, Boolean.TRUE).last("limit 1")); + if (one == null){ + throw new CommonException("地图未启用"); + } + id = one.getId(); + } + MapLayout mapLayout = agvLayoutService.initLayoutMap(id); + return CommonResult.data(mapLayout); + } +} diff --git a/nl-agv/src/main/java/org/nl/layout/service/AgvLayoutService.java b/nl-agv/src/main/java/org/nl/layout/service/AgvLayoutService.java new file mode 100644 index 0000000..e741bd1 --- /dev/null +++ b/nl-agv/src/main/java/org/nl/layout/service/AgvLayoutService.java @@ -0,0 +1,16 @@ +package org.nl.layout.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.layout.service.dto.MapLayout; +import org.nl.layout.service.entity.AgvLayoutMap; + +public interface AgvLayoutService extends IService { + + void saveLayout(MapLayout layout); + + /** + * 初始化地图获取布局信息 + */ + MapLayout initLayoutMap(Long id); + +} diff --git a/nl-agv/src/main/java/org/nl/layout/service/dto/DeviceLayout.java b/nl-agv/src/main/java/org/nl/layout/service/dto/DeviceLayout.java new file mode 100644 index 0000000..8a6091a --- /dev/null +++ b/nl-agv/src/main/java/org/nl/layout/service/dto/DeviceLayout.java @@ -0,0 +1,16 @@ +package org.nl.layout.service.dto; + +import lombok.Data; + +@Data +public class DeviceLayout { + private Long id; + private String code; + private String name; + private String type; + private String icon; + private Integer x; + private Integer y; + private Integer angle; + private Integer size; +} diff --git a/nl-agv/src/main/java/org/nl/layout/service/dto/MapLayout.java b/nl-agv/src/main/java/org/nl/layout/service/dto/MapLayout.java new file mode 100644 index 0000000..f07bad8 --- /dev/null +++ b/nl-agv/src/main/java/org/nl/layout/service/dto/MapLayout.java @@ -0,0 +1,15 @@ +package org.nl.layout.service.dto; + +import lombok.Data; + +import java.util.List; + +@Data +public class MapLayout { + private Long mapId; + private Integer width; + private Integer height; + private MapOrigin origin; + private String url; + private List devices; +} diff --git a/nl-agv/src/main/java/org/nl/layout/service/dto/MapOrigin.java b/nl-agv/src/main/java/org/nl/layout/service/dto/MapOrigin.java new file mode 100644 index 0000000..e920a96 --- /dev/null +++ b/nl-agv/src/main/java/org/nl/layout/service/dto/MapOrigin.java @@ -0,0 +1,9 @@ +package org.nl.layout.service.dto; + +import lombok.Data; + +@Data +public class MapOrigin { + private Integer x; + private Integer y; +} diff --git a/nl-agv/src/main/java/org/nl/layout/service/entity/AgvLayoutDevice.java b/nl-agv/src/main/java/org/nl/layout/service/entity/AgvLayoutDevice.java new file mode 100644 index 0000000..8549caf --- /dev/null +++ b/nl-agv/src/main/java/org/nl/layout/service/entity/AgvLayoutDevice.java @@ -0,0 +1,35 @@ +package org.nl.layout.service.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.Date; + + +@Data +@TableName("agv_layout_device") +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class AgvLayoutDevice implements Serializable { + + @TableId(type = IdType.AUTO) + private Long id; + private Long mapLayoutId; + private Long deviceId; + private String code; + private String name; + private String type; + private Integer x; + private Integer y; + private Integer angle; + private String icon; + private Integer size; + +} diff --git a/nl-agv/src/main/java/org/nl/layout/service/entity/AgvLayoutMap.java b/nl-agv/src/main/java/org/nl/layout/service/entity/AgvLayoutMap.java new file mode 100644 index 0000000..ac6d680 --- /dev/null +++ b/nl-agv/src/main/java/org/nl/layout/service/entity/AgvLayoutMap.java @@ -0,0 +1,36 @@ +package org.nl.layout.service.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + + +@Data +@TableName("agv_layout_map") +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class AgvLayoutMap implements Serializable { + + @TableId(type = IdType.AUTO) + private Long Id; + private Long mapId; + private String mapName; + /** + * 通过触发器实现 + */ + private Integer version; + private String url; + private Integer height; + private Integer width; + private Integer x; + private Integer y; + private Boolean enable; + +} diff --git a/nl-agv/src/main/java/org/nl/layout/service/impl/AgvLayoutServiceImpl.java b/nl-agv/src/main/java/org/nl/layout/service/impl/AgvLayoutServiceImpl.java new file mode 100644 index 0000000..33dec53 --- /dev/null +++ b/nl-agv/src/main/java/org/nl/layout/service/impl/AgvLayoutServiceImpl.java @@ -0,0 +1,74 @@ +package org.nl.layout.service.impl; + +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import org.nl.common.exception.CommonException; +import org.nl.common.localStorage.service.LocalStorageService; +import org.nl.common.localStorage.service.mapper.LocalStorageMapper; +import org.nl.common.localStorage.service.entity.LocalStorage; +import org.nl.common.util.FileProperties; +import org.nl.common.util.FileUtil; +import org.nl.layout.service.AgvLayoutService; +import org.nl.layout.service.dto.DeviceLayout; +import org.nl.layout.service.dto.MapLayout; +import org.nl.layout.service.entity.AgvLayoutDevice; +import org.nl.layout.service.entity.AgvLayoutMap; +import org.nl.layout.service.mapper.AgvLayoutDeviceMapper; +import org.nl.layout.service.mapper.AgvLayoutMapMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.io.IOException; +import java.util.*; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + + +@Service +public class AgvLayoutServiceImpl extends ServiceImpl implements AgvLayoutService { + @Autowired + private LocalStorageService localStorageService; + @Resource + private AgvLayoutDeviceMapper agvLayoutDeviceMapper; + + @Override + @Transactional + public void saveLayout(MapLayout layout) { + LocalStorage storage = localStorageService.getById(layout.getMapId()); + AgvLayoutMap layoutMap = AgvLayoutMap.builder() + .mapId(layout.getMapId()) + .mapName(storage.getName()) + .url(storage.getPath()) + .width(layout.getWidth()) + .height(layout.getHeight()) + .x(layout.getOrigin().getX()) + .y(layout.getOrigin().getY()).build(); + this.baseMapper.insertUseGeneratedKeys(layoutMap); + List deviceLayout = layout.getDevices(); + if (!CollectionUtils.isEmpty(deviceLayout)){ + for (DeviceLayout device : deviceLayout) { + AgvLayoutDevice layoutDevice = AgvLayoutDevice.builder() + .deviceId(device.getId()) + .mapLayoutId(layoutMap.getId()) + .name(device.getName()) + .code(device.getCode()) + .type(device.getType()) + .angle(device.getAngle()) + .x(device.getX()) + .y(device.getY()) + .size(device.getSize()) + .icon(device.getIcon()).build(); + agvLayoutDeviceMapper.insert(layoutDevice); + } + } + } + + @Override + public MapLayout initLayoutMap(Long id) { + return this.baseMapper.initLayoutMap(id); + } +} diff --git a/nl-agv/src/main/java/org/nl/layout/service/mapper/AgvLayoutDeviceMapper.java b/nl-agv/src/main/java/org/nl/layout/service/mapper/AgvLayoutDeviceMapper.java new file mode 100644 index 0000000..69d8436 --- /dev/null +++ b/nl-agv/src/main/java/org/nl/layout/service/mapper/AgvLayoutDeviceMapper.java @@ -0,0 +1,14 @@ +package org.nl.layout.service.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Insert; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Options; +import org.nl.common.localStorage.service.entity.LocalStorage; +import org.nl.layout.service.entity.AgvLayoutDevice; + +@Mapper +public interface AgvLayoutDeviceMapper extends BaseMapper { + + +} diff --git a/nl-agv/src/main/java/org/nl/layout/service/mapper/AgvLayoutMapMapper.java b/nl-agv/src/main/java/org/nl/layout/service/mapper/AgvLayoutMapMapper.java new file mode 100644 index 0000000..9f67a49 --- /dev/null +++ b/nl-agv/src/main/java/org/nl/layout/service/mapper/AgvLayoutMapMapper.java @@ -0,0 +1,19 @@ +package org.nl.layout.service.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Insert; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Options; +import org.nl.common.localStorage.service.entity.LocalStorage; +import org.nl.layout.service.dto.MapLayout; +import org.nl.layout.service.entity.AgvLayoutMap; + +@Mapper +public interface AgvLayoutMapMapper extends BaseMapper { + + @Insert("INSERT INTO agv_layout_map (mapId, url, height, width, x, y) VALUES (#{mapId}, #{url}, #{height}, #{width}, #{x}, #{y})") + @Options(useGeneratedKeys = true, keyProperty = "id") + void insertUseGeneratedKeys(AgvLayoutMap map); + + MapLayout initLayoutMap(Long id); +} diff --git a/nl-agv/src/main/java/org/nl/layout/service/mapper/mapping/AgvLayoutMapMapper.xml b/nl-agv/src/main/java/org/nl/layout/service/mapper/mapping/AgvLayoutMapMapper.xml new file mode 100644 index 0000000..10b07e3 --- /dev/null +++ b/nl-agv/src/main/java/org/nl/layout/service/mapper/mapping/AgvLayoutMapMapper.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/nl-agv/src/main/java/org/nl/layout/service/query/MapLayoutQuery.java b/nl-agv/src/main/java/org/nl/layout/service/query/MapLayoutQuery.java new file mode 100644 index 0000000..c699ed1 --- /dev/null +++ b/nl-agv/src/main/java/org/nl/layout/service/query/MapLayoutQuery.java @@ -0,0 +1,7 @@ +package org.nl.layout.service.query; + +import org.nl.common.page.BaseQuery; +import org.nl.layout.service.entity.AgvLayoutMap; + +public class MapLayoutQuery extends BaseQuery { +} diff --git a/nl-base-data/pom.xml b/nl-base-data/pom.xml new file mode 100644 index 0000000..45d3b14 --- /dev/null +++ b/nl-base-data/pom.xml @@ -0,0 +1,25 @@ + + + 4.0.0 + + org.nl + nl-tool-platform + 3.0.0 + + + org.nl + nl-base-data + 0.0.1-SNAPSHOT + nl-base-data + nl-base-data + + + + + org.nl + nl-common + + + + diff --git a/nl-base-data/src/main/java/org/nl/NlBaseDataApplication.java b/nl-base-data/src/main/java/org/nl/NlBaseDataApplication.java new file mode 100644 index 0000000..6bf8c8f --- /dev/null +++ b/nl-base-data/src/main/java/org/nl/NlBaseDataApplication.java @@ -0,0 +1,13 @@ +package org.nl; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class NlBaseDataApplication { + + public static void main(String[] args) { + SpringApplication.run(NlBaseDataApplication.class, args); + } + +} diff --git a/nl-base-data/src/main/java/org/nl/device/controller/DeviceController.java b/nl-base-data/src/main/java/org/nl/device/controller/DeviceController.java new file mode 100644 index 0000000..6d360b5 --- /dev/null +++ b/nl-base-data/src/main/java/org/nl/device/controller/DeviceController.java @@ -0,0 +1,60 @@ +/* + * Copyright [2022] [https://www.xiaonuo.vip] + * + * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点: + * + * 1.请不要删除和修改根目录下的LICENSE文件。 + * 2.请不要删除和修改Snowy源码头部的版权声明。 + * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。 + * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip + * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。 + * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip + */ +package org.nl.device.controller; + + +import cn.dev33.satoken.annotation.SaIgnore; +import com.alibaba.fastjson.JSONObject; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.nl.common.pojo.CommonResult; +import org.nl.device.service.dto.DeviceInfo; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +@Tag(name = "设备模块") +@RestController() +@RequestMapping("/api/device") +@Validated +@SaIgnore +public class DeviceController { + static { + System.out.println("初始化AGV模块------------"); + } + @GetMapping("list") + public CommonResult status() { + List list = new ArrayList<>(); + JSONObject object = new JSONObject(); + object.put("action","action"); + object.put("signal","signal"); + object.put("power","power"); + for (int i = 0; i < 20; i++) { + DeviceInfo build = DeviceInfo.builder() + .name("设备1"+i) + .code(i + "sdfsdf") + .id(String.valueOf(i)) + .icon("/Users/mima0000/Desktop/car.png") + .description("设备介绍") + .editParam(object) + .type(i%2==1?"货架":"专机") + .build(); + list.add(build); + } + return CommonResult.data(list); + } +} diff --git a/nl-base-data/src/main/java/org/nl/device/service/dto/DeviceInfo.java b/nl-base-data/src/main/java/org/nl/device/service/dto/DeviceInfo.java new file mode 100644 index 0000000..dd5770a --- /dev/null +++ b/nl-base-data/src/main/java/org/nl/device/service/dto/DeviceInfo.java @@ -0,0 +1,43 @@ +package org.nl.device.service.dto; + +import com.alibaba.fastjson.JSONObject; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class DeviceInfo { + /** + * 设备Id + */ + private String id; + /** + * 设备Id + */ + private String code; + /** + * 车辆类型 + */ + private String name; + /** + * 设备描述 + */ + private String description; + /** + * 设备类型 + */ + private String type; + /** + * 设备编辑时存储信息 + */ + private JSONObject editParam; + /** + * 设备图标 + */ + private String icon="/Users/mima0000/Desktop/car.png"; + +} diff --git a/nl-agv/src/main/java/org/nl/controller/AgvStatusController.java b/nl-base-data/src/main/java/org/nl/point/PointStatusController.java similarity index 64% rename from nl-agv/src/main/java/org/nl/controller/AgvStatusController.java rename to nl-base-data/src/main/java/org/nl/point/PointStatusController.java index 989b0a2..53bcaa1 100644 --- a/nl-agv/src/main/java/org/nl/controller/AgvStatusController.java +++ b/nl-base-data/src/main/java/org/nl/point/PointStatusController.java @@ -10,31 +10,42 @@ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。 * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip */ -package org.nl.controller; +package org.nl.point; +import cn.dev33.satoken.annotation.SaIgnore; import com.alibaba.fastjson.JSONObject; import io.swagger.v3.oas.annotations.tags.Tag; import org.nl.common.pojo.CommonResult; -import org.nl.language.LangBehavior; +import org.nl.point.dto.PointStatus; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; +import java.util.List; +import java.util.Random; @Tag(name = "AGV模块") @RestController() -@RequestMapping("/api/agv") +@RequestMapping("/api/baseData/point") @Validated -public class AgvStatusController { +@SaIgnore +public class PointStatusController { static { System.out.println("初始化AGV模块------------"); } @GetMapping("status") - public CommonResult status() { - ArrayList list = new ArrayList<>(); - return CommonResult.ok(); + public CommonResult> status() { + List list = new ArrayList<>(); + for (int i = 0; i < new Random().nextInt(100)+10; i++) { + PointStatus build = PointStatus.builder().pointCode("A1_1" + i) + .pointName("货位" + i) + .x(new Random().nextInt(1280)) + .y(new Random().nextInt(960)).status(String.valueOf(i / 2)).build(); + list.add(build); + } + return CommonResult.data(list); } } diff --git a/nl-base-data/src/main/java/org/nl/point/dto/PointStatus.java b/nl-base-data/src/main/java/org/nl/point/dto/PointStatus.java new file mode 100644 index 0000000..6dc65e1 --- /dev/null +++ b/nl-base-data/src/main/java/org/nl/point/dto/PointStatus.java @@ -0,0 +1,33 @@ +package org.nl.point.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class PointStatus { + /** + * 点位编码 + */ + private String pointCode; + /** + * 车辆类型 + */ + private String pointName; + /** + * 坐标X + */ + private int x; + /** + * 坐标Y + */ + private int y; + /** + * 点位状态 0无货1有货 + */ + private String status; +} diff --git a/nl-base-data/src/main/resources/application.properties b/nl-base-data/src/main/resources/application.properties new file mode 100644 index 0000000..47550ad --- /dev/null +++ b/nl-base-data/src/main/resources/application.properties @@ -0,0 +1 @@ +spring.application.name=nl-base-data diff --git a/nl-common/src/main/java/org/nl/common/localStorage/controller/LocalStorageController.java b/nl-common/src/main/java/org/nl/common/localStorage/controller/LocalStorageController.java new file mode 100644 index 0000000..eefdb93 --- /dev/null +++ b/nl-common/src/main/java/org/nl/common/localStorage/controller/LocalStorageController.java @@ -0,0 +1,59 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// +package org.nl.common.localStorage.controller; + + +import cn.dev33.satoken.annotation.SaIgnore; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import org.apache.commons.lang3.StringUtils; +import org.nl.common.localStorage.service.LocalStorageService; +import org.nl.common.localStorage.service.entity.LocalStorage; +import org.nl.common.pojo.CommonResult; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +@RestController +@RequestMapping({"/api/localStorage"}) +@SaIgnore +public class LocalStorageController { + + @Autowired + private LocalStorageService localStorageService; + + @GetMapping + public CommonResult query(@RequestParam String annex) { + List list = new ArrayList<>(); + if (StringUtils.isNotEmpty(annex)){ + String[] split = annex.split(","); + list = localStorageService.listByIds(Arrays.asList(split)); + } + return CommonResult.data(list); + } + @PostMapping({"/upload"}) + public CommonResult upload(@RequestParam MultipartFile file) { + LocalStorage localStorage = localStorageService.upload(file); + return CommonResult.data(localStorage); + } + @GetMapping({"/download"}) + public void download(@RequestParam Long storageId , HttpServletResponse response, HttpServletRequest request) throws IOException { + this.localStorageService.downloadFile(this.localStorageService.getById(storageId),request, response); + } + + + @DeleteMapping + public CommonResult delete(@RequestBody Long[] ids) { + localStorageService.removeByIds(Arrays.asList(ids)); + return CommonResult.ok(); + } + +} diff --git a/nl-common/src/main/java/org/nl/common/localStorage/service/LocalStorageService.java b/nl-common/src/main/java/org/nl/common/localStorage/service/LocalStorageService.java new file mode 100644 index 0000000..7842128 --- /dev/null +++ b/nl-common/src/main/java/org/nl/common/localStorage/service/LocalStorageService.java @@ -0,0 +1,19 @@ +package org.nl.common.localStorage.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import org.nl.common.localStorage.service.entity.LocalStorage; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; +import java.util.List; + +public interface LocalStorageService extends IService { + + LocalStorage upload(MultipartFile file); + List batchUpload(MultipartFile[] file); + + void download(List localStorageDtos, HttpServletResponse response) throws IOException; + void downloadFile(LocalStorage localStorage, HttpServletRequest request, HttpServletResponse response) throws IOException; +} diff --git a/nl-common/src/main/java/org/nl/common/localStorage/service/entity/LocalStorage.java b/nl-common/src/main/java/org/nl/common/localStorage/service/entity/LocalStorage.java new file mode 100644 index 0000000..3b548af --- /dev/null +++ b/nl-common/src/main/java/org/nl/common/localStorage/service/entity/LocalStorage.java @@ -0,0 +1,34 @@ +package org.nl.common.localStorage.service.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.Date; + + +@Data +@TableName("local_storage") +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class LocalStorage implements Serializable { + + @TableId(type = IdType.AUTO) + private Long id; + private String name; + private String suffix; + private String path; + private String type; + private String size; + private Integer orderCode; + private Date createTime; + private String createName; + private Date updateTime; + +} diff --git a/nl-common/src/main/java/org/nl/common/localStorage/service/impl/LocalStorageServiceImpl.java b/nl-common/src/main/java/org/nl/common/localStorage/service/impl/LocalStorageServiceImpl.java new file mode 100644 index 0000000..f72d743 --- /dev/null +++ b/nl-common/src/main/java/org/nl/common/localStorage/service/impl/LocalStorageServiceImpl.java @@ -0,0 +1,91 @@ +package org.nl.common.localStorage.service.impl; + +import cn.dev33.satoken.stp.StpUtil; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import org.nl.common.localStorage.service.LocalStorageService; +import org.nl.common.localStorage.service.mapper.LocalStorageMapper; +import org.nl.common.localStorage.service.entity.LocalStorage; +import org.nl.common.util.FileProperties; +import org.nl.common.util.FileUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.io.IOException; +import java.util.*; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + + +@Service +public class LocalStorageServiceImpl extends ServiceImpl implements LocalStorageService { + @Autowired + private FileProperties fileProperties; + + + @Override + public LocalStorage upload(MultipartFile multipartFile) { + String filename = multipartFile.getOriginalFilename(); + String suffix = FileUtil.getExtensionName(filename); + String type = FileUtil.getFileType(suffix); + File file = FileUtil.upload(multipartFile, this.fileProperties.getPath().getPath() + type + File.separator); + LocalStorage storage = LocalStorage.builder().name(filename) + .path(file.getPath()) + .size(FileUtil.getSize(multipartFile.getSize())) + .suffix(type) + .type(type).createTime(new Date()).build(); + this.baseMapper.insertUseGeneratedKeys(storage); + return storage; + } + + @Override + public List batchUpload(MultipartFile[] multipartFile) { + List result = new ArrayList<>(); + if (multipartFile!=null){ + for (MultipartFile item : multipartFile) { + String filename = item.getOriginalFilename(); + String suffix = FileUtil.getExtensionName(filename); + String type = FileUtil.getFileType(suffix); + File file = FileUtil.upload(item, this.fileProperties.getPath().getPath() + type + File.separator); + LocalStorage storage = LocalStorage.builder().name(filename) + .path(file.getPath()) + .size(FileUtil.getSize(item.getSize())) + .suffix(type) + .type(type).createTime(new Date()).build(); + result.add(storage); + } + } + if (!CollectionUtils.isEmpty(result)){ + this.saveBatch(result); + } + return result; + } + @Override + public void download(List queryAll, HttpServletResponse response) throws IOException { + List> list = new ArrayList(); + Iterator var4 = queryAll.iterator(); + + while(var4.hasNext()) { + LocalStorage localStorageDTO = (LocalStorage)var4.next(); + Map map = new LinkedHashMap(); + map.put("文件名", localStorageDTO.getName()); + map.put("备注名", localStorageDTO.getName()); + map.put("文件类型", localStorageDTO.getType()); + map.put("文件大小", localStorageDTO.getSize()); + map.put("创建者", localStorageDTO.getCreateName()); + map.put("创建日期", localStorageDTO.getCreateTime()); + list.add(map); + } + FileUtil.downloadExcel(list, response); + } + + @Override + public void downloadFile(LocalStorage localStorage, HttpServletRequest request, HttpServletResponse response) throws IOException { + String path = localStorage.getPath(); + File file = new File(path); + FileUtil.downloadFile(request, response,file,false); + + } +} diff --git a/nl-common/src/main/java/org/nl/common/localStorage/service/mapper/LocalStorageMapper.java b/nl-common/src/main/java/org/nl/common/localStorage/service/mapper/LocalStorageMapper.java new file mode 100644 index 0000000..c9b961f --- /dev/null +++ b/nl-common/src/main/java/org/nl/common/localStorage/service/mapper/LocalStorageMapper.java @@ -0,0 +1,15 @@ +package org.nl.common.localStorage.service.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Insert; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Options; +import org.nl.common.localStorage.service.entity.LocalStorage; + +@Mapper +public interface LocalStorageMapper extends BaseMapper { + + @Insert("INSERT INTO local_storage (name, suffix, path, type, size, order_code, create_time, create_name, update_time) VALUES (#{name}, #{suffix}, #{path}, #{type}, #{size}, #{orderCode}, #{createTime}, #{createName}, #{updateTime})") + @Options(useGeneratedKeys = true, keyProperty = "id") + void insertUseGeneratedKeys(LocalStorage user); +} diff --git a/nl-common/src/main/java/org/nl/common/page/BaseQuery.java b/nl-common/src/main/java/org/nl/common/page/BaseQuery.java new file mode 100644 index 0000000..d63a32f --- /dev/null +++ b/nl-common/src/main/java/org/nl/common/page/BaseQuery.java @@ -0,0 +1,73 @@ +package org.nl.common.page; + +import cn.hutool.core.lang.ParameterizedTypeImpl; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.LambdaUtils; +import com.baomidou.mybatisplus.core.toolkit.support.ColumnCache; +import lombok.Data; + +import java.lang.reflect.Type; +import java.util.Map; +import org.nl.common.util.MapOf; + +/** + * 泛型必须为数据tb对应do:由mybatis管理 + * @author ZZQ + * @Date 2022/12/14 6:33 下午 + */ +@Data +public class BaseQuery { + /** + * 模糊查询 + */ + private String blurry; + /** + * 是否启用 + */ + private String is_used; + /** + * 创建时间范围查询 + */ + private String start_time; + private String end_time; + + + /** + * 字段映射Map:指定字段对应QueryWrapper的查询类型 + * 字段与数据库字段对应,不支持驼峰 + * @see org.nl.common.page.QueryTEnum + * 通过buid构建 + */ + public Map doP = MapOf.of("blurry", QParam.builder().k(new String[]{"name"}).type(QueryTEnum.LK).build() + ,"startTime", QParam.builder().k(new String[]{"create_time"}).type(QueryTEnum.LT).build() + ,"endTime", QParam.builder().k(new String[]{"create_time"}).type(QueryTEnum.LE).build() + ,"sort", QParam.builder().k(new String[]{"sort"}).type(QueryTEnum.BY).build() + ); + + public QueryWrapper build(){ + this.paramMapping(); + QueryWrapper wrapper = new QueryWrapper<>(); + JSONObject json = (JSONObject)JSONObject.toJSON(this); + Type[] types = ((ParameterizedTypeImpl) this.getClass().getGenericSuperclass()).getActualTypeArguments(); + Map columnMap = LambdaUtils.getColumnMap((Class) types[0]); + + String dopStr = "doP"; + json.forEach((key, vel) -> { + if (vel != null && !key.equals(dopStr)){ + QParam qParam = doP.get(key); + if (qParam != null){ + QueryTEnum.build(qParam.type,wrapper,qParam.k,vel); + }else { + ColumnCache columnCache = columnMap.get(LambdaUtils.formatKey(key)); + if (columnCache!=null){ + wrapper.eq(columnCache.getColumn(),vel); + } + } + } + }); + return wrapper; + } + + public void paramMapping(){}; +} diff --git a/nl-common/src/main/java/org/nl/common/page/LConsumer.java b/nl-common/src/main/java/org/nl/common/page/LConsumer.java new file mode 100644 index 0000000..dd2f779 --- /dev/null +++ b/nl-common/src/main/java/org/nl/common/page/LConsumer.java @@ -0,0 +1,19 @@ +package org.nl.common.page; + +/** + * s + * @author ZZQ + * @Date 2022/12/14 8:40 下午 + */ +@FunctionalInterface +public interface LConsumer { + + /** + * 切面 + * @param x 、 + * @param y 、 + * @param z 、 + */ + void accept(X x,Y y,Z z); + +} diff --git a/nl-common/src/main/java/org/nl/common/page/PageQuery.java b/nl-common/src/main/java/org/nl/common/page/PageQuery.java new file mode 100644 index 0000000..e15290a --- /dev/null +++ b/nl-common/src/main/java/org/nl/common/page/PageQuery.java @@ -0,0 +1,135 @@ +package org.nl.common.page; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.core.metadata.OrderItem; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.Data; +import org.apache.commons.lang3.StringUtils; + +import java.io.Serializable; +import java.lang.reflect.Field; +import java.util.Locale; + +/** + *

+ * 分页参数 + *

+ * + * @author generator + * @since 2023-11-16 + */ +@Data +public class PageQuery implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 分页大小 + */ + private Integer size=100; + + /** + * 当前页数 + */ + private Integer page=0; + + /** + * 排序列menu_sort,desc + */ + private String sort; + + /** + * 排序的方向desc或者asc + */ + private Boolean isAsc; + + /** + * 当前记录起始索引 默认值 + */ + public static final int DEFAULT_PAGE_NUM = 1; + + /** + * 每页显示记录数 默认值 默认查全部 + */ + public static final int DEFAULT_PAGE_SIZE = Integer.MAX_VALUE; + + public Page build() { + Integer pageNum = ObjectUtil.defaultIfNull(getPage(), DEFAULT_PAGE_NUM); + Integer pageSize = ObjectUtil.defaultIfNull(getSize(), DEFAULT_PAGE_SIZE); + if (pageNum <= 0) { + pageNum = DEFAULT_PAGE_NUM; + } + Page page = new Page<>(pageNum, pageSize); + if (StringUtils.isNotEmpty(sort)){ + String[] split = sort.split(","); + for (int i = 0; i < (split.length & ~1); i = i + 2) { + String col = split[i]; + OrderItem item = new OrderItem(); + item.setColumn(col); + item.setAsc(split[i + 1].toLowerCase(Locale.ROOT).equals("asc")); + page.addOrder(item); + } + } + return page; + } + + public static void trimStringFields(Object obj) { + if (obj == null) { + return; + } + Field[] fields = obj.getClass().getDeclaredFields(); + for (Field field : fields) { + if (field.getType() == String.class) { + field.setAccessible(true); + try { + String value = (String) field.get(obj); + if (value != null) { + field.set(obj, value.trim().toUpperCase()); + } + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + } + } + } + + public Page build(Class r) { + Integer pageNum = ObjectUtil.defaultIfNull(getPage(), DEFAULT_PAGE_NUM); + Integer pageSize = ObjectUtil.defaultIfNull(getSize(), DEFAULT_PAGE_SIZE); + if (pageNum <= 0) { + pageNum = DEFAULT_PAGE_NUM; + } + Page page = new Page<>(pageNum, pageSize); + if (StringUtils.isNotEmpty(sort)) { + String[] split = sort.split(","); + for (int i = 0; i < (split.length & ~1); i=i+2) { + String col = split[i]; + if ("id".equals(col)){ + String mId = mappingId(r); + col = StringUtils.isNotEmpty(mId)?mId:col; + } + OrderItem item = new OrderItem(); + item.setColumn(col); + item.setAsc(split[i+1].toLowerCase(Locale.ROOT).equals("asc")); + page.addOrder(item); + } + + } + return page; + } + + private String mappingId(R r){ + if (r instanceof Class){ + Field[] fields = ((Class) r).getDeclaredFields(); + for (Field field : fields) { + TableId[] byType = field.getAnnotationsByType(TableId.class); + if (byType !=null && byType.length>0){ + TableId tableId = byType[0]; + return tableId.value(); + } + } + } + return null; + } +} diff --git a/nl-common/src/main/java/org/nl/common/page/QParam.java b/nl-common/src/main/java/org/nl/common/page/QParam.java new file mode 100644 index 0000000..89bb62f --- /dev/null +++ b/nl-common/src/main/java/org/nl/common/page/QParam.java @@ -0,0 +1,14 @@ +package org.nl.common.page; + +import lombok.Builder; + +/** + * s + * @author ZZQ + * @Date 2022/12/15 1:41 下午 + */ +@Builder +public class QParam { + public String[] k; + public QueryTEnum type; +} diff --git a/nl-common/src/main/java/org/nl/common/page/QueryTEnum.java b/nl-common/src/main/java/org/nl/common/page/QueryTEnum.java new file mode 100644 index 0000000..8f30787 --- /dev/null +++ b/nl-common/src/main/java/org/nl/common/page/QueryTEnum.java @@ -0,0 +1,81 @@ +package org.nl.common.page; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import lombok.Getter; +import org.apache.commons.lang3.StringUtils; +import org.apache.poi.ss.formula.functions.T; + +import java.util.Collection; + +/** + * s + * + * @author ZZQ + * @Date 2022/12/14 8:26 下午 + */ +@Getter +public enum QueryTEnum { + // + EQ((q, k, v) -> { + q.eq(k[0], v); + }), + IN((q, key, o) -> { + if (o instanceof Collection) { + q.in(key[0], (Collection) o); + } + }), + LK((q, keys, o) -> { + for (String key : keys) { + q.like(key, o); + } + }), + ORLK((q, k, o) -> { + q.and(query -> { + QueryWrapper queryWrapper = (QueryWrapper) query; + for (int i = 0; i < k.length; i++) { + queryWrapper.like(k[i], o); + if (i != (k.length - 1)) { + queryWrapper.or(); + } + } + }); + }), + LE((q, k, v) -> { + q.le(k[0], v); + }), + GE((q, k, v) -> { + q.ge(k[0], v); + }), + BY((q, k, v) -> { + q.orderByDesc(k[0], String.valueOf(v)); + }), + NO((q, k, v) -> { + q.isNull(k[0]); + }), + NULL_OR_EMPTY((queryWrapper, k, v) -> { + queryWrapper.nested(a -> a.isNull(k[0]).or().eq(k[0], "")); + }), + LT((q, k, v) -> { + q.lt(k[0], v); + }), + GT((q, k, v) -> { + q.gt(k[0], v); + }), + OREQ((q, k, v) -> { + if (StringUtils.isBlank((String) v)) { + q.isNull(k[0]); + } else { + q.eq(k[0], v); + } + }); + + private LConsumer, String[], Object> doP; + + QueryTEnum(LConsumer, String[], Object> doP) { + this.doP = doP; + } + + public static void build(QueryTEnum type, QueryWrapper q, String[] k, Object v) { + type.getDoP().accept(q, k, v); + } +} diff --git a/nl-common/src/main/java/org/nl/common/util/FileProperties.java b/nl-common/src/main/java/org/nl/common/util/FileProperties.java new file mode 100644 index 0000000..e00b3d5 --- /dev/null +++ b/nl-common/src/main/java/org/nl/common/util/FileProperties.java @@ -0,0 +1,242 @@ +package org.nl.common.util; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ConfigurationProperties( + prefix = "file" +) +public class FileProperties { + private Long maxSize; + private Long avatarMaxSize; + private ElPath mac; + private ElPath linux; + private ElPath windows; + + public ElPath getPath() { + String os = System.getProperty("os.name"); + if (os.toLowerCase().startsWith("win")) { + return this.windows; + } else { + return os.toLowerCase().startsWith("mac") ? this.mac : this.linux; + } + } + + public FileProperties() { + } + + public Long getMaxSize() { + return this.maxSize; + } + + public Long getAvatarMaxSize() { + return this.avatarMaxSize; + } + + public ElPath getMac() { + return this.mac; + } + + public ElPath getLinux() { + return this.linux; + } + + public ElPath getWindows() { + return this.windows; + } + + public void setMaxSize(final Long maxSize) { + this.maxSize = maxSize; + } + + public void setAvatarMaxSize(final Long avatarMaxSize) { + this.avatarMaxSize = avatarMaxSize; + } + + public void setMac(final ElPath mac) { + this.mac = mac; + } + + public void setLinux(final ElPath linux) { + this.linux = linux; + } + + public void setWindows(final ElPath windows) { + this.windows = windows; + } + + public boolean equals(final Object o) { + if (o == this) { + return true; + } else if (!(o instanceof FileProperties)) { + return false; + } else { + FileProperties other = (FileProperties)o; + if (!other.canEqual(this)) { + return false; + } else { + label71: { + Object this$maxSize = this.getMaxSize(); + Object other$maxSize = other.getMaxSize(); + if (this$maxSize == null) { + if (other$maxSize == null) { + break label71; + } + } else if (this$maxSize.equals(other$maxSize)) { + break label71; + } + + return false; + } + + Object this$avatarMaxSize = this.getAvatarMaxSize(); + Object other$avatarMaxSize = other.getAvatarMaxSize(); + if (this$avatarMaxSize == null) { + if (other$avatarMaxSize != null) { + return false; + } + } else if (!this$avatarMaxSize.equals(other$avatarMaxSize)) { + return false; + } + + label57: { + Object this$mac = this.getMac(); + Object other$mac = other.getMac(); + if (this$mac == null) { + if (other$mac == null) { + break label57; + } + } else if (this$mac.equals(other$mac)) { + break label57; + } + + return false; + } + + Object this$linux = this.getLinux(); + Object other$linux = other.getLinux(); + if (this$linux == null) { + if (other$linux != null) { + return false; + } + } else if (!this$linux.equals(other$linux)) { + return false; + } + + Object this$windows = this.getWindows(); + Object other$windows = other.getWindows(); + if (this$windows == null) { + if (other$windows == null) { + return true; + } + } else if (this$windows.equals(other$windows)) { + return true; + } + + return false; + } + } + } + + protected boolean canEqual(final Object other) { + return other instanceof FileProperties; + } + + public int hashCode() { + boolean PRIME = true; + int result = 1; + Object $maxSize = this.getMaxSize(); + result = result * 59 + ($maxSize == null ? 43 : $maxSize.hashCode()); + Object $avatarMaxSize = this.getAvatarMaxSize(); + result = result * 59 + ($avatarMaxSize == null ? 43 : $avatarMaxSize.hashCode()); + Object $mac = this.getMac(); + result = result * 59 + ($mac == null ? 43 : $mac.hashCode()); + Object $linux = this.getLinux(); + result = result * 59 + ($linux == null ? 43 : $linux.hashCode()); + Object $windows = this.getWindows(); + result = result * 59 + ($windows == null ? 43 : $windows.hashCode()); + return result; + } + + public String toString() { + return "FileProperties(maxSize=" + this.getMaxSize() + ", avatarMaxSize=" + this.getAvatarMaxSize() + ", mac=" + this.getMac() + ", linux=" + this.getLinux() + ", windows=" + this.getWindows() + ")"; + } + + public static class ElPath { + private String path; + private String avatar; + + public ElPath() { + } + + public String getPath() { + return this.path; + } + + public String getAvatar() { + return this.avatar; + } + + public void setPath(final String path) { + this.path = path; + } + + public void setAvatar(final String avatar) { + this.avatar = avatar; + } + + public boolean equals(final Object o) { + if (o == this) { + return true; + } else if (!(o instanceof ElPath)) { + return false; + } else { + ElPath other = (ElPath)o; + if (!other.canEqual(this)) { + return false; + } else { + Object this$path = this.getPath(); + Object other$path = other.getPath(); + if (this$path == null) { + if (other$path != null) { + return false; + } + } else if (!this$path.equals(other$path)) { + return false; + } + + Object this$avatar = this.getAvatar(); + Object other$avatar = other.getAvatar(); + if (this$avatar == null) { + if (other$avatar != null) { + return false; + } + } else if (!this$avatar.equals(other$avatar)) { + return false; + } + + return true; + } + } + } + + protected boolean canEqual(final Object other) { + return other instanceof ElPath; + } + + public int hashCode() { + boolean PRIME = true; + int result = 1; + Object $path = this.getPath(); + result = result * 59 + ($path == null ? 43 : $path.hashCode()); + Object $avatar = this.getAvatar(); + result = result * 59 + ($avatar == null ? 43 : $avatar.hashCode()); + return result; + } + + public String toString() { + return "FileProperties.ElPath(path=" + this.getPath() + ", avatar=" + this.getAvatar() + ")"; + } + } +} diff --git a/nl-common/src/main/java/org/nl/common/util/FileUtil.java b/nl-common/src/main/java/org/nl/common/util/FileUtil.java new file mode 100644 index 0000000..fbcce38 --- /dev/null +++ b/nl-common/src/main/java/org/nl/common/util/FileUtil.java @@ -0,0 +1,273 @@ +package org.nl.common.util; + +import cn.hutool.core.io.IoUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.poi.excel.BigExcelWriter; +import cn.hutool.poi.excel.ExcelUtil; +import jakarta.servlet.ServletOutputStream; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import org.apache.poi.util.IOUtils; +import org.apache.poi.xssf.streaming.SXSSFSheet; +import org.nl.common.exception.CommonException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.multipart.MultipartFile; + +import java.io.*; +import java.security.MessageDigest; +import java.text.DecimalFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import java.util.Map; + +public class FileUtil extends cn.hutool.core.io.FileUtil { + private static final Logger log = LoggerFactory.getLogger(FileUtil.class); + public static final String SYS_TEM_DIR; + private static final int GB = 1073741824; + private static final int MB = 1048576; + private static final int KB = 1024; + private static final DecimalFormat DF; + public static final String IMAGE = "图片"; + public static final String TXT = "文档"; + public static final String MUSIC = "音乐"; + public static final String VIDEO = "视频"; + public static final String OTHER = "其他"; + + public FileUtil() { + } + + public static File toFile(MultipartFile multipartFile) { + String fileName = multipartFile.getOriginalFilename(); + String prefix = "." + getExtensionName(fileName); + File file = null; + + try { + file = new File(SYS_TEM_DIR + IdUtil.simpleUUID() + prefix); + multipartFile.transferTo(file); + } catch (IOException var5) { + IOException e = var5; + log.error(e.getMessage(), e); + } + + return file; + } + + public static String getExtensionName(String filename) { + if (filename != null && filename.length() > 0) { + int dot = filename.lastIndexOf(46); + if (dot > -1 && dot < filename.length() - 1) { + return filename.substring(dot + 1); + } + } + + return filename; + } + + public static String getFileNameNoEx(String filename) { + if (filename != null && filename.length() > 0) { + int dot = filename.lastIndexOf(46); + if (dot > -1 && dot < filename.length()) { + return filename.substring(0, dot); + } + } + + return filename; + } + + public static String getSize(long size) { + String resultSize; + if (size / 1073741824L >= 1L) { + resultSize = DF.format((double)((float)size / 1.07374182E9F)) + "GB "; + } else if (size / 1048576L >= 1L) { + resultSize = DF.format((double)((float)size / 1048576.0F)) + "MB "; + } else if (size / 1024L >= 1L) { + resultSize = DF.format((double)((float)size / 1024.0F)) + "KB "; + } else { + resultSize = size + "B "; + } + + return resultSize; + } + + static File inputStreamToFile(InputStream ins, String name) throws Exception { + File file = new File(SYS_TEM_DIR + name); + if (file.exists()) { + return file; + } else { + OutputStream os = new FileOutputStream(file); + int len = 8192; + byte[] buffer = new byte[len]; + + int bytesRead; + while((bytesRead = ins.read(buffer, 0, len)) != -1) { + os.write(buffer, 0, bytesRead); + } + + os.close(); + ins.close(); + return file; + } + } + + public static File upload(MultipartFile file, String filePath) { + Date date = new Date(); + SimpleDateFormat format = new SimpleDateFormat("yyyyMMddhhmmssS"); + String name = getFileNameNoEx(file.getOriginalFilename()); + String suffix = getExtensionName(file.getOriginalFilename()); + String nowStr = "-" + format.format(date); + + try { + String fileName = name + nowStr + "." + suffix; + String path = filePath + fileName; + File dest = (new File(path)).getCanonicalFile(); + if (!dest.getParentFile().exists() && !dest.getParentFile().mkdirs()) { + System.out.println("was not successful."); + } + + file.transferTo(dest); + return dest; + } catch (Exception var10) { + Exception e = var10; + log.error(e.getMessage(), e); + return null; + } + } + + public static void downloadExcel(List> list, HttpServletResponse response) throws IOException { + String tempPath = SYS_TEM_DIR + IdUtil.fastSimpleUUID() + ".xlsx"; + File file = new File(tempPath); + BigExcelWriter writer = ExcelUtil.getBigWriter(file); + writer.write(list, true); + SXSSFSheet sheet = (SXSSFSheet)writer.getSheet(); + sheet.trackAllColumnsForAutoSizing(); + writer.autoSizeColumnAll(); + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8"); + response.setHeader("Content-Disposition", "attachment;filename=file.xlsx"); + ServletOutputStream out = response.getOutputStream(); + file.deleteOnExit(); + writer.flush(out, true); + IoUtil.close(out); + } + + public static String getFileType(String type) { + String documents = "txt doc pdf ppt pps xlsx xls docx"; + String music = "mp3 wav wma mpa ram ra aac aif m4a"; + String video = "avi mpg mpe mpeg asf wmv mov qt rm mp4 flv m4v webm ogv ogg"; + String image = "bmp dib pcp dif wmf gif jpg tif eps psd cdr iff tga pcd mpt png jpeg svg"; + if (image.contains(type)) { + return "图片"; + } else if (documents.contains(type)) { + return "文档"; + } else if (music.contains(type)) { + return "音乐"; + } else { + return video.contains(type) ? "视频" : "其他"; + } + } + + public static void checkSize(long maxSize, long size) { + int len = 1048576; + if (size > maxSize * (long)len) { + throw new CommonException("文件超出规定大小"); + } + } + + public static boolean check(File file1, File file2) { + String img1Md5 = getMd5(file1); + String img2Md5 = getMd5(file2); + return img1Md5.equals(img2Md5); + } + + public static boolean check(String file1Md5, String file2Md5) { + return file1Md5.equals(file2Md5); + } + + private static byte[] getByte(File file) { + byte[] b = new byte[(int)file.length()]; + + try { + InputStream in = new FileInputStream(file); + + try { + System.out.println(in.read(b)); + } catch (IOException var4) { + IOException e = var4; + log.error(e.getMessage(), e); + } + + return b; + } catch (FileNotFoundException var5) { + FileNotFoundException e = var5; + log.error(e.getMessage(), e); + return null; + } + } + + private static String getMd5(byte[] bytes) { + char[] hexDigits = new char[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; + + try { + MessageDigest mdTemp = MessageDigest.getInstance("MD5"); + mdTemp.update(bytes); + byte[] md = mdTemp.digest(); + int j = md.length; + char[] str = new char[j * 2]; + int k = 0; + byte[] var7 = md; + int var8 = md.length; + + for(int var9 = 0; var9 < var8; ++var9) { + byte byte0 = var7[var9]; + str[k++] = hexDigits[byte0 >>> 4 & 15]; + str[k++] = hexDigits[byte0 & 15]; + } + + return new String(str); + } catch (Exception var11) { + Exception e = var11; + log.error(e.getMessage(), e); + return null; + } + } + + public static void downloadFile(HttpServletRequest request, HttpServletResponse response, File file, boolean deleteOnExit) { + response.setCharacterEncoding(request.getCharacterEncoding()); + response.setContentType("application/octet-stream"); + FileInputStream fis = null; + + try { + fis = new FileInputStream(file); + response.setHeader("Content-Disposition", "attachment; filename=" + file.getName()); + IOUtils.copy(fis, response.getOutputStream()); + response.flushBuffer(); + } catch (Exception var14) { + Exception e = var14; + log.error(e.getMessage(), e); + } finally { + if (fis != null) { + try { + fis.close(); + if (deleteOnExit) { + file.deleteOnExit(); + } + } catch (IOException var13) { + IOException e = var13; + log.error(e.getMessage(), e); + } + } + + } + + } + + public static String getMd5(File file) { + return getMd5(getByte(file)); + } + + static { + SYS_TEM_DIR = System.getProperty("java.io.tmpdir") + File.separator; + DF = new DecimalFormat("0.00"); + } +} diff --git a/nl-common/src/main/java/org/nl/common/util/MapOf.java b/nl-common/src/main/java/org/nl/common/util/MapOf.java new file mode 100644 index 0000000..06b86b1 --- /dev/null +++ b/nl-common/src/main/java/org/nl/common/util/MapOf.java @@ -0,0 +1,20 @@ +package org.nl.common.util; + + +import java.io.Serializable; +import java.util.HashMap; + +/* + * @author ZZQ + * @Date 2022/11/29 2:55 下午 + */ +public class MapOf implements Serializable { + + public static HashMap of(K... key) { + HashMap map = new HashMap<>(); + for (int i = 0; i < (key.length & ~1); i = i + 2) { + map.put(key[i], key[i + 1]); + } + return map; + } +} diff --git a/nl-system/pom.xml b/nl-system/pom.xml index 2bf4e92..5c3f2a0 100644 --- a/nl-system/pom.xml +++ b/nl-system/pom.xml @@ -12,119 +12,9 @@ nl-system nl-system - - - org.openjdk.nashorn - nashorn-core - - - - - org.springframework.boot - spring-boot-starter-validation - - - - - org.springframework.boot - spring-boot-starter-web - - - - - org.springframework.boot - spring-boot-starter-aop - - - - - org.springframework.boot - spring-boot-configuration-processor - - - - - org.springframework.boot - spring-boot-starter-data-redis - - - - - org.projectlombok - lombok - - - - - com.alibaba - druid-spring-boot-3-starter - - - - - com.baomidou - mybatis-plus-spring-boot3-starter - - - - - com.fhs-opensource - easy-trans-spring-boot-starter - - - - - com.fhs-opensource - easy-trans-mybatis-plus-extend - - - - - org.apache.commons - commons-pool2 - - - - - cn.hutool - hutool-all - - - - - com.belerweb - pinyin4j - - - - - org.lionsoul - ip2region - - - - - com.github.xiaoymin - knife4j-openapi3-jakarta-spring-boot-starter - - - - - cn.afterturn - easypoi-spring-boot-starter - - - - - com.antherd - sm-crypto - - - - - com.alibaba - easyexcel + org.nl + nl-common diff --git a/nl-vue/.env.development b/nl-vue/.env.development index 5e3b786..4186467 100644 --- a/nl-vue/.env.development +++ b/nl-vue/.env.development @@ -1,5 +1,5 @@ # 接口地址 -VITE_API_BASEURL = http://127.0.0.1:82 +VITE_API_BASEURL = http://127.0.0.1:8081 # 本地端口 VITE_PORT = 81 diff --git a/nl-vue/.env.production b/nl-vue/.env.production index 6b454a6..77548c3 100644 --- a/nl-vue/.env.production +++ b/nl-vue/.env.production @@ -1,5 +1,5 @@ # 接口地址 -VITE_API_BASEURL = http://127.0.0.1:82 +VITE_API_BASEURL = http://127.0.0.1:8081 # 本地端口 VITE_PORT = 81 diff --git a/nl-vue/src/api/agv/carApi.js b/nl-vue/src/api/agv/carApi.js new file mode 100644 index 0000000..7f9974c --- /dev/null +++ b/nl-vue/src/api/agv/carApi.js @@ -0,0 +1,29 @@ +/** + * AGV车辆管理API + */ +import { baseRequest } from '@/utils/request' + +const request = (url, ...arg) => baseRequest(`/api/agv/` + url, ...arg) + +export default { + // 获取车辆信息列表 + list(data) { + return request('list', data, 'get') + }, + // 新增车辆信息 + save(data) { + return request('save', data) + }, + // 编辑车辆信息 + edit(data) { + return request('edit', data) + }, + // 删除车辆信息 + delete(data) { + return request('delete', data) + }, + // 获取车辆详情 + detail(data) { + return request('detail', data, 'get') + } +} diff --git a/nl-vue/src/views/nl_agv/car/form.vue b/nl-vue/src/views/nl_agv/car/form.vue new file mode 100644 index 0000000..aff8d26 --- /dev/null +++ b/nl-vue/src/views/nl_agv/car/form.vue @@ -0,0 +1,260 @@ + + + + + diff --git a/nl-vue/src/views/nl_agv/car/index.vue b/nl-vue/src/views/nl_agv/car/index.vue new file mode 100644 index 0000000..11b1859 --- /dev/null +++ b/nl-vue/src/views/nl_agv/car/index.vue @@ -0,0 +1,149 @@ + + + diff --git a/nl-web-app/pom.xml b/nl-web-app/pom.xml index 135366a..0cb2f13 100644 --- a/nl-web-app/pom.xml +++ b/nl-web-app/pom.xml @@ -54,6 +54,12 @@ 0.0.1-SNAPSHOT + + org.nl + nl-base-data + 0.0.1-SNAPSHOT + + org.nl nl-plugin-biz diff --git a/nl-web-app/src/main/java/org/nl/core/config/GlobalConfigure.java b/nl-web-app/src/main/java/org/nl/core/config/GlobalConfigure.java index 75d55bf..d195108 100644 --- a/nl-web-app/src/main/java/org/nl/core/config/GlobalConfigure.java +++ b/nl-web-app/src/main/java/org/nl/core/config/GlobalConfigure.java @@ -109,6 +109,10 @@ public class GlobalConfigure implements WebMvcConfigurer { "/", /*AGV*/ "/api/agv/status", + "/api/device/**", + "/api/agv/map/**", + "/api/localStorage/**", + "/api/baseData/point/status", "/api/language/**", /* 静态资源 */ "/favicon.ico", diff --git a/nl-web-app/src/main/resources/application.yml b/nl-web-app/src/main/resources/application.yml index 5718a8c..775e295 100644 --- a/nl-web-app/src/main/resources/application.yml +++ b/nl-web-app/src/main/resources/application.yml @@ -19,7 +19,7 @@ spring: public-key: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMWiTVtdXFVrgFHDDKELZM0SywkWY3KjugN90eY5Sogon1j8Y0ClPF7nx3FuE7pAeBKiv7ChIS0vvx/59WUpKmUCAwEAAQ== druid: initial-size: 5 - max-active: 20 + max-active: 208081 min-idle: 5 max-wait: 60000 pool-prepared-statements: true @@ -164,3 +164,16 @@ i18n: - zh - vi fallback-to-classpath: true +file: + mac: + path: /Users/mima0000/Desktop/file/ + avatar: /Users/mima0000/Desktop/avatar/ + linux: + path: /home/eladmin/file/ + avatar: /home/eladmin/avatar/ + windows: + path: C:\eladmin\file\ + avatar: C:\eladmin\avatar\ + # 文件大小 /M + maxSize: 100 + avatarMaxSize: 5 diff --git a/pom.xml b/pom.xml index 61e6c18..75ce2f6 100644 --- a/pom.xml +++ b/pom.xml @@ -30,6 +30,7 @@ nl-common nl-agv + nl-base-data nl-system