Repository: oooooomy/logistics Branch: master Commit: 6c1a42ce7ca6 Files: 131 Total size: 161.2 KB Directory structure: gitextract_5fj3_9c0/ ├── .gitignore ├── README.md ├── api/ │ ├── .gitignore │ ├── README.md │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── com/ │ │ └── example/ │ │ └── api/ │ │ ├── ApiApplication.java │ │ ├── annotation/ │ │ │ └── DisableBaseResponse.java │ │ ├── controller/ │ │ │ ├── AdminController.java │ │ │ ├── CommodityController.java │ │ │ ├── DistributionController.java │ │ │ ├── DriverController.java │ │ │ ├── EmailController.java │ │ │ ├── EmployeeController.java │ │ │ ├── InventoryController.java │ │ │ ├── RoleController.java │ │ │ ├── SaleController.java │ │ │ ├── UserController.java │ │ │ ├── VehicleController.java │ │ │ └── WarehouseController.java │ │ ├── handler/ │ │ │ ├── GlobalExceptionHandler.java │ │ │ └── GlobalResponseHandler.java │ │ ├── model/ │ │ │ ├── dto/ │ │ │ │ └── LoginDto.java │ │ │ ├── entity/ │ │ │ │ ├── Admin.java │ │ │ │ ├── Code.java │ │ │ │ ├── Commodity.java │ │ │ │ ├── Company.java │ │ │ │ ├── Distribution.java │ │ │ │ ├── Driver.java │ │ │ │ ├── Employee.java │ │ │ │ ├── Inventory.java │ │ │ │ ├── InventoryRecord.java │ │ │ │ ├── Sale.java │ │ │ │ ├── User.java │ │ │ │ ├── Vehicle.java │ │ │ │ └── Warehouse.java │ │ │ ├── enums/ │ │ │ │ ├── DistributionStatus.java │ │ │ │ └── Role.java │ │ │ ├── support/ │ │ │ │ └── ResponseResult.java │ │ │ └── vo/ │ │ │ └── CommodityChartVo.java │ │ ├── repository/ │ │ │ ├── AdminRepository.java │ │ │ ├── CodeRepository.java │ │ │ ├── CommodityRepository.java │ │ │ ├── DistributionRepository.java │ │ │ ├── DriverRepository.java │ │ │ ├── EmployeeRepository.java │ │ │ ├── InventoryRecordRepository.java │ │ │ ├── InventoryRepository.java │ │ │ ├── SaleRepository.java │ │ │ ├── UserRepository.java │ │ │ ├── VehicleRepository.java │ │ │ └── WareHouseRepository.java │ │ ├── security/ │ │ │ ├── JwtAuthorizationFilter.java │ │ │ └── SecurityConfiguration.java │ │ ├── service/ │ │ │ ├── AdminService.java │ │ │ ├── CommodityService.java │ │ │ ├── DistributionService.java │ │ │ ├── DriverService.java │ │ │ ├── EmailService.java │ │ │ ├── EmployeeService.java │ │ │ ├── InventoryRecordService.java │ │ │ ├── InventoryService.java │ │ │ ├── SaleService.java │ │ │ ├── UserService.java │ │ │ ├── VehicleService.java │ │ │ ├── WarehouseService.java │ │ │ └── impl/ │ │ │ ├── AdminServiceImpl.java │ │ │ ├── CommodityServiceImpl.java │ │ │ ├── DistributionServiceImpl.java │ │ │ ├── DriverServiceImpl.java │ │ │ ├── EmailServiceImpl.java │ │ │ ├── EmployeeServiceImpl.java │ │ │ ├── InventoryRecordServiceImpl.java │ │ │ ├── InventoryServiceImpl.java │ │ │ ├── SaleServiceImpl.java │ │ │ ├── UserServiceImpl.java │ │ │ ├── VehicleServiceImpl.java │ │ │ └── WarehouseServiceImpl.java │ │ └── utils/ │ │ ├── DataTimeUtil.java │ │ ├── JwtTokenUtil.java │ │ ├── RandomUtil.java │ │ └── ResponseUtil.java │ └── resources/ │ └── application.yaml └── web-app/ ├── .gitignore ├── README.md ├── package.json ├── public/ │ └── index.html └── src/ ├── App.vue ├── api/ │ ├── admin.js │ ├── commodity.js │ ├── distribution.js │ ├── driver.js │ ├── employee.js │ ├── inventory.js │ ├── role.js │ ├── sale.js │ ├── vehicle.js │ └── warehouse.js ├── components/ │ └── InventoryRecords.vue ├── layout/ │ ├── Aside.vue │ ├── Footer.vue │ ├── Header.vue │ ├── Index.vue │ └── Main.vue ├── main.js ├── router/ │ ├── index.js │ └── routes.js ├── store/ │ ├── index.js │ └── modules/ │ └── user.js ├── utils/ │ └── request.js └── views/ ├── Init.vue ├── Login.vue ├── Test.vue ├── analyze/ │ ├── In.vue │ └── Out.vue ├── basics/ │ ├── Commodity.vue │ ├── Company.vue │ ├── Details.vue │ ├── Employee.vue │ └── Warehouse.vue ├── delivery/ │ ├── Create.vue │ └── List.vue ├── error/ │ ├── 403.vue │ ├── 404.vue │ └── 500.vue ├── sale/ │ ├── Create.vue │ └── Record.vue ├── system/ │ ├── Admin.vue │ ├── Role.vue │ └── Security.vue └── transport/ ├── Driver.vue └── Vehicle.vue ================================================ FILE CONTENTS ================================================ ================================================ FILE: .gitignore ================================================ HELP.md target/ !.mvn/wrapper/maven-wrapper.jar !**/src/main/**/target/ !**/src/test/**/target/ ### STS ### .apt_generated .classpath .factorypath .project .settings .springBeans .sts4-cache ### IntelliJ IDEA ### .idea .DS_Store *.DS_Store *.iws *.iml *.ipr ### NetBeans ### /nbproject/private/ /nbbuild/ /dist/ /nbdist/ /.nb-gradle/ build/ !**/src/main/**/build/ !**/src/test/**/build/ ### VS Code ### .vscode/ ================================================ FILE: README.md ================================================ ## SpringBoot + Vue 的物流管理系统 #### 主要框架 - SpringBoot - SpringData - SpringSecurity - Vue2 ================================================ FILE: api/.gitignore ================================================ HELP.md target/ !.mvn/wrapper/maven-wrapper.jar !**/src/main/**/target/ !**/src/test/**/target/ ### STS ### .apt_generated .classpath .factorypath .project .settings .springBeans .sts4-cache ### IntelliJ IDEA ### .idea .DS_Store *.DS_Store *.iws *.iml *.ipr ### NetBeans ### /nbproject/private/ /nbbuild/ /dist/ /nbdist/ /.nb-gradle/ build/ !**/src/main/**/build/ !**/src/test/**/build/ ### VS Code ### .vscode/ ================================================ FILE: api/README.md ================================================ ## SpringBoot + Vue 的物流管理系统 #### 主要框架 - SpringBoot - SpringData - SpringSecurity - Vue2 ================================================ FILE: api/pom.xml ================================================ 4.0.0 com.example api 0.0.1-SNAPSHOT org.springframework.boot spring-boot-starter-parent 2.4.2 11 0.9.1 3.4.2 1.2.73 1.4.7.RELEASE org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-data-jpa org.springframework.boot spring-boot-starter-security org.springframework.boot spring-boot-starter-mail io.jsonwebtoken jjwt ${jwt.version} mysql mysql-connector-java runtime org.projectlombok lombok true com.alibaba fastjson ${fastjson.version} javax.xml.bind jaxb-api 2.3.0 com.sun.xml.bind jaxb-impl 2.3.0 com.sun.xml.bind jaxb-core 2.3.0 javax.activation activation 1.1.1 org.springframework.boot spring-boot-maven-plugin org.projectlombok lombok maven-ali http://maven.aliyun.com/nexus/content/groups/public// true true always fail ================================================ FILE: api/src/main/java/com/example/api/ApiApplication.java ================================================ package com.example.api; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class ApiApplication { public static void main(String[] args) { SpringApplication.run(ApiApplication.class, args); } } ================================================ FILE: api/src/main/java/com/example/api/annotation/DisableBaseResponse.java ================================================ package com.example.api.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * 加上注解后不统一封装返回 */ @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface DisableBaseResponse { } ================================================ FILE: api/src/main/java/com/example/api/controller/AdminController.java ================================================ package com.example.api.controller; import com.example.api.model.dto.LoginDto; import com.example.api.model.entity.Admin; import com.example.api.model.enums.Role; import com.example.api.repository.AdminRepository; import com.example.api.service.AdminService; import com.example.api.utils.JwtTokenUtil; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.HashMap; import java.util.List; import java.util.Map; @RestController @RequestMapping("/api/admin") public class AdminController { @Resource private AdminService adminService; @Resource private AdminRepository adminRepository; @GetMapping("hasInit") public boolean hasInit() { return adminRepository.existsAdminByRoles(Role.ROLE_SUPER_ADMIN.getValue()); } @PostMapping("/init") public Admin init(@RequestBody Admin admin) throws Exception { if (adminRepository.existsAdminByRoles(Role.ROLE_SUPER_ADMIN.getValue())) throw new Exception("初始化请求错误"); admin.setRoles(Role.ROLE_SUPER_ADMIN.getValue()); return adminService.save(admin); } @GetMapping("") @PreAuthorize("hasAnyRole('ROLE_SUPER_ADMIN' ,'ROLE_ADMIN')") public List findAll() { return adminService.findAll(); } @DeleteMapping("") @PreAuthorize("hasAnyRole('ROLE_SUPER_ADMIN' ,'ROLE_ADMIN')") public void delete(String id) { adminService.delete(id); } @PostMapping("") @PreAuthorize("hasAnyRole('ROLE_SUPER_ADMIN' ,'ROLE_ADMIN')") public Admin save(@RequestBody Admin admin) throws Exception { return adminService.save(admin); } @PostMapping("/login") public Map loginByEmail(String type, @RequestBody LoginDto dto) throws Exception { Map map = new HashMap<>(); Admin admin = type.equals("email") ? adminService.loginByEmail(dto) : adminService.loginByPassword(dto); String token = adminService.createToken(admin, dto.isRemember() ? JwtTokenUtil.REMEMBER_EXPIRATION_TIME : JwtTokenUtil.EXPIRATION_TIME); map.put("admin", admin); map.put("token", token); return map; } @GetMapping("/sendEmail") public void sendEmail(String email) throws Exception { adminService.sendEmail(email); } } ================================================ FILE: api/src/main/java/com/example/api/controller/CommodityController.java ================================================ package com.example.api.controller; import com.example.api.model.entity.Commodity; import com.example.api.service.CommodityService; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.List; @RestController @RequestMapping("/api/commodity") @PreAuthorize("hasAnyRole('ROLE_SUPER_ADMIN' ,'ROLE_COMMODITY')") public class CommodityController { @Resource private CommodityService commodityService; @PostMapping("") public Commodity save(@RequestBody Commodity commodity) { return commodityService.save(commodity); } @DeleteMapping("") public void delete(String id) { commodityService.delete(id); } @PutMapping("") public void update(@RequestBody Commodity commodity) { commodityService.update(commodity); } @GetMapping("") public List findAll() { return commodityService.findAll(); } @GetMapping("/search/{name}") public List findByLikeName(@PathVariable String name) { return commodityService.findAllByLikeName(name); } @GetMapping("/{id}") public Commodity findById(@PathVariable String id) { return commodityService.findById(id); } } ================================================ FILE: api/src/main/java/com/example/api/controller/DistributionController.java ================================================ package com.example.api.controller; import com.example.api.model.entity.Distribution; import com.example.api.repository.DriverRepository; import com.example.api.repository.VehicleRepository; import com.example.api.service.DistributionService; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.HashMap; import java.util.List; import java.util.Map; @RestController @RequestMapping("/api/distribution") public class DistributionController { @Resource private DistributionService distributionService; @Resource private DriverRepository driverRepository; @Resource private VehicleRepository vehicleRepository; @PostMapping("") public Distribution save(@RequestBody Distribution distribution) throws Exception { return distributionService.save(distribution); } @GetMapping("") public List findAll() { return distributionService.findAll(); } @GetMapping("can") public Map can() { Map map = new HashMap<>(); map.put("drivers", driverRepository.findAll()); map.put("vehicles", vehicleRepository.findAll()); return map; } } ================================================ FILE: api/src/main/java/com/example/api/controller/DriverController.java ================================================ package com.example.api.controller; import com.example.api.model.entity.Driver; import com.example.api.service.DriverService; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.List; @RestController @RequestMapping("/api/driver") public class DriverController { @Resource private DriverService driverService; @PostMapping("") public Driver save(@RequestBody Driver driver) { return driverService.save(driver); } @GetMapping("") public List findAll() { return driverService.findAll(); } @GetMapping("/{id}") public Driver findById(@PathVariable String id) { return driverService.findById(id); } @DeleteMapping("") public void delete(String id) { driverService.delete(id); } } ================================================ FILE: api/src/main/java/com/example/api/controller/EmailController.java ================================================ package com.example.api.controller; import com.example.api.utils.RandomUtil; import org.springframework.beans.factory.annotation.Value; import org.springframework.mail.MailException; import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; @RestController @RequestMapping("/api/email") public class EmailController { @Resource private JavaMailSender mailSender; @Value("${spring.mail.username}") private String from; @GetMapping("/send") public String send() { SimpleMailMessage message = new SimpleMailMessage(); //发件人 message.setFrom(from); //收件人 message.setTo("1729677089@qq.com"); message.setSubject("验证码"); message.setText("你的验证码为: " + RandomUtil.next() + " 十五分钟内有效"); try { mailSender.send(message); return "发送普通邮件成功"; } catch (MailException e) { e.printStackTrace(); return "邮件方失败"; } } } ================================================ FILE: api/src/main/java/com/example/api/controller/EmployeeController.java ================================================ package com.example.api.controller; import com.example.api.model.entity.Employee; import com.example.api.service.EmployeeService; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.List; @RestController @RequestMapping("/api/employee") @PreAuthorize("hasAnyRole('ROLE_SUPER_ADMIN' ,'ROLE_EMPLOYEE')") public class EmployeeController { @Resource private EmployeeService employeeService; @GetMapping("") public List findAll() { return employeeService.findAll(); } @GetMapping("/{id}") public Employee findById(@PathVariable String id) { return employeeService.findById(id); } @PostMapping("") public Employee save(@RequestBody Employee employee) { return employeeService.save(employee); } @PutMapping("") public void update(@RequestBody Employee employee) { employeeService.update(employee); } @DeleteMapping("") public void delete(String id) { employeeService.delete(id); } } ================================================ FILE: api/src/main/java/com/example/api/controller/InventoryController.java ================================================ package com.example.api.controller; import com.example.api.model.entity.Inventory; import com.example.api.model.entity.InventoryRecord; import com.example.api.model.vo.CommodityChartVo; import com.example.api.service.InventoryRecordService; import com.example.api.service.InventoryService; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.List; @RestController @RequestMapping("/api/inventory") public class InventoryController { @Resource private InventoryService inventoryService; @Resource private InventoryRecordService recordService; @GetMapping("") public List findAll() { return inventoryService.findAll(); } @GetMapping("analyze") public List analyze(Integer type) { return recordService.analyzeCommodity(type); } //指定仓库id //查询某个仓库的库存情况 @GetMapping("/warehouse/{id}") public List findByWarehouse(@PathVariable String id) { return inventoryService.findByWarehouseId(id); } //指定商品id //查询某个商品在所有仓库的库存 @GetMapping("/commodity/{id}") public List findByCommodity(@PathVariable String id) { return inventoryService.findByCommodityId(id); } //指定仓库id //查询某个仓库库内商品的出库入库记录 @GetMapping("/record/warehouse/{id}") public List findRecordByWarehouse(@PathVariable String id) { return recordService.findAllByWarehouseId(id); } //指定商品id //查询某个商品在所有仓库出库入库记录 @GetMapping("/record/commodity/{id}") public List findRecordByCommodity(@PathVariable String id) { return recordService.findAllByCommodityId(id); } @PostMapping("/in") public InventoryRecord in(@RequestBody InventoryRecord record) throws Exception { return recordService.in(record); } @PostMapping("/out") public InventoryRecord out(@RequestBody InventoryRecord record) throws Exception { return recordService.out(record); } } ================================================ FILE: api/src/main/java/com/example/api/controller/RoleController.java ================================================ package com.example.api.controller; import com.example.api.model.enums.Role; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/api/role") public class RoleController { @GetMapping("") public Role[] list() { return Role.ROLES; } } ================================================ FILE: api/src/main/java/com/example/api/controller/SaleController.java ================================================ package com.example.api.controller; import com.example.api.model.entity.Sale; import com.example.api.service.SaleService; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.List; @RestController @RequestMapping("/api/sale") @PreAuthorize("hasAnyRole('ROLE_SUPER_ADMIN' ,'ROLE_SALE')") public class SaleController { @Resource private SaleService saleService; @PostMapping("") public Sale save(@RequestBody Sale sale) { return saleService.save(sale); } @GetMapping("") public List findAll() { return saleService.findAll(); } @GetMapping("/search/{name}") public List search(@PathVariable String name) { return saleService.searchByCompany(name); } } ================================================ FILE: api/src/main/java/com/example/api/controller/UserController.java ================================================ package com.example.api.controller; import com.example.api.model.entity.User; import com.example.api.repository.UserRepository; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; @RestController @RequestMapping("/api/user") public class UserController { @Resource private UserRepository userRepository; } ================================================ FILE: api/src/main/java/com/example/api/controller/VehicleController.java ================================================ package com.example.api.controller; import com.example.api.annotation.DisableBaseResponse; import com.example.api.model.entity.Vehicle; import com.example.api.service.VehicleService; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.List; @RestController @RequestMapping("/api/vehicle") public class VehicleController { @Resource private VehicleService vehicleService; @PostMapping("") public Vehicle save(@RequestBody Vehicle vehicle) { return vehicleService.save(vehicle); } @GetMapping("") public List findAll() { return vehicleService.findAll(); } @GetMapping("/{id}") public Vehicle findById(@PathVariable String id) { return vehicleService.findById(id); } @DeleteMapping("") public void delete(String id) { vehicleService.delete(id); } } ================================================ FILE: api/src/main/java/com/example/api/controller/WarehouseController.java ================================================ package com.example.api.controller; import com.example.api.model.entity.Warehouse; import com.example.api.service.WarehouseService; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.List; @RestController @RequestMapping("/api/warehouse") @PreAuthorize("hasAnyRole('ROLE_SUPER_ADMIN' ,'ROLE_WAREHOUSE')") public class WarehouseController { @Resource private WarehouseService warehouseService; @PostMapping("") public Warehouse save(@RequestBody Warehouse warehouse) { return warehouseService.save(warehouse); } @GetMapping("") public List findAll() { return warehouseService.findAll(); } @DeleteMapping("") public void delete(String id) { warehouseService.delete(id); } } ================================================ FILE: api/src/main/java/com/example/api/handler/GlobalExceptionHandler.java ================================================ package com.example.api.handler; import com.example.api.model.support.ResponseResult; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.security.access.AccessDeniedException; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestControllerAdvice; /** * 捕获controller异常 * controller抛出异常执行下边的函数 * 返回Response写入ApiResult */ @ResponseBody @RestControllerAdvice public class GlobalExceptionHandler { private final Logger logger = LoggerFactory.getLogger(getClass()); @ExceptionHandler(value = Exception.class) public Object handleException(Exception e) { if (e.getClass().equals(AccessDeniedException.class)) { return new ResponseResult<>(403, "你没有访问权限"); } logger.warn(e.getMessage()); return new ResponseResult<>(400, e.getMessage()); } } ================================================ FILE: api/src/main/java/com/example/api/handler/GlobalResponseHandler.java ================================================ package com.example.api.handler; import com.example.api.annotation.DisableBaseResponse; import com.example.api.model.support.ResponseResult; import org.springframework.core.MethodParameter; import org.springframework.http.MediaType; import org.springframework.http.server.ServerHttpRequest; import org.springframework.http.server.ServerHttpResponse; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice; /** * 统一拦截Controller中所有方法的返回值 * 封装后返回ResponseResult */ @ControllerAdvice(value = "com.example.api.controller") public class GlobalResponseHandler implements ResponseBodyAdvice { @Override public boolean supports(MethodParameter methodParameter, Class c) { return !methodParameter.hasParameterAnnotation(DisableBaseResponse.class); } @Override public Object beforeBodyWrite(Object o, MethodParameter methodParameter, MediaType mediaType, Class aClass, ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) { return o == null ? new ResponseResult<>() : new ResponseResult<>(o); } } ================================================ FILE: api/src/main/java/com/example/api/model/dto/LoginDto.java ================================================ package com.example.api.model.dto; import lombok.Data; /** * 登录传输数据 */ @Data public class LoginDto { private String email; private String password; private String code; private boolean remember; } ================================================ FILE: api/src/main/java/com/example/api/model/entity/Admin.java ================================================ package com.example.api.model.entity; import lombok.Data; import lombok.NoArgsConstructor; import org.hibernate.annotations.GenericGenerator; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; /** * 管理员 */ @Data @Entity @NoArgsConstructor public class Admin { @Id @GeneratedValue(generator = "uuid2") @GenericGenerator(name = "uuid2", strategy = "org.hibernate.id.UUIDGenerator") private String id; private String email; private String password; private String roles; private String createAt; } ================================================ FILE: api/src/main/java/com/example/api/model/entity/Code.java ================================================ package com.example.api.model.entity; import lombok.Data; import lombok.NoArgsConstructor; import org.hibernate.annotations.GenericGenerator; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; /** * 验证码 */ @Data @Entity @NoArgsConstructor public class Code { @Id private String email; private String value; private long exp; public Code(String email, String value) { this.email = email; this.value = value; this.exp = System.currentTimeMillis() + 1000 * 60 * 15; } } ================================================ FILE: api/src/main/java/com/example/api/model/entity/Commodity.java ================================================ package com.example.api.model.entity; import lombok.Data; import lombok.NoArgsConstructor; import org.hibernate.annotations.GenericGenerator; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; /** * 商品 */ @Data @Entity @NoArgsConstructor public class Commodity { @Id @GeneratedValue(generator = "uuid2") @GenericGenerator(name = "uuid2", strategy = "org.hibernate.id.UUIDGenerator") private String id; private String name; private double price; private String description; private int count; private String createAt; private String updateAt; } ================================================ FILE: api/src/main/java/com/example/api/model/entity/Company.java ================================================ package com.example.api.model.entity; import lombok.Data; import lombok.NoArgsConstructor; import org.hibernate.annotations.GenericGenerator; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; /** * 往来公司 */ @Data @Entity @NoArgsConstructor public class Company { @Id @GeneratedValue(generator = "uuid2") @GenericGenerator(name = "uuid2", strategy = "org.hibernate.id.UUIDGenerator") private String id; } ================================================ FILE: api/src/main/java/com/example/api/model/entity/Distribution.java ================================================ package com.example.api.model.entity; import lombok.Data; import lombok.NoArgsConstructor; import org.hibernate.annotations.GenericGenerator; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; /** * 配送 */ @Data @Entity @NoArgsConstructor public class Distribution { @Id @GeneratedValue(generator = "uuid2") @GenericGenerator(name = "uuid2", strategy = "org.hibernate.id.UUIDGenerator") private String id; //司机id private String did; //车辆id private String vid; //司机 private String driver; //车牌号 private String number; //客户电话 private String phone; //客户地址 private String address; //加急处理 private boolean urgent; private String care; private String time; private Integer status; } ================================================ FILE: api/src/main/java/com/example/api/model/entity/Driver.java ================================================ package com.example.api.model.entity; import lombok.Data; import lombok.NoArgsConstructor; import org.hibernate.annotations.GenericGenerator; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; /** * 驾驶员 */ @Data @Entity @NoArgsConstructor public class Driver { @Id @GeneratedValue(generator = "uuid2") @GenericGenerator(name = "uuid2", strategy = "org.hibernate.id.UUIDGenerator") private String id; private String name; private String gender; private String phone; //家庭住址 private String address; //身份证号码 private String idCard; //驾驶证 private String license; //驾驶证分数 12分 private String score; //正在驾驶 private boolean driving; private String createAt; private String updateAt; } ================================================ FILE: api/src/main/java/com/example/api/model/entity/Employee.java ================================================ package com.example.api.model.entity; import lombok.Data; import lombok.NoArgsConstructor; import org.hibernate.annotations.GenericGenerator; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; /** * 员工 */ @Data @Entity @NoArgsConstructor public class Employee { @Id @GeneratedValue(generator = "uuid2") @GenericGenerator(name = "uuid2", strategy = "org.hibernate.id.UUIDGenerator") private String id; private String name; private String gender; private String phone; //家庭住址 private String address; //身份证号码 private String idCard; //部门 private String department; private String createAt; private String updateAt; } ================================================ FILE: api/src/main/java/com/example/api/model/entity/Inventory.java ================================================ package com.example.api.model.entity; import lombok.Data; import lombok.NoArgsConstructor; import org.hibernate.annotations.GenericGenerator; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; /** * 库存 */ @Data @Entity @NoArgsConstructor public class Inventory { @Id @GeneratedValue(generator = "uuid2") @GenericGenerator(name = "uuid2", strategy = "org.hibernate.id.UUIDGenerator") private String id; //仓库id private String wid; //商品信息id private String cid; //商品名 private String name; //所在位置区域 private String location; //数量 private Integer count; } ================================================ FILE: api/src/main/java/com/example/api/model/entity/InventoryRecord.java ================================================ package com.example.api.model.entity; import lombok.Data; import lombok.NoArgsConstructor; import org.hibernate.annotations.GenericGenerator; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; /** * 库存记录 出库 入库 */ @Data @Entity @NoArgsConstructor public class InventoryRecord { @Id @GeneratedValue(generator = "uuid2") @GenericGenerator(name = "uuid2", strategy = "org.hibernate.id.UUIDGenerator") private String id; //商品名 private String name; //仓库id private String wid; //商品信息id private String cid; private Integer count; //-1:出库 +1:入库 private Integer type; //描述信息 private String description; private String createAt; } ================================================ FILE: api/src/main/java/com/example/api/model/entity/Sale.java ================================================ package com.example.api.model.entity; import lombok.Data; import lombok.NoArgsConstructor; import org.hibernate.annotations.GenericGenerator; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; /** * 销售 */ @Data @Entity @NoArgsConstructor public class Sale { @Id @GeneratedValue(generator = "uuid2") @GenericGenerator(name = "uuid2", strategy = "org.hibernate.id.UUIDGenerator") private String id; private String company; private String number; private String commodity; private String count; private double price; private String phone; private String description; private boolean pay; private String createAt; } ================================================ FILE: api/src/main/java/com/example/api/model/entity/User.java ================================================ package com.example.api.model.entity; import lombok.Data; import lombok.NoArgsConstructor; import org.hibernate.annotations.GenericGenerator; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; /** * 用户 */ @Data @Entity @NoArgsConstructor public class User { @Id @GeneratedValue(generator = "uuid2") @GenericGenerator(name = "uuid2", strategy = "org.hibernate.id.UUIDGenerator") private String id; private String username; private String password; private String createAt; private String updateAt; } ================================================ FILE: api/src/main/java/com/example/api/model/entity/Vehicle.java ================================================ package com.example.api.model.entity; import lombok.Data; import lombok.NoArgsConstructor; import org.hibernate.annotations.GenericGenerator; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; /** * 车辆 */ @Data @Entity @NoArgsConstructor public class Vehicle { @Id @GeneratedValue(generator = "uuid2") @GenericGenerator(name = "uuid2", strategy = "org.hibernate.id.UUIDGenerator") private String id; //车牌号 private String number; //车辆类型 private String type; //是否正在运输 private boolean driving; private String createAt; } ================================================ FILE: api/src/main/java/com/example/api/model/entity/Warehouse.java ================================================ package com.example.api.model.entity; import lombok.Data; import lombok.NoArgsConstructor; import org.hibernate.annotations.GenericGenerator; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; /** * 仓库 */ @Data @Entity @NoArgsConstructor public class Warehouse { @Id @GeneratedValue(generator = "uuid2") @GenericGenerator(name = "uuid2", strategy = "org.hibernate.id.UUIDGenerator") private String id; //仓库名称 private String name; //仓库负责人 private String principle; private String createAt; } ================================================ FILE: api/src/main/java/com/example/api/model/enums/DistributionStatus.java ================================================ package com.example.api.model.enums; import lombok.Getter; import lombok.Setter; /** * 配送单状态 */ public enum DistributionStatus { //正在审核 REVIEWING(0), //审核成功 REVIEW_SUCCESS(1), //订单完成 END(2); @Getter @Setter private Integer code; DistributionStatus(Integer code) { this.code = code; } } ================================================ FILE: api/src/main/java/com/example/api/model/enums/Role.java ================================================ package com.example.api.model.enums; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Getter; @Getter @JsonFormat(shape = JsonFormat.Shape.OBJECT) public enum Role { //超级管理员 不对外提供添加此权限的方法 ROLE_SUPER_ADMIN("ROLE_SUPER_ADMIN", "超级管理员"), ROLE_ADMIN("ROLE_ADMIN", "操作员相关权限"), ROLE_COMMODITY("ROLE_COMMODITY", "商品相关权限"), ROLE_EMPLOYEE("ROLE_EMPLOYEE", "员工相关权限"), ROLE_SALE("ROLE_SALE", "销售相关权限"), ROLE_WAREHOUSE("ROLE_WAREHOUSE", "仓库相关权限"); private final String value; private final String description; public static final Role[] ROLES = { ROLE_ADMIN, ROLE_COMMODITY, ROLE_EMPLOYEE, ROLE_SALE, ROLE_WAREHOUSE }; Role(String value, String description) { this.value = value; this.description = description; } } ================================================ FILE: api/src/main/java/com/example/api/model/support/ResponseResult.java ================================================ package com.example.api.model.support; import lombok.Data; @Data public class ResponseResult { private Integer code; private boolean status; private String msg; private T data; public ResponseResult() { this.code = 200; this.status = true; this.msg = null; this.data = null; } //不附带msg返回数据 public ResponseResult(T data) { this.code = 200; this.status = true; this.msg = null; this.data = data; } //默认附带msg和data public ResponseResult(String msg, T data) { this.code = 200; this.status = true; this.msg = msg; this.data = data; } //默认的错误返回 public ResponseResult(Integer code, String msg) { this.code = code; this.status = false; this.msg = msg; this.data = null; } } ================================================ FILE: api/src/main/java/com/example/api/model/vo/CommodityChartVo.java ================================================ package com.example.api.model.vo; import lombok.AllArgsConstructor; import lombok.Data; @Data @AllArgsConstructor public class CommodityChartVo { //商品名 private Integer value; //数量 private String name; } ================================================ FILE: api/src/main/java/com/example/api/repository/AdminRepository.java ================================================ package com.example.api.repository; import com.example.api.model.entity.Admin; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @Repository public interface AdminRepository extends JpaRepository { Admin findAdminByEmailAndPassword(String email, String password); Admin findAdminByEmail(String email); boolean existsAdminByRoles(String roles); } ================================================ FILE: api/src/main/java/com/example/api/repository/CodeRepository.java ================================================ package com.example.api.repository; import com.example.api.model.entity.Code; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @Repository public interface CodeRepository extends JpaRepository { Code findByEmailAndValue(String email, String value); } ================================================ FILE: api/src/main/java/com/example/api/repository/CommodityRepository.java ================================================ package com.example.api.repository; import com.example.api.model.entity.Commodity; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; import java.util.List; @Repository public interface CommodityRepository extends JpaRepository { Commodity findByName(String name); List findByNameLike(String name); } ================================================ FILE: api/src/main/java/com/example/api/repository/DistributionRepository.java ================================================ package com.example.api.repository; import com.example.api.model.entity.Distribution; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @Repository public interface DistributionRepository extends JpaRepository { } ================================================ FILE: api/src/main/java/com/example/api/repository/DriverRepository.java ================================================ package com.example.api.repository; import com.example.api.model.entity.Driver; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Transactional; import java.util.List; @Repository public interface DriverRepository extends JpaRepository { @Modifying @Transactional @Query("update Driver d set d.driving = ?1 where d.id = ?2") void updateDriving(boolean driving, String id); List findAllByDriving(boolean driving); } ================================================ FILE: api/src/main/java/com/example/api/repository/EmployeeRepository.java ================================================ package com.example.api.repository; import com.example.api.model.entity.Employee; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @Repository public interface EmployeeRepository extends JpaRepository { } ================================================ FILE: api/src/main/java/com/example/api/repository/InventoryRecordRepository.java ================================================ package com.example.api.repository; import com.example.api.model.entity.InventoryRecord; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; import java.util.List; @Repository public interface InventoryRecordRepository extends JpaRepository { List findAllByWid(String wid); List findAllByType(Integer type); List findAllByCid(String cid); } ================================================ FILE: api/src/main/java/com/example/api/repository/InventoryRepository.java ================================================ package com.example.api.repository; import com.example.api.model.entity.Inventory; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; import java.util.List; @Repository public interface InventoryRepository extends JpaRepository { Inventory findByWidAndCid(String wid, String cid); List findAllByCid(String cid); List findAllByWid(String wid); } ================================================ FILE: api/src/main/java/com/example/api/repository/SaleRepository.java ================================================ package com.example.api.repository; import com.example.api.model.entity.Sale; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; import java.util.List; @Repository public interface SaleRepository extends JpaRepository { List findAllByCompanyLike(String name); } ================================================ FILE: api/src/main/java/com/example/api/repository/UserRepository.java ================================================ package com.example.api.repository; import com.example.api.model.entity.User; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @Repository public interface UserRepository extends JpaRepository { } ================================================ FILE: api/src/main/java/com/example/api/repository/VehicleRepository.java ================================================ package com.example.api.repository; import com.example.api.model.entity.Vehicle; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Transactional; import java.util.List; @Repository public interface VehicleRepository extends JpaRepository { @Modifying @Transactional @Query("update Vehicle v set v.driving = ?1 where v.id = ?2") void updateDriving(boolean driving, String id); List findAllByDriving(boolean driving); } ================================================ FILE: api/src/main/java/com/example/api/repository/WareHouseRepository.java ================================================ package com.example.api.repository; import com.example.api.model.entity.Warehouse; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @Repository public interface WareHouseRepository extends JpaRepository { } ================================================ FILE: api/src/main/java/com/example/api/security/JwtAuthorizationFilter.java ================================================ package com.example.api.security; import com.example.api.model.support.ResponseResult; import com.example.api.utils.JwtTokenUtil; import com.example.api.utils.ResponseUtil; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.web.authentication.www.BasicAuthenticationFilter; import javax.servlet.FilterChain; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.ArrayList; import java.util.List; /** * 从Request的Authorization Header 获取Jwt * 解析Jwt授权发放token */ public class JwtAuthorizationFilter extends BasicAuthenticationFilter { public JwtAuthorizationFilter(AuthenticationManager authenticationManager) { super(authenticationManager); } @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException { //从Request Header 取出Token String token = request.getHeader(JwtTokenUtil.TOKEN_HEADER); //Token为空放行 //如果接下来进入的URL不是公共的地址SpringSecurity会返回403的错误 if (!JwtTokenUtil.checkToken(token)){ chain.doFilter(request, response); return; } //判断JWT Token是否过期 if (JwtTokenUtil.isExpiration(token)) { ResponseUtil.writeJson(response, new ResponseResult<>(403, "令牌已过期, 请重新登录")); return; } //解析token String username = JwtTokenUtil.getUsername(token); List tokenRoles = JwtTokenUtil.getTokenRoles(token); ArrayList roles = new ArrayList<>(); for (String role : tokenRoles) { roles.add(new SimpleGrantedAuthority(role)); } //向SpringSecurity的Context中加入认证信息 SecurityContextHolder.getContext().setAuthentication( new UsernamePasswordAuthenticationToken(username,null, roles)); super.doFilterInternal(request, response, chain); } } ================================================ FILE: api/src/main/java/com/example/api/security/SecurityConfiguration.java ================================================ package com.example.api.security; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.config.http.SessionCreationPolicy; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.CorsConfigurationSource; import org.springframework.web.cors.UrlBasedCorsConfigurationSource; @Configuration @EnableGlobalMethodSecurity(prePostEnabled = true) public class SecurityConfiguration extends WebSecurityConfigurerAdapter { @Bean public BCryptPasswordEncoder bCryptPasswordEncoder() { return new BCryptPasswordEncoder(); } /** * HTTP验证规则 * * @param http h * @throws Exception e */ @Override protected void configure(HttpSecurity http) throws Exception { //开启跨域 http.csrf().disable().cors(); //禁用session http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS); //添加自定义的jwt过滤器 http.addFilter(new JwtAuthorizationFilter(authenticationManagerBean())); } /** * SpringSecurity有默认的跨域配置 会无法放行RequestHeader带有"Authorization"请求 * 防止前端请求api报出cors error * * @return * */ @Bean CorsConfigurationSource corsConfigurationSource() { final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); final CorsConfiguration corsConfiguration = new CorsConfiguration(); corsConfiguration.addAllowedHeader("*"); corsConfiguration.addAllowedHeader("DELETE"); corsConfiguration.addAllowedMethod("*"); corsConfiguration.addAllowedOrigin("*"); source.registerCorsConfiguration("/**", corsConfiguration); return source; } } ================================================ FILE: api/src/main/java/com/example/api/service/AdminService.java ================================================ package com.example.api.service; import com.example.api.model.dto.LoginDto; import com.example.api.model.entity.Admin; import java.util.List; public interface AdminService { Admin save(Admin admin) throws Exception; Admin findById(String id); void sendEmail(String email) throws Exception; Admin loginByPassword(LoginDto dto) throws Exception; Admin loginByEmail(LoginDto dto) throws Exception; List findAll(); //生成token String createToken(Admin admin, long exp); void delete(String id); } ================================================ FILE: api/src/main/java/com/example/api/service/CommodityService.java ================================================ package com.example.api.service; import com.example.api.model.entity.Commodity; import java.util.List; public interface CommodityService { Commodity save(Commodity commodity); void update(Commodity commodity); void delete(String id); Commodity findById(String id); List findAll(); List findAllByLikeName(String name); } ================================================ FILE: api/src/main/java/com/example/api/service/DistributionService.java ================================================ package com.example.api.service; import com.example.api.model.entity.Distribution; import java.util.List; public interface DistributionService { Distribution save(Distribution distribution) throws Exception; List findAll(); } ================================================ FILE: api/src/main/java/com/example/api/service/DriverService.java ================================================ package com.example.api.service; import com.example.api.model.entity.Driver; import java.util.List; public interface DriverService { Driver save(Driver driver); void update(Driver driver); void delete(String id); Driver findById(String id); List findAll(); } ================================================ FILE: api/src/main/java/com/example/api/service/EmailService.java ================================================ package com.example.api.service; import org.springframework.mail.MailException; public interface EmailService { //发送验证码 void sendVerificationCode(String email) throws MailException; //检验验证码 boolean checkVerificationCode(String email, String code); } ================================================ FILE: api/src/main/java/com/example/api/service/EmployeeService.java ================================================ package com.example.api.service; import com.example.api.model.entity.Employee; import java.util.List; public interface EmployeeService { Employee save(Employee employee); void update(Employee employee); void delete(String id); Employee findById(String id); List findAll(); } ================================================ FILE: api/src/main/java/com/example/api/service/InventoryRecordService.java ================================================ package com.example.api.service; import com.example.api.model.entity.InventoryRecord; import com.example.api.model.vo.CommodityChartVo; import java.util.List; public interface InventoryRecordService { //出入库排行统计 List analyzeCommodity(Integer type); List findAllByWarehouseId(String wid); List findAllByCommodityId(String cid); //出库 InventoryRecord out(InventoryRecord record) throws Exception; //入库 InventoryRecord in(InventoryRecord record) throws Exception; } ================================================ FILE: api/src/main/java/com/example/api/service/InventoryService.java ================================================ package com.example.api.service; import com.example.api.model.entity.Inventory; import java.util.List; public interface InventoryService { Inventory save(Inventory inventory); List findAll(); List findByCommodityId(String cid); List findByWarehouseId(String wid); } ================================================ FILE: api/src/main/java/com/example/api/service/SaleService.java ================================================ package com.example.api.service; import com.example.api.model.entity.Sale; import java.util.List; public interface SaleService { Sale save(Sale sale); List findAll(); List searchByCompany(String name); } ================================================ FILE: api/src/main/java/com/example/api/service/UserService.java ================================================ package com.example.api.service; public interface UserService { } ================================================ FILE: api/src/main/java/com/example/api/service/VehicleService.java ================================================ package com.example.api.service; import com.example.api.model.entity.Vehicle; import java.util.List; public interface VehicleService { Vehicle save(Vehicle vehicle); void update(Vehicle vehicle); void delete(String id); Vehicle findById(String id); List findAll(); } ================================================ FILE: api/src/main/java/com/example/api/service/WarehouseService.java ================================================ package com.example.api.service; import com.example.api.model.entity.Warehouse; import java.util.List; public interface WarehouseService { Warehouse save(Warehouse warehouse); List findAll(); void delete(String id); } ================================================ FILE: api/src/main/java/com/example/api/service/impl/AdminServiceImpl.java ================================================ package com.example.api.service.impl; import com.example.api.model.dto.LoginDto; import com.example.api.model.entity.Admin; import com.example.api.repository.AdminRepository; import com.example.api.service.AdminService; import com.example.api.service.EmailService; import com.example.api.utils.DataTimeUtil; import com.example.api.utils.JwtTokenUtil; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.List; @Service public class AdminServiceImpl implements AdminService { @Resource private AdminRepository adminRepository; @Resource private EmailService emailService; @Override public Admin save(Admin admin) throws Exception { if (admin.getEmail().length() < 8 || admin.getPassword().length() < 5) throw new Exception("请求参数异常"); admin.setCreateAt(DataTimeUtil.getNowTimeString()); return adminRepository.save(admin); } @Override public Admin findById(String id) { return adminRepository.findById(id).orElse(null); } @Override public void sendEmail(String email) throws Exception { Admin admin = adminRepository.findAdminByEmail(email); if (admin == null) throw new Exception("不存在的邮箱账户"); emailService.sendVerificationCode(email); } @Override public Admin loginByPassword(LoginDto dto) throws Exception { Admin one = adminRepository.findAdminByEmailAndPassword(dto.getEmail(), dto.getPassword()); if (one == null) throw new Exception("用户名或密码错误"); return one; } @Override public Admin loginByEmail(LoginDto dto) throws Exception { boolean status = emailService.checkVerificationCode(dto.getEmail(), dto.getCode()); if (!status) throw new Exception("验证码错误"); return adminRepository.findAdminByEmail(dto.getEmail()); } @Override public List findAll() { return adminRepository.findAll(); } @Override public String createToken(Admin admin, long exp) { String rolesString = admin.getRoles(); String[] roles = rolesString != null ? rolesString.split(";") : null; return JwtTokenUtil.createToken(admin.getEmail(), roles, exp); } @Override public void delete(String id) { adminRepository.deleteById(id); } } ================================================ FILE: api/src/main/java/com/example/api/service/impl/CommodityServiceImpl.java ================================================ package com.example.api.service.impl; import com.example.api.model.entity.Commodity; import com.example.api.repository.CommodityRepository; import com.example.api.service.CommodityService; import com.example.api.utils.DataTimeUtil; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.List; @Service public class CommodityServiceImpl implements CommodityService { @Resource private CommodityRepository commodityRepository; @Override public Commodity save(Commodity commodity) { commodity.setCreateAt(DataTimeUtil.getNowTimeString()); return commodityRepository.save(commodity); } @Override public void update(Commodity commodity) { commodity.setUpdateAt(DataTimeUtil.getNowTimeString()); commodityRepository.save(commodity); } @Override public void delete(String id) { commodityRepository.deleteById(id); } @Override public Commodity findById(String id) { return commodityRepository.findById(id).orElse(null); } @Override public List findAll() { return commodityRepository.findAll(); } @Override public List findAllByLikeName(String name) { return commodityRepository.findByNameLike("%" + name + "%"); } } ================================================ FILE: api/src/main/java/com/example/api/service/impl/DistributionServiceImpl.java ================================================ package com.example.api.service.impl; import com.example.api.model.entity.Distribution; import com.example.api.model.entity.Driver; import com.example.api.model.entity.Vehicle; import com.example.api.repository.DistributionRepository; import com.example.api.repository.DriverRepository; import com.example.api.repository.VehicleRepository; import com.example.api.service.DistributionService; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.List; import java.util.Optional; @Service public class DistributionServiceImpl implements DistributionService { @Resource private DistributionRepository distributionRepository; @Resource private DriverRepository driverRepository; @Resource private VehicleRepository vehicleRepository; @Override public Distribution save(Distribution distribution) throws Exception { if (distributionRepository.findById(distribution.getId()).isEmpty()) { Optional driver = driverRepository.findById(distribution.getDid()); Optional vehicle = vehicleRepository.findById(distribution.getVid()); if (driver.isEmpty() || vehicle.isEmpty()) throw new Exception("请求参数错误"); if (driver.get().isDriving() || vehicle.get().isDriving()) throw new Exception("司机或货车状态不可用"); driverRepository.updateDriving(true, distribution.getDid()); vehicleRepository.updateDriving(true, distribution.getVid()); } return distributionRepository.save(distribution); } @Override public List findAll() { return distributionRepository.findAll(); } } ================================================ FILE: api/src/main/java/com/example/api/service/impl/DriverServiceImpl.java ================================================ package com.example.api.service.impl; import com.example.api.model.entity.Driver; import com.example.api.repository.DriverRepository; import com.example.api.service.DriverService; import com.example.api.utils.DataTimeUtil; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.List; @Service public class DriverServiceImpl implements DriverService { @Resource private DriverRepository driverRepository; @Override public Driver save(Driver driver) { driver.setCreateAt(DataTimeUtil.getNowTimeString()); return driverRepository.save(driver); } @Override public void update(Driver driver) { driver.setUpdateAt(DataTimeUtil.getNowTimeString()); driverRepository.save(driver); } @Override public void delete(String id) { driverRepository.deleteById(id); } @Override public Driver findById(String id) { return driverRepository.findById(id).orElse(null); } @Override public List findAll() { return driverRepository.findAll(); } } ================================================ FILE: api/src/main/java/com/example/api/service/impl/EmailServiceImpl.java ================================================ package com.example.api.service.impl; import com.example.api.model.entity.Code; import com.example.api.repository.CodeRepository; import com.example.api.service.EmailService; import com.example.api.utils.RandomUtil; import org.springframework.beans.factory.annotation.Value; import org.springframework.mail.MailException; import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.stereotype.Service; import javax.annotation.Resource; @Service public class EmailServiceImpl implements EmailService { @Resource private CodeRepository codeRepository; @Resource private JavaMailSender mailSender; @Value("${spring.mail.username}") private String from; @Override public void sendVerificationCode(String email) throws MailException { SimpleMailMessage message = new SimpleMailMessage(); message.setFrom(from); message.setTo(email); message.setSubject("验证码"); String value = RandomUtil.next(); message.setText("你的验证码为: " + value + " 十五分钟内有效"); mailSender.send(message); //保存验证码 //同一主键的email为update操作 codeRepository.save(new Code(email, value)); } @Override public boolean checkVerificationCode(String email, String value) { Code code = codeRepository.findByEmailAndValue(email, value); if (code != null && code.getExp() > System.currentTimeMillis()) { //登陆成功删除验证码 codeRepository.delete(code); return true; } return false; } } ================================================ FILE: api/src/main/java/com/example/api/service/impl/EmployeeServiceImpl.java ================================================ package com.example.api.service.impl; import com.example.api.model.entity.Employee; import com.example.api.repository.EmployeeRepository; import com.example.api.service.EmployeeService; import com.example.api.utils.DataTimeUtil; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.List; @Service public class EmployeeServiceImpl implements EmployeeService { @Resource private EmployeeRepository employeeRepository; @Override public Employee save(Employee employee) { employee.setCreateAt(DataTimeUtil.getNowTimeString()); return employeeRepository.save(employee); } @Override public void update(Employee employee) { employee.setUpdateAt(DataTimeUtil.getNowTimeString()); employeeRepository.save(employee); } @Override public void delete(String id) { employeeRepository.deleteById(id); } @Override public Employee findById(String id) { return employeeRepository.findById(id).orElse(null); } @Override public List findAll() { return employeeRepository.findAll(); } } ================================================ FILE: api/src/main/java/com/example/api/service/impl/InventoryRecordServiceImpl.java ================================================ package com.example.api.service.impl; import com.example.api.model.entity.Commodity; import com.example.api.model.entity.Inventory; import com.example.api.model.entity.InventoryRecord; import com.example.api.model.vo.CommodityChartVo; import com.example.api.repository.CommodityRepository; import com.example.api.repository.InventoryRecordRepository; import com.example.api.repository.InventoryRepository; import com.example.api.service.InventoryRecordService; import com.example.api.utils.DataTimeUtil; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.*; @Service public class InventoryRecordServiceImpl implements InventoryRecordService { @Resource private InventoryRepository inventoryRepository; @Resource private CommodityRepository commodityRepository; @Resource private InventoryRecordRepository recordRepository; @Override public List analyzeCommodity(Integer type) { List result = new ArrayList<>(); List all = recordRepository.findAllByType(type); Map map = new HashMap<>(); for (InventoryRecord r : all) { if (map.containsKey(r.getName())) { map.put(r.getName(), map.get(r.getName()) + r.getCount()); } else { map.put(r.getName(), r.getCount()); } } for (String key : map.keySet()) { result.add(new CommodityChartVo(map.get(key), key)); } return result; } @Override public List findAllByWarehouseId(String wid) { return recordRepository.findAllByWid(wid); } @Override public List findAllByCommodityId(String cid) { return recordRepository.findAllByCid(cid); } @Override public InventoryRecord out(InventoryRecord record) throws Exception { //查找当前商品在该仓库的库存 Inventory inventory = inventoryRepository.findByWidAndCid(record.getWid(), record.getCid()); //查询结果为空 if (inventory == null) throw new Exception("仓库内不存在该商品"); //比较库存 if (inventory.getCount() < record.getCount()) throw new Exception("出库失败,库存数量不足"); Optional optional = commodityRepository.findById(record.getCid()); if (optional.isEmpty()) { throw new Exception("不存在的商品id"); } Commodity commodity = optional.get(); commodity.setCount(commodity.getCount() - record.getCount()); commodityRepository.save(optional.get()); inventory.setCount(inventory.getCount() - record.getCount()); inventoryRepository.save(inventory); record.setCreateAt(DataTimeUtil.getNowTimeString()); record.setType(-1); return recordRepository.save(record); } @Override public InventoryRecord in(InventoryRecord record) throws Exception { Optional optional = commodityRepository.findById(record.getCid()); if (optional.isEmpty()) { throw new Exception("不存在的商品id"); } Commodity commodity = optional.get(); commodity.setCount(commodity.getCount() + record.getCount()); commodityRepository.save(optional.get()); //查找当前商品在该仓库的库存 Inventory inventory = inventoryRepository.findByWidAndCid(record.getWid(), record.getCid()); //查询结果为空 if (inventory == null) { //新建该商品库存信息 inventory = new Inventory(); inventory.setCid(record.getCid()); inventory.setWid(record.getWid()); inventory.setCount(0); inventory.setName(record.getName()); } inventory.setCount(inventory.getCount() + record.getCount()); inventoryRepository.save(inventory); record.setCreateAt(DataTimeUtil.getNowTimeString()); record.setType(+1); return recordRepository.save(record); } } ================================================ FILE: api/src/main/java/com/example/api/service/impl/InventoryServiceImpl.java ================================================ package com.example.api.service.impl; import com.example.api.model.entity.Inventory; import com.example.api.repository.InventoryRepository; import com.example.api.service.InventoryService; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.List; @Service public class InventoryServiceImpl implements InventoryService { @Resource private InventoryRepository inventoryRepository; @Override public Inventory save(Inventory inventory) { return inventoryRepository.save(inventory); } @Override public List findAll() { return inventoryRepository.findAll(); } @Override public List findByCommodityId(String cid) { return inventoryRepository.findAllByCid(cid); } @Override public List findByWarehouseId(String wid) { return inventoryRepository.findAllByWid(wid); } } ================================================ FILE: api/src/main/java/com/example/api/service/impl/SaleServiceImpl.java ================================================ package com.example.api.service.impl; import com.example.api.model.entity.Sale; import com.example.api.repository.SaleRepository; import com.example.api.service.SaleService; import com.example.api.utils.DataTimeUtil; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.List; @Service public class SaleServiceImpl implements SaleService { @Resource private SaleRepository saleRepository; @Override public Sale save(Sale sale) { sale.setCreateAt(DataTimeUtil.getNowTimeString()); return saleRepository.save(sale); } @Override public List findAll() { return saleRepository.findAll(); } @Override public List searchByCompany(String name) { return saleRepository.findAllByCompanyLike(name); } } ================================================ FILE: api/src/main/java/com/example/api/service/impl/UserServiceImpl.java ================================================ package com.example.api.service.impl; import com.example.api.service.UserService; import org.springframework.stereotype.Service; @Service public class UserServiceImpl implements UserService { } ================================================ FILE: api/src/main/java/com/example/api/service/impl/VehicleServiceImpl.java ================================================ package com.example.api.service.impl; import com.example.api.model.entity.Vehicle; import com.example.api.repository.VehicleRepository; import com.example.api.service.VehicleService; import com.example.api.utils.DataTimeUtil; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.List; @Service public class VehicleServiceImpl implements VehicleService { @Resource private VehicleRepository vehicleRepository; @Override public Vehicle save(Vehicle vehicle) { vehicle.setCreateAt(DataTimeUtil.getNowTimeString()); return vehicleRepository.save(vehicle); } @Override public void update(Vehicle vehicle) { vehicleRepository.save(vehicle); } @Override public void delete(String id) { vehicleRepository.deleteById(id); } @Override public Vehicle findById(String id) { return vehicleRepository.findById(id).orElse(null); } @Override public List findAll() { return vehicleRepository.findAll(); } } ================================================ FILE: api/src/main/java/com/example/api/service/impl/WarehouseServiceImpl.java ================================================ package com.example.api.service.impl; import com.example.api.model.entity.Warehouse; import com.example.api.repository.WareHouseRepository; import com.example.api.service.WarehouseService; import com.example.api.utils.DataTimeUtil; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.List; @Service public class WarehouseServiceImpl implements WarehouseService { @Resource private WareHouseRepository wareHouseRepository; @Override public Warehouse save(Warehouse warehouse) { warehouse.setCreateAt(DataTimeUtil.getNowTimeString()); return wareHouseRepository.save(warehouse); } @Override public List findAll() { return wareHouseRepository.findAll(); } @Override public void delete(String id) { wareHouseRepository.deleteById(id); } } ================================================ FILE: api/src/main/java/com/example/api/utils/DataTimeUtil.java ================================================ package com.example.api.utils; import java.text.ParseException; import java.text.SimpleDateFormat; public final class DataTimeUtil { public static String getNowTimeString() { SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return df.format(System.currentTimeMillis()); } public static long parseTimeStamp(String s) { SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); long t = 0; try { t = df.parse(s).getTime(); } catch (ParseException e) { e.printStackTrace(); } return t; } public static boolean isAfterNow(String time) { SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); long t = 0; try { t = df.parse(time).getTime(); } catch (ParseException e) { e.printStackTrace(); } return t > System.currentTimeMillis(); } } ================================================ FILE: api/src/main/java/com/example/api/utils/JwtTokenUtil.java ================================================ package com.example.api.utils; import io.jsonwebtoken.Claims; import io.jsonwebtoken.ExpiredJwtException; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; import java.util.*; public final class JwtTokenUtil { //在http header中的名字 public final static String TOKEN_HEADER = "Authorization"; //一个星期过期 public final static long REMEMBER_EXPIRATION_TIME = 1000 * 60 * 60 * 24 * 7; //一天过期 public final static long EXPIRATION_TIME = 1000 * 60 * 60 * 24; // 应用密钥 private static final String APP_SECRET = "logistics.api"; private static final String PREFIX = "logistics:"; // 角色权限声明 private static final String ROLE_CLAIMS = "roles"; //检验token是否合法 public static boolean checkToken(String token) { if ("null".equals(token) || token == null || "".equals(token)) return false; return token.startsWith(PREFIX); } /** * 生成Token */ public static String createToken(String username, String[] roles, long expiration) { Map map = new HashMap<>(); map.put(ROLE_CLAIMS, roles); return PREFIX + Jwts.builder() .setSubject(username) .setClaims(map) .setIssuedAt(new Date()) .setExpiration(new Date(System.currentTimeMillis() + expiration)) .signWith(SignatureAlgorithm.HS256, APP_SECRET) .compact(); } /** * 获取token body */ private static Claims getTokenClaims(String token) { token = token.substring(PREFIX.length()); Claims claims; try { claims = Jwts.parser() .setSigningKey(APP_SECRET) .parseClaimsJws(token) .getBody(); } catch (ExpiredJwtException e) { claims = e.getClaims(); } return claims; } /** * 从Token中获取username */ public static String getUsername(String token) { return getTokenClaims(token).getSubject(); } /** * 从Token中获取用户角色 */ public static List getTokenRoles(String token) { List roles = new ArrayList<>(); Object object = getTokenClaims(token).get(ROLE_CLAIMS); if (object instanceof ArrayList) { for (Object o : (List) object) { roles.add((String) o); } } return roles; } /** * 校验Token是否过期 */ public static boolean isExpiration(String token) { return getTokenClaims(token).getExpiration().before(new Date()); } } ================================================ FILE: api/src/main/java/com/example/api/utils/RandomUtil.java ================================================ package com.example.api.utils; import java.util.Random; public final class RandomUtil { public static String next() { StringBuilder builder = new StringBuilder(); Random random = new Random(); for (int i = 0; i < 6; i++) { builder.append(random.nextInt(10)); } return builder.toString(); } } ================================================ FILE: api/src/main/java/com/example/api/utils/ResponseUtil.java ================================================ package com.example.api.utils; import com.alibaba.fastjson.JSON; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; public final class ResponseUtil { public static void writeJson(HttpServletResponse response, Object o) { response.setHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Access-Control-Allow-Credentials", "true"); response.setHeader("Access-Control-Allow-Methods", "POST, GET, PATCH, DELETE, PUT"); response.setHeader("Access-Control-Max-Age", "3600"); response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); response.setContentType("application/json;charset=utf-8"); response.setStatus(200); try { PrintWriter writer = response.getWriter(); writer.write(JSON.toJSONString(o)); writer.flush(); writer.close(); } catch (IOException e) { e.printStackTrace(); } } } ================================================ FILE: api/src/main/resources/application.yaml ================================================ server: port: 8080 spring: mail: host: smtp.163.com protocol: smtp default-encoding: UTF-8 #发件人 username: gaoyuanming_1@163.com #授权码 password: a123456 datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/logistics?characterEncoding=utf8&serverTimezone=UTC username: root password: abc521521521 jpa: hibernate: ddl-auto: update open-in-view: false ================================================ FILE: web-app/.gitignore ================================================ .DS_Store node_modules /dist # local env files .env.local .env.*.local # Log files npm-debug.log* yarn-debug.log* yarn-error.log* pnpm-debug.log* # Editor directories and files .idea .vscode *.suo *.ntvs* *.njsproj *.sln *.sw? ================================================ FILE: web-app/README.md ================================================ # Antd Vue Admin 基础模版 ### 实现的基本功能 - vuex封装关于User的部分 - vuex + vue-router 的路由卫士 - nprogress每次路由变化的进度条显示 - layout公共布局 - axios简单封装 utils/request.js ### 页面预览 - 首页 ![Home](https://gaoyuanming-photo.oss-cn-beijing.aliyuncs.com/simple-antd-vue-admin/%E5%B1%8F%E5%B9%95%E5%BF%AB%E7%85%A7%202021-03-25%20%E4%B8%8B%E5%8D%888.07.51.png) - 登陆页 ![Home](https://gaoyuanming-photo.oss-cn-beijing.aliyuncs.com/simple-antd-vue-admin/%E5%B1%8F%E5%B9%95%E5%BF%AB%E7%85%A7%202021-03-25%20%E4%B8%8B%E5%8D%888.08.13.png) ### Project setup ``` npm install ``` ### Compiles and hot-reloads for development ``` npm run serve ``` ### Compiles and minifies for production ``` npm run build ``` ### Customize configuration See [Configuration Reference](https://cli.vuejs.org/config/). ================================================ FILE: web-app/package.json ================================================ { "name": "wab-app", "version": "0.1.0", "private": true, "scripts": { "serve": "vue-cli-service serve", "build": "vue-cli-service build" }, "dependencies": { "ant-design-vue": "^1.7.4", "axios": "^0.21.1", "echarts": "^5.0.2", "nprogress": "^0.2.0", "vue": "^2.6.11", "vue-json-excel": "^0.3.0", "vue-router": "^3.2.0", "vuex": "^3.4.0" }, "devDependencies": { "@vue/cli-plugin-router": "~4.5.0", "@vue/cli-plugin-vuex": "~4.5.0", "@vue/cli-service": "~4.5.0", "vue-template-compiler": "^2.6.11" }, "browserslist": [ "> 1%", "last 2 versions", "not dead" ] } ================================================ FILE: web-app/public/index.html ================================================ 物流管理系统
================================================ FILE: web-app/src/App.vue ================================================ ================================================ FILE: web-app/src/api/admin.js ================================================ import service from "../utils/request"; export function IsInit() { return service({ url: '/admin/hasInit', method: 'get', }) } export function Init(data) { return service({ url: '/admin/init', method: 'post', data: data }) } export function DeleteAdmin(id) { return service({ url: '/admin?id=' + id, method: 'delete', }) } export function FindAllAdmin() { return service({ url: '/admin', method: 'get', }) } export function SaveAdmin(data) { return service({ url: '/admin', method: 'post', data: data }) } export function AdminSendEmail(email) { return service({ url: '/admin/sendEmail?email=' + email, method: 'get' }) } export function AdminLogin(type, data) { return service({ url: '/admin/login?type=' + type, method: 'post', data: data }) } ================================================ FILE: web-app/src/api/commodity.js ================================================ import service from "../utils/request"; export function FindAllCommodity() { return service({ url: '/commodity', method: 'get' }) } export function SearchCommodity(name) { return service({ url: '/commodity/search/' + name, method: 'get' }) } export function SaveCommodity(data) { return service({ url: '/commodity', method: 'post', data: data }) } export function DeleteCommodityById(id) { return service({ url: '/commodity?id=' + id, method: 'delete' }) } ================================================ FILE: web-app/src/api/distribution.js ================================================ import service from "../utils/request"; export function FindAllDistribution() { return service({ url: '/distribution', method: 'get' }) } export function FindAllCanUse() { return service({ url: '/distribution/can', method: 'get' }) } export function SaveDistribution(data) { return service({ url: '/distribution', method: 'post', data: data }) } ================================================ FILE: web-app/src/api/driver.js ================================================ import service from "../utils/request"; export function FindAllDriver(){ return service({ url: '/driver', method: 'get' }) } export function SaveDriver(data) { return service({ url: '/driver', method: 'post', data: data }) } export function DeleteDriverById(id){ return service({ url: '/driver?id=' + id, method: 'delete' }) } ================================================ FILE: web-app/src/api/employee.js ================================================ import service from "../utils/request"; export function FindAllEmployee(){ return service({ url: '/employee', method: 'get' }) } export function SaveEmployee(data) { return service({ url: '/employee', method: 'post', data: data }) } export function DeleteEmployeeById(id){ return service({ url: '/employee?id=' + id, method: 'delete' }) } ================================================ FILE: web-app/src/api/inventory.js ================================================ import service from "../utils/request"; export function AnalyzeCommodity(type) { return service({ url: '/inventory/analyze?type=' + type, method: 'get' }) } export function FindAllInventory(id) { return service({ url: '/inventory/warehouse/' + id, method: 'get' }) } export function InAndOut(type, data) { return service({ url: '/inventory/' + type, method: 'post', data: data }) } export function FindRecordByWarehouse(id) { return service({ url: '/inventory/record/warehouse/' + id, method: 'get' }) } export function DeleteInventoryById(id) { return service({ url: '/inventory?id=' + id, method: 'delete' }) } ================================================ FILE: web-app/src/api/role.js ================================================ import service from "../utils/request"; export function FindAllRole(){ return service({ url: '/role', method: 'get' }) } ================================================ FILE: web-app/src/api/sale.js ================================================ import service from "../utils/request"; export function FindAllSale() { return service({ url: '/sale', method: 'get' }) } export function SearchCompany(name) { return service({ url: '/sale/search/' + name, method: 'get' }) } export function SaveSale(data) { return service({ url: '/sale', method: 'post', data: data }) } ================================================ FILE: web-app/src/api/vehicle.js ================================================ import service from "../utils/request"; export function FindAllVehicle(){ return service({ url: '/vehicle', method: 'get' }) } export function SaveVehicle(data) { return service({ url: '/vehicle', method: 'post', data: data }) } export function DeleteVehicleById(id){ return service({ url: '/vehicle?id=' + id, method: 'delete' }) } ================================================ FILE: web-app/src/api/warehouse.js ================================================ import service from "../utils/request"; export function FindAllWarehouse() { return service({ url: '/warehouse', method: 'get' }) } export function SaveWarehouse(data) { return service({ url: '/warehouse', method: 'post', data: data }) } export function DeleteWarehouseById(id) { return service({ url: '/warehouse?id=' + id, method: 'delete' }) } ================================================ FILE: web-app/src/components/InventoryRecords.vue ================================================ ================================================ FILE: web-app/src/layout/Aside.vue ================================================ ================================================ FILE: web-app/src/layout/Footer.vue ================================================ ================================================ FILE: web-app/src/layout/Header.vue ================================================ ================================================ FILE: web-app/src/layout/Index.vue ================================================ ================================================ FILE: web-app/src/layout/Main.vue ================================================ ================================================ FILE: web-app/src/main.js ================================================ import Vue from 'vue' import App from './App.vue' import router from './router' import store from './store' import Antd from 'ant-design-vue' import 'ant-design-vue/dist/antd.css' import JsonExcel from 'vue-json-excel' Vue.component('downloadExcel', JsonExcel) Vue.config.productionTip = false Vue.use(Antd) new Vue({ router, store, render: function (h) { return h(App) } }).$mount('#app') ================================================ FILE: web-app/src/router/index.js ================================================ import Vue from 'vue' import VueRouter from 'vue-router' import store from '../store' import routes from "@/router/routes" import NProgress from 'nprogress' import 'nprogress/nprogress.css' //顶部进度条样式 NProgress.configure({ showSpinner: false, speed: 800, }); Vue.use(VueRouter) const router = new VueRouter({ mode: 'history', base: process.env.BASE_URL, routes }) //路由卫士 router.beforeEach((to, from, next) => { NProgress.start() to.meta.auth && !store.state.user.token ? next("/login") : next() }) router.afterEach(() => { NProgress.done() }) export default router ================================================ FILE: web-app/src/router/routes.js ================================================ import Layout from '@/layout/Index' const routes = [ //公共布局下的路由 { path: '/', component: Layout, children: [ { path: "", redirect: "/commodity", meta: {auth: true} }, { path: 'commodity', component: () => import('@/views/basics/Commodity'), meta: {auth: true} }, { path: 'company', component: () => import('@/views/basics/Company'), meta: {auth: true} }, { path: 'employee', component: () => import('@/views/basics/Employee'), meta: {auth: true} }, { path: 'warehouse', component: () => import('@/views/basics/Warehouse'), meta: {auth: true} }, { path: 'warehouse/:id', component: () => import('@/views/basics/Details'), meta: {auth: true} }, { path: 'driver', component: () => import('@/views/transport/Driver'), meta: {auth: true} }, { path: 'vehicle', component: () => import('@/views/transport/Vehicle'), meta: {auth: true} }, { path: 'sale/record', component: () => import('@/views/sale/Record'), meta: {auth: true} }, { path: 'sale/create', component: () => import('@/views/sale/Create'), meta: {auth: true} }, { path: 'delivery/create', component: () => import('@/views/delivery/Create'), meta: {auth: true} }, { path: 'delivery/list', component: () => import('@/views/delivery/List'), meta: {auth: true} }, { path: 'analyze/in', component: () => import('@/views/analyze/In'), meta: {auth: true} }, { path: 'analyze/out', component: () => import('@/views/analyze/Out'), meta: {auth: true} }, { path: 'security', component: () => import('@/views/system/Security'), meta: {auth: true}, }, { path: 'admin', component: () => import('@/views/system/Admin'), meta: {auth: true}, }, { path: 'role', component: () => import('@/views/system/Role'), meta: {auth: true}, }, //403 { path: '403', component: () => import('@/views/error/403'), meta: {auth: true} }, //404 { path: '404', component: () => import('@/views/error/404'), meta: {auth: true} }, //500 { path: '500', component: () => import('@/views/error/500'), meta: {auth: true} }, ] }, //登录页 { path: '/login', name: 'Login', component: () => import('@/views/Login'), meta: {auth: false} }, //初始化 { path: '/init', name: 'Init', component: () => import('@/views/Init'), meta: {auth: false} }, //404 { path: "*", redirect: '/404' } ] export default routes ================================================ FILE: web-app/src/store/index.js ================================================ import Vue from 'vue' import Vuex from 'vuex' import user from './modules/user' Vue.use(Vuex) export default new Vuex.Store({ modules: { user } }) ================================================ FILE: web-app/src/store/modules/user.js ================================================ const state = { token: localStorage.getItem("token"), details: JSON.parse(localStorage.getItem("user")) } const getters = {} const mutations = { saveToken(state, token) { state.token = token localStorage.setItem("token", token) }, saveLoginUser(state, user) { state.details = user localStorage.setItem("user", JSON.stringify(user)) }, userLogout(state) { state.details = null state.token = null localStorage.removeItem("token") localStorage.removeItem("user") } } const actions = {} export default { namespaced: true, state, getters, mutations, actions } ================================================ FILE: web-app/src/utils/request.js ================================================ import request from "axios" import {message} from 'ant-design-vue' import router from '../router/index' const token = localStorage.getItem("token") const service = request.create({ baseURL: 'http://localhost:8080/api', timeout: 50000, headers: {'Authorization': token} }); service.interceptors.response.use( response => { const res = response.data; //判断response状态 if (!res.status) message.error('请求错误: ' + res.msg) if (res.code === 403) router.push("/403") return res }, error => { message.error(error) router.push('/500') return Promise.reject(error) } ); export default service ================================================ FILE: web-app/src/views/Init.vue ================================================ ================================================ FILE: web-app/src/views/Login.vue ================================================ ================================================ FILE: web-app/src/views/Test.vue ================================================ ================================================ FILE: web-app/src/views/analyze/In.vue ================================================ ================================================ FILE: web-app/src/views/analyze/Out.vue ================================================ ================================================ FILE: web-app/src/views/basics/Commodity.vue ================================================ ================================================ FILE: web-app/src/views/basics/Company.vue ================================================ ================================================ FILE: web-app/src/views/basics/Details.vue ================================================ ================================================ FILE: web-app/src/views/basics/Employee.vue ================================================ ================================================ FILE: web-app/src/views/basics/Warehouse.vue ================================================ ================================================ FILE: web-app/src/views/delivery/Create.vue ================================================ ================================================ FILE: web-app/src/views/delivery/List.vue ================================================ ================================================ FILE: web-app/src/views/error/403.vue ================================================ ================================================ FILE: web-app/src/views/error/404.vue ================================================ ================================================ FILE: web-app/src/views/error/500.vue ================================================ ================================================ FILE: web-app/src/views/sale/Create.vue ================================================ ================================================ FILE: web-app/src/views/sale/Record.vue ================================================ ================================================ FILE: web-app/src/views/system/Admin.vue ================================================ ================================================ FILE: web-app/src/views/system/Role.vue ================================================ ================================================ FILE: web-app/src/views/system/Security.vue ================================================ ================================================ FILE: web-app/src/views/transport/Driver.vue ================================================ ================================================ FILE: web-app/src/views/transport/Vehicle.vue ================================================